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,668 @@
1
+ # DeepSeek Harness 官网与文档站调研
2
+
3
+ > **归档更正(2026-08-13 下载复核)**:本报告撰写时子代理沙箱无法直连外网,文档站"线上渲染页"标为 `[unverified]`。随后知识库下载脚本(`scripts/download-sources.ps1`)在更宽权限下**成功爬取了 GitHub Pages 全站 168 个 HTML 页面**(中英双语,内容已验证含中文正文),归档于 `downloads/web/site/`(下载明细见 `downloads/manifest.tsv`)——本报告中关于页面清单/正文的 `[unverified]` 项已由该爬取解决;`www.deepseek.com/harness/` 页面快照亦已归档于 `downloads/web/deepseek-com-harness.html`。
4
+
5
+ > 调研目标:
6
+ > - 官网入口:`https://www.deepseek.com/harness/`
7
+ > - 文档站:`https://deepseek-harness.github.io/deepseek-harness/develop/basic/`(及其下所有可发现页面)
8
+ >
9
+ > 产出用途:作为插件开发知识库的归档参考材料。语言:中文(保留英文技术术语)。
10
+
11
+ ---
12
+
13
+ ## 0. 调研方法与可信度说明(重要)
14
+
15
+ 1. **文档站内容以仓库源码为权威依据。** 文档站 `deepseek-harness.github.io/deepseek-harness/` 是一个 **VitePress** 站点,由开源仓库 `deepseek-ai/deepseek-harness`(本地 checkout:`D:\deepseek-harness`)中的 `docs/` 目录 + `website/` 投影层(`website/docs.ts` + `website/.vitepress/config.ts`)在构建期生成。因此本报告中的**页面 URL、页面标题、正文内容、代码示例**均来自该权威构建清单与源码文件,而不是抓取线上渲染结果。
16
+ 2. **线上页面无法从本会话直接抓取。** 本会话的 PowerShell 网络请求被沙箱拦截(`Invoke-WebRequest` 报 "基础连接已经关闭: 接收时发生错误"),且 `web_search` 未索引到 `deepseek-harness.github.io` 的渲染页(`site:deepseek-harness.github.io` 返回无结果)。因此「线上页面是否按清单原样渲染、是否有额外未列出的页面」标记为 **[unverified]**;但「站点结构/路由/标题/内容」来自官方仓库的站点生成清单,视为可靠。
17
+ 3. **`www.deepseek.com/harness/` 页面内容无法直接获取**,仅能从第三方新闻报道与官方 GitHub README 间接推断,相关内容标记为 **[unverified]**。
18
+ 4. **版本信息**:本地仓库根 `package.json` 的 `version` 为 **`0.1.0-rc.5`**;README 明确标注 "developer preview / 技术预览",并警告 "THERE WILL BE COMPATIBILITY-BREAKING CHANGES."(会有破坏兼容性的变更)。
19
+ 5. **易混淆项提醒**:`web_search` 会返回多个同名但**无关**的第三方项目(例如 `HenryZ838978/deepseek-harness`,一个 "pip install deepseek-harness + MCP" 的 Python 项目),与官方 `deepseek-ai/deepseek-harness` 不是同一项目,本报告不采用其内容。
20
+
21
+ ---
22
+
23
+ ## 1. 站点一:`https://www.deepseek.com/harness/`(官网 Landing 页)
24
+
25
+ - **URL**:`https://www.deepseek.com/harness/`(目标 URL 之一)
26
+ - **状态**:**[unverified]** 未能直接抓取或索引到该页的正文;`site:deepseek.com harness` 仅返回 DeepSeek API 文档站的一篇新闻页(`https://api-docs.deepseek.com/zh-cn/news/news260813/`,与 Harness 无关)。
27
+
28
+ ### 从第三方报道推断的发布事实(均 [unverified],来自新闻聚合)
29
+
30
+ | 事实 | 来源 |
31
+ |---|---|
32
+ | DeepSeek 正式开源 / 公测 "DeepSeek Harness",时间约 2026-08-13 | [IT之家《对标 Claude Cowork:DeepSeek Harness 公测,同步开放插件生态》](https://www.ithome.com/0/989/446.htm)、[新浪财经](https://finance.sina.cn/tech/2026-08-13/detail-inineuqm9870965.d.html)、[DoNews](https://www.donews.com/news/detail/1/6670452.html)、[网易科技《一切皆插件!DeepSeek Harness正式发布》](https://www.163.com/tech/article/L4892ED600097U7T.html) |
33
+ | 定位口号:"**AGENT = MODEL + HARNESS**";与 Claude Code / Claude Cowork 对标(dsh 与 Claude Code 是同类:模型可调用工具完成任务) | [新浪新闻](https://www.sina.cn/news/detail/5331578031178880.html)、[IT之家](https://www.ithome.com/0/989/446.htm) |
34
+ | 核心理念:"**一切皆插件**"(模型、工具、技能、会话、沙箱等皆为插件) | 同上 |
35
+ | 版本:**v0.1 开发者预览版**开放测试 | [星岛 stnn《DeepSeek Harness 的开发者预览版(v0.1 版本)开放测试》](http://www.stnn.cc/detail/6a7dc390bcf6f20e311cbbce.html) |
36
+ | 同步开放 **npm 插件生态**(`@deepseek-ai/*` 命名空间) | IT之家、新浪财经 |
37
+ | 官方代码仓库:`https://github.com/deepseek-ai/deepseek-harness` | 官方 README |
38
+
39
+ ### 官方 README 中可确认的安装方式(来自仓库,非官网页)
40
+
41
+ - **从 npm 运行**:`npx @deepseek-ai/dsh web`(默认启动 Web UI,`http://127.0.0.1:3080`)
42
+ - **从源码运行**:`git clone https://github.com/deepseek-ai/deepseek-harness.git` → `pnpm install` → `pnpm run build` → `pnpm dsh web`
43
+ - **社区**:GitHub Discussions、Discord、插件仓库打 `dsh-plugin` topic 提升可发现性
44
+ - **许可证**:MIT
45
+
46
+ > 结论:`www.deepseek.com/harness/` 极可能是官方面向开发者的落地页(Landing/下载页),但具体文案、下载按钮、是否内嵌文档链接等**均未核实**。
47
+
48
+ ---
49
+
50
+ ## 2. 站点二:`https://deepseek-harness.github.io/deepseek-harness/`(文档站)
51
+
52
+ ### 2.1 站点元信息
53
+
54
+ - **技术栈**:VitePress(`vitepress ^1.6.4`),带 Mermaid 插件(`vitepress-plugin-mermaid`)。
55
+ - **站点标题**:`DeepSeek Harness`;描述:`用于构建 Agent Harness 的插件化 SDK`。
56
+ - **双语言(locales)**:
57
+ - `root`(默认)= 简体中文(`zh-CN`),导航栏显示 "技术预览" 标签。
58
+ - `en` = English(`en-US`),URL 前缀 `/en/`,显示 "Preview" 标签。
59
+ - **base path**:`/deepseek-harness/`(由构建环境变量 `DOCS_BASE` 控制,默认 `/`;GitHub Pages 部署时为 `/deepseek-harness/`)。
60
+ - **生成机制**:`website/docs.ts` 是"规范发布清单"(canonical publication manifest),把仓库各层的 Markdown 源文件映射为双语言路由;`cleanUrls: true`(无 `.html`/`.md` 后缀)。`srcDir: .generated` 说明构建时先把源文件投影到生成目录再交给 VitePress。
61
+ - **导航(顶部 nav)**:`入门 / 开发 / 参考`(英文 `Guide / Development / Reference`)。
62
+ - **搜索**:VitePress 本地搜索(local provider)。
63
+ - **社交链接**:GitHub `https://github.com/deepseek-ai/deepseek-harness`。
64
+ - **每页 "在 GitHub 上编辑此页"** 链接指向 `https://github.com/deepseek-ai/deepseek-harness/edit/master/<源文件>`。
65
+ - **首页行为**:`docs/user/index.md` 声明 `layout: false` + `<meta http-equiv=refresh content="0; url=./guide/quickstart">`,即首页 **302/refresh 重定向到 `/guide/quickstart`**。
66
+
67
+ ### 2.2 完整页面清单(sitemap / 路由表)
68
+
69
+ > 下列为**简体中文(root locale)路由**。英文 locale 在每个路由前加 `/en/`。站点根 = `https://deepseek-harness.github.io/deepseek-harness`。
70
+
71
+ #### 入门 + SDK(Guide / SDK)
72
+
73
+ | 路由 | 标题(zh / en) | 源文件 |
74
+ |---|---|---|
75
+ | `/`(首页,重定向到 quickstart) | DeepSeek Harness | `docs/user/index.md` |
76
+ | `/guide/quickstart` | 使用 Web UI / Use the Web UI | `docs/user/guide/index.md` |
77
+ | `/guide/providers` | 配置模型 / Configure models | `docs/user/guide/providers.md` |
78
+ | `/guide/python-sdk` | Python / Python | `docs/user/guide/python-sdk.md` |
79
+
80
+ #### 开发(Develop)—— 基础 / 框架能力 / 实战 / Cordis 教程
81
+
82
+ | 路由 | 标题(zh / en) | 源文件 |
83
+ |---|---|---|
84
+ | `/develop/basic/` | 第一个 Harness 插件 / Your first Harness plugin | `docs/user/develop/basic/index.md` |
85
+ | `/develop/basic/tool` | 开发一个 Tool / Build a tool | `docs/user/develop/basic/tool.md` |
86
+ | `/develop/basic/config` | 插件配置 / Plugin configuration | `docs/user/develop/basic/config.md` |
87
+ | `/develop/basic/publish` | 打包与安装插件 / Package and install | `docs/user/develop/basic/publish.md` |
88
+ | `/develop/framework/` | 插件与生命周期 / Plugin lifecycle | `docs/user/develop/framework/index.md` |
89
+ | `/develop/framework/service` | 服务与依赖 / Services and dependencies | `docs/user/develop/framework/service.md` |
90
+ | `/develop/framework/events` | 事件系统 / Event system | `docs/user/develop/framework/events.md` |
91
+ | `/develop/practice/` | 能力的三层拆分 / Capability layering | `docs/user/develop/practice/index.md` |
92
+ | `/develop/practice/llm-adapter` | LLM 适配器 / LLM adapter | `docs/user/develop/practice/llm-adapter.md` |
93
+ | `/develop/cordis-tutorial/` | 总览 / Overview | `docs/cordis-tutorial/index.md` |
94
+ | `/develop/cordis-tutorial/01-first-plugin` | 1. 第一个插件 / Your first plugin | `docs/cordis-tutorial/01-first-plugin.md` |
95
+ | `/develop/cordis-tutorial/02-lifecycle-and-effects` | 2. 生命周期与副作用 | `02-lifecycle-and-effects.md` |
96
+ | `/develop/cordis-tutorial/03-services` | 3. 服务 / Services | `03-services.md` |
97
+ | `/develop/cordis-tutorial/04-events` | 4. 事件 / Events | `04-events.md` |
98
+ | `/develop/cordis-tutorial/05-config` | 5. 配置 / Configuration | `05-config.md` |
99
+ | `/develop/cordis-tutorial/06-composition-and-hmr` | 6. 组合与热重载 / Composition and HMR | `06-composition-and-hmr.md` |
100
+ | `/develop/cordis-tutorial/07-into-the-harness` | 7. 进入 Harness / Into the harness | `07-into-the-harness.md` |
101
+
102
+ #### 参考(Reference)—— 概念 / 生成参考 / Cordis API / 开发手册 / 子系统
103
+
104
+ | 路由 | 标题(zh / en) | 源文件 |
105
+ |---|---|---|
106
+ | `/reference/` | 架构 / Architecture | `docs/architecture.md` |
107
+ | `/reference/cordis-primer` | Cordis 入门 / Cordis primer | `docs/cordis-primer.md` |
108
+ | `/reference/capability-seams` | 能力服务 / Capability services | `docs/capability-seams.md` |
109
+ | `/reference/agent-lifecycle` | Agent 生命周期 / Agent lifecycle | `docs/agent-lifecycle.md` |
110
+ | `/reference/tool-execution-pipeline` | Tool 执行 / Tool execution | `docs/tool-execution-pipeline.md` |
111
+ | `/reference/config-catalog` | 插件配置 / Plugin configuration(生成) | `docs/config-catalog.md` |
112
+ | `/reference/tool-catalog` | Tool Schema / Tool schemas(生成) | `docs/tool-catalog.md` |
113
+ | `/reference/persistence-catalog` | 持久化事件 / Persistence events(生成) | `docs/persistence-catalog.md` |
114
+ | `/reference/cordis-api/context` | Context | `docs/cordis-api/context.md` |
115
+ | `/reference/cordis-api/events` | Events | `docs/cordis-api/events.md` |
116
+ | `/reference/cordis-api/fiber` | Fiber | `docs/cordis-api/fiber.md` |
117
+ | `/reference/cordis-api/registry` | Plugin Registry | `docs/cordis-api/registry.md` |
118
+ | `/reference/cordis-api/service` | Service | `docs/cordis-api/service.md` |
119
+ | `/reference/cordis-api/inherited` | 继承接口面 / Inherited surface | `docs/cordis-api/inherited.md` |
120
+ | `/reference/cookbook/adding-a-package` | 新增 Package | `docs/cookbook/adding-a-package.md` |
121
+ | `/reference/cookbook/adding-a-tool` | 新增 Tool | `docs/cookbook/adding-a-tool.md` |
122
+ | `/reference/cookbook/adding-an-llm-adapter` | 新增 LLM Adapter | `docs/cookbook/adding-an-llm-adapter.md` |
123
+ | `/reference/cookbook/extension-cookbook` | 扩展模式 | `docs/cookbook/extension-cookbook.md` |
124
+ | `/reference/cookbook/adding-a-conversation-node` | 新增 Conversation Node | `docs/cookbook/adding-a-conversation-node.md` |
125
+ | `/reference/subsystems/` | 子系统 / Subsystems | `docs/subsystems/README.md` |
126
+
127
+ **子系统页**(`/reference/subsystems/<name>`,共约 40 页,按侧栏分组):
128
+
129
+ - **总览**:`README`(子系统)
130
+ - **内核与作用域**:`core`(核心)、`scope`(作用域)、`invariants`(运行时不变式)
131
+ - **会话与持久化**:`session`、`session-query`、`session-reference`、`session-title`、`session-projection`、`persistence`、`spill`、`session-telemetry`
132
+ - **模型与上下文**:`llm-streaming`、`token-meter`、`system-prompt`、`compaction`
133
+ - **执行与工具**:`tools`、`shell`、`subprocess`、`terminal`、`jobs`、`filesystem`、`lsp`、`code-runtime`、`web`、`skills`、`workflow`、`subagent`
134
+ - **策略与交互**:`approval`、`permission-presets`、`sandbox`、`plan`、`user-questions`、`commands`、`goal`、`schedule`
135
+ - **平台与接入**:`web-server`、`typert`、`client-modules`、`storage`、`workspace`、`settings`、`credentials`
136
+
137
+ ---
138
+
139
+ ## 3. 逐页详细内容(重点页)
140
+
141
+ ### 3.1 入门(Guide)
142
+
143
+ #### `/guide/quickstart` —— 使用 Web UI(`docs/user/guide/index.md`)
144
+
145
+ - **目的**:在 Web UI 跑通第一个任务。
146
+ - **内容要点**:
147
+ 1. 通过根 README 的 `pnpm dsh web`(或 `npx @deepseek-ai/dsh web`)启动服务器,命令会打印 URL。
148
+ 2. **配置模型**:打开 **Settings → Models**,输入 DeepSeek API key 保存;模型路由**无需重启**立即生效。其它 provider 见 `/guide/providers`。
149
+ 3. **选择工作区**:点击 **Choose workspace**,添加启动 `dsh` 的目录并选中;未选工作区前会话 composer 不可用。
150
+ 4. **运行任务**:如 "Summarize this repository and identify its main packages."。agent 可读写工作区文件、执行命令、委派工作、维护计划;在活动权限策略下需要审批的操作 Web UI 会先询问。
151
+ - 后续:配置模型 / Python SDK / 其它 CLI 模式 / 开发插件。
152
+
153
+ #### `/guide/providers` —— 配置模型(`docs/user/guide/providers.md`)
154
+
155
+ - **目的**:配置 DeepSeek、目录 provider、自定义 provider、图像输入、排障。
156
+ - **内容要点**:
157
+ - **DeepSeek**:Settings → Models,DeepSeek 卡片只有一个 API key 字段。
158
+ - **密钥只写**:保存后页面只收到脱敏描述符,永不回显明文;key 存于 `$DSH_HOME/.credentials.yaml`,settings 只保留其 credential reference。
159
+ - **目录 provider**:Add provider 可选 Anthropic / OpenAI 等,目录自带 endpoint、协议、模型列表。原生鉴权的 provider(Bedrock/Vertex/Azure/Codex)需要各自原生凭据,仅填 API key 不生效。
160
+ - **自定义 provider**:Add a custom provider,需小写 Provider ID、base URL、API 协议、凭据、至少一个模型。Provider ID 永久(请求、会话、默认模型、凭据引用都依赖它)。
161
+ - **Fetch available models**:走 OpenAI 兼容 `GET /models` 探测。
162
+ - **图像输入**:手输模型默认按纯文本;视觉模型需在 `$DSH_HOME/settings.yaml` 里给模型加 `input: [text, image]`,或用路由级 `defaultInput: [text, image]`;`defaultInput` 是 fallback 非覆盖,默认 `[text]`。目录 provider 用 `modelOverrides`(按 model id)。
163
+ - **排障码**:`MISSING_CREDENTIAL`、`UNKNOWN_MODEL`、401(fetch models)、图像被拒等。
164
+ - 高级:指向生成的 `config-catalog` 与 `dsh-llm-pi-ai` / `dsh-llm-deepseek` README。
165
+
166
+ #### `/guide/python-sdk` —— Python SDK 快速上手(`docs/user/guide/python-sdk.md`)
167
+
168
+ - **目的**:以编程方式替代 Web UI。
169
+ - **前置**:Python 3.10+;Git;Linux x64/arm64 或 macOS 14+ (arm64);DeepSeek 兼容端点与凭据;一个可被 agent 修改的隔离工作区。
170
+ - **安装**:
171
+ ```sh
172
+ git clone https://github.com/deepseek-ai/deepseek-harness.git
173
+ cd deepseek-harness
174
+ python -m venv .venv && . .venv/bin/activate
175
+ python -m pip install deepseek-harness-sdk
176
+ ```
177
+ (安装的运行时自带 Node.js,无需系统 Node。)
178
+ - **跑内置示例**:
179
+ ```sh
180
+ export DEEPSEEK_API_KEY=sk-your-key-here
181
+ # export DEEPSEEK_BASE_URL=http://127.0.0.1:8000/v1
182
+ # export DSH_MODEL=deepseek-v4-flash
183
+ # export DSH_SYSTEM_PROMPT='You are a helpful software engineer assistant.'
184
+ python examples/jsonrpc-agent/minimal.py --workspace /abs/ws --session-root /abs/sessions --session-id example-001 "Inspect the repository and fix the failing tests."
185
+ ```
186
+ - **在自有程序里调用**:
187
+ ```python
188
+ from pathlib import Path
189
+ from deepseek_harness import DeepSeekHarness
190
+ config = Path("examples/jsonrpc-agent/minimal.cordis.yml").resolve()
191
+ with DeepSeekHarness(provider="deepseek-official", model="deepseek-v4-flash",
192
+ max_tokens=49_152, cwd=str(workspace), session_root=str(sessions),
193
+ cordis=str(config)) as harness:
194
+ result = harness.run("...", session_id="example-001")
195
+ print(result.final_response)
196
+ ```
197
+ - `DeepSeekHarness` 惰性启动 bundled runtime,context manager 退出前复用;复用同一 harness+session id 会保留会话拥有的 Bash 进程(cwd、环境变量、shell 函数)。
198
+ - **示例组合事实表**:系统提示词 fallback 为 "You are a helpful software engineer assistant.";模型 `--model → DSH_MODEL → deepseek-v4-flash`;模型可见工具仅 `bash` 与 `str_replace_editor`;bash 超时 300s;编辑器输出上限 16000 字符;compaction 关闭;filesystem 为 bare local backend;会话持久化为未压缩 JSONL(`DSH_SESSION_ROOT`)。
199
+ - **安全警告**:该组合用 `danger-full-access`,仅应在一次性 checkout/容器内运行;持久 PTY 后端要求 POSIX,**不支持 Windows agent**。
200
+
201
+ ### 3.2 开发基础(Develop / Basic)
202
+
203
+ #### `/develop/basic/` —— 第一个 Harness 插件(`docs/user/develop/basic/index.md`)
204
+
205
+ - **核心定义**:插件是导出 `apply` 函数的 TypeScript 模块,框架加载时调用 `apply` 并传入 `ctx`:
206
+ ```ts
207
+ import type { Context } from '@deepseek-ai/cordis'
208
+ export const name = 'my-plugin'
209
+ export function apply(ctx: Context) { /* 在此注册能力 */ }
210
+ ```
211
+ - **在 cordis.yml 中注册**(本地 overlay,插件路径必须绝对路径):
212
+ ```yaml
213
+ - insert:
214
+ - id: hello
215
+ name: '/absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts'
216
+ ```
217
+ 启动:`pnpm dsh web --patch ./scratch-plugin/cordis.yml`,打开 `http://127.0.0.1:3080`。
218
+ - **自动清理**:通过 `ctx` 注册的一切(事件监听、工具、定时器)在插件卸载时自动清理;显式资源用 `ctx.effect()`:
219
+ ```ts
220
+ ctx.effect(() => { const t = setInterval(...); return () => clearInterval(t) })
221
+ ```
222
+ - **声明依赖**:`export const inject = ['tools']`;框架会等所有必需服务就绪后再加载。
223
+ - **三种插件形态**:
224
+ 1. **函数形式**(`export function apply(ctx) {}`)——最常用。
225
+ 2. **对象形式**(`export default { name, inject, apply(ctx){} }`)。
226
+ 3. **类形式**(`export default class MyService extends Service { static inject=['tools']; constructor(ctx){ super(ctx,'myService') } }`)——提供 service 给其它插件时用。
227
+
228
+ #### `/develop/basic/tool` —— 开发一个 Tool(`docs/user/develop/basic/tool.md`)
229
+
230
+ - **工具 DSL**(`defineTool`):
231
+ ```ts
232
+ import { defineTool } from '@deepseek-ai/dsh-tools'
233
+ export const name = 'greet-tool'
234
+ export const inject = ['tools']
235
+ export function apply(ctx: Context) {
236
+ ctx.tools.register(defineTool({
237
+ name: 'greet',
238
+ description: 'Greet someone by name.',
239
+ parameters: { name: { type: 'string', required: true, description: 'The name to greet' } },
240
+ output: {
241
+ schema: { type: 'string' },
242
+ render: (_args, value) => [{ type: 'text', text: value }],
243
+ },
244
+ async execute(args) { return `Hello, ${args.name}!` },
245
+ }))
246
+ }
247
+ ```
248
+ - `defineTool` 从 `parameters` 推断并校验 `args`;`execute` 返回 `output.schema` 声明的 canonical 值;`output.render` 把 canonical 值转为模型可见内容。
249
+ - **测试**:`Use the greet tool to greet Ada.` → 模型调用 `greet`,收到 `Hello, Ada!`。
250
+ - 后续指向 `/reference/cookbook/adding-a-tool`(工具作者参考)与 `/develop/practice/`(三层能力拆分)。
251
+
252
+ #### `/develop/basic/config` —— 插件配置(`docs/user/develop/basic/config.md`)
253
+
254
+ - **定义 Config 类型 + 同名 Schemastery schema**,默认值写在 schema 字段上:
255
+ ```ts
256
+ import Schema from '@deepseek-ai/schemastery'
257
+ export interface Config { greeting: string; maxRetries: number; verbose?: boolean }
258
+ export const Config: Schema<Config> = Schema.object({
259
+ greeting: Schema.string().default('Hello'),
260
+ maxRetries: Schema.number().default(3),
261
+ verbose: Schema.boolean().default(false),
262
+ })
263
+ export function apply(ctx: Context, config: Config) { console.log(config.greeting) }
264
+ ```
265
+ - 注意:**不要**导出普通对象作为 `Config`,它不实现 Cordis 要求的 Standard Schema 接口。
266
+ - **cordis.yml 传配置**:
267
+ ```yaml
268
+ - insert:
269
+ - id: hello
270
+ name: './src/my-plugin.ts'
271
+ config: { greeting: 'Hi there', maxRetries: 5 }
272
+ ```
273
+ - **schema 校验**在插件加载期运行,非法配置使加载失败并报可操作错误("Fail loudly")。
274
+ - **设计原则**:任何"两个部署可能想不同设置"的值都必须是配置字段(禁止硬编码可调值);自包含约束放 schema,引用其它服务/资源的约束用依赖注入。
275
+ - **HMR**:配置改动会热替换插件(旧实例卸载、新实例加载),因为注册是 effect,替换不会残留旧实例的注册。
276
+
277
+ #### `/develop/basic/publish` —— 打包与安装插件(`docs/user/develop/basic/publish.md`)
278
+
279
+ - **两个概念、两份 manifest**(都用 `package.json`,但 `dsh` key 不同):
280
+ - **bundle**:发布配置层的 npm 包,manifest 声明 `dsh.bundle`("这个包贡献什么":一个 insert/override 插件行的 patch 文件)。
281
+ - **profile**:`$DSH_HOME/profiles/<name>` 下的目录,描述一个可运行组合,manifest 声明 `dsh.profile`("哪些 bundle 按什么顺序组合")。**二者互斥,一个包不能既是 bundle 又是 profile。**
282
+ - **bundle manifest 示例**:
283
+ ```json
284
+ {
285
+ "name": "dsh-hello-plugin", "version": "0.1.0", "type": "module",
286
+ "main": "index.js", "files": ["index.js", "cordis.patch.yml"],
287
+ "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
288
+ }
289
+ ```
290
+ `cordis.patch.yml`(插件行按包名引用,走 Node 解析):
291
+ ```yaml
292
+ - insert:
293
+ - id: hello
294
+ name: dsh-hello-plugin
295
+ ```
296
+ - 无 `dsh.bundle` 的包仍可安装,但只作为普通依赖,`dsh plugin` 打印警告且不激活层。
297
+ - **安装到 profile**:`dsh plugin --profile demo add ./hello-plugin`(转发到 pnpm,支持所有 pnpm 动词)。
298
+ - 首次使用初始化 profile(首个 bundle 为 `@deepseek-ai/dsh-base`),生成:
299
+ ```json
300
+ { "name": "dsh-profile-demo", "private": true,
301
+ "dependencies": { "dsh-hello-plugin": "link:/path/to/hello-plugin" },
302
+ "dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "dsh-hello-plugin"] } } }
303
+ ```
304
+ - `dsh --profile demo --dump-config` 显示 `# == dsh-hello-plugin` 层;`dsh --profile demo` 启动;`dsh plugin --profile demo remove dsh-hello-plugin` 移除依赖与层。
305
+ - **加载顺序(层序)**:空根之上依次应用:① profile `dsh.profile.bundles` 列表顺序(`dsh-base` 最先)→ ② profile 自有 `cordis.patch.yml` → ③ 机器级 `$DSH_HOME/cordis.patch.yml` → ④ 每个 `--patch <path>` overlay(argv 顺序)。**后层按 row 取胜**,patch 替换整行 `config`(不深合并)。
306
+ - **GitHub 安装的 build-script 陷阱**:`dsh plugin --profile demo add github:you/hello-plugin` 拉的是**源码**;作者需提供自包含 `prepare` 脚本(`turtle-ui` 是范例),用户需在 profile 的 `pnpm-workspace.yaml` allowlist `allowBuilds`(pnpm ≥10 默认拒绝 git 依赖的 prepare)。或直接发布 npm 预构建产物 / `pnpm pack` tarball。
307
+
308
+ ### 3.3 框架能力(Develop / Framework)
309
+
310
+ #### `/develop/framework/` —— 插件与生命周期(`docs/user/develop/framework/index.md`)
311
+
312
+ - **Fiber 状态机**:
313
+ ```
314
+ PENDING → LOADING → ACTIVE
315
+ ↘ FAILED
316
+ ACTIVE → UNLOADING → DISPOSED
317
+ ```
318
+ - PENDING(声明但依赖未就绪)/ LOADING(`apply` 执行中)/ ACTIVE / FAILED(`apply` 抛错)/ UNLOADING / DISPOSED。
319
+ - **依赖驱动加载**:`inject` 等待服务;服务消失(如 provider 替换)时插件自动卸载(ACTIVE→DISPOSED),服务回归时重新加载。
320
+ - **自动清理**:框架跟踪并 dispose:`ctx.on(event, handler)`、`ctx.tools.register(tool)`、`ctx.llm.registerAdapter(names, adapter)`、`ctx.effect(() => cleanup)`。卸载时 disposer **逆序**执行,多个异步 disposer 并发执行(无串行完成保证);顺序相关的清理放同一个 `ctx.effect()` 内串行 await。
321
+ - **嵌套上下文**:`ctx.plugin(childPlugin)` 创建子 Fiber,继承父上下文但独立生命周期。
322
+ - **手动 dispose**:`const fiber = ctx.plugin(myPlugin); await fiber.dispose()`(保证:移除全部注册、递归卸载子插件、promise 在所有异步清理完成后 resolve)。
323
+ - **HMR**:加载 `@deepseek-ai/cordis-plugin-hmr` 后编辑源码触发 unload 旧插件 → 载入新代码 → 运行新 `apply`。
324
+
325
+ #### `/develop/framework/service` —— 服务与依赖(`docs/user/develop/framework/service.md`)
326
+
327
+ - **什么是服务**:`tools`、`llm`、`agents` 都是服务,是挂在 `ctx` 上的命名能力(`ctx.tools` / `ctx.llm` / `ctx.agents`)。任何插件都能提供或消费服务。
328
+ - **消费**:`export const inject = ['tools']`,`apply` 运行时 `ctx.tools` 已就绪;未就绪则等待。
329
+ - **提供(类形式)**:
330
+ ```ts
331
+ import { Service, type Context } from '@deepseek-ai/cordis'
332
+ export default class MetricsService extends Service {
333
+ static inject = ['llm']
334
+ constructor(ctx: Context) { super(ctx, 'metrics') }
335
+ record(event: string, value: number) { /* ... */ }
336
+ }
337
+ ```
338
+ 消费者随后用 `inject = ['metrics']` 访问 `ctx.metrics.record(...)`。
339
+ - **类型声明(declaration merging)**:
340
+ ```ts
341
+ declare module '@deepseek-ai/cordis' { interface Context { metrics: MetricsService } }
342
+ ```
343
+ - **依赖行为**:必需依赖用 `inject`;可选依赖省略 `inject`,用 `ctx.get('metrics')` 查询(返回 `undefined` 时安全跳过)。必需服务消失→依赖插件 dispose,服务回归→重新加载。
344
+ - **服务隔离(isolate)**:`cordis.yml` 可用 `@deepseek-ai/cordis-plugin-group` + `group: true` + `isolate: { shell: true }` 让不同插件组看到独立的同名服务实例(示例中 group-a/group-b 各自 `timeoutMs: 5000` / `60000` 互不影响)。
345
+ - **内置服务**:由仓库生成到各 subsystem 页(`subsystems/core.md`)的 "generated regions",开发插件时以这些 + TypeScript 接口为准,不维护第二份静态列表。
346
+
347
+ #### `/develop/framework/events` —— 事件系统(`docs/user/develop/framework/events.md`)
348
+
349
+ - **基本用法**:`ctx.on('event-name', payload => ...)` 监听;`ctx.emit('event-name', payload)` 派发。
350
+ - **四种事件模式**(详见 Cordis API):
351
+ - `emit`(广播):同步执行,忽略返回值。
352
+ - `bail`(短路):按序执行,第一个非 `null/false/undefined` 返回值成为最终结果。
353
+ - `serial`(有序):按注册序 await,首个非 null/false/undefined 结果停止后续。
354
+ - `waterfall`(管道):每个监听器包装下游结果;**必须调用 `next()` 委派**,否则短路。
355
+ - **类型化事件(declaration merging)**:
356
+ ```ts
357
+ declare module '@deepseek-ai/cordis' {
358
+ interface Events {
359
+ 'my-plugin/ready': (payload: { id: string }) => void
360
+ 'my-plugin/transform': (input: string, next: () => Promise<string>) => Promise<string>
361
+ }
362
+ }
363
+ ```
364
+ - **命名规范**:Cordis 事件用 `namespace/action`,如 `agent/step`、`agent/request`、`agent/request-error`、`tools/result`、`session/event`。
365
+ - **与持久化会话事件的区分**:`turn/*`、`step/*`、`tool/call`、`tool/result`、`compaction/*` 是 **durable session-event 类型**(不是同名 Cordis 事件);要观察它们就监听 `session/event` 并检查 `event.type`。
366
+ - **监听器是 effect**:`ctx.on()` 注册的监听器随插件卸载自动移除。
367
+ - **示例(日志插件)**:监听 `tools/result`,打印工具名/参数/结果文本。
368
+
369
+ #### `/develop/practice/` —— 能力的三层拆分(`docs/user/develop/practice/index.md`)
370
+
371
+ - **概念**:当能力通用到需要可替换 provider(如 Bash 执行)时,拆成三个角色:**Service Definition / Service Provider / Consumer**。三者在需独立演化/替换时放独立包;完整能力是它的 **seam(接缝)**,单个角色不是 seam。
372
+ - **Bash 例子**:
373
+ - Service Definition = `dsh-shell`(定义 Cordis 服务 + Bash 请求/结果类型)
374
+ - Service Provider = `dsh-bash-local`(本机执行命令)
375
+ - Consumer = `dsh-tool-bash`(把能力暴露为模型可调用工具),`inject: ['shell']`
376
+ - **收益**:可换 provider(`cordis.yml` 换一行包名,Definition 与 tool 不变);独立演化;解耦(Provider 与 Consumer 互不依赖,都只依赖 Definition)。
377
+ - **教程(三步)**:写 Definition(抽象类 `MyCapService extends Service` + `MyCapRequest`/`MyCapResult` 类型)→ 写 Provider(`ctx.plugin(MyCapLocal)`)→ 写 Consumer(`inject: ['tools','myCap']` 注册 `defineTool`)→ `cordis.yml` 组合两行。
378
+ - **设计要点**:不要过早拆分;Definition 拥有 Request/Result 类型;"Explicit > implicit"(用显式 `resolve(request): Spec` 步骤解析默认值,而非在 `run()` 里藏 `?? default`)。
379
+
380
+ #### `/develop/practice/llm-adapter` —— LLM 适配器(`docs/user/develop/practice/llm-adapter.md`)
381
+
382
+ - **总览**:适配器 extends `LlmAdapter` 并实现 `stream()`,把 Harness 的 provider-neutral 请求转成 provider API 调用,再把响应转回 Harness chunks。
383
+ - **最小实现**:
384
+ ```ts
385
+ import { LlmAdapter, type GenerateOptions, type StreamChunk } from '@deepseek-ai/dsh-llm'
386
+ class MyAdapter extends LlmAdapter {
387
+ async *stream(options: GenerateOptions): AsyncIterable<StreamChunk> { /* ... */ }
388
+ }
389
+ export const inject = ['llm']
390
+ export function apply(ctx, config) { ctx.llm.registerAdapter(config.providers, new MyAdapter(config.apiKey)) }
391
+ ```
392
+ - **StreamChunk 协议**(关键规则):
393
+ - `{ type: 'block-start', index, blockType: 'text'|'tool-call' }` 开始每个内容块;`{ type: 'text-delta', index, text }` 流式文本;`{ type: 'block-end', index, block }` 结束并给完整块。
394
+ - 工具调用块用 `tool-call-delta`(`argumentsDelta` 携带原始 JSON,可一次或分多段)+ `block-end`(含 `CallId`、`name`、`arguments`)。
395
+ - `{ type: 'usage', usage: { inputTokens, outputTokens } }`(在 finish 之前);`{ type: 'finish', reason: { kind: 'stop' | 'tool-calls' } }` 是最后一块。
396
+ - 每个 `block-start` 配一个 `block-end`;`index` 从 0 递增。
397
+ - **GenerateOptions**:含 model、adapter 自有 reasoning-effort id、会话历史、系统提示词、工具 schema、生成参数、stop sequences、abort signal;以 `@deepseek-ai/dsh-llm` 导出的类型为准。无法满足的字段抛 `LlmError`(带稳定 code),不要静默丢弃。
398
+ - **resolveModel / listModels**:`resolveModel(provider, model, signal?)` 返回精确 provider/model 身份 + 可选 `context`/`reasoning` 元数据;`listModels()` 向选择器广告模型。
399
+ - **cordis.yml 用法**:`apiKey: !!js process.env.MY_API_KEY`,`agent-loop` 行里 `agents: [{ id, provider, model }]`。
400
+ - **参考实现**:`packages/llm/llm-deepseek/`(OpenAI 兼容格式)、`packages/llm/llm-pi-ai/`(不同 API 格式)。
401
+ - **错误处理**:传输/协议失败抛 `LlmError`(稳定 code);每次 HTTP 请求必须合并 `attributionHeaders()` 并转发 `options.signal`。
402
+
403
+ ### 3.4 Cordis 教程(`/develop/cordis-tutorial/*`)
404
+
405
+ - **总览**(`index.md`):Cordis 是 Harness 底层的 vendored 插件框架,"每个能力都是挂到共享 context 的插件"。**无需 API key**,全程 keyless。运行方式(在 `tmp/cordis-tutorial` 内):
406
+ ```sh
407
+ node --import tsx ../../vendor/cordis/bin.js
408
+ ```
409
+ 该单文件 launcher 创建根 `Context`、挂载 Loader、加载 `./cordis.yml`。
410
+ - **七章**:① 第一个插件(插件是函数,loader 挂载)② 生命周期与副作用(Cordis 管理的注册随插件卸载撤销)③ 服务(在 `ctx` 暴露能力并用 `inject` 依赖)④ 事件(类型化事件、广播派发、waterfall 短路)⑤ 配置(`cordis.yml` 校验配置,坏输入 fail loud)⑥ 组合与热重载(配置文件即插件树、HMR、诊断永不加载的插件)⑦ 进入 Harness(对真实 harness 服务注册模型可调用工具)。
411
+
412
+ ### 3.5 参考(Reference)
413
+
414
+ #### `/reference/` —— 架构(`docs/architecture.md`)【核心】
415
+
416
+ - **Cordis**:dsh 底下的框架;插件向共享 context 贡献服务、类型化事件、可逆 effect。产品的**每个部分都是插件**(模型适配器、工具注册表、会话日志、agent loop 本身),均可从配置替换。**没有需要 patch 的特权核心**。
417
+ - **Profiles 与 bundles**:
418
+ - **profile** = Harness home 里的命名组合,列出所叠加的 bundle、持有 out-of-tree 插件、保留用户自己的 `cordis.patch.yml`。`web` 与 `headless` 作为模板发布。
419
+ - **bundle** = Cordis 配置行 + 其挂载代码的分发格式。
420
+ - 各自在 `package.json` 的 `dsh` 字段声明:`dsh.profile`(profile 的 bundle 列表)与 `dsh.bundle`(指向 patch 文件)。
421
+ - `dsh-base` 是每个 profile 的第一层(模型适配器、工具、持久化、沙箱/审批策略、设置、凭据、遥测);`dsh-web-app` 加浏览器应用;`dsh-headless` 加无服务器的 one-shot runner。
422
+ - 查看实际启动的树:`dsh --profile web --dump-config`。
423
+ - **核心包表**:`core/session`→`ctx.sessions`(append-only `SessionEvent` 日志 + 内存 store)、`core/system-prompt`→`ctx.systemPrompt`(prompt 段与 tool schema 组装)、`core/tools`→`ctx.tools`(scoped 工具注册表 + 守卫执行管线)、`core/agent`→`ctx.agents`(`Agent` 接口 + 活跃注册表 + `agent/*` 事件)、`core/agent-loop`→`ctx.agentLoop`(默认 driver)、`core/scope`(库,无 key)、`llm/llm`→`ctx.llm`(消息/流词汇 + 适配器 seam)。
424
+ - **事件即扩展点**:会话事件(durable 事实,经 `session/event` 广播)、Agent 事件(`agent/*`,携带活跃 `Agent`)、能力事件(`fs/*`、`tools/*`、`telemetry/*`,给 seam 挂策略/适配器)。`event-producer-consumer.md` 列每个事件的生产者/消费者。
425
+ - **Turn flow(转流)**:step = 一次模型请求 + 其调用的工具;turn = 0..n step。给出完整事件序列:
426
+ ```
427
+ turn/start → claim input → assemble prompt+tools → agent/pre-step (waterfall)
428
+ → step/start → user/message → derive history → agent/request (waterfall)
429
+ → llm/stream → assistant/chunk* → assistant/message
430
+ → tool/call* → tools/pre-execute → tools/execute → tools/post-execute → tool/result*
431
+ → step/end → (下一个 step 或) agent/turn-stopping (serial) → turn/end
432
+ ```
433
+ - `agent/pre-step`、`agent/request`、`llm/stream`、三个 `tools/*` 是 waterfall(必须 `next()`);`agent/turn-stopping` 是 serial 且无 `next()`。
434
+ - **会话日志**:模型所见上下文的唯一来源;`deriveMessages()` 从日志投影历史;"**Model-visible means logged**"(模型可见 ⟺ 已记录),新增模型可见输入必须新增 session event。
435
+ - **能力接缝(capability seams)**:seam = 三角色可替换能力(Definition/Provider/Consumer);换一个 provider 即可改变整个产品(如把 fs/subprocess 指向远程沙箱,Bash/PTY/LSP 一并迁移)。
436
+ - **新行为去哪**(扩展点速查表):加模型 provider→`ctx.llm` 注册适配器;加模型可见能力→`ctx.tools` 注册;给单个会话换能力集→agent preset + `isolate`;加 shell→`ctx.shell`;加持久终端→`ctx.terminals` + `dsh-tool-terminal`;加人工命令→`ctx.commands`;加后台任务→`ctx.jobs`(`job_*` 工具);加文件系统/策略→`ctx.fs` provider 或 `fs/*` 事件;限制子进程→`ctx.sandbox`;拦截请求/工具/回合→`agent/*` 或 `tools/*` 事件;加模型可见上下文→`agent.inject()`;加 UI/编辑器集成→驱动 `ctx.agents` + 渲染 `session/event`;加 Web 客户端 Chat 节点→`ConversationNodeDefinition` + keyed renderer;加持久会话状态→扩展 `SessionEventMap`;生成会话标题→`ctx.sessionTitle` provider;管理同会话目标→`ctx.goals`;fork 会话→`ctx.sessions.fork(...)`;作用域到单 agent→该 agent 的 `agent.ctx`。
437
+
438
+ #### `/reference/cordis-primer` —— Cordis 入门(`docs/cordis-primer.md`)
439
+
440
+ - **五个核心理念**:① 插件是实现 Service 的对象(函数 + 可选 `inject`/`apply(ctx)`,或 `Service` 子类);② context 是服务的仓库(服务认领稳定 `ctx.<key>`,如 `ctx.tools`/`ctx.llm`/`ctx.sessions`);③ 用 `inject` 声明依赖(按服务需求表达加载顺序,而非手动引导顺序);④ 类型化事件用于通信(`emit`/`waterfall`/`parallel`/`serial`);⑤ 注册是可逆 effect(prompt 段、tool schema、适配器、provider、监听器都经 `ctx.effect()`/`ctx.on()` 安装,可逆卸载)。
441
+ - **派发模式表**:`emit`(不 await、注册序、无返回)、`waterfall`(不 await、注册序、有返回)、`parallel`(await、并发、无返回)、`serial`(await、注册序、有返回)。派发模式是事件公共契约的一部分,新事件用 `@mode` 标注。
442
+ - **waterfall 语义**:around-middleware,监听器收 `(...args, next)`;`next()` 委派,不调 `next()` 短路;`prepend: true` 让监听器先于普通注册运行。
443
+ - **Loader 配置**:`@deepseek-ai/cordis-plugin-include` 把 `!!js` 解析为表达式节点;Loader 在注入激活后、针对插件上下文插值 entry 的 `config`,并在每次挂载决策时针对 loader 上下文插值 `disabled`;其余元数据保持字面量。
444
+ - **实用规则**:工具管线事件属于 `ctx.tools`、模型流式属于 `ctx.llm`、活跃 agent 协调属于 `ctx.agents`;拦截/策略用事件,直接能力调用用服务方法;每个注册要有 disposer。
445
+
446
+ #### `/reference/cordis-api/context` —— Context(生成自 `vendor/cordis/src/context.ts`)
447
+
448
+ - Context 是核心 Cordis 对象;`ctx` 是 proxy,普通属性读走服务解析器;`extend()`/`isolate()`/`intercept()` 创建 scoped 子 context 而不改父级。
449
+ - 关键成员:
450
+ - `ctx.extend(meta?)` 子 context(原型继承父属性,`meta` 自有属性遮蔽继承属性)
451
+ - `ctx.isolate(name, label?)` 为 `name` 服务建立独立 scope
452
+ - `ctx.intercept(name, config)` 服务级 intercept 配置合并
453
+ - `ctx.root`(应用根 context,@experimental)、`ctx.baseUrl`、`ctx.events`(事件总线)、`ctx.logger`、`ctx.reflect`、`ctx.registry`
454
+ - **服务仓库**:`ctx.get(name, strict?)`(无 inject 要求读服务,默认只返回当前活跃 fiber 提供的实现)、`ctx.set(name, value)`(仅提供服务者本人可写)、`ctx.provide(name, value)`(注册服务实现,返回 disposer)、`ctx.accessor(name, options)`(计算属性 get/set 钩子)、`ctx.mixin(name, mixins)`(把服务的成员直接暴露到 `ctx`,如 `ctx.on` → `ctx.events.on`)。
455
+ - 静态:`Context.is(value)` 跨 realm 判断是否 Cordis context。
456
+
457
+ #### `/reference/cordis-api/service` —— Service(生成自 `vendor/cordis/src/service.ts`)
458
+
459
+ - `Service` 是 context 服务的基类;子类在构造函数调用 `super(ctx, name)`,服务立即注册并随 owning fiber 自动移除。`service.name` 为注册名。
460
+ - 静态符号成员(协议槽):`Service.init`(构造后运行的实例方法)、`Service.check`(传给 `ctx.provide()` 的可用性谓词)、`Service.config`(phantom intercept-config 类型参数)、`Service.invoke`(使服务可调用,如 `ctx.logger()`)、`Service.extend`、`Service.tracker`、`Service.resolveConfig`。
461
+
462
+ #### `/reference/cordis-api/events` —— Events(生成自 `vendor/cordis/src/events.ts`)
463
+
464
+ - 派发方法(混入每个 context):`ctx.parallel`(并发 await 所有监听器)、`ctx.emit`(同步、忽略返回)、`ctx.serial`(按序 await 至首个 bail)、`ctx.bail`(按序同步至首个 bail)、`ctx.waterfall`(末参为 `next` 续延)。
465
+ - 注册:`ctx.on(name, listener, options?)`(返回 disposer)、`ctx.once(...)`(首次调用后自动 dispose)。
466
+ - `EventOptions`:`{ prepend?: boolean; global?: boolean }`。
467
+ - `DispatchMode` 类型:`'emit' | 'parallel' | 'serial' | 'bail' | 'waterfall'`。
468
+
469
+ #### `/reference/cordis-api/registry` —— Plugin Registry(生成自 `vendor/cordis/src/registry.ts`)
470
+
471
+ - `ctx.inject(deps, callback)`:`ctx.plugin({ inject, apply: callback })` 的简写;必需服务变化时卸载并重跑。
472
+ - `ctx.plugin(plugin, ...args)`:加载函数/类/`{apply}` 对象插件;返回 Fiber(await 它等待加载完成,配置/启动错误会 reject)。
473
+ - `Plugin` 类型(三种入口形态)+ `Plugin.Base` 元数据:`name?`、`Config?`(StandardSchemaV1 validator)、`inject?`、`provide?: string|string[]`、`intercept?`。
474
+ - `Inject` 类型:数组形式(无 intercept 配置)或对象形式(服务名 → 可选 intercept 配置)。
475
+
476
+ #### `/reference/cordis-api/fiber` —— Fiber(生成自 `vendor/cordis/src/fiber.ts`)
477
+
478
+ - Fiber = 一个已加载插件实例(生命周期状态、校验后的配置、已注册 effect)。`ctx.fiber` 是当前 fiber;`ctx.effect()` 委托给它。
479
+ - `ctx.effect(execute, label?)`:立即执行 `execute`,其产生的 disposer 在 disposer 被调用或 fiber 卸载时(逆序)执行;重复调用 disposer 是 no-op;已 dispose 抛 `CordisError('INACTIVE_EFFECT')`。
480
+ - Fiber 类成员:`uid`(root 为 0,dispose 后为 null)、`ctx`、`config`、`state`(状态转移发 `internal/status`)、`dispose()`、`store`、`inertia`、`name`、`assertActive()`、`getEffects()`、`await()`、`restart()`、`update(config, noSave?)`(先跑 `internal/update` waterfall,HMR/更新钩子可 veto 或替换重启)。
481
+ - `Effect` 类型(单 disposer / promise / (async) iterable)、`Disposable`、`EffectMeta`、`CordisError`(稳定 code)、`ValidationError`(StandardSchemaV1 校验失败)。
482
+
483
+ #### `/reference/cordis-api/inherited` —— 继承接口面(生成)
484
+
485
+ - 列出插件可见的框架级 `ctx` 成员与事件(vendor 层):
486
+ - 成员:`ctx.on/once`、`ctx.emit/parallel/serial/bail/waterfall`、`ctx.plugin/inject`、`ctx.effect`、`ctx.get/set/provide/accessor/mixin`、`ctx.extend/isolate/intercept`、`ctx.root/scope/fiber/registry/reflect/events/logger`、`ctx.timer`(+ interval/timeout/throttle/debounce)、`ctx.loader`、`ctx.hmr`。
487
+ - 事件:`internal/plugin`、`internal/status`、`internal/service`、`internal/update`(waterfall)、`internal/get`、`internal/set`、`internal/listener`、`internal/dispatch`、`hmr/change`、`hmr/reload`、`exit`、`loader/config-update`、`loader/entry-init`、`loader/partial-dispose`、`loader/patch-context`。
488
+
489
+ #### `/reference/capability-seams` —— 能力服务(生成,`docs/capability-seams.md`)
490
+
491
+ - 一份 **Mermaid 图 + 表格**,列出全部 `ctx.*` 服务:Role(`core` / `seam` / `bundle`)、Owner 包、实现包、直接消费者、companion 插件与说明。
492
+ - 关键 seam 举例(表格行):`ctx.llm`(seam;`llm-deepseek`/`llm-pi-ai`/`llm-replay` 实现)、`ctx.shell`(seam;`bash-local`/`bash-sandbox`/`pwsh-local`)、`ctx.fs`(seam;`fs-local`/`fs-sandbox`/`fs-e2b`)、`ctx.subprocess`、`ctx.sandbox`、`ctx.terminals`、`ctx.web`(`web-search-exa/perplexity/deepseek` + `web-fetch-http`)、`ctx.compaction`、`ctx.subagents`、`ctx.skills`、`ctx.sessionPersistence`(`jsonl`/`sqlite`)、`ctx.sessionQuery`、`ctx.storage`、`ctx.settings`、`ctx.credentials`、`ctx.workflowEngine`、`ctx.lsp`、`ctx.jobs` 等。core 服务如 `ctx.tools`、`ctx.sessions`、`ctx.systemPrompt`、`ctx.agents`、`ctx.agentLoop`(bundle)。
493
+ - 完整消费者/实现关系图可作插件开发者的"服务地图"。
494
+
495
+ #### `/reference/config-catalog` —— 插件配置目录(生成,`docs/config-catalog.md`,约 3151 行)
496
+
497
+ - 收录**每个可加载 harness 包**的 `config:` 块可设字段(含 JSDoc),是 **deployment 轴**的参考。每个条目:`Requires:`(该插件 inject 的服务键)、配置声明块、`Depends on:`、`Source:`(源码位置)。
498
+ - 示例(`@deepseek-ai/dsh-acp`:`provider?`/`model?`/`stream?`;`dsh-acp-demo`:`provider`/`model`/`maxParallelToolCalls`/`persona`/`toolOrder`/`tools`/`dshHome`/`sessionTitle`/`persistenceRoot`/`packChunks`/`workspaceContext`/`skills`/`toolBash`/`jobs`/`toolJobs`/`goals` 等)。
499
+ - 注意:运行时 schema 刻意排除的字段是 runtime-only seam(JSDoc 会注明),**不能从 cordis.yml 设置**。vendored cordis 插件(hmr、console logger)不在目录内。
500
+
501
+ #### `/reference/tool-catalog` —— Tool Schema 目录(生成,`docs/tool-catalog.md`,约 1873 行)
502
+
503
+ - 收录**每个出厂插件贡献给 `ctx.tools` 的模型可见工具**:`name`、`description`、JSON-Schema `parameters`。该生成器会真实 boot 每个工具插件并读 `ctx.tools.schemas()`(因为 schema 无法静态得知)。
504
+ - **工具包映射表**(模型可见名 → 包 → Requires → 写入/影响 → 别名 → 部署说明)。示例:`bash`(dsh-tool-bash)、`pwsh`、`edit/read/read_image/write`(dsh-tool-fs)、`glob/grep`(dsh-tool-fs-search)、`web_fetch/web_search`(dsh-tool-web)、`subagent`(别名 `subagent_fork`)、`todo_write`、`run_code`(dsh-tools 保留传输)、`exit_plan_mode`、`ask_user_question`、`create_goal/get_goal/update_goal`、`job_kill/job_list/job_output`、`terminal_*`、`lsp`、`workflow`、`ralph`、`skill`、`cordis_*`(自引用工具集,默认不挂载)等。
505
+ - 每个工具随后给出完整 JSON Schema。
506
+
507
+ #### `/reference/cookbook/adding-a-tool` —— Tool 作者参考(`docs/cookbook/adding-a-tool.md`)【重要】
508
+
509
+ - **最小形态**(同 `defineTool`)。
510
+ - **`execute()` 契约规则**:
511
+ - 参数已被校验:`defineTool` 在 `execute` 前对 `arguments` 做运行时校验(类型、必填键、字面约束、exact-one 联合、嵌套值);DSL 不表达的约束(非空串、正数、跨字段规则)仍需自检。
512
+ - 注册借用你的 readonly 定义;不可在注册后改 schema/替换回调;热替换 = dispose 拥有 effect 再注册新工具。
513
+ - 执行身份受保护:`arguments` 以 detached lossless JSON 物化并冻结;`exec.token`、`callId`、`name`、`agent`、`signal` 不可变;`parent` 仅身份。`args` 视作只读输入。
514
+ - 声明并返回**一个 canonical JSON 值**(`output.schema` 用 `ValueSchemaSpec`,根可为对象/数组/标量/null);`execute` 只返回推断值,`output.render(args, value)` 负责转模型内容。
515
+ - 抛错或返回非法值 → `isError`;基础设施失败用抛错;非零退出码等"非理想但成功"用 canonical 值表达。
516
+ - 遵守 `exec.signal` 取消。
517
+ - `output.presentationMeta(args, value)` 投影可回放的卡片数据(持久化在 `tool/result`)。
518
+ - `exec.agent` 用于异步通知(`agent.inject(...)` 追加下一条模型请求可见的持久上下文,不是唤醒)。
519
+ - **长任务**:`run_in_background` 用 `ctx.jobs.start({ kind, label, owner: exec.agent, run })`;发布后 id 用任务自有取消信号而非 `exec.signal`;后台成功分支返回 `{ kind: 'background', jobId }`。
520
+ - **执行策略与观察**:`tools/pre-execute`(allow/deny/ask 策略)、`ctx.tools.guard()`(最终单调 deny)、`tools/execute`(包裹派发)、`tools/post-execute`(替换呈现/返回值/拦截结果/附加上下文)、`tools/result`(观察不可变规范化结果)。
521
+ - **Code Mode 免费覆盖**:Code Mode 下每个可见工具自动可用 `await tools.<name>(args)`,类型从同一 schema 生成。
522
+ - **UI 渲染**:`presentCall(args)`(generic/terminal/diff)与 `presentResult(...)`(generic/terminal/diff/search/web),返回 `card`-tagged render intent;必须是 `args`(+result) 的纯函数(直播流与 session-log REPLAY 都运行,禁 I/O/会话状态/时钟/随机)。`locations`、diff hunks 等。
523
+
524
+ #### `/reference/agent-lifecycle` / `/reference/tool-execution-pipeline` / `/reference/persistence-catalog`
525
+
526
+ - (未逐页细读)分别对应 Agent 生命周期序列图、工具执行管线、持久化事件目录;架构页已给出其核心要点。
527
+
528
+ ### 3.6 CLI 行为参考(`apps/cli/reference/README.md`,仓库内,非文档站页但被文档站多处链接)
529
+
530
+ - **Profile boot**:`dsh --profile <name>` 启动 `$DSH_HOME/profiles/<name>`;层序同 publish.md;SIGINT/SIGTERM 先 dispose 挂载的 root。
531
+ - **bundle 解析顺序**:先从 dsh 安装解析,再从 profile 目录;in-box bundle(`dsh-base`/`dsh-web-app`/`dsh-headless`)总是来自同一安装;out-of-tree 来自 profile 的 pnpm `node_modules`。裸插件 `name` 经 profile 目录 Node parent-walk 解析,落到安装 fallback `$DSH_HOME/profiles/node_modules`。
532
+ - **`web`/`headless` profile 首次使用自动从模板初始化**(web = base+web-app;headless = base+headless);其它缺失 profile 报错并提示 `dsh plugin --profile <name> add <package>`。
533
+ - **App 参数**:launcher 参数在首个不识别 token 处结束,其余经 `ctx.cmdlineArgs` 交给 app;`--help` 打印对应 app 帮助;`-V/--version` 打印 launcher 版本。出厂 app:`web`(`--host`/`--port`/`--trusted-host`)、`headless`(任务文本为 positional)。
534
+ - **headless**:`dsh --profile headless "run the tests"` 建一个持久 Agent、提交任务、等 quiescence、flush Session,stdout 打印最后非空 assistant 文本,`completed` 退 0,否则 1。
535
+ - **dump**:`--dump-default-config`(仅 bundle 层)与 `--dump-config`(+ profile/home patch + `--patch` overlay);打印每行来源注释;`!!js` 不求值;未匹配 patch 目标报 stderr。
536
+ - **插件管理**:`dsh plugin --profile <name> <args...>` 转发到 pnpm;成功后把 `dsh.profile.bundles` 与已安装状态对账(含 `dsh.bundle` 声明者加入层栈)。
537
+ - **Web 别名**:`dsh web` = `--profile web`;生产 Web runner 需 `pnpm run build`,默认 `http://127.0.0.1:3080`;**不支持 `--host 0.0.0.0`**;`--trusted-host` 添加 `/api` 浏览器信任栅栏接受的主机名。
538
+ - **部署行为**:所有模式把调用目录当默认工作区根,加载 `AGENTS.md`/`CLAUDE.md`(渲染预算 65536 字节),用内存 SQLite 会话内容索引;新会话默认 `workspace-write` 权限预设;`DSH_PERMISSION_MODE` 改进程 fallback;`DSH_TOOLS_MODE` 选 `native`/`code`/`both`;base bundle 挂原生 DeepSeek 适配器、settings/credentials provider、`web_search`、默认关闭会话遥测;凭据解析顺序 `环境 → $DSH_HOME/.credentials.yaml → 调用目录 .env → $DSH_HOME/.env`;`DSH_TELEMETRY_MODE`(FULL/FEEDBACK_ONLY)、`DSH_TELEMETRY_OTLP_URL`、`DSH_TELEMETRY_DISABLED`(硬退出开关)。
539
+ - **源码执行**:`pnpm run build` 后 `pnpm dsh <args...>`(经 `node --import tsx/esm` 跑 `apps/cli/src/bin.ts`,不构建);安装形态跑构建后的 `apps/cli/lib/bin.js`。
540
+
541
+ ---
542
+
543
+ ## 4. 跨页核心概念综合(插件开发知识库要点)
544
+
545
+ ### 4.1 插件模型(Plugin Model)
546
+
547
+ - 插件 = 导出 `apply(ctx)` 的模块(或对象/类)。`name`、`inject`、`Config`、`provide`、`intercept` 为元数据。
548
+ - 一切皆插件;每个能力都是挂到共享 `Context` 的插件;没有特权核心。
549
+ - 生命周期 = Fiber 状态机(PENDING→LOADING→ACTIVE/FAILED→UNLOADING→DISPOSED),依赖驱动加载。
550
+ - 注册是 effect:所有注册(`ctx.on`、`ctx.tools.register`、`ctx.llm.registerAdapter`、`ctx.effect`)随插件卸载自动逆序清理。
551
+
552
+ ### 4.2 cordis.yml 配置
553
+
554
+ - YAML 数组,元素是 patch(`insert:` / 按 id override)或插件行(`id`/`name`/`config`/`inject`/`isolate`/`group`)。
555
+ - 插件行 `config` 走同名 Schemastery schema 校验;`!!js` 表达式(注意是 `!!js`,不是 `!js`)在注入激活后针对插件上下文插值。
556
+ - 层序:profile bundles → profile `cordis.patch.yml` → home `$DSH_HOME/cordis.patch.yml` → `--patch` overlay;后层按行取胜,整行 `config` 替换。
557
+ - `--patch` 只贡献配置,不改变模块路径解析的 profile 目录;本地插件路径须绝对路径(或相对解析自 profile 目录)。
558
+
559
+ ### 4.3 Service Definition / Provider / Consumer(能力接缝)
560
+
561
+ - 三层:Definition(接口+请求/结果类型)→ Provider(实现)→ Consumer(通常模型可见工具);Definition 拥有类型;Provider/Consumer 互不依赖。
562
+ - 服务通过 `ctx.<key>` 暴露;`inject` 声明依赖;类形式 `Service` 子类 + `super(ctx, name)` 提供服务;`declare module '@deepseek-ai/cordis' { interface Context { ... } }` 类型化。
563
+
564
+ ### 4.4 Context API
565
+
566
+ - `ctx.get/set/provide/accessor/mixin`(服务仓库与绑定)、`ctx.extend/isolate/intercept`(子上下文)、`ctx.root/events/logger/registry/reflect/fiber/timer/loader/hmr`(ambient 句柄)、`ctx.effect`(effect)、`ctx.plugin/inject`(插件加载与依赖)。
567
+
568
+ ### 4.5 事件系统
569
+
570
+ - 五模式:`emit`/`parallel`/`serial`/`bail`/`waterfall`;`waterfall` 监听器必须 `next()`。
571
+ - 类型化事件用 declaration merging;`namespace/action` 命名;durable session 事件与 Cordis 事件是两套。
572
+
573
+ ### 4.6 Tool 注册
574
+
575
+ - `ctx.tools.register(defineTool({ name, description, parameters, output: { schema, render }, execute, presentationMeta?, presentCall?, presentResult? }))`。
576
+ - 执行管线:`tools/pre-execute → tools/execute → tools/post-execute → tools/result`。
577
+
578
+ ### 4.7 profiles / bundles / CLI
579
+
580
+ - `dsh --profile <name>`、`dsh web`(别名)、`dsh plugin --profile <name> add/remove`、`--dump-config`/`--dump-default-config`、`--patch`、`--help`、`--version`。
581
+
582
+ ### 4.8 扩展点(Extension Points)
583
+
584
+ - `agent/*`(`agent/pre-step`、`agent/request`、`agent/turn-stopping`)、`tools/*`(pre-execute/execute/post-execute/result)、`fs/*`、`llm/stream`、`session/event`、`internal/*`、`loader/*`、`hmr/*`;能力 seam 注册(`ctx.llm`/`ctx.fs`/`ctx.shell`/`ctx.web`/`ctx.subagents`…);`agent.inject()`;`ConversationNodeDefinition`。
585
+
586
+ ### 4.9 SDK / API
587
+
588
+ - TypeScript:`@deepseek-ai/cordis`(Context/Service/Events/Fiber/Registry)、`@deepseek-ai/dsh-tools`(`defineTool`)、`@deepseek-ai/dsh-llm`(`LlmAdapter`/`GenerateOptions`/`StreamChunk`/`LlmError`/`attributionHeaders`)、`@deepseek-ai/schemastery`(`Schema`)。
589
+ - Python:`deepseek-harness-sdk`(`from deepseek_harness import DeepSeekHarness`)。
590
+ - JSON-RPC 示例:`examples/jsonrpc-agent/minimal.py` / `minimal.cordis.yml`。
591
+
592
+ ### 4.10 版本化
593
+
594
+ - 版本 `0.1.0-rc.5`;**developer preview / 技术预览**,明确警告破坏性变更。无独立 semver 兼容承诺的文档页;会话/存储格式有单调 `SCHEMA_VERSION` / `SESSION_FORMAT_VERSION` 机制(见 AGENTS.md,属仓库内部,非文档站页)。
595
+
596
+ ### 4.11 安装 / 设置
597
+
598
+ - `npx @deepseek-ai/dsh web`(npm)或源码 `pnpm install && pnpm run build && pnpm dsh web`;配置模型(Settings → Models 填 DeepSeek API key);选工作区;发任务。
599
+ - Python:`pip install deepseek-harness-sdk`(自带 Node 运行时)。
600
+
601
+ ---
602
+
603
+ ## 5. 完整 URL 清单(visited / found)
604
+
605
+ ### 5.1 目标 URL
606
+
607
+ - `https://www.deepseek.com/harness/`(内容 [unverified])
608
+ - `https://deepseek-harness.github.io/deepseek-harness/develop/basic/`(结构/内容来自仓库清单;线上渲染 [unverified])
609
+ - `https://deepseek-harness.github.io/deepseek-harness/`(站点根;结构来自仓库清单)
610
+
611
+ ### 5.2 文档站页面路由(派生自 `website/docs.ts`,均加站点前缀 `https://deepseek-harness.github.io/deepseek-harness`;英文 locale 加 `/en/` 前缀)
612
+
613
+ - `/`(重定向)、`/guide/quickstart`、`/guide/providers`、`/guide/python-sdk`
614
+ - `/develop/basic/`、`/develop/basic/tool`、`/develop/basic/config`、`/develop/basic/publish`
615
+ - `/develop/framework/`、`/develop/framework/service`、`/develop/framework/events`
616
+ - `/develop/practice/`、`/develop/practice/llm-adapter`
617
+ - `/develop/cordis-tutorial/`、`/develop/cordis-tutorial/01-first-plugin`、`/develop/cordis-tutorial/02-lifecycle-and-effects`、`/develop/cordis-tutorial/03-services`、`/develop/cordis-tutorial/04-events`、`/develop/cordis-tutorial/05-config`、`/develop/cordis-tutorial/06-composition-and-hmr`、`/develop/cordis-tutorial/07-into-the-harness`
618
+ - `/reference/`、`/reference/cordis-primer`、`/reference/capability-seams`、`/reference/agent-lifecycle`、`/reference/tool-execution-pipeline`、`/reference/config-catalog`、`/reference/tool-catalog`、`/reference/persistence-catalog`
619
+ - `/reference/cordis-api/context`、`/reference/cordis-api/events`、`/reference/cordis-api/fiber`、`/reference/cordis-api/registry`、`/reference/cordis-api/service`、`/reference/cordis-api/inherited`
620
+ - `/reference/cookbook/adding-a-package`、`/reference/cookbook/adding-a-tool`、`/reference/cookbook/adding-an-llm-adapter`、`/reference/cookbook/extension-cookbook`、`/reference/cookbook/adding-a-conversation-node`
621
+ - `/reference/subsystems/` + 子系统(core, scope, invariants, session, session-query, session-reference, session-title, session-projection, persistence, spill, session-telemetry, llm-streaming, token-meter, system-prompt, compaction, tools, shell, subprocess, terminal, jobs, filesystem, lsp, code-runtime, web, skills, workflow, subagent, approval, permission-presets, sandbox, plan, user-questions, commands, goal, schedule, web-server, typert, client-modules, storage, workspace, settings, credentials)
622
+
623
+ ### 5.3 GitHub 仓库文档源文件(web_search 命中,均在 `github.com/deepseek-ai/deepseek-harness`)
624
+
625
+ - `https://github.com/deepseek-ai/deepseek-harness`(主仓库)
626
+ - `https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md` / `README.zh.md`
627
+ - `https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/architecture.md` / `.zh.md`
628
+ - `.../docs/development.md` / `.zh.md`
629
+ - `.../docs/cordis-primer.md` / `.zh.md`
630
+ - `.../docs/glossary.md`
631
+ - `.../docs/subsystems/core.zh.md`
632
+ - `.../docs/user/guide/python-sdk.md` / `.zh.md`
633
+ - `.../docs/user/guide/providers.md` / `.zh.md`
634
+ - `.../docs/user/guide/index.md`
635
+ - `.../docs/user/develop/basic/index.md`、`config.md`、`publish.md`
636
+ - `.../packages/mcp/mcp-client/README.md`、`.../packages/llm/llm-deepseek/README.md`、`.../packages/llm/llm-pi-ai/README.md`、`.../packages/bundle/base/README.md`、`.../packages/README.md`、`.../packages/skill/SKILL.md`、`.../packages/hooks/hooks-codex/README.md`
637
+ - `.../apps/cli/reference/README.zh.md`
638
+
639
+ ### 5.4 第三方报道 / 生态(web_search 命中,非官方,内容 [unverified])
640
+
641
+ - `https://www.ithome.com/0/989/446.htm`、`https://m.ithome.com/html/989446.htm`
642
+ - `https://finance.sina.cn/tech/2026-08-13/detail-inineuqm9870965.d.html`
643
+ - `https://www.donews.com/news/detail/1/6670452.html`
644
+ - `https://www.sohu.com/a/1062513068_100106801`
645
+ - `https://www.163.com/tech/article/L4892ED600097U7T.html`
646
+ - `https://www.appinn.com/deepseek-harness/`
647
+ - `https://www.cnblogs.com/sing1ee/p/22455466`、`https://www.cnblogs.com/weiwuji/p/22456195`
648
+ - `https://news.qq.com/rain/a/20260813A0E8ES00`
649
+ - `http://www.stnn.cc/detail/6a7dc390bcf6f20e311cbbce.html`
650
+ - `https://news.17173.com/content/08132026/220156228.shtml`
651
+ - `https://www.uied.cn/posts/921608`
652
+ - `https://www.smarthey.com/detail/342220702961.html`
653
+ - `https://www.eet-china.com/mp/a516864.html`
654
+ - `https://www.sina.cn/news/detail/5331578031178880.html`
655
+ - `https://tech.ifeng.com/c/8vZ0azYi0Sf`
656
+ - `https://aihot.virxact.com/items/cmsrjkbcd02tiro46cfjwidak`
657
+ - `https://global.v2ex.co/t/1234203`
658
+ - `https://www.npmjs.com/package/@deepseek-ai/dsh-base`、`https://www.npmjs.com/package/@deepseek-ai/dsh-web-app`
659
+ - `https://www.awesomeskills.dev/en/skill/henryz838978-deepseek-harness`(注意:第三方同名项目)
660
+
661
+ ---
662
+
663
+ ## 6. 附注 / 未核实项汇总
664
+
665
+ - `www.deepseek.com/harness/` 页面正文、下载按钮、具体文案:**[unverified]**。
666
+ - 文档站线上渲染页:**[unverified]**(沙箱网络被禁,`site:deepseek-harness.github.io` 无索引);页面清单/标题/内容以官方仓库 `website/docs.ts` + `docs/` 源文件为权威。
667
+ - `deepseek-harness.github.io` 对应的 GitHub org(与 `deepseek-ai/deepseek-harness` 的关系,是否独立文档 org)未直接核实;但 `docs/user/develop/basic/publish.md` 提到 `https://github.com/deepseek-harness/turtle-ui`,证明存在 `deepseek-harness` org(**08-14 核查:turtle-ui 仓库现 404**)。
668
+ - 发布/公测的具体日期与版本号(0.1.x)来自第三方新闻,非官方页面确认。