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.md"
3
+ rawMarkdownPath: "en/reference/tool-catalog.md"
3
4
  ---
4
5
 
5
6
  <!-- Generated by scripts/gen-tool-catalog.ts — do not edit by hand.
@@ -19,13 +20,16 @@ This table connects model-visible tool names to the plugin package and service s
19
20
 
20
21
  | Tool package | Model-visible names | Requires | Writes / affects | Shipped aliases | Deployment note |
21
22
  | --- | --- | --- | --- | --- | --- |
22
- | `@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 pauses the tool call until the active UI provider returns a human answer. |
23
- | `@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` | - | Owned by the tool registry as a reserved transport outside filterable capability layers under `mode: ptc` / `mode: both` (see the PTC mode Agent Note). Under `ptc` it is the registry's only wire contribution; the other visible capabilities are declared in a generated SDK section in the loaded runtime's language, and a program calls them through bindings scheduled under the native concurrency contract (submission-ordered starts and policy; concurrency-safe bodies overlap up to `maxParallelSubCalls`) that re-enter the complete guarded tool pipeline and link each nested execution to this outer result. |
23
+ | `@deepseek-ai/dsh-plugin-manager` | `plugin_manager` | `ctx.tools`, `ctx.pluginManager`, `ctx.sandboxPolicy` | `tool/call`, `tool/result`, `user/message` | - | - |
24
+ | `@deepseek-ai/dsh-mcp-resources` | `list_mcp_resource_templates`, `list_mcp_resources`, `read_mcp_resource` | `ctx.tools`, `ctx.mcpResources` | `tool/call`, `tool/result` | - | - |
25
+ | `@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` | - | - |
26
+ | `@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 keeps the original blocking behavior by default; set `mode: timed` to opt into a foreground timeout and pending result while the question remains answerable. In timed mode, `timeout: -1` keeps that call blocking indefinitely. |
27
+ | `@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` | - | Owned by the tool registry as a reserved transport outside filterable capability layers under `mode: ptc` / `mode: both` (see the PTC mode Agent Note). Under `ptc` it is the registry's only wire contribution; the other visible capabilities are declared in a generated SDK section in the loaded runtime's language, and a program calls them through bindings scheduled under the native concurrency contract (submission-ordered starts and policy; concurrency-safe bodies overlap up to `maxParallelSubCalls`) that re-enter the complete guarded tool pipeline and link each nested execution to this outer result. |
24
28
  | `@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 stays in the model-facing schema while planning is inactive so transitions add no tool-catalog churn on top of the plan-policy change. Its execute path rejects calls outside plan mode; in plan mode it presents the plan over the user-questions seam (approve / keep planning with feedback), and approval logs plan mode inactive at the step boundary. |
25
- | `@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` | - | The bash tool is the model-facing consumer of the bash executor seam. A `run_in_background` run registers with the generic `ctx.jobs` runtime and is collected/stopped through the `job_*` tools from `@deepseek-ai/dsh-tool-jobs`; the `enableRunInBackground` config (default true) removes the parameter entirely when disabled. |
29
+ | `@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` | - | The bash tool is the model-facing consumer of the bash executor seam. With a job registry composed every call registers with the generic `ctx.jobs` runtime as it starts, collected/stopped through the `job_*` tools from `@deepseek-ai/dsh-tool-jobs`; without one, or with `enableRunInBackground: false`, the tool registers a foreground-only schema without the `run_in_background` parameter. |
26
30
  | `@deepseek-ai/dsh-tool-present` | `present` | `ctx.tools`, `ctx.fs`, `ctx.sessionProjections` | `tool/call`, `deliverables/presented after a successful final result`, `tool/result` | - | Deliveries belong to the calling Session; Web ui-deliverables supplies source-file opening and cards. |
27
- | `@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` | - | The pwsh tool is the PowerShell-dialect consumer of the bash executor seam for Windows compositions (a PowerShell executor such as `@deepseek-ai/dsh-pwsh-local` backs `ctx.shell`); it mirrors the bash tool call-for-call minus sandbox controls — `run_in_background` runs register with the generic `ctx.jobs` runtime and are collected/stopped through the `job_*` tools, and the managed `DSH_*` environment comes from `@deepseek-ai/dsh-shell-env`. Each call runs in a fresh process (no persistent PTY session), with native `C:\...` paths and `$env:NAME` variables. |
28
- | `@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` | - | Not in any shipped tree (a deliberate opt-in — dynamic package code reaches the real runtime, see .agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.md). The toolset injects `ctx.dynamicCordisRunner` from `@deepseek-ai/dsh-cordis-host-runner`, which owns the definition registry and the vm sandbox; a composition missing it never activates the tools. A running package may register ADDITIONAL model-visible tools until it is stopped, undefined, or DSH restarts; a full changed request header logs those tool-set changes. |
31
+ | `@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` | - | The pwsh tool is the PowerShell-dialect consumer of the bash executor seam for Windows compositions (a PowerShell executor such as `@deepseek-ai/dsh-pwsh-local` backs `ctx.shell`); it mirrors the bash tool call-for-call minus sandbox controls — `run_in_background` runs register with the generic `ctx.jobs` runtime and are collected/stopped through the `job_*` tools, and the managed `DSH_*` environment comes from `@deepseek-ai/dsh-shell-env`. Each call runs in a fresh process (no persistent PTY session), with native `C:\...` paths and `$env:NAME` variables. |
32
+ | `@deepseek-ai/dsh-tool-cordis` | `cordis_inspect_list`, `cordis_inspect_query` | `ctx.tools`, `ctx.cordisInspect` | `tool/call`, `tool/result` | - | Creator mode provides two read-only runtime inspection tools. The Cordis host runner supplies the inspection registry; Client queries require a connected page. Author persistent changes as bundles and install them with plugin_manager. |
29
33
  | `@deepseek-ai/dsh-tool-bash-persistent` | `bash` | `ctx.tools`, `ctx.terminals`, `an owning Agent at execution time` | `tool/call`, `PTY shell state`, `tool/result` | - | One owner-isolated persistent bash tool; deployment composition supplies the PTY backend and may override the model-facing environment description. |
30
34
  | `@deepseek-ai/dsh-tool-pwsh-persistent` | `pwsh` | `ctx.tools`, `ctx.terminals`, `an owning Agent at execution time` | `tool/call`, `PTY shell state`, `tool/result` | - | One owner-isolated persistent pwsh tool, the Windows counterpart of the persistent bash tool; deployment composition supplies a pwsh-dialect PTY backend and may override the model-facing environment description. |
31
35
  | `@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` | - | Standalone view/create/unique literal replace/line insert tool over the filesystem seam; it composes with any shell or terminal API. |
@@ -33,7 +37,7 @@ This table connects model-visible tool names to the plugin package and service s
33
37
  | `@deepseek-ai/dsh-tool-fs-search` | `glob`, `grep` | `ctx.tools`, `ctx.subprocess`, `ctx.systemPrompt` | `tool/call`, `tool/result` | - | glob and grep are unconditional discovery tools that spawn the packaged ripgrep binary (`@vscode/ripgrep`) through ctx.subprocess as ordinary foreground calls (never background jobs) — no host `rg` install and no shell layer. The catalog uses `sampleOverCapGlobResults: true`; deployments must choose that behavior explicitly. Capped results save the complete formatted list through the optional ctx.spillStore backend; returned locators are follow-up-readable/searchable when the backend exposes local paths in co-located deployments. |
34
38
  | `@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` | - | The six terminal tools are opt-in and complement one-shot shell/filesystem tools. `terminal_send(run_in_background: true)` registers with `ctx.jobs`; TUI, named key sequences, BEL, resize, auto-start, and cross-agent sharing are absent from the schema. |
35
39
  | `@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, and resume require direct-human root authority; complete and blocked also accept the exact current goal round. The default blocked lower bound is three admitted rounds. |
36
- | `@deepseek-ai/dsh-schedule` | `schedule_create`, `schedule_delete`, `schedule_list` | `ctx.tools`, `ctx.sessions`, `Session persistence`, `a future live root Agent` | `tool/call`, `schedule/change create or delete`, `tool/result` | - | Registered only inside live root Agent scopes created after the opt-in Schedule plugin loads. Version 1 accepts after_seconds, explicit absolute at, and bounded fixed-rate every_seconds, and discloses session-local delivery; management reads and mutations require the shared Session persistence barrier. |
40
+ | `@deepseek-ai/dsh-tool-schedule` | `schedule_create`, `schedule_delete`, `schedule_list`, `schedule_update` | `ctx.tools`, `ctx.schedule` | `tool/call`, `Schedule storage domain create, update, or delete`, `tool/result` | - | A preset or Agent scope mounts this package; the preset decides which agents receive the four management tools. Each call acts on the calling Agent's Session. Accepts after_seconds, explicit absolute at, bounded fixed-rate every_seconds, daily and weekly local times in an explicit IANA zone, and cron as a five-field expression. Management uses the Host storage domain; due messages resume the original Session. |
37
41
  | `@deepseek-ai/dsh-tool-lsp` | `lsp` | `ctx.tools`, `ctx.lsp`, `ctx.systemPrompt` | `tool/call`, `tool/result` | - | The lsp tool keeps provider selection and language-server subprocesses behind ctx.lsp, so its model-visible schema stays stable across providers. Requires a registered provider (e.g. `@deepseek-ai/dsh-lsp-stdio`) at runtime; without one, a query returns the structured `LSP_UNAVAILABLE` error rather than changing the schema. |
38
42
  | `@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` | - | A fixed foreground workflow starts one fresh structured child per round; the model selects only the immutable objective and an optional round cap. |
39
43
  | `@deepseek-ai/dsh-tool-skill` | `skill` | `ctx.tools`, `ctx.agents`, `ctx.skills` | `tool/call`, `tool/result`, `user/message replacement catalogs via agent.inject()` | - | - |
@@ -44,509 +48,743 @@ This table connects model-visible tool names to the plugin package and service s
44
48
  | `@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` | - | All nine tools are scoped to implicit Team Leads and durable teammates. The shipped dsh-base bundle keeps the package disabled; the documented Agent Teams profile patch enables it while disabling the legacy continuable-child control names. |
45
49
  | `@deepseek-ai/dsh-tool-todo` | `todo_write` | `ctx.tools`, `owning Agent session` | `tool/call`, `todo/write`, `tool/result` | - | todo_write is session-owned state; UIs render the latest todo/write event as a checklist. `allowParallelInProgress` is required with no default, so the catalog states its choice: `true`, whose description invites several `in_progress` items. A deployment choosing `false` receives the same tool with a description asking for exactly one active task. |
46
50
  | `@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` | - | - |
51
+ | `@deepseek-ai/dsh-tool-workspace-dependencies` | `load_workspace_dependencies` | `ctx.tools` | `tool/call`, `tool/result` | - | - |
47
52
  | `@deepseek-ai/dsh-tool-web` | `web_fetch`, `web_search` | `ctx.tools`, `ctx.web`, `ctx.systemPrompt` | `tool/call`, `tool/result` | - | web_search and web_fetch keep provider selection behind ctx.web so model-visible schemas stay stable across backend swaps. |
