dsh-plugin-guide 0.3.27 → 0.3.30

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 (304) hide show
  1. package/README-es.md +3 -3
  2. package/README-hi.md +3 -3
  3. package/README-pt.md +3 -3
  4. package/README-zh.md +5 -3
  5. package/README.md +5 -3
  6. package/SKILL.md +21 -8
  7. package/dist/dsh-plugin-dev.js +93 -18
  8. package/guide/family-toolchain.md +260 -0
  9. package/guide/links.md +3 -2
  10. package/guide/migration-0.2.md +64 -8
  11. package/guide/plugin-dev-guide.md +8 -6
  12. package/guide/quick-reference.es.md +3 -2
  13. package/guide/quick-reference.hi.md +4 -3
  14. package/guide/quick-reference.md +6 -5
  15. package/guide/quick-reference.pt.md +4 -3
  16. package/guide/quick-reference.zh-CN.md +6 -5
  17. package/guide/release-engineering.md +4 -2
  18. package/guide/release-engineering.zh-CN.md +4 -2
  19. package/guide/unfixed-issues.md +7 -0
  20. package/guide/version-matrix.md +309 -0
  21. package/guide/when-to-retire-a-plugin.md +5 -5
  22. package/guide/when-to-retire-a-plugin.zh-CN.md +5 -5
  23. package/index.d.ts +32 -0
  24. package/index.js +24 -9
  25. package/package.json +19 -11
  26. package/references/community-ecosystem.md +2 -1
  27. package/references/dev-resource-landscape.md +294 -0
  28. package/references/official-docs/AGENTS.md +4 -5
  29. package/references/official-docs/SNAPSHOT.md +3 -3
  30. package/references/official-docs/THIRD_PARTY_NOTICES.md +2 -1
  31. package/references/official-docs/docs/AGENTS.md +1 -1
  32. package/references/official-docs/docs/architecture.i18n.yaml +14 -14
  33. package/references/official-docs/docs/architecture.md +11 -12
  34. package/references/official-docs/docs/architecture.zh.md +11 -12
  35. package/references/official-docs/docs/capability-seams.i18n.yaml +2 -2
  36. package/references/official-docs/docs/capability-seams.md +48 -23
  37. package/references/official-docs/docs/capability-seams.zh.md +48 -23
  38. package/references/official-docs/docs/cli-help.i18n.yaml +34 -0
  39. package/references/official-docs/docs/cli-help.md +203 -0
  40. package/references/official-docs/docs/cli-help.zh.md +205 -0
  41. package/references/official-docs/docs/config-catalog.md +305 -145
  42. package/references/official-docs/docs/config-catalog.zh.md +305 -145
  43. package/references/official-docs/docs/cookbook/adding-a-session-format-version.i18n.yaml +6 -6
  44. package/references/official-docs/docs/cookbook/adding-a-session-format-version.md +7 -5
  45. package/references/official-docs/docs/cookbook/adding-a-session-format-version.zh.md +7 -5
  46. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml +6 -6
  47. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.md +11 -9
  48. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.zh.md +11 -9
  49. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.i18n.yaml +4 -4
  50. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.md +5 -5
  51. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +5 -5
  52. package/references/official-docs/docs/defensive-patterns.i18n.yaml +2 -2
  53. package/references/official-docs/docs/defensive-patterns.md +1 -1
  54. package/references/official-docs/docs/defensive-patterns.zh.md +1 -1
  55. package/references/official-docs/docs/development.i18n.yaml +6 -6
  56. package/references/official-docs/docs/development.md +4 -2
  57. package/references/official-docs/docs/development.zh.md +4 -2
  58. package/references/official-docs/docs/event-producer-consumer.md +33 -33
  59. package/references/official-docs/docs/event-producer-consumer.zh.md +33 -33
  60. package/references/official-docs/docs/experimental-persistence-catalog.i18n.yaml +10 -0
  61. package/references/official-docs/docs/experimental-persistence-catalog.md +17 -0
  62. package/references/official-docs/docs/experimental-persistence-catalog.zh.md +17 -0
  63. package/references/official-docs/docs/module-graph.md +202 -131
  64. package/references/official-docs/docs/module-graph.zh.md +202 -131
  65. package/references/official-docs/docs/persistence-catalog.i18n.yaml +185 -158
  66. package/references/official-docs/docs/persistence-catalog.md +213 -112
  67. package/references/official-docs/docs/persistence-catalog.zh.md +213 -112
  68. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.i18n.yaml +28 -0
  69. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.md +48 -0
  70. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.schema.json +76 -0
  71. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.zh.md +48 -0
  72. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml +4 -4
  73. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.md +2 -2
  74. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.zh.md +2 -2
  75. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.i18n.yaml +28 -0
  76. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.md +48 -0
  77. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.schema.json +290 -0
  78. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.zh.md +48 -0
  79. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.i18n.yaml +28 -0
  80. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.md +48 -0
  81. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.schema.json +457 -0
  82. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.zh.md +48 -0
  83. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.i18n.yaml +28 -0
  84. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.md +60 -0
  85. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.schema.json +11474 -0
  86. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.zh.md +60 -0
  87. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.i18n.yaml +28 -0
  88. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.md +48 -0
  89. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.schema.json +2990 -0
  90. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.zh.md +48 -0
  91. package/references/official-docs/docs/persistence-changes/README.i18n.yaml +4 -4
  92. package/references/official-docs/docs/persistence-changes/README.md +12 -10
  93. package/references/official-docs/docs/persistence-changes/README.zh.md +12 -10
  94. package/references/official-docs/docs/persistence-changes/historical-formats/README.i18n.yaml +2 -2
  95. package/references/official-docs/docs/persistence-changes/historical-formats/README.md +1 -1
  96. package/references/official-docs/docs/persistence-changes/historical-formats/README.zh.md +1 -1
  97. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml +2 -2
  98. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.md +50 -50
  99. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.zh.md +50 -50
  100. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml +2 -2
  101. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.md +14 -14
  102. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.zh.md +14 -14
  103. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml +2 -2
  104. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.md +3 -3
  105. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.zh.md +3 -3
  106. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml +2 -2
  107. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.md +10 -10
  108. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.zh.md +10 -10
  109. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml +2 -2
  110. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.md +3 -3
  111. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.zh.md +3 -3
  112. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml +2 -2
  113. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.md +13 -13
  114. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.zh.md +13 -13
  115. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml +2 -2
  116. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.md +63 -63
  117. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.zh.md +63 -63
  118. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml +2 -2
  119. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.md +54 -54
  120. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.zh.md +54 -54
  121. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml +2 -2
  122. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.md +7 -7
  123. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.zh.md +7 -7
  124. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml +2 -2
  125. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.md +27 -27
  126. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.zh.md +27 -27
  127. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml +2 -2
  128. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.md +4 -4
  129. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.zh.md +4 -4
  130. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml +2 -2
  131. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.md +27 -27
  132. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.zh.md +27 -27
  133. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml +2 -2
  134. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.md +7 -7
  135. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.zh.md +7 -7
  136. package/references/official-docs/docs/persistence-schema.json +2084 -1827
  137. package/references/official-docs/docs/session-format-status.i18n.yaml +6 -6
  138. package/references/official-docs/docs/session-format-status.md +6 -6
  139. package/references/official-docs/docs/session-format-status.zh.md +6 -6
  140. package/references/official-docs/docs/subsystems/README.i18n.yaml +2 -2
  141. package/references/official-docs/docs/subsystems/README.md +4 -1
  142. package/references/official-docs/docs/subsystems/README.zh.md +4 -1
  143. package/references/official-docs/docs/subsystems/agent-team.i18n.yaml +7 -7
  144. package/references/official-docs/docs/subsystems/agent-team.md +10 -10
  145. package/references/official-docs/docs/subsystems/agent-team.zh.md +10 -10
  146. package/references/official-docs/docs/subsystems/boot.i18n.yaml +2 -2
  147. package/references/official-docs/docs/subsystems/boot.md +4 -4
  148. package/references/official-docs/docs/subsystems/boot.zh.md +4 -4
  149. package/references/official-docs/docs/subsystems/claude-code-mods.i18n.yaml +2 -2
  150. package/references/official-docs/docs/subsystems/claude-code-mods.md +1 -1
  151. package/references/official-docs/docs/subsystems/claude-code-mods.zh.md +1 -1
  152. package/references/official-docs/docs/subsystems/jobs.i18n.yaml +2 -2
  153. package/references/official-docs/docs/subsystems/jobs.md +2 -3
  154. package/references/official-docs/docs/subsystems/jobs.zh.md +2 -3
  155. package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +4 -4
  156. package/references/official-docs/docs/subsystems/llm-streaming.md +41 -14
  157. package/references/official-docs/docs/subsystems/llm-streaming.zh.md +41 -14
  158. package/references/official-docs/docs/subsystems/persistence.md +2 -0
  159. package/references/official-docs/docs/subsystems/persistence.zh.md +2 -0
  160. package/references/official-docs/docs/subsystems/plan.i18n.yaml +2 -2
  161. package/references/official-docs/docs/subsystems/plan.md +1 -1
  162. package/references/official-docs/docs/subsystems/plan.zh.md +1 -1
  163. package/references/official-docs/docs/subsystems/session-query.md +2 -0
  164. package/references/official-docs/docs/subsystems/session-query.zh.md +2 -0
  165. package/references/official-docs/docs/subsystems/session-title.i18n.yaml +6 -6
  166. package/references/official-docs/docs/subsystems/session-title.md +14 -5
  167. package/references/official-docs/docs/subsystems/session-title.zh.md +14 -5
  168. package/references/official-docs/docs/subsystems/session.i18n.yaml +3 -0
  169. package/references/official-docs/docs/subsystems/session.md +48 -5
  170. package/references/official-docs/docs/subsystems/session.zh.md +48 -5
  171. package/references/official-docs/docs/subsystems/skills.i18n.yaml +2 -2
  172. package/references/official-docs/docs/subsystems/skills.md +2 -2
  173. package/references/official-docs/docs/subsystems/skills.zh.md +2 -2
  174. package/references/official-docs/docs/subsystems/slots.md +10 -8
  175. package/references/official-docs/docs/subsystems/slots.zh.md +10 -8
  176. package/references/official-docs/docs/subsystems/ssh.i18n.yaml +2 -2
  177. package/references/official-docs/docs/subsystems/ssh.md +22 -11
  178. package/references/official-docs/docs/subsystems/ssh.zh.md +22 -11
  179. package/references/official-docs/docs/subsystems/subagent.i18n.yaml +24 -27
  180. package/references/official-docs/docs/subsystems/subagent.md +165 -229
  181. package/references/official-docs/docs/subsystems/subagent.zh.md +167 -233
  182. package/references/official-docs/docs/subsystems/system-prompt.i18n.yaml +2 -2
  183. package/references/official-docs/docs/subsystems/system-prompt.md +32 -2
  184. package/references/official-docs/docs/subsystems/system-prompt.zh.md +32 -2
  185. package/references/official-docs/docs/subsystems/tools.i18n.yaml +2 -2
  186. package/references/official-docs/docs/subsystems/tools.md +3 -3
  187. package/references/official-docs/docs/subsystems/tools.zh.md +3 -3
  188. package/references/official-docs/docs/subsystems/translation.i18n.yaml +19 -0
  189. package/references/official-docs/docs/subsystems/translation.md +103 -0
  190. package/references/official-docs/docs/subsystems/translation.zh.md +103 -0
  191. package/references/official-docs/docs/subsystems/web-server.i18n.yaml +8 -8
  192. package/references/official-docs/docs/subsystems/web-server.md +43 -8
  193. package/references/official-docs/docs/subsystems/web-server.zh.md +43 -8
  194. package/references/official-docs/docs/subsystems/webhook.md +1 -1
  195. package/references/official-docs/docs/subsystems/webhook.zh.md +1 -1
  196. package/references/official-docs/docs/subsystems/workflow.i18n.yaml +2 -2
  197. package/references/official-docs/docs/subsystems/workflow.md +1 -1
  198. package/references/official-docs/docs/subsystems/workflow.zh.md +1 -1
  199. package/references/official-docs/docs/subsystems/working-directory.i18n.yaml +13 -0
  200. package/references/official-docs/docs/subsystems/working-directory.md +64 -0
  201. package/references/official-docs/docs/subsystems/working-directory.zh.md +64 -0
  202. package/references/official-docs/docs/subsystems/workspace.md +2 -2
  203. package/references/official-docs/docs/subsystems/workspace.zh.md +2 -2
  204. package/references/official-docs/docs/subsystems/worktrees.i18n.yaml +13 -0
  205. package/references/official-docs/docs/subsystems/worktrees.md +76 -0
  206. package/references/official-docs/docs/subsystems/worktrees.zh.md +76 -0
  207. package/references/official-docs/docs/testing.i18n.yaml +2 -2
  208. package/references/official-docs/docs/testing.md +1 -1
  209. package/references/official-docs/docs/testing.zh.md +1 -1
  210. package/references/official-docs/docs/tool-catalog.i18n.yaml +57 -45
  211. package/references/official-docs/docs/tool-catalog.md +95 -41
  212. package/references/official-docs/docs/tool-catalog.zh.md +99 -45
  213. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.i18n.yaml +16 -0
  214. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.md +18 -0
  215. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.zh.md +18 -0
  216. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.i18n.yaml +16 -0
  217. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.md +17 -0
  218. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.zh.md +17 -0
  219. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.i18n.yaml +16 -0
  220. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.md +18 -0
  221. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.zh.md +18 -0
  222. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.i18n.yaml +16 -0
  223. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.md +28 -0
  224. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.zh.md +28 -0
  225. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.i18n.yaml +16 -0
  226. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.md +20 -0
  227. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.zh.md +20 -0
  228. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.i18n.yaml +16 -0
  229. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.md +17 -0
  230. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.zh.md +17 -0
  231. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.i18n.yaml +16 -0
  232. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.md +31 -0
  233. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.zh.md +31 -0
  234. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.i18n.yaml +16 -0
  235. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.md +20 -0
  236. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.zh.md +20 -0
  237. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.i18n.yaml +16 -0
  238. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.md +20 -0
  239. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.zh.md +20 -0
  240. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.i18n.yaml +16 -0
  241. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.md +18 -0
  242. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.zh.md +18 -0
  243. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.i18n.yaml +16 -0
  244. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.md +21 -0
  245. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.zh.md +21 -0
  246. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.i18n.yaml +16 -0
  247. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.md +18 -0
  248. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.zh.md +18 -0
  249. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.i18n.yaml +16 -0
  250. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.md +20 -0
  251. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.zh.md +20 -0
  252. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.i18n.yaml +16 -0
  253. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.md +19 -0
  254. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.zh.md +19 -0
  255. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.i18n.yaml +16 -0
  256. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.md +59 -0
  257. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.zh.md +59 -0
  258. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.i18n.yaml +16 -0
  259. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.md +21 -0
  260. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.zh.md +21 -0
  261. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.i18n.yaml +16 -0
  262. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.md +18 -0
  263. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.zh.md +18 -0
  264. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.i18n.yaml +16 -0
  265. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.md +21 -0
  266. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.zh.md +21 -0
  267. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.i18n.yaml +16 -0
  268. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.md +36 -0
  269. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.zh.md +36 -0
  270. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.i18n.yaml +16 -0
  271. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.md +25 -0
  272. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.zh.md +25 -0
  273. package/references/official-docs/docs/user/guide/github-review.i18n.yaml +4 -4
  274. package/references/official-docs/docs/user/guide/github-review.md +7 -10
  275. package/references/official-docs/docs/user/guide/github-review.zh.md +7 -10
  276. package/references/official-docs/docs/user/guide/public-deployments.i18n.yaml +8 -8
  277. package/references/official-docs/docs/user/guide/public-deployments.md +9 -5
  278. package/references/official-docs/docs/user/guide/public-deployments.zh.md +9 -5
  279. package/references/official-docs/packages/README.md +4 -6
  280. package/references/official-docs/website-docs.ts +1 -0
  281. package/references/official-plugin-dev-skill.md +2 -2
  282. package/references/sources.md +2 -1
  283. package/scripts/archive-discussions.ps1 +162 -162
  284. package/scripts/build-llms-full.mjs +8 -0
  285. package/scripts/check-docs-drift.ps1 +55 -55
  286. package/scripts/check-ps1-bom.mjs +68 -0
  287. package/scripts/download-community-articles.ps1 +188 -188
  288. package/scripts/download-community-repos.ps1 +232 -232
  289. package/scripts/download-sources.ps1 +195 -195
  290. package/scripts/gen-topic-snapshot.ps1 +91 -91
  291. package/scripts/install-skill.ps1 +63 -63
  292. package/scripts/sync-official-docs.ps1 +138 -138
  293. package/scripts/verify-artifacts.mjs +26 -0
  294. package/scripts/verify-kit.ps1 +197 -187
  295. package/templates/js/README-es.md +1 -1
  296. package/templates/js/README-hi.md +1 -1
  297. package/templates/js/README-pt.md +1 -1
  298. package/templates/js/README-zh.md +1 -1
  299. package/templates/js/README.md +1 -1
  300. package/templates/ts/README-es.md +1 -1
  301. package/templates/ts/README-hi.md +1 -1
  302. package/templates/ts/README-pt.md +1 -1
  303. package/templates/ts/README-zh.md +1 -1
  304. package/templates/ts/README.md +1 -1
