dsh-plugin-guide 0.3.21 → 0.3.23

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 (438) hide show
  1. package/README-es.md +15 -12
  2. package/README-hi.md +15 -12
  3. package/README-pt.md +15 -12
  4. package/README-zh.md +15 -12
  5. package/README.md +290 -280
  6. package/SKILL.md +36 -19
  7. package/dist/dsh-plugin-dev.js +113 -9
  8. package/guide/choosing-a-plugin.md +412 -0
  9. package/guide/choosing-a-plugin.zh-CN.md +414 -0
  10. package/guide/links.md +20 -2
  11. package/guide/migration-0.2.md +219 -0
  12. package/guide/plugin-dev-guide.md +99 -24
  13. package/guide/quick-reference.es.md +14 -8
  14. package/guide/quick-reference.hi.md +15 -9
  15. package/guide/quick-reference.md +18 -10
  16. package/guide/quick-reference.pt.md +15 -9
  17. package/guide/quick-reference.zh-CN.md +19 -11
  18. package/guide/release-engineering.md +2 -2
  19. package/guide/release-engineering.zh-CN.md +2 -2
  20. package/guide/unfixed-issues.md +117 -82
  21. package/guide/when-to-retire-a-plugin.md +127 -0
  22. package/guide/when-to-retire-a-plugin.zh-CN.md +127 -0
  23. package/icon.svg +5 -0
  24. package/locale/en.json +6 -0
  25. package/locale/zh.json +6 -0
  26. package/package.json +8 -4
  27. package/references/official-docs/AGENTS.md +8 -5
  28. package/references/official-docs/CONTRIBUTING.i18n.yaml +6 -5
  29. package/references/official-docs/README.i18n.yaml +33 -5
  30. package/references/official-docs/README.zh.md +3 -3
  31. package/references/official-docs/SNAPSHOT.md +3 -3
  32. package/references/official-docs/THIRD_PARTY_NOTICES.md +34 -6
  33. package/references/official-docs/docs/AGENTS.md +4 -4
  34. package/references/official-docs/docs/agent-lifecycle.i18n.yaml +9 -5
  35. package/references/official-docs/docs/api-gateway.i18n.yaml +27 -5
  36. package/references/official-docs/docs/api-gateway.md +10 -9
  37. package/references/official-docs/docs/api-gateway.zh.md +10 -9
  38. package/references/official-docs/docs/architecture.i18n.yaml +36 -5
  39. package/references/official-docs/docs/architecture.md +10 -8
  40. package/references/official-docs/docs/architecture.zh.md +10 -8
  41. package/references/official-docs/docs/capability-seams.i18n.yaml +9 -5
  42. package/references/official-docs/docs/capability-seams.md +76 -32
  43. package/references/official-docs/docs/capability-seams.zh.md +76 -32
  44. package/references/official-docs/docs/config-catalog.i18n.yaml +18 -5
  45. package/references/official-docs/docs/config-catalog.md +1360 -765
  46. package/references/official-docs/docs/config-catalog.zh.md +1363 -767
  47. package/references/official-docs/docs/cookbook/adding-a-package.i18n.yaml +27 -5
  48. package/references/official-docs/docs/cookbook/adding-a-package.md +56 -3
  49. package/references/official-docs/docs/cookbook/adding-a-package.zh.md +54 -3
  50. package/references/official-docs/docs/cookbook/adding-a-remote-api.i18n.yaml +24 -5
  51. package/references/official-docs/docs/cookbook/adding-a-remote-api.md +2 -2
  52. package/references/official-docs/docs/cookbook/adding-a-remote-api.zh.md +2 -2
  53. package/references/official-docs/docs/cookbook/adding-a-session-format-version.i18n.yaml +39 -5
  54. package/references/official-docs/docs/cookbook/adding-a-session-format-version.md +46 -6
  55. package/references/official-docs/docs/cookbook/adding-a-session-format-version.zh.md +46 -6
  56. package/references/official-docs/docs/cookbook/adding-a-settings-card.i18n.yaml +21 -5
  57. package/references/official-docs/docs/cookbook/adding-a-settings-card.md +34 -64
  58. package/references/official-docs/docs/cookbook/adding-a-settings-card.zh.md +34 -64
  59. package/references/official-docs/docs/cookbook/adding-a-tool.i18n.yaml +30 -5
  60. package/references/official-docs/docs/cookbook/adding-a-tool.md +2 -2
  61. package/references/official-docs/docs/cookbook/adding-a-tool.zh.md +2 -2
  62. package/references/official-docs/docs/cookbook/adding-a-vendored-package.i18n.yaml +18 -5
  63. package/references/official-docs/docs/cookbook/adding-an-llm-adapter.i18n.yaml +18 -5
  64. package/references/official-docs/docs/cookbook/extension-cookbook.i18n.yaml +24 -5
  65. package/references/official-docs/docs/cookbook/extension-cookbook.md +3 -3
  66. package/references/official-docs/docs/cookbook/extension-cookbook.zh.md +3 -3
  67. package/references/official-docs/docs/cookbook/maintaining-dsh-code-review.i18n.yaml +21 -5
  68. package/references/official-docs/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml +15 -5
  69. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml +30 -5
  70. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.md +13 -1
  71. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.zh.md +13 -1
  72. package/references/official-docs/docs/cordis-api/context.i18n.yaml +72 -5
  73. package/references/official-docs/docs/cordis-api/events.i18n.yaml +36 -5
  74. package/references/official-docs/docs/cordis-api/fiber.i18n.yaml +75 -5
  75. package/references/official-docs/docs/cordis-api/inherited.md +15 -13
  76. package/references/official-docs/docs/cordis-api/registry.i18n.yaml +21 -5
  77. package/references/official-docs/docs/cordis-api/service.i18n.yaml +36 -5
  78. package/references/official-docs/docs/cordis-primer.i18n.yaml +21 -5
  79. package/references/official-docs/docs/cordis-tutorial/01-first-plugin.i18n.yaml +21 -5
  80. package/references/official-docs/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml +15 -5
  81. package/references/official-docs/docs/cordis-tutorial/03-services.i18n.yaml +21 -5
  82. package/references/official-docs/docs/cordis-tutorial/04-events.i18n.yaml +15 -5
  83. package/references/official-docs/docs/cordis-tutorial/05-config.i18n.yaml +18 -5
  84. package/references/official-docs/docs/cordis-tutorial/05-config.md +27 -0
  85. package/references/official-docs/docs/cordis-tutorial/05-config.zh.md +27 -0
  86. package/references/official-docs/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml +15 -5
  87. package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.i18n.yaml +18 -5
  88. package/references/official-docs/docs/cordis-tutorial/index.i18n.yaml +15 -5
  89. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.i18n.yaml +33 -5
  90. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.md +7 -7
  91. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +7 -7
  92. package/references/official-docs/docs/defensive-patterns.i18n.yaml +27 -5
  93. package/references/official-docs/docs/dependency-catalog.json +2 -2
  94. package/references/official-docs/docs/development.i18n.yaml +48 -5
  95. package/references/official-docs/docs/development.md +27 -10
  96. package/references/official-docs/docs/development.zh.md +27 -10
  97. package/references/official-docs/docs/event-producer-consumer.i18n.yaml +12 -5
  98. package/references/official-docs/docs/event-producer-consumer.md +78 -66
  99. package/references/official-docs/docs/event-producer-consumer.zh.md +78 -66
  100. package/references/official-docs/docs/glossary.i18n.yaml +24 -5
  101. package/references/official-docs/docs/graph-atlas.i18n.yaml +9 -5
  102. package/references/official-docs/docs/i18n/README.i18n.yaml +18 -5
  103. package/references/official-docs/docs/i18n/README.md +12 -8
  104. package/references/official-docs/docs/i18n/README.zh.md +12 -8
  105. package/references/official-docs/docs/i18n/terminology.md +4 -4
  106. package/references/official-docs/docs/i18n/translation-prompt.md +2 -2
  107. package/references/official-docs/docs/i18n/translation-rules.i18n.yaml +27 -5
  108. package/references/official-docs/docs/module-graph.i18n.yaml +9 -5
  109. package/references/official-docs/docs/module-graph.md +348 -245
  110. package/references/official-docs/docs/module-graph.zh.md +348 -245
  111. package/references/official-docs/docs/persistence-catalog.i18n.yaml +2064 -5
  112. package/references/official-docs/docs/persistence-catalog.md +5275 -3205
  113. package/references/official-docs/docs/persistence-catalog.zh.md +5275 -3205
  114. package/references/official-docs/docs/persistence-changes/2026-09-11-initial.i18n.yaml +27 -5
  115. package/references/official-docs/docs/persistence-changes/2026-09-12-auto-review-error-metadata.i18n.yaml +27 -5
  116. package/references/official-docs/docs/persistence-changes/2026-09-14-image-offload.i18n.yaml +27 -5
  117. package/references/official-docs/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml +27 -5
  118. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml +28 -0
  119. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.md +120 -0
  120. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.schema.json +16212 -0
  121. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.zh.md +120 -0
  122. package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.i18n.yaml +28 -0
  123. package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.md +48 -0
  124. package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.schema.json +302 -0
  125. package/references/official-docs/docs/persistence-changes/2026-09-18-schedule-optional-title.zh.md +48 -0
  126. package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.i18n.yaml +28 -0
  127. package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.md +48 -0
  128. package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.schema.json +250 -0
  129. package/references/official-docs/docs/persistence-changes/2026-09-20-unknown-child-catalog.zh.md +48 -0
  130. package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.i18n.yaml +28 -0
  131. package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.md +60 -0
  132. package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.schema.json +11405 -0
  133. package/references/official-docs/docs/persistence-changes/2026-09-21-user-question-reply.zh.md +60 -0
  134. package/references/official-docs/docs/persistence-changes/README.i18n.yaml +27 -5
  135. package/references/official-docs/docs/persistence-changes/README.md +17 -3
  136. package/references/official-docs/docs/persistence-changes/README.zh.md +17 -3
  137. package/references/official-docs/docs/persistence-changes/finalized/v4.json +379 -0
  138. package/references/official-docs/docs/persistence-changes/historical-formats/README.i18n.yaml +27 -5
  139. package/references/official-docs/docs/persistence-changes/historical-formats/README.md +3 -2
  140. package/references/official-docs/docs/persistence-changes/historical-formats/README.zh.md +3 -2
  141. package/references/official-docs/docs/persistence-changes/historical-formats/v0.i18n.yaml +1284 -5
  142. package/references/official-docs/docs/persistence-changes/historical-formats/v1.i18n.yaml +1284 -5
  143. package/references/official-docs/docs/persistence-changes/historical-formats/v2.i18n.yaml +1344 -5
  144. package/references/official-docs/docs/persistence-changes/historical-formats/v3.i18n.yaml +1441 -0
  145. package/references/official-docs/docs/persistence-changes/historical-formats/v3.md +5634 -0
  146. package/references/official-docs/docs/persistence-changes/historical-formats/v3.schema.json +61307 -0
  147. package/references/official-docs/docs/persistence-changes/historical-formats/v3.zh.md +5634 -0
  148. package/references/official-docs/docs/persistence-changes/releases/README.i18n.yaml +30 -5
  149. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.1.i18n.yaml +30 -5
  150. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml +30 -5
  151. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml +30 -5
  152. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.4.i18n.yaml +30 -5
  153. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.5.i18n.yaml +30 -5
  154. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.1.i18n.yaml +30 -5
  155. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.2.i18n.yaml +30 -5
  156. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.3.i18n.yaml +30 -5
  157. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.5.i18n.yaml +30 -5
  158. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.6.i18n.yaml +30 -5
  159. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml +30 -5
  160. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml +30 -5
  161. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml +30 -5
  162. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml +30 -5
  163. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml +30 -5
  164. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml +30 -5
  165. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.3.i18n.yaml +30 -5
  166. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml +30 -5
  167. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.5.i18n.yaml +30 -5
  168. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-rc.1.i18n.yaml +30 -5
  169. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml +30 -5
  170. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml +30 -5
  171. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml +30 -5
  172. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml +30 -5
  173. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.schema.json +3 -3
  174. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-rc.1.i18n.yaml +30 -5
  175. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-rc.2.i18n.yaml +30 -5
  176. package/references/official-docs/docs/persistence-schema.json +12692 -48753
  177. package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml +33 -5
  178. package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml +27 -5
  179. package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml +27 -5
  180. package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml +27 -5
  181. package/references/official-docs/docs/postmortem/README.i18n.yaml +6 -5
  182. package/references/official-docs/docs/rescope.i18n.yaml +18 -5
  183. package/references/official-docs/docs/rescope.md +1 -1
  184. package/references/official-docs/docs/rescope.zh.md +1 -1
  185. package/references/official-docs/docs/session-format-status.i18n.yaml +27 -5
  186. package/references/official-docs/docs/session-format-status.md +17 -3
  187. package/references/official-docs/docs/session-format-status.zh.md +17 -3
  188. package/references/official-docs/docs/subsystems/README.i18n.yaml +6 -5
  189. package/references/official-docs/docs/subsystems/README.md +6 -3
  190. package/references/official-docs/docs/subsystems/README.zh.md +6 -3
  191. package/references/official-docs/docs/subsystems/agent-team.i18n.yaml +21 -5
  192. package/references/official-docs/docs/subsystems/agent-team.md +52 -28
  193. package/references/official-docs/docs/subsystems/agent-team.zh.md +52 -28
  194. package/references/official-docs/docs/subsystems/approval.i18n.yaml +18 -5
  195. package/references/official-docs/docs/subsystems/approval.md +1 -1
  196. package/references/official-docs/docs/subsystems/approval.zh.md +1 -1
  197. package/references/official-docs/docs/subsystems/attachment.i18n.yaml +12 -5
  198. package/references/official-docs/docs/subsystems/attachment.md +2 -2
  199. package/references/official-docs/docs/subsystems/attachment.zh.md +2 -2
  200. package/references/official-docs/docs/subsystems/boot.i18n.yaml +9 -5
  201. package/references/official-docs/docs/subsystems/boot.md +117 -17
  202. package/references/official-docs/docs/subsystems/boot.zh.md +117 -17
  203. package/references/official-docs/docs/subsystems/browser-use.i18n.yaml +18 -5
  204. package/references/official-docs/docs/subsystems/claude-code-mods.i18n.yaml +28 -0
  205. package/references/official-docs/docs/subsystems/claude-code-mods.md +146 -0
  206. package/references/official-docs/docs/subsystems/claude-code-mods.zh.md +146 -0
  207. package/references/official-docs/docs/subsystems/client-modules.i18n.yaml +18 -5
  208. package/references/official-docs/docs/subsystems/client-modules.md +13 -7
  209. package/references/official-docs/docs/subsystems/client-modules.zh.md +13 -7
  210. package/references/official-docs/docs/subsystems/client-resources.i18n.yaml +21 -5
  211. package/references/official-docs/docs/subsystems/commands.i18n.yaml +18 -5
  212. package/references/official-docs/docs/subsystems/commands.md +1 -1
  213. package/references/official-docs/docs/subsystems/commands.zh.md +1 -1
  214. package/references/official-docs/docs/subsystems/compaction.i18n.yaml +21 -5
  215. package/references/official-docs/docs/subsystems/compaction.md +2 -2
  216. package/references/official-docs/docs/subsystems/compaction.zh.md +2 -2
  217. package/references/official-docs/docs/subsystems/computer-use.i18n.yaml +15 -5
  218. package/references/official-docs/docs/subsystems/conversation.i18n.yaml +30 -5
  219. package/references/official-docs/docs/subsystems/conversation.md +35 -6
  220. package/references/official-docs/docs/subsystems/conversation.zh.md +34 -5
  221. package/references/official-docs/docs/subsystems/core.i18n.yaml +36 -5
  222. package/references/official-docs/docs/subsystems/core.md +70 -214
  223. package/references/official-docs/docs/subsystems/core.zh.md +70 -214
  224. package/references/official-docs/docs/subsystems/credentials.i18n.yaml +24 -5
  225. package/references/official-docs/docs/subsystems/credentials.md +168 -5
  226. package/references/official-docs/docs/subsystems/credentials.zh.md +168 -5
  227. package/references/official-docs/docs/subsystems/deliverables.i18n.yaml +27 -5
  228. package/references/official-docs/docs/subsystems/extensions.i18n.yaml +6 -5
  229. package/references/official-docs/docs/subsystems/extensions.md +6 -4
  230. package/references/official-docs/docs/subsystems/extensions.zh.md +6 -4
  231. package/references/official-docs/docs/subsystems/feedback.i18n.yaml +27 -5
  232. package/references/official-docs/docs/subsystems/filesystem.i18n.yaml +33 -5
  233. package/references/official-docs/docs/subsystems/filesystem.md +10 -0
  234. package/references/official-docs/docs/subsystems/filesystem.zh.md +10 -0
  235. package/references/official-docs/docs/subsystems/goal.i18n.yaml +18 -5
  236. package/references/official-docs/docs/subsystems/goal.md +1 -1
  237. package/references/official-docs/docs/subsystems/goal.zh.md +1 -1
  238. package/references/official-docs/docs/subsystems/jobs.i18n.yaml +24 -5
  239. package/references/official-docs/docs/subsystems/jobs.md +335 -126
  240. package/references/official-docs/docs/subsystems/jobs.zh.md +335 -126
  241. package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +48 -5
  242. package/references/official-docs/docs/subsystems/llm-streaming.md +60 -31
  243. package/references/official-docs/docs/subsystems/llm-streaming.zh.md +60 -31
  244. package/references/official-docs/docs/subsystems/lsp.i18n.yaml +18 -5
  245. package/references/official-docs/docs/subsystems/mcp.i18n.yaml +33 -5
  246. package/references/official-docs/docs/subsystems/mcp.md +2 -2
  247. package/references/official-docs/docs/subsystems/mcp.zh.md +2 -2
  248. package/references/official-docs/docs/subsystems/office-to-pdf.i18n.yaml +18 -5
  249. package/references/official-docs/docs/subsystems/office-to-pdf.md +4 -4
  250. package/references/official-docs/docs/subsystems/office-to-pdf.zh.md +4 -4
  251. package/references/official-docs/docs/subsystems/otel.i18n.yaml +7 -0
  252. package/references/official-docs/docs/subsystems/otel.md +44 -0
  253. package/references/official-docs/docs/subsystems/otel.zh.md +44 -0
  254. package/references/official-docs/docs/subsystems/permission-presets.i18n.yaml +18 -5
  255. package/references/official-docs/docs/subsystems/permission-presets.md +7 -6
  256. package/references/official-docs/docs/subsystems/permission-presets.zh.md +7 -6
  257. package/references/official-docs/docs/subsystems/persistence.i18n.yaml +36 -5
  258. package/references/official-docs/docs/subsystems/persistence.md +3 -3
  259. package/references/official-docs/docs/subsystems/persistence.zh.md +3 -3
  260. package/references/official-docs/docs/subsystems/plan.i18n.yaml +21 -5
  261. package/references/official-docs/docs/subsystems/plan.md +1 -1
  262. package/references/official-docs/docs/subsystems/plan.zh.md +1 -1
  263. package/references/official-docs/docs/subsystems/product-telemetry.i18n.yaml +10 -0
  264. package/references/official-docs/docs/subsystems/product-telemetry.md +79 -0
  265. package/references/official-docs/docs/subsystems/product-telemetry.zh.md +79 -0
  266. package/references/official-docs/docs/subsystems/ptc-runtime.i18n.yaml +18 -5
  267. package/references/official-docs/docs/subsystems/sandbox.i18n.yaml +18 -5
  268. package/references/official-docs/docs/subsystems/sandbox.md +1 -1
  269. package/references/official-docs/docs/subsystems/sandbox.zh.md +1 -1
  270. package/references/official-docs/docs/subsystems/schedule.i18n.yaml +39 -5
  271. package/references/official-docs/docs/subsystems/schedule.md +391 -33
  272. package/references/official-docs/docs/subsystems/schedule.zh.md +391 -33
  273. package/references/official-docs/docs/subsystems/scope.i18n.yaml +15 -5
  274. package/references/official-docs/docs/subsystems/scope.md +1 -1
  275. package/references/official-docs/docs/subsystems/scope.zh.md +1 -1
  276. package/references/official-docs/docs/subsystems/session-projection.i18n.yaml +15 -5
  277. package/references/official-docs/docs/subsystems/session-projection.md +20 -18
  278. package/references/official-docs/docs/subsystems/session-projection.zh.md +20 -18
  279. package/references/official-docs/docs/subsystems/session-query.i18n.yaml +27 -5
  280. package/references/official-docs/docs/subsystems/session-reference.i18n.yaml +18 -5
  281. package/references/official-docs/docs/subsystems/session-telemetry.i18n.yaml +21 -5
  282. package/references/official-docs/docs/subsystems/session-telemetry.md +6 -4
  283. package/references/official-docs/docs/subsystems/session-telemetry.zh.md +6 -4
  284. package/references/official-docs/docs/subsystems/session-title.i18n.yaml +15 -5
  285. package/references/official-docs/docs/subsystems/session.i18n.yaml +66 -5
  286. package/references/official-docs/docs/subsystems/session.md +113 -62
  287. package/references/official-docs/docs/subsystems/session.zh.md +113 -62
  288. package/references/official-docs/docs/subsystems/settings.i18n.yaml +12 -5
  289. package/references/official-docs/docs/subsystems/settings.md +42 -292
  290. package/references/official-docs/docs/subsystems/settings.zh.md +42 -292
  291. package/references/official-docs/docs/subsystems/shell.i18n.yaml +24 -5
  292. package/references/official-docs/docs/subsystems/shell.md +29 -22
  293. package/references/official-docs/docs/subsystems/shell.zh.md +29 -22
  294. package/references/official-docs/docs/subsystems/sidebar-right.i18n.yaml +36 -5
  295. package/references/official-docs/docs/subsystems/sidebar-right.md +14 -9
  296. package/references/official-docs/docs/subsystems/sidebar-right.zh.md +14 -9
  297. package/references/official-docs/docs/subsystems/skills.i18n.yaml +27 -5
  298. package/references/official-docs/docs/subsystems/skills.md +2 -2
  299. package/references/official-docs/docs/subsystems/skills.zh.md +2 -2
  300. package/references/official-docs/docs/subsystems/slots.i18n.yaml +27 -5
  301. package/references/official-docs/docs/subsystems/slots.md +21 -7
  302. package/references/official-docs/docs/subsystems/slots.zh.md +21 -7
  303. package/references/official-docs/docs/subsystems/spill.i18n.yaml +15 -5
  304. package/references/official-docs/docs/subsystems/spill.md +1 -1
  305. package/references/official-docs/docs/subsystems/spill.zh.md +1 -1
  306. package/references/official-docs/docs/subsystems/ssh.i18n.yaml +21 -5
  307. package/references/official-docs/docs/subsystems/storage.i18n.yaml +24 -5
  308. package/references/official-docs/docs/subsystems/storage.md +1 -2
  309. package/references/official-docs/docs/subsystems/storage.zh.md +1 -2
  310. package/references/official-docs/docs/subsystems/subagent.i18n.yaml +30 -5
  311. package/references/official-docs/docs/subsystems/subagent.md +35 -60
  312. package/references/official-docs/docs/subsystems/subagent.zh.md +35 -60
  313. package/references/official-docs/docs/subsystems/subprocess.i18n.yaml +30 -5
  314. package/references/official-docs/docs/subsystems/system-prompt.i18n.yaml +18 -5
  315. package/references/official-docs/docs/subsystems/terminal.i18n.yaml +18 -5
  316. package/references/official-docs/docs/subsystems/todo.i18n.yaml +12 -5
  317. package/references/official-docs/docs/subsystems/todo.md +3 -3
  318. package/references/official-docs/docs/subsystems/todo.zh.md +3 -3
  319. package/references/official-docs/docs/subsystems/token-meter.i18n.yaml +12 -5
  320. package/references/official-docs/docs/subsystems/tools.i18n.yaml +24 -5
  321. package/references/official-docs/docs/subsystems/tools.md +15 -4
  322. package/references/official-docs/docs/subsystems/tools.zh.md +15 -4
  323. package/references/official-docs/docs/subsystems/typert.i18n.yaml +21 -5
  324. package/references/official-docs/docs/subsystems/typert.md +147 -6
  325. package/references/official-docs/docs/subsystems/typert.zh.md +147 -6
  326. package/references/official-docs/docs/subsystems/user-questions.i18n.yaml +27 -5
  327. package/references/official-docs/docs/subsystems/user-questions.md +128 -1
  328. package/references/official-docs/docs/subsystems/user-questions.zh.md +129 -2
  329. package/references/official-docs/docs/subsystems/voice-input.i18n.yaml +19 -0
  330. package/references/official-docs/docs/subsystems/voice-input.md +164 -0
  331. package/references/official-docs/docs/subsystems/voice-input.zh.md +164 -0
  332. package/references/official-docs/docs/subsystems/web-client.i18n.yaml +36 -5
  333. package/references/official-docs/docs/subsystems/web-client.md +10 -5
  334. package/references/official-docs/docs/subsystems/web-client.zh.md +10 -5
  335. package/references/official-docs/docs/subsystems/web-server.i18n.yaml +15 -5
  336. package/references/official-docs/docs/subsystems/web-server.md +12 -4
  337. package/references/official-docs/docs/subsystems/web-server.zh.md +12 -4
  338. package/references/official-docs/docs/subsystems/web.i18n.yaml +27 -5
  339. package/references/official-docs/docs/subsystems/webhook.i18n.yaml +18 -5
  340. package/references/official-docs/docs/subsystems/webhook.md +1 -1
  341. package/references/official-docs/docs/subsystems/webhook.zh.md +1 -1
  342. package/references/official-docs/docs/subsystems/workflow.i18n.yaml +27 -5
  343. package/references/official-docs/docs/subsystems/workflow.md +2 -2
  344. package/references/official-docs/docs/subsystems/workflow.zh.md +2 -2
  345. package/references/official-docs/docs/subsystems/workspace.i18n.yaml +27 -5
  346. package/references/official-docs/docs/subsystems/workspace.md +175 -35
  347. package/references/official-docs/docs/subsystems/workspace.zh.md +175 -35
  348. package/references/official-docs/docs/testing.i18n.yaml +33 -5
  349. package/references/official-docs/docs/testing.md +2 -2
  350. package/references/official-docs/docs/testing.zh.md +2 -2
  351. package/references/official-docs/docs/tool-catalog.i18n.yaml +312 -5
  352. package/references/official-docs/docs/tool-catalog.md +321 -92
  353. package/references/official-docs/docs/tool-catalog.zh.md +321 -92
  354. package/references/official-docs/docs/tool-execution-pipeline.i18n.yaml +9 -5
  355. package/references/official-docs/docs/tool-execution-pipeline.md +6 -3
  356. package/references/official-docs/docs/tool-execution-pipeline.zh.md +6 -3
  357. package/references/official-docs/docs/ui-radius.i18n.yaml +31 -0
  358. package/references/official-docs/docs/ui-radius.md +115 -0
  359. package/references/official-docs/docs/ui-radius.zh.md +115 -0
  360. package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.i18n.yaml +16 -0
  361. package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.md +22 -0
  362. package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.zh.md +22 -0
  363. package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.i18n.yaml +16 -0
  364. package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.md +25 -0
  365. package/references/official-docs/docs/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.zh.md +25 -0
  366. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.i18n.yaml +16 -0
  367. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.md +18 -0
  368. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.zh.md +18 -0
  369. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.i18n.yaml +16 -0
  370. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.md +23 -0
  371. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.zh.md +23 -0
  372. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.i18n.yaml +16 -0
  373. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.md +22 -0
  374. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.zh.md +22 -0
  375. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.i18n.yaml +16 -0
  376. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.md +27 -0
  377. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.zh.md +27 -0
  378. package/references/official-docs/docs/user/develop/basic/config.i18n.yaml +27 -5
  379. package/references/official-docs/docs/user/develop/basic/index.i18n.yaml +36 -5
  380. package/references/official-docs/docs/user/develop/basic/publish.i18n.yaml +30 -5
  381. package/references/official-docs/docs/user/develop/basic/publish.md +7 -1
  382. package/references/official-docs/docs/user/develop/basic/publish.zh.md +7 -1
  383. package/references/official-docs/docs/user/develop/basic/tool.i18n.yaml +15 -5
  384. package/references/official-docs/docs/user/develop/framework/events.i18n.yaml +45 -5
  385. package/references/official-docs/docs/user/develop/framework/index.i18n.yaml +30 -5
  386. package/references/official-docs/docs/user/develop/framework/service.i18n.yaml +39 -5
  387. package/references/official-docs/docs/user/develop/practice/dynamic-cordis.i18n.yaml +9 -5
  388. package/references/official-docs/docs/user/develop/practice/index.i18n.yaml +45 -5
  389. package/references/official-docs/docs/user/develop/practice/llm-adapter.i18n.yaml +33 -5
  390. package/references/official-docs/docs/user/develop/practice/llm-adapter.md +1 -1
  391. package/references/official-docs/docs/user/develop/practice/llm-adapter.zh.md +1 -1
  392. package/references/official-docs/docs/user/guide/github-review.i18n.yaml +24 -5
  393. package/references/official-docs/docs/user/guide/index.i18n.yaml +18 -5
  394. package/references/official-docs/docs/user/guide/index.md +1 -0
  395. package/references/official-docs/docs/user/guide/index.zh.md +1 -0
  396. package/references/official-docs/docs/user/guide/mcp-memory.i18n.yaml +36 -5
  397. package/references/official-docs/docs/user/guide/network-proxy.i18n.yaml +24 -5
  398. package/references/official-docs/docs/user/guide/providers-custom-form.png +0 -0
  399. package/references/official-docs/docs/user/guide/providers-custom-form.zh.png +0 -0
  400. package/references/official-docs/docs/user/guide/providers-models-page.png +0 -0
  401. package/references/official-docs/docs/user/guide/providers-models-page.zh.png +0 -0
  402. package/references/official-docs/docs/user/guide/providers.i18n.yaml +36 -5
  403. package/references/official-docs/docs/user/guide/providers.md +88 -78
  404. package/references/official-docs/docs/user/guide/providers.zh.md +102 -92
  405. package/references/official-docs/docs/user/guide/public-deployments.i18n.yaml +19 -0
  406. package/references/official-docs/docs/user/guide/public-deployments.md +33 -0
  407. package/references/official-docs/docs/user/guide/public-deployments.zh.md +33 -0
  408. package/references/official-docs/docs/user/guide/python-sdk.i18n.yaml +27 -5
  409. package/references/official-docs/docs/user/guide/python-sdk.md +1 -1
  410. package/references/official-docs/docs/user/guide/python-sdk.zh.md +1 -1
  411. package/references/official-docs/docs/user/guide/schedule.i18n.yaml +30 -5
  412. package/references/official-docs/docs/user/guide/schedule.md +69 -11
  413. package/references/official-docs/docs/user/guide/schedule.zh.md +69 -11
  414. package/references/official-docs/docs/user/index.i18n.yaml +9 -5
  415. package/references/official-docs/docs/web-styling.i18n.yaml +18 -5
  416. package/references/official-docs/docs/web-styling.md +12 -3
  417. package/references/official-docs/docs/web-styling.zh.md +12 -3
  418. package/references/official-docs/packages/AGENTS.md +1 -2
  419. package/references/official-docs/packages/README.md +5 -5
  420. package/references/official-docs/vendor/README.md +6 -2
  421. package/references/official-docs/website-docs.ts +10 -3
  422. package/references/official-plugin-dev-skill.md +124 -0
  423. package/references/sources.md +10 -5
  424. package/scripts/archive-discussions.ps1 +9 -1
  425. package/scripts/build-llms-full.mjs +64 -0
  426. package/scripts/check-docs-drift.ps1 +1 -1
  427. package/scripts/sync-official-docs.ps1 +1 -1
  428. package/templates/js/icon.svg +4 -0
  429. package/templates/js/locale/en.json +6 -0
  430. package/templates/js/locale/zh.json +6 -0
  431. package/templates/js/package.json +9 -1
  432. package/templates/ts/icon.svg +4 -0
  433. package/templates/ts/locale/en.json +6 -0
  434. package/templates/ts/locale/zh.json +6 -0
  435. package/templates/ts/package.json +9 -1
  436. package/references/official-docs/docs/subsystems/invariants.i18n.yaml +0 -6
  437. package/references/official-docs/docs/subsystems/invariants.md +0 -88
  438. package/references/official-docs/docs/subsystems/invariants.zh.md +0 -88
