@cjhyy/code-shell-core 0.7.1 → 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 (594) 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 +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/permission.d.ts +26 -0
  374. package/dist/tool-system/permission.js +46 -0
  375. package/dist/tool-system/registry.d.ts +12 -1
  376. package/dist/tool-system/registry.js +31 -7
  377. package/dist/tool-system/sandbox/index.js +3 -8
  378. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  379. package/dist/tool-system/session-tool-host.d.ts +139 -0
  380. package/dist/tool-system/session-tool-host.js +167 -0
  381. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  382. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  383. package/dist/tool-system/validation.d.ts +14 -7
  384. package/dist/tool-system/validation.js +701 -7
  385. package/dist/types.d.ts +186 -20
  386. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  388. package/dist/utils/file-mutex.d.ts +65 -0
  389. package/dist/utils/file-mutex.js +145 -0
  390. package/dist/utils/json.d.ts +2 -4
  391. package/dist/utils/json.js +2 -4
  392. package/dist/utils/lockfile.d.ts +30 -1
  393. package/dist/utils/lockfile.js +2 -2
  394. package/dist/utils/secret-scrubber.d.ts +8 -0
  395. package/dist/utils/secret-scrubber.js +227 -0
  396. package/dist/utils/toolDisplay.js +1 -1
  397. package/package.json +20 -5
  398. package/THIRD_PARTY_NOTICES.md +0 -206
  399. package/dist/arena/arena.d.ts +0 -45
  400. package/dist/arena/arena.js +0 -362
  401. package/dist/arena/context/context-tools.d.ts +0 -16
  402. package/dist/arena/context/context-tools.js +0 -272
  403. package/dist/arena/context/within-root.d.ts +0 -7
  404. package/dist/arena/context/within-root.js +0 -15
  405. package/dist/arena/detect-mode.d.ts +0 -20
  406. package/dist/arena/detect-mode.js +0 -78
  407. package/dist/arena/digest-builder.d.ts +0 -25
  408. package/dist/arena/digest-builder.js +0 -120
  409. package/dist/arena/index.d.ts +0 -29
  410. package/dist/arena/index.js +0 -29
  411. package/dist/arena/iterate/convergence.d.ts +0 -25
  412. package/dist/arena/iterate/convergence.js +0 -103
  413. package/dist/arena/iterate/formats/index.d.ts +0 -22
  414. package/dist/arena/iterate/formats/index.js +0 -283
  415. package/dist/arena/iterate/index.d.ts +0 -11
  416. package/dist/arena/iterate/index.js +0 -9
  417. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  418. package/dist/arena/iterate/iterative-arena.js +0 -237
  419. package/dist/arena/iterate/parse.d.ts +0 -42
  420. package/dist/arena/iterate/parse.js +0 -123
  421. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  422. package/dist/arena/iterate/phases/argue.js +0 -165
  423. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  424. package/dist/arena/iterate/phases/revise.js +0 -62
  425. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  426. package/dist/arena/iterate/phases/tournament.js +0 -113
  427. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  428. package/dist/arena/iterate/tools/web-tools.js +0 -54
  429. package/dist/arena/iterate/types.d.ts +0 -152
  430. package/dist/arena/iterate/types.js +0 -8
  431. package/dist/arena/ledger.d.ts +0 -47
  432. package/dist/arena/ledger.js +0 -159
  433. package/dist/arena/lenses/architecture.d.ts +0 -5
  434. package/dist/arena/lenses/architecture.js +0 -22
  435. package/dist/arena/lenses/engineering.d.ts +0 -5
  436. package/dist/arena/lenses/engineering.js +0 -22
  437. package/dist/arena/lenses/general.d.ts +0 -5
  438. package/dist/arena/lenses/general.js +0 -20
  439. package/dist/arena/lenses/index.d.ts +0 -16
  440. package/dist/arena/lenses/index.js +0 -47
  441. package/dist/arena/lenses/product.d.ts +0 -5
  442. package/dist/arena/lenses/product.js +0 -22
  443. package/dist/arena/model-presets.d.ts +0 -23
  444. package/dist/arena/model-presets.js +0 -44
  445. package/dist/arena/phases/adjudication.d.ts +0 -25
  446. package/dist/arena/phases/adjudication.js +0 -142
  447. package/dist/arena/phases/build-consensus.d.ts +0 -30
  448. package/dist/arena/phases/build-consensus.js +0 -85
  449. package/dist/arena/phases/claim-registry.d.ts +0 -26
  450. package/dist/arena/phases/claim-registry.js +0 -60
  451. package/dist/arena/phases/cross-review.d.ts +0 -47
  452. package/dist/arena/phases/cross-review.js +0 -224
  453. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  454. package/dist/arena/phases/debate-rounds.js +0 -161
  455. package/dist/arena/phases/participant-research.d.ts +0 -39
  456. package/dist/arena/phases/participant-research.js +0 -316
  457. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  458. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  459. package/dist/arena/planner.d.ts +0 -28
  460. package/dist/arena/planner.js +0 -312
  461. package/dist/arena/providers/docs.d.ts +0 -7
  462. package/dist/arena/providers/docs.js +0 -111
  463. package/dist/arena/providers/git.d.ts +0 -8
  464. package/dist/arena/providers/git.js +0 -174
  465. package/dist/arena/providers/index.d.ts +0 -32
  466. package/dist/arena/providers/index.js +0 -132
  467. package/dist/arena/providers/none.d.ts +0 -7
  468. package/dist/arena/providers/none.js +0 -11
  469. package/dist/arena/providers/repo.d.ts +0 -7
  470. package/dist/arena/providers/repo.js +0 -258
  471. package/dist/arena/render/session.d.ts +0 -17
  472. package/dist/arena/render/session.js +0 -190
  473. package/dist/arena/render/terminal.d.ts +0 -34
  474. package/dist/arena/render/terminal.js +0 -286
  475. package/dist/arena/strategies/discussion.d.ts +0 -25
  476. package/dist/arena/strategies/discussion.js +0 -143
  477. package/dist/arena/strategies/index.d.ts +0 -15
  478. package/dist/arena/strategies/index.js +0 -28
  479. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  480. package/dist/arena/strategies/language-wrapper.js +0 -102
  481. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  482. package/dist/arena/strategies/lens-wrapper.js +0 -236
  483. package/dist/arena/strategies/planning.d.ts +0 -30
  484. package/dist/arena/strategies/planning.js +0 -225
  485. package/dist/arena/strategies/review.d.ts +0 -26
  486. package/dist/arena/strategies/review.js +0 -168
  487. package/dist/arena/strategies/utils.d.ts +0 -36
  488. package/dist/arena/strategies/utils.js +0 -603
  489. package/dist/arena/tools/selector.d.ts +0 -17
  490. package/dist/arena/tools/selector.js +0 -61
  491. package/dist/arena/transitions.d.ts +0 -53
  492. package/dist/arena/transitions.js +0 -97
  493. package/dist/arena/types.d.ts +0 -518
  494. package/dist/arena/types.js +0 -27
  495. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  496. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  497. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  498. package/dist/cc-orchestrator/cc-capability.js +0 -53
  499. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  500. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  501. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  502. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  503. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  504. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  505. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  506. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  507. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  508. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  509. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  510. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  511. package/dist/cc-orchestrator/index.d.ts +0 -8
  512. package/dist/cc-orchestrator/index.js +0 -8
  513. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  514. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  515. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  516. package/dist/cc-orchestrator/session-discovery.js +0 -125
  517. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  518. package/dist/cc-orchestrator/session-history.js +0 -150
  519. package/dist/cron/cron-runtime.d.ts +0 -2
  520. package/dist/cron/cron-runtime.js +0 -2
  521. package/dist/cron/cron-store.d.ts +0 -2
  522. package/dist/cron/cron-store.js +0 -2
  523. package/dist/cron/scheduler.d.ts +0 -7
  524. package/dist/cron/scheduler.js +0 -7
  525. package/dist/engine/goal.js +0 -206
  526. package/dist/external-agents/config.d.ts +0 -2
  527. package/dist/external-agents/config.js +0 -15
  528. package/dist/external-agents/types.d.ts +0 -31
  529. package/dist/git/parse-log.d.ts +0 -13
  530. package/dist/git/parse-log.js +0 -21
  531. package/dist/git/utils.d.ts +0 -49
  532. package/dist/git/utils.js +0 -161
  533. package/dist/git/worktree/crud.d.ts +0 -72
  534. package/dist/git/worktree/crud.js +0 -235
  535. package/dist/git/worktree/diff.d.ts +0 -14
  536. package/dist/git/worktree/diff.js +0 -82
  537. package/dist/git/worktree/git-exec.d.ts +0 -7
  538. package/dist/git/worktree/git-exec.js +0 -87
  539. package/dist/git/worktree/index.d.ts +0 -5
  540. package/dist/git/worktree/index.js +0 -5
  541. package/dist/git/worktree/query.d.ts +0 -43
  542. package/dist/git/worktree/query.js +0 -128
  543. package/dist/git/worktree/slug.d.ts +0 -11
  544. package/dist/git/worktree/slug.js +0 -58
  545. package/dist/git/worktree.d.ts +0 -1
  546. package/dist/git/worktree.js +0 -5
  547. package/dist/lsp/client.d.ts +0 -41
  548. package/dist/lsp/client.js +0 -186
  549. package/dist/lsp/manager.d.ts +0 -40
  550. package/dist/lsp/manager.js +0 -155
  551. package/dist/lsp/root-path.d.ts +0 -9
  552. package/dist/lsp/root-path.js +0 -12
  553. package/dist/lsp/servers.d.ts +0 -16
  554. package/dist/lsp/servers.js +0 -60
  555. package/dist/prompt/sections/coding.md +0 -35
  556. package/dist/quota/credentials.d.ts +0 -3
  557. package/dist/quota/credentials.js +0 -80
  558. package/dist/quota/index.d.ts +0 -36
  559. package/dist/quota/index.js +0 -155
  560. package/dist/quota/types.d.ts +0 -48
  561. package/dist/quota/types.js +0 -13
  562. package/dist/review/review-prompt.d.ts +0 -28
  563. package/dist/review/review-prompt.js +0 -81
  564. package/dist/state.d.ts +0 -160
  565. package/dist/state.js +0 -267
  566. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  567. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  568. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  570. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  571. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  572. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  573. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  574. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  576. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  577. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  578. package/dist/tool-system/builtin/arena.d.ts +0 -31
  579. package/dist/tool-system/builtin/arena.js +0 -416
  580. package/dist/tool-system/builtin/brief.d.ts +0 -6
  581. package/dist/tool-system/builtin/brief.js +0 -41
  582. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  583. package/dist/tool-system/builtin/check-quota.js +0 -34
  584. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  585. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  586. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  587. package/dist/tool-system/builtin/lsp.js +0 -144
  588. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  589. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  590. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  591. package/dist/tool-system/builtin/worktree.js +0 -363
  592. /package/dist/{external-agents → links}/types.js +0 -0
  593. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  594. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -0,0 +1,34 @@
