dsh-plugin-dev-kb 1.3.0 → 1.4.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 (364) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.en.md +4 -4
  3. package/README.md +5 -5
  4. package/kb/INDEX.md +18 -18
  5. package/kb/README.md +6 -4
  6. package/kb/extra/AGENTS.md +11 -10
  7. package/kb/extra/cookbook/adding-a-remote-api.md +2 -2
  8. package/kb/extra/cookbook/adding-a-remote-api.zh.md +2 -2
  9. package/kb/extra/cookbook/adding-a-session-format-version.md +48 -6
  10. package/kb/extra/cookbook/adding-a-session-format-version.zh.md +48 -6
  11. package/kb/extra/cookbook/reviewing-persistence-type-changes.md +120 -0
  12. package/kb/extra/cookbook/reviewing-persistence-type-changes.zh.md +120 -0
  13. package/kb/extra/deepseek-llm-api-wire-extensions.md +18 -19
  14. package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +17 -18
  15. package/kb/extra/development.md +27 -10
  16. package/kb/extra/development.zh.md +27 -10
  17. package/kb/extra/event-producer-consumer.md +89 -68
  18. package/kb/extra/event-producer-consumer.zh.md +90 -69
  19. package/kb/extra/glossary.md +1 -1
  20. package/kb/extra/glossary.zh.md +1 -1
  21. package/kb/extra/i18n/README.md +15 -7
  22. package/kb/extra/i18n/README.zh.md +15 -7
  23. package/kb/extra/i18n/terminology.md +4 -4
  24. package/kb/extra/i18n/translation-prompt.md +2 -2
  25. package/kb/extra/module-graph.md +574 -326
  26. package/kb/extra/module-graph.zh.md +574 -326
  27. package/kb/extra/persistence-changes/2026-09-11-initial.md +280 -0
  28. package/kb/extra/persistence-changes/2026-09-11-initial.zh.md +280 -0
  29. package/kb/extra/persistence-changes/2026-09-12-auto-review-error-metadata.md +52 -0
  30. package/kb/extra/persistence-changes/2026-09-12-auto-review-error-metadata.zh.md +52 -0
  31. package/kb/extra/persistence-changes/2026-09-14-image-offload.md +96 -0
  32. package/kb/extra/persistence-changes/2026-09-14-image-offload.zh.md +96 -0
  33. package/kb/extra/persistence-changes/2026-09-14-workspace-changes-event.md +48 -0
  34. package/kb/extra/persistence-changes/2026-09-14-workspace-changes-event.zh.md +48 -0
  35. package/kb/extra/persistence-changes/2026-09-16-session-format-v4.md +120 -0
  36. package/kb/extra/persistence-changes/2026-09-16-session-format-v4.zh.md +120 -0
  37. package/kb/extra/persistence-changes/2026-09-18-schedule-optional-title.md +48 -0
  38. package/kb/extra/persistence-changes/2026-09-18-schedule-optional-title.zh.md +48 -0
  39. package/kb/extra/persistence-changes/2026-09-20-unknown-child-catalog.md +48 -0
  40. package/kb/extra/persistence-changes/2026-09-20-unknown-child-catalog.zh.md +48 -0
  41. package/kb/extra/persistence-changes/2026-09-21-user-question-reply.md +60 -0
  42. package/kb/extra/persistence-changes/2026-09-21-user-question-reply.zh.md +60 -0
  43. package/kb/extra/persistence-changes/README.md +88 -0
  44. package/kb/extra/persistence-changes/README.zh.md +88 -0
  45. package/kb/extra/persistence-changes/historical-formats/README.md +75 -0
  46. package/kb/extra/persistence-changes/historical-formats/README.zh.md +75 -0
  47. package/kb/extra/persistence-changes/historical-formats/v0.md +5105 -0
  48. package/kb/extra/persistence-changes/historical-formats/v0.zh.md +5105 -0
  49. package/kb/extra/persistence-changes/historical-formats/v1.md +5107 -0
  50. package/kb/extra/persistence-changes/historical-formats/v1.zh.md +5107 -0
  51. package/kb/extra/persistence-changes/historical-formats/v2.md +5362 -0
  52. package/kb/extra/persistence-changes/historical-formats/v2.zh.md +5362 -0
  53. package/kb/extra/persistence-changes/historical-formats/v3.md +5634 -0
  54. package/kb/extra/persistence-changes/historical-formats/v3.zh.md +5634 -0
  55. package/kb/extra/persistence-changes/releases/README.md +103 -0
  56. package/kb/extra/persistence-changes/releases/README.zh.md +103 -0
  57. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.1.md +201 -0
  58. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.1.zh.md +201 -0
  59. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.2.md +261 -0
  60. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.2.zh.md +261 -0
  61. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.3.md +126 -0
  62. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.3.zh.md +126 -0
  63. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.4.md +75 -0
  64. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.4.zh.md +75 -0
  65. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.5.md +75 -0
  66. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.5.zh.md +75 -0
  67. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.1.md +75 -0
  68. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.1.zh.md +75 -0
  69. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.2.md +75 -0
  70. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.2.zh.md +75 -0
  71. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.3.md +75 -0
  72. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.3.zh.md +75 -0
  73. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.5.md +75 -0
  74. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.5.zh.md +75 -0
  75. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.6.md +75 -0
  76. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.6.zh.md +75 -0
  77. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.7.md +82 -0
  78. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.7.zh.md +82 -0
  79. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.8.md +110 -0
  80. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.8.zh.md +110 -0
  81. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.1.md +82 -0
  82. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.1.zh.md +82 -0
  83. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.2.md +119 -0
  84. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.2.zh.md +119 -0
  85. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.1.md +295 -0
  86. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.1.zh.md +295 -0
  87. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.2.md +286 -0
  88. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.2.zh.md +286 -0
  89. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.3.md +75 -0
  90. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.3.zh.md +75 -0
  91. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.4.md +95 -0
  92. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.4.zh.md +95 -0
  93. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.5.md +75 -0
  94. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.5.zh.md +75 -0
  95. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-rc.1.md +75 -0
  96. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-rc.1.zh.md +75 -0
  97. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.1.md +154 -0
  98. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.1.zh.md +154 -0
  99. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.2.md +86 -0
  100. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.2.zh.md +86 -0
  101. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.1.md +139 -0
  102. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.1.zh.md +139 -0
  103. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.2.md +95 -0
  104. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.2.zh.md +95 -0
  105. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.1.md +75 -0
  106. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.1.zh.md +75 -0
  107. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.2.md +75 -0
  108. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.2.zh.md +75 -0
  109. package/kb/extra/rescope.md +1 -1
  110. package/kb/extra/rescope.zh.md +1 -1
  111. package/kb/extra/session-format-status.md +22 -6
  112. package/kb/extra/session-format-status.zh.md +22 -6
  113. package/kb/extra/subsystems/agent-team.md +52 -28
  114. package/kb/extra/subsystems/agent-team.zh.md +52 -28
  115. package/kb/extra/subsystems/attachment.md +19 -9
  116. package/kb/extra/subsystems/attachment.zh.md +19 -9
  117. package/kb/extra/subsystems/boot.md +323 -0
  118. package/kb/extra/subsystems/boot.zh.md +323 -0
  119. package/kb/extra/subsystems/browser-use.md +67 -0
  120. package/kb/extra/subsystems/browser-use.zh.md +67 -0
  121. package/kb/extra/subsystems/claude-code-mods.md +146 -0
  122. package/kb/extra/subsystems/claude-code-mods.zh.md +146 -0
  123. package/kb/extra/subsystems/computer-use.md +56 -0
  124. package/kb/extra/subsystems/computer-use.zh.md +56 -0
  125. package/kb/extra/subsystems/deliverables.md +178 -0
  126. package/kb/extra/subsystems/deliverables.zh.md +178 -0
  127. package/kb/extra/subsystems/extensions.md +6 -4
  128. package/kb/extra/subsystems/extensions.zh.md +6 -4
  129. package/kb/extra/subsystems/feedback.md +4 -4
  130. package/kb/extra/subsystems/feedback.zh.md +4 -4
  131. package/kb/extra/subsystems/mcp.md +139 -0
  132. package/kb/extra/subsystems/mcp.zh.md +139 -0
  133. package/kb/extra/subsystems/office-to-pdf.md +87 -0
  134. package/kb/extra/subsystems/office-to-pdf.zh.md +87 -0
  135. package/kb/extra/subsystems/otel.md +44 -0
  136. package/kb/extra/subsystems/otel.zh.md +44 -0
  137. package/kb/extra/subsystems/product-telemetry.md +79 -0
  138. package/kb/extra/subsystems/product-telemetry.zh.md +79 -0
  139. package/kb/extra/subsystems/ssh.md +135 -0
  140. package/kb/extra/subsystems/ssh.zh.md +135 -0
  141. package/kb/extra/subsystems/todo.md +3 -3
  142. package/kb/extra/subsystems/todo.zh.md +3 -3
  143. package/kb/extra/subsystems/voice-input.md +164 -0
  144. package/kb/extra/subsystems/voice-input.zh.md +164 -0
  145. package/kb/extra/subsystems/webhook.md +3 -3
  146. package/kb/extra/subsystems/webhook.zh.md +1 -1
  147. package/kb/extra/testing.md +3 -3
  148. package/kb/extra/testing.zh.md +3 -3
  149. package/kb/extra/ui-radius.md +115 -0
  150. package/kb/extra/ui-radius.zh.md +115 -0
  151. package/kb/extra/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.md +22 -0
  152. package/kb/extra/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.zh.md +22 -0
  153. package/kb/extra/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.md +25 -0
  154. package/kb/extra/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.zh.md +25 -0
  155. package/kb/extra/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.md +18 -0
  156. package/kb/extra/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.zh.md +18 -0
  157. package/kb/extra/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.md +23 -0
  158. package/kb/extra/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.zh.md +23 -0
  159. package/kb/extra/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.md +22 -0
  160. package/kb/extra/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.zh.md +22 -0
  161. package/kb/extra/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.md +27 -0
  162. package/kb/extra/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.zh.md +27 -0
  163. package/kb/extra/web-styling.md +12 -3
  164. package/kb/extra/web-styling.zh.md +12 -3
  165. package/kb/meta/search-index.json +976 -256
  166. package/kb/meta/site-pages.txt +188 -188
  167. package/kb/meta/source.json +6 -6
  168. package/kb/meta/topics.md +10 -6
  169. package/kb/site/develop/basic/config.md +1 -0
  170. package/kb/site/develop/basic/index.md +1 -0
  171. package/kb/site/develop/basic/publish.md +9 -2
  172. package/kb/site/develop/basic/tool.md +1 -0
  173. package/kb/site/develop/cordis-tutorial/01-first-plugin.md +1 -0
  174. package/kb/site/develop/cordis-tutorial/02-lifecycle-and-effects.md +1 -0
  175. package/kb/site/develop/cordis-tutorial/03-services.md +1 -0
  176. package/kb/site/develop/cordis-tutorial/04-events.md +1 -0
  177. package/kb/site/develop/cordis-tutorial/05-config.md +28 -0
  178. package/kb/site/develop/cordis-tutorial/06-composition-and-hmr.md +3 -2
  179. package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +1 -0
  180. package/kb/site/develop/cordis-tutorial/index.md +1 -0
  181. package/kb/site/develop/framework/events.md +1 -0
  182. package/kb/site/develop/framework/index.md +2 -1
  183. package/kb/site/develop/framework/service.md +1 -0
  184. package/kb/site/develop/practice/dynamic-cordis.md +9 -8
  185. package/kb/site/develop/practice/index.md +1 -0
  186. package/kb/site/develop/practice/llm-adapter.md +2 -1
  187. package/kb/site/en/develop/basic/config.md +1 -0
  188. package/kb/site/en/develop/basic/index.md +1 -0
  189. package/kb/site/en/develop/basic/publish.md +9 -2
  190. package/kb/site/en/develop/basic/tool.md +1 -0
  191. package/kb/site/en/develop/cordis-tutorial/01-first-plugin.md +1 -0
  192. package/kb/site/en/develop/cordis-tutorial/02-lifecycle-and-effects.md +1 -0
  193. package/kb/site/en/develop/cordis-tutorial/03-services.md +1 -0
  194. package/kb/site/en/develop/cordis-tutorial/04-events.md +1 -0
  195. package/kb/site/en/develop/cordis-tutorial/05-config.md +28 -0
  196. package/kb/site/en/develop/cordis-tutorial/06-composition-and-hmr.md +3 -2
  197. package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +1 -0
  198. package/kb/site/en/develop/cordis-tutorial/index.md +1 -0
  199. package/kb/site/en/develop/framework/events.md +1 -0
  200. package/kb/site/en/develop/framework/index.md +2 -1
  201. package/kb/site/en/develop/framework/service.md +1 -0
  202. package/kb/site/en/develop/practice/dynamic-cordis.md +9 -8
  203. package/kb/site/en/develop/practice/index.md +1 -0
  204. package/kb/site/en/develop/practice/llm-adapter.md +2 -1
  205. package/kb/site/en/guide/github-review.md +1 -0
  206. package/kb/site/en/guide/mcp-memory.md +1 -0
  207. package/kb/site/en/guide/network-proxy.md +2 -1
  208. package/kb/site/en/guide/providers-custom-form.png +0 -0
  209. package/kb/site/en/guide/providers-models-page.png +0 -0
  210. package/kb/site/en/guide/providers.md +97 -82
  211. package/kb/site/en/guide/public-deployments.md +36 -0
  212. package/kb/site/en/guide/python-sdk.md +42 -21
  213. package/kb/site/en/guide/quickstart.md +2 -0
  214. package/kb/site/en/guide/schedule.md +70 -11
  215. package/kb/site/en/reference/agent-lifecycle.md +1 -0
  216. package/kb/site/en/reference/api-gateway.md +13 -11
  217. package/kb/site/en/reference/capability-seams.md +177 -59
  218. package/kb/site/en/reference/config-catalog.md +1758 -821
  219. package/kb/site/en/reference/cookbook/adding-a-package.md +57 -3
  220. package/kb/site/en/reference/cookbook/adding-a-settings-card.md +35 -64
  221. package/kb/site/en/reference/cookbook/adding-a-tool.md +4 -3
  222. package/kb/site/en/reference/cookbook/adding-an-llm-adapter.md +1 -0
  223. package/kb/site/en/reference/cookbook/extension-cookbook.md +6 -5
  224. package/kb/site/en/reference/cordis-api/context.md +1 -0
  225. package/kb/site/en/reference/cordis-api/events.md +1 -0
  226. package/kb/site/en/reference/cordis-api/fiber.md +4 -3
  227. package/kb/site/en/reference/cordis-api/inherited.md +16 -16
  228. package/kb/site/en/reference/cordis-api/registry.md +1 -0
  229. package/kb/site/en/reference/cordis-api/service.md +1 -0
  230. package/kb/site/en/reference/cordis-primer.md +1 -0
  231. package/kb/site/en/reference/index.md +18 -11
  232. package/kb/site/en/reference/persistence-catalog.md +7687 -54
  233. package/kb/site/en/reference/subsystems/approval.md +2 -1
  234. package/kb/site/en/reference/subsystems/client-modules.md +23 -15
  235. package/kb/site/en/reference/subsystems/client-resources.md +3 -1
  236. package/kb/site/en/reference/subsystems/commands.md +6 -1
  237. package/kb/site/en/reference/subsystems/compaction.md +50 -3
  238. package/kb/site/en/reference/subsystems/conversation.md +36 -6
  239. package/kb/site/en/reference/subsystems/core.md +97 -257
  240. package/kb/site/en/reference/subsystems/credentials.md +169 -5
  241. package/kb/site/en/reference/subsystems/filesystem.md +11 -0
  242. package/kb/site/en/reference/subsystems/goal.md +2 -1
  243. package/kb/site/en/reference/subsystems/index.md +16 -5
  244. package/kb/site/en/reference/subsystems/jobs.md +337 -127
  245. package/kb/site/en/reference/subsystems/llm-streaming.md +76 -36
  246. package/kb/site/en/reference/subsystems/lsp.md +1 -0
  247. package/kb/site/en/reference/subsystems/permission-presets.md +66 -29
  248. package/kb/site/en/reference/subsystems/persistence.md +4 -3
  249. package/kb/site/en/reference/subsystems/plan.md +2 -1
  250. package/kb/site/en/reference/subsystems/ptc-runtime.md +236 -0
  251. package/kb/site/en/reference/subsystems/sandbox.md +7 -5
  252. package/kb/site/en/reference/subsystems/schedule.md +392 -33
  253. package/kb/site/en/reference/subsystems/scope.md +2 -1
  254. package/kb/site/en/reference/subsystems/session-projection.md +22 -19
  255. package/kb/site/en/reference/subsystems/session-query.md +1 -0
  256. package/kb/site/en/reference/subsystems/session-reference.md +8 -6
  257. package/kb/site/en/reference/subsystems/session-telemetry.md +7 -4
  258. package/kb/site/en/reference/subsystems/session-title.md +6 -5
  259. package/kb/site/en/reference/subsystems/session.md +199 -81
  260. package/kb/site/en/reference/subsystems/settings.md +43 -292
  261. package/kb/site/en/reference/subsystems/shell.md +37 -28
  262. package/kb/site/en/reference/subsystems/sidebar-right.md +23 -12
  263. package/kb/site/en/reference/subsystems/skills.md +5 -6
  264. package/kb/site/en/reference/subsystems/slots.md +34 -13
  265. package/kb/site/en/reference/subsystems/spill.md +4 -3
  266. package/kb/site/en/reference/subsystems/storage.md +2 -2
  267. package/kb/site/en/reference/subsystems/subagent.md +50 -64
  268. package/kb/site/en/reference/subsystems/subprocess.md +17 -18
  269. package/kb/site/en/reference/subsystems/system-prompt.md +4 -1
  270. package/kb/site/en/reference/subsystems/terminal.md +1 -0
  271. package/kb/site/en/reference/subsystems/token-meter.md +1 -0
  272. package/kb/site/en/reference/subsystems/tools.md +40 -12
  273. package/kb/site/en/reference/subsystems/typert.md +153 -10
  274. package/kb/site/en/reference/subsystems/user-questions.md +131 -1
  275. package/kb/site/en/reference/subsystems/web-client.md +15 -9
  276. package/kb/site/en/reference/subsystems/web-server.md +74 -1
  277. package/kb/site/en/reference/subsystems/web.md +1 -0
  278. package/kb/site/en/reference/subsystems/workflow.md +10 -9
  279. package/kb/site/en/reference/subsystems/workspace.md +294 -34
  280. package/kb/site/en/reference/tool-catalog.md +782 -331
  281. package/kb/site/en/reference/tool-execution-pipeline.md +7 -3
  282. package/kb/site/guide/github-review.md +1 -0
  283. package/kb/site/guide/mcp-memory.md +1 -0
  284. package/kb/site/guide/network-proxy.md +2 -1
  285. package/kb/site/guide/providers-custom-form.zh.png +0 -0
  286. package/kb/site/guide/providers-models-page.zh.png +0 -0
  287. package/kb/site/guide/providers.md +109 -94
  288. package/kb/site/guide/public-deployments.md +36 -0
  289. package/kb/site/guide/python-sdk.md +42 -21
  290. package/kb/site/guide/quickstart.md +2 -0
  291. package/kb/site/guide/schedule.md +70 -11
  292. package/kb/site/reference/agent-lifecycle.md +1 -0
  293. package/kb/site/reference/api-gateway.md +13 -11
  294. package/kb/site/reference/capability-seams.md +177 -59
  295. package/kb/site/reference/config-catalog.md +1760 -822
  296. package/kb/site/reference/cookbook/adding-a-package.md +55 -3
  297. package/kb/site/reference/cookbook/adding-a-settings-card.md +35 -64
  298. package/kb/site/reference/cookbook/adding-a-tool.md +4 -3
  299. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +1 -0
  300. package/kb/site/reference/cookbook/extension-cookbook.md +6 -5
  301. package/kb/site/reference/cordis-api/context.md +1 -0
  302. package/kb/site/reference/cordis-api/events.md +1 -0
  303. package/kb/site/reference/cordis-api/fiber.md +4 -3
  304. package/kb/site/reference/cordis-api/inherited.md +16 -16
  305. package/kb/site/reference/cordis-api/registry.md +1 -0
  306. package/kb/site/reference/cordis-api/service.md +1 -0
  307. package/kb/site/reference/cordis-primer.md +1 -0
  308. package/kb/site/reference/index.md +18 -11
  309. package/kb/site/reference/persistence-catalog.md +7693 -60
  310. package/kb/site/reference/subsystems/approval.md +2 -1
  311. package/kb/site/reference/subsystems/client-modules.md +23 -15
  312. package/kb/site/reference/subsystems/client-resources.md +3 -1
  313. package/kb/site/reference/subsystems/commands.md +6 -1
  314. package/kb/site/reference/subsystems/compaction.md +50 -3
  315. package/kb/site/reference/subsystems/conversation.md +35 -5
  316. package/kb/site/reference/subsystems/core.md +97 -257
  317. package/kb/site/reference/subsystems/credentials.md +169 -5
  318. package/kb/site/reference/subsystems/filesystem.md +11 -0
  319. package/kb/site/reference/subsystems/goal.md +2 -1
  320. package/kb/site/reference/subsystems/index.md +16 -5
  321. package/kb/site/reference/subsystems/jobs.md +336 -126
  322. package/kb/site/reference/subsystems/llm-streaming.md +76 -36
  323. package/kb/site/reference/subsystems/lsp.md +1 -0
  324. package/kb/site/reference/subsystems/permission-presets.md +66 -29
  325. package/kb/site/reference/subsystems/persistence.md +4 -3
  326. package/kb/site/reference/subsystems/plan.md +2 -1
  327. package/kb/site/reference/subsystems/ptc-runtime.md +236 -0
  328. package/kb/site/reference/subsystems/sandbox.md +7 -5
  329. package/kb/site/reference/subsystems/schedule.md +392 -33
  330. package/kb/site/reference/subsystems/scope.md +2 -1
  331. package/kb/site/reference/subsystems/session-projection.md +22 -19
  332. package/kb/site/reference/subsystems/session-query.md +1 -0
  333. package/kb/site/reference/subsystems/session-reference.md +8 -6
  334. package/kb/site/reference/subsystems/session-telemetry.md +7 -4
  335. package/kb/site/reference/subsystems/session-title.md +6 -5
  336. package/kb/site/reference/subsystems/session.md +199 -81
  337. package/kb/site/reference/subsystems/settings.md +43 -292
  338. package/kb/site/reference/subsystems/shell.md +37 -28
  339. package/kb/site/reference/subsystems/sidebar-right.md +23 -12
  340. package/kb/site/reference/subsystems/skills.md +5 -6
  341. package/kb/site/reference/subsystems/slots.md +34 -13
  342. package/kb/site/reference/subsystems/spill.md +3 -2
  343. package/kb/site/reference/subsystems/storage.md +2 -2
  344. package/kb/site/reference/subsystems/subagent.md +49 -63
  345. package/kb/site/reference/subsystems/subprocess.md +17 -18
  346. package/kb/site/reference/subsystems/system-prompt.md +4 -1
  347. package/kb/site/reference/subsystems/terminal.md +1 -0
  348. package/kb/site/reference/subsystems/token-meter.md +1 -0
  349. package/kb/site/reference/subsystems/tools.md +40 -12
  350. package/kb/site/reference/subsystems/typert.md +153 -10
  351. package/kb/site/reference/subsystems/user-questions.md +132 -2
  352. package/kb/site/reference/subsystems/web-client.md +15 -9
  353. package/kb/site/reference/subsystems/web-server.md +74 -1
  354. package/kb/site/reference/subsystems/web.md +1 -0
  355. package/kb/site/reference/subsystems/workflow.md +10 -9
  356. package/kb/site/reference/subsystems/workspace.md +294 -34
  357. package/kb/site/reference/tool-catalog.md +784 -333
  358. package/kb/site/reference/tool-execution-pipeline.md +7 -3
  359. package/package.json +2 -2
  360. package/skills/dsh-plugin-dev-kb.md +5 -4
  361. package/kb/site/en/reference/subsystems/code-runtime.md +0 -198
  362. package/kb/site/en/reference/subsystems/invariants.md +0 -91
  363. package/kb/site/reference/subsystems/code-runtime.md +0 -198
  364. package/kb/site/reference/subsystems/invariants.md +0 -91
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  editSource: "docs/tool-catalog.zh.md"
3
+ rawMarkdownPath: "reference/tool-catalog.md"
3
4
  ---