48
53
 
49
- <a id="deepseek-aidsh-tool-ask-user"></a>
54
+ <a id="deepseek-aidsh-plugin-manager"></a>
50
55
 
51
- ## `@deepseek-ai/dsh-tool-ask-user`
56
+ ## `@deepseek-ai/dsh-plugin-manager`
52
57
 
53
- ### `ask_user_question`
58
+ ### `plugin_manager`
54
59
 
55
- Ask the user a concise question when you need confirmation, a choice, or missing information before proceeding. Send one or more questions, each with a stable id that will be echoed in the answer.
60
+ List plugins or bundles in the current profile, enable or disable them, install a bundle, or remove an installed bundle. Every action requires danger-full-access permission or approval for this call. Approval does not change the session permission mode. Changes affect every session in this profile. List first to obtain exact identifiers. Package installation can execute allowed build scripts. Live profiles apply changes immediately; startup profiles require restart. Incompatible DSH peer dependencies block installation and activation. Version exemptions risk crashes and data loss: warn the user and obtain explicit permission for the exact plugin and runtime versions before granting one.
56
61
 
57
62
  ```json
58
63
  {
59
64
  "type": "object",
60
65
  "properties": {
61
- "questions": {
66
+ "action": {
67
+ "type": "string",
68
+ "description": "Management operation.",
69
+ "enum": [
70
+ "list_plugins",
71
+ "list_bundles",
72
+ "set_plugin",
73
+ "set_bundle",
74
+ "install_bundle",
75
+ "remove_bundle",
76
+ "list_version_exemptions",
77
+ "set_version_exemption"
78
+ ]
79
+ },
80
+ "target": {
81
+ "type": "string",
82
+ "description": "Plugin entry id, bundle package name, or installation spec, according to action."
83
+ },
84
+ "enabled": {
85
+ "type": "boolean",
86
+ "description": "Required for set operations; defaults to true for installation. For set_version_exemption, true grants and false revokes."
87
+ },
88
+ "runtimeVersion": {
89
+ "type": "string",
90
+ "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."
91
+ },
92
+ "acceptRisk": {
93
+ "type": "boolean",
94
+ "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."
95
+ },
96
+ "approvedBuilds": {
62
97
  "type": "array",
63
- "description": "Questions to ask the user before continuing.",
98
+ "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.",
64
99
  "items": {
65
- "type": "object",
66
- "additionalProperties": true,
67
- "properties": {
68
- "id": {
69
- "type": "string",
70
- "description": "Stable id for this question; echoed in the answer."
71
- },
72
- "question": {
73
- "type": "string",
74
- "description": "The specific question to ask the user."
75
- },
76
- "header": {
77
- "type": "string",
78
- "description": "Optional short heading for the question, such as \"Confirm\" or \"Choose Mode\"."
79
- },
80
- "options": {
81
- "type": "array",
82
- "description": "Optional choices to show the user. If you recommend one, put it first and append \"(Recommended)\" to that label.",
83
- "items": {
84
- "type": "object",
85
- "additionalProperties": true,
86
- "properties": {
87
- "label": {
88
- "type": "string",
89
- "description": "Short user-facing option label."
90
- },
91
- "description": {
92
- "type": "string",
93
- "description": "One sentence explaining the tradeoff or impact."
94
- }
95
- },
96
- "required": [
97
- "label"
98
- ]
99
- }
100
- },
101
- "multi_select": {
102
- "type": "boolean",
103
- "description": "Whether the user may select more than one option. Defaults to false."
104
- }
105
- },
106
- "required": [
107
- "id",
108
- "question"
109
- ]
100
+ "type": "string"
110
101
  }
102
+ },
103
+ "registry": {
104
+ "type": "string",
105
+ "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."
106
+ },
107
+ "offset": {
108
+ "type": "number",
109
+ "description": "Zero-based list offset; defaults to 0."
110
+ },
111
+ "limit": {
112
+ "type": "number",
113
+ "description": "List page size, from 1 to 100; defaults to 25."
111
114
  }
112
115
  },
113
116
  "required": [
114
- "questions"
117
+ "action"
115
118
  ]
116
119
  }
117
120
  ```
118
121
 
119
- Source: [`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)
120
-
121
- ask_user_question pauses the tool call until the active UI provider returns a human answer.
122
+ Source: [`packages/boot/plugin-manager/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/boot/plugin-manager/src/tools.ts)
122
123
 
123
- <a id="deepseek-aidsh-tools"></a>
124
+ <a id="deepseek-aidsh-mcp-resources"></a>
124
125
 
125
- ## `@deepseek-ai/dsh-tools`
126
+ ## `@deepseek-ai/dsh-mcp-resources`
126
127
 
127
- ### `run_code`
128
+ ### `list_mcp_resource_templates`
128
129
 
129
- Execute a TypeScript program against the available tools. Takes two required arguments: `code`, the BODY of an async function (erasable syntax only; top-level `await` and `return` work), and `description`, a short summary of what the program does. Call tools as `await tools.name(args)` per the declarations in the system prompt. Only what you print or return is program output — curate it. Image-bearing subtool results are attached after the run.
130
+ List parameterized resource URI templates from an MCP server.
130
131
 
131
132
  ```json
132
133
  {
133
134
  "type": "object",
134
135
  "properties": {
135
- "code": {
136
+ "server": {
136
137
  "type": "string",
137
- "description": "The program: the body of an async TypeScript function."
138
+ "description": "Configured MCP server name."
138
139
  },
139
- "description": {
140
+ "cursor": {
140
141
  "type": "string",
141
- "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\"."
142
+ "description": "Continuation cursor returned by this server."
142
143
  }
143
144
  },
144
145
  "required": [
145
- "code",
146
- "description"
146
+ "server"
147
147
  ]
148
148
  }
149
149
  ```
150
150
 
151
- Source: [`packages/core/tools/src/ptc.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/ptc.ts)
151
+ Source: [`packages/mcp/mcp-resources/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-resources/src/tools.ts)
152
152
 
153
- Owned by the tool registry as a reserved transport outside filterable capability layers under `mode: ptc` / `mode: both` (see the PTC mode Agent Note). Under `ptc` it is the registry's only wire contribution; the other visible capabilities are declared in a generated SDK section in the loaded runtime's language, and a program calls them through bindings scheduled under the native concurrency contract (submission-ordered starts and policy; concurrency-safe bodies overlap up to `maxParallelSubCalls`) that re-enter the complete guarded tool pipeline and link each nested execution to this outer result.
153
+ ### `list_mcp_resources`
154
154
 
155
- <a id="deepseek-aidsh-plan-mode"></a>
155
+ List resources available from an MCP server.
156
156
 
157
- ## `@deepseek-ai/dsh-plan-mode`
157
+ ```json
158
+ {
159
+ "type": "object",
160
+ "properties": {
161
+ "server": {
162
+ "type": "string",
163
+ "description": "Configured MCP server name."
164
+ },
165
+ "cursor": {
166
+ "type": "string",
167
+ "description": "Continuation cursor returned by this server."
168
+ }
169
+ },
170
+ "required": [
171
+ "server"
172
+ ]
173
+ }
174
+ ```
158
175
 