package/README-es.md CHANGED
@@ -56,7 +56,7 @@ content counts as stated in the README (What you get)
56
56
 
57
57
  | Surface | Status |
58
58
  |---|---|
59
- | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (`5badb15009`, el tag más nuevo de master, 2026-10-03); npm `latest` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.1`. Re-verificado el 2026-10-06 contra ese checkout (cadena de gates + smoke de instalación de perfil). La base de conocimiento, el espejo de docs oficiales y [guide/migration-0.2.md](guide/migration-0.2.md) usan esta línea base. |
59
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.2` (`d743267388641bc76f17c45ce8b4c231aed1d32c`, el tag más nuevo de master **y** HEAD, 2026-10-09); npm `latest` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.2`. Re-verificado el 2026-10-06 contra ese checkout (cadena de gates + smoke de instalación de perfil). La base de conocimiento, el espejo de docs oficiales y [guide/migration-0.2.md](guide/migration-0.2.md) usan esta línea base. |
60
60
  | Node | `^22.19.0 || >=24.0.0` (runtime de DeepSeek Harness) |
61
61
  | Platforms | Todas (bundle ESM plano; sin código nativo, sin red) |
62
62
  | Model | Cualquiera (sin interacción con el modelo) |
@@ -246,7 +246,7 @@ pwsh -File scripts/verify-kit.ps1 # rutas críticas + escaneo de enlaces (+ de
246
246
 
247
247
  ## PerryLink DSH Plugin Family
248
248
 
249
- Este proyecto es uno de los **33 plugins activamente mantenidos** de DeepSeek Harness de [PerryLink](https://github.com/PerryLink): el registro tiene **42**, de los cuales **6** están congelados y **3** retirados; cada uno conserva su fila abajo, con el motivo en la columna Estado. Si este te ayuda, probablemente los demás también:
249
+ Este proyecto es uno de los **34 plugins activamente mantenidos** de DeepSeek Harness de [PerryLink](https://github.com/PerryLink): el registro tiene **42**, de los cuales **5** están congelados y **3** retirados; cada uno conserva su fila abajo, con el motivo en la columna Estado. Si este te ayuda, probablemente los demás también:
250
250
 
251
251
  | Plugin | En una línea | Estado |
252
252
  |---|---|---|
@@ -274,7 +274,7 @@ Este proyecto es uno de los **33 plugins activamente mantenidos** de DeepSeek Ha
274
274
  | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
275
275
  | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
276
276
  | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
277
- | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | 🧊 CONGELADO — ver el README del repositorio |
277
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
278
278
  | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
279
279
  | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
280
280
  | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
package/README-hi.md CHANGED
@@ -56,7 +56,7 @@ content counts as stated in the README (What you get)
56
56
 
57
57
  | Surface | Status |
58
58
  |---|---|
59
- | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (`5badb15009`, master का सबसे नया tag, 2026-10-03); npm `latest` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.1`। 2026-10-06 को उसी checkout के विरुद्ध पुनः सत्यापित (gate chain + profile install smoke)। नॉलेज बेस, आधिकारिक-docs मिरर और [guide/migration-0.2.md](guide/migration-0.2.md) इसी बेसलाइन पर हैं। |
59
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.2` (`d743267388641bc76f17c45ce8b4c231aed1d32c`, master का सबसे नया tag **और** HEAD, 2026-10-09); npm `latest` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.2`। 2026-10-06 को उसी checkout के विरुद्ध पुनः सत्यापित (gate chain + profile install smoke)। नॉलेज बेस, आधिकारिक-docs मिरर और [guide/migration-0.2.md](guide/migration-0.2.md) इसी बेसलाइन पर हैं। |
60
60
  | Node | `^22.19.0 || >=24.0.0` (DeepSeek Harness रनटाइम) |
