@mingmaple/dsh-handover 0.9.14 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +123 -92
  2. package/docs/migrate.md +52 -41
  3. package/docs/releases/0.9.12.md +2 -3
  4. package/docs/releases/0.9.14.md +1 -5
  5. package/docs/releases/0.9.22.md +34 -0
  6. package/docs/releases/1.0.0.md +33 -0
  7. package/docs/troubleshoot.md +230 -46
  8. package/package.json +74 -71
  9. package/scripts/behavior.mjs +398 -0
  10. package/scripts/blank-dsh.mjs +41 -25
  11. package/scripts/blank-smoke.mjs +278 -109
  12. package/scripts/check-docs.mjs +7 -0
  13. package/scripts/e2e-migration.mjs +2 -2
  14. package/scripts/office.mjs +3 -3
  15. package/scripts/portability.mjs +71 -0
  16. package/scripts/style-gate.mjs +571 -0
  17. package/src/client.js +1028 -955
  18. package/src/index.mjs +313 -142
  19. package/src/lib/absrefs.mjs +1 -1
  20. package/src/lib/api.mjs +18 -10
  21. package/src/lib/archive.mjs +1 -1
  22. package/src/lib/brief.mjs +8 -6
  23. package/src/lib/config.mjs +23 -8
  24. package/src/lib/consent.mjs +54 -1
  25. package/src/lib/docmap.mjs +140 -0
  26. package/src/lib/drift.mjs +1 -1
  27. package/src/lib/events.mjs +1 -1
  28. package/src/lib/facts.mjs +19 -12
  29. package/src/lib/gates.mjs +30 -6
  30. package/src/lib/global-task.mjs +69 -0
  31. package/src/lib/guide.mjs +81 -85
  32. package/src/lib/handover-io.mjs +69 -6
  33. package/src/lib/identity.mjs +330 -0
  34. package/src/lib/legacy.mjs +89 -0
  35. package/src/lib/lint.mjs +17 -13
  36. package/src/lib/manual.mjs +135 -59
  37. package/src/lib/mover.mjs +23 -19
  38. package/src/lib/names.mjs +14 -19
  39. package/src/lib/office.mjs +63 -15
  40. package/src/lib/pack-ops.mjs +11 -11
  41. package/src/lib/pathkey.mjs +24 -0
  42. package/src/lib/peer.mjs +4 -4
  43. package/src/lib/phase.mjs +8 -13
  44. package/src/lib/profile.mjs +1 -1
  45. package/src/lib/reminder.mjs +110 -0
  46. package/src/lib/role.mjs +9 -6
  47. package/src/lib/scaffold.mjs +68 -26
  48. package/src/lib/schedule.mjs +5 -6
  49. package/src/lib/session-create.mjs +3 -3
  50. package/src/lib/session-ops.mjs +80 -51
  51. package/src/lib/sessions.mjs +41 -3
  52. package/src/lib/sevenzip.mjs +10 -1
  53. package/src/lib/status.mjs +337 -176
  54. package/src/lib/succession.mjs +16 -16
  55. package/src/lib/system.mjs +364 -0
  56. package/src/lib/zstd-log.mjs +1 -1
  57. package/src/selftest.mjs +6 -6
  58. package/src/templates/Changelog.skeleton.md +3 -3
  59. package/src/templates/Charter.skeleton.md +13 -9
  60. package/src/templates/Handover.global.skeleton.md +20 -13
  61. package/src/templates/Handover.template.md +89 -0
  62. package/src/templates/Plan.skeleton.md +34 -0
  63. package/src/templates/Prompt_Templates.md +101 -20
  64. package/src/templates/Runtime_Manual.md +263 -122
  65. package/src/templates/System.skeleton.md +31 -0
  66. package/src/templates/Systems.global.skeleton.md +13 -0
  67. package/src/templates/rules/Delegation_Rules.md +45 -0
  68. package/src/templates/rules/Handover_Rules.md +46 -23
  69. package/src/templates/rules/Migration_Rules.md +7 -7
  70. package/src/templates/rules/Misc_Task_Standard.md +17 -10
  71. package/src/templates/rules/Writing_Rules.md +33 -16
  72. package/src/templates/standards/README.md +37 -0
  73. package/src/templates/standards//345/206/231/344/275/234/350/247/204/350/214/203/README.md +120 -0
  74. package/src/templates/standards//345/206/231/344/275/234/350/247/204/350/214/203//344/276/235/346/215/256_/350/256/272/346/226/207.md +389 -0
  75. package/src/tools/ho_backup.mjs +135 -0
  76. package/src/tools/ho_changelog.mjs +4 -4
  77. package/src/tools/ho_charter.mjs +7 -6
  78. package/src/tools/ho_checkpoint.mjs +36 -32
  79. package/src/tools/ho_docmap.mjs +239 -0
  80. package/src/tools/ho_gate.mjs +11 -5
  81. package/src/tools/ho_handover.mjs +61 -35
  82. package/src/tools/ho_office.mjs +46 -5
  83. package/src/tools/ho_profile.mjs +3 -3
  84. package/src/tools/ho_sessions.mjs +46 -26
  85. package/src/tools/ho_status.mjs +251 -0
  86. package/src/tools/ho_succeed.mjs +3 -3
  87. package/src/tools/ho_workspace.mjs +146 -42
  88. package/src/tools/peer.mjs +416 -0
  89. package/src/tools/ho_brief.mjs +0 -57
  90. package/src/tools/ho_diag.mjs +0 -87
  91. package/src/tools/ho_drift.mjs +0 -41
  92. package/src/tools/ho_init.mjs +0 -82
  93. package/src/tools/ho_pack.mjs +0 -38
  94. package/src/tools/ho_phase.mjs +0 -37
  95. package/src/tools/ho_snapshot.mjs +0 -104
  96. package/src/tools/ho_tokens.mjs +0 -57
  97. package/src/tools/peer_list.mjs +0 -37
  98. package/src/tools/peer_new.mjs +0 -75
  99. package/src/tools/peer_peek.mjs +0 -41
  100. package/src/tools/peer_rename.mjs +0 -31
  101. package/src/tools/peer_send.mjs +0 -52
  102. package/src/tools/peer_status.mjs +0 -46
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # dsh-handover
2
2
 
