dsh-plugin-guide 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE.md +26 -0
  3. package/README.es.md +139 -0
  4. package/README.hi.md +138 -0
  5. package/README.md +165 -0
  6. package/README.pt.md +139 -0
  7. package/README.zh-CN.md +164 -0
  8. package/SKILL.md +69 -0
  9. package/cordis.patch.yml +4 -0
  10. package/guide/links.md +92 -0
  11. package/guide/plugin-dev-guide.md +429 -0
  12. package/guide/quick-reference.es.md +176 -0
  13. package/guide/quick-reference.hi.md +176 -0
  14. package/guide/quick-reference.md +176 -0
  15. package/guide/quick-reference.pt.md +176 -0
  16. package/guide/quick-reference.zh-CN.md +175 -0
  17. package/index.js +58 -0
  18. package/package.json +83 -0
  19. package/references/community-ecosystem.md +201 -0
  20. package/references/community-repo-deep-dive.md +695 -0
  21. package/references/cordis-paper-and-community.md +326 -0
  22. package/references/harness-repo.md +654 -0
  23. package/references/official-docs/AGENTS.md +149 -0
  24. package/references/official-docs/BENCHMARK.md +3 -0
  25. package/references/official-docs/CLAUDE.md +1 -0
  26. package/references/official-docs/CONTRIBUTING.i18n.yaml +6 -0
  27. package/references/official-docs/CONTRIBUTING.md +23 -0
  28. package/references/official-docs/CONTRIBUTING.zh.md +23 -0
  29. package/references/official-docs/LICENSE +21 -0
  30. package/references/official-docs/README.i18n.yaml +6 -0
  31. package/references/official-docs/README.md +35 -0
  32. package/references/official-docs/README.zh.md +74 -0
  33. package/references/official-docs/SNAPSHOT.md +16 -0
  34. package/references/official-docs/THIRD_PARTY_NOTICES.md +192 -0
  35. package/references/official-docs/docs/AGENTS.md +75 -0
  36. package/references/official-docs/docs/agent-lifecycle.i18n.yaml +6 -0
  37. package/references/official-docs/docs/agent-lifecycle.md +82 -0
  38. package/references/official-docs/docs/agent-lifecycle.zh.md +84 -0
  39. package/references/official-docs/docs/api-gateway.i18n.yaml +6 -0
  40. package/references/official-docs/docs/api-gateway.md +164 -0
  41. package/references/official-docs/docs/api-gateway.zh.md +164 -0
  42. package/references/official-docs/docs/architecture.i18n.yaml +6 -0
  43. package/references/official-docs/docs/architecture.md +129 -0
  44. package/references/official-docs/docs/architecture.zh.md +133 -0
  45. package/references/official-docs/docs/capability-seams.i18n.yaml +6 -0
  46. package/references/official-docs/docs/capability-seams.md +471 -0
  47. package/references/official-docs/docs/capability-seams.zh.md +473 -0
  48. package/references/official-docs/docs/config-catalog.i18n.yaml +6 -0
  49. package/references/official-docs/docs/config-catalog.md +3151 -0
  50. package/references/official-docs/docs/config-catalog.zh.md +3152 -0
  51. package/references/official-docs/docs/cookbook/adding-a-conversation-node.i18n.yaml +6 -0
  52. package/references/official-docs/docs/cookbook/adding-a-conversation-node.md +233 -0
  53. package/references/official-docs/docs/cookbook/adding-a-conversation-node.zh.md +233 -0
  54. package/references/official-docs/docs/cookbook/adding-a-package.i18n.yaml +6 -0
  55. package/references/official-docs/docs/cookbook/adding-a-package.md +118 -0
  56. package/references/official-docs/docs/cookbook/adding-a-package.zh.md +118 -0
  57. package/references/official-docs/docs/cookbook/adding-a-tool.i18n.yaml +6 -0
  58. package/references/official-docs/docs/cookbook/adding-a-tool.md +94 -0
  59. package/references/official-docs/docs/cookbook/adding-a-tool.zh.md +96 -0
  60. package/references/official-docs/docs/cookbook/adding-a-vendored-package.i18n.yaml +6 -0
  61. package/references/official-docs/docs/cookbook/adding-a-vendored-package.md +59 -0
  62. package/references/official-docs/docs/cookbook/adding-a-vendored-package.zh.md +59 -0
  63. package/references/official-docs/docs/cookbook/adding-an-llm-adapter.i18n.yaml +6 -0
  64. package/references/official-docs/docs/cookbook/adding-an-llm-adapter.md +43 -0
  65. package/references/official-docs/docs/cookbook/adding-an-llm-adapter.zh.md +43 -0
  66. package/references/official-docs/docs/cookbook/extension-cookbook.i18n.yaml +6 -0
  67. package/references/official-docs/docs/cookbook/extension-cookbook.md +129 -0
  68. package/references/official-docs/docs/cookbook/extension-cookbook.zh.md +131 -0
  69. package/references/official-docs/docs/cookbook/maintaining-dsh-code-review.i18n.yaml +6 -0
  70. package/references/official-docs/docs/cookbook/maintaining-dsh-code-review.md +64 -0
  71. package/references/official-docs/docs/cookbook/maintaining-dsh-code-review.zh.md +64 -0
  72. package/references/official-docs/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml +6 -0
  73. package/references/official-docs/docs/cookbook/responding-to-pr-review-on-a-stack.md +32 -0
  74. package/references/official-docs/docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +32 -0
  75. package/references/official-docs/docs/cordis-api/context.i18n.yaml +6 -0
  76. package/references/official-docs/docs/cordis-api/context.md +364 -0
  77. package/references/official-docs/docs/cordis-api/context.zh.md +366 -0
  78. package/references/official-docs/docs/cordis-api/events.i18n.yaml +6 -0
  79. package/references/official-docs/docs/cordis-api/events.md +207 -0
  80. package/references/official-docs/docs/cordis-api/events.zh.md +209 -0
  81. package/references/official-docs/docs/cordis-api/fiber.i18n.yaml +6 -0
  82. package/references/official-docs/docs/cordis-api/fiber.md +375 -0
  83. package/references/official-docs/docs/cordis-api/fiber.zh.md +377 -0
  84. package/references/official-docs/docs/cordis-api/inherited.md +39 -0
  85. package/references/official-docs/docs/cordis-api/registry.i18n.yaml +6 -0
  86. package/references/official-docs/docs/cordis-api/registry.md +152 -0
  87. package/references/official-docs/docs/cordis-api/registry.zh.md +154 -0
  88. package/references/official-docs/docs/cordis-api/service.i18n.yaml +6 -0
  89. package/references/official-docs/docs/cordis-api/service.md +102 -0
  90. package/references/official-docs/docs/cordis-api/service.zh.md +104 -0
  91. package/references/official-docs/docs/cordis-primer.i18n.yaml +6 -0
  92. package/references/official-docs/docs/cordis-primer.md +44 -0
  93. package/references/official-docs/docs/cordis-primer.zh.md +50 -0
  94. package/references/official-docs/docs/cordis-tutorial/01-first-plugin.i18n.yaml +6 -0
  95. package/references/official-docs/docs/cordis-tutorial/01-first-plugin.md +95 -0
  96. package/references/official-docs/docs/cordis-tutorial/01-first-plugin.zh.md +95 -0
  97. package/references/official-docs/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml +6 -0
  98. package/references/official-docs/docs/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
  99. package/references/official-docs/docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +98 -0
  100. package/references/official-docs/docs/cordis-tutorial/03-services.i18n.yaml +6 -0
  101. package/references/official-docs/docs/cordis-tutorial/03-services.md +98 -0
  102. package/references/official-docs/docs/cordis-tutorial/03-services.zh.md +98 -0
  103. package/references/official-docs/docs/cordis-tutorial/04-events.i18n.yaml +6 -0
  104. package/references/official-docs/docs/cordis-tutorial/04-events.md +144 -0
  105. package/references/official-docs/docs/cordis-tutorial/04-events.zh.md +144 -0
  106. package/references/official-docs/docs/cordis-tutorial/05-config.i18n.yaml +6 -0
  107. package/references/official-docs/docs/cordis-tutorial/05-config.md +84 -0
  108. package/references/official-docs/docs/cordis-tutorial/05-config.zh.md +84 -0
  109. package/references/official-docs/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml +6 -0
  110. package/references/official-docs/docs/cordis-tutorial/06-composition-and-hmr.md +113 -0
  111. package/references/official-docs/docs/cordis-tutorial/06-composition-and-hmr.zh.md +113 -0
  112. package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.i18n.yaml +6 -0
  113. package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.md +107 -0
  114. package/references/official-docs/docs/cordis-tutorial/07-into-the-harness.zh.md +107 -0
  115. package/references/official-docs/docs/cordis-tutorial/index.i18n.yaml +6 -0
  116. package/references/official-docs/docs/cordis-tutorial/index.md +60 -0
  117. package/references/official-docs/docs/cordis-tutorial/index.zh.md +62 -0
  118. package/references/official-docs/docs/defensive-patterns.i18n.yaml +6 -0
  119. package/references/official-docs/docs/defensive-patterns.md +33 -0
  120. package/references/official-docs/docs/defensive-patterns.zh.md +33 -0
  121. package/references/official-docs/docs/development.i18n.yaml +6 -0
  122. package/references/official-docs/docs/development.md +171 -0
  123. package/references/official-docs/docs/development.zh.md +171 -0
  124. package/references/official-docs/docs/event-producer-consumer.i18n.yaml +6 -0
  125. package/references/official-docs/docs/event-producer-consumer.md +76 -0
  126. package/references/official-docs/docs/event-producer-consumer.zh.md +78 -0
  127. package/references/official-docs/docs/glossary.i18n.yaml +6 -0
  128. package/references/official-docs/docs/glossary.md +45 -0
  129. package/references/official-docs/docs/glossary.zh.md +45 -0
  130. package/references/official-docs/docs/graph-atlas.i18n.yaml +6 -0
  131. package/references/official-docs/docs/graph-atlas.md +24 -0
  132. package/references/official-docs/docs/graph-atlas.zh.md +26 -0
  133. package/references/official-docs/docs/i18n/README.i18n.yaml +6 -0
  134. package/references/official-docs/docs/i18n/README.md +60 -0
  135. package/references/official-docs/docs/i18n/README.zh.md +60 -0
  136. package/references/official-docs/docs/i18n/style-samples.md +87 -0
  137. package/references/official-docs/docs/i18n/terminology.md +214 -0
  138. package/references/official-docs/docs/i18n/translation-prompt.md +263 -0
  139. package/references/official-docs/docs/i18n/translation-rules.i18n.yaml +6 -0
  140. package/references/official-docs/docs/i18n/translation-rules.md +69 -0
  141. package/references/official-docs/docs/i18n/translation-rules.zh.md +69 -0
  142. package/references/official-docs/docs/module-graph.i18n.yaml +6 -0
  143. package/references/official-docs/docs/module-graph.md +1638 -0
  144. package/references/official-docs/docs/module-graph.zh.md +1640 -0
  145. package/references/official-docs/docs/persistence-catalog.i18n.yaml +6 -0
  146. package/references/official-docs/docs/persistence-catalog.md +944 -0
  147. package/references/official-docs/docs/persistence-catalog.zh.md +946 -0
  148. package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml +6 -0
  149. package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.md +113 -0
  150. package/references/official-docs/docs/postmortem/0001-acp-default-export-drops-inject.zh.md +113 -0
  151. package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml +6 -0
  152. package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +47 -0
  153. package/references/official-docs/docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +47 -0
  154. package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml +6 -0
  155. package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.md +53 -0
  156. package/references/official-docs/docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +53 -0
  157. package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml +6 -0
  158. package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +55 -0
  159. package/references/official-docs/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +55 -0
  160. package/references/official-docs/docs/postmortem/README.i18n.yaml +6 -0
  161. package/references/official-docs/docs/postmortem/README.md +18 -0
  162. package/references/official-docs/docs/postmortem/README.zh.md +18 -0
  163. package/references/official-docs/docs/rescope.i18n.yaml +6 -0
  164. package/references/official-docs/docs/rescope.md +53 -0
  165. package/references/official-docs/docs/rescope.zh.md +53 -0
  166. package/references/official-docs/docs/subsystems/README.i18n.yaml +6 -0
  167. package/references/official-docs/docs/subsystems/README.md +55 -0
  168. package/references/official-docs/docs/subsystems/README.zh.md +55 -0
  169. package/references/official-docs/docs/subsystems/approval.i18n.yaml +6 -0
  170. package/references/official-docs/docs/subsystems/approval.md +170 -0
  171. package/references/official-docs/docs/subsystems/approval.zh.md +170 -0
  172. package/references/official-docs/docs/subsystems/attachment.i18n.yaml +6 -0
  173. package/references/official-docs/docs/subsystems/attachment.md +115 -0
  174. package/references/official-docs/docs/subsystems/attachment.zh.md +115 -0
  175. package/references/official-docs/docs/subsystems/client-modules.i18n.yaml +6 -0
  176. package/references/official-docs/docs/subsystems/client-modules.md +118 -0
  177. package/references/official-docs/docs/subsystems/client-modules.zh.md +118 -0
  178. package/references/official-docs/docs/subsystems/code-runtime.i18n.yaml +6 -0
  179. package/references/official-docs/docs/subsystems/code-runtime.md +191 -0
  180. package/references/official-docs/docs/subsystems/code-runtime.zh.md +191 -0
  181. package/references/official-docs/docs/subsystems/commands.i18n.yaml +6 -0
  182. package/references/official-docs/docs/subsystems/commands.md +187 -0
  183. package/references/official-docs/docs/subsystems/commands.zh.md +187 -0
  184. package/references/official-docs/docs/subsystems/compaction.i18n.yaml +6 -0
  185. package/references/official-docs/docs/subsystems/compaction.md +238 -0
  186. package/references/official-docs/docs/subsystems/compaction.zh.md +238 -0
  187. package/references/official-docs/docs/subsystems/core.i18n.yaml +6 -0
  188. package/references/official-docs/docs/subsystems/core.md +1070 -0
  189. package/references/official-docs/docs/subsystems/core.zh.md +1078 -0
  190. package/references/official-docs/docs/subsystems/credentials.i18n.yaml +6 -0
  191. package/references/official-docs/docs/subsystems/credentials.md +133 -0
  192. package/references/official-docs/docs/subsystems/credentials.zh.md +133 -0
  193. package/references/official-docs/docs/subsystems/extensions.i18n.yaml +6 -0
  194. package/references/official-docs/docs/subsystems/extensions.md +364 -0
  195. package/references/official-docs/docs/subsystems/extensions.zh.md +364 -0
  196. package/references/official-docs/docs/subsystems/feedback.i18n.yaml +6 -0
  197. package/references/official-docs/docs/subsystems/feedback.md +266 -0
  198. package/references/official-docs/docs/subsystems/feedback.zh.md +266 -0
  199. package/references/official-docs/docs/subsystems/filesystem.i18n.yaml +6 -0
  200. package/references/official-docs/docs/subsystems/filesystem.md +495 -0
  201. package/references/official-docs/docs/subsystems/filesystem.zh.md +495 -0
  202. package/references/official-docs/docs/subsystems/goal.i18n.yaml +6 -0
  203. package/references/official-docs/docs/subsystems/goal.md +277 -0
  204. package/references/official-docs/docs/subsystems/goal.zh.md +277 -0
  205. package/references/official-docs/docs/subsystems/invariants.i18n.yaml +6 -0
  206. package/references/official-docs/docs/subsystems/invariants.md +88 -0
  207. package/references/official-docs/docs/subsystems/invariants.zh.md +88 -0
  208. package/references/official-docs/docs/subsystems/jobs.i18n.yaml +6 -0
  209. package/references/official-docs/docs/subsystems/jobs.md +290 -0
  210. package/references/official-docs/docs/subsystems/jobs.zh.md +290 -0
  211. package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +6 -0
  212. package/references/official-docs/docs/subsystems/llm-streaming.md +888 -0
  213. package/references/official-docs/docs/subsystems/llm-streaming.zh.md +894 -0
  214. package/references/official-docs/docs/subsystems/lsp.i18n.yaml +6 -0
  215. package/references/official-docs/docs/subsystems/lsp.md +202 -0
  216. package/references/official-docs/docs/subsystems/lsp.zh.md +202 -0
  217. package/references/official-docs/docs/subsystems/permission-presets.i18n.yaml +6 -0
  218. package/references/official-docs/docs/subsystems/permission-presets.md +131 -0
  219. package/references/official-docs/docs/subsystems/permission-presets.zh.md +131 -0
  220. package/references/official-docs/docs/subsystems/persistence.i18n.yaml +6 -0
  221. package/references/official-docs/docs/subsystems/persistence.md +385 -0
  222. package/references/official-docs/docs/subsystems/persistence.zh.md +385 -0
  223. package/references/official-docs/docs/subsystems/plan.i18n.yaml +6 -0
  224. package/references/official-docs/docs/subsystems/plan.md +87 -0
  225. package/references/official-docs/docs/subsystems/plan.zh.md +87 -0
  226. package/references/official-docs/docs/subsystems/sandbox.i18n.yaml +6 -0
  227. package/references/official-docs/docs/subsystems/sandbox.md +218 -0
  228. package/references/official-docs/docs/subsystems/sandbox.zh.md +218 -0
  229. package/references/official-docs/docs/subsystems/schedule.i18n.yaml +6 -0
  230. package/references/official-docs/docs/subsystems/schedule.md +186 -0
  231. package/references/official-docs/docs/subsystems/schedule.zh.md +186 -0
  232. package/references/official-docs/docs/subsystems/scope.i18n.yaml +6 -0
  233. package/references/official-docs/docs/subsystems/scope.md +59 -0
  234. package/references/official-docs/docs/subsystems/scope.zh.md +59 -0
  235. package/references/official-docs/docs/subsystems/session-projection.i18n.yaml +6 -0
  236. package/references/official-docs/docs/subsystems/session-projection.md +262 -0
  237. package/references/official-docs/docs/subsystems/session-projection.zh.md +262 -0
  238. package/references/official-docs/docs/subsystems/session-query.i18n.yaml +6 -0
  239. package/references/official-docs/docs/subsystems/session-query.md +495 -0
  240. package/references/official-docs/docs/subsystems/session-query.zh.md +495 -0
  241. package/references/official-docs/docs/subsystems/session-reference.i18n.yaml +6 -0
  242. package/references/official-docs/docs/subsystems/session-reference.md +108 -0
  243. package/references/official-docs/docs/subsystems/session-reference.zh.md +108 -0
  244. package/references/official-docs/docs/subsystems/session-telemetry.i18n.yaml +6 -0
  245. package/references/official-docs/docs/subsystems/session-telemetry.md +194 -0
  246. package/references/official-docs/docs/subsystems/session-telemetry.zh.md +194 -0
  247. package/references/official-docs/docs/subsystems/session-title.i18n.yaml +6 -0
  248. package/references/official-docs/docs/subsystems/session-title.md +204 -0
  249. package/references/official-docs/docs/subsystems/session-title.zh.md +204 -0
  250. package/references/official-docs/docs/subsystems/session.i18n.yaml +6 -0
  251. package/references/official-docs/docs/subsystems/session.md +849 -0
  252. package/references/official-docs/docs/subsystems/session.zh.md +851 -0
  253. package/references/official-docs/docs/subsystems/settings.i18n.yaml +6 -0
  254. package/references/official-docs/docs/subsystems/settings.md +310 -0
  255. package/references/official-docs/docs/subsystems/settings.zh.md +310 -0
  256. package/references/official-docs/docs/subsystems/shell.i18n.yaml +6 -0
  257. package/references/official-docs/docs/subsystems/shell.md +303 -0
  258. package/references/official-docs/docs/subsystems/shell.zh.md +303 -0
  259. package/references/official-docs/docs/subsystems/skills.i18n.yaml +6 -0
  260. package/references/official-docs/docs/subsystems/skills.md +331 -0
  261. package/references/official-docs/docs/subsystems/skills.zh.md +331 -0
  262. package/references/official-docs/docs/subsystems/spill.i18n.yaml +6 -0
  263. package/references/official-docs/docs/subsystems/spill.md +117 -0
  264. package/references/official-docs/docs/subsystems/spill.zh.md +117 -0
  265. package/references/official-docs/docs/subsystems/storage.i18n.yaml +6 -0
  266. package/references/official-docs/docs/subsystems/storage.md +229 -0
  267. package/references/official-docs/docs/subsystems/storage.zh.md +229 -0
  268. package/references/official-docs/docs/subsystems/subagent.i18n.yaml +6 -0
  269. package/references/official-docs/docs/subsystems/subagent.md +734 -0
  270. package/references/official-docs/docs/subsystems/subagent.zh.md +736 -0
  271. package/references/official-docs/docs/subsystems/subprocess.i18n.yaml +6 -0
  272. package/references/official-docs/docs/subsystems/subprocess.md +324 -0
  273. package/references/official-docs/docs/subsystems/subprocess.zh.md +324 -0
  274. package/references/official-docs/docs/subsystems/system-prompt.i18n.yaml +6 -0
  275. package/references/official-docs/docs/subsystems/system-prompt.md +207 -0
  276. package/references/official-docs/docs/subsystems/system-prompt.zh.md +207 -0
  277. package/references/official-docs/docs/subsystems/terminal.i18n.yaml +6 -0
  278. package/references/official-docs/docs/subsystems/terminal.md +184 -0
  279. package/references/official-docs/docs/subsystems/terminal.zh.md +184 -0
  280. package/references/official-docs/docs/subsystems/token-meter.i18n.yaml +6 -0
  281. package/references/official-docs/docs/subsystems/token-meter.md +90 -0
  282. package/references/official-docs/docs/subsystems/token-meter.zh.md +90 -0
  283. package/references/official-docs/docs/subsystems/tools.i18n.yaml +6 -0
  284. package/references/official-docs/docs/subsystems/tools.md +720 -0
  285. package/references/official-docs/docs/subsystems/tools.zh.md +720 -0
  286. package/references/official-docs/docs/subsystems/typert.i18n.yaml +6 -0
  287. package/references/official-docs/docs/subsystems/typert.md +336 -0
  288. package/references/official-docs/docs/subsystems/typert.zh.md +336 -0
  289. package/references/official-docs/docs/subsystems/user-questions.i18n.yaml +6 -0
  290. package/references/official-docs/docs/subsystems/user-questions.md +178 -0
  291. package/references/official-docs/docs/subsystems/user-questions.zh.md +178 -0
  292. package/references/official-docs/docs/subsystems/web-server.i18n.yaml +6 -0
  293. package/references/official-docs/docs/subsystems/web-server.md +108 -0
  294. package/references/official-docs/docs/subsystems/web-server.zh.md +108 -0
  295. package/references/official-docs/docs/subsystems/web.i18n.yaml +6 -0
  296. package/references/official-docs/docs/subsystems/web.md +199 -0
  297. package/references/official-docs/docs/subsystems/web.zh.md +199 -0
  298. package/references/official-docs/docs/subsystems/workflow.i18n.yaml +6 -0
  299. package/references/official-docs/docs/subsystems/workflow.md +278 -0
  300. package/references/official-docs/docs/subsystems/workflow.zh.md +278 -0
  301. package/references/official-docs/docs/subsystems/workspace.i18n.yaml +6 -0
  302. package/references/official-docs/docs/subsystems/workspace.md +228 -0
  303. package/references/official-docs/docs/subsystems/workspace.zh.md +228 -0
  304. package/references/official-docs/docs/testing.i18n.yaml +6 -0
  305. package/references/official-docs/docs/testing.md +49 -0
  306. package/references/official-docs/docs/testing.zh.md +49 -0
  307. package/references/official-docs/docs/tool-catalog.i18n.yaml +6 -0
  308. package/references/official-docs/docs/tool-catalog.md +1873 -0
  309. package/references/official-docs/docs/tool-catalog.zh.md +1878 -0
  310. package/references/official-docs/docs/tool-execution-pipeline.i18n.yaml +6 -0
  311. package/references/official-docs/docs/tool-execution-pipeline.md +62 -0
  312. package/references/official-docs/docs/tool-execution-pipeline.zh.md +64 -0
  313. package/references/official-docs/docs/user/develop/basic/config.i18n.yaml +6 -0
  314. package/references/official-docs/docs/user/develop/basic/config.md +106 -0
  315. package/references/official-docs/docs/user/develop/basic/config.zh.md +106 -0
  316. package/references/official-docs/docs/user/develop/basic/index.i18n.yaml +6 -0
  317. package/references/official-docs/docs/user/develop/basic/index.md +144 -0
  318. package/references/official-docs/docs/user/develop/basic/index.zh.md +144 -0
  319. package/references/official-docs/docs/user/develop/basic/publish.i18n.yaml +6 -0
  320. package/references/official-docs/docs/user/develop/basic/publish.md +183 -0
  321. package/references/official-docs/docs/user/develop/basic/publish.zh.md +183 -0
  322. package/references/official-docs/docs/user/develop/basic/tool.i18n.yaml +6 -0
  323. package/references/official-docs/docs/user/develop/basic/tool.md +52 -0
  324. package/references/official-docs/docs/user/develop/basic/tool.zh.md +52 -0
  325. package/references/official-docs/docs/user/develop/framework/events.i18n.yaml +6 -0
  326. package/references/official-docs/docs/user/develop/framework/events.md +143 -0
  327. package/references/official-docs/docs/user/develop/framework/events.zh.md +143 -0
  328. package/references/official-docs/docs/user/develop/framework/index.i18n.yaml +6 -0
  329. package/references/official-docs/docs/user/develop/framework/index.md +137 -0
  330. package/references/official-docs/docs/user/develop/framework/index.zh.md +137 -0
  331. package/references/official-docs/docs/user/develop/framework/service.i18n.yaml +6 -0
  332. package/references/official-docs/docs/user/develop/framework/service.md +148 -0
  333. package/references/official-docs/docs/user/develop/framework/service.zh.md +150 -0
  334. package/references/official-docs/docs/user/develop/practice/index.i18n.yaml +6 -0
  335. package/references/official-docs/docs/user/develop/practice/index.md +155 -0
  336. package/references/official-docs/docs/user/develop/practice/index.zh.md +155 -0
  337. package/references/official-docs/docs/user/develop/practice/llm-adapter.i18n.yaml +6 -0
  338. package/references/official-docs/docs/user/develop/practice/llm-adapter.md +188 -0
  339. package/references/official-docs/docs/user/develop/practice/llm-adapter.zh.md +188 -0
  340. package/references/official-docs/docs/user/guide/index.i18n.yaml +6 -0
  341. package/references/official-docs/docs/user/guide/index.md +30 -0
  342. package/references/official-docs/docs/user/guide/index.zh.md +30 -0
  343. package/references/official-docs/docs/user/guide/providers-custom-form.png +0 -0
  344. package/references/official-docs/docs/user/guide/providers-custom-form.zh.png +0 -0
  345. package/references/official-docs/docs/user/guide/providers-models-page.png +0 -0
  346. package/references/official-docs/docs/user/guide/providers-models-page.zh.png +0 -0
  347. package/references/official-docs/docs/user/guide/providers.i18n.yaml +6 -0
  348. package/references/official-docs/docs/user/guide/providers.md +98 -0
  349. package/references/official-docs/docs/user/guide/providers.zh.md +98 -0
  350. package/references/official-docs/docs/user/guide/python-sdk.i18n.yaml +6 -0
  351. package/references/official-docs/docs/user/guide/python-sdk.md +104 -0
  352. package/references/official-docs/docs/user/guide/python-sdk.zh.md +104 -0
  353. package/references/official-docs/docs/user/index.i18n.yaml +6 -0
  354. package/references/official-docs/docs/user/index.md +11 -0
  355. package/references/official-docs/docs/user/index.zh.md +11 -0
  356. package/references/official-docs/docs/web-styling.i18n.yaml +6 -0
  357. package/references/official-docs/docs/web-styling.md +25 -0
  358. package/references/official-docs/docs/web-styling.zh.md +25 -0
  359. package/references/official-docs/examples/AGENTS.md +20 -0
  360. package/references/official-docs/packages/AGENTS.md +27 -0
  361. package/references/official-docs/packages/README.md +69 -0
  362. package/references/official-docs/vendor/README.md +60 -0
  363. package/references/official-docs/website-docs.ts +524 -0
  364. package/references/sources.md +137 -0
  365. package/references/upstream-cordis.md +594 -0
  366. package/references/website-pages.md +668 -0
  367. package/scripts/archive-discussions.ps1 +154 -0
  368. package/scripts/download-community-articles.ps1 +188 -0
  369. package/scripts/download-community-repos.ps1 +232 -0
  370. package/scripts/download-sources.ps1 +195 -0
  371. package/scripts/gen-topic-snapshot.ps1 +91 -0
  372. package/scripts/install-skill.ps1 +63 -0
  373. package/scripts/sync-official-docs.ps1 +130 -0
  374. package/scripts/verify-kit.ps1 +191 -0