@@ -2,109 +2,144 @@
2
2
 
3
3
  > 本文件是 `dsh-plugin-guide` 知识库对官方仓库社区讨论的**源码级结论收拢**:
4
4
  > 每个条目都在基线提交上逐行核实过(read/grep),附 `path:line`、临时规避与原文讨论链接。
5
- > 汇总帖见官方 Discussions [DSH master (0.1.6-alpha.2 / ddefc45fbc) 仍未修复的问题清单(社区核实版)](https://github.com/deepseek-ai/deepseek-harness/discussions/6520)。
5
+ > 汇总帖见官方 Discussions [DSH master 仍未修复的问题清单(社区核实版)](https://github.com/deepseek-ai/deepseek-harness/discussions/6520)。
6
6
  >
7
7
  > - 初版基线:`c291e7961a515f6d7af9304e7fd1d257929aef26`(2026-09-10 快照,0.1.5-rc.2 世代)
8
- > - **复核基线:`0d1f50007f9bca3f52b06e1c3074fa14d5fb0720`(2026-09-15,0.1.6-alpha.1 世代;区间 666 提交 / 3123 改动文件)——2026-09-15 全表重核:1 项已修复(#6129)、1 项转部分修复(#2)、行号已按新基线刷新**
9
- > - **复核基线 2:`ddefc45fbc7f8e46dd73185e68295696d1297887`(`dsh-v0.1.6-alpha.2`,2026-09-19;较上一基线 +882 提交)——2026-09-19 再核:#27 已修复(`6b05ed53e9`)、#1 转部分修复(`61c548e200`:同级模式已接受,仅更窄/不受支持仍抛错),下表行号已刷新**
8
+ > - 复核基线 1:`0d1f50007f9bca3f52b06e1c3074fa14d5fb0720`(2026-09-15,0.1.6-alpha.1 世代;区间 666 提交)
9
+ > - 复核基线 2:`ddefc45fbc7f8e46dd73185e68295696d1297887`(`dsh-v0.1.6-alpha.2`,2026-09-19;+882 提交)
10
+ > - **复核基线 3:`5badb15009ae1756c3afe0ae0cef1faafc290ccc`(`dsh-v0.2.1-alpha.1`,2026-10-03;+2300 余提交 / 8763 改动文件)——2026-10-06 全表重核,逐条复核覆盖 #1–#32 与 S1–S7**:
11
+ > - **转入已修复 4 项**:#2(协议平面压平为 Messages-only,旧 chat-completions 半边删除;**后继形态 #8836 仍在**)、#5(`code`→`ptc` 迁移)、#10(pi-ai ^0.87.1 带上 `x-opencode-session`)、#22(压缩阈值改为 `min(window×ratio, window−reserved−headroom)`)、#29(telemetry 读取拍平 + 迁移产物强校验)——共 5 项,其中 #5 的修复**早于上一基线**,说明旧条目本身就过时。
12
+ > - **判为不可复现 1 项**:#4(read_image)移入 §2,保留记录但**不要再当 bug 传播**。
13
+ > - **部分修复 3 项**:#1(同级已接受、更窄仍抛)、#13(windowsHide 半侧已消失,自愈半侧仍在)、#19(`./invariant` 子路径已随 invariants 整体移除而消失,残留 devDependency `dsh-attachment` 引用)、S5(SKILL.md 半侧早已修好,仅剩生成文件/文档措辞残留)——共 4 项。
14
+ > - **新核实 11 项**:§3 的 T1–T11(社区在 2026-09-15→10-06 窗口内提出,并经源码或已发布产物双向复核)。
15
+ > - **行号全面刷新**:#23/#24/#26/#28/#30/#31/#32/S2/S4/S6/S7 的行号整体前移了一代;S5 引用**过时两代**;S1 的失败模式静态不可复现,已降级。
16
+ > - 区间内两处上游改名/重写已并入条目:`llm-deepseek` 协议平面压平(`99e22ebbeb`,`src/common/*` → `src/*`、chat-completions 删除)、`preset/agent-presets` → `preset/agent-preset`(`d1e22a7e24`)。
10
17
  > - 核实人:PerryLink([dsh-plugin-guide](https://github.com/perrylink/dsh-plugin-guide) 维护者)
11
18
  > - 用法:开发插件/排障时按「症状 → 位置 → 规避」查;条目后附原讨论,官方有新回复时以原帖为准。
12
- > - 诚实标注:无法在源码复核的环节(依赖未安装的半边)已注明。
19
+ > - 诚实标注:无法在源码复核的环节已注明 `UNVERIFIABLE`;**判为不可复现的条目不删除**,移入 §2 保留为"疑似误诊"记录。
20
+ > - **维护者参与度**:本轮通读窗口内 3100 条讨论,**没有任何维护者在任何帖里确认过修复或设计决定**;`#6520` 最后活动为 2026-09-23,无维护者回复。官方 Release 说明是唯一权威的"官方决定"记录(仓库无 CHANGELOG、无 issue tracker——API 核实 `has_issues=false`)。引用"官方已确认"时务必落到 Release 原文或提交号。
13
21
 
14
- ## 1. 仍未修复(30 项 + 2 项部分修复(#1、#2)+ 1 项已修复(#27,保留为修复记录),按严重度排序)
22
+ ## 1. 仍未修复(22 项 + 2 项部分修复(#1、#13)+ 1 项残留面(#29),按严重度排序)
15
23
 
16
- | # | 问题 | 位置(@ddefc45,2026-09-19 复核) | 临时规避 | 讨论 |
24
+ | # | 问题 | 位置(@5badb15,2026-10-06 复核) | 临时规避 | 讨论 |
17
25
  |---|---|---|---|---|
18
- | 1 | 同级/更窄的 `sandbox_permissions`:**同级自 `61c548e200` 起已接受**,更窄/不受支持的目标仍报错(模型整轮循环只余此半边) | `packages/sandbox/sandbox/src/escalation.ts:160`(同级在 `:155` 短路返回;schema 恒广告全枚举 `:41`;danger-full-access 变体 `packages/bundle/base/cordis.patch.yml:234` + `packages/fs/fs-sandbox/src/index.ts:65-67` + `packages/fs/tool-fs/src/sandbox.ts:39-45,59-70`;spec 钉死 `tests/escalation.spec.ts:88,90`) | persona 注明「已是该模式就别带 sandbox_permissions」 | #4021 #4481 #4672 #4742 #4763 #4976 #4990 #5570(同族 #5238 #5298 #6215) |
19
- | 2 | 纯推理轮以空 content 落盘 → 之后每轮 400,整会话报废(**PARTIAL**:默认协议已切 Messages,待真机复测) | `packages/llm/llm-deepseek/src/protocols/chat-completions/serialize.ts:196-229`(chat-completions 仍空 content,注释 `:212-219`;旧 `src/serialize.ts` 已随 `6a137ea702` 删除);默认协议已切 Messages(`src/config.ts:81,207`,`b0641b83fc`),推理走 `thinking` 块(`messages/serialize.ts:29-32`) | 显式 `protocol: chat-completions` 时:备份后解压 session.v3.jsonl.zstd,改占位/删除该条后重压 | #5466(同族 #1850 #6218 #6431) |
20
- | 3 | windows-acl 沙箱缓存临时目录消失后该会话永久损坏 | `packages/sandbox/sandbox-local/src/index.ts:415-417`(缓存命中无复核);runner 首检 `packages/sandbox/sandbox-windows-acl/src/runner.ts:110-113` | 重启 dsh host 重建快照 | #6483(同族 #5034) |
21
- | 4 | read_image 所有预设一调即失败(cannot get property 'fs' without inject) | `packages/fs/tool-fs/src/index.ts:70-71`(inject 收窄 scope);执行体 `packages/fs/tool-fs/src/read-image.ts:209`(`:265` 同类) | 无产品内规避;走外部视觉路径 | #4612 |
22
- | 5 | 升级后旧 `code` 预设会话全部无法 resume(无 legacy 别名) | `packages/preset/agent-presets/src/index.ts:372-381`(无 LEGACY_PRESET_IDS);错误被包成 `gateway/internal`(`packages/api/session-controller/src/agent.ts:216`) | 复制内置 ptc 预设到 `~/.dsh/.agent-presets/code/`,或改绑 standard/ptc | #5657 #5381 #5781 #4167 #5585 |
23
- | 6 | exFAT 卷 write 必败(EISDIR)+ 盘根写入 EPERM | `packages/fs/fs-local/src/fsio.ts:633-638`(硬链接发布无回退,默认 `link` `:608`、`throwGuardedCreateFailure` `:536-571`)、`:597-598`(mkdir 不容忍盘根 EPERM) | 目标放 NTFS;勿直写盘根 | #5704 #4981(相关 #2402) |
24
- | 7 | Node < 22.19/24.2 安装后静默深埋失败(无友好版本门) | `apps/cli/src/bin.ts`(无运行时版本检查);`apps/cli/package.json` 无 engines;仅根 `package.json:8-9`(npm 只警告) | 升级 Node ≥ 24.2(或 22.19+);全局安装替代 npx | #6115 #6124 #6126 |
25
- | 8 | 单个损坏插件条目令所有对话请求 REQUEST_EXTENSION | `packages/llm/llm-deepseek/src/common/request-extensions.ts:20-24`(异常一律升级,原 `adapter.ts:627-637` 已随 `6a137ea702` 消失);`packages/llm/plugin-package-inventory-deepseek/src/index.ts:123`(抛错);默认挂载 `packages/bundle/base/cordis.patch.yml:70-71` | profile patch 禁用该插件,或修复损坏条目 | #6161(相关 #5683 #5968 #6108) |
26
- | 9 | PTC 模式零参数工具绑定必失败 | `packages/ptc-runtime/ptc-runtime-node/src/bootstrap.ts:326-335`(旧包 `code-runtime-worker-thread` 已由 `7c9bb5914c` 改名);`json-wire.ts`(原 `worker-json.ts`) | 无产品内规避;帖内一行修复未合入 | #6065 |
27
- | 10 | opencode-go 路由缺 `x-opencode-session` 头 + 缺 4.1-flash 目录项 | `packages/llm/llm-pi-ai/src/adapter.ts:384`;`packages/llm/llm-pi-ai/package.json:44`(pi-ai ^0.85.1 dist 无该头) | 路由级静态头(牺牲每会话亲和);profile `models` 手写条目 | #6224 |
28
- | 11 | Python SDK 跨进程续接旧会话只跑不落盘 | `packages/sdk/server/src/server.ts:259-292`(只查进程内表;恒 create 无 resume) | 同一进程内复用实例循环多轮 | #4591 #5950 #4954(相关 #1414) |
29
- | 12 | append() 不执行消息身份校验:插件注入缺 id/role 写坏会话 | `packages/core/session/src/index.ts:719-770`(append 只调 validateSessionEventData `:748`);`assertMessageEventShape` `:327-386` 只挂 adoptSessionEvent/seed | 注入消息必须自带 id、role:'user'、source:{kind} | #6284(相关 #6236 #918) |
30
- | 13 | `dsh plugin` 子命令无法自愈 profile 依赖(CLI 侧亦缺 windowsHide) | `apps/cli/src/plugin.ts:120-163`(spawnSync 无 healing、`:134-138` 无 windowsHide) | profile 目录手动 pnpm install | #5537(#4024) |
31
- | 14 | 插件经 `connection.rpc.handle()` 注册的通道静默失效(405) | `packages/client/connection/src/rpc-host.ts:79-84`(owner 取服务自身 ctx)、`:178-179`;0.1.5-rc.x 回归实证:`git show dsh-v0.1.2-rc.1` inject=`['webServer','credentials']` → `dsh-v0.1.5-rc.2`=`['credentials']`(`index.ts:69`);**截至 `dsh-v0.1.6-alpha.1` 仍未修** | 打社区补丁 cb9b6e2;等上游合并 | #6227(同族 #6270 #6289 #6337 #6513 #6681) |
32
- | 15 | 文档预览插件钉版 pdfjs-dist 6.3.289 引用全局 `Iterator` → 旧 Safari/WebView 无法启动 | `packages/client/ui-sidebar-documentpreview/package.json:69`;`src/client/index.ts:37,116` | 换 Chrome/Edge 126+ / Firefox 131+ / Safari 18.2+;或注释 :37/:116 重建 | #6507(同类 #3912) |
33
- | 16 | pwsh 沙箱对临时根未加保护的 realpath(RAM 盘报 EISDIR) | `packages/sandbox/sandbox-windows-acl/src/path-boundary.ts:11-12`(对照 `packages/sandbox/sandbox/src/roots.ts:30-41` 已有回退先例) | TEMP/TMP 指回物理盘或子目录 | #6018 |
34
- | 17 | 编程式 `agents.create` 缺 model 时静默死轮 | `packages/core/agent-loop/src/index.ts:421`({{model}} 绑原始可选字段无回退);webhook 已有回退先例 `packages/webhook/webhook/src/session.ts:63-66` | 先 `agentDefaultModel.currentSelection()` 再显式传 provider/model | #4967 |
35
- | 18 | grep/read 行预览从列 0 截断,2000 字节外的匹配被隐藏 | `packages/fs/tool-fs-search/src/grep.ts:35`、`search-core.ts:324-325`(kind:'head')、`packages/fs/tool-fs/src/read-render.ts:11` | 单行大文件改用 shell 提取区间 | #4982 |
36
- | 19 | dsh-llm 发布类型引用 devDependencies(npm 消费者 TS2724) | `packages/llm/llm/package.json:21-24`(./invariant 是公开子路径)、`:76-77` | 钉 0.1.1-rc.2 或自行声明依赖 | #5913 |
37
- | 20 | /compact 在 agent 未空闲时一律报「active compaction」,诊断串味 | `packages/core/agent-loop/src/agent.ts:157-158`、`packages/compaction/compaction-basic/src/index.ts:410-416` | 等 turn 完全结束再 /compact | #6223 |
38
- | 21 | todo 任务栏在回合中断后永久消失 | `packages/todo/tool-todo/src/index.ts:134-145`——投影 apply 在 `turn/start` 无条件返回 null(`:140`)、`stateVersion: 2`(`:144`);修复需 bump 2→3(投影缓存 ver 不匹配即丢弃,`packages/session/session-projection-cache/README.md:80`) | 无产品内规避(模型自觉重写不可靠) | #6524(已并入汇总帖 #6520) |
39
- | 22 | 压缩阈值按整窗口算,1M 窗口下高于 provider 实际输入上限(pressure 几乎永不触发) | `packages/compaction/compaction-basic/src/config.ts:20`(DEFAULT_THRESHOLD_RATIO = 0.8)、`:144`(thresholdTokens = floor(contextWindow × ratio),不减输出预算);`DEFAULT_MAX_TOKENS = 256_000` 现位于 `packages/llm/llm-deepseek/src/common/defaults.ts:8`(`DEFAULT_CONTEXT_WINDOW = 1_000_000` 在 `:6`,原 `adapter.ts:149` 已随协议拆分消失) | `modelPolicies` 按模型覆盖 thresholdRatio(对 1M/256K 设 ≤0.65);#5123 有 reservedOutputTokens 补丁建议 | #5123 #5263 #5800 #6671(实测证据来自 #6520 条目提交者) |
40
- | 23 | overflow 分支 retainTokens = 0,一次清掉约 98%(手动 /compact 同源) | `packages/compaction/compaction-basic/src/index.ts:281-285`——overflow 直接 `selectCompactableRange(session, measurement, 0)`(`:285`);注释 `:248` 写明绕过正常保留尾策略 | 无产品内规避;先确认 preset 隔离域挂载了 compaction-basic(host 树默认禁用,`packages/bundle/web-app/cordis.patch.yml:432-439`) | #5416 #5650 #6672 |
41
- | 24 | tool-result 剪枝跑在压缩选区之前,摘要器输入已失真 | `packages/compaction/compaction-basic/src/index.ts:281-285`(overflow:prune → select)、`:305-313`(pressure:prune → remeasure → select) | 无产品内规避 | #5766(相关实测 1:1 剪枝标记,来自 #6520 条目提交者) |
42
- | 25 | 压缩后旧轮推理整段不回传(实测推理占摘要器输入 58.8%) | 压缩交易把选区整体替换为摘要(`packages/compaction/compaction-basic/src/region.ts:174` compactSurfaceRegion + `commitCompactionBody` `:472-500`),旧轮 reasoning 位于被替换区间内、不再回传 | 无产品内规避 | #6480 #6510 #3002(实测证据为准,见 #6520) |
43
- | 26 | token-meter 的 CJK 增量低估(实测 +26% ~ +57%,纯中文样本 1.57×) | `packages/llm/token-meter/src/estimate.ts:13`(CHARS_PER_TOKEN = 4;estimate 只作用于每步增量,总量 provider-anchored) | 无产品内规避;注意按真实用量预算 | #6361 #5632 #6688(实测口径见 #6520) |
44
- | 27 | ~~桌面端打包在 prepare:dsh 阶段必败(payload smoke 引用已移除的 fs-ext)~~ **已修复**:`6b05ed53e9` 删除了 smoke 的 `checkFsExt()` 及其调用(只进 `dsh-v0.1.6-alpha.2`,未进 alpha.1) | 原位置 `apps/desktop/scripts/prepare-dsh.ts:142`、`apps/desktop/tests/fixtures/runtime-payload-smoke.mjs:67-83` | 不再需要 | #6589 #6612 |
45
- | 28 | 读路径 `SessionLogScanner` 默认 `recoverable`:seq gap/损坏行被静默截断,直到后续 turn/end 才重抛("valid aborted-turn 被当作 no more history") | `packages/session/session-persistence-jsonl/src/index.ts:915`(无 recovery 实参);`format.ts:403`(默认值)、`:482-484`/`:497-514`(issue 暂存)、`:369`(header 侧实为 strict,但被扫描器默认覆盖);strict 仅 verify 路径 `generation.ts:583/597` | 备份日志手动修 gap;修复方向=`:915` 传 `'strict'` 或暴露 `format.ts:394` issue | #6562 #3631 |
46
- | 29 | v0→v3 迁移后三类 stock 投影未守卫 `message.content/source` 读取 → hydrate 崩溃(迁移器有直通分支不保证完整 envelope) | `session-turn-outline/src/projection.ts:110,113,119`;`session-stats/src/projection.ts:174`;`session-telemetry/src/coordinator.ts:270`;直通分支 `session-format-v0-to-v1/src/migration.ts:354-357,366-368,390-395` | 投影侧防御性守卫(最小风险补丁方向) | #6686 |
47
- | 30 | http-proxy 把 `[::1]` 写进子进程 `no_proxy`/`NO_PROXY` → httpx 系 MCP server 崩溃(undici 专用括号项泄漏到子进程 env) | `packages/util/http-proxy/src/policy.ts:33`(LOOPBACK_NO_PROXY 含 `[::1]`,注释 `:25-32` 自认是为 undici)、`:206-210`;`install.ts:79-92,113-129`;harness 自身匹配器无需括号项(`:279-295` 去括号) | env 写入侧只写裸 `::1`,undici 消费处保留括号项(两处消费者分离) | #6655 |
48
- | 31 | 粘贴图片惰性持有 File 快照:剪贴板同步(如微信输入法跨设备复制)后提交时 FileReader NotFoundError | `ui-conversation/src/client/service.ts:73-80`(browserDraftAttachment 只存 File+objectURL)、`:124-135`(base64ImageOf)、`:286-291`;对比文件类立即上传 `:316-324` | 粘贴后立即发送,或拖拽/文件选择 | #6673 |
49
- | 32 | web-fetch NAT64 探测无守卫:无 DNS64 网络(ipv4only.arpa 不解析)下所有双栈主机 fetch 全灭 | `packages/web/web-fetch-http/src/network.ts:90-92`(无 try/catch)、`:113-134`(discoverNat64Prefixes)、`:38`;SSRF 检查独立(`:96-106`) | 无产品内规避;补丁方向=ENOTFOUND/ENODATA 视为无前缀 | #6664 |
50
- | 33 | 官方 cookbook 仍在教已删除的 `settings.plugin.item` 槽(alpha.2 已改为 `plugins.item` 列表槽:`id`/`order`/`label` + props `{view:'summary'|'page'}`) | `docs/cookbook/adding-a-settings-card.md:50,62-63`(+.zh;@ddefc45,0.1.6-alpha.2 世代);正确槽树见 `docs/subsystems/slots.md:132-134`(`plugins.item`/`plugins.bundle.config`/`plugins.row.config`) | 照本 KB 订正版写(已本地改写并登记本条;重同步会复原,需按本条重新打补丁) | 无(上游 doc bug,未开帖) |
51
-
52
- ## 2. 次级清单(已核实、优先级较低,7 项)
53
-
54
- | # | 问题 | 位置 | 规避 | 讨论 |
26
+ | 1 | 同级/更窄的 `sandbox_permissions`:**同级自 `61c548e200` 起已接受**(该修复早于上一基线),更窄/不受支持的目标仍报错 | `packages/sandbox/sandbox/src/escalation.ts:171-179`(同级在 `:173` 返回;`:177-178` 仍抛"not strictly wider";旧基线同文件 `:153-161`) | persona 注明「已是该模式就别带 sandbox_permissions」 | #4021 #4481 #4672 #4742 #4763 #4976 #4990 #5570(同族 #5238 #5298 #6215) |
27
+ | 2 | 适配器把**空白文本块**原样送上线路 → 云端端点 HTTP 400,整会话报废(**旧条目的 chat-completions 半边已随协议删除消失,这是 V4 / Messages-only 之后的后继形态,0.2.1-alpha.1 仍在**) | `packages/llm/llm-deepseek/src/serialize.ts:30`(`assistant()` 在 `:26` 声明,`:30` 的 `case 'text'` **无守卫**);同文件两个兄弟转换器对同一 case 有守卫:`:65`(真值判断)、`:93`(长度判断)。实测每次出现的都是 `{ type:'text', text:'\n' }`——**长度 1,从不为 `''`**,所以 `length === 0` 抓不到;该包内基于 `trim()` 的守卫全库搜索为空。自托管路由容忍,**切到云模型才炸** | 无产品内规避;补丁要求=回放时丢弃**纯空白**文本块(并同样应用到 `:65`/`:93`,因为其他 role 也会发 `"\n"`)。另注意 npm 产物 `files` 只含 `lib/index.js` 与 `lib/types/**/*.d.ts`——**不发布 `src/`**,所以源码锚点在 npm 包里对不上 | #8836(后继);#5466 #1850 #6218 #6431(原始族) |
28
+ | 3 | windows-acl 沙箱缓存临时目录消失后该会话永久损坏 | `packages/sandbox/sandbox-local/src/index.ts:423-425`(缓存命中无存在性复核;旧 `:415-417`);runner 首检 `packages/sandbox/sandbox-windows-acl/src/runner.ts:110-114`。区间新增的 ACL 诊断技能(`1d56bd5628`/`927b59e138`/`5bab07157f`)只修 ACL,不修消失的临时目录 | 重启 dsh host 重建快照 | #6483(同族 #5034) |
29
+ | 6 | exFAT 卷 write 必败(EISDIR)+ 盘根写入 EPERM | `packages/fs/fs-local/src/fsio.ts:633-638`(硬链接发布无回退,默认 `link` `:608`、`throwGuardedCreateFailure` `:536-571`)、`:597-598`(mkdir 不容忍盘根 EPERM)。`fsio.ts` 在本区间**零改动**,行号与上一基线完全一致 | 目标放 NTFS;勿直写盘根 | #5704 #4981(相关 #2402) |
30
+ | 7 | Node < 22.19/24.2 安装后静默深埋失败(无友好版本门) | `apps/cli/src/bin.ts:26-27`(区间重构过 bin.ts,但**仍未加**运行时版本检查);`apps/cli/package.json` 无 engines;仅根 `package.json:8-9`(npm 只警告);`apps/cli`/`packages/boot` 内无 `process.versions.node` 检查 | 升级 Node ≥ 24.2(或 22.19+);全局安装替代 npx | #6115 #6124 #6126 |
31
+ | 8 | 单个损坏插件条目令所有对话请求 REQUEST_EXTENSION | `packages/llm/llm-deepseek/src/request-extensions.ts:24-29`(该文件已由 `99e22ebbeb` 从 `src/common/` 上移一级;异常一律升级);`packages/llm/plugin-package-inventory-deepseek/src/index.ts:124`(抛错);registry 扇出 `packages/llm/deepseek-llm-api-extensions/src/index.ts:108-113`;默认挂载 `packages/bundle/base/cordis.patch.yml:77-78`。区间新增的 `onOmitted` 加固**只覆盖序列化失败**,不覆盖抛错的贡献者 | profile patch 禁用该插件,或修复损坏条目 | #6161(相关 #5683 #5968 #6108) |
32
+ | 9 | PTC 模式零参数工具绑定必失败 | `packages/ptc-runtime/ptc-runtime-node/src/bootstrap.ts:326-335`(+ `index.ts:319`);`json-wire.ts:201`(零参调用得到 `undefined` → `binding arguments must be lossless JSON`)。`packages/ptc-runtime` 源码在本区间**零改动** | 无产品内规避;帖内一行修复未合入 | #6065 |
33
+ | 11 | Python SDK 跨进程续接旧会话只跑不落盘 | `packages/sdk/server/src/server.ts:261-294`(旧 `:259-292`;只查进程内表;恒 `agents.create`);`packages/sdk` 与 `python/` 全树只有 initialize/session-prompt/shutdown 三类 RPC,**无任何 resume** | 同一进程内复用实例循环多轮 | #4591 #5950 #4954(相关 #1414) |
34
+ | 13 | `dsh plugin` 子命令无法自愈 profile 依赖(PARTIAL:windowsHide 半侧已消失) | **原引用的 `apps/cli/src/plugin.ts:120-163` 早已不存在**(该文件在**上一基线之前**的 2026-09-14 由 `98b92b683c` 删除)。现子进程在 `packages/boot/plugin-manager/src/operations.ts:357`,走 execa(默认 `windowsHide: true`),故弹窗半侧已消失;**自愈半侧仍在**:`runPluginCommand`(`:544-557`)只转发调用方的 pnpm 参数,boot 提示仍指向 `dsh plugin --profile X install`(`packages/boot/app-boot/src/profile.ts:715`) | 用 `dsh plugin --profile <p> install`(旧建议"手动 pnpm install"已过时) | #5537(#4024) |
35
+ | 14 | 插件经 `connection.rpc.handle()` 注册的通道静默失效(405) | `packages/client/connection/src/rpc-host.ts:87`(`const owner = this.ctx`,与上一基线逐字节相同)、`:191-194`(`owner.effect(() => owner.webServer.register(route))`);inject 现为 `['credentials']`,位置 `packages/client/connection/src/index.ts:89`(旧条目写的 `:69` 在上一基线就已不准)。**caveat**:vendored Cordis 的 accessor 走影子代理,`this.ctx` 是"读取方"的 ctx,故"owner 取服务自身 ctx"的因果表述无法从源码确证,405 症状需要活体复现 | 打社区补丁 cb9b6e2;等上游合并 | #6227(同族 #6270 #6289 #6337 #6513 #6681) |
36
+ | 16 | pwsh 沙箱对临时根未加保护的 realpath(RAM 盘报 EISDIR) | `packages/sandbox/sandbox-windows-acl/src/path-boundary.ts:11-13`(`realpathSync.native` 无 try/catch;与上一基线逐字节相同);对照 `packages/sandbox/sandbox/src/roots.ts:30-41` 已有回退先例(同样未改) | TEMP/TMP 指回物理盘或子目录 | #6018 |
37
+ | 17 | 编程式 `agents.create` 缺 model 时静默死轮 | `packages/core/agent-loop/src/index.ts:371`(旧条目 `:421`/报告 `:422-424` 均有偏差;`{{model}}` 仍绑 `context.agent?.options.model` 无 `agentDefaultModel` 回退);`packages/core/agent-loop/src/agent.ts:581-582` 的 throw 与旧基线一致;webhook 已有回退先例 `packages/webhook/webhook/src/session.ts:63-66` | 先 `agentDefaultModel.currentSelection()` 再显式传 provider/model | #4967 |
38
+ | 18 | grep/read 行预览从列 0 截断,2000 字节外的匹配被隐藏 | `packages/fs/tool-fs-search/src/grep.ts:35`、`search-core.ts:324-325`(`kind:'head'`)、`packages/fs/tool-fs/src/read-render.ts:11`(`:70` 同类)——全部未变,行号与上一基线一致。细节:**grep 的截断按字节**(TextRetainer),**read 的截断按字符**(`line.length`) | 单行大文件改用 shell 提取区间 | #4982 |
39
+ | 20 | /compact 在 agent 未空闲时一律报「active compaction」,诊断串味 | `packages/compaction/compaction-basic/src/index.ts:428-433`(旧 `:410-416`);`packages/core/agent-loop/src/agent.ts:183-184`(旧 `:157-158`);面向用户的文案 `packages/command/command-compact/src/index.ts:29`——三处与旧基线逐字相同 | 等 turn 完全结束再 /compact | #6223 |
40
+ | 21 | todo 任务栏在回合中断后永久消失 | `packages/todo/tool-todo/src/index.ts:129`(投影 apply 在 `turn/start` 无条件返回 null;旧 `:140`)、`:133`(`stateVersion: 2`;旧 `:144`);区间只改了 `DESCRIPTION_*` 文案。修复需 bump 2→3(投影缓存 ver 不匹配即丢弃,`packages/session/session-projection-cache/README.md:81`) | 无产品内规避(模型自觉重写不可靠) | #6524(已并入汇总帖 #6520) |
41
+ | 23 | overflow 分支 retainTokens = 0,一次清掉约 98%(手动 /compact 同源) | `packages/compaction/compaction-basic/src/index.ts:299`——overflow 直接 `selectCompactableRange(session, measurement, 0)`(旧 `:281-285`);手动 /compact 同样是 `0`(`:394-398`)。**新增缓解**:`maxOverflowRetries: 0` 可拒绝这次零保留 pass;后端现已**按 preset 作用域**(`packages/bundle/web-app/presets/*.patch.yml:67-83`,host 树禁用 `packages/bundle/web-app/cordis.patch.yml:527-528`——旧引用的 `:432-439` 已失效) | 设 `maxOverflowRetries: 0`;确认 preset 隔离域确实挂载了 compaction-basic | #5416 #5650 #6672 |
42
+ | 24 | tool-result 剪枝跑在压缩选区之前,摘要器输入已失真 | `packages/compaction/compaction-basic/src/index.ts:294-302`(overflow:prune → select)、`:323-331`(pressure:prune → remeasure → select);剪枝器已是独立包 `packages/compaction/compaction-tool-result-pruner/src/index.ts:136-182` | **(本次新增可用的规避)** 在自己编写的 preset 里**不挂** `tool-result-pruner` 行,或抬高 `thresholdChars` | #5766(相关实测 1:1 剪枝标记,来自 #6520 条目提交者) |
43
+ | 25 | 压缩后旧轮推理整段不回传(实测推理占摘要器输入 58.8%) | 压缩交易把选区整体替换为摘要(`packages/compaction/compaction-basic/src/region.ts:173` compactSurfaceRegion + replace 操作 `:506-509`;旧 `:174`/`:472-500`),旧轮 reasoning 位于被替换区间内、不再回传;区间内**没有**新增推理保留路径 | 无产品内规避 | #6480 #6510 #3002(实测证据为准,见 #6520) |
44
+ | 26 | token-meter 的 CJK 增量低估(实测 +26% ~ +57%,纯中文样本 1.57×) | `packages/llm/token-meter/src/estimate.ts:13`(CHARS_PER_TOKEN = 4;estimate 只作用于每步增量,总量 provider-anchored)。**上游现已把它记为已知限制**(`token-meter/README.md:154`、`compaction-basic/README.md:257`)——回答社区时按"已知限制"表述,别当未发现的 bug | 无产品内规避;注意按真实用量预算 | #6361 #5632 #6688(实测口径见 #6520) |
45
+ | 28 | 读路径 `SessionLogScanner` 默认 `recoverable`:seq gap/损坏行被静默截断,直到后续 turn/end 才重抛("valid aborted-turn 被当作 no more history") | `packages/session/session-persistence-jsonl/src/index.ts:964`(无 recovery 实参);`src/format.ts:404`(默认值)、`:499-503`/`:513-517`(issue 暂存);gap 逻辑 `session-format-v1-to-v2/src/codec.ts:104-112`;strict 仅 verify 路径 `generation.ts:586,600`。格式已升 V4 但**这条读路径未动**,行为现已被测试钉死(`tests/jsonl.spec.ts:2227-2249`)。新增的相邻守卫:`format.ts:493`(assertV4RowAdmission)、`:468`(assertReleasedV4Relationships) | 备份日志手动修 gap;修复方向=给 `:964` 传 `'strict'` 或暴露 `format.ts` 的 issue | #6562 #3631 |
46
+ | 30 | http-proxy 把 `[::1]` 写进子进程 `no_proxy`/`NO_PROXY` → httpx 系 MCP server 崩溃(undici 专用括号项泄漏到子进程 env) | `packages/util/http-proxy/src/policy.ts:33`(LOOPBACK_NO_PROXY 仍含 `['localhost','127.0.0.1','::1','[::1]']`,注释 `:25-32` 自认是为 undici);env 写入 `install.ts:79-92,113-129`、子进程覆盖 `:262-279`;子进程消费方 `packages/subprocess/subprocess/src/index.ts:75`。**src 在本区间零改动** | env 写入侧只写裸 `::1`,undici 消费处保留括号项(两处消费者分离) | #6655 |
47
+ | 31 | 粘贴图片惰性持有 File 快照:剪贴板同步(如微信输入法跨设备复制)后提交时 FileReader NotFoundError | `packages/client/ui-conversation/src/client/service.ts:74-81`(只存惰性 `file`)、`:125-137`(提交时才 FileReader)、`:309-325`(文件类立即上传、图片类惰性);该文件本区间仅 +6/−2 | 粘贴后立即发送,或拖拽/文件选择 | #6673 |
48
+ | 32 | web-fetch NAT64 探测无守卫:无 DNS64 网络(ipv4only.arpa 不解析)下所有双栈主机 fetch 全灭 | `packages/web/web-fetch-http/src/network.ts:90-92`(无 try/catch)、`:113-117`(discoverNat64Prefixes)、`:38`;SSRF 检查独立(现 `:96-108`)。**src 未改动** | 无产品内规避;补丁方向=ENOTFOUND/ENODATA 视为无前缀 | #6664 |
49
+ | 29 | 原生 V4 的 `user/message` content **未做校验**(只校验 `source`)→ 手改或插件注入的缺 `content` 行仍在投影层抛错。迁移路径的同类症状已由 `f4a32dbd0a` 修掉(见 §5),这条是**残留面** | 投影读取 `session-turn-outline/src/projection.ts:39`;对照:迁移产物的强校验在 `session-format-v3-to-v4/src/validation.ts:52-129` | 注入 `user/message` 时带完整 `content` | #6686 |
50
+
51
+ ## 2. 疑似误诊(1 项,保留记录,勿当 bug 传播)
52
+
53
+ | # | 原报问题 | 复核结论(@5badb15) |
54
+ |---|---|---|
55
+ | 4 | read_image 所有预设一调即失败(cannot get property 'fs' without inject) | **UNREPRODUCIBLE(疑似误诊)**:`packages/fs/tool-fs/src/index.ts:70-72` 与 `read-image.ts:209,263`(旧 `:265`)在本区间**未改动**,`vendor/cordis/src/reflect.ts` 同样未改;真机跑该包真实 spec `vitest run packages/fs/tool-fs/tests/read-image.spec.ts` = **41/41 通过**,而该 spec 正是走 `ctx.inject(['attachments'], …)` + `ctx.tools.execute` 这条路径,且它不在本区间的测试 diff 里。结论:既不是"修复了",也不是可复现缺陷——遇到同症状请先确认是否被"在未注入 attachments 的上下文里直接调 read_image"之类用法触发,再开帖。 |
56
+
57
+ ## 3. 本世代新核实的问题(社区提出 + 源码/产物双向复核,T1–T11)
58
+
59
+ > 这一组是 2026-09-15 → 10-06 窗口内社区新开帖、并经**源码或已发布产物**双向复核的问题,之前不在本清单里。T 编号独立,避免与 §1 的编号冲突。
60
+
61
+ | # | 问题 | 位置 / 证据 | 规避 | 讨论 |
55
62
  |---|---|---|---|---|
56
- | S1 | Python SDK bundled runtime 清单缺 `dsh-attachment-local` → 挂载即 ERR_MODULE_NOT_FOUND | `python/sdk-runtime/package.json` 依赖清单(`dsh-attachment` 在 `:23`,仍无 `dsh-attachment-local`;0.1.6 世代清单已改:`dsh-code-runtime*`→`dsh-ptc-runtime*`、新增 `dsh-compaction-image-offload`/`dsh-session-title-llm`) | SDK 组合不挂 attachment-local | #4377 |
57
- | S2 | 会话列表 RPC 是一次性全量快照,无分页/懒加载 | `packages/api/session-controller/src/index.ts:223-225`;cursor 仅保留位 `types.ts:245` | 拆分工作区/清理旧会话/ssh -C | #6017 |
58
- | S4 | 冷/种子会话列表行回退显示工作区文件夹名 | `packages/api/session-controller/src/client/sessions/service.ts:145-152` | 打开会话一次生成标题投影 | #6316 #6207(相关 #3375 #5368) |
59
- | S5 | cordis preset 的 SKILL.md 仍在教已废弃工具名(6 处旧名 vs 实现注册 7 个新名) | `packages/preset/agent-presets/presets/cordis/skills/editing-cordis-compositions/SKILL.md:32,34,64,80,118,122`;新名 `packages/extensions/tool-cordis/src/index.ts:45,64,100,152,244,333,355`;另有生成文件/文档残留 `tool-cordis/src/api-catalog.ts:6`、`cordis-client-runner/.../slot-catalog.ts:7,74`、`docs/subsystems/slots.md:176`(+.zh)与三个快照(`ui.expected.md:36`、`session.v2.jsonl:17`、`session.v3.jsonl:18`) | 文档修复型 PR;快照测试需重生成 | #6679 |
60
- | S6 | SIGTERM 无在途 turn 排空路径;5s 宽限硬编码;无 `dsh restart` | `apps/cli/src/process-shutdown.ts:4,69-75`;dispose=cancel+whenIdle `agent-loop/src/index.ts:594-595`;launcher 无 restart(`apps/cli/src/args.ts:145-201`) | 第二信号即强退是固定语义;drain 属 feature request | #6665 |
61
- | S7 | LLM 出站超时修复未合入;undici 全局 dispatcher 由 http-proxy 独占(>5min prefill 在 ~302s 被 body timeout 终止) | 无 `egress.ts`/`httpBodyTimeoutMs`;`llm-pi-ai/src/config.ts:46`(300s 空闲看门狗)、`adapter.ts:355`;`util/http-proxy/src/install.ts:208-220` | 每请求新建 fetch 绕过共享 socket 记账 | #5673 |
62
- | S8 | 创造模式 `cordis_define`/`cordis_run` 动态工具已退役 | 0.1.6-alpha.2 的 `docs/tool-catalog.md` 只剩两个只读检查工具(`cordis_inspect_list`/`cordis_inspect_query`);运行期创作的替代面 = `plugin_manager` 工具 + `ctx.pluginManager` + `OPTIONAL_BUNDLES`(@ddefc45,0.1.6-alpha.2 世代) | 0.1.5-rc.2 世代 `docs/tool-catalog.md` 的 cordis_* 工具段(旧快照 :269-501);`docs/capability-seams.md` 的 `ctx.dynamicCordisRunner` | 无(上游工具退役,非缺陷) |
63
-
64
- ## 3. 已在 master 修复(旧帖一律更新即可,无需改代码)
65
-
66
- 更新到 0.1.5-rc.2 世代后以下问题消失;遇旧帖时给「更新即可 + 提交号」式回答:
67
-
68
- - **windowsHide 弹窗族**:`a05b5fbe79` + `cc8099dc5f`(子进程清理工具隐藏);CLI 半侧 `apps/cli/src/plugin.ts:134-138` 仍未修(见上 #13)。
69
- - **Windows 目录选择器 CJK 截断族**(U+XX00 低字节为 0):`51c242749a` 重写 readUtf16 → `koffi.decode(..., 'str16')`(`packages/host/directory-picker-native/src/win32-dialog-bindings.ts:39-44`)。覆盖 #643 #1660 #2126 #2227 #3010 #3313。
70
- - **`--expose-internals` HMR 启动失败**:`c685582d54` + `675efe73f2`;loader 回退 `node-addon-require-builtin`(`vendor/loader/src/internal.ts:108-118`,CLI 依赖 `apps/cli/package.json:101`)。
71
- - **compat.supportsDeveloperRole 可配置**:`884f7b9c41` + `cf4a27c471`(schema `packages/llm/llm-pi-ai/src/config.ts:256`、`catalog.ts:367`)+ 文档 `30a838cda3`(`docs/user/guide/providers.zh.md:156,184`)。
72
- - **子代理模型快照 → request-time 选择**:`f76a225a7d`(PR #2663;`packages/subagent/subagent/src/child-agent.ts:60-85`)。
73
- - **pnpm 11 构建失败(npm_execpath)**:`89674edc93`(`scripts/build.ts:18-20` + `scripts/pnpm-invocation.ts`)。
74
- - **fs-ext/node-gyp Windows 构建族**:`d927cbff99` 换成预编译 `@deepseek-ai/node-addon-system`(flock)。
75
- - **koffi 32KB 崩溃**:`141d72d7cf`(不再固定 32KiB view 读指针)。
76
- - **非 loopback HTTP crypto.randomUUID**:新增 `dsh-util-crypto` 提供实现(`packages/client/connection/src/rpc.ts:36` 侧)。
77
- - **ACP server 已发布**:`dsh --profile acp`(`@deepseek-ai/dsh-acp`)。
78
- - **MCP structuredContent 要求条件化**:`e1633fbc3f`(自 0.1.0-rc.7+;按 outputSchema 广告与否决定)。
63
+ | T1 | **运行中修改 `cordis.patch.yml` 具破坏性**:`dsh-hmr` 精确监听 `profile/package.json`、`profile.patchPath`、`$DSH_HOME/cordis.patch.yml`(`@deepseek-ai/dsh-hmr/lib/index.js:353-376`,0.2.0-rc.2),任何写入(**包括逐字节相同的重写**)都触发重载 | 实测三种后果:① 会话内工具从 **65 → 41**(丢失 `bash`/`edit`/`read`/`write`/`grep`/`glob`/`web_fetch`/`web_search`/`skill`/`subagent_fork`/`workflow`/`todo_write`/`present`/全部 `job_*`,只剩 preset 之外挂载的行);② 运行中会话的 turn 被杀;③ 重建 `session-controller` 时抛 `file-upload: Agent resolver is already registered`,`sessionController` **永久失效**(只有整进程重启能恢复,之后每次重载同样失败) | **运行中不要写 profile patch**。改配置走 profile 管理入口(`plugin_manager` / `dsh plugin`)而不是手写 YAML;必须手改就先停进程 | #8635 #8857 #8968 |
64
+ | T2 | `plugin add` **不补齐既有依赖的 layer 行**:`packages/boot/plugin-manager/src/operations.ts:95`/`:99`(`if (beforeDeps.has(name)) continue`),产物侧同一代码在 `lib/index.js:271`/`:275`(固定 176 行偏移)。后果:`dsh.profile.bundles` 掉了行之后,之后任何 `add` 都不会修回来;"先发布无 `dsh.bundle`、后加上 `dsh.bundle`"的包**永远不会**被登记为 bundle 层,且**第二次尝试不打印任何警告** | 实测仍在 `0.2.1-alpha.1`(源码与产物一致) | 先 `remove` 再 `add`;或手工补 `dsh.profile.bundles` | #7850 #8821 |
65
+ | T3 | 宿主插件(Host plugin)激活失败**在 `dsh web` 下不可见**:`Fiber._reload` 捕获异常 → `ctx.logger.error` → 置 FAILED、**不重抛**(`vendor/cordis/src/fiber.ts:646-665`);`web` profile 没有日志导出器,那行日志**没有 sink**,终端一片空白,而工具/监听器已经静默缺失。`apply()` 返回普通对象只得到 `TypeError('Invalid effect')`,**不报插件名也不报值** | 交叉引用 #5145(同族客户端侧 #7891) | 排障时用 headless/带日志的 profile 复现,或逐个禁用 bundle 二分;社区工具 dsh-composition-doctor 专门把故障关联回组合来源 | #8633 |
66
+ | T4 | profile 内安装的 `@deepseek-ai/*` 包会**静默遮蔽**运行时自带版本:解析优先级 `profile > runtime`。最小复现:插件把 `"@deepseek-ai/dsh-settings": "^0.1.0-rc.6"` 写进 **dependencies** → pnpm 装进 profile 的 `0.1.0-rc.8` 盖掉自带的 `0.2.0-rc.2` → `settings service is absent: mount @deepseek-ai/dsh-settings with @deepseek-ai/dsh-config-editor`,桌面端每次崩溃 | `POST /api/settings/describe` 返回 `gateway/internal` | 共享实例的 dsh 包只放 **peerDependencies + devDependencies**,**绝不放 dependencies**(§migration-0.2 §1 的 npm 段同理) | #8862 #8864 |
67
+ | T5 | 会话内 **tool-call id 不唯一** → Web Chat/Trajectory 组装器抛 `received more than one start Match` 后**永久停止产节点**(实时与回放两条路径都无降级分支) | `packages/client/ui-conversation/src/client/conversation/assembler.ts` 的 `acceptMatch` | 无产品内规避;自己生成 `callId` 的插件务必全局唯一 | #6520 内提案(XGntsl,对照 `0d1f50007f` 核实)+ ≥10 个独立帖(自 `0.1.1-rc.2` 起) |
68
+ | T6 | 含 `turn: null` 的 `step` 块的会话**永远渲染不完**:白屏卡在 "Loading history…",渲染循环不推进、CPU 升高;而契约检查报 0 违规,官方 `Session` 构造与 `deriveMessages` 都成功 | 渲染路径在无法归属的块上循环 | 无产品内规避 | #6520 内提案(yamingmou) |
69
+ | T7 | **桌面端 `cordis` preset 丢失全部文件系统 skill**:preset 唯一的 skill provider 目录指向 `app.asar` 内部(`resolve('@deepseek-ai/dsh-agent-preset/package.json') + /skills`),读取抛 `TypeError: Cannot mix BigInt and other types`;`discoverRoot` **没有 per-root try/catch**,且自定义目录**先于**默认根被扫描,于是一次失败终止整个 provider 的 `list()`——连带丢失项目的 `.dsh/skills` 与用户的 `~/.dsh/skills`、`~/.agents/skills`;`dsh-tool-skill` 又以 `snapshot.complete` 为发布门槛,导致模型侧 skill 目录整体消失(日志里同一条 `skipped` 反复出现即是信号) | `dsh-hooks`/skill provider 链路;`isAbsentSkillPathError` 只吞 `ENOENT`/`ENOTDIR`/`FS_NOT_FOUND`/`FS_NOT_DIRECTORY`,其余错误照抛 | 无产品内规避;把 skill 放默认根而不是 symlink 进 `~/.dsh/skills`(该路径不解决问题) | #8649 #8763 #8996 |
70
+ | T8 | 第三方插件在会话观察者里抛异常会**放倒整个宿主**(观察者回调外侧没有隔离边界) | 无 per-listener 隔离 | 自己插件里所有回调 try/catch | #8585 |
71
+ | T9 | 插件 `pre-step` 观察监听器返回 `undefined` → **放倒全部会话**(`installModelSelection` 中间件链未加守卫) | `packages/core/agent-loop/**` 选择中间件链 | 观测型监听器要原样返回传入的 decision(改写时用 `{ ...decision, … }`) | #8778 |
72
+ | T10 | `dsh plugin` 依赖**系统 pnpm**(不自带):产物在 `@deepseek-ai/dsh-plugin-manager/lib/index.js` 用 `execa(options.command ?? "pnpm", …)`(L324/517/650/694/733),`pnpmCommand` 默认 `"pnpm"`(L1354),`dsh/node_modules` 里没有 pnpm——PATH 里去掉 pnpm,所有市场安装 `exit 1`,且 UI 可能只显示 `exit 1`。第二个缺陷:`install-spec.js` **校验但不注入版本**,裸包名会被 profile 的 lockfile 解析到旧版(实测 `@latest`、`@^2`、`pnpm update --latest`、`pnpm add …@latest` **全部失败**,只有显式 `@2.8.4` 成功) | 源码级复核 | 保证 PATH 有 pnpm;装包时**显式写版本** | #8905 #8922 #8310 |
73
+ | T11 | **组合包升级后大批第三方插件被判不兼容**:`evaluatePluginCompatibility()` 只返回**不满足**的 peer,且**不带任何"哪个版本能满足"的字段**,UI 无法告诉用户该装哪个版本;`minimumReleaseAge`(24h 冷却)让 `pnpm update` 成为静默 no-op、锁文件检查抛 `ERR_PNPM_MINERELEASE_AGE_VIOLATION`(可用 `--config.minimum-release-age=0`,但桌面宿主**拒绝**市场追加的 pnpm 参数);另有锁文件污染模式:一旦两个 `name@version` 落进 `minimumReleaseAgeExclude`,该 profile 之后**每次**安装都失败 | `packages/boot/app-boot/src/plugin-compatibility.ts` | 插件显式声明两侧 peer 范围(如 `>=0.1.2-rc.1 <0.3.0`)并按版本发版;用户侧遇冷却期用 `--config.minimum-release-age=0` | #8199 #8310 |
74
+
75
+ **相关但不单列**(同族或用户侧):#8537 提出 `dsh --profile <name> --ephemeral` 与一等公民 `dsh plugin verify <tarball>`(install → composition check → visibility probe → uninstall → rollback)——正是本仓库 `dsh-plugin-dev verify` 与 `PerryLink/dsh-test-drive` 在做的事;同帖给出 `sanitizeProfile` **按设计**把 profile 的 `cordis.patch.yml` 改名成 `.bak-<timestamp>`(JSDoc 明写 "patches are never parsed"),桌面端 `disableAllPlugins` 走的正是这条路径,实测用户文件 2622 B → 837 B,而 `backupPath` 只在 `console.info` 里打印、**UI 不显示**。#7401 单个 MCP 工具 `inputSchema` 含不支持关键字会**拒绝整个 server**;#7995 v0→v1 迁移拒收写入方唯一会产出的 `subagent/descriptor` version 2;#8836 见 §1 #2(V4 后继形态);#8904 升级插件后有一个 client entry 没有 fiber → 刷新页面即崩整个应用。
76
+
77
+ ## 4. 次级清单(已核实、优先级较低,6 项)
78
+
79
+ | # | 问题 | 位置(@5badb15) | 规避 | 讨论 |
80
+ |---|---|---|---|---|
81
+ | S1 | Python SDK bundled runtime 清单缺 `dsh-attachment-local`(`python/sdk-runtime/package.json:27` 只有 `dsh-attachment`)——**但静态不可复现**:`dsh-base` 把 `dsh-attachment-local` 列为产品依赖(`packages/bundle/base/package.json:42`),且 `scripts/verify-runtime-closure.ts:83-92` 会递归走依赖图,实跑 `pnpm run verify-runtime-closure` **通过**("4 agent presets and 185 workspace packages form a closed runtime dependency graph")。**降级为清单一致性观察**:除非有人能在构建出的 wheel 里复现 `ERR_MODULE_NOT_FOUND`,不要再当缺陷传播 | 见左 | 无需规避 | #4377 |
82
+ | S2 | 会话列表 RPC 是一次性全量快照,无分页/懒加载 | `packages/api/session-controller/src/index.ts:258-261`(list 忽略 `_request`)、`src/list.ts:131-164`、`src/types.ts:264-271`(cursor 仍只是保留位,无 `nextCursor`) | 拆分工作区/清理旧会话/ssh -C | #6017 |
83
+ | S4 | 冷/种子会话列表行回退显示工作区文件夹名 | `packages/api/session-controller/src/client/sessions/service.ts:116-123`(`displayTitleOf` → `workspaceTitleOf(cwd)` → id),调用点 `:620` | 打开会话一次生成标题投影 | #6316 #6207(相关 #3375 #5368) |
84
+ | S5 | cordis 组合 skill 里残留已废弃的 `cordis_inspect` 措辞(**PARTIAL**:SKILL.md 正文半侧早在上一基线**之前**就由 `ed32f57f88`(2026-09-16)修好——旧条目引的是 2026-09-10 的 165 行版本,已过时两代) | 残留未修:`packages/extensions/tool-cordis/src/api-catalog.ts:6`、`cordis-client-runner/src/client/slot-catalog.ts:7,74`、`docs/subsystems/slots.md:194`(+.zh);SKILL.md 现位于 `packages/preset/agent-preset/skills/editing-cordis-compositions/SKILL.md:84`(改名 `d1e22a7e24`)。**注意**:那三个"快照"(`cordis-history ui.expected.md`、`session.v2/v3.jsonl`)是**故意的历史回放/迁移 fixture,不要重新生成** | 文档修复型 PR | #6679 |
85
+ | S6 | SIGTERM 无在途 turn 排空路径;5s 宽限硬编码;无 `dsh restart` | `apps/cli/src/process-shutdown.ts:4`(5s)、`:69-75`(第二信号强退);`profile-boot.ts:269,280-281`;dispose=cancel+whenIdle 现位于 `packages/core/agent-loop/src/index.ts:544-545`(旧 `:594-595`);`apps/cli/src/args.ts` 里**没有** restart 模式 | 第二信号即强退是固定语义;drain 属 feature request | #6665 |
86
+ | S7 | LLM 出站超时修复未合入;undici 全局 dispatcher 由 http-proxy 独占(>5min prefill 在 ~302s 被 body timeout 终止) | `packages/util/http-proxy/src/install.ts:208-213`(`setGlobalDispatcher`)、`new Agent({factory})` `:145-156`(**无 bodyTimeout**);全库无 `httpBodyTimeoutMs`/`bodyTimeout`/`egress.ts`(新增的 `tests/egress.spec.ts` 只测代理路由);pi-ai 看门狗 300_000 在 `llm-pi-ai/src/config.ts:47`(按路由覆盖 `:344`)、`adapter.ts:354-355` | 每请求新建 fetch 绕过共享 socket 记账 | #5673 |
87
+ | S8 | 创造模式 `cordis_define`/`cordis_run` 动态工具已退役 | `docs/tool-catalog.md` 只剩两个只读检查工具(`cordis_inspect_list`/`cordis_inspect_query`);运行期创作的替代面 = `plugin_manager` 工具 + `ctx.pluginManager` + `OPTIONAL_BUNDLES` | 0.1.5-rc.2 世代 `docs/tool-catalog.md` 的 `cordis_*` 工具段(旧快照 :269-501)、`docs/capability-seams.md` 的 `ctx.dynamicCordisRunner` | 无(上游工具退役,非缺陷) |
88
+
89
+ ## 5. 已在 master 修复(旧帖一律更新即可,无需改代码)
90
+
91
+ 带 ✅ 的是本次(2026-10-06,基线 `5badb15`)新转入的条目:
92
+
93
+ - ✅ **纯推理轮以空 content 落盘 → 之后每轮 400、整会话报废(#2)**:`99e22ebbeb` 在区间内把 `llm-deepseek` 的协议平面**压平为 Messages-only**——旧 `src/protocols/chat-completions/serialize.ts` 及其同族 5 文件 / 1255 行被**整体删除(无改名)**,`protocols/messages/*` 上移为 `src/*`;`src/config.ts:206-207` 表明 `protocol:` 键现在**直接抛错**,空 content 分支随之消失。**仍需要的动作**:已被写坏的存量日志照旧要手工修(备份后解压 `session.v3.jsonl.zstd`,删/改占位后重压);若你依赖显式 `protocol: chat-completions`,删掉该配置项。
94
+ - ✅ **升级后旧 `code` 预设会话无法 resume(#5)**:`ff33f79eb1` 在 `session-format-v2-to-v3` 的迁移里把 `code` 映射为 `ptc`(header 与所有 agent-preset/selected,`migration.ts:18`、`:140-151`)。**注意该修复早于上一基线**,旧条目本身已过时。残留属设计:原生 V3/V4 里的 `code` **不会**被重新解释,registry 仍抛 `agent-preset/not-found`(`packages/preset/agent-preset-registry/src/index.ts:207`),且该包在 `d1e22a7e24`(2026-09-21)拆包,无 git 改名配对。存量会话仍建议复制内置 ptc 预设或改绑 standard/ptc。
95
+ - ✅ **opencode-go 路由缺 `x-opencode-session` 头 + 缺 4.1-flash 目录项(#10)**:`6ed596f71b` 把 `packages/llm/llm-pi-ai/package.json:44` 的 `pi-ai` 抬到 `^0.87.1`;实测已装 0.87.1 的 `dist/providers/opencode-headers.js` 会设置 `x-opencode-session` 并包装 opencode/opencode-go,目录里也有 `deepseek-v4.1-flash`(仓库侧 patch 不触碰该 wrapper)。
96
+ - ✅ **压缩阈值按整窗口算,1M 窗口下高于 provider 实际输入上限(#22)——本次新修复**:`555b664b08` 把阈值改为 `Math.floor(Math.min(contextWindow × ratio, contextWindow − reservedCompletionTokens − headroomTokens))`(`packages/compaction/compaction-basic/src/config.ts:191-194`),新增 `headroomTokens`(默认 `65_536`,`:75`),保留输出在 `index.ts:314-318` 接线;窗口 ≤ `maxTokens + headroom` 时抛 `TargetPressureConfigError`(后续 `ec7030afd3`)。**新公开配置键**:`headroomTokens`、`maxTokens`——旧帖里"按模型覆盖 `thresholdRatio`"的规避可以撤掉。同区间 `llm-deepseek` 的 `src/common/defaults.ts` 由 `99e22ebbeb` 改名为 `src/defaults.ts`(`DEFAULT_CONTEXT_WINDOW`/`DEFAULT_MAX_TOKENS` 仍是 1M/256K)。
97
+ - **windowsHide 弹窗族**:`a05b5fbe79` + `cc8099dc5f`;CLI 侧现由 execa 承担(见 §1 #13)。
98
+ - **Windows 目录选择器 CJK 截断族**(U+XX00 低字节为 0):`51c242749a` 重写 readUtf16 → `koffi.decode(..., 'str16')`。覆盖 #643 #1660 #2126 #2227 #3010 #3313。
99
+ - **`--expose-internals` HMR 启动失败**:`c685582d54` + `675efe73f2`;loader 回退 `node-addon-require-builtin`。
100
+ - **compat.supportsDeveloperRole 可配置**:`884f7b9c41` + `cf4a27c471` + 文档 `30a838cda3`。
101
+ - **子代理模型快照 → request-time 选择**:`f76a225a7d`(PR #2663)。
102
+ - **pnpm 11 构建失败(npm_execpath)**:`89674edc93`。
103
+ - **fs-ext/node-gyp Windows 构建族**:`d927cbff99`(换成预编译 `@deepseek-ai/node-addon-system`)。
104
+ - **koffi 32KB 崩溃**:`141d72d7cf`。
105
+ - **非 loopback HTTP crypto.randomUUID**:新增 `dsh-util-crypto`。
106
+ - **ACP server 已发布**:`dsh --profile acp`。
107
+ - **MCP structuredContent 要求条件化**:`e1633fbc3f`(自 0.1.0-rc.7+)。
79
108
  - **旧 v0→v3 迁移校验**:多处收紧/修复已随 0.1.5-rc 发布(历史会话不可加载先试升级)。
80
109
  - **轮次导航条(turn rail)load-and-jump**:`b3064cca77` + `6af1ee49b1`。
81
- - **轨迹面板首 token 时间(#6129)**:`e779831f40` "fix(client): restore assistant timing from recorded streams"(2026-09-14 经 `a85778448a` 进入 master;不在初版基线 c291e7961a 中)。`packages/client/ui-trajectory/src/client/trajectory-assistant-definition.ts:195-203` 新增 `settleTiming()` 用 `assistantStreamFirstTokenTime(event.data.stream)` 从已记录流恢复首 token 时间,挂到 `assistant/message`(`:210-213`)与新增的 `assistant/attempt`(`:238-243,367`)。回放/已结流不再是空洞(原次级 S3,2026-09-15 复核移入本节)。
82
- - **Node 版本门槛**:根 `package.json:8-9` engines `^22.19.0 || >=24.0.0`;实测实际下限 ≈ 24.2(24.0/24.1 有 undefined 报错)。
110
+ - **轨迹面板首 token 时间(#6129)**:`e779831f40`(2026-09-14 经 `a85778448a` 进 master)。
111
+ - **桌面端打包 payload smoke 引用已移除的 fs-ext(#27)**:`6b05ed53e9`(只进 `dsh-v0.1.6-alpha.2`);本次复核确认 `apps/desktop/scripts/prepare-dsh.ts` 里已无 `checkFsExt()`。
112
+ - ✅ **v0→v3 迁移后 stock 投影读取崩溃(#29)——本次新修复**:`f4a32dbd0a`。telemetry 读取被拍平(`session-telemetry/src/coordinator.ts:273` 现在读 `message.isError`,旧代码读 `message.content[0].isError`),并且**迁移产物在 hydrate 前被强校验**(`session-format-v3-to-v4/src/validation.ts:52-129`,经 `session-persistence-jsonl/src/format.ts:468` 的 `assertReleasedV4Relationships` 接入;拒绝路径 `session-format/src/catalog.ts:231-251`)。症状因此从"hydrate 崩溃"变成"**带明确错误的拒绝加载**"。**残留面**已单列为 §1 的 #29(原生 V4 的 `user/message` content 仍不校验)。
113
+ - **运行时 invariants 全部移除(本区间新增的"官方移除",不是修复)**:`@deepseek-ai/dsh-invariants`、`ctx.invariants`、`<pkg>/invariant` 子路径、整棵 `packages/runtime-diagnostics`、`sdk-minimal` 的五条相关行全部消失;四个 emitter 从重抛改为记录并继续。若你的旧帖/插件依赖它们,见 [migration-0.2.md](migration-0.2.md) §4。
114
+ - **Node 版本门槛**:根 `package.json:8-9` engines `^22.19.0 || >=24.0.0`(本区间未变);实测实际下限 ≈ 24.2(24.0/24.1 有 undefined 报错)。
83
115
 
84
- ## 4. 设计行为 / 常见误解(不是 bug,快速对照)
116
+ ## 6. 设计行为 / 常见误解(不是 bug,快速对照)
85
117
 
86
118
  | 现象 | 结论 | 关键位置 |
87
119
  |---|---|---|
88
- | 本地模型把工具调用输出成 `<DSML|function_calls>` 文本 | 适配器只解析 `delta.tool_calls`,不解析文本标签;这是服务端职责 | `packages/llm/llm-deepseek/src/translate.ts:167-195` |
89
- | 自定义 provider 显示上下文 262k 而非 1M | 262144 是未声明容量时的内置默认假设,可 settings.yaml 覆盖 | `packages/llm/llm-pi-ai/src/config.ts:64,330`、`catalog.ts:901` |
90
- | 没填 key 却在扣 DeepSeek 余额 | 默认凭据引用环境变量 `DEEPSEEK_API_KEY`,启动环境只读且优先级最高 | `packages/llm/llm-deepseek/src/index.ts:88`;`packages/credentials/credentials-local/README.md:75-80` |
120
+ | 本地模型把工具调用输出成 `<DSML\|function_calls>` 文本 | 适配器只解析 `delta.tool_calls`,不解析文本标签;这是服务端职责 | `packages/llm/llm-deepseek/src/translate.ts` |
121
+ | 自定义 provider 显示上下文 262k 而非 1M | 262144 是未声明容量时的内置默认假设,可 settings 覆盖 | `packages/llm/llm-pi-ai/src/config.ts:64,330`、`catalog.ts:901` |
122
+ | 没填 key 却在扣 DeepSeek 余额 | 默认凭据引用环境变量 `DEEPSEEK_API_KEY`,启动环境只读且优先级最高 | `packages/llm/llm-deepseek-api-key/**`;`packages/credentials/credentials-local/README.md:75-80` |
91
123
  | web_search 用 deepseek-v4-flash 而非会话模型 | 独立搜索 provider(web-search-deepseek),模型/凭据/端点与聊天分离 | `packages/web/web-search-deepseek/src/provider.ts:38,207-221` |
92
- | `dsh --profile tui` 不存在 | tui 非内置;README 中为示例("assuming the tui profile is installed"),社区方案 `dsh plugin --profile tui add github:deepseek-harness/turtle-ui` | `apps/cli/README.md:28`、`apps/cli/reference/README.md:70-72` |
93
- | `--host 0.0.0.0` 被拒绝 | 刻意不支持(远程代码执行风险);用 LAN IP + `--trusted-host` 或 SSH 隧道 | `packages/bundle/web-app/src/startup.ts:74-75` |
94
- | 工具定义每轮都发 | 无「每 N 轮」开关;工具集不变时前缀缓存复用(逻辑 prompt 体积 ≠ 全价计费) | `packages/core/agent-loop/src/agent.ts:262-265,556,613` |
95
- | 同级权限请求报错 | 见第 1 节 #1(**同级自 `61c548e200` 起已接受**,只剩更窄/不受支持的目标抛错);read-only 下升级走审批可正常终止 | `packages/sandbox/sandbox/src/escalation.ts:155,160` |
96
- | bash/run_code 的 `description` 必填 | 刻意设计(活动列表/UI 展示用);空串另有执行期拒绝 | `packages/shell/tool-bash/src/index.ts:244-252`;`packages/core/tools/src/ptc.ts:304-311,327-330`(#3874) |
124
+ | `dsh --profile tui` 不存在 | tui 非内置;README 中为示例,社区方案 `dsh plugin --profile tui add github:deepseek-harness/turtle-ui` | `apps/cli/README.md`、`apps/cli/reference/README.md:70-72` |
125
+ | `--host 0.0.0.0` 被拒绝 | 刻意不支持(远程代码执行风险);用 LAN IP + `--trusted-host` 或 SSH 隧道;反向代理部署见 `docs/user/guide/public-deployments.md` | `packages/bundle/web-app/src/startup.ts:74-75` |
126
+ | 工具定义每轮都发 | 无「每 N 轮」开关;工具集不变时前缀缓存复用。新增 `ToolSchema.deferLoading: true` 可标记延后加载 | `packages/core/agent-loop/src/agent.ts`;`packages/core/tools/src/index.ts` |
127
+ | 同级权限请求报错 | 见 §1 #1(同级已接受,只剩更窄/不受支持的目标抛错) | `packages/sandbox/sandbox/src/escalation.ts:171-179` |
128
+ | bash/run_code 的 `description` 必填 | 刻意设计(活动列表/UI 展示用);空串另有执行期拒绝 | `packages/shell/tool-bash/src/index.ts`;`packages/core/tools/src/ptc.ts`(#3874) |
97
129
  | 界面 token 远小于计费 | 界面=主会话 usage 之和;子代理独立会话/日志不计入;无费用熔断功能 | `ui-trajectory/src/client/layout.ts:758,952-955`;`subagent-in-process-driver/src/index.ts:113`(#6688) |
98
130
  | skill 目录监视挡 Windows 插件更新 | `watch: false` 开关已存在(未文档化);Windows 可用 `watchUsePolling` | `packages/skill/skill-filesystem/src/index.ts:82-83`(#6674) |
99
- | headless 每次运行新会话 | 默认新会话 `session-<uuid>`;**0.1.6+ 已支持 `--session-id <id>` 续跑已存在会话**(`startup.ts:44`、`index.ts:279` `agents.resume`;缺 `sessionPersistence`/`sessionQuery` 会 fail loud);无"继续最近会话"便捷形式;多轮另可走 Connection RPC/gateway | `packages/bundle/headless/src/index.ts:279,342`;`startup.ts:43-45`(#6677) |
100
- | 想"回退到第 N 轮重跑" | 无原位 rewind;fork 生成新会话继承前缀,边界禁落在开启 turn 内;UI 仅开放已完成轮次末条消息 | `packages/core/session/src/index.ts:1203,1256-1260`;`ui-chat/src/client/locale.ts:71-72`(#6652) |
101
- | 自定义 provider 想调思考强度 | 模型条目声明 `reasoningEfforts`(off/minimal/low/medium/high/xhigh/max)→ thinkingLevelMap;仅 llm-pi-ai | `packages/llm/llm-pi-ai/src/catalog.ts:607,690-743`;示例 `index.ts:28-53`(#1058) |
131
+ | headless 每次运行新会话 | 默认新会话 `session-<uuid>`;`--session-id <id>` 可续跑已存在会话(缺 `sessionPersistence`/`sessionQuery` 会 fail loud);无"继续最近会话"便捷形式;多轮另可走 Connection RPC/gateway | `packages/bundle/headless/src/index.ts:279,342`;`startup.ts:43-45`(#6677) |
132
+ | 想"回退到第 N 轮重跑" | 无原位 rewind;fork 生成新会话继承前缀,边界禁落在开启 turn 内 | `packages/core/session/src/index.ts`;`ui-chat/src/client/locale.ts:71-72`(#6652) |
133
+ | 自定义 provider 想调思考强度 | 模型条目声明 `reasoningEfforts`(off/minimal/low/medium/high/xhigh/max)→ thinkingLevelMap;仅 llm-pi-ai | `packages/llm/llm-pi-ai/src/catalog.ts:607,690-743`(#1058) |
102
134
  | 编译报错引用不存在的导出(如 PersistenceCoordinator) | 旧产物与源码混装,非配置问题;彻底重建 | 常量已改名搬家 `session-query/src/config.ts:12`(#5622) |
103
135
  | 自动压缩"开始"阶段不可见 | 节点模型已按 lifecycle-first(start=compaction/start);仅渲染层被 checkpoint 门控 | `ui-chat/src/client/conversation-nodes/compaction.ts:39-45,52-53`(#6675) |
136
+ | 插件想写自己的会话事件 | **不要写**:未知类型要带信封 `ignorable: true` 才被接受,而 `Session.append()` 写不了该标记,写入会让会话打不开。改用既有事件推导或 storage 服务 | `packages/core/session/src/types.ts`(`SessionEvent.ignorable`);官方 `.../cordis-plugin-development/references/practices.md` |
104
137
 
105
- ## 5. 相关资源
138
+ ## 7. 相关资源
106
139
 
107
- - 官方汇总帖(31 项未修 + 1 项部分修复 + 6 项次级,2026-09-15 已对照 0.1.6-alpha.1 复核):<https://github.com/deepseek-ai/deepseek-harness/discussions/6520>
140
+ - 官方汇总帖(社区核实版):<https://github.com/deepseek-ai/deepseek-harness/discussions/6520>
141
+ - 本世代破坏性变更的迁移路径:[migration-0.2.md](migration-0.2.md)
142
+ - 官方逐版本迁移指南(原文副本,仓库内**无 index、无入链**):`references/official-docs/docs/upgrade-guide/**`
108
143
  - 官方仓库 checkout 路径约定见 [SKILL.md](../SKILL.md)(本知识库以 `D:\deepseek-harness` 为示例)。
109
144
  - 每项条目引用的讨论号均可拼为 `https://github.com/deepseek-ai/deepseek-harness/discussions/<编号>` 直接查看原始分析。
110
145
 
@@ -0,0 +1,127 @@
1
+ # How I decide whether a DSH plugin should keep being maintained
2
+
3
+ > Chinese: [when-to-retire-a-plugin.zh-CN.md](when-to-retire-a-plugin.zh-CN.md)
4
+
5
+ ## 0. What I did, and why it is public
6
+
7
+ On 2026-10-05 I pulled the whole DSH plugin ecosystem from npm — **324 real plugins** — and benchmarked every plugin I publish against its rivals on the same capability surface, by weekly downloads. The outcome: **3 retired, 7 frozen, 1 reclassified**. I am publishing the criteria because "should this keep going" is a question every plugin author meets, and most meet it without data.
8
+
9
+ ## 1. The criteria
10
+
11
+ One thing first: **this is not a purge, it is a self-audit.** The official project is not eliminating third-party plugins — `CONTRIBUTING.md:19` says plainly that packages in the official repository are not inherently more important than community packages, and that the official showcase is "an idea, an official showcase, and a source of inspiration, but **not a mandate from us**". The pressure comes from other third-party authors. Section 3 shows the data.
12
+
13
+ **Two hard criteria.**
14
+
15
+ **Hard criterion A: the same capability has been taken into the host's core.** Wording matters. Not "the official repo has a package with a similar name", but "the official composition **mounts it by default**", or "the official project has made it a **first-class subsystem**". The gap between those two readings is the single easiest mistake to make in this kind of review.
16
+
17
+ **Hard criterion B: on the same capability surface, a third party has a significantly better-adopted implementation.** "Significantly" means one order of magnitude. Any such comparison is only valid as a **relative** magnitude inside one ecosystem, never as an absolute number.
18
+
19
+ **One soft criterion.**
20
+
21
+ **Soft criterion C: maintenance cost versus real usage.** This one is easy to misuse. My own Web profile now runs the stock bundle set and installs none of the family's plugins. So "do I still use it" cannot be the criterion — for me these repositories are **published artifacts**, not **personal tools**. The two questions that can be criteria are: **does anyone out there still need this**, and **is this maintenance cost still worth paying**.
22
+
23
+ **One meta-rule.**
24
+
25
+ **Only file-level evidence counts.** Every conclusion has to point at a specific file, a specific line, or a specific npm / GitHub API reading. Anything that cannot is marked "unverified" and stays out of the decision. This rule corrected four of my own starting premises this round, two of them directly about whether the official project has a capability at all — one where it does and simply does not mount it, and one where it does mount it and I had assumed otherwise.
26
+
27
+ **Three dispositions.**
28
+
29
+ | Disposition | Count | Packages | Meaning |
30
+ |---|---|---|---|
31
+ | 🪦 **Retired** | 3 | `dsh-background-agents`, `dsh-session-pin`, `dsh-team-rooms` | **Compatibility updates stop**: RETIRED banner at the top of the README, npm `deprecate` applied, GitHub repository archived (read-only) |
32
+ | 🧊 **Frozen** | 7 | `dsh-budget`, `dsh-memento`, `dsh-draw`, `dsh-claude-move`, `dsh-reach`, `dsh-wechat`, `dsh-defend` | **No new features — but still working and not deprecated**; only genuine breakage gets fixed |
33
+ | ✅ **Reclassified** | 1 | `dsh-catalog` | First judged as a retirement; after review, kept: it is an internal family tool and does not compete with third-party catalogs. **Still maintained** |
34
+
35
+ Two earlier corridor packages, `dsh-plugin-upgrade-015` (stopped at npm `0.1.1`) and `dsh-plugin-upgrade-016` (never published), are also retired; plugin upgrades continue through the single `dsh-plugin-upgrade` line.
36
+
37
+ ## 2. The data, part one: the 3 retirements
38
+
39
+ This tier used hard criterion A almost exclusively.
40
+
41
+ | Package | Official counterpart | Why it was judged retired |
42
+ |---|---|---|
43
+ | `dsh-background-agents` | `tool-subagent` (`backgroundMode: continuable`) + `tool-subagent-control` + `tool-jobs` | The official composition **mounts it by default**. And the package's **own README already said so**: the background-agent half is *superseded by DSH's native continuable subagents* |
44
+ | `dsh-session-pin` | the `client-ui-workspace` pin action | Mounted **by default**: the session context menu has `Pin session`, rows have a hover pin button, pins can be reordered by dragging inside the pinned block, and the host persists `pinnedSessionIds` and broadcasts `pinned` delta frames. What is left for the plugin is appearance work — row colours, a pinned panel, a header toggle |
45
+ | `dsh-team-rooms` | `dsh-experimental-agent-team` | The official project turned "teams" into a **first-class subsystem**: an implicit root roster, a persistent mailbox (offline members receive mail on return, with de-duplication), a shared task DAG (compare-and-swap against overwrites, dependency unlocking, file-write conflict warnings), `wait_agent`. It **also** satisfies hard criterion B: its own weekly downloads are **589 — the lowest in the family**, while `@nanmicoder/dsh-agent-teams` sits at **13,273 (22×)** |
46
+
47
+ One honest qualification on `dsh-team-rooms`: the official `dsh-experimental-agent-team` is **optional**, `disabled` by default in base, and enabling it **requires disabling** `send_message` / `interrupt_agent` / `list_agents`. So this is not a "mounted by default" supersession. It entering the core, plus the third-party 22× adoption, is what makes the case.
48
+
49
+ One unflattering number I am leaving in: after the host shipped a built-in pin, `dsh-session-pin` **still had 1,015 weekly downloads**. The report offers two readings — appearance enhancements are genuinely wanted, or the download metric carries noise. I cannot separate the two with the data I have, so I retired it on the criteria and left the number standing here.
50
+
51
+ ## 3. The data, part two: the 7 freezes — the multiplier table
52
+
53
+ Measured 2026-10-05 from the npm registry API. **On method first**: npm weekly downloads are **not** user counts (they include CI, mirrors and repeated installs), so the table below is used purely for the **relative** magnitude between packages, never as an absolute figure.
54
+
55
+ | Capability surface | My package (weekly downloads) | Third-party rival on the same surface (weekly downloads) | Multiplier | Where the rival is stronger |
56
+ |---|---|---|---|---|
57
+ | Cost / usage metering | `dsh-budget` 1,079 | **`dsh-cost-meter` 33,526** | **31×** | 170+ model price entries and quota lookups for 11 coding plans |
58
+ | Cross-session memory | `dsh-memento` 1,202 | **`@openviking/dsh-memory-plugin` 10,160** | **8×** | An official organisation repository from ByteDance volcengine — company-level resourcing |
59
+ | IM bridging | `dsh-reach` ~0.6k / `dsh-wechat` 752 | **`@xmanrui/dsh-im` 17,384** | **23×** | One package covers 10 channels (WeChat / Feishu / WeCom / DingTalk / QQ / Telegram / WhatsApp / Slack / Discord / Matrix) |
60
+ | Injection and destructive-command defence | `dsh-defend` 937 | **`cc-safety-net` 13,087** | **14×** | Blocks destructive commands and secret-file access directly as a coding-agent CLI hook — a short adoption path and a wide audience |
61
+ | Image generation | `dsh-draw` 973 | **`dsh-image-gen` 7,216** | **7×** | Multi-provider |
62
+ | Session / configuration migration | `dsh-claude-move` 843 | **`dsh-chat-import` 5,111** | **6×** | Covers 25+ AI coding agents |
63
+
64
+ **Four background readings.**
65
+
66
+ - **The size of the field.** Two keywords intersected: 8,620 hits, 772 candidates, and after checking the `dsh` field package by package, **324 genuine plugins**. (A note on scope: this counts **only packages on npm that declare a `dsh` manifest and can actually be installed with `dsh plugin add`**. Community directory sites publish much larger entry counts, because they also count GitHub repositories, sub-directories and unpublished candidates. The two figures should not be quoted against each other, and must not be added together.)
67
+ - **This is not an isolated case.** **Of 16 capability surfaces, my packages are not first on 14**, most of them behind by **3–31×**. The widest gap is on context insight: `dsh-fast` 917 against `dsh-context` 38,999 (**43×**).
68
+ - **First in the family is not first on the surface.** `dsh-mcp-panel` at 2,472 is the family's top package, but `dsh-mcp-connector` on the same surface is 7,556 (3×).
69
+ - **Nothing here was abandoned.** Before this review, every affected repository had been pushed on 2026-10-05 itself. The retirements and freezes are a **deliberate judgement**, not a cleanup of dead projects.
70
+
71
+ **Why these seven?** They satisfy two things at once: the rival is not merely better-adopted but **broader in capability** (multi-provider, multi-channel, multi-agent, or organisation-backed); and further investment from me on that surface is unlikely to produce something only I can provide.
72
+
73
+ Two counter-examples have to travel with the criteria, or they collapse into "behind means retire":
74
+
75
+ - **`dsh-fast` (917 against `dsh-context` 38,999, 43×) stays as it is.** It is a lightweight package with a low maintenance cost; freezing it would save very little. **Being behind is not a criterion.**
76
+ - **Hard criterion B alone can be enough, with hard criterion A failing.** For `dsh-draw` the official counterpart is **zero** (`text-to-image` / `image_gen` / `txt2img` have 0 hits across the host repository), and the same is true for `dsh-memento` (there is no memory seam in the official `capability-seams.md`, and `docs/user/guide/mcp-memory.md:5,31` states outright that **no memory server is present in the shipped composition**). **"The official project does not do this" does not mean "I should keep investing"** — the memory surface has at least 10 rivals, and `dsh-memento` sits around 8th.
77
+
78
+ ## 4. Where I am still first
79
+
80
+ Listing only the losing half would be misleading. This is the contemporaneous "still only me" list (2026-10-05):
81
+
82
+ | Capability surface | My packages (weekly downloads) | Status |
83
+ |---|---|---|
84
+ | LSP action surface | `dsh-lsp-actions` **1,170** | **No strong rival anywhere in the ecosystem.** The official LSP **deliberately excludes** rename / formatting / diagnostics / symbol lists |
85
+ | Plugin certification, health checks, scoring | `dsh-plugin-doctor` 218, `dsh-score`, `dsh-test-drive`, `dsh-plugin-certification` | **No rival.** The ecosystem only has `dsh-why` (137) and `dsh-fix` (1,503) — tools that repair a broken plugin, not a scoring system |
86
+ | Research / report engines | `dsh-research-report` 1,019, `dsh-industry-research` 926, `dsh-fund-research` 802 | **Essentially unrivaled** (vertical domains) |
87
+ | Data quality | `dsh-data-quality` 769 | Only `dsh-data-cleaning-agent` comes close |
88
+ | Declarative permissions + network policy | `dsh-permission-rules` **1,459** | `dsh-perm-gate` is **slightly higher** at 1,851 (the report marks this row "rival marginally ahead"), but its **process-level HTTP / CONNECT proxy network policy** has not been replicated by anyone |
89
+ | GitHub CI automation | `dsh-github` 359 | No rival (also the lowest, but genuinely nobody else is doing it) |
90
+
91
+ Two cross-checks:
92
+
93
+ - **The star leader is not the flagship security plugin — it is the research line.** `dsh-research-report` (215★) and `dsh-industry-research` (212★) are both above `dsh-memento` (139★), `dsh-permission-rules` (118★) and `dsh-mcp-panel` (75★).
94
+ - **"The official project lacks it" and "a third party has not built it" are two independent facts.** The report confirms at least eight surfaces where the official project is still at zero (`dsh-defend`, `dsh-mask`, `dsh-budget`, `dsh-draw`, `dsh-translate`, `dsh-library`, `dsh-autotier`, the `dsh-plugin-*` toolchain). Some of those have been taken by third parties; some are still empty. **An empty space is not a moat. Nobody doing it, and me being able to do it well, is a moat.**
95
+
96
+ ## 5. "Frozen" does not mean "deprecated"
97
+
98
+ This section is for users.
99
+
100
+ | Status | Will the package be deleted or unpublished? | Will bugs still be fixed? | npm state | Repository state |
101
+ |---|---|---|---|---|
102
+ | 🪦 **Retired** (3) | No | **No** — including compatibility updates | `deprecate` applied | Archived, read-only |
103
+ | 🧊 **Frozen** (7) | No | **Yes** — but only a minimal compatibility fix, and only when a breaking host change makes the package completely unusable | Normal, **not** deprecated | Normal, **not** archived |
104
+ | Everything else | No | Yes | Normal | Normal |
105
+
106
+ **If you have one installed, there is nothing you need to do.** The seven frozen packages install and run exactly as before: no interface changes, no versions pulled. The only thing that would require action is a host upgrade that actually breaks one — in that case, please open an issue and I will fix it. **If what you want is new features, please use the rivals named in the section 3 table.** Every one of them is significantly better adopted on its surface, and that is precisely why the package is frozen.
107
+
108
+ **Why not express this by deleting packages?** Because deleting them means the next person cannot find the package, and cannot find the reason it was retired either. So the family tables **keep every row and only add a status note**: retired and frozen repositories stay listed in every family table with a `🚫 RETIRED` / `🧊 FROZEN` status column, and their original descriptions are left untouched.
109
+
110
+ ## 6. Eight self-check questions for other plugin authors
111
+
112
+ 1. **Does the official project "have a package", or "mount it by default"?** The official `experimental/*`, `computer-use`, `browser-use`, `lsp` and `speech-to-text` packages are **not in the stock composition**. "The official project has a package" is not "the user gets the capability on install".
113
+ 2. **Does a line in `base` mean the user has the capability?** Not necessarily. The Web patch **disables the base process-level model-facing tool rows one by one** and hands them to each agent preset to remount. Reading only `base/cordis.patch.yml` produces a systematically over-optimistic answer.
114
+ 3. **Did you search for rivals by capability keyword, or by package name?** Comparing names alone misses every rival: `dsh-cost-meter` and `dsh-budget` share no name at all, and neither do `cc-safety-net` and `dsh-defend`.
115
+ 4. **Does the same name mean the same thing?** The official `dsh-experimental-auto-review` and `dsh-auto-review` share a name but invert the security model: the official one reviews with the current agent's own provider/model and says of itself that it *can allow unsafe actions, deny useful work, and spend additional tokens*, with no deterministic exemptions and no persistent grants; mine is an independent read-only second-model reviewer that **fails closed**. That is not a supersession.
116
+ 5. **Can a second signal corroborate your download count?** `dsh-budget` has 1,079 weekly downloads and **10 stars** — high downloads look like CI and mirror noise, while low stars look like real appeal. In the other direction, `dsh-auto-review` carries **10 open issues**, which is what real use and real bug reports look like. Download counts alone mislead.
117
+ 6. **Is "do I still use it" your criterion?** If you no longer use it, it should not be (my own Web profile runs the stock bundle set today). Replace it with two questions: **does anyone out there still need this, and is the maintenance cost still worth it?**
118
+ 7. **How far behind do you have to be?** There is no threshold. `dsh-fast` is 43× behind and stays as it is; `dsh-defend` is 14× behind and is frozen. The price of freezing is admitting you are no longer the best choice on that surface, so it is only worth paying for packages where further investment will not produce anything distinctive.
119
+ 8. **Is your decision written into the README?** A decision that lives only in your head, or only in an internal report, does not exist. Each of the seven frozen packages carries a `## Maintenance status: 🧊 FROZEN` section with the measured comparison table and a note on where the rival is stronger; each of the three retired packages carries a RETIRED banner at the top of its README. **At a minimum, users should be able to learn from the README why you stopped.**
120
+
121
+ ## 7. Statement of fact
122
+
123
+ - **The family today**: the family tables list **44 plugin repositories** (45 rows in the tables that include `dsh-plugin-upgrade-015`), of which 🚫 **3 are retired** and 🧊 **7 are frozen**; the rest are maintained as active repositories. Licensing is predominantly Apache-2.0.
124
+ - **Where the repositories are**: https://github.com/PerryLink
125
+ - **Measurement date**: 2026-10-05, from that self-audit — a full npm registry pull, live GitHub REST API measurements, and file-by-file evidence from the host source tree. **The conclusions are checkable**: each one points at a specific file or a specific API reading, and anything that could not was marked "unverified".
126
+
127
+ One last line, for anyone who might want to take something over: **`dsh-reach` and `dsh-wechat`, the two IM bridging lines, are open for a new maintainer.** The reason they are frozen is specific — `@xmanrui/dsh-im` covers 10 channels in a single package, and that is a better job than mine. If those two lines are useful to you and you want them to keep growing, both repositories carry permissive licences (`dsh-reach` is Apache-2.0, `dsh-wechat` is MIT); please open an issue and we can talk about the handover.