3
- DeepSeek Harness 插件,用于管理长会话的上下文水位、交接文档与压缩流程。插件按会话角色装配工具与提示段,只使用宿主公开的扩展点,不改动 DSH 本体。
3
+ DeepSeek Harness(DSH)插件,用于长会话的上下文水位管理、交接文档、行动计划与体系注册。插件只使用宿主公开的扩展点,不改动 DSH 本体。
4
+
5
+ 当前版本 1.0.0。支持 DSH 0.2.1-rc.2 至 0.3.0,不含 0.3.0 及其候选版;准确范围见 `package.json` 的 `engines.dsh`。
4
6
 
5
7
  ## 为什么需要
6
8
 
@@ -8,26 +10,93 @@ DeepSeek Harness 插件,用于管理长会话的上下文水位、交接文档
8
10
 
9
11
  本插件一定能很好地帮助你。来试试吧;不满意,随时关闭插件并删除即可。
10
12
 
11
- ## 功能
13
+ ## 核心机制
14
+
15
+ ### 任务流程
16
+
17
+ 层级一为轻量任务:单文件修改、局部改名、语法修复、格式化与内容读取。此类任务直接执行,不写计划,不做查证。
18
+
19
+ 用户说「讨论一下」,或助手已就流程询问过用户时,执行前须再确认。用户明确说「直接做」的除外。
20
+
21
+ 层级二为繁重任务:新增功能、多文件联动、重构、架构或接口变更。按以下顺序执行。
22
+
23
+ 1. 先判断纯窗口是否可能超过 40%,当前占用不计入。
24
+ 2. 在任务根写 `PLAN.md`:超过 40% 时计划里就安排拆子智能体,助手只做统筹与收尾;没超过就按自己完成来写。写完回看上下文核对。
25
+ 3. 子智能体按成本使用:单个自身亦需十余步、结论还要回读;只在单块 ≥15 步或需读 ≥10 个文件、确需隔离、且结果能机械验收时才派,并发 ≤3;能写成脚本再抽检的先写脚本;派几个、每个多少步写进计划随计划确认;同一批文件的下一道工序交回原作者续用(`send_message`),不另开。细则见 Charter §十一 与运行时手册 §12.4。
26
+ 4. 发现缺口时给出方案询问用户;优劣不明时并列全部方案。
27
+ 5. 用户确认后执行。
28
+
29
+ 子智能体提示词由助手放入规范文件地址与体系说明;插件不向其上下文注入内容。
30
+
31
+ 余量不足时先刷新交接,再请求压缩或换任。恢复后按「先读交接、再读计划、后执行」继续。
32
+
33
+ ### 水位与压缩
34
+
35
+ 水位 35% 与 50% 时,插件在本会话的工具结果末尾各追加 1 次提醒;不修改系统提示段、不生成用户消息、不独立成轮。
36
+
37
+ 35% 档的判断标准:完成剩余流程后,上下文占用不超过 45%;50% 档为不超过 55%。
38
+
39
+ 35% 后可压缩;85% 为硬上限。同一会话最多压缩 3 次,第 4 次须换任;额度用尽的判定先于水位。
40
+
41
+ 压缩须用户在设置页点击「授权压缩」,单次授权 5 分钟内有效。压缩在回合结束后执行,去向取 `resume`:`continue` 续跑,`wait` 不唤醒。
42
+
43
+ 压缩前刷新交接;压缩或换任后按「先读交接、再读计划、后执行」恢复。
44
+
45
+ ### 交接与续跑
46
+
47
+ 交接按角色分开:全局为 `_Control_Center/records/Global_Handover.md`,项目为 `_Project_Meta/<项目名>/Handover.md`,杂项为 `_Misc/tasks/<任务名>/Handover.md`。
48
+
49
+ 全局任务的交接在 `_Control_Center/tasks/<任务名>/Handover.md`,由全局会话以 `ho_handover` 的 `task` 参数读写。
50
+
51
+ 写交接按固定流程,4 步不可跳:`ho_handover(action="read")` 读上一份 → `action="archive"` 归档 → 读模板 `_Control_Center/templates/Handover.md` → `action="new"` 新建空白文件写入。`action="write"` 只用于首次创建,文件已存在时直接报错;`action="append"` 只用于中途补一行推进状态。归档文件名为 `<原文件名>_<YYYYMMDD_HHMMSS>.md`,同一秒重复时追加 `-2`。交接不设体积上限:体积由结构控制,只写在途与指针。已完成经过、验证记录与需求全文不进交接,分别写台账、计划或归档。
52
+
53
+ 换任由在任会话办理:用户发送 `/allow-succeed` 或点击「授权换任」后,会话调用 `ho_succeed`。插件校验授权与交接结构,建立接任会话并登记在任;任一项不通过则不做任何改动。
54
+
55
+ ### 行动计划
56
+
57
+ 每个任务根有一份 `PLAN.md`,模板为 `_Control_Center/templates/Plan.skeleton.md`,含目标、步骤、验收、风险与状态 5 节。新建计划前,旧计划移入任务根 `_archive/`,之后不再读取;计划随任务归档。
58
+
59
+ ### 体系注册
60
+
61
+ 每个任务一份体系注册:项目写 `_Project_Meta/<项目名>/System.md`,杂项写 `_Misc/tasks/<任务名>/System.md`,全局任务写 `_Control_Center/tasks/<任务名>/System.md`。
62
+
63
+ 全局总注册 `_Control_Center/records/systems.md` 只列各任务体系文件的路径,不承载正文。全局提示段只注入路径清单,项目与杂项提示段注入本任务注册全文。注册写入后立即重装本会话提示段。
64
+
65
+ `ho_docmap` 提供 read、write、check 与 plan 4 个动作。read 读本会话注册,write 整份替换并逐条校验路径。check 校验路径与缺失注册;plan 读写 `PLAN.md` 并归档旧计划。
66
+
67
+ 只有本类别在任会话可以写入;全局不代写项目与杂项的注册。全局的 write 按磁盘任务重建总注册。
68
+
69
+ ### 全局任务库
70
+
71
+ 全局会话可用 `ho_sessions` 的 task-init 动作,在 `_Control_Center/tasks/<任务名>/` 建立任务库。任务库含交接、体系注册、规则与模板副本,并自动登记进全局总注册。
12
72
 
