@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
@@ -1,85 +1,269 @@
1
1
  # 常见故障处理
2
2
 
3
- ## 工具缺失或数量不对
3
+ 本文适用于 DeepSeek Harness(DSH)中的 dsh-handover 插件。每节按现象、原因与处置 3 段列出。
4
4
 
5
- 1. 在全局会话执行 `ho_diag`,看「角色判定与工具集」一节。
6
- 2. 全局应为 24 个,项目与杂项 11 个,普通 0 个。
7
- 3. 新建会话时角色表中尚无该会话,插件会判为普通;角色写入后,该会话下一轮请求即按新角色装配。
8
- 4. 仍未装配时,在设置页「会话角色」卡片里重新设一次角色;仍无效则执行 `ho_diag` 查 `roleGating` 字段。
9
- 5. 改过源码但未生效:执行 `node scripts/build.mjs`,然后在插件列表停用并启用一次,不必重启 DSH。提示段文本不随重载替换,仍显示旧文本时重启 DSH。
10
- 6. 子会话不装配 `ho_` 与 `peer_` 工具,属正常:子会话在工具表解析阶段即被排除,与角色设置无关。
5
+ ## 工具数量不符
6
+
7
+ 现象:`ho_status(view="diag")` 显示的工具数与角色不符,或会话中看不到插件工具。
8
+
9
+ 原因:角色表未写入;角色按标题、工作目录与首条提示推断。子会话默认按普通处理;改过源码但未重建。
10
+
11
+ 处置:
12
+
13
+ 1. 在全局会话执行 `ho_status(view="diag")`,查看「角色」与「角色装配」。
14
+ 2. 工具数应为全局 14、项目 11、杂项 10、普通 0。
15
+ 3. 角色未写入时,在设置页「会话角色」重新设定;角色写入后,该会话下一轮请求即按新角色装配。
16
+ 4. 子会话不装配插件工具,属正常;子会话在工具表解析阶段即被排除。
17
+ 5. 改过源码时,执行 `node scripts/build.mjs`,在插件列表停用再启用;提示段文本须重启 DSH 或新建会话才换新。
11
18
 
12
19
  ## 工作区未接入
13
20
 
14
- `ho_diag` 或设置页显示未接入时,走设置页「首次安装」卡片:粘贴绝对路径后点「一键部署」,文件体系、工作区与会话一次建好;也可以只点「仅建立文件体系」,再点「注册为工作区」。命令行等价操作:
21
+ 现象:设置页或 `ho_status` 显示未接入,工具报找不到全局根。
22
+
23
+ 原因:尚未部署文件体系,或当前目录不在已注册的工作区内。
15
24
 
16
- ```text
17
- ho_init(parent="<已存在目录的绝对路径>", register=true)
18
- ```
25
+ 处置:
19
26
 
20
- 装配里没有写死 `workspaceRoot`。工具侧按配置项、会话工作目录向上查找的顺序定位,向上找不到时再查工作区登记;设置页没有会话上下文,按配置项、标题含「全局」且带 `_Control_Center` 的工作区、任一带 `_Control_Center` 的工作区定位。
27
+ 1. 在设置页「首次安装」卡片粘贴长期目录的绝对路径,点击「一键部署」。
28
+ 2. 也可点击「仅建立文件体系」,再点击「注册为工作区」。
29
+ 3. 命令行等价操作:`ho_workspace(action="init", parent="<已存在目录的绝对路径>", register=true)`。
30
+ 4. 再新建标题含「全局」的会话。
21
31
 
22
32
  ## 新建会话报「必须指明工作区」
23
33
 
24
- `ho_sessions(action="new")` 必须落到明确的工作区:传 `workspace`(id、标题或路径),或传某个已注册工作区根的 `cwd`。两者都没有,或项目没有对应工作区时,工具会报错并列出已注册的工作区,不会静默落到调用者所在的工作区。
34
+ 现象:`ho_sessions(action="new")` 报错,并列出已注册的工作区。
35
+
36
+ 原因:未传 `workspace`,也未传某个已注册工作区根的 `cwd`。
37
+
38
+ 处置:
39
+
40
+ 1. 用 `ho_workspace(action="list")` 查看清单。
41
+ 2. 没有工作区时先建:`ho_workspace(action="create", path="<目录>", title="<标题>", ensure=true)`。
42
+ 3. 再建会话:`ho_sessions(action="new", confirm=true, workspace="<id 或标题>", title="<标题>")`。
43
+ 4. 项目会话可同时传 `project`,插件按同名工作区匹配。
44
+
45
+ ## 设置角色后工具未变化
46
+
47
+ 现象:设定角色后,目标会话仍看不到对应工具。
48
+
49
+ 原因:会话休眠时设定,工具在下次开轮时装配;插件重载后,已存在的会话沿用旧提示段文本。
25
50
 