4
5
 
5
6
  <!-- 英文源文件由 scripts/gen-tool-catalog.ts 生成;本中文文件是通过双语配对维护的经评审对侧。
@@ -21,13 +22,16 @@ editSource: "docs/tool-catalog.zh.md"
21
22
 
22
23
  | 工具包 | 模型可见名称 | 依赖 | 写入/影响 | 随产品发布的别名 | 部署说明 |
23
24
  | --- | --- | --- | --- | --- | --- |
24
- | `@deepseek-ai/dsh-tool-ask-user` | `ask_user_question` | `ctx.tools`、`ctx.userQuestions` | `tool/call`、`tool/result after a UI/provider answers the question` | - | ask_user_question 会暂停工具调用,直到当前 UI 提供方返回人类答案。 |
25
- | `@deepseek-ai/dsh-tools` | `run_code` | `ctx.tools`、`ctx.codeRuntime (execution time)`、`ctx.systemPrompt` | `tool/call`、`one tool/ptc-dispatch-start + tool/ptc-dispatch pair per bridged sub-call`、`tool/result` | - | 在 `mode: ptc`/`mode: both` 下,它由工具注册表所有,作为可过滤能力层之外的保留传输机制(参见 PTC mode Agent Note)。在 `ptc` 下,它是注册表对协议格式(wire format)的唯一贡献;其他可见能力在使用已加载运行时语言生成的 SDK 章节中声明。程序通过 binding 调用这些能力,调用按照原生并发约定调度:启动顺序和策略遵循提交顺序,并发安全的函数体最多重叠执行 `maxParallelSubCalls` 个。调用会重新进入完整且受守卫保护的工具流水线,并将每个嵌套执行关联到此外层结果。 |
25
+ | `@deepseek-ai/dsh-plugin-manager` | `plugin_manager` | `ctx.tools`, `ctx.pluginManager`, `ctx.sandboxPolicy` | `tool/call`, `tool/result`, `user/message` | - | - |
26
+ | `@deepseek-ai/dsh-mcp-resources` | `list_mcp_resource_templates`, `list_mcp_resources`, `read_mcp_resource` | `ctx.tools`, `ctx.mcpResources` | `tool/call`, `tool/result` | - | - |
27
+ | `@deepseek-ai/dsh-experimental-browser-use-stagehand-native` | `stagehand_act`、`stagehand_extract`、`stagehand_navigate`、`stagehand_observe`、`stagehand_screenshot`、`stagehand_tabs` | `ctx.browserUse`、`ctx.agents`、`ctx.tools`、`ctx.systemPrompt` | `tool/call`、`tool/result` | - | - |
28
+ | `@deepseek-ai/dsh-tool-ask-user` | `ask_user_question` | `ctx.tools`、`ctx.userQuestions` | `tool/call`、`tool/result after an answer or timeout`、`late user/message` | - | ask_user_question 默认保持原有阻塞行为;设置 `mode: timed` 后才启用前台超时与 pending 结果,同时问题仍可回答;timed 模式内 `timeout: -1` 让本次调用无限期阻塞。 |
29
+ | `@deepseek-ai/dsh-tools` | `run_code` | `ctx.tools`、`ctx.ptcRuntime (execution time)`、`ctx.systemPrompt` | `tool/call`、`one tool/ptc-dispatch-start + tool/ptc-dispatch pair per bridged sub-call`、`tool/result` | - | 在 `mode: ptc`/`mode: both` 下,它由工具注册表所有,作为可过滤能力层之外的保留传输机制(参见 PTC mode Agent Note)。在 `ptc` 下,它是注册表对协议格式(wire format)的唯一贡献;其他可见能力在使用已加载运行时语言生成的 SDK 章节中声明。程序通过 binding 调用这些能力,调用按照原生并发约定调度:启动顺序和策略遵循提交顺序,并发安全的函数体最多重叠执行 `maxParallelSubCalls` 个。调用会重新进入完整且受守卫保护的工具流水线,并将每个嵌套执行关联到此外层结果。 |
26
30
  | `@deepseek-ai/dsh-plan-mode` | `exit_plan_mode` | `ctx.tools`、`ctx.systemPrompt`、`ctx.userQuestions (execution time, opportunistic)` | `tool/call`、`plan/mode inactive on an approved review`、`tool/result` | - | 规划未激活时,exit_plan_mode 仍保留在面向模型的 schema 中,这样状态转换不会在规划策略变更之外额外造成工具目录变动。其执行路径会拒绝规划模式之外的调用;在规划模式下,它通过用户交互 seam 提交计划(批准/根据反馈继续规划),批准后会在步骤边界记录规划模式已停用。 |
27
- | `@deepseek-ai/dsh-tool-bash` | `bash` | `ctx.tools`、`ctx.shell`、`ctx.systemPrompt`、`ctx.shellEnv`、`ctx.jobs at call time for run_in_background` | `tool/call`、`tool/result` | - | bash 工具是 bash 执行器 seam 面向模型的消费方。使用 `run_in_background` 的运行会注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具(来自 `@deepseek-ai/dsh-tool-jobs`)收集/停止;禁用 `enableRunInBackground` 配置(默认为 true)后,该参数会被完全移除。 |
31
+ | `@deepseek-ai/dsh-tool-bash` | `bash` | `ctx.tools`、`ctx.shell`、`ctx.systemPrompt`、`ctx.shellEnv`、`ctx.jobs for run_in_background and the job-backed foreground path` | `tool/call`、`tool/result` | - | bash 工具是 bash 执行器 seam 面向模型的消费方。组合中有 job 注册表时,每次调用一启动就注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具(来自 `@deepseek-ai/dsh-tool-jobs`)收集/停止;没有注册表或 `enableRunInBackground: false` 时,工具注册不带 `run_in_background` 参数的纯前台 schema。 |
28
32
  | `@deepseek-ai/dsh-tool-present` | `present` | `ctx.tools`, `ctx.fs`, `ctx.sessionProjections` | `tool/call`, `deliverables/presented 在成功的最终结果之后`, `tool/result` | - | 交付归调用方 Session 所有;Web ui-deliverables 提供源文件打开与卡片。 |
