@cjhyy/code-shell-core 0.7.0 → 0.8.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 (621) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +20 -5
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +20 -4
  26. package/dist/context/manager.js +42 -7
  27. package/dist/context/token-counter.js +5 -3
  28. package/dist/context/tool-result-storage.d.ts +6 -0
  29. package/dist/context/tool-result-storage.js +25 -4
  30. package/dist/credentials/access.d.ts +13 -2
  31. package/dist/credentials/access.js +99 -4
  32. package/dist/credentials/index.d.ts +3 -2
  33. package/dist/credentials/index.js +2 -1
  34. package/dist/credentials/oauth.d.ts +9 -1
  35. package/dist/credentials/oauth.js +80 -1
  36. package/dist/credentials/store.d.ts +16 -2
  37. package/dist/credentials/store.js +33 -11
  38. package/dist/credentials/types.d.ts +62 -1
  39. package/dist/credentials/types.js +16 -1
  40. package/dist/credentials/use-credential-tool.js +15 -1
  41. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  42. package/dist/engine/auxiliary-pipeline.js +181 -0
  43. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  44. package/dist/{settings → engine}/disk-defaults.js +5 -2
  45. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  46. package/dist/engine/dynamic-tool-defs.js +4 -0
  47. package/dist/engine/engine.d.ts +272 -184
  48. package/dist/engine/engine.js +1869 -1864
  49. package/dist/engine/file-history-hook.d.ts +11 -0
  50. package/dist/engine/file-history-hook.js +31 -0
  51. package/dist/engine/goal-judge-context.d.ts +9 -0
  52. package/dist/engine/goal-judge-context.js +234 -0
  53. package/dist/engine/injected-context-cache.d.ts +6 -0
  54. package/dist/engine/injected-context-cache.js +13 -0
  55. package/dist/engine/input-attachments.d.ts +1 -1
  56. package/dist/engine/model-facade.d.ts +3 -3
  57. package/dist/engine/model-facade.js +15 -14
  58. package/dist/engine/permission-controller.d.ts +55 -0
  59. package/dist/engine/permission-controller.js +148 -0
  60. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  61. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  62. package/dist/engine/run-accounting.d.ts +41 -0
  63. package/dist/engine/run-accounting.js +126 -0
  64. package/dist/engine/run-context.d.ts +44 -0
  65. package/dist/engine/run-context.js +88 -0
  66. package/dist/engine/run-environment.d.ts +30 -0
  67. package/dist/engine/run-environment.js +77 -0
  68. package/dist/engine/run-finalize.d.ts +58 -0
  69. package/dist/engine/run-finalize.js +245 -0
  70. package/dist/engine/run-goal.d.ts +58 -0
  71. package/dist/engine/run-goal.js +188 -0
  72. package/dist/engine/run-image-input.d.ts +1 -1
  73. package/dist/engine/run-image-input.js +5 -3
  74. package/dist/engine/run-session-open.d.ts +41 -0
  75. package/dist/engine/run-session-open.js +186 -0
  76. package/dist/engine/run-setup.d.ts +42 -0
  77. package/dist/engine/run-setup.js +58 -0
  78. package/dist/engine/run-tooling.d.ts +125 -0
  79. package/dist/engine/run-tooling.js +283 -0
  80. package/dist/engine/run-types.d.ts +139 -0
  81. package/dist/engine/run-types.js +12 -0
  82. package/dist/engine/run-workspace.d.ts +50 -0
  83. package/dist/engine/run-workspace.js +114 -0
  84. package/dist/engine/session-title.d.ts +2 -1
  85. package/dist/engine/session-title.js +4 -1
  86. package/dist/engine/steer-queue.d.ts +1 -1
  87. package/dist/engine/subagent-spawner.d.ts +32 -0
  88. package/dist/engine/subagent-spawner.js +287 -0
  89. package/dist/engine/tool-summary.d.ts +2 -2
  90. package/dist/engine/tool-summary.js +2 -2
  91. package/dist/engine/turn-loop.d.ts +67 -10
  92. package/dist/engine/turn-loop.js +538 -97
  93. package/dist/engine/types.d.ts +35 -4
  94. package/dist/engine/types.js +1 -1
  95. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
  96. package/dist/goal/lifecycle.js +482 -0
  97. package/dist/hooks/events.d.ts +26 -9
  98. package/dist/hooks/events.js +0 -3
  99. package/dist/hooks/goal-stop-hook.d.ts +28 -29
  100. package/dist/hooks/goal-stop-hook.js +344 -144
  101. package/dist/hooks/registry.js +4 -1
  102. package/dist/hooks/shell-runner.d.ts +12 -1
  103. package/dist/hooks/shell-runner.js +160 -9
  104. package/dist/index.d.ts +51 -110
  105. package/dist/index.extension.d.ts +51 -0
  106. package/dist/index.extension.js +39 -0
  107. package/dist/index.internal.d.ts +86 -0
  108. package/dist/index.internal.js +92 -0
  109. package/dist/index.js +37 -125
  110. package/dist/links/cli.d.ts +48 -0
  111. package/dist/links/cli.js +617 -0
  112. package/dist/links/http.d.ts +40 -0
  113. package/dist/links/http.js +166 -0
  114. package/dist/links/index.d.ts +4 -0
  115. package/dist/links/index.js +3 -0
  116. package/dist/links/link-action-tool.d.ts +5 -0
  117. package/dist/links/link-action-tool.js +241 -0
  118. package/dist/links/providers.d.ts +8 -0
  119. package/dist/links/providers.js +665 -0
  120. package/dist/links/types.d.ts +44 -0
  121. package/dist/llm/client-base.d.ts +7 -0
  122. package/dist/llm/client-base.js +72 -10
  123. package/dist/llm/model-pool.d.ts +1 -1
  124. package/dist/llm/model-pool.js +1 -1
  125. package/dist/llm/providers/anthropic.d.ts +1 -0
  126. package/dist/llm/providers/anthropic.js +9 -0
  127. package/dist/llm/providers/openai.d.ts +1 -0
  128. package/dist/llm/providers/openai.js +17 -0
  129. package/dist/llm/types.d.ts +12 -5
  130. package/dist/model-catalog/index.js +15 -2
  131. package/dist/model-catalog/resolve.d.ts +13 -1
  132. package/dist/model-catalog/resolve.js +37 -2
  133. package/dist/model-catalog/types.d.ts +74 -48
  134. package/dist/model-catalog/types.js +16 -5
  135. package/dist/model-catalog/upsert.d.ts +3 -1
  136. package/dist/model-catalog/upsert.js +9 -0
  137. package/dist/onboarding.d.ts +0 -1
  138. package/dist/onboarding.js +1 -22
  139. package/dist/panel-apps/bindings.d.ts +24 -0
  140. package/dist/panel-apps/bindings.js +69 -0
  141. package/dist/panel-apps/github-archive.d.ts +21 -0
  142. package/dist/panel-apps/github-archive.js +98 -0
  143. package/dist/panel-apps/index.d.ts +4 -0
  144. package/dist/panel-apps/index.js +4 -0
  145. package/dist/panel-apps/installer.d.ts +68 -0
  146. package/dist/panel-apps/installer.js +622 -0
  147. package/dist/panel-apps/manifest.d.ts +364 -0
  148. package/dist/panel-apps/manifest.js +189 -0
  149. package/dist/panel-apps/paths.d.ts +13 -0
  150. package/dist/panel-apps/paths.js +38 -0
  151. package/dist/panel-apps/registry.d.ts +51 -0
  152. package/dist/panel-apps/registry.js +99 -0
  153. package/dist/panel-apps/runtime.d.ts +80 -0
  154. package/dist/panel-apps/runtime.js +154 -0
  155. package/dist/plugins/gitOps.js +8 -1
  156. package/dist/plugins/installedPlugins.d.ts +2 -1
  157. package/dist/plugins/installedPlugins.js +146 -8
  158. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  159. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  160. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  161. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  162. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  163. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  164. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  165. package/dist/plugins/installer/install.d.ts +7 -1
  166. package/dist/plugins/installer/install.js +21 -87
  167. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  168. package/dist/plugins/installer/installFromArchive.js +44 -27
  169. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  170. package/dist/plugins/installer/installFromNpm.js +273 -0
  171. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  172. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  173. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  174. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  175. package/dist/plugins/installer/normalizeManifest.js +306 -0
  176. package/dist/plugins/installer/npmTar.d.ts +13 -0
  177. package/dist/plugins/installer/npmTar.js +321 -0
  178. package/dist/plugins/installer/parseSource.d.ts +11 -0
  179. package/dist/plugins/installer/parseSource.js +48 -0
  180. package/dist/plugins/installer/preview.d.ts +101 -0
  181. package/dist/plugins/installer/preview.js +336 -0
  182. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  183. package/dist/plugins/installer/projectPluginSource.js +140 -0
  184. package/dist/plugins/installer/types.d.ts +775 -0
  185. package/dist/plugins/installer/types.js +100 -0
  186. package/dist/plugins/installer/unzip.d.ts +11 -0
  187. package/dist/plugins/installer/unzip.js +123 -9
  188. package/dist/plugins/installer/update.d.ts +2 -2
  189. package/dist/plugins/installer/update.js +43 -4
  190. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  191. package/dist/plugins/loadPluginHooks.js +97 -86
  192. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  193. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  194. package/dist/plugins/pluginCatalog.d.ts +45 -0
  195. package/dist/plugins/pluginCatalog.js +87 -0
  196. package/dist/plugins/pluginCommandHook.d.ts +10 -4
  197. package/dist/plugins/pluginCommandHook.js +133 -18
  198. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  199. package/dist/plugins/pluginCommandsLoader.js +181 -7
  200. package/dist/plugins/pluginContent.d.ts +10 -1
  201. package/dist/plugins/pluginContent.js +87 -30
  202. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  203. package/dist/plugins/pluginHookApproval.js +160 -0
  204. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  205. package/dist/plugins/pluginHookIntegrity.js +361 -0
  206. package/dist/plugins/pluginInstaller.js +71 -12
  207. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  208. package/dist/plugins/pluginMcpApproval.js +110 -0
  209. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  210. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  211. package/dist/plugins/types.d.ts +30 -0
  212. package/dist/plugins/varRewrite.d.ts +9 -5
  213. package/dist/plugins/varRewrite.js +26 -17
  214. package/dist/preset/index.d.ts +11 -8
  215. package/dist/preset/index.js +62 -203
  216. package/dist/product/define.js +9 -3
  217. package/dist/product/types.d.ts +0 -2
  218. package/dist/profile/activation.d.ts +36 -0
  219. package/dist/profile/activation.js +57 -0
  220. package/dist/profile/catalog-store.d.ts +77 -0
  221. package/dist/profile/catalog-store.js +346 -0
  222. package/dist/profile/catalog.d.ts +54 -0
  223. package/dist/profile/catalog.js +152 -0
  224. package/dist/profile/index.d.ts +7 -0
  225. package/dist/profile/index.js +7 -0
  226. package/dist/profile/requirements.d.ts +76 -0
  227. package/dist/profile/requirements.js +117 -0
  228. package/dist/profile/resolve.d.ts +11 -0
  229. package/dist/profile/resolve.js +41 -0
  230. package/dist/profile/store.d.ts +17 -0
  231. package/dist/profile/store.js +167 -0
  232. package/dist/profile/types.d.ts +321 -0
  233. package/dist/profile/types.js +104 -0
  234. package/dist/prompt/composer.d.ts +46 -7
  235. package/dist/prompt/composer.js +78 -48
  236. package/dist/prompt/instruction-scanner.d.ts +6 -5
  237. package/dist/prompt/instruction-scanner.js +8 -23
  238. package/dist/prompt/section-loader.d.ts +2 -2
  239. package/dist/prompt/section-loader.js +7 -4
  240. package/dist/prompt/sections/browser.md +10 -9
  241. package/dist/prompt/sections/harness-base.md +9 -0
  242. package/dist/protocol/chat-session-manager.d.ts +77 -3
  243. package/dist/protocol/chat-session-manager.js +194 -18
  244. package/dist/protocol/chat-session.d.ts +72 -9
  245. package/dist/protocol/chat-session.js +151 -16
  246. package/dist/protocol/client.d.ts +37 -4
  247. package/dist/protocol/client.js +118 -6
  248. package/dist/protocol/index.d.ts +2 -2
  249. package/dist/protocol/index.js +2 -2
  250. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  251. package/dist/protocol/mobile-remote-types.js +1 -0
  252. package/dist/protocol/server.d.ts +152 -14
  253. package/dist/protocol/server.js +1574 -229
  254. package/dist/protocol/types.d.ts +182 -32
  255. package/dist/protocol/types.js +18 -0
  256. package/dist/run/ArtifactTracker.d.ts +6 -1
  257. package/dist/run/ArtifactTracker.js +29 -21
  258. package/dist/run/EngineRunner.d.ts +2 -0
  259. package/dist/run/EngineRunner.js +1 -0
  260. package/dist/run/RunManager.d.ts +26 -0
  261. package/dist/run/RunManager.js +82 -11
  262. package/dist/run/factory.d.ts +3 -0
  263. package/dist/run/factory.js +2 -0
  264. package/dist/runtime/safe-spawn.d.ts +6 -0
  265. package/dist/runtime/safe-spawn.js +8 -13
  266. package/dist/services/auto-dream.d.ts +13 -1
  267. package/dist/services/auto-dream.js +56 -8
  268. package/dist/services/dream-consolidation.d.ts +3 -0
  269. package/dist/services/dream-consolidation.js +14 -2
  270. package/dist/services/index.d.ts +1 -1
  271. package/dist/services/index.js +1 -1
  272. package/dist/services/memory-orchestrator.js +6 -2
  273. package/dist/services/oauth.d.ts +34 -10
  274. package/dist/services/oauth.js +236 -98
  275. package/dist/services/session-memory.d.ts +4 -4
  276. package/dist/services/session-memory.js +13 -10
  277. package/dist/session/memory.d.ts +26 -7
  278. package/dist/session/memory.js +79 -21
  279. package/dist/session/session-manager.d.ts +208 -25
  280. package/dist/session/session-manager.js +1232 -116
  281. package/dist/session/session-message.d.ts +22 -0
  282. package/dist/session/session-message.js +1 -0
  283. package/dist/session/transcript.d.ts +76 -6
  284. package/dist/session/transcript.js +278 -7
  285. package/dist/settings/feature-flags.d.ts +40 -0
  286. package/dist/settings/feature-flags.js +40 -0
  287. package/dist/settings/manager.d.ts +39 -1
  288. package/dist/settings/manager.js +102 -41
  289. package/dist/settings/migrate-config.js +4 -2
  290. package/dist/settings/schema.d.ts +511 -177
  291. package/dist/settings/schema.js +98 -25
  292. package/dist/skills/scanner.d.ts +6 -2
  293. package/dist/skills/scanner.js +160 -9
  294. package/dist/sources/adapter.d.ts +14 -0
  295. package/dist/sources/adapter.js +7 -0
  296. package/dist/sources/adapters/local-files.d.ts +10 -0
  297. package/dist/sources/adapters/local-files.js +127 -0
  298. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  299. package/dist/sources/adapters/mcp-resource.js +41 -0
  300. package/dist/sources/adapters/mock.d.ts +3 -0
  301. package/dist/sources/adapters/mock.js +29 -0
  302. package/dist/sources/binding.d.ts +6 -0
  303. package/dist/sources/binding.js +24 -0
  304. package/dist/sources/catalog.d.ts +6 -0
  305. package/dist/sources/catalog.js +64 -0
  306. package/dist/sources/context-summary.d.ts +8 -0
  307. package/dist/sources/context-summary.js +13 -0
  308. package/dist/sources/credential-status.d.ts +2 -0
  309. package/dist/sources/credential-status.js +13 -0
  310. package/dist/sources/index.d.ts +10 -0
  311. package/dist/sources/index.js +10 -0
  312. package/dist/sources/resolve.d.ts +28 -0
  313. package/dist/sources/resolve.js +47 -0
  314. package/dist/sources/truncate-utf8.d.ts +7 -0
  315. package/dist/sources/truncate-utf8.js +18 -0
  316. package/dist/sources/types.d.ts +71 -0
  317. package/dist/sources/types.js +26 -0
  318. package/dist/testing/fetch-stub.d.ts +32 -0
  319. package/dist/testing/fetch-stub.js +24 -0
  320. package/dist/themes/image.d.ts +18 -0
  321. package/dist/themes/image.js +117 -0
  322. package/dist/themes/index.d.ts +4 -0
  323. package/dist/themes/index.js +4 -0
  324. package/dist/themes/installer.d.ts +50 -0
  325. package/dist/themes/installer.js +290 -0
  326. package/dist/themes/manifest.d.ts +102 -0
  327. package/dist/themes/manifest.js +86 -0
  328. package/dist/themes/paths.d.ts +14 -0
  329. package/dist/themes/paths.js +33 -0
  330. package/dist/tool-system/browser-bridge.d.ts +53 -11
  331. package/dist/tool-system/browser-bridge.js +8 -9
  332. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  333. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  334. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  335. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  336. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  337. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  338. package/dist/tool-system/builtin/agent-progress.js +83 -0
  339. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  340. package/dist/tool-system/builtin/agent-registry.js +178 -9
  341. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  342. package/dist/tool-system/builtin/agent.d.ts +2 -0
  343. package/dist/tool-system/builtin/agent.js +279 -34
  344. package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
  345. package/dist/tool-system/builtin/background-jobs.js +111 -15
  346. package/dist/tool-system/builtin/background-work.d.ts +12 -1
  347. package/dist/tool-system/builtin/background-work.js +12 -1
  348. package/dist/tool-system/builtin/bash.d.ts +3 -5
  349. package/dist/tool-system/builtin/bash.js +14 -6
  350. package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
  351. package/dist/tool-system/builtin/browser-tools.js +89 -23
  352. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  353. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  354. package/dist/tool-system/builtin/edit.d.ts +2 -1
  355. package/dist/tool-system/builtin/edit.js +14 -10
  356. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  357. package/dist/tool-system/builtin/file-cache.js +4 -0
  358. package/dist/tool-system/builtin/generate-image.js +17 -10
  359. package/dist/tool-system/builtin/generate-video.d.ts +4 -0
  360. package/dist/tool-system/builtin/generate-video.js +164 -28
  361. package/dist/tool-system/builtin/glob.d.ts +2 -1
  362. package/dist/tool-system/builtin/glob.js +28 -3
  363. package/dist/tool-system/builtin/grep.d.ts +1 -0
  364. package/dist/tool-system/builtin/grep.js +82 -17
  365. package/dist/tool-system/builtin/image-uploader.js +7 -1
  366. package/dist/tool-system/builtin/index.d.ts +57 -18
  367. package/dist/tool-system/builtin/index.js +280 -167
  368. package/dist/tool-system/builtin/memory.d.ts +6 -0
  369. package/dist/tool-system/builtin/memory.js +36 -15
  370. package/dist/tool-system/builtin/panel.d.ts +9 -0
  371. package/dist/tool-system/builtin/panel.js +314 -0
  372. package/dist/tool-system/builtin/read.js +5 -1
  373. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  374. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  375. package/dist/tool-system/builtin/sources.d.ts +8 -0
  376. package/dist/tool-system/builtin/sources.js +137 -0
  377. package/dist/tool-system/builtin/tool-search.js +7 -2
  378. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  379. package/dist/tool-system/builtin/video-providers.d.ts +12 -15
  380. package/dist/tool-system/builtin/video-providers.js +1 -0
  381. package/dist/tool-system/builtin/view-image.d.ts +2 -2
  382. package/dist/tool-system/builtin/web-fetch.js +60 -15
  383. package/dist/tool-system/builtin/web-search.js +1 -3
  384. package/dist/tool-system/builtin/write.d.ts +2 -1
  385. package/dist/tool-system/builtin/write.js +14 -4
  386. package/dist/tool-system/capability-module.d.ts +93 -0
  387. package/dist/tool-system/capability-module.js +53 -0
  388. package/dist/tool-system/context.d.ts +94 -24
  389. package/dist/tool-system/executor.js +99 -58
  390. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  391. package/dist/tool-system/external-tool-exposure.js +304 -0
  392. package/dist/tool-system/mcp-manager.d.ts +17 -1
  393. package/dist/tool-system/mcp-manager.js +72 -7
  394. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  395. package/dist/tool-system/mcp-tool-policy.js +34 -0
  396. package/dist/tool-system/panel-bridge.d.ts +53 -0
  397. package/dist/tool-system/panel-bridge.js +1 -0
  398. package/dist/tool-system/path-policy.d.ts +19 -0
  399. package/dist/tool-system/path-policy.js +62 -1
  400. package/dist/tool-system/permission.d.ts +69 -3
  401. package/dist/tool-system/permission.js +429 -30
  402. package/dist/tool-system/registry.d.ts +15 -3
  403. package/dist/tool-system/registry.js +82 -40
  404. package/dist/tool-system/sandbox/index.js +3 -8
  405. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  406. package/dist/tool-system/session-tool-host.d.ts +139 -0
  407. package/dist/tool-system/session-tool-host.js +167 -0
  408. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  409. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  410. package/dist/tool-system/validation.d.ts +14 -7
  411. package/dist/tool-system/validation.js +701 -7
  412. package/dist/types.d.ts +201 -20
  413. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  414. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  415. package/dist/utils/file-mutex.d.ts +65 -0
  416. package/dist/utils/file-mutex.js +145 -0
  417. package/dist/utils/json.d.ts +2 -4
  418. package/dist/utils/json.js +2 -4
  419. package/dist/utils/lockfile.d.ts +30 -1
  420. package/dist/utils/lockfile.js +2 -2
  421. package/dist/utils/secret-scrubber.d.ts +8 -0
  422. package/dist/utils/secret-scrubber.js +227 -0
  423. package/dist/utils/toolDisplay.js +1 -1
  424. package/package.json +20 -5
  425. package/THIRD_PARTY_NOTICES.md +0 -206
  426. package/dist/arena/arena.d.ts +0 -43
  427. package/dist/arena/arena.js +0 -333
  428. package/dist/arena/context/context-tools.d.ts +0 -16
  429. package/dist/arena/context/context-tools.js +0 -272
  430. package/dist/arena/context/within-root.d.ts +0 -7
  431. package/dist/arena/context/within-root.js +0 -15
  432. package/dist/arena/detect-mode.d.ts +0 -20
  433. package/dist/arena/detect-mode.js +0 -78
  434. package/dist/arena/digest-builder.d.ts +0 -25
  435. package/dist/arena/digest-builder.js +0 -120
  436. package/dist/arena/index.d.ts +0 -29
  437. package/dist/arena/index.js +0 -29
  438. package/dist/arena/iterate/convergence.d.ts +0 -25
  439. package/dist/arena/iterate/convergence.js +0 -103
  440. package/dist/arena/iterate/formats/index.d.ts +0 -22
  441. package/dist/arena/iterate/formats/index.js +0 -283
  442. package/dist/arena/iterate/index.d.ts +0 -11
  443. package/dist/arena/iterate/index.js +0 -9
  444. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  445. package/dist/arena/iterate/iterative-arena.js +0 -237
  446. package/dist/arena/iterate/parse.d.ts +0 -42
  447. package/dist/arena/iterate/parse.js +0 -123
  448. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  449. package/dist/arena/iterate/phases/argue.js +0 -165
  450. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  451. package/dist/arena/iterate/phases/revise.js +0 -62
  452. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  453. package/dist/arena/iterate/phases/tournament.js +0 -113
  454. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  455. package/dist/arena/iterate/tools/web-tools.js +0 -54
  456. package/dist/arena/iterate/types.d.ts +0 -152
  457. package/dist/arena/iterate/types.js +0 -8
  458. package/dist/arena/ledger.d.ts +0 -47
  459. package/dist/arena/ledger.js +0 -159
  460. package/dist/arena/lenses/architecture.d.ts +0 -5
  461. package/dist/arena/lenses/architecture.js +0 -22
  462. package/dist/arena/lenses/engineering.d.ts +0 -5
  463. package/dist/arena/lenses/engineering.js +0 -22
  464. package/dist/arena/lenses/general.d.ts +0 -5
  465. package/dist/arena/lenses/general.js +0 -20
  466. package/dist/arena/lenses/index.d.ts +0 -16
  467. package/dist/arena/lenses/index.js +0 -47
  468. package/dist/arena/lenses/product.d.ts +0 -5
  469. package/dist/arena/lenses/product.js +0 -22
  470. package/dist/arena/model-presets.d.ts +0 -23
  471. package/dist/arena/model-presets.js +0 -44
  472. package/dist/arena/phases/adjudication.d.ts +0 -24
  473. package/dist/arena/phases/adjudication.js +0 -141
  474. package/dist/arena/phases/build-consensus.d.ts +0 -29
  475. package/dist/arena/phases/build-consensus.js +0 -83
  476. package/dist/arena/phases/claim-registry.d.ts +0 -26
  477. package/dist/arena/phases/claim-registry.js +0 -60
  478. package/dist/arena/phases/cross-review.d.ts +0 -45
  479. package/dist/arena/phases/cross-review.js +0 -218
  480. package/dist/arena/phases/debate-rounds.d.ts +0 -27
  481. package/dist/arena/phases/debate-rounds.js +0 -159
  482. package/dist/arena/phases/participant-research.d.ts +0 -38
  483. package/dist/arena/phases/participant-research.js +0 -314
  484. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
  485. package/dist/arena/phases/planning-detail-expansion.js +0 -119
  486. package/dist/arena/planner.d.ts +0 -27
  487. package/dist/arena/planner.js +0 -311
  488. package/dist/arena/providers/docs.d.ts +0 -7
  489. package/dist/arena/providers/docs.js +0 -111
  490. package/dist/arena/providers/git.d.ts +0 -8
  491. package/dist/arena/providers/git.js +0 -174
  492. package/dist/arena/providers/index.d.ts +0 -32
  493. package/dist/arena/providers/index.js +0 -132
  494. package/dist/arena/providers/none.d.ts +0 -7
  495. package/dist/arena/providers/none.js +0 -11
  496. package/dist/arena/providers/repo.d.ts +0 -7
  497. package/dist/arena/providers/repo.js +0 -258
  498. package/dist/arena/render/session.d.ts +0 -17
  499. package/dist/arena/render/session.js +0 -190
  500. package/dist/arena/render/terminal.d.ts +0 -34
  501. package/dist/arena/render/terminal.js +0 -286
  502. package/dist/arena/strategies/discussion.d.ts +0 -25
  503. package/dist/arena/strategies/discussion.js +0 -143
  504. package/dist/arena/strategies/index.d.ts +0 -15
  505. package/dist/arena/strategies/index.js +0 -28
  506. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  507. package/dist/arena/strategies/language-wrapper.js +0 -102
  508. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  509. package/dist/arena/strategies/lens-wrapper.js +0 -236
  510. package/dist/arena/strategies/planning.d.ts +0 -30
  511. package/dist/arena/strategies/planning.js +0 -225
  512. package/dist/arena/strategies/review.d.ts +0 -26
  513. package/dist/arena/strategies/review.js +0 -168
  514. package/dist/arena/strategies/utils.d.ts +0 -36
  515. package/dist/arena/strategies/utils.js +0 -603
  516. package/dist/arena/tools/selector.d.ts +0 -17
  517. package/dist/arena/tools/selector.js +0 -61
  518. package/dist/arena/transitions.d.ts +0 -53
  519. package/dist/arena/transitions.js +0 -97
  520. package/dist/arena/types.d.ts +0 -514
  521. package/dist/arena/types.js +0 -27
  522. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  523. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  524. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  525. package/dist/cc-orchestrator/cc-capability.js +0 -53
  526. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  527. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  528. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  529. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  530. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  531. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  532. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  533. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  534. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  535. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  536. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  537. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  538. package/dist/cc-orchestrator/index.d.ts +0 -8
  539. package/dist/cc-orchestrator/index.js +0 -8
  540. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  541. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  542. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  543. package/dist/cc-orchestrator/session-discovery.js +0 -125
  544. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  545. package/dist/cc-orchestrator/session-history.js +0 -150
  546. package/dist/cron/cron-runtime.d.ts +0 -2
  547. package/dist/cron/cron-runtime.js +0 -2
  548. package/dist/cron/cron-store.d.ts +0 -2
  549. package/dist/cron/cron-store.js +0 -2
  550. package/dist/cron/scheduler.d.ts +0 -7
  551. package/dist/cron/scheduler.js +0 -7
  552. package/dist/engine/goal.js +0 -206
  553. package/dist/external-agents/config.d.ts +0 -2
  554. package/dist/external-agents/config.js +0 -15
  555. package/dist/external-agents/types.d.ts +0 -31
  556. package/dist/git/parse-log.d.ts +0 -13
  557. package/dist/git/parse-log.js +0 -21
  558. package/dist/git/utils.d.ts +0 -49
  559. package/dist/git/utils.js +0 -161
  560. package/dist/git/worktree/crud.d.ts +0 -69
  561. package/dist/git/worktree/crud.js +0 -206
  562. package/dist/git/worktree/diff.d.ts +0 -14
  563. package/dist/git/worktree/diff.js +0 -82
  564. package/dist/git/worktree/git-exec.d.ts +0 -7
  565. package/dist/git/worktree/git-exec.js +0 -51
  566. package/dist/git/worktree/index.d.ts +0 -5
  567. package/dist/git/worktree/index.js +0 -5
  568. package/dist/git/worktree/query.d.ts +0 -42
  569. package/dist/git/worktree/query.js +0 -121
  570. package/dist/git/worktree/slug.d.ts +0 -11
  571. package/dist/git/worktree/slug.js +0 -58
  572. package/dist/git/worktree.d.ts +0 -1
  573. package/dist/git/worktree.js +0 -5
  574. package/dist/lsp/client.d.ts +0 -41
  575. package/dist/lsp/client.js +0 -186
  576. package/dist/lsp/manager.d.ts +0 -40
  577. package/dist/lsp/manager.js +0 -155
  578. package/dist/lsp/root-path.d.ts +0 -9
  579. package/dist/lsp/root-path.js +0 -12
  580. package/dist/lsp/servers.d.ts +0 -16
  581. package/dist/lsp/servers.js +0 -60
  582. package/dist/prompt/sections/coding.md +0 -35
  583. package/dist/quota/credentials.d.ts +0 -3
  584. package/dist/quota/credentials.js +0 -80
  585. package/dist/quota/index.d.ts +0 -36
  586. package/dist/quota/index.js +0 -155
  587. package/dist/quota/types.d.ts +0 -48
  588. package/dist/quota/types.js +0 -13
  589. package/dist/review/review-prompt.d.ts +0 -28
  590. package/dist/review/review-prompt.js +0 -81
  591. package/dist/state.d.ts +0 -160
  592. package/dist/state.js +0 -267
  593. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  594. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  595. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  596. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  597. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  598. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  599. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  600. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  601. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  602. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  603. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  604. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  605. package/dist/tool-system/builtin/arena.d.ts +0 -31
  606. package/dist/tool-system/builtin/arena.js +0 -415
  607. package/dist/tool-system/builtin/brief.d.ts +0 -6
  608. package/dist/tool-system/builtin/brief.js +0 -41
  609. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  610. package/dist/tool-system/builtin/check-quota.js +0 -34
  611. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  612. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  613. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  614. package/dist/tool-system/builtin/lsp.js +0 -144
  615. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  616. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  617. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  618. package/dist/tool-system/builtin/worktree.js +0 -345
  619. /package/dist/{external-agents → links}/types.js +0 -0
  620. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  621. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -0,0 +1,32 @@
