dsh-plugin-dev-kb 1.3.0 → 1.5.1

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 (631) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.en.md +6 -6
  3. package/README.md +13 -8
  4. package/kb/INDEX.md +25 -21
  5. package/kb/README.md +6 -4
  6. package/kb/extra/AGENTS.md +14 -12
  7. package/kb/extra/agent-lifecycle.md +91 -0
  8. package/kb/extra/agent-lifecycle.zh.md +93 -0
  9. package/kb/extra/api-gateway.md +172 -0
  10. package/kb/extra/api-gateway.zh.md +178 -0
  11. package/kb/extra/architecture.md +165 -0
  12. package/kb/extra/architecture.zh.md +169 -0
  13. package/kb/extra/capability-seams.md +714 -0
  14. package/kb/extra/capability-seams.zh.md +716 -0
  15. package/kb/extra/cli-help.md +203 -0
  16. package/kb/extra/cli-help.zh.md +205 -0
  17. package/kb/extra/config-catalog.md +4801 -0
  18. package/kb/extra/config-catalog.zh.md +4803 -0
  19. package/kb/extra/cookbook/adding-a-package.md +170 -0
  20. package/kb/extra/cookbook/adding-a-package.zh.md +170 -0
  21. package/kb/extra/cookbook/adding-a-plugin-preview.md +52 -0
  22. package/kb/extra/cookbook/adding-a-plugin-preview.zh.md +52 -0
  23. package/kb/extra/cookbook/adding-a-remote-api.md +2 -2
  24. package/kb/extra/cookbook/adding-a-remote-api.zh.md +2 -2
  25. package/kb/extra/cookbook/adding-a-session-format-version.md +51 -7
  26. package/kb/extra/cookbook/adding-a-session-format-version.zh.md +51 -7
  27. package/kb/extra/cookbook/adding-a-settings-card.md +72 -0
  28. package/kb/extra/cookbook/adding-a-settings-card.zh.md +72 -0
  29. package/kb/extra/cookbook/adding-a-tool.md +101 -0
  30. package/kb/extra/cookbook/adding-a-tool.zh.md +103 -0
  31. package/kb/extra/cookbook/adding-an-llm-adapter.md +43 -0
  32. package/kb/extra/cookbook/adding-an-llm-adapter.zh.md +43 -0
  33. package/kb/extra/cookbook/extension-cookbook.md +132 -0
  34. package/kb/extra/cookbook/extension-cookbook.zh.md +136 -0
  35. package/kb/extra/cookbook/reviewing-persistence-type-changes.md +122 -0
  36. package/kb/extra/cookbook/reviewing-persistence-type-changes.zh.md +122 -0
  37. package/kb/extra/cordis-api/context.md +364 -0
  38. package/kb/extra/cordis-api/context.zh.md +366 -0
  39. package/kb/extra/cordis-api/events.md +207 -0
  40. package/kb/extra/cordis-api/events.zh.md +209 -0
  41. package/kb/extra/cordis-api/fiber.md +375 -0
  42. package/kb/extra/cordis-api/fiber.zh.md +377 -0
  43. package/kb/extra/cordis-api/inherited.md +38 -0
  44. package/kb/extra/cordis-api/registry.md +152 -0
  45. package/kb/extra/cordis-api/registry.zh.md +154 -0
  46. package/kb/extra/cordis-api/service.md +102 -0
  47. package/kb/extra/cordis-api/service.zh.md +104 -0
  48. package/kb/extra/cordis-tutorial/01-first-plugin.md +95 -0
  49. package/kb/extra/cordis-tutorial/01-first-plugin.zh.md +95 -0
  50. package/kb/extra/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
  51. package/kb/extra/cordis-tutorial/02-lifecycle-and-effects.zh.md +98 -0
  52. package/kb/extra/cordis-tutorial/03-services.md +98 -0
  53. package/kb/extra/cordis-tutorial/03-services.zh.md +98 -0
  54. package/kb/extra/cordis-tutorial/04-events.md +144 -0
  55. package/kb/extra/cordis-tutorial/04-events.zh.md +144 -0
  56. package/kb/extra/cordis-tutorial/05-config.md +111 -0
  57. package/kb/extra/cordis-tutorial/05-config.zh.md +111 -0
  58. package/kb/extra/cordis-tutorial/06-composition-and-hmr.md +113 -0
  59. package/kb/extra/cordis-tutorial/06-composition-and-hmr.zh.md +113 -0
  60. package/kb/extra/cordis-tutorial/07-into-the-harness.md +108 -0
  61. package/kb/extra/cordis-tutorial/07-into-the-harness.zh.md +108 -0
  62. package/kb/extra/cordis-tutorial/index.md +60 -0
  63. package/kb/extra/cordis-tutorial/index.zh.md +62 -0
  64. package/kb/extra/deepseek-llm-api-wire-extensions.md +22 -23
  65. package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +21 -22
  66. package/kb/extra/defensive-patterns/README.md +25 -0
  67. package/kb/extra/defensive-patterns/README.zh.md +27 -0
  68. package/kb/extra/defensive-patterns/client-components.md +493 -0
  69. package/kb/extra/defensive-patterns/client-components.zh.md +495 -0
  70. package/kb/extra/defensive-patterns/conversation-and-session.md +316 -0
  71. package/kb/extra/defensive-patterns/conversation-and-session.zh.md +316 -0
  72. package/kb/extra/defensive-patterns/general.md +222 -0
  73. package/kb/extra/defensive-patterns/general.zh.md +252 -0
  74. package/kb/extra/defensive-patterns/package-surface.md +231 -0
  75. package/kb/extra/defensive-patterns/package-surface.zh.md +231 -0
  76. package/kb/extra/defensive-patterns/remote-and-api.md +115 -0
  77. package/kb/extra/defensive-patterns/remote-and-api.zh.md +115 -0
  78. package/kb/extra/development.md +55 -18
  79. package/kb/extra/development.zh.md +56 -18
  80. package/kb/extra/event-producer-consumer.md +90 -68
  81. package/kb/extra/event-producer-consumer.zh.md +91 -69
  82. package/kb/extra/experimental-persistence-catalog.md +17 -0
  83. package/kb/extra/experimental-persistence-catalog.zh.md +17 -0
  84. package/kb/extra/glossary.md +2 -1
  85. package/kb/extra/glossary.zh.md +2 -1
  86. package/kb/extra/i18n/README.md +15 -7
  87. package/kb/extra/i18n/README.zh.md +15 -7
  88. package/kb/extra/i18n/style-samples.md +2 -2
  89. package/kb/extra/i18n/terminology.md +5 -4
  90. package/kb/extra/i18n/translation-prompt.md +2 -2
  91. package/kb/extra/module-graph.md +759 -432
  92. package/kb/extra/module-graph.zh.md +759 -432
  93. package/kb/extra/persistence-catalog.md +9140 -0
  94. package/kb/extra/persistence-catalog.zh.md +9142 -0
  95. package/kb/extra/persistence-changes/2026-09-11-initial.md +280 -0
  96. package/kb/extra/persistence-changes/2026-09-11-initial.zh.md +280 -0
  97. package/kb/extra/persistence-changes/2026-09-12-auto-review-error-metadata.md +52 -0
  98. package/kb/extra/persistence-changes/2026-09-12-auto-review-error-metadata.zh.md +52 -0
  99. package/kb/extra/persistence-changes/2026-09-13-working-directory.md +48 -0
  100. package/kb/extra/persistence-changes/2026-09-13-working-directory.zh.md +48 -0
  101. package/kb/extra/persistence-changes/2026-09-14-image-offload.md +96 -0
  102. package/kb/extra/persistence-changes/2026-09-14-image-offload.zh.md +96 -0
  103. package/kb/extra/persistence-changes/2026-09-14-workspace-changes-event.md +48 -0
  104. package/kb/extra/persistence-changes/2026-09-14-workspace-changes-event.zh.md +48 -0
  105. package/kb/extra/persistence-changes/2026-09-16-session-format-v4.md +120 -0
  106. package/kb/extra/persistence-changes/2026-09-16-session-format-v4.zh.md +120 -0
  107. package/kb/extra/persistence-changes/2026-09-18-schedule-optional-title.md +48 -0
  108. package/kb/extra/persistence-changes/2026-09-18-schedule-optional-title.zh.md +48 -0
  109. package/kb/extra/persistence-changes/2026-09-19-external-subagent-catalog.md +48 -0
  110. package/kb/extra/persistence-changes/2026-09-19-external-subagent-catalog.zh.md +48 -0
  111. package/kb/extra/persistence-changes/2026-09-20-unknown-child-catalog.md +48 -0
  112. package/kb/extra/persistence-changes/2026-09-20-unknown-child-catalog.zh.md +48 -0
  113. package/kb/extra/persistence-changes/2026-09-21-user-question-reply.md +60 -0
  114. package/kb/extra/persistence-changes/2026-09-21-user-question-reply.zh.md +60 -0
  115. package/kb/extra/persistence-changes/2026-09-30-job-session-lifecycle.md +52 -0
  116. package/kb/extra/persistence-changes/2026-09-30-job-session-lifecycle.zh.md +52 -0
  117. package/kb/extra/persistence-changes/2026-10-05-ptc-operation-metadata.md +48 -0
  118. package/kb/extra/persistence-changes/2026-10-05-ptc-operation-metadata.zh.md +48 -0
  119. package/kb/extra/persistence-changes/2026-10-05-working-directory-attribution.md +60 -0
  120. package/kb/extra/persistence-changes/2026-10-05-working-directory-attribution.zh.md +60 -0
  121. package/kb/extra/persistence-changes/2026-10-07-title-reasoning-effort.md +48 -0
  122. package/kb/extra/persistence-changes/2026-10-07-title-reasoning-effort.zh.md +48 -0
  123. package/kb/extra/persistence-changes/2026-10-13-deepseek-search-thinking.md +48 -0
  124. package/kb/extra/persistence-changes/2026-10-13-deepseek-search-thinking.zh.md +48 -0
  125. package/kb/extra/persistence-changes/2026-10-13-user-rpc-principal.md +60 -0
  126. package/kb/extra/persistence-changes/2026-10-13-user-rpc-principal.zh.md +60 -0
  127. package/kb/extra/persistence-changes/README.md +90 -0
  128. package/kb/extra/persistence-changes/README.zh.md +90 -0
  129. package/kb/extra/persistence-changes/historical-formats/README.md +75 -0
  130. package/kb/extra/persistence-changes/historical-formats/README.zh.md +75 -0
  131. package/kb/extra/persistence-changes/historical-formats/v0.md +5105 -0
  132. package/kb/extra/persistence-changes/historical-formats/v0.zh.md +5105 -0
  133. package/kb/extra/persistence-changes/historical-formats/v1.md +5107 -0
  134. package/kb/extra/persistence-changes/historical-formats/v1.zh.md +5107 -0
  135. package/kb/extra/persistence-changes/historical-formats/v2.md +5362 -0
  136. package/kb/extra/persistence-changes/historical-formats/v2.zh.md +5362 -0
  137. package/kb/extra/persistence-changes/historical-formats/v3.md +5634 -0
  138. package/kb/extra/persistence-changes/historical-formats/v3.zh.md +5634 -0
  139. package/kb/extra/persistence-changes/releases/README.md +103 -0
  140. package/kb/extra/persistence-changes/releases/README.zh.md +103 -0
  141. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.1.md +201 -0
  142. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.1.zh.md +201 -0
  143. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.2.md +261 -0
  144. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.2.zh.md +261 -0
  145. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.3.md +126 -0
  146. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.3.zh.md +126 -0
  147. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.4.md +75 -0
  148. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.4.zh.md +75 -0
  149. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.5.md +75 -0
  150. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.5.zh.md +75 -0
  151. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.1.md +75 -0
  152. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.1.zh.md +75 -0
  153. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.2.md +75 -0
  154. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.2.zh.md +75 -0
  155. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.3.md +75 -0
  156. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.3.zh.md +75 -0
  157. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.5.md +75 -0
  158. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.5.zh.md +75 -0
  159. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.6.md +75 -0
  160. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.6.zh.md +75 -0
  161. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.7.md +82 -0
  162. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.7.zh.md +82 -0
  163. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.8.md +110 -0
  164. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.8.zh.md +110 -0
  165. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.1.md +82 -0
  166. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.1.zh.md +82 -0
  167. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.2.md +119 -0
  168. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.2.zh.md +119 -0
  169. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.1.md +295 -0
  170. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.1.zh.md +295 -0
  171. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.2.md +286 -0
  172. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.2.zh.md +286 -0
  173. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.3.md +75 -0
  174. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.3.zh.md +75 -0
  175. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.4.md +95 -0
  176. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.4.zh.md +95 -0
  177. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.5.md +75 -0
  178. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.5.zh.md +75 -0
  179. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-rc.1.md +75 -0
  180. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-rc.1.zh.md +75 -0
  181. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.1.md +154 -0
  182. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.1.zh.md +154 -0
  183. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.2.md +86 -0
  184. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.2.zh.md +86 -0
  185. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.1.md +139 -0
  186. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.1.zh.md +139 -0
  187. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.2.md +95 -0
  188. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.2.zh.md +95 -0
  189. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.1.md +75 -0
  190. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.1.zh.md +75 -0
  191. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.2.md +75 -0
  192. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.2.zh.md +75 -0
  193. package/kb/extra/rescope.md +1 -1
  194. package/kb/extra/rescope.zh.md +1 -1
  195. package/kb/extra/session-format-status.md +24 -8
  196. package/kb/extra/session-format-status.zh.md +24 -8
  197. package/kb/extra/subsystems/README.md +76 -0
  198. package/kb/extra/subsystems/README.zh.md +76 -0
  199. package/kb/extra/subsystems/agent-team.md +61 -37
  200. package/kb/extra/subsystems/agent-team.zh.md +61 -37
  201. package/kb/extra/subsystems/approval.md +170 -0
  202. package/kb/extra/subsystems/approval.zh.md +170 -0
  203. package/kb/extra/subsystems/attachment.md +19 -9
  204. package/kb/extra/subsystems/attachment.zh.md +19 -9
  205. package/kb/extra/subsystems/boot.md +447 -0
  206. package/kb/extra/subsystems/boot.zh.md +447 -0
  207. package/kb/extra/subsystems/browser-use.md +67 -0
  208. package/kb/extra/subsystems/browser-use.zh.md +67 -0
  209. package/kb/extra/subsystems/claude-code-mods.md +146 -0
  210. package/kb/extra/subsystems/claude-code-mods.zh.md +146 -0
  211. package/kb/extra/subsystems/client-modules.md +198 -0
  212. package/kb/extra/subsystems/client-modules.zh.md +198 -0
  213. package/kb/extra/subsystems/client-resources.md +92 -0
  214. package/kb/extra/subsystems/client-resources.zh.md +92 -0
  215. package/kb/extra/subsystems/commands.md +223 -0
  216. package/kb/extra/subsystems/commands.zh.md +223 -0
  217. package/kb/extra/subsystems/compaction.md +284 -0
  218. package/kb/extra/subsystems/compaction.zh.md +284 -0
  219. package/kb/extra/subsystems/computer-use.md +59 -0
  220. package/kb/extra/subsystems/computer-use.zh.md +59 -0
  221. package/kb/extra/subsystems/conversation.md +301 -0
  222. package/kb/extra/subsystems/conversation.zh.md +303 -0
  223. package/kb/extra/subsystems/core.md +1113 -0
  224. package/kb/extra/subsystems/core.zh.md +1125 -0
  225. package/kb/extra/subsystems/credentials.md +493 -0
  226. package/kb/extra/subsystems/credentials.zh.md +493 -0
  227. package/kb/extra/subsystems/deliverables.md +178 -0
  228. package/kb/extra/subsystems/deliverables.zh.md +178 -0
  229. package/kb/extra/subsystems/extensions.md +6 -4
  230. package/kb/extra/subsystems/extensions.zh.md +6 -4
  231. package/kb/extra/subsystems/feedback.md +4 -4
  232. package/kb/extra/subsystems/feedback.zh.md +4 -4
  233. package/kb/extra/subsystems/filesystem.md +530 -0
  234. package/kb/extra/subsystems/filesystem.zh.md +530 -0
  235. package/kb/extra/subsystems/goal.md +313 -0
  236. package/kb/extra/subsystems/goal.zh.md +313 -0
  237. package/kb/extra/subsystems/jobs.md +554 -0
  238. package/kb/extra/subsystems/jobs.zh.md +554 -0
  239. package/kb/extra/subsystems/llm-streaming.md +1196 -0
  240. package/kb/extra/subsystems/llm-streaming.zh.md +1202 -0
  241. package/kb/extra/subsystems/lsp.md +202 -0
  242. package/kb/extra/subsystems/lsp.zh.md +202 -0
  243. package/kb/extra/subsystems/mcp.md +139 -0
  244. package/kb/extra/subsystems/mcp.zh.md +139 -0
  245. package/kb/extra/subsystems/office-to-pdf.md +87 -0
  246. package/kb/extra/subsystems/office-to-pdf.zh.md +87 -0
  247. package/kb/extra/subsystems/otel.md +44 -0
  248. package/kb/extra/subsystems/otel.zh.md +44 -0
  249. package/kb/extra/subsystems/permission-presets.md +167 -0
  250. package/kb/extra/subsystems/permission-presets.zh.md +167 -0
  251. package/kb/extra/subsystems/persistence.md +418 -0
  252. package/kb/extra/subsystems/persistence.zh.md +418 -0
  253. package/kb/extra/subsystems/plan.md +87 -0
  254. package/kb/extra/subsystems/plan.zh.md +87 -0
  255. package/kb/extra/subsystems/product-telemetry.md +81 -0
  256. package/kb/extra/subsystems/product-telemetry.zh.md +81 -0
  257. package/kb/extra/subsystems/ptc-runtime.md +250 -0
  258. package/kb/extra/subsystems/ptc-runtime.zh.md +250 -0
  259. package/kb/extra/subsystems/sandbox.md +221 -0
  260. package/kb/extra/subsystems/sandbox.zh.md +221 -0
  261. package/kb/extra/subsystems/schedule.md +550 -0
  262. package/kb/extra/subsystems/schedule.zh.md +550 -0
  263. package/kb/extra/subsystems/scope.md +59 -0
  264. package/kb/extra/subsystems/scope.zh.md +61 -0
  265. package/kb/extra/subsystems/session-projection.md +356 -0
  266. package/kb/extra/subsystems/session-projection.zh.md +356 -0
  267. package/kb/extra/subsystems/session-query.md +511 -0
  268. package/kb/extra/subsystems/session-query.zh.md +511 -0
  269. package/kb/extra/subsystems/session-reference.md +224 -0
  270. package/kb/extra/subsystems/session-reference.zh.md +224 -0
  271. package/kb/extra/subsystems/session-telemetry.md +212 -0
  272. package/kb/extra/subsystems/session-telemetry.zh.md +212 -0
  273. package/kb/extra/subsystems/session-title.md +213 -0
  274. package/kb/extra/subsystems/session-title.zh.md +213 -0
  275. package/kb/extra/subsystems/session.md +1339 -0
  276. package/kb/extra/subsystems/session.zh.md +1343 -0
  277. package/kb/extra/subsystems/settings.md +155 -0
  278. package/kb/extra/subsystems/settings.zh.md +155 -0
  279. package/kb/extra/subsystems/shell.md +314 -0
  280. package/kb/extra/subsystems/shell.zh.md +314 -0
  281. package/kb/extra/subsystems/sidebar-right.md +160 -0
  282. package/kb/extra/subsystems/sidebar-right.zh.md +160 -0
  283. package/kb/extra/subsystems/skills.md +352 -0
  284. package/kb/extra/subsystems/skills.zh.md +352 -0
  285. package/kb/extra/subsystems/slots.md +200 -0
  286. package/kb/extra/subsystems/slots.zh.md +204 -0
  287. package/kb/extra/subsystems/spill.md +124 -0
  288. package/kb/extra/subsystems/spill.zh.md +124 -0
  289. package/kb/extra/subsystems/ssh.md +146 -0
  290. package/kb/extra/subsystems/ssh.zh.md +146 -0
  291. package/kb/extra/subsystems/storage.md +259 -0
  292. package/kb/extra/subsystems/storage.zh.md +259 -0
  293. package/kb/extra/subsystems/subagent.md +686 -0
  294. package/kb/extra/subsystems/subagent.zh.md +688 -0
  295. package/kb/extra/subsystems/subprocess.md +321 -0
  296. package/kb/extra/subsystems/subprocess.zh.md +321 -0
  297. package/kb/extra/subsystems/system-prompt.md +254 -0
  298. package/kb/extra/subsystems/system-prompt.zh.md +254 -0
  299. package/kb/extra/subsystems/terminal.md +184 -0
  300. package/kb/extra/subsystems/terminal.zh.md +184 -0
  301. package/kb/extra/subsystems/todo.md +3 -3
  302. package/kb/extra/subsystems/todo.zh.md +3 -3
  303. package/kb/extra/subsystems/token-meter.md +106 -0
  304. package/kb/extra/subsystems/token-meter.zh.md +106 -0
  305. package/kb/extra/subsystems/tools.md +747 -0
  306. package/kb/extra/subsystems/tools.zh.md +747 -0
  307. package/kb/extra/subsystems/translation.md +103 -0
  308. package/kb/extra/subsystems/translation.zh.md +103 -0
  309. package/kb/extra/subsystems/typert.md +690 -0
  310. package/kb/extra/subsystems/typert.zh.md +690 -0
  311. package/kb/extra/subsystems/user-questions.md +307 -0
  312. package/kb/extra/subsystems/user-questions.zh.md +307 -0
  313. package/kb/extra/subsystems/voice-input.md +164 -0
  314. package/kb/extra/subsystems/voice-input.zh.md +164 -0
  315. package/kb/extra/subsystems/web-client.md +100 -0
  316. package/kb/extra/subsystems/web-client.zh.md +100 -0
  317. package/kb/extra/subsystems/web-server.md +302 -0
  318. package/kb/extra/subsystems/web-server.zh.md +302 -0
  319. package/kb/extra/subsystems/web.md +206 -0
  320. package/kb/extra/subsystems/web.zh.md +206 -0
  321. package/kb/extra/subsystems/webhook.md +4 -4
  322. package/kb/extra/subsystems/webhook.zh.md +2 -2
  323. package/kb/extra/subsystems/workflow.md +278 -0
  324. package/kb/extra/subsystems/workflow.zh.md +278 -0
  325. package/kb/extra/subsystems/working-directory.md +64 -0
  326. package/kb/extra/subsystems/working-directory.zh.md +64 -0
  327. package/kb/extra/subsystems/workspace.md +647 -0
  328. package/kb/extra/subsystems/workspace.zh.md +647 -0
  329. package/kb/extra/subsystems/worktrees.md +76 -0
  330. package/kb/extra/subsystems/worktrees.zh.md +76 -0
  331. package/kb/extra/testing.md +4 -4
  332. package/kb/extra/testing.zh.md +4 -4
  333. package/kb/extra/tool-catalog.md +2824 -0
  334. package/kb/extra/tool-catalog.zh.md +2832 -0
  335. package/kb/extra/tool-execution-pipeline.md +65 -0
  336. package/kb/extra/tool-execution-pipeline.zh.md +67 -0
  337. package/kb/extra/ui-radius.md +117 -0
  338. package/kb/extra/ui-radius.zh.md +117 -0
  339. package/kb/extra/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.md +22 -0
  340. package/kb/extra/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.zh.md +22 -0
  341. package/kb/extra/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.md +25 -0
  342. package/kb/extra/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.zh.md +25 -0
  343. package/kb/extra/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.md +18 -0
  344. package/kb/extra/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.zh.md +18 -0
  345. package/kb/extra/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.md +18 -0
  346. package/kb/extra/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.zh.md +18 -0
  347. package/kb/extra/upgrade-guide/v0.2.0-rc.2/primary-runtime-python-aliases/guide.md +18 -0
  348. package/kb/extra/upgrade-guide/v0.2.0-rc.2/primary-runtime-python-aliases/guide.zh.md +18 -0
  349. package/kb/extra/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.md +23 -0
  350. package/kb/extra/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.zh.md +23 -0
  351. package/kb/extra/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.md +22 -0
  352. package/kb/extra/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.zh.md +22 -0
  353. package/kb/extra/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.md +27 -0
  354. package/kb/extra/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.zh.md +27 -0
  355. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.md +17 -0
  356. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.zh.md +17 -0
  357. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.md +18 -0
  358. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.zh.md +18 -0
  359. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.md +28 -0
  360. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.zh.md +28 -0
  361. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.md +20 -0
  362. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.zh.md +20 -0
  363. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/job-id-identity/guide.md +18 -0
  364. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/job-id-identity/guide.zh.md +18 -0
  365. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/jsonl-persistence-plugin/guide.md +18 -0
  366. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/jsonl-persistence-plugin/guide.zh.md +18 -0
  367. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.md +17 -0
  368. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.zh.md +17 -0
  369. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.md +31 -0
  370. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.zh.md +31 -0
  371. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.md +20 -0
  372. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.zh.md +20 -0
  373. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.md +20 -0
  374. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.zh.md +20 -0
  375. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.md +18 -0
  376. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.zh.md +18 -0
  377. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.md +21 -0
  378. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.zh.md +21 -0
  379. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.md +18 -0
  380. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.zh.md +18 -0
  381. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.md +20 -0
  382. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.zh.md +20 -0
  383. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.md +19 -0
  384. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.zh.md +19 -0
  385. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.md +59 -0
  386. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.zh.md +59 -0
  387. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/subagent-preset-composition/guide.md +21 -0
  388. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/subagent-preset-composition/guide.zh.md +21 -0
  389. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.md +21 -0
  390. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.zh.md +21 -0
  391. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.md +18 -0
  392. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.zh.md +18 -0
  393. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.md +21 -0
  394. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.zh.md +21 -0
  395. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.md +36 -0
  396. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.zh.md +36 -0
  397. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.md +25 -0
  398. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.zh.md +25 -0
  399. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/deepseek-account-identity-watch/guide.md +18 -0
  400. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/deepseek-account-identity-watch/guide.zh.md +18 -0
  401. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/deepseek-account-model-catalog/guide.md +27 -0
  402. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/deepseek-account-model-catalog/guide.zh.md +27 -0
  403. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/desktop-font-size-shortcuts/guide.md +18 -0
  404. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/desktop-font-size-shortcuts/guide.zh.md +18 -0
  405. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/from-default-profile-replaces-target/guide.md +20 -0
  406. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/from-default-profile-replaces-target/guide.zh.md +20 -0
  407. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/operator-connect/guide.md +18 -0
  408. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/operator-connect/guide.zh.md +18 -0
  409. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/pi-ai-azure-provider/guide.md +19 -0
  410. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/pi-ai-azure-provider/guide.zh.md +19 -0
  411. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/pi-ai-model-discovery/guide.md +17 -0
  412. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/pi-ai-model-discovery/guide.zh.md +17 -0
  413. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/plugin-install-over-installed/guide.md +20 -0
  414. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/plugin-install-over-installed/guide.zh.md +20 -0
  415. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/sdk-minimal-image-compaction/guide.md +32 -0
  416. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/sdk-minimal-image-compaction/guide.zh.md +32 -0
  417. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/stored-credentials-precedence/guide.md +25 -0
  418. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/stored-credentials-precedence/guide.zh.md +25 -0
  419. package/kb/extra/upgrade-guide/v0.2.1-alpha.3/plugin-engines-dsh/guide.md +21 -0
  420. package/kb/extra/upgrade-guide/v0.2.1-alpha.3/plugin-engines-dsh/guide.zh.md +21 -0
  421. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/account-notification-fields/guide.md +18 -0
  422. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/account-notification-fields/guide.zh.md +18 -0
  423. package/kb/extra/web-styling.md +12 -3
  424. package/kb/extra/web-styling.zh.md +12 -3
  425. package/kb/meta/search-index.json +2690 -404
  426. package/kb/meta/site-pages.txt +188 -188
  427. package/kb/meta/source.json +7 -6
  428. package/kb/meta/topics.md +10 -6
  429. package/kb/site/develop/basic/config.md +1 -0
  430. package/kb/site/develop/basic/index.md +1 -0
  431. package/kb/site/develop/basic/publish.md +12 -3
  432. package/kb/site/develop/basic/tool.md +1 -0
  433. package/kb/site/develop/cordis-tutorial/01-first-plugin.md +1 -0
  434. package/kb/site/develop/cordis-tutorial/02-lifecycle-and-effects.md +1 -0
  435. package/kb/site/develop/cordis-tutorial/03-services.md +1 -0
  436. package/kb/site/develop/cordis-tutorial/04-events.md +1 -0
  437. package/kb/site/develop/cordis-tutorial/05-config.md +28 -0
  438. package/kb/site/develop/cordis-tutorial/06-composition-and-hmr.md +3 -2
  439. package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +1 -0
  440. package/kb/site/develop/cordis-tutorial/index.md +1 -0
  441. package/kb/site/develop/framework/events.md +1 -0
  442. package/kb/site/develop/framework/index.md +2 -1
  443. package/kb/site/develop/framework/service.md +1 -0
  444. package/kb/site/develop/practice/dynamic-cordis.md +9 -8
  445. package/kb/site/develop/practice/index.md +1 -0
  446. package/kb/site/develop/practice/llm-adapter.md +2 -1
  447. package/kb/site/en/develop/basic/config.md +1 -0
  448. package/kb/site/en/develop/basic/index.md +1 -0
  449. package/kb/site/en/develop/basic/publish.md +12 -3
  450. package/kb/site/en/develop/basic/tool.md +1 -0
  451. package/kb/site/en/develop/cordis-tutorial/01-first-plugin.md +1 -0
  452. package/kb/site/en/develop/cordis-tutorial/02-lifecycle-and-effects.md +1 -0
  453. package/kb/site/en/develop/cordis-tutorial/03-services.md +1 -0
  454. package/kb/site/en/develop/cordis-tutorial/04-events.md +1 -0
  455. package/kb/site/en/develop/cordis-tutorial/05-config.md +28 -0
  456. package/kb/site/en/develop/cordis-tutorial/06-composition-and-hmr.md +3 -2
  457. package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +1 -0
  458. package/kb/site/en/develop/cordis-tutorial/index.md +1 -0
  459. package/kb/site/en/develop/framework/events.md +1 -0
  460. package/kb/site/en/develop/framework/index.md +2 -1
  461. package/kb/site/en/develop/framework/service.md +1 -0
  462. package/kb/site/en/develop/practice/dynamic-cordis.md +9 -8
  463. package/kb/site/en/develop/practice/index.md +1 -0
  464. package/kb/site/en/develop/practice/llm-adapter.md +2 -1
  465. package/kb/site/en/guide/github-review.md +8 -10
  466. package/kb/site/en/guide/mcp-memory.md +1 -0
  467. package/kb/site/en/guide/network-proxy.md +2 -1
  468. package/kb/site/en/guide/plugin-market.md +151 -0
  469. package/kb/site/en/guide/providers-custom-form.png +0 -0
  470. package/kb/site/en/guide/providers-models-page.png +0 -0
  471. package/kb/site/en/guide/providers.md +121 -83
  472. package/kb/site/en/guide/public-deployments.md +40 -0
  473. package/kb/site/en/guide/python-sdk.md +49 -29
  474. package/kb/site/en/guide/quickstart.md +2 -0
  475. package/kb/site/en/guide/schedule.md +70 -11
  476. package/kb/site/en/reference/agent-lifecycle.md +1 -0
  477. package/kb/site/en/reference/api-gateway.md +22 -13
  478. package/kb/site/en/reference/capability-seams.md +242 -77
  479. package/kb/site/en/reference/config-catalog.md +2102 -904
  480. package/kb/site/en/reference/cookbook/adding-a-package.md +57 -3
  481. package/kb/site/en/reference/cookbook/adding-a-settings-card.md +35 -64
  482. package/kb/site/en/reference/cookbook/adding-a-tool.md +4 -3
  483. package/kb/site/en/reference/cookbook/adding-an-llm-adapter.md +1 -0
  484. package/kb/site/en/reference/cookbook/extension-cookbook.md +6 -5
  485. package/kb/site/en/reference/cordis-api/context.md +1 -0
  486. package/kb/site/en/reference/cordis-api/events.md +1 -0
  487. package/kb/site/en/reference/cordis-api/fiber.md +4 -3
  488. package/kb/site/en/reference/cordis-api/inherited.md +16 -16
  489. package/kb/site/en/reference/cordis-api/registry.md +1 -0
  490. package/kb/site/en/reference/cordis-api/service.md +1 -0
  491. package/kb/site/en/reference/cordis-primer.md +1 -0
  492. package/kb/site/en/reference/experimental-persistence-catalog.md +20 -0
  493. package/kb/site/en/reference/index.md +27 -21
  494. package/kb/site/en/reference/persistence-catalog.md +8055 -62
  495. package/kb/site/en/reference/subsystems/approval.md +2 -1
  496. package/kb/site/en/reference/subsystems/client-modules.md +37 -15
  497. package/kb/site/en/reference/subsystems/client-resources.md +3 -1
  498. package/kb/site/en/reference/subsystems/commands.md +6 -1
  499. package/kb/site/en/reference/subsystems/compaction.md +50 -3
  500. package/kb/site/en/reference/subsystems/conversation.md +50 -6
  501. package/kb/site/en/reference/subsystems/core.md +100 -258
  502. package/kb/site/en/reference/subsystems/credentials.md +178 -13
  503. package/kb/site/en/reference/subsystems/filesystem.md +11 -0
  504. package/kb/site/en/reference/subsystems/goal.md +2 -1
  505. package/kb/site/en/reference/subsystems/index.md +20 -6
  506. package/kb/site/en/reference/subsystems/jobs.md +397 -132
  507. package/kb/site/en/reference/subsystems/llm-streaming.md +157 -50
  508. package/kb/site/en/reference/subsystems/lsp.md +1 -0
  509. package/kb/site/en/reference/subsystems/permission-presets.md +66 -29
  510. package/kb/site/en/reference/subsystems/persistence.md +6 -3
  511. package/kb/site/en/reference/subsystems/plan.md +3 -2
  512. package/kb/site/en/reference/subsystems/ptc-runtime.md +254 -0
  513. package/kb/site/en/reference/subsystems/sandbox.md +7 -5
  514. package/kb/site/en/reference/subsystems/schedule.md +392 -33
  515. package/kb/site/en/reference/subsystems/scope.md +2 -1
  516. package/kb/site/en/reference/subsystems/session-projection.md +22 -19
  517. package/kb/site/en/reference/subsystems/session-query.md +3 -0
  518. package/kb/site/en/reference/subsystems/session-reference.md +8 -6
  519. package/kb/site/en/reference/subsystems/session-telemetry.md +7 -4
  520. package/kb/site/en/reference/subsystems/session-title.md +20 -10
  521. package/kb/site/en/reference/subsystems/session.md +254 -91
  522. package/kb/site/en/reference/subsystems/settings.md +43 -292
  523. package/kb/site/en/reference/subsystems/shell.md +37 -28
  524. package/kb/site/en/reference/subsystems/sidebar-right.md +25 -12
  525. package/kb/site/en/reference/subsystems/skills.md +5 -6
  526. package/kb/site/en/reference/subsystems/slots.md +88 -70
  527. package/kb/site/en/reference/subsystems/spill.md +4 -3
  528. package/kb/site/en/reference/subsystems/storage.md +2 -2
  529. package/kb/site/en/reference/subsystems/subagent.md +207 -293
  530. package/kb/site/en/reference/subsystems/subprocess.md +17 -18
  531. package/kb/site/en/reference/subsystems/system-prompt.md +36 -3
  532. package/kb/site/en/reference/subsystems/terminal.md +1 -0
  533. package/kb/site/en/reference/subsystems/token-meter.md +1 -0
  534. package/kb/site/en/reference/subsystems/tools.md +42 -14
  535. package/kb/site/en/reference/subsystems/typert.md +362 -14
  536. package/kb/site/en/reference/subsystems/user-questions.md +131 -1
  537. package/kb/site/en/reference/subsystems/web-client.md +15 -9
  538. package/kb/site/en/reference/subsystems/web-server.md +157 -8
  539. package/kb/site/en/reference/subsystems/web.md +3 -2
  540. package/kb/site/en/reference/subsystems/workflow.md +10 -9
  541. package/kb/site/en/reference/subsystems/workspace.md +290 -42
  542. package/kb/site/en/reference/tool-catalog.md +908 -352
  543. package/kb/site/en/reference/tool-execution-pipeline.md +7 -3
  544. package/kb/site/guide/github-review.md +8 -10
  545. package/kb/site/guide/mcp-memory.md +1 -0
  546. package/kb/site/guide/network-proxy.md +2 -1
  547. package/kb/site/guide/plugin-market.md +151 -0
  548. package/kb/site/guide/providers-custom-form.zh.png +0 -0
  549. package/kb/site/guide/providers-models-page.zh.png +0 -0
  550. package/kb/site/guide/providers.md +132 -94
  551. package/kb/site/guide/public-deployments.md +40 -0
  552. package/kb/site/guide/python-sdk.md +49 -29
  553. package/kb/site/guide/quickstart.md +2 -0
  554. package/kb/site/guide/schedule.md +70 -11
  555. package/kb/site/reference/agent-lifecycle.md +1 -0
  556. package/kb/site/reference/api-gateway.md +28 -13
  557. package/kb/site/reference/capability-seams.md +242 -77
  558. package/kb/site/reference/config-catalog.md +2105 -906
  559. package/kb/site/reference/cookbook/adding-a-package.md +55 -3
  560. package/kb/site/reference/cookbook/adding-a-settings-card.md +35 -64
  561. package/kb/site/reference/cookbook/adding-a-tool.md +4 -3
  562. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +1 -0
  563. package/kb/site/reference/cookbook/extension-cookbook.md +6 -5
  564. package/kb/site/reference/cordis-api/context.md +1 -0
  565. package/kb/site/reference/cordis-api/events.md +1 -0
  566. package/kb/site/reference/cordis-api/fiber.md +4 -3
  567. package/kb/site/reference/cordis-api/inherited.md +16 -16
  568. package/kb/site/reference/cordis-api/registry.md +1 -0
  569. package/kb/site/reference/cordis-api/service.md +1 -0
  570. package/kb/site/reference/cordis-primer.md +1 -0
  571. package/kb/site/reference/experimental-persistence-catalog.md +20 -0
  572. package/kb/site/reference/index.md +27 -21
  573. package/kb/site/reference/persistence-catalog.md +8061 -68
  574. package/kb/site/reference/subsystems/approval.md +2 -1
  575. package/kb/site/reference/subsystems/client-modules.md +37 -15
  576. package/kb/site/reference/subsystems/client-resources.md +3 -1
  577. package/kb/site/reference/subsystems/commands.md +6 -1
  578. package/kb/site/reference/subsystems/compaction.md +50 -3
  579. package/kb/site/reference/subsystems/conversation.md +51 -5
  580. package/kb/site/reference/subsystems/core.md +102 -258
  581. package/kb/site/reference/subsystems/credentials.md +178 -13
  582. package/kb/site/reference/subsystems/filesystem.md +11 -0
  583. package/kb/site/reference/subsystems/goal.md +2 -1
  584. package/kb/site/reference/subsystems/index.md +20 -6
  585. package/kb/site/reference/subsystems/jobs.md +396 -131
  586. package/kb/site/reference/subsystems/llm-streaming.md +157 -50
  587. package/kb/site/reference/subsystems/lsp.md +1 -0
  588. package/kb/site/reference/subsystems/permission-presets.md +66 -29
  589. package/kb/site/reference/subsystems/persistence.md +6 -3
  590. package/kb/site/reference/subsystems/plan.md +3 -2
  591. package/kb/site/reference/subsystems/ptc-runtime.md +254 -0
  592. package/kb/site/reference/subsystems/sandbox.md +7 -5
  593. package/kb/site/reference/subsystems/schedule.md +392 -33
  594. package/kb/site/reference/subsystems/scope.md +4 -1
  595. package/kb/site/reference/subsystems/session-projection.md +22 -19
  596. package/kb/site/reference/subsystems/session-query.md +3 -0
  597. package/kb/site/reference/subsystems/session-reference.md +8 -6
  598. package/kb/site/reference/subsystems/session-telemetry.md +7 -4
  599. package/kb/site/reference/subsystems/session-title.md +20 -10
  600. package/kb/site/reference/subsystems/session.md +254 -91
  601. package/kb/site/reference/subsystems/settings.md +43 -292
  602. package/kb/site/reference/subsystems/shell.md +37 -28
  603. package/kb/site/reference/subsystems/sidebar-right.md +25 -12
  604. package/kb/site/reference/subsystems/skills.md +5 -6
  605. package/kb/site/reference/subsystems/slots.md +92 -70
  606. package/kb/site/reference/subsystems/spill.md +3 -2
  607. package/kb/site/reference/subsystems/storage.md +2 -2
  608. package/kb/site/reference/subsystems/subagent.md +208 -296
  609. package/kb/site/reference/subsystems/subprocess.md +17 -18
  610. package/kb/site/reference/subsystems/system-prompt.md +36 -3
  611. package/kb/site/reference/subsystems/terminal.md +1 -0
  612. package/kb/site/reference/subsystems/token-meter.md +1 -0
  613. package/kb/site/reference/subsystems/tools.md +42 -14
  614. package/kb/site/reference/subsystems/typert.md +362 -14
  615. package/kb/site/reference/subsystems/user-questions.md +132 -2
  616. package/kb/site/reference/subsystems/web-client.md +15 -9
  617. package/kb/site/reference/subsystems/web-server.md +157 -8
  618. package/kb/site/reference/subsystems/web.md +3 -2
  619. package/kb/site/reference/subsystems/workflow.md +10 -9
  620. package/kb/site/reference/subsystems/workspace.md +290 -42
  621. package/kb/site/reference/tool-catalog.md +862 -306
  622. package/kb/site/reference/tool-execution-pipeline.md +7 -3
  623. package/package.json +2 -2
  624. package/skills/dsh-dev-sandbox.md +67 -0
  625. package/skills/dsh-plugin-dev-kb.md +5 -4
  626. package/kb/extra/defensive-patterns.md +0 -33
  627. package/kb/extra/defensive-patterns.zh.md +0 -35
  628. package/kb/site/en/reference/subsystems/code-runtime.md +0 -198
  629. package/kb/site/en/reference/subsystems/invariants.md +0 -91
  630. package/kb/site/reference/subsystems/code-runtime.md +0 -198
  631. package/kb/site/reference/subsystems/invariants.md +0 -91
