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
package/SKILL.md CHANGED
@@ -19,48 +19,65 @@ 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
23
  1. 若未读过 Cordis 概念:读 `references/official-docs/docs/cordis-primer.md`(5 个概念,5 分钟);需要动手跟练时跑 `references/official-docs/docs/cordis-tutorial/` 01-07(无 API key 可跑)。
23
- 2. 打开 `guide/quick-reference.md`(契约速查)+ `guide/plugin-dev-guide.md`(完整路径)。官方/社区文档 URL 对照见 `guide/links.md`。排查官方运行时行为/未修复 bug 时查 `guide/unfixed-issues.md`(master 基线源码核实的问题清单 + 已修复提交号 + 设计行为对照)。
24
- 3. 确认目标扩展点:读 `references/official-docs/docs/architecture.md` 的「Where new behavior goes」表与 `references/official-docs/docs/cookbook/extension-cookbook.md` 的 feature→mechanism 表——**新行为必须挂到已文档化扩展点,不得改 agent-loop**。
24
+ 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`。
25
+ 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
+ 4. 要写 UI / 要让 agent 自己装插件时,读 `references/official-plugin-dev-skill.md`(官方自带技能的要点与硬性规定)。
25
27
 
26
28
  ## 必须遵守的插件契约(官方红线,逐条核对)
27
29
 
28
30
  - 插件 = 模块导出 `name` + `apply(ctx, config)`(+可选 `inject: string[]`);依赖的服务在 `apply` 前就绪;依赖服务消失会自动卸载、恢复后自动重载。
29
- - **注册即 effect**:一切贡献走 `ctx.effect()` / `ctx.on()` / 服务 `register()`(返回 disposer);绝不手动 removeListener/clearInterval 式收尾。
30
- - **waterfall 监听器必须调用 `next()`**;不调=故意短路(拦截语义)。`emit/waterfall/parallel/serial/bail` 语义见速查表。
31
- - **模型可见 ⟺ 已记录**:进入模型请求的一切必须能从会话日志重建;新增模型可见输入必须新增 `SessionEventMap` 会话事件。
31
+ - **注册即 effect**:一切贡献走 `ctx.effect()` / `ctx.on()` / 服务 `register()`(返回 disposer);绝不手动 removeListener/clearInterval 式收尾。注册在别的 ctx 上(如 `agent.ctx`)的,**两个拥有者都要留 disposer**。
32
+ - **waterfall 监听器必须调用 `next()`**;不调=故意短路(拦截语义)。改写 `agent/pre-step` 决策要**展开**(`{ ...decision, messages }`),否则 `startsRequestSeries` 之类字段会丢。`emit/waterfall/parallel/serial/bail` 语义见速查表。
33
+ - **扩展点用"最弱的够用机制"**:`ctx.tools.restrict()`(只移除)< `ctx.tools.guard()`(只拒绝)< waterfall 改写(依赖顺序)< `system-prompt/assemble`(整段替换)。机制越强,越要替其他插件保留贡献。结果只看 `tools/result`;只有要变换结果才用 `tools/post-execute`。
34
+ - **模型可见 ⟺ 已记录**:进入模型请求的一切必须能从会话日志重建;新增模型可见输入必须新增 `SessionEventMap` 会话事件(**由宿主侧新增**,见下一条)。
35
+ - **绝不要用新的 `type` 追加会话事件**:读方只在事件带信封 `ignorable: true` 时接受未知类型,而运行时 `Session.append()` 写不了该标记——写了会让**整个会话打不开**。插件状态从既有事件推导,或放进 inspection 找到的 storage 服务。
36
+ - **`agent.inject()` 的 `source` 不再接受 `{ kind: 'plugin', plugin: '<name>' }`**(会话格式 V4 在消息准入处拒绝):先 `declare module '@deepseek-ai/dsh-llm' { interface MessageSourceMap { '<your-kind>': { kind: '<your-kind>' } } }` 再用;`inject` 不唤醒(要唤醒用 `followup()` / `steer()`)。
32
37
  - 类型安全事件/服务用 declaration merging(`declare module '@deepseek-ai/cordis'`);事件文档标注 `@mode`。
33
- - 配置用 Schemastery `Schema<Config>`(禁止普通对象);非法配置加载期响亮失败;**不得硬编码可调参数**(判断:cordis.yml 能否改)。
34
- - 工具走 `defineTool`:`execute` 只返回 `output.schema` 声明的规范 JSON 值;尊重 `exec.signal`;人类可读内容放 `output.render`;UI 卡片 presenter 是**纯函数**(禁 I/O/时钟/随机)。
38
+ - 配置用 Schemastery `Schema<Config>`(禁止普通对象);非法配置加载期响亮失败;**不得硬编码可调参数**(判断:cordis.yml 能否改)。要暴露给用户的实时字段用 `Volatile<T>` + `loader/volatile-update`(表单命名空间 = profile 条目 id;settings 已在 0.2 世代重写)。
39
+ - 工具走 `defineTool`:`execute` 只返回 `output.schema` 声明的规范 JSON 值;尊重 `exec.signal`;人类可读内容放 `output.render`;UI 卡片 presenter 是**纯函数**(禁 I/O/时钟/随机)。工具 `parameters` 是 **DSH 自己的方言,不是 JSON Schema**;可选钩子 `projectContent()`、`ToolSchema.deferLoading`、`ask.displayReason`。
40
+ - **可选服务用 `ctx.get(name)`**;`ctx.<service>` 只对你自己 `inject` 里声明过的服务合法(写未声明的 `ctx` 属性会抛错并可能静默杀掉整个插件的激活)。
35
41
  - 可替换能力按三层接缝设计:Service Definition / Provider / Consumer;不提前拆。
36
- - 打包:bundle 清单 `"dsh":{"bundle":{"patch":"..."}}`;覆盖按 `id` 整行替换 config;`!!js`(双感叹号);git 安装需要 `prepare` 脚本与用户侧 `allowBuilds`,发布 npm/tarball 免构建许可。
42
+ - 打包:bundle 清单 `"dsh":{"bundle":{"patch":"..."}}`(`patch` **可为有序数组**,每个文件的相对路径按各自目录解析);覆盖按 `id` 整行替换 config(上游删行后 override **静默失效**,升级后跑 `--dump-config` 查 `patch: entry not found`);`!!js`(双感叹号);git 安装需要 `prepare` 脚本与用户侧 `allowBuilds`,发布 npm/tarball 免构建许可。
43
+ - **交付必须补展示元数据**:`locale/*.json` 的 `meta.title`/`meta.description` + 导出的 `./icon`(≤256 KiB、realpath 后必须在包内);子路径插件**不读** `package.json`。
44
+ - **共享实例的 dsh 包只放 peerDependencies + devDependencies**,绝不放 dependencies(profile 内副本会静默遮蔽运行时版本,核心服务注册失败)。DSH **不校验** peer 范围,兼容性靠运行时探测。
45
+ - **UI 插件**:只渲染 slot 里的 React 组件(禁止 iframe 托管页面);样式只用 `--dsw-alias-*` 主题 token;不 `require` 任何 Harness Client 包(抛错组件会把整个 slot 搞白);`dsh.client.inject` **必须是静态数组**;不在组件外写 DOM、不往 `document.body` 追加。
46
+ - **性能**:per-session 状态放 `ctx.sessionProjections`(纯同步 apply、忽略即同引用、纯 JSON + `stateVersion`);等持久事件(`turn/end`/`assistant/message`/`tool/result`),实时 token 读 `agent/assistant-stream`;**不轮询 `agent/status`**。
47
+ - **禁止**:在会话运行期间改 profile 的 `cordis.patch.yml`(HMR 会重载,实测丢光 preset 工具、杀掉在途 turn、最坏永久废掉 `sessionController`);手写 profile 的 `package.json`;在 profile 目录里跑 pnpm。
37
48
 
38
49
  ## 按任务类型的开发路径
39
50
 
40
51
  (以下路径均在 `references/official-docs/` 下,为官方文档全文副本)
41
52
 
42
- - **新工具**:`docs/user/develop/basic/tool.md`(教程)→ `docs/cookbook/adding-a-tool.md`(完整契约:参数校验、规范值、后台任务 `ctx.jobs`、策略钩子、Code Mode、UI 卡片)→ 参考实现 `packages/shell/tool-bash`(本地 checkout)。
53
+ - **新工具**:`docs/user/develop/basic/tool.md`(教程)→ `docs/cookbook/adding-a-tool.md`(完整契约:参数校验、规范值、后台任务 `ctx.jobs`、策略钩子、Code Mode、UI 卡片、`MessageSourceMap` 归属)→ 参考实现 `packages/shell/tool-bash`(本地 checkout)。
43
54
  - **新服务/能力**:`docs/user/develop/framework/service.md` + `docs/user/develop/practice/`(三层拆分完整代码)。
44
55
  - **拦截/策略/hook**:`docs/cookbook/extension-cookbook.md`(permission-gate 范例)+ `docs/event-producer-consumer.md`(全事件矩阵)。
45
56
  - **新 LLM 提供商**:`docs/user/develop/practice/llm-adapter.md`(StreamChunk 协议)。
46
- - **UI/会话节点**:`docs/subsystems/session.md`、`client-modules.md`(`docs/cookbook/adding-a-conversation-node.md` 已在 alpha.3 上游移除)。
47
- - **打包/发布**:`docs/user/develop/basic/publish.md`(bundle/profile、层顺序、git 安装坑)。
48
- - **查服务/事件精确签名**:`docs/subsystems/*.md` 生成式 Cordis API 区 + `docs/cordis-api/*`;**不要自造第二份静态清单**。站点 URL ↔ 本地副本对照见 `guide/links.md`,社区链接完整清单见 `references/community-ecosystem.md`。
49
- - **参考社区实现与实测坑**:`references/community-ecosystem.md`、`references/community-repo-deep-dive.md`(首批 15 个开发仓库深读)、`downloads/community-repos/`(**114 个仓库完整源码副本**,需先跑 `scripts/download-community-repos.ps1` 生成;含 08-14 晚扫描的 26 个文档型仓库——15 语言指南/s01–s23 课程/深度手册/TS·Rust SDK 等,及 08-15 第七批 14 个(桌面端/桥接/安全 PoC)与第八批 3 个(主题/WhaleHub/dsh-market 市场)仓库)。社区已确认的机制变化(如 repository-plugin 0811 移除、bundle vs 纯 cordis 双通道)与 20 个实测坑(cordis 双副本/tsconfig 三件套/多帧 zstd/Windows junction 等)在 `guide/plugin-dev-guide.md` §7。官方 Discussions 全量归档(**1654 条,2026-08-15 刷新**,含 #1629 官方插件脚手架 RFC)与 npm 全家桶元数据分别在 `downloads/github/harness/discussions/` 与 `downloads/npm/`;中英文社区文章 HTML 快照(100+ 篇)在 `downloads/web/community-articles/`。
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。
58
+ - **插件配置表单**:`docs/subsystems/settings.md`(已改名 "Plugin Configuration Forms")+ `docs/cookbook/adding-a-settings-card.md`(已重写)。
59
+ - **打包/发布**:`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`(会话格式版本权威)。
61
+ - **查服务/事件精确签名**:**优先用会话内 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
+ - **官方自带插件开发技能(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
+ - **参考社区实现与实测坑**:`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/`。
50
64
 
51
65
  ## 验证(交付前)
52
66
 
53
- - 加载验证:`dsh --profile <name> --dump-config` 检查 patch 行是否生效;启动日志无 FAILED。
54
- - 行为验证:Web UI 或 `dsh --profile headless "…"` 实测;工具返回/模型可见文本即行为,改动必须重测。
67
+ - 加载验证:**免审批**用 `cordis_inspect_list` / `cordis_inspect_query` 确认新行真的挂上(比 `list_plugins` 快且不需要审批);同时跑 `dsh --profile <name> --dump-config` 看有没有 `patch: entry <id> not found`。
68
+ - **读安装结果**:`plugin_manager` 的 `application` 与 `warnings` 决定改动是否生效——不是日志、进程列表或页面 boot payload。`failed` 要诊断,`overridden` 表示更高优先层胜出,`restart-required` 表示**尚未生效**;**替换**已安装包需要重启才能载入新的 JS 模块代。
69
+ - 行为验证:Web UI 或 `dsh --profile headless "…"` 实测;工具返回/模型可见文本即行为,改动必须重测。**安装成功 ≠ 用户看得见**:展示元数据(标题/描述/图标)要按 `references/official-plugin-dev-skill.md` §3.1 的清单核对,无浏览器控制时如实报告"渲染未验证"。
55
70
  - 仓库内改动额外走:类型检查、目标包测试、keyless snapshot(模型/产品可见行为必须有组装后转录快照)、双语文档成对、Agent Note(非平凡变更同 PR)。
56
- - 独立插件包:`pnpm pack` 后试装到干净 profile 验证(含 `lib/` 构建产物)。
71
+ - 独立插件包:`pnpm pack` 后试装到干净 profile 验证(含 `lib/` 构建产物);本库的 `dsh-plugin-dev verify` 已对齐这条。
72
+ - **排障提示**:宿主插件 `apply()` 抛错在 `dsh web` 下**可能完全不可见**(无日志 sink),只表现为工具/监听器静默缺失(见 `guide/unfixed-issues.md` T3);遇到"装了但没反应"先换 headless 或有日志的 profile 复现。
57
73
 
58
74
  ## 知识库维护(需要时)
59
75
 
60
- - 同步官方文档副本:`pwsh -File ./scripts/sync-official-docs.ps1 [-Checkout <deepseek-harness checkout>]`——只同步 git 已跟踪文件(未跟踪草稿与未推送提交不会进来),并刷新 `references/official-docs/SNAPSHOT.md`;README 的"最后核验"日期与提交号引用 SNAPSHOT.md,不要手改。漂移校验:`pwsh -File ./scripts/verify-kit.ps1 -Checkout <checkout>`。
61
- - 刷新线上资料:`pwsh -File ./scripts/download-sources.ps1`;刷新社区仓库:`pwsh -File ./scripts/download-community-repos.ps1`;刷新社区文章快照:`pwsh -File ./scripts/download-community-articles.ps1`(三个脚本幂等,产出进 `./downloads/`)。刷新官方 Discussions 归档:`$env:GH_TOKEN=<token>; pwsh -File ./scripts/archive-discussions.ps1`(list.json + 精选线程评论,防缩水保护)。话题清单计数重核:`pwsh -File ./scripts/gen-topic-snapshot.ps1 -OutDir <dir> -MaxPages 10`(GitHub Search API `q=topic:dsh-plugin`;分页上限 1000 条,去重数与 API total_count 都要记录进 sources.md §D.2;08-15 期快照在 `downloads/topic-snapshots/dsh-plugin-topic-2026-08-15/`)。
76
+ - 同步官方文档副本:`pwsh -File ./scripts/sync-official-docs.ps1 [-Checkout <deepseek-harness checkout>]`——只同步 git 已跟踪文件(未跟踪草稿与未推送提交不会进来),并刷新 `references/official-docs/SNAPSHOT.md`;README 的"最后核验"日期与提交号引用 SNAPSHOT.md,不要手改。漂移校验:`pwsh -File ./scripts/check-docs-drift.ps1 -Checkout <checkout>`(快速)或 `pwsh -File ./scripts/verify-kit.ps1 -Checkout <checkout>`(全量)。
77
+ - 刷新线上资料:`pwsh -File ./scripts/download-sources.ps1`;刷新社区仓库:`pwsh -File ./scripts/download-community-repos.ps1`;刷新社区文章快照:`pwsh -File ./scripts/download-community-articles.ps1`(三个脚本幂等,产出进 `./downloads/`)。刷新官方 Discussions 归档:`$env:GH_TOKEN=<token>; pwsh -File ./scripts/archive-discussions.ps1`(list.json + 精选线程评论,防缩水保护;**2026-10-06 期:list=5000、精选 1648**)。**注意 REST 分页天花板**:`/discussions` 列表最多翻到 5000 条,而仓库实际 total_count≈8850(GraphQL 口径)——需要更全的历史时按 GraphQL `UPDATED_AT DESC` 补抓。话题清单计数重核:`pwsh -File ./scripts/gen-topic-snapshot.ps1 -OutDir <dir> -MaxPages 10`。
78
+ - **维护节奏建议**:官方 3 周内发了 9 个 prerelease,所以"最后核验"日期要跟 tag 走;每次官方发版后按 `references/official-docs/docs/upgrade-guide/**`(**无 index、无入链**,必须主动看)+ `docs/persistence-changes/**` + GitHub Releases 说明三处增量更新 `guide/migration-0.2.md` 与 `guide/unfixed-issues.md`。
62
79
  - 安装/刷新 agent 技能副本:`pwsh -File ./scripts/install-skill.ps1 -Target <skill目录>`(跳过 downloads/ 与 .github/,逐字节校验)。
63
- - 冲突裁决:与官方文档冲突时以 `references/official-docs/`(官方仓库原文)为准。
80
+ - 冲突裁决:与官方文档冲突时以 `references/official-docs/`(官方仓库原文)为准;官方文档与**代码**冲突时以代码/产物为准并**明确标注分歧**(本轮已发现一例:`session-format-status.md` 的发布记录落后于代码与 npm)。
64
81
 
65
82
  ## CLI 工具链(dsh-plugin-dev)
66
83
 
@@ -275,6 +275,11 @@ const SKILL_SECTIONS = {
275
275
  section: "§8",
276
276
  heading: "packageManager 固定 pnpm"
277
277
  },
278
+ "display-meta": {
279
+ file: "guide/plugin-dev-guide.md",
280
+ section: "§7.0.1",
281
+ heading: "展示元数据与图标(locale meta + 导出 icon)"
282
+ },
278
283
  "readme-five-langs": {
279
284
  file: "guide/plugin-dev-guide.md",
280
285
  section: "§8",
@@ -480,6 +485,15 @@ function unescapeDouble(text) {
480
485
 
481
486
  //#endregion
482
487
  //#region src/cli/commands/check.ts
488
+ /** Icon formats the harness accepts, and its per-file size ceiling. */
489
+ const ICON_EXTENSIONS = [
490
+ ".svg",
491
+ ".png",
492
+ ".jpg",
493
+ ".jpeg",
494
+ ".webp"
495
+ ];
496
+ const ICON_MAX_BYTES = 262144;
483
497
  const README_LANGS = [
484
498
  "README.md",
485
499
  "README-zh.md",
@@ -508,6 +522,7 @@ function runCheck(options) {
508
522
  checkManifestEngines(root, pkg),
509
523
  checkManifestFiles(root, pkg),
510
524
  checkManifestPackageManager(root, pkg),
525
+ checkDisplayMeta(root, pkg),
511
526
  checkReadmeFiveLangs(root),
512
527
  checkReadmeConsistency(root),
513
528
  checkRedlinePersonaRole(root),
@@ -527,10 +542,15 @@ function printCheckReport(report, format) {
527
542
  if (format === "json") process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
528
543
  else process.stdout.write(`${renderHuman(report)}\n`);
529
544
  }
530
- function patchPath(root, pkg) {
545
+ /** Every patch file a `dsh.bundle.patch` pointer names, in application order. */
546
+ function patchPaths(root, pkg) {
531
547
  const pointer = pkg?.dsh?.bundle?.patch;
532
- if (!pointer) return void 0;
533
- return resolve(root, pointer);
548
+ if (!pointer) return [];
549
+ return (Array.isArray(pointer) ? pointer : [pointer]).filter((entry) => typeof entry === "string" && entry !== "").map((entry) => resolve(root, entry));
550
+ }
551
+ /** The first patch file, for checks that only describe one file. */
552
+ function patchPath(root, pkg) {
553
+ return patchPaths(root, pkg)[0];
534
554
  }
535
555
  /**
536
556
  * List real source files: the `src/` tree plus root-level JS/ESM entry files.
@@ -729,21 +749,32 @@ function checkManifestBundlePatch(root, pkg) {
729
749
  message: "no dsh.bundle.patch declared (pure cordis plugin, no bundle layer)",
730
750
  skillRef: ref
731
751
  };
732
- const path = resolve(root, pointer);
733
- if (!isFile(path)) return {
752
+ const paths = patchPaths(root, pkg);
753
+ if (paths.length === 0) return {
734
754
  id: "manifest-bundle-patch",
735
755
  severity: "error",
736
756
  kind: "deterministic",
737
757
  status: "fail",
738
- message: `dsh.bundle.patch points at a missing file: ${pointer}`,
758
+ message: "dsh.bundle.patch must be a file path or a list of file paths",
739
759
  skillRef: ref
740
760
  };
761
+ const missing = paths.filter((path) => !isFile(path));
762
+ const label = Array.isArray(pointer) ? pointer.join(", ") : pointer;
763
+ if (missing.length > 0) return {
764
+ id: "manifest-bundle-patch",
765
+ severity: "error",
766
+ kind: "deterministic",
767
+ status: "fail",
768
+ message: `dsh.bundle.patch points at a missing file: ${label}`,
769
+ skillRef: ref,
770
+ detail: missing.map((path) => `not found: ${path}`)
771
+ };
741
772
  return {
742
773
  id: "manifest-bundle-patch",
743
774
  severity: "error",
744
775
  kind: "deterministic",
745
776
  status: "pass",
746
- message: `dsh.bundle.patch resolves to ${pointer}`,
777
+ message: `dsh.bundle.patch resolves to ${label}`,
747
778
  skillRef: ref
748
779
  };
749
780
  }
@@ -856,10 +887,11 @@ function checkManifestFiles(_root, pkg) {
856
887
  message: "no `files` whitelist; npm will publish everything",
857
888
  skillRef: ref
858
889
  };
859
- const patchFile = pkg?.dsh?.bundle?.patch?.replace(/^\.\//, "") ?? "cordis.patch.yml";
890
+ const pointer = pkg?.dsh?.bundle?.patch;
891
+ const patchFiles = (Array.isArray(pointer) ? pointer : pointer ? [pointer] : ["cordis.patch.yml"]).map((entry) => entry.replace(/^\.\//, ""));
860
892
  const main = pkg?.main;
861
893
  const problems = [];
862
- if (!files.includes(patchFile)) problems.push(`files whitelist is missing the patch file "${patchFile}"`);
894
+ for (const patchFile of patchFiles) if (!files.includes(patchFile)) problems.push(`files whitelist is missing the patch file "${patchFile}"`);
863
895
  if (main && !files.includes(main) && !files.some((f) => main.startsWith(`${f.replace(/\/$/, "")}/`))) problems.push(`files whitelist is missing the main entry "${main}"`);
864
896
  if (!files.some((f) => f === "lib" || f === "dist")) problems.push("files whitelist has no built-artifact directory (`lib` or `dist`)");
865
897
  if (problems.length > 0) return {
@@ -908,6 +940,78 @@ function checkManifestPackageManager(_root, pkg) {
908
940
  skillRef: ref
909
941
  };
910
942
  }
943
+ /**
944
+ * Plugin Manager and Settings read display text and an icon without activating
945
+ * the plugin, so a package that runs but ships no metadata still looks broken to
946
+ * users. Passing this check is a packaging requirement, not a runtime feature.
947
+ */
948
+ function checkDisplayMeta(root, pkg) {
949
+ const ref = skillRefFor("display-meta");
950
+ const problems = [];
951
+ const notes = [];
952
+ const localeExport = Object.keys(pkg?.exports ?? {}).find((key) => key.includes("locale"));
953
+ if (!localeExport) problems.push("no locale export; add { \"./locale/*.json\": \"./locale/*.json\" } and a locale file with meta.title/meta.description");
954
+ else {
955
+ const localeDir = join(root, "locale");
956
+ if (!isDirectory(localeDir)) problems.push(`exports "${localeExport}" but the locale/ directory is missing`);
957
+ else {
958
+ const files = readdirSync(localeDir).filter((f) => f.endsWith(".json"));
959
+ if (files.length === 0) problems.push("locale/ holds no .json files");
960
+ if (!files.find((f) => f === "en.json")) problems.push("locale/en.json is missing (English is the required fallback)");
961
+ for (const file of files.filter((f) => f === "en.json")) {
962
+ const meta = readJsonIfExists(join(localeDir, file));
963
+ const title = typeof meta?.meta?.title === "string" ? meta.meta.title.trim() : "";
964
+ const description = typeof meta?.meta?.description === "string" ? meta.meta.description.trim() : "";
965
+ if (title === "") problems.push(`locale/${file} has no meta.title`);
966
+ if (description === "") problems.push(`locale/${file} has no meta.description`);
967
+ }
968
+ if (files.length === 1) notes.push("only locale/en.json present; add the user-facing languages too");
969
+ }
970
+ }
971
+ const manifestIcon = typeof pkg?.icon === "string" && pkg.icon !== "" ? pkg.icon : void 0;
972
+ const iconExport = Object.keys(pkg?.exports ?? {}).find((key) => key === "./icon" || key.endsWith("/icon"));
973
+ if (!manifestIcon && !iconExport) problems.push("no icon; publish an exported \"./icon\" (or a top-level package.json \"icon\")");
974
+ if (manifestIcon) {
975
+ const iconPath = resolve(root, manifestIcon);
976
+ if (!isFile(iconPath)) problems.push(`package.json icon points at a missing file: ${manifestIcon}`);
977
+ else {
978
+ if (!ICON_EXTENSIONS.some((ext) => iconPath.toLowerCase().endsWith(ext))) problems.push(`icon must be SVG, PNG, JPEG or WebP: ${manifestIcon}`);
979
+ const size = statSync(iconPath).size;
980
+ if (size > ICON_MAX_BYTES) problems.push(`icon exceeds 256 KiB (${size} bytes): ${manifestIcon}`);
981
+ if (size === 0) problems.push(`icon file is empty: ${manifestIcon}`);
982
+ }
983
+ }
984
+ if (iconExport && !manifestIcon) {
985
+ const target = pkg?.exports?.[iconExport];
986
+ if (typeof target === "string" && target !== "" && !ICON_EXTENSIONS.some((ext) => target.toLowerCase().endsWith(ext))) problems.push(`exported ${iconExport} must resolve to SVG, PNG, JPEG or WebP (got ${target})`);
987
+ }
988
+ if (problems.length > 0) return {
989
+ id: "display-meta",
990
+ severity: "warning",
991
+ kind: "deterministic",
992
+ status: "warn",
993
+ message: "display metadata incomplete (Plugin Manager shows the raw id and default artwork)",
994
+ skillRef: ref,
995
+ detail: [...problems, ...notes]
996
+ };
997
+ return {
998
+ id: "display-meta",
999
+ severity: "warning",
1000
+ kind: "deterministic",
1001
+ status: "pass",
1002
+ message: "display metadata present (locale meta + exported icon)",
1003
+ skillRef: ref,
1004
+ ...notes.length > 0 ? { detail: notes } : {}
1005
+ };
1006
+ }
1007
+ /** True when the path exists and is a directory. */
1008
+ function isDirectory(path) {
1009
+ try {
1010
+ return statSync(path).isDirectory();
1011
+ } catch {
1012
+ return false;
1013
+ }
1014
+ }
911
1015
  function checkReadmeFiveLangs(root) {
912
1016
  const ref = skillRefFor("readme-five-langs");
913
1017
  const missing = [];