29
- | `@deepseek-ai/dsh-tool-pwsh` | `pwsh` | `ctx.tools`、`ctx.shell`、`ctx.systemPrompt`、`ctx.shellEnv`、`ctx.jobs at call time for run_in_background` | `tool/call`、`tool/result` | - | pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费方(由 `@deepseek-ai/dsh-pwsh-local` 等 PowerShell 执行器为 `ctx.shell` 提供后端);除沙箱接口外,它逐项对应 bash 工具调用。使用 `run_in_background` 的运行会注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具收集/停止;托管的 `DSH_*` 环境来自 `@deepseek-ai/dsh-shell-env`。每次调用都在新进程中运行,不使用持久 PTY 会话。路径采用原生 `C:\...` 形式,变量采用 `$env:NAME`。 |
30
- | `@deepseek-ai/dsh-tool-cordis` | `cordis_define`、`cordis_inspect_list`、`cordis_inspect_query`、`cordis_inspect_self`、`cordis_run`、`cordis_stop`、`cordis_undefine` | `ctx.tools`、`ctx.dynamicCordisRunner` | `tool/call`、`tool/result`、`process-local dynamic package lifecycle` | - | 不在任何随产品发布的树中,需要显式选择启用;动态 Package 代码可以访问真实运行时,见 .agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.md。该工具集注入 `@deepseek-ai/dsh-cordis-host-runner` 提供的 `ctx.dynamicCordisRunner`,后者拥有定义注册表和 vm 沙箱;组合缺少它时这些工具不会激活。运行中的 Package 在停止、undefine 或 DSH 重启前可以注册**额外的**模型可见工具;发生这类工具集变化时,系统会记录完整且有变动的请求头。 |
33
+ | `@deepseek-ai/dsh-tool-pwsh` | `pwsh` | `ctx.tools`、`ctx.shell`、`ctx.systemPrompt`、`ctx.shellEnv`、`ctx.jobs for run_in_background and the job-backed foreground path` | `tool/call`、`tool/result` | - | pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费方(由 `@deepseek-ai/dsh-pwsh-local` 等 PowerShell 执行器为 `ctx.shell` 提供后端);除沙箱接口外,它逐项对应 bash 工具调用。使用 `run_in_background` 的运行会注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具收集/停止;托管的 `DSH_*` 环境来自 `@deepseek-ai/dsh-shell-env`。每次调用都在新进程中运行,不使用持久 PTY 会话。路径采用原生 `C:\...` 形式,变量采用 `$env:NAME`。 |
34
+ | `@deepseek-ai/dsh-tool-cordis` | `cordis_inspect_list`, `cordis_inspect_query` | `ctx.tools`, `ctx.cordisInspect` | `tool/call`, `tool/result` | - | 创造模式提供两个只读运行时检查工具。Cordis host runner 提供检查注册表;Client 查询需要已连接页面。持久化变更编写为组合包,再通过 plugin_manager 安装。 |
31
35
  | `@deepseek-ai/dsh-tool-bash-persistent` | `bash` | `ctx.tools`、`ctx.terminals`、`an owning Agent at execution time` | `tool/call`、`PTY shell state`、`tool/result` | - | 一个按所有者隔离的持久 bash 工具;部署组合提供 PTY 后端,并可覆盖面向模型的环境描述。 |
32
36
  | `@deepseek-ai/dsh-tool-pwsh-persistent` | `pwsh` | `ctx.tools`、`ctx.terminals`、`an owning Agent at execution time` | `tool/call`、`PTY shell state`、`tool/result` | - | 一个按所有者隔离的持久 pwsh 工具,持久 bash 工具的 Windows 对应物;部署组合提供 pwsh 方言的 PTY 后端,并可覆盖面向模型的环境描述。 |
33
37
  | `@deepseek-ai/dsh-tool-str-replace-editor` | `str_replace_editor` | `ctx.tools`、`ctx.fs` | `tool/call`、`fs/observed after view presence/absence, edit absence, or successful mutation`、`tool/result` | - | 基于文件系统 seam 的独立查看/创建/唯一字面量替换/按行插入工具;可与任何 shell 或终端接口组合。 |
@@ -35,7 +39,7 @@ editSource: "docs/tool-catalog.zh.md"
35
39
  | `@deepseek-ai/dsh-tool-fs-search` | `glob`、`grep` | `ctx.tools`、`ctx.subprocess`、`ctx.systemPrompt` | `tool/call`、`tool/result` | - | glob 和 grep 是无条件可用的发现工具,通过 ctx.subprocess spawn 随包提供的 ripgrep 二进制文件(`@vscode/ripgrep`),并作为普通前台调用运行,绝不作为后台任务;无需在宿主机安装 `rg`,也不经过 shell 层。本目录使用 `sampleOverCapGlobResults: true`;部署必须显式选择该行为。结果超过上限时,会通过可选的 ctx.spillStore 后端保存完整的格式化列表;在共置部署中,如果后端公开本地路径,返回的定位信息可供后续读取/搜索。 |
36
40
  | `@deepseek-ai/dsh-tool-terminal` | `terminal_close`、`terminal_list`、`terminal_open`、`terminal_read`、`terminal_send`、`terminal_signal` | `ctx.tools`、`ctx.terminals`、`ctx.systemPrompt`、`ctx.jobs at call time for run_in_background` | `tool/call`、`tool/result` | - | 这 6 个终端工具需要选择启用,用于补充一次性 bash/文件系统工具。`terminal_send(run_in_background: true)` 会注册到 `ctx.jobs`;schema 不包含 TUI、具名按键序列、BEL、调整尺寸、自动启动和跨 agent 共享。 |
37
41
  | `@deepseek-ai/dsh-tool-goal` | `create_goal`、`get_goal`、`update_goal` | `ctx.tools`、`ctx.agents`、`ctx.goals`、`ctx.systemPrompt`、`a calling Agent in an authorized open turn` | `tool/call`、`goal/change for mutations`、`tool/result` | - | create、edit、pause 和 resume 要求直接来自人类的根权限;complete 和 blocked 也接受确切的当前 Goal Round。blocked 的默认下限是 3 个获准的 Round。 |
38
- | `@deepseek-ai/dsh-schedule` | `schedule_create`、`schedule_delete`、`schedule_list` | `ctx.tools`、`ctx.sessions`、Session 持久化、未来创建的 live 根 Agent | `tool/call`、`schedule/change create or delete`、`tool/result` | - | 仅在选择启用的 Schedule 插件加载后创建的 live 根 Agent scope 内注册。版本 1 接受 after_seconds、显式绝对 at 和有界固定速率 every_seconds,并披露 session-local 交付;管理读取与变更必须通过共享的 Session 持久化 barrier。 |
42
+ | `@deepseek-ai/dsh-tool-schedule` | `schedule_create`、`schedule_delete`、`schedule_list`、`schedule_update` | `ctx.tools`、`ctx.schedule` | `tool/call`、Schedule storage domain 创建、更新或删除、`tool/result` | - | preset 或 Agent scope 挂载本包;由 preset 决定哪些 agent 获得这四个管理工具。每次调用都作用于调用方 Agent 的 Session。接受 after_seconds、显式绝对 at、有界固定速率 every_seconds、带显式 IANA 时区的每日与每周本地时间,以及作为五字段表达式的 cron。管理使用宿主 storage domain;到期消息会恢复原 Session。 |
39
43
  | `@deepseek-ai/dsh-tool-lsp` | `lsp` | `ctx.tools`、`ctx.lsp`、`ctx.systemPrompt` | `tool/call`、`tool/result` | - | lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,因此其模型可见 schema 在更换提供方时保持稳定。运行时要求已注册提供方,例如 `@deepseek-ai/dsh-lsp-stdio`;如果没有提供方,查询会返回结构化 `LSP_UNAVAILABLE` 错误,而不会改变 schema。 |
40
44
  | `@deepseek-ai/dsh-tool-ralph` | `ralph` | `ctx.tools`、`ctx.workflowEngine`、`ctx.subagents`、`ctx.systemPrompt`、`a calling Agent (exec.agent parents every fresh round)` | `tool/call`、`tool/result`、`workflow and child session events during execution` | - | 固定的前台工作流会在每个 Round 启动一个全新的结构化子级;模型只能选择不可变目标和可选的 Round 上限。 |
41
45
  | `@deepseek-ai/dsh-tool-skill` | `skill` | `ctx.tools`、`ctx.agents`、`ctx.skills` | `tool/call`、`tool/result`、`user/message replacement catalogs via agent.inject()` | - | - |
@@ -46,509 +50,743 @@ editSource: "docs/tool-catalog.zh.md"
46
50
  | `@deepseek-ai/dsh-experimental-tool-agent-team` | `interrupt_agent`、`list_agents`、`send_message`、`spawn_teammate`、`team_task_create`、`team_task_get`、`team_task_list`、`team_task_update`、`wait_agent` | `ctx.tools`、`ctx.systemPrompt`、`ctx.agentTeams`、`an exact live Team member Agent` | `tool/call`、`team/member`、`team/message/queued`、`team/message/delivered`、`team/task`、`tool/result` | - | 这 9 个工具限定于隐式 Team Lead 与持久 teammate 作用域。随产品发布的 dsh-base bundle 默认禁用该包;文档中的 Agent Teams profile patch 会启用它,并禁用旧 continuable child 的同名控制工具。 |
47
51
  | `@deepseek-ai/dsh-tool-todo` | `todo_write` | `ctx.tools`、`owning Agent session` | `tool/call`、`todo/write`、`tool/result` | - | todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为检查清单。`allowParallelInProgress` 是没有默认值的必填项,因此本目录明确选择 `true`,对应描述允许同时存在多个 `in_progress` 项。选择 `false` 的部署会获得同一工具,但描述会要求只能有 1 个活动任务。 |
48
52
  | `@deepseek-ai/dsh-tool-workflow` | `workflow` | `ctx.tools`、`ctx.workflowEngine`、`ctx.systemPrompt`、`a calling Agent (exec.agent parents the script children)` | `tool/call`、`tool/result` | - | - |
53
+ | `@deepseek-ai/dsh-tool-workspace-dependencies` | `load_workspace_dependencies` | `ctx.tools` | `tool/call`, `tool/result` | - | - |
49
54
  | `@deepseek-ai/dsh-tool-web` | `web_fetch`、`web_search` | `ctx.tools`、`ctx.web`、`ctx.systemPrompt` | `tool/call`、`tool/result` | - | web_search 和 web_fetch 将提供方选择置于 ctx.web 之后,使模型可见 schema 在更换后端时保持稳定。 |
50
55
 
51
- <a id="deepseek-aidsh-tool-ask-user"></a>
56
+ <a id="deepseek-aidsh-plugin-manager"></a>
52
57
 
53
- ## `@deepseek-ai/dsh-tool-ask-user`
58
+ ## `@deepseek-ai/dsh-plugin-manager`
54
59
 
55
- ### `ask_user_question`
60
+ ### `plugin_manager`
56
61
 
57
- 继续操作前,如果需要确认、选择或缺失的信息,请向用户提出简明问题。发送一个或多个问题,每个问题都带一个稳定 id,该 id 会在答案中原样返回。
62
+ 列出当前 profile 中的插件或组合包,启用或禁用它们,安装组合包或移除已安装的组合包。每项操作都要求 danger-full-access 权限或本次调用的批准。批准不改变会话权限模式。变更影响该 profile 的所有会话。先列出条目以获取准确标识。包安装可能运行已获批准的构建脚本。支持热更新的 profile 立即应用变更;仅启动时加载的 profile 需要重启。不兼容的 DSH peer 依赖会阻止安装和激活。版本豁免可能导致崩溃和数据丢失:授权前必须警告用户,并获得用户对精确插件版本与运行时版本组合的明确许可。
58
63
 
59
64
  ```json
60
65
  {
61
66
  "type": "object",
62
67
  "properties": {
63
- "questions": {
68
+ "action": {
69
+ "type": "string",
70
+ "description": "Management operation.",
71
+ "enum": [
72
+ "list_plugins",
73
+ "list_bundles",
74
+ "set_plugin",
75
+ "set_bundle",
76
+ "install_bundle",
77
+ "remove_bundle",
78
+ "list_version_exemptions",
79
+ "set_version_exemption"
80
+ ]
81
+ },
82
+ "target": {
83
+ "type": "string",
84
+ "description": "Plugin entry id, bundle package name, or installation spec, according to action."
85
+ },
86
+ "enabled": {
87
+ "type": "boolean",
88
+ "description": "Required for set operations; defaults to true for installation. For set_version_exemption, true grants and false revokes."
89
+ },
90
+ "runtimeVersion": {
91
+ "type": "string",
92
+ "description": "For set_version_exemption: exact DSH version from list_version_exemptions. Target must be the manifest package-name@version, not an alias or version range."
93
+ },
94
+ "acceptRisk": {
95
+ "type": "boolean",
96
+ "description": "For granting an exemption: true only after warning the user about possible crashes and data loss and receiving explicit permission for this exact plugin/runtime pair. General installation permission is not enough."
97
+ },
98
+ "approvedBuilds": {
64
99
  "type": "array",
65
- "description": "Questions to ask the user before continuing.",
100
+ "description": "For install_bundle: pass names from pendingBuilds only after the user explicitly approves running their install scripts in the conversation. This grants persistent permission for this profile.",
66
101
  "items": {
67
- "type": "object",
68
- "additionalProperties": true,
69
- "properties": {
70
- "id": {
71
- "type": "string",
72
- "description": "Stable id for this question; echoed in the answer."
73
- },
74
- "question": {
75
- "type": "string",
76
- "description": "The specific question to ask the user."
77
- },
78
- "header": {
79
- "type": "string",
80
- "description": "Optional short heading for the question, such as \"Confirm\" or \"Choose Mode\"."
81
- },
82
- "options": {
83
- "type": "array",
84
- "description": "Optional choices to show the user. If you recommend one, put it first and append \"(Recommended)\" to that label.",
85
- "items": {
86
- "type": "object",
87
- "additionalProperties": true,
88
- "properties": {
89
- "label": {
90
- "type": "string",
91
- "description": "Short user-facing option label."
92
- },
93
- "description": {
94
- "type": "string",
95
- "description": "One sentence explaining the tradeoff or impact."
96
- }
97
- },
98
- "required": [
99
- "label"
100
- ]
101
- }
102
- },
103
- "multi_select": {
104
- "type": "boolean",
105
- "description": "Whether the user may select more than one option. Defaults to false."
106
- }
107
- },
108
- "required": [
109
- "id",
110
- "question"
111
- ]
102
+ "type": "string"
112
103
  }
104
+ },
105
+ "registry": {
106
+ "type": "string",
107
+ "description": "For install_bundle: the npm registry URL asked first, when the user names one; otherwise the configured registry is asked, and its configured fallbacks while a registry is unreachable."
108
+ },
109
+ "offset": {
110
+ "type": "number",
111
+ "description": "Zero-based list offset; defaults to 0."
112
+ },
113
+ "limit": {
114
+ "type": "number",
115
+ "description": "List page size, from 1 to 100; defaults to 25."
113
116
  }
114
117
  },
115
118
  "required": [
116
- "questions"
119
+ "action"
117
120
  ]
118
121
  }
119
122
  ```
120
123
 
121
- 来源:[`packages/interaction/tool-ask-user/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/tool-ask-user/src/index.ts)
122
-
123
- ask_user_question 会暂停工具调用,直到当前 UI 提供方返回人类答案。
124
+ 来源: [`packages/boot/plugin-manager/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/boot/plugin-manager/src/tools.ts)
124
125
 
125
- <a id="deepseek-aidsh-tools"></a>
126
+ <a id="deepseek-aidsh-mcp-resources"></a>
126
127
 
