@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
@@ -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,31 +18,28 @@ 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";
42
+ import { linkActionToolDef, linkActionTool, isLinkActionAvailable, } from "../../links/link-action-tool.js";
47
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;
48
44
  function failureMessage(result) {
49
45
  if (typeof result.error === "string" && result.error)
@@ -80,7 +76,17 @@ export function toToolExecutionResult(value) {
80
76
  }
81
77
  return { ok: true, ...result };
82
78
  }
83
- const BUILTIN_IMPLEMENTATIONS = [
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 = [
84
90
  {
85
91
  definition: {
86
92
  ...readToolDef,
@@ -91,6 +97,7 @@ const BUILTIN_IMPLEMENTATIONS = [
91
97
  pathPolicy: [{ kind: "arg", arg: "file_path", operation: "read" }],
92
98
  },
93
99
  execute: readTool,
100
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(readToolDef.name) }),
94
101
  },
95
102
  {
96
103
  definition: {
@@ -102,6 +109,7 @@ const BUILTIN_IMPLEMENTATIONS = [
102
109
  pathPolicy: [{ kind: "arg", arg: "file_path", operation: "write" }],
103
110
  },
104
111
  execute: writeTool,
112
+ exposure: expose(HARNESS_TAGS),
105
113
  },
106
114
  {
107
115
  definition: {
@@ -112,6 +120,7 @@ const BUILTIN_IMPLEMENTATIONS = [
112
120
  isConcurrencySafe: false, // serializes writes to the single catalog file
113
121
  },
114
122
  execute: editModelCatalogTool,
123
+ exposure: expose(GENERAL_TAGS),
115
124
  },
116
125
  {
117
126
  definition: {
@@ -132,6 +141,9 @@ const BUILTIN_IMPLEMENTATIONS = [
132
141
  pathPolicy: [{ kind: "arg", arg: "referenceImages", operation: "read" }],
133
142
  },
134
143
  execute: generateImageTool,
144
+ exposure: expose(GENERAL_TAGS, {
145
+ availability: (ctx) => isGenerateImageAvailable(ctx.cwd),
146
+ }),
135
147
  },
136
148
  {
137
149
  definition: {
@@ -150,6 +162,9 @@ const BUILTIN_IMPLEMENTATIONS = [
150
162
  ],
151
163
  },
152
164
  execute: generateVideoTool,
165
+ exposure: expose(GENERAL_TAGS, {
166
+ availability: (ctx) => isGenerateVideoAvailable(ctx.cwd),
167
+ }),
153
168
  },
154
169
  {
155
170
  definition: {
@@ -161,6 +176,7 @@ const BUILTIN_IMPLEMENTATIONS = [
161
176
  pathPolicy: [{ kind: "arg", arg: "path", operation: "read" }],
162
177
  },
163
178
  execute: viewImageTool,
179
+ exposure: expose(GENERAL_TAGS),
164
180
  },
165
181
  {
166
182
  definition: {
@@ -172,17 +188,7 @@ const BUILTIN_IMPLEMENTATIONS = [
172
188
  pathPolicy: [{ kind: "arg", arg: "file_path", operation: "write" }],
173
189
  },
174
190
  execute: editTool,
175
- },
176
- {
177
- definition: {
178
- ...applyPatchToolDef,
179
- source: "builtin",
180
- permissionDefault: "ask",
181
- isReadOnly: false,
182
- isConcurrencySafe: false,
183
- pathPolicy: [{ kind: "apply_patch", arg: "patch", operation: "write" }],
184
- },
185
- execute: applyPatchTool,
191
+ exposure: expose(HARNESS_TAGS),
186
192
  },
187
193
  {
188
194
  definition: {
@@ -197,6 +203,7 @@ const BUILTIN_IMPLEMENTATIONS = [
197
203
  ],
198
204
  },
199
205
  execute: globTool,
206
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(globToolDef.name) }),
200
207
  },
201
208
  {
202
209
  definition: {
@@ -208,6 +215,7 @@ const BUILTIN_IMPLEMENTATIONS = [
208
215
  pathPolicy: [{ kind: "arg", arg: "path", operation: "read", defaultToCwd: true }],
209
216
  },
210
217
  execute: grepTool,
218
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(grepToolDef.name) }),
211
219
  },
212
220
  {
213
221
  definition: {
@@ -219,6 +227,7 @@ const BUILTIN_IMPLEMENTATIONS = [
219
227
  timeoutMs: 3_600_000, // 1h — supports long-running shell loops (e.g. `until` polling)
220
228
  },
221
229
  execute: bashTool,
230
+ exposure: expose(HARNESS_TAGS, { requires: ["BashOutput", "KillShell", "ListShells"] }),
222
231
  },
223
232
  // ─── Background shells (Bash run_in_background companions) ──────
224
233
  {
@@ -230,6 +239,7 @@ const BUILTIN_IMPLEMENTATIONS = [
230
239
  isConcurrencySafe: true,
231
240
  },
232
241
  execute: bashOutputTool,
242
+ exposure: expose(HARNESS_TAGS),
233
243
  },
234
244
  {
235
245
  definition: {
@@ -240,6 +250,7 @@ const BUILTIN_IMPLEMENTATIONS = [
240
250
  isConcurrencySafe: false,
241
251
  },
242
252
  execute: killShellTool,
253
+ exposure: expose(HARNESS_TAGS),
243
254
  },
244
255
  {
245
256
  definition: {
@@ -250,6 +261,7 @@ const BUILTIN_IMPLEMENTATIONS = [
250
261
  isConcurrencySafe: true,
251
262
  },
252
263
  execute: listShellsTool,
264
+ exposure: expose(HARNESS_TAGS),
253
265
  },
254
266
  {
255
267
  definition: {
@@ -260,6 +272,10 @@ const BUILTIN_IMPLEMENTATIONS = [
260
272
  isConcurrencySafe: true,
261
273
  },
262
274
  execute: webSearchTool,
275
+ exposure: expose(GENERAL_TAGS, {
276
+ defaultPermissionRules: allow(webSearchToolDef.name),
277
+ availability: (ctx) => isWebSearchAvailable(ctx.cwd),
278
+ }),
263
279
  },
264
280
  {
265
281
  definition: {
@@ -270,6 +286,7 @@ const BUILTIN_IMPLEMENTATIONS = [
270
286
  isConcurrencySafe: true,
271
287
  },
272
288
  execute: webFetchTool,
289
+ exposure: expose(GENERAL_TAGS, { defaultPermissionRules: allow(webFetchToolDef.name) }),
273
290
  },
274
291
  {
275
292
  definition: {
@@ -281,6 +298,7 @@ const BUILTIN_IMPLEMENTATIONS = [
281
298
  timeoutMs: 0, // 纯等待用户操作 — 不设超时,由用户 Esc/取消
282
299
  },
283
300
  execute: askUserTool,
301
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(askUserToolDef.name) }),
284
302
  },
285
303
  {
286
304
  definition: {
@@ -292,6 +310,7 @@ const BUILTIN_IMPLEMENTATIONS = [
292
310
  timeoutMs: 1_800_000, // 30min — sub-agent runs may execute many tool calls
293
311
  },
294
312
  execute: agentTool,
313
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(agentToolDef.name) }),
295
314
  },
296
315
  {
297
316
  definition: {
@@ -302,6 +321,7 @@ const BUILTIN_IMPLEMENTATIONS = [
302
321
  isConcurrencySafe: true,
303
322
  },
304
323
  execute: agentStatusTool,
324
+ exposure: expose(EXPLICIT_ONLY),
305
325
  },
306
326
  {
307
327
  definition: {
@@ -312,6 +332,7 @@ const BUILTIN_IMPLEMENTATIONS = [
312
332
  isConcurrencySafe: false,
313
333
  },
314
334
  execute: agentCancelTool,
335
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(agentCancelToolDef.name) }),
315
336
  },
316
337
  {
317
338
  definition: {
@@ -323,6 +344,7 @@ const BUILTIN_IMPLEMENTATIONS = [
323
344
  timeoutMs: 1_800_000, // 30min — a continuation may execute many tool calls, like Agent
324
345
  },
325
346
  execute: agentSendInputTool,
347
+ exposure: expose(EXPLICIT_ONLY),
326
348
  },
327
349
  {
328
350
  definition: {
@@ -333,6 +355,9 @@ const BUILTIN_IMPLEMENTATIONS = [
333
355
  isConcurrencySafe: false,
334
356
  },
335
357
  execute: enterPlanModeTool,
358
+ exposure: expose(GENERAL_TAGS, {
359
+ defaultPermissionRules: allow(enterPlanModeToolDef.name),
360
+ }),
336
361
  },
337
362
  {
338
363
  definition: {
@@ -343,6 +368,9 @@ const BUILTIN_IMPLEMENTATIONS = [
343
368
  isConcurrencySafe: false,
344
369
  },
345
370
  execute: exitPlanModeTool,
371
+ exposure: expose(GENERAL_TAGS, {
372
+ defaultPermissionRules: allow(exitPlanModeToolDef.name),
373
+ }),
346
374
  },
347
375
  {
348
376
  definition: {
@@ -353,6 +381,7 @@ const BUILTIN_IMPLEMENTATIONS = [
353
381
  isConcurrencySafe: true,
354
382
  },
355
383
  execute: toolSearchTool,
384
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(toolSearchToolDef.name) }),
356
385
  },
357
386
  {
358
387
  definition: {
@@ -363,38 +392,9 @@ const BUILTIN_IMPLEMENTATIONS = [
363
392
  isConcurrencySafe: false,
364
393
  },
365
394
  execute: todoWriteTool,
395
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(todoWriteToolDef.name) }),
366
396
  },
367
397
  // ─── Phase 4: Multi-Agent + Worktree ───────────────────────────
368
- {
369
- definition: {
370
- ...enterWorktreeToolDef,
371
- source: "builtin",
372
- permissionDefault: "ask",
373
- isReadOnly: false,
374
- isConcurrencySafe: false,
375
- },
376
- execute: enterWorktreeTool,
377
- },
378
- {
379
- definition: {
380
- ...exitWorktreeToolDef,
381
- source: "builtin",
382
- permissionDefault: "ask",
383
- isReadOnly: false,
384
- isConcurrencySafe: false,
385
- },
386
- execute: exitWorktreeTool,
387
- },
388
- {
389
- definition: {
390
- ...switchSessionWorkspaceToolDef,
391
- source: "builtin",
392
- permissionDefault: "ask",
393
- isReadOnly: false,
394
- isConcurrencySafe: false,
395
- },
396
- execute: switchSessionWorkspaceTool,
397
- },
398
398
  // ─── Phase 5: Utility Tools ────────────────────────────────────
399
399
  {
400
400
  definition: {
@@ -405,6 +405,7 @@ const BUILTIN_IMPLEMENTATIONS = [
405
405
  isConcurrencySafe: true,
406
406
  },
407
407
  execute: sleepTool,
408
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(sleepToolDef.name) }),
408
409
  },
409
410
  {
410
411
  definition: {
@@ -415,35 +416,7 @@ const BUILTIN_IMPLEMENTATIONS = [
415
416
  isConcurrencySafe: false,
416
417
  },
417
418
  execute: configTool,
418
- },
419
- {
420
- definition: {
421
- ...notebookEditToolDef,
422
- source: "builtin",
423
- permissionDefault: "ask",
424
- isReadOnly: false,
425
- isConcurrencySafe: false,
426
- pathPolicy: [
427
- {
428
- kind: "arg",
429
- arg: "file_path",
430
- operation: { fromArg: "action", readValues: ["read"], default: "write" },
431
- },
432
- ],
433
- },
434
- execute: notebookEditTool,
435
- },
436
- // ─── Phase 6: LSP ─────────────────────────────────────────────
437
- {
438
- definition: {
439
- ...lspToolDef,
440
- source: "builtin",
441
- permissionDefault: "allow",
442
- isReadOnly: true,
443
- isConcurrencySafe: true,
444
- pathPolicy: [{ kind: "arg", arg: "file_path", operation: "read" }],
445
- },
446
- execute: lspTool,
419
+ exposure: expose(HARNESS_TAGS),
447
420
  },
448
421
  // ─── Cron Tools ────────────────────────────────────────────────
449
422
  {
@@ -455,6 +428,7 @@ const BUILTIN_IMPLEMENTATIONS = [
455
428
  isConcurrencySafe: false,
456
429
  },
457
430
  execute: cronCreateTool,
431
+ exposure: expose(GENERAL_TAGS),
458
432
  },
459
433
  {
460
434
  definition: {
@@ -465,6 +439,7 @@ const BUILTIN_IMPLEMENTATIONS = [
465
439
  isConcurrencySafe: false,
466
440
  },
467
441
  execute: cronDeleteTool,
442
+ exposure: expose(GENERAL_TAGS),
468
443
  },
469
444
  {
470
445
  definition: {
@@ -475,57 +450,7 @@ const BUILTIN_IMPLEMENTATIONS = [
475
450
  isConcurrencySafe: true,
476
451
  },
477
452
  execute: cronListTool,
478
- },
479
- // ─── Drive external coding-agent CLI (claude / codex) ──────────
480
- {
481
- definition: {
482
- ...driveAgentToolDef,
483
- source: "builtin",
484
- permissionDefault: "ask",
485
- isReadOnly: false,
486
- isConcurrencySafe: false,
487
- timeoutMs: DRIVE_AGENT_TOOL_TIMEOUT_MS,
488
- pathPolicy: [{ kind: "arg", arg: "attachmentPaths", operation: "read" }],
489
- },
490
- execute: driveAgentTool,
491
- },
492
- {
493
- definition: {
494
- ...driveAgentJobsToolDef,
495
- source: "builtin",
496
- permissionDefault: "allow",
497
- isReadOnly: false,
498
- isConcurrencySafe: false,
499
- },
500
- execute: driveAgentJobsTool,
501
- },
502
- // Back-compat alias: DriveClaudeCode = DriveAgent pinned to cli:claude. Kept
503
- // registered so old prompts/memories that name DriveClaudeCode still resolve.
504
- {
505
- definition: {
506
- ...driveClaudeCodeToolDef,
507
- source: "builtin",
508
- permissionDefault: "ask",
509
- isReadOnly: false,
510
- isConcurrencySafe: false,
511
- timeoutMs: DRIVE_AGENT_TOOL_TIMEOUT_MS,
512
- pathPolicy: [{ kind: "arg", arg: "attachmentPaths", operation: "read" }],
513
- },
514
- execute: driveClaudeCodeTool,
515
- },
516
- // ─── Check remaining CC/Codex subscription quota ──────────────
517
- {
518
- definition: {
519
- ...checkQuotaToolDef,
520
- source: "builtin",
521
- // Read-only intent (reports quota, mutates nothing). Note: the "claude"
522
- // path sends a 1-token probe (Anthropic exposes quota only via response
523
- // headers) — that tiny cost is documented in the tool description.
524
- permissionDefault: "allow",
525
- isReadOnly: true,
526
- isConcurrencySafe: true,
527
- },
528
- execute: checkQuotaTool,
453
+ exposure: expose(GENERAL_TAGS, { defaultPermissionRules: allow(cronListToolDef.name) }),
529
454
  },
530
455
  // ─── Phase 7: Missing tools from restored-src ─────────────────
531
456
  {
@@ -537,6 +462,7 @@ const BUILTIN_IMPLEMENTATIONS = [
537
462
  isConcurrencySafe: true,
538
463
  },
539
464
  execute: skillTool,
465
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(skillToolDef.name) }),
540
466
  },
541
467
  {
542
468
  definition: {
@@ -547,6 +473,7 @@ const BUILTIN_IMPLEMENTATIONS = [
547
473
  isConcurrencySafe: true,
548
474
  },
549
475
  execute: mcpToolExecute,
476
+ exposure: expose(HARNESS_TAGS),
550
477
  },
551
478
  {
552
479
  definition: {
@@ -557,6 +484,9 @@ const BUILTIN_IMPLEMENTATIONS = [
557
484
  isConcurrencySafe: true,
558
485
  },
559
486
  execute: listMcpResourcesTool,
487
+ exposure: expose(HARNESS_TAGS, {
488
+ defaultPermissionRules: allow(listMcpResourcesToolDef.name),
489
+ }),
560
490
  },
561
491
  {
562
492
  definition: {
@@ -572,48 +502,56 @@ const BUILTIN_IMPLEMENTATIONS = [
572
502
  isConcurrencySafe: true,
573
503
  },
574
504
  execute: readMcpResourceTool,
505
+ exposure: expose(HARNESS_TAGS),
575
506
  },
576
507
  {
577
508
  definition: {
578
- ...replToolDef,
509
+ ...listSourcesToolDef,
579
510
  source: "builtin",
580
- permissionDefault: "ask",
581
- isReadOnly: false,
582
- isConcurrencySafe: false,
511
+ permissionDefault: "allow",
512
+ isReadOnly: true,
513
+ isConcurrencySafe: true,
583
514
  },
584
- execute: replTool,
515
+ execute: listSourcesTool,
516
+ exposure: expose(HARNESS_TAGS, {
517
+ defaultPermissionRules: allow(listSourcesToolDef.name),
518
+ }),
585
519
  },
586
520
  {
587
521
  definition: {
588
- ...briefToolDef,
522
+ ...readSourceToolDef,
589
523
  source: "builtin",
590
- 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",
591
528
  isReadOnly: true,
592
529
  isConcurrencySafe: true,
593
530
  },
594
- execute: briefTool,
531
+ execute: readSourceTool,
532
+ exposure: expose(HARNESS_TAGS),
595
533
  },
596
534
  {
597
535
  definition: {
598
- ...powershellToolDef,
536
+ ...replToolDef,
599
537
  source: "builtin",
600
538
  permissionDefault: "ask",
601
539
  isReadOnly: false,
602
540
  isConcurrencySafe: false,
603
541
  },
604
- execute: powershellTool,
542
+ execute: replTool,
543
+ exposure: expose(GENERAL_TAGS),
605
544
  },
606
- // ─── Arena: Multi-Model Collaborative Analysis ────────────────
607
545
  {
608
546
  definition: {
609
- ...arenaToolDef,
547
+ ...powershellToolDef,
610
548
  source: "builtin",
611
549
  permissionDefault: "ask",
612
- isReadOnly: true,
550
+ isReadOnly: false,
613
551
  isConcurrencySafe: false,
614
- timeoutMs: 1_800_000, // 30min — multi-model debate rounds take time
615
552
  },
616
- execute: arenaTool,
553
+ execute: powershellTool,
554
+ exposure: expose(GENERAL_TAGS),
617
555
  },
618
556
  // ─── Memory tools (persistent cross-session memory) ────────────
619
557
  // Save/Delete default to "ask" so user-scope modifications go through a
@@ -629,6 +567,7 @@ const BUILTIN_IMPLEMENTATIONS = [
629
567
  isConcurrencySafe: true,
630
568
  },
631
569
  execute: memoryListTool,
570
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(memoryListToolDef.name) }),
632
571
  },
633
572
  {
634
573
  definition: {
@@ -639,6 +578,7 @@ const BUILTIN_IMPLEMENTATIONS = [
639
578
  isConcurrencySafe: true,
640
579
  },
641
580
  execute: memoryReadTool,
581
+ exposure: expose(HARNESS_TAGS, { defaultPermissionRules: allow(memoryReadToolDef.name) }),
642
582
  },
643
583
  {
644
584
  definition: {
@@ -649,6 +589,7 @@ const BUILTIN_IMPLEMENTATIONS = [
649
589
  isConcurrencySafe: false,
650
590
  },
651
591
  execute: memorySaveTool,
592
+ exposure: expose(HARNESS_TAGS),
652
593
  },
653
594
  {
654
595
  definition: {
@@ -659,6 +600,7 @@ const BUILTIN_IMPLEMENTATIONS = [
659
600
  isConcurrencySafe: false,
660
601
  },
661
602
  execute: memoryDeleteTool,
603
+ exposure: expose(HARNESS_TAGS),
662
604
  },
663
605
  // ─── Goal mode: model-declared completion ──────────────────────
664
606
  // Lets the model explicitly declare the active goal complete. The
@@ -673,6 +615,7 @@ const BUILTIN_IMPLEMENTATIONS = [
673
615
  isConcurrencySafe: true,
674
616
  },
675
617
  execute: completeGoalTool,
618
+ exposure: expose(HARNESS_TAGS, { availability: (ctx) => ctx.hasGoal === true }),
676
619
  },
677
620
  // ─── Goal mode: user-initiated cancellation ────────────────────
678
621
  // Distinct from complete_goal — the user explicitly asked to abandon the
@@ -688,6 +631,7 @@ const BUILTIN_IMPLEMENTATIONS = [
688
631
  isConcurrencySafe: true,
689
632
  },
690
633
  execute: cancelGoalTool,
634
+ exposure: expose(HARNESS_TAGS, { availability: (ctx) => ctx.hasGoal === true }),
691
635
  },
692
636
  // ─── Plugin marketplace: model-driven source registration ──────
693
637
  {
@@ -700,6 +644,7 @@ const BUILTIN_IMPLEMENTATIONS = [
700
644
  timeoutMs: 120_000, // git clone over network
701
645
  },
702
646
  execute: addMarketplaceTool,
647
+ exposure: expose(GENERAL_TAGS),
703
648
  },
704
649
  // Browser automation — 3 semantic tools driving the in-app webview via the
705
650
  // BrowserBridge (CDP). All serial on one webview (isConcurrencySafe:false).
@@ -719,6 +664,10 @@ const BUILTIN_IMPLEMENTATIONS = [
719
664
  timeoutMs: 30_000, // wait/observe can sit through a load; RPC headroom
720
665
  },
721
666
  execute: browserObserveTool,
667
+ exposure: expose(GENERAL_TAGS, {
668
+ defaultPermissionRules: allow(browserObserveToolDef.name),
669
+ promptSections: ["browser"],
670
+ }),
722
671
  },
723
672
  {
724
673
  definition: {
@@ -730,6 +679,17 @@ const BUILTIN_IMPLEMENTATIONS = [
730
679
  timeoutMs: 30_000, // the wait action internally bounds; give RPC headroom
731
680
  },
732
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
+ }),
733
693
  },
734
694
  {
735
695
  definition: {
@@ -740,6 +700,58 @@ const BUILTIN_IMPLEMENTATIONS = [
740
700
  isConcurrencySafe: false,
741
701
  },
742
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
+ }),
743
755
  },
744
756
  // ─── Credentials: AI 取用已存凭证(token/link/cookie) ──────────
745
757
  // permissionDefault:"allow" 是展示/声明 hint;取用审批由工具内部的
@@ -754,6 +766,26 @@ const BUILTIN_IMPLEMENTATIONS = [
754
766
  isConcurrencySafe: true,
755
767
  },
756
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
+ }),
757
789
  },
758
790
  // InjectCredential:把 cookie 凭证注入内置浏览器(恢复登录态)。审批由工具内部
759
791
  // CredentialUseGate 负责(逐条 autoInjectByAI),permissionDefault:"allow" 仅作展示 hint。
@@ -767,33 +799,71 @@ const BUILTIN_IMPLEMENTATIONS = [
767
799
  isConcurrencySafe: false,
768
800
  },
769
801
  execute: injectCredentialTool,
802
+ exposure: expose(GENERAL_TAGS, {
803
+ availability: (ctx) => isInjectCredentialAvailable(ctx.cwd, ctx.settingsScope),
804
+ }),
770
805
  },
771
806
  ];
