dsh-plugin-dev-kb 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.en.md +4 -4
  3. package/README.md +5 -5
  4. package/kb/INDEX.md +18 -18
  5. package/kb/README.md +6 -4
  6. package/kb/extra/AGENTS.md +11 -10
  7. package/kb/extra/cookbook/adding-a-remote-api.md +2 -2
  8. package/kb/extra/cookbook/adding-a-remote-api.zh.md +2 -2
  9. package/kb/extra/cookbook/adding-a-session-format-version.md +48 -6
  10. package/kb/extra/cookbook/adding-a-session-format-version.zh.md +48 -6
  11. package/kb/extra/cookbook/reviewing-persistence-type-changes.md +120 -0
  12. package/kb/extra/cookbook/reviewing-persistence-type-changes.zh.md +120 -0
  13. package/kb/extra/deepseek-llm-api-wire-extensions.md +18 -19
  14. package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +17 -18
  15. package/kb/extra/development.md +27 -10
  16. package/kb/extra/development.zh.md +27 -10
  17. package/kb/extra/event-producer-consumer.md +89 -68
  18. package/kb/extra/event-producer-consumer.zh.md +90 -69
  19. package/kb/extra/glossary.md +1 -1
  20. package/kb/extra/glossary.zh.md +1 -1
  21. package/kb/extra/i18n/README.md +15 -7
  22. package/kb/extra/i18n/README.zh.md +15 -7
  23. package/kb/extra/i18n/terminology.md +4 -4
  24. package/kb/extra/i18n/translation-prompt.md +2 -2
  25. package/kb/extra/module-graph.md +574 -326
  26. package/kb/extra/module-graph.zh.md +574 -326
  27. package/kb/extra/persistence-changes/2026-09-11-initial.md +280 -0
  28. package/kb/extra/persistence-changes/2026-09-11-initial.zh.md +280 -0
  29. package/kb/extra/persistence-changes/2026-09-12-auto-review-error-metadata.md +52 -0
  30. package/kb/extra/persistence-changes/2026-09-12-auto-review-error-metadata.zh.md +52 -0
  31. package/kb/extra/persistence-changes/2026-09-14-image-offload.md +96 -0
  32. package/kb/extra/persistence-changes/2026-09-14-image-offload.zh.md +96 -0
  33. package/kb/extra/persistence-changes/2026-09-14-workspace-changes-event.md +48 -0
  34. package/kb/extra/persistence-changes/2026-09-14-workspace-changes-event.zh.md +48 -0
  35. package/kb/extra/persistence-changes/2026-09-16-session-format-v4.md +120 -0
  36. package/kb/extra/persistence-changes/2026-09-16-session-format-v4.zh.md +120 -0
  37. package/kb/extra/persistence-changes/2026-09-18-schedule-optional-title.md +48 -0
  38. package/kb/extra/persistence-changes/2026-09-18-schedule-optional-title.zh.md +48 -0
  39. package/kb/extra/persistence-changes/2026-09-20-unknown-child-catalog.md +48 -0
  40. package/kb/extra/persistence-changes/2026-09-20-unknown-child-catalog.zh.md +48 -0
  41. package/kb/extra/persistence-changes/2026-09-21-user-question-reply.md +60 -0
  42. package/kb/extra/persistence-changes/2026-09-21-user-question-reply.zh.md +60 -0
  43. package/kb/extra/persistence-changes/README.md +88 -0
  44. package/kb/extra/persistence-changes/README.zh.md +88 -0
  45. package/kb/extra/persistence-changes/historical-formats/README.md +75 -0
  46. package/kb/extra/persistence-changes/historical-formats/README.zh.md +75 -0
  47. package/kb/extra/persistence-changes/historical-formats/v0.md +5105 -0
  48. package/kb/extra/persistence-changes/historical-formats/v0.zh.md +5105 -0
  49. package/kb/extra/persistence-changes/historical-formats/v1.md +5107 -0
  50. package/kb/extra/persistence-changes/historical-formats/v1.zh.md +5107 -0
  51. package/kb/extra/persistence-changes/historical-formats/v2.md +5362 -0
  52. package/kb/extra/persistence-changes/historical-formats/v2.zh.md +5362 -0
  53. package/kb/extra/persistence-changes/historical-formats/v3.md +5634 -0
  54. package/kb/extra/persistence-changes/historical-formats/v3.zh.md +5634 -0
  55. package/kb/extra/persistence-changes/releases/README.md +103 -0
  56. package/kb/extra/persistence-changes/releases/README.zh.md +103 -0
  57. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.1.md +201 -0
  58. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.1.zh.md +201 -0
  59. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.2.md +261 -0
  60. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.2.zh.md +261 -0
  61. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.3.md +126 -0
  62. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.3.zh.md +126 -0
  63. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.4.md +75 -0
  64. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.4.zh.md +75 -0
  65. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.5.md +75 -0
  66. package/kb/extra/persistence-changes/releases/dsh-v0.0.1-rc.5.zh.md +75 -0
  67. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.1.md +75 -0
  68. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.1.zh.md +75 -0
  69. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.2.md +75 -0
  70. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.2.zh.md +75 -0
  71. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.3.md +75 -0
  72. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.3.zh.md +75 -0
  73. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.5.md +75 -0
  74. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.5.zh.md +75 -0
  75. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.6.md +75 -0
  76. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.6.zh.md +75 -0
  77. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.7.md +82 -0
  78. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.7.zh.md +82 -0
  79. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.8.md +110 -0
  80. package/kb/extra/persistence-changes/releases/dsh-v0.1.0-rc.8.zh.md +110 -0
  81. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.1.md +82 -0
  82. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.1.zh.md +82 -0
  83. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.2.md +119 -0
  84. package/kb/extra/persistence-changes/releases/dsh-v0.1.1-rc.2.zh.md +119 -0
  85. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.1.md +295 -0
  86. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.1.zh.md +295 -0
  87. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.2.md +286 -0
  88. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.2.zh.md +286 -0
  89. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.3.md +75 -0
  90. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.3.zh.md +75 -0
  91. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.4.md +95 -0
  92. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.4.zh.md +95 -0
  93. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.5.md +75 -0
  94. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-alpha.5.zh.md +75 -0
  95. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-rc.1.md +75 -0
  96. package/kb/extra/persistence-changes/releases/dsh-v0.1.2-rc.1.zh.md +75 -0
  97. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.1.md +154 -0
  98. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.1.zh.md +154 -0
  99. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.2.md +86 -0
  100. package/kb/extra/persistence-changes/releases/dsh-v0.1.3-alpha.2.zh.md +86 -0
  101. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.1.md +139 -0
  102. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.1.zh.md +139 -0
  103. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.2.md +95 -0
  104. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-alpha.2.zh.md +95 -0
  105. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.1.md +75 -0
  106. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.1.zh.md +75 -0
  107. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.2.md +75 -0
  108. package/kb/extra/persistence-changes/releases/dsh-v0.1.5-rc.2.zh.md +75 -0
  109. package/kb/extra/rescope.md +1 -1
  110. package/kb/extra/rescope.zh.md +1 -1
  111. package/kb/extra/session-format-status.md +22 -6
  112. package/kb/extra/session-format-status.zh.md +22 -6
  113. package/kb/extra/subsystems/agent-team.md +52 -28
  114. package/kb/extra/subsystems/agent-team.zh.md +52 -28
  115. package/kb/extra/subsystems/attachment.md +19 -9
  116. package/kb/extra/subsystems/attachment.zh.md +19 -9
  117. package/kb/extra/subsystems/boot.md +323 -0
  118. package/kb/extra/subsystems/boot.zh.md +323 -0
  119. package/kb/extra/subsystems/browser-use.md +67 -0
  120. package/kb/extra/subsystems/browser-use.zh.md +67 -0
  121. package/kb/extra/subsystems/claude-code-mods.md +146 -0
  122. package/kb/extra/subsystems/claude-code-mods.zh.md +146 -0
  123. package/kb/extra/subsystems/computer-use.md +56 -0
  124. package/kb/extra/subsystems/computer-use.zh.md +56 -0
  125. package/kb/extra/subsystems/deliverables.md +178 -0
  126. package/kb/extra/subsystems/deliverables.zh.md +178 -0
  127. package/kb/extra/subsystems/extensions.md +6 -4
  128. package/kb/extra/subsystems/extensions.zh.md +6 -4
  129. package/kb/extra/subsystems/feedback.md +4 -4
  130. package/kb/extra/subsystems/feedback.zh.md +4 -4
  131. package/kb/extra/subsystems/mcp.md +139 -0
  132. package/kb/extra/subsystems/mcp.zh.md +139 -0
  133. package/kb/extra/subsystems/office-to-pdf.md +87 -0
  134. package/kb/extra/subsystems/office-to-pdf.zh.md +87 -0
  135. package/kb/extra/subsystems/otel.md +44 -0
  136. package/kb/extra/subsystems/otel.zh.md +44 -0
  137. package/kb/extra/subsystems/product-telemetry.md +79 -0
  138. package/kb/extra/subsystems/product-telemetry.zh.md +79 -0
  139. package/kb/extra/subsystems/ssh.md +135 -0
  140. package/kb/extra/subsystems/ssh.zh.md +135 -0
  141. package/kb/extra/subsystems/todo.md +3 -3
  142. package/kb/extra/subsystems/todo.zh.md +3 -3
  143. package/kb/extra/subsystems/voice-input.md +164 -0
  144. package/kb/extra/subsystems/voice-input.zh.md +164 -0
  145. package/kb/extra/subsystems/webhook.md +3 -3
  146. package/kb/extra/subsystems/webhook.zh.md +1 -1
  147. package/kb/extra/testing.md +3 -3
  148. package/kb/extra/testing.zh.md +3 -3
  149. package/kb/extra/ui-radius.md +115 -0
  150. package/kb/extra/ui-radius.zh.md +115 -0
  151. package/kb/extra/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.md +22 -0
  152. package/kb/extra/upgrade-guide/v0.1.7-rc.2/schedule-optional-bundle/guide.zh.md +22 -0
  153. package/kb/extra/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.md +25 -0
  154. package/kb/extra/upgrade-guide/v0.1.7-rc.2/transcript-view-legacy-normal/guide.zh.md +25 -0
  155. package/kb/extra/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.md +18 -0
  156. package/kb/extra/upgrade-guide/v0.2.0-rc.2/account-sign-in-errors/guide.zh.md +18 -0
  157. package/kb/extra/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.md +23 -0
  158. package/kb/extra/upgrade-guide/v0.2.0-rc.2/remove-runtime-invariants/guide.zh.md +23 -0
  159. package/kb/extra/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.md +22 -0
  160. package/kb/extra/upgrade-guide/v0.2.0-rc.2/schedule-bundle-retired/guide.zh.md +22 -0
  161. package/kb/extra/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.md +27 -0
  162. package/kb/extra/upgrade-guide/v0.2.0-rc.2/subpath-plugin-display-manifest/guide.zh.md +27 -0
  163. package/kb/extra/web-styling.md +12 -3
  164. package/kb/extra/web-styling.zh.md +12 -3
  165. package/kb/meta/search-index.json +976 -256
  166. package/kb/meta/site-pages.txt +188 -188
  167. package/kb/meta/source.json +6 -6
  168. package/kb/meta/topics.md +10 -6
  169. package/kb/site/develop/basic/config.md +1 -0
  170. package/kb/site/develop/basic/index.md +1 -0
  171. package/kb/site/develop/basic/publish.md +9 -2
  172. package/kb/site/develop/basic/tool.md +1 -0
  173. package/kb/site/develop/cordis-tutorial/01-first-plugin.md +1 -0
  174. package/kb/site/develop/cordis-tutorial/02-lifecycle-and-effects.md +1 -0
  175. package/kb/site/develop/cordis-tutorial/03-services.md +1 -0
  176. package/kb/site/develop/cordis-tutorial/04-events.md +1 -0
  177. package/kb/site/develop/cordis-tutorial/05-config.md +28 -0
  178. package/kb/site/develop/cordis-tutorial/06-composition-and-hmr.md +3 -2
  179. package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +1 -0
  180. package/kb/site/develop/cordis-tutorial/index.md +1 -0
  181. package/kb/site/develop/framework/events.md +1 -0
  182. package/kb/site/develop/framework/index.md +2 -1
  183. package/kb/site/develop/framework/service.md +1 -0
  184. package/kb/site/develop/practice/dynamic-cordis.md +9 -8
  185. package/kb/site/develop/practice/index.md +1 -0
  186. package/kb/site/develop/practice/llm-adapter.md +2 -1
  187. package/kb/site/en/develop/basic/config.md +1 -0
  188. package/kb/site/en/develop/basic/index.md +1 -0
  189. package/kb/site/en/develop/basic/publish.md +9 -2
  190. package/kb/site/en/develop/basic/tool.md +1 -0
  191. package/kb/site/en/develop/cordis-tutorial/01-first-plugin.md +1 -0
  192. package/kb/site/en/develop/cordis-tutorial/02-lifecycle-and-effects.md +1 -0
  193. package/kb/site/en/develop/cordis-tutorial/03-services.md +1 -0
  194. package/kb/site/en/develop/cordis-tutorial/04-events.md +1 -0
  195. package/kb/site/en/develop/cordis-tutorial/05-config.md +28 -0
  196. package/kb/site/en/develop/cordis-tutorial/06-composition-and-hmr.md +3 -2
  197. package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +1 -0
  198. package/kb/site/en/develop/cordis-tutorial/index.md +1 -0
  199. package/kb/site/en/develop/framework/events.md +1 -0
  200. package/kb/site/en/develop/framework/index.md +2 -1
  201. package/kb/site/en/develop/framework/service.md +1 -0
  202. package/kb/site/en/develop/practice/dynamic-cordis.md +9 -8
  203. package/kb/site/en/develop/practice/index.md +1 -0
  204. package/kb/site/en/develop/practice/llm-adapter.md +2 -1
  205. package/kb/site/en/guide/github-review.md +1 -0
  206. package/kb/site/en/guide/mcp-memory.md +1 -0
  207. package/kb/site/en/guide/network-proxy.md +2 -1
  208. package/kb/site/en/guide/providers-custom-form.png +0 -0
  209. package/kb/site/en/guide/providers-models-page.png +0 -0
  210. package/kb/site/en/guide/providers.md +97 -82
  211. package/kb/site/en/guide/public-deployments.md +36 -0
  212. package/kb/site/en/guide/python-sdk.md +42 -21
  213. package/kb/site/en/guide/quickstart.md +2 -0
  214. package/kb/site/en/guide/schedule.md +70 -11
  215. package/kb/site/en/reference/agent-lifecycle.md +1 -0
  216. package/kb/site/en/reference/api-gateway.md +13 -11
  217. package/kb/site/en/reference/capability-seams.md +177 -59
  218. package/kb/site/en/reference/config-catalog.md +1758 -821
  219. package/kb/site/en/reference/cookbook/adding-a-package.md +57 -3
  220. package/kb/site/en/reference/cookbook/adding-a-settings-card.md +35 -64
  221. package/kb/site/en/reference/cookbook/adding-a-tool.md +4 -3
  222. package/kb/site/en/reference/cookbook/adding-an-llm-adapter.md +1 -0
  223. package/kb/site/en/reference/cookbook/extension-cookbook.md +6 -5
  224. package/kb/site/en/reference/cordis-api/context.md +1 -0
  225. package/kb/site/en/reference/cordis-api/events.md +1 -0
  226. package/kb/site/en/reference/cordis-api/fiber.md +4 -3
  227. package/kb/site/en/reference/cordis-api/inherited.md +16 -16
  228. package/kb/site/en/reference/cordis-api/registry.md +1 -0
  229. package/kb/site/en/reference/cordis-api/service.md +1 -0
  230. package/kb/site/en/reference/cordis-primer.md +1 -0
  231. package/kb/site/en/reference/index.md +18 -11
  232. package/kb/site/en/reference/persistence-catalog.md +7687 -54
  233. package/kb/site/en/reference/subsystems/approval.md +2 -1
  234. package/kb/site/en/reference/subsystems/client-modules.md +23 -15
  235. package/kb/site/en/reference/subsystems/client-resources.md +3 -1
  236. package/kb/site/en/reference/subsystems/commands.md +6 -1
  237. package/kb/site/en/reference/subsystems/compaction.md +50 -3
  238. package/kb/site/en/reference/subsystems/conversation.md +36 -6
  239. package/kb/site/en/reference/subsystems/core.md +97 -257
  240. package/kb/site/en/reference/subsystems/credentials.md +169 -5
  241. package/kb/site/en/reference/subsystems/filesystem.md +11 -0
  242. package/kb/site/en/reference/subsystems/goal.md +2 -1
  243. package/kb/site/en/reference/subsystems/index.md +16 -5
  244. package/kb/site/en/reference/subsystems/jobs.md +337 -127
  245. package/kb/site/en/reference/subsystems/llm-streaming.md +76 -36
  246. package/kb/site/en/reference/subsystems/lsp.md +1 -0
  247. package/kb/site/en/reference/subsystems/permission-presets.md +66 -29
  248. package/kb/site/en/reference/subsystems/persistence.md +4 -3
  249. package/kb/site/en/reference/subsystems/plan.md +2 -1
  250. package/kb/site/en/reference/subsystems/ptc-runtime.md +236 -0
  251. package/kb/site/en/reference/subsystems/sandbox.md +7 -5
  252. package/kb/site/en/reference/subsystems/schedule.md +392 -33
  253. package/kb/site/en/reference/subsystems/scope.md +2 -1
  254. package/kb/site/en/reference/subsystems/session-projection.md +22 -19
  255. package/kb/site/en/reference/subsystems/session-query.md +1 -0
  256. package/kb/site/en/reference/subsystems/session-reference.md +8 -6
  257. package/kb/site/en/reference/subsystems/session-telemetry.md +7 -4
  258. package/kb/site/en/reference/subsystems/session-title.md +6 -5
  259. package/kb/site/en/reference/subsystems/session.md +199 -81
  260. package/kb/site/en/reference/subsystems/settings.md +43 -292
  261. package/kb/site/en/reference/subsystems/shell.md +37 -28
  262. package/kb/site/en/reference/subsystems/sidebar-right.md +23 -12
  263. package/kb/site/en/reference/subsystems/skills.md +5 -6
  264. package/kb/site/en/reference/subsystems/slots.md +34 -13
  265. package/kb/site/en/reference/subsystems/spill.md +4 -3
  266. package/kb/site/en/reference/subsystems/storage.md +2 -2
  267. package/kb/site/en/reference/subsystems/subagent.md +50 -64
  268. package/kb/site/en/reference/subsystems/subprocess.md +17 -18
  269. package/kb/site/en/reference/subsystems/system-prompt.md +4 -1
  270. package/kb/site/en/reference/subsystems/terminal.md +1 -0
  271. package/kb/site/en/reference/subsystems/token-meter.md +1 -0
  272. package/kb/site/en/reference/subsystems/tools.md +40 -12
  273. package/kb/site/en/reference/subsystems/typert.md +153 -10
  274. package/kb/site/en/reference/subsystems/user-questions.md +131 -1
  275. package/kb/site/en/reference/subsystems/web-client.md +15 -9
  276. package/kb/site/en/reference/subsystems/web-server.md +74 -1
  277. package/kb/site/en/reference/subsystems/web.md +1 -0
  278. package/kb/site/en/reference/subsystems/workflow.md +10 -9
  279. package/kb/site/en/reference/subsystems/workspace.md +294 -34
  280. package/kb/site/en/reference/tool-catalog.md +782 -331
  281. package/kb/site/en/reference/tool-execution-pipeline.md +7 -3
  282. package/kb/site/guide/github-review.md +1 -0
  283. package/kb/site/guide/mcp-memory.md +1 -0
  284. package/kb/site/guide/network-proxy.md +2 -1
  285. package/kb/site/guide/providers-custom-form.zh.png +0 -0
  286. package/kb/site/guide/providers-models-page.zh.png +0 -0
  287. package/kb/site/guide/providers.md +109 -94
  288. package/kb/site/guide/public-deployments.md +36 -0
  289. package/kb/site/guide/python-sdk.md +42 -21
  290. package/kb/site/guide/quickstart.md +2 -0
  291. package/kb/site/guide/schedule.md +70 -11
  292. package/kb/site/reference/agent-lifecycle.md +1 -0
  293. package/kb/site/reference/api-gateway.md +13 -11
  294. package/kb/site/reference/capability-seams.md +177 -59
  295. package/kb/site/reference/config-catalog.md +1760 -822
  296. package/kb/site/reference/cookbook/adding-a-package.md +55 -3
  297. package/kb/site/reference/cookbook/adding-a-settings-card.md +35 -64
  298. package/kb/site/reference/cookbook/adding-a-tool.md +4 -3
  299. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +1 -0
  300. package/kb/site/reference/cookbook/extension-cookbook.md +6 -5
  301. package/kb/site/reference/cordis-api/context.md +1 -0
  302. package/kb/site/reference/cordis-api/events.md +1 -0
  303. package/kb/site/reference/cordis-api/fiber.md +4 -3
  304. package/kb/site/reference/cordis-api/inherited.md +16 -16
  305. package/kb/site/reference/cordis-api/registry.md +1 -0
  306. package/kb/site/reference/cordis-api/service.md +1 -0
  307. package/kb/site/reference/cordis-primer.md +1 -0
  308. package/kb/site/reference/index.md +18 -11
  309. package/kb/site/reference/persistence-catalog.md +7693 -60
  310. package/kb/site/reference/subsystems/approval.md +2 -1
  311. package/kb/site/reference/subsystems/client-modules.md +23 -15
  312. package/kb/site/reference/subsystems/client-resources.md +3 -1
  313. package/kb/site/reference/subsystems/commands.md +6 -1
  314. package/kb/site/reference/subsystems/compaction.md +50 -3
  315. package/kb/site/reference/subsystems/conversation.md +35 -5
  316. package/kb/site/reference/subsystems/core.md +97 -257
  317. package/kb/site/reference/subsystems/credentials.md +169 -5
  318. package/kb/site/reference/subsystems/filesystem.md +11 -0
  319. package/kb/site/reference/subsystems/goal.md +2 -1
  320. package/kb/site/reference/subsystems/index.md +16 -5
  321. package/kb/site/reference/subsystems/jobs.md +336 -126
  322. package/kb/site/reference/subsystems/llm-streaming.md +76 -36
  323. package/kb/site/reference/subsystems/lsp.md +1 -0
  324. package/kb/site/reference/subsystems/permission-presets.md +66 -29
  325. package/kb/site/reference/subsystems/persistence.md +4 -3
  326. package/kb/site/reference/subsystems/plan.md +2 -1
  327. package/kb/site/reference/subsystems/ptc-runtime.md +236 -0
  328. package/kb/site/reference/subsystems/sandbox.md +7 -5
  329. package/kb/site/reference/subsystems/schedule.md +392 -33
  330. package/kb/site/reference/subsystems/scope.md +2 -1
  331. package/kb/site/reference/subsystems/session-projection.md +22 -19
  332. package/kb/site/reference/subsystems/session-query.md +1 -0
  333. package/kb/site/reference/subsystems/session-reference.md +8 -6
  334. package/kb/site/reference/subsystems/session-telemetry.md +7 -4
  335. package/kb/site/reference/subsystems/session-title.md +6 -5
  336. package/kb/site/reference/subsystems/session.md +199 -81
  337. package/kb/site/reference/subsystems/settings.md +43 -292
  338. package/kb/site/reference/subsystems/shell.md +37 -28
  339. package/kb/site/reference/subsystems/sidebar-right.md +23 -12
  340. package/kb/site/reference/subsystems/skills.md +5 -6
  341. package/kb/site/reference/subsystems/slots.md +34 -13
  342. package/kb/site/reference/subsystems/spill.md +3 -2
  343. package/kb/site/reference/subsystems/storage.md +2 -2
  344. package/kb/site/reference/subsystems/subagent.md +49 -63
  345. package/kb/site/reference/subsystems/subprocess.md +17 -18
  346. package/kb/site/reference/subsystems/system-prompt.md +4 -1
  347. package/kb/site/reference/subsystems/terminal.md +1 -0
  348. package/kb/site/reference/subsystems/token-meter.md +1 -0
  349. package/kb/site/reference/subsystems/tools.md +40 -12
  350. package/kb/site/reference/subsystems/typert.md +153 -10
  351. package/kb/site/reference/subsystems/user-questions.md +132 -2
  352. package/kb/site/reference/subsystems/web-client.md +15 -9
  353. package/kb/site/reference/subsystems/web-server.md +74 -1
  354. package/kb/site/reference/subsystems/web.md +1 -0
  355. package/kb/site/reference/subsystems/workflow.md +10 -9
  356. package/kb/site/reference/subsystems/workspace.md +294 -34
  357. package/kb/site/reference/tool-catalog.md +784 -333
  358. package/kb/site/reference/tool-execution-pipeline.md +7 -3
  359. package/package.json +2 -2
  360. package/skills/dsh-plugin-dev-kb.md +5 -4
  361. package/kb/site/en/reference/subsystems/code-runtime.md +0 -198
  362. package/kb/site/en/reference/subsystems/invariants.md +0 -91
  363. package/kb/site/reference/subsystems/code-runtime.md +0 -198
  364. package/kb/site/reference/subsystems/invariants.md +0 -91
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  editSource: "docs/subsystems/core.md"
3
+ rawMarkdownPath: "en/reference/subsystems/core.md"
3
4
  outline: [2,3]