159
- ### `exit_plan_mode`
176
+ Source: [`packages/mcp/mcp-resources/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-resources/src/tools.ts)
177
+
178
+ ### `read_mcp_resource`
160
179
 
161
- Use only in plan mode. Present your plan for the user's review and, on approval, leave plan mode. Send the COMPLETE plan as markdown, starting with a # heading that names it. The user may approve (carry out the plan from your next step) or keep planning — their feedback comes back in the tool result; revise and present again.
180
+ Read an MCP resource by URI from the named server. Use a listed URI or an expanded resource template.
162
181
 
163
182
  ```json
164
183
  {
165
184
  "type": "object",
166
185
  "properties": {
167
- "plan": {
186
+ "server": {
168
187
  "type": "string",
169
- "description": "The complete plan, as markdown, starting with a # heading that names it."
188
+ "description": "Configured MCP server name."
189
+ },
190
+ "uri": {
191
+ "type": "string",
192
+ "description": "Resource URI to read."
170
193
  }
171
194
  },
172
195
  "required": [
173
- "plan"
196
+ "server",
197
+ "uri"
174
198
  ]
175
199
  }
176
200
  ```
177
201
 
178
- Source: [`packages/plan/plan-mode/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
202
+ Source: [`packages/mcp/mcp-resources/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-resources/src/tools.ts)
179
203
 
180
- exit_plan_mode stays in the model-facing schema while planning is inactive so transitions add no tool-catalog churn on top of the plan-policy change. Its execute path rejects calls outside plan mode; in plan mode it presents the plan over the user-questions seam (approve / keep planning with feedback), and approval logs plan mode inactive at the step boundary.
204
+ <a id="deepseek-aidsh-experimental-browser-use-stagehand-native"></a>
181
205
 
182
- <a id="deepseek-aidsh-tool-bash"></a>
206
+ ## `@deepseek-ai/dsh-experimental-browser-use-stagehand-native`
183
207
 
184
- ## `@deepseek-ai/dsh-tool-bash`
208
+ ### `stagehand_act`
185
209
 
186
- ### `bash`
210
+ Perform one natural-language browser action using the configured Stagehand model.
211
+
212
+ ```json
213
+ {
214
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
215
+ "type": "object",
216
+ "properties": {
217
+ "pageId": {
218
+ "type": "string",
219
+ "minLength": 1
220
+ },
221
+ "instruction": {
222
+ "type": "string",
223
+ "minLength": 1
224
+ }
225
+ },
226
+ "required": [
227
+ "instruction"
228
+ ],
229
+ "additionalProperties": false
230
+ }
231
+ ```
187
232
 
188
- Execute a bash command (`bash -c`) and return its stdout/stderr. Each call runs in a fresh shell: no state (cwd, variables, functions) persists between calls — pass `workdir` instead of using `cd`. Non-zero exits are reported as `[exit code: N]`. Current harness environment facts are exposed through managed `$DSH_*` variables; inspect them when needed. Commands may run under a file sandbox; a blocked file operation is reported as `[sandbox: file access denied under <mode> mode]` — a policy denial, not a bug in the command; do not retry another way. Long output is truncated to its tail; the full output is saved to a file whose path is reported when available. Set `run_in_background: true` for long-running commands: the call returns a job id immediately; read its output with `job_output` and stop it with `job_kill`.
233
+ Source: [`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)
234
+
235
+ ### `stagehand_extract`
236
+
237
+ Extract page data using the configured Stagehand model and an optional JSON Schema.
189
238
 
190
239
  ```json
191
240
  {
241
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
192
242
  "type": "object",
193
243
  "properties": {
194
- "command": {
244
+ "pageId": {
195
245
  "type": "string",
196
- "description": "The bash command to execute."
246
+ "minLength": 1
197
247
  },
198
- "description": {
248
+ "instruction": {
199
249
  "type": "string",
200
- "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\"."
250
+ "minLength": 1
201
251
  },
202
- "timeoutMs": {
203
- "type": "number",
204
- "description": "Timeout in milliseconds. The executor applies its configured default and cap, and kills the command on expiry."
252
+ "schema": {
253
+ "type": "object",
254
+ "propertyNames": {
255
+ "type": "string"
256
+ },
257
+ "additionalProperties": {
258
+ "$ref": "#/$defs/__schema0"
259
+ }
260
+ }
261
+ },
262
+ "required": [
263
+ "instruction"
264
+ ],
265
+ "additionalProperties": false,
266
+ "$defs": {
267
+ "__schema0": {
268
+ "anyOf": [
269
+ {
270
+ "type": "string"
271
+ },
272
+ {
273
+ "type": "number"
274
+ },
275
+ {
276
+ "type": "boolean"
277
+ },
278
+ {
279
+ "type": "null"
280
+ },
281
+ {
282
+ "type": "array",
283
+ "items": {
284
+ "$ref": "#/$defs/__schema0"
285
+ }
286
+ },
287
+ {
288
+ "type": "object",
289
+ "propertyNames": {
290
+ "type": "string"
291
+ },
292
+ "additionalProperties": {
293
+ "$ref": "#/$defs/__schema0"
294
+ }
295
+ }
296
+ ]
297
+ }
298
+ }
299
+ }
300
+ ```
301
+
302
+ Source: [`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)
303
+
304
+ ### `stagehand_navigate`
305
+
306
+ Navigate a Stagehand browser tab to a URL.
307
+
308
+ ```json
309
+ {
310
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
311
+ "type": "object",
312
+ "properties": {
313
+ "pageId": {
314
+ "type": "string",
315
+ "minLength": 1
205
316
  },
206
- "workdir": {
317
+ "url": {
207
318
  "type": "string",
208
- "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
319
+ "format": "uri"
320
+ }
321
+ },
322
+ "required": [
323
+ "url"
324
+ ],
325
+ "additionalProperties": false
326
+ }
327
+ ```
328
+
329
+ Source: [`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)
330
+
331
+ ### `stagehand_observe`
332
+
333
+ Find browser actions matching an instruction using the configured Stagehand model.
334
+
335
+ ```json
336
+ {
337
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
338
+ "type": "object",
339
+ "properties": {
340
+ "pageId": {
341
+ "type": "string",
342
+ "minLength": 1
209
343
  },
210
- "run_in_background": {
211
- "type": "boolean",
212
- "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
344
+ "instruction": {
345
+ "type": "string",
346
+ "minLength": 1
213
347
  }
214
348
  },
215
349
  "required": [
216
- "command",
217
- "description"
218
- ]
350
+ "instruction"
351
+ ],
352
+ "additionalProperties": false
219
353
  }
220
354
  ```
221
355
 
222
- Source: [`packages/shell/tool-bash/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-bash/src/index.ts)
356
+ Source: [`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)
223
357
 
224
- The bash tool is the model-facing consumer of the bash executor seam. A `run_in_background` run registers with the generic `ctx.jobs` runtime and is collected/stopped through the `job_*` tools from `@deepseek-ai/dsh-tool-jobs`; the `enableRunInBackground` config (default true) removes the parameter entirely when disabled.
358
+ ### `stagehand_screenshot`
225
359
 
226
- <a id="deepseek-aidsh-tool-present"></a>
360
+ Capture a Stagehand tab screenshot for visual inspection.
227
361
 
228
- ## `@deepseek-ai/dsh-tool-present`
362
+ ```json
363
+ {
364
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
365
+ "type": "object",
366
+ "properties": {
367
+ "pageId": {
368
+ "type": "string",
369
+ "minLength": 1
370
+ },
371
+ "fullPage": {
372
+ "default": false,
373
+ "type": "boolean"
374
+ }
375
+ },
376
+ "required": [
377
+ "fullPage"
378
+ ],
379
+ "additionalProperties": false
380
+ }
381
+ ```
229
382
 
230
- ### `present`
383
+ Source: [`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)
384
+
385
+ ### `stagehand_tabs`
231
386
 
232
- Declare existing files accessible through the Session filesystem as final deliverables. When a file you create or update is an output the user asked to receive, you must call present after writing it and before your final response, including files created through Bash or code execution. Mentioning its path in your reply does not replace this call. The files must already exist. The user opens the current source files; their contents are not copied or preserved.
387
+ List, create, select, or close a Stagehand browser tab.
388
+
389
+ ```json
390
+ {
391
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
392
+ "oneOf": [
393
+ {
394
+ "type": "object",
395
+ "properties": {
396
+ "action": {
397
+ "type": "string",
398
+ "const": "list"
399
+ }
400
+ },
401
+ "required": [
402
+ "action"
403
+ ],
404
+ "additionalProperties": false
405
+ },
406
+ {
407
+ "type": "object",
408
+ "properties": {
409
+ "action": {
410
+ "type": "string",
411
+ "const": "new"
412
+ },
413
+ "url": {
414
+ "type": "string",
415
+ "format": "uri"
416
+ }
417
+ },
418
+ "required": [
419
+ "action"
420
+ ],
421
+ "additionalProperties": false
422
+ },
423
+ {
424
+ "type": "object",
425
+ "properties": {
426
+ "action": {
427
+ "type": "string",
428
+ "enum": [
429
+ "select",
430
+ "close"
431
+ ]
432
+ },
433
+ "pageId": {
434
+ "type": "string",
435
+ "minLength": 1
436
+ }
437
+ },
438
+ "required": [
439
+ "action",
440
+ "pageId"
441
+ ],
442
+ "additionalProperties": false
443
+ }
444
+ ],
445
+ "type": "object"
446
+ }
447
+ ```
448
+
449
+ Source: [`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)
450
+
451
+ <a id="deepseek-aidsh-tool-ask-user"></a>
452
+
453
+ ## `@deepseek-ai/dsh-tool-ask-user`
454
+
455
+ ### `ask_user_question`
456
+
457
+ Ask the user a concise question when you need confirmation, a choice, or missing information before proceeding.
233
458
 
234
459
  ```json
235
460
  {
236
461
  "type": "object",
237
462
  "properties": {
238
- "files": {
463
+ "questions": {
239
464
  "type": "array",
465
+ "description": "Questions to ask the user before continuing.",
240
466
  "items": {
241
467
  "type": "object",
242
- "additionalProperties": false,
468
+ "additionalProperties": true,
243
469
  "properties": {
244
- "path": {
470
+ "id": {
245
471
  "type": "string",
246
- "description": "Path of an existing regular file. Relative paths use the Session working directory."
472
+ "description": "Stable id for this question; echoed in the answer."
247
473
  },
248
- "description": {
474
+ "question": {
249
475
  "type": "string",
250
- "description": "Brief description for the user."
476
+ "description": "The specific question to ask the user."
477
+ },
478
+ "header": {
479
+ "type": "string",
480
+ "description": "Optional short heading for the question, such as \"Confirm\" or \"Choose Mode\"."
481
+ },
482
+ "options": {
483
+ "type": "array",
484
+ "description": "Optional choices to show the user. If you recommend one, put it first and append \"(Recommended)\" to that label.",
485
+ "items": {
486
+ "type": "object",
487
+ "additionalProperties": true,
488
+ "properties": {
489
+ "label": {
490
+ "type": "string",
491
+ "description": "Short user-facing option label."
492
+ },
493
+ "description": {
494
+ "type": "string",
495
+ "description": "One sentence explaining the tradeoff or impact."
496
+ }
497
+ },
498
+ "required": [
499
+ "label"
500
+ ]
501
+ }
502
+ },
503
+ "multi_select": {
504
+ "type": "boolean",
505
+ "description": "Whether the user may select more than one option. Defaults to false."
251
506
  }
252
507
  },
253
508
  "required": [
254
- "path"
509
+ "id",
510
+ "question"
255
511
  ]
256
512
  }
257
513
  }
258
514
  },
259
515
  "required": [
260
- "files"
516
+ "questions"
261
517
  ]
262
518
  }
263
519
  ```
264
520
 
265
- Source: [`packages/fs/tool-present/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/tool-present/src/index.ts)
521
+ Source: [`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)
266
522
 
267
- Deliveries belong to the calling Session; Web ui-deliverables supplies source-file opening and cards.
523
+ ask_user_question keeps the original blocking behavior by default; set `mode: timed` to opt into a foreground timeout and pending result while the question remains answerable. In timed mode, `timeout: -1` keeps that call blocking indefinitely.
268
524
 
269
- <a id="deepseek-aidsh-tool-pwsh"></a>
525
+ <a id="deepseek-aidsh-tools"></a>
270
526
 
271
- ## `@deepseek-ai/dsh-tool-pwsh`
527
+ ## `@deepseek-ai/dsh-tools`
272
528
 
273
- ### `pwsh`
529
+ ### `run_code`
274
530
 
275
- Execute a PowerShell command (`pwsh -Command`) and return its stdout/stderr. Each call runs in a fresh pwsh process: no state (cwd, variables, functions) persists between calls — pass `workdir` instead of using `cd`. Paths use native Windows form (`C:\...`); read environment variables with `$env:NAME`. Non-zero exits are reported as `[exit code: N]`. Current harness environment facts are exposed through managed `$env:DSH_*` variables; inspect them when needed. Commands may run under a file sandbox; a blocked file operation is reported as `[sandbox: file access denied under <mode> mode]` — a policy denial, not a bug in the command; do not retry another way. Long output is truncated to its tail; the full output is saved to a file whose path is reported when available. On Windows a force-killed command settles as `[exit code: 1]` without a signal marker — treat it as an interruption, not a command failure. Set `run_in_background: true` for long-running commands: the call returns a job id immediately; read its output with `job_output` and stop it with `job_kill`.
531
+ Execute a TypeScript program against the available tools. Takes two required arguments: `description`, a short summary of what the program does, and `code`, the BODY of an async function (erasable syntax only; top-level `await` and `return` work). Call tools as `await tools.name(args)` per the declarations in the system prompt. Only what you print or return is program output — curate it. Image-bearing subtool results are attached after the run.
276
532
 
277
533
  ```json
278
534
  {
279
535
  "type": "object",
280
536
  "properties": {
281
- "command": {
537
+ "description": {
282
538
  "type": "string",
283
- "description": "The PowerShell command to execute."
539
+ "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\"."
284
540
  },
285
- "description": {
541
+ "code": {
286
542
  "type": "string",
287
- "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\"."
543
+ "description": "The program: the body of an async TypeScript function."
288
544
  },
289
545
  "timeoutMs": {
290
546
  "type": "number",
291
- "description": "Timeout in milliseconds. The executor applies its configured default and cap, and kills the command on expiry."
547
+ "description": "Positive elapsed-time budget in milliseconds, capped by the deployment maximum."
292
548
  },
293
- "workdir": {
549
+ "sandbox_permissions": {
294
550
  "type": "string",
295
- "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
551
+ "description": "Wider sandbox mode for this complete program execution; requires justification and approval.",
552
+ "enum": [
553
+ "workspace-write",
554
+ "danger-full-access"
555
+ ]
296
556
  },
297
- "run_in_background": {
298
- "type": "boolean",
299
- "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
557
+ "justification": {
558
+ "type": "string",
559
+ "description": "Reason this complete program needs wider access, shown to the user for approval. Use the language of the user’s current request."
300
560
  }
301
561
  },
302
562
  "required": [
303
- "command",
304
- "description"
563
+ "description",
564
+ "code"
305
565
  ]
306
566
  }
307
567
  ```
308
568
 
309
- Source: [`packages/shell/tool-pwsh/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-pwsh/src/index.ts)
569
+ Source: [`packages/core/tools/src/ptc.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/ptc.ts)
310
570
 
311
- The pwsh tool is the PowerShell-dialect consumer of the bash executor seam for Windows compositions (a PowerShell executor such as `@deepseek-ai/dsh-pwsh-local` backs `ctx.shell`); it mirrors the bash tool call-for-call minus sandbox controls — `run_in_background` runs register with the generic `ctx.jobs` runtime and are collected/stopped through the `job_*` tools, and the managed `DSH_*` environment comes from `@deepseek-ai/dsh-shell-env`. Each call runs in a fresh process (no persistent PTY session), with native `C:\...` paths and `$env:NAME` variables.
571
+ Owned by the tool registry as a reserved transport outside filterable capability layers under `mode: ptc` / `mode: both` (see the PTC mode Agent Note). Under `ptc` it is the registry's only wire contribution; the other visible capabilities are declared in a generated SDK section in the loaded runtime's language, and a program calls them through bindings scheduled under the native concurrency contract (submission-ordered starts and policy; concurrency-safe bodies overlap up to `maxParallelSubCalls`) that re-enter the complete guarded tool pipeline and link each nested execution to this outer result.
312
572
 
313
- <a id="deepseek-aidsh-tool-cordis"></a>
573
+ <a id="deepseek-aidsh-plan-mode"></a>
314
574
 
315
- ## `@deepseek-ai/dsh-tool-cordis`
575
+ ## `@deepseek-ai/dsh-plan-mode`
316
576
 
317
- ### `cordis_define`
577
+ ### `exit_plan_mode`
318
578
 
319
- Define an immutable Cordis Package. For a new Plugin, use kind:"new" and provide only a semantic prefix of 3–6 lowercase English letters; the Host returns the final pluginId and packageId. To modify an existing Plugin, use kind:"existing" with its exact pluginId to append a Package without overwriting older versions. Provide at least one of code.host and code.client. Each value is a plain JavaScript function body that returns a Cordis Plugin; no TypeScript, JSX, or import transformation occurs. Query Inspect before depending on a Service, Event, Builtin, Slot, or token. Define only validates parameters and syntax and records source: it does not request approval, execute apply, or change currentPackageId. On success, call cordis_run with the returned IDs.
579
+ Use only in plan mode. Present your plan for the user's review and, on approval, leave plan mode. The user may approve (carry out the plan from your next step) or keep planning — their feedback comes back in the tool result; revise and present again.
320
580
 
321
581
  ```json
322
582
  {
323
583
  "type": "object",
324
584
  "properties": {
325
- "plugin": {
326
- "oneOf": [
327
- {
328
- "type": "object",
329
- "additionalProperties": false,
330
- "properties": {
331
- "kind": {
332
- "type": "string",
333
- "const": "new"
334
- },
335
- "idPrefix": {
336
- "type": "string",
337
- "description": "Suggested semantic prefix of 3–6 lowercase English letters; the Host adds a unique numeric suffix."
338
- }
339
- },
340
- "required": [
341
- "kind",
342
- "idPrefix"
343
- ]
344
- },
345
- {
346
- "type": "object",
347
- "additionalProperties": false,
348
- "properties": {
349
- "kind": {
350
- "type": "string",
351
- "const": "existing"
352
- },
353
- "pluginId": {
354
- "type": "string",
355
- "description": "Exact ID of an existing Plugin; the new Package is appended to that instance."
356
- }
357
- },
358
- "required": [
359
- "kind",
360
- "pluginId"
361
- ]
362
- }
363
- ]
364
- },
365
- "name": {
366
- "type": "string",
367
- "description": "Short, readable Package name."
368
- },
369
- "purpose": {
585
+ "plan": {
370
586
  "type": "string",
371
- "description": "One-sentence, user-facing description of the Package purpose."
372
- },
373
- "code": {
374
- "type": "object",
375
- "additionalProperties": false,
376
- "properties": {
377
- "host": {
378
- "type": "string",
379
- "description": "Plain JavaScript function body that returns the Host-half Cordis Plugin."
380
- },
381
- "client": {
382
- "type": "string",
383
- "description": "Plain JavaScript function body that returns the browser Client-half Cordis Plugin."
384
- }
385
- }
587
+ "description": "The complete plan, as markdown, starting with a # heading that names it."
386
588
  }
387
589
  },
388
590
  "required": [
389
- "plugin",
390
- "name",
391
- "purpose",
392
- "code"
591
+ "plan"
393
592
  ]
394
593
  }
395
594
  ```
396
595
 
397
- Source: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
398
-
399
- ### `cordis_inspect_list`
596
+ Source: [`packages/plan/plan-mode/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
400
597
 
401
- List every Cordis Inspect Provider currently known to the Host, including local Host Providers and the latest manifests synchronized from the Client. Each entry includes its platform, purpose, read-only methods, and input/output schemas. Call this Tool before creating or modifying a Package, then select the provider and method for cordis_inspect_query from its result. Do not guess names or treat an Inspect method as a business Service that Plugin code can call.
598
+ exit_plan_mode stays in the model-facing schema while planning is inactive so transitions add no tool-catalog churn on top of the plan-policy change. Its execute path rejects calls outside plan mode; in plan mode it presents the plan over the user-questions seam (approve / keep planning with feedback), and approval logs plan mode inactive at the step boundary.
402
599
 
403
- ```json
404
- {
405
- "type": "object",
406
- "properties": {}
407
- }
408
- ```
600
+ <a id="deepseek-aidsh-tool-bash"></a>
409
601
 
410
- Source: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
602
+ ## `@deepseek-ai/dsh-tool-bash`
411
603
 
412
- ### `cordis_inspect_query`
604
+ ### `bash`
413
605
 
414
- Run a read-only query explicitly declared by an Inspect Provider. platform, provider, and method must come from cordis_inspect_list, and input must satisfy that method's schema. Use this Tool before cordis_define to read exact Service methods, Event modes, Builtin signatures, Tool schemas, theme tokens, or live Slot trees and props. Host queries run locally. A Client query waits for the first valid page response and remains pending until a page answers or the Tool is cancelled. This Tool cannot invoke business Service methods or modify the runtime. For Service.listService and Event.listEvents, query without input to navigate the compact signature directory, then query the exact service or event for its structured contract and referenced types. For Slots.listSubTree, query without root to navigate the compact tree, then query the exact root for its complete registration contract and props.
606
+ Execute a bash command (`bash -c`) and return its stdout/stderr. Each call runs in a fresh shell; pass `workdir` instead of using `cd`. Managed `$DSH_*` variables expose current harness environment facts. Long output is truncated to its tail; the full output is saved to a file whose path is reported when available. Provide `description` before `command` in the arguments. Before any delete or move, verify that the resolved absolute target path is the intended one; never run it against a computed path you have not checked. An unset variable expands to an empty string, so guard variables in such paths with `${VAR:?}`. Commands may run under a file sandbox; a blocked file operation is reported as `[sandbox: file access denied under <mode> mode]`, a policy denial: do not retry another way.
415
607
 
416
608
  ```json
417
609
  {
418
610
  "type": "object",
419
611
  "properties": {
420
- "platform": {
612
+ "description": {
421
613
  "type": "string",
422
- "description": "Runtime platform that owns the Provider.",
423
- "enum": [
424
- "host",
425
- "client"
426
- ]
614
+ "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\"."
427
615
  },
428
- "provider": {
616
+ "command": {
429
617
  "type": "string",
430
- "description": "Exact Provider ID returned by cordis_inspect_list."
618
+ "description": "The bash command to execute."
431
619
  },
432
- "method": {
620
+ "timeoutMs": {
621
+ "type": "number",
622
+ "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."
623
+ },
624
+ "workdir": {
433
625
  "type": "string",
434
- "description": "Exact method name declared by the Provider manifest."
626
+ "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
435
627
  },
436
- "input": {
437
- "description": "Optional query input; it must satisfy the method input schema."
628
+ "run_in_background": {
629
+ "type": "boolean",
630
+ "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
438
631
  }
439
632
  },
440
633
  "required": [
441
- "platform",
442
- "provider",
443
- "method"
634
+ "description",
635
+ "command"
444
636
  ]
445
637
  }
446
638
  ```
447
639
 
448
- Source: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
640
+ Source: [`packages/shell/tool-bash/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-bash/src/index.ts)
641
+
642
+ The bash tool is the model-facing consumer of the bash executor seam. With a job registry composed every call registers with the generic `ctx.jobs` runtime as it starts, collected/stopped through the `job_*` tools from `@deepseek-ai/dsh-tool-jobs`; without one, or with `enableRunInBackground: false`, the tool registers a foreground-only schema without the `run_in_background` parameter.
643
+
644
+ <a id="deepseek-aidsh-tool-present"></a>
449
645
 
450
- ### `cordis_inspect_self`
646
+ ## `@deepseek-ai/dsh-tool-present`
647
+
648
+ ### `present`
451
649
 
452
- Inspect dynamic Cordis objects owned by the current Session at increasing levels of detail. With no IDs, list only Plugin summaries. With pluginId alone, return version pointers, the latest Run, and every Package summary. Only pluginId plus packageId returns that immutable Package's Host/Client source and runtime diagnostics. packageId cannot be supplied alone. Query an exact Package before handling @pluginId, repairing an asynchronous failure, or defining an updated version. This Tool is read-only: it neither executes code nor changes version pointers.
650
+ Declare existing files as final deliverables for the user. Use it when the user needs a separate file, especially Office documents, spreadsheets, and slide decks; prefer your final response when that suffices. The user opens the current files; their contents are not copied.
453
651
 
454
652
  ```json
455
653
  {
456
654
  "type": "object",
457
655
  "properties": {
458
- "pluginId": {
459
- "type": "string",
460
- "description": "Stable Plugin ID returned by cordis_define or injected by @pluginId; omit it to list every current Plugin."
461
- },
462
- "packageId": {
463
- "type": "string",
464
- "description": "Exact immutable Package ID owned by pluginId; when specified, source and diagnostics are returned."
656
+ "files": {
657
+ "type": "array",
658
+ "description": "Usually the 1-2 most important deliverables; at most 4 per call.",
659
+ "items": {
660
+ "type": "object",
661
+ "additionalProperties": false,
662
+ "properties": {
663
+ "path": {
664
+ "type": "string",
665
+ "description": "Path of an existing regular file. Relative paths use the Session working directory."
666
+ },
667
+ "description": {
668
+ "type": "string",
669
+ "description": "Brief description for the user."
670
+ }
671
+ },
672
+ "required": [
673
+ "path"
674
+ ]
675
+ }
465
676
  }
466
- }
677
+ },
678
+ "required": [
679
+ "files"
680
+ ]
467
681
  }
468
682
  ```
469
683
 
470
- Source: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
684
+ Source: [`packages/deliverables/tool-present/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/deliverables/tool-present/src/index.ts)
685
+
686
+ Deliveries belong to the calling Session; Web ui-deliverables supplies source-file opening and cards.
687
+
688
+ <a id="deepseek-aidsh-tool-pwsh"></a>
689
+
690
+ ## `@deepseek-ai/dsh-tool-pwsh`
471
691
 
472
- ### `cordis_run`
692
+ ### `pwsh`
473
693
 
474
- Activate one exact Package of a dynamic Plugin. Use mode:"run" for the first activation, restarting currentPackageId, or rollback. When current exists, use mode:"update" to switch to a different Package, even if the Plugin is currently stopped. An unauthorized Client Package creates an approval request and returns awaiting-approval; an authorized Package returns starting and continues asynchronously in the browser. Neither result waits for the final outcome inside the Tool. currentPackageId changes only after complete success; on failure, the old current and target next remain. Asynchronous success, rejection, or technical failure is reported through state and steering. After a technical failure, read diagnostics with cordis_inspect_self, correct the same Plugin, and retry autonomously. Do not request approval again after the user rejects it.
694
+ Execute a PowerShell command (`pwsh -Command`) and return its stdout/stderr. Each call runs in a fresh pwsh process; pass `workdir` instead of using `cd`. Paths use native Windows form (`C:\...`); read environment variables with `$env:NAME`. Managed `$env:DSH_*` variables expose current harness environment facts. Long output is truncated to its tail; the full output is saved to a file whose path is reported when available. On Windows a force-killed command settles as `[exit code: 1]` without a signal marker — treat it as an interruption, not a command failure. Provide `description` before `command` in the arguments. Before any delete or move, verify that the resolved absolute target path is the intended one; never run it against a computed path you have not checked. Do not assign to automatic variables such as `$HOME`; variable names are case-insensitive, so `$home` is the same read-only variable. Commands may run under a file sandbox; a blocked file operation is reported as `[sandbox: file access denied under <mode> mode]`, a policy denial: do not retry another way.
475
695
 
476
696
  ```json
477
697
  {
478
698
  "type": "object",
479
699
  "properties": {
480
- "pluginId": {
700
+ "description": {
481
701
  "type": "string",
482
- "description": "Stable Plugin ID returned by cordis_define."
702
+ "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\"."
483
703
  },
484
- "packageId": {
704
+ "command": {
485
705
  "type": "string",
486
- "description": "Exact immutable Package ID to activate under that Plugin."
706
+ "description": "The PowerShell command to execute."
707
+ },
708
+ "timeoutMs": {
709
+ "type": "number",
710
+ "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."
487
711
  },
488
- "mode": {
712
+ "workdir": {
489
713
  "type": "string",
490
- "description": "Use run for the first activation, restarting current, or rollback; use update to switch from current to a different Package.",
491
- "enum": [
492
- "run",
493
- "update"
494
- ]
714
+ "description": "Working directory for this command. Defaults to the session workspace; a relative path is resolved against it."
715
+ },
716
+ "run_in_background": {
717
+ "type": "boolean",
718
+ "description": "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
495
719
  }
496
720
  },
497
721
  "required": [
498
- "pluginId",
499
- "packageId",
500
- "mode"
722
+ "description",
723
+ "command"
501
724
  ]
502
725
  }
503
726
  ```
504
727
 
505
- Source: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
728
+ Source: [`packages/shell/tool-pwsh/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/tool-pwsh/src/index.ts)
729
+
730
+ The pwsh tool is the PowerShell-dialect consumer of the bash executor seam for Windows compositions (a PowerShell executor such as `@deepseek-ai/dsh-pwsh-local` backs `ctx.shell`); it mirrors the bash tool call-for-call minus sandbox controls — `run_in_background` runs register with the generic `ctx.jobs` runtime and are collected/stopped through the `job_*` tools, and the managed `DSH_*` environment comes from `@deepseek-ai/dsh-shell-env`. Each call runs in a fresh process (no persistent PTY session), with native `C:\...` paths and `$env:NAME` variables.
731
+
732
+ <a id="deepseek-aidsh-tool-cordis"></a>
733
+
734
+ ## `@deepseek-ai/dsh-tool-cordis`
506
735
 
507
- ### `cordis_stop`
736
+ ### `cordis_inspect_list`
508
737
 
509
- Stop the current Run of a dynamic Plugin and cancel unfinished approval or activation requests. Retain the Plugin, every immutable Package, grants, currentPackageId, and nextPackageId so it can later run or update directly. Stopping an already stopped Plugin succeeds idempotently. Use this Tool to disable effects temporarily; use cordis_undefine for permanent removal.
738
+ List every Cordis Inspect Provider currently known to the Host, including local Host Providers and the latest manifests synchronized from the Client. Each entry includes its platform, purpose, read-only methods, and input/output schemas. Call this Tool before writing or configuring a plugin, then select the provider and method for cordis_inspect_query from its result. Do not guess names or treat an Inspect method as a business Service that Plugin code can call.
510
739
 
511
740
  ```json
512
741
  {
513
742
  "type": "object",
514
- "properties": {
515
- "pluginId": {
516
- "type": "string",
517
- "description": "Stable dynamic Plugin ID to stop."
518
- }
519
- },
520
- "required": [
521
- "pluginId"
522
- ]
743
+ "properties": {}
523
744
  }
524
745
  ```
525
746
 
526
747
  Source: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
527
748
 
528
- ### `cordis_undefine`
749
+ ### `cordis_inspect_query`
529
750
 
530
- Permanently remove a dynamic Plugin owned by the current Session. If it is running or awaiting approval, first stop it and cancel the request, then delete every Package, grant, and version pointer. After this returns, its pluginId, packageIds, @ reference, and Package business views are invalid; historical cards retain only a "Plugin removed" record. Do not call this Tool when versions must remain available for restart or rollback; use cordis_stop instead.
751
+ Run a read-only query declared by an Inspect Provider. platform, provider, and method must come from cordis_inspect_list, and input must satisfy that method's schema. Use this Tool before writing plugin code to read exact Service methods, Event modes, plugin Config schemas, Tool schemas, theme tokens, or live Slot trees and props. Host queries run locally. A Client query waits for the first valid page response within the configured timeout; otherwise it reports a Client failure or asks you to reconnect and retry. This Tool cannot invoke business Service methods or modify the runtime.
531
752
 
532
753
  ```json
533
754
  {
534
755
  "type": "object",
535
756
  "properties": {
536
- "pluginId": {
757
+ "platform": {
758
+ "type": "string",
759
+ "description": "Runtime platform that owns the Provider.",
760
+ "enum": [
761
+ "host",
762
+ "client"
763
+ ]
764
+ },
765
+ "provider": {
766
+ "type": "string",
767
+ "description": "Exact Provider ID returned by cordis_inspect_list."
768
+ },
769
+ "method": {
537
770
  "type": "string",
538
- "description": "Stable dynamic Plugin ID to remove permanently."
771
+ "description": "Exact method name declared by the Provider manifest."
772
+ },
773
+ "input": {
774
+ "description": "Optional query input; it must satisfy the method input schema."
539
775
  }
540
776
  },
541
777
  "required": [
542
- "pluginId"
778
+ "platform",
779
+ "provider",
780
+ "method"
543
781
  ]
544
782
  }
545
783
  ```
546
784
 
547
785
  Source: [`packages/extensions/tool-cordis/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/extensions/tool-cordis/src/index.ts)
548
786
 
549
- Not in any shipped tree (a deliberate opt-in — dynamic package code reaches the real runtime, see .agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.md). The toolset injects `ctx.dynamicCordisRunner` from `@deepseek-ai/dsh-cordis-host-runner`, which owns the definition registry and the vm sandbox; a composition missing it never activates the tools. A running package may register ADDITIONAL model-visible tools until it is stopped, undefined, or DSH restarts; a full changed request header logs those tool-set changes.
787
+ Creator mode provides two read-only runtime inspection tools. The Cordis host runner supplies the inspection registry; Client queries require a connected page. Author persistent changes as bundles and install them with plugin_manager.
550
788
 
551
789
  <a id="deepseek-aidsh-tool-bash-persistent"></a>
552
790
 
@@ -722,11 +960,11 @@ Edit an existing UTF-8 text file by replacing literal text.
722
960
  "properties": {
723
961
  "file_path": {
724
962
  "type": "string",
725
- "description": "Path to edit, resolved by the filesystem backend."
963
+ "description": "Path to edit, resolved by the filesystem backend. Provide `file_path` before `old_string` and `new_string` in the arguments."
726
964
  },
727
965
  "old_string": {
728
966
  "type": "string",
729
- "description": "Literal text to replace. Must match exactly."
967
+ "description": "Literal text to replace."
730
968
  },
731
969
  "new_string": {
732
970
  "type": "string",
@@ -778,7 +1016,7 @@ Source: [`packages/fs/tool-fs/src/index.ts`](https://github.com/deepseek-ai/deep
778
1016
 
779
1017
  ### `read_image`
780
1018
 
781
- Read a PNG/JPEG/WebP/GIF file and return the image itself. A path without a file extension is accepted; the format is detected from the file content, so normalized attachment paths can be passed directly without copying or renaming. Harness validates and downscales large supported images before the next model request, so use this tool directly instead of installing image libraries or creating thumbnails merely to inspect an image. Independent files may be read concurrently in small batches. Requires the current model to accept image input.
1019
+ Read a PNG/JPEG/WebP/GIF file and return the image itself. Large images are downscaled automatically; do not install image libraries or create thumbnails to inspect an image.
782
1020
 
783
1021
  ```json
784
1022
  {
@@ -807,7 +1045,7 @@ Create or fully replace a UTF-8 text file.
807
1045
  "properties": {
808
1046
  "file_path": {
809
1047
  "type": "string",
810
- "description": "Path to write, resolved by the filesystem backend."
1048
+ "description": "Path to write, resolved by the filesystem backend. Provide `file_path` before `content` in the arguments."
811
1049
  },
812
1050
  "content": {
813
1051
  "type": "string",
@@ -831,7 +1069,7 @@ The read-before-write/edit policy is added by `@deepseek-ai/dsh-fs-observation-p
831
1069
 
832
1070
  ### `glob`
833
1071
 
834
- Find files whose paths match a glob pattern. Returns matching file paths — never directories — including hidden and ignored files (VCS metadata directories are excluded). Up to 100 paths come back in modification-time order; a larger result instead returns 100 paths sampled across top-level entries, says so, and reports where the complete sorted list was saved. This tool does not enumerate directory entries.
1072
+ Find files, not directories, whose paths match a glob pattern, including hidden and ignored files. Returns up to 100 paths in modification-time order; a larger result is sampled across top-level entries and reports where the complete list was saved.
835
1073
 
836
1074
  ```json
837
1075
  {
@@ -856,7 +1094,7 @@ Source: [`packages/fs/tool-fs-search/src/index.ts`](https://github.com/deepseek-
856
1094
 
857
1095
  ### `grep`
858
1096
 
859
- Search file contents with a ripgrep regular expression. Returns matching lines with line numbers, grouped by file. Returns the first 250 matches inline; a capped result reports where the complete match list was saved. Use read on a matched file for surrounding context.
1097
+ Search file contents with a ripgrep regular expression. Returns matching lines with line numbers, grouped by file. Returns up to 250 matches; a larger result reports where the complete match list was saved.
860
1098
 
861
1099
  ```json
862
1100
  {
@@ -1056,7 +1294,7 @@ The six terminal tools are opt-in and complement one-shot shell/filesystem tools
1056
1294
 
1057
1295
  ### `create_goal`
1058
1296
 
1059
- Create one persisted same-session completion goal when the current direct human request is a long-running objective that should continue across autonomous goal rounds. You may infer that intent without requiring the user to say "create a goal". Do not use this for trivial single-turn work. Execution rejects non-human and subagent authority.
1297
+ Create a persisted goal that keeps this session working across automatic continuation rounds. Use it when the direct human request is a long-running objective, even if the user did not say "goal"; not for single-turn work.
1060
1298
 
1061
1299
  ```json
1062
1300
  {
@@ -1081,7 +1319,7 @@ Source: [`packages/goal/tool-goal/src/index.ts`](https://github.com/deepseek-ai/
1081
1319
 
1082
1320
  ### `get_goal`
1083
1321
 
1084
- Read the current same-session goal, including its exact id/revision, objective, phase, completed continuation rounds, round limit, blocker reason when present, and whether another continuation is armed. Call this before updating a goal.
1322
+ Read the current session goal, including the id and revision that update_goal requires.
1085
1323
 
1086
1324
  ```json
1087
1325
  {
@@ -1094,7 +1332,7 @@ Source: [`packages/goal/tool-goal/src/index.ts`](https://github.com/deepseek-ai/
1094
1332
 
1095
1333
  ### `update_goal`
1096
1334
 
1097
- Update the exact current goal revision. edit, pause, and resume require a direct top-level human request. During an automatic continuation of the current goal, complete and blocked are also allowed. blocked is rejected before the configured minimum round count; the model remains responsible for judging that the same condition persisted across those rounds and must explain it in blocked_reason.
1335
+ Update the current goal.
1098
1336
 
1099
1337
  ```json
1100
1338
  {
@@ -1110,7 +1348,7 @@ Update the exact current goal revision. edit, pause, and resume require a direct
1110
1348
  },
1111
1349
  "action": {
1112
1350
  "type": "string",
1113
- "description": "edit | pause | resume | complete | blocked",
1351
+ "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.",
1114
1352
  "enum": [
1115
1353
  "edit",
1116
1354
  "pause",
@@ -1129,7 +1367,7 @@ Update the exact current goal revision. edit, pause, and resume require a direct
1129
1367
  },
1130
1368
  "blocked_reason": {
1131
1369
  "type": "string",
1132
- "description": "Concrete blocking condition; required only with action blocked."
1370
+ "description": "Required only with action blocked: the concrete condition that persisted across rounds and blocks progress."
1133
1371
  }
1134
1372
  },
1135
1373
  "required": [
@@ -1144,13 +1382,13 @@ Source: [`packages/goal/tool-goal/src/index.ts`](https://github.com/deepseek-ai/
1144
1382
 
1145
1383
  create, edit, pause, and resume require direct-human root authority; complete and blocked also accept the exact current goal round. The default blocked lower bound is three admitted rounds.
1146
1384
 
1147
- <a id="deepseek-aidsh-schedule"></a>
1385
+ <a id="deepseek-aidsh-tool-schedule"></a>
1148
1386
 
1149
- ## `@deepseek-ai/dsh-schedule`
1387
+ ## `@deepseek-ai/dsh-tool-schedule`
1150
1388
 
1151
1389
  ### `schedule_create`
1152
1390
 
1153
- Create one reminder in the current session. Supply a non-empty prompt and exactly one selector: a positive safe-integer after_seconds delay, at as a strict offset date-time or local date/time object, or safe-integer every_seconds of at least 300. Fixed-rate reminders stay creation-aligned, skip missed occurrences, and batch one latest occurrence per overdue rule. Delivery is session-local: the reminder runs on time only while this session is live and otherwise becomes overdue until the session is resumed.
1391
+ Create a reminder in the current session that delivers prompt when it becomes due. Supply exactly one timing parameter: after_seconds, at, every_seconds, daily, weekly, or cron. Local times that do not exist in the zone are skipped; repeated local times fire once, at the earlier instant. After downtime, a recurring reminder delivers only its latest missed occurrence. Delivery can repeat after a crash.
1154
1392
 
1155
1393
  ```json
1156
1394
  {
@@ -1160,13 +1398,82 @@ Create one reminder in the current session. Supply a non-empty prompt and exactl
1160
1398
  "type": "string",
1161
1399
  "description": "Reminder content to present when the target becomes due."
1162
1400
  },
1401
+ "title": {
1402
+ "type": "string",
1403
+ "description": "Task name of at most 120 characters, shown on the task card and in task lists."
1404
+ },
1163
1405
  "after_seconds": {
1164
1406
  "type": "number",
1165
- "description": "Positive safe-integer delay in seconds."
1407
+ "description": "Delay in whole seconds."
1166
1408
  },
1167
1409
  "every_seconds": {
1168
1410
  "type": "number",
1169
- "description": "Fixed-rate safe-integer interval in seconds, at least 300."
1411
+ "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."
1412
+ },
1413
+ "daily": {
1414
+ "type": "object",
1415
+ "description": "Every day at a local time.",
1416
+ "additionalProperties": false,
1417
+ "properties": {
1418
+ "time": {
1419
+ "type": "string",
1420
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 23:00:00."
1421
+ },
1422
+ "time_zone": {
1423
+ "type": "string",
1424
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1425
+ }
1426
+ },
1427
+ "required": [
1428
+ "time",
1429
+ "time_zone"
1430
+ ]
1431
+ },
1432
+ "weekly": {
1433
+ "type": "object",
1434
+ "description": "On the given weekdays at a local time.",
1435
+ "additionalProperties": false,
1436
+ "properties": {
1437
+ "time": {
1438
+ "type": "string",
1439
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 09:00:00."
1440
+ },
1441
+ "time_zone": {
1442
+ "type": "string",
1443
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1444
+ },
1445
+ "weekdays": {
1446
+ "type": "array",
1447
+ "description": "ISO weekdays, Monday 1 through Sunday 7, without repetitions.",
1448
+ "items": {
1449
+ "type": "integer"
1450
+ }
1451
+ }
1452
+ },
1453
+ "required": [
1454
+ "time",
1455
+ "time_zone",
1456
+ "weekdays"
1457
+ ]
1458
+ },
1459
+ "cron": {
1460
+ "type": "object",
1461
+ "description": "Five-field Vixie cron expression in a time zone.",
1462
+ "additionalProperties": false,
1463
+ "properties": {
1464
+ "expression": {
1465
+ "type": "string",
1466
+ "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."
1467
+ },
1468
+ "time_zone": {
1469
+ "type": "string",
1470
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1471
+ }
1472
+ },
1473
+ "required": [
1474
+ "expression",
1475
+ "time_zone"
1476
+ ]
1170
1477
  },
1171
1478
  "at": {
1172
1479
  "oneOf": [
@@ -1194,20 +1501,21 @@ Create one reminder in the current session. Supply a non-empty prompt and exactl
1194
1501
  ]
1195
1502
  }
1196
1503
  ],
1197
- "description": "Absolute target as strict offset RFC 3339 or local date/time with an explicit IANA zone."
1504
+ "description": "Absolute target: an RFC 3339 date-time with offset, or a local date, time, and IANA time_zone."
1198
1505
  }
1199
1506
  },
1200
1507
  "required": [
1201
- "prompt"
1508
+ "prompt",
1509
+ "title"
1202
1510
  ]
1203
1511
  }
1204
1512
  ```
1205
1513
 
1206
- Source: [`packages/schedule/schedule/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/tools.ts)
1514
+ Source: [`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1207
1515
 
1208
1516
  ### `schedule_delete`
1209
1517
 
1210
- Delete one active reminder in the current session by the exact id returned by schedule_create or schedule_list. Unknown or already-finished ids return deleted false.
1518
+ Delete a reminder in the current session, active or inactive. Deletion does not retract a reminder message that is already queued.
1211
1519
 
1212
1520
  ```json
1213
1521
  {
@@ -1215,7 +1523,7 @@ Delete one active reminder in the current session by the exact id returned by sc
1215
1523
  "properties": {
1216
1524
  "id": {
1217
1525
  "type": "string",
1218
- "description": "Exact session-local schedule id."
1526
+ "description": "Exact schedule id."
1219
1527
  }
1220
1528
  },
1221
1529
  "required": [
@@ -1224,11 +1532,11 @@ Delete one active reminder in the current session by the exact id returned by sc
1224
1532
  }
1225
1533
  ```
1226
1534
 
1227
- Source: [`packages/schedule/schedule/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/tools.ts)
1535
+ Source: [`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1228
1536
 
1229
1537
  ### `schedule_list`
1230
1538
 
1231
- List every active reminder in the current session in creation order, including its exact id, UTC target, scheduled or overdue state, and session-local delivery mode.
1539
+ List the active reminders in the current session.
1232
1540
 
1233
1541
  ```json
1234
1542
  {
@@ -1237,9 +1545,135 @@ List every active reminder in the current session in creation order, including i
1237
1545
  }
1238
1546
  ```
1239
1547
 
1240
- Source: [`packages/schedule/schedule/src/tools.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/tools.ts)
1548
+ Source: [`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1549
+
1550
+ ### `schedule_update`
1551
+
1552
+ Change a reminder in place, keeping its id. Supply a new title, prompt, or at most one timing parameter; omitted fields keep their stored values. To change a relative delay, create a new reminder.
1553
+
1554
+ ```json
1555
+ {
1556
+ "type": "object",
1557
+ "properties": {
1558
+ "id": {
1559
+ "type": "string",
1560
+ "description": "Schedule id returned by schedule_list."
1561
+ },
1562
+ "title": {
1563
+ "type": "string",
1564
+ "description": "New task name of at most 120 characters."
1565
+ },
1566
+ "prompt": {
1567
+ "type": "string",
1568
+ "description": "New reminder content."
1569
+ },
1570
+ "every_seconds": {
1571
+ "type": "number",
1572
+ "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."
1573
+ },
1574
+ "daily": {
1575
+ "type": "object",
1576
+ "description": "Every day at a local time.",
1577
+ "additionalProperties": false,
1578
+ "properties": {
1579
+ "time": {
1580
+ "type": "string",
1581
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 23:00:00."
1582
+ },
1583
+ "time_zone": {
1584
+ "type": "string",
1585
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1586
+ }
1587
+ },
1588
+ "required": [
1589
+ "time",
1590
+ "time_zone"
1591
+ ]
1592
+ },
1593
+ "weekly": {
1594
+ "type": "object",
1595
+ "description": "On the given weekdays at a local time.",
1596
+ "additionalProperties": false,
1597
+ "properties": {
1598
+ "time": {
1599
+ "type": "string",
1600
+ "description": "HH:mm:ss with optional 1-3 fractional digits, for example 09:00:00."
1601
+ },
1602
+ "time_zone": {
1603
+ "type": "string",
1604
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1605
+ },
1606
+ "weekdays": {
1607
+ "type": "array",
1608
+ "description": "ISO weekdays, Monday 1 through Sunday 7, without repetitions.",
1609
+ "items": {
1610
+ "type": "integer"
1611
+ }
1612
+ }
1613
+ },
1614
+ "required": [
1615
+ "time",
1616
+ "time_zone",
1617
+ "weekdays"
1618
+ ]
1619
+ },
1620
+ "cron": {
1621
+ "type": "object",
1622
+ "description": "Five-field Vixie cron expression in a time zone.",
1623
+ "additionalProperties": false,
1624
+ "properties": {
1625
+ "expression": {
1626
+ "type": "string",
1627
+ "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."
1628
+ },
1629
+ "time_zone": {
1630
+ "type": "string",
1631
+ "description": "UTC or IANA Area/Location, for example Asia/Shanghai."
1632
+ }
1633
+ },
1634
+ "required": [
1635
+ "expression",
1636
+ "time_zone"
1637
+ ]
1638
+ },
1639
+ "at": {
1640
+ "oneOf": [
1641
+ {
1642
+ "type": "string"
1643
+ },
1644
+ {
1645
+ "type": "object",
1646
+ "additionalProperties": false,
1647
+ "properties": {
1648
+ "date": {
1649
+ "type": "string"
1650
+ },
1651
+ "time": {
1652
+ "type": "string"
1653
+ },
1654
+ "time_zone": {
1655
+ "type": "string"
1656
+ }
1657
+ },
1658
+ "required": [
1659
+ "date",
1660
+ "time",
1661
+ "time_zone"
1662
+ ]
1663
+ }
1664
+ ],
1665
+ "description": "Absolute target: an RFC 3339 date-time with offset, or a local date, time, and IANA time_zone."
1666
+ }
1667
+ },
1668
+ "required": [
1669
+ "id"
1670
+ ]
1671
+ }
1672
+ ```
1673
+
1674
+ Source: [`packages/schedule/tool-schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/src/index.ts)
1241
1675
 
1242
- Registered only inside live root Agent scopes created after the opt-in Schedule plugin loads. Version 1 accepts after_seconds, explicit absolute at, and bounded fixed-rate every_seconds, and discloses session-local delivery; management reads and mutations require the shared Session persistence barrier.
1676
+ A preset or Agent scope mounts this package; the preset decides which agents receive the four management tools. Each call acts on the calling Agent's Session. Accepts after_seconds, explicit absolute at, bounded fixed-rate every_seconds, daily and weekly local times in an explicit IANA zone, and cron as a five-field expression. Management uses the Host storage domain; due messages resume the original Session.
1243
1677
 
1244
1678
  <a id="deepseek-aidsh-tool-lsp"></a>
1245
1679
 
@@ -1326,7 +1760,7 @@ A fixed foreground workflow starts one fresh structured child per round; the mod
1326
1760
 
1327
1761
  ### `skill`
1328
1762
 
1329
- Load the full instructions for an available skill. Call this with the exact skill name from the session skill catalog before acting on a task that names or clearly matches that skill.
1763
+ Load the full instructions for a skill. Call it before acting on a task that names or clearly matches a skill in the session skill catalog.
1330
1764
 
1331
1765
  ```json
1332
1766
  {
@@ -1608,7 +2042,7 @@ Source: [`packages/subagent/tool-subagent/src/list-models.ts`](https://github.co
1608
2042
 
1609
2043
  ### `subagent`
1610
2044
 
1611
- Delegate a self-contained task to a subagent (a separate agent that works in its own context) to offload focused, independent work — research, a scoped implementation, an analysis — so it does not consume this conversation's context. The subagent returns its result, not its intermediate steps. Give it a complete, standalone prompt: it does not see this conversation. This call waits for the result by default. Set `run_in_background: true` to return a job id; collect with `job_output` and stop with `job_kill`.
2045
+ Delegate a self-contained task to a subagent (a separate agent that works in its own context) to offload focused, independent work — research, a scoped implementation, an analysis — so it does not consume this conversation's context. The subagent returns its result, not its intermediate steps. This call waits for the result by default.
1612
2046
 
1613
2047
  ```json
1614
2048
  {
@@ -1624,7 +2058,7 @@ Delegate a self-contained task to a subagent (a separate agent that works in its
1624
2058
  },
1625
2059
  "run_in_background": {
1626
2060
  "type": "boolean",
1627
- "description": "Whether to run as a background job and return its id. Defaults to false; collect with job_output or stop with job_kill."
2061
+ "description": "Run as a background job and return its id (collect with job_output, stop with job_kill). Defaults to false."
1628
2062
  }
1629
2063
  },
1630
2064
  "required": [
@@ -1644,7 +2078,7 @@ The registered delegation name is the load-time `toolName` config (default `suba
1644
2078
 
1645
2079
  ### `interrupt_agent`
1646
2080
 
1647
- Request cancellation of a background agent's current turn by its agent id. The target may be your direct child or a deeper agent created under you. Only the current turn stops: messages already queued for the agent stay parked until a later send_message, agents it started keep running, and the agent itself stays available for follow-ups. This call returns as soon as the stop request is accepted, so the target may keep running briefly; interrupting an agent that already finished is an accepted no-op.
2081
+ Ask a subagent to stop its current work. This call returns without waiting for it to stop. You can continue a direct child's conversation later with send_message. Subagents it started will keep running.
1648
2082
 
1649
2083
  ```json
1650
2084
  {
@@ -1652,7 +2086,7 @@ Request cancellation of a background agent's current turn by its agent id. The t
1652
2086
  "properties": {
1653
2087
  "agent_id": {
1654
2088
  "type": "string",
1655
- "description": "The agent id of the running agent to interrupt."
2089
+ "description": "The id of an agent created under you: your direct child or a deeper descendant."
1656
2090
  }
1657
2091
  },
1658
2092
  "required": [
@@ -1665,7 +2099,7 @@ Source: [`packages/subagent/tool-subagent-control/src/index.ts`](https://github.
1665
2099
 
1666
2100
  ### `list_agents`
1667
2101
 
1668
- List your continuable background subagents by durable id and label. Use it to recall which ones you started, not to poll for completion — you are told when one finishes. Status comes from the live registry: running means the agent is working right now, idle means it is loaded but between turns (it may be waiting on agents it started), and ready means it exists only in storage — resumable, not terminal, and not a result waiting to be collected; a `send_message` steers a running child at its nearest step boundary or starts a turn for an idle or ready child, and a direct child remains a `send_message` candidate in every status. The snapshot is not a delivery promise — `send_message` performs the authoritative check and may still fail. Children that could not be read are reported as diagnostics instead of being silently dropped. Scope `descendants` walks the whole tree below you in stable pre-order, annotating each entry with its durable direct-parent session id and depth. You may use `send_message` only for depth-1 entries; deeper entries are candidates for `interrupt_agent` only.
2102
+ List subagents you started, with their ids, labels, and status. running means it is working; inactive means it is not currently working. You will be notified when a subagent finishes; there is no need to keep checking its status. Use send_message to continue the conversation.
1669
2103
 
1670
2104
  ```json
1671
2105
  {
@@ -1673,7 +2107,7 @@ List your continuable background subagents by durable id and label. Use it to re
1673
2107
  "properties": {
1674
2108
  "scope": {
1675
2109
  "type": "string",
1676
- "description": "children (default) lists direct children only; descendants walks the complete tree below you.",
2110
+ "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.",
1677
2111
  "enum": [
1678
2112
  "children",
1679
2113
  "descendants"
@@ -1687,7 +2121,7 @@ Source: [`packages/subagent/tool-subagent-control/src/list-agents.ts`](https://g
1687
2121
 
1688
2122
  ### `send_message`
1689
2123
 
1690
- Send a message to a direct continuable child by its agent id. If you are a resident continuable child, you may also target your direct parent. If the target is still working, the message steers its nearest step; if it is idle, the message starts a turn. This call returns no answer from the agent — only confirmation that the message was delivered. A failure means the message was NOT delivered.
2124
+ Send a message to an agent. A working agent receives it at its next step; an idle agent starts a new turn with it. Returns delivery confirmation, not the agent's answer.
1691
2125
 
1692
2126
  ```json
1693
2127
  {
@@ -1719,7 +2153,7 @@ The globally named control tools over continuable background subagents: provider
1719
2153
 
1720
2154
  ### `job_kill`
1721
2155
 
1722
- Request cancellation of a running background job by job id. Returns immediately; the job settles as killed once its work actually stops.
2156
+ Request cancellation of a running background job.
1723
2157
 
1724
2158
  ```json
1725
2159
  {
@@ -1757,7 +2191,7 @@ Source: [`packages/jobs/tool-jobs/src/index.ts`](https://github.com/deepseek-ai/
1757
2191
 
1758
2192
  ### `job_output`
1759
2193
 
1760
- Read a background job. Stream jobs return only output since the previous read; final-output jobs return their result after settlement. Every response ends with `[status: ...]`. Reads are non-blocking unless `wait: true`, which waits up to the configured cap.
2194
+ Read a background job: output since the previous read for stream jobs, or the result of a finished final-output job.
1761
2195
 
1762
2196
  ```json
1763
2197
  {
@@ -1769,11 +2203,11 @@ Read a background job. Stream jobs return only output since the previous read; f
1769
2203
  },
1770
2204
  "wait": {
1771
2205
  "type": "boolean",
1772
- "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."
2206
+ "description": "Block until the job finishes or the timeout expires; a timed-out wait leaves the job running. Defaults to false."
1773
2207
  },
1774
2208
  "timeout_ms": {
1775
2209
  "type": "number",
1776
- "description": "Max wait in milliseconds (only meaningful with wait: true). Defaults to the configured wait timeout; capped by the configured maximum."
2210
+ "description": "Max wait in milliseconds with wait: true. Defaults to and is capped by configuration."
1777
2211
  }
1778
2212
  },
1779
2213
  "required": [
@@ -1800,7 +2234,7 @@ Interrupt one teammate's current turn while preserving its pending inbox. Team L
1800
2234
  "properties": {
1801
2235
  "target": {
1802
2236
  "type": "string",
1803
- "description": "Teammate name."
2237
+ "description": "Teammate target returned by spawn_teammate or list_agents."
1804
2238
  }
1805
2239
  },
1806
2240
  "required": [
@@ -1813,7 +2247,7 @@ Source: [`packages/experimental/tool-agent-team/src/index.ts`](https://github.co
1813
2247
 
1814
2248
  ### `list_agents`
1815
2249
 
1816
- List the Lead and every durable teammate with current runtime status.
2250
+ List the Lead and every durable teammate with an addressable target and current availability. inactive means no turn is executing, not a task result. provisioning and failed describe member creation.
1817
2251
 
1818
2252
  ```json
1819
2253
  {
@@ -1826,7 +2260,7 @@ Source: [`packages/experimental/tool-agent-team/src/index.ts`](https://github.co
1826
2260
 
1827
2261
  ### `send_message`
1828
2262
 
1829
- Send one durable message to another Team member. A running target receives it at the nearest step boundary; an idle target starts a turn; an inactive teammate cold-resumes.
2263
+ Send one durable message to another Team member. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn.
1830
2264
 
1831
2265
  ```json
1832
2266
  {
@@ -1834,7 +2268,7 @@ Send one durable message to another Team member. A running target receives it at
1834
2268
  "properties": {
1835
2269
  "target": {
1836
2270
  "type": "string",
1837
- "description": "Team member name, or lead."
2271
+ "description": "Member target returned by spawn_teammate or list_agents, including lead."
1838
2272
  },
1839
2273
  "message": {
1840
2274
  "type": "string",
@@ -1969,7 +2403,7 @@ List shared tasks, including readiness, owner, revision, blockers, and write-sco
1969
2403
  },
1970
2404
  "owner": {
1971
2405
  "type": "string",
1972
- "description": "Optional member-name filter; use unowned for tasks without an owner."
2406
+ "description": "Optional member target from spawn_teammate or list_agents, matching ownerName; use unowned for tasks without an owner."
1973
2407
  },
1974
2408
  "ready": {
1975
2409
  "type": "boolean",
@@ -2043,7 +2477,7 @@ Compare-and-set a shared task action using the latest revision from team_task_ge
2043
2477
  },
2044
2478
  "owner": {
2045
2479
  "type": "string",
2046
- "description": "Member name for Lead-only reassign; omit to unassign."
2480
+ "description": "Member target from spawn_teammate or list_agents for Lead-only reassign; omit to unassign."
2047
2481
  }
2048
2482
  },
2049
2483
  "required": [
@@ -2082,7 +2516,7 @@ All nine tools are scoped to implicit Team Leads and durable teammates. The ship
2082
2516
 
2083
2517
  ### `todo_write`
2084
2518
 
2085
- Record and update a structured task list for the current work. Send the ENTIRE list every call — it REPLACES the previous list (there are no partial updates, no per-item edits). Use it to plan multi-step work and show progress: add one todo per concrete step before you start. Mark every todo being actively worked on `in_progress` — several at once when work genuinely runs in parallel (e.g. concurrent subagents or background commands), one for sequential work; while work remains, at least one task should be `in_progress`. Mark a todo `completed` the moment it is done (do not batch completions), and allow no `in_progress` item only once all work is complete. Skip the list for trivial single-step tasks. Statuses: `pending` (not started), `in_progress` (being worked on now), `completed` (finished).
2519
+ Record and update a task list to plan multi-step work and show progress; skip it for trivial single-step tasks. Add one todo per concrete step before you start. While work remains, keep the todos being worked on `in_progress`, several only when work runs in parallel. Mark each todo `completed` as soon as it is done.
2086
2520
 
2087
2521
  ```json
2088
2522
  {
@@ -2134,17 +2568,13 @@ todo_write is session-owned state; UIs render the latest todo/write event as a c
2134
2568
 
2135
2569
  Run a JavaScript workflow script that orchestrates subagents at scale. Use this for work that fans out across many independent pieces — an audit over many files, a migration, multi-angle research, adversarial verification of findings — where you write the orchestration as a script instead of delegating turn by turn.
2136
2570
 
2137
- The workflow's identity rides the `meta` parameter as JSON: required `name` (short kebab-case) and `description` strings, optional `whenToUse` string and `phases` array (`{title, detail?, provider?, model?}`). The `script` parameter is the plain JavaScript body ONLY (NOT TypeScript, and NO `export const meta` statement — meta is a parameter, not code), running with top-level await; end with `return <value>` — the value must be JSON-serializable and is this tool's result.
2138
-
2139
2571
  Script-body hooks:
2140
- - `agent(prompt, opts?): Promise<any>` — run one subagent to completion. Without `opts.schema` it resolves to the child's final text; with `opts.schema` (an object-rooted JSON Schema using ONLY type/properties/required/additionalProperties/items/enum/const/oneOf — no pattern/format/numeric bounds) it resolves to the validated object. Resolves `null` when the child fails (filter with `.filter(Boolean)`). Other opts: `label` (display), `phase` (progress group), and independent `provider`/`model` LLM target overrides (either may be provided alone). Anything else (`effort`/`isolation`/`agentType`) is rejected loudly.
2141
- - `pipeline(items, ...stages): Promise<any[]>` — run each item through the stages independently with NO barrier between stages (prefer this for multi-stage work). Each stage receives `(prev, item, index)`. An ordinary stage throw drops that ITEM to `null` and skips its remaining stages.
2572
+ - `agent(prompt, opts?): Promise<any>` — run one subagent to completion. Without `opts.schema` it resolves to the child's final text; with `opts.schema` (an object-rooted JSON Schema using ONLY type/properties/required/additionalProperties/items/enum/const/oneOf) it resolves to the validated object. Resolves `null` when the child fails (filter with `.filter(Boolean)`). Other opts: `label` (display), `phase` (progress group), and independent `provider`/`model` LLM target overrides.
2573
+ - `pipeline(items, ...stages): Promise<any[]>` — run each item through the stages independently with NO barrier between stages (prefer this for multi-stage work). Each stage receives `(prev, item, index)`. A stage throw drops that ITEM to `null` and skips its remaining stages.
2142
2574
  - `parallel(thunks): Promise<any[]>` — run zero-argument functions concurrently and await ALL of them (a barrier; use only when a stage genuinely needs every prior result together). A throwing thunk resolves to `null`.
2143
2575
  - `phase(title)` — start a progress phase; `log(message)` — narrate progress; `args` — the tool call's `args` input, verbatim.
2144
2576
 
2145
- Misused hooks (bad arguments, unknown options, unsupported schemas, tripped caps) throw errors that ALWAYS kill the script — they never dissolve into a per-item `null`.
2146
-
2147
- Constraints: concurrency and total-agent caps apply; no filesystem, network, timers, or Node.js APIs are provided — the agents do the work, the script only coordinates them. The run executes in the foreground: this call returns when the whole script finishes.
2577
+ Misused hooks (bad arguments, unknown options, unsupported schemas, tripped caps) end the whole script instead of producing `null`. The script has no filesystem, network, timer, or Node.js APIs; the agents do the work.
2148
2578
 
2149
2579
  ```json
2150
2580
  {
@@ -2152,11 +2582,11 @@ Constraints: concurrency and total-agent caps apply; no filesystem, network, tim
2152
2582
  "properties": {
2153
2583
  "script": {
2154
2584
  "type": "string",
2155
- "description": "The plain-JS workflow script body (top-level await allowed; NO `export const meta` statement; end with `return <json-value>`)."
2585
+ "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."
2156
2586
  },
2157
2587
  "meta": {
2158
2588
  "type": "object",
2159
- "description": "The workflow identity block (plain JSON — never code).",
2589
+ "description": "The workflow identity as plain JSON, not code.",
2160
2590
  "additionalProperties": true,
2161
2591
  "properties": {
2162
2592
  "name": {
@@ -2210,6 +2640,10 @@ Constraints: concurrency and total-agent caps apply; no filesystem, network, tim
2210
2640
  "type": "object",
2211
2641
  "description": "Optional JSON input exposed to the script as the `args` global (wrap a bare list as a field, e.g. {\"files\": [...]}).",
2212
2642
  "additionalProperties": true
2643
+ },
2644
+ "run_in_background": {
2645
+ "type": "boolean",
2646
+ "description": "Run as a background job: return a job id immediately instead of waiting; the return value arrives with the completion notice."
2213
2647
  }
2214
2648
  },
2215
2649
  "required": [
@@ -2221,6 +2655,23 @@ Constraints: concurrency and total-agent caps apply; no filesystem, network, tim
2221
2655
 
2222
2656
  Source: [`packages/workflow/tool-workflow/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/workflow/tool-workflow/src/index.ts)
2223
2657
 
2658
+ <a id="deepseek-aidsh-tool-workspace-dependencies"></a>
2659
+
2660
+ ## `@deepseek-ai/dsh-tool-workspace-dependencies`
2661
+
2662
+ ### `load_workspace_dependencies`
2663
+
2664
+ Get absolute paths to bundled Python and library directories, plus bundled Python distribution versions. Node.js and pnpm paths are included when the payload provides them. Python includes numpy, pandas, python-docx, python-pptx, openpyxl, Pillow, lxml, and XlsxWriter. Use these libraries for Office files unless the user or workspace instructions select another environment. When Node.js and pnpm paths are returned, run pnpm with that Node executable and pnpm script path. This does not change PATH or package-manager settings.
2665
+
2666
+ ```json
2667
+ {
2668
+ "type": "object",
2669
+ "properties": {}
2670
+ }
2671
+ ```
2672
+
2673
+ Source: [`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)
2674
+
2224
2675
  <a id="deepseek-aidsh-tool-web"></a>
2225
2676
 
2226
2677
  ## `@deepseek-ai/dsh-tool-web`
@@ -2248,7 +2699,7 @@ Source: [`packages/web/tool-web/src/index.ts`](https://github.com/deepseek-ai/de
2248
2699
 
2249
2700
  ### `web_search`
2250
2701
 
2251
- Search the web for current information. Provide 1–4 queries in the required queries array. Returns an optional summary answer and a list of source URLs.
2702
+ Search the web for current information. Returns an optional summary answer and a list of source URLs.
2252
2703
 
2253
2704
  ```json
2254
2705
  {
@@ -2256,7 +2707,7 @@ Search the web for current information. Provide 1–4 queries in the required qu
2256
2707
  "properties": {
2257
2708
  "queries": {
2258
2709
  "type": "array",
2259
- "description": "Required search queries; accepts 1–4 items and merges their results.",
2710
+ "description": "1–4 search queries; their results are merged.",
2260
2711
  "items": {
2261
2712
  "type": "string"
2262
2713
  }