61
61
  | Platforms | सभी (सादा ESM बंडल; कोई नेटिव कोड नहीं, कोई नेटवर्क नहीं) |
62
62
  | Model | कोई भी (कोई मॉडल अंतःक्रिया नहीं) |
@@ -246,7 +246,7 @@ pwsh -File scripts/verify-kit.ps1 # महत्वपूर्ण पथ +
246
246
 
247
247
  ## PerryLink DSH Plugin Family
248
248
 
249
- यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) के DeepSeek Harness प्लगइन परिवार का हिस्सा है — **33 सक्रिय रूप से अनुरक्षित**, कुल सूची **42** है जिसमें **6 फ़्रोज़न** और **3 सेवानिवृत्त** हैं; हर एक की पंक्ति नीचे बनी रहती है, कारण “स्थिति” कॉलम में है। अगर यह उपयोगी लगे, तो अन्य भी मददगार होंगे:
249
+ यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) के DeepSeek Harness प्लगइन परिवार का हिस्सा है — **34 सक्रिय रूप से अनुरक्षित**, कुल सूची **42** है जिसमें **5 फ़्रोज़न** और **3 सेवानिवृत्त** हैं; हर एक की पंक्ति नीचे बनी रहती है, कारण “स्थिति” कॉलम में है। अगर यह उपयोगी लगे, तो अन्य भी मददगार होंगे:
250
250
 
251
251
  | Plugin | एक पंक्ति में | स्थिति |
252
252
  |---|---|---|
@@ -274,7 +274,7 @@ pwsh -File scripts/verify-kit.ps1 # महत्वपूर्ण पथ +
274
274
  | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
275
275
  | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
276
276
  | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
277
- | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | 🧊 फ़्रोज़न — रिपॉज़िटरी README देखें |
277
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
278
278
  | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
279
279
  | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
280
280
  | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
package/README-pt.md CHANGED
@@ -56,7 +56,7 @@ content counts as stated in the README (What you get)
56
56
 
57
57
  | Surface | Status |
58
58
  |---|---|