13
- - 起始简报:水位、闸门、活跃与沉默、阶段建议,一条命令返回。
14
- - 交接体检:检查交接文档的结构、字段与占位符,逐条列出问题。
15
- - 压缩与续跑:由水位与剩余压缩次数共同判定时机,由用户授权,回合结束后执行;压缩后的去向由助手在登记时选择,继续工作时续跑,任务已收尾时静默等待;状态切换与失败原因写入结果。
16
- - 在任登记与查询:每一类会话(全局、各个项目、各个杂项任务)都登记当前在任的会话与历代编号,记录保存在工作区内的 `Office.json`;按名字或旧编号查询现任,不启动会话也可用命令行查询。
17
- - 换任由会话自行办理:在任会话在用户授权后自行检查交接、建立接任会话并登记在任,不再由全局会话转交。
18
- - 会话清点与角色:查看会话水位与状态,设定角色,建立下一代会话,归档与解归档。
19
- - 会话间通信:会话之间可直接对话,不必经全局转述;默认沉默,任务完成不向全局报告。
20
- - 工作区迁移:预检、复制并逐文件校验、切换、改写登记、重建链接、清理旧副本。
21
- - 快照与迁移包:库快照、打包、校验与恢复,包内绝对路径单独体检。
22
- - 设置页:常规卡片为压缩授权、移动全局根目录、会话角色、全局前置提示词、会话水位、通用约束条闸门、交接文档体检、插件与会话间通信守卫,末尾另有默认折叠的「使用说明」;尚未接入工作区时置顶显示「首次安装」,可一键部署文件体系、工作区与会话;已接入但还没有全局会话时显示「全局会话」卡片。
73
+ 任务库可独立为项目或杂项会话:用 new 动作并传 `from_task`。插件先做整库快照,再一并移入并沿用现有体系,不重建、不重新注册;该动作须用户确认后执行。
74
+
75
+ ### 身份互转与名称注册
76
+
77
+ 项目与杂项可以互转,用 `ho_sessions` 的 role 动作并传 `migrate`。
78
+
79
+ 缺省 auto:先做整库快照,再移动体系与登记。快照落在 `_Archives/_Global/Backups/身份迁移_<YYYYMMDD_HHMMSS>/`。direct:旧体系移入备份目录,新位置按模板新建体系。
80
+
81
+ 项目目标为 `Projects/<项目名>/<项目名>库/`。会话首次用 `ho_office` 的 register 动作注册名称,注册后不得自行修改。名称不超过 40 个字符,不含路径分隔符;已有在任者或同名重复时拒绝注册。改名须由全局处理。
82
+
83
+ ### 暂任与协作
84
+
85
+ 暂任规则在任务库 `rules/Delegation_Rules.md`,协作模板在 `_Control_Center/templates/Prompt_Templates.md`。
86
+
87
+ 交出前刷新交接,提示词写入任务库 `Delegation_Prompt.md`,旧文件移入 `_archive/` 且不再读取;归还时刷新交接并写明暂任者。插件不检查提示词文件是否存在,也不检查是否归档。多会话协作由协调者先 `peer(action="collab", sessions=[…])` 注册,再逐个派任务,用 `peer(action="collect", sessions=[…], timeout_ms=…)` 收结果;谁先完成先返回,同时完成就一起返回。协作期间被交办方不能向交办者或同组成员发明文消息,插件 `peer` 与 DSH 自带 `send_message` 都经守卫拦截;`collect` 取回全部结果后限制自动解除,普通对话不需要注册。`timeout_ms` 按任务预估设置,最低 120 秒。
88
+
89
+ ### 旧体系迁移
90
+
91
+ 0.9.x 的文档定位在 `_Control_Center/records/docmap/`。升级后执行 `ho_workspace` 的 migrate 动作:项目与杂项的条目并入各自体系注册,全局旧内容保留为 `_Control_Center/records/global-docs.md`。
92
+
93
+ 旧目录一并移入 `_Archives/_Global/Backups/1.0-docmap_<YYYYMMDD_HHMMSS>/`,不删除。
23
94
 
24
95
  ## 安装
25
96
 
26
97
  ### 从 GitHub 安装
27
98
 
28
- 桌面版:侧栏「插件」→「添加插件」,粘贴仓库地址 `https://github.com/MingMaple/dsh-handover`,装完重启 DSH。
29
-
30
- Web 或 CLI:
99
+ 桌面版:在侧栏「插件」中点击「添加插件」,粘贴仓库地址 `https://github.com/MingMaple/dsh-handover`。Web 界面或命令行:
31
100
 
32
101
  ```bash
33
102
  dsh plugin --profile web add github:MingMaple/dsh-handover
@@ -35,121 +104,83 @@ dsh plugin --profile web add github:MingMaple/dsh-handover
35
104
 
36
105
  ### 从 npm 安装
37
106
 
38
- 包名为 `@mingmaple/dsh-handover`,版本与仓库同步:
107
+ 包名为 `@mingmaple/dsh-handover`,版本与仓库同步;从本地源码安装先执行 `node scripts/build.mjs`,产物在 `dist/`,用插件管理器安装该目录并重启 DSH。
39
108
 
40
109
  ```bash
41
110
  dsh plugin --profile web add @mingmaple/dsh-handover