127
- ## `@deepseek-ai/dsh-tools`
128
+ ## `@deepseek-ai/dsh-mcp-resources`
128
129
 
129
- ### `run_code`
130
+ ### `list_mcp_resource_templates`
130
131
 
131
- 针对可用工具执行 TypeScript 程序。接受两个必填参数:`code`,即异步函数的**函数体**(仅使用可擦除语法;支持顶层 `await` 和 `return`);以及 `description`,简要说明该程序做什么。请根据系统提示词中的声明,以 `await tools.name(args)` 形式调用工具。只有打印或返回的内容属于程序输出,请谨慎筛选。含图片的子工具结果会在运行结束后附加。
132
+ 列出 MCP 服务器提供的参数化资源 URI 模板。
132
133
 
133
134
  ```json
134
135
  {
135
136
  "type": "object",
136
137
  "properties": {
137
- "code": {
138
+ "server": {
138
139
  "type": "string",
139
- "description": "The program: the body of an async TypeScript function."
140
+ "description": "Configured MCP server name."
140
141
  },
141
- "description": {
142
+ "cursor": {
142
143
  "type": "string",
143
- "description": "Clear, concise description of what this program does in active voice, 5-10 words (shown in the UI). Examples: \"Count TODO markers across packages\"; \"Read failing test and its fixture\"; \"Rename config key in every cordis.yml\"."
144
+ "description": "Continuation cursor returned by this server."
144
145
  }
145
146
  },
146
147
  "required": [
147
- "code",
148
- "description"
148
+ "server"
149
149
  ]
150
150
  }
151
151
  ```
152
152
 
153
- 来源:[`packages/core/tools/src/ptc.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/ptc.ts)
153
+ 来源: [`packages/mcp/mcp-resources/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-resources/src/tools.ts)
154
154
 
155
- 在 `mode: ptc`/`mode: both` 下,它由工具注册表所有,作为可过滤能力层之外的保留传输机制(参见 PTC mode Agent Note)。在 `ptc` 下,它是注册表对协议格式的唯一贡献;其他可见能力在使用已加载运行时语言生成的 SDK 章节中声明。程序通过 binding 调用这些能力,调用按照原生并发约定调度:启动顺序和策略遵循提交顺序,并发安全的函数体最多重叠执行 `maxParallelSubCalls` 个。调用会重新进入完整且受守卫保护的工具流水线,并将每个嵌套执行关联到此外层结果。
155
+ ### `list_mcp_resources`
156
156
 
157
- <a id="deepseek-aidsh-plan-mode"></a>
157
+ 列出 MCP 服务器提供的资源。
158
158
 
159
- ## `@deepseek-ai/dsh-plan-mode`
159
+ ```json
160
+ {
161
+ "type": "object",
162
+ "properties": {
163
+ "server": {
164
+ "type": "string",
165
+ "description": "Configured MCP server name."
166
+ },
167
+ "cursor": {
168
+ "type": "string",
169
+ "description": "Continuation cursor returned by this server."
170
+ }
171
+ },
172
+ "required": [
173
+ "server"
174
+ ]
175
+ }
176
+ ```
160
177
 
