- 变更规模:新增 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/ 知识文件,按口径入库)
14 KiB
接续包 · 会话机制 → 合并为一个技能包(2026-10-01)
§0 状态(最新行在最上)
时间 会话 发生了什么 2026-10-01 14:59 会话机制合并包-任务234🔴 本包已续期 ⇒ 后续一律看 接续包_会话机制合并技能包-任务234_20261001.md(任务 2/3/4 + 归档)。硬档停手(日志 8.02 MiB)。🔴 推翻本包 §3.4 第 4 条:转发壳不可行(8/9 脚本按自身位置推根 +settings.json钩子条目无env字段)⇒ 改用包内roots.env外置根目录(已落地 8+1 份补丁,语法全过)。沙箱验收 5 项过 4 项。2026-10-01 14:2x 会话机制合并包-任务0✅ 任务 1 完成:新包 ~/.workbuddy/skills/session-mechanism/已建成 —— 27 个文件全部cp拷入(⛔ 零mv),py_compile/ Git-Bashbash -n/json.loads全通过(失败 0),且与源逐字节 md5 一致;清单见包内references/manifest.md。旧路径全部原样可用。2026-10-01 14:2x 会话机制合并包-任务0✅ 任务 0 完成:正式方案落盘 $WS/交付物/会话机制合并技能包-方案-20261001.md—— 方案对比 A(单一实现+转发壳,建议)/ B(mv 全改引用,淘汰)/ C(只做配置器,需求未达淘汰)/ D(硬链接,淘汰)+ 红线 R1–R11 逐条自查(含 R5 权限影响评估、R11 十维自查、R7 拷贝清单)+ 执行顺序与验收 + 风险回滚。2026-10-01 14:2x 会话机制合并包-任务0🔴 更正一处错数: $WS/.workbuddy/collab/非空(实测 9 文件 + 4 子目录)⇒ 运行态源在collab/而非tools/;误判成因=ls -1 目录A 目录B | sort把两目录输出合并排序。已在方案 §2.5 回填 + 踩坑记录。2026-10-01 14:2x 会话机制合并包-任务0🔴 下一棒 = 任务 2(写 install.py);⛔ 开工前先只读取证「WorkBuddy 是否读~/.workbuddy/AGENTS.md」。⚠️ 本会话已反序释放锁 ⇒ 接续会话须自己重抢(机制层=独占,⛔ 不带--domains)。2026-10-01 13:59 334140d1⛔ 硬档停手:本会话诊断日志 8.03 MiB / 10 MiB(≈53 次调用余额)⇒ 按 §G 硬档只做到「盘点」就落包停手。本轮未改任何机制文件(零改动、零风险)。 2026-10-01 13:59 334140d1已持全局独占锁;本包写完即反序释放 ⇒ 接续会话须自己重新抢(机制层,走独占,⛔ 不带 --domains)。本包 §3 = 已取证的现状(省掉重跑盘点);§4 = ⛔ 不要重做清单;§2 = 任务,一次只做一件。 🔴 任务 0 / 1 已由
会话机制合并包-任务0完成 ⇒ 接续会话直接从 §2 任务 2 开始,⛔ 不要重做 0 / 1。
§1 用户原话与目标(2026-10-01 13:5x)
「整合 会话机制相关技能为一个skill包 , 在将多会话协作机制 也整合到这个技能包,要求换一台电脑的 workbuddy 上运行也能自动完成配置,让所有会话遵循 会话机制,并且可独立使用 多会话协作」
拆成四条硬要求:
- 一个技能包装下「会话机制」相关技能;
- 多会话协作机制也并进同一个包;
- 换一台电脑 ⇒ 跑起来能自动完成配置(不是手抄 14 处钩子、不是手改绝对路径);
- 所有会话遵循会话机制(全局生效)+ 多会话协作可独立使用(不装也行、装了不依赖旁件)。
§2 待做任务(🔴 一次只做一件,做完即停)
任务 0 · 定界与设计落盘(本任务已完成一半 ⇒ 见 §3.4 已定项;剩下是把方案写成正式文档)
1、把 §3.4 的「已定项」写成 $WS/交付物/会话机制合并技能包-方案-20261001.md(方案对比表 ≥2 项 + 利弊 + 建议,按 §1.5 B 阶段 2)。
2、红线 R1–R11 逐条自查,尤其 R5(权限影响)与 R9(锁)。
任务 1 · 建包骨架(先读 §3.4 已定项,⛔ 不要另起设计)
1、建 ~/.workbuddy/skills/session-mechanism/,按 §3.4 的目录表放文件。
2、机制脚本用 cp 从现址拷入(⛔ 不 mv)—— 保证任何时刻旧路径都还能用。
3、拷完逐个 py_compile / bash -n,并算 md5 记进包的 references/manifest.md。
任务 2 · 写 install.py(本包的核心交付物 = 「自动完成配置」)
1、按 §3.4 第 5 条实现:钩子接线(幂等 + 备份 + --dry-run + --uninstall)+ 工作区初始化 + --verify。
2、⛔ 不许硬编码 Python 路径(一律 sys.executable)、⛔ 不许硬编码盘符(配置目录按 CODEBUDDY_CONFIG_DIR 推导)。
任务 3 · 本机实测(⛔ 不许只测 happy path)
1、--dry-run 先看 diff;再真装;再 --verify。
2、必测:跑两遍(幂等 ⇒ 第二遍零改动)/--uninstall 后 settings.json 与备份逐字节同/钩子仍能 rc=0。
任务 4 · 文档与收口
1、写包内 SKILL.md(两段可分别加载:会话机制 / 多会话协作)、references/deploy.md(换机器)。
2、07-scripts/ 转发壳(见 §3.4 第 4 条)—— 这一件有 blast radius,放最后做。
3、三层沉淀(技能/教训/记忆)+ 反序释放锁。
§3 已取证的现状(🆕 2026-10-01 13:5x 实测,⛔ 不要再重跑盘点)
3.1 「会话机制」的家当散在三个互不相干的地方
| 落点 | 装了什么 | 规模 |
|---|---|---|
~/.workbuddy/skills/multi-session-collab/ |
协作机制本体:collabd.py 177 KB / board.py 67 KB / guard.py / selftest.py + references/{architecture 64 KB, deploy, pitfalls, taskgraph} + assets/ |
14 文件 |
D:/github/dsh_shenxian/dsh-server-docs/07-scripts/ |
宿主钩子 + 锁:handoff-guard.sh 34 KB、preflight-lock.sh、handoff-status.py、op-lock.sh、lock-guard-hook.py、session-log-guard.py、stop-dialog-guard.py、skill-load-guard.py、bash-output-guard.py(+与机制无关的 docs-* 共 29 文件) |
9 个属机制 |
$WS/.workbuddy/collab/+.workbuddy/tools/ |
运行态:collabd.config.json、goalctl.py、wake-session.py、board_ext.py、wb-result-hook.py、stop-collab.py |
26 文件 |
⚠️ 这就是合并要解决的第一性问题:机制本体在 skill、钩子与锁在文档库、运行态在工作区 —— 换机器要同时搬三处。
3.2 宿主钩子接线现状(settings.json 实测 · 共 14 处 · 指向 3 个不同目录)
| 事件 | matcher | 指向 |
|---|---|---|
| PostToolUse | (空) | 07-scripts/session-log-guard.py(-S 调用) |
| PreToolUse | ^AskUserQuestion$ |
ai1net-decision-laya/bridge/decision_bridge.py |
| PreToolUse | ^Bash$ |
$WS/.workbuddy/tools/wb-result-hook.py |
| PreToolUse | Write|Edit |
07-scripts/lock-guard-hook.py |
| PreToolUse | Bash|Read |
07-scripts/bash-output-guard.py |
| SessionEnd | (空)×2 | decision_bridge.py / wb-result-hook.py |
| SessionStart | startup|resume |
07-scripts/lock-guard-hook.py |
| SessionStart | (空) | decision_bridge.py |
| UserPromptSubmit | (空)×5 | decision_bridge.py/wb-result-hook.py/stop-dialog-guard.py/skill-load-guard.py/session-log-guard.py(-S) |
⚠️ 全部硬编码 python 绝对路径(E:\ProgramData\.workbuddy\binaries\python\versions\3.13.12\python.exe)⇒ 换机器必碎。
⚠️ decision_bridge.py 属另一条线(ai1net-decision-laya),⛔ 不并入本包。
3.3 引用面(搬动前的 blast radius 实测)
handoff-guard 被引用:文档库 5 处 / 工作区 2 处;preflight-lock 2/1;op-lock 3/0;lock-guard-hook 3/0;session-log-guard 3/0;stop-dialog-guard 6/0;skill-load-guard 4/0;bash-output-guard 5/1。
⇒ 不能直接 mv 走(会静默弄坏文档库的锁与文档检查链)。
3.4 🔴 已定项(本轮已拍板 · 接续会话照此执行,⛔ 不要重新设计)
- 包名与落点:
session-mechanism(=~/.workbuddy/skills/session-mechanism/)。理由:用户原话就是「会话机制」,不与既有multi-session-collab抢名。 - 包内目录(草案):
SKILL.md # 总入口;两段可分别加载:「会话机制」/「多会话协作」 install.py # 🔴 自动配置(本包核心) references/{architecture,deploy,pitfalls,taskgraph,collab,rules,forensics,manifest}.md scripts/hooks/ # 宿主钩子 6 份(自包含,⛔ 不再依赖 07-scripts) scripts/lock/ # handoff-guard.sh / preflight-lock.sh / handoff-status.py scripts/collab/ # collabd.py / board.py / board_ext.py / goalctl.py / wake-session.py / guard.py / selftest.py scripts/forensics/ # proc-parent.py assets/ # board.html / design-tokens.css - 哪两个技能并入:
multi-session-collab(机制本体)+workbuddy-session-forensics(会话取证)。 ⚠️agent-operating-rules判为「不并」(它是跨项目「作业总规矩/说话方式」层,被大量模板引用)⇒ 只在包内 SKILL.md 里声明依赖。 🔴 这一条是有取舍的判断 ⇒ 留给用户在任务 0 时一句话推翻(推翻成本低:多拷 4 个 references)。 - 单一实现源 + 转发壳(解法 = 唯一实现 + 零 blast radius):机制脚本的唯一实现放包内;文档库
07-scripts/<同名>改成 3 行转发壳(exec包内那份),⛔ 不删原件、⛔ 不动物流。 ⚠️ 理由:pitfalls明写「同名的两份实现是最难查的故障」(实测两份同时跑给出互相矛盾读数)。 install.py五项职责:① 自解析(sys.executable+CODEBUDDY_CONFIG_DIR)② 钩子接线:声明表驱动(14 处 → 一张表,decision_bridge那条排除在外)、先删自己旧条目再插、写前备份、--dry-run、--uninstall逐字节还原 ③ 工作区初始化:--workspace <path>⇒ 由collabd.config.example.json生成collabd.config.json(路径按本机推导)+ 写工作区规则锚 ④--verify:每个钩子跑空载荷须 rc=0 +collabd.py --where+selftest.py⑤ 全部写操作写install.log。- 「所有会话遵循」的注入面:已确认可用的是 ① 全局钩子(
settings.json全局生效)② 技能全局可见 ③~/.workbuddy/MEMORY.md(用户级记忆,跨会话注入)。 ⚠️ 未取证:WorkBuddy 是否读~/.workbuddy/AGENTS.md——app.asar.unpacked/cli/dist/codebuddy-headless.js与codebuddy-lite-wb.mjs里出现AGENTS.md字样 ⇒ 任务 2 开工前先只读取证(⛔ 别猜)。
3.5 本轮没有改任何文件
只新增:本包($WS/接续包_会话机制合并技能包_20261001.md)+ tmp/inv-20261001/(两个只读盘点脚本)+ 今日日志一段。⛔ 机制文件零改动 ⇒ 无回滚负担。
§4 ⛔ 不要重做 / 撤回清单
- ⛔ 不要重跑全库盘点:§3.1–3.3 就是实测结果(文件数 / 字节 / 钩子 14 处 / 引用面),直接引用。
- ⛔ 不要
mv机制脚本,一律cp后再改接线;移除只在「转发壳验完」之后。 - ⛔ 不要动
decision_bridge.py所在的线(ai1net-decision-laya)—— 它只是恰好出现同一张钩子表里。 - ⛔ 不要改
settings.json而不备份:本目录已有 6 份.bak-*先例,命名沿用settings.json.bak-<用途>-<日期>。 - ⛔ 不许报未经实测的系数(延续上一包 §4):本包只允许写「本轮实测到的字节数 / 计数」。
- ⛔ 不要动自动化排期(用户明令;唯一例外=本包自己登记的那条接续会话,已完成)。
- ⛔ 不要在会话里起常驻后台任务(会把会话日志推过 10 MiB ⇒ 界面静默哑掉)。
- ⛔ 不要为验收烧调用次数:本会话就是因为跑到 8.03 MiB 才停的手,接续会话预算 ≈ 53 次调用 ⇒ 盘点类动作一律复用 §3。
§5 验收判据(任务 3 逐条打钩,⛔ 不许「本机改完了」当交付)
install.py --dry-run打印的 settings.json diff 与预期一致;真装后再跑一遍 ⇒ 零改动(幂等)。- 装机后立刻
--verify:6 个钩子空载荷全 rc=0;collabd.py --where路径正确;selftest.pyPASS / FAIL 0。 --uninstall后settings.json与装前备份逐字节相同(cmp通过)。- 转出路径验一次:把包拷到另一个目录再跑
install.py⇒ 钩子指向新路径且--verify全绿(=「换电脑」的最小可复现)。 - 文档库
07-scripts/转发壳:手动调handoff-guard.sh --status⇒ 行为与原型一致。
§6 关键路径与命令
PY = E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe
WS = E:/ProgramData/AIProject/ai1net-dsh-server
DOC = D:/github/dsh_shenxian/dsh-server-docs
技能目标目录 = E:/ProgramData/.workbuddy/skills/session-mechanism/
锁:bash "D:/github/dsh_shenxian/dsh-server-docs/07-scripts/handoff-guard.sh" --claim-exec "<会话名>" # 机制层=独占,⛔ 不带 --domains
释放:--release → --release-exec "<会话名>"
收尾:反序释放锁 + 三层沉淀(技能 / 教训 / 记忆)+ 提交边界(未明确要求 ⇒ 不 commit/push)。