42
111
  ```
43
112
 
44
- ### 从本地源码安装
45
-
46
- 1. 构建:`node scripts/build.mjs`,产物在 `dist/`。
47
- 2. 用 DSH 的插件管理器安装本地目录 `dist/`,target 传绝对路径。
48
- 3. 在插件列表里启用,重启 DSH。
49
- 4. 首次使用按下一节「首次使用」的引导部署。
50
-
51
113
  ### 首次使用
52
114
 
53
- 首次安装后,工作区、文件体系与会话一次部署完成:
54
-
55
- 1. 打开设置页中的 dsh-handover,在「首次安装」卡片粘贴一个长期存在目录的绝对路径。
56
- 2. 点「一键部署」。插件在该目录内建立 `_Workspace` 与整套文件结构,注册为「全局」工作区,并新建一个「全局」会话。
57
- 3. 在左侧「全局」工作区打开该会话即可开始。只需先铺文件时点「仅建立文件体系」,之后再点「注册为工作区」。
58
- 4. 工作区已接入但还没有全局会话时,设置页会单独出现「全局会话」卡片,可随时补建。
115
+ 1. 打开设置页中的 dsh-handover,在「首次安装」卡片粘贴一个长期目录的绝对路径。
116
+ 2. 点击「一键部署」。插件在该目录建立 `_Workspace` 与全套结构,注册为全局工作区,并新建全局会话。
117
+ 3. 在左侧全局工作区打开该会话。只需先铺文件时,点击「仅建立文件体系」,之后再点击「注册为工作区」。
118
+ 4. 已有工作区但还没有全局会话时,设置页单独出现「全局会话」卡片,可随时补建。
59
119
 
60
- 命令行等价操作:`ho_init(parent="<已存在目录>", register=true)`,再新建一个标题含「全局」的会话。
120
+ 命令行等价操作:`ho_workspace(action="init", parent="<全局根上级目录>", register=true)`,再新建一个标题含「全局」的会话。
61
121
 
62
122
  ## 使用
63
123
 
64
- 安装后直接说明要做的事,不必记命令:
124
+ 安装后直接用中文说明要做的事,不必记命令。
65
125
 
66
126
  | 想做什么 | 可以这样说 |
67
127
  |---|---|
68
- | 看整体状态 | 先出一份起始简报 |
69
- | 查规则 | 把 Charter 第 7.2.3 节取出来 |
70
- | 交接并压缩 | 先把交接文档写好,再压缩并继续 |
71
- | 换任 | 写好交接,请用户授权,由本会话自己换任 |
128
+ | 看总体状态 | 先出一份起始简报 |
129
+ | 查规则 | 取出 Charter 第 7.2.3 节 |
130
+ | 交接并压缩 | 写好交接后压缩并继续 |
131
+ | 换任 | 写好交接,由本会话自行换任 |
72
132
  | 查在任 | 现在全局是谁在任 |
73
- | 设置角色 | 把 Demo1 设成项目角色,并让它整理自己的文件 |
133
+ | 设置角色 | 把 Demo1 设为项目角色 |
134
+ | 体系与计划 | 把体系注册写进提示段并建立行动计划 |
135
+ | 暂任交出 | 把本任务交给另一个会话 |
74
136
  | 自检 | 检查插件当前状态 |
75
137
 
76
- ### 四类会话
138
+ ### 会话角色
77
139
 
78
140
  | 角色 | 提示段 | 工具数 | 说明 |
79
141
  |---|---|---|---|
80
- | 全局 | 有 | 24 | 协调会话、维护规则与交接 |
81
- | 项目 | 有 | 11 | 管理单个项目库,自己写骨架档案 |
82
- | 杂项 | 有 | 11 | 管理单个杂项任务 |
83
- | 普通 | 无 | 0 | 不注入提示、不加载工具 |
142
+ | 全局 | 有 | 14 | 协调会话、维护登记与交接 |
143
+ | 项目 | 有 | 11 | 管理单个项目库 |
144
+ | 杂项 | 有 | 10 | 管理单个杂项任务 |
145
+ | 普通 | 无 | 0 | 不注入提示,不加载工具 |
84
146
 
85
- 代理子会话不装配 `ho_` 与 `peer_` 工具。宿主逐步解析工具表,子会话在解析阶段即被排除,首轮即不可用。
147
+ 代理子会话不装配插件工具与 `peer`;子会话在工具表解析阶段即被排除。
86
148
 
87
- ### 交接与压缩
149
+ ### 工具入口
88
150
 
89
- | 水位 | 动作 |
90
- |---|---|
91
- | 低于 32% | 继续 |
92
- | 32% 至 35% | 可写交接;处于关键步骤时可暂缓 |
93
- | 35% 至 85%,已压少于 3 次 | 写交接、原地压缩、读交接续跑 |
94
- | 85% 及以上,已压少于 3 次 | 强制压缩 |
95
- | 任意水位,已压满 3 次 | 写交接、建立新会话 |
96
-
97
- 压缩次数用尽(默认 3 次)的判定先于水位:额度用尽后,无论水位高低均建议换任;`force` 不能越过额度,`ho_sessions` 的压缩指令(`action="order", order="compact"`)同样会被拒绝。
151
+ 1.0.0 沿用 14 个工具入口,未新增工具。状态与规则入口为 `ho_status`、`ho_gate`、`ho_charter`、`ho_sessions`、`ho_office`、`ho_docmap`。
98
152
 
99
- 压缩须由用户在设置页点「压缩授权」,单次授权 5 分钟内有效;`confirm=true` 只表示意图。压缩在回合结束后执行;登记时以 `resume` 选择去向,继续工作时续跑,任务已收尾时不唤醒。全局交接写在 `_Control_Center/records/Global_Handover.md`,项目与杂项交接写在各自目录,每次写入前备份。
153
+ 写入与备份入口为 `ho_handover`、`ho_checkpoint`、`ho_changelog`、`ho_backup`、`ho_workspace`、`ho_profile`、`ho_succeed`;会话通信用 `peer`。
100
154
 
101
- 归档文件名为 `<原文件名>_<YYYYMMDD_HHMMSS>.md`,同一秒重复时追加 `-2`。全局与项目的归档位于 `_Archives/<范围>/Handover/`,杂项归档位于 `_Misc/tasks/<任务>/_archive/`。
102
-
103
- 换任由在任会话自行办理:写完交接后,由用户在聊天框发送 `/allow-succeed`,或在设置页「压缩授权」卡片内的「换任授权」区域点「允许换任」。授权一次有效,5 分钟内可用,按会话生效。随后会话调用 `ho_succeed`,插件依次校验授权与交接结构,按记录分配下一代编号,建立接任会话并写入角色,登记在任,投递启动提示词,并在旧交接末尾追加换任登记。任何一项校验不通过时,整体不做任何改动,并逐条列出缺项。全局的建会话与换任能力保留,作为自动流程失败时的备选方案。
155
+ 旧工具名不再注册,调用会得到未知工具提示。
104
156
 
105
157
  ### 设置页
106
158
 
107
- 设置页为单页卡片式,常用区直接展开,低频与长文段折叠。未接入工作区时,首次安装卡片置顶出现。删除旧副本须先输入「删除」两字才能解锁按钮。时间显示为 `YYYY-MM-DD HH:mm` 加本机时区偏移。
108
-
109
- ## 迁移与恢复
110
-
111
- 换盘或搬动全局根目录时,按预检、复制并校验、切换、改写登记、清理旧副本五步执行,每一步均可在设置页「移动全局根目录」卡片内完成。切换须在 DSH 完全退出后由后台助手执行,原路径随后成为链接。
112
-
113
- 详见 [搬迁全局根目录](docs/migrate.md)。
114
-
115
- ## 故障处理
159
+ 设置页为单页卡片式,常用区展开,低频与长文段折叠。卡片含授权、移动全局根目录、会话角色、全局前置提示词与会话水位。另有通用约束条闸门、交接文档体检与插件信息。末尾有默认折叠的「工具明细」与「使用说明」;删除旧备份须先输入「删除」确认。
116
160
 
117
- 工具数量不符、工作区未接入、设置页刷新失败、压缩未生效、换任未执行、项目名或任务名不合法、新建会话找不到工作区、设置角色后工具未更新、迁移后原路径失效,各有对应处置。
161
+ ## 升级与故障处理
118
162
 
119
- 详见 [常见故障处理](docs/troubleshoot.md)。
163
+ 升级与搬动全局根目录见 [从 0.9.x 升级到 1.0.0](docs/migrate.md);常见症状与处置见 [常见故障处理](docs/troubleshoot.md)。
120
164
 
121
- ## 上下文开销
165
+ ## 写作规范
122
166
 
123
- 固定开销为工具 schema 与提示段。按 0.9.13 实测,按角色载入后,全局提示段约 385 加权 token(长路径加迁移提示行约 435),项目与杂项约 370(最坏约 419),随项目名与路径长度波动;单条工具描述最宽约 56。以上为实测参考值,不设硬性上限:某条判定需要写清楚时,优先保证表达完整。
167
+ 全部产出按 `_Control_Center/standards/写作规范/README.md` 的 W-01 至 W-42 执行;提示段只放一行指针,不注入规范正文。
124
168
 
125
169
  ## 边界与限制
126
170
 
127
- - 依赖 DSH 的 `ctx.compaction` 服务;未挂载时压缩相关工具明确报错。
171
+ - 压缩依赖 DSH 的 `ctx.compaction` 服务;未挂载时压缩相关工具报错。
128
172
  - `ptc` 呈现模式下,插件工具只能经程序调用。
129
- - 会话压力读取依赖宿主保存的会话状态文件布局;字段变化时用 `ho_diag` 排查。
130
- - 迁移只搬文件与清单,不改写文件内容;写死的绝对路径以体检形式报出。
131
- - 工具可见性按每一步计算:换角色在下一轮请求即生效,不必重启 DSH。插件重载后,已存在的会话沿用旧提示段文本,需要新文本时重启一次。
132
- - 项目名与任务名按目录名校验:项目名不超过 24 字符,任务名不超过 40 字符;不含 `< > : " / \ | ? *` 与控制字符;不以点或空格结尾;不使用设备保留名。名字来自自由文本时同样校验,不合法则报错且不写入磁盘。
133
- - 卸载后残留只限 `~/.dsh/storages/dsh-handover.*` 与 `~/.dsh/storages/dsh-handover/logs/`,删除即可清零。
134
-
135
- ## 开发与测试
136
-
137
- ```bash
138
- npm test # 开发自测:逐个工具跑只读用例
139
- npm run test:blank # 空白 DSH 验收:临时 HOME 与空目录跑 24 工具及迁移四件
140
- npm run test:smoke # 空白环境冒烟:工具装配、状态路由、浏览器半渲染、语体扫描
141
- npm run test:migrate # 迁移与恢复端到端
142
- npm run test:docs # 文档校验:工具名、旧数、链接、版本、语体与长度上限
143
- ```
144
-
145
- 源码在 `src/`,`dist/` 为构建产物,不入版本库。服务端代码替换 `dist/` 后在插件列表停用再启用即生效,不必重启 DSH;已存在的会话继续使用旧的提示段文本,需要新文本时重启 DSH 或让会话重建。客户端 bundle 不热更新,改设置页必须重建并重启 DSH。
146
-
147
- ## 版本
173
+ - 会话水位依赖宿主保存的会话状态文件布局;字段变化时用 `ho_status(view="diag")` 排查。
174
+ - 项目名不超过 24 个字符,任务名不超过 40 个字符。名字不含路径分隔符与控制字符,不以点或空格结尾,不使用设备保留名。
175
+ - 插件重载后,已存在的会话沿用旧提示段文本;需要新文本时重启 DSH 或新建会话。
176
+ - 服务端是纯 Node ESM,不调用 PowerShell、cmd 或 bash;Windows、macOS 与 Linux 同一套代码。路径大小写按平台处理,7-Zip 缺失时用内置 tar.gz。
177
+ - 卸载后残留仅 `~/.dsh/storages/dsh-handover.*` 与日志目录,删除即可清零。
178
+ - 插件本体不含用户项目、会话或账号数据;用户数据与角色表保存在本机。
148
179
 
