v0.8.0.zh.md
docs/i18n/release-notes/v0.8.0.zh.md
Tesserae v0.8.0 — tesserae engine --all:一个引擎服务所有项目
<!-- translations:start -->
English · 한국어 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
发布日期 2026-06-13 · PyPI · GitHub release · pip install --upgrade tesserae==0.8.0
此前刷新引擎是每个项目一个进程:N 个已注册项目意味着 N 个需要启动、停止并记住的守护进程。v0.8.0 新增舰队模式 —— 一个进程让 ~/.tesserae/registry.json 中注册的所有项目保持新鲜。
tesserae engine --all
1. 一个进程,所有已注册项目
tesserae engine --all 为每个注册表条目监管一个项目级引擎单元,每个单元拥有自己的监视器和去抖动的重编译循环。注册或注销项目无需重启即可生效 —— 舰队每 10 秒与注册表调和(reconcile),重启注册根目录已迁移的单元,并复活线程已死亡的单元。磁盘上目录缺失的项目会以警告跳过,而不会让舰队失败。
现有的单项目模式不变:tesserae engine --project X 行为与以前完全一致,且舰队会拒绝重复接管已有独立引擎在运行的项目。
2. 舰队级编译节流
不同项目的并发编译共享相同的 LLM CLI 账号和速率限制。舰队通过共享信号量将其串行化 —— --compile-slots N(默认 1)限制整个舰队同时运行的编译数量。这与 v0.7.2 的项目级编译锁协同工作:flock 防御外部编译,信号量调度内部编译。
3. 健壮的生命周期,经过严苛评审
舰队在合并前经历了三轮对抗性评审(Codex,xhigh 推理强度);所有发现的问题均已修复并有测试覆盖:
- 关闭绝不抛弃编译。 单元线程为非守护线程,停止信号扩散会等待 —— 并周期性输出警告日志 —— 直到每个单元完成当前流水线,覆盖包括 reconcile 崩溃在内的所有退出路径。
- 无竞争的 pidfile。 全局
~/.tesserae/engine.pid在 sidecar flock 保护下以O_CREAT|O_EXCL获取,两个并发启动绝不会同时获胜 —— 且舰队只会移除仍由自己持有的 pidfile。没有flock的平台会拒绝自动回收陈旧 pidfile,并给出明确的手动删除提示而非冒竞争风险。 - 坏的注册表无法杀死舰队。 损坏的 JSON、不可读的文件、形状错误或 falsey 的
projects值、格式错误的单个条目,都会让当前单元继续运行(记录日志,下个轮询周期重试),而不是推倒一切。
4. CLI 细节
--all 与 --project 互斥;舰队模式下 --debounce 和 --interval 作用于每个单元;--once 按项目顺序执行一次有界刷新(CI 友好)。TESSERAE_REGISTRY 和 TESSERAE_FLEET_PIDFILE 可覆盖注册表和 pidfile 位置。
从 v0.7.2 升级
直接替换,无需修改配置。现有 tesserae engine 调用行为不变。要启用舰队模式,注册你的项目(tesserae projects / MCP 的 register_project 工具)并运行 tesserae engine --all。