1
+ import type { LLMConfig, StreamCallback } from "../types.js";
2
+ import type { AgentPresetName } from "../preset/index.js";
3
+ import type { ModelPool } from "../llm/model-pool.js";
4
+ import type { SubAgentSpawner } from "../tool-system/context.js";
5
+ import type { EngineConfig } from "./types.js";
6
+ import type { ChildEngineRunner } from "./run-types.js";
7
+ import { type SandboxConfig, type SandboxMode } from "../tool-system/sandbox/index.js";
8
+ import type { MCPServerConfig } from "../types.js";
9
+ export declare const NESTED_AGENT_TOOLS: string[];
10
+ export declare function resolveChildLlm(modelKey: string | undefined, pool: ModelPool | undefined, parentLlm: LLMConfig): LLMConfig;
11
+ export declare function resolveChildToolScope(allowlist: string[] | undefined, parentDisabled: string[] | undefined, parentEnabled: string[] | undefined): {
12
+ enabled?: string[];
13
+ disabled: string[];
14
+ };
15
+ export declare function resolveChildSandbox(mode: SandboxMode | undefined, parent: SandboxConfig): SandboxConfig;
16
+ export declare function resolveChildMcpServers(allowlist: string[] | undefined, parent: Record<string, MCPServerConfig> | undefined): Record<string, MCPServerConfig> | undefined;
17
+ export declare function wrapChildStream(destination: StreamCallback | undefined, agentId: string): StreamCallback | undefined;
18
+ export interface CreateSubAgentSpawnerDeps {
19
+ parentConfig: EngineConfig;
20
+ /** Fully resolved sandbox for this parent run, including settings layers. */
21
+ parentSandbox: SandboxConfig;
22
+ presetName: AgentPresetName;
23
+ cwd: string;
24
+ permissionMode: NonNullable<EngineConfig["permissionMode"]>;
25
+ modelPool?: ModelPool;
26
+ appendParentSubagent: (agentId: string, description: string) => void;
27
+ sessionExists: (sessionId: string) => boolean;
28
+ getSessionParentId?: (sessionId: string) => string | null | undefined;
29
+ childRunner: ChildEngineRunner;
30
+ parentStream?: StreamCallback;
31
+ }
32
+ export declare function createSubAgentSpawner(deps: CreateSubAgentSpawnerDeps): SubAgentSpawner;
@@ -0,0 +1,287 @@
1
+ import { buildAgentDirectionMessage, notificationQueue, } from "../tool-system/builtin/agent-notifications.js";
2
+ import { nanoid } from "nanoid";
3
+ import { defaultSandboxConfig, } from "../tool-system/sandbox/index.js";
4
+ export const NESTED_AGENT_TOOLS = ["Agent", "AgentStatus", "AgentCancel", "AgentSendInput"];
5
+ export function resolveChildLlm(modelKey, pool, parentLlm) {
6
+ if (modelKey && pool?.has(modelKey)) {
7
+ const resolved = pool.resolveLLMConfig(modelKey);
8
+ if (resolved)
9
+ return resolved;
10
+ }
11
+ return parentLlm;
12
+ }
13
+ export function resolveChildToolScope(allowlist, parentDisabled, parentEnabled) {
14
+ if (allowlist) {
15
+ return {
16
+ enabled: allowlist.filter((tool) => !NESTED_AGENT_TOOLS.includes(tool)),
17
+ disabled: [...NESTED_AGENT_TOOLS],
18
+ };
19
+ }
20
+ return {
21
+ enabled: parentEnabled?.filter((tool) => !NESTED_AGENT_TOOLS.includes(tool)),
22
+ disabled: Array.from(new Set([...(parentDisabled ?? []), ...NESTED_AGENT_TOOLS])),
23
+ };
24
+ }
25
+ export function resolveChildSandbox(mode, parent) {
26
+ if (mode === undefined)
27
+ return parent;
28
+ // Role definitions are project/plugin-authored capability constraints, not
29
+ // an authority to weaken the user's effective run sandbox. Explicit native
30
+ // backends are already fail-closed; keep them unchanged. `auto` may resolve
31
+ // to an isolated backend, so it likewise cannot be downgraded to off/auto.
32
+ if (parent.mode === "seatbelt" || parent.mode === "bwrap")
33
+ return parent;
34
+ if (parent.mode === "auto" && (mode === "off" || mode === "auto"))
35
+ return parent;
36
+ return { ...defaultSandboxConfig(mode), ...parent, mode };
37
+ }
38
+ export function resolveChildMcpServers(allowlist, parent) {
39
+ if (allowlist === undefined)
40
+ return parent;
41
+ const allowed = new Set(allowlist);
42
+ return Object.fromEntries(Object.entries(parent ?? {}).filter(([name]) => allowed.has(name)));
43
+ }
44
+ export function wrapChildStream(destination, agentId) {
45
+ if (!destination)
46
+ return undefined;
47
+ return (event) => {
48
+ if (event.type === "usage_update" ||
49
+ event.type === "session_started" ||
50
+ event.type === "context_compact") {
51
+ return;
52
+ }
53
+ destination({ ...event, agentId });
54
+ };
55
+ }
56
+ function wrapChildRuntimeStream(destination, agentId, onProgressEvent) {
57
+ const uiStream = wrapChildStream(destination, agentId);
58
+ if (!uiStream && !onProgressEvent)
59
+ return undefined;
60
+ return (event) => {
61
+ onProgressEvent?.(event);
62
+ return uiStream?.(event);
63
+ };
64
+ }
65
+ class ChildRunSupervisor {
66
+ runtime;
67
+ childSessionId;
68
+ runtimeGeneration;
69
+ state = "starting";
70
+ activeController;
71
+ interruptPending = false;
72
+ running = false;
73
+ intakeClosed = false;
74
+ pendingDelivered = new Map();
75
+ closeIntake;
76
+ constructor(runtime, childSessionId, runtimeGeneration) {
77
+ this.runtime = runtime;
78
+ this.childSessionId = childSessionId;
79
+ this.runtimeGeneration = runtimeGeneration;
80
+ runtime.setAgentControlStateListener((state) => {
81
+ this.state = state;
82
+ });
83
+ runtime.setAgentDirectionsDeliveredListener?.((envelopeIds) => {
84
+ for (const id of envelopeIds) {
85
+ const pending = this.pendingDelivered.get(id);
86
+ if (!pending)
87
+ continue;
88
+ this.pendingDelivered.delete(id);
89
+ pending.resolve({ status: "delivered", ...pending.receipt });
90
+ }
91
+ });
92
+ }
93
+ setCloseIntake(closeIntake) {
94
+ this.closeIntake = closeIntake;
95
+ }
96
+ getState() {
97
+ return this.state;
98
+ }
99
+ routeDirection(draft) {
100
+ if (!this.running ||
101
+ this.intakeClosed ||
102
+ this.state === "closing" ||
103
+ this.state === "terminal") {
104
+ return { status: "rejected", reason: "intake-closed", rejectedAt: Date.now() };
105
+ }
106
+ const envelope = notificationQueue.enqueue(draft);
107
+ if (!envelope || envelope.kind !== "direction") {
108
+ return { status: "rejected", reason: "invalid-request", rejectedAt: Date.now() };
109
+ }
110
+ const receipt = {
111
+ envelopeId: envelope.id,
112
+ sequence: envelope.sequence,
113
+ correlationId: envelope.correlationId,
114
+ target: envelope.to,
115
+ acceptedAt: envelope.createdAt,
116
+ };
117
+ if (this.state === "safe-point") {
118
+ return new Promise((resolve) => {
119
+ this.pendingDelivered.set(envelope.id, { receipt, resolve });
120
+ });
121
+ }
122
+ if (draft.delivery === "interrupt-and-redrive" &&
123
+ !this.interruptPending &&
124
+ this.activeController &&
125
+ !this.activeController.signal.aborted) {
126
+ this.interruptPending = true;
127
+ this.state = "interrupting";
128
+ this.activeController.abort();
129
+ return { status: "interrupted", ...receipt };
130
+ }
131
+ return { status: "queued", ...receipt };
132
+ }
133
+ closeDirectionIntake() {
134
+ if (this.intakeClosed)
135
+ return;
136
+ this.intakeClosed = true;
137
+ this.state = "closing";
138
+ this.closeIntake?.();
139
+ }
140
+ drainDirections() {
141
+ return notificationQueue.drain(this.childSessionId, (envelope) => envelope.kind === "direction" && envelope.runtimeGeneration === this.runtimeGeneration);
142
+ }
143
+ async run(task, options) {
144
+ this.running = true;
145
+ let nextTask = task;
146
+ let agentDirection;
147
+ try {
148
+ for (;;) {
149
+ const controller = new AbortController();
150
+ this.activeController = controller;
151
+ const lifecycleSignal = options.signal;
152
+ const cascadeAbort = () => controller.abort();
153
+ if (lifecycleSignal?.aborted)
154
+ cascadeAbort();
155
+ else
156
+ lifecycleSignal?.addEventListener("abort", cascadeAbort, { once: true });
157
+ this.state = agentDirection ? "redriving" : "starting";
158
+ let result;
159
+ try {
160
+ result = await this.runtime.run(nextTask, {
161
+ ...options,
162
+ signal: controller.signal,
163
+ runtimeGeneration: this.runtimeGeneration,
164
+ ...(agentDirection ? { injected: true, agentDirection } : {}),
165
+ });
166
+ }
167
+ finally {
168
+ lifecycleSignal?.removeEventListener("abort", cascadeAbort);
169
+ this.activeController = undefined;
170
+ }
171
+ if (lifecycleSignal?.aborted) {
172
+ this.closeDirectionIntake();
173
+ return result;
174
+ }
175
+ // Engine.run has fully settled here, including all accepted tool results.
176
+ // For a normal completion, atomically close registry intake first. A
177
+ // sender that won before this boundary is now in the fenced queue and
178
+ // must be consumed/redriven; a sender after it is rejected.
179
+ if (!this.interruptPending)
180
+ this.closeDirectionIntake();
181
+ const directions = this.drainDirections();
182
+ this.interruptPending = false;
183
+ if (directions.length === 0) {
184
+ return result;
185
+ }
186
+ directions.sort((left, right) => left.sequence - right.sequence);
187
+ nextTask = buildAgentDirectionMessage(directions);
188
+ agentDirection = {
189
+ envelopeIds: directions.map((item) => item.id),
190
+ correlationIds: directions
191
+ .map((item) => item.correlationId)
192
+ .filter((value) => value !== undefined),
193
+ };
194
+ }
195
+ }
196
+ finally {
197
+ this.closeDirectionIntake();
198
+ this.running = false;
199
+ this.state = "terminal";
200
+ for (const { receipt, resolve } of this.pendingDelivered.values()) {
201
+ resolve({ status: "queued", ...receipt });
202
+ }
203
+ this.pendingDelivered.clear();
204
+ this.runtime.setAgentControlStateListener(undefined);
205
+ this.runtime.setAgentDirectionsDeliveredListener?.(undefined);
206
+ }
207
+ }
208
+ }
209
+ export function createSubAgentSpawner(deps) {
210
+ return {
211
+ parentStream: deps.parentStream,
212
+ describe: () => ({
213
+ cwd: deps.cwd,
214
+ preset: deps.presetName,
215
+ permissionMode: deps.permissionMode,
216
+ }),
217
+ sessionExists: deps.sessionExists,
218
+ getSessionParentId: deps.getSessionParentId,
219
+ spawn: async (request) => {
220
+ if (!request.resumeSessionId) {
221
+ try {
222
+ deps.appendParentSubagent(request.agentId, request.description);
223
+ }
224
+ catch {
225
+ // Parent anchors are best-effort and must never block a child run.
226
+ }
227
+ }
228
+ const scope = resolveChildToolScope(request.toolAllowlist, deps.parentConfig.disabledBuiltinTools, deps.parentConfig.enabledBuiltinTools);
229
+ const childConfig = {
230
+ llm: resolveChildLlm(request.model, deps.modelPool, deps.parentConfig.llm),
231
+ clientDefaults: {
232
+ ...(deps.parentConfig.clientDefaults ?? {}),
233
+ retryMaxAttempts: 2,
234
+ },
235
+ cwd: deps.cwd,
236
+ permissionMode: deps.permissionMode,
237
+ preset: deps.presetName,
238
+ enabledBuiltinTools: scope.enabled,
239
+ disabledBuiltinTools: scope.disabled,
240
+ capabilities: deps.parentConfig.capabilities,
241
+ extensionModules: deps.parentConfig.extensionModules,
242
+ builtinToolHost: deps.parentConfig.builtinToolHost,
243
+ customSystemPrompt: deps.parentConfig.customSystemPrompt,
244
+ appendSystemPrompt: [deps.parentConfig.appendSystemPrompt, request.appendSystemPrompt]
245
+ .filter(Boolean)
246
+ .join("\n\n") || undefined,
247
+ responseLanguage: deps.parentConfig.responseLanguage,
248
+ userProfile: deps.parentConfig.userProfile,
249
+ instructions: deps.parentConfig.instructions,
250
+ maxTurns: request.maxTurns,
251
+ maxContextTokens: deps.parentConfig.maxContextTokens ?? 200_000,
252
+ sessionStorageDir: deps.parentConfig.sessionStorageDir,
253
+ headless: deps.parentConfig.headless,
254
+ readOnlySession: request.readOnlySession,
255
+ skillAllowlist: request.skillAllowlist,
256
+ sandbox: resolveChildSandbox(request.sandboxMode, deps.parentSandbox),
257
+ mcpServers: resolveChildMcpServers(request.mcpAllowlist, deps.parentConfig.mcpServers),
258
+ settingsScope: deps.parentConfig.settingsScope ?? "project",
259
+ isSubAgent: true,
260
+ };
261
+ const destination = request.streamOverride ?? deps.parentStream;
262
+ const childSessionId = request.resumeSessionId ?? request.agentId;
263
+ if (deps.childRunner.createChild && request.runtimeGeneration !== undefined) {
264
+ const runtime = deps.childRunner.createChild(childConfig);
265
+ const supervisor = new ChildRunSupervisor(runtime, childSessionId, request.runtimeGeneration);
266
+ const ownerToken = nanoid();
267
+ const bound = request.bindLiveControl?.(supervisor, ownerToken);
268
+ supervisor.setCloseIntake(() => request.closeLiveControl?.(supervisor, bound && bound !== true ? bound : undefined));
269
+ if (bound === false) {
270
+ throw new Error(`child session ${childSessionId} already has a live transcript writer`);
271
+ }
272
+ return await supervisor.run(request.prompt, {
273
+ signal: request.signal,
274
+ onStream: wrapChildRuntimeStream(destination, request.agentId, request.onProgressEvent),
275
+ sessionId: childSessionId,
276
+ onAgentProgress: request.onAgentProgress,
277
+ });
278
+ }
279
+ const result = await deps.childRunner.runChild(childConfig, request.prompt, {
280
+ signal: request.signal,
281
+ onStream: wrapChildRuntimeStream(destination, request.agentId, request.onProgressEvent),
282
+ sessionId: childSessionId,
283
+ });
284
+ return result;
285
+ },
286
+ };
287
+ }
@@ -5,9 +5,9 @@
5
5
  * Returns a short commit-subject-style string like "Read 3 files, fixed NPE in auth.ts"