149
- 当前版本 0.9.14,首次公开版本为 0.9.6。内部版本史不随仓库发布。
180
+ ## 开发
150
181
 
151
- 支持的内核为 0.2.1-rc.2 至 0.3.0(不含 0.3.0 及其候选版),见 `package.json` 的 `engines.dsh`;0.2.2-rc.1 上的工具装配、角色裁剪与压缩调度已实测通过。
182
+ 源码在 `src/`;`dist/` 为构建产物,不入版本库。构建与校验命令见 `package.json` 的 `scripts`。服务端代码替换 `dist/` 后,在插件列表停用再启用即生效。客户端构建产物不热更新,改设置页须重建并重启 DSH。
152
183
 
153
184
  ## 许可
154
185
 
155
- MIT,见 [LICENSE](LICENSE)。
186
+ MIT,见 [许可证](LICENSE)。
package/docs/migrate.md CHANGED
@@ -1,61 +1,72 @@
1
- # 搬迁全局根目录
1
+ # 从 0.9.x 升级到 1.0.0
2
2
 
3
- 适用场景:把全局根目录换到另一块盘,例如从 D: 换到 E:。全程由 `ho_workspace` 的迁移动作完成,插件不改写文件内容。
3
+ 本文说明由 0.9.x 升级到 1.0.0 的步骤。1.0.0 重建了任务流程、体系注册与迁移路径,工具入口仍为 14 个。
4
4
 