@@ -0,0 +1,176 @@
1
+ # Folha de consulta de plugins do DeepSeek Harness
2
+
3
+ > Referência rápida de uma página. Detalhes: [plugin-dev-guide.md](plugin-dev-guide.md) (chinês) e [references](../references/).
4
+ > Outros idiomas: [English](quick-reference.md) · [中文](quick-reference.zh-CN.md) · [Español](quick-reference.es.md) · [हिन्दी](quick-reference.hi.md)
5
+
6
+ ## Esqueleto do plugin
7
+
8
+ ```ts
9
+ import type { Context } from '@deepseek-ai/cordis'
10
+ import Schema from '@deepseek-ai/schemastery'
11
+ import { defineTool } from '@deepseek-ai/dsh-tools'
12
+
13
+ export const name = 'my-plugin' // obrigatório
14
+ export const inject = ['tools'] // serviços necessários; omita se não houver
15
+
16
+ export interface Config { limit: number }
17
+ export const Config: Schema<Config> = Schema.object({
18
+ limit: Schema.number().default(10), // schema Schemastery, não um objeto simples
19
+ })
20
+
21
+ export function apply(ctx: Context, config: Config) {
22
+ ctx.effect(() => { // registro = efeito, desfeito ao descarregar
23
+ const timer = setInterval(() => {}, 1000)
24
+ return () => clearInterval(timer)
25
+ })
26
+ ctx.on('tools/result', (exec, result) => { /* ... */ })
27
+ ctx.tools.register(defineTool({
28
+ name: 'my_tool',
29
+ description: '…',
30
+ parameters: { x: { type: 'string', required: true } },
31
+ output: { schema: { type: 'string' }, render: (_a, v) => [{ type: 'text', text: v }] },
32
+ async execute(args, exec) { return `hi ${args.x}` }, // respeite exec.signal
33
+ }))
34
+ }
35
+ ```
36
+
37
+ Outras formas: objeto `export default { name, inject, apply }`; classe `class X extends Service { static inject=[...]; constructor(ctx){ super(ctx,'key') } }` (use ao fornecer um serviço).
38
+
39
+ ## API principal do ctx (Cordis)
40
+
41
+ | Finalidade | API |
42
+ |---|---|
43
+ | Registrar recurso + limpeza | `ctx.effect(() => disposer)` |
44
+ | Ouvir eventos | `ctx.on(name, handler)` (limpeza automática) |
45
+ | Transmissão / sem retorno | `ctx.emit(name, payload)` |
46
+ | Valor com curto-circuito | `ctx.bail(name, input)` (o primeiro não-null/false/undefined vence) |
47
+ | Valor ordenado | `await ctx.serial(name, input)` |
48
+ | Pipeline | `await ctx.waterfall(name, input, init)`; listeners **devem chamar `next()`** |
49
+ | Contextos filhos | `ctx.extend(meta)` / `ctx.isolate(name, label?)` / `ctx.intercept(name, config)` |
50
+ | Montar plugin filho | `ctx.plugin(plugin)` → Fiber; `await fiber.dispose()` |
51
+ | Consulta de serviço opcional | `ctx.get('metrics')?.x()` |
52
+ | Logging | `ctx.logger(name)` |
53
+
54
+ Ciclo de vida: `PENDING → LOADING → ACTIVE` (apply lança erro → FAILED); `ACTIVE → UNLOADING → DISPOSED`. Se um serviço necessário desaparece, o plugin descarrega; recarrega quando o serviço volta.
55
+
56
+ ## Modos de despacho de eventos + bail
57
+
58
+ | Modo | await | Ordem | Valor de retorno |
59
+ |---|---|---|---|
60
+ | emit | não | ordem de registro | nenhum |
61
+ | waterfall | não | ordem de registro | sim (**não chamar `next()` causa curto-circuito**) |
62
+ | parallel | sim | paralelo | nenhum |
63
+ | serial | sim | ordem de registro | sim (o primeiro não vazio para) |
64
+
65
+ Eventos tipados (declaration merging):
66
+
67
+ ```ts
68
+ declare module '@deepseek-ai/cordis' {
69
+ interface Events { 'my/event': (p: { id: string }) => void }
70
+ interface Context { myService: MyService } // ao fornecer um serviço
71
+ }
72
+ ```
73
+
74
+ ## cordis.yml / camadas
75
+
76
+ ```yaml
77
+ # scratch-plugin/cordis.yml (overlay --patch)
78
+ - insert:
79
+ - id: hello
80
+ name: '/absolute/path/to/scratch-plugin/src/my-plugin.ts'
81
+ config: { greeting: 'Hi' }
82
+
83
+ # bundle: "dsh": {"bundle":{"patch":"./cordis.patch.yml"}} no package.json
84
+ # profile: "dsh": {"profile":{"bundles":["@deepseek-ai/dsh-base","my-bundle"]}}
85
+ # ordem efetiva: bundles → cordis.patch.yml do profile → $DSH_HOME/cordis.patch.yml → --patch
86
+ # sobrescrita por id; a linha config inteira é substituída (sem deep merge) — repita todas as chaves
87
+ # !!js avalia após os serviços injetados ativarem; disabled é avaliado em cada montagem
88
+ ```
89
+
90
+ Comandos: `dsh --profile web` · `dsh --profile headless "task"` · `dsh --profile X --dump-config` · `dsh plugin --profile X add/remove <pkg>` · `pnpm dsh web --patch ./scratch-plugin/cordis.yml`
91
+
92
+ Canais de instalação (repository-plugin removido em 0811 — restam apenas dois):
93
+ - **plugin bundle** (`"dsh":{"bundle":{"patch":"..."}}`) → `dsh plugin add <pkg>` entra na pilha `dsh.profile.bundles`; efeito após reiniciar.
94
+ - **plugin cordis simples** (sem `dsh.bundle`) → `dsh plugin add <pkg>` instala a dependência + uma linha insert no `cordis.patch.yml` do profile; **HMR de configuração ao vivo**.
95
+ - fonte git: `dsh plugin add "github:owner/repo#<sha>&path:<subdir>"` (fixe o commit; build `prepare` autocontido + `allowBuilds` no `pnpm-workspace.yaml` do profile; npm/tarball dispensa permissão de build).
96
+
97
+ ## Serviços internos comuns (chaves do ctx)
98
+
99
+ `sessions` registro de sessão · `systemPrompt` montagem de prompts · `tools` registro de ferramentas + pipeline protegido · `agents` registro de agentes · `agentLoop` driver do loop · `llm` registro de adaptadores · `skills` registro de skills · `commands` comandos slash · `approval` aprovação única · `jobs` trabalhos em segundo plano · `fs` seam de sistema de arquivos · `shell` seam de execução bash · `subprocess` seam de subprocessos · `terminals` PTY · `sandbox` seam de confinamento · `codeRuntime` execução de código · `sessionPersistence` persistência · `settings` / `credentials` / `workspaceRegistry` / `goals` / `planMode` / `subagents` / `workflowEngine` / `storage`.
100
+ Lista completa e assinaturas exatas → `references/official-docs/docs/capability-seams.md` + `docs/subsystems/*.md` (regiões Cordis API geradas).
101
+
102
+ ## Pipeline de políticas de ferramentas (ordem de execução)
103
+
104
+ ```
105
+ tools/pre-execute (waterfall, allow|deny|ask) → ctx.tools.guard() (negação monótona)
106
+ → tools/execute (wrapper; apenas exec.signal substituível) → execute(args, exec)
107
+ → tools/post-execute (substituir content/value, bloquear, anexar contexto) → finalizeContent
108
+ → tools/result (somente observação) → tool/result durável (evento de sessão)
109
+ ```
110
+
111
+ Seleção: portões de política → pre-execute; negação irreversível → guard; timeout/retentativas/métricas → execute; transformar resultados → post-execute; auditoria/coleta → result.
112
+ Code Mode: `await tools.<name>(args)` vem de graça; sucesso = valor JSON canônico final; falha = `ToolCallError(name, toolName, message)`.
113
+
114
+ ## Cartões de UI (funções puras! apenas args(+result) — sem I/O/relógio/aleatório)
115
+
116
+ - `presentCall(args)` → `{card:'generic',title,kind?,rawInput?,content?,locations?}` | `{card:'terminal',title,description?,cwd?}` | `{card:'diff',title,diffs,locations?}`
117
+ - `presentResult(args,{content,isError,meta?})` → generic / terminal / diff / search(`shape:'matches'|'paths'`) / read / web(`kind:'search'|'fetch'`)
118
+ - Metadados de replay: `output.presentationMeta(args, value)` → persistido em `tool/result.meta`
119
+
120
+ ## Modelo de seam de capacidade de três papéis
121
+
122
+ Definition (`dsh-my-cap`): `export abstract class MyCapService extends Service { constructor(ctx){super(ctx,'myCap')} abstract execute(req): Promise<res> }` + declaration merging de Context.
123
+ Provider (`dsh-my-cap-local`): `export function apply(ctx){ ctx.plugin(class MyCapLocal extends MyCapService {...}) }`.
124
+ Consumer (`dsh-tool-my-cap`): `inject = ['tools','myCap']`, `ctx.tools.register(defineTool({... execute: args => ctx.myCap.execute(...)}))`.
125
+ Regras: não divida prematuramente; Provider e Consumer nunca dependem um do outro; padrões resolvem explicitamente em `resolve(request): Spec`.
126
+
127
+ ## Essenciais do adaptador LLM
128
+
129
+ `class MyAdapter extends LlmAdapter { async *stream(options): AsyncIterable<StreamChunk> }` → `ctx.llm.registerAdapter(['provider'], adapter)`.
130
+ Protocolo de chunks: `block-start` → `text-delta*` → `block-end` (bloco completo) → … → `usage` (antes de finish) → `finish` (último; `reason: {kind:'stop'|'tool-calls'}`). Lance `LlmError` com código estável para campos que você não puder atender.
131
+
132
+ ## Regras rígidas (violações = falhas de gate / comportamento errado)
133
+
134
+ 1. Todo registro passa por `ctx.effect()` / `ctx.on()` / o `register()` de um serviço (retorna disposer).
135
+ 2. Listeners de waterfall devem chamar `next()`; não chamar causa curto-circuito por design.
136
+ 3. Visível-para-o-modelo ⇔ registrado: nova entrada visível exige novo evento de sessão (`SessionEventMap`).
137
+ 4. Nunca codifique valores ajustáveis (teste: o cordis.yml consegue mudá-los?); má configuração falha em voz alta.
138
+ 5. Pacotes de plugin independentes: cordis é peerDependency com a mesma identidade do host (misturar scoped `@deepseek-ai/cordis` e unscoped divide identidades); ESM; manifesto `dsh.bundle`; instalações git precisam de `prepare` + `allowBuilds`; publique `lib/` ou um tarball.
139
+ 6. Documentação bilíngue em pares; descrições/prompts são comportamento; mudanças não triviais levam Agent Note; rode o conjunto mínimo de verificações antes de empurrar (dsh-pre-push-checks).
140
+ 7. IDs opacos entre limites são branded (`Branded<B>` de `dsh-brand`), nunca `string` crua.
141
+ 8. Membros de `SessionEventMap` são required-on-read: eventos de tipo desconhecido devem levar `ignorable: true` (ou o log é recusado); apenas mudanças de formato estrutural bumpam `SESSION_FORMAT_VERSION`. O switch sobre `SessionEvent` cai num `default` documentado — sem `assertNever` (união merge-extensible).
142
+
143
+ ## Lista rápida de armadilhas da comunidade (detalhes: guia §7.3 / community-repo-deep-dive.md)
144
+
145
+ - Trio do tsconfig: `moduleResolution: bundler` + `allowImportingTsExtensions` + `rewriteRelativeImportExtensions` (+ `lib:["ES2024"]`, `types:["node"]` explícito).
146
+ - `tsc` emite apesar de erros → `tsc || exit 1` / `--noEmitOnError`; procure imports `.ts` residuais no build antes de publicar.
147
+ - Junctions do Windows via PowerShell `New-Item -ItemType Junction`; letra de unidade do vitest em maiúscula `C:/`.
148
+ - `DSH_PERMISSION_MODE=danger-full-access` é de alto risco (sem backend de sandbox no Windows, aprovações desativadas); `DSH_*` em `~/.dsh/.env` quebra a inicialização.
149
+ - Arquivos de sessão são zstd multiframe: use `scanZstdFrames`/`createZstdFrameDecoder` (`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`).
150
+ - npm: o `dsh` sem escopo é o projeto alheio node-dsh (um shell) — instale `@deepseek-ai/dsh`; `@deepseek-ai/dsh-tools` e `@deepseek-ai/dsh-session-persistence-jsonl` têm `latest` obsoleto (0.0.1-rc.1), fixe `next` (0.1.0-rc.6); `create-dsh-plugin` já está publicado (0.1.1, 2026-08-13); dsh-core/dsh-sdk seguem não publicados (verificado em 2026-08-14).
151
+ - Aplique `resolve()` nos dois lados antes de comparar caminhos (armadilha da barra invertida do Windows).
152
+
153
+ ## Links de documentação
154
+
155
+ Documentação oficial de desenvolvimento — base do site <https://deepseek-harness.github.io/deepseek-harness> (a raiz é chinês, `en/` é inglês; cópias locais textuais em `references/official-docs/docs/`):
156
+
157
+ - Básico: [develop/basic/](https://deepseek-harness.github.io/deepseek-harness/develop/basic/) → [tool](https://deepseek-harness.github.io/deepseek-harness/develop/basic/tool) · [config](https://deepseek-harness.github.io/deepseek-harness/develop/basic/config) · [publish](https://deepseek-harness.github.io/deepseek-harness/develop/basic/publish)
158
+ - Framework: [develop/framework/](https://deepseek-harness.github.io/deepseek-harness/develop/framework/) ([service](https://deepseek-harness.github.io/deepseek-harness/develop/framework/service), [events](https://deepseek-harness.github.io/deepseek-harness/develop/framework/events)) · Prática: [develop/practice/](https://deepseek-harness.github.io/deepseek-harness/develop/practice/) ([LLM adapter](https://deepseek-harness.github.io/deepseek-harness/develop/practice/llm-adapter))
159
+ - Guias: [quickstart](https://deepseek-harness.github.io/deepseek-harness/guide/quickstart) · [providers](https://deepseek-harness.github.io/deepseek-harness/guide/providers) · [python-sdk](https://deepseek-harness.github.io/deepseek-harness/guide/python-sdk)
160
+ - Cordis: [primer](https://deepseek-harness.github.io/deepseek-harness/reference/cordis-primer) · [tutorial](https://deepseek-harness.github.io/deepseek-harness/develop/cordis-tutorial/) · [core API](https://deepseek-harness.github.io/deepseek-harness/reference/cordis-api/context)
161
+ - Referência: [architecture](https://deepseek-harness.github.io/deepseek-harness/reference/) · [cookbook/adding-a-tool](https://deepseek-harness.github.io/deepseek-harness/reference/cookbook/adding-a-tool) · [cookbook/extension-cookbook](https://deepseek-harness.github.io/deepseek-harness/reference/cookbook/extension-cookbook) · [subsystems](https://deepseek-harness.github.io/deepseek-harness/reference/subsystems/)
162
+ - Índice completo URL ↔ cópia local: [guide/links.md](links.md)
163
+
164
+ Documentação comunitária de desenvolvimento — modelos/tutoriais/armadilhas, lista completa em [references/community-ecosystem.md](../references/community-ecosystem.md): [plugin-template](https://github.com/omdsh-dev/plugin-template) · [dsh-plugin-dev pitfalls](https://github.com/omdsh-dev/dsh-plugin-dev) · [from-scratch tutorial](https://github.com/Opr4Mp3r/deepseek-harness-plugin-from-scratch) · [dsh-plugin-check](https://github.com/omdsh-dev/dsh-plugin-check)
165
+
166
+ ## Índice de fontes principais
167
+
168
+ - Documentação oficial textual: `references/official-docs/docs/**` (215 páginas, inclui pares `.zh.md`)
169
+ - Restrições da raiz do repo: `references/official-docs/AGENTS.md`, `references/official-docs/packages/AGENTS.md`, `references/official-docs/examples/AGENTS.md`, `references/official-docs/vendor/README.md`; estado de sincronização em `references/official-docs/SNAPSHOT.md`
170
+ - HTML do site: `downloads/web/site/**` (site completo EN+ZH) + `downloads/manifest.tsv`
171
+ - Cordis upstream: `downloads/github/cordis/**` + pesquisa `references/upstream-cordis.md`
172
+ - Paper do Cordis: `downloads/github/paper/**` + pesquisa `references/cordis-paper-and-community.md`
173
+ - Pesquisa do site: `references/website-pages.md`
174
+ - Pesquisa do repo: `references/harness-repo.md`
175
+ - Comunidade/ecossistema: `references/community-ecosystem.md` + `references/community-repo-deep-dive.md`
176
+ - Todas as URLs de fontes: `references/sources.md`
@@ -0,0 +1,175 @@
1
+ # DeepSeek Harness 插件开发速查表
2
+
3
+ > 一页式速查。细节回到 [plugin-dev-guide.md](plugin-dev-guide.md) 与 [references](../references/)。
4
+
5
+ ## 插件骨架
6
+
7
+ ```ts
8
+ import type { Context } from '@deepseek-ai/cordis'
9
+ import Schema from '@deepseek-ai/schemastery'
10
+ import { defineTool } from '@deepseek-ai/dsh-tools'
11
+
12
+ export const name = 'my-plugin' // 必须
13
+ export const inject = ['tools'] // 依赖的服务; 无依赖可省略
14
+
15
+ export interface Config { limit: number }
16
+ export const Config: Schema<Config> = Schema.object({
17
+ limit: Schema.number().default(10), // Schemastery schema, 不是普通对象
18
+ })
19
+
20
+ export function apply(ctx: Context, config: Config) {
21
+ ctx.effect(() => { // 注册=effect, 卸载自动撤销
22
+ const timer = setInterval(() => {}, 1000)
23
+ return () => clearInterval(timer)
24
+ })
25
+ ctx.on('tools/result', (exec, result) => { /* ... */ })
26
+ ctx.tools.register(defineTool({
27
+ name: 'my_tool',
28
+ description: '…',
29
+ parameters: { x: { type: 'string', required: true } },
30
+ output: { schema: { type: 'string' }, render: (_a, v) => [{ type: 'text', text: v }] },
31
+ async execute(args, exec) { return `hi ${args.x}` }, // 尊重 exec.signal
32
+ }))
33
+ }
34
+ ```
35
+
36
+ 其他形态:对象 `export default { name, inject, apply }`;类 `class X extends Service { static inject=[...]; constructor(ctx){ super(ctx,'key') } }`(提供服务时用)。
37
+
38
+ ## ctx 核心 API(Cordis)
39
+
40
+ | 用途 | API |
41
+ |---|---|
42
+ | 注册自定义资源+清理 | `ctx.effect(() => disposer)` |
43
+ | 监听事件 | `ctx.on(name, handler)`(自动清理) |
44
+ | 广播 / 无返回值 | `ctx.emit(name, payload)` |
45
+ | 短路取值 | `ctx.bail(name, input)`(首个非 null/false/undefined 即止) |
46
+ | 顺序取值 | `await ctx.serial(name, input)` |
47
+ | 管线 | `await ctx.waterfall(name, input, init)`;监听器**必须 `next()`** |
48
+ | 子上下文 | `ctx.extend(meta)` / `ctx.isolate(name, label?)` / `ctx.intercept(name, config)` |
49
+ | 挂子插件 | `ctx.plugin(plugin)` → Fiber;`await fiber.dispose()` |
50
+ | 可选服务查询 | `ctx.get('metrics')?.x()` |
51
+ | 日志 | `ctx.logger(name)` |
52
+
53
+ 生命周期:`PENDING → LOADING → ACTIVE`(apply 抛错 → FAILED);`ACTIVE → UNLOADING → DISPOSED`。依赖服务消失 → 自动卸载,恢复 → 自动重载。
54
+
55
+ ## 事件派发四模式 + bail
56
+
57
+ | 模式 | await | 顺序 | 返回值 |
58
+ |---|---|---|---|
59
+ | emit | 否 | 注册序 | 无 |
60
+ | waterfall | 否 | 注册序 | 有(**不调 next() 即短路**) |
61
+ | parallel | 是 | 并行 | 无 |
62
+ | serial | 是 | 注册序 | 有(首个非空即止) |
63
+
64
+ 类型声明(declaration merging):
65
+
66
+ ```ts
67
+ declare module '@deepseek-ai/cordis' {
68
+ interface Events { 'my/event': (p: { id: string }) => void }
69
+ interface Context { myService: MyService } // 提供服务时
70
+ }
71
+ ```
72
+
73
+ ## cordis.yml / 分层
74
+
75
+ ```yaml
76
+ # scratch-plugin/cordis.yml (--patch 覆盖层)
77
+ - insert:
78
+ - id: hello
79
+ name: '/absolute/path/to/scratch-plugin/src/my-plugin.ts'
80
+ config: { greeting: 'Hi' }
81
+
82
+ # bundle: package.json 的 "dsh": {"bundle":{"patch":"./cordis.patch.yml"}}
83
+ # profile: "dsh": {"profile":{"bundles":["@deepseek-ai/dsh-base","my-bundle"]}}
84
+ # 生效顺序: bundles → profile cordis.patch.yml → $DSH_HOME/cordis.patch.yml → --patch
85
+ # 按 id 覆盖, 整行 config 替换(非深合并); 覆盖方必须重述全部键
86
+ # !!js 表达式(双感叹号)在注入服务就绪后求值; disabled 每次挂载时求值
87
+ ```
88
+
89
+ 命令:`dsh --profile web` · `dsh --profile headless "task"` · `dsh --profile X --dump-config` · `dsh plugin --profile X add/remove <pkg>` · `pnpm dsh web --patch ./scratch-plugin/cordis.yml`
90
+
91
+ 安装形态(0811 起 repository-plugin 机制已移除,只剩两条通道):
92
+ - **bundle 插件**(`"dsh":{"bundle":{"patch":"..."}}`)→ `dsh plugin add <pkg>` 进 `dsh.profile.bundles` 层栈,重启生效。
93
+ - **纯 cordis 插件**(无 `dsh.bundle`)→ `dsh plugin add <pkg>` 装依赖 + profile `cordis.patch.yml` 加 insert 行,**配置 HMR 实时生效**。
94
+ - git 源:`dsh plugin add "github:owner/repo#<sha>&path:<subdir>"`(pin commit;`prepare` 自包含构建 + profile `pnpm-workspace.yaml` allowBuilds;npm/tarball 免构建许可)。
95
+
96
+ ## 常用内建服务(ctx 键)
97
+
98
+ `sessions` 会话日志/内存库 · `systemPrompt` 提示词组装 · `tools` 工具注册与受控执行管线 · `agents` Agent 注册表 · `agentLoop` 循环驱动器 · `llm` 模型适配器注册表 · `skills` 技能注册表 · `commands` 人类斜杠命令 · `approval` 一次性审批 · `jobs` 后台任务 · `fs` 文件系统缝 · `shell` bash 执行缝 · `subprocess` 子进程缝 · `terminals` PTY · `sandbox` 进程限制缝 · `codeRuntime` 代码执行 · `sessionPersistence` 持久化 · `settings` / `credentials` / `workspaceRegistry` / `goals` / `planMode` / `subagents` / `workflowEngine` / `storage`。
99
+ 完整清单与每个方法的精确签名 → `references/official-docs/docs/capability-seams.md` + `docs/subsystems/*.md`(生成式 Cordis API 区)。
100
+
101
+ ## 工具策略管线(执行顺序)
102
+
103
+ ```
104
+ tools/pre-execute (waterfall, allow|deny|ask) → ctx.tools.guard() (单调 deny)
105
+ → tools/execute (包裹, 仅可换 exec.signal) → execute(args, exec)
106
+ → tools/post-execute (换 content/value/阻断/附上下文) → finalizeContent
107
+ → tools/result (只读观察) → 持久化 tool/result (会话事件)
108
+ ```
109
+
110
+ 选择规则:策略门用 pre-execute;不可翻案的 deny 用 guard;超时/重试/指标用 execute;改结果用 post-execute;审计/采集用 result。
111
+ Code Mode:`await tools.<name>(args)` 免费获得;成功=最终规范 JSON 值;失败=`ToolCallError(name, toolName, message)`。
112
+
113
+ ## UI 卡片(纯函数!只依赖 args(+result),禁止 I/O/时钟/随机)
114
+
115
+ - `presentCall(args)` → `{card:'generic',title,kind?,rawInput?,content?,locations?}` | `{card:'terminal',title,description?,cwd?}` | `{card:'diff',title,diffs,locations?}`
116
+ - `presentResult(args,{content,isError,meta?})` → generic / terminal / diff / search(`shape:'matches'|'paths'`) / read / web(`kind:'search'|'fetch'`)
117
+ - 回放元数据:`output.presentationMeta(args, value)` → 持久化 `tool/result.meta`
118
+
119
+ ## 三层能力缝(seam)模板
120
+
121
+ Definition(`dsh-my-cap`):`export abstract class MyCapService extends Service { constructor(ctx){super(ctx,'myCap')} abstract execute(req): Promise<res> }` + Context 声明合并。
122
+ Provider(`dsh-my-cap-local`):`export function apply(ctx){ ctx.plugin(class MyCapLocal extends MyCapService {...}) }`。
123
+ Consumer(`dsh-tool-my-cap`):`inject = ['tools','myCap']`,`ctx.tools.register(defineTool({... execute: args => ctx.myCap.execute(...)}))`。
124
+ 规则:不提前拆;Provider 与 Consumer 互不依赖;默认值走显式 `resolve(request): Spec`。
125
+
126
+ ## LLM 适配器要点
127
+
128
+ `class MyAdapter extends LlmAdapter { async *stream(options): AsyncIterable<StreamChunk> }` → `ctx.llm.registerAdapter(['provider'], adapter)`。
129
+ Chunk 协议:`block-start` → `text-delta*` → `block-end`(完整块)→ … → `usage`(在 finish 前)→ `finish`(最后;`reason: {kind:'stop'|'tool-calls'}`)。无法满足的字段抛带稳定 code 的 `LlmError`。
130
+
131
+ ## 红线(违反=挂门禁/错误行为)
132
+
133
+ 1. 注册必须走 `ctx.effect()`/`ctx.on()`/服务 `register()`(返回 disposer)。
134
+ 2. waterfall 监听器必须调 `next()`;不调=故意短路。
135
+ 3. 模型可见 ⟺ 已记录:新模型可见输入必须新增会话事件(`SessionEventMap`)。
136
+ 4. 不得硬编码可调参数(判断:cordis.yml 能否改);misconfig fail loud。
137
+ 5. 独立插件包:cordis 是 peerDependency(与宿主同身份:scoped `@deepseek-ai/cordis` 与 unscoped 混用会"双 Cordis 分裂");ESM;`dsh.bundle` 清单;git 安装配 `prepare` + `allowBuilds`;发布带 `lib/` 或 tarball。
138
+ 6. 文档双语成对;工具描述/提示词即行为;非平凡变更加 Agent Note;提交前跑最小检查集(dsh-pre-push-checks)。
139
+ 7. 跨边界 opaque id 用 branded(`Branded<B>` from `dsh-brand`),从不裸 `string`。
140
+ 8. `SessionEventMap` 成员默认 required-on-read:不认识类型的会话事件必须带 `ignorable: true`(否则日志被拒读);只有结构格式变更才 bump `SESSION_FORMAT_VERSION`。对 `SessionEvent` 的 switch 落入文档化 `default`——**禁用 `assertNever`**(merge-extensible union)。
141
+
142
+ ## 社区实测坑速查(详见 guide §7.3 / community-repo-deep-dive.md)
143
+
144
+ - tsconfig 三件套:`moduleResolution: bundler` + `allowImportingTsExtensions` + `rewriteRelativeImportExtensions`(+ `lib:["ES2024"]`、显式 `types:["node"]`)。
145
+ - `tsc` 报错仍 emit → `tsc || exit 1` / `--noEmitOnError`;发布前 grep 产物无 `.ts` 残留。
146
+ - Windows junction 用 PowerShell `New-Item -ItemType Junction`;vitest 盘符大写 `C:/`。
147
+ - `DSH_PERMISSION_MODE=danger-full-access` 高风险(Windows 无沙箱后端、禁用审批);`DSH_*` 放 `~/.dsh/.env` 会报错。
148
+ - 会话文件多帧 zstd:用 `scanZstdFrames`/`createZstdFrameDecoder`(`@deepseek-ai/dsh-session-persistence-jsonl/src/zstd.ts`)。
149
+ - npm:无作用域 `dsh` 是无关项目 node-dsh(shell)——官方包是 `@deepseek-ai/dsh`;`@deepseek-ai/dsh-tools` 与 `@deepseek-ai/dsh-session-persistence-jsonl` 的 `latest` 是过期版本(0.0.1-rc.1),要钉 `next`(0.1.0-rc.6);`create-dsh-plugin` 已发布(0.1.1,2026-08-13);dsh-core/dsh-sdk 仍未发布(2026-08-14 复核)。
150
+ - 路径比较前两侧都 `resolve()`(Windows 反斜杠陷阱)。
151
+
152
+ ## 文档链接
153
+
154
+ 官方开发文档——站点基址 <https://deepseek-harness.github.io/deepseek-harness>(根路由中文,`en/` 前缀英文;逐字副本在 `references/official-docs/docs/`):
155
+
156
+ - 入门:[develop/basic/](https://deepseek-harness.github.io/deepseek-harness/develop/basic/) → [tool](https://deepseek-harness.github.io/deepseek-harness/develop/basic/tool) · [config](https://deepseek-harness.github.io/deepseek-harness/develop/basic/config) · [publish](https://deepseek-harness.github.io/deepseek-harness/develop/basic/publish)
157
+ - 框架与实践:[develop/framework/](https://deepseek-harness.github.io/deepseek-harness/develop/framework/)([service](https://deepseek-harness.github.io/deepseek-harness/develop/framework/service)、[events](https://deepseek-harness.github.io/deepseek-harness/develop/framework/events))· [develop/practice/](https://deepseek-harness.github.io/deepseek-harness/develop/practice/)([LLM adapter](https://deepseek-harness.github.io/deepseek-harness/develop/practice/llm-adapter))
158
+ - 用户指南:[quickstart](https://deepseek-harness.github.io/deepseek-harness/guide/quickstart) · [providers](https://deepseek-harness.github.io/deepseek-harness/guide/providers) · [python-sdk](https://deepseek-harness.github.io/deepseek-harness/guide/python-sdk)
159
+ - Cordis:[primer](https://deepseek-harness.github.io/deepseek-harness/reference/cordis-primer) · [tutorial](https://deepseek-harness.github.io/deepseek-harness/develop/cordis-tutorial/) · [core API](https://deepseek-harness.github.io/deepseek-harness/reference/cordis-api/context)
160
+ - 参考:[architecture](https://deepseek-harness.github.io/deepseek-harness/reference/) · [cookbook/adding-a-tool](https://deepseek-harness.github.io/deepseek-harness/reference/cookbook/adding-a-tool) · [cookbook/extension-cookbook](https://deepseek-harness.github.io/deepseek-harness/reference/cookbook/extension-cookbook) · [subsystems](https://deepseek-harness.github.io/deepseek-harness/reference/subsystems/)
161
+ - 完整 URL ↔ 本地副本对照:[guide/links.md](links.md)
162
+
163
+ 社区开发文档——模板/教程/踩坑,完整清单见 [references/community-ecosystem.md](../references/community-ecosystem.md):[plugin-template](https://github.com/omdsh-dev/plugin-template) · [dsh-plugin-dev pitfalls](https://github.com/omdsh-dev/dsh-plugin-dev) · [from-scratch tutorial](https://github.com/Opr4Mp3r/deepseek-harness-plugin-from-scratch) · [dsh-plugin-check](https://github.com/omdsh-dev/dsh-plugin-check)
164
+
165
+ ## 关键源索引
166
+
167
+ - 本地官方文档全文:`references/official-docs/docs/**`(215 篇,含全部 `.zh.md`)
168
+ - 仓库根约束:`references/official-docs/AGENTS.md`、`references/official-docs/packages/AGENTS.md`、`references/official-docs/examples/AGENTS.md`、`references/official-docs/vendor/README.md`;同步状态见 `references/official-docs/SNAPSHOT.md`
169
+ - 站点爬取 HTML:`downloads/web/site/**`(中英双语全站)+ `downloads/manifest.tsv`(下载清单)
170
+ - 上游 Cordis:`downloads/github/cordis/**` + 调研 `references/upstream-cordis.md`
171
+ - Cordis 论文:`downloads/github/paper/**` + 调研 `references/cordis-paper-and-community.md`
172
+ - 网站/官网调研:`references/website-pages.md`
173
+ - 仓库调研:`references/harness-repo.md`
174
+ - 社区/生态:`references/community-ecosystem.md` + 工作区 `dsh-plugin-topic-2026-08-13/`
175
+ - 全部 URL 清单:`references/sources.md`
package/index.js ADDED
@@ -0,0 +1,58 @@
1
+ // dsh-plugin-guide bundle entry point.
2
+ //
3
+ // Registers the packaged plugin-development knowledge base as one on-demand
4
+ // agent skill named `dsh-plugin-guide`. The skill body is the repository's
5
+ // SKILL.md; its relative references (`./guide/...`, `./references/...`) resolve
6
+ // against the package directory through the directory resourceBase, so the
7
+ // agent loads workflow steps, official docs, and community deep-dives only
8
+ // when a task needs them (progressive disclosure).
9
+ //
10
+ // The package imports nothing from the harness: it only consumes the `skills`
11
+ // service at apply time, so no cordis copy is brought in and the peer
12
+ // dependency on `@deepseek-ai/dsh` is metadata-only (optional).
13
+ import { readFileSync } from 'node:fs'
14
+ import { dirname, join } from 'node:path'
15
+ import { fileURLToPath } from 'node:url'
16
+
17
+ export const name = 'dsh-plugin-guide'
18
+ export const inject = ['skills']
19
+
20
+ const packageRoot = dirname(fileURLToPath(import.meta.url))
21
+
22
+ /**
23
+ * Strip the YAML frontmatter block from SKILL.md and return the description
24
+ * plus the instruction body. A malformed or missing block fails loud through
25
+ * the read itself or falls back to the full text as the body.
26
+ * @param text - raw SKILL.md content.
27
+ * @returns parsed description (when the frontmatter carries one) and body.
28
+ */
29
+ function splitFrontmatter(text) {
30
+ if (!text.startsWith('---\n')) return { description: undefined, body: text }
31
+ const end = text.indexOf('\n---', 4)
32
+ if (end < 0) return { description: undefined, body: text }
33
+ const meta = text.slice(4, end)
34
+ const body = text.slice(end + 4).replace(/^\n+/, '')
35
+ const match = /^description:\s*(.+)$/m.exec(meta)
36
+ return { description: match?.[1]?.trim(), body }
37
+ }
38
+
39
+ /**
40
+ * Register the knowledge-base skill. Registration is an effect: the disposer
41
+ * returned by `ctx.skills.register()` removes the contribution on unload.
42
+ * @param ctx - Cordis context with the injected `skills` service.
43
+ */
44
+ export function apply(ctx) {
45
+ const skillPath = join(packageRoot, 'SKILL.md')
46
+ const { description, body } = splitFrontmatter(readFileSync(skillPath, 'utf8'))
47
+ ctx.effect(() =>
48
+ ctx.skills.register({
49
+ name: 'dsh-plugin-guide',
50
+ source: 'bundled',
51
+ description:
52
+ description
53
+ ?? 'DeepSeek Harness (DSH) plugin development knowledge base: official constraints, task-based workflows, exact service/event references, and community pitfalls.',
54
+ content: body,
55
+ resourceBase: { kind: 'directory', path: packageRoot },
56
+ }),
57
+ )
58
+ }
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "dsh-plugin-guide",
3
+ "version": "0.1.0",
4
+ "description": "The dsh-plugin-guide knowledge base as an installable DeepSeek Harness plugin: official docs, Cordis primer, community deep-dives, and battle-tested pitfalls registered as an on-demand agent skill.",
5
+ "type": "module",
6
+ "main": "index.js",
7
+ "files": [
8
+ "index.js",
9
+ "cordis.patch.yml",
10
+ "SKILL.md",
11
+ "guide",
12
+ "references",
13
+ "scripts",
14
+ "LICENSE",
15
+ "NOTICE.md",
16
+ "README.md",
17
+ "README.zh-CN.md",
18
+ "README.es.md",
19
+ "README.pt.md",
20
+ "README.hi.md"
21
+ ],
22
+ "keywords": [
23
+ "dsh",
24
+ "deepseek-harness",
25
+ "dsh-plugin",
26
+ "cordis",
27
+ "agent-skill",
28
+ "plugin-development",
29
+ "knowledge-base"
30
+ ],
31
+ "license": "Apache-2.0",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/PerryLink/dsh-plugin-guide.git"
35
+ },
36
+ "peerDependencies": {
37
+ "@deepseek-ai/dsh": "0.1.0-rc.6"
38
+ },
39
+ "peerDependenciesMeta": {
40
+ "@deepseek-ai/dsh": {
41
+ "optional": true
42
+ }
43
+ },
44
+ "dsh": {
45
+ "bundle": {
46
+ "patch": "./cordis.patch.yml"
47
+ }
48
+ },
49
+ "dshWorkshop": {
50
+ "schema": "omdsh-workshop-package/v1",
51
+ "type": "plugin",
52
+ "integration": {
53
+ "protocol": "harness-profile",
54
+ "artifact": "cordis.patch.yml"
55
+ },
56
+ "install": {
57
+ "mode": "transactional",
58
+ "adapter": "profile-bundle",
59
+ "failurePolicy": "generation-rollback",
60
+ "touchesCurrentBeforeActivation": false
61
+ },
62
+ "lifecycle": {
63
+ "activation": "restart-profile",
64
+ "dispose": "supported"
65
+ },
66
+ "permissions": ["filesystem:read"],
67
+ "compatibility": {
68
+ "dshVersions": ["0.1.0-rc.6"]
69
+ },
70
+ "capability": {
71
+ "id": "dsh-plugin-guide",
72
+ "kind": "service",
73
+ "invocation": "ctx.skills.get('dsh-plugin-guide') resolves a complete SkillDefinition",
74
+ "expected": "session skill catalog lists dsh-plugin-guide and the loaded body carries the SKILL.md workflow with a directory resourceBase"
75
+ },
76
+ "evidence": {
77
+ "install": null,
78
+ "failureIsolation": null,
79
+ "hotReload": null,
80
+ "remove": null
81
+ }
82
+ }
83
+ }