59
- | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (`5badb15009`, o tag mais novo do master, 2026-10-03); npm `latest` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.1`. Re-verificado em 2026-10-06 contra esse checkout (cadeia de gates + smoke de instalação de perfil). A base de conhecimento, o espelho de docs oficiais e [guide/migration-0.2.md](guide/migration-0.2.md) usam essa linha de base. |
59
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.2` (`d743267388641bc76f17c45ce8b4c231aed1d32c`, a tag mais nova do master **e** HEAD, 2026-10-09); npm `latest` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.2`. Re-verificado em 2026-10-06 contra esse checkout (cadeia de gates + smoke de instalação de perfil). A base de conhecimento, o espelho de docs oficiais e [guide/migration-0.2.md](guide/migration-0.2.md) usam essa linha de base. |
60
60
  | Node | `^22.19.0 || >=24.0.0` (runtime do DeepSeek Harness) |
61
61
  | Platforms | Todas (bundle ESM puro; sem código nativo, sem rede) |
62
62
  | Model | Qualquer (sem interação com o modelo) |
@@ -246,7 +246,7 @@ pwsh -File scripts/verify-kit.ps1 # caminhos críticos + varredura de links (+
246
246
 
247
247
  ## PerryLink DSH Plugin Family
248
248
 
249
- Este projeto é um dos **33 plugins ativamente mantidos** do DeepSeek Harness da [PerryLink](https://github.com/PerryLink): o registro tem **42**, dos quais **6** estão congelados e **3** aposentados; cada um mantém sua linha abaixo, com o motivo na coluna Status. Se este ajudou você, provavelmente os outros também ajudarão:
249
+ Este projeto é um dos **34 plugins ativamente mantidos** do DeepSeek Harness da [PerryLink](https://github.com/PerryLink): o registro tem **42**, dos quais **5** estão congelados e **3** aposentados; cada um mantém sua linha abaixo, com o motivo na coluna Status. Se este ajudou você, provavelmente os outros também ajudarão:
250
250
 
251
251
  | Plugin | Em uma linha | Status |
252
252
  |---|---|---|
@@ -274,7 +274,7 @@ Este projeto é um dos **33 plugins ativamente mantidos** do DeepSeek Harness da
274
274
  | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
275
275
  | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
276
276
  | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
277
- | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | 🧊 CONGELADO — ver o README do repositório |
277
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
278
278
  | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
279
279
  | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
280
280
  | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
package/README-zh.md CHANGED
@@ -58,7 +58,7 @@ content counts as stated in the README (What you get)
58
58
 
59
59
  | Surface | Status |
60
60
  |---|---|
61
- | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1`(`5badb15009`,master 最新 tag,2026-10-03);npm `latest`=`0.2.0-rc.2`、`alpha`=`0.2.1-alpha.1`。已于 2026-10-06 对照该 checkout 重核(完整门禁链 + profile 安装冒烟)。知识库、官方文档副本与 [guide/migration-0.2.md](guide/migration-0.2.md) 均以该基线为准。 |
61
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.2`(`d743267388641bc76f17c45ce8b4c231aed1d32c`,master 最新 tag **且** = master HEAD,2026-10-09);npm `latest`=`next`=`0.2.0-rc.2`、`alpha`=`0.2.1-alpha.2`。**不存在稳定版**——全部 31 个 npm 版本与 26 个 GitHub Release 都是 prerelease。官方文档副本与 [guide/migration-0.2.md](guide/migration-0.2.md) 钉在上一版 `dsh-v0.2.1-alpha.1`(`5badb15009`,2026-10-03);此后新增的 20 份破坏性变更指南收录于 [guide/version-matrix.md](guide/version-matrix.md) §3。 |
62
62
  | Node | `^22.19.0 || >=24.0.0`(DeepSeek Harness 运行时) |
63
63
  | Platforms | 全部(纯 ESM bundle;无原生代码、无网络) |
64
64
  | Model | 任意(无模型交互) |
@@ -68,6 +68,7 @@ content counts as stated in the README (What you get)
68
68
  `dsh-plugin-guide` 是 DSH 插件开发知识库加 CLI 工具链,打包为一个可安装 bundle。知识库注册为 `dsh-plugin-guide` agent 技能(在每个会话目录可见,按需加载工作流步骤、官方文档与社区深读);`dsh-plugin-dev` CLI 在其之上提供三个机械层。
69
69
 
70
70
  - **插件契约与红线** —— effect/disposer、waterfall `next()`、模型可见 ⟺ 已记录、Schemastery 配置。
71
+ - **版本适配** —— [guide/version-matrix.md](guide/version-matrix.md):五个"最新"的区别、子包 `latest` 冻结陷阱、四个破坏性变更断层、peer 区间怎么选、会话格式 V0→V4 谱系,以及 `0.2.1-alpha.2` 落的 19 条破坏性变更。
71
72
  - **官方文档档案** —— 官方仓库文档(英 + 中)逐字副本,在最近核验快照处与上游逐字节一致。
72
73
  - **Cordis 入门** —— 五个概念与机制时间线(repository-plugin 0809 引入、0811 移除;两条安装通道)。
73
74
  - **20+ 个实战踩坑** —— 附根因 + 修法(cordis 双副本、tsconfig 三件套、多帧 zstd 会话、Windows junction、过期 npm `latest`…)。
@@ -81,6 +82,7 @@ content counts as stated in the README (What you get)
81
82
  | `SKILL.md` | `dsh-plugin-guide` agent 技能:红线 + 按任务类型的开发路径 |
82
83
  | `package.json` · `cordis.patch.yml` · `index.js` | 可安装 DSH bundle:`dsh.bundle.patch` 清单 + 注册技能的入口 |
83
84
  | `guide/plugin-dev-guide.md` | 完整开发指南(10 章) |
85
+ | `guide/version-matrix.md` | **版本适配矩阵**:五个"最新"的区别、子包 `latest` 冻结、破坏性变更断层、peer 区间选择、会话格式谱系、`0.2.1-alpha.2` 的 19 条变更 |
84
86
  | `guide/quick-reference.md` | 一页速查表(5 语言) |
85
87
  | `guide/links.md` | 精选 URL 索引:官方开发文档(站点 ↔ 本地副本)+ 社区文档链接 |
86
88
  | `guide/when-to-retire-a-plugin.md` | 插件退役与冻结:一次组合审计的判据与实测数据(中英双语) |
@@ -248,7 +250,7 @@ pwsh -File scripts/verify-kit.ps1 # 关键路径 + 链接扫描(加 -Checkou
248
250
 
249
251
  ## PerryLink DSH Plugin Family
250
252
 
251
- 本项目是 [PerryLink](https://github.com/PerryLink) 维护的 DeepSeek Harness 插件家族成员:**33 个活跃维护**,名册共 **42** 个,其中 **6 个已冻结**、**3 个已退役**——每一个都在下表保留自己的行,原因见「状态」列。如果它能帮到你,其他的也会:
253
+ 本项目是 [PerryLink](https://github.com/PerryLink) 维护的 DeepSeek Harness 插件家族成员:**34 个活跃维护**,名册共 **42** 个,其中 **5 个已冻结**、**3 个已退役**——每一个都在下表保留自己的行,原因见「状态」列。如果它能帮到你,其他的也会:
252
254
 
253
255
  | Plugin | 一句话 | 状态 |
254
256
  |---|---|---|
@@ -276,7 +278,7 @@ pwsh -File scripts/verify-kit.ps1 # 关键路径 + 链接扫描(加 -Checkou
276
278
  | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
277
279
  | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
278
280
  | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
279
- | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | 🧊 已冻结 — 见仓库 README |
281
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
280
282
  | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
281
283
  | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
282
284
  | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
package/README.md CHANGED
@@ -60,7 +60,7 @@ content counts as stated in the README (What you get)
60
60
 
61
61
  | Surface | Status |
62
62
  |---|---|
63
- | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (`5badb15009`, the newest master tag, 2026-10-03); npm `latest` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.1`. Re-verified 2026-10-06 against that checkout (gate chain + profile install smoke). The knowledge base, the official-docs mirror and `guide/migration-0.2.md` all carry this baseline. |
63
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.2` (`d743267388641bc76f17c45ce8b4c231aed1d32c`, the newest master tag **and** master HEAD, 2026-10-09); npm `latest` = `next` = `0.2.0-rc.2`, `alpha` = `0.2.1-alpha.2`. **There is no stable line** — all 31 npm versions and all 26 GitHub Releases are prereleases. The official-docs mirror is pinned to that same commit (429 md pages, re-synced 2026-10-13; see [references/official-docs/SNAPSHOT.md](references/official-docs/SNAPSHOT.md)). `guide/migration-0.2.md` covers `0.1.6-alpha.2` → `0.2.1-alpha.1` in §0–§12 and `0.2.1-alpha.1` → `0.2.1-alpha.2` as 19 citable seams in §13; the 20 breaking-change guides added since the previous baseline (19 under `v0.2.1-alpha.1` plus one backfilled into `v0.2.0-rc.2`) are all in the mirror. |
64
64
  | Node | `^22.19.0 || >=24.0.0` (DeepSeek Harness runtime) |
65
65
  | Platforms | All (plain ESM bundle; no native code, no network) |
66
66
  | Model | Any (no model interaction) |
@@ -71,6 +71,7 @@ content counts as stated in the README (What you get)
71
71
 
72
72
  - **Plugin contract & hard rules** — effects/disposers, waterfall `next()`, host-owned session events, `MessageSourceMap`, the weakest-mechanism ordering, Schemastery config, UI and performance rules.
73
73
  - **Official docs archive** — a verbatim copy of the official repo docs (EN + ZH), byte-identical to upstream at the last verified snapshot, including the pages that never reach the documentation site.
74
+ - **Version adaptivity** — [guide/version-matrix.md](guide/version-matrix.md): the five different "latest" values, the frozen sub-package `latest` tags, the four breaking-change seams, the canonical peer range and how to pick one, the session-format lineage V0→V4, and the 19 breaking changes that landed in `0.2.1-alpha.2`.
74
75
  - **Migration guide** — [guide/migration-0.2.md](guide/migration-0.2.md): every breaking change from `0.1.6-alpha.2` to `0.2.1-alpha.1` (session format V4, the settings rebuild, invariant removal, `readBytes`, new slots, retired `plugin` message source), each with its official source and a 12-item checklist.
75
76
  - **Official in-repo skill, distilled** — [references/official-plugin-dev-skill.md](references/official-plugin-dev-skill.md): the harness's own `cordis-plugin-development` workflow, prohibitions, display-metadata checklist, practices, and UI/performance rules.
76
77
  - **Cordis primer** — the five concepts and the mechanism timeline (repository-plugin introduced 0809, removed 0811; the two install channels).
@@ -86,6 +87,7 @@ content counts as stated in the README (What you get)
86
87
  | `SKILL.md` | The `dsh-plugin-guide` agent skill: hard rules + task-based development paths |
87
88
  | `package.json` · `cordis.patch.yml` · `index.js` · `locale/` · `icon.svg` | The installable DSH bundle: `dsh.bundle.patch` manifest, entry point that registers the skill, and the display metadata Plugin Manager reads |
88
89
  | `guide/plugin-dev-guide.md` | The complete development guide (10 chapters) |
90
+ | `guide/version-matrix.md` | **Version adaptivity matrix**: the five "latest" values, frozen sub-package `latest` tags, breaking-change seams, peer-range selection, session-format lineage, and the 19 changes in `0.2.1-alpha.2` |
89
91
  | `guide/migration-0.2.md` | Breaking-change migration guide for the 0.2 generation |
90
92
  | `guide/unfixed-issues.md` | Source-verified bug index + fixed-on-master list + design-vs-bug table |
91
93
  | `guide/quick-reference.md` | One-page cheat sheet (5 languages) |
@@ -257,7 +259,7 @@ pwsh -File scripts/verify-kit.ps1 # critical paths + link scan (+ docs drift w
257
259
 
258
260
  ## PerryLink DSH Plugin Family
259
261
 
260
- This project is one of the **33 actively maintained** DeepSeek Harness plugins from [PerryLink](https://github.com/PerryLink) — the roster is **42**, of which **6** are frozen and **3** retired; every one keeps its row below, with the reason in the Status column. If this one helps you, the others likely will too:
262
+ This project is one of the **34 actively maintained** DeepSeek Harness plugins from [PerryLink](https://github.com/PerryLink) — the roster is **42**, of which **5** are frozen and **3** retired; every one keeps its row below, with the reason in the Status column. If this one helps you, the others likely will too:
261
263
 
262
264
  | Plugin | One-liner | Status |
263
265
  |---|---|---|
@@ -281,7 +283,7 @@ This project is one of the **33 actively maintained** DeepSeek Harness plugins f
281
283
  | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
282
284
  | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
283
285
  | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
284
- | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | 🧊 FROZEN — see the repo README |
286
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
285
287
  | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
286
288
  | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
287
289
  | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
package/SKILL.md CHANGED
@@ -19,9 +19,17 @@ description: Use when developing, reviewing, packaging, debugging, or answering
19
19
 
20
20
  ## 开发前置(第一步必做)
21
21
 
22
- 0. **先认版本**:`dsh --version`。`0.1.7-alpha.1`(2026-09-22)起包含本世代全部破坏性变更(会话格式 V4、settings 重写、`readBytes`、Messages-only 适配器);npm `latest`=`0.2.0-rc.2`、`alpha`=`0.2.1-alpha.1`,master 最新 tag 是 `dsh-v0.2.1-alpha.1`——**这三个"最新"不是同一个东西**。目标宿主不是最新线时,**先读 `guide/migration-0.2.md`** 按条目对照。
22
+ 0. **先认版本**:跑 `dsh --version`,然后按下表决定读什么。**不要跳过这一步**——本库 17 篇文档里对当前宿主不适用的部分不会自己标注。
23
+ | 你的 `dsh --version` | 含义 | 读什么 |
24
+ |---|---|---|
25
+ | `< 0.1.7-alpha.1` | 旧基线 | 本世代破坏性变更**全部适用** → `guide/migration-0.2.md` §0–§12 逐条改 |
26
+ | `0.1.7-alpha.1` – `0.2.1-alpha.1` | 中间线 | 会话格式 V4 已生效;§13 的 19 条**不适用** |
27
+ | `0.2.1-alpha.2` 或更新 | 最新线 | §13 的 19 条**适用** → `guide/version-matrix.md` §3 |
28
+ | **npm `latest`(= `0.2.0-rc.2`)** | **默认安装拿到的就是这一版** | ⚠️ 它**早于** master 一版:§13 不适用,但 `version-matrix.md` §1.1 的"不存在稳定版"警告适用 |
29
+ **四个"最新"不是同一个东西**:npm `latest`=`next`=`0.2.0-rc.2`、npm `alpha`=`0.2.1-alpha.2`、master 最新 tag = `dsh-v0.2.1-alpha.2`。**不存在稳定版**(全部 31 个 npm 版本都是 prerelease)。完整谱系、子包 `latest` 冻结陷阱与 peer 区间选择见 `guide/version-matrix.md`。
23
30
  1. 若未读过 Cordis 概念:读 `references/official-docs/docs/cordis-primer.md`(5 个概念,5 分钟);需要动手跟练时跑 `references/official-docs/docs/cordis-tutorial/` 01-07(无 API key 可跑)。
24
31
  2. 打开 `guide/quick-reference.md`(契约速查)+ `guide/plugin-dev-guide.md`(完整路径)。官方/社区文档 URL 对照见 `guide/links.md`。排查官方运行时行为/未修复 bug 时查 `guide/unfixed-issues.md`(master 基线源码核实的问题清单 + 已修复提交号 + 设计行为对照 + 本世代新核实的 T1–T11)。决定一个插件**该不该继续维护**(官方已进内核 / 第三方采用度显著更高)时查 `guide/when-to-retire-a-plugin.md`(判据 + 实测倍数表);判断某个能力面谁领先时查 `guide/choosing-a-plugin.md`。
32
+ 2b. **要判断"该改哪一行 / 该找哪个工具"时**,读 `guide/family-toolchain.md`(家族工具链路由:问题→所有者→可引用产物;`dsh-plugin-doctor` 33 项检查全表与裁定语义;本库 16 项检查与 doctor 的交叉对照)。发布流水线(多插件组合的持续可安装/可发布/可升级)见 `guide/release-engineering.md`。
25
33
  3. 确认目标扩展点:读 `references/official-docs/docs/architecture.md` 的「Where new behavior goes」表与 `references/official-docs/docs/cookbook/extension-cookbook.md` 的 feature→mechanism 表——**新行为必须挂到已文档化扩展点,不得改 agent-loop**;**用最弱的够用机制**(restrict < guard < waterfall 改写 < system-prompt/assemble)。
26
34
  4. 要写 UI / 要让 agent 自己装插件时,读 `references/official-plugin-dev-skill.md`(官方自带技能的要点与硬性规定)。
27
35
 
@@ -41,7 +49,7 @@ description: Use when developing, reviewing, packaging, debugging, or answering
41
49
  - 可替换能力按三层接缝设计:Service Definition / Provider / Consumer;不提前拆。
42
50
  - 打包:bundle 清单 `"dsh":{"bundle":{"patch":"..."}}`(`patch` **可为有序数组**,每个文件的相对路径按各自目录解析);覆盖按 `id` 整行替换 config(上游删行后 override **静默失效**,升级后跑 `--dump-config` 查 `patch: entry not found`);`!!js`(双感叹号);git 安装需要 `prepare` 脚本与用户侧 `allowBuilds`,发布 npm/tarball 免构建许可。
43
51
  - **交付必须补展示元数据**:`locale/*.json` 的 `meta.title`/`meta.description` + 导出的 `./icon`(≤256 KiB、realpath 后必须在包内);子路径插件**不读** `package.json`。
44
- - **共享实例的 dsh 包只放 peerDependencies + devDependencies**,绝不放 dependencies(profile 内副本会静默遮蔽运行时版本,核心服务注册失败)。DSH **不校验** peer 范围,兼容性靠运行时探测。
52
+ - **共享实例的 dsh 包只放 peerDependencies + devDependencies**,绝不放 dependencies(profile 内副本会静默遮蔽运行时版本,核心服务注册失败)。⚠️ **peer 范围会被安装期强制**(早期版本写成"DSH 不校验",**已更正**):`dsh plugin add` 拿运行时版本比对声明的 `@deepseek-ai/dsh-*` 范围,不匹配即**拒绝安装**;`engines.dsh` 才是纯声明、零强制。范围只能表达"能不能装",**表达不了某个 API 在不在**——仍要配运行时探测。区间选择见 `guide/version-matrix.md` §4。
45
53
  - **UI 插件**:只渲染 slot 里的 React 组件(禁止 iframe 托管页面);样式只用 `--dsw-alias-*` 主题 token;不 `require` 任何 Harness Client 包(抛错组件会把整个 slot 搞白);`dsh.client.inject` **必须是静态数组**;不在组件外写 DOM、不往 `document.body` 追加。
46
54
  - **性能**:per-session 状态放 `ctx.sessionProjections`(纯同步 apply、忽略即同引用、纯 JSON + `stateVersion`);等持久事件(`turn/end`/`assistant/message`/`tool/result`),实时 token 读 `agent/assistant-stream`;**不轮询 `agent/status`**。
47
55
  - **禁止**:在会话运行期间改 profile 的 `cordis.patch.yml`(HMR 会重载,实测丢光 preset 工具、杀掉在途 turn、最坏永久废掉 `sessionController`);手写 profile 的 `package.json`;在 profile 目录里跑 pnpm。
@@ -54,10 +62,10 @@ description: Use when developing, reviewing, packaging, debugging, or answering
54
62
  - **新服务/能力**:`docs/user/develop/framework/service.md` + `docs/user/develop/practice/`(三层拆分完整代码)。
55
63
  - **拦截/策略/hook**:`docs/cookbook/extension-cookbook.md`(permission-gate 范例)+ `docs/event-producer-consumer.md`(全事件矩阵)。
56
64
  - **新 LLM 提供商**:`docs/user/develop/practice/llm-adapter.md`(StreamChunk 协议)。
57
- - **UI 插件(Web)**:`references/official-plugin-dev-skill.md` §3.2 + `docs/subsystems/slots.md`、`sidebar-right.md`、`client-modules.md`、`web-client.md`、`ui-radius.md`;Chat 行业务节点用 `ctx.uiConversation.events.register()` + `conversation.chat.node` slot。
65
+ - **UI 插件(Web)**:`references/official-plugin-dev-skill.md` §3.2 + `docs/subsystems/slots.md`、`sidebar-right.md`、`client-modules.md`、`web-client.md`、**`docs/ui-radius.md`**(注意 `ui-radius` 在 `docs/` 顶层,**不在** `docs/subsystems/` 下);Chat 行业务节点用 `ctx.uiConversation.events.register()` + `conversation.chat.node` slot。
58
66
  - **插件配置表单**:`docs/subsystems/settings.md`(已改名 "Plugin Configuration Forms")+ `docs/cookbook/adding-a-settings-card.md`(已重写)。
59
67
  - **打包/发布**:`docs/user/develop/basic/publish.md`(bundle/profile、层顺序、多 patch 数组、peer 解析、git 安装坑)。
60
- - **升级/迁移**:`guide/migration-0.2.md`(本库综述)→ `docs/upgrade-guide/**`(官方逐版本迁移指南)+ `docs/persistence-changes/**`(持久化类型变更记录)+ `docs/session-format-status.md`(会话格式版本权威)。
68
+ - **升级/迁移**:`guide/version-matrix.md`(**版本适配矩阵:先读这个**——五个"最新"、子包 `latest` 冻结、破坏性变更断层、peer 区间选择、会话格式 V0→V4)→ `guide/migration-0.2.md`(本库综述,0.1.6→0.2.1-alpha.1)→ `docs/upgrade-guide/**`(官方逐版本迁移指南)+ `docs/persistence-changes/**`(持久化类型变更记录)+ `docs/session-format-status.md`(会话格式版本权威)。⚠️ **目标宿主是 `0.2.1-alpha.2` 或更新时**:`version-matrix.md` §3 列了该版落的 **19 条破坏性变更**(`webRuntime`→`webStartup`、`mode: both` 被拒、`backgroundMode`/`run_in_background` 移除、`{{cwd}}` 移除、`BundleInfo` 新增必填字段、`dsh plugin --profile` 位置强制等),`migration-0.2.md` **尚未并入**。
61
69
  - **查服务/事件精确签名**:**优先用会话内 inspection**(`cordis_inspect_list` / `cordis_inspect_query`:Service / Event / Config / Tool / Slots / Theme),其次 `docs/subsystems/*.md` 生成式 Cordis API 区 + `docs/cordis-api/*`;**不要自造第二份静态清单**。站点 URL ↔ 本地副本对照见 `guide/links.md`,社区链接完整清单见 `references/community-ecosystem.md`。
62
70
  - **官方自带插件开发技能(0.2 世代新增,先读)**:`references/official-plugin-dev-skill.md`(主流程 + 六份分面参考要点 + 模板定位);上游在 `packages/preset/agent-preset/skills/cordis-plugin-development/**`。它规定的官方路径是:工作区写 bundle → `plugin_manager` `install_bundle`(绝对目录)→ `cordis_inspect_query` 核对,**禁止**手写 profile 的 `package.json`/`cordis.patch.yml`、禁止在 profile 目录跑 pnpm。
63
71
  - **参考社区实现与实测坑**:`references/community-ecosystem.md`、`references/community-repo-deep-dive.md`(首批 15 个开发仓库深读)、`downloads/community-repos/`(**114 个仓库完整源码副本**,需先跑 `scripts/download-community-repos.ps1` 生成)。社区已确认的机制变化(repository-plugin 0811 移除、bundle vs 纯 cordis 双通道)与实测坑清单在 `guide/plugin-dev-guide.md` §7,源码级问题索引在 `guide/unfixed-issues.md`(含本世代新核实的 T1–T11)。官方 Discussions 全量归档(**2026-10-06 刷新**,含 #1629 官方插件脚手架 RFC)与 npm 全家桶元数据分别在 `downloads/github/harness/discussions/` 与 `downloads/npm/`;中英文社区文章 HTML 快照在 `downloads/web/community-articles/`。
@@ -81,11 +89,16 @@ description: Use when developing, reviewing, packaging, debugging, or answering
81
89
 
82
90
  ## CLI 工具链(dsh-plugin-dev)
83
91
 
84
- 本仓库随 bundle 附带零依赖 CLI `dsh-plugin-dev`,把机械检查自动化(知识库仍是认知层,CLI 是机械层):
92
+ 本仓库随 bundle 附带零依赖 CLI `dsh-plugin-dev`,把机械检查自动化(知识库仍是认知层,CLI 是机械层)。
85
93
 
86
- - `dsh-plugin-dev new <name>`:参数化脚手架,生成 TS 或 JS 插件仓库骨架(`src/index.ts` 契约模板、Schemastery Config、tests、tsdown/vitest、注释齐全的 `cordis.patch.yml`、五语 README),模板与 `references/official-docs` 同步更新。
87
- - `dsh-plugin-dev check [--json] [--strict]`:静态检查(`cordis.patch.yml` 合法性、`package.json` 元数据(`dsh.bundle.patch` 指向/peer 依赖/engines/files 白名单)、五语 README 一致性、工程红线模式),输出 CI 可消费的结构化 JSON;每个检查项在输出里引用本知识库对应章节(skill 联动),agent 可继续人工审计。
88
- - `dsh-plugin-dev verify`:`pnpm pack` 后装入干净临时 `DSH_HOME` profile 做安装+启动+卸载冒烟(对齐官方 verify:self-contained);失败给出日志尾部与建议。
94
+ > ⚠️ **调用方式**:`dsh-plugin-dev` **通常不在 PATH 上**(bundle 安装只登记技能,不安装二进制)。
95
+ > 用本 SKILL.md 所在目录下的入口调用:`node "<resourceBase>/bin/dsh-plugin-dev.js" <子命令>`。
96
+ > bundle 安装的包已带 `dist/`;从源码副本用则先跑一次 `pnpm run build`。
97
+ > 只有全局 `npm i -g dsh-plugin-guide` 之后才可以直接敲 `dsh-plugin-dev`。
98
+
99
+ - `new <name>`:参数化脚手架,生成 TS 或 JS 插件仓库骨架(`src/index.ts` 契约模板、Schemastery Config、tests、tsdown/vitest、注释齐全的 `cordis.patch.yml`、五语 README),模板与 `references/official-docs` 同步更新。标志:`--lang <ts|js>`、`--dir <path>`、`--force`、`--git`。
100
+ - `check [--json] [--strict] [--cwd <dir>]`:静态检查(`cordis.patch.yml` 合法性、`package.json` 元数据(`dsh.bundle.patch` 指向/peer 依赖/engines/files 白名单)、五语 README 一致性、工程红线模式),输出 CI 可消费的结构化 JSON;每个检查项在输出里引用本知识库对应章节(skill 联动),agent 可继续人工审计。**这 16 项是同族 `dsh-plugin-doctor` 33 项的子集**(逐项对照见 `guide/family-toolchain.md` §3);发布前建议两个都跑。
101
+ - `verify [--cwd <dir>] [--base <spec>] [--headless <spec>] [--profile <name>]`:`pnpm pack` 后装入干净临时 `DSH_HOME` profile 做安装+启动+卸载冒烟(对齐官方 verify:self-contained);失败给出日志尾部与建议。
89
102
 
90
103
  三个子命令均可逆/幂等;网络/子进程尊重超时与 AbortSignal;只清理自己 mkdtemp 的目录。CLI 零运行时依赖,构建产物经 tsdown 打包为单文件 `dist/dsh-plugin-dev.js`。
91
104
 
@@ -9,14 +9,31 @@ const LONG_ALIASES = {
9
9
  help: "help",
10
10
  version: "version"
11
11
  };
12
+ /** Raised for a malformed or unrecognised argument. */
13
+ var UsageError = class extends Error {};
12
14
  /**
13
15
  * Parse an argv slice (without the node/script prefix) into positionals and flags.
16
+ *
17
+ * `allowed` is the set of long flag names the caller accepts (aliases included).
18
+ * Passing it turns an unrecognised flag into a `UsageError` instead of a silently
19
+ * ignored one: `dsh-plugin-dev check --stirct` used to parse the typo, check
20
+ * nothing extra, and exit 0 — a gate that can be disabled by a spelling mistake
21
+ * is worse than no gate, because CI stays green and everyone believes it ran.
22
+ *
14
23
  * @param argv - process.argv.slice(2) style input.
24
+ * @param allowed - optional allowlist of accepted long flag names.
15
25
  * @returns the parsed structure.
16
26
  */
