Files
dsh_ai1net_server/交付物/落地清单-唤醒回路-20260929.md
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 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/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

51 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 落地清单 · 唤醒回路(让程序把主会话叫起来)
> ## ⛔ 已退役(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 都带这条** ⇒ 更脆、更慢)。
⚠️ **我的倾向**:**点头走程序唤醒** —— 因为你要的是"程序把主会话叫起来",而这是唯一能做到的形态;替代方案本质上仍是"靠规则提醒"。