772
- export const BUILTIN_TOOLS = BUILTIN_IMPLEMENTATIONS.map(({ definition, execute }) => ({
807
+ export const BUILTIN_TOOLS = BUILTIN_CONTRIBUTIONS.map(({ definition, execute, exposure }) => ({
773
808
  definition,
809
+ exposure,
774
810
  execute: async (args, ctx) => toToolExecutionResult(await execute(args, ctx)),
775
811
  }));
776
- /**
777
- * Per-tool availability predicates. A tool listed here is filtered OUT of the
778
- * exposed toolDefs when its predicate returns false for the active cwd (see
779
- * engine.ts toolDefs assembly). Tools NOT listed here are always visible.
780
- * Keyed by the tool's `name` (must match the toolDef name).
781
- */
782
- export const BUILTIN_TOOL_GUARDS = new Map([
783
- [webSearchToolDef.name, (ctx) => isWebSearchAvailable(ctx.cwd)],
784
- [generateImageToolDef.name, (ctx) => isGenerateImageAvailable(ctx.cwd)],
785
- [generateVideoToolDef.name, (ctx) => isGenerateVideoAvailable(ctx.cwd)],
786
- // UseCredential is hidden until at least one credential exists — keeps it out
787
- // of the tool list (and the context) for the common no-credentials case,
788
- // matching the spec's "quiet when empty" intent (true ToolSearch-deferral for
789
- // builtins isn't wired in the engine).
790
- [useCredentialToolDef.name, (ctx) => isUseCredentialAvailable(ctx.cwd, ctx.settingsScope)],
791
- // InjectCredential hidden until ≥1 cookie credential exists (browser injection
792
- // is cookie-only). Also degrades at call time if no browser bridge is wired.
793
- [injectCredentialToolDef.name, (ctx) => isInjectCredentialAvailable(ctx.cwd, ctx.settingsScope)],
794
- [completeGoalToolDef.name, (ctx) => ctx.hasGoal === true],
795
- [cancelGoalToolDef.name, (ctx) => ctx.hasGoal === true],
796
- ]);
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
+ : []));
797
867
  /** UseCredential is available when the cwd's credential metadata has ≥1 entry. */
798
868
  export function isUseCredentialAvailable(cwd, settingsScope) {
799
869
  try {