- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次) - .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…), 目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪 - .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/) - .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*) - .gitignore 补:备份件(*.bak-*) - 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
3.5 KiB
3.5 KiB
落地清单 · 唤醒回路(让程序把主会话叫起来)
⛔ 已退役(2026-09-30)
本件(落地清单·唤醒回路)的内容已并入 →
E:/ProgramData/.workbuddy/skills/multi-session-collab/references/architecture.md(协作机制的唯一权威文档) ⇒ ⛔ 别再引用本件做判断(曾因它把旧结论当现状);本件只作历史沿革留档,⛔ 已不再维护。 依据:用户 2026-09-29 定案「只有一份架构文档」「一切迭代都在 skill 内」「⛔ 不在工作区或别处另开平行文档」。
2026-09-29 · 半页。只讲一件事:怎么让常驻程序在"有活"时把主会话叫起来。 用户已确认架构(hook 驱动"继续",⛔ 不轮询);本文只补最后一环,并把它涉及的权限面摆明。
一、回路全貌(三段,前两段已就位)
① 协作会话收尾 ──SessionEnd 钩子──→ 写 gate-done.stamp ✅ 已实现
② 程序(常驻)读队列,一次一条:
有 claim ⇒ gate=busy ⇒ ⛔ 不放行(="监控后台停") ✅ 已实现(实测正确)
gate=free ∧ 有队首 ⇒ 写 NEXT.md(只此一条) ✅ 已实现
③ 🔴 **缺这一环**:NEXT.md 出现时,**把主会话叫起来**
⇒ 程序开不了会话;唯一落点 = **gateway 定时任务接口**(排一次一次性任务)
二、权限影响评估(三点,据实)
| 项 | 评估 |
|---|---|
| 新增能力 | 程序获得「用网关口令创建一个一次性定时任务」的能力 ⇒ 这是唯一的写操作(其余仍全程只读) |
| 为什么必须 | ⛔ 钩子开不了会话;⛔ 程序开不了会话;"事件驱动地叫醒"除了排期没有第二条路 |
| 风险与压制 | ① 可无限排 ⇒ 用三重限流压(见三)② 隐形执行者 ⇒ 技能红线要求"纳入监管视野" ⇒ 每一次唤醒都追加登记到 tmp/supervise-inbox/wakeups.jsonl,且可一键列出/删除(wakeups 里记 task id,删除走同一个 gateway 接口)③ 口令只进程内使用,⛔ 不落盘、⛔ 不进日志 |
三、实现(一次做完,⛔ 不边改边重启)
程序 collabd.py 增一个函数 wake_main_session(),四道闸门全满足才动手:
| 闸门 | 条件 |
|---|---|
| ① 有活 | NEXT.md 存在 |
| ② 闸开 | gate == free |
| ③ 去重 | 本次 NEXT.md 的内容哈希 ≠ 上次唤醒时的哈希(同一件只叫一次) |
| ④ 限流 | 距上次唤醒 ≥ 3 分钟 |
⇒ 满足则:POST /api/v1/scheduled-tasks(recurring:false,prompt=主会话轮+"读 NEXT.md 只做那一条;收尾时若 NEXT.md 还在才接续"),并把 {ts, taskId, hash} 追加进 wakeups.jsonl。
终止:任务图全 done ⇒ 不再唤醒;遇阻 ⇒ 写 NEED-USER.md 并明确喊「需用户介入」。
四、需要你点头的一条
授权程序使用网关口令创建"唤醒任务"(唯一写操作;三重限流;每次登记可列出/可删;口令不落盘)。
不点头的替代:保留"由收尾会话顺手排一次"(纯白名单内,但依赖每个棒的 prompt 都带这条 ⇒ 更脆、更慢)。 ⚠️ 我的倾向:点头走程序唤醒 —— 因为你要的是"程序把主会话叫起来",而这是唯一能做到的形态;替代方案本质上仍是"靠规则提醒"。