5
- ## 前提
5
+ 升级顺序为:先备份,再安装 1.0.0,补齐文件体系,迁移旧文档定位,最后重载插件并验证。
6
6
 
7
- - 先跑一次完整备份或 `ho_snapshot`。
8
- - 目标父目录可以不存在,插件会自动创建;目标不得在源内部,也不得等于源。
9
- - 切换必须在 DSH 完全退出后执行:源目录在运行期间被占用,目录改名与建链接都会失败。
7
+ ## 备份
10
8
 
11
- ## 1. 预检
9
+ 1. 完整备份全局根目录,或对每个项目执行 `ho_backup(action="snapshot", project="<项目名>")`。
10
+ 2. 记录当前版本与在任会话:`ho_status(view="diag")`。
11
+ 3. 确认没有未完成的目录迁移:`ho_workspace(action="move-status")`。
12
+ 4. 让正在写文件的作业会话先收束到可暂停位置。
12
13
 
13
- 设置页「移动全局根目录」卡片,或:
14
+ ## 安装 1.0.0
14
15
 
15
- ```text
16
- ho_workspace(action="move-probe", to="<目标父目录>")
17
- ```
16
+ 1. 用插件管理器安装 1.0.0,或替换 `dist/` 后在插件列表停用再启用。
17
+ 2. 重启 DeepSeek Harness(DSH)。
18
+ 3. 设置页应显示 1.0.0,水位阈值为 35% 与 50%。
18
19
 
19
- 核对源总大小、文件数、目标盘可用空间、目标是否为空、是否在源内部。`to` 是父目录,`_Workspace` 会整个搬进去。
20
+ ## 补齐文件体系
20
21
 
21
- ## 2. 复制并校验
22
+ 1. 已接入工作区的,执行 `ho_workspace(action="scaffold")`。
23
+ 2. 尚未部署工作区的,在设置页「首次安装」卡片点击「一键部署」或「仅建立文件体系」。
24
+ 3. 该动作只新建缺失的目录与文件,不覆盖既有内容。
25
+ 4. 新增项包括 `_Control_Center/tasks`、`_Control_Center/records/systems.md`、`Plan.skeleton.md`、`System.skeleton.md` 与 `Delegation_Rules.md`。
22
26
 
23
- ```text
24
- ho_workspace(action="move")
25
- ```
27
+ ## 迁移旧文档定位
26
28
 
27
- 复制到新位置,两边各算一遍逐文件 sha256 清单并比对。不一致时不生成切换脚本,报告差异文件。
29
+ 1. 检测:`ho_gate` 或 `ho_status` 提示「旧文档定位待迁移」,或 `_Control_Center/records/docmap/` 仍存在。
30
+ 2. 执行:`ho_workspace(action="migrate")`。
31
+ 3. 结果:`project-<项目名>.md` 与 `misc-<任务名>.md` 的条目并入各自 `System.md`,已有 `System.md` 时保留原文件;`global.md` 保留为 `_Control_Center/records/global-docs.md`,不注入提示段。
32
+ 4. 旧目录一并移入 `_Archives/_Global/Backups/1.0-docmap_<YYYYMMDD_HHMMSS>/docmap`,不删除。
33
+ 5. 没有旧目录时,动作报告「无需迁移」。
28
34
 
29
- ## 3. 切换
35
+ ## 重载插件与提示段
30
36
 
31
- ```text
32
- ho_workspace(action="move-switch")
33
- ```
37
+ 1. 服务端代码替换后在插件列表停用再启用即生效,不必重启 DSH。
38
+ 2. 客户端构建产物不热更新;改设置页后须重建并重启 DSH。
39
+ 3. 提示段文本不随插件重载替换;已存在的会话须重启 DSH 或新建会话后才换新。
40
+ 4. 需要保留历史的会话,先写交接,再新建会话。
34
41
 
35
- 生成并派出后台助手,等你完全退出 DSH 后自动完成:旧目录改名为 `<旧>.old-<时间戳>`,再在原位置建 junction 指向新位置,并校验指向。日志写在 `~/.dsh/storages/dsh-handover.move.log`。
42
+ ## 验证
36
43
 
37
- 也可以双击生成的 `dsh-handover.move.cmd`。切换后原路径成为链接,工作区登记、profile 与会话工作目录都无需修改。
44
+ 1. `ho_status(view="diag")` 应报版本 1.0.0、14/14 工具与调度器就绪。
45
+ 2. `ho_docmap(action="check")` 应报路径全部存在;失效项按输出修正。
46
+ 3. `ho_gate` 应无「旧文档定位待迁移」提示。
47
+ 4. 设置页水位阈值为 35% 与 50%,不再出现 32%。
48
+ 5. 发送一条消息后,提示段应包含两级任务流程与体系注册。
38
49
 
39
- ## 4. 改登记(仅在需要时)
50
+ ## 行为变化
40
51
 
41
- 切换助手完成后,若 DSH 的 `workspace.json` 或聊天集成登记仍写着旧路径,页面会提示。执行:
52
+ - 提醒线由 32% 的单线改为 35% 与 50% 共 2 条一次性提醒,投递方式为在会话的工具结果末尾追加。
53
+ - 文档定位改为体系注册:项目与杂项各一份 `System.md`,全局只列路径。
54
+ - 行动计划固定在任务根 `PLAN.md`;压缩或换任后按先交接、再计划、后执行恢复。
55
+ - 项目与杂项互转默认整库快照后移动,也可选择直接建。
42
56
 
43
- ```text
44
- ho_workspace(action="move-retarget")
45
- ```
57
+ ## 搬动全局根目录
46
58
 
