Repository navigation
v5.5.0 — 云端任务调度
本页会随勘误就地更新。规范全文以
main为准。
范围
这一版只回答一个问题:活儿是谁记的、谁派的、谁接了,能不能说清。
多端(电脑 / 手机 / 网页 / 别的模型)都能总结出待办。各记各的结果是两个人做同一件事,
或者都以为对方在做——这不是效率问题,是相互抹杀。所以分工写死:
生成归各端,登记与分发归服务端;本地不留私有任务池。
任一端总结 ──► 上交(离线先落 outbox)──► 服务端只做三件事
合并 / 排序 / 匹配
│
派给「最近报到过、能力匹配」的分身
│
ack ──► 执行 ──► done(带证据)
│
超时未接手:expired → 改派(上限 3 次)→ failed + 告警
三条规则写死,不留「我觉得」:
- 合并:标题归一相同,或 2-gram Jaccard ≥ 0.6 → 合成一条,
source_ids全留(丢了就不可回溯); - 排序:
prio1–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 抽成一处(第一版自检里复制过一份,已删)。