@@ -1,17 +1,18 @@
1
1
  ---
2
2
  editSource: "docs/subsystems/permission-presets.md"
3
+ rawMarkdownPath: "en/reference/subsystems/permission-presets.md"
3
4
  outline: [2,3]
4
5
  ---
5
6
 
6
7
  # Permission Presets
7
8
 
8
- The permission-preset layer of [dsh-permission-presets](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/interaction/permission-presets) (`ctx.permissionPresets`, `PermissionPresetService`) bundles the two independent enforcement knobs — [sandbox mode](./sandbox.md) (`sandbox/mode`) and [approval policy](./approval.md) (`approval/policy`) — into named presets a client offers as one Permissions selector. It is one optional capability, not part of the agent-loop spine, and it owns no enforcement: execution, prompt narration, and replay keep reading their knob folds, and a preset switch only records intent and writes through each knob's canonical setter. The [package README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/README.md) owns composition status and limitations; the [sandbox switching design](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/feature/2026-07-06-sandbox.md) owns the rationale.
9
+ The permission-preset layer of [dsh-permission-presets](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/interaction/permission-presets) (`ctx.permissionPresets`, `PermissionPresetService`) bundles the two independent enforcement knobs — [sandbox mode](./sandbox.md) (`sandbox/mode`) and [approval policy](./approval.md) (`approval/policy`) — into named presets a client offers as one Permissions selector. The configured table owns future-session defaults, while the fixed `registerAuto(admit)` hook lets the [Auto review](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/auto-review/README.md) integration publish its current-session-only option for one effect lifetime. The layer is optional and owns no execution policy: prompt narration and replay keep reading their knob folds, while Auto review owns the additional enforcement. The [package README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/README.md) owns composition status and limitations; the [historical sandbox switching design](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/archived/feature/2026-07-06-sandbox.md) records the original knob rationale.
9
10
 