26
51
  处置:
27
52
 
28
- 1. 先看清单:`ho_workspace(action="list")`,或直接读报错文本里的清单。
29
- 2. 还没有工作区时先建:`ho_workspace(action="create", path="<目录>", title="<标题>", ensure=true)`。`ensure=true` 会在目录不存在时自动创建。
30
- 3. 再建会话:`ho_sessions(action="new", confirm=true, workspace="<id 或标题>", title="<标题>")`。项目会话可同时传 `project`,插件会按同名工作区匹配。
53
+ 1. 在目标会话触发一轮请求。
54
+ 2. 执行 `ho_status(view="diag")`,查看「角色装配」中的已装配会话数与最近时间。
55
+ 3. 仍未生效时,在设置页重新设定一次角色。
56
+ 4. 需要新提示段文本时,重启 DSH 或新建会话。
57
+
58
+ ## 角色下拉不出现「全局」
31
59
 
32
- ## 设置角色后工具没有变化
60
+ 现象:设置页「会话角色」的下拉里没有「全局」选项。
33
61
 
34
- 会话休眠时设定角色,插件会在它下次开轮时装配工具与提示段。0.9.12 起这一装配由全局会话事件驱动,不必重启 DSH。若仍看不到应有的工具:
62
+ 原因:本机已有全局在任会话;同一类别只允许一个在任者。
35
63
 
36
- 1. 在设置页「会话角色」重新设定一次,注意「存活会话当场生效」一栏的提示。
37
- 2. 执行 `ho_diag`,看「角色收窄」一栏的已装配会话数与最近时间。
38
- 3. 插件刚从旧版本换上来时,已存在的会话沿用旧提示段文本;重启 DSH 一次即换成新文本,工具裁剪不受影响。
64
+ 处置:
65
+
66
+ 1. 先由现任全局会话办理换任,或清理在任登记。
67
+ 2. 再设定新的全局会话。
39
68
 
40
69
  ## 设置页刷新失败
41
70
 
42
- 页面保留上次读数,并显示其时间与失败原因。常见原因:
71
+ 现象:设置页保留上次读数,并显示读数时间与失败原因。
72
+
73
+ 原因:宿主缺少连接服务时改用 HTTP 回退;桌面版图形界面返回 403;请求超时。
43
74
 
44
- - 宿主没有 `connection` 服务:插件改用 HTTP 回退;纯 CLI 场合回退会被静默跳过。
45
- - 桌面版 GUI 对非浏览器策略请求返回 403:不要用裸 `fetch` 取数,插件已走 `/api` 载体。
46
- - 请求超时:页面加载 30 秒、状态 8 至 30 秒、写操作 15 至 900 秒;稍后重试。
75
+ 处置:
76
+
77
+ 1. 稍后重试,或重启 DSH。
78
+ 2. 纯命令行场合没有浏览器回退,属预期行为。
79
+ 3. 排查时用 `ho_status(view="diag")` 取同一份数据。
80
+
81
+ ## 压缩未执行
47
82
 
48
- ## 压缩未生效
83
+ 现象:`ho_checkpoint` 返回已登记或拒绝排压缩,但回合结束后没有压缩。
84
+
85
+ 原因:未取得用户授权;交接体检不通过;压缩额度用尽。水位低于可压缩线;距上次压缩不足 120 秒;目标会话不空闲。
86
+
87
+ 处置:
49
88
 