47
- 只替换 JSON 文本里的路径字符串,结构不动,每份先备份 `.bak-<时间>`。
59
+ 1. 预检:`ho_workspace(action="move-probe", to="<目标父目录>")`。
60
+ 2. 复制并校验:`ho_workspace(action="move", to="<目标父目录>")`。
61
+ 3. 切换:完全退出 DSH 后执行 `ho_workspace(action="move-switch")`;后台助手完成改名并建链接。
62
+ 4. 改登记:需要时执行 `ho_workspace(action="move-retarget")`。
63
+ 5. 清理旧备份:重启 DSH 并确认新位置可用后执行 `ho_workspace(action="move-cleanup", confirm=true)`;该操作不可撤销。
64
+ 6. 链接丢失时执行 `ho_workspace(action="move-repair")`。
65
+ 7. 回退:删除链接,把 `.old-<时间戳>` 目录改回原名;登记已改写时再执行一次改登记。
48
66
 
49
- ## 5. 清理旧副本
67
+ ## 注意事项
50
68
 
51
- 确认新位置可正常工作、并已重启 DSH 后,在设置页「移动全局根目录」卡片里输入「删除」确认,再执行:
52
-
53
- ```text
54
- ho_workspace(action="move-cleanup", confirm=true)
55
- ```
56
-
57
- 只删匹配 `<旧>.old-` 前缀、且既不是源也不是目标的目录。此操作不可撤销。
58
-
59
- ## 回退
60
-
61
- 删除链接,把 `.old-*` 改回原名。若登记已改写,再执行一次改登记指回原路径。
69
+ - 迁移不删除旧文件;旧目录与新位置的备份都保留。
70
+ - 体系注册写入前留 `.bak`;交接写入前自动备份。
71
+ - 角色表与提醒状态保存在 `~/.dsh/storages/`,不随工作区迁移改变。
72
+ - 升级不改变项目与杂项的角色;身份互转须另行执行 `ho_sessions` 的 `role` 动作。
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 新增与调整
6
6
 
7
- - 一键部署:在设置页「首次安装」卡片粘贴绝对路径后点「一键部署」,一次完成三件事:建立 `_Workspace` 与整套文件结构,把该目录注册为「全局」工作区,新建一个「全局」会话并登记全局角色。「全局」会话的产生不再依赖手工新建标题含「全局」的会话。
7
+ - 一键部署:在设置页「首次安装」卡片粘贴绝对路径后点击「一键部署」,一次完成三件事:建立 `_Workspace` 与整套文件结构,把该目录注册为「全局」工作区,新建一个「全局」会话并登记全局角色。「全局」会话的产生不再依赖手工新建标题含「全局」的会话。
8
8
  - 补建入口:工作区已接入但还没有全局会话时,设置页单独出现「全局会话」卡片,可随时补建;只建会话,不建体系,不动既有文件。
9
9
  - 新建会话必须指明工作区:`ho_sessions(action="new")` 未给 `workspace` 或 `cwd`、或项目没有对应工作区时直接报错,并列出已注册的工作区,不再静默落到调用者所在的工作区。传 `project` 且存在同名工作区时自动匹配;`cwd` 必须是已注册工作区的根。
10
10
  - `ho_workspace(action="create")` 新增 `ensure`:目录不存在时自动创建再注册。仍是显式开关,默认不建目录。
@@ -24,5 +24,4 @@
24
24
  ## 兼容
25
25
 
26
26
  - 支持 DSH 内核 0.2.1-rc.2 至 0.3.0,不含 0.3.0 及其候选版,见 `package.json` 的 `engines.dsh`。
27
- - 已在 DSH NEXT 2.0.22 与内核 0.2.2-rc.1 上实测:设置角色后按轮换装、新建会话的工作区校验与报错清单。
28
- - 一键部署的建体系、注册工作区与建会话三步,在空白环境验证通过;首次实机安装建议先在空环境验证一次。
27
+ - 首次实机安装建议先在空环境演练一次。
@@ -1,6 +1,6 @@
1
1
  # 0.9.14
2
2
 
3
- 修三处与新建会话、换任相关的路径与登记问题,均在真机演练中复现后修复。
3
+ 修正三处与新建会话、换任相关的路径与登记问题。
4
4
 
5
5
  ## 修复
6
6
 
@@ -9,10 +9,6 @@
9
9
  - 杂项换任:接任会话此前落在工作区根,现落回本会话所在的注册工作区。做法是按会话工作目录反查工作区注册表,反查不到时才退回工作区根。
10
10
  - 换任启动提示词里的「全局 id」改为现任全局会话。此前填入的是发起换任的前任会话,项目与杂项的接任者因此被指向已经退休的会话。
11
11
 
12
- ## 测试
13
-
14
- 冒烟新增三条回归断言:新建杂项会话的启动提示读本任务交接、杂项接任者落回本会话所在的工作区、接任提示的全局 id 为现任全局。
15
-
16
12
  ## 升级
17
13
 
18
14
  先移除旧版本再安装;或替换文件后在插件列表停用再启用。已存在的在任登记表无需改动,工作区一栏在下次登记时自然更新。