6
6
  */
7
7
  import type { ToolCall, ToolResult } from "../types.js";
8
- export type SummarizeFn = (systemPrompt: string, userMessage: string) => Promise<string>;
8
+ export type SummarizeFn = (systemPrompt: string, userMessage: string, signal?: AbortSignal) => Promise<string>;
9
9
  /**
10
10
  * Generate a 1-line summary of completed tool executions.
11
11
  * Returns null on failure (non-critical).
12
12
  */
13
- export declare function generateToolUseSummary(toolCalls: ToolCall[], results: ToolResult[], summarize: SummarizeFn): Promise<string | null>;
13
+ export declare function generateToolUseSummary(toolCalls: ToolCall[], results: ToolResult[], summarize: SummarizeFn, signal?: AbortSignal): Promise<string | null>;
@@ -13,7 +13,7 @@ const SUMMARY_SYSTEM_PROMPT = "Generate a very brief (under 40 chars) summary of
13
13
  * Generate a 1-line summary of completed tool executions.
14
14
  * Returns null on failure (non-critical).
15
15
  */
16
- export async function generateToolUseSummary(toolCalls, results, summarize) {
16
+ export async function generateToolUseSummary(toolCalls, results, summarize, signal) {
17
17
  if (toolCalls.length === 0)
18
18
  return null;
19
19
  try {
@@ -25,7 +25,7 @@ export async function generateToolUseSummary(toolCalls, results, summarize) {
25
25
  const output = (result?.result ?? result?.error ?? "").slice(0, 300);
26
26
  parts.push(`Tool: ${tc.toolName}(${input}) → ${output}`);
27
27
  }
28
- const summary = await summarize(SUMMARY_SYSTEM_PROMPT, parts.join("\n"));
28
+ const summary = await summarize(SUMMARY_SYSTEM_PROMPT, parts.join("\n"), signal);
29
29
  return summary?.trim() || null;
30
30
  }
31
31
  catch (err) {
@@ -4,16 +4,19 @@
4
4
  * Following Claude Code's po_() pattern:
5
5
  * pre_check → model_call → post_check → tool_exec → context_mgmt → hook_notify → next turn
6
6
  */
7
- import type { Message, StreamCallback, TerminalReason, ContentBlock, ToolResult, TokenUsage, ContextUsageAnchor } from "../types.js";
7
+ import type { Message, StreamCallback, TerminalReason, ContentBlock, ToolResult, TokenUsage, ContextUsageAnchor, TurnCompletionKind } from "../types.js";
8
8
  import type { SteerItem } from "./steer-queue.js";
9
+ import type { DirectionEnvelope } from "../tool-system/builtin/agent-notifications.js";
10
+ import type { LiveChildState } from "../tool-system/builtin/agent-registry.js";
9
11
  import { ModelFacade } from "./model-facade.js";
10
12
  import { ToolExecutor } from "../tool-system/executor.js";
11
13
  import { ContextManager } from "../context/manager.js";
12
14
  import { HookRegistry } from "../hooks/registry.js";
13
- import { type GoalJudgeRuntimeContext } from "../hooks/goal-stop-hook.js";
15
+ import type { GoalJudgeRuntimeContext } from "../hooks/goal-stop-hook.js";
16
+ import type { PromptCacheDiagnosticSample } from "./prompt-cache-diagnostics.js";
14
17
  import { Transcript } from "../session/transcript.js";
15
- import { type CumulativeUsageCounters } from "./session-usage.js";
16
- import { type GoalConfig, type GoalExtension, type GoalTerminationReason } from "./goal.js";
18
+ import { type CumulativeUsageCounters } from "../session/usage.js";
19
+ import { type GoalConfig, type GoalExtension, type GoalTerminationReason } from "../goal/lifecycle.js";
17
20
  export interface TurnLoopConfig {
18
21
  maxTurns: number;
19
22
  maxToolCallsPerTurn: number;
@@ -94,11 +97,13 @@ export interface TurnLoopDeps {
94
97
  * Returns the updated counters so usage_update can carry both metric scopes.
95
98
  */
96
99
  recordCumulativeUsage?: (usage: TokenUsage) => CumulativeUsageCounters;
100
+ /** Child-only billed usage delta for structured progress accounting. */
101
+ onAgentUsage?: (usage: TokenUsage) => void;
97
102
  /**
98
103
  * Lightweight per-session prompt-cache diagnostic, owned by Engine because it
99
104
  * needs memory across TurnLoop instances.
100
105
  */
101
- recordCacheReadDiagnostics?: (usage: TokenUsage) => void;
106
+ recordCacheReadDiagnostics?: (sample: PromptCacheDiagnosticSample) => void;
102
107
  /** Persist the latest context-estimation anchor derived from provider usage. */
103
108
  recordContextUsageAnchor?: (anchor: ContextUsageAnchor) => void;
104
109
  /**
@@ -110,6 +115,12 @@ export interface TurnLoopDeps {
110
115
  * tests (turn loop tolerates undefined).
111
116
  */
112
117
  consumeSteer?: (source?: "normal_step" | "finalize_backfill") => SteerItem[];
118
+ /** Child-only mailbox drain; separate from user steering for provenance/consent. */
119
+ consumeAgentDirections?: () => DirectionEnvelope[];
120
+ /** Exposes semantic model/tool boundaries to the bound live child supervisor. */
121
+ onAgentControlState?: (state: LiveChildState) => void;
122
+ /** Confirms that specific envelopes reached messages + persisted provenance. */
123
+ onAgentDirectionsDelivered?: (envelopeIds: string[]) => void;
113
124
  /** Restore steer items whose model-facing content could not be prepared. */
114
125
  restoreSteer?: (items: SteerItem[]) => void;
115
126
  /** Build model-facing content for a queued steer item, including attachments. */
@@ -125,19 +136,24 @@ export interface TurnLoopDeps {
125
136
  /** Make tools launched after an injected steer attribute side effects to that steer. */
126
137
  setOriginClientMessageId?: (clientMessageId: string | undefined) => void;
127
138
  /**
128
- * Clear this session's PERSISTED goal (state.activeGoal) and drop the
129
- * in-flight goal-stop hook, so a user-initiated cancel_goal both stops the
130
- * current run AND prevents the goal from re-inheriting on the next bare send.
139
+ * Terminally clear this session's persisted goalLifecycle and drop
140
+ * the in-flight goal-stop hook, so complete_goal/cancel_goal both stop the
141
+ * current run AND prevent the goal from re-inheriting on the next bare send.
131
142
  * Wired by Engine (delegates to Engine.clearGoal for the running session);
132
143
  * absent in standalone tests (turn loop tolerates undefined — the local
133
144
  * goalTracker short-circuit still stops the run).
134
145
  */
135
- clearPersistedGoal?: () => void;
146
+ /** Return false when the durable transition failed; the loop must keep driving. */
147
+ clearPersistedGoal?: (reason: "completed" | "cancelled") => boolean | void;
136
148
  /**
137
149
  * Private Goal-judge evidence seam. Engine stores this snapshot in the
138
150
  * built-in judge closure; it is never added to the public on_stop context.
139
151
  */
140
- updateGoalJudgeContext?: (context: GoalJudgeRuntimeContext) => void;
152
+ publishGoalJudgeContext?: (context: GoalJudgeRuntimeContext) => void;
153
+ /** Inspect a trusted tool's pending run yield without clearing it. */
154
+ peekToolRunYield?: () => import("../tool-system/context.js").ToolRunYieldReason | undefined;
155
+ /** Consume a trusted tool's request to yield until an async notification. */
156
+ consumeToolRunYield?: () => import("../tool-system/context.js").ToolRunYieldReason | undefined;
141
157
  }
142
158
  export interface TurnLoopResult {
143
159
  text: string;
@@ -145,6 +161,10 @@ export interface TurnLoopResult {
145
161
  messages: Message[];
146
162
  /** Goal-specific forced terminal outcome; public TerminalReason stays stable. */
147
163
  goalTermination?: GoalTerminationReason;
164
+ /** Stop-block round captured before the loop resets its per-approach counter. */
165
+ goalTerminationRound?: number;
166
+ /** Exceptional completed-run boundary; absent means an ordinary final answer. */
167
+ completionKind?: TurnCompletionKind;
148
168
  }
149
169
  /**
150
170
  * 把一个 ToolResult 映射成发给 LLM 的 tool_result ContentBlock。
@@ -172,6 +192,10 @@ export declare class TurnLoop {
172
192
  private readonly sensitiveToolResultRedactions;
173
193
  private readonly pendingImageMessages;
174
194
  private readonly volatileContextMessages;
195
+ /** Last outer-loop turn for which the model returned a complete response. */
196
+ private lastCompletedModelTurn;
197
+ /** Last model turn whose transcript/persistence boundary was finalized. */
198
+ private lastFinalizedTurn;
175
199
  /**
176
200
  * Consecutive on_stop blocks (Goal mode kept the agent going). Reset to 0
177
201
  * on any unblocked completion. When it reaches config.maxStopBlocks the
@@ -191,6 +215,24 @@ export declare class TurnLoop {
191
215
  * being re-emitted every turn while still within the approach threshold.
192
216
  */
193
217
  private approachAnnounced;
218
+ /** Latest coalesced Goal edit/resume reminder, consumed at a safe point. */
219
+ private pendingGoalControlMessage;
220
+ /** Pause/delete requested while a Goal run is in flight. The current
221
+ * model/tool step is allowed to settle, then the loop stops before starting
222
+ * another model request. */
223
+ private goalControlStopRequested;
224
+ /** Auxiliary tool-summary calls started by this loop and revoked by Goal pause/delete. */
225
+ private readonly activeToolSummaryControllers;
226
+ /**
227
+ * Apply a user goal edit/pause/resume to the live loop. Passing undefined
228
+ * pauses goal-driving at the next step boundary; a goal value resumes it.
229
+ * Usage accumulated before an edit is retained, while a pause/resume starts
230
+ * a fresh run-scoped budget window (matching a later persisted resume).
231
+ */
232
+ updateGoal(goal: GoalConfig | undefined, controlMessage?: string, limits?: {
233
+ maxTurns?: number;
234
+ maxStopBlocks?: number;
235
+ }): void;
194
236
  /**
195
237
  * Extend the in-flight run's limits (TODO 3.1 — 运行中续轮/加预算). Mutates
196
238
  * the maxTurns ceiling, the maxStopBlocks cap, and/or the live goal budgets;
@@ -204,6 +246,13 @@ export declare class TurnLoop {
204
246
  timeBudgetMs?: number;
205
247
  maxStopBlocks: number;
206
248
  };
249
+ /**
250
+ * Private Goal-judge accounting seam. Judge calls bypass ModelFacade, so the
251
+ * Engine forwards their provider usage here while the run-scoped tracker is
252
+ * live. The returned reason lets the hook suppress verdict side effects when
253
+ * this very request crossed a hard token/time budget.
254
+ */
255
+ recordGoalJudgeUsage(usage: TokenUsage | undefined): Extract<GoalTerminationReason, "token_budget_exhausted" | "time_budget_exhausted"> | undefined;
207
256
  /**
208
257
  * Goal mode only: if the run is nearing EITHER stop ceiling (maxTurns or
209
258
  * maxStopBlocks) and we haven't announced it yet, emit one approaching_limit
@@ -229,6 +278,13 @@ export declare class TurnLoop {
229
278
  * for one Stop still writes a single marker.
230
279
  */
231
280
  private markStopped;
281
+ /**
282
+ * Close one completed model turn exactly once. The transcript boundary must
283
+ * be durable before the Engine flushes usage, heartbeat, and turnCount via
284
+ * onTurnBoundary, so crash recovery never folds two assistant responses into
285
+ * the same transcript turn or observes state ahead of the transcript.
286
+ */
287
+ private finalizeModelTurn;
232
288
  private prepareMessagesForModel;
233
289
  private stripVolatileContextMessages;
234
290
  private appendVolatileContextMessages;
@@ -259,6 +315,7 @@ export declare class TurnLoop {
259
315
  private callModelWithFallback;
260
316
  get currentTurn(): number;
261
317
  private consumeQueuedSteer;
318
+ private consumeQueuedAgentDirections;
262
319
  /**
263
320
  * Generate synthetic error tool_results for any dangling tool_use blocks
264
321
  * that never received results (e.g. because the API call failed).