50
- 1. 压缩须由用户在设置页点「压缩授权」,单次授权 5 分钟内有效,或在聊天框发送 `/allow-compact`。
51
- 2. `ho_checkpoint` 只登记,由调度器在回合结束后执行;目标必须空闲。
52
- 3. 交接体检不通过时拒绝排压缩,先用 `ho_handover(action=read)` 检查结构。
53
- 4. 已压满 3 次后不再压缩,应换任:由本会话写好交接后调用 `ho_succeed` 自行换任,须用户先发送 `/allow-succeed` 授权。额度用尽的判定先于水位;低水位与 `force` 均不能越过,`ho_sessions` 的压缩指令(`action="order", order="compact"`)同样会被拒绝。
89
+ 1. 由用户点击设置页「授权压缩」,或在聊天框发送 `/allow-compact`;授权 5 分钟内有效。
90
+ 2. 用 `ho_handover(action="read")` 复核交接结构,补齐缺项。
91
+ 3. 已压满 3 次时不再压缩,应按换任处理。
92
+ 4. 水位低于 35% 时,提前压缩须用户主动要求并授权。
93
+ 5. 等当前回合结束再重试;确有需要时传 `force=true`。
54
94
 
55
95
  ## 换任未执行
56
96
 
57
- `ho_succeed` 报「换任未执行,未做任何写入」时,按报出的原因逐项处理:
97
+ 现象:`ho_succeed` 报「换任未执行,未做任何写入」。
98
+
99
+ 原因:没有授权;调用者不是在任会话;交接体检不合格;该类会话已有新的在任登记。
100
+
101
+ 处置:
102
+
103
+ 1. 由用户发送 `/allow-succeed`,或在设置页点击「授权换任」;授权一次性,5 分钟内有效。
104
+ 2. 用 `ho_office` 确认现任会话,再由现任会话执行。
105
+ 3. 用 `ho_handover(action="read")` 复核交接,补齐「下一步」等缺项。
106
+ 4. 按报错列出的缺项逐条处理后重试。
107
+
108
+ ## 交接越写越长
109
+
110
+ 现象:交接文件持续增大,出现多个版本的实施记录、需求全文与里程碑,接任者读数分钟仍抓不到在途状态。
111
+
112
+ 原因:历次刷新在旧文件上续写,未按固定流程重写。交接只应写在途与指针,体积不设上限,但由结构控制。
113
+
114
+ 处置:
115
+
116
+ 1. 按 `_Control_Center/templates/Handover.md` 的 4 步重写:`action="read"` 读旧交接、`action="archive"` 归档、读模板、`action="new"` 新建写入。
117
+ 2. 已完成经过移入台账 `Global_Changelog.md` 或任务提交说明;需求全文移入 `PLAN.md` 或任务库文档。
118
+ 3. 旧文件保留在归档目录,不删除、不搬章节。
119
+
120
+ ## 交接体检不通过
121
+
122
+ 现象:`ho_handover` 写入后体检不通过,或 `ho_gate` 报缺节。
123
+
124
+ 原因:项目交接缺「正在做的事」或「下一步」;全局交接缺 §0 至 §7 或字段不全。正文残留「待填」「TODO」一类占位符。
125
+
126
+ 处置:
127
+
128
+ 1. 按 `ho_gate` 输出逐项补齐。
129
+ 2. 全局交接保留 §0 至 §7 全套;项目交接至少保留「正在做的事」与「下一步」。
130
+ 3. 补齐后重跑 `ho_gate`。
131
+
132
+ ## 体系注册路径失效
133
+
134
+ 现象:`ho_docmap(action="check")` 或 `ho_gate` 报「失效 N 条」。
135
+
136
+ 原因:注册里列出的路径被移动或删除;写入时用了绝对路径或越界路径。
137
+
138
+ 处置:
139
+
140
+ 1. 用 `ho_docmap(action="read")` 查看当前注册。
141
+ 2. 按实际位置重新写入:`ho_docmap(action="write", entries=[…])`;路径一律写工作区相对路径。
142
+ 3. 写入前逐条校验路径存在,缺项即拒绝写入。
143
+ 4. 只有本类别在任会话可以写入;已交出的旧会话只读。
144
+
145
+ ## 旧体系未迁移
146
+
147
+ 现象:`ho_gate` 或 `ho_status` 提示「旧文档定位待迁移」。
58
148
 