17
- function parseArgs(argv) {
27
+ function parseArgs(argv, allowed) {
18
28
  const positionals = [];
19
29
  const flags = {};
30
+ const permitted = allowed ? new Set(allowed) : void 0;
31
+ const assertAllowed = (key) => {
32
+ if (permitted && !permitted.has(key)) {
33
+ const known = [...permitted].sort().join(", ");
34
+ throw new UsageError(`unknown option "--${key}" (accepted: ${known})`);
35
+ }
36
+ };
20
37
  for (let i = 0; i < argv.length; i++) {
21
38
  const arg = argv[i];
22
39
  if (arg === "--") {
@@ -27,10 +44,13 @@ function parseArgs(argv) {
27
44
  const body = arg.slice(2);
28
45
  const eq = body.indexOf("=");
29
46
  if (eq >= 0) {
30
- setFlag(flags, body.slice(0, eq), body.slice(eq + 1));
47
+ const key = body.slice(0, eq);
48
+ assertAllowed(LONG_ALIASES[key] ?? key);
49
+ setFlag(flags, key, body.slice(eq + 1));
31
50
  continue;
32
51
  }
33
52
  const key = body;
53
+ assertAllowed(LONG_ALIASES[key] ?? key);
34
54
  const next = argv[i + 1];
35
55
  if (next !== void 0 && !next.startsWith("-")) {
36
56
  setFlag(flags, key, next);
@@ -39,7 +59,10 @@ function parseArgs(argv) {
39
59
  continue;
40
60
  }
41
61
  if (arg.startsWith("-") && arg.length > 1) {
42
- for (const ch of arg.slice(1)) flags[ch] = true;
62
+ for (const ch of arg.slice(1)) {
63
+ assertAllowed(ch);
64
+ flags[ch] = true;
65
+ }
43
66
  continue;
44
67
  }
45
68
  positionals.push(arg);
@@ -146,10 +169,19 @@ function isDir(path) {
146
169
  * The 0.2 line is load-bearing: `dsh` enforces peer ranges at install time and
147
170
  * rejects any plugin whose declared range excludes the running runtime, so a
148
171
  * range that stops at 0.1.x makes every scaffolded plugin uninstallable on a
149
- * 0.2.x harness (`installation rejected: ... is incompatible with dsh
150
- * 0.2.1-alpha.1`).
172
+ * 0.2.x harness (`installation rejected: ... is incompatible with dsh <runtime>`).
151
173
  */
152
174
  const DSH_PEER_RANGE = ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0";
175
+ /**
176
+ * The DSH release this scaffold was last verified against, single-sourced here
177
+ * and substituted into template prose through the `{{dshBaseline}}` placeholder.
178
+ *
179
+ * Keep it in step with `guide/version-matrix.md` §1 and the root README
180
+ * compatibility table. It is deliberately a *prerelease*: DSH has no stable
181
+ * line (every published version and GitHub release carries `-alpha.N`/`-rc.N`),
182
+ * so a scaffold that claimed a stable baseline would be lying.
183
+ */
184
+ const DSH_BASELINE = "0.2.1-alpha.2";
153
185
  /** Resolve the templates root: env override first, then candidate walks. */
154
186
  function resolveTemplatesRoot() {
155
187
  const env = process.env.DSH_PLUGIN_DEV_TEMPLATES;
@@ -175,7 +207,7 @@ function walkFiles(dir, base = "") {
175
207
  }
176
208
  /** Substitute placeholders in template text. */
177
209
  function renderTemplate(text, context) {
178
- return text.replaceAll("{{pkgName}}", context.pkgName).replaceAll("{{name}}", context.name).replaceAll("{{version}}", context.version).replaceAll("{{year}}", context.year).replaceAll("{{dshPeerRange}}", DSH_PEER_RANGE);
210
+ return text.replaceAll("{{pkgName}}", context.pkgName).replaceAll("{{name}}", context.name).replaceAll("{{version}}", context.version).replaceAll("{{year}}", context.year).replaceAll("{{dshPeerRange}}", DSH_PEER_RANGE).replaceAll("{{dshBaseline}}", DSH_BASELINE);
179
211
  }
180
212
  /** Render every file of a language template. */
181
213
  function renderScaffold(lang, context) {
@@ -900,7 +932,8 @@ function checkManifestFiles(_root, pkg) {
900
932
  const problems = [];
901
933
  for (const patchFile of patchFiles) if (!files.includes(patchFile)) problems.push(`files whitelist is missing the patch file "${patchFile}"`);
902
934
  if (main && !files.includes(main) && !files.some((f) => main.startsWith(`${f.replace(/\/$/, "")}/`))) problems.push(`files whitelist is missing the main entry "${main}"`);
903
- if (!files.some((f) => f === "lib" || f === "dist")) problems.push("files whitelist has no built-artifact directory (`lib` or `dist`)");
935
+ const entryDir = main?.includes("/") ? main.slice(0, main.indexOf("/")) : void 0;
936
+ if (entryDir && (entryDir === "lib" || entryDir === "dist") && !files.includes(entryDir)) problems.push(`files whitelist has no built-artifact directory ("${entryDir}"), but main points into it`);
904
937
  if (problems.length > 0) return {
905
938
  id: "manifest-files",
906
939
  severity: "error",
@@ -1095,14 +1128,26 @@ function checkReadmeConsistency(root) {
1095
1128
  skillRef: ref
1096
1129
  };
1097
1130
  }
1098
- /** Body of SKILL.md after its YAML frontmatter, or undefined. */
1131
+ /**
1132
+ * Body of SKILL.md after its YAML frontmatter, or undefined when the file is
1133
+ * absent. Falls back to the whole text when there is no well-formed block.
1134
+ *
1135
+ * CRLF tolerance is load-bearing: without `.gitattributes`, a Windows checkout
1136
+ * (`core.autocrlf=true`) delivers CRLF while CI and the published tarball
1137
+ * deliver LF. An exact `startsWith('---\n')` guard therefore failed locally,
1138
+ * leaving the frontmatter in the "body" — so `redline-persona-role` judged the
1139
+ * `name:` line as the opening paragraph and emitted a false warning on every
1140
+ * local run while CI stayed green. Keep this in step with `index.js`.
1141
+ */
1099
1142
  function skillBody(root) {
1100
1143
  const text = readText(join(root, "SKILL.md"));
1101
1144
  if (!text) return void 0;
1102
- if (!text.startsWith("---\n")) return text;
1103
- const end = text.indexOf("\n---", 4);
1104
- if (end < 0) return text;
1105
- return text.slice(end + 4).replace(/^\n+/, "");
1145
+ const open = /^---\r?\n/.exec(text);
1146
+ if (!open) return text;
1147
+ const rest = text.slice(open[0].length);
1148
+ const close = /\r?\n---[ \t]*(?:\r?\n|$)/.exec(rest);
1149
+ if (!close) return text;
1150
+ return rest.slice(close.index + close[0].length).replace(/^(?:[ \t]*\r?\n)+/, "");
1106
1151
  }
1107
1152
  function checkRedlinePersonaRole(root) {
1108
1153
  const ref = skillRefFor("redline-persona-role");
@@ -1626,8 +1671,8 @@ async function initGit(targetDir) {
1626
1671
  * `tests/verify.test.ts` asserts these match compat.yml, so the two cannot drift
1627
1672
  * apart silently again. Override per run with `--base` / `--headless`.
1628
1673
  */
1629
- const VERIFY_BASE_SPEC = "@deepseek-ai/dsh-base@0.2.1-alpha.1";
1630
- const VERIFY_HEADLESS_SPEC = "@deepseek-ai/dsh-headless@0.2.1-alpha.1";
1674
+ const VERIFY_BASE_SPEC = "@deepseek-ai/dsh-base@0.2.1-alpha.2";
1675
+ const VERIFY_HEADLESS_SPEC = "@deepseek-ai/dsh-headless@0.2.1-alpha.2";
1631
1676
  const PROFILE_WORKSPACE = `# scratch profile allowlist (mirrors the repo's compat workflow)
1632
1677
  packages:
1633
1678
  - .
@@ -1817,7 +1862,7 @@ function suggestionsFor(step, result) {
1817
1862
  const base = [`tail of "${step}":\n${tailOf(result)}`];
1818
1863
  if (result.timedOut) base.push(`command timed out; raise --timeout or --smoke-timeout`);
1819
1864
  if (step === "install") {
1820
- base.push("ensure the dsh CLI is @deepseek-ai/dsh@0.2.1-alpha.1 (older builds such as the rc.6 line do not satisfy the compat pin)");
1865
+ base.push("ensure the dsh CLI is @deepseek-ai/dsh@0.2.1-alpha.2 (older builds such as the rc.6 line do not satisfy the compat pin)");
1821
1866
  base.push("confirm the profile allowlist matches the repo compat workflow (native builds allowlisted)");
1822
1867
  }
1823
1868
  if (step === "headless") base.push("a hang usually means an injected service stayed pending; the smoke timeout surfaces exactly that");
@@ -1912,7 +1957,37 @@ function timeoutMs(flags, key, envKey, fallback) {
1912
1957
  * @param cwd - working directory (injectable for tests).
1913
1958
  */
1914
1959
  async function main(argv, cwd = process.cwd()) {
1915
- const { positionals, flags } = parseArgs(argv);
1960
+ const KNOWN_FLAGS = [
1961
+ "help",
1962
+ "h",
1963
+ "version",
1964
+ "V",
1965
+ "lang",
1966
+ "dir",
1967
+ "force",
1968
+ "git",
1969
+ "cwd",
1970
+ "json",
1971
+ "strict",
1972
+ "dsh",
1973
+ "pnpm",
1974
+ "profile",
1975
+ "base",
1976
+ "headless",
1977
+ "timeout",
1978
+ "smoke-timeout"
1979
+ ];
1980
+ let parsed;
1981
+ try {
1982
+ parsed = parseArgs(argv, KNOWN_FLAGS);
1983
+ } catch (err) {
1984
+ if (err instanceof UsageError) {
1985
+ process.stderr.write(`dsh-plugin-dev: ${err.message}\n`);
1986
+ return 2;
1987
+ }
1988
+ throw err;
1989
+ }
1990
+ const { positionals, flags } = parsed;
1916
1991
  if (flagBool(flags, "version") || flags.V === true) {
1917
1992
  process.stdout.write(`${readCliVersion()}\n`);
1918
1993
  return 0;
@@ -1955,8 +2030,8 @@ async function main(argv, cwd = process.cwd()) {
1955
2030
  dshBin: resolveDsh(flagString(flags, "dsh")),
1956
2031
  pnpmBin: resolvePnpm(flagString(flags, "pnpm")),
1957
2032
  profile: flagString(flags, "profile", "compat") ?? "compat",
1958
- base: flagString(flags, "base", "@deepseek-ai/dsh-base@0.2.1-alpha.1") ?? "@deepseek-ai/dsh-base@0.2.1-alpha.1",
1959
- headless: flagString(flags, "headless", "@deepseek-ai/dsh-headless@0.2.1-alpha.1") ?? "@deepseek-ai/dsh-headless@0.2.1-alpha.1",
2033
+ base: flagString(flags, "base", "@deepseek-ai/dsh-base@0.2.1-alpha.2") ?? "@deepseek-ai/dsh-base@0.2.1-alpha.2",
2034
+ headless: flagString(flags, "headless", "@deepseek-ai/dsh-headless@0.2.1-alpha.2") ?? "@deepseek-ai/dsh-headless@0.2.1-alpha.2",
1960
2035
  timeoutMs: timeoutMs(flags, "timeout", "DSH_PLUGIN_DEV_TIMEOUT", DEFAULT_TIMEOUT_MS),
1961
2036
  smokeTimeoutMs: timeoutMs(flags, "smoke-timeout", "DSH_PLUGIN_DEV_SMOKE_TIMEOUT", DEFAULT_SMOKE_TIMEOUT_MS)
1962
2037
  });