@@ -0,0 +1,34 @@
1
+ # 0.9.22
2
+
3
+ 设置页「会话角色」改为按 DSH 工作区分组,默认全部折叠;已归档会话与目录已不存在的会话不再罗列;卡片下的说明文字一并删去。插件与文档中的比喻性称谓(「血脉」「历代」「退位」等)改为书面说法(「登记」「历史编号」「已交出的会话」),用户可见文案的「点」统一为「点击」,提示段里过时的按钮名「压缩授权」改为「授权压缩」。本说明新增「安装与使用」一节。工具与提示段不变。
4
+
5
+ ## 自 v0.9.14 以来的累计变化
6
+
7
+ 0.9.15 至 0.9.21 均未单独发布,本次一并发布,累计变化如下。
8
+
9
+ - 工具整合:入口由 24 个降为 14 个(13 个 `ho_*` 与 `peer`),按「一次做一件事」合并;旧工具名不设兼容桩,替代关系见下文与 README「工具整合」。
10
+ - 文档定位:`ho_docmap` 提供读、写、查;写入范围由会话已登记的角色决定,只允许对应的在任会话写入;写入前逐条校验路径、覆盖前留 `.bak`、写盘后当场重装提示段;`ho_gate` 增加路径检查。
11
+ - 授权提示:用户授权压缩或换任后,目标会话的提示段在下一轮多一行到期时刻与一次性说明;`ho_status` 的 `phase` 与 `brief` 视图给出「授权」一行。
12
+ - 交接类文档不设体积上限:只判结构与占位符。
13
+ - 通用规范库:`_Control_Center/standards/` 一条规范一个子目录;三档角色段加查找指针;写入分两档(默认写本库,明确「写入通用规范库」一类说法才写共用库);`ho_workspace(action="scaffold")` 用于补齐既有工作区。
14
+ - 设置页:授权卡改名并按在任会话折叠;「待处理」合并进既有卡片;工具清单独立为默认折叠的「工具明细」;会话水位、通知与交接体检统一以 `_Control_Center/records/Office.json` 的在任为准,普通会话不参与;交接体检只查已登记的项目与杂项,并接受有序列表;会话角色按 DSH 工作区分组、默认折叠、已归档与无目录会话不列;迁移卡片不再把保留的旧备份当作待处理;全页文案与注释改为规范书面语。
15
+ - 使用说明:起始简报、换任入口、压缩去向、打包格式、会话清点输出、自检项与文档定位权限按当前输出改写。
16
+
17
+ ## 会话角色
18
+
19
+ - 分组依据 `~/.dsh/storages/workspace.json`:以工作区的会话归属为准;未登记的会话按 cwd 的真实路径匹配工作区路径(旧根现为链接,取 realpath 后归组)。
20
+ - 每个工作区一行摘要,显示标题与会话数;默认收起,点击展开后可见该工作区的会话表。表内仍按全局、项目、杂项、普通排序,同角色按最近活动。卡片下不再保留说明文字。
21
+ - 不在任何工作区下的会话归入末组「未归属工作区」,组内显示其 cwd。
22
+ - 已归档会话(`workspace.json` 的 `archivedSessionIds`)不列出;会话目录已不存在的老会话(旧树里删掉的项目库等)同样不列出。
23
+
24
+ ## 数据
25
+
26
+ - 授权列表与会话水位沿用 `Office.json` 的在任口径,同时受上述归档与目录过滤约束。
27
+
28
+ ## 安装与使用
29
+
30
+ 安装并启用插件后,可在设置的 dsh-handover 页面创建或指定全局;页面底部「使用说明」可供参考。后续将在 GitHub 仓库建立「使用说明」文档。
31
+
32
+ ## 升级
33
+
34
+ 替换 `dist/` 后在插件列表停用再启用;浏览器半不热更新,需刷新设置页。本版未改提示段与工具。
@@ -0,0 +1,33 @@
1
+ # 1.0.0
2
+
3
+ **本次修改**:新增 1.0.0 版本说明(首版)。相对 0.9.22,新增两级任务流程与行动计划。同时新增体系注册、全局任务库、身份互转、名称注册、交接固定流程与会话协作。另新增旧体系迁移,路径比较改为按平台处理大小写。
4
+
5
+ ## 新增
6
+
7
+ - 两级任务流程。层级一为轻量任务,直接执行,不写计划。层级二为繁重任务,先判断纯窗口是否可能超过 40%(不计当前占用)。超过时,写计划即安排拆分子智能体,本会话只做统筹与收尾;未超过时,计划按本会话完成来写。
8
+ - 行动计划。任务根新增 `PLAN.md`;`ho_docmap` 新增 `plan` 动作,用于读写计划与归档旧计划。
9
+ - 体系注册。每任务一份 `System.md`;全局总注册 `_Control_Center/records/systems.md` 只列各任务体系文件的路径。
10
+ - 全局任务库。`ho_sessions` 新增 `task-init`,建立 `_Control_Center/tasks/<任务名>/` 并登记总注册。
11
+ - 全局任务独立。`ho_sessions(action="new")` 新增 `from_task`,把全局任务整体独立为项目或杂项会话。体系与文件一并迁入。
12
+ - 身份互转。项目与杂项互转默认先做整库快照再移动。`migrate="direct"` 只建新体系,不搬旧文件。
13
+ - 名称注册。`ho_office` 新增 `register`;会话首次注册名称,注册后不得自行修改。
14
+ - 交接固定流程。`ho_handover` 新增 `new`:先归档旧交接,再新建空白文件写入;`write` 只用于首次创建。模板 `Handover.template.md` 写明读旧交接、归档、读模板、新建写入 4 步。
15
+ - 全局任务交接。`ho_handover` 新增 `task` 参数,供全局会话读写全局任务交接。
16
+ - 会话协作。`peer` 新增 `wait`、`collect` 与 `collab`,`send` 支持 `wait=true`。协作期间,被交办方不得向交办者或同组成员发送明文消息。插件 `peer` 与 DeepSeek Harness(DSH)的 `send_message` 均经守卫拦截。`collect` 取回全部结果后限制解除。
17
+ - 旧体系迁移。`ho_workspace` 新增 `migrate`,并入体系注册并归档旧目录。
18
+ - 跨平台。路径比较按平台折叠大小写;7-Zip 探测覆盖 Windows、macOS 与 Linux;迁移助手不依赖外部 shell。
19
+ - 模板与规范。新增 `Plan.skeleton.md`、`System.skeleton.md`、`Handover.template.md`、`Delegation_Rules.md`,以及写作规范 W-01 至 W-42 与依据文本。
20
+
21
+ ## 变更
22
+
23
+ - 提醒线由 32% 单线改为 35% 与 50% 共 2 条。投递方式改为在本会话工具结果末尾追加。
24
+ - 判断标准:35% 档完成剩余流程后不超过 45%,50% 档不超过 55%。
25
+ - `ho_docmap` 的动作由 read、write、check 扩为 read、write、check、plan。
26
+ - 已有交接不得再用 `write` 改写,该动作只用于首次创建。
27
+ - 设置页水位文案改为 35% 与 50%,不再出现 32%。
28
+ - 提示段按 1.0 重写为 6 节。全局、项目与杂项共用同一份流程文本。并加入子智能体判据与续用纪律一行,细则仍在章程与运行时手册。
29
+
30
+ ## 移除
31
+
32
+ - 移除 32% 提醒线与 `warnRatio` 配置项。
33
+ - 移除文档定位的独立提示段注入路径与简版提示段。流程文本全文进提示段。