161
- ### `exit_plan_mode`
178
+ 来源: [`packages/mcp/mcp-resources/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-resources/src/tools.ts)
162
179
 
163
- 仅在规划模式下使用。提交计划供用户评审,并在获批后退出规划模式。发送**完整的** Markdown 计划,以一个为计划命名的 # 标题开头。用户可以批准(从你的下一步骤起执行计划),也可以要求继续规划;其反馈会通过工具结果返回,请修改后再次提交。
180
+ ### `read_mcp_resource`
181
+
182
+ 按 URI 从指定服务器读取 MCP 资源。使用已列出的 URI 或展开后的资源模板。
164
183
 
165
184
  ```json
166
185
  {
167
186
  "type": "object",
168
187
  "properties": {
169
- "plan": {
188
+ "server": {
170
189
  "type": "string",
171
- "description": "The complete plan, as markdown, starting with a # heading that names it."
190
+ "description": "Configured MCP server name."
191
+ },
192
+ "uri": {
193
+ "type": "string",
194
+ "description": "Resource URI to read."
172
195
  }
173
196
  },
174
197
  "required": [
175
- "plan"
198
+ "server",
199
+ "uri"
176
200
  ]
177
201
  }
178
202
  ```
179
203
 
180
- 来源:[`packages/plan/plan-mode/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
204
+ 来源: [`packages/mcp/mcp-resources/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-resources/src/tools.ts)
181
205
 
182
- 规划未激活时,exit_plan_mode 仍保留在面向模型的 schema 中,这样状态转换不会在规划策略变更之外额外造成工具目录变动。其执行路径会拒绝规划模式之外的调用;在规划模式下,它通过用户交互 seam 提交计划(批准/根据反馈继续规划),批准后会在步骤边界记录规划模式已停用。
206
+ <a id="deepseek-aidsh-experimental-browser-use-stagehand-native"></a>
183
207
 
184
- <a id="deepseek-aidsh-tool-bash"></a>
208
+ ## `@deepseek-ai/dsh-experimental-browser-use-stagehand-native`
185
209
 
186
- ## `@deepseek-ai/dsh-tool-bash`
210
+ ### `stagehand_act`
187
211
 
188
- ### `bash`
212
+ 使用配置的 Stagehand 模型执行一次自然语言浏览器操作。
213
+
214
+ ```json
215
+ {
216
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
217
+ "type": "object",
218
+ "properties": {
219
+ "pageId": {
220
+ "type": "string",
221
+ "minLength": 1
222
+ },
223
+ "instruction": {
224
+ "type": "string",
225
+ "minLength": 1
226
+ }
227
+ },
228
+ "required": [
229
+ "instruction"
230
+ ],
231
+ "additionalProperties": false
232
+ }
233
+ ```
234
+
235
+ 来源:[`packages/experimental/browser-use-stagehand-native/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/browser-use-stagehand-native/src/index.ts)
236
+
237
+ ### `stagehand_extract`
189
238
 
190
- 执行 bash 命令(`bash -c`)并返回 stdout/stderr。每次调用都在新 shell 中运行:调用之间不保留任何状态(cwd、变量、函数),请传入 `workdir`,不要使用 `cd`。非零退出会报告为 `[exit code: N]`。当前 harness 环境信息通过托管的 `$DSH_*` 变量公开,需要时请检查这些变量。命令可能在文件沙箱中运行;被阻止的文件操作报告为 `[sandbox: file access denied under <mode> mode]`,这是策略拒绝,而不是命令缺陷,请勿换一种方式重试。较长的输出会截断,只保留尾部;如可用,完整输出会保存到文件并报告其路径。对于长时间运行的命令,请设置 `run_in_background: true`:调用会立即返回 job id;使用 `job_output` 读取输出,使用 `job_kill` 停止任务。
239
+ 使用配置的 Stagehand 模型与可选的 JSON Schema 提取页面数据。
191
240
 
192
241
  ```json
193
242
  {
243
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
194
244
  "type": "object",
195
245
  "properties": {
196
- "command": {
246
+ "pageId": {
197
247
  "type": "string",
198
- "description": "The bash command to execute."
248
+ "minLength": 1
199
249
  },
200
- "description": {
250
+ "instruction": {
201
251
  "type": "string",
202
- "description": "Clear, concise description of what this command does in active voice, 5-10 words (shown in the UI). Examples: \"ls\" → \"List files in current directory\"; \"git status\" → \"Show working tree status\"; \"npm install\" → \"Install package dependencies\"."
252
+ "minLength": 1
203
253
  },
204
- "timeoutMs": {
205
- "type": "number",
206
- "description": "Timeout in milliseconds. The executor applies its configured default and cap, and kills the command on expiry."
254
+ "schema": {
255
+ "type": "object",
256
+ "propertyNames": {
257
+ "type": "string"
258
+ },
259
+ "additionalProperties": {
260
+ "$ref": "#/$defs/__schema0"
261
+ }
262
+ }
263
+ },
264
+ "required": [
265
+ "instruction"
266
+ ],
267
+ "additionalProperties": false,
268
+ "$defs": {
269
+ "__schema0": {
270
+ "anyOf": [
271
+ {
272
+ "type": "string"
273
+ },
274
+ {
275
+ "type": "number"
276
+ },
277
+ {
278
+ "type": "boolean"
279
+ },
280
+ {
281
+ "type": "null"
282
+ },
283
+ {
284
+ "type": "array",
285
+ "items": {
286
+ "$ref": "#/$defs/__schema0"
287
+ }
288
+ },
289
+ {
290
+ "type": "object",
291
+ "propertyNames": {
292
+ "type": "string"
293
+ },
294
+ "additionalProperties": {
295
+ "$ref": "#/$defs/__schema0"
296
+ }
297
+ }
298
+ ]
299
+ }
300
+ }
301
+ }
302
+ ```
303
+
304
+ 来源:[`packages/experimental/browser-use-stagehand-native/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/browser-use-stagehand-native/src/index.ts)
305
+
306
+ ### `stagehand_navigate`
307
+
308
+ 将 Stagehand 浏览器标签页导航至指定 URL。
309
+
310
+ ```json
311
+ {
312
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
313
+ "type": "object",
314
+ "properties": {
315
+ "pageId": {
316
+ "type": "string",
317
+ "minLength": 1
207
318
  },
208
- "workdir": {
319
+ "url": {
209
320
  "type": "string",
210
- "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
321
+ "format": "uri"
322
+ }
323
+ },
324
+ "required": [
325
+ "url"
326
+ ],
327
+ "additionalProperties": false
328
+ }
329
+ ```
330
+
331
+ 来源:[`packages/experimental/browser-use-stagehand-native/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/browser-use-stagehand-native/src/index.ts)
332
+
333
+ ### `stagehand_observe`
334
+
335
+ 使用配置的 Stagehand 模型查找符合指令的浏览器操作。
336
+
337
+ ```json
338
+ {
339
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
340
+ "type": "object",
341
+ "properties": {
342
+ "pageId": {
343
+ "type": "string",
344
+ "minLength": 1
211
345
  },
212
- "run_in_background": {
213
- "type": "boolean",
214
- "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
346
+ "instruction": {
347
+ "type": "string",
348
+ "minLength": 1
215
349
  }
216
350
  },
217
351
  "required": [
218
- "command",
219
- "description"
220
- ]
352
+ "instruction"
353
+ ],
354
+ "additionalProperties": false
221
355
  }
222
356
  ```
223
357
 
224
- 来源:[`packages/shell/tool-bash/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-bash/src/index.ts)
358
+ 来源:[`packages/experimental/browser-use-stagehand-native/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/browser-use-stagehand-native/src/index.ts)
225
359
 
226
- bash 工具是 bash 执行器 seam 面向模型的消费方。使用 `run_in_background` 的运行会注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具(来自 `@deepseek-ai/dsh-tool-jobs`)收集/停止;禁用 `enableRunInBackground` 配置(默认为 true)后,该参数会被完全移除。
360
+ ### `stagehand_screenshot`
227
361
 
228
- <a id="deepseek-aidsh-tool-present"></a>
362
+ 截取 Stagehand 标签页图像以供视觉检查。
229
363
 
230
- ## `@deepseek-ai/dsh-tool-present`
364
+ ```json
365
+ {
366
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
367
+ "type": "object",
368
+ "properties": {
369
+ "pageId": {
370
+ "type": "string",
371
+ "minLength": 1
372
+ },
373
+ "fullPage": {
374
+ "default": false,
375
+ "type": "boolean"
376
+ }
377
+ },
378
+ "required": [
379
+ "fullPage"
380
+ ],
381
+ "additionalProperties": false
382
+ }
383
+ ```
231
384
 
232
- ### `present`
385
+ 来源:[`packages/experimental/browser-use-stagehand-native/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/browser-use-stagehand-native/src/index.ts)
233
386
 
234
- 声明交付 Session 文件系统可访问的已有文件。如果你创建或更新的文件是用户要求接收的成果,则必须在写入完成后、最终回复前调用 present,包括通过 Bash 或代码执行创建的文件。在回复中提到文件路径不能替代这次调用。文件必须已存在。用户打开当前源文件;不复制或保存其内容。
387
+ ### `stagehand_tabs`
388
+
389
+ 列出、创建、选择或关闭 Stagehand 浏览器标签页。
390
+
391
+ ```json
392
+ {
393
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
394
+ "oneOf": [
395
+ {
396
+ "type": "object",
397
+ "properties": {
398
+ "action": {
399
+ "type": "string",
400
+ "const": "list"
401
+ }
402
+ },
403
+ "required": [
404
+ "action"
405
+ ],
406
+ "additionalProperties": false
407
+ },
408
+ {
409
+ "type": "object",
410
+ "properties": {
411
+ "action": {
412
+ "type": "string",
413
+ "const": "new"
414
+ },
415
+ "url": {
416
+ "type": "string",
417
+ "format": "uri"
418
+ }
419
+ },
420
+ "required": [
421
+ "action"
422
+ ],
423
+ "additionalProperties": false
424
+ },
425
+ {
426
+ "type": "object",
427
+ "properties": {
428
+ "action": {
429
+ "type": "string",
430
+ "enum": [
431
+ "select",
432
+ "close"
433
+ ]
434
+ },
435
+ "pageId": {
436
+ "type": "string",
437
+ "minLength": 1
438
+ }
439
+ },
440
+ "required": [
441
+ "action",
442
+ "pageId"
443
+ ],
444
+ "additionalProperties": false
445
+ }
446
+ ],
447
+ "type": "object"
448
+ }
449
+ ```
450
+
451
+ 来源:[`packages/experimental/browser-use-stagehand-native/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/browser-use-stagehand-native/src/index.ts)
452
+
453
+ <a id="deepseek-aidsh-tool-ask-user"></a>
454
+
455
+ ## `@deepseek-ai/dsh-tool-ask-user`
456
+
457
+ ### `ask_user_question`
458
+
459
+ 继续操作前,如果需要确认、选择或缺失的信息,请向用户提出简明问题。
235
460
 
236
461
  ```json
237
462
  {
238
463
  "type": "object",
239
464
  "properties": {
240
- "files": {
465
+ "questions": {
241
466
  "type": "array",
467
+ "description": "Questions to ask the user before continuing.",
242
468
  "items": {
243
469
  "type": "object",
244
- "additionalProperties": false,
470
+ "additionalProperties": true,
245
471
  "properties": {
246
- "path": {
472
+ "id": {
247
473
  "type": "string",
248
- "description": "Path of an existing regular file. Relative paths use the Session working directory."
474
+ "description": "Stable id for this question; echoed in the answer."
249
475
  },
250
- "description": {
476
+ "question": {
251
477
  "type": "string",
252
- "description": "Brief description for the user."
478
+ "description": "The specific question to ask the user."
479
+ },
480
+ "header": {
481
+ "type": "string",
482
+ "description": "Optional short heading for the question, such as \"Confirm\" or \"Choose Mode\"."
483
+ },
484
+ "options": {
485
+ "type": "array",
486
+ "description": "Optional choices to show the user. If you recommend one, put it first and append \"(Recommended)\" to that label.",
487
+ "items": {
488
+ "type": "object",
489
+ "additionalProperties": true,
490
+ "properties": {
491
+ "label": {
492
+ "type": "string",
493
+ "description": "Short user-facing option label."
494
+ },
495
+ "description": {
496
+ "type": "string",
497
+ "description": "One sentence explaining the tradeoff or impact."
498
+ }
499
+ },
500
+ "required": [
501
+ "label"
502
+ ]
503
+ }
504
+ },
505
+ "multi_select": {
506
+ "type": "boolean",
507
+ "description": "Whether the user may select more than one option. Defaults to false."
253
508
  }
254
509
  },
255
510
  "required": [
256
- "path"
511
+ "id",
512
+ "question"
257
513
  ]
258
514
  }
259
515
  }
260
516
  },
261
517
  "required": [
262
- "files"
518
+ "questions"
263
519
  ]
264
520
  }
265
521
  ```
266
522
 
267
- 来源: [`packages/fs/tool-present/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/tool-present/src/index.ts)
523
+ 来源:[`packages/interaction/tool-ask-user/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/tool-ask-user/src/index.ts)
268
524
 
269
- 交付归调用方 Session 所有;Web ui-deliverables 提供源文件打开与卡片。
525
+ ask_user_question 默认保持原有阻塞行为;设置 `mode: timed` 后才启用前台超时与 pending 结果,同时问题仍可回答;timed 模式内 `timeout: -1` 让本次调用无限期阻塞。
270
526
 
271
- <a id="deepseek-aidsh-tool-pwsh"></a>
527
+ <a id="deepseek-aidsh-tools"></a>
272
528
 
273
- ## `@deepseek-ai/dsh-tool-pwsh`
529
+ ## `@deepseek-ai/dsh-tools`
274
530
 
275
- ### `pwsh`
531
+ ### `run_code`
276
532
 
277
- 执行 PowerShell 命令(`pwsh -Command`)并返回 stdout/stderr。每次调用都在新的 pwsh 进程中运行:调用之间不保留任何状态(cwd、变量、函数),请传入 `workdir`,不要使用 `cd`。路径采用 Windows 原生形式(`C:\...`);使用 `$env:NAME` 读取环境变量。非零退出会报告为 `[exit code: N]`。当前 harness 环境信息通过托管的 `$env:DSH_*` 变量公开,需要时请检查这些变量。命令可能在文件沙箱中运行;被阻止的文件操作报告为 `[sandbox: file access denied under <mode> mode]`,这是策略拒绝,而不是命令缺陷,请勿换一种方式重试。较长的输出会截断,只保留尾部;如可用,完整输出会保存到文件并报告其路径。在 Windows 上,被强制终止的命令会以 `[exit code: 1]` 结算且不带信号标记,请将其视为中断,而不是命令失败。对于长时间运行的命令,请设置 `run_in_background: true`:调用会立即返回 job id;使用 `job_output` 读取输出,使用 `job_kill` 停止任务。
533
+ 针对可用工具执行 TypeScript 程序。接受两个必填参数:`description`,简要说明该程序做什么;以及 `code`,即异步函数的**函数体**(仅使用可擦除语法;支持顶层 `await` 和 `return`)。请根据系统提示词中的声明,以 `await tools.name(args)` 形式调用工具。只有打印或返回的内容属于程序输出,请谨慎筛选。含图片的子工具结果会在运行结束后附加。
278
534
 
279
535
  ```json
280
536
  {
281
537
  "type": "object",
282
538
  "properties": {
283
- "command": {
539
+ "description": {
284
540
  "type": "string",
285
- "description": "The PowerShell command to execute."
541
+ "description": "Clear, concise description of what this program does in active voice, 5-10 words (shown in the UI). Provide `description` before `code` in the arguments. Examples: \"Count TODO markers across packages\"; \"Read failing test and its fixture\"; \"Rename config key in every cordis.yml\"."
286
542
  },
287
- "description": {
543
+ "code": {
288
544
  "type": "string",
289
- "description": "Clear, concise description of what this command does in active voice, 5-10 words (shown in the UI). Examples: \"ls\" → \"List files in current directory\"; \"git status\" → \"Show working tree status\"; \"Get-Process\" → \"List running processes\"."
545
+ "description": "The program: the body of an async TypeScript function."
290
546
  },
291
547
  "timeoutMs": {
292
548
  "type": "number",
293
- "description": "Timeout in milliseconds. The executor applies its configured default and cap, and kills the command on expiry."
549
+ "description": "Positive elapsed-time budget in milliseconds, capped by the deployment maximum."
294
550
  },
295
- "workdir": {
551
+ "sandbox_permissions": {
296
552
  "type": "string",
297
- "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
553
+ "description": "Wider sandbox mode for this complete program execution; requires justification and approval.",
554
+ "enum": [
555
+ "workspace-write",
556
+ "danger-full-access"
557
+ ]
298
558
  },
299
- "run_in_background": {
300
- "type": "boolean",
301
- "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
559
+ "justification": {
560
+ "type": "string",
561
+ "description": "Reason this complete program needs wider access, shown to the user for approval. Use the language of the user’s current request."
302
562
  }
303
563
  },
304
564
  "required": [
305
- "command",
306
- "description"
565
+ "description",
566
+ "code"
307
567
  ]
308
568
  }
309
569
  ```
310
570
 
311
- 来源:[`packages/shell/tool-pwsh/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-pwsh/src/index.ts)
571
+ 来源:[`packages/core/tools/src/ptc.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/ptc.ts)
312
572
 
313
- pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费方(由 `@deepseek-ai/dsh-pwsh-local` 等 PowerShell 执行器为 `ctx.shell` 提供后端);除沙箱接口外,它逐项对应 bash 工具调用。使用 `run_in_background` 的运行会注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具收集/停止;托管的 `DSH_*` 环境来自 `@deepseek-ai/dsh-shell-env`。每次调用都在新进程中运行,不使用持久 PTY 会话。路径采用原生 `C:\...` 形式,变量采用 `$env:NAME`。
573
+ 在 `mode: ptc`/`mode: both` 下,它由工具注册表所有,作为可过滤能力层之外的保留传输机制(参见 PTC mode Agent Note)。在 `ptc` 下,它是注册表对协议格式的唯一贡献;其他可见能力在使用已加载运行时语言生成的 SDK 章节中声明。程序通过 binding 调用这些能力,调用按照原生并发约定调度:启动顺序和策略遵循提交顺序,并发安全的函数体最多重叠执行 `maxParallelSubCalls` 个。调用会重新进入完整且受守卫保护的工具流水线,并将每个嵌套执行关联到此外层结果。
314
574
 
315
- <a id="deepseek-aidsh-tool-cordis"></a>
575
+ <a id="deepseek-aidsh-plan-mode"></a>
316
576
 
317
- ## `@deepseek-ai/dsh-tool-cordis`
577
+ ## `@deepseek-ai/dsh-plan-mode`
318
578
 
319
- ### `cordis_define`
579
+ ### `exit_plan_mode`
320
580
 
321
- 定义一个不可变的 Cordis Package。新建 Plugin 时使用 kind:"new",只提供 3 至 6 位小写英文字母组成的语义前缀;Host 返回最终 pluginId 和 packageId。修改现有 Plugin 时使用 kind:"existing" 并传入精确 pluginId,以追加 Package 而不覆盖旧版本。code.host 与 code.client 至少提供一个;每个值都是返回 Cordis Plugin 的 plain JavaScript 函数体,不经过 TypeScript、JSX 或 import 转换。依赖 Service、Event、Builtin、Slot 或 token 前先查询 Inspect。Define 只校验参数和语法并记录源码,不申请审批、不执行 apply,也不改变 currentPackageId。成功后用返回的 ID 调用 cordis_run。
581
+ 仅在规划模式下使用。提交计划供用户评审,并在获批后退出规划模式。用户可以批准(从你的下一步骤起执行计划),也可以要求继续规划;其反馈会通过工具结果返回,请修改后再次提交。
322
582
 
323
583
  ```json
324
584
  {
325
585
  "type": "object",
326
586
  "properties": {
327
- "plugin": {
328
- "oneOf": [
329
- {
330
- "type": "object",
331
- "additionalProperties": false,
332
- "properties": {
333
- "kind": {
334
- "type": "string",
335
- "const": "new"
336
- },
337
- "idPrefix": {
338
- "type": "string",
339
- "description": "Suggested semantic prefix of 3–6 lowercase English letters; the Host adds a unique numeric suffix."
340
- }
341
- },
342
- "required": [
343
- "kind",
344
- "idPrefix"
345
- ]
346
- },
347
- {
348
- "type": "object",
349
- "additionalProperties": false,
350
- "properties": {
351
- "kind": {
352
- "type": "string",
353
- "const": "existing"
354
- },
355
- "pluginId": {
356
- "type": "string",
357
- "description": "Exact ID of an existing Plugin; the new Package is appended to that instance."
358
- }
359
- },
360
- "required": [
361
- "kind",
362
- "pluginId"
363
- ]
364
- }
365
- ]
366
- },
367
- "name": {
368
- "type": "string",
369
- "description": "Short, readable Package name."
370
- },
371
- "purpose": {
587
+ "plan": {
372
588
  "type": "string",
373
- "description": "One-sentence, user-facing description of the Package purpose."
374
- },
375
- "code": {
376
- "type": "object",
377
- "additionalProperties": false,
378
- "properties": {
379
- "host": {
380
- "type": "string",
381
- "description": "Plain JavaScript function body that returns the Host-half Cordis Plugin."
382
- },
383
- "client": {
384
- "type": "string",
385
- "description": "Plain JavaScript function body that returns the browser Client-half Cordis Plugin."
386
- }
387
- }
589
+ "description": "The complete plan, as markdown, starting with a # heading that names it."
388
590
  }
389
591
  },
390
592
  "required": [
391
- "plugin",
392
- "name",
393
- "purpose",
394
- "code"
593
+ "plan"
395
594
  ]
396
595
  }
397
596
  ```
398
597
 
399
- 来源:[`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
400
-
401
- ### `cordis_inspect_list`
598
+ 来源:[`packages/plan/plan-mode/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
402
599
 
403
- 列出 Host 当前已知的全部 Cordis Inspect Provider,包括本地 Host Provider 和 Client 最近同步的 manifest。每项包含所属平台、用途、只读方法及输入/输出 schema。创建或修改 Package 前先调用本 Tool,再从结果中选择 cordis_inspect_query 的 provider 和 method。不要猜测名称,也不要把 Inspect method 当作 Plugin 代码可调用的业务 Service。
600
+ 规划未激活时,exit_plan_mode 仍保留在面向模型的 schema 中,这样状态转换不会在规划策略变更之外额外造成工具目录变动。其执行路径会拒绝规划模式之外的调用;在规划模式下,它通过用户交互 seam 提交计划(批准/根据反馈继续规划),批准后会在步骤边界记录规划模式已停用。
404
601
 
405
- ```json
406
- {
407
- "type": "object",
408
- "properties": {}
409
- }
410
- ```
602
+ <a id="deepseek-aidsh-tool-bash"></a>
411
603
 
412
- 来源:[`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
604
+ ## `@deepseek-ai/dsh-tool-bash`
413
605
 
414
- ### `cordis_inspect_query`
606
+ ### `bash`
415
607
 
416
- 执行 Inspect Provider 显式声明的只读查询。platform、provider 和 method 必须来自 cordis_inspect_list,input 必须符合该方法的 schema。在 cordis_define 前用本 Tool 读取精确 Service 方法、Event mode、Builtin 签名、Tool schema、主题 token,或实时 Slot 树及 props。Host 查询在本地执行;Client 查询等待首个有效页面响应,在页面回答或 Tool 被取消前保持 pending。本 Tool 不能调用业务 Service 方法或修改运行时。查询 Service.listService 和 Event.listEvents 时,先不传 input 浏览紧凑签名目录,再查询精确 service 或 event 获取结构化约定和引用类型。查询 Slots.listSubTree 时,先不传 root 浏览紧凑树,再查询精确 root 获取完整注册约定和 props。
608
+ 执行 bash 命令(`bash -c`)并返回 stdout/stderr。每次调用都在新 shell 中运行;请传入 `workdir`,不要使用 `cd`。托管的 `$DSH_*` 变量公开当前 harness 环境信息。较长的输出会截断,只保留尾部;如可用,完整输出会保存到文件并报告其路径。请在参数中先提供 `description`,再提供 `command`。在任何删除或移动之前,请确认解析后的绝对目标路径正是预期路径;绝不要对未经检查的计算路径执行此类操作。未设置的变量会展开为空字符串,因此请用 `${VAR:?}` 保护此类路径中的变量。命令可能在文件沙箱中运行;被阻止的文件操作报告为 `[sandbox: file access denied under <mode> mode]`,这是策略拒绝:请勿换一种方式重试。
417
609
 
418
610
  ```json
419
611
  {
420
612
  "type": "object",
421
613
  "properties": {
422
- "platform": {
614
+ "description": {
423
615
  "type": "string",
424
- "description": "Runtime platform that owns the Provider.",
425
- "enum": [
426
- "host",
427
- "client"
428
- ]
616
+ "description": "Clear, concise description of what this command does in active voice, 5-10 words (shown in the UI). Examples: \"ls\" → \"List files in current directory\"; \"git status\" → \"Show working tree status\"; \"npm install\" → \"Install package dependencies\"."
429
617
  },
430
- "provider": {
618
+ "command": {
431
619
  "type": "string",
432
- "description": "Exact Provider ID returned by cordis_inspect_list."
620
+ "description": "The bash command to execute."
621
+ },
622
+ "timeoutMs": {
623
+ "type": "number",
624
+ "description": "Timeout in milliseconds. The executor applies its configured default and cap; on expiry the command moves to the background as a job instead of being killed."
433
625
  },
434
- "method": {
626
+ "workdir": {
435
627
  "type": "string",
436
- "description": "Exact method name declared by the Provider manifest."
628
+ "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
437
629
  },
438
- "input": {
439
- "description": "Optional query input; it must satisfy the method input schema."
630
+ "run_in_background": {
631
+ "type": "boolean",
632
+ "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
440
633
  }
441
634
  },
442
635
  "required": [
443
- "platform",
444
- "provider",
445
- "method"
636
+ "description",
637
+ "command"
446
638
  ]
447
639
  }
448
640
  ```
449
641
 
450
- 来源:[`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
642
+ 来源:[`packages/shell/tool-bash/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-bash/src/index.ts)
643
+
644
+ bash 工具是 bash 执行器 seam 面向模型的消费方。组合中有 job 注册表时,每次调用一启动就注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具(来自 `@deepseek-ai/dsh-tool-jobs`)收集/停止;没有注册表或 `enableRunInBackground: false` 时,工具注册不带 `run_in_background` 参数的纯前台 schema。
451
645
 
452
- ### `cordis_inspect_self`
646
+ <a id="deepseek-aidsh-tool-present"></a>
647
+
648
+ ## `@deepseek-ai/dsh-tool-present`
649
+
650
+ ### `present`
453
651
 
454
- 按逐层增加的详细程度检查当前 Session 拥有的动态 Cordis 对象。不传 ID 时只列 Plugin 摘要;只传 pluginId 时返回版本指针、最新 Run 和全部 Package 摘要;只有同时传 pluginId 与 packageId 才返回该不可变 Package 的 Host/Client 源码和运行诊断。packageId 不能单独传入。处理 @pluginId、修复异步失败或定义更新版本前,先查询精确 Package。本 Tool 只读,不执行代码,也不改变版本指针。
652
+ 将已有文件声明为交付给用户的最终交付物。当用户需要独立文件时使用,尤其是 Office 文档、电子表格和演示文稿;如果最终回复已经足够,优先使用最终回复。用户打开的是当前文件;不复制其内容。
455
653
 
456
654
  ```json
457
655
  {
458
656
  "type": "object",
459
657
  "properties": {
460
- "pluginId": {
461
- "type": "string",
462
- "description": "Stable Plugin ID returned by cordis_define or injected by @pluginId; omit it to list every current Plugin."
463
- },
464
- "packageId": {
465
- "type": "string",
466
- "description": "Exact immutable Package ID owned by pluginId; when specified, source and diagnostics are returned."
658
+ "files": {
659
+ "type": "array",
660
+ "description": "Usually the 1-2 most important deliverables; at most 4 per call.",
661
+ "items": {
662
+ "type": "object",
663
+ "additionalProperties": false,
664
+ "properties": {
665
+ "path": {
666
+ "type": "string",
667
+ "description": "Path of an existing regular file. Relative paths use the Session working directory."
668
+ },
669
+ "description": {
670
+ "type": "string",
671
+ "description": "Brief description for the user."
672
+ }
673
+ },
674
+ "required": [
675
+ "path"
676
+ ]
677
+ }
467
678
  }
468
- }
679
+ },
680
+ "required": [
681
+ "files"
682
+ ]
469
683
  }
470
684
  ```
471
685
 
472
- 来源:[`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
686
+ 来源: [`packages/deliverables/tool-present/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/deliverables/tool-present/src/index.ts)
473
687
 
474
- ### `cordis_run`
688
+ 交付归调用方 Session 所有;Web ui-deliverables 提供源文件打开与卡片。
689
+
690
+ <a id="deepseek-aidsh-tool-pwsh"></a>
691
+
692
+ ## `@deepseek-ai/dsh-tool-pwsh`
693
+
694
+ ### `pwsh`
475
695
 
476
- 激活动态 Plugin 的一个精确 Package。首次激活、重启 currentPackageId 或回退使用 mode:"run";已有 current 时,即使 Plugin 当前已停止,切换到其他 Package 也使用 mode:"update"。未授权的 Client Package 创建审批请求并返回 awaiting-approval;已授权的 Package 返回 starting,并在浏览器中异步继续。两种结果都不会在 Tool 内等待最终结局。currentPackageId 只在完整成功后改变;失败时保留旧 current 和目标 next。异步成功、拒绝或技术失败通过状态与 steering 报告。技术失败后,用 cordis_inspect_self 读取诊断,修正同一 Plugin 并自主重试。用户拒绝后不要再次申请审批。
696
+ 执行 PowerShell 命令(`pwsh -Command`)并返回 stdout/stderr。每次调用都在新的 pwsh 进程中运行;请传入 `workdir`,不要使用 `cd`。路径采用 Windows 原生形式(`C:\...`);使用 `$env:NAME` 读取环境变量。托管的 `$env:DSH_*` 变量公开当前 harness 环境信息。较长的输出会截断,只保留尾部;如可用,完整输出会保存到文件并报告其路径。在 Windows 上,被强制终止的命令会以 `[exit code: 1]` 结算且不带信号标记,请将其视为中断,而不是命令失败。请在参数中先提供 `description`,再提供 `command`。在任何删除或移动之前,请确认解析后的绝对目标路径正是预期路径;绝不要对未经检查的计算路径执行此类操作。不要给 `$HOME` 等自动变量赋值;变量名不区分大小写,因此 `$home` 就是同一个只读变量。命令可能在文件沙箱中运行;被阻止的文件操作报告为 `[sandbox: file access denied under <mode> mode]`,这是策略拒绝:请勿换一种方式重试。
477
697
 
478
698
  ```json
479
699
  {
480
700
  "type": "object",
481
701
  "properties": {
482
- "pluginId": {
702
+ "description": {
483
703
  "type": "string",
484
- "description": "Stable Plugin ID returned by cordis_define."
704
+ "description": "Clear, concise description of what this command does in active voice, 5-10 words (shown in the UI). Examples: \"ls\" → \"List files in current directory\"; \"git status\" → \"Show working tree status\"; \"Get-Process\" → \"List running processes\"."
485
705
  },
486
- "packageId": {
706
+ "command": {
487
707
  "type": "string",
488
- "description": "Exact immutable Package ID to activate under that Plugin."
708
+ "description": "The PowerShell command to execute."
709
+ },
710
+ "timeoutMs": {
711
+ "type": "number",
712
+ "description": "Timeout in milliseconds. The executor applies its configured default and cap; on expiry the command moves to the background as a job instead of being killed."
489
713
  },
490
- "mode": {
714
+ "workdir": {
491
715
  "type": "string",
492
- "description": "Use run for the first activation, restarting current, or rollback; use update to switch from current to a different Package.",
493
- "enum": [
494
- "run",
495
- "update"
496
- ]
716
+ "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
717
+ },
718
+ "run_in_background": {
719
+ "type": "boolean",
720
+ "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
497
721
  }
498
722
  },
499
723
  "required": [
500
- "pluginId",
501
- "packageId",
502
- "mode"
724
+ "description",
725
+ "command"
503
726
  ]
504
727
  }
505
728
  ```
506
729
 
507
- 来源:[`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
730
+ 来源:[`packages/shell/tool-pwsh/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-pwsh/src/index.ts)
731
+
732
+ pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费方(由 `@deepseek-ai/dsh-pwsh-local` 等 PowerShell 执行器为 `ctx.shell` 提供后端);除沙箱接口外,它逐项对应 bash 工具调用。使用 `run_in_background` 的运行会注册到通用 `ctx.jobs` 运行时,并通过 `job_*` 工具收集/停止;托管的 `DSH_*` 环境来自 `@deepseek-ai/dsh-shell-env`。每次调用都在新进程中运行,不使用持久 PTY 会话。路径采用原生 `C:\...` 形式,变量采用 `$env:NAME`。
733
+
734
+ <a id="deepseek-aidsh-tool-cordis"></a>
735
+
736
+ ## `@deepseek-ai/dsh-tool-cordis`
508
737
 
509
- ### `cordis_stop`
738
+ ### `cordis_inspect_list`
510
739
 
511
- 停止动态 Plugin 的当前 Run,并取消尚未完成的审批或激活请求。保留 Plugin、全部不可变 Package、授权、currentPackageId 和 nextPackageId,以便之后直接运行或更新。停止已处于停止状态的 Plugin 会幂等成功。临时禁用副作用使用本 Tool;永久移除使用 cordis_undefine。
740
+ 列出 Host 当前已知的所有 Cordis Inspect Provider,包括本地 Host Provider 和 Client 同步的最新清单。每项包含平台、用途、只读方法以及输入输出 schema。编写或配置插件前先调用本工具,再从结果选择 cordis_inspect_query 的 provider 和方法。不要猜测名称,也不要把 Inspect 方法当作插件代码可调用的业务 Service。
512
741
 
513
742
  ```json
514
743
  {
515
744
  "type": "object",
516
- "properties": {
517
- "pluginId": {
518
- "type": "string",
519
- "description": "Stable dynamic Plugin ID to stop."
520
- }
521
- },
522
- "required": [
523
- "pluginId"
524
- ]
745
+ "properties": {}
525
746
  }
526
747
  ```
527
748
 
528
- 来源:[`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
749
+ 来源: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
529
750
 
530
- ### `cordis_undefine`
751
+ ### `cordis_inspect_query`
531
752
 
532
- 永久移除当前 Session 拥有的动态 Plugin。如果它正在运行或等待审批,先停止并取消请求,再删除全部 Package、授权和版本指针。返回后,其 pluginId、packageIds、@ 引用和 Package 业务视图均失效;历史卡片只保留“Plugin 已移除”记录。需要保留版本以便重启或回退时不要调用本 Tool,应改用 cordis_stop。
753
+ 执行 Inspect Provider 声明的只读查询。platform、provider 和 method 必须来自 cordis_inspect_list,input 必须符合该方法的 schema。编写插件代码前,用本工具读取准确的 Service 方法、Event 模式、插件 Config schema、Tool schema、主题 token,或实时 Slot 树与 props。Host 查询在本地运行。Client 查询在配置的超时内等待页面首个有效响应;否则返回 Client 错误,或提示重新连接后重试。本工具不能调用业务 Service 方法或修改运行时。
533
754
 
534
755
  ```json
535
756
  {
536
757
  "type": "object",
537
758
  "properties": {
538
- "pluginId": {
759
+ "platform": {
760
+ "type": "string",
761
+ "description": "Runtime platform that owns the Provider.",
762
+ "enum": [
763
+ "host",
764
+ "client"
765
+ ]
766
+ },
767
+ "provider": {
768
+ "type": "string",
769
+ "description": "Exact Provider ID returned by cordis_inspect_list."
770
+ },
771
+ "method": {
539
772
  "type": "string",
540
- "description": "Stable dynamic Plugin ID to remove permanently."
773
+ "description": "Exact method name declared by the Provider manifest."
774
+ },
775
+ "input": {
776
+ "description": "Optional query input; it must satisfy the method input schema."
541
777
  }
542
778
  },
543
779
  "required": [
544
- "pluginId"
780
+ "platform",
781
+ "provider",
782
+ "method"
545
783
  ]
546
784
  }
547
785
  ```
548
786
 
549
- 来源:[`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
787
+ 来源: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
550
788
 
551
- 不在任何随产品发布的树中,需要显式选择启用;动态 Package 代码可以访问真实运行时,见 .agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.md。该工具集注入 `@deepseek-ai/dsh-cordis-host-runner` 提供的 `ctx.dynamicCordisRunner`,后者拥有定义注册表和 vm 沙箱;组合缺少它时这些工具不会激活。运行中的 Package 在停止、undefine 或 DSH 重启前可以注册**额外的**模型可见工具;发生这类工具集变化时,系统会记录完整且有变动的请求头。
789
+ 创造模式提供两个只读运行时检查工具。Cordis host runner 提供检查注册表;Client 查询需要已连接页面。持久化变更编写为组合包,再通过 plugin_manager 安装。
552
790
 
553
791
  <a id="deepseek-aidsh-tool-bash-persistent"></a>
554
792
 
@@ -726,11 +964,11 @@ pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费
726
964
  "properties": {
727
965
  "file_path": {
728
966
  "type": "string",
729
- "description": "Path to edit, resolved by the filesystem backend."
967
+ "description": "Path to edit, resolved by the filesystem backend. Provide `file_path` before `old_string` and `new_string` in the arguments."
730
968
  },
731
969
  "old_string": {
732
970
  "type": "string",
733
- "description": "Literal text to replace. Must match exactly."
971
+ "description": "Literal text to replace."
734
972
  },
735
973
  "new_string": {
736
974
  "type": "string",
@@ -782,7 +1020,7 @@ pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费
782
1020
 
783
1021
  ### `read_image`
784
1022
 
785
- 读取 PNG/JPEG/WebP/GIF 文件并返回图像本身。无扩展名的路径同样被接受;格式按文件内容检测,因此规范化附件路径可以直接传入,无需复制或重命名。Harness 会在下一次模型请求前校验并缩小受支持的大图,因此仅为查看图片时应直接使用此工具,无需安装图片库或创建缩略图。可以用小批次并发读取彼此独立的文件。要求当前模型接受图像输入。
1023
+ 读取 PNG/JPEG/WebP/GIF 文件并返回图像本身。大图会自动缩小;不要为了查看图片而安装图片库或创建缩略图。
786
1024
 
787
1025
  ```json
788
1026
  {
@@ -811,7 +1049,7 @@ pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费
811
1049
  "properties": {
812
1050
  "file_path": {
813
1051
  "type": "string",
814
- "description": "Path to write, resolved by the filesystem backend."
1052
+ "description": "Path to write, resolved by the filesystem backend. Provide `file_path` before `content` in the arguments."
815
1053
  },
816
1054
  "content": {
817
1055
  "type": "string",
@@ -835,7 +1073,7 @@ pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费
835
1073
 
836
1074
  ### `glob`
837
1075
 
838
- 查找路径匹配 glob 模式的文件。只返回匹配的文件路径,绝不返回目录;包括隐藏文件和被忽略的文件,但排除 VCS 元数据目录。最多按修改时间顺序返回 100 条路径;如果结果更多,则改为返回从顶层条目中抽样的 100 条路径,说明已抽样,并报告完整排序列表的保存位置。该工具不枚举目录条目。
1076
+ 查找路径匹配 glob 模式的文件(不含目录),包括隐藏文件和被忽略的文件。最多按修改时间顺序返回 100 条路径;更大的结果会从顶层条目中抽样,并报告完整列表的保存位置。
839
1077
 
840
1078
  ```json
841
1079
  {
@@ -860,7 +1098,7 @@ pwsh 工具是 Windows 组合中 bash 执行器 seam 的 PowerShell 方言消费
860
1098
 
861
1099
  ### `grep`
862
1100
 
863
- 使用 ripgrep 正则表达式搜索文件内容。返回带行号的匹配行,并按文件分组。前 250 条匹配会直接返回;结果达到上限时会报告完整匹配列表的保存位置。如需周边上下文,请对匹配的文件使用 read。
1101
+ 使用 ripgrep 正则表达式搜索文件内容。返回带行号的匹配行,并按文件分组。最多返回 250 条匹配;更大的结果会报告完整匹配列表的保存位置。
864
1102
 
865
1103
  ```json
866
1104
  {
@@ -1060,7 +1298,7 @@ glob 和 grep 是无条件可用的发现工具,通过 ctx.subprocess spawn
1060
1298
 
1061
1299
  ### `create_goal`
1062
1300
 
1063
- 当当前直接人类请求是需要跨自主 Goal Round 持续推进的长期目标时,创建一个持久化的同会话完成目标。即使用户没有明确说「创建目标」,你也可以推断其意图。不要用于简单的单轮工作。执行时会拒绝非人类权限和 subagent 权限。
1301
+ 创建一个持久化目标,使当前会话跨自动延续 Round 持续工作。当直接人类请求是长期目标时使用,即使用户没有说「目标」;不要用于单轮工作。
1064
1302
 
1065
1303
  ```json
1066
1304
  {
@@ -1085,7 +1323,7 @@ glob 和 grep 是无条件可用的发现工具,通过 ctx.subprocess spawn
1085
1323
 
1086
1324
  ### `get_goal`
1087
1325
 
1088
- 读取当前的同会话目标,包括确切的 id/revision、目标、阶段、已完成的延续 Round 数、Round 上限、存在时的阻塞原因,以及是否已准备下一次延续。更新目标前请先调用此工具。
1326
+ 读取当前会话目标,包括 update_goal 所需的 id 和 revision。
1089
1327
 
1090
1328
  ```json
1091
1329
  {
@@ -1098,7 +1336,7 @@ glob 和 grep 是无条件可用的发现工具,通过 ctx.subprocess spawn
1098
1336
 
1099
1337
  ### `update_goal`
1100
1338
 
1101
- 更新确切的当前目标 revision。edit、pause 和 resume 要求直接的顶层人类请求。在自动延续当前目标期间,也允许 complete 和 blocked。在达到配置的最小 Round 数之前会拒绝 blocked;模型仍须判断相同条件是否在这些 Round 中持续存在,并在 blocked_reason 中予以说明。
1339
+ 更新当前目标。
1102
1340
 
1103
1341
  ```json
1104
1342
  {
@@ -1114,7 +1352,7 @@ glob 和 grep 是无条件可用的发现工具,通过 ctx.subprocess spawn
1114
1352
  },
1115
1353
  "action": {
1116
1354
  "type": "string",
1117
- "description": "edit | pause | resume | complete | blocked",
1355
+ "description": "edit, pause, and resume require a direct top-level human request. complete and blocked are also allowed during an automatic continuation of this goal; blocked is rejected before the configured minimum round count.",
1118
1356
  "enum": [
1119
1357
  "edit",
1120
1358
  "pause",
@@ -1133,7 +1371,7 @@ glob 和 grep 是无条件可用的发现工具,通过 ctx.subprocess spawn
1133
1371
  },
1134
1372
  "blocked_reason": {
1135
1373
  "type": "string",
1136
- "description": "Concrete blocking condition; required only with action blocked."
1374
+ "description": "Required only with action blocked: the concrete condition that persisted across rounds and blocks progress."
1137
1375
  }
1138
1376
  },
1139
1377
  "required": [
@@ -1148,13 +1386,13 @@ glob 和 grep 是无条件可用的发现工具,通过 ctx.subprocess spawn
1148
1386
 
1149
1387
  create、edit、pause 和 resume 要求直接来自人类的根权限;complete 和 blocked 也接受确切的当前 Goal Round。blocked 的默认下限是 3 个获准的 Round。
1150
1388
 
1151
- <a id="deepseek-aidsh-schedule"></a>
1389
+ <a id="deepseek-aidsh-tool-schedule"></a>
1152
1390
 
1153
- ## `@deepseek-ai/dsh-schedule`
1391
+ ## `@deepseek-ai/dsh-tool-schedule`
1154
1392
 
1155
1393
  ### `schedule_create`
1156
1394
 
1157
- 在当前会话中创建一条提醒。请提供非空 prompt 和恰好一个 selector:正的安全整数 after_seconds 延时;作为严格带偏移日期时间或本地日期/时间对象的 at;或不小于 300 的安全整数 every_seconds。固定速率提醒始终与创建时刻对齐,会跳过错过的发生时点,并把每条逾期规则的最新一个发生时点合并到一个批次中。交付模式是 session-local:只有此会话处于 live 状态时,提醒才会准时运行;否则提醒会进入 overdue 状态,直至会话恢复。
1395
+ 在当前会话中创建一条提醒,到期时投递 prompt。请恰好提供一个时间参数:after_seconds、at、every_seconds、daily、weekly 或 cron。时区中不存在的本地时间会被跳过;重复出现的本地时间只在较早的时刻触发一次。停机后,重复提醒只投递最近错过的一次。崩溃后可能重复投递。
1158
1396
 
1159
1397
  ```json
1160
1398
  {
@@ -1164,13 +1402,82 @@ create、edit、pause 和 resume 要求直接来自人类的根权限;complete
1164
1402
  "type": "string",
1165
1403
  "description": "Reminder content to present when the target becomes due."
1166
1404
  },
1405
+ "title": {
1406
+ "type": "string",
1407
+ "description": "Task name of at most 120 characters, shown on the task card and in task lists."
1408
+ },
1167
1409
  "after_seconds": {
1168
1410
  "type": "number",
1169
- "description": "Positive safe-integer delay in seconds."
1411
+ "description": "Delay in whole seconds."
1170
1412
  },
1171
1413
  "every_seconds": {
1172
1414
  "type": "number",
1173
- "description": "Fixed-rate safe-integer interval in seconds, at least 300."
1415
+ "description": "Fixed-rate interval in whole seconds, at least 60, aligned to the creation time; changing it with schedule_update re-aligns it to the save time."
1416
+ },
1417
+ "daily": {
1418
+ "type": "object",
1419
+ "description": "Every day at a local time.",
1420
+ "additionalProperties": false,
1421
+ "properties": {
1422
+ "time": {
1423
+ "type": "string",
1424
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 23:00:00."
1425
+ },
1426
+ "time_zone": {
1427
+ "type": "string",
1428
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1429
+ }
1430
+ },
1431
+ "required": [
1432
+ "time",
1433
+ "time_zone"
1434
+ ]
1435
+ },
1436
+ "weekly": {
1437
+ "type": "object",
1438
+ "description": "On the given weekdays at a local time.",
1439
+ "additionalProperties": false,
1440
+ "properties": {
1441
+ "time": {
1442
+ "type": "string",
1443
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 09:00:00."
1444
+ },
1445
+ "time_zone": {
1446
+ "type": "string",
1447
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1448
+ },
1449
+ "weekdays": {
1450
+ "type": "array",
1451
+ "description": "ISO weekdays, Monday 1 through Sunday 7, without repetitions.",
1452
+ "items": {
1453
+ "type": "integer"
1454
+ }
1455
+ }
1456
+ },
1457
+ "required": [
1458
+ "time",
1459
+ "time_zone",
1460
+ "weekdays"
1461
+ ]
1462
+ },
1463
+ "cron": {
1464
+ "type": "object",
1465
+ "description": "Five-field Vixie cron expression in a time zone.",
1466
+ "additionalProperties": false,
1467
+ "properties": {
1468
+ "expression": {
1469
+ "type": "string",
1470
+ "description": "minute hour day-of-month month day-of-week, for example \"*/15 9-17 * * 1-5\". When both day fields are restricted, a date matches if either one matches."
1471
+ },
1472
+ "time_zone": {
1473
+ "type": "string",
1474
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1475
+ }
1476
+ },
1477
+ "required": [
1478
+ "expression",
1479
+ "time_zone"
1480
+ ]
1174
1481
  },
1175
1482
  "at": {
1176
1483
  "oneOf": [
@@ -1198,20 +1505,21 @@ create、edit、pause 和 resume 要求直接来自人类的根权限;complete
1198
1505
  ]
1199
1506
  }
1200
1507
  ],
1201
- "description": "Absolute target as strict offset RFC 3339 or local date/time with an explicit IANA zone."
1508
+ "description": "Absolute target: an RFC 3339 date-time with offset, or a local date, time, and IANA time_zone."
1202
1509
  }
1203
1510
  },
1204
1511
  "required": [
1205
- "prompt"
1512
+ "prompt",
1513
+ "title"
1206
1514
  ]
1207
1515
  }
1208
1516
  ```
1209
1517
 
1210
- 来源:[`packages/schedule/schedule/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/tools.ts)
1518
+ 来源:[`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1211
1519
 
1212
1520
  ### `schedule_delete`
1213
1521
 
1214
- 使用 schedule_create 或 schedule_list 返回的确切 id,删除当前会话中的一条活动提醒。未知或已经结束的 id 会返回 deleted false。
1522
+ 删除当前会话中的一条提醒,活动或已结束的均可。删除不会撤回已经入队的提醒消息。
1215
1523
 
1216
1524
  ```json
1217
1525
  {
@@ -1219,7 +1527,7 @@ create、edit、pause 和 resume 要求直接来自人类的根权限;complete
1219
1527
  "properties": {
1220
1528
  "id": {
1221
1529
  "type": "string",
1222
- "description": "Exact session-local schedule id."
1530
+ "description": "Exact schedule id."
1223
1531
  }
1224
1532
  },
1225
1533
  "required": [
@@ -1228,11 +1536,11 @@ create、edit、pause 和 resume 要求直接来自人类的根权限;complete
1228
1536
  }
1229
1537
  ```
1230
1538
 
1231
- 来源:[`packages/schedule/schedule/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/tools.ts)
1539
+ 来源:[`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1232
1540
 
1233
1541
  ### `schedule_list`
1234
1542
 
1235
- 按创建顺序列出当前会话中的所有活动提醒,包括确切 id、UTC 目标、scheduled 或 overdue 状态,以及 session-local 交付模式。
1543
+ 列出当前会话中的活动提醒。
1236
1544
 
1237
1545
  ```json
1238
1546
  {
@@ -1241,9 +1549,135 @@ create、edit、pause 和 resume 要求直接来自人类的根权限;complete
1241
1549
  }
1242
1550
  ```
1243
1551
 
1244
- 来源:[`packages/schedule/schedule/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/tools.ts)
1552
+ 来源:[`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1553
+
1554
+ ### `schedule_update`
1555
+
1556
+ 原地修改一条提醒并保留其 id。提供新的 title、prompt,或至多一个时间参数;未提供的字段保持原值。需要相对延迟时请新建一条提醒。
1557
+
1558
+ ```json
1559
+ {
1560
+ "type": "object",
1561
+ "properties": {
1562
+ "id": {
1563
+ "type": "string",
1564
+ "description": "Schedule id returned by schedule_list."
1565
+ },
1566
+ "title": {
1567
+ "type": "string",
1568
+ "description": "New task name of at most 120 characters."
1569
+ },
1570
+ "prompt": {
1571
+ "type": "string",
1572
+ "description": "New reminder content."
1573
+ },
1574
+ "every_seconds": {
1575
+ "type": "number",
1576
+ "description": "Fixed-rate interval in whole seconds, at least 60, aligned to the creation time; changing it with schedule_update re-aligns it to the save time."
1577
+ },
1578
+ "daily": {
1579
+ "type": "object",
1580
+ "description": "Every day at a local time.",
1581
+ "additionalProperties": false,
1582
+ "properties": {
1583
+ "time": {
1584
+ "type": "string",
1585
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 23:00:00."
1586
+ },
1587
+ "time_zone": {
1588
+ "type": "string",
1589
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1590
+ }
1591
+ },
1592
+ "required": [
1593
+ "time",
1594
+ "time_zone"
1595
+ ]
1596
+ },
1597
+ "weekly": {
1598
+ "type": "object",
1599
+ "description": "On the given weekdays at a local time.",
1600
+ "additionalProperties": false,
1601
+ "properties": {
1602
+ "time": {
1603
+ "type": "string",
1604
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 09:00:00."
1605
+ },
1606
+ "time_zone": {
1607
+ "type": "string",
1608
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1609
+ },
1610
+ "weekdays": {
1611
+ "type": "array",
1612
+ "description": "ISO weekdays, Monday 1 through Sunday 7, without repetitions.",
1613
+ "items": {
1614
+ "type": "integer"
1615
+ }
1616
+ }
1617
+ },
1618
+ "required": [
1619
+ "time",
1620
+ "time_zone",
1621
+ "weekdays"
1622
+ ]
1623
+ },
1624
+ "cron": {
1625
+ "type": "object",
1626
+ "description": "Five-field Vixie cron expression in a time zone.",
1627
+ "additionalProperties": false,
1628
+ "properties": {
1629
+ "expression": {
1630
+ "type": "string",
1631
+ "description": "minute hour day-of-month month day-of-week, for example \"*/15 9-17 * * 1-5\". When both day fields are restricted, a date matches if either one matches."
1632
+ },
1633
+ "time_zone": {
1634
+ "type": "string",
1635
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1636
+ }
1637
+ },
1638
+ "required": [
1639
+ "expression",
1640
+ "time_zone"
1641
+ ]
1642
+ },
1643
+ "at": {
1644
+ "oneOf": [
1645
+ {
1646
+ "type": "string"
1647
+ },
1648
+ {
1649
+ "type": "object",
1650
+ "additionalProperties": false,
1651
+ "properties": {
1652
+ "date": {
1653
+ "type": "string"
1654
+ },
1655
+ "time": {
1656
+ "type": "string"
1657
+ },
1658
+ "time_zone": {
1659
+ "type": "string"
1660
+ }
1661
+ },
1662
+ "required": [
1663
+ "date",
1664
+ "time",
1665
+ "time_zone"
1666
+ ]
1667
+ }
1668
+ ],
1669
+ "description": "Absolute target: an RFC 3339 date-time with offset, or a local date, time, and IANA time_zone."
1670
+ }
1671
+ },
1672
+ "required": [
1673
+ "id"
1674
+ ]
1675
+ }
1676
+ ```
1677
+
1678
+ Source: [`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1245
1679
 
1246
- 仅在选择启用的 Schedule 插件加载后创建的 live 根 Agent scope 内注册。版本 1 接受 after_seconds、显式绝对 at 和有界固定速率 every_seconds,并披露 session-local 交付;管理读取与变更必须通过共享的 Session 持久化 barrier。
1680
+ preset 或 Agent scope 挂载本包;由 preset 决定哪些 agent 获得这四个管理工具。每次调用都作用于调用方 Agent 的 Session。接受 after_seconds、显式绝对 at、有界固定速率 every_seconds、带显式 IANA 时区的每日与每周本地时间,以及作为五字段表达式的 cron。管理使用宿主 storage domain;到期消息会恢复原 Session。
1247
1681
 
1248
1682
  <a id="deepseek-aidsh-tool-lsp"></a>
1249
1683
 
@@ -1330,7 +1764,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1330
1764
 
1331
1765
  ### `skill`
1332
1766
 
1333
- 加载可用 skill(技能)的完整说明。在执行点名某项 skill 或与其明确匹配的任务前,请使用会话 skill 目录中的确切名称调用此工具。
1767
+ 加载某项 skill(技能)的完整说明。在执行点名某项 skill 或与会话 skill 目录中某项 skill 明确匹配的任务前,请调用此工具。
1334
1768
 
1335
1769
  ```json
1336
1770
  {
@@ -1612,7 +2046,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1612
2046
 
1613
2047
  ### `subagent`
1614
2048
 
1615
- 将一项自包含任务委派给 subagent(在自身上下文中工作的独立 agent),用它卸载聚焦且独立的工作,例如研究、限定范围的实现或分析,以免消耗当前对话的上下文。subagent 会返回结果,但不会返回中间步骤。请提供完整、独立的提示词,因为它看不到当前对话。此调用默认等待结果。设置 `run_in_background: true` 可返回 job id;使用 `job_output` 收集结果,使用 `job_kill` 停止任务。
2049
+ 将一项自包含任务委派给 subagent(在自身上下文中工作的独立 agent),用它卸载聚焦且独立的工作,例如研究、限定范围的实现或分析,以免消耗当前对话的上下文。subagent 会返回结果,但不会返回中间步骤。此调用默认等待结果。
1616
2050
 
1617
2051
  ```json
1618
2052
  {
@@ -1628,7 +2062,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1628
2062
  },
1629
2063
  "run_in_background": {
1630
2064
  "type": "boolean",
1631
- "description": "Whether to run as a background job and return its id. Defaults to false; collect with job_output or stop with job_kill."
2065
+ "description": "Run as a background job and return its id (collect with job_output, stop with job_kill). Defaults to false."
1632
2066
  }
1633
2067
  },
1634
2068
  "required": [
@@ -1648,7 +2082,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1648
2082
 
1649
2083
  ### `interrupt_agent`
1650
2084
 
1651
- 根据 agent id 请求取消后台 agent 的当前轮次。目标可以是你的直接子级,也可以是在你下方创建的更深层 agent。只有当前轮次会停止:已经排队发给该 agent 的消息会一直搁置到后续的 send_message;它启动的 agent 会继续运行;该 agent 本身仍可接受后续操作。停止请求被接受后,此调用立即返回,因此目标可能还会短暂运行;中断一个已经完成的 agent 是可接受的空操作。
2085
+ 请 subagent 停止当前工作。此调用不等待其停止即返回。之后可以用 send_message 继续与直接子级的对话。它启动的 subagent 会继续运行。
1652
2086
 
1653
2087
  ```json
1654
2088
  {
@@ -1656,7 +2090,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1656
2090
  "properties": {
1657
2091
  "agent_id": {
1658
2092
  "type": "string",
1659
- "description": "The agent id of the running agent to interrupt."
2093
+ "description": "The id of an agent created under you: your direct child or a deeper descendant."
1660
2094
  }
1661
2095
  },
1662
2096
  "required": [
@@ -1669,7 +2103,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1669
2103
 
1670
2104
  ### `list_agents`
1671
2105
 
1672
- 按持久 id 和标签列出你的可继续后台 subagent。用它回忆你启动过哪些 subagent,而不是轮询完成情况——subagent 完成时你会被告知。状态来自实时注册表:running 表示 agent 此刻正在工作;idle 表示已加载但处于轮次之间,可能正在等待它启动的 agent;ready 表示它只存在于存储中——可恢复而非终态,也不表示有结果等待收集;`send_message` 会在运行中 child 的最近 step 边界 steer 消息,或为 idle、ready child 启动轮次,且无论处于哪种状态,直接子级都仍可作为 `send_message` 的目标。该快照并非投递承诺;`send_message` 会执行权威检查,仍可能失败。无法读取的子级会作为诊断信息报告,而不会被静默丢弃。`descendants` 作用域会按稳定的前序顺序遍历你下方的整棵树,并为每个条目标注其持久的直接父会话 id 和深度。只有深度为 1 的条目可以使用 `send_message`;更深的条目只能作为 `interrupt_agent` 的候选目标。
2106
+ 列出你启动的 subagent 及其 id、标签和状态。running 表示正在工作;inactive 表示当前未在工作。subagent 完成时你会收到通知,无需反复查看状态。使用 send_message 继续对话。
1673
2107
 
1674
2108
  ```json
1675
2109
  {
@@ -1677,7 +2111,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1677
2111
  "properties": {
1678
2112
  "scope": {
1679
2113
  "type": "string",
1680
- "description": "children (default) lists direct children only; descendants walks the complete tree below you.",
2114
+ "description": "children (default) lists direct children, which accept send_message in any status. descendants lists the whole tree below you with each entry's parent session id and depth; entries deeper than 1 accept only interrupt_agent.",
1681
2115
  "enum": [
1682
2116
  "children",
1683
2117
  "descendants"
@@ -1691,7 +2125,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1691
2125
 
1692
2126
  ### `send_message`
1693
2127
 
1694
- 根据 agent id 向直接可继续 child 发送消息。如果你是驻留的可继续 child,也可以把自己的直接 parent 作为目标。如果目标仍在工作,消息会 steer 其最近的 step;如果目标处于 idle,消息会启动一个轮次。此调用不会返回该 agent 的答案,只会确认消息已投递。调用失败表示消息**未**投递。
2128
+ 向某个 agent 发送消息。工作中的 agent 会在下一个 step 收到消息;空闲的 agent 会以该消息开始新一轮。返回投递确认,而不是该 agent 的答案。
1695
2129
 
1696
2130
  ```json
1697
2131
  {
@@ -1723,7 +2157,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1723
2157
 
1724
2158
  ### `job_kill`
1725
2159
 
1726
- 根据 job id 请求取消正在运行的后台任务。此调用立即返回;任务的工作真正停止后,会以 killed 状态结算。
2160
+ 请求取消正在运行的后台任务。
1727
2161
 
1728
2162
  ```json
1729
2163
  {
@@ -1761,7 +2195,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1761
2195
 
1762
2196
  ### `job_output`
1763
2197
 
1764
- 读取后台任务。流式任务只返回自上次读取以来的输出;最终输出任务会在结算后返回结果。每个响应都以 `[status: ...]` 结尾。读取默认不阻塞;设置 `wait: true` 后,最长等待到配置的上限。
2198
+ 读取后台任务:流式任务返回自上次读取以来的输出,已完成的最终输出任务返回其结果。
1765
2199
 
1766
2200
  ```json
1767
2201
  {
@@ -1773,11 +2207,11 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1773
2207
  },
1774
2208
  "wait": {
1775
2209
  "type": "boolean",
1776
- "description": "Block until the job reaches a terminal status or the timeout expires. A timed-out wait returns [status: running] and leaves the job alive."
2210
+ "description": "Block until the job finishes or the timeout expires; a timed-out wait leaves the job running. Defaults to false."
1777
2211
  },
1778
2212
  "timeout_ms": {
1779
2213
  "type": "number",
1780
- "description": "Max wait in milliseconds (only meaningful with wait: true). Defaults to the configured wait timeout; capped by the configured maximum."
2214
+ "description": "Max wait in milliseconds with wait: true. Defaults to and is capped by configuration."
1781
2215
  }
1782
2216
  },
1783
2217
  "required": [
@@ -1804,7 +2238,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1804
2238
  "properties": {
1805
2239
  "target": {
1806
2240
  "type": "string",
1807
- "description": "Teammate name."
2241
+ "description": "Teammate target returned by spawn_teammate or list_agents."
1808
2242
  }
1809
2243
  },
1810
2244
  "required": [
@@ -1817,7 +2251,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1817
2251
 
1818
2252
  ### `list_agents`
1819
2253
 
1820
- 列出 Lead 与所有持久 teammate,以及各自当前的运行时状态。
2254
+ 列出 Lead 与所有持久 teammate,以及可用于寻址的 target 和当前可用状态。inactive 表示没有轮次在执行,不表示任务结果。provisioning 与 failed 描述成员创建状态。
1821
2255
 
1822
2256
  ```json
1823
2257
  {
@@ -1830,7 +2264,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1830
2264
 
1831
2265
  ### `send_message`
1832
2266
 
1833
- 向另一名 Team member 发送一条持久消息。running target 会在最近的步骤边界收到消息;idle target 会启动一个 turn;inactive teammate 会冷恢复。
2267
+ 向另一名 Team member 发送一条持久消息。running target 会在最近的步骤边界收到消息;inactive target 会启动或恢复一个 turn。
1834
2268
 
1835
2269
  ```json
1836
2270
  {
@@ -1838,7 +2272,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1838
2272
  "properties": {
1839
2273
  "target": {
1840
2274
  "type": "string",
1841
- "description": "Team member name, or lead."
2275
+ "description": "Member target returned by spawn_teammate or list_agents, including lead."
1842
2276
  },
1843
2277
  "message": {
1844
2278
  "type": "string",
@@ -1973,7 +2407,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
1973
2407
  },
1974
2408
  "owner": {
1975
2409
  "type": "string",
1976
- "description": "Optional member-name filter; use unowned for tasks without an owner."
2410
+ "description": "Optional member target from spawn_teammate or list_agents, matching ownerName; use unowned for tasks without an owner."
1977
2411
  },
1978
2412
  "ready": {
1979
2413
  "type": "boolean",
@@ -2047,7 +2481,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
2047
2481
  },
2048
2482
  "owner": {
2049
2483
  "type": "string",
2050
- "description": "Member name for Lead-only reassign; omit to unassign."
2484
+ "description": "Member target from spawn_teammate or list_agents for Lead-only reassign; omit to unassign."
2051
2485
  }
2052
2486
  },
2053
2487
  "required": [
@@ -2087,7 +2521,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后,
2087
2521
 
2088
2522
  ### `todo_write`
2089
2523
 
2090
- 记录并更新当前工作的结构化任务列表。每次调用都要发送**完整列表**,它会**替换**之前的列表,不支持局部更新或逐项编辑。请用它规划多步骤工作并展示进度:开始前为每个具体步骤添加一项 todo。将当前正在处理的每项 todo 标记为 `in_progress`;确实并行运行时(例如并发 subagent 或后台命令)可同时标记多项,顺序工作则标记 1 项。只要工作尚未完成,就应至少有一项任务为 `in_progress`。某项 todo 完成后立即标记为 `completed`,不要批量标记完成;只有全部工作完成后,才可以没有 `in_progress` 项。简单的单步骤任务无需使用列表。状态:`pending`(未开始)、`in_progress`(正在处理)、`completed`(已完成)。
2524
+ 记录并更新任务列表,用于规划多步骤工作并展示进度;简单的单步骤任务无需使用。开始前为每个具体步骤添加一项 todo。只要工作尚未完成,就将正在处理的 todo 标记为 `in_progress`,仅在工作并行运行时同时标记多项。某项 todo 完成后立即标记为 `completed`。
2091
2525
 
2092
2526
  ```json
2093
2527
  {
@@ -2139,18 +2573,14 @@ todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为
2139
2573
 
2140
2574
  运行用于大规模编排 subagent 的 JavaScript 工作流脚本。当工作会分散到许多相互独立的部分时,请使用此工具,例如审查大量文件、执行迁移、开展多角度研究或对发现进行对抗式验证;此时应将编排写成脚本,而不是逐轮委派。
2141
2575
 
2142
- 工作流的身份通过 `meta` 参数以 JSON 形式传入:必填的 `name`(简短 kebab-case)和 `description` 字符串,以及可选的 `whenToUse` 字符串和 `phases` 数组(`{title, detail?, provider?, model?}`)。`script` 参数只能是纯 JavaScript **函数体**,不能是 TypeScript,也不能包含 `export const meta` 语句;meta 是参数而非代码。脚本支持顶层 await;请以 `return <value>` 结尾,该值必须可以 JSON 序列化,并作为此工具的结果。
2143
-
2144
2576
  脚本函数体提供以下钩子:
2145
2577
 
2146
- - `agent(prompt, opts?): Promise<any>`:运行一个 subagent 直至完成。不提供 `opts.schema` 时,解析为子级最终文本;提供 `opts.schema` 时,它必须是以对象为根、且**只能**使用 type/properties/required/additionalProperties/items/enum/const/oneOf 的 JSON Schema,不支持 pattern/format/数值边界,此时解析为通过校验的对象。子级失败时解析为 `null`,可使用 `.filter(Boolean)` 过滤。其他选项包括 `label`(显示名称)、`phase`(进度组),以及相互独立的 `provider`/`model` LLM(大语言模型)目标覆盖项,两者可单独提供。其他任何选项(`effort`/`isolation`/`agentType`)都会明确报错。
2147
- - `pipeline(items, ...stages): Promise<any[]>`:让每个条目分别经过各阶段,阶段之间**没有**屏障;多阶段工作优先使用它。每个阶段接收 `(prev, item, index)`。普通的阶段异常会将该**条目**变为 `null`,并跳过它的剩余阶段。
2578
+ - `agent(prompt, opts?): Promise<any>`:运行一个 subagent 直至完成。不提供 `opts.schema` 时,解析为子级最终文本;提供 `opts.schema` 时,它必须是以对象为根、且**只能**使用 type/properties/required/additionalProperties/items/enum/const/oneOf 的 JSON Schema,此时解析为通过校验的对象。子级失败时解析为 `null`,可使用 `.filter(Boolean)` 过滤。其他选项包括 `label`(显示名称)、`phase`(进度组),以及相互独立的 `provider`/`model` LLM(大语言模型)目标覆盖项。
2579
+ - `pipeline(items, ...stages): Promise<any[]>`:让每个条目分别经过各阶段,阶段之间**没有**屏障;多阶段工作优先使用它。每个阶段接收 `(prev, item, index)`。阶段异常会将该**条目**变为 `null`,并跳过它的剩余阶段。
2148
2580
  - `parallel(thunks): Promise<any[]>`:并发运行零参数函数并等待**全部**完成。它会形成屏障,仅当某个阶段确实需要汇总全部先前结果时使用。抛出异常的 thunk 解析为 `null`。
2149
2581
  - `phase(title)`:开始一个进度阶段;`log(message)`:说明进度;`args`:工具调用的 `args` 输入,原样提供。
2150
2582
 
2151
- 如果误用钩子(参数错误、未知选项、不受支持的 schema、触发上限),抛出的错误**总会**终止脚本,绝不会退化为单个条目的 `null`。
2152
-
2153
- 约束:并发上限和 agent 总数上限均会生效;不提供文件系统、网络、定时器或 Node.js API。具体工作由 agent 完成,脚本只负责编排。该运行在前台执行:整个脚本完成后,调用才会返回。
2583
+ 如果误用钩子(参数错误、未知选项、不受支持的 schema、触发上限),整个脚本会终止,而不会产生 `null`。脚本没有文件系统、网络、定时器或 Node.js API;具体工作由 agent 完成。
2154
2584
 
2155
2585
  ```json
2156
2586
  {
@@ -2158,11 +2588,11 @@ todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为
2158
2588
  "properties": {
2159
2589
  "script": {
2160
2590
  "type": "string",
2161
- "description": "The plain-JS workflow script body (top-level await allowed; NO `export const meta` statement; end with `return <json-value>`)."
2591
+ "description": "The plain JavaScript body, not TypeScript and without an `export const meta` statement; top-level await is allowed. End with `return <value>`; the JSON-serializable value is this tool's result."
2162
2592
  },
2163
2593
  "meta": {
2164
2594
  "type": "object",
2165
- "description": "The workflow identity block (plain JSON — never code).",
2595
+ "description": "The workflow identity as plain JSON, not code.",
2166
2596
  "additionalProperties": true,
2167
2597
  "properties": {
2168
2598
  "name": {
@@ -2216,6 +2646,10 @@ todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为
2216
2646
  "type": "object",
2217
2647
  "description": "Optional JSON input exposed to the script as the `args` global (wrap a bare list as a field, e.g. {\"files\": [...]}).",
2218
2648
  "additionalProperties": true
2649
+ },
2650
+ "run_in_background": {
2651
+ "type": "boolean",
2652
+ "description": "Run as a background job: return a job id immediately instead of waiting; the return value arrives with the completion notice."
2219
2653
  }
2220
2654
  },
2221
2655
  "required": [
@@ -2227,6 +2661,23 @@ todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为
2227
2661
 
2228
2662
  来源:[`packages/workflow/tool-workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/tool-workflow/src/index.ts)
2229
2663
 
2664
+ <a id="deepseek-aidsh-tool-workspace-dependencies"></a>
2665
+
2666
+ ## `@deepseek-ai/dsh-tool-workspace-dependencies`
2667
+
2668
+ ### `load_workspace_dependencies`
2669
+
2670
+ 获取随包附带的 Python 和库目录的绝对路径,以及随包 Python 发行版的版本。payload 提供 Node.js 和 pnpm 时才返回对应路径。Python 含 numpy、pandas、python-docx、python-pptx、openpyxl、Pillow、lxml 与 XlsxWriter。除非用户或工作区指令选择了别的环境,Office 文件请使用这些库。返回 Node.js 和 pnpm 路径时,用该 Node 可执行文件和 pnpm 脚本路径运行 pnpm。本工具不改 PATH,也不改包管理器设置。
2671
+
2672
+ ```json
2673
+ {
2674
+ "type": "object",
2675
+ "properties": {}
2676
+ }
2677
+ ```
2678
+
2679
+ 来源:[`packages/skill/tool-workspace-dependencies/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/skill/tool-workspace-dependencies/src/index.ts)
2680
+
2230
2681
  <a id="deepseek-aidsh-tool-web"></a>
2231
2682
 
2232
2683
  ## `@deepseek-ai/dsh-tool-web`
@@ -2254,7 +2705,7 @@ todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为
2254
2705
 
2255
2706
  ### `web_search`
2256
2707
 
2257
- 在 Web 上搜索最新信息。在必填的 `queries` 数组中提供 1–4 个查询。返回可选的摘要答案和来源 URL 列表。
2708
+ 在 Web 上搜索最新信息。返回可选的摘要答案和来源 URL 列表。
2258
2709
 
2259
2710
  ```json
2260
2711
  {
@@ -2262,7 +2713,7 @@ todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为
2262
2713
  "properties": {
2263
2714
  "queries": {
2264
2715
  "type": "array",
2265
- "description": "Required search queries; accepts 1–4 items and merges their results.",
2716
+ "description": "1–4 search queries; their results are merged.",
2266
2717
  "items": {
2267
2718
  "type": "string"
2268
2719
  }