10
11
  Source: [`packages/interaction/permission-presets/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/src/index.ts)
11
12
 
12
13
  ## The preset table
13
14
 
14
- A preset is a table key mapping to one sandbox/approval bundle plus optional client presentation; the default table ships `workspace-write` (`workspace-write` + `ask`) and `danger-full-access` (`danger-full-access` + `never`).
15
+ A preset maps one stable key to a sandbox/approval bundle plus optional client presentation. The default configured table ships `workspace-write` (`workspace-write` + `ask`) and `danger-full-access` (`danger-full-access` + `never`); `custom` and `auto` are reserved and cannot be configured.
15
16
 
16
17
  ```ts type-equiv
17
18
  /** One preset's sandbox/approval bundle and optional client presentation. */
@@ -33,29 +34,36 @@ interface Config {
33
34
  /**
34
35
  * The preset table: name → knob bundle. Defaults to `workspace-write`
35
36
  * (workspace-write + ask) and `danger-full-access` (danger-full-access +
36
- * never). The name `custom` is reserved for the derived not-a-preset state.
37
+ * never). The names `custom` and `auto` are reserved for derived state and
38
+ * the Auto review integration respectively.
37
39
  */
38
- presets?: Record<string, PresetSpec>
40
+ presets: Record<string, PresetSpec>
39
41
  /**
40
42
  * Default for new sessions. When omitted, the preset matching the composed
41
43
  * sandbox and approval defaults is used.
42
44
  */
43
- defaultPreset?: string
45
+ defaultPreset: Volatile<string | undefined>
44
46
  }
45
47
  ```
46
48
 
47
- The service requires a confining `ctx.shell` executor and `ctx.approval`, and misconfiguration fails at plugin load: a table entry named `custom` throws (the name is reserved for the derived not-a-preset state), and composing over a bash executor that does not confine (no `sandboxMode` capability fact) throws, because presets bundle a sandbox mode.
49
+ The service requires a confining `ctx.shell` executor and `ctx.approval`, and misconfiguration fails at plugin load: configured entries named `custom` or `auto` throw, and composing over a bash executor that does not confine (no `sandboxMode` capability fact) throws because presets bundle a sandbox mode.
50
+
51
+ ## Fixed current-session Auto registration
52
+
53
+ The Auto integration calls `registerAuto(admit)` for its effect lifetime. This service fixes the `auto` identity and its `danger-full-access` plus `ask` bundle, and a recorded Auto selection also matches the `never` policy that delegated children pin; the shipped client locale dictionaries own Auto's label and description, while configured preset presentation remains Host-owned. Callers cannot publish another preset through a generic contribution API. Auto appears after configured presets, never enters the `permission.defaultPreset` settings schema, and disappears when the effect is disposed. The synchronous `admit` callback runs before Auto selection mutates the Session and before a stored Auto Session publishes, so a missing or closing integration does not rewrite the durable identity.
54
+
55
+ Registering or removing Auto emits the payload-free `permission-presets/catalog-changed` notification. Process consumers subscribe before calling `catalog()`, then re-read the complete selectable catalog after each notification. The `permissions` Session projection contains only `currentValue`, so catalog changes append no Session event, publish no Session projection frame, and leave the Session sequence unchanged.
48
56
 
49
57
  ## Current preset and the derived `custom`
50
58
 
51
- `current(session)` derives the effective preset from the optionally registered `permissions` projection. The unit folds the session's sandbox mode, approval policy, and recorded selection; values absent within that state fall back to the executor's configured mode and the approval service config, then `ask`. A missing registry or projection key fails explicitly. The service prefers a still-matching selection, then the first matching table entry in declaration order, and otherwise returns `CUSTOM_PRESET` (`'custom'`). `custom` is derived-only: clients may display it as the current value, but it is never a switch target or an event payload.
59
+ `current(session)` derives the effective preset from the required `permissions` projection. The unit folds the session's sandbox mode, approval policy, and recorded selection; values absent within that state fall back to the executor's configured mode and the approval service config, then `ask`. A missing projection key fails explicitly. The service prefers a still-matching selection, including a recorded Auto selection under the `never` approval policy, then the first matching configured entry, and otherwise returns `CUSTOM_PRESET` (`'custom'`). `custom` is derived-only: clients may display it as the current value, but it is never a switch target or an event payload.
52
60
 
53
- `names` lists the switchable presets in table declaration order; `optionOf(name)` builds the option a client renders for a table key (label falls back to the key) or for `custom`, and throws for any other name.
61
+ `names` lists configured presets in declaration order followed by Auto while its integration is live. `catalog()` returns those selectable entries as one process-level snapshot. `optionOf(name)` builds an available entry (its label falls back to the key) or the derived `custom` presentation, and throws for any other name. Clients join the catalog with the Session projection; `custom` may label the current value but never becomes a catalog entry.
54
62
 
55
63
  ```ts type-equiv
56
- /** The select-option shape a presentation layer advertises for one preset (or for the derived `custom` state). */
64
+ /** Presentation for an available preset or the derived `custom` current value. */
57
65
  interface PresetOption {
58
- /** Stable option value: the table key, or `custom`. */
66
+ /** Stable option value: a configured preset key, live `auto`, or derived `custom`. */
59
67
  value: string
60
68
  /** The display label. */
61
69
  name: string
@@ -66,9 +74,9 @@ interface PresetOption {
66
74
 
67
75
  ## Switching and the `permission/preset` event
68
76
 
69
- `set(session, name)` resolves the preset (unknown names throw), appends a log-only `permission/preset` event unless `name` is already the effective preset, then writes each knob through its own setter — `setSandboxMode` from [dsh-sandbox-policy](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/sandbox/sandbox-policy) and `setApprovalPolicy` from [dsh-user-approval](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/interaction/user-approval) — only when that knob's effective value changes. The selection event precedes the knob events in the same turn, and re-selecting the effective preset appends nothing.
77
+ `set(session, name)` resolves the preset (unknown names throw), runs Auto admission when applicable, appends a log-only `permission/preset` event unless `name` is already the effective preset, then writes each knob through its own setter — `setSandboxMode` from [dsh-sandbox-policy](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/sandbox/sandbox-policy) and `setApprovalPolicy` from [dsh-user-approval](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/interaction/user-approval) — only when that knob's effective value changes. The selection event precedes the knob events in the same turn, and re-selecting the effective preset appends nothing.
70
78
 
71
- `permission/preset` is durable, log-only user intent: it stays out of the model transcript (the knob events own the model-visible consequences through their consumers), and it exists so `current()` can preserve WHICH preset the user chose when two presets share a bundle. The `permissions` projection folds that selection with both knob events and retains the `session/end-seed` boundary used to distinguish a restored empty seed from a fresh session; replay needs no catch-up state or raw-log rescan. The complete event declaration is in the [persistence log event catalog](../persistence-catalog.md); the method signatures are in the generated [service catalog](#ctxpermissionpresets--permissionpresetservice).
79
+ `permission/preset` is durable, log-only user intent: it stays out of the model transcript (the knob events own the model-visible consequences through their consumers), and it exists so `current()` can preserve which preset the user chose when two presets share a bundle. The `permissions` projection folds that selection with both knob events and retains the `session/end-seed` boundary used to distinguish a restored empty seed from a fresh session; replay needs no catch-up state or raw-log rescan. A restored `auto` selection requires the live Auto registration before Agent publication. The complete event declaration is in the [persistence log event catalog](../persistence-catalog.md); the method signatures are in the generated [service catalog](#ctxpermissionpresets--permissionpresetservice).
72
80
 
73
81
  <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
74
82
 
@@ -82,40 +90,48 @@ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnp
82
90
 
83
91
  ### `ctx.permissionPresets` — `PermissionPresetService`
84
92
 
85
- Owns the deployment's permission presets and their write path. Requires a confining `ctx.shell` executor and `ctx.approval`; unmatched knob values are reported as CUSTOM_PRESET, not an error.
93
+ Owns the deployment's configured permission presets, the fixed Auto integration hook, and their write path. Requires a confining `ctx.shell` executor and `ctx.approval`; unmatched knob values are reported as CUSTOM_PRESET, not an error.
86
94
 
87
95
  ```ts cordis-catalog
96
+ /**
97
+ * Read the complete process-level catalog exposed to current-session UI.
98
+ * @returns every currently selectable preset in contribution order.
99
+ */
100
+ @Remote('catalog') catalog(): PermissionCatalog
101
+
102
+ /**
103
+ * Publish the fixed current-session Auto preset for the calling
104
+ * integration's effect lifetime.
105
+ * @param admit - synchronous gate run before live Auto selection or restore.
106
+ * @returns the async effect disposer that removes Auto.
107
+ */
108
+ registerAuto(admit: () => void): () => Promise<void>
109
+
88
110
  /**
89
111
  * Resolve the preset matching the effective knob values. A still-matching
90
- * last selection wins shared-bundle ties; otherwise the first table match
91
- * wins, or {@link CUSTOM_PRESET} when no entry matches.
112
+ * last selection wins shared-bundle ties, and a still-selected Auto also
113
+ * matches the `never` approval policy; otherwise the first configured
114
+ * match wins. Returns
115
+ * {@link CUSTOM_PRESET} when no available preset matches.
92
116
  * @param session - the session whose knob state is read.
93
117
  * @returns the effective preset name, or `custom` when nothing matches.
94
118
  */
95
119
  current(session: Session): string
96
120
 
97
121
  /**
98
- * Build the whole select value for one folded knob state: every table
99
- * option in declaration order, `custom` appended exactly while derived.
100
- * @param state - the folded knob overrides.
101
- * @returns the `permissions` projection payload.
102
- */
103
- selectFor(state: KnobState): PermissionSelect
104
-
105
- /**
106
- * Resolve a preset's knob bundle.
122
+ * Resolve an available preset's knob bundle.
107
123
  * @param name - the preset name to resolve.
108
124
  * @returns the configured bundle.
109
- * @throws when `name` is not in the table.
125
+ * @throws when `name` is neither configured nor the currently live Auto preset.
110
126
  */
111
127
  resolve(name: string): PresetSpec
112
128
 
113
129
  /**
114
- * Build the client option for a table entry or {@link CUSTOM_PRESET}. A
115
- * missing label falls back to the table key.
116
- * @param name - a table key, or `custom`.
130
+ * Build the client option for an available preset or {@link CUSTOM_PRESET}.
131
+ * A missing label falls back to the preset key.
132
+ * @param name - a configured preset key, live `auto`, or `custom`.
117
133
  * @returns the option a client renders.
118
- * @throws when `name` is neither a table key nor `custom`.
134
+ * @throws when `name` is neither a configured preset, live `auto`, nor `custom`.
119
135
  */
120
136
  optionOf(name: string): PresetOption
121
137
 
@@ -131,4 +147,25 @@ set(session: Session, name: string): void
131
147
  Types: [Session](./session.md)
132
148
 
133
149
  Source: [`packages/interaction/permission-presets/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/src/index.ts)
150
+
151
+ <a id="permission-presets-events"></a>
152
+
153
+ ### `permission-presets/*` events
154
+
155
+ <a id="permission-presetscatalog-changed--emit"></a>
156
+
157
+ #### `permission-presets/catalog-changed` — emit
158
+
159
+ The selectable process catalog changed. Payload-free by design: consumers subscribe first, then re-read the complete catalog.
160
+
161
+ ```ts cordis-catalog
162
+ /**
163
+ * The selectable process catalog changed. Payload-free by design:
164
+ * consumers subscribe first, then re-read the complete catalog.
165
+ * @mode emit
166
+ */
167
+ 'permission-presets/catalog-changed'(): void
168
+ ```
169
+
170
+ Source: [`packages/interaction/permission-presets/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/src/types.ts)
134
171
  <!-- END GENERATED cordis-surface -->
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  editSource: "docs/subsystems/persistence.md"
3
+ rawMarkdownPath: "en/reference/subsystems/persistence.md"
3
4
  outline: [2,3]
4
5
  ---
5
6
 
@@ -7,7 +8,7 @@ outline: [2,3]
7
8
 
8
9
  The **durability seam** for the event log. [session.md](./session.md) describes the in-memory `Session` — the append-only `SessionEvent` log that is the source of truth. This page describes how that log is made durable: the abstract `SessionPersistence` service, its provider model and shipped JSONL backend, the flush checkpoint, crash recovery, and the metadata header that travels alongside the log. The event vocabulary the log carries is enumerated, member by member, in the generated [persistence log event catalog](../persistence-catalog.md).
9
10
 
10
- The seam is a [capability seam](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-06-13-capability-seams.md): one abstract service ([dsh-session-persistence](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-persistence), `ctx.sessionPersistence`) exposing `create`/`open`/`stat`/`list` over the existing `SessionEvent` — **no parallel persisted event type** — where `create` and `open` return a per-session `SessionHandle` (`read`/`append`/`flush`/`close`) that carries all log access and single-writer ownership. The repository ships [dsh-session-persistence-jsonl](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-persistence-jsonl) as its provider; out-of-tree providers may implement the same service contract. See the [handle-based persistence Agent Note](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.md) and the [session-persistence Agent Note](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-06-14-session-persistence.md).
11
+ The seam is a [capability seam](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-06-13-capability-seams.md): one abstract service ([dsh-session-persistence](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-persistence), `ctx.sessionPersistence`) exposing `create`/`open`/`stat`/`list` over the existing `SessionEvent` — **no parallel persisted event type** — where `create` and `open` return a per-session `SessionHandle` (`read`/`append`/`flush`/`close`) that carries all log access and single-writer ownership. The repository ships [dsh-session-persistence-jsonl](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/session/session-persistence-jsonl) as its provider; out-of-tree providers may implement the same service contract. See the [handle-based persistence Agent Note](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.md) and the [session-persistence reference](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-persistence/README.md).
11
12
 
12
13
  ## `SessionHandle` — one open channel onto a stored session
13
14
 
@@ -206,8 +207,8 @@ interface CreateSessionOptions {
206
207
  readonly seed?: readonly SessionEvent[]
207
208
  /**
208
209
  * Exact fork-inherited prefix length when `meta.isSeeded` is true. The
209
- * constructor seed is exactly this inherited prefix; the constructor
210
- * appends the child-owned tagged marker at the cut.
210
+ * constructor appends the child-owned tagged marker at the cut unless
211
+ * the seed already includes it followed by child-owned fork closers.
211
212
  */
212
213
  readonly inheritedEventCount?: SessionLogOffset
213
214
  /**
@@ -314,6 +315,8 @@ type SessionPersistenceRevision = Branded<'SessionPersistenceRevision'>
314
315
  interface SessionPersistenceSnapshot {
315
316
  /** Detached metadata for one stored session. */
316
317
  readonly header: SessionHeader
318
+ /** Header-only format classification; absent without versioned artifact metadata. */
319
+ readonly formatStatus?: 'current' | 'migration-required'
317
320
  /** Opaque change token; see {@link SessionPersistence.stat}. */
318
321
  readonly revision: SessionPersistenceRevision
319
322
  /** Logical event count, when the backend can provide it cheaply from metadata; otherwise absent. */
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  editSource: "docs/subsystems/plan.md"
3
+ rawMarkdownPath: "en/reference/subsystems/plan.md"
3
4
  outline: [2,3]
4
5
  ---
5
6
 
6
7
  # Plan Mode
7
8
 
8
- Plan mode is logged per-agent collaboration state owned by [dsh-plan-mode](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/plan/plan-mode) (`ctx.planMode`, `PlanModeController`): while active, a deployment-owned guidance section is included in each model request. Plan mode is **soft guidance**. [Sandbox mode](./sandbox.md) and [approval policy](./approval.md) enforce restrictions independently; neither reads or writes plan state, so deployments configure them separately. The package is optional, and the agent loop does not depend on it. It contributes the `plan:policy` prompt section and registers the `exit_plan_mode` tool and `/plan` command. The [design note](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/simplification/2026-07-22-plan-specific-collaboration-state.md) owns the rationale; the [package README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/README.md) owns the model-experience and limitation detail.
9
+ Plan mode is logged per-agent collaboration state owned by [dsh-plan-mode](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/plan/plan-mode) (`ctx.planMode`, `PlanModeController`): while active, a deployment-owned guidance section is included in each model request. Plan mode is **soft guidance**. [Sandbox mode](./sandbox.md) and [approval policy](./approval.md) enforce restrictions independently; neither reads or writes plan state, so deployments configure them separately. The package is optional, and the agent loop does not depend on it. It contributes the `plan:policy` prompt section and registers the `exit_plan_mode` tool and `/plan` command. The [design reference](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/README.md) owns the rationale; the [package README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/README.md) owns the model-experience and limitation detail.
9
10
 
10
11
  Source: [`packages/plan/plan-mode/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
11
12
 
@@ -33,7 +34,7 @@ A missing, blank, or non-string `section` and any unknown key fail at plugin loa
33
34
 
34
35
  ## The exit tool and the `/plan` command
35
36
 
36
- [`exit_plan_mode`](../tool-catalog.md#deepseek-aidsh-plan-mode) stays registered while plan mode is inactive, so entering or leaving plan mode changes only the prompt section, never the request tool catalog; execution outside plan mode fails. In plan mode it requires a complete markdown plan starting with a `#` heading and presents it for review through the [user-questions seam](./user-questions.md). Approval returns `{ approved: true }` and records a silent (non-narrated) pending exit that is appended at the next accepted in-turn pre-step. Plan guidance therefore remains active for the rest of the assistant's current tool batch, and the tool result itself reports the transition. Keep-planning is a failed call carrying the user's feedback, so the model revises and presents again; a missing interaction channel and a service reload during review also fail the call rather than silently leaving plan mode.
37
+ [`exit_plan_mode`](../tool-catalog.md#deepseek-aidsh-plan-mode) stays registered while plan mode is inactive, so entering or leaving plan mode changes only the prompt section, never the request tool catalog; execution outside plan mode fails. In plan mode it requires a complete markdown plan starting with a `#` heading and presents it for review through the [user-questions seam](./user-questions.md). Approval returns `{ approved: true }` and records a silent (non-narrated) pending exit that is appended at the next accepted in-turn pre-step. Plan guidance therefore remains active for the rest of the assistant's current tool batch, and the tool result itself reports the transition. Keep-planning is a failed call carrying the user's feedback, so the model revises and presents again. A dismissed review returns `{ approved: false }` and concludes the turn, so plan mode stays active until the user's next message. A missing interaction channel and a service reload during review also fail the call rather than silently leaving plan mode.
37
38
 
38
39
  When [`ctx.commands`](./commands.md) is composed, the plugin registers `/plan [off|message]`: bare `/plan` selects plan mode, any other non-empty message selects it and then submits the text through `agent.steer()` so it becomes the next step's ordinary logged user message under plan guidance, and the exact argument `off` selects inactive, which also cancels a pending entry before it is appended and becomes visible to a request.
39
40
 
@@ -0,0 +1,254 @@
1
+ ---
2
+ editSource: "docs/subsystems/ptc-runtime.md"
3
+ rawMarkdownPath: "en/reference/subsystems/ptc-runtime.md"
4
+ outline: [2,3]
5
+ ---
6
+
7
+ # PTC runtime
8
+
9
+ The PTC execution [capability seam](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-06-13-capability-seams.md) supplies `ctx.ptcRuntime` through [dsh-ptc-runtime](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/ptc-runtime/ptc-runtime). It runs one program against host bindings and reports output, failure and applicable sandbox facts. PTC execution is optional rather than part of [the agent-loop spine](./core.md). The [PTC foundation](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/feature/2026-06-15-ptc.md) owns registry presentation, the [typed-return contract](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/feature/2026-07-20-ptc-typed-tool-returns.md) owns binding values, and the [sandboxed Node decision](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-09-11-sandboxed-node-ptc-runtime.md) owns the shipped execution provider.
10
+
11
+ Source: [`packages/ptc-runtime/ptc-runtime/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/ptc-runtime/ptc-runtime/src/types.ts)
12
+
13
+ ## The run: request in, result out
14
+
15
+ `PtcRunRequest` contains the program, bindings, cancellation and optional execution choices. The provider's `resolve` validates supported choices and applies its deployment defaults; `run` receives a `PtcRunSpec` with an explicit directory and deadline choice. An omitted timeout uses provider defaults, a number requests a capped elapsed budget, and `null` requests no elapsed deadline. Providers reject unsupported choices before execution:
16
+
17
+ ```ts type-equiv
18
+ /**
19
+ * Caller inputs for one program. The provider's resolve method validates supported
20
+ * options and supplies directory, deadline, and authority before execution.
21
+ */
22
+ interface PtcRunRequest {
23
+ /**
24
+ * The program source, in the runtime's {@link ../index.ts | language}. It
25
+ * follows the provider's programFormat: an async function body supports
26
+ * top-level `await` and `return`; a REPL supports top-level declarations,
27
+ * `await`, and a final expression. The completion value becomes
28
+ * {@link PtcRunResult.value}.
29
+ */
30
+ program: string
31
+ /**
32
+ * Object-identity owner for optional in-memory state. Omission requests a fresh
33
+ * environment. Consumers must await runtime.release(owner) when the owner ends.
34
+ * Stateless providers ignore this field; retained state is never durable.
35
+ */
36
+ stateOwner?: object
37
+ /** Host functions exposed to the program, one global object per namespace. */
38
+ bindings: PtcBindingNamespace[]
39
+ /** Working directory in the mounted filesystem and subprocess execution world. */
40
+ cwd?: string
41
+ /**
42
+ * Elapsed execution budget in milliseconds. Omission uses provider defaults;
43
+ * null requests no deadline. Providers validate and cap numeric budgets or reject unsupported choices.
44
+ */
45
+ timeoutMs?: number | null
46
+ /** Resolved authority for this execution. Providers without confinement reject an explicit policy. */
47
+ sandboxPolicy?: SandboxExecutionPolicy
48
+ /**
49
+ * Abort the run: the runtime stops the program (hard, even mid-loop) and
50
+ * resolves with a {@link PtcRunFailure} of kind `'abort'`. In-flight
51
+ * binding calls are the CALLER's to settle — the runtime only stops asking.
52
+ */
53
+ signal?: AbortSignal
54
+ }
55
+ ```
56
+
57
+ ```ts type-equiv
58
+ /** Fully resolved execution inputs; run never supplies a missing directory or deadline choice. */
59
+ interface PtcRunSpec extends PtcRunRequest {
60
+ /** Absolute directory in the provider's execution world. */
61
+ cwd: string
62
+ /** Positive finite elapsed budget in milliseconds after provider capping, or null for no deadline. */
63
+ timeoutMs: number | null
64
+ }
65
+ ```
66
+
67
+ ```ts type-equiv
68
+ /** File confinement applied to a program, independently of its terminal outcome. */
69
+ interface PtcRunSandbox {
70
+ /** File-effect mode used for this execution. */
71
+ mode: SandboxMode
72
+ /** Program failure text matched backend diagnostics; not enforcement proof or an exhaustive denial record. */
73
+ denied: boolean
74
+ /** Completeness reported by the selected confining backend; absent for full access. */
75
+ enforcement?: SandboxEnforcement
76
+ }
77
+ ```
78
+
79
+ Program failures resolve through `PtcRunResult.error`; invalid caller inputs may reject before execution. Sandbox mode, observed denial and enforcement completeness are separate facts, so a successful program does not by itself prove that every requested restriction was enforced:
80
+
81
+ ```ts type-equiv
82
+ /**
83
+ * The outcome of one run. An error is a FIELD on a resolved result, never a
84
+ * rejection of `run()` — reporting a failed program is the caller's job, not
85
+ * an exception path.
86
+ */
87
+ interface PtcRunResult {
88
+ /** Applied file policy and observed denial, when the provider enforces file policy. */
89
+ sandbox?: PtcRunSandbox
90
+ /**
91
+ * The program's completion value (a return or final REPL expression), when it ran to
92
+ * completion and the value crossed the runtime's lossless-JSON boundary.
93
+ * Invalid or over-limit completions fail the run instead of substituting a
94
+ * rendered string; a failed or value-less run leaves this absent.
95
+ */
96
+ value?: PtcJsonValue
97
+ /**
98
+ * Captured text. Each source channel preserves emission order; interleaving
99
+ * across independent channels is backend-dependent. Bounded only as part of
100
+ * the outer result.
101
+ */
102
+ logs: string[]
103
+ /** Present iff the run failed; see {@link PtcRunFailure} for the taxonomy. */
104
+ error?: PtcRunFailure
105
+ }
106
+ ```
107
+
108
+ `programFormat` distinguishes async function bodies from REPL statements. `stateOwner` is an in-process object identity for optional retained memory; distinct objects remain isolated. Consumers await `release(owner)` when that owner ends; cleanup failures reject that call. Omitted owners are one-shot, and stateless providers ignore ownership. The [persistent Node provider](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/ptc-runtime/ptc-runtime-node/README.md#persistent-repl) defines reset and recovery behavior; no retained object enters the durable Session format.
109
+
110
+ ## Bindings: host functions as program globals
111
+
112
+ Each `PtcBindingNamespace` becomes a global object of async callables; PTC passes `tools`. Arguments and resolutions must be lossless JSON. Providers enforce their own transport caps; the seam sets no uniform binding-byte limit. An optional error-class descriptor creates program-visible typed rejections without naming a consumer inside the runtime. Binding names are own properties, so `__proto__` cannot traverse a prototype:
113
+
114
+ ```ts type-equiv
115
+ /**
116
+ * Program-visible typed rejection for one binding namespace. The runtime
117
+ * injects a real error constructor under `name`; rejected member calls become
118
+ * its instances and expose the exact member name through
119
+ * `memberNameProperty`. Both strings are runtime data rather than knowledge
120
+ * of a particular consumer such as PTC mode.
121
+ */
122
+ interface PtcBindingErrorClass {
123
+ /** Constructor global and resulting `Error.name`; same portable identifier rule as {@link PtcBindingNamespace.global}. */
124
+ name: string
125
+ /**
126
+ * Non-empty own property for the member name. The portable exclusion set is
127
+ * `RESERVED_ERROR_MEMBERS` plus dunder-form names (`__x__`, non-empty
128
+ * middle), enforced identically by every backend; any other name —
129
+ * identifiers or not — is accepted everywhere.
130
+ */
131
+ memberNameProperty: string
132
+ }
133
+ ```
134
+
135
+ ```ts type-equiv
136
+ /**
137
+ * A named group of {@link PtcBindingFunction}s the runtime exposes to the
138
+ * program as one global object (e.g. `tools`). Function names are arbitrary
139
+ * strings — a runtime must treat names like `__proto__` or `constructor` as
140
+ * ordinary own properties (null-prototype construction), never as prototype
141
+ * collisions.
142
+ */
143
+ interface PtcBindingNamespace {
144
+ /**
145
+ * The global identifier the program sees. Must match the LANGUAGE-PORTABLE
146
+ * identifier subset `[A-Za-z_][A-Za-z0-9_]*` and no language's reserved
147
+ * words, so the same namespace list works against every backend regardless
148
+ * of `language` — a JS-only spelling like `$tools` is rejected by design,
149
+ * not just by the Python backend. Names that satisfy the identifier rule but
150
+ * name a backend-owned slot (`RESERVED_BINDING_GLOBALS`, e.g. `console`,
151
+ * `__dsh_main__`) are also refused everywhere; see its declaration for the
152
+ * exact set and why each entry is reserved.
153
+ */
154
+ global: string
155
+ /** The callable members, keyed by the exact name the program calls. */
156
+ functions: Record<string, PtcBindingFunction>
157
+ /** Optional program-visible typed rejection contract for this namespace. */
158
+ errorClass?: PtcBindingErrorClass
159
+ }
160
+ ```
161
+
162
+ ```ts type-equiv
163
+ /** A lossless JSON value transferable through the dependency-light Service Definition. */
164
+ type PtcJsonValue = null | boolean | number | string | PtcJsonValue[] | { [key: string]: PtcJsonValue }
165
+ ```
166
+
167
+ ```ts type-equiv
168
+ /**
169
+ * One host-side function exposed to the program as an async callable. The
170
+ * runtime bridges calls to it (possibly across a serialization boundary), so
171
+ * `args` and the resolution value MUST be lossless JSON. A runtime rejects a
172
+ * lossy or non-cloneable value with a descriptive error rather than corrupting
173
+ * the run. No seam-level byte cap applies to a binding resolution. A rejection
174
+ * of this function surfaces inside the program as a rejection of the
175
+ * corresponding call.
176
+ */
177
+ type PtcBindingFunction = (args: unknown) => Promise<PtcJsonValue>
178
+ ```
179
+
180
+ ## Captured output and the failure taxonomy
181
+
182
+ Logs are plain strings. Each source channel preserves emission order, while interleaving across independent channels is backend-dependent because channel metadata is not part of the seam. The runtime captures the program's console and stream output, and consumers render only the text. Implementations cap the serialized outer log-array plus completion-value or failure-message payload; fixed result-envelope syntax and consumer presentation whitespace are not part of that variable-payload ledger. Overflow is an explicit failure rather than in-band value substitution.
183
+
184
+ Failure kinds are **orthogonal outcomes reported independently** (per [defensive-patterns](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/defensive-patterns/general.md)): a budget expiry is not an exception, an abort is not a timeout, and a substrate death (e.g. OOM) is neither:
185
+
186
+ ```ts type-equiv
187
+ /**
188
+ * Why a run failed. The kinds are orthogonal outcomes reported independently
189
+ * (per docs/defensive-patterns/general.md): a budget expiry is not an exception, an
190
+ * abort is not a timeout, and a substrate death is neither.
191
+ *
192
+ * - `'exception'` — the program threw or failed to parse/transform.
193
+ * - `'timeout'` — an implementation-owned budget expired; the message says which.
194
+ * - `'abort'` — {@link PtcRunRequest.signal} fired.
195
+ * - `'worker-exit'` — the execution substrate died without settling (e.g. OOM).
196
+ * - `'invalid-output'` — the completion value was not lossless JSON.
197
+ * - `'output-limit'` — the serialized outer logs/value/diagnostic exceeded the configured cap.
198
+ * - `'protocol'` — the program sent invalid or over-budget control traffic.
199
+ * - `'sandbox-unavailable'` — required confinement could not be established.
200
+ */
201
+ interface PtcRunFailure {
202
+ /** The failure class (see the interface doc for each kind's meaning). */
203
+ kind: 'exception' | 'timeout' | 'abort' | 'worker-exit' | 'invalid-output' | 'output-limit' | 'protocol' | 'sandbox-unavailable'
204
+ /** Human-readable detail, suitable for feeding back to a model to self-correct. */
205
+ message: string
206
+ }
207
+ ```
208
+
209
+ ## The service
210
+
211
+ `PtcRuntime` is defined in [`src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/ptc-runtime/ptc-runtime/src/index.ts). `resolve(request)` returns complete execution inputs, and `run(spec)` executes them. `executionInstructions` supplies provider-owned usage guidance for consumer presentation. `timeout` reports the configured elapsed-time default and maximum when per-call overrides are supported; `resolve` still validates and caps each request. `language` selects supported program presentation; `isolation` describes the substrate without claiming security. `sandboxMode` advertises file-policy support, with `undefined` for a provider that does not supply confinement. Each implementation keeps program state separate between runs and terminates and awaits active executions during disposal.
212
+
213
+ <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
214
+
215
+ <a id="cordis-surface"></a>
216
+
217
+ ## Cordis API
218
+
219
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
220
+
221
+ <a id="ctxptcruntime--ptcruntime-abstract-seam"></a>
222
+
223
+ ### `ctx.ptcRuntime` — `PtcRuntime` (abstract seam)
224
+
225
+ Registers one `ctx.ptcRuntime` implementation. Program, budget, abort, and substrate failures resolve in PtcRunResult; only Service Definition contract misuse rejects. Implementations bridge structured-cloneable bindings, materialize each declared namespace rejection class, treat programs as hostile peers, isolate distinct state owners, and terminate and await in-flight runs during disposal.
226
+
227
+ ```ts cordis-catalog
228
+ /**
229
+ * Release an owner's retained environment and await its execution resources.
230
+ * Stateless providers have no retained resources to release.
231
+ * @param owner - The exact object supplied as the request's state owner.
232
+ * @returns Completion after all owned execution resources have been released.
233
+ * @throws When managed resource cleanup fails.
234
+ */
235
+ release(owner: object): Promise<void>
236
+
237
+ /**
238
+ * Resolve supported options and provider defaults before execution.
239
+ * @param request - Program, bindings, cancellation and optional execution choices.
240
+ * @returns Complete directory, deadline and supported authority for run.
241
+ * @throws When an explicit choice is invalid or unsupported by this provider.
242
+ */
243
+ abstract resolve(request: PtcRunRequest): PtcRunSpec
244
+
245
+ /**
246
+ * Execute resolved inputs; program outcomes resolve as result fields.
247
+ * @param spec - directory, deadline, program, bindings, cancellation and supported policy.
248
+ * @returns Captured output and the execution outcome.
249
+ */
250
+ abstract run(spec: PtcRunSpec): Promise<PtcRunResult>
251
+ ```
252
+
253
+ Source: [`packages/ptc-runtime/ptc-runtime/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/ptc-runtime/ptc-runtime/src/index.ts)
254
+ <!-- END GENERATED cordis-surface -->
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  editSource: "docs/subsystems/sandbox.md"
3
+ rawMarkdownPath: "en/reference/subsystems/sandbox.md"
3
4
  outline: [2,3]
4
5
  ---
5
6
 
6
7
  # Process Sandbox
7
8
 
8
- The process-sandbox seam of [dsh-sandbox](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/sandbox/sandbox) wraps a same-world subprocess argv in a file-effect policy without coupling consumers to a platform runner. [dsh-sandbox-local](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/sandbox/sandbox-local) supplies Linux bwrap/Landlock, macOS Seatbelt, and the Windows ACL restricted-token backend; [dsh-bash-sandbox](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/shell/bash-sandbox) and [dsh-pwsh-sandbox](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/shell/pwsh-sandbox) consume it. Containers, microVMs, and remote execution are sibling implementations of whole capability seams, not providers of `ctx.sandbox`.
9
+ The process-sandbox seam of [dsh-sandbox](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/sandbox/sandbox) wraps a same-world subprocess argv in a file-effect policy without coupling consumers to a platform runner. [dsh-sandbox-local](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/sandbox/sandbox-local) supplies Linux bwrap/Landlock, macOS Seatbelt, and the Windows ACL restricted-token backend; [dsh-bash-sandbox](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/shell/bash-sandbox) and [dsh-pwsh-sandbox](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/shell/pwsh-sandbox) consume it. [dsh-sandbox-ssh](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/ssh/sandbox-ssh/README.md) applies the same policy through a remote backend paired with the SSH filesystem and subprocess providers.
9
10
 
10
11
  Source: [`packages/sandbox/sandbox/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox/src/index.ts)
11
12
 
@@ -30,7 +31,7 @@ Only the first two modes can be sent to a provider. A `danger-full-access` consu
30
31
  type ConfinedSandboxMode = Exclude<SandboxMode, 'danger-full-access'>
31
32
  ```
32
33
 
33
- Enforcement is a reported fact. `full` means the backend governs every file effect promised by the mode; `partial` means an active backend or older kernel ABI governs only a subset, so consumers that require the absolute promise must reject or surface that distinction. Older Landlock ABIs and the Windows ACL runner's Everyone/hard-link boundaries are current partial cases.
34
+ Enforcement is a reported fact. `full` means the backend governs every file effect promised by the mode; `partial` means an active backend or older kernel ABI governs only a subset, so consumers that require the absolute promise must reject or surface that distinction. Older Landlock ABIs and the Windows ACL runner's hard-link, unconfined-read, and AppContainer-ACL boundaries are current partial cases.
34
35
 
35
36
  ```ts type-equiv
36
37
  /**
@@ -43,7 +44,7 @@ type SandboxEnforcement = 'full' | 'partial'
43
44
 
44
45
  ## Per-call policy
45
46
 
46
- The complete execution policy is resolved and carried per capability call. It includes `danger-full-access` so a consumer can resolve policy once before deciding whether to bypass confinement. Normal tool calls derive `workspaceRoot` from the calling session's immutable cwd; deployment configuration is the agentless fallback. The root is canonicalized with filesystem semantics before lexical normalization, so a cwd containing `symlink/..` identifies the directory where a spawned process actually runs.
47
+ The complete execution policy is resolved and carried per capability call. It includes `danger-full-access` so a consumer can resolve policy once before deciding whether to bypass confinement. Normal tool calls derive `workspaceRoot` from the calling session's immutable cwd; deployment configuration is the agentless fallback. The resolver preserves absolute execution-world spelling. Enforcing providers canonicalize the root where the files exist, so a cwd containing `symlink/..` identifies the directory where the paired subprocess provider actually runs.
47
48
 
48
49
  ```ts type-equiv
49
50
  /**
@@ -156,7 +157,7 @@ The [local provider](https://github.com/deepseek-ai/deepseek-harness/blob/master
156
157
 
157
158
  ## Provider and fail-closed errors
158
159
 
159
- `ctx.sandbox.confine(argv, policy)` returns a `ConfinedArgv` or throws `SandboxUnavailableError` with code `SANDBOX_UNAVAILABLE` when no usable backend exists. Consumers may also classify a failure while spawning or observing the returned argv; that attribution belongs to the consumer contract. Silent unconfined passthrough is never legal for a confined policy.
160
+ `await ctx.sandbox.confine(argv, policy, signal)` resolves policy paths and returns a `ConfinedArgv` from the execution world, or rejects with `SandboxUnavailableError` and code `SANDBOX_UNAVAILABLE` when no usable backend exists. The optional signal cancels resolution before launch. Consumers may also classify a failure while spawning or observing the returned argv; that attribution belongs to the consumer contract. Silent unconfined passthrough is never legal for a confined policy.
160
161
 
161
162
  Provider selection, probing, caching, and backend-specific enforcement reports belong to the [local provider](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox-local/README.md).
162
163
 
@@ -183,10 +184,11 @@ Abstract process-sandbox service. confine must return enforcing argv or fail clo
183
184
  * `['bash', '-c', command]`.
184
185
  * @param policy - the file-effect policy this execution runs under,
185
186
  * carried per call (see {@link SandboxPolicy}).
187
+ * @param signal - cancellation while the provider resolves the policy and runner.
186
188
  * @returns the argv to spawn instead, plus the enforcement completeness
187
189
  * the selected backend achieves for it.
188
190
  */
189
- abstract confine(argv: readonly string[], policy: SandboxPolicy): ConfinedArgv
191
+ abstract confine(argv: readonly string[], policy: SandboxPolicy, signal?: AbortSignal): Promise<ConfinedArgv>
190
192
  ```
191
193
 
192
194
  Source: [`packages/sandbox/sandbox/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox/src/index.ts)