Skip to content

v5.3.0 — 保活 + 交互代理

Choose a tag to compare

@MirHuang666 MirHuang666 released this 09 Nov 09:56
· 50 commits to main since this release

本页会随勘误就地更新。规范全文以 main 为准。

范围

新增 tools/persona/(七个脚本)与 docs/INTERACT_SPEC.md。这一版只回答一个问题:唤醒之后到底发生了什么。

  • persona_wake.py 闹钟:登记必须带 purpose(无 purpose 退出码 2);到点先摘一份总索引简讯
    (ops/wake-brief.json),再执行 purpose(环境变量 PERSONA_PURPOSE / PERSONA_BRIEF)、
    替 agent 报到(read_index=true)。
  • persona_report.py + persona_dispatch.py 派发:两道门——最近 600 秒报到过(否则 2)、
    报到时读过总索引(否则 3);reap 把超时 pending 标 expired 并改派给醒着的分身;
    台账 append-only,原记录不覆盖。重试有上限:换 3 次仍没人接就标 failed 并写
    ops/alerts.jsonl——没有上限的改派是另一种死循环,任务一直转手、看起来永远「处理中」。
  • persona_master.py 总索引速览(人读 / --json / --pending)。
  • persona_proxy.py 交互代理:12 个动词、只绑 127.0.0.1、X-Persona-Token、逐次审计;
    sys.run 默认全拒,白名单在 ops/proxy-allow.json。协议见 docs/INTERACT_SPEC.md。
  • persona_keepalive.py 保活:进程查询三态(在跑 / 没在跑 / 查不了)。默认只报不拉
    (autostart: false):进程该不该活归它自己的启动项/运行时管,保活只负责「看得见」;
    要拉得在目标里显式写 true。
  • selftest.py 自检:临时库,真跑。
  • persona_todo.py 待办备忘:把 BACKLOG 摊成 续接\待办备忘.md(等你拍板 / 我可做两段)。
  • 交接包在「指针」前固定输出开工三步:读设定 / 读总索引 / 认领检查。

守护进程接三个定时任务(wake / reap / proxy),保活并入已有的 agent 任务。
一条心跳成立:闹钟 → 摘总索引简讯 → 执行 purpose → 报到(已读索引)→ 派发(两道门)→ 超时回收/改派。

证据

  • python tools/persona/selftest.py → PASS 36 / FAIL 0(临时库,不碰真数据):
    总索引 3 条来源倒序;无 purpose 登记退出码 2;到点触发写 index_total=3 的简讯并注入
    PERSONA_PURPOSE;派发两道门分别 3 / 2;过期记录标 expired 并改派给 rg2,原行未被覆盖;
    超过重试上限标 failed、不再改派、alerts.jsonl 出现 dispatch_failed;
    代理 11 项:越界 403 / 未知动词 404 / 未授权 sys.run 403 / 加白名单后 200 / 错 token 401,
    审计 9 行且不含 token。
  • 实机守护进程:wake OK 无到点闹钟、reap OK 无超时派发、proxy OK 代理在跑、agent OK 在跑;
    persona_proxy call health 返回 version=5.3.0;壳关掉后保活只报状态、不再自动开窗口。

边界

  • 代理只绑 127.0.0.1,不做跨设备、不做公网,不当远程 shell;sys.run 默认全拒;
  • 进程查询在受限令牌下可能被过滤,故返回三态:查不了就不动手(看不见 ≠ 没在跑);
  • 告警只落盘(ops/alerts.jsonl),托盘红灯的取数留给 v5.4;
  • tools/ctxpack/persona_daemon.py 仍是本机私有部署件,接线写在 tools/persona/README.md 里,未整份入库。

修订记录

2026-11-09 首版。同日曾切 v5.3.1(重试上限)与 v5.3.2(保活只报不拉)两个补丁,
随后撤销并合并回本版——三个版本号讲的是同一件事,拆开只会让读者做版本拼图;
两个 tag 与 Release 已删除。顺手修:persona_master 读 L1.jsonl 遇 BOM 整行丢失(改 utf-8-sig);
persona_wake 的 --run 补 cwd 与 PERSONA_BRIEF 环境变量。