@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
@@ -20,7 +20,9 @@
20
20
  * loops run in the main engine process, so start/finish and the engine's wait
21
21
  * loop observe the same instance.
22
22
  */
23
- import { normalizeCwdPath } from "../../cc-orchestrator/cwd-normalize.js";
23
+ import { normalizeCwdPath } from "../../utils/cwd-normalize.js";
24
+ import { execFileSync } from "node:child_process";
25
+ import { resolveGit } from "../../utils/exec.js";
24
26
  function isValidSessionId(sid) {
25
27
  return typeof sid === "string" && sid.length > 0;
26
28
  }
@@ -28,22 +30,50 @@ function isValidSessionId(sid) {
28
30
  * UX limit; a human never spawns this many background jobs in one session. */
29
31
  const MAX_TERMINAL_JOBS_PER_SESSION = 50;
30
32
  const CANCEL_WAIT_TIMEOUT_MS = 5_000;
33
+ /** Resolve once at registration/query time. Git failures and non-git paths
34
+ * intentionally collapse to the legacy normalized-cwd identity. */
35
+ function resolveEffectiveWorkspaceIdentity(cwd) {
36
+ const normalizedCwd = normalizeCwdPath(cwd);
37
+ try {
38
+ const output = execFileSync(resolveGit(), ["rev-parse", "--path-format=absolute", "--show-toplevel", "--git-common-dir"], {
39
+ cwd: normalizedCwd,
40
+ encoding: "utf-8",
41
+ timeout: 5_000,
42
+ stdio: ["ignore", "pipe", "ignore"],
43
+ }).trim();
44
+ const [rawRoot, rawCommonDir] = output.split(/\r?\n/);
45
+ if (rawRoot && rawCommonDir) {
46
+ return {
47
+ root: normalizeCwdPath(rawRoot),
48
+ kind: "git-worktree",
49
+ gitCommonDir: normalizeCwdPath(rawCommonDir),
50
+ };
51
+ }
52
+ }
53
+ catch {
54
+ // Non-git, missing git, deleted cwd, and timeouts all retain legacy cwd
55
+ // comparison semantics. Conflict detection must never break job launch.
56
+ }
57
+ return { root: normalizedCwd, kind: "cwd" };
58
+ }
31
59
  function isActiveStatus(status) {
32
60
  return status === "running" || status === "cancelling";
33
61
  }
34
62
  async function waitForAbort(abort) {
35
63
  let timer;
36
64
  try {
37
- await Promise.race([
65
+ const result = await Promise.race([
38
66
  Promise.resolve().then(abort),
39
67
  new Promise((resolve) => {
40
- timer = setTimeout(resolve, CANCEL_WAIT_TIMEOUT_MS);
68
+ timer = setTimeout(() => resolve(undefined), CANCEL_WAIT_TIMEOUT_MS);
41
69
  }),
42
70
  ]);
71
+ return result && typeof result === "object" ? result : undefined;
43
72
  }
44
73
  catch {
45
74
  // Cancellation is best-effort; the terminal state still closes after the
46
75
  // abort hook settles or the hard deadline expires.
76
+ return undefined;
47
77
  }
48
78
  finally {
49
79
  if (timer)
@@ -57,6 +87,14 @@ class BackgroundJobRegistry {
57
87
  start(jobId, sessionId, description = "", options) {
58
88
  if (!isValidSessionId(sessionId))
59
89
  return;
90
+ const rawLaunchCwd = options?.launchCwd ?? options?.cwd;
91
+ const launchCwd = rawLaunchCwd ? normalizeCwdPath(rawLaunchCwd) : undefined;
92
+ const effectiveWorkspaceCwd = options?.effectiveWorkspaceCwd
93
+ ? normalizeCwdPath(options.effectiveWorkspaceCwd)
94
+ : launchCwd;
95
+ const workspaceIdentity = effectiveWorkspaceCwd
96
+ ? resolveEffectiveWorkspaceIdentity(effectiveWorkspaceCwd)
97
+ : undefined;
60
98
  this.jobs.set(jobId, {
61
99
  jobId,
62
100
  sessionId,
@@ -64,9 +102,29 @@ class BackgroundJobRegistry {
64
102
  description,
65
103
  status: "running",
66
104
  startedAt: Date.now(),
67
- ...(options?.cwd ? { cwd: normalizeCwdPath(options.cwd) } : {}),
105
+ ...(launchCwd ? { launchCwd, cwd: launchCwd } : {}),
106
+ ...(effectiveWorkspaceCwd ? { effectiveWorkspaceCwd } : {}),
107
+ ...(options?.workspaceRoot ? { workspaceRoot: normalizeCwdPath(options.workspaceRoot) } : {}),
108
+ ...(workspaceIdentity
109
+ ? {
110
+ effectiveWorkspaceRoot: workspaceIdentity.root,
111
+ effectiveWorkspaceKind: workspaceIdentity.kind,
112
+ ...(workspaceIdentity.gitCommonDir
113
+ ? { gitCommonDir: workspaceIdentity.gitCommonDir }
114
+ : {}),
115
+ }
116
+ : {}),
68
117
  ...(options?.promptSummary ? { promptSummary: options.promptSummary } : {}),
69
118
  ...(options?.cli ? { cli: options.cli } : {}),
119
+ ...(options?.isolation ? { isolation: options.isolation } : {}),
120
+ ...(options?.worktreePath ? { worktreePath: normalizeCwdPath(options.worktreePath) } : {}),
121
+ ...(options?.worktreeBranch ? { worktreeBranch: options.worktreeBranch } : {}),
122
+ ...(options?.worktreeBaseRef ? { worktreeBaseRef: options.worktreeBaseRef } : {}),
123
+ ...(options?.worktreeCleanup ? { worktreeCleanup: options.worktreeCleanup } : {}),
124
+ ...(options?.worktreeBranchPrefix
125
+ ? { worktreeBranchPrefix: options.worktreeBranchPrefix }
126
+ : {}),
127
+ ...(options?.worktreePath ? { worktreeLifecycle: "running" } : {}),
70
128
  ...(options?.originClientMessageId
71
129
  ? { originClientMessageId: options.originClientMessageId }
72
130
  : {}),
@@ -90,6 +148,9 @@ class BackgroundJobRegistry {
90
148
  entry.ccSessionId = outcome.ccSessionId;
91
149
  if (outcome?.changedFiles !== undefined)
92
150
  entry.changedFiles = outcome.changedFiles;
151
+ if (outcome?.worktreeLifecycle !== undefined) {
152
+ entry.worktreeLifecycle = outcome.worktreeLifecycle;
153
+ }
93
154
  this.evictTerminalOverCap(entry.sessionId);
94
155
  this.notify();
95
156
  }
@@ -106,6 +167,17 @@ class BackgroundJobRegistry {
106
167
  if (artifacts.changedFiles !== undefined)
107
168
  entry.changedFiles = artifacts.changedFiles;
108
169
  }
170
+ /** Update retained DriveAgent lifecycle state after an explicit cleanup. */
171
+ recordWorktreeLifecycle(jobId, lifecycle, note) {
172
+ const entry = this.jobs.get(jobId);
173
+ if (!entry || !entry.worktreePath)
174
+ return false;
175
+ entry.worktreeLifecycle = lifecycle;
176
+ if (note)
177
+ entry.finalText = `${entry.finalText ? `${entry.finalText}\n\n` : ""}[worktree lifecycle] ${note}`;
178
+ this.notify();
179
+ return true;
180
+ }
109
181
  async cancel(jobId, outcome) {
110
182
  const entry = this.jobs.get(jobId);
111
183
  if (!entry)
@@ -118,20 +190,22 @@ class BackgroundJobRegistry {
118
190
  // process as active until the abort hook confirms exit.
119
191
  entry.status = "cancelling";
120
192
  this.notify();
121
- if (entry.abort)
122
- await waitForAbort(entry.abort);
193
+ const abortOutcome = entry.abort ? await waitForAbort(entry.abort) : undefined;
123
194
  // Session teardown/reset may have removed the entry while termination was
124
195
  // in flight. Do not resurrect or notify for a closed session.
125
196
  if (this.jobs.get(jobId) !== entry || entry.status !== "cancelling")
126
197
  return false;
127
- entry.status = "cancelled";
198
+ entry.status = abortOutcome?.status ?? "cancelled";
128
199
  entry.finishedAt = Date.now();
129
- if (outcome?.finalText !== undefined)
130
- entry.finalText = outcome.finalText;
131
- if (outcome?.ccSessionId !== undefined)
132
- entry.ccSessionId = outcome.ccSessionId;
133
- if (outcome?.changedFiles !== undefined)
134
- entry.changedFiles = outcome.changedFiles;
200
+ const finalText = abortOutcome?.finalText ?? outcome?.finalText;
201
+ const ccSessionId = abortOutcome?.ccSessionId ?? outcome?.ccSessionId;
202
+ const changedFiles = abortOutcome?.changedFiles ?? outcome?.changedFiles;
203
+ if (finalText !== undefined)
204
+ entry.finalText = finalText;
205
+ if (ccSessionId !== undefined)
206
+ entry.ccSessionId = ccSessionId;
207
+ if (changedFiles !== undefined)
208
+ entry.changedFiles = changedFiles;
135
209
  this.evictTerminalOverCap(entry.sessionId);
136
210
  this.notify();
137
211
  return true;
@@ -148,10 +222,32 @@ class BackgroundJobRegistry {
148
222
  listRunningForSession(sessionId) {
149
223
  return [...this.jobs.values()].filter((e) => e.sessionId === sessionId && isActiveStatus(e.status));
150
224
  }
151
- /** Running jobs, across all sessions, that are operating in the same cwd. */
225
+ /** Running jobs, across all sessions, in the same effective workspace.
226
+ *
227
+ * Git paths compare by canonical worktree root, so sibling launch directories
228
+ * collide while distinct linked worktrees do not. A declared
229
+ * effectiveWorkspaceCwd takes precedence over launchCwd. If either side could
230
+ * not be resolved through git, exact launch-cwd matching remains the
231
+ * conservative back-compatible fallback. */
152
232
  listRunningByCwd(cwd) {
233
+ return this.listByWorkspaceCwd(cwd).filter((e) => isActiveStatus(e.status));
234
+ }
235
+ /** Running and retained terminal jobs in the effective workspace containing
236
+ * cwd. Used by DriveAgentJobs' cross-session cwd filter. */
237
+ listByWorkspaceCwd(cwd) {
153
238
  const normalized = normalizeCwdPath(cwd);
154
- return [...this.jobs.values()].filter((e) => isActiveStatus(e.status) && e.cwd === normalized);
239
+ const queryIdentity = resolveEffectiveWorkspaceIdentity(normalized);
240
+ return [...this.jobs.values()].filter((e) => {
241
+ if (e.effectiveWorkspaceRoot === queryIdentity.root)
242
+ return true;
243
+ if (e.effectiveWorkspaceKind === "git-worktree" && queryIdentity.kind === "git-worktree") {
244
+ return false;
245
+ }
246
+ // Mixed git-resolution states compare the declared effective cwd
247
+ // snapshot. Only entries created before that field existed fall back to
248
+ // the legacy launch cwd alias.
249
+ return (e.effectiveWorkspaceCwd ?? e.launchCwd ?? e.cwd) === normalized;
250
+ });
155
251
  }
156
252
  /** All jobs (running + retained terminal) for `sessionId`. Feeds the panel. */
157
253
  listForSession(sessionId) {
@@ -1,5 +1,5 @@
1
1
  import { type AsyncAgentStatus } from "./agent-registry.js";
2
- import { type BackgroundJobStatus } from "./background-jobs.js";
2
+ import { type BackgroundJobKind, type BackgroundJobStatus, type ExternalCliKind } from "./background-jobs.js";
3
3
  import { type BgShell } from "../../runtime/background-shell.js";
4
4
  export type BackgroundWorkKind = "subagent" | "job" | "shell";
5
5
  export interface BackgroundWorkItem {
@@ -51,6 +51,17 @@ export type BackgroundWorkEntry = WithSource<{
51
51
  finalText?: string;
52
52
  /** Files an external agent (DriveAgent) changed, parsed from its transcript. */
53
53
  changedFiles?: string[];
54
+ /** Machine-readable job kind and external-session linkage for DriveAgent. */
55
+ jobKind?: BackgroundJobKind;
56
+ externalSessionId?: string;
57
+ cli?: ExternalCliKind;
58
+ cwd?: string;
59
+ isolation?: "current" | "worktree" | "none";
60
+ worktreePath?: string;
61
+ worktreeBranch?: string;
62
+ worktreeBaseRef?: string;
63
+ worktreeCleanup?: "auto" | "keep" | "detach" | "discard";
64
+ worktreeLifecycle?: "running" | "kept" | "detached" | "discarded" | "cleanup-failed";
54
65
  }>;
55
66
  /**
56
67
  * Every background-work item spawned by `sessionId`, with per-kind detail, for
@@ -14,7 +14,7 @@
14
14
  import { readFileSync, statSync } from "node:fs";
15
15
  import { join } from "node:path";
16
16
  import { asyncAgentRegistry } from "./agent-registry.js";
17
- import { backgroundJobRegistry } from "./background-jobs.js";
17
+ import { backgroundJobRegistry, } from "./background-jobs.js";
18
18
  import { backgroundShellManager } from "../../runtime/background-shell.js";
19
19
  import { codeShellHome } from "../../session/session-manager.js";
20
20
  /** List every still-running background work item spawned by `sessionId`. */
@@ -116,6 +116,7 @@ export function listBackgroundWorkForUI(sessionId, opts = {}) {
116
116
  ? backgroundJobRegistry.list()
117
117
  : backgroundJobRegistry.listForSession(sessionId);
118
118
  for (const j of jobs) {
119
+ const launchCwd = j.launchCwd ?? j.cwd;
119
120
  entries.push({
120
121
  kind: "job",
121
122
  jobId: j.jobId,
@@ -125,6 +126,16 @@ export function listBackgroundWorkForUI(sessionId, opts = {}) {
125
126
  ...(j.finishedAt != null ? { finishedAt: j.finishedAt } : {}),
126
127
  ...(j.finalText != null ? { finalText: j.finalText } : {}),
127
128
  ...(j.changedFiles && j.changedFiles.length ? { changedFiles: j.changedFiles } : {}),
129
+ ...(j.kind ? { jobKind: j.kind } : {}),
130
+ ...(j.ccSessionId ? { externalSessionId: j.ccSessionId } : {}),
131
+ ...(j.cli === "claude" || j.cli === "codex" ? { cli: j.cli } : {}),
132
+ ...(launchCwd ? { cwd: launchCwd } : {}),
133
+ ...(j.isolation ? { isolation: j.isolation } : {}),
134
+ ...(j.worktreePath ? { worktreePath: j.worktreePath } : {}),
135
+ ...(j.worktreeBranch ? { worktreeBranch: j.worktreeBranch } : {}),
136
+ ...(j.worktreeBaseRef ? { worktreeBaseRef: j.worktreeBaseRef } : {}),
137
+ ...(j.worktreeCleanup ? { worktreeCleanup: j.worktreeCleanup } : {}),
138
+ ...(j.worktreeLifecycle ? { worktreeLifecycle: j.worktreeLifecycle } : {}),
128
139
  sourceSession: sourceSession(sessionId, j.sessionId),
129
140
  });
130
141
  }
@@ -16,9 +16,7 @@
16
16
  * Killed by signal, the truncation message, sandbox denial hints).
17
17
  */
18
18
  import type { ToolContext } from "../context.js";
19
- import type { ToolDefinition, ToolResult } from "../../types.js";
19
+ import type { ToolDefinition } from "../../types.js";
20
+ import type { ToolExecutionResult } from "./index.js";
20
21
  export declare const bashToolDef: ToolDefinition;
21
- export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | {
22
- result: string;
23
- sandbox: ToolResult["sandbox"];
24
- }>;
22
+ export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | ToolExecutionResult>;
@@ -29,7 +29,7 @@ function sandboxMark(backend) {
29
29
  export const bashToolDef = {
30
30
  name: "Bash",
31
31
  description: "Execute a shell command and return its output. " +
32
- "Use for ordinary shell commands, system operations, git commands, " +
32
+ "Use for ordinary shell commands, system operations, version-control commands, " +
33
33
  "package-manager commands, running tests, installing packages, etc. Prefer Bash " +
34
34
  "over PowerShell unless the task needs PowerShell-specific syntax or APIs.",
35
35
  inputSchema: {
@@ -82,7 +82,8 @@ export async function bashTool(args, ctx) {
82
82
  const sandbox = sandboxMark(backend);
83
83
  // Tag every textual return below with the sandbox mark so the UI badge
84
84
  // shows up whether the command succeeded, failed, timed out, or aborted.
85
- const mark = (result) => ({ result, sandbox });
85
+ const mark = (result) => ({ ok: true, result, sandbox });
86
+ const fail = (error, details = {}) => ({ ok: false, error, sandbox, ...details });
86
87
  // Project localEnvironment.env (ctx.shellEnv) layers on top of either the
87
88
  // full passthrough (off) or the hardened allowlist (sandboxed) — see
88
89
  // mergeShellEnv. Background mode merges the same way inside the manager.
@@ -93,7 +94,11 @@ export async function bashTool(args, ctx) {
93
94
  // blocked, and Engine.run's wait-for-background loop never waits on it
94
95
  // (§难点5: that loop only looks at asyncAgentRegistry).
95
96
  if (args.run_in_background === true) {
96
- return mark(runInBackground(command, ctx));
97
+ const backgroundResult = runInBackground(command, ctx);
98
+ if (backgroundResult.startsWith("Error:"))
99
+ return fail(backgroundResult);
100
+ ctx?.runYield?.request("background_notification");
101
+ return mark(backgroundResult);
97
102
  }
98
103
  // A6: lifecycle (spawn, kill cascade, IO drain, byte cap, abort/timeout)
99
104
  // is centralized in safeSpawnShell. We still handle Bash's user-facing
@@ -112,13 +117,13 @@ export async function bashTool(args, ctx) {
112
117
  signal: ctx?.signal,
113
118
  });
114
119
  if (result.aborted) {
115
- return mark(wasAbortedBeforeStart ? "Bash aborted before starting." : "Bash aborted by signal.");
120
+ return fail(wasAbortedBeforeStart ? "Bash aborted before starting." : "Bash aborted by signal.");
116
121
  }
117
122
  if (result.timedOut) {
118
- return mark(`Command timed out after ${timeout}ms`);
123
+ return fail(`Command timed out after ${timeout}ms`);
119
124
  }
120
125
  if (result.spawnFailed) {
121
- return mark(`Failed to spawn command: ${result.error ?? "unknown error"}`);
126
+ return fail(`Failed to spawn command: ${result.error ?? "unknown error"}`);
122
127
  }
123
128
  let body = "";
124
129
  if (result.stdout)
@@ -150,6 +155,9 @@ export async function bashTool(args, ctx) {
150
155
  const hint = backend.hintForBlockedOutput?.(result.stderr);
151
156
  if (hint)
152
157
  output += hint;
158
+ if ((code !== 0 && code !== null) || (code === null && sig)) {
159
+ return fail(output, { exitCode: code, signal: sig, stderr: result.stderr });
160
+ }
153
161
  return mark(output);
154
162
  }
155
163
  /**
@@ -1,6 +1,9 @@
1
1
  /**
2
- * Browser automation tools — drive the in-app webview via the BrowserBridge
3
- * (CDP under the hood). Collapsed into THREE semantic tools (was 9 flat tools)
2
+ * Browser automation tools — drive a host-owned Browser Runtime through the
3
+ * BrowserBridge compatibility port. The default runtime owns a background tab
4
+ * in the in-app profile; user-opened tabs require an explicit claim. Collapsed
5
+ * into THREE semantic tools
6
+ * (was 9 flat tools)
4
7
  * to keep the LLM's tool list lean:
5
8
  *
6
9
  * browser_observe — observe the page: snapshot (a11y elements) / read (text) /
@@ -14,7 +17,7 @@
14
17
  * snapshot returns interactive elements as a compact ref-tagged list (a11y tree,
15
18
  * token-economical, no screenshots); act references elements by the ref the
16
19
  * latest snapshot assigned. All tools degrade with a clear error when no browser
17
- * is wired. isConcurrencySafe:false — a single webview is driven serially.
20
+ * runtime is wired. isConcurrencySafe:false — one runtime tab is driven serially.
18
21
  *
19
22
  * Permission: browser_act is permissionDefault "allow"; the sensitive actions
20
23
  * (click/type/select) are escalated to "ask" by a preset PermissionRule keyed on
@@ -22,9 +25,9 @@
22
25
  */
23
26
  import type { ToolDefinition } from "../../types.js";
24
27
  import type { ToolContext } from "../context.js";
25
- import type { BuiltinToolResult } from "./index.js";
28
+ import type { BuiltinToolReturn } from "./index.js";
26
29
  export declare const browserObserveToolDef: ToolDefinition;
27
- export declare function browserObserveTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<BuiltinToolResult>;
30
+ export declare function browserObserveTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<BuiltinToolReturn>;
28
31
  export declare const browserActToolDef: ToolDefinition;
29
32
  export declare function browserActTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
30
33
  export declare const browserNavigateToolDef: ToolDefinition;
@@ -1,6 +1,9 @@
1
1
  /**
2
- * Browser automation tools — drive the in-app webview via the BrowserBridge
3
- * (CDP under the hood). Collapsed into THREE semantic tools (was 9 flat tools)
2
+ * Browser automation tools — drive a host-owned Browser Runtime through the
3
+ * BrowserBridge compatibility port. The default runtime owns a background tab
4
+ * in the in-app profile; user-opened tabs require an explicit claim. Collapsed
5
+ * into THREE semantic tools
6
+ * (was 9 flat tools)
4
7
  * to keep the LLM's tool list lean:
5
8
  *
6
9
  * browser_observe — observe the page: snapshot (a11y elements) / read (text) /
@@ -14,7 +17,7 @@
14
17
  * snapshot returns interactive elements as a compact ref-tagged list (a11y tree,
15
18
  * token-economical, no screenshots); act references elements by the ref the
16
19
  * latest snapshot assigned. All tools degrade with a clear error when no browser
17
- * is wired. isConcurrencySafe:false — a single webview is driven serially.
20
+ * runtime is wired. isConcurrencySafe:false — one runtime tab is driven serially.
18
21
  *
19
22
  * Permission: browser_act is permissionDefault "allow"; the sensitive actions
20
23
  * (click/type/select) are escalated to "ask" by a preset PermissionRule keyed on
@@ -22,8 +25,7 @@
22
25
  */
23
26
  import { renderElementList } from "../browser-bridge.js";
24
27
  import { capabilitiesFor } from "../../llm/capabilities/index.js";
25
- const NO_BROWSER = "Error: browser automation is not available (no browser panel in this session). " +
26
- "It requires the desktop app with an open browser panel.";
28
+ const NO_BROWSER = "Error: browser automation runtime is not available in this host session.";
27
29
  function bridge(ctx) {
28
30
  return ctx?.browser;
29
31
  }
@@ -33,13 +35,15 @@ const STALE = (ref) => `Error: ref ${ref} is no longer valid (page changed). Re-
33
35
  // ════════════════════════════════════════════════════════════════════════════
34
36
  export const browserObserveToolDef = {
35
37
  name: "browser_observe",
36
- description: "Observe the current page in the browser panel. Modes:\n" +
38
+ description: "Observe the task-owned page in the CodeShell Browser Runtime. It shares the " +
39
+ "in-app browser profile but never controls a user-opened tab without an " +
40
+ "explicit claim. Modes:\n" +
37
41
  "- snapshot (default): URL/title + a compact list of interactive elements, each " +
38
42
  "tagged [ref=eN] for browser_act. ALWAYS snapshot before acting, and re-snapshot " +
39
43
  "after navigation/page changes (refs are only valid for the latest snapshot). " +
40
44
  "Passwords show as [sensitive] with no value.\n" +
41
- "- read: the page's main readable text (for summarizing/scraping an article/post; " +
42
- "long pages truncate scroll + read again).\n" +
45
+ "- read: a cursor-paged chunk of the page's normalized readable text. Continue " +
46
+ "with the returned nextCursor until complete; scrolling is only for lazy/infinite loading.\n" +
43
47
  "- extract: the real URLs on the page (hyperlink hrefs, image srcs, video srcs) " +
44
48
  "that snapshot omits — each image/video is tagged [ref=imgN/vidN] for image mode.\n" +
45
49
  "- image: SEE the actual pixels of page images (refs from extract, e.g. img3) — for " +
@@ -60,7 +64,18 @@ export const browserObserveToolDef = {
60
64
  items: { type: "string" },
61
65
  description: "image mode: image refs (imgN/vidN from extract) to see, one or more",
62
66
  },
63
- ref: { type: "string", description: "vision mode (optional): screenshot just this element's region" },
67
+ ref: {
68
+ type: "string",
69
+ description: "vision mode (optional): screenshot just this element's region",
70
+ },
71
+ cursor: {
72
+ type: "string",
73
+ description: "read mode: opaque nextCursor returned by the previous read chunk",
74
+ },
75
+ max_chars: {
76
+ type: "number",
77
+ description: "read mode: requested chunk size (clamped by the runtime)",
78
+ },
64
79
  },
65
80
  },
66
81
  };
@@ -86,17 +101,32 @@ export async function browserObserveTool(args, ctx) {
86
101
  switch (mode) {
87
102
  case "snapshot": {
88
103
  const snap = await b.snapshot();
104
+ if (snap.detail)
105
+ return `Error: ${snap.detail}`;
89
106
  const header = `URL: ${snap.url}${snap.title ? `\nTitle: ${snap.title}` : ""}`;
90
107
  const human = snap.needsHuman
91
- ? `\n\n⚠ ${snap.needsHuman} — please complete it in the browser panel, then continue.`
108
+ ? `\n\n⚠ ${snap.needsHuman} — please complete it in the browser window, then continue.`
92
109
  : "";
93
110
  return `${header}\n\n${renderElementList(snap.elements)}${human}`;
94
111
  }
95
112
  case "read": {
96
- const c = await b.readContent();
113
+ const c = await b.readContent({
114
+ cursor: typeof args.cursor === "string" ? args.cursor : undefined,
115
+ maxChars: typeof args.max_chars === "number" ? args.max_chars : undefined,
116
+ });
97
117
  if (!c.ok)
98
118
  return `Error: ${c.detail ?? "could not read page content"}`;
99
- const head = `URL: ${c.url}${c.title ? `\nTitle: ${c.title}` : ""}${c.truncated ? "\n(content truncated)" : ""}`;
119
+ const progress = c.done
120
+ ? "\nRead: complete"
121
+ : c.nextCursor
122
+ ? `\nRead: more available\nnextCursor: ${c.nextCursor}`
123
+ : c.truncated
124
+ ? "\nRead: truncated"
125
+ : "";
126
+ const scroll = c.scroll
127
+ ? `\nScroll: ${Math.round(c.scroll.y)}/${Math.round(c.scroll.maxY)}${c.scroll.atEnd ? " (end)" : ""}`
128
+ : "";
129
+ const head = `URL: ${c.url}${c.title ? `\nTitle: ${c.title}` : ""}${progress}${scroll}`;
100
130
  return `${head}\n\n${c.text || "(no readable text)"}`;
101
131
  }
102
132
  case "extract": {
@@ -109,7 +139,9 @@ export async function browserObserveTool(args, ctx) {
109
139
  : "Links: (none)";
110
140
  const images = r.images.length > 0
111
141
  ? "Images (use the ref with browser_observe(image) to SEE one):\n" +
112
- r.images.map((im) => `- [${im.ref ?? "?"}] ${im.alt ? `${im.alt} → ` : ""}${im.url}`).join("\n")
142
+ r.images
143
+ .map((im) => `- [${im.ref ?? "?"}] ${im.alt ? `${im.alt} → ` : ""}${im.url}`)
144
+ .join("\n")
113
145
  : "Images: (none)";
114
146
  const videos = r.videos && r.videos.length > 0
115
147
  ? "Videos:\n" + r.videos.map((v) => `- ${v.url}`).join("\n")
@@ -139,7 +171,10 @@ export async function browserObserveTool(args, ctx) {
139
171
  }
140
172
  if (blocks.length === 0)
141
173
  return `Error: no images loaded — ${notes.join("; ")}`;
142
- return { contentBlocks: blocks, result: `[loaded ${blocks.length} image(s): ${notes.join("; ")}]` };
174
+ return {
175
+ contentBlocks: blocks,
176
+ result: `[loaded ${blocks.length} image(s): ${notes.join("; ")}]`,
177
+ };
143
178
  }
144
179
  case "vision": {
145
180
  if (!modelSupportsVision(ctx)) {
@@ -161,7 +196,9 @@ export async function browserObserveTool(args, ctx) {
161
196
  // ════════════════════════════════════════════════════════════════════════════
162
197
  export const browserActToolDef = {
163
198
  name: "browser_act",
164
- description: "Act on the page in the browser panel. Use refs (eN) from the latest " +
199
+ description: "Act on the task-owned tab in the CodeShell Browser Runtime. By default it " +
200
+ "shares the in-app browser profile but never controls a user-opened tab " +
201
+ "without an explicit claim. Use refs (eN) from the latest " +
165
202
  "browser_observe(snapshot). Actions:\n" +
166
203
  "- click {ref}: click an element.\n" +
167
204
  "- type {ref, text}: type text into an input (focuses first).\n" +
@@ -181,7 +218,17 @@ export const browserActToolDef = {
181
218
  properties: {
182
219
  action: {
183
220
  type: "string",
184
- enum: ["click", "type", "select", "press_key", "hover", "scroll", "wait", "list_tabs", "switch_tab"],
221
+ enum: [
222
+ "click",
223
+ "type",
224
+ "select",
225
+ "press_key",
226
+ "hover",
227
+ "scroll",
228
+ "wait",
229
+ "list_tabs",
230
+ "switch_tab",
231
+ ],
185
232
  description: "The interaction to perform",
186
233
  },
187
234
  ref: { type: "string", description: "Element ref (eN) — click/type/select/hover/press_key" },
@@ -191,7 +238,10 @@ export const browserActToolDef = {
191
238
  direction: { type: "string", enum: ["up", "down"], description: "Scroll direction — scroll" },
192
239
  amount: { type: "number", description: "Pixels to scroll (default one viewport) — scroll" },
193
240
  timeout_ms: { type: "number", description: "Max wait in ms (default 10000) — wait" },
194
- tabId: { type: "string", description: "Target tab — required for switch_tab; optional on others (switches first)" },
241
+ tabId: {
242
+ type: "string",
243
+ description: "Target tab — required for switch_tab; optional on others (switches first)",
244
+ },
195
245
  },
196
246
  required: ["action"],
197
247
  },
@@ -215,13 +265,17 @@ export async function browserActTool(args, ctx) {
215
265
  if (tabs.length === 0)
216
266
  return "(no open browser tabs)";
217
267
  return ("Open tabs:\n" +
218
- tabs.map((t) => `- [${t.tabId}]${t.active ? " (active)" : ""} ${t.title || "(untitled)"} — ${t.url || "(blank)"}`).join("\n"));
268
+ tabs
269
+ .map((t) => `- [${t.tabId}]${t.active ? " (active)" : ""} ${t.title || "(untitled)"} — ${t.url || "(blank)"}`)
270
+ .join("\n"));
219
271
  }
220
272
  case "switch_tab": {
221
273
  if (!tabId)
222
274
  return "Error: tabId is required for switch_tab (see list_tabs)";
223
275
  const r = await b.switchTab(tabId);
224
- return r.ok ? `Switched to tab ${tabId} — re-observe to see it` : `Error: ${r.detail ?? "switch failed"}`;
276
+ return r.ok
277
+ ? `Switched to tab ${tabId} — re-observe to see it`
278
+ : `Error: ${r.detail ?? "switch failed"}`;
225
279
  }
226
280
  case "click": {
227
281
  if (!ref)
@@ -273,11 +327,20 @@ export async function browserActTool(args, ctx) {
273
327
  if (dir !== "up" && dir !== "down")
274
328
  return "Error: direction must be 'up' or 'down'";
275
329
  const r = await b.scroll(dir, args.amount);
276
- return r.ok ? `Scrolled ${dir}` : `Error: ${r.detail ?? "scroll failed"}`;
330
+ if (!r.ok) {
331
+ const code = r.code ? ` [${r.code}]` : "";
332
+ return `Error${code}: ${r.detail ?? "scroll failed"}`;
333
+ }
334
+ const state = r.scroll
335
+ ? ` — position ${Math.round(r.scroll.y)}/${Math.round(r.scroll.maxY)}${r.scroll.atEnd ? " (end)" : ""}`
336
+ : "";
337
+ return `Scrolled ${dir}${state}`;
277
338
  }
278
339
  case "wait": {
279
340
  const r = await b.waitForLoad(args.timeout_ms);
280
- return r.ok ? `Page ready${r.detail ? ` (${r.detail})` : ""}` : `Error: ${r.detail ?? "wait failed"}`;
341
+ return r.ok
342
+ ? `Page ready${r.detail ? ` (${r.detail})` : ""}`
343
+ : `Error: ${r.detail ?? "wait failed"}`;
281
344
  }
282
345
  default:
283
346
  return `Error: unknown action "${action}"`;
@@ -288,8 +351,11 @@ export async function browserActTool(args, ctx) {
288
351
  // ════════════════════════════════════════════════════════════════════════════
289
352
  export const browserNavigateToolDef = {
290
353
  name: "browser_navigate",
291
- description: "Navigate the browser panel to a URL (opens the panel automatically if none " +
292
- "is open). Then call browser_act(wait) + browser_observe to see the page.",
354
+ description: "Navigate the CodeShell browser runtime to a URL. It does not control the " +
355
+ "user-facing built-in browser unless the user explicitly grants a future handoff. " +
356
+ "Navigation stays in the background; the runtime's own window appears only when login or a " +
357
+ "high-consequence action needs human control. Then call browser_act(wait) + " +
358
+ "browser_observe to inspect the page.",
293
359
  inputSchema: {
294
360
  type: "object",
295
361
  properties: { url: { type: "string", description: "Absolute URL to open" } },
@@ -1,3 +1,9 @@
1
1
  import type { ToolDefinition } from "../../types.js";
2
+ /** Notifies process hosts after the user catalog has been persisted. Desktop
3
+ * uses this to refresh mounted settings/connection views without waiting for
4
+ * a parent turn_complete event (which may be absent for child/yielded runs). */
5
+ type ModelCatalogChangedSink = () => void;
6
+ export declare function setModelCatalogChangedSink(sink: ModelCatalogChangedSink | null): void;
2
7
  export declare const editModelCatalogToolDef: ToolDefinition;
3
8
  export declare function editModelCatalogTool(args: Record<string, unknown>): Promise<string>;
9
+ export {};