host: phase2 daemon + health + auto-recovery (restore, recover, double-fork)
This commit is contained in:
1 parent
e9735d1fad
commit
240eaacf50
4 files changed
+434
-1
No files matched your search
@@ -168,6 +168,7 @@ turn 可以真正并发(不是轮流排队)。
|
||||
| 失败通知 | 失败只有 state 里的 status,跑完没人知道 | 已修:失败时写 host-run.log + 跑配置的 notify_command(本地 shell,模板 {task} {status});failures 命令列失败任务,doctor 列失败/缺失 worktree/open 评论 |
|
||||
| 多机器 state 冲突 | 锁只防同一台机器,多机器共享 state 文件会静默覆盖 | 部分修:state 加 version/last_writer/updated_at,保存时磁盘版本比加载时新就记 STATE-CONFLICT 日志并合并保留双方任务,不静默丢;真多机同步仍需中心服务(见下“没对齐”) |
|
||||
| 合并时提交缓存文件 | merge 的 git add -A 会把 __pycache__/*.pyc 也提交进主仓,下次合并被 .pyc 改动挡住 | 已修:merge 前清 worktree 的 __pycache__/*.pyc,主仓的 .pyc 改动先还原;单测覆盖 pyc 不入库 |
|
||||
| 守护进程 + 健康检查 + 自动恢复 | host.py 跑完就退出,不常驻;state 坏了静默当空 state;中断任务一直停在 running | 已修:daemon(双 fork 到 PID 1,循环 recover + run-due)、health(不跑模型,查二进制/配置/state/server/daemon)、restore-state(坏了从 .bak 恢复并留底)、recover(超过阈值的 running 标 interrupted,可用 run 续跑,不自动重跑模型回合) |
|
||||
| 边界:cwd、沙箱、审批、模型 | dispatch / turn 参数里定,见 `config.example.toml` | 已实测 |
|
||||
| 任务登记 | `host-state.json`:task -> thread/worktree/状态/diff;agent 状态本身仍在 CODEX_HOME,不另存第二份 | 已实测 |
|
||||
|
||||
@@ -190,6 +191,11 @@ turn 可以真正并发(不是轮流排队)。
|
||||
任务,但两台机器共享一个 state 文件仍不是 ChatGPT 云端
|
||||
那种中心同步——要真多机,得另起一个中心 state 服务,
|
||||
这不在本地 host 的范围里。
|
||||
- 守护进程的边界:daemon 本身也活不过 VM 平台回收(和
|
||||
微信桥 serve 一样,回收后要重拉),所以 VM 上更稳的定时
|
||||
仍是 Muse cron 定时调 run-due/health,而不是只靠 daemon
|
||||
或 crontab;daemon 适合常驻机器,VM 上是“会话内常驻 +
|
||||
回收后重拉”的定位。
|
||||
|
||||
## 开源没给到的(别指望照搬)
|
||||
|
||||
|
||||
Reference in new issue
Block a user