Skip to content

v5.5.0 — 云端任务调度

Choose a tag to compare

@MirHuang666 MirHuang666 released this 09 Nov 11:05
· 225 commits to main since this release

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

范围

这一版只回答一个问题:活儿是谁记的、谁派的、谁接了,能不能说清。

多端(电脑 / 手机 / 网页 / 别的模型)都能总结出待办。各记各的结果是两个人做同一件事,
或者都以为对方在做——这不是效率问题,是相互抹杀。所以分工写死:
生成归各端,登记与分发归服务端;本地不留私有任务池。

任一端总结 ──► 上交(离线先落 outbox)──► 服务端只做三件事
                                          合并 / 排序 / 匹配
                                              │
                          派给「最近报到过、能力匹配」的分身
                                              │
                                    ack ──► 执行 ──► done(带证据)
                                              │
                          超时未接手:expired → 改派(上限 3 次)→ failed + 告警

三条规则写死,不留「我觉得」:

  • 合并:标题归一相同,或 2-gram Jaccard ≥ 0.6 → 合成一条,source_ids 全留(丢了就不可回溯);
  • 排序:prio 1–10,同优先级先看依赖、再看创建时间;服务端只校正不发明;
  • 匹配:人的指令 > 能力标签 > 最近报到;能力不够的不派。

两个防坑设计:认领用文件锁 + 追加(抢不到就是 exit 1,不靠"应该不会撞");
状态只追加不覆盖(ops/tasks.jsonl 与 dispatch.jsonl 同构),任何一条都能倒查回去。

落地

命令 / 接口 作用
persona_tasks.py submit --offline 上交;离线落 ops/outbox.jsonl
flush / merge / pool / show / ack / done 补交、合并、看池子、追溯、认领、收工
serve --port 8787 POST /tasks · GET /tasks?agent= · POST /tasks/<id>/ack

HTTP handler 只有 persona_tasks._Handler 一处,serve() 与自检都从 make_server() 起。

证据

① 不重复:两进程抢同一条 → 退出码 [0, 1]
② 不丢 :outbox 1 条 → flush 后池子 1→2
③ 不卡 :换人次数用满 → failed + 告警
④ 可回溯:show 能追到 source_ids 与提出者
⑤ 合并 :同义标题 → 合并,来源 ['s-1905-07','s-1905-08','s-2']

三接口(随机空闲端口):POST /tasks → 201;GET /tasks?agent= → 200;
POST /tasks/<id>/ack 第一次 200、第二次 409;同标题重提 → 200 且同 id(幂等)。

边界

  • 只绑 127.0.0.1,不开公网;跨机靠文件同步或隧道,不靠这个端口;
  • 托盘「任务池」只读视图还没做(B83):现在看池子要用 pool 命令;
  • 超时改派仍交给已有的 persona_report.py reap,本模块不重复实现一套回收逻辑;
  • 任务记录进 ops/,不进 memory/——任务是活儿,不是经历。

修订记录

2026-11-09 首版。同日从「设计成文」推进到「已落地」:新增 persona_tasks.py;
HTTP handler 抽成一处(第一版自检里复制过一份,已删)。