59
- 1. 没有授权:由用户在聊天框发送 `/allow-succeed`(可留空,也可带 8 位短号授权别的会话),或在设置页「压缩授权」卡片的「换任授权」区域点「允许换任」。授权一次性、5 分钟有效、按会话生效;压缩授权不能顶替换任授权。
60
- 2. 不是在任者:只有登记表中该类会话的现任本人可以换任;已记过一次换任的旧会话也不得再次换任。先用 `ho_office` 确认现任的名字与会话 id,再由现任会话执行。
61
- 3. 交接体检不合格:报错逐条列出缺项——「下一步」一节缺失或没有条目、内容为空、仍有「待填」「TODO」一类占位符。补齐后用 `ho_handover(action=read)` 复核,再重新调用。
149
+ 原因:工作区由 0.9.x 创建,`_Control_Center/records/docmap/` 仍存在。
150
+
151
+ 处置:
152
+
153
+ 1. 先运行 `ho_workspace(action="scaffold")` 补齐 1.0 的目录与文件。
154
+ 2. 再运行 `ho_workspace(action="migrate")`。
155
+ 3. 迁移把条目并入体系注册,并把旧目录移入备份目录,不删除旧文件。
156
+ 4. 迁移完成后重跑 `ho_docmap(action="check")`。
157
+
158
+ ## 提示段未更新
159
+
160
+ 现象:体系注册或计划写入后,提示段仍是旧内容;插件升级后流程文本仍是旧版。
161
+
162
+ 原因:提示段按注册文件签名重装;插件重载不替换已存在会话的提示段文本。
163
+
164
+ 处置:
165
+
166
+ 1. 确认写入结果为「提示段已重装」。
167
+ 2. 未重装时,在该会话触发一轮请求,或重启 DSH。
168
+ 3. 升级插件后,重启 DSH 或新建会话。
169
+ 4. 一次性提醒的状态保存在 `~/.dsh/storages/dsh-handover.reminders.json`;需要重新提醒时删除对应会话条目。
170
+
171
+ ## 全局任务库建立失败
172
+
173
+ 现象:`ho_sessions(action="task-init", task="<任务名>")` 报错。
174
+
175
+ 原因:调用者不是全局会话;任务名不合法;任务目录已存在且非空。
176
+
177
+ 处置:
178
+
179
+ 1. 在全局会话执行该动作。
180
+ 2. 任务名不超过 40 个字符,不含路径分隔符;名字不能作为目录名时拒绝建立。
181
+ 3. 目标目录 `_Control_Center/tasks/<任务名>/` 已有内容时,先归档或改名。
182
+
183
+ ## 全局任务独立失败
184
+
185
+ 现象:`ho_sessions(action="new", from_task="<任务名>")` 报错或未迁移。
186
+
187
+ 原因:调用者不是全局会话;未同时给 `role="project"` 或 `role="misc"`;目标目录已存在且非空;未传 `confirm=true`。
188
+
189
+ 处置:
190
+
191
+ 1. 由全局会话执行,并同时指定 `role` 与 `from_task`。
192
+ 2. 独立为项目时给 `project`;独立为杂项时给 `task`。
193
+ 3. 确认目标工作区与目标目录为空。
194
+ 4. 征得用户同意后传 `confirm=true`。
62
195
 
63
196
  ## 项目名或任务名不合法
64
197
 
65
- 工具报出「项目名不合法」「任务名不合法」一类错误时,说明名字不能作为目录名使用;此时不写入磁盘,也不改动登记。按下列规则改名后重试:
198
+ 现象:工具报「项目名不合法」或「任务名不合法」。
199
+
200
+ 原因:名字要当目录名使用;长度、字符集或保留名不符合要求。
201
+
202
+ 处置:
66
203
 
67
- - 项目名不超过 24 字符,任务名不超过 40 字符。
68
- - 不含 `< > : " / \ | ? *` 与控制字符,不以点或空格结尾,不使用 `CON`、`NUL`、`COM1` 这类设备保留名。
69
- - 名字通常从会话工作目录、首条提示或标题推断。若报错指出名字含 `*` 等字符,检查首条提示中是否将 `Projects/**` 这类通配写法写在与项目名相邻的位置。
204
+ 1. 项目名不超过 24 个字符,任务名不超过 40 个字符。
205
+ 2. 名字不含路径分隔符、`< > : " / \ | ? *` 与控制字符。
206
+ 3. 名字不以点或空格结尾,不使用设备保留名。
207
+ 4. 名字来自首条提示时同样校验;不合法则报错,且不写入磁盘。
70
208
 
