@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,333 +0,0 @@
1
- /**
2
- * Arena — multi-model collaborative analysis engine.
3
- *
4
- * Evidence-Driven Pipeline:
5
- * 0. Planner → understand what the user wants (mode, lenses, sources)
6
- * 1. EvidenceProviders → collect artifacts from selected sources
7
- * 2. Strategy + Lens → compose prompts (mode flow + perspective)
8
- * 3. ToolSelector → determine which tools participants can use
9
- * 4. ParticipantResearch → each model investigates independently (parallel)
10
- * 4b. ClaimRegistry → register findings as claims, populate ledger
11
- * 5. VerificationReview → claim-aware cross-review with evidence digests
12
- * 7. DebateRounds → contested claims enter structured debate
13
- * 8. Adjudication → moderator rules on contested claims
14
- * 6. ConsensusBuilder → claim-aware structured consensus
15
- */
16
- import { logger } from "../logging/logger.js";
17
- import { ARENA_MODE_DEFAULTS, DEFAULT_EXECUTION_LIMITS, isStrategyPlanning } from "./types.js";
18
- import { getStrategy, getStrategyForPlan } from "./strategies/index.js";
19
- import { planArena } from "./planner.js";
20
- import { collectEvidence } from "./providers/index.js";
21
- import { selectTools } from "./tools/selector.js";
22
- import { runParticipantResearchWithDossiers } from "./phases/participant-research.js";
23
- import { runVerificationReview } from "./phases/cross-review.js";
24
- import { runDebateRounds } from "./phases/debate-rounds.js";
25
- import { runAdjudication } from "./phases/adjudication.js";
26
- import { buildConsensus } from "./phases/build-consensus.js";
27
- import { runDetailExpansion } from "./phases/planning-detail-expansion.js";
28
- import { withLanguage } from "./strategies/language-wrapper.js";
29
- import { ArenaLedger } from "./ledger.js";
30
- import { registerClaims } from "./phases/claim-registry.js";
31
- /** Bucket claims by status. Shared by the two consensus phases. */
32
- function summarizeClaims(all) {
33
- return {
34
- verified: all.filter((c) => c.status === "verified"),
35
- contested: all.filter((c) => c.status === "contested"),
36
- unresolved: all.filter((c) => c.status === "unresolved"),
37
- rejected: all.filter((c) => c.status === "rejected"),
38
- };
39
- }
40
- export class Arena {
41
- config;
42
- strategy;
43
- limits;
44
- constructor(config) {
45
- if (config.participants.length < 2) {
46
- throw new Error("Arena requires at least 2 participants");
47
- }
48
- const mode = config.mode ?? "review";
49
- const defaults = ARENA_MODE_DEFAULTS[mode];
50
- this.config = {
51
- mode,
52
- maxDiscussionRounds: config.maxDiscussionRounds ?? defaults.maxDiscussionRounds,
53
- ...config,
54
- };
55
- this.limits = config.executionLimits ?? DEFAULT_EXECUTION_LIMITS;
56
- // Initial strategy — will be overridden in run() with lens + language wrappers
57
- this.strategy = config.strategy ?? getStrategy(mode);
58
- }
59
- /**
60
- * Run a full arena session.
61
- *
62
- * @param topic - User's topic/request (natural language)
63
- * @param flags - Optional explicit overrides (mode, base, head)
64
- */
65
- async run(topic, flags) {
66
- const participantNames = this.config.participants.map((p) => p.name);
67
- const signal = this.config.signal;
68
- logger.info("arena.start", { mode: this.config.mode, participants: participantNames });
69
- signal?.throwIfAborted();
70
- // ─── Phase 0: Plan ────────────────────────────────────────
71
- const llmConfig = this.config.participants[0].llm;
72
- const plan = await planArena(topic, llmConfig, flags, signal);
73
- this.config.onProgress?.({ type: "plan_resolved", plan });
74
- logger.info("arena.plan", {
75
- mode: plan.mode,
76
- lenses: plan.lenses.map((l) => l.name),
77
- sources: plan.sources.map((s) => s.kind),
78
- subject: plan.subject.label,
79
- confidence: plan.confidence,
80
- });
81
- if (!flags?.mode && plan.mode !== this.config.mode) {
82
- this.config.mode = plan.mode;
83
- }
84
- signal?.throwIfAborted();
85
- // ─── Phase 1: Collect Evidence ────────────────────────────
86
- // Bridge collectEvidence's lifecycle events to the public
87
- // ArenaProgressEvent stream so the UI sees "collecting from
88
- // repo..." instead of a silent pause.
89
- const onProgress = this.config.onProgress;
90
- const { artifacts, quickFacts } = await collectEvidence(plan, topic, {
91
- signal,
92
- onProgress: (e) => {
93
- if (e.type === "evidence_started") {
94
- onProgress?.({ type: "evidence_started", source: e.source });
95
- }
96
- else {
97
- onProgress?.({
98
- type: "evidence_source_done",
99
- source: e.source,
100
- count: e.count ?? 0,
101
- durationMs: e.durationMs ?? 0,
102
- timedOut: e.timedOut ?? false,
103
- });
104
- }
105
- },
106
- });
107
- onProgress?.({ type: "evidence_collected", artifacts });
108
- logger.info("arena.evidence", {
109
- artifactCount: artifacts.length,
110
- sources: plan.sources.map((s) => s.kind),
111
- });
112
- const baseContext = { plan, artifacts, quickFacts };
113
- // ─── Phase 2: Compose Strategy ────────────────────────────
114
- this.strategy = this.config.strategy ?? getStrategyForPlan(plan);
115
- this.strategy = withLanguage(this.strategy, topic);
116
- // ─── Phase 3: Select Tools ────────────────────────────────
117
- const contextTools = this.config.enableContextTools !== false
118
- ? selectTools(plan)
119
- : undefined;
120
- signal?.throwIfAborted();
121
- // ─── Phase 4: Participant Research (parallel) ─────────────
122
- logger.info("arena.research_phase", { participants: participantNames });
123
- const researchResults = await runParticipantResearchWithDossiers({
124
- participants: this.config.participants,
125
- strategy: this.strategy,
126
- topic,
127
- baseContext,
128
- enableContextTools: this.config.enableContextTools ?? true,
129
- contextTools,
130
- signal,
131
- onProgress: this.config.onProgress,
132
- });
133
- const reports = researchResults.map((r) => r.report);
134
- const dossiers = researchResults.map((r) => r.dossier);
135
- signal?.throwIfAborted();
136
- // ─── Phase 4b: Claim Registry ─────────────────────────────
137
- const ledger = new ArenaLedger();
138
- // Populate ledger with dossiers
139
- for (const dossier of dossiers) {
140
- ledger.appendDossier(dossier);
141
- }
142
- // Register findings as claims
143
- const claims = registerClaims({
144
- dossiers,
145
- ledger,
146
- onProgress: this.config.onProgress,
147
- });
148
- logger.info("arena.claims_registered", {
149
- claimCount: claims.length,
150
- byOwner: Object.fromEntries(participantNames.map((name) => [
151
- name,
152
- claims.filter((c) => c.owner === name).length,
153
- ])),
154
- });
155
- signal?.throwIfAborted();
156
- // ─── Phase 5: Mode Policy Router ─────────────────────────
157
- //
158
- // Planning mode: merge-oriented review → roadmap consensus → detail expansion
159
- // Review/Discussion mode: verification review → debate → adjudication → consensus
160
- const concluderName = this.config.concluder ?? participantNames[0];
161
- const concluderMatch = this.config.participants.find((p) => p.name === concluderName);
162
- if (!concluderMatch && this.config.concluder) {
163
- logger.warn("arena.concluder_not_found", {
164
- requested: this.config.concluder,
165
- fallback: this.config.participants[0].name,
166
- });
167
- }
168
- const concluder = concluderMatch ?? this.config.participants[0];
169
- const enableTools = this.config.enableContextTools !== false;
170
- if (this.config.mode === "planning") {
171
- return this.runPlanningPath({
172
- topic, participantNames, plan, baseContext, reports, dossiers, ledger,
173
- concluder, contextTools, enableContextTools: enableTools, signal,
174
- });
175
- }
176
- return this.runReviewDiscussionPath({
177
- topic, participantNames, plan, baseContext, reports, dossiers, ledger, concluder, signal,
178
- });
179
- }
180
- /**
181
- * Planning path: merge-oriented review → roadmap consensus → detail expansion.
182
- *
183
- * Planning mode does NOT enter heavy debate/adjudication. Contested findings
184
- * are converted to open questions or dependency risks in the roadmap.
185
- */
186
- async runPlanningPath(ctx) {
187
- const { topic, participantNames, plan, baseContext, reports, dossiers, ledger, concluder, contextTools, enableContextTools, signal, } = ctx;
188
- // ─── Merge-Oriented Review ───────────────────────────────
189
- logger.info("arena.planning_merge_review_phase");
190
- const { reviews } = await runVerificationReview({
191
- participants: this.config.participants,
192
- strategy: this.strategy,
193
- topic,
194
- reports,
195
- ledger,
196
- limits: this.limits,
197
- mode: "planning",
198
- signal,
199
- onProgress: this.config.onProgress,
200
- });
201
- signal?.throwIfAborted();
202
- // ─── Roadmap Consensus ───────────────────────────────────
203
- const allClaims = ledger.getAllClaims();
204
- const claimSummary = summarizeClaims(allClaims);
205
- logger.info("arena.planning_consensus_phase", { concluder: concluder.name });
206
- const consensus = await buildConsensus({
207
- concluder,
208
- strategy: this.strategy,
209
- topic,
210
- reports,
211
- reviews,
212
- claimSummary,
213
- signal,
214
- onProgress: this.config.onProgress,
215
- });
216
- signal?.throwIfAborted();
217
- // ─── Detail Expansion ────────────────────────────────────
218
- if (consensus.roadmap.length > 0 && isStrategyPlanning(this.strategy)) {
219
- logger.info("arena.detail_expansion_phase", { phaseCount: consensus.roadmap.length });
220
- try {
221
- const details = await runDetailExpansion({
222
- concluder,
223
- strategy: this.strategy,
224
- topic,
225
- phases: consensus.roadmap,
226
- ledger,
227
- limits: this.limits,
228
- enableContextTools,
229
- contextTools,
230
- signal,
231
- onProgress: this.config.onProgress,
232
- });
233
- consensus.roadmapDetails = details;
234
- }
235
- catch (err) {
236
- // Detail expansion is non-critical — degrade gracefully
237
- logger.warn("arena.detail_expansion_failed", {
238
- error: err.message,
239
- phaseCount: consensus.roadmap.length,
240
- });
241
- }
242
- }
243
- return {
244
- topic,
245
- mode: this.config.mode,
246
- participants: participantNames,
247
- plan,
248
- baseContext,
249
- reports,
250
- dossiers,
251
- claims: allClaims,
252
- reviews,
253
- consensus,
254
- };
255
- }
256
- /**
257
- * Review/Discussion path: verification review → debate → adjudication → consensus.
258
- *
259
- * This is the heavy trust loop for claim verification.
260
- */
261
- async runReviewDiscussionPath(ctx) {
262
- const { topic, participantNames, plan, baseContext, reports, dossiers, ledger, concluder, signal } = ctx;
263
- // ─── Verification Review (parallel) ──────────────────────
264
- logger.info("arena.verification_review_phase");
265
- const { reviews } = await runVerificationReview({
266
- participants: this.config.participants,
267
- strategy: this.strategy,
268
- topic,
269
- reports,
270
- ledger,
271
- limits: this.limits,
272
- signal,
273
- onProgress: this.config.onProgress,
274
- });
275
- signal?.throwIfAborted();
276
- // ─── Debate Rounds ───────────────────────────────────────
277
- logger.info("arena.debate_phase");
278
- const debateRounds = await runDebateRounds({
279
- participants: this.config.participants,
280
- strategy: this.strategy,
281
- topic,
282
- ledger,
283
- limits: this.limits,
284
- maxRounds: this.config.maxDiscussionRounds,
285
- signal,
286
- onProgress: this.config.onProgress,
287
- });
288
- signal?.throwIfAborted();
289
- // ─── Adjudication ────────────────────────────────────────
290
- logger.info("arena.adjudication_phase", { concluder: concluder.name });
291
- const adjudications = await runAdjudication({
292
- concluder,
293
- strategy: this.strategy,
294
- topic,
295
- ledger,
296
- signal,
297
- onProgress: this.config.onProgress,
298
- });
299
- signal?.throwIfAborted();
300
- // ─── Consensus (claim-aware) ─────────────────────────────
301
- const allClaims = ledger.getAllClaims();
302
- const claimSummary = summarizeClaims(allClaims);
303
- logger.info("arena.consensus_phase", {
304
- concluder: concluder.name,
305
- verified: claimSummary.verified.length,
306
- unresolved: claimSummary.unresolved.length,
307
- });
308
- const consensus = await buildConsensus({
309
- concluder,
310
- strategy: this.strategy,
311
- topic,
312
- reports,
313
- reviews,
314
- claimSummary,
315
- signal,
316
- onProgress: this.config.onProgress,
317
- });
318
- return {
319
- topic,
320
- mode: this.config.mode,
321
- participants: participantNames,
322
- plan,
323
- baseContext,
324
- reports,
325
- dossiers,
326
- claims: allClaims,
327
- reviews,
328
- debateRounds,
329
- adjudications,
330
- consensus,
331
- };
332
- }
333
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * Context tools — read-only tools that arena participants can use
3
- * to fetch additional source context during research.
4
- *
5
- * Security: All shell commands use execFileSync with argument arrays
6
- * to prevent command injection. File paths are validated against the
7
- * repository boundary to prevent path traversal.
8
- */
9
- import type { ToolDefinition, ToolCall } from "../../types.js";
10
- export declare const MAX_TOOL_RESULT = 15000;
11
- export declare const MAX_TOOL_ROUNDS = 3;
12
- export declare const CONTEXT_TOOLS: ToolDefinition[];
13
- /**
14
- * Execute a context tool call and return the result string.
15
- */
16
- export declare function executeContextTool(tc: ToolCall): string;
@@ -1,272 +0,0 @@
1
- /**
2
- * Context tools — read-only tools that arena participants can use
3
- * to fetch additional source context during research.
4
- *
5
- * Security: All shell commands use execFileSync with argument arrays
6
- * to prevent command injection. File paths are validated against the
7
- * repository boundary to prevent path traversal.
8
- */
9
- import { readFileSync, existsSync, readdirSync, statSync, realpathSync } from "node:fs";
10
- import { execFileSync } from "node:child_process";
11
- import { resolve, join, dirname, basename } from "node:path";
12
- import { isWithinRoot } from "./within-root.js";
13
- export const MAX_TOOL_RESULT = 15_000; // chars per tool call
14
- // 5 was too generous for thinking-mode models — they'd spend the
15
- // entire budget on read_file with textLen=0, then need an
16
- // expensive force_conclude round to actually emit findings (logs
17
- // consistently showed 5/5 rounds + 70-150s force_conclude). Capping
18
- // at 3 makes the participant commit to a conclusion much sooner.
19
- export const MAX_TOOL_ROUNDS = 3;
20
- /** Repository root boundary — all file access is restricted to this directory */
21
- const REPO_ROOT = resolve(".");
22
- export const CONTEXT_TOOLS = [
23
- {
24
- name: "read_file",
25
- description: "Read a file from the repository. Use this when you need to see the full source of a file " +
26
- "referenced in the context, or to check surrounding code (callers, type definitions, etc.).",
27
- inputSchema: {
28
- type: "object",
29
- properties: {
30
- path: { type: "string", description: "Relative file path from repo root" },
31
- offset: { type: "number", description: "Start line (1-based, optional)" },
32
- limit: { type: "number", description: "Max lines to read (optional, default 200)" },
33
- },
34
- required: ["path"],
35
- },
36
- },
37
- {
38
- name: "grep_code",
39
- description: "Search for a pattern across the codebase. Use this to find callers, references, " +
40
- "type definitions, or usages of symbols.",
41
- inputSchema: {
42
- type: "object",
43
- properties: {
44
- pattern: { type: "string", description: "Regex pattern to search for" },
45
- glob: { type: "string", description: "File glob filter, e.g. '*.ts' (optional)" },
46
- },
47
- required: ["pattern"],
48
- },
49
- },
50
- {
51
- name: "list_files",
52
- description: "List files in a directory. Use this to understand project structure around relevant files.",
53
- inputSchema: {
54
- type: "object",
55
- properties: {
56
- path: { type: "string", description: "Directory path relative to repo root (default: '.')" },
57
- },
58
- required: [],
59
- },
60
- },
61
- {
62
- name: "git_show",
63
- description: "Show a git object (commit, file at a ref, etc.). Use for inspecting specific commits " +
64
- "or viewing a file at a different branch/commit.",
65
- inputSchema: {
66
- type: "object",
67
- properties: {
68
- ref: { type: "string", description: "Git ref, e.g. 'HEAD~3', 'main:src/foo.ts', commit hash" },
69
- },
70
- required: ["ref"],
71
- },
72
- },
73
- {
74
- name: "git_blame",
75
- description: "Show git blame for a file. Use to understand who changed what and when.",
76
- inputSchema: {
77
- type: "object",
78
- properties: {
79
- path: { type: "string", description: "File path" },
80
- lines: { type: "string", description: "Line range, e.g. '10,20' (optional)" },
81
- },
82
- required: ["path"],
83
- },
84
- },
85
- ];
86
- /**
87
- * Execute a context tool call and return the result string.
88
- */
89
- export function executeContextTool(tc) {
90
- try {
91
- switch (tc.toolName) {
92
- case "read_file":
93
- return executeReadFile(tc.args);
94
- case "grep_code":
95
- return executeGrepCode(tc.args);
96
- case "list_files":
97
- return executeListFiles(tc.args);
98
- case "git_show":
99
- return executeGitShow(tc.args);
100
- case "git_blame":
101
- return executeGitBlame(tc.args);
102
- default:
103
- return `Unknown tool: ${tc.toolName}`;
104
- }
105
- }
106
- catch (err) {
107
- return `Tool error: ${err.message}`;
108
- }
109
- }
110
- /**
111
- * Validate that a file path resolves within the repository root.
112
- * Returns the resolved absolute path, or null if outside the boundary.
113
- */
114
- function validatePath(filePath) {
115
- const resolved = resolve(filePath);
116
- // Realpath both sides so a symlink planted inside the repo that points OUTSIDE
117
- // can't pass a lexical containment check (isWithinRoot assumes resolved input
118
- // and won't catch a link escape on its own). Matches fs-service's discipline.
119
- // Reads are read-only, but a contained-looking symlink would still leak an
120
- // out-of-repo file into arena context. Fall back to the lexical check when the
121
- // target doesn't exist yet (a read of a missing file fails downstream anyway).
122
- let realRoot;
123
- try {
124
- realRoot = realpathSync(REPO_ROOT);
125
- }
126
- catch {
127
- realRoot = REPO_ROOT;
128
- }
129
- let realTarget;
130
- try {
131
- realTarget = realpathSync(resolved);
132
- }
133
- catch {
134
- // Target doesn't exist yet. Compare REAL-vs-REAL by resolving the existing
135
- // parent dir's realpath and rejoining the missing leaf — comparing realRoot
136
- // (a real path) against a lexical `resolved` would false-reject valid files
137
- // whenever REPO_ROOT (or any ancestor) is reached through a symlink.
138
- let realParent;
139
- try {
140
- realParent = realpathSync(dirname(resolved));
141
- }
142
- catch {
143
- // Parent missing too — no realpath available; fall back to lexical-vs-lexical
144
- // so both operands share the same (unresolved) mode.
145
- return isWithinRoot(resolve(REPO_ROOT), resolved) ? resolved : null;
146
- }
147
- const candidate = join(realParent, basename(resolved));
148
- return isWithinRoot(realRoot, candidate) ? candidate : null;
149
- }
150
- return isWithinRoot(realRoot, realTarget) ? realTarget : null;
151
- }
152
- function executeReadFile(args) {
153
- const filePath = args.path;
154
- if (!validatePath(filePath))
155
- return `Error: path outside repository: ${filePath}`;
156
- if (!existsSync(filePath))
157
- return `Error: file not found: ${filePath}`;
158
- const raw = readFileSync(filePath, "utf-8");
159
- const lines = raw.split("\n");
160
- const offset = Math.max(0, (args.offset ?? 1) - 1);
161
- // Guard `limit` before slicing: a negative limit makes lines.slice count
162
- // "from the end" and silently drop the file's tail (reader thinks the file is
163
- // shorter). A missing/NaN limit falls back to the default; a non-positive
164
- // limit reads nothing.
165
- const rawLimit = args.limit;
166
- const limit = rawLimit === undefined || !Number.isFinite(rawLimit)
167
- ? 200
168
- : rawLimit > 0
169
- ? Math.floor(rawLimit)
170
- : 0;
171
- const slice = lines.slice(offset, offset + limit);
172
- const numbered = slice.map((l, i) => `${offset + i + 1}\t${l}`).join("\n");
173
- return truncateResult(numbered);
174
- }
175
- function executeGrepCode(args) {
176
- const pattern = args.pattern;
177
- const glob = args.glob;
178
- const grepArgs = ["-rn", "-E", "--"];
179
- if (glob) {
180
- grepArgs.splice(1, 0, `--include=${glob}`);
181
- }
182
- grepArgs.push(pattern, ".");
183
- const result = execFileSafe("grep", grepArgs, 80);
184
- return result || "No matches found.";
185
- }
186
- function executeListFiles(args) {
187
- const dir = args.path || ".";
188
- if (!validatePath(dir))
189
- return `Error: path outside repository: ${dir}`;
190
- try {
191
- const entries = readdirSync(dir);
192
- const lines = [];
193
- for (const entry of entries.slice(0, 50)) {
194
- const fullPath = join(dir, entry);
195
- try {
196
- const st = statSync(fullPath);
197
- const type = st.isDirectory() ? "d" : "-";
198
- const size = st.isDirectory() ? "" : ` ${st.size}`;
199
- lines.push(`${type} ${entry}${size}`);
200
- }
201
- catch {
202
- lines.push(`? ${entry}`);
203
- }
204
- }
205
- return lines.join("\n") || `Empty directory: ${dir}`;
206
- }
207
- catch {
208
- return `Directory not found: ${dir}`;
209
- }
210
- }
211
- function executeGitShow(args) {
212
- const ref = sanitizeGitRef(args.ref);
213
- if (!ref)
214
- return "Error: invalid git ref";
215
- const result = execFileSafe("git", ["show", "--", ref], 200);
216
- return truncateResult(result || `Could not resolve: ${ref}`);
217
- }
218
- function executeGitBlame(args) {
219
- const filePath = args.path;
220
- if (!validatePath(filePath))
221
- return `Error: path outside repository: ${filePath}`;
222
- const lines = args.lines;
223
- const gitArgs = ["blame"];
224
- if (lines && /^\d+,\d+$/.test(lines)) {
225
- gitArgs.push(`-L`, lines);
226
- }
227
- gitArgs.push("--", filePath);
228
- const result = execFileSafe("git", gitArgs, 50);
229
- return result || `Could not blame: ${filePath}`;
230
- }
231
- /**
232
- * Sanitize a git ref string from LLM output.
233
- * Only allows safe git ref characters.
234
- */
235
- function sanitizeGitRef(ref) {
236
- if (!ref || ref.length > 200)
237
- return null;
238
- // Only allow alphanumeric, /, -, _, ~, ^, ., :
239
- const cleaned = ref.replace(/[^a-zA-Z0-9/_\-~^.:]/g, "");
240
- // Block shell metacharacters and path traversal attempts
241
- if (/\.\.\/|;\s|&&|\|\||`|\$\(/.test(cleaned))
242
- return null;
243
- return cleaned || null;
244
- }
245
- /**
246
- * Execute a command safely using execFileSync (no shell interpretation).
247
- * Optionally limits output to maxLines.
248
- */
249
- function execFileSafe(cmd, args, maxLines) {
250
- try {
251
- const raw = execFileSync(cmd, args, {
252
- encoding: "utf-8",
253
- maxBuffer: 512 * 1024,
254
- timeout: 10_000,
255
- }).trim();
256
- if (maxLines) {
257
- const lines = raw.split("\n");
258
- if (lines.length > maxLines) {
259
- return lines.slice(0, maxLines).join("\n") + `\n... (${lines.length - maxLines} more lines)`;
260
- }
261
- }
262
- return raw;
263
- }
264
- catch {
265
- return "";
266
- }
267
- }
268
- function truncateResult(text) {
269
- if (text.length <= MAX_TOOL_RESULT)
270
- return text;
271
- return text.slice(0, MAX_TOOL_RESULT) + "\n... (truncated)";
272
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * True when `target` is the root itself or a descendant of it. Uses the
3
- * platform separator (the old check hardcoded "/", which broke on Windows)
4
- * and avoids the sibling-prefix trap (/repo vs /repo-evil). Both inputs are
5
- * assumed already resolved to absolute paths.
6
- */
7
- export declare function isWithinRoot(root: string, target: string): boolean;
@@ -1,15 +0,0 @@
1
- import * as path from "node:path";
2
- /**
3
- * True when `target` is the root itself or a descendant of it. Uses the
4
- * platform separator (the old check hardcoded "/", which broke on Windows)
5
- * and avoids the sibling-prefix trap (/repo vs /repo-evil). Both inputs are
6
- * assumed already resolved to absolute paths.
7
- */
8
- export function isWithinRoot(root, target) {
9
- if (target === root)
10
- return true;
11
- const rel = path.relative(root, target);
12
- // Outside the root iff the relative path climbs out ("..") or is absolute
13
- // (different drive on Windows).
14
- return rel !== "" && !rel.startsWith("..") && !path.isAbsolute(rel);
15
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * Arena mode auto-detection — infer review/discussion/planning from topic text.
3
- *
4
- * Heuristic-based: uses keyword matching with weighted scoring.
5
- * Falls back to "review" (safest default) when confidence is low.
6
- */
7
- import type { ArenaMode } from "./types.js";
8
- /** Result of heuristic mode detection */
9
- export interface ArenaModeDetection {
10
- mode: ArenaMode;
11
- confidence: "high" | "low";
12
- reason: string;
13
- }
14
- /**
15
- * Auto-detect arena mode from the topic string.
16
- *
17
- * Returns the detected mode, confidence level, and a human-readable reason.
18
- * When confidence is low, falls back to "review" (the safest default).
19
- */
20
- export declare function detectArenaMode(topic: string): ArenaModeDetection;