@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
@@ -1,415 +0,0 @@
1
- /**
2
- * Built-in Arena tool — multi-model collaborative analysis.
3
- *
4
- * Launches an arena session where multiple LLM participants independently
5
- * research a topic, cross-review each other's findings, and build consensus.
6
- *
7
- * The LLM config (baseUrl, apiKey) is injected at runtime by the Engine via
8
- * setArenaLLMConfig(), following the same pattern as setAskUserFn() and
9
- * setSubAgentConfig().
10
- */
11
- import { Arena, MODEL_PRESETS, getMaxOutputTokens } from "../../arena/index.js";
12
- import { createProgressRenderer } from "../../arena/render/terminal.js";
13
- import { formatArenaResultForSession } from "../../arena/render/session.js";
14
- import { SettingsManager } from "../../settings/manager.js";
15
- export const arenaToolDef = {
16
- name: "Arena",
17
- description: "Launch a multi-model collaborative analysis session. " +
18
- "Arena automatically detects the mode, analysis perspective (lens), and evidence sources from the user's natural language request. " +
19
- "Supports: code review, PRD/document review, architecture planning, product discussions, open-ended debates, and more. " +
20
- "Multiple LLM participants independently research the topic, cross-review findings, and produce structured consensus. " +
21
- "Use model preset names (e.g. 'claude', 'gpt', 'gemini', 'deepseek') or full model paths.",
22
- inputSchema: {
23
- type: "object",
24
- properties: {
25
- topic: {
26
- type: "string",
27
- description: "The topic or question to analyze in natural language. Arena auto-detects mode/lens/sources. " +
28
- "Examples: 'review my latest changes', 'review 这个 PRD 是否完整', '讨论 arena 的产品定位', " +
29
- "'规划通用化重构方案', 'discuss whether we should productize arena'",
30
- },
31
- mode: {
32
- type: "string",
33
- enum: ["review", "discussion", "planning"],
34
- description: "Arena mode override. Usually auto-detected from topic. 'review' for structured review, 'discussion' for open analysis, 'planning' for roadmaps.",
35
- },
36
- participants: {
37
- type: "array",
38
- items: { type: "string" },
39
- description: "Model preset names or full model paths for participants (min 2). " +
40
- "Preset names: " + Object.keys(MODEL_PRESETS).join(", ") + ". " +
41
- "Default: ['claude', 'gpt'] if omitted.",
42
- },
43
- concluder: {
44
- type: "string",
45
- description: "Which participant builds the final consensus (by name). Default: first participant.",
46
- },
47
- },
48
- required: ["topic"],
49
- },
50
- };
51
- // ─── Runtime LLM config — read from ctx, not module singletons ──
52
- /**
53
- * Snapshot of last-known Arena config, kept for the protocol-level
54
- * /arena-status query. The query is not tied to an in-flight tool
55
- * invocation, so it can't read ctx; instead, ctx-bearing tool calls
56
- * publish their config here for the status endpoint to read back.
57
- *
58
- * This is a read-only cache used purely for diagnostics — Arena's
59
- * actual execution path always reads from the per-call ctx.
60
- */
61
- let _lastSeenLLMConfig;
62
- let _lastSeenModelPool;
63
- export function getArenaStatus() {
64
- const baseUrl = _lastSeenLLMConfig?.baseUrl;
65
- const entries = _lastSeenModelPool?.list() ?? [];
66
- const fromSettings = readSettingsParticipants();
67
- // Mirror arenaTool's resolution: settings is authoritative when
68
- // present; otherwise fall back to the pool-derived preview so users
69
- // can still see *something* in /arena-status before they configure.
70
- const defaults = fromSettings.length >= 2 ? fromSettings : resolveDefaultParticipantNames(entries);
71
- const probed = defaults.map((name) => {
72
- const r = probeParticipant(name, entries, _lastSeenLLMConfig);
73
- return {
74
- name,
75
- model: r.modelPath,
76
- source: r.source,
77
- compatible: r.compatible,
78
- ...(r.reason ? { reason: r.reason } : {}),
79
- };
80
- });
81
- return {
82
- endpoint: baseUrl,
83
- defaultParticipants: probed,
84
- poolSize: entries.length,
85
- };
86
- }
87
- /**
88
- * Resolve a preset name or model path into an ArenaParticipant,
89
- * inheriting baseUrl/apiKey from the engine's LLM config.
90
- */
91
- /**
92
- * Arena uses a lower temperature than the default conversation model
93
- * to produce more deterministic, evidence-grounded analysis.
94
- */
95
- const ARENA_TEMPERATURE = 0.3;
96
- /**
97
- * Resolution priority:
98
- * 1. ModelPool key (the user's own configured models — uses each
99
- * entry's own baseUrl/apiKey, so e.g. a "claude" pool entry
100
- * pointing at OpenRouter still works while the active session
101
- * runs on DeepSeek direct).
102
- * 2. MODEL_PRESETS — only if the active endpoint can accept the
103
- * preset's model namespace; otherwise we throw rather than
104
- * silently miswire credentials.
105
- * 3. Raw model path against the active endpoint.
106
- */
107
- function resolveParticipant(nameOrPath, llmConfig, pool) {
108
- const fallbackBaseUrl = llmConfig.baseUrl;
109
- const fallbackApiKey = llmConfig.apiKey;
110
- // (1) ModelPool entry — preferred path
111
- const poolEntry = pool?.get(nameOrPath);
112
- if (poolEntry)
113
- return participantFromPool(poolEntry, llmConfig);
114
- // (2) Built-in preset
115
- const preset = MODEL_PRESETS[nameOrPath];
116
- if (preset) {
117
- assertEndpointAcceptsModel(fallbackBaseUrl, preset.model, nameOrPath);
118
- return {
119
- name: nameOrPath,
120
- llm: {
121
- provider: preset.provider,
122
- model: preset.model,
123
- maxTokens: preset.maxOutputTokens,
124
- baseUrl: fallbackBaseUrl,
125
- apiKey: fallbackApiKey,
126
- },
127
- clientDefaults: { temperature: ARENA_TEMPERATURE },
128
- };
129
- }
130
- // (3) Raw model path
131
- assertEndpointAcceptsModel(fallbackBaseUrl, nameOrPath, nameOrPath);
132
- return {
133
- name: nameOrPath.split("/").pop() ?? nameOrPath,
134
- llm: {
135
- provider: "openai",
136
- model: nameOrPath,
137
- maxTokens: getMaxOutputTokens(nameOrPath),
138
- baseUrl: fallbackBaseUrl,
139
- apiKey: fallbackApiKey,
140
- },
141
- clientDefaults: { temperature: ARENA_TEMPERATURE },
142
- };
143
- }
144
- function participantFromPool(entry, llmConfig) {
145
- // Pool entries carry their own baseUrl/apiKey — never paper over
146
- // them with the active session's credentials, which is exactly the
147
- // bug that caused 401/400s when Arena ran on a DeepSeek-only
148
- // session but the pool had OpenRouter-keyed entries.
149
- return {
150
- name: entry.key,
151
- llm: {
152
- provider: entry.provider,
153
- model: entry.model,
154
- maxTokens: entry.maxOutputTokens ?? getMaxOutputTokens(entry.model),
155
- baseUrl: entry.baseUrl ?? llmConfig.baseUrl,
156
- apiKey: entry.apiKey ?? llmConfig.apiKey,
157
- },
158
- clientDefaults: { temperature: ARENA_TEMPERATURE },
159
- };
160
- }
161
- /**
162
- * Non-throwing variant of resolveParticipant used by /arena status —
163
- * we want to *display* what would happen, not bail.
164
- */
165
- function probeParticipant(nameOrPath, poolEntries, llmConfig) {
166
- const fromPool = poolEntries.find((e) => e.key === nameOrPath);
167
- if (fromPool) {
168
- return { modelPath: fromPool.model, source: "pool", compatible: true };
169
- }
170
- const preset = MODEL_PRESETS[nameOrPath];
171
- const modelPath = preset?.model ?? nameOrPath;
172
- const source = preset ? "preset" : "raw";
173
- const baseUrl = llmConfig?.baseUrl;
174
- const endpointVendor = baseUrl ? inferEndpointVendor(baseUrl) : null;
175
- const modelVendor = modelPath.includes("/") ? modelPath.split("/")[0].toLowerCase() : null;
176
- if (endpointVendor && modelVendor && modelVendor !== endpointVendor) {
177
- return {
178
- modelPath,
179
- source,
180
- compatible: false,
181
- reason: `endpoint serves "${endpointVendor}" only`,
182
- };
183
- }
184
- return { modelPath, source, compatible: true };
185
- }
186
- /**
187
- * Quick, non-throwing predicate: would `nameOrPath` resolve to a
188
- * working participant on the current endpoint? Used to decide whether
189
- * the model's chosen `participants` list is honorable, or whether we
190
- * should silently swap in the pool defaults (single-vendor endpoint
191
- * with cross-vendor preset names is the common bad case).
192
- */
193
- function participantWouldResolve(nameOrPath, poolEntries, baseUrl) {
194
- return probeParticipant(nameOrPath, poolEntries, baseUrl ? { baseUrl } : undefined).compatible;
195
- }
196
- /**
197
- * Read the user's configured arena participants from settings.json.
198
- * Returns the list of string-form pool keys (the most common shape).
199
- * Object-form entries (full name/model/provider tuples) are currently
200
- * only honored by the CLI entry point and are skipped here.
201
- *
202
- * Returns an empty array if no settings file exists or the field is empty.
203
- */
204
- function readSettingsParticipants(cwd) {
205
- // A4: prefer Engine cwd when caller provides one; fall back to host
206
- // process cwd for non-tool callers like getArenaStatus().
207
- try {
208
- const settings = new SettingsManager(cwd ?? process.cwd()).get();
209
- const raw = settings.arena?.participants ?? [];
210
- return raw.filter((p) => typeof p === "string");
211
- }
212
- catch {
213
- return [];
214
- }
215
- }
216
- /**
217
- * If the user didn't explicitly pass `participants`, default to every
218
- * pool entry. With <2 entries, fall back to pre-existing behavior so
219
- * we don't regress installs that haven't filled out the pool yet.
220
- *
221
- * NOTE: this is now only used by getArenaStatus() for the diagnostic
222
- * /arena-status preview. The actual execution path in arenaTool() reads
223
- * from settings (readSettingsParticipants) and refuses to silently
224
- * grab the whole pool — we hit a bug where the pool included a
225
- * gemini-3.1-pro entry that the active endpoint couldn't serve, and
226
- * the user's curated settings.arena.participants list was bypassed.
227
- */
228
- function resolveDefaultParticipantNames(poolEntries) {
229
- if (poolEntries.length >= 2) {
230
- return poolEntries.map((e) => e.key);
231
- }
232
- if (poolEntries.length === 1) {
233
- // Single-model pool: use it twice — Arena requires ≥2. Same model
234
- // running twice still gives a useful self-review pass.
235
- const onlyKey = poolEntries[0].key;
236
- return [onlyKey, onlyKey];
237
- }
238
- // Empty pool: legacy fallback. The endpoint check downstream will
239
- // turn an obviously-wrong combo (e.g. claude preset on DeepSeek
240
- // direct) into a fast, descriptive error.
241
- return ["claude", "gpt"];
242
- }
243
- /**
244
- * Arena presets use OpenRouter-style namespaced model paths
245
- * (`anthropic/claude-opus-4.6`, `openai/gpt-5.4`, etc.). Those only
246
- * resolve correctly on a multi-provider gateway like OpenRouter — a
247
- * vendor's direct endpoint will reject any model name that isn't its
248
- * own and we'd burn tens of seconds on retries before the user sees
249
- * a useful error. Fail fast instead, naming the conflict.
250
- */
251
- function assertEndpointAcceptsModel(baseUrl, modelPath, participantLabel) {
252
- if (!baseUrl)
253
- return;
254
- const endpointVendor = inferEndpointVendor(baseUrl);
255
- if (!endpointVendor)
256
- return; // unknown gateway — assume permissive (e.g. OpenRouter, custom)
257
- const modelVendor = modelPath.includes("/") ? modelPath.split("/")[0].toLowerCase() : null;
258
- // Direct endpoint, no vendor prefix → caller must have used the
259
- // exact model name the endpoint expects. Trust it.
260
- if (modelVendor === null)
261
- return;
262
- if (modelVendor !== endpointVendor) {
263
- throw new Error(`Arena participant "${participantLabel}" maps to model "${modelPath}", ` +
264
- `but the active endpoint (${baseUrl}) only serves "${endpointVendor}" models. ` +
265
- `Either switch to an aggregator endpoint (e.g. OpenRouter) or pick participants ` +
266
- `whose models are native to this provider (e.g. "deepseek-v4-pro").`);
267
- }
268
- }
269
- function inferEndpointVendor(baseUrl) {
270
- const u = baseUrl.toLowerCase();
271
- if (u.includes("api.deepseek.com"))
272
- return "deepseek";
273
- if (u.includes("api.openai.com"))
274
- return "openai";
275
- if (u.includes("api.anthropic.com"))
276
- return "anthropic";
277
- if (u.includes("generativelanguage.googleapis.com"))
278
- return "google";
279
- // OpenRouter, Together, custom proxies, etc. — assume multi-vendor.
280
- return null;
281
- }
282
- function formatStartupBanner(participants, llmConfig, source) {
283
- const endpoint = llmConfig.baseUrl ?? "(none)";
284
- const lines = [];
285
- lines.push(`Arena: endpoint=${endpoint}`);
286
- const sourceTag = source === "explicit-coerced-to-settings"
287
- ? "settings (auto-corrected from incompatible user picks)"
288
- : source === "explicit"
289
- ? "user-specified"
290
- : "settings";
291
- lines.push(`Arena: participants=${participants.join(", ")} (${sourceTag})`);
292
- return lines.join("\n");
293
- }
294
- /** Strip ANSI escape codes from chalk-styled text */
295
- function stripAnsi(text) {
296
- // eslint-disable-next-line no-control-regex
297
- return text.replace(/\x1b\[[0-9;]*m/g, "");
298
- }
299
- export async function arenaTool(args, ctx) {
300
- const topic = args.topic;
301
- if (!topic)
302
- return "Error: topic is required";
303
- const signal = args.__signal;
304
- if (signal?.aborted)
305
- return "Arena aborted before starting.";
306
- if (!ctx?.llmConfig) {
307
- return "Error: Arena LLM config not initialized. This is a bug — the engine should inject it via ToolContext.";
308
- }
309
- const llmConfig = ctx.llmConfig;
310
- const pool = ctx.modelPool;
311
- // Update the diagnostic snapshot used by /arena-status
312
- _lastSeenLLMConfig = llmConfig;
313
- _lastSeenModelPool = pool;
314
- const explicitParticipants = args.participants;
315
- const poolEntries = pool?.list() ?? [];
316
- // Participant resolution order:
317
- // 1. Explicit `participants` arg from the tool call — honored only
318
- // when every entry resolves on the current endpoint; otherwise
319
- // we coerce to settings (preferred) or pool defaults.
320
- // 2. settings.arena.participants — the user's curated list. This
321
- // is the authoritative config; we never silently grab the whole
322
- // pool, because the pool can contain models that the active
323
- // endpoint can't serve (e.g. gemini-3.1-pro on Google direct).
324
- // 3. No settings configured → return an actionable error pointing
325
- // the user at where to configure it. Previously we silently
326
- // defaulted to the entire pool, which caused 404/400 storms
327
- // when pool entries didn't match the active endpoint.
328
- let participantNames;
329
- let participantSource;
330
- if (explicitParticipants && explicitParticipants.length > 0) {
331
- const allCompatible = explicitParticipants.every((name) => participantWouldResolve(name, poolEntries, llmConfig.baseUrl));
332
- if (allCompatible) {
333
- participantNames = explicitParticipants;
334
- participantSource = "explicit";
335
- }
336
- else {
337
- const fromSettings = readSettingsParticipants(ctx?.cwd);
338
- if (fromSettings.length >= 2) {
339
- participantNames = fromSettings;
340
- participantSource = "explicit-coerced-to-settings";
341
- }
342
- else {
343
- return ("Error: Arena participants from the call are incompatible with the active endpoint, " +
344
- `and no fallback is configured. Set "arena.participants" (≥2 model names) in ` +
345
- "~/.code-shell/settings.json, or pass a compatible `participants` array.");
346
- }
347
- }
348
- }
349
- else {
350
- const fromSettings = readSettingsParticipants(ctx?.cwd);
351
- if (fromSettings.length >= 2) {
352
- participantNames = fromSettings;
353
- participantSource = "settings";
354
- }
355
- else {
356
- return ("Error: Arena requires at least 2 participants but none are configured. " +
357
- `Add an "arena": { "participants": ["model-a", "model-b", ...] } block to ` +
358
- "~/.code-shell/settings.json (each entry is a model pool key, e.g. " +
359
- '"deepseek-v4-pro", "openrouter-claude-opus-4.7-fast"), or pass an explicit ' +
360
- "`participants` array in the tool call.");
361
- }
362
- }
363
- if (participantNames.length < 2) {
364
- return "Error: Arena requires at least 2 participants. Provide 2 or more model names.";
365
- }
366
- const mode = args.mode;
367
- const concluder = args.concluder;
368
- // Collect progress for inclusion in the final tool result.
369
- // Strip ANSI codes from progress since tool results are plain text/markdown.
370
- const progressLog = [];
371
- const progressRenderer = createProgressRenderer((text) => {
372
- progressLog.push(stripAnsi(text));
373
- });
374
- // Surface the resolved configuration up front so the user can see
375
- // exactly which models will be polled and against which endpoint —
376
- // previously this was invisible until something blew up.
377
- const configLine = formatStartupBanner(participantNames, llmConfig, participantSource);
378
- progressLog.push(configLine);
379
- try {
380
- // resolveParticipant() may throw on endpoint/model mismatch — keep
381
- // it inside the try so the error returns as a tool-result string
382
- // rather than crashing the engine.
383
- const participants = participantNames.map((n) => resolveParticipant(n, llmConfig, pool));
384
- const arena = new Arena({
385
- participants,
386
- mode,
387
- concluder,
388
- enableContextTools: true,
389
- onProgress: progressRenderer,
390
- signal,
391
- });
392
- const result = await arena.run(topic);
393
- // Use session renderer (markdown, no ANSI) for tool results.
394
- // Terminal renderer (chalk) is only for direct stdout printing.
395
- const formattedResult = formatArenaResultForSession(result);
396
- // Prepend a condensed progress summary so the LLM can see what was done
397
- const progressSummary = progressLog.length > 0
398
- ? "── Arena Progress ──\n" + progressLog.join("\n") + "\n\n"
399
- : "";
400
- // Cap total output to prevent context overflow
401
- const MAX_TOOL_OUTPUT = 30_000;
402
- const full = progressSummary + formattedResult;
403
- if (full.length > MAX_TOOL_OUTPUT) {
404
- return full.slice(0, MAX_TOOL_OUTPUT) + "\n\n... (truncated, total " + full.length + " chars)";
405
- }
406
- return full;
407
- }
408
- catch (err) {
409
- if (signal?.aborted)
410
- return "Arena aborted.";
411
- // err may be a non-Error (string/null); `(err as Error).message` would be
412
- // undefined → "Arena error: undefined", masking the real cause.
413
- return `Arena error: ${err instanceof Error ? err.message : String(err)}`;
414
- }
415
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * BriefTool — send structured messages with markdown support.
3
- */
4
- import type { ToolDefinition } from "../../types.js";
5
- export declare const briefToolDef: ToolDefinition;
6
- export declare function briefTool(args: Record<string, unknown>): Promise<string>;
@@ -1,41 +0,0 @@
1
- /**
2
- * BriefTool — send structured messages with markdown support.
3
- */
4
- export const briefToolDef = {
5
- name: "Brief",
6
- description: "Send a structured brief/summary message. Useful for providing concise status updates, " +
7
- "summaries, or formatted output to the user.",
8
- inputSchema: {
9
- type: "object",
10
- properties: {
11
- title: {
12
- type: "string",
13
- description: "Brief title or heading",
14
- },
15
- content: {
16
- type: "string",
17
- description: "Markdown-formatted content of the brief",
18
- },
19
- status: {
20
- type: "string",
21
- enum: ["info", "success", "warning", "error"],
22
- description: "Status level for the brief (default: info)",
23
- },
24
- },
25
- required: ["content"],
26
- },
27
- };
28
- export async function briefTool(args) {
29
- const title = args.title;
30
- const content = args.content;
31
- const status = args.status ?? "info";
32
- const icons = {
33
- info: "ℹ",
34
- success: "✓",
35
- warning: "⚠",
36
- error: "✗",
37
- };
38
- const icon = icons[status] ?? "ℹ";
39
- const header = title ? `${icon} ${title}\n\n` : "";
40
- return `${header}${content}`;
41
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * CheckQuota builtin — thin shell over the `quota/` module.
3
- *
4
- * Lets an orchestrating agent read how much CC/Codex quota is left before/while
5
- * delegating work (DriveAgent), so it can plan: how many to spawn, whether to
6
- * wait for a reset, or switch providers. See quota/index.ts for the sources.
7
- *
8
- * NOTE the cost asymmetry (surfaced in the description): Codex is a free GET;
9
- * Claude costs ~1 output token because Anthropic only returns quota via
10
- * response headers. So restrict with `provider` when you only need one.
11
- */
12
- import type { ToolDefinition } from "../../types.js";
13
- import type { ToolContext } from "../context.js";
14
- export declare const checkQuotaToolDef: ToolDefinition;
15
- export declare function checkQuotaTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
@@ -1,34 +0,0 @@
1
- import { checkQuota, formatQuota } from "../../quota/index.js";
2
- import { resolveQuotaCredentials } from "../../quota/credentials.js";
3
- export const checkQuotaToolDef = {
4
- name: "CheckQuota",
5
- description: "Check remaining usage/rate-limit quota for the external coding-agent CLIs (Claude Code and/or " +
6
- "Codex) — the same 5h/7d subscription windows their status lines show. Use before or during " +
7
- "orchestration (DriveAgent) to plan how much work to hand off, whether to wait for a reset, or " +
8
- "which provider to use. Returns each provider's 5h/7d used-% and reset time. " +
9
- "COST: 'codex' is free (reads a usage endpoint). 'claude' costs ~1 token (Anthropic exposes " +
10
- "quota only via a response header, so this sends a 1-token probe). Pass `provider` to query " +
11
- "just one and avoid the other's cost/latency.",
12
- inputSchema: {
13
- type: "object",
14
- properties: {
15
- provider: {
16
- type: "string",
17
- enum: ["claude", "codex", "both"],
18
- description: "Which to check. 'both' (default) queries Claude Code and Codex. 'claude' sends a 1-token probe; 'codex' is free.",
19
- },
20
- },
21
- required: [],
22
- },
23
- };
24
- export async function checkQuotaTool(args, ctx) {
25
- const which = args.provider === "claude" ? ["claude"] : args.provider === "codex" ? ["codex"] : ["claude", "codex"];
26
- const creds = await resolveQuotaCredentials();
27
- const result = await checkQuota({
28
- creds,
29
- providers: which,
30
- signal: ctx?.signal,
31
- });
32
- const nowSec = Math.floor(Date.now() / 1000);
33
- return formatQuota(result, nowSec);
34
- }
@@ -1,51 +0,0 @@
1
- import type { ToolDefinition } from "../../types.js";
2
- import type { AgentRunResult } from "../../cc-orchestrator/external-agent-driver.js";
3
- import { readExternalChangedFiles } from "../../cc-orchestrator/external-agent-changes.js";
4
- import type { ToolContext } from "../context.js";
5
- import { type ExternalAgentSessionBinding, type ExternalAgentSessionRecord } from "../../cc-orchestrator/external-agent-session-store.js";
6
- export type DriveCli = "claude" | "codex";
7
- export declare const DRIVE_AGENT_FOREGROUND_HANDOFF_MS = 110000;
8
- export declare const DRIVE_AGENT_TOOL_TIMEOUT_MS = 1800000;
9
- export declare const driveAgentToolDef: ToolDefinition;
10
- type PermMode = "default" | "acceptEdits" | "bypassPermissions";
11
- type Runner = (opts: {
12
- cli: DriveCli;
13
- prompt: string;
14
- resumeSessionId?: string;
15
- model?: string;
16
- cwd: string;
17
- permissionMode?: PermMode;
18
- signal?: AbortSignal;
19
- imagePaths?: string[];
20
- }) => Promise<AgentRunResult>;
21
- type SessionStore = {
22
- get(cli: DriveCli, sessionId: string): ExternalAgentSessionBinding | undefined;
23
- record(binding: ExternalAgentSessionRecord): void;
24
- };
25
- export interface DriveAgentToolOptions {
26
- foregroundHandoffMs?: number;
27
- sessionStore?: SessionStore;
28
- /** Test seam for external transcript attribution. */
29
- readChangedFiles?: typeof readExternalChangedFiles;
30
- }
31
- /** Factory so tests can inject a fake runner. `fixedCli` (back-compat) forces a
32
- * cli and hides the `cli` arg — that's how DriveClaudeCode stays a thin alias. */
33
- export declare function makeDriveAgentTool(runner?: Runner, fixedCli?: DriveCli, options?: DriveAgentToolOptions): (args: Record<string, unknown>, ctx?: ToolContext) => Promise<string>;
34
- export declare const driveAgentTool: (args: Record<string, unknown>, ctx?: ToolContext) => Promise<string>;
35
- export declare const driveAgentJobsToolDef: ToolDefinition;
36
- export declare function driveAgentJobsTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
37
- export declare const driveClaudeCodeToolDef: ToolDefinition;
38
- /** Back-compat factory: a DriveAgent pinned to cli:"claude" with the `cli` arg
39
- * hidden. The injected `runner` here keeps the old shape (no `cli` field); we
40
- * adapt it to the generic Runner so existing tests' fakes still work. */
41
- type LegacyRunner = (opts: {
42
- prompt: string;
43
- resumeSessionId?: string;
44
- model?: string;
45
- cwd: string;
46
- permissionMode?: PermMode;
47
- signal?: AbortSignal;
48
- }) => Promise<AgentRunResult>;
49
- export declare function makeDriveClaudeCodeTool(runner?: LegacyRunner, options?: DriveAgentToolOptions): (args: Record<string, unknown>, ctx?: ToolContext) => Promise<string>;
50
- export declare const driveClaudeCodeTool: (args: Record<string, unknown>, ctx?: ToolContext) => Promise<string>;
51
- export {};