1
+ export function buildMcpToolPolicies(servers) {
2
+ const policies = new Map();
3
+ for (const [serverName, config] of Object.entries(servers)) {
4
+ if (config.enabled === false)
5
+ continue;
6
+ if (config.allowedTools === undefined && config.disabledTools === undefined)
7
+ continue;
8
+ policies.set(serverName, {
9
+ allowedTools: config.allowedTools === undefined ? undefined : new Set(config.allowedTools),
10
+ disabledTools: new Set(config.disabledTools ?? []),
11
+ });
12
+ }
13
+ return policies;
14
+ }
15
+ export function isMcpToolNameAllowed(policies, serverName, toolName) {
16
+ const policy = policies?.get(serverName);
17
+ if (!policy)
18
+ return true;
19
+ if (policy.allowedTools && !policy.allowedTools.has(toolName))
20
+ return false;
21
+ return !policy.disabledTools.has(toolName);
22
+ }
23
+ export function isRegisteredMcpToolAllowed(tool, policies) {
24
+ if (tool.source !== "mcp")
25
+ return true;
26
+ const policy = policies?.get(tool.serverName ?? "");
27
+ if (!policy)
28
+ return true;
29
+ // Restricted servers fail closed for registry entries created by an older
30
+ // or third-party adapter that did not preserve the original MCP tool name.
31
+ if (!tool.mcpToolName)
32
+ return false;
33
+ return isMcpToolNameAllowed(policies, tool.serverName ?? "", tool.mcpToolName);
34
+ }
@@ -0,0 +1,53 @@
1
+ /** One panel the active host can present to the user. */
2
+ export interface AgentPanelDescriptor {
3
+ id: string;
4
+ title: string;
5
+ source: "builtin" | "builtin-panel-app" | "panel-app";
6
+ }
7
+ export interface PanelOpenResult {
8
+ ok: boolean;
9
+ panelId: string;
10
+ detail?: string;
11
+ }
12
+ export interface AgentPanelToolDescriptor {
13
+ name: string;
14
+ description: string;
15
+ inputSchema: Record<string, unknown>;
16
+ readOnly: boolean;
17
+ }
18
+ export interface PanelInvokeResult {
19
+ ok: boolean;
20
+ panelId: string;
21
+ toolName: string;
22
+ result?: unknown;
23
+ detail?: string;
24
+ }
25
+ /**
26
+ * A discovery result that can distinguish "the host has none" from "the request
27
+ * never completed".
28
+ *
29
+ * `list` / `tools` used to return a bare array, so every failure — a user Stop, a
30
+ * closed session, a timeout — collapsed to `[]`, which the Panel tool then
31
+ * reported as the factual claim "(no panels available)". That is worse than a
32
+ * refusal: it tells the model panel hosting is unavailable, so it stops trying.
33
+ * `failed` carries the reason instead, and an absent `failed` means the empty
34
+ * list is real.
35
+ */
36
+ export interface PanelDiscoveryResult<T> {
37
+ items: T[];
38
+ /** Present only when the request did not complete; `items` is then empty. */
39
+ failed?: string;
40
+ }
41
+ /**
42
+ * UI-agnostic bridge used by agent tools to discover and focus host panels.
43
+ *
44
+ * Core never imports a renderer. Desktop implements this through its protocol
45
+ * host; headless/TUI engines leave it undefined. Plugin-contributed tools may
46
+ * use the same bridge to open their own panel by stable registry id.
47
+ */
48
+ export interface PanelHostBridge {
49
+ list(): Promise<PanelDiscoveryResult<AgentPanelDescriptor>>;
50
+ open(panelId: string): Promise<PanelOpenResult>;
51
+ tools?(panelId: string): Promise<PanelDiscoveryResult<AgentPanelToolDescriptor>>;
52
+ invoke?(panelId: string, toolName: string, args: Record<string, unknown>): Promise<PanelInvokeResult>;
53
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -6,6 +6,19 @@ import { logger as rootPermLogger } from "../logging/logger.js";
6
6
  export interface ApprovalBackend {
7
7
  requestApproval(request: ApprovalRequest): Promise<ApprovalResult>;
8
8
  }
9
+ /**
10
+ * Interactive-approval lifecycle observation (see
11
+ * PermissionClassifier.setApprovalEventListener). "requested" fires right
12
+ * before the backend prompt is awaited; "resolved" fires after the user (or
13
+ * backend policy) answered, with the outcome.
14
+ */
15
+ export interface ApprovalLifecycleEvent {
16
+ phase: "requested" | "resolved";
17
+ toolName: string;
18
+ riskLevel: "low" | "medium" | "high";
19
+ approved?: boolean;
20
+ sessionId?: string;
21
+ }
9
22
  export interface ApprovalRouteTarget {
10
23
  connectionId: string;
11
24
  sessionId: string;
@@ -185,8 +198,21 @@ export declare class PermissionClassifier {
185
198
  * tests and ad-hoc usages still write log lines.
186
199
  */
187
200
  private log;
201
+ private approvalStateListener?;
202
+ private approvalEventListener?;
203
+ private activeApprovalCount;
188
204
  constructor(rules: PermissionRule[], defaultMode?: PermissionMode, approvalBackend?: ApprovalBackend);
189
205
  setLogger(log: typeof rootPermLogger): void;
206
+ setApprovalStateListener(listener: ((waiting: boolean, toolName: string) => void) | undefined): void;
207
+ /**
208
+ * Observe interactive-approval lifecycle (requested → resolved). The engine
209
+ * wires this to the `notification` hook so plugins / settings hooks can
210
+ * react to "waiting for the user's decision" moments (system notification,
211
+ * IM ping, …). Listener errors are swallowed — observation must never
212
+ * affect the approval outcome.
213
+ */
214
+ setApprovalEventListener(listener: ((event: ApprovalLifecycleEvent) => void) | undefined): void;
215
+ private emitApprovalEvent;
190
216
  /** Replace mode + backend in place so live tool execution sees the change. */
191
217
  reconfigure(mode: PermissionMode, approvalBackend: ApprovalBackend, rules?: PermissionRule[]): void;
192
218
  getMode(): PermissionMode;
@@ -1237,6 +1237,9 @@ export class PermissionClassifier {
1237
1237
  * tests and ad-hoc usages still write log lines.
1238
1238
  */
1239
1239
  log = rootPermLogger;
1240
+ approvalStateListener;
1241
+ approvalEventListener;
1242
+ activeApprovalCount = 0;
1240
1243
  constructor(rules, defaultMode = "default", approvalBackend = new HeadlessApprovalBackend("deny-all")) {
1241
1244
  this.rules = rules;
1242
1245
  this.defaultMode = defaultMode;
@@ -1245,6 +1248,27 @@ export class PermissionClassifier {
1245
1248
  setLogger(log) {
1246
1249
  this.log = log;
1247
1250
  }
1251
+ setApprovalStateListener(listener) {
1252
+ this.approvalStateListener = listener;
1253
+ }
1254
+ /**
1255
+ * Observe interactive-approval lifecycle (requested → resolved). The engine
1256
+ * wires this to the `notification` hook so plugins / settings hooks can
1257
+ * react to "waiting for the user's decision" moments (system notification,
1258
+ * IM ping, …). Listener errors are swallowed — observation must never
1259
+ * affect the approval outcome.
1260
+ */
1261
+ setApprovalEventListener(listener) {
1262
+ this.approvalEventListener = listener;
1263
+ }
1264
+ emitApprovalEvent(event) {
1265
+ try {
1266
+ this.approvalEventListener?.(event);
1267
+ }
1268
+ catch {
1269
+ /* observers must not affect approval flow */
1270
+ }
1271
+ }
1248
1272
  /** Replace mode + backend in place so live tool execution sees the change. */
1249
1273
  reconfigure(mode, approvalBackend, rules) {
1250
1274
  this.defaultMode = mode;
@@ -1330,6 +1354,14 @@ export class PermissionClassifier {
1330
1354
  riskLevel,
1331
1355
  });
1332
1356
  let result;
1357
+ this.activeApprovalCount++;
1358
+ this.approvalStateListener?.(true, toolName);
1359
+ this.emitApprovalEvent({
1360
+ phase: "requested",
1361
+ toolName,
1362
+ riskLevel,
1363
+ ...(opts?.sessionId ? { sessionId: opts.sessionId } : {}),
1364
+ });
1333
1365
  try {
1334
1366
  const baseDescription = this.describeToolCall(toolName, args);
1335
1367
  const description = reason ? `${baseDescription}\n\nReason:\n${reason}` : baseDescription;
@@ -1345,12 +1377,24 @@ export class PermissionClassifier {
1345
1377
  span.fail(err, { tool: toolName });
1346
1378
  throw err;
1347
1379
  }
1380
+ finally {
1381
+ this.activeApprovalCount = Math.max(0, this.activeApprovalCount - 1);
1382
+ if (this.activeApprovalCount === 0)
1383
+ this.approvalStateListener?.(false, toolName);
1384
+ }
1348
1385
  if (result.approved) {
1349
1386
  this.denialTracker.recordSuccess(toolName);
1350
1387
  }
1351
1388
  else {
1352
1389
  this.denialTracker.record(toolName);
1353
1390
  }
1391
+ this.emitApprovalEvent({
1392
+ phase: "resolved",
1393
+ toolName,
1394
+ riskLevel,
1395
+ approved: result.approved,
1396
+ ...(opts?.sessionId ? { sessionId: opts.sessionId } : {}),
1397
+ });
1354
1398
  span.end({
1355
1399
  tool: toolName,
1356
1400
  approved: result.approved,
@@ -1385,6 +1429,8 @@ export class PermissionClassifier {
1385
1429
  return "medium";
1386
1430
  if (toolName === "Bash")
1387
1431
  return "medium";
1432
+ if (toolName === "Panel")
1433
+ return args.action === "invoke" ? "medium" : "low";
1388
1434
  // Only genuinely read-only built-ins are "low" (the sole tier
1389
1435
  // AutoApprovalBackend approves with no delegate). Everything else —
1390
1436
  // crucially every MCP tool, which can delete records, send messages, or
@@ -2,27 +2,38 @@
2
2
  * Unified tool registry — built-in tools + MCP tools.
3
3
  */
4
4
  import type { RegisteredTool, ToolDefinition, ToolResult } from "../types.js";
5
+ import { type BuiltinTool, type BuiltinToolGuard } from "./builtin/index.js";
5
6
  import type { ToolContext } from "./context.js";
6
7
  /**
7
8
  * Default execution timeout for any tool that does not declare its own
8
9
  * timeoutMs at registration time. Tools that need to run longer (Agent,
9
- * Arena, Bash, custom long-running tools) should set timeoutMs explicitly.
10
+ * Bash, or custom capability tools) should set timeoutMs explicitly.
10
11
  */
11
12
  export declare const DEFAULT_TOOL_TIMEOUT_MS = 120000;
12
13
  export interface ToolRegistryOptions {
13
14
  builtinTools?: readonly string[];
15
+ /** Core catalog plus any tools contributed by host capability packages. */
16
+ toolCatalog?: readonly BuiltinTool[];
14
17
  }
15
18
  type ToolImplementation = (args: Record<string, unknown>, ctx?: ToolContext) => Promise<unknown>;
16
19
  export declare class ToolRegistry {
17
20
  private tools;
18
21
  private builtinExecutors;
22
+ private availabilityGuards;
19
23
  constructor(options?: ToolRegistryOptions);
20
24
  private registerBuiltins;
21
25
  registerTool(tool: RegisteredTool, executor?: ToolImplementation): void;
26
+ /** Create an engine-local registry view without sharing mutable maps. */
27
+ fork(): ToolRegistry;
22
28
  unregisterTool(name: string): void;
23
29
  getToolDefinitions(): ToolDefinition[];
24
30
  getTool(name: string): RegisteredTool | undefined;
25
31
  hasTool(name: string): boolean;
32
+ /** Test/harness introspection: definitions without implementations are valid
33
+ * for some dynamic registrations, but every builtin catalog entry must have
34
+ * an executor. */
35
+ hasExecutor(name: string): boolean;
36
+ getAvailabilityGuard(name: string): BuiltinToolGuard | undefined;
26
37
  executeTool(name: string, args: Record<string, unknown>, options?: {
27
38
  timeoutMs?: number;
28
39
  signal?: AbortSignal;
@@ -2,22 +2,26 @@
2
2
  * Unified tool registry — built-in tools + MCP tools.
3
3
  */
4
4
  import { ConfigError, ToolNotFoundError, ToolExecutionError, ToolTimeoutError, } from "../exceptions.js";
5
- import { BUILTIN_TOOLS, toToolExecutionResult } from "./builtin/index.js";
5
+ import { BUILTIN_TOOLS, toToolExecutionResult, } from "./builtin/index.js";
6
6
  import { validateToolMetadata } from "./validate-tool-metadata.js";
7
7
  /**
8
8
  * Default execution timeout for any tool that does not declare its own
9
9
  * timeoutMs at registration time. Tools that need to run longer (Agent,
10
- * Arena, Bash, custom long-running tools) should set timeoutMs explicitly.
10
+ * Bash, or custom capability tools) should set timeoutMs explicitly.
11
11
  */
12
12
  export const DEFAULT_TOOL_TIMEOUT_MS = 120_000;
13
13
  export class ToolRegistry {
14
14
  tools = new Map();
15
15
  builtinExecutors = new Map();
16
+ availabilityGuards = new Map();
16
17
  constructor(options = {}) {
17
- this.registerBuiltins(options.builtinTools);
18
+ this.registerBuiltins(options.builtinTools, options.toolCatalog ?? BUILTIN_TOOLS);
18
19
  }
19
- registerBuiltins(selectedBuiltinTools) {
20
- const availableNames = new Set(BUILTIN_TOOLS.map((tool) => tool.definition.name));
20
+ registerBuiltins(selectedBuiltinTools, toolCatalog) {
21
+ const availableNames = new Set(toolCatalog.map((tool) => tool.definition.name));
22
+ if (availableNames.size !== toolCatalog.length) {
23
+ throw new ConfigError("Tool catalog contains duplicate names");
24
+ }
21
25
  const selectedNames = selectedBuiltinTools ? new Set(selectedBuiltinTools) : null;
22
26
  if (selectedNames) {
23
27
  const unknown = [...selectedNames].filter((name) => !availableNames.has(name));
@@ -27,7 +31,7 @@ export class ToolRegistry {
27
31
  });
28
32
  }
29
33
  }
30
- for (const tool of BUILTIN_TOOLS) {
34
+ for (const tool of toolCatalog) {
31
35
  if (selectedNames && !selectedNames.has(tool.definition.name)) {
32
36
  continue;
33
37
  }
@@ -36,6 +40,9 @@ export class ToolRegistry {
36
40
  validateToolMetadata(tool.definition);
37
41
  this.tools.set(tool.definition.name, tool.definition);
38
42
  this.builtinExecutors.set(tool.definition.name, tool.execute);
43
+ if (tool.exposure.availability) {
44
+ this.availabilityGuards.set(tool.definition.name, tool.exposure.availability);
45
+ }
39
46
  }
40
47
  }
41
48
  registerTool(tool, executor) {
@@ -45,9 +52,17 @@ export class ToolRegistry {
45
52
  this.builtinExecutors.set(tool.name, async (args, ctx) => toToolExecutionResult(await executor(args, ctx)));
46
53
  }
47
54
  }
55
+ /** Create an engine-local registry view without sharing mutable maps. */
56
+ fork() {
57
+ const fork = new ToolRegistry({ builtinTools: [] });
58
+ fork.tools = new Map(this.tools);
59
+ fork.builtinExecutors = new Map(this.builtinExecutors);
60
+ return fork;
61
+ }
48
62
  unregisterTool(name) {
49
63
  this.tools.delete(name);
50
64
  this.builtinExecutors.delete(name);
65
+ this.availabilityGuards.delete(name);
51
66
  }
52
67
  getToolDefinitions() {
53
68
  return [...this.tools.values()].map((t) => ({
@@ -63,6 +78,15 @@ export class ToolRegistry {
63
78
  hasTool(name) {
64
79
  return this.tools.has(name);
65
80
  }
81
+ /** Test/harness introspection: definitions without implementations are valid
82
+ * for some dynamic registrations, but every builtin catalog entry must have
83
+ * an executor. */
84
+ hasExecutor(name) {
85
+ return this.builtinExecutors.has(name);
86
+ }
87
+ getAvailabilityGuard(name) {
88
+ return this.availabilityGuards.get(name);
89
+ }
66
90
  async executeTool(name, args, options) {
67
91
  const tool = this.tools.get(name);
68
92
  if (!tool) {
@@ -74,7 +98,7 @@ export class ToolRegistry {
74
98
  }
75
99
  // Tool timeout precedence:
76
100
  // options.timeoutMs (per-call override) > tool.timeoutMs (declared at registration) > default 120s.
77
- // To run longer, declare timeoutMs on the tool (e.g. Agent/Arena: 30min, Bash: 1h).
101
+ // To run longer, declare timeoutMs on the tool (e.g. Agent: 30min, Bash: 1h).
78
102
  const timeout = options?.timeoutMs ?? tool.timeoutMs ?? DEFAULT_TOOL_TIMEOUT_MS;
79
103
  const parentSignal = options?.signal;
80
104
  const id = `tool_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
@@ -26,7 +26,8 @@ import { SandboxUnavailableError } from "../../exceptions.js";
26
26
  export function detectSandboxCapabilities() {
27
27
  return {
28
28
  seatbelt: process.platform === "darwin" && binaryExists("/usr/bin/sandbox-exec"),
29
- bwrap: process.platform === "linux" && (binaryExists("/usr/bin/bwrap") || binaryExists("/usr/local/bin/bwrap")),
29
+ bwrap: process.platform === "linux" &&
30
+ (binaryExists("/usr/bin/bwrap") || binaryExists("/usr/local/bin/bwrap")),
30
31
  };
31
32
  }
32
33
  function binaryExists(path) {
@@ -119,13 +120,7 @@ export function defaultSandboxConfig(mode = "auto") {
119
120
  return {
120
121
  mode,
121
122
  writableRoots: ["${workspace}", ...tmpRoots],
122
- deniedReads: [
123
- "~/.ssh",
124
- "~/.aws",
125
- "~/.config/gcloud",
126
- "~/.code-shell",
127
- "~/.claude",
128
- ],
123
+ deniedReads: ["~/.ssh", "~/.aws", "~/.config/gcloud", "~/.code-shell", "~/.claude"],
129
124
  network: "allow",
130
125
  };
131
126
  }
@@ -54,12 +54,8 @@ export function createSeatbeltBackend(config) {
54
54
  };
55
55
  }
56
56
  function buildProfile(config) {
57
- const writeAllows = config.writableRoots
58
- .map((p) => ` (subpath ${quote(p)})`)
59
- .join("\n");
60
- const readDenies = config.deniedReads
61
- .map((p) => ` (subpath ${quote(p)})`)
62
- .join("\n");
57
+ const writeAllows = config.writableRoots.map((p) => ` (subpath ${quote(p)})`).join("\n");
58
+ const readDenies = config.deniedReads.map((p) => ` (subpath ${quote(p)})`).join("\n");
63
59
  const networkClause = config.network === "deny" ? "(deny network-outbound)" : "(allow network*)";
64
60
  // SBPL evaluation note: when a broad `(allow file-read*)` and a specific
65
61
  // `(deny file-read* (subpath …))` both match, the more specific subpath
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Session-scoped tool host for external Agent Runtimes.
3
+ *
4
+ * An external runtime (Codex, Claude Code) drives its own agent loop and its own
5
+ * native tools. When it wants a CODESHELL tool it comes back in over MCP, and
6
+ * this is what it reaches: a narrow, per-business-session surface that exposes an
7
+ * explicitly allowlisted subset of the registry.
8
+ *
9
+ * The single rule that matters: **every call goes through
10
+ * `ToolExecutor.executeSingle()`**. `ToolRegistry` is not a security boundary —
11
+ * calling it directly would skip visibility, plan mode, argument validation, path
12
+ * policy, permission, sandbox, hooks, and result redaction. The MCP transport,
13
+ * the model's chosen tool name, and its arguments are all untrusted; the business
14
+ * session context is bound here by the host, out of band.
15
+ *
16
+ * Deliberately domain-agnostic: no Claude/Codex/Electron/coding literals. The
17
+ * runtime adapters live in the coding capability and talk to this through the
18
+ * `SessionToolHost` interface.
19
+ */
20
+ import type { PermissionMode, ToolDefinition, ToolResult } from "../types.js";
21
+ import type { ToolContext } from "./context.js";
22
+ import { ToolRegistry } from "./registry.js";
23
+ import { type ApprovalBackend } from "./permission.js";
24
+ import { HookRegistry } from "../hooks/registry.js";
25
+ import { type ToolVisibilityInputs } from "../engine/run-tooling.js";
26
+ /**
27
+ * Permission modes an external session may use.
28
+ *
29
+ * `bypassPermissions` and `dontAsk` are excluded at the type level because they
30
+ * short-circuit `PermissionClassifier` entirely (it returns allow / deny before
31
+ * consulting any rule). Under either one, "the call went through ToolExecutor"
32
+ * becomes true but meaningless. The external runtime's OWN permission mode is a
33
+ * separate thing and is unaffected by this — it governs that runtime's native
34
+ * tools, not CodeShell's.
35
+ */
36
+ export type ExternalSessionPermissionMode = Exclude<PermissionMode, "bypassPermissions" | "dontAsk">;
37
+ /**
38
+ * Which tools an external runtime may see and call.
39
+ *
40
+ * Allowlist only — no "everything in the registry", no prefix matching. A tool
41
+ * that is not named here does not exist as far as the runtime is concerned, and
42
+ * naming it anyway is an error rather than a silent no-op.
43
+ */
44
+ export interface ExternalToolExposurePolicy {
45
+ mode: "allowlist";
46
+ toolNames: ReadonlySet<string>;
47
+ /**
48
+ * Optional per-tool argument narrowing, for tools that multiplex several
49
+ * operations behind one name (e.g. a Panel tool with list/open/tools/invoke).
50
+ * Each value is a regex source matched against the whole argument value —
51
+ * patterns are anchored for you, see {@link matchesWholeValue}.
52
+ *
53
+ * This binds on `execute()`, not just `listTools()`: describing a limit only in
54
+ * the advertised schema would leave it advisory, and the arguments come from
55
+ * the model.
56
+ *
57
+ * **Scope, stated plainly:** this constrains only the keys it names. Keys the
58
+ * pattern does not mention pass through untouched, so it is a good fit for
59
+ * "which action may run" and a poor one for "what may that action do".
60
+ * Restricting a nested payload (e.g. the arguments a Panel tool forwards to a
61
+ * Panel App) is the tool's own schema validation, not this. Do not treat an
62
+ * `argsPatterns` entry as a sandbox for everything a tool might accept.
63
+ */
64
+ argsPatterns?: ReadonlyMap<string, Readonly<Record<string, string>>>;
65
+ }
66
+ export interface SessionToolHost {
67
+ readonly businessSessionId: string;
68
+ /**
69
+ * The assembled session ToolContext.
70
+ *
71
+ * Exposed read-only so a host can inspect what the executor will actually see
72
+ * — most usefully `toolVisibility` (absent means ToolExecutor SKIPS its
73
+ * availability guard) and `allowedToolNames`. Do not mutate it; narrow the
74
+ * exposure policy instead.
75
+ */
76
+ readonly toolContext: ToolContext;
77
+ listTools(): readonly ToolDefinition[];
78
+ execute(call: {
79
+ id: string;
80
+ name: string;
81
+ input: unknown;
82
+ }, signal?: AbortSignal): Promise<ToolResult>;
83
+ dispose(): Promise<void>;
84
+ }
85
+ export interface CreateSessionToolHostOptions {
86
+ businessSessionId: string;
87
+ cwd: string;
88
+ registry: ToolRegistry;
89
+ permissionMode: ExternalSessionPermissionMode;
90
+ /**
91
+ * The agent preset's permission rules (e.g.
92
+ * `BUILTIN_AGENT_PRESETS.general.defaultPermissionRules`).
93
+ *
94
+ * Only the PRESET layer is supplied here. The rest of the stack — the standing
95
+ * memory-scope carve-outs, mode-derived rules, and the user's own
96
+ * `settings.permissions.rules` — is composed internally by
97
+ * {@link composePermissionRules}, the same function the Native Engine uses.
98
+ *
99
+ * That composition is deliberately not left to the caller. An earlier revision
100
+ * took a finished rule array, which turned an equivalence guarantee into an
101
+ * unenforceable obligation: nothing checked that a caller reproduced
102
+ * `PermissionController.build()`, and the easy mistake — omitting
103
+ * `settings.permissions.rules` — meant a user's explicit "deny this tool" bound
104
+ * the Native Engine but not the external runtime.
105
+ */
106
+ presetRules: readonly import("../types.js").PermissionRule[];
107
+ /** Settings scope used to resolve the user's own permission rules. */
108
+ settingsScope?: import("../settings/manager.js").SettingsScope;
109
+ /**
110
+ * Whether the project at `cwd` has been trusted by the user.
111
+ *
112
+ * **Required, and there is no default** — `permissions` is the first entry in
113
+ * `DANGEROUS_PROJECT_FIELDS`, so an untrusted project's
114
+ * `settings.permissions.rules` are stripped precisely to stop a cloned repo
115
+ * self-authorizing. Every protocol-layer caller resolves this explicitly and
116
+ * defaults it to `false`; an optional field defaulting to "trusted" here would
117
+ * let a hostile repo grant an external runtime tools the user never trusted,
118
+ * without the approval backend ever being consulted.
119
+ *
120
+ * Optional-plus-unsafe-default is the exact shape of the bug this whole
121
+ * options object has now been bitten by twice. Hence: required.
122
+ */
123
+ projectTrusted: boolean;
124
+ planMode: boolean;
125
+ exposure: ExternalToolExposurePolicy;
126
+ /**
127
+ * Availability-guard inputs. Required, not optional: `ToolExecutor` SKIPS its
128
+ * visibility gate when `toolCtx.toolVisibility` is absent, so omitting this
129
+ * would not merely under-expose tools — it would make host-gated tools
130
+ * callable in a context their guard was written to exclude.
131
+ */
132
+ visibility: ToolVisibilityInputs;
133
+ approvalBackend?: ApprovalBackend;
134
+ hooks?: HookRegistry;
135
+ /** Extra ToolContext seams the host supplies (panels, browser, askUser, …). */
136
+ contextOverrides?: Partial<ToolContext>;
137
+ signal?: AbortSignal;
138
+ }
139
+ export declare function createSessionToolHost(options: CreateSessionToolHostOptions): SessionToolHost;