Repository navigation
v5.3.0 — 保活 + 交互代理
本页会随勘误就地更新。规范全文以
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.run403 / 加白名单后 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 环境变量。