71
- 名字合法但被判为普通角色的会话,用设置页「会话角色」卡片或 `ho_sessions(action="role")` 明确设定。
209
+ ## 身份互转失败
210
+
211
+ 现象:`ho_sessions(action="role", migrate="auto")` 报错或只完成一部分。
212
+
213
+ 原因:目标目录已存在且非空;名册里已有目标类别;快照失败。
214
+
215
+ 处置:
216
+
217
+ 1. 确认目标 `Projects/<项目名>/<项目名>库/` 或 `_Misc/tasks/<任务名>/` 为空。
218
+ 2. 确认名册里没有同名类别。
219
+ 3. 重试前检查 `_Archives/_Global/Backups/身份迁移_*` 下的快照。
220
+ 4. 也可改用 `migrate="direct"`:旧体系进备份目录,新位置按模板新建。
221
+
222
+ ## 名称注册被拒绝
223
+
224
+ 现象:`ho_office(action="register", name="<名称>")` 报错。
225
+
226
+ 原因:本会话已有注册名;类别已有其他在任者;名字过长或含路径分隔符。
227
+
228
+ 处置:
229
+
230
+ 1. 注册名只在首次注册时写入,注册后不得自行修改。
231
+ 2. 需要改名时由全局处理。
232
+ 3. 类别已有在任者时,先由全局办理现任的换任或清理。
72
233
 
73
234
  ## 迁移后原路径失效
74
235
 
75
- 若链接被误删,页面会显示「原路径不存在」与「重建链接」。执行:
236
+ 现象:搬动全局根目录后,原路径的链接丢失,页面提示「原路径不存在」。
76
237
 
77
- ```text
78
- ho_workspace(action="move-repair")
79
- ```
238
+ 原因:链接被删除,或切换未完成。
80
239
 
81
- 只重建链接,不改动文件。若新位置也不存在,先确认数据实际位置,再决定是否回退。
240
+ 处置:
82
241
 
83
- ## 交接体检报「缺节」
242
+ 1. 执行 `ho_workspace(action="move-repair")` 重建链接;该动作只建链接,不改动文件。
243
+ 2. 用 `ho_workspace(action="move-status")` 查看迁移阶段。
244
+ 3. 新位置也不存在时,先确认数据位置,再决定是否回退。
245
+
246
+ ## 跨平台相关
247
+
248
+ 现象:在 Linux 或 macOS 上,7-Zip 探测失败、迁移后路径比较异常,或提示里出现 Windows 专有词。
249
+
250
+ 原因:配置了只适用于 Windows 的 7-Zip 路径;同一条路径用不同大小写写法时被误判为相同或不同。
251
+
252
+ 处置:
253
+
254
+ 1. 不配置 `sevenZipPath` 时,插件按常见位置与 PATH 探测 `7z`、`7zz`、`7za`;定制安装再填绝对路径。
255
+ 2. 路径比较由 `lib/pathkey.mjs` 统一处理:Windows 与 macOS 折叠大小写,Linux 保留;不要另写比较逻辑。
256
+ 3. 迁移后的旧路径在 Windows 是 junction,在 POSIX 是目录符号链接;删除链接即可回退。
257
+ 4. 没有 7-Zip 时用 `format=tar` 或保持 `auto`,内置归档器功能等价。
258
+
259
+ ## 语体门禁或文档校验不通过
260
+
261
+ 现象:`npm run test:style` 或 `npm run test:docs` 非零退出。
262
+
263
+ 原因:命中阻断级条款或文档规则,例如口语词、感叹号、界面动作未写「点击」、版本不一致、链接不可达。
264
+
265
+ 处置:
84
266
 
