better-dsh 0.2.3 → 0.2.4

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 (385) hide show
  1. package/cordis.patch.yml +1 -1
  2. package/docs/50_test-reports/2026-09-06-write/345/267/245/345/205/267sandbox/345/215/207/347/272/247/351/200/217/344/274/240bug/345/244/215/345/217/221/345/217/212/346/214/202/350/265/267-/344/272/213/344/273/266/346/212/245/345/221/212.md +176 -0
  3. package/docs/50_test-reports/2026-09-08-hashline-edit-E_RANGE_UNVERIFIED/350/267/250/350/275/256/344/274/232/350/257/235/351/224/256/345/244/261/346/225/210-/350/257/212/346/226/255/346/212/245/345/221/212.md +226 -0
  4. package/docs/50_test-reports/2026-09-11-control-prompt-into-eval-description/345/256/236/346/265/213/346/212/245/345/221/212.md +222 -0
  5. package/docs/50_test-reports/2026-09-12-fs-scheme-resolution-/345/256/236/346/265/213/346/212/245/345/221/212.md +81 -0
  6. package/docs/50_test-reports/2026-09-12-url-schemes-grammar-matrix/344/270/216catalog-centralize-/345/256/236/346/265/213/346/212/245/345/221/212.md +234 -0
  7. package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-design/351/252/214/350/257/201/346/212/245/345/221/212.md +160 -0
  8. package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/345/211/247/346/234/254.md +44 -0
  9. package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/346/212/245/345/221/212.md +89 -0
  10. package/docs/50_test-reports/2026-09-12-url-schemes-/345/205/255scheme/345/206/222/347/203/237/344/270/216/350/276/271/347/225/214/345/256/236/346/265/213/346/212/245/345/221/212.md +198 -0
  11. package/docs/50_test-reports/2026-09-13-hashline-off/344/270/213scheme/345/217/257/350/276/276/346/200/247/345/267/245/345/205/267/351/235/242/344/270/215/345/257/271/347/247/260-/345/256/236/346/265/213/346/212/245/345/221/212.md +246 -0
  12. package/docs/50_test-reports/2026-09-13-preact-ui-shell/345/256/236/346/265/213/346/212/245/345/221/212.md +50 -0
  13. package/docs/50_test-reports/2026-09-14-4999-skill/346/270/205/345/215/225/344/270/216lsp-gate/345/256/236/346/265/213/346/212/245/345/221/212.md +63 -0
  14. package/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-local-test-report.md +44 -0
  15. package/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-report.md +110 -0
  16. package/docs/50_test-reports/upstream-dsh-0.1.5-rc.2-local-test-report.md +79 -0
  17. package/docs/50_test-reports/v0.2.3b-hashline-content-locator/345/256/236/346/265/213/346/212/245/345/221/212.md +73 -0
  18. package/docs/50_test-reports/v0.2.3c-mobile-wave/345/256/236/346/265/213/346/212/245/345/221/212.md +47 -0
  19. package/docs/50_test-reports/v0.2.4-ios-focus-zoom-suppression/345/256/236/346/265/213/346/212/245/345/221/212.md +158 -0
  20. package/docs/specs/agent/spec.md +54 -0
  21. package/docs/specs/ast/spec.md +34 -0
  22. package/docs/specs/compaction-recall/spec.md +46 -0
  23. package/docs/specs/ctx/spec.md +107 -0
  24. package/docs/specs/dsh/spec.md +47 -0
  25. package/docs/specs/dvc/spec.md +87 -0
  26. package/docs/specs/escalation-guidance/spec.md +44 -0
  27. package/docs/specs/fs-scheme-resolution/spec.md +37 -0
  28. package/docs/specs/hash-edit/spec.md +41 -0
  29. package/docs/specs/http-read/spec.md +73 -0
  30. package/docs/specs/kernel-provisioning/spec.md +53 -0
  31. package/docs/specs/lsp/spec.md +121 -0
  32. package/docs/specs/mobile-layout/spec.md +108 -0
  33. package/docs/specs/model-failover/spec.md +20 -0
  34. package/docs/specs/preact-ui-shell/spec.md +22 -0
  35. package/docs/specs/repl-dispatch-resilience/spec.md +21 -0
  36. package/docs/specs/skill/spec.md +58 -0
  37. package/docs/specs/tool-surface/spec.md +222 -0
  38. package/docs/specs/url-schema/spec.md +148 -0
  39. package/docs/specs/web-trust-fence/spec.md +43 -0
  40. package/docs/upstream-dsh-0.1.5-rc.2-report.md +156 -0
  41. package/dsh-docs/AGENTS.md +75 -0
  42. package/dsh-docs/agent-lifecycle.md +84 -0
  43. package/dsh-docs/agent-lifecycle.zh.md +86 -0
  44. package/dsh-docs/api-gateway.md +164 -0
  45. package/dsh-docs/api-gateway.zh.md +164 -0
  46. package/dsh-docs/architecture.md +150 -0
  47. package/dsh-docs/architecture.zh.md +154 -0
  48. package/dsh-docs/capability-seams.md +543 -0
  49. package/dsh-docs/capability-seams.zh.md +545 -0
  50. package/dsh-docs/config-catalog.md +3473 -0
  51. package/dsh-docs/config-catalog.zh.md +3474 -0
  52. package/dsh-docs/cookbook/adding-a-package.md +117 -0
  53. package/dsh-docs/cookbook/adding-a-package.zh.md +119 -0
  54. package/dsh-docs/cookbook/adding-a-remote-api.md +197 -0
  55. package/dsh-docs/cookbook/adding-a-remote-api.zh.md +197 -0
  56. package/dsh-docs/cookbook/adding-a-session-format-version.md +109 -0
  57. package/dsh-docs/cookbook/adding-a-session-format-version.zh.md +109 -0
  58. package/dsh-docs/cookbook/adding-a-settings-card.md +102 -0
  59. package/dsh-docs/cookbook/adding-a-settings-card.zh.md +102 -0
  60. package/dsh-docs/cookbook/adding-a-tool.md +101 -0
  61. package/dsh-docs/cookbook/adding-a-tool.zh.md +103 -0
  62. package/dsh-docs/cookbook/adding-a-vendored-package.md +59 -0
  63. package/dsh-docs/cookbook/adding-a-vendored-package.zh.md +59 -0
  64. package/dsh-docs/cookbook/adding-an-llm-adapter.md +43 -0
  65. package/dsh-docs/cookbook/adding-an-llm-adapter.zh.md +43 -0
  66. package/dsh-docs/cookbook/extension-cookbook.md +132 -0
  67. package/dsh-docs/cookbook/extension-cookbook.zh.md +136 -0
  68. package/dsh-docs/cookbook/maintaining-dsh-code-review.md +64 -0
  69. package/dsh-docs/cookbook/maintaining-dsh-code-review.zh.md +64 -0
  70. package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.md +32 -0
  71. package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +32 -0
  72. package/dsh-docs/cordis-api/context.md +364 -0
  73. package/dsh-docs/cordis-api/context.zh.md +366 -0
  74. package/dsh-docs/cordis-api/events.md +207 -0
  75. package/dsh-docs/cordis-api/events.zh.md +209 -0
  76. package/dsh-docs/cordis-api/fiber.md +375 -0
  77. package/dsh-docs/cordis-api/fiber.zh.md +377 -0
  78. package/dsh-docs/cordis-api/inherited.md +39 -0
  79. package/dsh-docs/cordis-api/registry.md +152 -0
  80. package/dsh-docs/cordis-api/registry.zh.md +154 -0
  81. package/dsh-docs/cordis-api/service.md +102 -0
  82. package/dsh-docs/cordis-api/service.zh.md +104 -0
  83. package/dsh-docs/cordis-primer.md +45 -0
  84. package/dsh-docs/cordis-primer.zh.md +51 -0
  85. package/dsh-docs/cordis-tutorial/01-first-plugin.md +95 -0
  86. package/dsh-docs/cordis-tutorial/01-first-plugin.zh.md +95 -0
  87. package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
  88. package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +98 -0
  89. package/dsh-docs/cordis-tutorial/03-services.md +98 -0
  90. package/dsh-docs/cordis-tutorial/03-services.zh.md +98 -0
  91. package/dsh-docs/cordis-tutorial/04-events.md +144 -0
  92. package/dsh-docs/cordis-tutorial/04-events.zh.md +144 -0
  93. package/dsh-docs/cordis-tutorial/05-config.md +84 -0
  94. package/dsh-docs/cordis-tutorial/05-config.zh.md +84 -0
  95. package/dsh-docs/cordis-tutorial/06-composition-and-hmr.md +113 -0
  96. package/dsh-docs/cordis-tutorial/06-composition-and-hmr.zh.md +113 -0
  97. package/dsh-docs/cordis-tutorial/07-into-the-harness.md +108 -0
  98. package/dsh-docs/cordis-tutorial/07-into-the-harness.zh.md +108 -0
  99. package/dsh-docs/cordis-tutorial/index.md +60 -0
  100. package/dsh-docs/cordis-tutorial/index.zh.md +62 -0
  101. package/dsh-docs/deepseek-llm-api-wire-extensions.md +163 -0
  102. package/dsh-docs/deepseek-llm-api-wire-extensions.zh.md +163 -0
  103. package/dsh-docs/defensive-patterns.md +33 -0
  104. package/dsh-docs/defensive-patterns.zh.md +35 -0
  105. package/dsh-docs/development.md +167 -0
  106. package/dsh-docs/development.zh.md +173 -0
  107. package/dsh-docs/event-producer-consumer.md +86 -0
  108. package/dsh-docs/event-producer-consumer.zh.md +88 -0
  109. package/dsh-docs/glossary.md +45 -0
  110. package/dsh-docs/glossary.zh.md +45 -0
  111. package/dsh-docs/graph-atlas.md +22 -0
  112. package/dsh-docs/graph-atlas.zh.md +24 -0
  113. package/dsh-docs/i18n/README.md +60 -0
  114. package/dsh-docs/i18n/README.zh.md +62 -0
  115. package/dsh-docs/i18n/style-samples.md +87 -0
  116. package/dsh-docs/i18n/terminology.md +214 -0
  117. package/dsh-docs/i18n/translation-prompt.md +263 -0
  118. package/dsh-docs/i18n/translation-rules.md +69 -0
  119. package/dsh-docs/i18n/translation-rules.zh.md +69 -0
  120. package/dsh-docs/module-graph.md +1411 -0
  121. package/dsh-docs/module-graph.zh.md +1413 -0
  122. package/dsh-docs/persistence-catalog.md +1075 -0
  123. package/dsh-docs/persistence-catalog.zh.md +1077 -0
  124. package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.md +113 -0
  125. package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.zh.md +113 -0
  126. package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +47 -0
  127. package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +47 -0
  128. package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.md +53 -0
  129. package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +53 -0
  130. package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +55 -0
  131. package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +55 -0
  132. package/dsh-docs/postmortem/README.md +18 -0
  133. package/dsh-docs/postmortem/README.zh.md +18 -0
  134. package/dsh-docs/rescope.md +53 -0
  135. package/dsh-docs/rescope.zh.md +53 -0
  136. package/dsh-docs/session-format-status.md +47 -0
  137. package/dsh-docs/session-format-status.zh.md +47 -0
  138. package/dsh-docs/subsystems/README.md +61 -0
  139. package/dsh-docs/subsystems/README.zh.md +61 -0
  140. package/dsh-docs/subsystems/agent-team.md +207 -0
  141. package/dsh-docs/subsystems/agent-team.zh.md +207 -0
  142. package/dsh-docs/subsystems/approval.md +170 -0
  143. package/dsh-docs/subsystems/approval.zh.md +170 -0
  144. package/dsh-docs/subsystems/attachment.md +351 -0
  145. package/dsh-docs/subsystems/attachment.zh.md +351 -0
  146. package/dsh-docs/subsystems/client-modules.md +168 -0
  147. package/dsh-docs/subsystems/client-modules.zh.md +168 -0
  148. package/dsh-docs/subsystems/client-resources.md +91 -0
  149. package/dsh-docs/subsystems/client-resources.zh.md +91 -0
  150. package/dsh-docs/subsystems/code-runtime.md +195 -0
  151. package/dsh-docs/subsystems/code-runtime.zh.md +195 -0
  152. package/dsh-docs/subsystems/commands.md +219 -0
  153. package/dsh-docs/subsystems/commands.zh.md +219 -0
  154. package/dsh-docs/subsystems/compaction.md +238 -0
  155. package/dsh-docs/subsystems/compaction.zh.md +238 -0
  156. package/dsh-docs/subsystems/conversation.md +258 -0
  157. package/dsh-docs/subsystems/conversation.zh.md +258 -0
  158. package/dsh-docs/subsystems/core.md +1209 -0
  159. package/dsh-docs/subsystems/core.zh.md +1219 -0
  160. package/dsh-docs/subsystems/credentials.md +329 -0
  161. package/dsh-docs/subsystems/credentials.zh.md +329 -0
  162. package/dsh-docs/subsystems/extensions.md +382 -0
  163. package/dsh-docs/subsystems/extensions.zh.md +382 -0
  164. package/dsh-docs/subsystems/feedback.md +266 -0
  165. package/dsh-docs/subsystems/feedback.zh.md +266 -0
  166. package/dsh-docs/subsystems/filesystem.md +505 -0
  167. package/dsh-docs/subsystems/filesystem.zh.md +505 -0
  168. package/dsh-docs/subsystems/goal.md +277 -0
  169. package/dsh-docs/subsystems/goal.zh.md +277 -0
  170. package/dsh-docs/subsystems/invariants.md +88 -0
  171. package/dsh-docs/subsystems/invariants.zh.md +88 -0
  172. package/dsh-docs/subsystems/jobs.md +290 -0
  173. package/dsh-docs/subsystems/jobs.zh.md +290 -0
  174. package/dsh-docs/subsystems/llm-streaming.md +1080 -0
  175. package/dsh-docs/subsystems/llm-streaming.zh.md +1086 -0
  176. package/dsh-docs/subsystems/lsp.md +202 -0
  177. package/dsh-docs/subsystems/lsp.zh.md +202 -0
  178. package/dsh-docs/subsystems/permission-presets.md +131 -0
  179. package/dsh-docs/subsystems/permission-presets.zh.md +131 -0
  180. package/dsh-docs/subsystems/persistence.md +395 -0
  181. package/dsh-docs/subsystems/persistence.zh.md +395 -0
  182. package/dsh-docs/subsystems/plan.md +87 -0
  183. package/dsh-docs/subsystems/plan.zh.md +87 -0
  184. package/dsh-docs/subsystems/sandbox.md +220 -0
  185. package/dsh-docs/subsystems/sandbox.zh.md +220 -0
  186. package/dsh-docs/subsystems/schedule.md +192 -0
  187. package/dsh-docs/subsystems/schedule.zh.md +192 -0
  188. package/dsh-docs/subsystems/scope.md +59 -0
  189. package/dsh-docs/subsystems/scope.zh.md +59 -0
  190. package/dsh-docs/subsystems/session-projection.md +354 -0
  191. package/dsh-docs/subsystems/session-projection.zh.md +354 -0
  192. package/dsh-docs/subsystems/session-query.md +509 -0
  193. package/dsh-docs/subsystems/session-query.zh.md +509 -0
  194. package/dsh-docs/subsystems/session-reference.md +219 -0
  195. package/dsh-docs/subsystems/session-reference.zh.md +219 -0
  196. package/dsh-docs/subsystems/session-telemetry.md +194 -0
  197. package/dsh-docs/subsystems/session-telemetry.zh.md +194 -0
  198. package/dsh-docs/subsystems/session-title.md +204 -0
  199. package/dsh-docs/subsystems/session-title.zh.md +204 -0
  200. package/dsh-docs/subsystems/session.md +1155 -0
  201. package/dsh-docs/subsystems/session.zh.md +1159 -0
  202. package/dsh-docs/subsystems/settings.md +405 -0
  203. package/dsh-docs/subsystems/settings.zh.md +405 -0
  204. package/dsh-docs/subsystems/shell.md +303 -0
  205. package/dsh-docs/subsystems/shell.zh.md +303 -0
  206. package/dsh-docs/subsystems/sidebar-right.md +148 -0
  207. package/dsh-docs/subsystems/sidebar-right.zh.md +148 -0
  208. package/dsh-docs/subsystems/skills.md +354 -0
  209. package/dsh-docs/subsystems/skills.zh.md +354 -0
  210. package/dsh-docs/subsystems/slots.md +175 -0
  211. package/dsh-docs/subsystems/slots.zh.md +175 -0
  212. package/dsh-docs/subsystems/spill.md +117 -0
  213. package/dsh-docs/subsystems/spill.zh.md +117 -0
  214. package/dsh-docs/subsystems/storage.md +260 -0
  215. package/dsh-docs/subsystems/storage.zh.md +260 -0
  216. package/dsh-docs/subsystems/subagent.md +766 -0
  217. package/dsh-docs/subsystems/subagent.zh.md +770 -0
  218. package/dsh-docs/subsystems/subprocess.md +324 -0
  219. package/dsh-docs/subsystems/subprocess.zh.md +324 -0
  220. package/dsh-docs/subsystems/system-prompt.md +220 -0
  221. package/dsh-docs/subsystems/system-prompt.zh.md +220 -0
  222. package/dsh-docs/subsystems/terminal.md +184 -0
  223. package/dsh-docs/subsystems/terminal.zh.md +184 -0
  224. package/dsh-docs/subsystems/todo.md +32 -0
  225. package/dsh-docs/subsystems/todo.zh.md +32 -0
  226. package/dsh-docs/subsystems/token-meter.md +105 -0
  227. package/dsh-docs/subsystems/token-meter.zh.md +105 -0
  228. package/dsh-docs/subsystems/tools.md +720 -0
  229. package/dsh-docs/subsystems/tools.zh.md +720 -0
  230. package/dsh-docs/subsystems/typert.md +343 -0
  231. package/dsh-docs/subsystems/typert.zh.md +343 -0
  232. package/dsh-docs/subsystems/user-questions.md +178 -0
  233. package/dsh-docs/subsystems/user-questions.zh.md +178 -0
  234. package/dsh-docs/subsystems/web-client.md +95 -0
  235. package/dsh-docs/subsystems/web-client.zh.md +95 -0
  236. package/dsh-docs/subsystems/web-server.md +154 -0
  237. package/dsh-docs/subsystems/web-server.zh.md +154 -0
  238. package/dsh-docs/subsystems/web.md +206 -0
  239. package/dsh-docs/subsystems/web.zh.md +206 -0
  240. package/dsh-docs/subsystems/webhook.md +70 -0
  241. package/dsh-docs/subsystems/webhook.zh.md +70 -0
  242. package/dsh-docs/subsystems/workflow.md +278 -0
  243. package/dsh-docs/subsystems/workflow.zh.md +278 -0
  244. package/dsh-docs/subsystems/workspace.md +321 -0
  245. package/dsh-docs/subsystems/workspace.zh.md +321 -0
  246. package/dsh-docs/testing.md +54 -0
  247. package/dsh-docs/testing.zh.md +54 -0
  248. package/dsh-docs/tool-catalog.md +2225 -0
  249. package/dsh-docs/tool-catalog.zh.md +2233 -0
  250. package/dsh-docs/tool-execution-pipeline.md +62 -0
  251. package/dsh-docs/tool-execution-pipeline.zh.md +64 -0
  252. package/dsh-docs/user/develop/basic/config.md +106 -0
  253. package/dsh-docs/user/develop/basic/config.zh.md +106 -0
  254. package/dsh-docs/user/develop/basic/index.md +144 -0
  255. package/dsh-docs/user/develop/basic/index.zh.md +144 -0
  256. package/dsh-docs/user/develop/basic/publish.md +183 -0
  257. package/dsh-docs/user/develop/basic/publish.zh.md +183 -0
  258. package/dsh-docs/user/develop/basic/tool.md +52 -0
  259. package/dsh-docs/user/develop/basic/tool.zh.md +52 -0
  260. package/dsh-docs/user/develop/framework/events.md +143 -0
  261. package/dsh-docs/user/develop/framework/events.zh.md +143 -0
  262. package/dsh-docs/user/develop/framework/index.md +137 -0
  263. package/dsh-docs/user/develop/framework/index.zh.md +137 -0
  264. package/dsh-docs/user/develop/framework/service.md +148 -0
  265. package/dsh-docs/user/develop/framework/service.zh.md +150 -0
  266. package/dsh-docs/user/develop/practice/dynamic-cordis.md +15 -0
  267. package/dsh-docs/user/develop/practice/dynamic-cordis.zh.md +15 -0
  268. package/dsh-docs/user/develop/practice/index.md +155 -0
  269. package/dsh-docs/user/develop/practice/index.zh.md +155 -0
  270. package/dsh-docs/user/develop/practice/llm-adapter.md +189 -0
  271. package/dsh-docs/user/develop/practice/llm-adapter.zh.md +189 -0
  272. package/dsh-docs/user/guide/github-review.md +102 -0
  273. package/dsh-docs/user/guide/github-review.zh.md +102 -0
  274. package/dsh-docs/user/guide/index.md +30 -0
  275. package/dsh-docs/user/guide/index.zh.md +30 -0
  276. package/dsh-docs/user/guide/mcp-memory.md +101 -0
  277. package/dsh-docs/user/guide/mcp-memory.zh.md +101 -0
  278. package/dsh-docs/user/guide/network-proxy.md +85 -0
  279. package/dsh-docs/user/guide/network-proxy.zh.md +85 -0
  280. package/dsh-docs/user/guide/providers.md +190 -0
  281. package/dsh-docs/user/guide/providers.zh.md +190 -0
  282. package/dsh-docs/user/guide/python-sdk.md +150 -0
  283. package/dsh-docs/user/guide/python-sdk.zh.md +150 -0
  284. package/dsh-docs/user/guide/schedule.md +21 -0
  285. package/dsh-docs/user/guide/schedule.zh.md +21 -0
  286. package/dsh-docs/user/index.md +11 -0
  287. package/dsh-docs/user/index.zh.md +11 -0
  288. package/dsh-docs/web-styling.md +29 -0
  289. package/dsh-docs/web-styling.zh.md +29 -0
  290. package/eval-description.md +33 -0
  291. package/lib/client/index.js +327 -88
  292. package/lib/fs-aware/sandbox-plugin.d.ts +71 -0
  293. package/lib/fs-aware/sandbox-plugin.js +249 -0
  294. package/lib/index.d.ts +22 -22
  295. package/lib/index.js +3095 -3204
  296. package/lib/lsp-server-registry-DkaYmTwt.js +972 -0
  297. package/lib/lsp-server-registry-_hk-Wcia.js +3 -0
  298. package/lib/py-sdk-Chvy92MB.js +178 -0
  299. package/lib/py-sdk.d.ts +19 -2
  300. package/lib/py-sdk.js +2 -2
  301. package/lib/wrap-JFjcWwZf.js +747 -0
  302. package/package.json +9 -3
  303. package/url-schemes-instruction.md +22 -0
  304. package/control-prompt.md +0 -37
  305. package/docs/50_test-reports/v0.1.8d_artifacts/README.md +0 -138
  306. package/docs/50_test-reports/v0.1.8d_artifacts/code-mode-repl-only.observation.md +0 -74
  307. package/docs/50_test-reports/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.jsonl +0 -3890
  308. package/docs/50_test-reports/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.w-sample-0435.jsonl +0 -544
  309. package/docs/50_test-reports/v0.1.8d_artifacts/functions.json +0 -592
  310. package/docs/50_test-reports/v0.1.8d_artifacts/skills-catalog.snapshot.md +0 -30
  311. package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.output-schemas.json +0 -1236
  312. package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.python.txt +0 -592
  313. package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.typescript.txt +0 -516
  314. package/docs/50_test-reports/v0.1.8d_artifacts/wire-vs-transcription.diff.md +0 -54
  315. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/Cargo.lock +0 -7
  316. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/Cargo.toml +0 -6
  317. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/src/bin/messy.rs +0 -8
  318. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/src/main.rs +0 -4
  319. package/docs/50_test-reports/v0.2.0b_artifacts/hashline-probe.md +0 -5
  320. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/Cargo.lock +0 -7
  321. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/Cargo.toml +0 -7
  322. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/build.rs +0 -4
  323. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/src/main.rs +0 -13
  324. package/docs/60_exploration-and-research/cordis-research.md +0 -350
  325. package/docs/60_exploration-and-research/dsh-web-profile-package-map.md +0 -186
  326. package/docs/60_exploration-and-research/dsh-web-ui-slot-system-research.md +0 -310
  327. package/docs/60_exploration-and-research/dsh-webui-strip-boundary-research.md +0 -300
  328. package/docs/60_exploration-and-research/ios-chat-app-bridge-research.md +0 -324
  329. package/docs/60_exploration-and-research/web-frontend-composability-research.md +0 -191
  330. package/docs/REPL-/345/267/245/345/205/267/350/260/203/347/224/250-/346/210/252/346/226/255/350/257/212/346/226/255.md +0 -110
  331. package/docs/adr/0001-bridge-tool-layer-not-service-layer.md +0 -14
  332. package/docs/adr/0002-masking-is-presentation-only.md +0 -15
  333. package/docs/plans/A2A-messaging-channel-test-archive.md +0 -256
  334. package/docs/plans/code-mode-vs-rlm-ipython-comparison.md +0 -137
  335. package/docs/plans/dashr-blueprint-review.md +0 -201
  336. package/docs/plans/dashr-blueprint.md +0 -561
  337. package/docs/plans/dashr-compaction-window-and-archive.md +0 -307
  338. package/docs/plans/dashr-profile-layer-feasibility.md +0 -367
  339. package/docs/plans/dashr-sandbox-escalation-semantics-gap.md +0 -171
  340. package/docs/plans/dashr-security-sandbox-analysis.md +0 -187
  341. package/docs/plans/dashr-surface-invariant-and-omp-imports.md +0 -97
  342. package/docs/plans/ipython-kernel-interactive-interface-test-report.md +0 -152
  343. package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft.md +0 -146
  344. package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v3.md +0 -50
  345. package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v4.md +0 -79
  346. package/docs/plans/kernel-refactoring/Dash-vs-PrimeAgent-systemprompt-toolcatalog-comparison.md +0 -138
  347. package/docs/plans/kernel-refactoring/RLM-system-prompt-injection-gap-report.md +0 -161
  348. package/docs/plans/kernel-refactoring/V0.1.5-development-plan.md +0 -109
  349. package/docs/plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_dsh.md +0 -50
  350. package/docs/plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_prime.md +0 -113
  351. package/docs/plans/recallable-compaction.md +0 -147
  352. package/docs/plans/spike-tag-repro.mjs +0 -102
  353. package/docs/plans/upstream-analysis.md +0 -128
  354. package/docs/v0.1.8-improved-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -142
  355. package/docs/v0.1.8-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -193
  356. package/docs/v0.1.8b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -96
  357. package/docs/v0.1.8c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -127
  358. package/docs/v0.1.8d-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -150
  359. package/docs/v0.1.8d_artifacts/README.md +0 -138
  360. package/docs/v0.1.8d_artifacts/code-mode-repl-only.observation.md +0 -74
  361. package/docs/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.jsonl +0 -3890
  362. package/docs/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.w-sample-0435.jsonl +0 -544
  363. package/docs/v0.1.8d_artifacts/functions.json +0 -592
  364. package/docs/v0.1.8d_artifacts/skills-catalog.snapshot.md +0 -30
  365. package/docs/v0.1.8d_artifacts/tools-sdk.output-schemas.json +0 -1236
  366. package/docs/v0.1.8d_artifacts/tools-sdk.python.txt +0 -592
  367. package/docs/v0.1.8d_artifacts/tools-sdk.typescript.txt +0 -516
  368. package/docs/v0.1.8d_artifacts/wire-vs-transcription.diff.md +0 -54
  369. package/docs/v0.1.8e-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -224
  370. package/docs/v0.1.9a-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -168
  371. package/docs/v0.2.0b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -123
  372. package/docs/v0.2.0b_artifacts/f2probe/Cargo.lock +0 -7
  373. package/docs/v0.2.0b_artifacts/f2probe/Cargo.toml +0 -6
  374. package/docs/v0.2.0b_artifacts/f2probe/src/bin/messy.rs +0 -8
  375. package/docs/v0.2.0b_artifacts/f2probe/src/main.rs +0 -4
  376. package/docs/v0.2.0b_artifacts/hashline-probe.md +0 -5
  377. package/docs/v0.2.0b_artifacts/slowprobe/Cargo.lock +0 -7
  378. package/docs/v0.2.0b_artifacts/slowprobe/Cargo.toml +0 -7
  379. package/docs/v0.2.0b_artifacts/slowprobe/build.rs +0 -4
  380. package/docs/v0.2.0b_artifacts/slowprobe/src/main.rs +0 -13
  381. package/docs/v0.2.1-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -110
  382. package/docs/v0.2.1b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -86
  383. package/docs/v0.2.1c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -66
  384. package/lib/py-sdk-BCaOGYz7.d.ts +0 -125
  385. package/lib/py-sdk-CbgYiX8O.js +0 -691
