Files

50 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

# 落地清单 · 唤醒回路(让程序把主会话叫起来)
> ## ⛔ 已退役(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 都带这条** ⇒ 更脆、更慢)。
⚠️ **我的倾向**:**点头走程序唤醒** —— 因为你要的是"程序把主会话叫起来",而这是唯一能做到的形态;替代方案本质上仍是"靠规则提醒"。