85
- 项目交接至少要有「正在做的事」与「下一步」两节;全局交接需要 §0 至 §7 全套,§0 含七个字段,§7 至少一行 session id。缺节允许压缩,不合格必须先补齐。
267
+ 1. 按输出逐条定位文件与行号。
268
+ 2. 语体门禁的阻断项为 W-01、W-02、W-04、W-05、W-07 与 W-08,其余为警告。
269
+ 3. 文档校验同时检查工具名、版本、链接与版本说明;按提示修正后重跑。
package/package.json CHANGED
@@ -1,71 +1,74 @@
1
- {
2
- "name": "@mingmaple/dsh-handover",
3
- "version": "0.9.14",
4
- "type": "module",
5
- "description": "DeepSeek Harness 插件:把「全局」的交接、闸门、会话清点与上下文压缩续跑流程做成工具(dsh-handover)",
6
- "license": "MIT",
7
- "publishConfig": {
8
- "access": "public"
9
- },
10
- "repository": {
11
- "type": "git",
12
- "url": "git+https://github.com/MingMaple/dsh-handover.git"
13
- },
14
- "homepage": "https://github.com/MingMaple/dsh-handover#readme",
15
- "bugs": {
16
- "url": "https://github.com/MingMaple/dsh-handover/issues"
17
- },
18
- "keywords": [
19
- "dsh",
20
- "deepseek-harness",
21
- "plugin",
22
- "handover",
23
- "context-compaction"
24
- ],
25
- "engines": {
26
- "node": ">=20",
27
- "dsh": ">=0.2.1-rc.2 <0.3.0-0"
28
- },
29
- "exports": {
30
- ".": "./src/index.mjs",
31
- "./client": "./src/client.js"
32
- },
33
- "files": [
34
- "src",
35
- "scripts",
36
- "docs",
37
- "README.md",
38
- "LICENSE"
39
- ],
40
- "scripts": {
41
- "build": "node scripts/build.mjs",
42
- "test": "node src/selftest.mjs --tool all",
43
- "test:blank": "node scripts/blank-dsh.mjs",
44
- "test:smoke": "node scripts/blank-smoke.mjs",
45
- "test:migrate": "node scripts/e2e-migration.mjs",
46
- "test:docs": "node scripts/check-docs.mjs"
47
- },
48
- "dsh": {
49
- "bundle": {
50
- "patch": "./src/cordis.patch.yml"
51
- },
52
- "client": {
53
- "platform": "web",
54
- "inject": [
55
- "@deepseek-ai/dsh-client-ui-settings",
56
- "@deepseek-ai/dsh-client-connection"
57
- ]
58
- },
59
- "compatibility": {
60
- "dsh": "0.2.2-rc.1",
61
- "profiles": [
62
- "desktop",
63
- "web"
64
- ],
65
- "dshReleases": {
66
- "0.2.1-rc.2": "compatible",
67
- "0.2.2-rc.1": "compatible"
68
- }
69
- }
70
- }
71
- }
1
+ {
2
+ "name": "@mingmaple/dsh-handover",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "DeepSeek Harness 插件:把「全局」的交接、闸门、会话清点与上下文压缩续跑流程做成工具(dsh-handover)",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/MingMaple/dsh-handover.git"
13
+ },
14
+ "homepage": "https://github.com/MingMaple/dsh-handover#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/MingMaple/dsh-handover/issues"
17
+ },
18
+ "keywords": [
19
+ "dsh",
20
+ "deepseek-harness",
21
+ "plugin",
22
+ "handover",
23
+ "context-compaction"
24
+ ],
25
+ "engines": {
26
+ "node": ">=20",
27
+ "dsh": ">=0.2.1-rc.2 <0.3.0-0"
28
+ },
29
+ "exports": {
30
+ ".": "./src/index.mjs",
31
+ "./client": "./src/client.js"
32
+ },
33
+ "files": [
34
+ "src",
35
+ "scripts",
36
+ "docs",
37
+ "README.md",
38
+ "LICENSE"
39
+ ],
40
+ "scripts": {
41
+ "build": "node scripts/build.mjs",
42
+ "test": "node src/selftest.mjs --tool all",
43
+ "test:blank": "node scripts/blank-dsh.mjs",
44
+ "test:smoke": "node scripts/blank-smoke.mjs",
45
+ "test:migrate": "node scripts/e2e-migration.mjs",
46
+ "test:docs": "node scripts/check-docs.mjs",
47
+ "test:style": "node scripts/style-gate.mjs",
48
+ "test:behavior": "node scripts/behavior.mjs",
49
+ "test:portability": "node scripts/portability.mjs"
50
+ },
51
+ "dsh": {
52
+ "bundle": {
53
+ "patch": "./src/cordis.patch.yml"
54
+ },
55
+ "client": {
56
+ "platform": "web",
57
+ "inject": [
58
+ "@deepseek-ai/dsh-client-ui-settings",
59
+ "@deepseek-ai/dsh-client-connection"
60
+ ]
61
+ },
62
+ "compatibility": {
63
+ "dsh": "0.2.2-rc.1",
64
+ "profiles": [
65
+ "desktop",
66
+ "web"
67
+ ],
68
+ "dshReleases": {
69
+ "0.2.1-rc.2": "compatible",
70
+ "0.2.2-rc.1": "compatible"
71
+ }
72
+ }
73
+ }
74
+ }