@@ -0,0 +1,3473 @@
1
+ <!-- Generated by scripts/gen-config-catalog.ts — do not edit by hand.
2
+ Run `pnpm run gen-config-catalog` to regenerate. -->
3
+
4
+ # Plugin Config Catalog
5
+
6
+ Every `config:` block a `cordis.yml` entry can set: for each loadable harness package, the verbatim config declaration (JSDoc included) its `apply` function or service constructor receives, with every referenced type pasted alongside (package-local types) or linked (everything else). The paste is the plugin's full declared config type — a field the runtime schema deliberately excludes is a runtime-only seam (its own JSDoc says so) and is not settable from `cordis.yml`. This is the **deployment**-axis reference — the wiring a plugin author works against is the generated Cordis API region on each [subsystem page](subsystems/core.md), the model-facing tool schemas are the [tool catalog](tool-catalog.md), and [subsystems/](subsystems/core.md) documents the types these declarations reference.
7
+
8
+ This file is GENERATED from source (`scripts/gen-config-catalog.ts`) and verified fresh by `pnpm run verify-config-catalog` (part of `doc-sync`) — do not edit it by hand. Declaration blocks use a `ts config-catalog` fence (skipped by doc-typecheck, since a lone declaration referencing imports is not standalone-compilable). The generator also cross-checks the runtime schemastery schema against the pasted declaration — every schema-validated key, nested keys included, must be locatable on the declared config type — so the paste cannot hide a loader-accepted field.
9
+
10
+ A `Requires:` line lists the service keys the plugin `inject`s: its `cordis.yml` tree must also load providers for those services. Scope is the harness tier (`packages/`); the vendored cordis plugins a config tree may also load (`hmr`, the console logger, …) are pinned upstream source ([vendoring policy](../vendor/README.md)) and not catalogued here.
11
+
12
+ <a id="deepseek-aidsh-acp"></a>
13
+
14
+ ## `@deepseek-ai/dsh-acp`
15
+
16
+ Requires: `agents` · `llm` · `sessionPersistence` · `sessions`
17
+
18
+ ```ts config-catalog
19
+ /** Plugin config: the provider/model selection used for each ACP-created agent. */
20
+ export interface AcpConfig {
21
+ /** Provider route for created agents. */
22
+ provider?: string
23
+ /** Model name for created agents. */
24
+ model?: string
25
+ /** Maximum summaries returned by one session/list page. */
26
+ sessionListPageSize?: number
27
+ /** Runtime-only transport override; production uses stdio. */
28
+ stream?: Stream
29
+ }
30
+ ```
31
+
32
+ Depends on: `Stream` (`@agentclientprotocol/sdk`)
33
+
34
+ Source: [`packages/acp/acp/src/index.ts:75`](../packages/acp/acp/src/index.ts)
35
+
36
+ <a id="deepseek-aidsh-agent-default-model"></a>
37
+
38
+ ## `@deepseek-ai/dsh-agent-default-model`
39
+
40
+ ```ts config-catalog
41
+ /** Composition entry for the default model selection. */
42
+ export interface Config {
43
+ /** Registered provider route. */
44
+ provider: string
45
+ /** Provider-owned model id. */
46
+ model: string
47
+ }
48
+ ```
49
+
50
+ Source: [`packages/core/agent-default-model/src/index.ts:41`](../packages/core/agent-default-model/src/index.ts)
51
+
52
+ <a id="deepseek-aidsh-agent-instructions"></a>
53
+
54
+ ## `@deepseek-ai/dsh-agent-instructions`
55
+
56
+ Requires: `sessionProjections`
57
+
58
+ ```ts config-catalog
59
+ /** User-facing workspace instruction loader configuration. */
60
+ export interface Config {
61
+ /** Harness home containing the fixed user-global `AGENTS.md`; defaults to `$DSH_HOME` or `~/.dsh`. */
62
+ dshHome?: string
63
+ /** Directory entries that identify the project root while walking upward from the session cwd. */
64
+ projectRootMarkers?: string[]
65
+ /** UTF-8 byte cap for one rendered baseline or dynamic batch; non-positive or non-finite disables loading. */
66
+ maxBytes: number
67
+ /** Maximum UTF-8 bytes read from one instruction file; larger files are ignored. */
68
+ maxSourceBytes?: number
69
+ /**
70
+ * Ordered same-directory project candidates; every existing file loads, with
71
+ * per-directory trimmed-content duplicates collapsed to the earliest candidate.
72
+ */
73
+ instructionFileCandidates?: string[]
74
+ /**
75
+ * Ordered same-directory local-overlay candidates loaded after the base files
76
+ * under the same per-directory trimmed-content dedup; empty disables the overlay.
77
+ */
78
+ localInstructionFileCandidates?: string[]
79
+ }
80
+ ```
81
+
82
+ Source: [`packages/context/agent-instructions/src/config.ts:18`](../packages/context/agent-instructions/src/config.ts)
83
+
84
+ <a id="deepseek-aidsh-agent-loop"></a>
85
+
86
+ ## `@deepseek-ai/dsh-agent-loop`
87
+
88
+ Requires: `agents` · `sessions` · `llm` · `tools` · `systemPrompt` · `sessionProjections`
89
+
90
+ ```ts config-catalog
91
+ /** Agent-loop plugin configuration. */
92
+ export interface Config {
93
+ /**
94
+ * Maximum parallel-safe calls in flight per agent step. `1` is serial;
95
+ * omission defaults to {@link DEFAULT_MAX_PARALLEL_TOOL_CALLS}.
96
+ */
97
+ maxParallelToolCalls?: number
98
+ /** Agents created or resumed at plugin startup. */
99
+ agents: (AgentOptions & {
100
+ /** Stable config label used in logs and as the fresh combined-id prefix. */
101
+ id: string
102
+ /** Optional stable identity; remounts resume its materialized history, while first use creates it fresh. */
103
+ sessionId?: SessionId
104
+ /** Optional workspace for a fresh session. */
105
+ cwd?: string
106
+ /** Persisted session to resume instead of creating a fresh session. */
107
+ resumeSessionId?: SessionId
108
+ })[]
109
+ }
110
+ ```
111
+
112
+ Depends on: [`AgentOptions`](subsystems/core.md) · [`SessionId`](subsystems/core.md)
113
+
114
+ Source: [`packages/core/agent-loop/src/index.ts:318`](../packages/core/agent-loop/src/index.ts)
115
+
116
+ <a id="deepseek-aidsh-agent-presets"></a>
117
+
118
+ ## `@deepseek-ai/dsh-agent-presets`
119
+
120
+ Requires: `loader` · `sessionProjections`
121
+
122
+ ```ts config-catalog
123
+ /** Plugin config: which preset is the default, and where presets live. */
124
+ export interface Config {
125
+ /** Preset id mounted when a caller names none. Missing at mount time fails loud. */
126
+ default: string
127
+ /** Scanned roots in precedence order; an earlier root wins a duplicate id. */
128
+ roots: PresetRoot[]
129
+ /**
130
+ * Prepend this package's bundled shipped presets as a `system` root, before
131
+ * every configured root, so the shipped set always mounts and wins a
132
+ * duplicate id. The default survives a whole-`config` patch replacement;
133
+ * only an explicit `false` — a deployment supplying purely its own presets,
134
+ * or an embedder using the roster as bare machinery — drops the set.
135
+ */
136
+ includeShippedRoot: boolean
137
+ /**
138
+ * Append the harness home's `USER_PRESET_DIR` as a `user` root, after every
139
+ * configured root. False mounts a roster without the derived writable root.
140
+ */
141
+ includeUserRoot: boolean
142
+ }
143
+
144
+ /** One directory scanned for preset subdirectories. */
145
+ export interface PresetRoot {
146
+ /** Directory holding one subdirectory per preset; a leading `~` expands. */
147
+ path: string
148
+ /** Trust recorded on every preset discovered under this root. */
149
+ trust: PresetTrust
150
+ }
151
+
152
+ /**
153
+ * Where a preset's composition came from. A `system` preset ships with the
154
+ * deployment; a `user` preset was authored locally, by a person or by an
155
+ * agent, and therefore carries the same trust as shell access.
156
+ */
157
+ export type PresetTrust = 'system' | 'user'
158
+ ```
159
+
160
+ Source: [`packages/preset/agent-presets/src/preset.ts:52`](../packages/preset/agent-presets/src/preset.ts)
161
+
162
+ <a id="deepseek-aidsh-agent-tool-presentation"></a>
163
+
164
+ ## `@deepseek-ai/dsh-agent-tool-presentation`
165
+
166
+ Requires: `tools`
167
+
168
+ ```ts config-catalog
169
+ /** Plugin config. */
170
+ export interface Config {
171
+ /**
172
+ * The form this agent's model sees. `native` sends every visible schema,
173
+ * `ptc` sends only `run_code` plus a generated SDK, `both` sends both.
174
+ * Required rather than defaulted: the deployment default is what a preset
175
+ * without this row already gets, so an omitted value would mean the row was
176
+ * composed for nothing.
177
+ */
178
+ mode: ToolPresentationMode
179
+ }
180
+ ```
181
+
182
+ Depends on: [`ToolPresentationMode`](subsystems/tools.md)
183
+
184
+ Source: [`packages/core/agent-tool-presentation/src/index.ts:38`](../packages/core/agent-tool-presentation/src/index.ts)
185
+
186
+ <a id="deepseek-aidsh-api-gateway"></a>
187
+
188
+ ## `@deepseek-ai/dsh-api-gateway`
189
+
190
+ Requires: `typert`
191
+
192
+ ```ts config-catalog
193
+ /** Gateway transport configuration. */
194
+ export interface Config {
195
+ /** WebSocket Ping interval from 1 through 2,147,483,647 milliseconds. @default 2000 */
196
+ readonly websocketHeartbeatIntervalMs?: number
197
+ }
198
+ ```
199
+
200
+ Source: [`packages/api/gateway/src/index.ts:119`](../packages/api/gateway/src/index.ts)
201
+
202
+ <a id="deepseek-aidsh-api-session-controller"></a>
203
+
204
+ ## `@deepseek-ai/dsh-api-session-controller`
205
+
206
+ Requires: `agentDefaultModel` · `agents` · `attachments` · `fileUploads` · `llm` · `sessions` · `sessionProjections` · `sessionQuery` · `typert` · `workspaceRegistry`
207
+
208
+ ```ts config-catalog
209
+ /** Session Controller deployment policy. */
210
+ export interface Config {
211
+ /** Override platform desktop-opener detection. */
212
+ readonly nativeOpen?: boolean
213
+ }
214
+ ```
215
+
216
+ Source: [`packages/api/session-controller/src/index.ts:69`](../packages/api/session-controller/src/index.ts)
217
+
218
+ <a id="deepseek-aidsh-api-settings-controller"></a>
219
+
220
+ ## `@deepseek-ai/dsh-api-settings-controller`
221
+
222
+ ```ts config-catalog
223
+ /** Native document-opening policy. */
224
+ export interface Config {
225
+ /** Override platform desktop-opener detection. */
226
+ readonly nativeOpen?: boolean
227
+ }
228
+ ```
229
+
230
+ Source: [`packages/api/settings-controller/src/index.ts:36`](../packages/api/settings-controller/src/index.ts)
231
+
232
+ <a id="deepseek-aidsh-attachment-local"></a>
233
+
234
+ ## `@deepseek-ai/dsh-attachment-local`
235
+
236
+ ```ts config-catalog
237
+ /** Local attachment backend configuration. */
238
+ export interface Config {
239
+ /** Explicit harness home; omitted follows `DSH_HOME`, then `~/.dsh`. */
240
+ dshHome?: string
241
+ /** Maximum encoded bytes accepted for one submitted image. Default: 20 MiB. */
242
+ maxImageBytes?: number
243
+ /** Maximum image count accepted in one submitted message. Default: 20. */
244
+ maxImagesPerMessage?: number
245
+ /** Maximum aggregate encoded image bytes accepted in one submitted message. Default: 200 MiB. */
246
+ maxMessageImageBytes?: number
247
+ /** Maximum intrinsic width multiplied by height accepted for one submitted image. Default: 64,000,000. */
248
+ maxImagePixels?: number
249
+ /** Maximum intrinsic width and maximum intrinsic height accepted for one submitted image. Default: 8192px. */
250
+ maxImageDimension?: number
251
+ /** Total-pixel budget of the stored provider-independent normalized image. */
252
+ normalizedImageMaxPixels?: number
253
+ /** Long-edge pixel cap of the stored provider-independent normalized image, applied after the total-pixel budget. */
254
+ normalizedImageMaxDimension?: number
255
+ /**
256
+ * Encoded-byte target of the stored provider-independent normalized image;
257
+ * the smallest quality-ladder output is kept when no quality fits.
258
+ */
259
+ normalizedImageMaxBytes?: number
260
+ /** Maximum simultaneous normalization or request-image transformations in this service instance. */
261
+ imageCompressionConcurrency?: number
262
+ }
263
+ ```
264
+
265
+ Source: [`packages/attachment/attachment-local/src/index.ts:61`](../packages/attachment/attachment-local/src/index.ts)
266
+
267
+ <a id="deepseek-aidsh-bash-local"></a>
268
+
269
+ ## `@deepseek-ai/dsh-bash-local`
270
+
271
+ Requires: `subprocess`
272
+
273
+ ```ts config-catalog
274
+ /** Plugin config (all optional — `static Config` supplies the defaults). */
275
+ export interface Config {
276
+ /** Default working directory for commands (default: process.cwd()). */
277
+ cwd?: string
278
+ /** Default foreground timeout in milliseconds. */
279
+ timeoutMs?: number
280
+ /** Upper bound for per-call timeout overrides. */
281
+ maxTimeoutMs?: number
282
+ /** Per-stream in-memory output cap; overflow spills to a temp file. */
283
+ maxOutputBytes?: number
284
+ /** Per-stream spill-file cap; larger streams retain only their in-memory tail. */
285
+ maxSpillBytes?: number
286
+ /** Grace period for kill escalation and inherited pipes; at most `MAX_TIMER_DELAY_MS`. */
287
+ graceMs?: number
288
+ }
289
+ ```
290
+
291
+ Source: [`packages/shell/bash-local/src/index.ts:41`](../packages/shell/bash-local/src/index.ts)
292
+
293
+ <a id="deepseek-aidsh-bash-sandbox"></a>
294
+
295
+ ## `@deepseek-ai/dsh-bash-sandbox`
296
+
297
+ Requires: `subprocess` · `sandbox` · `sandboxPolicy`
298
+
299
+ ```ts config-catalog
300
+ /**
301
+ * Plugin config: the local executor's knobs, verbatim. The sandbox policy —
302
+ * the default mode and fallback `workspace-write` root — is NOT here: it lives
303
+ * on `ctx.sandboxPolicy` (`@deepseek-ai/dsh-sandbox-policy`), which resolves
304
+ * each calling session's mode and cwd for every enforcing capability. The runner
305
+ * choice is likewise the `ctx.sandbox` provider's config, not this executor's.
306
+ */
307
+ export type Config = LocalConfig
308
+ ```
309
+
310
+ Depends on: [`LocalConfig`](#deepseek-aidsh-bash-local)
311
+
312
+ Source: [`packages/shell/bash-sandbox/src/index.ts:35`](../packages/shell/bash-sandbox/src/index.ts)
313
+
314
+ <a id="deepseek-aidsh-client-connection"></a>
315
+
316
+ ## `@deepseek-ai/dsh-client-connection`
317
+
318
+ Requires: `webServer` · `credentials`
319
+
320
+ ```ts config-catalog
321
+ /** Plugin config: the deployment's non-loopback serving authorities. */
322
+ export interface ConnectionConfig {
323
+ /**
324
+ * Authorities this deployment serves beyond loopback: exact `host:port`, or
325
+ * port-less `host` matching any port. The /api trust fence refuses any
326
+ * request whose Host is neither loopback nor listed here, so a
327
+ * non-loopback (`0.0.0.0`) deployment must declare the names it is reached
328
+ * by; the Web runtime derives LAN IP literals from an active all-interface
329
+ * bind. An entry that is not a bare, canonical authority fails plugin load.
330
+ */
331
+ trustedHosts?: string[]
332
+ /** Absolute browser-session lifetime in days. Default: 30. */
333
+ cookieMaxAgeDays?: number
334
+ /** Maximum buffered JSON body for every `/api` request. Default: 300 MiB. */
335
+ maxRequestBodyBytes?: number
336
+ }
337
+ ```
338
+
339
+ Source: [`packages/client/connection/src/index.ts:71`](../packages/client/connection/src/index.ts)
340
+
341
+ <a id="deepseek-aidsh-client-hmr"></a>
342
+
343
+ ## `@deepseek-ai/dsh-client-hmr`
344
+
345
+ Requires: `clientModules` · `webServer`
346
+
347
+ ```ts config-catalog
348
+ /** Plugin config, validated by the same-named schemastery schema. */
349
+ export interface Config {
350
+ /** Bundle stat-poll interval in milliseconds (default 500, the build-side watcher's polling default). */
351
+ pollIntervalMs?: number
352
+ }
353
+ ```
354
+
355
+ Source: [`packages/client/hmr/src/index.ts:31`](../packages/client/hmr/src/index.ts)
356
+
357
+ <a id="deepseek-aidsh-code-runtime-worker-thread"></a>
358
+
359
+ ## `@deepseek-ai/dsh-code-runtime-worker-thread`
360
+
361
+ ```ts config-catalog
362
+ /** Plugin config: every execution cap, changeable from `cordis.yml` (no hardcoded tunables). */
363
+ export interface Config {
364
+ /**
365
+ * Busy-time budget in milliseconds: the run fails with kind `'timeout'`
366
+ * once the worker's MEASURED event-loop active time
367
+ * (`worker.performance.eventLoopUtilization()`) exceeds this. Metering
368
+ * measured busy time — not wall time, not host-side pending-call
369
+ * bookkeeping — is what makes the budget both fair (a program awaiting a
370
+ * slow tool accrues nothing) and ungameable (a hot loop accrues whether
371
+ * or not a decoy dispatch is in flight).
372
+ */
373
+ computeMs?: number
374
+ /**
375
+ * Wall-clock ceiling in milliseconds; never pauses for anything. The
376
+ * backstop for what busy-time cannot see (a program awaiting a promise
377
+ * nobody will resolve). At most `2_147_483_647` (Node's maximum
378
+ * `setTimeout` delay, about 24.9 days): a longer value is rejected at load
379
+ * because `setTimeout` would clamp it to 1 ms.
380
+ */
381
+ maxWallMs?: number
382
+ /**
383
+ * Hard cap for serialized log-array, completion-value, and failure-message payloads;
384
+ * fixed result-envelope syntax is excluded.
385
+ */
386
+ maxOutputBytes?: number
387
+ /** The worker's max old-generation heap in MiB (`resourceLimits`); overflow kills the worker, surfacing as kind `'worker-exit'`. */
388
+ maxOldGenerationSizeMb?: number
389
+ }
390
+ ```
391
+
392
+ Source: [`packages/code-runtime/code-runtime-worker-thread/src/index.ts:25`](../packages/code-runtime/code-runtime-worker-thread/src/index.ts)
393
+
394
+ <a id="deepseek-aidsh-compaction-basic"></a>
395
+
396
+ ## `@deepseek-ai/dsh-compaction-basic`
397
+
398
+ Requires: `llm` · `tokenMeter` · `sessions`
399
+
400
+ ```ts config-catalog
401
+ /** Basic compaction configuration with an optional exact-target policy table. */
402
+ export interface BasicCompactionConfig extends CompactionPolicyConfig {
403
+ /** Exact provider/model overrides; duplicate targets fail plugin load. */
404
+ modelPolicies?: ModelCompactPolicyConfig[]
405
+ /** Enable automatic step-boundary pressure and overflow-recovery listeners. Defaults to `true`. */
406
+ auto?: boolean
407
+ }
408
+
409
+ /** Policy fields shared by the default policy and exact model overrides. */
410
+ export interface CompactionPolicyConfig {
411
+ /** Compact at this fraction of the model's context window. Defaults to `0.8`. */
412
+ thresholdRatio?: number
413
+ /** Recent context retained as a fraction of the model's window. Defaults to `0.16`. */
414
+ retainRatio?: number
415
+ /** Absolute recent-context budget; mutually exclusive with `retainRatio`. */
416
+ retainTokens?: number
417
+ /** Summary provider; set together with `summarizationModel`, or inherit the conversation target. */
418
+ summarizationProvider?: string
419
+ /** Summary model; set together with `summarizationProvider`, or inherit the conversation target. */
420
+ summarizationModel?: string
421
+ /** Provider generation cap for summarization. Defaults to `8192`. */
422
+ maxTokens?: number
423
+ /** Extra attempts after the first compaction when pressure remains above threshold. Defaults to `1`. */
424
+ compactionRetries?: number
425
+ /** Maximum retries after canonical context overflow; `0` disables recovery. Defaults to `1`. */
426
+ maxOverflowRetries?: number
427
+ }
428
+
429
+ /** Exact provider/model override merged over the default compaction policy. */
430
+ export interface ModelCompactPolicyConfig extends CompactionPolicyConfig {
431
+ /** Registered provider route to match. */
432
+ provider: string
433
+ /** Exact routed model id to match within `provider`. */
434
+ model: string
435
+ }
436
+ ```
437
+
438
+ Source: [`packages/compaction/compaction-basic/src/types.ts:38`](../packages/compaction/compaction-basic/src/types.ts)
439
+
440
+ <a id="deepseek-aidsh-compaction-tool-result-pruner"></a>
441
+
442
+ ## `@deepseek-ai/dsh-compaction-tool-result-pruner`
443
+
444
+ Requires: `tokenMeter`
445
+
446
+ ```ts config-catalog
447
+ /** Character-budget policy for deterministic tool-result pruning. */
448
+ export interface ToolResultPruneConfig {
449
+ /** Prune when total text exceeds this many Unicode code points. Defaults to `8192`. */
450
+ thresholdChars?: number
451
+ /** Maximum leading Unicode code points retained. Defaults to `4096`. */
452
+ headChars?: number
453
+ /** Maximum trailing Unicode code points retained. Defaults to `1024`. */
454
+ tailChars?: number
455
+ }
456
+ ```
457
+
458
+ Source: [`packages/compaction/compaction-tool-result-pruner/src/types.ts:5`](../packages/compaction/compaction-tool-result-pruner/src/types.ts)
459
+
460
+ <a id="deepseek-aidsh-cordis-host-runner"></a>
461
+
462
+ ## `@deepseek-ai/dsh-cordis-host-runner`
463
+
464
+ Requires: `tools`
465
+
466
+ ```ts config-catalog
467
+ /** Runner configuration. */
468
+ export interface Config {
469
+ /** Maximum synchronous VM evaluation time in milliseconds. */
470
+ vmTimeoutMs?: number
471
+ }
472
+ ```
473
+
474
+ Source: [`packages/extensions/cordis-host-runner/src/index.ts:88`](../packages/extensions/cordis-host-runner/src/index.ts)
475
+
476
+ <a id="deepseek-aidsh-credentials-local"></a>
477
+
478
+ ## `@deepseek-ai/dsh-credentials-local`
479
+
480
+ ```ts config-catalog
481
+ /** Plugin config: file location and hot-reload behavior. */
482
+ export interface Config {
483
+ /** Credentials document path; defaults to `.credentials.yaml` under the harness home. */
484
+ path?: string
485
+ /** Harness home used when `path` is omitted; defaults to `$DSH_HOME` or `~/.dsh`. */
486
+ dshHome?: string
487
+ /** Watch the document and hot-publish external edits; defaults to true. */
488
+ watch?: boolean
489
+ /** Watcher write-settle window in milliseconds; defaults to 100. */
490
+ debounceMs?: number
491
+ }
492
+ ```
493
+
494
+ Source: [`packages/credentials/credentials-local/src/index.ts:64`](../packages/credentials/credentials-local/src/index.ts)
495
+
496
+ <a id="deepseek-aidsh-e2b"></a>
497
+
498
+ ## `@deepseek-ai/dsh-e2b`
499
+
500
+ ```ts config-catalog
501
+ /** Configuration for the shared E2B sandbox owner. */
502
+ export interface Config {
503
+ /** API key; omission reads `E2B_API_KEY`. It is never forwarded into the sandbox. */
504
+ apiKey?: string
505
+ /** Shared remote working directory, created before adapters receive the sandbox. */
506
+ cwd?: string
507
+ /** E2B sandbox lifetime in milliseconds; expiry always deletes the sandbox. */
508
+ timeoutMs?: number
509
+ }
510
+ ```
511
+
512
+ Source: [`packages/e2b/e2b/src/index.ts:45`](../packages/e2b/e2b/src/index.ts)
513
+
514
+ <a id="deepseek-aidsh-experimental-agent-team"></a>
515
+
516
+ ## `@deepseek-ai/dsh-experimental-agent-team`
517
+
518
+ Requires: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents`
519
+
520
+ ```ts config-catalog
521
+ /** Team-service deployment limits. */
522
+ export interface Config {
523
+ /** Maximum immutable teammate names retained by one Team. */
524
+ readonly maxMembers?: number
525
+ /** Maximum non-deleted tasks retained by one Team. */
526
+ readonly maxTasks?: number
527
+ /** Maximum queued-minus-delivered messages for one target member. */
528
+ readonly maxPendingMessagesPerMember?: number
529
+ /** Maximum UTF-8 bytes in one complete sender-framed delivery. */
530
+ readonly maxMessageBytes?: number
531
+ /** Maximum milliseconds allowed for Team-owned runtime disposal. */
532
+ readonly disposalTimeoutMs?: number
533
+ }
534
+ ```
535
+
536
+ Source: [`packages/experimental/agent-team/src/types.ts:130`](../packages/experimental/agent-team/src/types.ts)
537
+
538
+ <a id="deepseek-aidsh-experimental-code-runtime-python"></a>
539
+
540
+ ## `@deepseek-ai/dsh-experimental-code-runtime-python`
541
+
542
+ ```ts config-catalog
543
+ /** Plugin config: every cap, changeable from `cordis.yml` (no hardcoded tunables). */
544
+ export interface Config {
545
+ /**
546
+ * RLIMIT_CPU in whole seconds (a positive integer — `setrlimit` in the child
547
+ * rejects a float). The child sets the soft limit to `cpuSeconds` and the
548
+ * hard limit to `cpuSeconds + 1`: the kernel delivers SIGXCPU at the soft
549
+ * limit, which the host classifies as a `timeout`; the +1s hard limit is a
550
+ * SIGKILL backstop for a program that traps SIGXCPU. Granularity is seconds —
551
+ * a coarser counterpart to the worker backend's millisecond `computeMs`.
552
+ */
553
+ cpuSeconds?: number
554
+ /** Wall-clock ceiling in milliseconds; backstops CPU time for programs awaiting a promise nobody resolves. */
555
+ maxWallMs?: number
556
+ /**
557
+ * RLIMIT_AS in mebibytes; caps address space so a runaway allocation fails
558
+ * cleanly. Not applied on Darwin, where the dyld shared cache mapped into
559
+ * every process at exec exceeds any practical cap and the kernel rejects
560
+ * the call; `cpuSeconds` and `maxWallMs` still bound the run there. Bounds
561
+ * `maxLogBytes`/`maxValueBytes` at load on EVERY platform (this static check
562
+ * runs on Darwin too, where only the runtime `setrlimit` is skipped): each
563
+ * budget times a worst-case Unicode expansion must fit this byte count minus a
564
+ * fixed interpreter baseline, so a near-budget output cannot breach the address
565
+ * space during the child's build-and-encode.
566
+ */
567
+ addressSpaceMb?: number
568
+ /**
569
+ * Shared byte budget for captured log text (host-side ledger). Bounded at load
570
+ * against `addressSpaceMb`: the child builds and encodes a near-budget entry
571
+ * under RLIMIT_AS with several copies live at once, so this cap times the
572
+ * worst-case Unicode expansion must fit the address space left after the
573
+ * interpreter baseline (see `addressSpaceMb`) — a load-time rejection, not a
574
+ * runtime clamp. Also bounded at load by the host's configured heap like
575
+ * `maxValueBytes` (see its JSDoc): the effective frame cap minus the frame
576
+ * envelope.
577
+ */
578
+ maxLogBytes?: number
579
+ /**
580
+ * Byte cap for the completion value. Bounded at load against `addressSpaceMb`
581
+ * the same way `maxLogBytes` is: the child builds and encodes a near-budget
582
+ * value under RLIMIT_AS with several copies live at once, so this cap times the
583
+ * worst-case Unicode expansion must fit the address space left after the
584
+ * interpreter baseline. Both budgets are ALSO bounded at load by the host's
585
+ * configured heap: the effective frame cap (the protocol cap, or a lower
586
+ * heap-derived ceiling when the host heap cannot safely parse a near-cap
587
+ * frame — see `hostFrameParseCeiling`) minus the frame envelope, so a budget
588
+ * whose honest frame could OOM the host's own JSON.parse is rejected up
589
+ * front.
590
+ */
591
+ maxValueBytes?: number
592
+ /** SIGTERM→SIGKILL grace period on kill, matching bash-local's default. */
593
+ graceMs?: number
594
+ /**
595
+ * Absolute path, relative path, or basename of a CPython 3.10+ interpreter.
596
+ * Resolved and validated once at plugin load under a five-second force-kill
597
+ * deadline; a basename searches `PATH`.
598
+ */
599
+ pythonBin?: string
600
+ }
601
+ ```
602
+
603
+ Source: [`packages/experimental/code-runtime-python/src/index.ts:42`](../packages/experimental/code-runtime-python/src/index.ts)
604
+
605
+ <a id="deepseek-aidsh-experimental-inspector"></a>
606
+
607
+ ## `@deepseek-ai/dsh-experimental-inspector`
608
+
609
+ Requires: `webServer`
610
+
611
+ ```ts config-catalog
612
+ /** Host plugin configuration. Fetch capture is enabled by default. */
613
+ export interface Config extends Omit<InspectorOptions, 'clientOrigins'> {
614
+ /** Browser origins allowed to open the Client ingest WebSocket. */
615
+ clientOrigins?: string[]
616
+ }
617
+
618
+ /** User-facing Host options; every memory and lifecycle bound is configurable. */
619
+ export interface InspectorOptions {
620
+ /** Loopback address used by the Worker HTTP and WebSocket endpoint. */
621
+ readonly host?: '127.0.0.1'
622
+ /** First port to bind; occupied ports advance until one is available. */
623
+ readonly port?: number
624
+ /** Additional exact browser origins admitted to the Client ingest socket. */
625
+ readonly clientOrigins?: readonly string[]
626
+ /** Whether to observe calls made through the current global fetch function. */
627
+ readonly captureFetch?: boolean
628
+ /** Maximum request-body prefix retained for one fetch. */
629
+ readonly maxRequestBodyBytes?: number
630
+ /** Maximum response-body prefix retained for one fetch. */
631
+ readonly maxResponseBodyBytes?: number
632
+ /** Maximum raw bytes encoded into one body observation. */
633
+ readonly maxBodyChunkBytes?: number
634
+ /** Maximum total request and response body bytes retained by the Worker. */
635
+ readonly maxJournalBytes?: number
636
+ /** Maximum active and completed fetch requests retained by the Worker. */
637
+ readonly maxRetainedRequests?: number
638
+ /** Maximum encoded bytes accepted in one source transport frame. */
639
+ readonly maxSourceFrameBytes?: number
640
+ /** Maximum observation records accepted in one source batch. */
641
+ readonly maxSourceRecordsPerFrame?: number
642
+ /** Maximum records waiting in one producer queue. */
643
+ readonly maxQueuedRecords?: number
644
+ /** Maximum encoded bytes waiting in one producer queue. */
645
+ readonly maxQueuedBytes?: number
646
+ /** Maximum time allowed for the Worker to become ready. */
647
+ readonly startupTimeoutMs?: number
648
+ /** Grace period before a stopping Worker is terminated. */
649
+ readonly stopTimeoutMs?: number
650
+ /** Initial upper bound for randomized Client reconnect delay. */
651
+ readonly clientReconnectBaseMs?: number
652
+ /** Maximum upper bound for randomized Client reconnect delay. */
653
+ readonly clientReconnectMaxMs?: number
654
+ /** Deadline for one Worker-to-Client Runtime or Sources request. */
655
+ readonly clientRuntimeTimeoutMs?: number
656
+ /** Deadline for one non-CDP semantic query. */
657
+ readonly queryTimeoutMs?: number
658
+ /** Maximum live object handles retained per Client Runtime session. */
659
+ readonly maxClientRuntimeObjects?: number
660
+ /** Maximum descriptors returned by one Client property request. */
661
+ readonly maxClientRuntimeProperties?: number
662
+ /** Maximum encoded bytes read for one Client script or source map. */
663
+ readonly maxClientSourceBytes?: number
664
+ /** Maximum Context and Fiber nodes retained in one realm snapshot. */
665
+ readonly maxCordisNodes?: number
666
+ /** Disconnected Cordis snapshots retained after their live realm closes. */
667
+ readonly maxDisconnectedCordisTrees?: number
668
+ }
669
+ ```
670
+
671
+ Source: [`packages/experimental/inspector/src/index.ts:66`](../packages/experimental/inspector/src/index.ts)
672
+
673
+ <a id="deepseek-aidsh-experimental-tool-agent-team"></a>
674
+
675
+ ## `@deepseek-ai/dsh-experimental-tool-agent-team`
676
+
677
+ Requires: `agents` · `agentTeams` · `tools` · `systemPrompt`
678
+
679
+ ```ts config-catalog
680
+ /** Tool routing configuration. */
681
+ export interface Config {
682
+ /** Continuable-subagent provider used for fresh teammates. */
683
+ readonly freshProvider?: string
684
+ /** Continuable-subagent provider used for completed-prefix fork teammates. */
685
+ readonly forkProvider?: string
686
+ }
687
+ ```
688
+
689
+ Source: [`packages/experimental/tool-agent-team/src/index.ts:17`](../packages/experimental/tool-agent-team/src/index.ts)
690
+
691
+ <a id="deepseek-aidsh-file-reference-local"></a>
692
+
693
+ ## `@deepseek-ai/dsh-file-reference-local`
694
+
695
+ Requires: `agents`
696
+
697
+ ```ts config-catalog
698
+ /** Local file-reference discovery configuration. */
699
+ export interface Config {
700
+ /** Maximum ranked candidates returned for one query. */
701
+ maxResults?: number
702
+ /** Maximum indexed files and directories per agent workspace. */
703
+ maxEntries?: number
704
+ /** Directory basenames never traversed or offered. */
705
+ excludedDirectories?: string[]
706
+ }
707
+ ```
708
+
709
+ Source: [`packages/context/file-reference-local/src/index.ts:34`](../packages/context/file-reference-local/src/index.ts)
710
+
711
+ <a id="deepseek-aidsh-fs-local"></a>
712
+
713
+ ## `@deepseek-ai/dsh-fs-local`
714
+
715
+ ```ts config-catalog
716
+ /** Configuration for the local filesystem backend. */
717
+ export interface Config {
718
+ /** Base directory for relative paths. Defaults to `process.cwd()`. */
719
+ cwd?: string
720
+ /**
721
+ * Exclusive UTF-8 byte limit on each overwrite-diff side, capped by the
722
+ * runtime's safe allocation/decode maximum. Defaults to 10 MiB.
723
+ */
724
+ diffBasisMaxBytes?: number
725
+ }
726
+ ```
727
+
728
+ Source: [`packages/fs/fs-local/src/index.ts:41`](../packages/fs/fs-local/src/index.ts)
729
+
730
+ <a id="deepseek-aidsh-fs-sandbox"></a>
731
+
732
+ ## `@deepseek-ai/dsh-fs-sandbox`
733
+
734
+ Requires: `sandboxPolicy`
735
+
736
+ ```ts config-catalog
737
+ /**
738
+ * Plugin config: the local backend's knobs verbatim (`cwd` resolution default
739
+ * and `diffBasisMaxBytes` overwrite-presentation bound). The sandbox default
740
+ * (mode + `workspace-write` fallback root) is NOT here — `ctx.sandboxPolicy`
741
+ * resolves each calling session for every enforcing capability.
742
+ */
743
+ export type Config = LocalConfig
744
+ ```
745
+
746
+ Depends on: [`LocalConfig`](#deepseek-aidsh-fs-local)
747
+
748
+ Source: [`packages/fs/fs-sandbox/src/index.ts:45`](../packages/fs/fs-sandbox/src/index.ts)
749
+
750
+ <a id="deepseek-aidsh-goal"></a>
751
+
752
+ ## `@deepseek-ai/dsh-goal`
753
+
754
+ Requires: `agents` · `sessionProjections`
755
+
756
+ ```ts config-catalog
757
+ /** Deployment defaults for goal creation. */
758
+ export interface Config {
759
+ /** Total rounds used when a create request omits its own cap. */
760
+ defaultMaxGoalRounds?: number
761
+ }
762
+ ```
763
+
764
+ Source: [`packages/goal/goal/src/index.ts:172`](../packages/goal/goal/src/index.ts)
765
+
766
+ <a id="deepseek-aidsh-headless"></a>
767
+
768
+ ## `@deepseek-ai/dsh-headless`
769
+
770
+ Requires: `agentDefaultModel` · `agents` · `sessions`
771
+
772
+ ```ts config-catalog
773
+ /** Plugin config: the task resolved from this app's injected provider service. */
774
+ export interface Config {
775
+ /** The prompt text for the single run. */
776
+ task: string
777
+ }
778
+ ```
779
+
780
+ Source: [`packages/bundle/headless/src/index.ts:34`](../packages/bundle/headless/src/index.ts)
781
+
782
+ <a id="deepseek-aidsh-hooks-claude-code"></a>
783
+
784
+ ## `@deepseek-ai/dsh-hooks-claude-code`
785
+
786
+ Requires: `shell` · `sessionProjections`
787
+
788
+ ```ts config-catalog
789
+ /** Plugin config: where the CC hook config lives + substitution roots. */
790
+ export interface Config {
791
+ /**
792
+ * Path to a `hooks.json` or a settings file whose `hooks` key holds the config.
793
+ * Process-level: read once at load, a relative path resolves against the process
794
+ * launch cwd, so one config applies to the whole process.
795
+ * TODO(per-session-hook-config): per-session discovery of a project-local
796
+ * `hooks.json` from each `session/new.cwd`.
797
+ */
798
+ configPath: string
799
+ /**
800
+ * Replaces `${CLAUDE_PLUGIN_ROOT}` in command strings (the plugin's root dir).
801
+ */
802
+ pluginRoot?: string
803
+ /**
804
+ * Replaces `${CLAUDE_PROJECT_DIR}` in command strings AND is exported as the
805
+ * `CLAUDE_PROJECT_DIR` env var for hook processes. When omitted, the env var
806
+ * defaults per-run to the agent's session workspace (`session.header.cwd`, the
807
+ * same dir the hook runs in) — Claude Code always exports this var, and common
808
+ * unmodified hooks reference `$CLAUDE_PROJECT_DIR` for project-relative paths.
809
+ */
810
+ projectDir?: string
811
+ /** Default per-hook timeout in ms when a hook sets none (CC default: 600000). */
812
+ defaultTimeoutMs?: number
813
+ /** Character cap for the `hook/result` event's persisted stderr summary. */
814
+ stderrSummaryMaxChars?: number
815
+ }
816
+ ```
817
+
818
+ Source: [`packages/hooks/hooks-claude-code/src/index.ts:45`](../packages/hooks/hooks-claude-code/src/index.ts)
819
+
820
+ <a id="deepseek-aidsh-hooks-codex"></a>
821
+
822
+ ## `@deepseek-ai/dsh-hooks-codex`
823
+
824
+ Requires: `shell` · `sessionProjections`
825
+
826
+ ```ts config-catalog
827
+ /** Plugin config: where the Codex hooks.json lives + the model name for payloads. */
828
+ export interface Config {
829
+ /**
830
+ * Path to a Codex `hooks.json`. Process-level: read once at load, a relative
831
+ * path resolves against the process launch cwd.
832
+ * TODO(per-session-hook-config): per-session project-local discovery from each
833
+ * `session/new.cwd`.
834
+ */
835
+ configPath: string
836
+ /** The model name stamped on every payload (Codex includes `model` on each event). */
837
+ model?: string
838
+ /** Default per-hook timeout in ms when a hook sets none (Codex default: 600000). */
839
+ defaultTimeoutMs?: number
840
+ /** Character cap for the `hook/result` event's persisted stderr summary. */
841
+ stderrSummaryMaxChars?: number
842
+ }
843
+ ```
844
+
845
+ Source: [`packages/hooks/hooks-codex/src/index.ts:44`](../packages/hooks/hooks-codex/src/index.ts)
846
+
847
+ <a id="deepseek-aidsh-host-directory-picker-browse"></a>
848
+
849
+ ## `@deepseek-ai/dsh-host-directory-picker-browse`
850
+
851
+ ```ts config-catalog
852
+ /** Validated plugin configuration. */
853
+ export interface Config {
854
+ /** Complete-result bound of one listing level; see {@link BrowseDirectoryPicker.Config}. */
855
+ maxEntries: number
856
+ }
857
+ ```
858
+
859
+ Source: [`packages/host/directory-picker-browse/src/index.ts:181`](../packages/host/directory-picker-browse/src/index.ts)
860
+
861
+ <a id="deepseek-aidsh-host-frontend-static"></a>
862
+
863
+ ## `@deepseek-ai/dsh-host-frontend-static`
864
+
865
+ Requires: `webServer` · `connection`
866
+
867
+ ```ts config-catalog
868
+ /** Plugin config: the dist anchor. */
869
+ export interface Config {
870
+ /** Absolute path of index.html inside the dist root. */
871
+ distIndex: string
872
+ }
873
+ ```
874
+
875
+ Source: [`packages/host/frontend-static/src/index.ts:30`](../packages/host/frontend-static/src/index.ts)
876
+
877
+ <a id="deepseek-aidsh-host-webserver"></a>
878
+
879
+ ## `@deepseek-ai/dsh-host-webserver`
880
+
881
+ ```ts config-catalog
882
+ /** Web server listen and response-compression config. */
883
+ export interface Config {
884
+ /** Listen host; the two supported values are loopback and all-interfaces. */
885
+ host: '127.0.0.1' | '0.0.0.0'
886
+ /** Listen port; zero requests an OS-assigned port. */
887
+ port: number
888
+ /** Response compression for socket-backed HTTP requests. @default 'none' */
889
+ compression?: 'none' | 'gzip'
890
+ /** Gzip DEFLATE level from 0 through 9. @default 1 */
891
+ compressionLevel?: number
892
+ /** Minimum known response length eligible for gzip; unknown-length streams are eligible. @default 1024 */
893
+ compressionThresholdBytes?: number
894
+ }
895
+ ```
896
+
897
+ Source: [`packages/host/webserver/src/index.ts:59`](../packages/host/webserver/src/index.ts)
898
+
899
+ <a id="deepseek-aidsh-invariants"></a>
900
+
901
+ ## `@deepseek-ai/dsh-invariants`
902
+
903
+ ```ts config-catalog
904
+ /** Runtime invariant selection configured on the service plugin. */
905
+ export interface Config {
906
+ /** Global switch; defaults to `true`. */
907
+ readonly enabled?: boolean
908
+ /** Case-sensitive JavaScript regex sources that admit package names; empty admits all. */
909
+ readonly package_allowlist?: string[]
910
+ /** Case-sensitive JavaScript regex sources that exclude package names after allowlist matching. */
911
+ readonly package_blocklist?: string[]
912
+ }
913
+ ```
914
+
915
+ Source: [`packages/runtime-diagnostics/invariants/src/index.ts:15`](../packages/runtime-diagnostics/invariants/src/index.ts)
916
+
917
+ <a id="deepseek-aidsh-jobs-local"></a>
918
+
919
+ ## `@deepseek-ai/dsh-jobs-local`
920
+
921
+ ```ts config-catalog
922
+ /** Configuration for the process-local job registry. */
923
+ export interface Config {
924
+ /**
925
+ * Maximum `running` plus `stopping` jobs per exact owner or in the shared unowned bucket;
926
+ * omission defaults to 10.
927
+ */
928
+ maxConcurrentJobsPerOwner?: number
929
+ }
930
+ ```
931
+
932
+ Source: [`packages/jobs/jobs-local/src/index.ts:31`](../packages/jobs/jobs-local/src/index.ts)
933
+
934
+ <a id="deepseek-aidsh-llm-deepseek"></a>
935
+
936
+ ## `@deepseek-ai/dsh-llm-deepseek`
937
+
938
+ Requires: `llm`
939
+
940
+ ```ts config-catalog
941
+ /**
942
+ * Plugin config, validated by the same-named schemastery schema and doubling
943
+ * as the `llm-deepseek` settings-section shape. Every field is optional in
944
+ * yml: a missing API key resolves through {@link Config.apiKeyEnv} at each
945
+ * request (a request without any key fails with `MISSING_CREDENTIAL`, not at
946
+ * plugin load), omitted thinking mode uses the provider default, and omitted
947
+ * reasoning effort resolves to `high`.
948
+ */
949
+ export interface Config {
950
+ /** Credential reference (environment-variable name) resolved per request; defaults to `DEEPSEEK_API_KEY`. */
951
+ apiKeyEnv?: string
952
+ /** Endpoint base; falls back to $DEEPSEEK_BASE_URL from a trusted environment layer, then the public API. */
953
+ baseURL?: string
954
+ /** Deployment thinking policy; `disabled` limits every conversation request to `off`. */
955
+ thinking?: 'enabled' | 'disabled'
956
+ /** Default thinking effort (default `high`); `off` disables thinking per request. */
957
+ reasoningEffort?: 'off' | 'low' | 'high' | 'max'
958
+ /** Default per-request output cap (default 256,000); a model's own cap and explicit request values win. */
959
+ maxTokens?: number
960
+ /** Positive context capacity used when the selected model has no exact value (default 1,000,000). */
961
+ defaultContextWindow?: number
962
+ /** Advisory models shown by discovery consumers; defaults to V4 Flash, V4 Pro, and V4 Flash Vision Exp. */
963
+ models?: DeepSeekCatalogModel[]
964
+ /** Maximum provider idle time while one stream read is outstanding (default five minutes). */
965
+ streamIdleTimeoutMs?: number
966
+ /** Maximum accumulated file-referenced image bytes per chat request (default 128 MiB). */
967
+ maxRequestFilesBytes?: number
968
+ /** Maximum accumulated base64 image payload after Files API fallback (default 20 MiB). */
969
+ maxInlineRequestImageBytes?: number
970
+ /** Maximum number of represented images per chat request (default 600). */
971
+ maxImagesPerRequest?: number
972
+ /** Raw-byte removal step after the request exceeds its file bound (default 64 MiB). */
973
+ imageOffloadByteQuantum?: number
974
+ /** Base64-byte removal step after inline fallback exceeds its bound (default 10 MiB). */
975
+ inlineImageOffloadByteQuantum?: number
976
+ /** Image-count removal step after the request exceeds its count bound (default 20). */
977
+ imageOffloadCountQuantum?: number
978
+ /** Maximum duration of one request-image Files API resolution (default one minute). */
979
+ filesApiTimeoutMs?: number
980
+ /** Explicit lifetime assigned to each uploaded image (default seven days). */
981
+ fileExpiresAfterSeconds?: number
982
+ /** Remaining lifetime below which an indexed file is replaced (default one hour). */
983
+ fileRefreshMarginSeconds?: number
984
+ /** Oldest harness-owned files deleted before one quota-recovery upload retry (default 100). */
985
+ fileQuotaCleanupBatch?: number
986
+ /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */
987
+ retryPolicy?: RetryPolicyConfig
988
+ }
989
+
990
+ /** One optional model entry advertised by the direct-fetch adapter. */
991
+ export interface DeepSeekCatalogModel {
992
+ /** Wire model id accepted by the configured endpoint. */
993
+ id: string
994
+ /** Selector label; defaults to {@link id}. */
995
+ name?: string
996
+ /** Optional selector detail for deployments with similar model variants. */
997
+ description?: string
998
+ /** Known combined request/response context capacity; omitted when deployment metadata is unavailable. */
999
+ contextWindow?: number
1000
+ /** Per-request output cap for this model; omission falls back to the profile's {@link DeepSeekConnectionOptions.maxTokens}. */
1001
+ maxTokens?: number
1002
+ /** Accepted request modalities; omission is text-only. */
1003
+ inputModalities?: ModelModality[]
1004
+ /** Total-pixel budget for one deterministic request preview, or the 512-by-512 `low` preset. */
1005
+ imagePixelBudget?: number | 'low'
1006
+ /** Encoded-byte target for one deterministic request preview; the smallest quality-ladder output is used when no quality fits. */
1007
+ imageMaxBytes?: number
1008
+ }
1009
+ ```
1010
+
1011
+ Depends on: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts)
1012
+
1013
+ Source: [`packages/llm/llm-deepseek/src/index.ts:125`](../packages/llm/llm-deepseek/src/index.ts)
1014
+
1015
+ <a id="deepseek-aidsh-llm-pi-ai"></a>
1016
+
1017
+ ## `@deepseek-ai/dsh-llm-pi-ai`
1018
+
1019
+ Requires: `llm`
1020
+
1021
+ ```ts config-catalog
1022
+ /** Plugin configuration: the provider routes this instance owns. */
1023
+ export interface Config {
1024
+ /**
1025
+ * pi-ai provider routes, keyed by provider. An empty (or omitted) dict is
1026
+ * the dormant settings-driven posture: the adapter mounts with no routes
1027
+ * and registers them the moment a settings section supplies profiles.
1028
+ */
1029
+ providers?: Record<string, PiAiProviderProfile>
1030
+ }
1031
+
1032
+ /** Configuration for one pi-ai provider route; the `providers` dict key IS the route. */
1033
+ export interface PiAiProviderProfile {
1034
+ /** Credential reference (environment-variable name) resolved per request through `ctx.credentials`. */
1035
+ apiKeyEnv?: string
1036
+ /** Name shown by configuration surfaces; defaults to the route key. */
1037
+ displayName?: string
1038
+ /**
1039
+ * Wire protocol every model on this route speaks. Omission keeps each
1040
+ * installed catalog model's own protocol, which is why a catalog route needs
1041
+ * no protocol at all; a route the catalog does not ship must name one.
1042
+ */
1043
+ api?: string
1044
+ /** Endpoint for this route's models; defaults to the installed catalog's endpoint. */
1045
+ baseURL?: string
1046
+ /**
1047
+ * This route's model catalog. Omission serves the installed catalog for the
1048
+ * route unchanged; an explicit list replaces it, each entry defaulting its
1049
+ * unset fields from the installed model of the same id.
1050
+ */
1051
+ models?: PiAiModelProfile[]
1052
+ /**
1053
+ * Installed-catalog customizations by model id: each entry reshapes that
1054
+ * one model with the same fields a {@link models} entry takes, while the
1055
+ * rest of the catalog keeps serving untouched. Only meaningful on a catalog
1056
+ * route with no `models` list — `models` already replaces the catalog, so
1057
+ * an override beside it, on a route the catalog does not ship, or naming a
1058
+ * model the catalog does not describe is refused rather than skipped.
1059
+ */
1060
+ modelOverrides?: Record<string, PiAiModelOverride>
1061
+ /**
1062
+ * pi-ai wire-compatibility switches defaulting every model on this route
1063
+ * whose protocol declares them; each model's own `compat` overrides per
1064
+ * field. What neither sets keeps the installed catalog entry's value, then
1065
+ * pi-ai's own detection. A switch no model on the route could read is
1066
+ * refused rather than left looking applied.
1067
+ */
1068
+ compat?: PiAiCompatProfile
1069
+ /**
1070
+ * Context capacity for a model this route lists that neither the entry nor
1071
+ * the installed catalog sizes (default 262,144). A guess by construction, so
1072
+ * a deployment whose gateway serves smaller models corrects it here.
1073
+ */
1074
+ defaultContextWindow?: number
1075
+ /**
1076
+ * Output capability for a model this route lists that neither the entry nor
1077
+ * the installed catalog sizes (default 32,768). This sizes the model; it
1078
+ * never becomes a per-request cap on its own.
1079
+ */
1080
+ defaultMaxTokens?: number
1081
+ /**
1082
+ * Request modalities for a model this route lists that neither its entry's
1083
+ * {@link PiAiModelProfile.input} nor the installed catalog declares (default
1084
+ * `[text]`). A fallback like the capacities above, not an override: a
1085
+ * catalog model keeps the modalities the catalog records for it, and this
1086
+ * value never narrows one. A gateway serving vision models the catalog does
1087
+ * not describe declares `[text, image]` once here instead of on every entry.
1088
+ * Unlike an entry's list, this one may not be empty — nothing sits below it
1089
+ * to answer instead.
1090
+ */
1091
+ defaultInput?: PiAiModality[]
1092
+ /** Provider request headers, validated against Fetch when the profile resolves; Harness attribution wins reserved names. */
1093
+ headers?: Record<string, string>
1094
+ /** Provider-neutral pi-ai reasoning level. */
1095
+ reasoning?: ModelThinkingLevel
1096
+ /** Token budgets used by reasoning providers that support them. */
1097
+ thinkingBudgets?: ThinkingBudgets
1098
+ /** Prompt-cache retention preference. */
1099
+ cacheRetention?: CacheRetention
1100
+ /** Streaming transport preference. */
1101
+ transport?: Transport
1102
+ /** HTTP/provider SDK timeout in milliseconds. */
1103
+ timeoutMs?: number
1104
+ /** WebSocket connection timeout in milliseconds. */
1105
+ websocketConnectTimeoutMs?: number
1106
+ /** Maximum provider idle time while one stream read is outstanding. */
1107
+ streamIdleTimeoutMs?: number
1108
+ /**
1109
+ * Maximum base64-encoded image payload per request. When a request's
1110
+ * accumulated images exceed it, the oldest images are replaced by text
1111
+ * placeholders until the request fits, so a long session keeps completing
1112
+ * requests instead of being rejected by a request-size cap.
1113
+ */
1114
+ maxRequestImageBytes?: number
1115
+ /** Total-pixel budget for each deterministic inline request version. */
1116
+ requestImagePixelBudget?: number
1117
+ /**
1118
+ * Raw encoded-byte target for each deterministic inline request version;
1119
+ * the smallest quality-ladder output is used when no quality fits.
1120
+ */
1121
+ requestImageMaxBytes?: number
1122
+ /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */
1123
+ retryPolicy?: RetryPolicyConfig
1124
+ }
1125
+
1126
+ /** One configured model entry: an id plus the catalog fields it overrides. */
1127
+ export interface PiAiModelProfile {
1128
+ /** Model id sent to the provider and accepted by {@link GenerateOptions.model}. */
1129
+ id: string
1130
+ /** Display name for selectors; defaults to the catalog name, then the id. */
1131
+ name?: string
1132
+ /** Maximum combined request and response context in tokens. */
1133
+ contextWindow?: number
1134
+ /**
1135
+ * Maximum output tokens. Configuring one also makes it this model's
1136
+ * per-request default; a value inherited from the installed catalog, or the
1137
+ * route's fallback, is the model's capability and never becomes a request
1138
+ * default on its own.
1139
+ */
1140
+ maxTokens?: number
1141
+ /**
1142
+ * Request modalities this model accepts. Absent — or empty, which describes
1143
+ * a model that accepts nothing and so states no answer either — keeps the
1144
+ * installed catalog entry's modalities, then the route's `defaultInput`.
1145
+ * Declaring images is what makes a hand-declared vision model usable, and
1146
+ * declaring text alone corrects a catalog model whose gateway does not serve
1147
+ * what the catalog records. This is a claim about the endpoint, not a check
1148
+ * of it: nothing interrogates a gateway for what it accepts, so a model
1149
+ * claiming images its endpoint refuses is refused by the provider instead,
1150
+ * mid-turn.
1151
+ */
1152
+ input?: PiAiModality[]
1153
+ /**
1154
+ * Selectable reasoning efforts. Absent inherits the installed catalog
1155
+ * entry's capability (a hand-declared model has none and does not reason);
1156
+ * `false` declares a non-reasoning model, which is how a profile strips
1157
+ * reasoning from a catalog model its gateway cannot serve; a non-empty dict
1158
+ * declares the offered levels and their wire spellings.
1159
+ */
1160
+ reasoningEfforts?: false | PiAiReasoningEfforts
1161
+ /** pi-ai wire-compatibility switches for this model, winning over the route's per field; one its protocol does not declare is refused. */
1162
+ compat?: PiAiCompatProfile
1163
+ }
1164
+
1165
+ /**
1166
+ * Customization of one installed catalog model, keyed by its id in the
1167
+ * route's `modelOverrides` dict — the same fields a `models` entry may set,
1168
+ * with the id living in the key. Unlike a `models` list, overrides leave the
1169
+ * rest of the catalog serving untouched, which is what makes "correct one
1170
+ * model, keep the other thirty-seven" a three-line edit.
1171
+ */
1172
+ export type PiAiModelOverride = Omit<PiAiModelProfile, 'id'>
1173
+
1174
+ /**
1175
+ * pi-ai wire-compatibility switches, set on the route (its models' default) or
1176
+ * per model (winning over the route, field by field).
1177
+ *
1178
+ * pi-ai decides each of these from the provider id and baseURL when no layer
1179
+ * sets it, and a private gateway's URL says nothing: for an endpoint it does
1180
+ * not recognize the detection answers as though it were OpenAI itself, which
1181
+ * is wrong for most OpenAI-compatible gateways. So every field here is one a
1182
+ * deployment must be able to state because nothing can infer it, while the
1183
+ * fields pi-ai's catalog sets for a named vendor stay withheld.
1184
+ *
1185
+ * A field belongs to the protocols whose upstream compat type declares it: a
1186
+ * model-level switch its protocol does not take fails resolution, and a
1187
+ * route-level one skips past models it cannot fit. "The three Responses
1188
+ * protocols" below means `openai-responses`, `azure-openai-responses`, and
1189
+ * `openai-codex-responses`, which pi-ai gives one shared compat type, so a
1190
+ * switch settable on one is settable on all three.
1191
+ */
1192
+ export interface PiAiCompatProfile {
1193
+ /** Whether the endpoint accepts `store`; `openai-completions`. */
1194
+ supportsStore?: boolean
1195
+ /**
1196
+ * Whether the endpoint accepts the `developer` role for the system prompt,
1197
+ * which pi-ai sends only to a reasoning model; `false` keeps `system`.
1198
+ * `openai-completions` and the three Responses protocols.
1199
+ */
1200
+ supportsDeveloperRole?: boolean
1201
+ /** Whether the endpoint accepts `reasoning_effort`; `openai-completions`. */
1202
+ supportsReasoningEffort?: boolean
1203
+ /** Whether the endpoint accepts `stream_options: {include_usage: true}`; `openai-completions`. */
1204
+ supportsUsageInStreaming?: boolean
1205
+ /**
1206
+ * Whether streams include `finish_reason`; `false` lets pi-ai infer the
1207
+ * terminal reason when the stream ends; `openai-completions`.
1208
+ */
1209
+ supportsFinishReason?: boolean
1210
+ /** Which output-cap field the endpoint reads; `openai-completions`. */
1211
+ maxTokensField?: NonNullable<OpenAICompletionsCompat['maxTokensField']>
1212
+ /** Whether tool results must carry `name`; `openai-completions`. */
1213
+ requiresToolResultName?: boolean
1214
+ /** Whether a user message after tool results needs an assistant message between; `openai-completions`. */
1215
+ requiresAssistantAfterToolResult?: boolean
1216
+ /** Whether thinking blocks must travel as text in `<thinking>` delimiters; `openai-completions`. */
1217
+ requiresThinkingAsText?: boolean
1218
+ /** Whether replayed assistant messages need an empty `reasoning_content` while reasoning is on; `openai-completions`. */
1219
+ requiresReasoningContentOnAssistantMessages?: boolean
1220
+ /** Reasoning parameter format the endpoint expects; `openai-completions`. */
1221
+ thinkingFormat?: PiAiThinkingFormat
1222
+ /**
1223
+ * Kwargs sent as `chat_template_kwargs`, which pi-ai reads only under the
1224
+ * two `chat-template` thinking formats; `openai-completions`. Nothing checks
1225
+ * that pairing: the format in force may come from the installed catalog
1226
+ * entry or from pi-ai's own baseURL detection, neither of which resolution
1227
+ * can read, so kwargs set beside another format are sent nowhere.
1228
+ */
1229
+ chatTemplateKwargs?: NonNullable<OpenAICompletionsCompat['chatTemplateKwargs']>
1230
+ /** Arguments sent as `chat_template_args` under the `baseten` thinking format; `openai-completions`. */
1231
+ chatTemplateArgs?: NonNullable<OpenAICompletionsCompat['chatTemplateArgs']>
1232
+ /** Whether the endpoint accepts `thinking_token_budget` to cap vLLM reasoning; `openai-completions`. */
1233
+ supportsThinkingTokenBudget?: boolean
1234
+ /**
1235
+ * Whether the endpoint accepts `strict` in tool definitions;
1236
+ * `openai-completions`, the three Responses protocols, `bedrock-converse-stream`.
1237
+ */
1238
+ supportsStrictMode?: boolean
1239
+ /** Prompt-cache marker convention; `openai-completions`. */
1240
+ cacheControlFormat?: NonNullable<OpenAICompletionsCompat['cacheControlFormat']>
1241
+ /**
1242
+ * Whether the endpoint accepts long prompt-cache retention;
1243
+ * `openai-completions`, the three Responses protocols, `anthropic-messages`.
1244
+ */
1245
+ supportsLongCacheRetention?: boolean
1246
+ /** Whether the endpoint accepts per-tool `eager_input_streaming`; `anthropic-messages`. */
1247
+ supportsEagerToolInputStreaming?: boolean
1248
+ /** Whether the endpoint accepts `cache_control` on tool definitions; `anthropic-messages`. */
1249
+ supportsCacheControlOnTools?: boolean
1250
+ /** Whether the endpoint accepts the `temperature` request field; `anthropic-messages`. */
1251
+ supportsTemperature?: boolean
1252
+ /** Whether to force adaptive thinking regardless of model id; `anthropic-messages`. */
1253
+ forceAdaptiveThinking?: boolean
1254
+ /** Whether to replay an empty thinking signature instead of converting thinking to text; `anthropic-messages`. */
1255
+ allowEmptySignature?: boolean
1256
+ /** Whether the endpoint accepts Anthropic strict tool schemas; `anthropic-messages`. */
1257
+ supportsStrictTools?: boolean
1258
+ }
1259
+
1260
+ /** One request modality a pi-ai model may accept. */
1261
+ export type PiAiModality = Model<Api>['input'][number]
1262
+
1263
+ /**
1264
+ * Selectable reasoning efforts for one model: each key is a level the model
1265
+ * offers (and selectors show), and its value is the wire spelling dispatch
1266
+ * sends for it. `off` alone may leave its value empty — "supported, send
1267
+ * nothing" — because for most providers not thinking is the parameter's
1268
+ * absence; every other declared level must name a wire value. A level absent
1269
+ * from the dict is not offered.
1270
+ */
1271
+ export type PiAiReasoningEfforts = Partial<Record<ModelThinkingLevel, string | null>>
1272
+
1273
+ /** One reasoning-dispatch wire format a profile may name. */
1274
+ export type PiAiThinkingFormat = NonNullable<OpenAICompletionsCompat['thinkingFormat']>
1275
+ ```
1276
+
1277
+ Depends on: `Api` (`@earendil-works/pi-ai`) · `CacheRetention` (`@earendil-works/pi-ai`) · `Model` (`@earendil-works/pi-ai`) · `ModelThinkingLevel` (`@earendil-works/pi-ai`) · `OpenAICompletionsCompat` (`@earendil-works/pi-ai`) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · `ThinkingBudgets` (`@earendil-works/pi-ai`) · `Transport` (`@earendil-works/pi-ai`)
1278
+
1279
+ Source: [`packages/llm/llm-pi-ai/src/config.ts:216`](../packages/llm/llm-pi-ai/src/config.ts)
1280
+
1281
+ <a id="deepseek-aidsh-llm-replay"></a>
1282
+
1283
+ ## `@deepseek-ai/dsh-llm-replay`
1284
+
1285
+ Requires: `llm`
1286
+
1287
+ ```ts config-catalog
1288
+ /** Plugin config: the {@link ReplayConfig} inputs, each defaulting to its `DSH_SNAPSHOT_*` env var in `apply`. */
1289
+ export interface Config {
1290
+ /** Override the fixture path; defaults to `$DSH_SNAPSHOT_FILE`. */
1291
+ file?: string
1292
+ /** Override the sidecar path; defaults to `$DSH_SNAPSHOT_OVERRIDE`. */
1293
+ overrideFile?: string
1294
+ /**
1295
+ * Override the child-log paths; defaults to `$DSH_SNAPSHOT_CHILD_FILES` (a
1296
+ * path-separator-delimited list). Each is a recorded subagent session log for
1297
+ * a nested-agent scenario; absent/empty for a single-session scenario.
1298
+ */
1299
+ childFiles?: string[]
1300
+ /** Optional replay-only provider catalog; absent or empty selects catch-all waterfall replay. */
1301
+ providers?: ReplayProviderConfig[]
1302
+ /** Optional per-chunk pacing delay in ms (see {@link ReplayConfig.paceMs}); absent keeps burst yield. */
1303
+ paceMs?: number
1304
+ }
1305
+
1306
+ /** One provider route exposed by the replay adapter. */
1307
+ export interface ReplayProviderConfig {
1308
+ /** Provider route used for replay requests. */
1309
+ id: string
1310
+ /** Selector label; defaults to {@link id}. */
1311
+ name?: string
1312
+ /** Advisory models exposed to replay scenarios that exercise discovery. */
1313
+ models?: ReplayModelConfig[]
1314
+ /** Optional provider-owned retry policy used by assembled recovery snapshots. */
1315
+ retryPolicy?: RetryPolicyConfig
1316
+ }
1317
+
1318
+ /** One model exposed by a replay-only provider catalog. */
1319
+ export interface ReplayModelConfig {
1320
+ /** Model id used for replay requests. */
1321
+ id: string
1322
+ /** Selector label; defaults to {@link id}. */
1323
+ name?: string
1324
+ /** Optional selector description. */
1325
+ description?: string
1326
+ /** Optional positive integer context capacity published by the replay adapter. */
1327
+ contextWindow?: number
1328
+ /** Optional declared input modalities, so a scenario can exercise capability gates (e.g. image-capable `read_image`). */
1329
+ inputModalities?: readonly ModelModality[]
1330
+ /**
1331
+ * Optional per-request output cap the replay route materializes when callers
1332
+ * omit one, so replay reconstructs the request header a live catalog produced.
1333
+ */
1334
+ defaultMaxTokens?: number
1335
+ /**
1336
+ * Optional flat visual-token price the replay route declares for every
1337
+ * retained request image, so keyless scenarios exercise route-priced
1338
+ * request pressure; each occurrence is priced at this value plus its
1339
+ * request-preview handle text. Requires {@link inputModalities} to include
1340
+ * `image` — a text-only route never sends visual tokens. Absent declares
1341
+ * no image pricing.
1342
+ */
1343
+ imageRequestTokens?: number
1344
+ /** Optional reasoning-effort ids the replay route accepts, in display order. */
1345
+ reasoningEfforts?: string[]
1346
+ /**
1347
+ * Optional effort materialized when callers omit one; must appear in
1348
+ * {@link reasoningEfforts} or call resolution rejects the route.
1349
+ */
1350
+ defaultReasoningEffort?: string
1351
+ }
1352
+ ```
1353
+
1354
+ Depends on: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts)
1355
+
1356
+ Source: [`packages/test-support/llm-replay/src/index.ts:1294`](../packages/test-support/llm-replay/src/index.ts)
1357
+
1358
+ <a id="deepseek-aidsh-llm-retry"></a>
1359
+
1360
+ ## `@deepseek-ai/dsh-llm-retry`
1361
+
1362
+ Requires: `agents` · `sessionProjections`
1363
+
1364
+ ```ts config-catalog
1365
+ /** This policy executor has no config; providers own `retryPolicy`. */
1366
+ export type Config = Readonly<Record<string, never>>
1367
+ ```
1368
+
1369
+ Source: [`packages/llm/llm-retry/src/index.ts:25`](../packages/llm/llm-retry/src/index.ts)
1370
+
1371
+ <a id="deepseek-aidsh-lsp-stdio"></a>
1372
+
1373
+ ## `@deepseek-ai/dsh-lsp-stdio`
1374
+
1375
+ Requires: `fs` · `lsp` · `subprocess`
1376
+
1377
+ ```ts config-catalog
1378
+ /** Plugin configuration: provider id → local language-server configuration. */
1379
+ export interface Config {
1380
+ /** Non-empty table of stable provider ids to independent local server configurations. */
1381
+ servers: Record<string, LspLocalServerConfig>
1382
+ }
1383
+
1384
+ /** One configured local language server and its host bounds. */
1385
+ export interface LspLocalServerConfig {
1386
+ /** Executable to spawn (absolute, or resolved on PATH at load). */
1387
+ command: string
1388
+ /** Lowercase leading-dot extension → LSP language id (e.g. `{ '.ts': 'typescript' }`). */
1389
+ extensionToLanguage: Record<string, string>
1390
+ /** Arguments passed to the executable (no shell). Default `[]`. */
1391
+ args?: string[]
1392
+ /** Extra env vars merged on top of the scrubbed ambient env. Default `{}`. */
1393
+ env?: Record<string, string>
1394
+ /** Static `initialize` options forwarded to the server. Default `null`. */
1395
+ initializationOptions?: unknown
1396
+ /** Static answer to every `workspace/configuration` item. Default `null`. */
1397
+ configuration?: unknown
1398
+ /** Largest single framed message accepted from the server (bytes). Default 16000000. */
1399
+ maxMessageBytes?: number
1400
+ /** Largest stderr tail retained for diagnostics (bytes). Default 1000000. */
1401
+ maxStderrBytes?: number
1402
+ /** Largest source file this host will open (bytes). Default 4000000. */
1403
+ maxDocumentBytes?: number
1404
+ /** Graceful `shutdown`/`exit` budget before escalation (ms). Default 5000. */
1405
+ shutdownTimeoutMs?: number
1406
+ /** Request-cancel and SIGTERM→SIGKILL grace (ms). Default 2000. */
1407
+ killGraceMs?: number
1408
+ }
1409
+ ```
1410
+
1411
+ Source: [`packages/lsp/lsp-stdio/src/index.ts:82`](../packages/lsp/lsp-stdio/src/index.ts)
1412
+
1413
+ <a id="deepseek-aidsh-mcp-client"></a>
1414
+
1415
+ ## `@deepseek-ai/dsh-mcp-client`
1416
+
1417
+ Requires: `tools`
1418
+
1419
+ ```ts config-catalog
1420
+ /** Configuration for one stdio or Streamable HTTP MCP server. */
1421
+ export type Config = StdioConfig | StreamableHttpConfig
1422
+
1423
+ /** Config for connecting to an MCP server via a spawned child process over stdio. */
1424
+ export interface StdioConfig {
1425
+ /** Selects child-process stdio transport. */
1426
+ transport: 'stdio'
1427
+ /**
1428
+ * Stable local namespace for this server's model-facing tool names
1429
+ * (`mcp__<serverName>__<rawName>`). Must match `[A-Za-z0-9_-]{1,32}` and be
1430
+ * unique across live mcp-client instances.
1431
+ */
1432
+ serverName: string
1433
+ /** Executable used to start the server. */
1434
+ command: string
1435
+ /** Arguments passed directly, without shell interpolation. */
1436
+ args: string[]
1437
+ /** Extra env vars merged on top of scrubbed ambient env. */
1438
+ env: Record<string, string>
1439
+ /** Working directory for the child process. */
1440
+ cwd: string
1441
+ /** Per-tool-call timeout in milliseconds. */
1442
+ toolCallTimeoutMs: number
1443
+ /** Fail plugin activation when the initial connection or tool synchronization fails. */
1444
+ failOnStartupError: boolean
1445
+ /** Automatic reconnect policy after a lost connection; omission uses the defaults. */
1446
+ reconnect?: ReconnectConfig
1447
+ }
1448
+
1449
+ /** Config for connecting to an MCP server over Streamable HTTP (SSE). */
1450
+ export interface StreamableHttpConfig {
1451
+ /** Selects Streamable HTTP transport. */
1452
+ transport: 'streamable-http'
1453
+ /**
1454
+ * Stable local namespace for this server's model-facing tool names
1455
+ * (`mcp__<serverName>__<rawName>`). Must match `[A-Za-z0-9_-]{1,32}` and be
1456
+ * unique across live mcp-client instances.
1457
+ */
1458
+ serverName: string
1459
+ /** MCP endpoint URL. */
1460
+ url: string
1461
+ /** Additional headers attached to MCP requests. */
1462
+ headers: Record<string, string>
1463
+ /** Per-tool-call timeout in milliseconds. */
1464
+ toolCallTimeoutMs: number
1465
+ /** Fail plugin activation when the initial connection or tool synchronization fails. */
1466
+ failOnStartupError: boolean
1467
+ /** Automatic reconnect policy after a lost connection; omission uses the defaults. */
1468
+ reconnect?: ReconnectConfig
1469
+ }
1470
+
1471
+ /** Automatic reconnect policy for one MCP server connection. */
1472
+ export interface ReconnectConfig {
1473
+ /** Reconnect automatically after a lost connection (default true). */
1474
+ enabled?: boolean
1475
+ /** First reconnect delay in milliseconds; doubles per consecutive failed attempt (default 500). */
1476
+ initialDelayMs?: number
1477
+ /** Backoff ceiling in milliseconds; also the uptime after which the attempt budget resets (default 30000). */
1478
+ maxDelayMs?: number
1479
+ /** Consecutive failed attempts per outage before giving up for good (default 10). */
1480
+ maxAttempts?: number
1481
+ }
1482
+ ```
1483
+
1484
+ Source: [`packages/mcp/mcp-client/src/index.ts:98`](../packages/mcp/mcp-client/src/index.ts)
1485
+
1486
+ <a id="deepseek-aidsh-message-feedback"></a>
1487
+
1488
+ ## `@deepseek-ai/dsh-message-feedback`
1489
+
1490
+ Requires: `storageDomain` · `sessionPersistence` · `sessions`
1491
+
1492
+ ```ts config-catalog
1493
+ /** Required deployment policy for optional notes. */
1494
+ export interface Config {
1495
+ /** Maximum UTF-8 byte length accepted for one note. */
1496
+ readonly maxNoteBytes: number
1497
+ }
1498
+ ```
1499
+
1500
+ Source: [`packages/feedback/message-feedback/src/index.ts:50`](../packages/feedback/message-feedback/src/index.ts)
1501
+
1502
+ <a id="deepseek-aidsh-permission-presets"></a>
1503
+
1504
+ ## `@deepseek-ai/dsh-permission-presets`
1505
+
1506
+ Requires: `shell` · `approval` · `sessions` · `sessionProjections`
1507
+
1508
+ ```ts config-catalog
1509
+ /** The {@link PermissionPresetService} config: preset table and composition default. */
1510
+ export interface Config {
1511
+ /**
1512
+ * The preset table: name → knob bundle. Defaults to `workspace-write`
1513
+ * (workspace-write + ask) and `danger-full-access` (danger-full-access +
1514
+ * never). The name `custom` is reserved for the derived not-a-preset state.
1515
+ */
1516
+ presets?: Record<string, PresetSpec>
1517
+ /**
1518
+ * Default for new sessions. When omitted, the preset matching the composed
1519
+ * sandbox and approval defaults is used.
1520
+ */
1521
+ defaultPreset?: string
1522
+ }
1523
+
1524
+ /** One preset's sandbox/approval bundle and optional client presentation. */
1525
+ export interface PresetSpec {
1526
+ /** The `sandbox/mode` value the preset writes through. */
1527
+ sandbox: SandboxMode
1528
+ /** The `approval/policy` value the preset writes through. */
1529
+ approval: ApprovalPolicy
1530
+ /** The display label a client shows for this preset; the raw table key when omitted. */
1531
+ name?: string
1532
+ /** One user-facing sentence on what the preset means; omitted when not configured. */
1533
+ description?: string
1534
+ }
1535
+ ```
1536
+
1537
+ Depends on: [`ApprovalPolicy`](subsystems/approval.md) · [`SandboxMode`](subsystems/sandbox.md)
1538
+
1539
+ Source: [`packages/interaction/permission-presets/src/index.ts:143`](../packages/interaction/permission-presets/src/index.ts)
1540
+
1541
+ <a id="deepseek-aidsh-persona"></a>
1542
+
1543
+ ## `@deepseek-ai/dsh-persona`
1544
+
1545
+ Requires: `systemPrompt`
1546
+
1547
+ ```ts config-catalog
1548
+ /** Plugin config: the persona text this composition contributes. */
1549
+ export interface Config {
1550
+ /**
1551
+ * Persona prose rendered as the `deployment:persona` section. A template:
1552
+ * complete `{{…}}` groups interpolate strictly against registered prompt
1553
+ * variables. Empty text drops the section at render, matching the registry.
1554
+ */
1555
+ text: string
1556
+ /** Make this persona the complete system prompt, suppressing every other section. */
1557
+ complete?: boolean
1558
+ /** Suppress dynamic runtime-context snapshots for this persona's agent scope. */
1559
+ includeRuntimeContext?: boolean
1560
+ }
1561
+ ```
1562
+
1563
+ Source: [`packages/preset/persona/src/index.ts:30`](../packages/preset/persona/src/index.ts)
1564
+
1565
+ <a id="deepseek-aidsh-plan-mode"></a>
1566
+
1567
+ ## `@deepseek-ai/dsh-plan-mode`
1568
+
1569
+ Requires: `tools` · `systemPrompt` · `sessionProjections`
1570
+
1571
+ ```ts config-catalog
1572
+ /** Deployment-owned plan guidance. */
1573
+ export interface PlanModeConfig {
1574
+ /** Guidance rendered as the `plan:policy` prompt section while plan mode is active. */
1575
+ section: string
1576
+ }
1577
+ ```
1578
+
1579
+ Source: [`packages/plan/plan-mode/src/index.ts:63`](../packages/plan/plan-mode/src/index.ts)
1580
+
1581
+ <a id="deepseek-aidsh-plugin-package-inventory-deepseek"></a>
1582
+
1583
+ ## `@deepseek-ai/dsh-plugin-package-inventory-deepseek`
1584
+
1585
+ Requires: `agents` · `deepseekLlmApiExtensions` · `loader`
1586
+
1587
+ ```ts config-catalog
1588
+ /** Plugin-package request contribution configuration. */
1589
+ export interface Config {
1590
+ /** Contribute `dsh_plugin_packages` to official DeepSeek requests. Defaults to `true`. */
1591
+ enabled?: boolean
1592
+ }
1593
+ ```
1594
+
1595
+ Source: [`packages/llm/plugin-package-inventory-deepseek/src/index.ts:31`](../packages/llm/plugin-package-inventory-deepseek/src/index.ts)
1596
+
1597
+ <a id="deepseek-aidsh-pwsh-local"></a>
1598
+
1599
+ ## `@deepseek-ai/dsh-pwsh-local`
1600
+
1601
+ Requires: `subprocess`
1602
+
1603
+ ```ts config-catalog
1604
+ /** Plugin config (all optional — `static Config` supplies the defaults). */
1605
+ export interface Config {
1606
+ /** Default working directory for commands (default: process.cwd()). */
1607
+ cwd?: string
1608
+ /** Default foreground timeout in milliseconds. */
1609
+ timeoutMs?: number
1610
+ /** Upper bound for per-call timeout overrides. */
1611
+ maxTimeoutMs?: number
1612
+ /** Per-stream in-memory output cap; overflow spills to a temp file. */
1613
+ maxOutputBytes?: number
1614
+ /** Per-stream spill-file cap; larger streams retain only their in-memory tail. */
1615
+ maxSpillBytes?: number
1616
+ /** Grace period for kill escalation and inherited pipes; at most `MAX_TIMER_DELAY_MS`. */
1617
+ graceMs?: number
1618
+ /**
1619
+ * Explicit pwsh executable. When omitted, well-known Windows install
1620
+ * locations and PATH entries are probed in order (PowerShell 7 install,
1621
+ * PATH entries such as the Microsoft Store install, then Windows
1622
+ * PowerShell 5.1), falling back to a bare `pwsh` resolved through PATH.
1623
+ */
1624
+ pwshPath?: string
1625
+ }
1626
+ ```
1627
+
1628
+ Source: [`packages/shell/pwsh-local/src/index.ts:58`](../packages/shell/pwsh-local/src/index.ts)
1629
+
1630
+ <a id="deepseek-aidsh-pwsh-sandbox"></a>
1631
+
1632
+ ## `@deepseek-ai/dsh-pwsh-sandbox`
1633
+
1634
+ Requires: `subprocess` · `sandbox` · `sandboxPolicy`
1635
+
1636
+ ```ts config-catalog
1637
+ /**
1638
+ * Plugin config: the local executor's knobs, verbatim. The sandbox policy —
1639
+ * the default mode and fallback `workspace-write` root — is NOT here: it lives
1640
+ * on `ctx.sandboxPolicy` (`@deepseek-ai/dsh-sandbox-policy`), which resolves
1641
+ * each calling session's mode and cwd for every enforcing capability. The
1642
+ * runner choice is likewise the `ctx.sandbox` provider's config, not this
1643
+ * executor's.
1644
+ */
1645
+ export type Config = LocalConfig
1646
+ ```
1647
+
1648
+ Depends on: [`LocalConfig`](#deepseek-aidsh-pwsh-local)
1649
+
1650
+ Source: [`packages/shell/pwsh-sandbox/src/index.ts:40`](../packages/shell/pwsh-sandbox/src/index.ts)
1651
+
1652
+ <a id="deepseek-aidsh-repeat-tool-reminder"></a>
1653
+
1654
+ ## `@deepseek-ai/dsh-repeat-tool-reminder`
1655
+
1656
+ ```ts config-catalog
1657
+ /**
1658
+ * Plugin config, validated by the same-named schemastery schema plus the
1659
+ * load-time checks in `apply` (misconfiguration fails loud: an empty
1660
+ * `thresholds` list, a non-integer, a value below 2, or a duplicate throws at
1661
+ * plugin load, never a silent fall-back). `include`/`exclude` entries are
1662
+ * `*`-wildcard predicates over tool names at call time, not references to
1663
+ * registry entries — a pattern matching no currently registered tool is valid
1664
+ * (`exclude: [mcp_*]` must stay legal in a deployment that loads no MCP tools).
1665
+ */
1666
+ export interface Config {
1667
+ /** Consecutive-repeat counts that trigger a reminder (default `[3, 5, 8]`). */
1668
+ thresholds?: number[]
1669
+ /** Tool-name patterns to track; empty means every tool is tracked. */
1670
+ include?: string[]
1671
+ /** Tool-name patterns transparent to the chain (neither count nor reset). */
1672
+ exclude?: string[]
1673
+ /**
1674
+ * Maximum characters of canonical arguments quoted in the DETAILED reminder
1675
+ * (default 500). Large payloads (a `write` body, a long command) would
1676
+ * otherwise ride into the next request unbounded — precisely in a loop
1677
+ * scenario; the cap bounds the reminder, never the detection (the chain key
1678
+ * always compares the FULL canonical string).
1679
+ */
1680
+ argumentsPreviewChars?: number
1681
+ }
1682
+ ```
1683
+
1684
+ Source: [`packages/guard/repeat-tool-reminder/src/index.ts:28`](../packages/guard/repeat-tool-reminder/src/index.ts)
1685
+
1686
+ <a id="deepseek-aidsh-sandbox-local"></a>
1687
+
1688
+ ## `@deepseek-ai/dsh-sandbox-local`
1689
+
1690
+ ```ts config-catalog
1691
+ /** Plugin config. All optional — `static Config` supplies the defaults. */
1692
+ export interface Config {
1693
+ /**
1694
+ * Override the runner argv; bwrap-compatible profile arguments are appended. A
1695
+ * non-empty override asserts full enforcement and skips built-in selection and
1696
+ * probing. A runner that starts but refuses its profile must be identifiable by
1697
+ * {@link runnerFailureSignatures}. Consumers classify a spawn rejection only after
1698
+ * confirming the workdir is usable. `ENOENT` or `EACCES` identifies the runner when
1699
+ * `error.path` equals argv[0] and `error.syscall` is `spawn` or `spawn <runner>`, or
1700
+ * when `error.path` is absent and `error.syscall` is exactly `spawn <runner>`.
1701
+ */
1702
+ runnerCommand?: string[]
1703
+ /**
1704
+ * Case-insensitive stderr substrings emitted when a configured
1705
+ * {@link runnerCommand} refuses its profile before executing the wrapped
1706
+ * command. Required and non-empty with `runnerCommand`; rejected without
1707
+ * it. Each entry is a non-empty, single-line, case-insensitive substring
1708
+ * covering the executable runner's own failure dialect.
1709
+ */
1710
+ runnerFailureSignatures?: string[]
1711
+ /** Positive timeout for each functional probe; zero would mean unbounded to Node. */
1712
+ probeTimeoutMs?: number
1713
+ }
1714
+ ```
1715
+
1716
+ Source: [`packages/sandbox/sandbox-local/src/index.ts:44`](../packages/sandbox/sandbox-local/src/index.ts)
1717
+
1718
+ <a id="deepseek-aidsh-sandbox-policy"></a>
1719
+
1720
+ ## `@deepseek-ai/dsh-sandbox-policy`
1721
+
1722
+ Requires: `sessionProjections`
1723
+
1724
+ ```ts config-catalog
1725
+ /**
1726
+ * Plugin config: the deployment's sandbox default. All optional — `Config`
1727
+ * supplies the defaults (`mode: 'read-only'` is the fail-safe default; a
1728
+ * deployment that wants a workspace-writable agent opts in explicitly). The
1729
+ * runner choice is NOT here (it is the `ctx.sandbox` provider's config), nor
1730
+ * is any per-family knob: this is the one shared policy home.
1731
+ */
1732
+ export interface Config {
1733
+ /** File-sandbox mode a session starts from (default: `read-only`). */
1734
+ mode?: SandboxMode
1735
+ /**
1736
+ * Fallback root for agentless calls and sessions without a cwd (default:
1737
+ * `process.cwd()`). Normal agent calls use their session cwd instead.
1738
+ */
1739
+ workspaceRoot?: string
1740
+ }
1741
+ ```
1742
+
1743
+ Depends on: [`SandboxMode`](subsystems/sandbox.md)
1744
+
1745
+ Source: [`packages/sandbox/sandbox-policy/src/index.ts:70`](../packages/sandbox/sandbox-policy/src/index.ts)
1746
+
1747
+ <a id="deepseek-aidsh-sdk-app"></a>
1748
+
1749
+ ## `@deepseek-ai/dsh-sdk-app`
1750
+
1751
+ Requires: `cmdlineArgs`
1752
+
1753
+ ```ts config-catalog
1754
+ /** SDK stdio startup configuration. */
1755
+ export interface Config {
1756
+ /** Profile name rendered in help and diagnostics (default `sdk`). */
1757
+ profile?: string
1758
+ }
1759
+ ```
1760
+
1761
+ Source: [`packages/bundle/sdk-app/src/index.ts:23`](../packages/bundle/sdk-app/src/index.ts)
1762
+
1763
+ <a id="deepseek-aidsh-sdk-jsonrpc-server"></a>
1764
+
1765
+ ## `@deepseek-ai/dsh-sdk-jsonrpc-server`
1766
+
1767
+ Requires: `agents`
1768
+
1769
+ ```ts config-catalog
1770
+ /** JSON-RPC deployment config plus runtime-only test hooks. */
1771
+ export interface JsonRpcConfig {
1772
+ /** Report max-token turn/subagent termination as a successful SDK result. */
1773
+ maxTokensAsSuccess?: boolean
1774
+ /** Transport input override; production uses `process.stdin`. */
1775
+ input?: Readable
1776
+ /** Transport output override; production uses `process.stdout`. */
1777
+ output?: Writable
1778
+ /** Process-exit override; production uses `process.exit`. */
1779
+ exit?: (code: number) => void
1780
+ }
1781
+ ```
1782
+
1783
+ Depends on: `Readable` (`node:stream`) · `Writable` (`node:stream`)
1784
+
1785
+ Source: [`packages/sdk/server/src/index.ts:25`](../packages/sdk/server/src/index.ts)
1786
+
1787
+ <a id="deepseek-aidsh-session-log-deepseek"></a>
1788
+
1789
+ ## `@deepseek-ai/dsh-session-log-deepseek`
1790
+
1791
+ Requires: `deepseekLlmApiExtensions` · `sessions`
1792
+
1793
+ ```ts config-catalog
1794
+ /** Session-log request contribution configuration. */
1795
+ export interface Config {
1796
+ /** Contribute `dsh_session_log` to official DeepSeek requests. Defaults to `false`. */
1797
+ enabled?: boolean
1798
+ }
1799
+ ```
1800
+
1801
+ Source: [`packages/session/session-log-deepseek/src/index.ts:36`](../packages/session/session-log-deepseek/src/index.ts)
1802
+
1803
+ <a id="deepseek-aidsh-session-log-export"></a>
1804
+
1805
+ ## `@deepseek-ai/dsh-session-log-export`
1806
+
1807
+ Requires: `commands` · `connection`
1808
+
1809
+ ```ts config-catalog
1810
+ /** Session-log archive policy. */
1811
+ export interface Config {
1812
+ /** DEFLATE level for each ZIP entry. @default 6 */
1813
+ readonly compressionLevel?: SessionLogCompressionLevel
1814
+ }
1815
+
1816
+ /** Valid fflate DEFLATE levels accepted by session-log export. */
1817
+ export type SessionLogCompressionLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
1818
+ ```
1819
+
1820
+ Source: [`packages/session-query/session-log-export/src/index.ts:45`](../packages/session-query/session-log-export/src/index.ts)
1821
+
1822
+ <a id="deepseek-aidsh-session-persistence-jsonl"></a>
1823
+
1824
+ ## `@deepseek-ai/dsh-session-persistence-jsonl`
1825
+
1826
+ ```ts config-catalog
1827
+ /** Plugin config for the JSONL backend's root and physical encoding. */
1828
+ export interface Config {
1829
+ /**
1830
+ * Root directory for all session files. Required (no default): a default of
1831
+ * `process.cwd()` would scatter session files as the process's cwd changes
1832
+ * (bash calls, subprocesses). Sessions group under human-readable project
1833
+ * directories, then per-session directories. An existing root must be a
1834
+ * readable directory; an absent root is created on first materialization.
1835
+ */
1836
+ root: string
1837
+ /** Physical encoding; defaults to checksummed Zstandard frames. */
1838
+ compression?: JsonlCompression
1839
+ }
1840
+
1841
+ /** Physical encoding selected for JSONL session artifacts. */
1842
+ export type JsonlCompression = 'zstd' | 'none'
1843
+ ```
1844
+
1845
+ Source: [`packages/session/session-persistence-jsonl/src/index.ts:86`](../packages/session/session-persistence-jsonl/src/index.ts)
1846
+
1847
+ <a id="deepseek-aidsh-session-projection-cache"></a>
1848
+
1849
+ ## `@deepseek-ai/dsh-session-projection-cache`
1850
+
1851
+ Requires: `storageDomain` · `sessionProjections` · `sessions`
1852
+
1853
+ ```ts config-catalog
1854
+ /**
1855
+ * Plugin config. Both throttle triggers are deployment choices with no
1856
+ * universally correct value, so the composition states them explicitly
1857
+ * (cordis.yml); the three mandatory write points (session creation,
1858
+ * `turn/end`, and session disposal) are policy, not tunables, and always
1859
+ * fire.
1860
+ */
1861
+ export interface Config {
1862
+ /** Committed events per session that force a durable checkpoint write between mandatory points. */
1863
+ writeEveryEvents: number
1864
+ /** Longest time (milliseconds) a dirty checkpoint may stay unwritten between mandatory points. */
1865
+ writeIntervalMs: number
1866
+ }
1867
+ ```
1868
+
1869
+ Source: [`packages/session/session-projection-cache/src/index.ts:63`](../packages/session/session-projection-cache/src/index.ts)
1870
+
1871
+ <a id="deepseek-aidsh-session-query-sqlite"></a>
1872
+
1873
+ ## `@deepseek-ai/dsh-session-query-sqlite`
1874
+
1875
+ Requires: `sessions`
1876
+
1877
+ ```ts config-catalog
1878
+ /** Combined session-query configuration backed by SQLite full-text search. */
1879
+ export interface Config extends SessionQueryConfig {
1880
+ /**
1881
+ * Dedicated derived-index path; `:memory:` is supported for ephemeral
1882
+ * indexes. Missing directories and database files are created owner-only on
1883
+ * POSIX filesystems; existing modes are preserved.
1884
+ */
1885
+ path: string
1886
+ /**
1887
+ * Open the SQLite module and handle at service activation or the first
1888
+ * search, or `never` to disable full-text search: the inherited exact
1889
+ * reads, filters, and traces stay available, while `searchSessions` and
1890
+ * `searchEvents` fail with `SESSION_QUERY_SEARCH_DISABLED` and SQLite is
1891
+ * never imported or opened. Defaults to `startup`.
1892
+ */
1893
+ openAt?: OpenAt
1894
+ /** SQLite journal mode. Defaults to `wal`. */
1895
+ journalMode?: JournalMode
1896
+ /** Page size when a request omits `limit`. At most `Number.MAX_SAFE_INTEGER - 1`; defaults to 20. */
1897
+ defaultLimit?: number
1898
+ /** Largest accepted page size. At most `Number.MAX_SAFE_INTEGER - 1`; defaults to 100. */
1899
+ maxLimit?: number
1900
+ /** Maximum snippet length in Unicode code points. Defaults to 240. */
1901
+ snippetChars?: number
1902
+ /** Maximum concurrent persisted-log reads in one inherited batch read. Defaults to 4. */
1903
+ persistedReadConcurrency?: number
1904
+ /** Maximum cold prepared-Session observations the inherited reader retains for reuse. Defaults to 5. */
1905
+ preparedSessionCacheSize?: number
1906
+ }
1907
+
1908
+ /** SQLite module/handle opening phase; `never` disables full-text search entirely. */
1909
+ export type OpenAt = 'startup' | 'first-search' | 'never'
1910
+
1911
+ /** Supported SQLite journal modes. */
1912
+ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
1913
+ ```
1914
+
1915
+ Depends on: [`SessionQueryConfig`](../packages/session-query/session-query/src/index.ts)
1916
+
1917
+ Source: [`packages/session-query/session-query-sqlite/src/index.ts:92`](../packages/session-query/session-query-sqlite/src/index.ts)
1918
+
1919
+ <a id="deepseek-aidsh-session-reference"></a>
1920
+
1921
+ ## `@deepseek-ai/dsh-session-reference`
1922
+
1923
+ Requires: `sessionQuery`
1924
+
1925
+ ```ts config-catalog
1926
+ /** Session-reference service configuration. */
1927
+ export interface Config {
1928
+ /** Maximum distinct source sessions referenced by one message, from one to three. */
1929
+ maxReferences?: number
1930
+ /** Default host candidate-list limit. */
1931
+ candidateLimit?: number
1932
+ /** Maximum rendered UTF-8 bytes for one source snapshot. */
1933
+ maxReferenceBytes?: number
1934
+ }
1935
+ ```
1936
+
1937
+ Source: [`packages/context/session-reference/src/config.ts:11`](../packages/context/session-reference/src/config.ts)
1938
+
1939
+ <a id="deepseek-aidsh-session-telemetry-otel"></a>
1940
+
1941
+ ## `@deepseek-ai/dsh-session-telemetry-otel`
1942
+
1943
+ Requires: `sessions`
1944
+
1945
+ ```ts config-catalog
1946
+ /**
1947
+ * Plugin configuration: one sharing policy, two verbatim SDK option objects,
1948
+ * and one DSH-owned shutdown bound. Uploading modes validate their endpoint
1949
+ * and shutdown deadline at plugin load; `DISABLED` reads neither.
1950
+ */
1951
+ export interface Config {
1952
+ /** Sharing policy; defaults to local-only `DISABLED` behavior. */
1953
+ mode?: SessionTelemetryMode
1954
+ /**
1955
+ * Passed verbatim to the SDK's OTLP/HTTP log exporter — the complete
1956
+ * `OTLPExporterNodeConfigBase` shape (`headers`, `timeoutMillis`,
1957
+ * `compression`, `keepAlive`, …), owned and documented by the SDK. `url`
1958
+ * is the one field this package requires and validates itself.
1959
+ */
1960
+ exporter?: OTLPExporterNodeConfigBase & {
1961
+ /** Full logs endpoint (e.g. `https://collector.example.com/v1/logs`). Required outside `DISABLED`; validated at load. */
1962
+ url?: string
1963
+ }
1964
+ /**
1965
+ * Passed verbatim to `BatchLogRecordProcessor` (minus the exporter slot,
1966
+ * which this plugin fills); the SDK owns and documents these knobs.
1967
+ */
1968
+ processor?: Omit<BatchLogRecordProcessorOptions, 'exporter'>
1969
+ /** Maximum time spent awaiting the SDK provider's complete shutdown path. */
1970
+ shutdownTimeoutMillis?: number
1971
+ }
1972
+
1973
+ /** Session-sharing policy selected by {@link Config.mode}. */
1974
+ export enum SessionTelemetryMode {
1975
+ FULL = 'FULL',
1976
+ FEEDBACK_ONLY = 'FEEDBACK_ONLY',
1977
+ DISABLED = 'DISABLED',
1978
+ }
1979
+ ```
1980
+
1981
+ Depends on: `BatchLogRecordProcessorOptions` (`@opentelemetry/sdk-logs`) · `OTLPExporterNodeConfigBase` (`@opentelemetry/otlp-exporter-base`)
1982
+
1983
+ Source: [`packages/session/session-telemetry-otel/src/index.ts:91`](../packages/session/session-telemetry-otel/src/index.ts)
1984
+
1985
+ <a id="deepseek-aidsh-session-title"></a>
1986
+
1987
+ ## `@deepseek-ai/dsh-session-title`
1988
+
1989
+ Requires: `sessions` · `sessionProjections`
1990
+
1991
+ ```ts config-catalog
1992
+ /** Required deterministic fallback and accepted-title limits. */
1993
+ export interface Config {
1994
+ /** Maximum whitespace-delimited words in the built-in fallback. */
1995
+ readonly fallbackMaxWords: number
1996
+ /** Maximum UTF-8 bytes in the built-in fallback. */
1997
+ readonly fallbackMaxBytes: number
1998
+ /** Maximum UTF-8 bytes in any accepted title. */
1999
+ readonly maxTitleBytes: number
2000
+ }
2001
+ ```
2002
+
2003
+ Source: [`packages/session/session-title/src/index.ts:56`](../packages/session/session-title/src/index.ts)
2004
+
2005
+ <a id="deepseek-aidsh-session-title-all-prompts-llm"></a>
2006
+
2007
+ ## `@deepseek-ai/dsh-session-title-all-prompts-llm`
2008
+
2009
+ Requires: `sessionTitle` · `llm` · `sessions`
2010
+
2011
+ ```ts config-catalog
2012
+ /** Required LLM policy; this plugin adds no defaults. */
2013
+ export type Config = SessionTitleLlmConfig
2014
+ ```
2015
+
2016
+ Depends on: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts)
2017
+
2018
+ Source: [`packages/session/session-title-all-prompts-llm/src/index.ts:15`](../packages/session/session-title-all-prompts-llm/src/index.ts)
2019
+
2020
+ <a id="deepseek-aidsh-session-title-first-prompt-llm"></a>
2021
+
2022
+ ## `@deepseek-ai/dsh-session-title-first-prompt-llm`
2023
+
2024
+ Requires: `sessionTitle` · `llm` · `sessions`
2025
+
2026
+ ```ts config-catalog
2027
+ /** Required LLM policy; this plugin adds no defaults. */
2028
+ export type Config = SessionTitleLlmConfig
2029
+ ```
2030
+
2031
+ Depends on: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts)
2032
+
2033
+ Source: [`packages/session/session-title-first-prompt-llm/src/index.ts:15`](../packages/session/session-title-first-prompt-llm/src/index.ts)
2034
+
2035
+ <a id="deepseek-aidsh-settings-file"></a>
2036
+
2037
+ ## `@deepseek-ai/dsh-settings-file`
2038
+
2039
+ ```ts config-catalog
2040
+ /** Plugin config: file location and hot-reload behavior. */
2041
+ export interface Config {
2042
+ /** Settings document path; defaults to `settings.yaml` under the harness home. */
2043
+ path?: string
2044
+ /** Harness home used when `path` is omitted; defaults to `$DSH_HOME` or `~/.dsh`. */
2045
+ dshHome?: string
2046
+ /** Watch the document and hot-publish external edits; defaults to true. */
2047
+ watch?: boolean
2048
+ /** Watcher write-settle window in milliseconds; defaults to 100. */
2049
+ debounceMs?: number
2050
+ }
2051
+ ```
2052
+
2053
+ Source: [`packages/settings/settings-file/src/index.ts:22`](../packages/settings/settings-file/src/index.ts)
2054
+
2055
+ <a id="deepseek-aidsh-shell-env"></a>
2056
+
2057
+ ## `@deepseek-ai/dsh-shell-env`
2058
+
2059
+ ```ts config-catalog
2060
+ /** Plugin config (all optional — the built-in facts resolve without defaults). */
2061
+ export interface Config {
2062
+ /** DeepSeek Harness home directory exposed as `DSH_HOME`; defaults to `$DSH_HOME` or `~/.dsh`. */
2063
+ dshHome?: string
2064
+ }
2065
+ ```
2066
+
2067
+ Source: [`packages/shell/shell-env/src/index.ts:28`](../packages/shell/shell-env/src/index.ts)
2068
+
2069
+ <a id="deepseek-aidsh-skill"></a>
2070
+
2071
+ ## `@deepseek-ai/dsh-skill`
2072
+
2073
+ ```ts config-catalog
2074
+ /** Skill registry configuration. */
2075
+ export interface Config {
2076
+ /** Maximum number of completed cwd/provider catalogs kept in memory. */
2077
+ readonly collectCacheMaxEntries?: number
2078
+ }
2079
+ ```
2080
+
2081
+ Source: [`packages/skill/skill/src/index.ts:280`](../packages/skill/skill/src/index.ts)
2082
+
2083
+ <a id="deepseek-aidsh-skill-filesystem"></a>
2084
+
2085
+ ## `@deepseek-ai/dsh-skill-filesystem`
2086
+
2087
+ Requires: `skills`
2088
+
2089
+ ```ts config-catalog
2090
+ /** Local filesystem skill provider configuration. */
2091
+ export interface Config {
2092
+ /** Unique provider name. Defaults to `filesystem`. */
2093
+ providerName?: string
2094
+ /** Whether project and user roots are included around custom roots. */
2095
+ includeDefaultRoots?: boolean
2096
+ /** DeepSeek Harness config root. Defaults to `$DSH_HOME` or `~/.dsh`. */
2097
+ dshHome?: string
2098
+ /** Shared agent config root. Defaults to `$DSH_AGENTS_HOME` or `~/.agents`. */
2099
+ agentsHome?: string
2100
+ /** Additional skill roots scanned after project roots and before user roots. */
2101
+ customSkillDirs?: string[]
2102
+ /** Whether host-local skill roots are watched for catalog changes. */
2103
+ watch?: boolean
2104
+ /** Whether Chokidar uses polling instead of native filesystem events. */
2105
+ watchUsePolling?: boolean
2106
+ /** Milliseconds a changed skill entry must remain stable before it is observed. */
2107
+ watchStabilityThresholdMs?: number
2108
+ /** Milliseconds between Chokidar stability or polling probes. */
2109
+ watchPollIntervalMs?: number
2110
+ /** Maximum distinct project roots whose skill directories remain watched. */
2111
+ watchMaxProjects?: number
2112
+ /** Whether watched symbolic links follow their target files. */
2113
+ watchFollowSymlinks?: boolean
2114
+ /** Bundled skill root; defaults to `$DSH_BUNDLED_SKILL_DIR` when default roots are included, otherwise mounts none. */
2115
+ bundledSkillDir?: string
2116
+ }
2117
+ ```
2118
+
2119
+ Source: [`packages/skill/skill-filesystem/src/index.ts:49`](../packages/skill/skill-filesystem/src/index.ts)
2120
+
2121
+ <a id="deepseek-aidsh-spill-local"></a>
2122
+
2123
+ ## `@deepseek-ai/dsh-spill-local`
2124
+
2125
+ ```ts config-catalog
2126
+ /** Plugin config (all optional — `static Config` supplies the defaults). */
2127
+ export interface Config {
2128
+ /**
2129
+ * Root directory for spill files. Omitted uses a lazily-created private
2130
+ * (0700) per-process directory under the OS temp dir — the safe default for
2131
+ * a local deployment. Set it to keep spill files under a known location.
2132
+ */
2133
+ root?: string
2134
+ /**
2135
+ * Age in days after which a spill file is eligible for the one-shot startup
2136
+ * cleanup sweep. Defaults to `30`; `0` disables cleanup entirely. Files whose
2137
+ * `mtime` is strictly older than the cutoff are deleted and emptied
2138
+ * directories are pruned; fresh files, symlinks, and unrelated entries are
2139
+ * left untouched. On POSIX, cleanup skips roots and session directories that
2140
+ * another local user could modify or replace. Retention is deliberate — a
2141
+ * resumed or forked session may still reference an older locator until it
2142
+ * ages out.
2143
+ */
2144
+ cleanupPeriodDays?: number
2145
+ }
2146
+ ```
2147
+
2148
+ Source: [`packages/spill/spill-local/src/index.ts:31`](../packages/spill/spill-local/src/index.ts)
2149
+
2150
+ <a id="deepseek-aidsh-spill-policy"></a>
2151
+
2152
+ ## `@deepseek-ai/dsh-spill-policy`
2153
+
2154
+ Requires: `tools`
2155
+
2156
+ ```ts config-catalog
2157
+ /** Plugin config. */
2158
+ export interface Config {
2159
+ /**
2160
+ * The model-facing context cap for a plain-text tool result, in UTF-8 bytes.
2161
+ * Omitted disables the policy entirely (no-op). When set, a result larger than
2162
+ * this is spilled and replaced with a preview derived from this same budget.
2163
+ */
2164
+ maxInlineBytes?: number
2165
+ }
2166
+ ```
2167
+
2168
+ Source: [`packages/spill/spill-policy/src/index.ts:60`](../packages/spill/spill-policy/src/index.ts)
2169
+
2170
+ <a id="deepseek-aidsh-storage-domain"></a>
2171
+
2172
+ ## `@deepseek-ai/dsh-storage-domain`
2173
+
2174
+ Requires: `storage`
2175
+
2176
+ ```ts config-catalog
2177
+ /**
2178
+ * Plugin config. Which backend serves which domain is decided here, not
2179
+ * globally on the hub: `backend` is the default route and `routes` overrides
2180
+ * it per domain name. A route naming an unregistered backend fails loud at
2181
+ * `open` with `backend-not-found`.
2182
+ */
2183
+ export interface Config {
2184
+ /** Default backend name for every domain without an explicit route. Required: there is no universally correct medium. */
2185
+ backend: string
2186
+ /** Per-domain overrides: domain name → backend name. */
2187
+ routes?: Record<string, string>
2188
+ }
2189
+ ```
2190
+
2191
+ Source: [`packages/storage/storage-domain/src/index.ts:52`](../packages/storage/storage-domain/src/index.ts)
2192
+
2193
+ <a id="deepseek-aidsh-storage-json"></a>
2194
+
2195
+ ## `@deepseek-ai/dsh-storage-json`
2196
+
2197
+ Requires: `storage`
2198
+
2199
+ ```ts config-catalog
2200
+ /**
2201
+ * Plugin configuration.
2202
+ * `root` has NO default on purpose: a `process.cwd()` fallback would scatter
2203
+ * unit files wherever the process happens to start; assemblies state the
2204
+ * location explicitly.
2205
+ */
2206
+ export interface Config {
2207
+ /** Directory holding one `<unit>.json` file (or `<unit>/` tree) per unit. */
2208
+ root: string
2209
+ }
2210
+ ```
2211
+
2212
+ Source: [`packages/storage/storage-json/src/index.ts:28`](../packages/storage/storage-json/src/index.ts)
2213
+
2214
+ <a id="deepseek-aidsh-storage-sqlite"></a>
2215
+
2216
+ ## `@deepseek-ai/dsh-storage-sqlite`
2217
+
2218
+ Requires: `storage`
2219
+
2220
+ ```ts config-catalog
2221
+ /** Plugin configuration. */
2222
+ export interface Config {
2223
+ /**
2224
+ * Filesystem path to the SQLite database file. The special value `:memory:`
2225
+ * opens an in-process database (tests). On filesystems with POSIX modes,
2226
+ * missing directories and databases are created owner-only; existing path
2227
+ * modes are preserved. Filesystem setup errors other than an existing
2228
+ * database fail the open. The backend does not protect confidentiality or
2229
+ * integrity when another principal can replace the database entry in its
2230
+ * parent directory.
2231
+ */
2232
+ path: string
2233
+ /**
2234
+ * SQLite `journal_mode` pragma. `wal` (the default) suits local disks; pick
2235
+ * a rollback-journal mode (`delete`/`truncate`/`persist`) on filesystems
2236
+ * where WAL's shared-memory files do not work (network mounts). See
2237
+ * {@link JournalMode}.
2238
+ */
2239
+ journalMode?: JournalMode
2240
+ }
2241
+
2242
+ /**
2243
+ * Journal modes the backend will run under. `wal` is the default; the
2244
+ * rollback-journal modes (`delete`/`truncate`/`persist`) exist for
2245
+ * filesystems where WAL's shared-memory files do not work (network mounts).
2246
+ * `memory`/`off` are excluded: dropping journal durability silently
2247
+ * contradicts the durability clause of the KV backend contract.
2248
+ */
2249
+ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
2250
+ ```
2251
+
2252
+ Source: [`packages/storage/storage-sqlite/src/index.ts:24`](../packages/storage/storage-sqlite/src/index.ts)
2253
+
2254
+ <a id="deepseek-aidsh-subagent-acp"></a>
2255
+
2256
+ ## `@deepseek-ai/dsh-subagent-acp`
2257
+
2258
+ Requires: `subagents` · `subprocess`
2259
+
2260
+ ```ts config-catalog
2261
+ /** Config: how to spawn and drive the child ACP agent process. */
2262
+ export interface Config {
2263
+ /** Provider name on `ctx.subagents` (default `acp`). */
2264
+ providerName: string
2265
+ /** The executable to spawn for each run (the child ACP agent). */
2266
+ command: string
2267
+ /** Arguments passed to {@link command}. */
2268
+ args: string[]
2269
+ /**
2270
+ * Working directory override for the child process and its ACP session.
2271
+ * Must be non-empty; a relative path resolves against the harness launch
2272
+ * directory at load, and the result must be an existing directory. When
2273
+ * omitted, each child inherits its delegating parent session's cwd — and
2274
+ * starting one from a parent session that has no cwd fails.
2275
+ */
2276
+ cwd?: string
2277
+ /**
2278
+ * How to auto-answer the child's `session/request_permission` prompts:
2279
+ * `reject` (default — decline every prompt) or `allow` (approve via the first
2280
+ * `allow_once` or `allow_always` option). No prompt is surfaced to a human.
2281
+ */
2282
+ permission: PermissionPolicy
2283
+ /**
2284
+ * Extra environment variables for the child process — e.g. the child
2285
+ * harness's own `DEEPSEEK_API_KEY`. Forwarded on top of a credential-scrubbed
2286
+ * copy of the parent env, so an explicit key here reaches the child while
2287
+ * ambient secrets do not leak implicitly.
2288
+ */
2289
+ env: Record<string, string>
2290
+ /**
2291
+ * Grace period (ms) for the child's EOF-driven quiesce on dispose — its
2292
+ * window to flush persistence and tear down its own nested subprocesses
2293
+ * before the parent escalates to a signal. Must not exceed
2294
+ * `MAX_TIMER_DELAY_MS`.
2295
+ */
2296
+ disposeEofGraceMs?: number
2297
+ /** Failure-observation and termination-escalation grace (ms); must not exceed `MAX_TIMER_DELAY_MS`. */
2298
+ disposeGraceMs?: number
2299
+ }
2300
+
2301
+ /** Fixed response to child permission requests: reject by default, or select the first allow option. */
2302
+ export type PermissionPolicy = 'allow' | 'reject'
2303
+ ```
2304
+
2305
+ Source: [`packages/subagent/subagent-acp/src/index.ts:27`](../packages/subagent/subagent-acp/src/index.ts)
2306
+
2307
+ <a id="deepseek-aidsh-subagent-claude-code"></a>
2308
+
2309
+ ## `@deepseek-ai/dsh-subagent-claude-code`
2310
+
2311
+ Requires: `subagents` · `subprocess`
2312
+
2313
+ ```ts config-catalog
2314
+ /** Deployment-owned model, permission, environment, and process-release settings. */
2315
+ export interface Config {
2316
+ /** Provider name on `ctx.subagents` (default `claude-code`). */
2317
+ providerName?: string
2318
+ /** Native Claude model fixed for this instance; omitted to inherit Claude settings. */
2319
+ model?: string
2320
+ /**
2321
+ * Explicit environment entries layered over the subprocess seam's
2322
+ * credential-scrubbed parent environment.
2323
+ */
2324
+ env?: Record<string, string>
2325
+ /**
2326
+ * Native non-interactive mode fixed for this Provider instance. Defaults to
2327
+ * `dontAsk`; `acceptEdits` accepts edits, `auto` uses the native classifier,
2328
+ * `plan` returns a plan without approving execution, and
2329
+ * `bypassPermissions` explicitly skips permission checks.
2330
+ */
2331
+ permissionMode?: ClaudeCodePermissionMode
2332
+ /** Grace in milliseconds for Claude Code process-tree termination. */
2333
+ disposeGraceMs?: number
2334
+ }
2335
+
2336
+ /** Profile-selectable non-interactive Claude Code permission mode. */
2337
+ export type ClaudeCodePermissionMode = typeof CLAUDE_CODE_PERMISSION_MODES[number]
2338
+ ```
2339
+
2340
+ Source: [`packages/subagent/subagent-claude-code/src/index.ts:38`](../packages/subagent/subagent-claude-code/src/index.ts)
2341
+
2342
+ <a id="deepseek-aidsh-subagent-codex"></a>
2343
+
2344
+ ## `@deepseek-ai/dsh-subagent-codex`
2345
+
2346
+ Requires: `subagents` · `subprocess`
2347
+
2348
+ ```ts config-catalog
2349
+ /** Deployment-owned model, permission, environment, and process-release settings. */
2350
+ export interface Config {
2351
+ /** Provider name on `ctx.subagents` (default `codex`). */
2352
+ providerName?: string
2353
+ /** Native Codex model fixed for this instance; omitted to inherit Codex settings. */
2354
+ model?: string
2355
+ /**
2356
+ * Explicit environment entries layered over the subprocess seam's
2357
+ * credential-scrubbed parent environment.
2358
+ */
2359
+ env?: Record<string, string>
2360
+ /** Native non-interactive permission mode fixed for this Provider instance. */
2361
+ permissionMode?: CodexPermissionMode
2362
+ /** Grace in milliseconds for app-server process-tree termination. */
2363
+ disposeGraceMs?: number
2364
+ }
2365
+
2366
+ /** Profile-selectable non-interactive Codex permission mode. */
2367
+ export type CodexPermissionMode =
2368
+ | 'never'
2369
+ | 'approve-for-me'
2370
+ | 'dangerously-bypass-approvals-and-sandbox'
2371
+ ```
2372
+
2373
+ Source: [`packages/subagent/subagent-codex/src/index.ts:36`](../packages/subagent/subagent-codex/src/index.ts)
2374
+
2375
+ <a id="deepseek-aidsh-subagent-dsh-sdk"></a>
2376
+
2377
+ ## `@deepseek-ai/dsh-subagent-dsh-sdk`
2378
+
2379
+ Requires: `subagents`
2380
+
2381
+ ```ts config-catalog
2382
+ /** Config: how to spawn and drive the child SDK runtime process. */
2383
+ export interface Config {
2384
+ /** Provider name on `ctx.subagents` (default `dsh-sdk`). */
2385
+ providerName: string
2386
+ /** Explicit dsh CLI module, resolved and checked at plugin load; omission uses the SDK dependency. */
2387
+ dshBin?: string
2388
+ /** Named child profile (default `sdk`). */
2389
+ profile: string
2390
+ /** Ordered per-launch profile patch files, resolved and checked at plugin load. */
2391
+ patches: string[]
2392
+ /** Absolute isolated Harness home for every nested child process. */
2393
+ dshHome: string
2394
+ /**
2395
+ * Working directory override for the child process and its SDK session
2396
+ * workspace. Must be non-empty; a relative path resolves against the
2397
+ * harness launch directory at load, and the result must be an existing
2398
+ * directory. When omitted, each child inherits its delegating parent
2399
+ * session's cwd — and starting one from a parent session that has no cwd
2400
+ * fails.
2401
+ */
2402
+ cwd?: string
2403
+ /** Provider route the child runtime initializes with (default `deepseek-official`). */
2404
+ provider: string
2405
+ /** Model the child runtime initializes with (default `deepseek-v4-flash`). */
2406
+ model: string
2407
+ /** Optional per-request output-token cap for the child runtime. */
2408
+ maxTokens?: number
2409
+ /**
2410
+ * Extra environment variables for the child process — e.g. the child
2411
+ * runtime's own `DEEPSEEK_API_KEY`. Forwarded on top of a credential-scrubbed copy of the parent
2412
+ * env, so an explicit key here reaches the child while ambient secrets do
2413
+ * not leak implicitly.
2414
+ */
2415
+ env: Record<string, string>
2416
+ /** Bound (ms) on the protocol `shutdown` exchange during dispose. */
2417
+ shutdownTimeoutMs?: number
2418
+ /**
2419
+ * Grace period (ms) for the child's EOF-driven quiesce on dispose — its
2420
+ * window to flush persistence and tear down its own nested subprocesses
2421
+ * before the parent escalates to a signal.
2422
+ */
2423
+ disposeEofGraceMs?: number
2424
+ /** Termination confirmation window (ms), including forced exit on every platform. */
2425
+ disposeGraceMs?: number
2426
+ }
2427
+ ```
2428
+
2429
+ Source: [`packages/subagent/subagent-dsh-sdk/src/index.ts:34`](../packages/subagent/subagent-dsh-sdk/src/index.ts)
2430
+
2431
+ <a id="deepseek-aidsh-subagent-fork-in-process"></a>
2432
+
2433
+ ## `@deepseek-ai/dsh-subagent-fork-in-process`
2434
+
2435
+ Requires: `subagents`
2436
+
2437
+ ```ts config-catalog
2438
+ /** Config: the registry name to register the provider under. */
2439
+ export interface Config {
2440
+ /** Provider name on `ctx.subagents` (default `fork`). */
2441
+ providerName: string
2442
+ }
2443
+ ```
2444
+
2445
+ Source: [`packages/subagent/subagent-fork-in-process/src/index.ts:31`](../packages/subagent/subagent-fork-in-process/src/index.ts)
2446
+
2447
+ <a id="deepseek-aidsh-subagent-spawn-in-process"></a>
2448
+
2449
+ ## `@deepseek-ai/dsh-subagent-spawn-in-process`
2450
+
2451
+ Requires: `subagents`
2452
+
2453
+ ```ts config-catalog
2454
+ /** Config: the registry name to register the provider under. */
2455
+ export interface Config {
2456
+ /** Provider name on `ctx.subagents` (default `spawn`). */
2457
+ providerName: string
2458
+ }
2459
+ ```
2460
+
2461
+ Source: [`packages/subagent/subagent-spawn-in-process/src/index.ts:25`](../packages/subagent/subagent-spawn-in-process/src/index.ts)
2462
+
2463
+ <a id="deepseek-aidsh-subprocess-e2b"></a>
2464
+
2465
+ ## `@deepseek-ai/dsh-subprocess-e2b`
2466
+
2467
+ Requires: `e2b`
2468
+
2469
+ ```ts config-catalog
2470
+ /** Configuration for the E2B subprocess adapter. */
2471
+ export interface Config {
2472
+ /** Remote status/liveness poll cadence in milliseconds; each tick is one control-plane request. */
2473
+ pollMs?: number
2474
+ }
2475
+ ```
2476
+
2477
+ Source: [`packages/e2b/subprocess-e2b/src/index.ts:25`](../packages/e2b/subprocess-e2b/src/index.ts)
2478
+
2479
+ <a id="deepseek-aidsh-system-prompt"></a>
2480
+
2481
+ ## `@deepseek-ai/dsh-system-prompt`
2482
+
2483
+ ```ts config-catalog
2484
+ /** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.persona} for its contract). */
2485
+ export interface Config {
2486
+ /** Include the fixed DeepSeek Harness identity before the deployment persona (default true). */
2487
+ includeHarnessIdentity?: boolean
2488
+ /** Include dynamic runtime-context snapshots in model history (default true). */
2489
+ includeRuntimeContext?: boolean
2490
+ /**
2491
+ * Deployment-wide order-0 persona template. A scoped section named
2492
+ * `deployment:persona` shadows it; `{{variable}}` references are strict.
2493
+ */
2494
+ persona?: string
2495
+ /**
2496
+ * Model-facing tool names in order, with {@link TOOL_ORDER_REST} exactly once.
2497
+ * Invalid fields fail at load and unknown names fail at assembly; known names
2498
+ * hidden in one scope may be absent there. Omitted means lexicographic order.
2499
+ */
2500
+ toolOrder?: string[]
2501
+ }
2502
+ ```
2503
+
2504
+ Source: [`packages/core/system-prompt/src/index.ts:237`](../packages/core/system-prompt/src/index.ts)
2505
+
2506
+ <a id="deepseek-aidsh-terminal-bash"></a>
2507
+
2508
+ ## `@deepseek-ai/dsh-terminal-bash`
2509
+
2510
+ Requires: `terminals` · `sandboxPolicy` · `sessionProjections` · `subprocess`
2511
+
2512
+ ```ts config-catalog
2513
+ /** Public plugin configuration. */
2514
+ export interface Config {
2515
+ /** Backend registry type (default: `shell`). */
2516
+ backendType?: string
2517
+ /** Interactive shell dialect (default: `bash`); selects the argv/env/startup defaults. */
2518
+ shellDialect?: ShellDialect
2519
+ /** Interactive shell executable (default per dialect: `/bin/bash`, or the resolved pwsh). */
2520
+ shellPath?: string
2521
+ /** Shell arguments (default per dialect: bash `--noprofile --norc -i`, pwsh `-NoLogo -NoProfile`). */
2522
+ shellArgs?: string[]
2523
+ /** Terminal rows. */
2524
+ rows?: number
2525
+ /** Terminal columns. */
2526
+ cols?: number
2527
+ /** Maximum retained logical lines. */
2528
+ scrollbackLines?: number
2529
+ /** Maximum retained UTF-8 bytes. */
2530
+ scrollbackMaxBytes?: number
2531
+ /** Maximum bytes returned by one read or settled viewport. */
2532
+ maxReadBytes?: number
2533
+ /** Readiness polling interval. */
2534
+ pollIntervalMs?: number
2535
+ /** Delay before Linux exact syscall probes. */
2536
+ exactProbeAfterMs?: number
2537
+ /** Silence duration that yields `inferred_idle`. */
2538
+ idleSilenceMs?: number
2539
+ /**
2540
+ * Extra wait beyond `idleSilenceMs`, once a prompt marker was seen, for the shell to
2541
+ * regain the foreground before `inferred_idle` settles; at least one `pollIntervalMs`.
2542
+ */
2543
+ handoffGraceMs?: number
2544
+ /** Absolute bound for one send and the complete pwsh startup sequence. */
2545
+ timeoutMs?: number
2546
+ /** Grace before teardown escalates to `SIGKILL`. */
2547
+ disposeGraceMs?: number
2548
+ }
2549
+
2550
+ /** One supported interactive shell dialect. */
2551
+ export type ShellDialect = 'bash' | 'pwsh'
2552
+ ```
2553
+
2554
+ Source: [`packages/terminal/terminal-bash/src/config.ts:10`](../packages/terminal/terminal-bash/src/config.ts)
2555
+
2556
+ <a id="deepseek-aidsh-time-context"></a>
2557
+
2558
+ ## `@deepseek-ai/dsh-time-context`
2559
+
2560
+ Requires: `agents` · `sessionProjections`
2561
+
2562
+ ```ts config-catalog
2563
+ /** Request-preparation clock formatting and append scheduling. Invalid values fail plugin load. */
2564
+ export interface Config {
2565
+ /** Fallback display zone when the open turn has no unique browser zone. Omit to use the process zone. */
2566
+ timeZone?: string
2567
+ /** Minimum milliseconds between durable injections in one session. Omit or set to 0 to inject at every eligible step. */
2568
+ refreshIntervalMs?: number
2569
+ }
2570
+ ```
2571
+
2572
+ Source: [`packages/context/time-context/src/index.ts:49`](../packages/context/time-context/src/index.ts)
2573
+
2574
+ <a id="deepseek-aidsh-tmux-context"></a>
2575
+
2576
+ ## `@deepseek-ai/dsh-tmux-context`
2577
+
2578
+ Requires: `agents` · `sessionProjections`
2579
+
2580
+ ```ts config-catalog
2581
+ /** Per-turn tmux-location scheduling. Invalid values fail plugin load. */
2582
+ export interface Config {
2583
+ /** Minimum milliseconds between durable injections in one session. Omit or set to 0 to inject on every eligible change. */
2584
+ refreshIntervalMs?: number
2585
+ }
2586
+ ```
2587
+
2588
+ Source: [`packages/context/tmux-context/src/index.ts:36`](../packages/context/tmux-context/src/index.ts)
2589
+
2590
+ <a id="deepseek-aidsh-token-meter"></a>
2591
+
2592
+ ## `@deepseek-ai/dsh-token-meter`
2593
+
2594
+ Requires: `sessionProjections`
2595
+
2596
+ ```ts config-catalog
2597
+ /** Token-meter plugin configuration; the fixed estimator has no settings. */
2598
+ export type TokenMeterConfig = Record<string, never>
2599
+ ```
2600
+
2601
+ Source: [`packages/llm/token-meter/src/types.ts:13`](../packages/llm/token-meter/src/types.ts)
2602
+
2603
+ <a id="deepseek-aidsh-tool-bash"></a>
2604
+
2605
+ ## `@deepseek-ai/dsh-tool-bash`
2606
+
2607
+ Requires: `tools` · `shell` · `systemPrompt` · `shellEnv`
2608
+
2609
+ ```ts config-catalog
2610
+ /** Configuration for the bash tool. */
2611
+ export interface Config {
2612
+ /** Expose `run_in_background` (default true); disabled calls are also rejected. */
2613
+ enableRunInBackground?: boolean
2614
+ }
2615
+ ```
2616
+
2617
+ Source: [`packages/shell/tool-bash/src/index.ts:33`](../packages/shell/tool-bash/src/index.ts)
2618
+
2619
+ <a id="deepseek-aidsh-tool-bash-persistent"></a>
2620
+
2621
+ ## `@deepseek-ai/dsh-tool-bash-persistent`
2622
+
2623
+ Requires: `tools` · `terminals`
2624
+
2625
+ ```ts config-catalog
2626
+ /** Configuration for the persistent Bash tool. */
2627
+ export interface Config {
2628
+ /** PTY backend used for each owner-isolated persistent shell (default `shell`). */
2629
+ backendType?: string
2630
+ /** Wall-clock limit for one command (default 300000). */
2631
+ timeoutMs?: number
2632
+ /** Maximum returned command-output characters before clipping (default 16000). */
2633
+ maxOutputChars?: number
2634
+ /** Model-facing tool description; deployments may describe their environment. */
2635
+ description?: string
2636
+ }
2637
+ ```
2638
+
2639
+ Source: [`packages/shell/tool-bash-persistent/src/index.ts:432`](../packages/shell/tool-bash-persistent/src/index.ts)
2640
+
2641
+ <a id="deepseek-aidsh-tool-fs"></a>
2642
+
2643
+ ## `@deepseek-ai/dsh-tool-fs`
2644
+
2645
+ Requires: `tools` · `fs` · `systemPrompt`
2646
+
2647
+ ```ts config-catalog
2648
+ /** Plugin config (all optional — `Config` supplies the defaults). */
2649
+ export interface Config {
2650
+ /** Default and maximum number of lines returned by one `read` call. */
2651
+ readLimit?: number
2652
+ /** Maximum characters returned for a single line before truncation. */
2653
+ readMaxLineLength?: number
2654
+ /** Maximum bytes returned for the selected lines of one `read` call. */
2655
+ readMaxBytes?: number
2656
+ /** Files at or above this size stream instead of loading whole into memory. */
2657
+ readStreamMinSize?: number
2658
+ }
2659
+ ```
2660
+
2661
+ Source: [`packages/fs/tool-fs/src/index.ts:25`](../packages/fs/tool-fs/src/index.ts)
2662
+
2663
+ <a id="deepseek-aidsh-tool-fs-search"></a>
2664
+
2665
+ ## `@deepseek-ai/dsh-tool-fs-search`
2666
+
2667
+ Requires: `tools` · `systemPrompt` · `subprocess`
2668
+
2669
+ ```ts config-catalog
2670
+ /** Plugin config; over-cap glob sampling is an explicit deployment choice and the remaining fields have defaults. */
2671
+ export interface Config {
2672
+ /** Whether an over-cap `glob` page is sampled across top-level entries instead of taking the modification-time head. */
2673
+ sampleOverCapGlobResults: boolean
2674
+ /** Max paths one `glob` call retains inline; later paths go to the formatted spill file. */
2675
+ globMaxResults?: number
2676
+ /** Max flat matches one `grep` call retains inline; later matches go to the formatted spill file. */
2677
+ grepMaxMatches?: number
2678
+ /** Max bytes retained for one matched-line preview (the cut preserves UTF-8 boundaries). */
2679
+ grepMaxLineBytes?: number
2680
+ /** Max bytes of one search's serialized `presentationMeta`; trailing groups/paths drop past it so the persisted card stays bounded. */
2681
+ searchMetaMaxBytes?: number
2682
+ /** Max complete raw `rg` stdout bytes a search will parse; larger raw output fails with `SEARCH_RAW_OUTPUT_OVERFLOW`. */
2683
+ rawOutputMaxBytes?: number
2684
+ /** Terminate-escalation grace (ms), handed to the subprocess seam and bounded by `MAX_TIMER_DELAY_MS`. */
2685
+ graceMs?: number
2686
+ /** Max bytes retained for one search's stderr tail; the excerpt is embedded in `SEARCH_*` error messages, never shown on success. */
2687
+ stderrMaxBytes?: number
2688
+ /**
2689
+ * Cooperative tool-call timeout budget (ms) on both tools, enforced by
2690
+ * `@deepseek-ai/dsh-tool-call-timeout-policy` through `exec.signal`.
2691
+ */
2692
+ timeoutMs?: number
2693
+ }
2694
+ ```
2695
+
2696
+ Source: [`packages/fs/tool-fs-search/src/index.ts:73`](../packages/fs/tool-fs-search/src/index.ts)
2697
+
2698
+ <a id="deepseek-aidsh-tool-goal"></a>
2699
+
2700
+ ## `@deepseek-ai/dsh-tool-goal`
2701
+
2702
+ Requires: `agents` · `goals` · `tools` · `systemPrompt` · `sessionProjections`
2703
+
2704
+ ```ts config-catalog
2705
+ /** Model policy and hard lower bounds for goal-state updates. */
2706
+ export interface Config {
2707
+ /** Minimum admitted goal rounds before the model may self-report `blocked`. */
2708
+ blockedAfterConsecutiveRounds?: number
2709
+ }
2710
+ ```
2711
+
2712
+ Source: [`packages/goal/tool-goal/src/index.ts:25`](../packages/goal/tool-goal/src/index.ts)
2713
+
2714
+ <a id="deepseek-aidsh-tool-jobs"></a>
2715
+
2716
+ ## `@deepseek-ai/dsh-tool-jobs`
2717
+
2718
+ Requires: `tools` · `jobs` · `systemPrompt`
2719
+
2720
+ ```ts config-catalog
2721
+ /** Configures bounded `job_output` waits and completion-notice delivery. */
2722
+ export interface Config {
2723
+ /** Wait duration applied when `job_output` sets `wait` without `timeout_ms` (default 30s). */
2724
+ waitTimeoutMs?: number
2725
+ /** Hard cap on any single wait; a larger model-supplied `timeout_ms` is clamped down to it (default 10min). */
2726
+ maxWaitTimeoutMs?: number
2727
+ /** Whether a completion opens a turn on an idle owner (default `wakeup`). */
2728
+ completionDelivery?: CompletionDelivery
2729
+ /**
2730
+ * Turns one owner may have opened by completion wakes before the next
2731
+ * notice degrades to injection, reset by any user-authored input (default 3).
2732
+ * Bounds the self-exciting chain where a woken turn starts the job whose
2733
+ * completion wakes it again.
2734
+ */
2735
+ maxConsecutiveWakes?: number
2736
+ }
2737
+
2738
+ /**
2739
+ * How an unreported completion reaches an owner that is already idle: `wakeup`
2740
+ * opens a turn for it, `quiet` leaves it pending until something else wakes the
2741
+ * owner. A busy owner is injected either way.
2742
+ */
2743
+ export type CompletionDelivery = 'quiet' | 'wakeup'
2744
+ ```
2745
+
2746
+ Source: [`packages/jobs/tool-jobs/src/index.ts:31`](../packages/jobs/tool-jobs/src/index.ts)
2747
+
2748
+ <a id="deepseek-aidsh-tool-lsp"></a>
2749
+
2750
+ ## `@deepseek-ai/dsh-tool-lsp`
2751
+
2752
+ Requires: `tools` · `lsp` · `systemPrompt`
2753
+
2754
+ ```ts config-catalog
2755
+ /** Plugin configuration: result caps and the timeout budget. */
2756
+ export interface Config {
2757
+ /** Largest number of rendered locations before an omission marker (default 100). */
2758
+ maxLocations?: number
2759
+ /** Largest complete rendered result in characters, including truncation metadata (default 16000). */
2760
+ maxResultChars?: number
2761
+ /** Tool-call timeout budget in ms (default 60000). */
2762
+ timeoutMs?: number
2763
+ }
2764
+ ```
2765
+
2766
+ Source: [`packages/lsp/tool-lsp/src/index.ts:57`](../packages/lsp/tool-lsp/src/index.ts)
2767
+
2768
+ <a id="deepseek-aidsh-tool-pwsh"></a>
2769
+
2770
+ ## `@deepseek-ai/dsh-tool-pwsh`
2771
+
2772
+ Requires: `tools` · `shell` · `systemPrompt` · `shellEnv`
2773
+
2774
+ ```ts config-catalog
2775
+ /** Configuration for the pwsh tool. */
2776
+ export interface Config {
2777
+ /** Expose `run_in_background` (default true); disabled calls are also rejected. */
2778
+ enableRunInBackground?: boolean
2779
+ }
2780
+ ```
2781
+
2782
+ Source: [`packages/shell/tool-pwsh/src/index.ts:51`](../packages/shell/tool-pwsh/src/index.ts)
2783
+
2784
+ <a id="deepseek-aidsh-tool-pwsh-persistent"></a>
2785
+
2786
+ ## `@deepseek-ai/dsh-tool-pwsh-persistent`
2787
+
2788
+ Requires: `tools` · `terminals`
2789
+
2790
+ ```ts config-catalog
2791
+ /** Configuration for the persistent pwsh tool. */
2792
+ export interface Config {
2793
+ /** PTY backend used for each owner-isolated persistent shell (default `shell`). */
2794
+ backendType?: string
2795
+ /** Wall-clock limit for one command (default 300000). */
2796
+ timeoutMs?: number
2797
+ /** Maximum returned command-output characters before clipping (default 16000). */
2798
+ maxOutputChars?: number
2799
+ /** Model-facing tool description; deployments may describe their environment. */
2800
+ description?: string
2801
+ }
2802
+ ```
2803
+
2804
+ Source: [`packages/shell/tool-pwsh-persistent/src/index.ts:472`](../packages/shell/tool-pwsh-persistent/src/index.ts)
2805
+
2806
+ <a id="deepseek-aidsh-tool-ralph"></a>
2807
+
2808
+ ## `@deepseek-ai/dsh-tool-ralph`
2809
+
2810
+ Requires: `tools` · `workflowEngine` · `subagents` · `systemPrompt`
2811
+
2812
+ ```ts config-catalog
2813
+ /** Deployment policy for the fixed Ralph workflow. */
2814
+ export interface Config {
2815
+ /** Fresh structured-output provider used for every round (default `spawn`). */
2816
+ subagentProvider?: string
2817
+ /** Default and deployment ceiling for one call's round count (default 256). */
2818
+ maxRounds?: number
2819
+ /** Maximum serialized characters in one structured handoff (default 16384). */
2820
+ maxHandoffChars?: number
2821
+ /** Maximum characters in a successful parent-facing terminal text (default 16384). */
2822
+ maxResultChars?: number
2823
+ }
2824
+ ```
2825
+
2826
+ Source: [`packages/workflow/tool-ralph/src/index.ts:21`](../packages/workflow/tool-ralph/src/index.ts)
2827
+
2828
+ <a id="deepseek-aidsh-tool-session-query"></a>
2829
+
2830
+ ## `@deepseek-ai/dsh-tool-session-query`
2831
+
2832
+ Requires: `tools` · `systemPrompt` · `sessionQuery` · `sessionProjections`
2833
+
2834
+ ```ts config-catalog
2835
+ /** Deployment-owned search count and timeout bounds. */
2836
+ export interface Config {
2837
+ /** Maximum authorized hits returned by one search call. Defaults to 100. */
2838
+ maxSearchResults?: number
2839
+ /** Cooperative full-text search deadline in milliseconds. Defaults to 30000. */
2840
+ searchTimeoutMs?: number
2841
+ }
2842
+ ```
2843
+
2844
+ Source: [`packages/session-query/tool-session-query/src/index.ts:28`](../packages/session-query/tool-session-query/src/index.ts)
2845
+
2846
+ <a id="deepseek-aidsh-tool-skill"></a>
2847
+
2848
+ ## `@deepseek-ai/dsh-tool-skill`
2849
+
2850
+ Requires: `agents` · `tools` · `skills`
2851
+
2852
+ ```ts config-catalog
2853
+ /** Model-facing skill catalog configuration. */
2854
+ export interface Config {
2855
+ /** Maximum normalized description length rendered in the session catalog; minimum 3. */
2856
+ catalogDescriptionMaxLength?: number
2857
+ }
2858
+ ```
2859
+
2860
+ Source: [`packages/skill/tool-skill/src/index.ts:61`](../packages/skill/tool-skill/src/index.ts)
2861
+
2862
+ <a id="deepseek-aidsh-tool-str-replace-editor"></a>
2863
+
2864
+ ## `@deepseek-ai/dsh-tool-str-replace-editor`
2865
+
2866
+ Requires: `tools` · `fs`
2867
+
2868
+ ```ts config-catalog
2869
+ /** Configuration for the string-replacement editor tool. */
2870
+ export interface Config {
2871
+ /** Maximum returned view characters before clipping (default 16000). */
2872
+ maxOutputChars?: number
2873
+ /** Model-facing tool description. */
2874
+ description?: string
2875
+ }
2876
+ ```
2877
+
2878
+ Source: [`packages/fs/tool-str-replace-editor/src/index.ts:505`](../packages/fs/tool-str-replace-editor/src/index.ts)
2879
+
2880
+ <a id="deepseek-aidsh-tool-subagent"></a>
2881
+
2882
+ ## `@deepseek-ai/dsh-tool-subagent`
2883
+
2884
+ Requires: `tools` · `subagents` · `systemPrompt` · `sessionProjections`
2885
+
2886
+ ```ts config-catalog
2887
+ /** Config: which registered provider this tool delegates to, plus child defaults. */
2888
+ export interface Config {
2889
+ /** The `ctx.subagents` provider name to start runs on (e.g. `spawn`, `acp`). */
2890
+ provider: string
2891
+ /**
2892
+ * Model-facing tool name (default `subagent`). Each loaded instance must use
2893
+ * a distinct name.
2894
+ */
2895
+ toolName?: string
2896
+ /**
2897
+ * Sample the Host `subagent-model-selection` user setting for each new
2898
+ * top-level session and inherit that decision in its child sessions.
2899
+ */
2900
+ modelSelectionSettings?: boolean
2901
+ /**
2902
+ * Expose `run_in_background` (default true). Disabled instances omit the
2903
+ * parameter and reject forced background calls.
2904
+ */
2905
+ enableRunInBackground?: boolean
2906
+ /**
2907
+ * Background execution policy (default `one-shot`). `one-shot` defaults calls
2908
+ * to foreground; `continuable` defaults them to background, requires a provider
2909
+ * with the `prepareContinuable` capability, and returns the durable child id.
2910
+ * Follow-up adapters remain independently optional.
2911
+ */
2912
+ backgroundMode?: 'one-shot' | 'continuable'
2913
+ /**
2914
+ * Agent options applied to every child; omitted fields use child-loop defaults.
2915
+ */
2916
+ agentOptions?: AgentOptions
2917
+ /**
2918
+ * Per-child persona that shadows `deployment:persona`. Requires the
2919
+ * provider's `persona` capability; omission preserves the deployment persona.
2920
+ */
2921
+ persona?: string
2922
+ /**
2923
+ * Tool filter applied to every child. Filtered tools disappear from its
2924
+ * prompt and reject execution. Requires the provider's `toolFilter`
2925
+ * capability; unknown names fail startup.
2926
+ */
2927
+ toolFilter?: {
2928
+ /** Global tool names the child keeps; everything else is removed. */
2929
+ allow?: string[]
2930
+ /** Global tool names removed from the child. */
2931
+ deny?: string[]
2932
+ }
2933
+ /**
2934
+ * Maximum child depth: a non-negative safe integer (default `3`; `0` forbids
2935
+ * delegation entirely), or `'provider-managed'` to send no cap. A numeric cap
2936
+ * requires the provider's `depthLimit` capability (mount fails loud
2937
+ * otherwise). The provider checks the calling agent's current depth at every
2938
+ * start; the tool remains model-visible so runtime policy owns rejection.
2939
+ * `'provider-managed'` is for an out-of-process provider whose recursion
2940
+ * budget belongs to the child runtime or its own deployment.
2941
+ */
2942
+ maxDepth?: number | 'provider-managed'
2943
+ }
2944
+ ```
2945
+
2946
+ Depends on: [`AgentOptions`](subsystems/core.md)
2947
+
2948
+ Source: [`packages/subagent/tool-subagent/src/index.ts:47`](../packages/subagent/tool-subagent/src/index.ts)
2949
+
2950
+ <a id="deepseek-aidsh-tool-terminal"></a>
2951
+
2952
+ ## `@deepseek-ai/dsh-tool-terminal`
2953
+
2954
+ Requires: `terminals` · `tools` · `systemPrompt`
2955
+
2956
+ ```ts config-catalog
2957
+ /** Model-facing terminal tool configuration. */
2958
+ export interface Config {
2959
+ /** Expose `run_in_background` and accept background sends (default true). */
2960
+ enableRunInBackground?: boolean
2961
+ /** Maximum UTF-8 bytes in one complete terminal or task-output result. */
2962
+ maxResultBytes?: number
2963
+ }
2964
+ ```
2965
+
2966
+ Source: [`packages/terminal/tool-terminal/src/index.ts:35`](../packages/terminal/tool-terminal/src/index.ts)
2967
+
2968
+ <a id="deepseek-aidsh-tool-todo"></a>
2969
+
2970
+ ## `@deepseek-ai/dsh-tool-todo`
2971
+
2972
+ Requires: `tools` · `sessionProjections`
2973
+
2974
+ ```ts config-catalog
2975
+ /** Model-facing todo tool configuration. */
2976
+ export interface Config {
2977
+ /**
2978
+ * Required deployment choice for whether several todos may be `in_progress` at once. True suits
2979
+ * agents that run work concurrently — subagents, background commands, workflow fan-out — and the
2980
+ * description then instructs the model to mark every actively worked task. False restores the
2981
+ * single-active discipline: the description asks for exactly one, and a call marking more is
2982
+ * rejected.
2983
+ */
2984
+ allowParallelInProgress: boolean
2985
+ }
2986
+ ```
2987
+
2988
+ Source: [`packages/todo/tool-todo/src/index.ts:29`](../packages/todo/tool-todo/src/index.ts)
2989
+
2990
+ <a id="deepseek-aidsh-tool-web"></a>
2991
+
2992
+ ## `@deepseek-ai/dsh-tool-web`
2993
+
2994
+ Requires: `tools` · `web` · `systemPrompt`
2995
+
2996
+ ```ts config-catalog
2997
+ /** Plugin config: which web tools to register, search bounds, per-tool budgets, and the fetch output cap. */
2998
+ export interface Config {
2999
+ /** Register `web_search`. Defaults to true. */
3000
+ search?: boolean
3001
+ /** Register `web_fetch`. Defaults to true. */
3002
+ fetch?: boolean
3003
+ /** Upper bound on sources returned by one `web_search` call. */
3004
+ searchMaxResults?: number
3005
+ /** Upper bound on queries accepted by one `web_search` call. */
3006
+ searchMaxQueries?: number
3007
+ /** Cooperative timeout budget (ms) for `web_fetch`. Defaults to 30000. */
3008
+ fetchTimeoutMs?: number
3009
+ /** Cooperative timeout budget (ms) for `web_search`. Defaults to 30000. */
3010
+ searchTimeoutMs?: number
3011
+ /** Cap on source characters converted and complete `web_fetch` output characters. Defaults to 200000. */
3012
+ fetchMaxOutputChars?: number
3013
+ }
3014
+ ```
3015
+
3016
+ Source: [`packages/web/tool-web/src/index.ts:37`](../packages/web/tool-web/src/index.ts)
3017
+
3018
+ <a id="deepseek-aidsh-tool-workflow"></a>
3019
+
3020
+ ## `@deepseek-ai/dsh-tool-workflow`
3021
+
3022
+ Requires: `tools` · `workflowEngine` · `systemPrompt`
3023
+
3024
+ ```ts config-catalog
3025
+ /** Config: the model-facing tool name plus result rendering caps. */
3026
+ export interface Config {
3027
+ /** The model-facing tool name to register (default `workflow`). */
3028
+ toolName?: string
3029
+ /** Rendered-result ceiling, in characters: a longer JSON value is truncated with a notice (default 50000). */
3030
+ maxResultChars?: number
3031
+ }
3032
+ ```
3033
+
3034
+ Source: [`packages/workflow/tool-workflow/src/index.ts:32`](../packages/workflow/tool-workflow/src/index.ts)
3035
+
3036
+ <a id="deepseek-aidsh-tools"></a>
3037
+
3038
+ ## `@deepseek-ai/dsh-tools`
3039
+
3040
+ Requires: `systemPrompt`
3041
+
3042
+ ```ts config-catalog
3043
+ /** Plugin config: how the registered tools are presented to the model. */
3044
+ export interface Config {
3045
+ /**
3046
+ * Model presentation. `native` (default) sends every visible schema; `ptc`
3047
+ * sends only `run_code` plus a generated SDK prompt and collapses the
3048
+ * executor to the same surface (a model-direct call may only name
3049
+ * `run_code`; `run_code` SDK sub-dispatches keep every visible tool); `both`
3050
+ * sends both forms. PTC mode requires a `ctx.codeRuntime` whose `language`
3051
+ * has a registered SDK renderer (TypeScript or Python) and fail prompt
3052
+ * assembly when it is absent or has no renderer. Under `ptc`, native names
3053
+ * in `toolOrder` are invalid.
3054
+ */
3055
+ mode?: ToolPresentationMode
3056
+ /**
3057
+ * Concurrency cap for a `run_code` program's overlapping sub-calls
3058
+ * (default 10, the loop scheduler's own default). Sub-calls follow the
3059
+ * native scheduling contract — only calls whose tools classify
3060
+ * concurrency-safe overlap; exclusive calls form barriers — so `1`
3061
+ * restores strictly serial dispatch. Must be a positive integer.
3062
+ */
3063
+ maxParallelSubCalls?: number
3064
+ }
3065
+
3066
+ /** How the registry presents its tools to the model (see {@link Config.mode}). */
3067
+ export type ToolPresentationMode = 'native' | 'ptc' | 'both'
3068
+ ```
3069
+
3070
+ Source: [`packages/core/tools/src/index.ts:647`](../packages/core/tools/src/index.ts)
3071
+
3072
+ <a id="deepseek-aidsh-typert-loader"></a>
3073
+
3074
+ ## `@deepseek-ai/dsh-typert-loader`
3075
+
3076
+ Requires: `typert` · `loader`
3077
+
3078
+ ```ts config-catalog
3079
+ /** Additional package artifacts whose owning plugins are nested behind another Loader entry. */
3080
+ export interface Config {
3081
+ /** Exact npm package names that must resolve and export `./typert`. */
3082
+ packages?: string[]
3083
+ }
3084
+ ```
3085
+
3086
+ Source: [`packages/typert/loader/src/index.ts:47`](../packages/typert/loader/src/index.ts)
3087
+
3088
+ <a id="deepseek-aidsh-user-approval"></a>
3089
+
3090
+ ## `@deepseek-ai/dsh-user-approval`
3091
+
3092
+ ```ts config-catalog
3093
+ /** Plugin config. All optional — `static Config` supplies the defaults. */
3094
+ export interface Config {
3095
+ /**
3096
+ * The deployment's default {@link ApprovalPolicy} for sessions without an
3097
+ * `approval/policy` override — `'ask'` delegates to the composed answerers
3098
+ * (fail-closed with none); `'never'` auto-rejects every ask without
3099
+ * prompting (the deterministic CI/unattended stance).
3100
+ */
3101
+ readonly policy?: ApprovalPolicy
3102
+ }
3103
+
3104
+ /**
3105
+ * A session's approval policy — what happens to an {@link ApprovalService}
3106
+ * ask BEFORE any interactive answerer sees it:
3107
+ *
3108
+ * - `'ask'` (the default) — delegate to the composed answerers; with none
3109
+ * composed the chain falls through to the fail-closed `'unavailable'`.
3110
+ * - `'never'` — never prompt anyone: every ask resolves `'rejected'`
3111
+ * deterministically. The strict headless stance (CI, unattended runs) and
3112
+ * the policy whose outcome is knowable without asking.
3113
+ */
3114
+ export type ApprovalPolicy = 'ask' | 'never'
3115
+ ```
3116
+
3117
+ Source: [`packages/interaction/user-approval/src/index.ts:127`](../packages/interaction/user-approval/src/index.ts)
3118
+
3119
+ <a id="deepseek-aidsh-web"></a>
3120
+
3121
+ ## `@deepseek-ai/dsh-web`
3122
+
3123
+ ```ts config-catalog
3124
+ /**
3125
+ * Config for the web seam. `searchProvider` / `fetchProvider` pin which provider
3126
+ * wins for each capability; both are optional (a single registered usable
3127
+ * provider auto-selects). Operational overrides such as environment variables
3128
+ * must feed these same fields rather than introduce a hidden priority chain.
3129
+ */
3130
+ export interface WebRuntimeConfig {
3131
+ /** Explicit search provider id. Omitted = auto-select when exactly one usable. */
3132
+ readonly searchProvider?: string
3133
+ /** Explicit fetch provider id. Omitted = auto-select when exactly one usable. */
3134
+ readonly fetchProvider?: string
3135
+ }
3136
+ ```
3137
+
3138
+ Source: [`packages/web/web/src/index.ts:55`](../packages/web/web/src/index.ts)
3139
+
3140
+ <a id="deepseek-aidsh-web-app"></a>
3141
+
3142
+ ## `@deepseek-ai/dsh-web-app`
3143
+
3144
+ Requires: `webServer`
3145
+
3146
+ ```ts config-catalog
3147
+ /** Plugin config: composed deployment settings plus per-invocation command-line values. */
3148
+ export interface Config {
3149
+ /** Permit default-browser handoff after the Loader tree settles; an SSH launch suppresses it. */
3150
+ openBrowser: boolean
3151
+ /** Print the URL line on activation; a non-interactive layer can turn it off. */
3152
+ printUrl: boolean
3153
+ /**
3154
+ * Register the model-visible surface context (the `app:web-surface` prompt
3155
+ * section and the `DSH_WEB_URL` bash variable). A one-shot non-interactive
3156
+ * layer can turn it off when its user is not in the GUI, so the
3157
+ * orientation text would be false.
3158
+ */
3159
+ surfaceContext: boolean
3160
+ /** Explicit `--trusted-host` authorities from this invocation. */
3161
+ trustedHosts: string[]
3162
+ }
3163
+ ```
3164
+
3165
+ Source: [`packages/bundle/web-app/src/index.ts:44`](../packages/bundle/web-app/src/index.ts)
3166
+
3167
+ <a id="deepseek-aidsh-web-fetch-http"></a>
3168
+
3169
+ ## `@deepseek-ai/dsh-web-fetch-http`
3170
+
3171
+ Requires: `web`
3172
+
3173
+ ```ts config-catalog
3174
+ /** Plugin config: the provider's transport and size limits plus its `User-Agent` (all defaulted). */
3175
+ export interface Config {
3176
+ /** Maximum response body size in bytes. */
3177
+ maxResponseBytes?: number
3178
+ /** Maximum decoded body length in characters. */
3179
+ maxBodyChars?: number
3180
+ /** Default fetch timeout in milliseconds, within Node's timer range. */
3181
+ timeoutMs?: number
3182
+ /** Maximum number of same-origin redirect hops to follow. */
3183
+ maxRedirects?: number
3184
+ /** `User-Agent` header sent on every request. */
3185
+ userAgent?: string
3186
+ }
3187
+ ```
3188
+
3189
+ Source: [`packages/web/web-fetch-http/src/index.ts:32`](../packages/web/web-fetch-http/src/index.ts)
3190
+
3191
+ <a id="deepseek-aidsh-web-search-deepseek"></a>
3192
+
3193
+ ## `@deepseek-ai/dsh-web-search-deepseek`
3194
+
3195
+ Requires: `web`
3196
+
3197
+ ```ts config-catalog
3198
+ /** Plugin config (all optional — `apply` fills env-var and constant defaults). */
3199
+ export interface Config {
3200
+ /** Literal DeepSeek API key; prefer {@link apiKeyEnv} so no secret enters configuration files. */
3201
+ apiKey?: string
3202
+ /** Credential reference resolved for each search; defaults to `DEEPSEEK_API_KEY`. */
3203
+ apiKeyEnv?: string
3204
+ /** Anthropic-compatible endpoint base; `/messages` is appended. */
3205
+ baseURL?: string
3206
+ /** Anthropic-format model name. Defaults to `deepseek-v4-flash`. */
3207
+ model?: string
3208
+ /** `anthropic-version` header value. Defaults to `2023-06-01`. */
3209
+ apiVersion?: string
3210
+ /** Upper bound on generated tokens for the Messages request. Defaults to 4096. */
3211
+ maxTokens?: number
3212
+ /** Maximum `web_search` server-tool uses per request. Defaults to 5. */
3213
+ maxUses?: number
3214
+ }
3215
+ ```
3216
+
3217
+ Source: [`packages/web/web-search-deepseek/src/index.ts:46`](../packages/web/web-search-deepseek/src/index.ts)
3218
+
3219
+ <a id="deepseek-aidsh-web-search-exa"></a>
3220
+
3221
+ ## `@deepseek-ai/dsh-web-search-exa`
3222
+
3223
+ Requires: `web`
3224
+
3225
+ ```ts config-catalog
3226
+ /** Plugin config (all optional — `apply` fills env-var and constant defaults). */
3227
+ export interface Config {
3228
+ /** Exa API key. Falls back to `$EXA_API_KEY`. Empty → provider unavailable. */
3229
+ apiKey?: string
3230
+ /** Endpoint base; `/search` is appended. Defaults to the public API. */
3231
+ baseURL?: string
3232
+ /** Retrieval mode sent as Exa's `type`. Defaults to `auto`. */
3233
+ searchType?: 'auto' | 'keyword' | 'neural'
3234
+ /** Default result count when a request carries no `maxResults`. Omitted = none. */
3235
+ numResults?: number
3236
+ /** Highlight sentences requested per result. Defaults to 1. */
3237
+ highlightsPerResult?: number
3238
+ }
3239
+ ```
3240
+
3241
+ Source: [`packages/web/web-search-exa/src/index.ts:35`](../packages/web/web-search-exa/src/index.ts)
3242
+
3243
+ <a id="deepseek-aidsh-web-search-perplexity"></a>
3244
+
3245
+ ## `@deepseek-ai/dsh-web-search-perplexity`
3246
+
3247
+ Requires: `web`
3248
+
3249
+ ```ts config-catalog
3250
+ /** Plugin config (all optional — `apply` fills env-var and constant defaults). */
3251
+ export interface Config {
3252
+ /** Perplexity API key. Falls back to `$PERPLEXITY_API_KEY`. Empty → unavailable. */
3253
+ apiKey?: string
3254
+ /** Endpoint base; `/chat/completions` is appended. Defaults to the public API. */
3255
+ baseURL?: string
3256
+ /** Search model name. Defaults to `sonar`. */
3257
+ model?: string
3258
+ /** Upper bound on generated answer tokens. Defaults to 1024. */
3259
+ maxTokens?: number
3260
+ /** Recency window sent as `search_recency_filter`. Omitted = no filter. */
3261
+ searchRecency?: 'day' | 'week' | 'month' | 'year'
3262
+ }
3263
+ ```
3264
+
3265
+ Source: [`packages/web/web-search-perplexity/src/index.ts:30`](../packages/web/web-search-perplexity/src/index.ts)
3266
+
3267
+ <a id="deepseek-aidsh-webhook-github"></a>
3268
+
3269
+ ## `@deepseek-ai/dsh-webhook-github`
3270
+
3271
+ Requires: `webServer` · `webhookRuntime` · `credentials`
3272
+
3273
+ ```ts config-catalog
3274
+ /** Required GitHub ingress configuration. */
3275
+ export interface Config {
3276
+ /** Adapter instance name carried to rules. */
3277
+ readonly source: string
3278
+ /** Exact absolute route path. */
3279
+ readonly path: string
3280
+ /** Credential reference containing the shared webhook secret. */
3281
+ readonly secretEnv: string
3282
+ /** Positive raw body ceiling in bytes. */
3283
+ readonly maxBodyBytes: number
3284
+ }
3285
+ ```
3286
+
3287
+ Source: [`packages/webhook/webhook-github/src/index.ts:17`](../packages/webhook/webhook-github/src/index.ts)
3288
+
3289
+ <a id="deepseek-aidsh-workflow-worker-thread"></a>
3290
+
3291
+ ## `@deepseek-ai/dsh-workflow-worker-thread`
3292
+
3293
+ Requires: `subagents`
3294
+
3295
+ ```ts config-catalog
3296
+ /** Plugin config (all optional — `static Config` supplies the defaults). */
3297
+ export interface Config {
3298
+ /** The `ctx.subagents` provider children run on (default `spawn`). */
3299
+ provider?: string
3300
+ /** Concurrent `agent()` ceiling; `0` (the default) auto-resolves to `min(16, max(1, cores - 2))`. */
3301
+ maxConcurrentAgents?: number
3302
+ /** Total `agent()` calls one run may start — the runaway-loop backstop (default 1000). */
3303
+ maxTotalAgents?: number
3304
+ /** Items accepted by a single `parallel()`/`pipeline()` call (default 4096). */
3305
+ maxItemsPerCall?: number
3306
+ /** vm timeout for the script's initial synchronous slice, inside the worker (default 5000 ms). */
3307
+ syncTimeoutMs?: number
3308
+ /**
3309
+ * How long after a cancellation an unsettled script may keep running before
3310
+ * the run force-settles `cancelled` and its worker is TERMINATED (default
3311
+ * 5000 ms); also bounds `dispose()`.
3312
+ */
3313
+ disposeGraceMs?: number
3314
+ }
3315
+ ```
3316
+
3317
+ Source: [`packages/workflow/workflow-worker-thread/src/index.ts:32`](../packages/workflow/workflow-worker-thread/src/index.ts)
3318
+
3319
+ ## Loadable plugins with no config
3320
+
3321
+ These load from a `cordis.yml` entry with no `config:` block; they declare no configuration API.
3322
+
3323
+ - `@deepseek-ai/dsh-acp-app` — requires `cmdlineArgs` ([`packages/bundle/acp-app/src/index.ts`](../packages/bundle/acp-app/src/index.ts))
3324
+ - `@deepseek-ai/dsh-agent` ([`packages/core/agent/src/index.ts`](../packages/core/agent/src/index.ts))
3325
+ - `@deepseek-ai/dsh-api-remotes` — requires `typertGateway` ([`packages/api/remotes/src/index.ts`](../packages/api/remotes/src/index.ts))
3326
+ - `@deepseek-ai/dsh-api-workspace-controller` — requires `typert` · `workspaceRegistry` ([`packages/api/workspace-controller/src/index.ts`](../packages/api/workspace-controller/src/index.ts))
3327
+ - `@deepseek-ai/dsh-authorization` — requires `credentials` ([`packages/credentials/authorization/src/index.ts`](../packages/credentials/authorization/src/index.ts))
3328
+ - `@deepseek-ai/dsh-client-file-upload` — requires `agents` · `attachments` · `commands` · `connection` ([`packages/client/file-upload/src/index.ts`](../packages/client/file-upload/src/index.ts))
3329
+ - `@deepseek-ai/dsh-client-locale` ([`packages/client/locale/src/index.ts`](../packages/client/locale/src/index.ts))
3330
+ - `@deepseek-ai/dsh-client-modules` — requires `webServer` · `loader` ([`packages/client/modules/src/index.ts`](../packages/client/modules/src/index.ts))
3331
+ - `@deepseek-ai/dsh-client-ui-agent-preset` ([`packages/client/ui-agent-preset/src/index.ts`](../packages/client/ui-agent-preset/src/index.ts))
3332
+ - `@deepseek-ai/dsh-client-ui-approval` ([`packages/client/ui-approval/src/index.ts`](../packages/client/ui-approval/src/index.ts))
3333
+ - `@deepseek-ai/dsh-client-ui-attachment` ([`packages/client/ui-attachment/src/index.ts`](../packages/client/ui-attachment/src/index.ts))
3334
+ - `@deepseek-ai/dsh-client-ui-brand-official` ([`packages/client/ui-brand-official/src/index.ts`](../packages/client/ui-brand-official/src/index.ts))
3335
+ - `@deepseek-ai/dsh-client-ui-chat` ([`packages/client/ui-chat/src/index.ts`](../packages/client/ui-chat/src/index.ts))
3336
+ - `@deepseek-ai/dsh-client-ui-commands` ([`packages/client/ui-commands/src/index.ts`](../packages/client/ui-commands/src/index.ts))
3337
+ - `@deepseek-ai/dsh-client-ui-conversation` ([`packages/client/ui-conversation/src/index.ts`](../packages/client/ui-conversation/src/index.ts))
3338
+ - `@deepseek-ai/dsh-client-ui-cordis` ([`packages/extensions/ui-cordis/src/index.ts`](../packages/extensions/ui-cordis/src/index.ts))
3339
+ - `@deepseek-ai/dsh-client-ui-deliverables` — requires `systemPrompt` ([`packages/client/ui-deliverables/src/index.ts`](../packages/client/ui-deliverables/src/index.ts))
3340
+ - `@deepseek-ai/dsh-client-ui-directory-picker-browse` ([`packages/client/ui-directory-picker-browse/src/index.ts`](../packages/client/ui-directory-picker-browse/src/index.ts))
3341
+ - `@deepseek-ai/dsh-client-ui-directory-picker-native` ([`packages/client/ui-directory-picker-native/src/index.ts`](../packages/client/ui-directory-picker-native/src/index.ts))
3342
+ - `@deepseek-ai/dsh-client-ui-goal` ([`packages/client/ui-goal/src/index.ts`](../packages/client/ui-goal/src/index.ts))
3343
+ - `@deepseek-ai/dsh-client-ui-input-trigger` ([`packages/client/ui-input-trigger/src/index.ts`](../packages/client/ui-input-trigger/src/index.ts))
3344
+ - `@deepseek-ai/dsh-client-ui-jobs` ([`packages/client/ui-jobs/src/index.ts`](../packages/client/ui-jobs/src/index.ts))
3345
+ - `@deepseek-ai/dsh-client-ui-layout` ([`packages/client/ui-layout/src/index.ts`](../packages/client/ui-layout/src/index.ts))
3346
+ - `@deepseek-ai/dsh-client-ui-message-feedback` ([`packages/client/ui-message-feedback/src/index.ts`](../packages/client/ui-message-feedback/src/index.ts))
3347
+ - `@deepseek-ai/dsh-client-ui-model-selection` ([`packages/client/ui-model-selection/src/index.ts`](../packages/client/ui-model-selection/src/index.ts))
3348
+ - `@deepseek-ai/dsh-client-ui-permission-presets` ([`packages/client/ui-permission-presets/src/index.ts`](../packages/client/ui-permission-presets/src/index.ts))
3349
+ - `@deepseek-ai/dsh-client-ui-plan` ([`packages/client/ui-plan/src/index.ts`](../packages/client/ui-plan/src/index.ts))
3350
+ - `@deepseek-ai/dsh-client-ui-reference` ([`packages/client/ui-reference/src/index.ts`](../packages/client/ui-reference/src/index.ts))
3351
+ - `@deepseek-ai/dsh-client-ui-renderer` ([`packages/client/ui-renderer/src/index.ts`](../packages/client/ui-renderer/src/index.ts))
3352
+ - `@deepseek-ai/dsh-client-ui-schedule` ([`packages/client/ui-schedule/src/index.ts`](../packages/client/ui-schedule/src/index.ts))
3353
+ - `@deepseek-ai/dsh-client-ui-session` ([`packages/client/ui-session/src/index.ts`](../packages/client/ui-session/src/index.ts))
3354
+ - `@deepseek-ai/dsh-client-ui-settings` ([`packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts))
3355
+ - `@deepseek-ai/dsh-client-ui-settings-general` ([`packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts))
3356
+ - `@deepseek-ai/dsh-client-ui-settings-models` ([`packages/client/ui-settings-models/src/index.ts`](../packages/client/ui-settings-models/src/index.ts))
3357
+ - `@deepseek-ai/dsh-client-ui-settings-plugin-inventory` ([`packages/client/ui-settings-plugin-inventory/src/index.ts`](../packages/client/ui-settings-plugin-inventory/src/index.ts))
3358
+ - `@deepseek-ai/dsh-client-ui-settings-plugins` ([`packages/client/ui-settings-plugins/src/index.ts`](../packages/client/ui-settings-plugins/src/index.ts))
3359
+ - `@deepseek-ai/dsh-client-ui-sidebar` ([`packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts))
3360
+ - `@deepseek-ai/dsh-client-ui-skill` ([`packages/client/ui-skill/src/index.ts`](../packages/client/ui-skill/src/index.ts))
3361
+ - `@deepseek-ai/dsh-client-ui-subagent` ([`packages/client/ui-subagent/src/index.ts`](../packages/client/ui-subagent/src/index.ts))
3362
+ - `@deepseek-ai/dsh-client-ui-theme` ([`packages/client/ui-theme/src/index.ts`](../packages/client/ui-theme/src/index.ts))
3363
+ - `@deepseek-ai/dsh-client-ui-tool` ([`packages/client/ui-tool/src/index.ts`](../packages/client/ui-tool/src/index.ts))
3364
+ - `@deepseek-ai/dsh-client-ui-trajectory` ([`packages/client/ui-trajectory/src/index.ts`](../packages/client/ui-trajectory/src/index.ts))
3365
+ - `@deepseek-ai/dsh-client-ui-user-questions` ([`packages/client/ui-user-questions/src/index.ts`](../packages/client/ui-user-questions/src/index.ts))
3366
+ - `@deepseek-ai/dsh-client-ui-workflow-run` ([`packages/client/ui-workflow-run/src/index.ts`](../packages/client/ui-workflow-run/src/index.ts))
3367
+ - `@deepseek-ai/dsh-client-ui-workspace` ([`packages/client/ui-workspace/src/index.ts`](../packages/client/ui-workspace/src/index.ts))
3368
+ - `@deepseek-ai/dsh-command-compact` — requires `commands` · `compaction` ([`packages/compaction/command-compact/src/index.ts`](../packages/compaction/command-compact/src/index.ts))
3369
+ - `@deepseek-ai/dsh-command-feedback` — requires `commands` ([`packages/feedback/command-feedback/src/index.ts`](../packages/feedback/command-feedback/src/index.ts))
3370
+ - `@deepseek-ai/dsh-command-goal` — requires `commands` · `goals` ([`packages/goal/command-goal/src/index.ts`](../packages/goal/command-goal/src/index.ts))
3371
+ - `@deepseek-ai/dsh-commands` ([`packages/interaction/commands/src/index.ts`](../packages/interaction/commands/src/index.ts))
3372
+ - `@deepseek-ai/dsh-cordis-client-runner` ([`packages/extensions/cordis-client-runner/src/index.ts`](../packages/extensions/cordis-client-runner/src/index.ts))
3373
+ - `@deepseek-ai/dsh-deepseek-llm-api-extensions` ([`packages/llm/deepseek-llm-api-extensions/src/index.ts`](../packages/llm/deepseek-llm-api-extensions/src/index.ts))
3374
+ - `@deepseek-ai/dsh-experimental-client-ui-agent-team` ([`packages/experimental/client-ui-agent-team/src/index.ts`](../packages/experimental/client-ui-agent-team/src/index.ts))
3375
+ - `@deepseek-ai/dsh-fs-e2b` — requires `e2b` ([`packages/e2b/fs-e2b/src/index.ts`](../packages/e2b/fs-e2b/src/index.ts))
3376
+ - `@deepseek-ai/dsh-fs-observation-policy` ([`packages/fs/fs-observation-policy/src/index.ts`](../packages/fs/fs-observation-policy/src/index.ts))
3377
+ - `@deepseek-ai/dsh-goal-round-driver` — requires `agents` · `goals` · `sessions` ([`packages/goal/goal-round-driver/src/index.ts`](../packages/goal/goal-round-driver/src/index.ts))
3378
+ - `@deepseek-ai/dsh-host-directory-picker-auto` — requires `webServer` · `loader` ([`packages/host/directory-picker-auto/src/index.ts`](../packages/host/directory-picker-auto/src/index.ts))
3379
+ - `@deepseek-ai/dsh-host-directory-picker-native` ([`packages/host/directory-picker-native/src/index.ts`](../packages/host/directory-picker-native/src/index.ts))
3380
+ - `@deepseek-ai/dsh-host-plugin-inventory` — requires `loader` ([`packages/host/plugin-inventory/src/index.ts`](../packages/host/plugin-inventory/src/index.ts))
3381
+ - `@deepseek-ai/dsh-llm` ([`packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts))
3382
+ - `@deepseek-ai/dsh-lsp` ([`packages/lsp/lsp/src/index.ts`](../packages/lsp/lsp/src/index.ts))
3383
+ - `@deepseek-ai/dsh-schedule` — requires `agents` · `sessions` · `tools` · `sessionPersistence` ([`packages/schedule/schedule/src/index.ts`](../packages/schedule/schedule/src/index.ts))
3384
+ - `@deepseek-ai/dsh-session` ([`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts))
3385
+ - `@deepseek-ai/dsh-session-checkpoint-policy` — requires `llm` · `sessionPersistence` · `sessions` · `tools` ([`packages/session/session-checkpoint-policy/src/index.ts`](../packages/session/session-checkpoint-policy/src/index.ts))
3386
+ - `@deepseek-ai/dsh-session-projection` ([`packages/session/session-projection/src/index.ts`](../packages/session/session-projection/src/index.ts))
3387
+ - `@deepseek-ai/dsh-session-stats` — requires `sessionProjections` ([`packages/session/session-stats/src/index.ts`](../packages/session/session-stats/src/index.ts))
3388
+ - `@deepseek-ai/dsh-session-turn-outline` — requires `sessionProjections` ([`packages/session/session-turn-outline/src/index.ts`](../packages/session/session-turn-outline/src/index.ts))
3389
+ - `@deepseek-ai/dsh-skill-badge` — requires `skills` ([`packages/skill/skill-badge/src/index.ts`](../packages/skill/skill-badge/src/index.ts))
3390
+ - `@deepseek-ai/dsh-storage` ([`packages/storage/storage/src/index.ts`](../packages/storage/storage/src/index.ts))
3391
+ - `@deepseek-ai/dsh-subagent` ([`packages/subagent/subagent/src/index.ts`](../packages/subagent/subagent/src/index.ts))
3392
+ - `@deepseek-ai/dsh-subprocess-local` ([`packages/subprocess/subprocess-local/src/index.ts`](../packages/subprocess/subprocess-local/src/index.ts))
3393
+ - `@deepseek-ai/dsh-terminal` ([`packages/terminal/terminal/src/index.ts`](../packages/terminal/terminal/src/index.ts))
3394
+ - `@deepseek-ai/dsh-tool-ask-user` — requires `tools` · `userQuestions` ([`packages/interaction/tool-ask-user/src/index.ts`](../packages/interaction/tool-ask-user/src/index.ts))
3395
+ - `@deepseek-ai/dsh-tool-call-timeout-policy` — requires `tools` ([`packages/guard/timeout-policy/src/index.ts`](../packages/guard/timeout-policy/src/index.ts))
3396
+ - `@deepseek-ai/dsh-tool-cordis` — requires `tools` · `systemPrompt` · `dynamicCordisRunner` · `cordisInspect` ([`packages/extensions/tool-cordis/src/index.ts`](../packages/extensions/tool-cordis/src/index.ts))
3397
+ - `@deepseek-ai/dsh-tool-subagent-control` — requires `tools` · `subagents` ([`packages/subagent/tool-subagent-control/src/index.ts`](../packages/subagent/tool-subagent-control/src/index.ts))
3398
+ - `@deepseek-ai/dsh-user-questions` ([`packages/interaction/user-questions/src/index.ts`](../packages/interaction/user-questions/src/index.ts))
3399
+ - `@deepseek-ai/dsh-webhook` — requires `agents` · `agentDefaultModel` · `agentPresets` · `permissionPresets` · `sessionTitle` · `workspaceRegistry` ([`packages/webhook/webhook/src/index.ts`](../packages/webhook/webhook/src/index.ts))
3400
+ - `@deepseek-ai/dsh-workspace` — requires `storageDomain` · `sessionPersistence` ([`packages/workspace/workspace/src/index.ts`](../packages/workspace/workspace/src/index.ts))
3401
+
3402
+ ## Seam packages (not directly loadable)
3403
+
3404
+ Abstract service classes — a deployment loads a concrete implementation package instead ([capability seams](../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md)).
3405
+
3406
+ - `@deepseek-ai/dsh-attachment` — abstract `AttachmentStore` ([`packages/attachment/attachment/src/index.ts`](../packages/attachment/attachment/src/index.ts))
3407
+ - `@deepseek-ai/dsh-code-runtime` — abstract `CodeRuntime` ([`packages/code-runtime/code-runtime/src/index.ts`](../packages/code-runtime/code-runtime/src/index.ts))
3408
+ - `@deepseek-ai/dsh-compaction` — abstract `CompactionEngine` ([`packages/compaction/compaction/src/index.ts`](../packages/compaction/compaction/src/index.ts))
3409
+ - `@deepseek-ai/dsh-credentials` — abstract `CredentialProvider` ([`packages/credentials/credentials/src/index.ts`](../packages/credentials/credentials/src/index.ts))
3410
+ - `@deepseek-ai/dsh-file-reference` — abstract `FileReferenceService` ([`packages/context/file-reference/src/index.ts`](../packages/context/file-reference/src/index.ts))
3411
+ - `@deepseek-ai/dsh-fs` — abstract `FileSystem` ([`packages/fs/fs/src/index.ts`](../packages/fs/fs/src/index.ts))
3412
+ - `@deepseek-ai/dsh-host-directory-picker` — abstract `DirectoryPicker` ([`packages/host/directory-picker/src/index.ts`](../packages/host/directory-picker/src/index.ts))
3413
+ - `@deepseek-ai/dsh-jobs` — abstract `JobRegistry` ([`packages/jobs/jobs/src/index.ts`](../packages/jobs/jobs/src/index.ts))
3414
+ - `@deepseek-ai/dsh-sandbox` — abstract `SandboxProvider` ([`packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts))
3415
+ - `@deepseek-ai/dsh-session-persistence` — abstract `SessionPersistence` ([`packages/session/session-persistence/src/index.ts`](../packages/session/session-persistence/src/index.ts))
3416
+ - `@deepseek-ai/dsh-session-query` — abstract `SessionQueryEngine` ([`packages/session-query/session-query/src/index.ts`](../packages/session-query/session-query/src/index.ts))
3417
+ - `@deepseek-ai/dsh-settings` — abstract `SettingsProvider` ([`packages/settings/settings/src/index.ts`](../packages/settings/settings/src/index.ts))
3418
+ - `@deepseek-ai/dsh-shell` — abstract `ShellExecutor` ([`packages/shell/shell/src/index.ts`](../packages/shell/shell/src/index.ts))
3419
+ - `@deepseek-ai/dsh-spill` — abstract `SpillStore` ([`packages/spill/spill/src/index.ts`](../packages/spill/spill/src/index.ts))
3420
+ - `@deepseek-ai/dsh-subprocess` — abstract `SubprocessRuntime` ([`packages/subprocess/subprocess/src/index.ts`](../packages/subprocess/subprocess/src/index.ts))
3421
+ - `@deepseek-ai/dsh-workflow` — abstract `WorkflowEngine` ([`packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts))
3422
+
3423
+ ## Library packages (no plugin entry)
3424
+
3425
+ Imported as libraries by other packages; a `cordis.yml` cannot load them.
3426
+
3427
+ - `@deepseek-ai/dsh-agent-loop-testkit` ([`packages/test-support/agent-loop-testkit/src/index.ts`](../packages/test-support/agent-loop-testkit/src/index.ts))
3428
+ - `@deepseek-ai/dsh-anonymous-user-id` ([`packages/identity/anonymous-user-id/src/index.ts`](../packages/identity/anonymous-user-id/src/index.ts))
3429
+ - `@deepseek-ai/dsh-app-boot` ([`packages/boot/app-boot/src/index.ts`](../packages/boot/app-boot/src/index.ts))
3430
+ - `@deepseek-ai/dsh-atomic-write` ([`packages/util/atomic-write/src/index.ts`](../packages/util/atomic-write/src/index.ts))
3431
+ - `@deepseek-ai/dsh-base` ([`packages/bundle/base/src/index.ts`](../packages/bundle/base/src/index.ts))
3432
+ - `@deepseek-ai/dsh-brand` ([`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts))
3433
+ - `@deepseek-ai/dsh-client-store` ([`packages/client/store/src/index.ts`](../packages/client/store/src/index.ts))
3434
+ - `@deepseek-ai/dsh-client-test-runtime` ([`packages/test-support/client-runtime/src/index.ts`](../packages/test-support/client-runtime/src/index.ts))
3435
+ - `@deepseek-ai/dsh-client-ui-primitives` ([`packages/client/ui-primitives/src/index.ts`](../packages/client/ui-primitives/src/index.ts))
3436
+ - `@deepseek-ai/dsh-client-ui-slots` ([`packages/client/ui-slots/src/index.ts`](../packages/client/ui-slots/src/index.ts))
3437
+ - `@deepseek-ai/dsh-client-web` ([`packages/client/web/src/index.ts`](../packages/client/web/src/index.ts))
3438
+ - `@deepseek-ai/dsh-cmdline` ([`packages/boot/cmdline/src/index.ts`](../packages/boot/cmdline/src/index.ts))
3439
+ - `@deepseek-ai/dsh-deque` ([`packages/util/deque/src/index.ts`](../packages/util/deque/src/index.ts))
3440
+ - `@deepseek-ai/dsh-experimental-agent-team-profile` ([`packages/experimental/agent-team-profile/src/index.ts`](../packages/experimental/agent-team-profile/src/index.ts))
3441
+ - `@deepseek-ai/dsh-experimental-agent-team-web-profile` ([`packages/experimental/agent-team-web-profile/src/index.ts`](../packages/experimental/agent-team-web-profile/src/index.ts))
3442
+ - `@deepseek-ai/dsh-experimental-webworker-packer` ([`packages/experimental/webworker-packer/src/index.ts`](../packages/experimental/webworker-packer/src/index.ts))
3443
+ - `@deepseek-ai/dsh-experimental-webworker-runtime` ([`packages/experimental/webworker-runtime/src/index.ts`](../packages/experimental/webworker-runtime/src/index.ts))
3444
+ - `@deepseek-ai/dsh-home-paths` ([`packages/util/home-paths/src/index.ts`](../packages/util/home-paths/src/index.ts))
3445
+ - `@deepseek-ai/dsh-hook-protocol` ([`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts))
3446
+ - `@deepseek-ai/dsh-http-proxy` ([`packages/util/http-proxy/src/index.ts`](../packages/util/http-proxy/src/index.ts))
3447
+ - `@deepseek-ai/dsh-launch-environment` ([`packages/util/launch-environment/src/index.ts`](../packages/util/launch-environment/src/index.ts))
3448
+ - `@deepseek-ai/dsh-llm-mock-server` ([`packages/test-support/llm-mock-server/src/index.ts`](../packages/test-support/llm-mock-server/src/index.ts))
3449
+ - `@deepseek-ai/dsh-loader-smoke` ([`packages/test-support/loader-smoke/src/index.ts`](../packages/test-support/loader-smoke/src/index.ts))
3450
+ - `@deepseek-ai/dsh-native-command` ([`packages/util/native-command/src/index.ts`](../packages/util/native-command/src/index.ts))
3451
+ - `@deepseek-ai/dsh-output-retention` ([`packages/util/output-retention/src/index.ts`](../packages/util/output-retention/src/index.ts))
3452
+ - `@deepseek-ai/dsh-sandbox-windows-acl` ([`packages/sandbox/sandbox-windows-acl/src/index.ts`](../packages/sandbox/sandbox-windows-acl/src/index.ts))
3453
+ - `@deepseek-ai/dsh-scope` ([`packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts))
3454
+ - `@deepseek-ai/dsh-sdk-client` ([`packages/sdk/client/src/index.ts`](../packages/sdk/client/src/index.ts))
3455
+ - `@deepseek-ai/dsh-sdk-minimal` ([`packages/bundle/sdk-minimal/src/index.ts`](../packages/bundle/sdk-minimal/src/index.ts))
3456
+ - `@deepseek-ai/dsh-sdk-protocol` ([`packages/sdk/protocol/src/index.ts`](../packages/sdk/protocol/src/index.ts))
3457
+ - `@deepseek-ai/dsh-session-format` ([`packages/session/session-format/src/index.ts`](../packages/session/session-format/src/index.ts))
3458
+ - `@deepseek-ai/dsh-session-format-catalog` ([`packages/session/session-format-catalog/src/index.ts`](../packages/session/session-format-catalog/src/index.ts))
3459
+ - `@deepseek-ai/dsh-session-format-v0-to-v1` ([`packages/session/session-format-v0-to-v1/src/index.ts`](../packages/session/session-format-v0-to-v1/src/index.ts))
3460
+ - `@deepseek-ai/dsh-session-format-v1-to-v2` ([`packages/session/session-format-v1-to-v2/src/index.ts`](../packages/session/session-format-v1-to-v2/src/index.ts))
3461
+ - `@deepseek-ai/dsh-session-snapshot` ([`packages/test-support/session-snapshot/src/index.ts`](../packages/test-support/session-snapshot/src/index.ts))
3462
+ - `@deepseek-ai/dsh-session-telemetry` ([`packages/session/session-telemetry/src/index.ts`](../packages/session/session-telemetry/src/index.ts))
3463
+ - `@deepseek-ai/dsh-session-title-llm` ([`packages/session/session-title-llm/src/index.ts`](../packages/session/session-title-llm/src/index.ts))
3464
+ - `@deepseek-ai/dsh-subagent-in-process-driver` ([`packages/subagent/subagent-in-process-driver/src/index.ts`](../packages/subagent/subagent-in-process-driver/src/index.ts))
3465
+ - `@deepseek-ai/dsh-timeout` ([`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts))
3466
+ - `@deepseek-ai/dsh-typert-generator` ([`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts))
3467
+ - `@deepseek-ai/dsh-typert-protocol` ([`packages/typert/protocol/src/index.ts`](../packages/typert/protocol/src/index.ts))
3468
+ - `@deepseek-ai/dsh-typert-registry` ([`packages/typert/registry/src/index.ts`](../packages/typert/registry/src/index.ts))
3469
+ - `@deepseek-ai/dsh-util-crypto` ([`packages/util/crypto/src/index.ts`](../packages/util/crypto/src/index.ts))
3470
+ - `@deepseek-ai/dsh-util-time` ([`packages/util/time/src/index.ts`](../packages/util/time/src/index.ts))
3471
+ - `@deepseek-ai/dsh-util-values` ([`packages/util/values/src/index.ts`](../packages/util/values/src/index.ts))
3472
+ - `@deepseek-ai/dsh-util-workspace-path` ([`packages/util/workspace-path/src/index.ts`](../packages/util/workspace-path/src/index.ts))
3473
+ - `@deepseek-ai/dsh-win32-process` ([`packages/subprocess/win32-process/src/index.ts`](../packages/subprocess/win32-process/src/index.ts))