@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
@@ -8,7 +8,6 @@ import { editModelCatalogToolDef, editModelCatalogTool } from "./edit-model-cata
8
8
  import { generateVideoToolDef, generateVideoTool, isGenerateVideoAvailable, } from "./generate-video.js";
9
9
  import { viewImageToolDef, viewImageTool } from "./view-image.js";
10
10
  import { editToolDef, editTool } from "./edit.js";
11
- import { applyPatchToolDef, applyPatchTool } from "./apply-patch/index.js";
12
11
  import { globToolDef, globTool } from "./glob.js";
13
12
  import { grepToolDef, grepTool } from "./grep.js";
14
13
  import { bashToolDef, bashTool } from "./bash.js";
@@ -19,32 +18,75 @@ import { agentToolDef, agentTool, agentStatusToolDef, agentStatusTool, agentCanc
19
18
  import { enterPlanModeToolDef, enterPlanModeTool, exitPlanModeToolDef, exitPlanModeTool, } from "./plan.js";
20
19
  import { toolSearchToolDef, toolSearchTool } from "./tool-search.js";
21
20
  import { todoWriteToolDef, todoWriteTool } from "./task.js";
22
- import { enterWorktreeToolDef, enterWorktreeTool, exitWorktreeToolDef, exitWorktreeTool, switchSessionWorkspaceToolDef, switchSessionWorkspaceTool, } from "./worktree.js";
23
21
  import { sleepToolDef } from "./sleep.definition.js";
24
22
  import { sleepTool } from "./sleep.js";
25
23
  import { configToolDef, configTool } from "./config.js";
26
- import { notebookEditToolDef, notebookEditTool } from "./notebook-edit.js";
27
- import { lspToolDef, lspTool } from "./lsp.js";
28
24
  import { cronCreateToolDef, cronCreateTool, cronDeleteToolDef, cronDeleteTool, cronListTool, } from "./cron.js";
29
25
  import { cronListToolDef } from "./cron-list.definition.js";
30
- import { driveClaudeCodeToolDef, driveClaudeCodeTool, driveAgentToolDef, driveAgentTool, driveAgentJobsToolDef, driveAgentJobsTool, DRIVE_AGENT_TOOL_TIMEOUT_MS, } from "./drive-claude-code.js";
31
- import { checkQuotaToolDef, checkQuotaTool } from "./check-quota.js";
32
26
  import { skillToolDef, skillTool } from "./skill.js";
33
27
  import { mcpToolDef, mcpToolExecute, listMcpResourcesToolDef, listMcpResourcesTool, readMcpResourceToolDef, readMcpResourceTool, } from "./mcp-tools.js";
28
+ import { listSourcesToolDef, listSourcesTool, readSourceToolDef, readSourceTool, } from "./sources.js";
34
29
  import { replToolDef, replTool } from "./repl.js";
35
- import { briefToolDef, briefTool } from "./brief.js";
36
30
  import { powershellToolDef, powershellTool } from "./powershell.js";
37
- import { arenaToolDef, arenaTool } from "./arena.js";
38
31
  import { memoryListToolDef, memoryListTool, memoryReadToolDef, memoryReadTool, memorySaveToolDef, memorySaveTool, memoryDeleteToolDef, memoryDeleteTool, } from "./memory.js";
39
32
  import { completeGoalToolDef, completeGoalTool } from "./complete-goal.js";
40
33
  import { cancelGoalToolDef, cancelGoalTool } from "./cancel-goal.js";
41
34
  import { addMarketplaceToolDef, addMarketplaceTool } from "./add-marketplace.js";
42
35
  import { bashOutputToolDef, bashOutputTool, killShellToolDef, killShellTool, listShellsToolDef, listShellsTool, } from "./background-shell-tools.js";
43
36
  import { browserObserveToolDef, browserObserveTool, browserActToolDef, browserActTool, browserNavigateToolDef, browserNavigateTool, } from "./browser-tools.js";
37
+ import { panelToolDef, panelTool } from "./panel.js";
38
+ import { sendMessageToSessionToolDef, sendMessageToSessionTool, rewriteSendMessageToSessionToolDefinition, } from "./send-message-to-session.js";
44
39
  import { useCredentialToolDef, useCredentialBuiltinTool, } from "../../credentials/use-credential-tool.js";
45
40
  import { injectCredentialToolDef, injectCredentialTool, isInjectCredentialAvailable, } from "../../credentials/inject-credential-tool.js";
46
41
  import { credentialAccessScope, getCredentialAccess } from "../../credentials/access.js";
47
- export const BUILTIN_TOOLS = [
42
+ import { linkActionToolDef, linkActionTool, isLinkActionAvailable, } from "../../links/link-action-tool.js";
43
+ const FAILURE_TEXT = /^(?:error\b|failed\b|failure\b|skill\b.*(?:not found\b|disabled\b|not available\b|allowlist\b|denied\b)|(?:[a-z][\w-]*\s+){1,3}(?:error\b|failed\b|failure\b|aborted\b|timed out\b))/i;
44
+ function failureMessage(result) {
45
+ if (typeof result.error === "string" && result.error)
46
+ return result.error;
47
+ if (typeof result.result === "string" && result.result)
48
+ return result.result;
49
+ return "Tool execution failed";
50
+ }
51
+ /** Convert every builtin implementation into the closed discriminated protocol. */
52
+ export function toToolExecutionResult(value) {
53
+ if (typeof value === "string") {
54
+ return FAILURE_TEXT.test(value) ? { ok: false, error: value } : { ok: true, result: value };
55
+ }
56
+ if (!value || typeof value !== "object") {
57
+ return { ok: false, error: `Invalid tool result: ${String(value)}` };
58
+ }
59
+ const result = value;
60
+ if (result.ok === false || result.isError === true || "error" in result) {
61
+ return {
62
+ ...result,
63
+ ok: false,
64
+ error: failureMessage(result),
65
+ };
66
+ }
67
+ if (result.ok === true)
68
+ return result;
69
+ const text = typeof result.result === "string" ? result.result : undefined;
70
+ if (text && FAILURE_TEXT.test(text)) {
71
+ return {
72
+ ok: false,
73
+ error: text,
74
+ ...(result.sandbox ? { sandbox: result.sandbox } : {}),
75
+ };
76
+ }
77
+ return { ok: true, ...result };
78
+ }
79
+ const GENERAL_TAGS = ["general"];
80
+ const HARNESS_TAGS = ["harness-min", "general"];
81
+ const EXPLICIT_ONLY = [];
82
+ function expose(presetTags, options = {}) {
83
+ return { presetTags, ...options };
84
+ }
85
+ function allow(tool) {
86
+ return [{ tool, decision: "allow" }];
87
+ }
88
+ /** One authoritative contribution record per builtin: schema, handler and product exposure. */
89
+ const BUILTIN_CONTRIBUTIONS = [
48
90
  {
49
91
  definition: {
50
92
  ...readToolDef,
@@ -55,6 +97,7 @@ export const BUILTIN_TOOLS = [
55
97
  pathPolicy: [{ kind: "arg", arg: "file_path", operation: "read" }],
56
98
  },
57
99
  execute: readTool,
100
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(readToolDef.name) }),
58
101
  },
59
102
  {
60
103
  definition: {
@@ -66,6 +109,7 @@ export const BUILTIN_TOOLS = [
66
109
  pathPolicy: [{ kind: "arg", arg: "file_path", operation: "write" }],
67
110
  },
68
111
  execute: writeTool,
112
+ exposure: expose(HARNESS_TAGS),
69
113
  },
70
114
  {
71
115
  definition: {
@@ -76,6 +120,7 @@ export const BUILTIN_TOOLS = [
76
120
  isConcurrencySafe: false, // serializes writes to the single catalog file
77
121
  },
78
122
  execute: editModelCatalogTool,
123
+ exposure: expose(GENERAL_TAGS),
79
124
  },
80
125
  {
81
126
  definition: {
@@ -96,6 +141,9 @@ export const BUILTIN_TOOLS = [
96
141
  pathPolicy: [{ kind: "arg", arg: "referenceImages", operation: "read" }],
97
142
  },
98
143
  execute: generateImageTool,
144
+ exposure: expose(GENERAL_TAGS, {
145
+ availability: (ctx) => isGenerateImageAvailable(ctx.cwd),
146
+ }),
99
147
  },
100
148
  {
101
149
  definition: {
@@ -114,6 +162,9 @@ export const BUILTIN_TOOLS = [
114
162
  ],
115
163
  },
116
164
  execute: generateVideoTool,
165
+ exposure: expose(GENERAL_TAGS, {
166
+ availability: (ctx) => isGenerateVideoAvailable(ctx.cwd),
167
+ }),
117
168
  },
118
169
  {
119
170
  definition: {
@@ -125,6 +176,7 @@ export const BUILTIN_TOOLS = [
125
176
  pathPolicy: [{ kind: "arg", arg: "path", operation: "read" }],
126
177
  },
127
178
  execute: viewImageTool,
179
+ exposure: expose(GENERAL_TAGS),
128
180
  },
129
181
  {
130
182
  definition: {
@@ -136,17 +188,7 @@ export const BUILTIN_TOOLS = [
136
188
  pathPolicy: [{ kind: "arg", arg: "file_path", operation: "write" }],
137
189
  },
138
190
  execute: editTool,
139
- },
140
- {
141
- definition: {
142
- ...applyPatchToolDef,
143
- source: "builtin",
144
- permissionDefault: "ask",
145
- isReadOnly: false,
146
- isConcurrencySafe: false,
147
- pathPolicy: [{ kind: "apply_patch", arg: "patch", operation: "write" }],
148
- },
149
- execute: applyPatchTool,
191
+ exposure: expose(HARNESS_TAGS),
150
192
  },
151
193
  {
152
194
  definition: {
@@ -155,9 +197,13 @@ export const BUILTIN_TOOLS = [
155
197
  permissionDefault: "allow",
156
198
  isReadOnly: true,
157
199
  isConcurrencySafe: true,
158
- pathPolicy: [{ kind: "arg", arg: "path", operation: "read", defaultToCwd: true }],
200
+ pathPolicy: [
201
+ { kind: "arg", arg: "path", operation: "read", defaultToCwd: true },
202
+ { kind: "arg", arg: "pattern", operation: "read" },
203
+ ],
159
204
  },
160
205
  execute: globTool,
206
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(globToolDef.name) }),
161
207
  },
162
208
  {
163
209
  definition: {
@@ -169,6 +215,7 @@ export const BUILTIN_TOOLS = [
169
215
  pathPolicy: [{ kind: "arg", arg: "path", operation: "read", defaultToCwd: true }],
170
216
  },
171
217
  execute: grepTool,
218
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(grepToolDef.name) }),
172
219
  },
173
220
  {
174
221
  definition: {
@@ -180,6 +227,7 @@ export const BUILTIN_TOOLS = [
180
227
  timeoutMs: 3_600_000, // 1h — supports long-running shell loops (e.g. `until` polling)
181
228
  },
182
229
  execute: bashTool,
230
+ exposure: expose(HARNESS_TAGS, { requires: ["BashOutput", "KillShell", "ListShells"] }),
183
231
  },
184
232
  // ─── Background shells (Bash run_in_background companions) ──────
185
233
  {
@@ -191,6 +239,7 @@ export const BUILTIN_TOOLS = [
191
239
  isConcurrencySafe: true,
192
240
  },
193
241
  execute: bashOutputTool,
242
+ exposure: expose(HARNESS_TAGS),
194
243
  },
195
244
  {
196
245
  definition: {
@@ -201,6 +250,7 @@ export const BUILTIN_TOOLS = [
201
250
  isConcurrencySafe: false,
202
251
  },
203
252
  execute: killShellTool,
253
+ exposure: expose(HARNESS_TAGS),
204
254
  },
205
255
  {
206
256
  definition: {
@@ -211,6 +261,7 @@ export const BUILTIN_TOOLS = [
211
261
  isConcurrencySafe: true,
212
262
  },
213
263
  execute: listShellsTool,
264
+ exposure: expose(HARNESS_TAGS),
214
265
  },
215
266
  {
216
267
  definition: {
@@ -221,6 +272,10 @@ export const BUILTIN_TOOLS = [
221
272
  isConcurrencySafe: true,
222
273
  },
223
274
  execute: webSearchTool,
275
+ exposure: expose(GENERAL_TAGS, {
276
+ defaultPermissionRules: allow(webSearchToolDef.name),
277
+ availability: (ctx) => isWebSearchAvailable(ctx.cwd),
278
+ }),
224
279
  },
225
280
  {
226
281
  definition: {
@@ -231,6 +286,7 @@ export const BUILTIN_TOOLS = [
231
286
  isConcurrencySafe: true,
232
287
  },
233
288
  execute: webFetchTool,
289
+ exposure: expose(GENERAL_TAGS, { defaultPermissionRules: allow(webFetchToolDef.name) }),
234
290
  },
235
291
  {
236
292
  definition: {
@@ -242,6 +298,7 @@ export const BUILTIN_TOOLS = [
242
298
  timeoutMs: 0, // 纯等待用户操作 — 不设超时,由用户 Esc/取消
243
299
  },
244
300
  execute: askUserTool,
301
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(askUserToolDef.name) }),
245
302
  },
246
303
  {
247
304
  definition: {
@@ -253,6 +310,7 @@ export const BUILTIN_TOOLS = [
253
310
  timeoutMs: 1_800_000, // 30min — sub-agent runs may execute many tool calls
254
311
  },
255
312
  execute: agentTool,
313
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(agentToolDef.name) }),
256
314
  },
257
315
  {
258
316
  definition: {
@@ -263,6 +321,7 @@ export const BUILTIN_TOOLS = [
263
321
  isConcurrencySafe: true,
264
322
  },
265
323
  execute: agentStatusTool,
324
+ exposure: expose(EXPLICIT_ONLY),
266
325
  },
267
326
  {
268
327
  definition: {
@@ -273,6 +332,7 @@ export const BUILTIN_TOOLS = [
273
332
  isConcurrencySafe: false,
274
333
  },
275
334
  execute: agentCancelTool,
335
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(agentCancelToolDef.name) }),
276
336
  },
277
337
  {
278
338
  definition: {
@@ -284,6 +344,7 @@ export const BUILTIN_TOOLS = [
284
344
  timeoutMs: 1_800_000, // 30min — a continuation may execute many tool calls, like Agent
285
345
  },
286
346
  execute: agentSendInputTool,
347
+ exposure: expose(EXPLICIT_ONLY),
287
348
  },
288
349
  {
289
350
  definition: {
@@ -294,6 +355,9 @@ export const BUILTIN_TOOLS = [
294
355
  isConcurrencySafe: false,
295
356
  },
296
357
  execute: enterPlanModeTool,
358
+ exposure: expose(GENERAL_TAGS, {
359
+ defaultPermissionRules: allow(enterPlanModeToolDef.name),
360
+ }),
297
361
  },
298
362
  {
299
363
  definition: {
@@ -304,6 +368,9 @@ export const BUILTIN_TOOLS = [
304
368
  isConcurrencySafe: false,
305
369
  },
306
370
  execute: exitPlanModeTool,
371
+ exposure: expose(GENERAL_TAGS, {
372
+ defaultPermissionRules: allow(exitPlanModeToolDef.name),
373
+ }),
307
374
  },
308
375
  {
309
376
  definition: {
@@ -314,6 +381,7 @@ export const BUILTIN_TOOLS = [
314
381
  isConcurrencySafe: true,
315
382
  },
316
383
  execute: toolSearchTool,
384
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(toolSearchToolDef.name) }),
317
385
  },
318
386
  {
319
387
  definition: {
@@ -324,38 +392,9 @@ export const BUILTIN_TOOLS = [
324
392
  isConcurrencySafe: false,
325
393
  },
326
394
  execute: todoWriteTool,
395
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(todoWriteToolDef.name) }),
327
396
  },
328
397
  // ─── Phase 4: Multi-Agent + Worktree ───────────────────────────
329
- {
330
- definition: {
331
- ...enterWorktreeToolDef,
332
- source: "builtin",
333
- permissionDefault: "ask",
334
- isReadOnly: false,
335
- isConcurrencySafe: false,
336
- },
337
- execute: enterWorktreeTool,
338
- },
339
- {
340
- definition: {
341
- ...exitWorktreeToolDef,
342
- source: "builtin",
343
- permissionDefault: "ask",
344
- isReadOnly: false,
345
- isConcurrencySafe: false,
346
- },
347
- execute: exitWorktreeTool,
348
- },
349
- {
350
- definition: {
351
- ...switchSessionWorkspaceToolDef,
352
- source: "builtin",
353
- permissionDefault: "ask",
354
- isReadOnly: false,
355
- isConcurrencySafe: false,
356
- },
357
- execute: switchSessionWorkspaceTool,
358
- },
359
398
  // ─── Phase 5: Utility Tools ────────────────────────────────────
360
399
  {
361
400
  definition: {
@@ -366,6 +405,7 @@ export const BUILTIN_TOOLS = [
366
405
  isConcurrencySafe: true,
367
406
  },
368
407
  execute: sleepTool,
408
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(sleepToolDef.name) }),
369
409
  },
370
410
  {
371
411
  definition: {
@@ -376,35 +416,7 @@ export const BUILTIN_TOOLS = [
376
416
  isConcurrencySafe: false,
377
417
  },
378
418
  execute: configTool,
379
- },
380
- {
381
- definition: {
382
- ...notebookEditToolDef,
383
- source: "builtin",
384
- permissionDefault: "ask",
385
- isReadOnly: false,
386
- isConcurrencySafe: false,
387
- pathPolicy: [
388
- {
389
- kind: "arg",
390
- arg: "file_path",
391
- operation: { fromArg: "action", readValues: ["read"], default: "write" },
392
- },
393
- ],
394
- },
395
- execute: notebookEditTool,
396
- },
397
- // ─── Phase 6: LSP ─────────────────────────────────────────────
398
- {
399
- definition: {
400
- ...lspToolDef,
401
- source: "builtin",
402
- permissionDefault: "allow",
403
- isReadOnly: true,
404
- isConcurrencySafe: true,
405
- pathPolicy: [{ kind: "arg", arg: "file_path", operation: "read" }],
406
- },
407
- execute: lspTool,
419
+ exposure: expose(HARNESS_TAGS),
408
420
  },
409
421
  // ─── Cron Tools ────────────────────────────────────────────────
410
422
  {
@@ -416,6 +428,7 @@ export const BUILTIN_TOOLS = [
416
428
  isConcurrencySafe: false,
417
429
  },
418
430
  execute: cronCreateTool,
431
+ exposure: expose(GENERAL_TAGS),
419
432
  },
420
433
  {
421
434
  definition: {
@@ -426,6 +439,7 @@ export const BUILTIN_TOOLS = [
426
439
  isConcurrencySafe: false,
427
440
  },
428
441
  execute: cronDeleteTool,
442
+ exposure: expose(GENERAL_TAGS),
429
443
  },
430
444
  {
431
445
  definition: {
@@ -436,57 +450,7 @@ export const BUILTIN_TOOLS = [
436
450
  isConcurrencySafe: true,
437
451
  },
438
452
  execute: cronListTool,
439
- },
440
- // ─── Drive external coding-agent CLI (claude / codex) ──────────
441
- {
442
- definition: {
443
- ...driveAgentToolDef,
444
- source: "builtin",
445
- permissionDefault: "ask",
446
- isReadOnly: false,
447
- isConcurrencySafe: false,
448
- timeoutMs: DRIVE_AGENT_TOOL_TIMEOUT_MS,
449
- pathPolicy: [{ kind: "arg", arg: "attachmentPaths", operation: "read" }],
450
- },
451
- execute: driveAgentTool,
452
- },
453
- {
454
- definition: {
455
- ...driveAgentJobsToolDef,
456
- source: "builtin",
457
- permissionDefault: "allow",
458
- isReadOnly: false,
459
- isConcurrencySafe: false,
460
- },
461
- execute: driveAgentJobsTool,
462
- },
463
- // Back-compat alias: DriveClaudeCode = DriveAgent pinned to cli:claude. Kept
464
- // registered so old prompts/memories that name DriveClaudeCode still resolve.
465
- {
466
- definition: {
467
- ...driveClaudeCodeToolDef,
468
- source: "builtin",
469
- permissionDefault: "ask",
470
- isReadOnly: false,
471
- isConcurrencySafe: false,
472
- timeoutMs: DRIVE_AGENT_TOOL_TIMEOUT_MS,
473
- pathPolicy: [{ kind: "arg", arg: "attachmentPaths", operation: "read" }],
474
- },
475
- execute: driveClaudeCodeTool,
476
- },
477
- // ─── Check remaining CC/Codex subscription quota ──────────────
478
- {
479
- definition: {
480
- ...checkQuotaToolDef,
481
- source: "builtin",
482
- // Read-only intent (reports quota, mutates nothing). Note: the "claude"
483
- // path sends a 1-token probe (Anthropic exposes quota only via response
484
- // headers) — that tiny cost is documented in the tool description.
485
- permissionDefault: "allow",
486
- isReadOnly: true,
487
- isConcurrencySafe: true,
488
- },
489
- execute: checkQuotaTool,
453
+ exposure: expose(GENERAL_TAGS, { defaultPermissionRules: allow(cronListToolDef.name) }),
490
454
  },
491
455
  // ─── Phase 7: Missing tools from restored-src ─────────────────
492
456
  {
@@ -498,6 +462,7 @@ export const BUILTIN_TOOLS = [
498
462
  isConcurrencySafe: true,
499
463
  },
500
464
  execute: skillTool,
465
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(skillToolDef.name) }),
501
466
  },
502
467
  {
503
468
  definition: {
@@ -508,6 +473,7 @@ export const BUILTIN_TOOLS = [
508
473
  isConcurrencySafe: true,
509
474
  },
510
475
  execute: mcpToolExecute,
476
+ exposure: expose(HARNESS_TAGS),
511
477
  },
512
478
  {
513
479
  definition: {
@@ -518,6 +484,9 @@ export const BUILTIN_TOOLS = [
518
484
  isConcurrencySafe: true,
519
485
  },
520
486
  execute: listMcpResourcesTool,
487
+ exposure: expose(HARNESS_TAGS, {
488
+ defaultPermissionRules: allow(listMcpResourcesToolDef.name),
489
+ }),
521
490
  },
522
491
  {
523
492
  definition: {
@@ -533,48 +502,56 @@ export const BUILTIN_TOOLS = [
533
502
  isConcurrencySafe: true,
534
503
  },
535
504
  execute: readMcpResourceTool,
505
+ exposure: expose(HARNESS_TAGS),
536
506
  },
537
507
  {
538
508
  definition: {
539
- ...replToolDef,
509
+ ...listSourcesToolDef,
540
510
  source: "builtin",
541
- permissionDefault: "ask",
542
- isReadOnly: false,
543
- isConcurrencySafe: false,
511
+ permissionDefault: "allow",
512
+ isReadOnly: true,
513
+ isConcurrencySafe: true,
544
514
  },
545
- execute: replTool,
515
+ execute: listSourcesTool,
516
+ exposure: expose(HARNESS_TAGS, {
517
+ defaultPermissionRules: allow(listSourcesToolDef.name),
518
+ }),
546
519
  },
547
520
  {
548
521
  definition: {
549
- ...briefToolDef,
522
+ ...readSourceToolDef,
550
523
  source: "builtin",
551
- permissionDefault: "allow",
524
+ // Source content is untrusted and may contain sensitive workspace data.
525
+ // Match ReadMcpResource: every read requires explicit approval, while
526
+ // the executor performs a second source/scope/resource authorization.
527
+ permissionDefault: "ask",
552
528
  isReadOnly: true,
553
529
  isConcurrencySafe: true,
554
530
  },
555
- execute: briefTool,
531
+ execute: readSourceTool,
532
+ exposure: expose(HARNESS_TAGS),
556
533
  },
557
534
  {
558
535
  definition: {
559
- ...powershellToolDef,
536
+ ...replToolDef,
560
537
  source: "builtin",
561
538
  permissionDefault: "ask",
562
539
  isReadOnly: false,
563
540
  isConcurrencySafe: false,
564
541
  },
565
- execute: powershellTool,
542
+ execute: replTool,
543
+ exposure: expose(GENERAL_TAGS),
566
544
  },
567
- // ─── Arena: Multi-Model Collaborative Analysis ────────────────
568
545
  {
569
546
  definition: {
570
- ...arenaToolDef,
547
+ ...powershellToolDef,
571
548
  source: "builtin",
572
549
  permissionDefault: "ask",
573
- isReadOnly: true,
550
+ isReadOnly: false,
574
551
  isConcurrencySafe: false,
575
- timeoutMs: 1_800_000, // 30min — multi-model debate rounds take time
576
552
  },
577
- execute: arenaTool,
553
+ execute: powershellTool,
554
+ exposure: expose(GENERAL_TAGS),
578
555
  },
579
556
  // ─── Memory tools (persistent cross-session memory) ────────────
580
557
  // Save/Delete default to "ask" so user-scope modifications go through a
@@ -590,6 +567,7 @@ export const BUILTIN_TOOLS = [
590
567
  isConcurrencySafe: true,
591
568
  },
592
569
  execute: memoryListTool,
570
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(memoryListToolDef.name) }),
593
571
  },
594
572
  {
595
573
  definition: {
@@ -600,6 +578,7 @@ export const BUILTIN_TOOLS = [
600
578
  isConcurrencySafe: true,
601
579
  },
602
580
  execute: memoryReadTool,
581
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(memoryReadToolDef.name) }),
603
582
  },
604
583
  {
605
584
  definition: {
@@ -610,6 +589,7 @@ export const BUILTIN_TOOLS = [
610
589
  isConcurrencySafe: false,
611
590
  },
612
591
  execute: memorySaveTool,
592
+ exposure: expose(HARNESS_TAGS),
613
593
  },
614
594
  {
615
595
  definition: {
@@ -620,6 +600,7 @@ export const BUILTIN_TOOLS = [
620
600
  isConcurrencySafe: false,
621
601
  },
622
602
  execute: memoryDeleteTool,
603
+ exposure: expose(HARNESS_TAGS),
623
604
  },
624
605
  // ─── Goal mode: model-declared completion ──────────────────────
625
606
  // Lets the model explicitly declare the active goal complete. The
@@ -634,6 +615,7 @@ export const BUILTIN_TOOLS = [
634
615
  isConcurrencySafe: true,
635
616
  },
636
617
  execute: completeGoalTool,
618
+ exposure: expose(HARNESS_TAGS, { availability: (ctx) => ctx.hasGoal === true }),
637
619
  },
638
620
  // ─── Goal mode: user-initiated cancellation ────────────────────
639
621
  // Distinct from complete_goal — the user explicitly asked to abandon the
@@ -649,6 +631,7 @@ export const BUILTIN_TOOLS = [
649
631
  isConcurrencySafe: true,
650
632
  },
651
633
  execute: cancelGoalTool,
634
+ exposure: expose(HARNESS_TAGS, { availability: (ctx) => ctx.hasGoal === true }),
652
635
  },
653
636
  // ─── Plugin marketplace: model-driven source registration ──────
654
637
  {
@@ -661,6 +644,7 @@ export const BUILTIN_TOOLS = [
661
644
  timeoutMs: 120_000, // git clone over network
662
645
  },
663
646
  execute: addMarketplaceTool,
647
+ exposure: expose(GENERAL_TAGS),
664
648
  },
665
649
  // Browser automation — 3 semantic tools driving the in-app webview via the
666
650
  // BrowserBridge (CDP). All serial on one webview (isConcurrencySafe:false).
@@ -680,6 +664,10 @@ export const BUILTIN_TOOLS = [
680
664
  timeoutMs: 30_000, // wait/observe can sit through a load; RPC headroom
681
665
  },
682
666
  execute: browserObserveTool,
667
+ exposure: expose(GENERAL_TAGS, {
668
+ defaultPermissionRules: allow(browserObserveToolDef.name),
669
+ promptSections: ["browser"],
670
+ }),
683
671
  },
684
672
  {
685
673
  definition: {
@@ -691,6 +679,17 @@ export const BUILTIN_TOOLS = [
691
679
  timeoutMs: 30_000, // the wait action internally bounds; give RPC headroom
692
680
  },
693
681
  execute: browserActTool,
682
+ exposure: expose(GENERAL_TAGS, {
683
+ defaultPermissionRules: [
684
+ {
685
+ tool: browserActToolDef.name,
686
+ argsPattern: { action: "^(click|type|select)$" },
687
+ decision: "ask",
688
+ reason: "browser_act click/type/select mutate the page",
689
+ },
690
+ ],
691
+ promptSections: ["browser"],
692
+ }),
694
693
  },
695
694
  {
696
695
  definition: {
@@ -701,6 +700,58 @@ export const BUILTIN_TOOLS = [
701
700
  isConcurrencySafe: false,
702
701
  },
703
702
  execute: browserNavigateTool,
703
+ exposure: expose(GENERAL_TAGS, {
704
+ defaultPermissionRules: allow(browserNavigateToolDef.name),
705
+ promptSections: ["browser"],
706
+ }),
707
+ },
708
+ // Generic host-panel control. The bridge is injected only by interactive
709
+ // Desktop sessions; plugin tools can call the same ctx.panels service.
710
+ {
711
+ definition: {
712
+ ...panelToolDef,
713
+ source: "builtin",
714
+ permissionDefault: "allow",
715
+ isReadOnly: false,
716
+ isConcurrencySafe: false,
717
+ },
718
+ execute: panelTool,
719
+ exposure: expose(GENERAL_TAGS, {
720
+ defaultPermissionRules: [
721
+ {
722
+ tool: panelToolDef.name,
723
+ argsPattern: { action: "^(list|open|tools)$" },
724
+ decision: "allow",
725
+ },
726
+ {
727
+ tool: panelToolDef.name,
728
+ argsPattern: { action: "^invoke$" },
729
+ decision: "ask",
730
+ reason: "Panel App Agent tools can read or change project design data",
731
+ },
732
+ ],
733
+ availability: (ctx) => ctx.host === "desktop" && ctx.isSubAgent !== true,
734
+ }),
735
+ },
736
+ // Cross-Session coordination is one ordinary message send. The host supplies
737
+ // a closed same-project target set and queues the message as the target's
738
+ // next user turn.
739
+ {
740
+ definition: {
741
+ ...sendMessageToSessionToolDef,
742
+ source: "builtin",
743
+ permissionDefault: "allow",
744
+ isReadOnly: false,
745
+ isConcurrencySafe: false,
746
+ },
747
+ execute: sendMessageToSessionTool,
748
+ exposure: expose(HARNESS_TAGS, {
749
+ defaultPermissionRules: allow(sendMessageToSessionToolDef.name),
750
+ availability: (ctx) => ctx.isSubAgent !== true &&
751
+ ctx.behaviorProfile !== "quickChatRestricted" &&
752
+ (ctx.sessionMessageTargets?.length ?? 0) > 0,
753
+ rewriteDefinition: rewriteSendMessageToSessionToolDefinition,
754
+ }),
704
755
  },
705
756
  // ─── Credentials: AI 取用已存凭证(token/link/cookie) ──────────
706
757
  // permissionDefault:"allow" 是展示/声明 hint;取用审批由工具内部的
@@ -715,6 +766,26 @@ export const BUILTIN_TOOLS = [
715
766
  isConcurrencySafe: true,
716
767
  },
717
768
  execute: useCredentialBuiltinTool,
769
+ exposure: expose(GENERAL_TAGS, {
770
+ availability: (ctx) => isUseCredentialAvailable(ctx.cwd, ctx.settingsScope),
771
+ }),
772
+ },
773
+ // Local Link actions resolve their provider-owned credential on every call.
774
+ // Read actions are allowed after the user connects a provider; write actions
775
+ // use a closed, in-tool approval prompt so read and write share one catalog.
776
+ {
777
+ definition: {
778
+ ...linkActionToolDef,
779
+ source: "builtin",
780
+ permissionDefault: "allow",
781
+ isReadOnly: false,
782
+ isConcurrencySafe: true,
783
+ },
784
+ execute: linkActionTool,
785
+ exposure: expose(GENERAL_TAGS, {
786
+ defaultPermissionRules: allow(linkActionToolDef.name),
787
+ availability: (ctx) => isLinkActionAvailable(ctx.cwd, ctx.settingsScope),
788
+ }),
718
789
  },
719
790
  // InjectCredential:把 cookie 凭证注入内置浏览器(恢复登录态)。审批由工具内部
720
791
  // CredentialUseGate 负责(逐条 autoInjectByAI),permissionDefault:"allow" 仅作展示 hint。
@@ -728,29 +799,71 @@ export const BUILTIN_TOOLS = [
728
799
  isConcurrencySafe: false,
729
800
  },
730
801
  execute: injectCredentialTool,
802
+ exposure: expose(GENERAL_TAGS, {
803
+ availability: (ctx) => isInjectCredentialAvailable(ctx.cwd, ctx.settingsScope),
804
+ }),
731
805
  },
732
806
  ];
733
- /**
734
- * Per-tool availability predicates. A tool listed here is filtered OUT of the
735
- * exposed toolDefs when its predicate returns false for the active cwd (see
736
- * engine.ts toolDefs assembly). Tools NOT listed here are always visible.
737
- * Keyed by the tool's `name` (must match the toolDef name).
738
- */
739
- export const BUILTIN_TOOL_GUARDS = new Map([
740
- [webSearchToolDef.name, (ctx) => isWebSearchAvailable(ctx.cwd)],
741
- [generateImageToolDef.name, (ctx) => isGenerateImageAvailable(ctx.cwd)],
742
- [generateVideoToolDef.name, (ctx) => isGenerateVideoAvailable(ctx.cwd)],
743
- // UseCredential is hidden until at least one credential exists — keeps it out
744
- // of the tool list (and the context) for the common no-credentials case,
745
- // matching the spec's "quiet when empty" intent (true ToolSearch-deferral for
746
- // builtins isn't wired in the engine).
747
- [useCredentialToolDef.name, (ctx) => isUseCredentialAvailable(ctx.cwd, ctx.settingsScope)],
748
- // InjectCredential hidden until ≥1 cookie credential exists (browser injection
749
- // is cookie-only). Also degrades at call time if no browser bridge is wired.
750
- [injectCredentialToolDef.name, (ctx) => isInjectCredentialAvailable(ctx.cwd, ctx.settingsScope)],
751
- [completeGoalToolDef.name, (ctx) => ctx.hasGoal === true],
752
- [cancelGoalToolDef.name, (ctx) => ctx.hasGoal === true],
753
- ]);
807
+ export const BUILTIN_TOOLS = BUILTIN_CONTRIBUTIONS.map(({ definition, execute, exposure }) => ({
808
+ definition,
809
+ exposure,
810
+ execute: async (args, ctx) => toToolExecutionResult(await execute(args, ctx)),
811
+ }));
812
+ const KNOWN_TOOL_PROMPT_SECTIONS = new Set(["browser"]);
813
+ export function validateBuiltinToolExposures(tools = BUILTIN_TOOLS) {
814
+ const byName = new Map(tools.map((tool) => [tool.definition.name, tool]));
815
+ if (byName.size !== tools.length)
816
+ throw new Error("Builtin tool catalog contains duplicate names");
817
+ for (const tool of tools) {
818
+ const { name } = tool.definition;
819
+ if (!Array.isArray(tool.exposure.presetTags)) {
820
+ throw new Error(`Builtin tool '${name}' is missing presetTags`);
821
+ }
822
+ for (const section of tool.exposure.promptSections ?? []) {
823
+ if (!KNOWN_TOOL_PROMPT_SECTIONS.has(section)) {
824
+ throw new Error(`Builtin tool '${name}' references unknown prompt section '${section}'`);
825
+ }
826
+ }
827
+ for (const requiredName of tool.exposure.requires ?? []) {
828
+ const required = byName.get(requiredName);
829
+ if (!required)
830
+ throw new Error(`Builtin tool '${name}' requires unknown tool '${requiredName}'`);
831
+ for (const tag of tool.exposure.presetTags) {
832
+ if (!required.exposure.presetTags.includes(tag)) {
833
+ throw new Error(`Builtin tool '${name}' requires '${requiredName}' in preset '${tag}'`);
834
+ }
835
+ }
836
+ }
837
+ }
838
+ }
839
+ validateBuiltinToolExposures();
840
+ /** Derive a preset's tool list and safe defaults from any composed tool catalog. */
841
+ export function derivePresetExposure(tag, tools = BUILTIN_TOOLS) {
842
+ const selected = tools.filter((tool) => tool.exposure.presetTags.includes(tag));
843
+ return {
844
+ builtinTools: selected.map((tool) => tool.definition.name),
845
+ defaultPermissionRules: selected.flatMap((tool) => [
846
+ ...(tool.exposure.defaultPermissionRules ?? []),
847
+ ]),
848
+ };
849
+ }
850
+ /** Backwards-compatible name for callers deriving only from the core catalog. */
851
+ export function deriveBuiltinPresetExposure(tag) {
852
+ return derivePresetExposure(tag, BUILTIN_TOOLS);
853
+ }
854
+ export function deriveToolGatedPromptSections(tools = BUILTIN_TOOLS) {
855
+ const result = {};
856
+ for (const tool of tools) {
857
+ for (const section of tool.exposure.promptSections ?? []) {
858
+ (result[section] ??= []).push(tool.definition.name);
859
+ }
860
+ }
861
+ return result;
862
+ }
863
+ /** Compatibility view consumed by engine + executor; metadata is authoritative. */
864
+ export const BUILTIN_TOOL_GUARDS = new Map(BUILTIN_TOOLS.flatMap((tool) => tool.exposure.availability
865
+ ? [[tool.definition.name, tool.exposure.availability]]
866
+ : []));
754
867
  /** UseCredential is available when the cwd's credential metadata has ≥1 entry. */
755
868
  export function isUseCredentialAvailable(cwd, settingsScope) {
756
869
  try {