4
5
  ---
5
6
 
@@ -109,7 +110,7 @@ interface Agent {
109
110
  * turn and runs when the aborted activity converges to idle; a `disposed`
110
111
  * cancel leaves it parked. A wake submitted while already idle always opens
111
112
  * its turn boundary, even when its message is cleared before the driver
112
- * claims ([cancel-convergence wake latch](../../../../.agents/notes/implemented/bug-fix/2026-08-07-cancel-convergence-wake-latch.md)).
113
+ * claims ([driver wake convergence](../../agent-loop/src/agent.ts)).
113
114
  * @param message - identified content and the source that supplied it.
114
115
  * @param target - the preferred next-turn or next-step inbox boundary.
115
116
  * @param wakeup - whether delivery may wake the driver.
@@ -275,7 +276,7 @@ interface Inbox {
275
276
  type InboxTarget = 'next-turn' | 'next-step'
276
277
  ```
277
278
 
278
- Every pending occurrence is its `UserMessage`; `MessageId` is the sole identity. The structural `Inbox` methods record normalized durable `agent/inbox/spliced` mutations and reject duplicate pending ids. `replace(messageId, newMessage)` and `remove(messageId)` locate the pending message across both lists; replacement may change identity and emits the old message as discarded followed by the new message as inserted. Ordinary removals and `clear()` are cancellations. At a step boundary, dsh-agent-loop's package-internal `ReactLoopInbox` removes the proposed batch — all `next-step` input plus, at a turn boundary, one `next-turn` message — through pure deletion splices without discarded notifications, then emits per-message claimed notifications. Loop-only pending detection and claiming are not part of `Agent.inbox`. Each `ReactLoopInbox` constructor contributes the standard `inbox` projection from its agent scope; the registry shares that definition across agents by reference count, and its cell is the sole live state while the same fold serves cold consumers. The fold rejects unsafe or out-of-range splice coordinates and duplicate identities across both lists, identifying malformed durable history by event seq. Consumers following one message use the exact `agent/inbox/inserted`, `claimed`, and `discarded` notifications.
279
+ Every pending occurrence is its `UserMessage`; `MessageId` is the sole identity. The structural `Inbox` methods record normalized durable `agent/inbox/spliced` mutations and reject duplicate pending ids. `replace(messageId, newMessage)` and `remove(messageId)` locate the pending message across both lists; replacement may change identity and emits the old message as discarded followed by the new message as inserted. Ordinary removals and `clear()` are cancellations. At a step boundary, dsh-agent-loop's package-internal `ReactLoopInbox` removes the proposed batch — all `next-step` input plus, at a turn boundary, one `next-turn` message — through pure deletion splices without discarded notifications, then emits per-message claimed notifications. Loop-only pending detection and claiming are not part of `Agent.inbox`. The `AgentLoop` service registers the standard `inbox` projection before publishing its factory; its cell is the sole live state, and the same fold serves cold consumers even when no Agent exists. The fold rejects unsafe or out-of-range splice coordinates and duplicate identities across both lists, identifying malformed durable history by event seq. Consumers following one message use the exact `agent/inbox/inserted`, `claimed`, and `discarded` notifications.
279
280
 
280
281
  Cancellation:
281
282
 
@@ -300,7 +301,7 @@ type AgentCancelCause =
300
301
  | { readonly kind: 'disposed' }
301
302
  ```
302
303
 
303
- The cause is a TypeScript-enforced same-process input. An active cancellation holder copies it into the runtime-only `AbortSignal.reason`; a signal grants cooperating listeners no classification authority. Durable `turn/end` records the outcome as `{ kind: 'aborted', reason: TurnEndCancelCause }`, so the cancel cause lands in the terminal result.
304
+ The cause is a TypeScript-enforced same-process input. An active cancellation holder exposes that same object as the runtime-only `AbortSignal.reason`; a signal grants cooperating listeners no classification authority. Durable `turn/end` records the outcome as `{ kind: 'aborted', reason: TurnEndCancelCause }`, so the cancel cause lands in the terminal result.
304
305
 
305
306
  The [event taxonomy](../index.md#events) owns the `agent/*` lifecycle, checkpoint, and waterfall contracts. Turn and step boundaries are durable session events rather than agent emits.
306
307
 
@@ -339,7 +340,7 @@ type RequestErrorAction = { kind: 'retry' } | undefined
339
340
 
340
341
  `agent/pre-step` is the only waterfall listener chain before request derivation. `agent/turn-stopping` runs when a turn has no tool or steering continuation, before one final steering drain.
341
342
 
342
- `agent/session-start` carries a `SessionStartSource` (why the session lifecycle began; a bridge keys its SessionStart matcher on it):
343
+ `agent/created` carries a `SessionStartSource` (why the session lifecycle began; a bridge keys its SessionStart matcher on it):
343
344
 
344
345
  ```ts type-equiv
345
346
  /** Why a session lifecycle began; seeded creates are `startup`, while persisted loads are `resume`. */
@@ -424,7 +425,7 @@ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnp
424
425
 
425
426
  ### `ctx.agentDefaultModel` — `AgentDefaultModelConfig`
426
427
 
427
- Owns the default model selection independently of any Host or transport. The composition entry remains usable without a settings provider; when one is mounted, its user layer is read live.
428
+ Owns the default model selection independently of any Host or transport. Each operation reads the owning Config references.
428
429
 
429
430
  ```ts cordis-catalog
430
431
  /**
@@ -434,10 +435,11 @@ Owns the default model selection independently of any Host or transport. The com
434
435
  currentSelection(): ModelSelection
435
436
 
436
437
  /**
437
- * Save the complete default model selection. A deployment without a settings
438
- * provider keeps its composition entry.
438
+ * Save the complete default model selection. A deployment without a configuration
439
+ * editor keeps its composition entry. Saves commit in submission order; a failed
440
+ * save rejects its caller without blocking later saves.
439
441
  * @param next - resolved selection accepted by an entry point.
440
- * @returns fulfillment after the optional settings write settles.
442
+ * @returns fulfillment after the optional profile write settles.
441
443
  */
442
444
  async saveSelection(next: ModelSelection): Promise<void>
443
445
  ```
@@ -484,247 +486,103 @@ Types: [SessionHeader](./persistence.md)
484
486
 
485
487
  Source: [`packages/core/agent-loop/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-loop/src/index.ts)
486
488
 
487
- <a id="ctxagentpresets--agentpresets"></a>
489
+ <a id="ctxagentpresets--agentpresetregistry"></a>
488
490
 
489
- ### `ctx.agentPresets` — `AgentPresets`
491
+ ### `ctx.agentPresets` — `AgentPresetRegistry`
490
492
 
491
- Registry over the deployment's agent presets.
492
-
493
- Discovery is unmemoized: `list()` and `resolve()` re-read the roots on every call so a preset authored while the process runs is visible immediately, and a preset deleted underneath a picker disappears from the next read.
493
+ Registry of YAML-declared presets and the revisions live Agents retain.
494
494
 
495
495
  ```ts cordis-catalog
496
- /**
497
- * Every preset the configured roots currently supply.
498
- * @returns the presets, first-root-wins per id.
496
+ /** Register and eagerly load a definition; activation failure remains visible in the roster.
497
+ * @param definition Parsed configuration supplied by the declaring plugin.
498
+ * @returns Definition disposer after activation or its diagnostic settles; the declaring plugin owns it.
499
499
  */
500
- async list(): Promise<AgentPreset[]>
500
+ async register(definition: PresetDefinition): Promise<() => Promise<void>>
501
501
 
502
- /**
503
- * The roster off the Host: {@link list} projected to path-free rows, with
504
- * the default marked and this deployment's authoring capability beside it.
505
- *
506
- * Whether a client can open a preset's directory is the Host's own opener
507
- * capability, not a roster property — a caller needing both joins them.
508
- * @returns the rows and the authoring capability.
502
+ /** Inspect retained revisions, or the exact revision an Agent joined.
503
+ * @param ctx - optional Agent context; omission includes all retained revisions.
504
+ * @returns detached module references and isolation diagnostics; no match returns an empty list.
509
505
  */
510
- @Remote('list') async remoteExportList(): Promise<AgentPresetRoster>
506
+ inspectCompositions(ctx?: Context): AgentPresetInspection[]
511
507
 
512
- /**
513
- * Every preset's composition as flattened plugin rows, for plugin-listing
514
- * surfaces beside the roster's own picker.
515
- *
516
- * A preset with a live standing mount answers from its newest generation's
517
- * Loader entries — the composition new sessions join — even when the file
518
- * behind it has since been edited into an unreadable state: the mount is
519
- * what sessions actually run, so the broken verdict only applies to a
520
- * preset nothing composed. One never composed since boot answers from its
521
- * file, with `!!js` disabled gates evaluated against the Loader context so
522
- * both answers reflect the same host. Reading never mounts: an unmounted
523
- * preset is parsed, not composed, so listing a preset's plugins cannot
524
- * activate them early. A composition that stopped reading between
525
- * discovery's health verdict and this read is reported broken with the
526
- * raced reason rather than dropped.
527
- * @returns one composition per roster preset, in roster order.
528
- */
529
- async compositionInventory(): Promise<AgentPresetComposition[]>
530
-
531
- /**
532
- * Resolve one preset by id.
533
- *
534
- * A broken preset resolves — deleting one, reading one, and reporting one
535
- * all need the row — and the mounting paths refuse it AFTER resolution
536
- * through {@link resolveMountable}.
537
- * @param id - the preset id, or `undefined` for {@link defaultId}.
538
- * @returns the resolved preset.
539
- * @throws when no configured root supplies that id.
540
- */
541
- async resolve(id?: string): Promise<AgentPreset>
542
-
543
- /**
544
- * Compose one agent from a preset: ensure the preset's standing mount, then
545
- * parent the agent's scope key to it so the mount's registrations and
546
- * listeners cover this agent.
547
- *
548
- * Call from the agent factory's `setup(agentCtx)`; a rejection there rolls
549
- * the agent creation back, so a broken preset never yields a half-composed
550
- * session.
551
- * @param agentCtx - the agent's scope context.
552
- * @param id - the preset id, or `undefined` for {@link defaultId}.
553
- * @returns the preset that was composed, for the caller to record.
554
- * @throws when the preset is unknown or its composition is unusable.
508
+ /** Read every declared preset, including activation failures.
509
+ * @returns Display metadata and loading diagnostics.
555
510
  */
556
- async mount(agentCtx: Context, id?: string): Promise<AgentPreset>
511
+ async list(): Promise<AgentPreset[]>
557
512
 
558
- /**
559
- * Join one agent to the SAME standing composition another already runs on.
560
- *
561
- * This is how a child agent inherits its parent's capabilities. It is a bind,
562
- * not a mount: the parent's generation is already composed, so the child gets
563
- * that exact instance — the same plugin objects, the same tool registrations,
564
- * the same prompt sections. Re-resolving the parent's preset by id instead
565
- * would re-read the roster, and a composition file edited since the parent
566
- * started would hand the child a DIFFERENT generation than the one its
567
- * parent's history was produced under (and a preset deleted since would fail
568
- * the child outright while its parent keeps running).
569
- *
570
- * Synchronous, and with no composition failure mode of its own — it reads no
571
- * roster, mounts nothing, and touches no file — which is what lets a child
572
- * creation window use it: the two in-process subagent drivers compose their
573
- * children inside a synchronous `setup`. It still rejects a caller error, as
574
- * the `@throws` below record.
575
- *
576
- * A parent that joined no preset — a rosterless deployment — yields no join
577
- * and no error: there, the model-facing rows sit in the host composition and
578
- * the child already sees them through the global layer.
579
- * @param agentCtx - the joining agent's scope context.
580
- * @param parentCtx - the scope context of the agent whose composition to join.
581
- * @returns the preset id joined, or undefined when the parent joined none.
582
- * @throws when `agentCtx` carries no scope, or has already joined a preset.
513
+ /** Read the selection roster.
514
+ * @returns Current presets, each marked when it is the default.
583
515
  */
584
- composeFrom(agentCtx: Context, parentCtx: Context): string | undefined
516
+ @Remote('list') async remoteExportList(): Promise<AgentPresetRoster>
585
517
 
586
- /**
587
- * The preset one live agent runs on.
588
- *
589
- * Read from the live scope chain rather than from the session, so it answers
590
- * for an agent whose session has not recorded a preset yet — a child agent
591
- * whose durable header is being built from its parent's composition.
592
- * @param agentCtx - the agent's scope context.
593
- * @returns the preset id, or undefined when the agent joined none.
518
+ /** Resolve an identity without starting an Agent.
519
+ * @param id Explicit preset or the current default.
520
+ * @returns Current metadata, including failure when activation failed.
594
521
  */
595
- composedPreset(agentCtx: Context): string | undefined
522
+ async resolve(id?: string): Promise<AgentPreset>
596
523
 
597
- /**
598
- * Read one preset's composition text.
599
- * @param id - the preset id.
600
- * @returns the composition exactly as stored.
601
- * @throws when no configured root supplies that id.
524
+ /** Read one declaration's child plugin list as YAML, for viewing only.
525
+ * @param agentPreset Preset identity.
526
+ * @returns The declared composition beside its published metadata.
602
527
  */
603
- async read(id: string): Promise<string>
528
+ @Remote('read') readDocument(agentPreset: string): Promise<AgentPresetDocument>
604
529
 
605
- /**
606
- * One preset's composition text with the roster row it belongs to.
607
- * @param agentPreset - the preset id.
608
- * @returns the composition beside its trust and published metadata.
609
- * @throws {RemoteError} `gateway/bad-request` for an empty id, or
610
- * `agent-preset/not-found` when no configured root supplies it.
530
+ /** Bind an unpublished Agent to the current preset revision.
531
+ * @param ctx Agent context from its setup callback.
532
+ * @param id Requested preset, or the default.
533
+ * @returns Bound preset identity.
611
534
  */
612
- @Remote('read') async readDocument(agentPreset: string): Promise<AgentPresetDocument>
535
+ async mount(ctx: Context, id?: string): Promise<AgentPreset>
613
536
 
614
- /**
615
- * Create a locally authored preset by copying an existing one whole.
616
- *
617
- * Copy is the only authoring write. Composition text never crosses this
618
- * seam: the source is named by id and its directory is copied as it stands,
619
- * so the copy is exactly as loadable as its source and authoring grants no
620
- * capability the roster did not already carry. The copy is NOT mounted to
621
- * validate — a source that mounts today yields a copy that mounts today.
622
- * @param from - the preset the copy starts from; shipped presets are the
623
- * primary source, so any trust is accepted.
624
- * @param id - the new preset's id, which becomes its directory name.
625
- * @param name - display name for the copy; absent falls back to the id.
626
- * @throws when the source is unknown, the id is unusable or already taken,
627
- * or the deployment configures no writable root.
537
+ /** Join a child to the exact revision retained by its parent.
538
+ * @param ctx Child Agent context.
539
+ * @param parent Parent Agent context.
540
+ * @returns Inherited preset id, or undefined in a preset-free composition.
628
541
  */
629
- async copy(from: string, id: string, name?: string): Promise<void>
542
+ composeFrom(ctx: Context, parent: Context): string | undefined
630
543
 
631
- /**
632
- * Copy one preset through the Remote API.
633
- * @param from - the source preset id.
634
- * @param id - the new preset id.
635
- * @param name - the copy's optional display name.
636
- * @returns once the copy is stored.
637
- * @throws {RemoteError} with the corresponding stable preset code and
638
- * details when the copy is refused.
544
+ /** Read the preset a live Agent uses.
545
+ * @param ctx Agent context.
546
+ * @returns Its preset id, if bound.
639
547
  */
640
- @Remote('copy') async remoteExportCopy(from: string, id: string, name?: string): Promise<void>
548
+ composedPreset(ctx: Context): string | undefined
641
549
 
642
- /**
643
- * Delete a locally authored preset.
644
- *
645
- * @param id - the preset id.
646
- * @throws when the preset is unknown or ships with the deployment.
647
- */
648
- async remove(id: string): Promise<void>
649
-
650
- /**
651
- * Delete one preset through the Remote API.
652
- * @param id - the preset id.
653
- * @returns once the preset is deleted.
654
- * @throws {RemoteError} with the corresponding stable preset code and
655
- * details when deletion is refused.
656
- */
657
- @Remote('deletePreset') async remoteExportDelete(id: string): Promise<void>
658
-
659
- /**
660
- * One agent's instance of a service its preset mounted.
661
- *
662
- * A preset publishes services behind `isolate` realms, which are invisible
663
- * outside the group that declares them — including to the host. This is how a
664
- * caller holding the agent reads one anyway: a request that is ABOUT a
665
- * session but arrives from outside it, which is every browser RPC.
666
- *
667
- * Read addressing only. A host row that `inject`s a service cannot use this,
668
- * because injection resolves before any session exists and has no agent to
669
- * key by; such a service belongs on the host plane instead.
670
- * @param agent - the agent whose composition to look inside.
671
- * @param name - the service name as the preset's rows resolve it.
672
- * @returns the agent's instance, or undefined when its preset mounts none.
550
+ /** Read a service supplied inside an Agent's isolated preset group.
551
+ * @param agent Agent whose composition is queried.
552
+ * @param name Cordis service name.
553
+ * @returns The service, or undefined.
673
554
  */
674
555
  serviceFor<K extends string & keyof Context>(agent: { ctx: Context }, name: K): Context[K] | undefined
675
556
 
676
- /**
677
- * Re-link one agent to a different preset's standing composition.
678
- *
679
- * Only valid while the agent has produced nothing: swapping tools mid
680
- * conversation would leave logged tool calls the new composition cannot
681
- * make. The CALLER owns that check — this method does not read session
682
- * history.
683
- *
684
- * The swap is a parent re-link, not an unmount: standing mounts are shared
685
- * and permanent, so the old composition stays for its other agents and the
686
- * new one is ensured BEFORE the link moves. An unknown or unusable preset
687
- * therefore throws with the agent exactly as it was — there is no torn-down
688
- * state to restore. The re-link runs through the binding this roster kept
689
- * from the agent's mount — dsh-scope's only re-link authority. An agent
690
- * that never composed one has nothing to re-link: the switch is then the
691
- * agent's first bind, exactly a mount. A committed re-link emits
692
- * `tools/change` because changing the parent scope changes the Agent's
693
- * resolved tool set without adding or removing registry entries.
694
- * @param agentCtx - the agent's scope context.
695
- * @param id - the preset to compose the agent from instead.
696
- * @returns the preset now installed.
697
- * @throws when the preset is unknown or its composition is unusable.
557
+ /** Rebind a blank Agent; the caller owns the blank-session check.
558
+ * @param ctx Agent context.
559
+ * @param id Requested preset.
560
+ * @returns The bound identity.
698
561
  */
699
- async recompose(agentCtx: Context, id: string): Promise<AgentPreset>
562
+ async recompose(ctx: Context, id: string): Promise<AgentPreset>
700
563
 
701
- /**
702
- * Compose a blank session's agent from a different preset and record it.
703
- * @param agent - the session's live agent, resolved from the wire identity.
704
- * @param agentPreset - the preset to compose the agent from instead.
705
- * @returns the preset id that was recorded.
706
- * @throws {RemoteError} with `gateway/bad-request`, `agent-preset/locked`,
707
- * `agent-preset/not-found`, or `agent-preset/invalid` when refused.
564
+ /** Select a preset before a session starts its first turn.
565
+ * @param agent Target Agent.
566
+ * @param agentPreset Requested identity.
567
+ * @returns Committed preset identity.
708
568
  */
709
569
  @Remote('select') async select(agent: Agent, agentPreset: string): Promise<string>
710
570
 
711
- /**
712
- * The standing scope key of one preset, for a host reader with no agent.
713
- *
714
- * A cold transcript read resolves tool presenters against the composition
715
- * the session recorded, and the standing mount makes that possible without
716
- * resuming anything: ensuring the mount composes plugins but starts no
717
- * agent, no session, and no turn.
718
- * @param id - the preset id, or `undefined` for {@link defaultId}.
719
- * @returns the standing scope key readers pass as a registry view scope.
720
- * @throws when the preset is unknown or its composition is unusable.
571
+ /** Read current registrations for cold transcript presentation.
572
+ * @param id Preset identity or the default.
573
+ * @returns A revision lease; dispose it after the scoped read completes.
574
+ */
575
+ async acquireScope(id?: string): Promise<{ key: ScopeKey } & AsyncDisposable>
576
+
577
+ /** Read plugin rows without creating an Agent.
578
+ * @returns Current declaration metadata and activation states.
721
579
  */
722
- async standingKeyFor(id?: string): Promise<ScopeKey>
580
+ compositionInventory(): Promise<AgentPresetComposition[]>
723
581
  ```
724
582
 
725
583
  Types: [ScopeKey](./scope.md)
726
584
 
727
- Source: [`packages/preset/agent-presets/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/index.ts)
585
+ Source: [`packages/preset/agent-preset-registry/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-preset-registry/src/index.ts)
728
586
 
729
587
  <a id="ctxagents--agentregistry"></a>
730
588
 
@@ -820,16 +678,16 @@ async create(options: CreateAgentOptions): Promise<AgentHandle>
820
678
  async resume(options: ResumeAgentOptions): Promise<AgentHandle>
821
679
 
822
680
  /**
823
- * Register a live agent. Throws if an agent with the same id is already
824
- * registered. Emits `agent/created` on registration and `agent/disposed`
681
+ * Register a live agent with source `startup`. Rejects if the id is already registered or a
682
+ * serial `agent/created` listener fails. Emits `agent/disposed`
825
683
  * when the calling fiber is disposed — both with the agent's scope carrier
826
684
  * (`scopeTarget(agent, agent)`): the subject is the agent in hand, so the
827
685
  * emits are scope-filtered regardless of which context invoked `register`
828
686
  * (calling through `agent.ctx` scopes EFFECTS; dispatch scoping always
829
687
  * requires passing the carrier). The entry is a runtime root; factory-backed
830
- * creation uses `options.parentAgent` for child ownership. Returns the disposer.
688
+ * creation uses `options.parentAgent` for child ownership. Await the registration before using the agent.
831
689
  * @param agent - the already-constructed agent to record in the store.
832
- * @returns the EXACT Cordis effect disposer (single-shot; a repeat call
690
+ * @returns the awaitable Cordis effect disposer (single-shot; a repeat call
833
691
  * returns undefined without awaiting an in-flight teardown). Exact
834
692
  * identity is load-bearing: a composite (generator) effect that owns a
835
693
  * teardown ORDER — the agent factory's lifecycle chain — must yield THIS
@@ -838,7 +696,7 @@ async resume(options: ResumeAgentOptions): Promise<AgentHandle>
838
696
  * owner unload, unregistering the agent (and emitting `agent/disposed`)
839
697
  * while its final turn is still draining.
840
698
  */
841
- register(agent: Agent): () => void
699
+ register(agent: Agent): ReturnType<Context['effect']>
842
700
 
843
701
  /**
844
702
  * Insert an already-constructed agent without announcing it. This is the
@@ -852,19 +710,22 @@ register(agent: Agent): () => void
852
710
  * the resumed session's durable parent lineage.
853
711
  * @returns an idempotent closure that removes this exact entry and emits
854
712
  * `agent/disposed` with listener failures contained. When called from a
855
- * synchronous `agent/created` listener, removal and disposal wait until
856
- * that creation dispatch unwinds.
713
+ * `agent/created` listener, removal and disposal wait until the serial
714
+ * creation dispatch settles.
857
715
  */
858
716
  enter(agent: Agent, owner: Agent | undefined): () => void
859
717
 
860
718
  /**
861
719
  * Announce an agent previously inserted with {@link enter}.
862
720
  * @param agent - the live inserted agent to announce.
721
+ * @param source - fresh creation, resume, clear, or compaction source.
722
+ * @param signal - optional factory initialization cancellation signal passed to listeners.
723
+ * @returns completion of the serial creation listeners; a listener failure rejects.
863
724
  * @throws if `agent` is not the exact live registry entry for its id, or its
864
725
  * creation announcement already began (including a reentrant call from a
865
726
  * creation listener).
866
727
  */
867
- announce(agent: Agent): void
728
+ async announce(agent: Agent, source: SessionStartSource, signal?: AbortSignal): Promise<void>
868
729
 
869
730
  /**
870
731
  * Look up a live agent.
@@ -927,24 +788,27 @@ Types: [Scoped](./scope.md)
927
788
 
928
789
  Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
929
790
 
930
- <a id="agentcreated--emit"></a>
791
+ <a id="agentcreated--serial"></a>
931
792
 
932
- #### `agent/created` — emit
793
+ #### `agent/created` — serial
933
794
 
934
- A fully configured agent and live session were published. Setup is composition-only; `agent/session-start` is the first startup-driving extension point. Synchronous listener failure vetoes publication, while returned-promise rejection is reported. Detach requested during dispatch waits until every creation listener has observed the stable entry.
795
+ An entered agent is ready for per-agent initialization after factory setup. Listeners run in order and are awaited before creation resolves. AgentLoop holds queued input until all listeners finish. A throw or rejection fails creation and skips later listeners. Disposal retains the scope and session until dispatch settles; listeners must not await agent.whenIdle() or their own owner's disposal.
935
796
 
936
797
  ```ts cordis-catalog
937
798
  /**
938
- * A fully configured agent and live session were published. Setup is
939
- * composition-only; `agent/session-start` is the first startup-driving extension point.
940
- * Synchronous listener failure vetoes publication, while returned-promise
941
- * rejection is reported. Detach requested during dispatch waits until every
942
- * creation listener has observed the stable entry.
799
+ * An entered agent is ready for per-agent initialization after factory setup.
800
+ * Listeners run in order and are awaited before creation resolves. AgentLoop
801
+ * holds queued input until all listeners finish. A throw or rejection fails
802
+ * creation and skips later listeners. Disposal retains the scope and session
803
+ * until dispatch settles; listeners must not await agent.whenIdle() or their
804
+ * own owner's disposal.
943
805
  * @param payload.agent - the newly registered agent with its live session and completed setup.
806
+ * @param payload.source - fresh creation, resume, clear, or compaction source.
807
+ * @param payload.signal - factory initialization cancellation signal, when provided.
944
808
  * Scope-filtered dispatch (`@deepseek-ai/dsh-scope`): agent-scoped listeners receive only that agent.
945
- * @mode emit
809
+ * @mode serial
946
810
  */
947
- 'agent/created'(this: Scoped<Agent>, payload: { agent: Agent }): void
811
+ 'agent/created'(this: Scoped<Agent>, payload: { agent: Agent; source: SessionStartSource; signal?: AbortSignal }): undefined | Promise<undefined>
948
812
  ```
949
813
 
950
814
  Types: [Scoped](./scope.md)
@@ -1147,30 +1011,6 @@ Types: [LlmFailure](./llm-streaming.md) · [ResolvedRetryPolicy](./llm-streaming
1147
1011
 
1148
1012
  Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
1149
1013
 
1150
- <a id="agentsession-start--emit"></a>
1151
-
1152
- #### `agent/session-start` — emit
1153
-
1154
- The session lifecycle began, once before the first turn. Use `agent.inject()` to seed model-facing context. This is a notification, not a veto; disposal requested by a lifecycle owner is rechecked before the driver starts.
1155
-
1156
- ```ts cordis-catalog
1157
- /**
1158
- * The session lifecycle began, once before the first turn. Use
1159
- * `agent.inject()` to seed model-facing context. This is a notification, not
1160
- * a veto; disposal requested by a lifecycle owner is rechecked before the
1161
- * driver starts.
1162
- * @param payload.agent - the agent whose session lifecycle began.
1163
- * @param payload.source - why the session started (fresh startup, resume, …).
1164
- * Scope-filtered dispatch (`@deepseek-ai/dsh-scope`): agent-scoped listeners receive only that agent.
1165
- * @mode emit
1166
- */
1167
- 'agent/session-start'(this: Scoped<Agent>, payload: { agent: Agent; source: SessionStartSource }): void
1168
- ```
1169
-
1170
- Types: [Scoped](./scope.md)
1171
-
1172
- Source: [`packages/core/agent/src/runtime-types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/runtime-types.ts)
1173
-
1174
1014
  <a id="agentstatus--emit"></a>
1175
1015
 
1176
1016
  #### `agent/status` — emit
@@ -1271,5 +1111,5 @@ One session committed a different agent preset to its durable log. Consumers inv
1271
1111
  'agent-preset/selected'(sessionId: SessionId, agentPreset: string): void
1272
1112
  ```
1273
1113
 
1274
- Source: [`packages/preset/agent-presets/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/types.ts)
1114
+ Source: [`packages/preset/agent-preset-registry/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-preset-registry/src/types.ts)
1275
1115
  <!-- END GENERATED cordis-surface -->