@cjhyy/code-shell-core 0.5.0-rc.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 (484) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/dist/agent/coordinator.d.ts +49 -0
  4. package/dist/agent/coordinator.js +77 -0
  5. package/dist/arena/arena.d.ts +43 -0
  6. package/dist/arena/arena.js +334 -0
  7. package/dist/arena/context/context-tools.d.ts +16 -0
  8. package/dist/arena/context/context-tools.js +231 -0
  9. package/dist/arena/detect-mode.d.ts +20 -0
  10. package/dist/arena/detect-mode.js +78 -0
  11. package/dist/arena/digest-builder.d.ts +25 -0
  12. package/dist/arena/digest-builder.js +120 -0
  13. package/dist/arena/index.d.ts +29 -0
  14. package/dist/arena/index.js +29 -0
  15. package/dist/arena/iterate/convergence.d.ts +25 -0
  16. package/dist/arena/iterate/convergence.js +103 -0
  17. package/dist/arena/iterate/formats/index.d.ts +22 -0
  18. package/dist/arena/iterate/formats/index.js +283 -0
  19. package/dist/arena/iterate/index.d.ts +11 -0
  20. package/dist/arena/iterate/index.js +9 -0
  21. package/dist/arena/iterate/iterative-arena.d.ts +23 -0
  22. package/dist/arena/iterate/iterative-arena.js +237 -0
  23. package/dist/arena/iterate/parse.d.ts +42 -0
  24. package/dist/arena/iterate/parse.js +123 -0
  25. package/dist/arena/iterate/phases/argue.d.ts +22 -0
  26. package/dist/arena/iterate/phases/argue.js +159 -0
  27. package/dist/arena/iterate/phases/revise.d.ts +16 -0
  28. package/dist/arena/iterate/phases/revise.js +62 -0
  29. package/dist/arena/iterate/phases/tournament.d.ts +34 -0
  30. package/dist/arena/iterate/phases/tournament.js +113 -0
  31. package/dist/arena/iterate/tools/web-tools.d.ts +13 -0
  32. package/dist/arena/iterate/tools/web-tools.js +54 -0
  33. package/dist/arena/iterate/types.d.ts +152 -0
  34. package/dist/arena/iterate/types.js +8 -0
  35. package/dist/arena/ledger.d.ts +47 -0
  36. package/dist/arena/ledger.js +151 -0
  37. package/dist/arena/lenses/architecture.d.ts +5 -0
  38. package/dist/arena/lenses/architecture.js +22 -0
  39. package/dist/arena/lenses/engineering.d.ts +5 -0
  40. package/dist/arena/lenses/engineering.js +22 -0
  41. package/dist/arena/lenses/general.d.ts +5 -0
  42. package/dist/arena/lenses/general.js +20 -0
  43. package/dist/arena/lenses/index.d.ts +16 -0
  44. package/dist/arena/lenses/index.js +47 -0
  45. package/dist/arena/lenses/product.d.ts +5 -0
  46. package/dist/arena/lenses/product.js +22 -0
  47. package/dist/arena/model-presets.d.ts +23 -0
  48. package/dist/arena/model-presets.js +44 -0
  49. package/dist/arena/phases/adjudication.d.ts +24 -0
  50. package/dist/arena/phases/adjudication.js +144 -0
  51. package/dist/arena/phases/build-consensus.d.ts +29 -0
  52. package/dist/arena/phases/build-consensus.js +86 -0
  53. package/dist/arena/phases/claim-registry.d.ts +26 -0
  54. package/dist/arena/phases/claim-registry.js +60 -0
  55. package/dist/arena/phases/cross-review.d.ts +45 -0
  56. package/dist/arena/phases/cross-review.js +224 -0
  57. package/dist/arena/phases/debate-rounds.d.ts +27 -0
  58. package/dist/arena/phases/debate-rounds.js +162 -0
  59. package/dist/arena/phases/participant-research.d.ts +38 -0
  60. package/dist/arena/phases/participant-research.js +317 -0
  61. package/dist/arena/phases/planning-detail-expansion.d.ts +38 -0
  62. package/dist/arena/phases/planning-detail-expansion.js +121 -0
  63. package/dist/arena/planner.d.ts +27 -0
  64. package/dist/arena/planner.js +312 -0
  65. package/dist/arena/providers/docs.d.ts +6 -0
  66. package/dist/arena/providers/docs.js +108 -0
  67. package/dist/arena/providers/git.d.ts +8 -0
  68. package/dist/arena/providers/git.js +174 -0
  69. package/dist/arena/providers/index.d.ts +32 -0
  70. package/dist/arena/providers/index.js +132 -0
  71. package/dist/arena/providers/none.d.ts +7 -0
  72. package/dist/arena/providers/none.js +11 -0
  73. package/dist/arena/providers/repo.d.ts +6 -0
  74. package/dist/arena/providers/repo.js +255 -0
  75. package/dist/arena/render/session.d.ts +17 -0
  76. package/dist/arena/render/session.js +190 -0
  77. package/dist/arena/render/terminal.d.ts +34 -0
  78. package/dist/arena/render/terminal.js +286 -0
  79. package/dist/arena/strategies/discussion.d.ts +25 -0
  80. package/dist/arena/strategies/discussion.js +143 -0
  81. package/dist/arena/strategies/index.d.ts +15 -0
  82. package/dist/arena/strategies/index.js +28 -0
  83. package/dist/arena/strategies/language-wrapper.d.ts +17 -0
  84. package/dist/arena/strategies/language-wrapper.js +102 -0
  85. package/dist/arena/strategies/lens-wrapper.d.ts +16 -0
  86. package/dist/arena/strategies/lens-wrapper.js +236 -0
  87. package/dist/arena/strategies/planning.d.ts +30 -0
  88. package/dist/arena/strategies/planning.js +225 -0
  89. package/dist/arena/strategies/review.d.ts +26 -0
  90. package/dist/arena/strategies/review.js +168 -0
  91. package/dist/arena/strategies/utils.d.ts +39 -0
  92. package/dist/arena/strategies/utils.js +647 -0
  93. package/dist/arena/tools/selector.d.ts +17 -0
  94. package/dist/arena/tools/selector.js +61 -0
  95. package/dist/arena/transitions.d.ts +48 -0
  96. package/dist/arena/transitions.js +92 -0
  97. package/dist/arena/types.d.ts +508 -0
  98. package/dist/arena/types.js +27 -0
  99. package/dist/cli/agent-server-stdio.d.ts +32 -0
  100. package/dist/cli/agent-server-stdio.js +116 -0
  101. package/dist/colorizer.d.ts +23 -0
  102. package/dist/colorizer.js +12 -0
  103. package/dist/context/compaction.d.ts +116 -0
  104. package/dist/context/compaction.js +534 -0
  105. package/dist/context/manager.d.ts +145 -0
  106. package/dist/context/manager.js +423 -0
  107. package/dist/context/token-counter.d.ts +27 -0
  108. package/dist/context/token-counter.js +91 -0
  109. package/dist/context/tool-result-storage.d.ts +96 -0
  110. package/dist/context/tool-result-storage.js +296 -0
  111. package/dist/cost-tracker.d.ts +64 -0
  112. package/dist/cost-tracker.js +314 -0
  113. package/dist/cron/scheduler.d.ts +34 -0
  114. package/dist/cron/scheduler.js +115 -0
  115. package/dist/data/deepseek-models.json +46 -0
  116. package/dist/data/gemini-models.json +67 -0
  117. package/dist/data/openai-models.json +175 -0
  118. package/dist/data/openrouter-models.d.ts +35 -0
  119. package/dist/data/openrouter-models.js +36 -0
  120. package/dist/data/openrouter-models.json +4626 -0
  121. package/dist/data/openrouter-sync.d.ts +16 -0
  122. package/dist/data/openrouter-sync.js +53 -0
  123. package/dist/data/static-catalogs.d.ts +25 -0
  124. package/dist/data/static-catalogs.js +26 -0
  125. package/dist/data/zai-models.json +56 -0
  126. package/dist/engine/cost-store.d.ts +22 -0
  127. package/dist/engine/cost-store.js +15 -0
  128. package/dist/engine/engine.d.ts +295 -0
  129. package/dist/engine/engine.js +1467 -0
  130. package/dist/engine/model-facade.d.ts +24 -0
  131. package/dist/engine/model-facade.js +194 -0
  132. package/dist/engine/parse-task.d.ts +59 -0
  133. package/dist/engine/parse-task.js +135 -0
  134. package/dist/engine/patch-orphaned-tools.d.ts +52 -0
  135. package/dist/engine/patch-orphaned-tools.js +95 -0
  136. package/dist/engine/query.d.ts +50 -0
  137. package/dist/engine/query.js +107 -0
  138. package/dist/engine/runtime.d.ts +50 -0
  139. package/dist/engine/runtime.js +59 -0
  140. package/dist/engine/streaming-tool-queue.d.ts +34 -0
  141. package/dist/engine/streaming-tool-queue.js +61 -0
  142. package/dist/engine/token-budget.d.ts +22 -0
  143. package/dist/engine/token-budget.js +40 -0
  144. package/dist/engine/tool-summary.d.ts +13 -0
  145. package/dist/engine/tool-summary.js +35 -0
  146. package/dist/engine/turn-loop.d.ts +122 -0
  147. package/dist/engine/turn-loop.js +602 -0
  148. package/dist/engine/turn-state.d.ts +20 -0
  149. package/dist/engine/turn-state.js +17 -0
  150. package/dist/exceptions.d.ts +61 -0
  151. package/dist/exceptions.js +116 -0
  152. package/dist/git/utils.d.ts +35 -0
  153. package/dist/git/utils.js +98 -0
  154. package/dist/git/worktree.d.ts +36 -0
  155. package/dist/git/worktree.js +139 -0
  156. package/dist/hooks/events.d.ts +114 -0
  157. package/dist/hooks/events.js +4 -0
  158. package/dist/hooks/inject.d.ts +19 -0
  159. package/dist/hooks/inject.js +29 -0
  160. package/dist/hooks/registry.d.ts +15 -0
  161. package/dist/hooks/registry.js +84 -0
  162. package/dist/hooks/shell-runner.d.ts +45 -0
  163. package/dist/hooks/shell-runner.js +173 -0
  164. package/dist/index.d.ts +117 -0
  165. package/dist/index.js +145 -0
  166. package/dist/llm/api-key-sanitize.d.ts +22 -0
  167. package/dist/llm/api-key-sanitize.js +81 -0
  168. package/dist/llm/capabilities/index.d.ts +20 -0
  169. package/dist/llm/capabilities/index.js +39 -0
  170. package/dist/llm/capabilities/rules.d.ts +26 -0
  171. package/dist/llm/capabilities/rules.js +215 -0
  172. package/dist/llm/capabilities/types.d.ts +114 -0
  173. package/dist/llm/capabilities/types.js +24 -0
  174. package/dist/llm/client-base.d.ts +29 -0
  175. package/dist/llm/client-base.js +137 -0
  176. package/dist/llm/client-factory.d.ts +10 -0
  177. package/dist/llm/client-factory.js +29 -0
  178. package/dist/llm/model-cache.d.ts +21 -0
  179. package/dist/llm/model-cache.js +46 -0
  180. package/dist/llm/model-fetcher.d.ts +29 -0
  181. package/dist/llm/model-fetcher.js +282 -0
  182. package/dist/llm/model-pool.d.ts +95 -0
  183. package/dist/llm/model-pool.js +246 -0
  184. package/dist/llm/provider-catalog.d.ts +32 -0
  185. package/dist/llm/provider-catalog.js +50 -0
  186. package/dist/llm/provider-kinds.d.ts +21 -0
  187. package/dist/llm/provider-kinds.js +132 -0
  188. package/dist/llm/providers/anthropic.d.ts +19 -0
  189. package/dist/llm/providers/anthropic.js +267 -0
  190. package/dist/llm/providers/openai.d.ts +64 -0
  191. package/dist/llm/providers/openai.js +606 -0
  192. package/dist/llm/retry.d.ts +12 -0
  193. package/dist/llm/retry.js +17 -0
  194. package/dist/llm/stream-watchdog.d.ts +42 -0
  195. package/dist/llm/stream-watchdog.js +70 -0
  196. package/dist/llm/token-counter.d.ts +17 -0
  197. package/dist/llm/token-counter.js +36 -0
  198. package/dist/llm/types.d.ts +37 -0
  199. package/dist/llm/types.js +4 -0
  200. package/dist/logging/logger.d.ts +109 -0
  201. package/dist/logging/logger.js +390 -0
  202. package/dist/logging/sanitize-messages.d.ts +42 -0
  203. package/dist/logging/sanitize-messages.js +150 -0
  204. package/dist/logging/session-recorder.d.ts +90 -0
  205. package/dist/logging/session-recorder.js +304 -0
  206. package/dist/lsp/client.d.ts +41 -0
  207. package/dist/lsp/client.js +166 -0
  208. package/dist/lsp/manager.d.ts +40 -0
  209. package/dist/lsp/manager.js +124 -0
  210. package/dist/lsp/servers.d.ts +16 -0
  211. package/dist/lsp/servers.js +60 -0
  212. package/dist/migrate-models.d.ts +45 -0
  213. package/dist/migrate-models.js +179 -0
  214. package/dist/onboarding.d.ts +189 -0
  215. package/dist/onboarding.js +625 -0
  216. package/dist/plugins/gitOps.d.ts +32 -0
  217. package/dist/plugins/gitOps.js +62 -0
  218. package/dist/plugins/installedPlugins.d.ts +15 -0
  219. package/dist/plugins/installedPlugins.js +56 -0
  220. package/dist/plugins/knownMarketplaces.d.ts +10 -0
  221. package/dist/plugins/knownMarketplaces.js +46 -0
  222. package/dist/plugins/loadPluginHooks.d.ts +52 -0
  223. package/dist/plugins/loadPluginHooks.js +162 -0
  224. package/dist/plugins/marketplaceManager.d.ts +49 -0
  225. package/dist/plugins/marketplaceManager.js +142 -0
  226. package/dist/plugins/parseMarketplaceInput.d.ts +16 -0
  227. package/dist/plugins/parseMarketplaceInput.js +73 -0
  228. package/dist/plugins/pluginCommandHook.d.ts +54 -0
  229. package/dist/plugins/pluginCommandHook.js +180 -0
  230. package/dist/plugins/pluginCommandsLoader.d.ts +25 -0
  231. package/dist/plugins/pluginCommandsLoader.js +114 -0
  232. package/dist/plugins/pluginInstaller.d.ts +36 -0
  233. package/dist/plugins/pluginInstaller.js +228 -0
  234. package/dist/plugins/schemas.d.ts +9 -0
  235. package/dist/plugins/schemas.js +136 -0
  236. package/dist/plugins/types.d.ts +75 -0
  237. package/dist/plugins/types.js +7 -0
  238. package/dist/plugins/varRewrite.d.ts +42 -0
  239. package/dist/plugins/varRewrite.js +129 -0
  240. package/dist/preset/index.d.ts +60 -0
  241. package/dist/preset/index.js +159 -0
  242. package/dist/product/define.d.ts +60 -0
  243. package/dist/product/define.js +123 -0
  244. package/dist/product/index.d.ts +5 -0
  245. package/dist/product/index.js +4 -0
  246. package/dist/product/types.d.ts +111 -0
  247. package/dist/product/types.js +21 -0
  248. package/dist/prompt/composer.d.ts +49 -0
  249. package/dist/prompt/composer.js +168 -0
  250. package/dist/prompt/instruction-scanner.d.ts +54 -0
  251. package/dist/prompt/instruction-scanner.js +187 -0
  252. package/dist/prompt/section-cache.d.ts +15 -0
  253. package/dist/prompt/section-cache.js +31 -0
  254. package/dist/prompt/section-loader.d.ts +26 -0
  255. package/dist/prompt/section-loader.js +53 -0
  256. package/dist/prompt/sections/base.md +35 -0
  257. package/dist/prompt/sections/coding.md +31 -0
  258. package/dist/prompt/sections/orchestration.md +16 -0
  259. package/dist/prompt/sections/tone.md +9 -0
  260. package/dist/protocol/chat-session-manager.d.ts +33 -0
  261. package/dist/protocol/chat-session-manager.js +65 -0
  262. package/dist/protocol/chat-session.d.ts +49 -0
  263. package/dist/protocol/chat-session.js +86 -0
  264. package/dist/protocol/client.d.ts +104 -0
  265. package/dist/protocol/client.js +260 -0
  266. package/dist/protocol/factories.d.ts +93 -0
  267. package/dist/protocol/factories.js +64 -0
  268. package/dist/protocol/helpers.d.ts +42 -0
  269. package/dist/protocol/helpers.js +55 -0
  270. package/dist/protocol/index.d.ts +4 -0
  271. package/dist/protocol/index.js +4 -0
  272. package/dist/protocol/server.d.ts +80 -0
  273. package/dist/protocol/server.js +855 -0
  274. package/dist/protocol/transport.d.ts +37 -0
  275. package/dist/protocol/transport.js +85 -0
  276. package/dist/protocol/types.d.ts +221 -0
  277. package/dist/protocol/types.js +61 -0
  278. package/dist/remote/bridge.d.ts +37 -0
  279. package/dist/remote/bridge.js +103 -0
  280. package/dist/run/ArtifactTracker.d.ts +38 -0
  281. package/dist/run/ArtifactTracker.js +132 -0
  282. package/dist/run/CheckpointWriter.d.ts +53 -0
  283. package/dist/run/CheckpointWriter.js +135 -0
  284. package/dist/run/EngineRunner.d.ts +72 -0
  285. package/dist/run/EngineRunner.js +119 -0
  286. package/dist/run/Evaluator.d.ts +56 -0
  287. package/dist/run/Evaluator.js +62 -0
  288. package/dist/run/FileRunStore.d.ts +39 -0
  289. package/dist/run/FileRunStore.js +176 -0
  290. package/dist/run/Heartbeat.d.ts +54 -0
  291. package/dist/run/Heartbeat.js +123 -0
  292. package/dist/run/RunApprovalBackend.d.ts +53 -0
  293. package/dist/run/RunApprovalBackend.js +85 -0
  294. package/dist/run/RunLock.d.ts +40 -0
  295. package/dist/run/RunLock.js +98 -0
  296. package/dist/run/RunManager.d.ts +82 -0
  297. package/dist/run/RunManager.js +587 -0
  298. package/dist/run/RunQueue.d.ts +27 -0
  299. package/dist/run/RunQueue.js +73 -0
  300. package/dist/run/RunStore.d.ts +25 -0
  301. package/dist/run/RunStore.js +9 -0
  302. package/dist/run/factory.d.ts +63 -0
  303. package/dist/run/factory.js +51 -0
  304. package/dist/run/index.d.ts +17 -0
  305. package/dist/run/index.js +23 -0
  306. package/dist/run/types.d.ts +136 -0
  307. package/dist/run/types.js +28 -0
  308. package/dist/runtime/safe-spawn.d.ts +118 -0
  309. package/dist/runtime/safe-spawn.js +268 -0
  310. package/dist/services/analytics.d.ts +29 -0
  311. package/dist/services/analytics.js +84 -0
  312. package/dist/services/auto-dream.d.ts +49 -0
  313. package/dist/services/auto-dream.js +124 -0
  314. package/dist/services/diagnostics.d.ts +41 -0
  315. package/dist/services/diagnostics.js +99 -0
  316. package/dist/services/extract-memories.d.ts +31 -0
  317. package/dist/services/extract-memories.js +71 -0
  318. package/dist/services/index.d.ts +11 -0
  319. package/dist/services/index.js +17 -0
  320. package/dist/services/memory-orchestrator.d.ts +60 -0
  321. package/dist/services/memory-orchestrator.js +133 -0
  322. package/dist/services/notifier.d.ts +25 -0
  323. package/dist/services/notifier.js +69 -0
  324. package/dist/services/oauth.d.ts +27 -0
  325. package/dist/services/oauth.js +153 -0
  326. package/dist/services/session-memory.d.ts +37 -0
  327. package/dist/services/session-memory.js +81 -0
  328. package/dist/session/file-history.d.ts +41 -0
  329. package/dist/session/file-history.js +115 -0
  330. package/dist/session/memory.d.ts +104 -0
  331. package/dist/session/memory.js +310 -0
  332. package/dist/session/session-manager.d.ts +41 -0
  333. package/dist/session/session-manager.js +261 -0
  334. package/dist/session/transcript.d.ts +39 -0
  335. package/dist/session/transcript.js +186 -0
  336. package/dist/settings/manager.d.ts +36 -0
  337. package/dist/settings/manager.js +187 -0
  338. package/dist/settings/schema.d.ts +1219 -0
  339. package/dist/settings/schema.js +246 -0
  340. package/dist/skills/frontmatter.d.ts +13 -0
  341. package/dist/skills/frontmatter.js +70 -0
  342. package/dist/skills/index.d.ts +7 -0
  343. package/dist/skills/index.js +6 -0
  344. package/dist/skills/scanner.d.ts +31 -0
  345. package/dist/skills/scanner.js +171 -0
  346. package/dist/state.d.ts +160 -0
  347. package/dist/state.js +267 -0
  348. package/dist/tool-system/builtin/agent-notifications.d.ts +84 -0
  349. package/dist/tool-system/builtin/agent-notifications.js +197 -0
  350. package/dist/tool-system/builtin/agent-registry.d.ts +67 -0
  351. package/dist/tool-system/builtin/agent-registry.js +126 -0
  352. package/dist/tool-system/builtin/agent-transcript-translator.d.ts +22 -0
  353. package/dist/tool-system/builtin/agent-transcript-translator.js +160 -0
  354. package/dist/tool-system/builtin/agent.d.ts +16 -0
  355. package/dist/tool-system/builtin/agent.js +364 -0
  356. package/dist/tool-system/builtin/apply-patch/applier.d.ts +26 -0
  357. package/dist/tool-system/builtin/apply-patch/applier.js +250 -0
  358. package/dist/tool-system/builtin/apply-patch/index.d.ts +20 -0
  359. package/dist/tool-system/builtin/apply-patch/index.js +101 -0
  360. package/dist/tool-system/builtin/apply-patch/parser.d.ts +17 -0
  361. package/dist/tool-system/builtin/apply-patch/parser.js +212 -0
  362. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +18 -0
  363. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +123 -0
  364. package/dist/tool-system/builtin/apply-patch/types.d.ts +49 -0
  365. package/dist/tool-system/builtin/apply-patch/types.js +13 -0
  366. package/dist/tool-system/builtin/arena.d.ts +31 -0
  367. package/dist/tool-system/builtin/arena.js +416 -0
  368. package/dist/tool-system/builtin/ask-user.d.ts +20 -0
  369. package/dist/tool-system/builtin/ask-user.js +99 -0
  370. package/dist/tool-system/builtin/bash.d.ts +21 -0
  371. package/dist/tool-system/builtin/bash.js +149 -0
  372. package/dist/tool-system/builtin/brief.d.ts +6 -0
  373. package/dist/tool-system/builtin/brief.js +41 -0
  374. package/dist/tool-system/builtin/config.d.ts +6 -0
  375. package/dist/tool-system/builtin/config.js +67 -0
  376. package/dist/tool-system/builtin/cron.d.ts +10 -0
  377. package/dist/tool-system/builtin/cron.js +61 -0
  378. package/dist/tool-system/builtin/edit.d.ts +6 -0
  379. package/dist/tool-system/builtin/edit.js +100 -0
  380. package/dist/tool-system/builtin/file-cache.d.ts +11 -0
  381. package/dist/tool-system/builtin/file-cache.js +39 -0
  382. package/dist/tool-system/builtin/glob.d.ts +7 -0
  383. package/dist/tool-system/builtin/glob.js +76 -0
  384. package/dist/tool-system/builtin/grep.d.ts +7 -0
  385. package/dist/tool-system/builtin/grep.js +150 -0
  386. package/dist/tool-system/builtin/index.d.ts +20 -0
  387. package/dist/tool-system/builtin/index.js +449 -0
  388. package/dist/tool-system/builtin/lsp.d.ts +6 -0
  389. package/dist/tool-system/builtin/lsp.js +141 -0
  390. package/dist/tool-system/builtin/mcp-tools.d.ts +10 -0
  391. package/dist/tool-system/builtin/mcp-tools.js +102 -0
  392. package/dist/tool-system/builtin/memory.d.ts +26 -0
  393. package/dist/tool-system/builtin/memory.js +226 -0
  394. package/dist/tool-system/builtin/notebook-edit.d.ts +6 -0
  395. package/dist/tool-system/builtin/notebook-edit.js +124 -0
  396. package/dist/tool-system/builtin/plan.d.ts +15 -0
  397. package/dist/tool-system/builtin/plan.js +55 -0
  398. package/dist/tool-system/builtin/powershell.d.ts +11 -0
  399. package/dist/tool-system/builtin/powershell.js +64 -0
  400. package/dist/tool-system/builtin/read.d.ts +6 -0
  401. package/dist/tool-system/builtin/read.js +70 -0
  402. package/dist/tool-system/builtin/remote-trigger.d.ts +6 -0
  403. package/dist/tool-system/builtin/remote-trigger.js +54 -0
  404. package/dist/tool-system/builtin/repl.d.ts +11 -0
  405. package/dist/tool-system/builtin/repl.js +82 -0
  406. package/dist/tool-system/builtin/send-message.d.ts +6 -0
  407. package/dist/tool-system/builtin/send-message.js +47 -0
  408. package/dist/tool-system/builtin/skill-prompt.d.ts +20 -0
  409. package/dist/tool-system/builtin/skill-prompt.js +52 -0
  410. package/dist/tool-system/builtin/skill.d.ts +9 -0
  411. package/dist/tool-system/builtin/skill.js +55 -0
  412. package/dist/tool-system/builtin/sleep.d.ts +6 -0
  413. package/dist/tool-system/builtin/sleep.js +33 -0
  414. package/dist/tool-system/builtin/task.d.ts +48 -0
  415. package/dist/tool-system/builtin/task.js +139 -0
  416. package/dist/tool-system/builtin/tool-search.d.ts +11 -0
  417. package/dist/tool-system/builtin/tool-search.js +90 -0
  418. package/dist/tool-system/builtin/web-fetch.d.ts +10 -0
  419. package/dist/tool-system/builtin/web-fetch.js +328 -0
  420. package/dist/tool-system/builtin/web-search.d.ts +25 -0
  421. package/dist/tool-system/builtin/web-search.js +174 -0
  422. package/dist/tool-system/builtin/worktree.d.ts +10 -0
  423. package/dist/tool-system/builtin/worktree.js +95 -0
  424. package/dist/tool-system/builtin/write.d.ts +6 -0
  425. package/dist/tool-system/builtin/write.js +36 -0
  426. package/dist/tool-system/context.d.ts +165 -0
  427. package/dist/tool-system/context.js +18 -0
  428. package/dist/tool-system/executor.d.ts +49 -0
  429. package/dist/tool-system/executor.js +495 -0
  430. package/dist/tool-system/investigation-guard.d.ts +46 -0
  431. package/dist/tool-system/investigation-guard.js +155 -0
  432. package/dist/tool-system/mcp-manager.d.ts +67 -0
  433. package/dist/tool-system/mcp-manager.js +249 -0
  434. package/dist/tool-system/permission.d.ts +111 -0
  435. package/dist/tool-system/permission.js +774 -0
  436. package/dist/tool-system/registry.d.ts +32 -0
  437. package/dist/tool-system/registry.js +131 -0
  438. package/dist/tool-system/sandbox/bwrap.d.ts +13 -0
  439. package/dist/tool-system/sandbox/bwrap.js +63 -0
  440. package/dist/tool-system/sandbox/index.d.ts +78 -0
  441. package/dist/tool-system/sandbox/index.js +222 -0
  442. package/dist/tool-system/sandbox/off.d.ts +2 -0
  443. package/dist/tool-system/sandbox/off.js +8 -0
  444. package/dist/tool-system/sandbox/seatbelt.d.ts +18 -0
  445. package/dist/tool-system/sandbox/seatbelt.js +109 -0
  446. package/dist/tool-system/task-guard.d.ts +29 -0
  447. package/dist/tool-system/task-guard.js +70 -0
  448. package/dist/tool-system/validation.d.ts +5 -0
  449. package/dist/tool-system/validation.js +39 -0
  450. package/dist/types.d.ts +376 -0
  451. package/dist/types.js +4 -0
  452. package/dist/updater.d.ts +65 -0
  453. package/dist/updater.js +405 -0
  454. package/dist/utils/debug.d.ts +41 -0
  455. package/dist/utils/debug.js +110 -0
  456. package/dist/utils/earlyInput.d.ts +43 -0
  457. package/dist/utils/earlyInput.js +166 -0
  458. package/dist/utils/env.d.ts +24 -0
  459. package/dist/utils/env.js +104 -0
  460. package/dist/utils/envUtils.d.ts +51 -0
  461. package/dist/utils/envUtils.js +135 -0
  462. package/dist/utils/execFileNoThrow.d.ts +39 -0
  463. package/dist/utils/execFileNoThrow.js +74 -0
  464. package/dist/utils/format.d.ts +44 -0
  465. package/dist/utils/format.js +236 -0
  466. package/dist/utils/intl.d.ts +22 -0
  467. package/dist/utils/intl.js +83 -0
  468. package/dist/utils/lockfile.d.ts +15 -0
  469. package/dist/utils/lockfile.js +30 -0
  470. package/dist/utils/memoize.d.ts +19 -0
  471. package/dist/utils/memoize.js +14 -0
  472. package/dist/utils/semver.d.ts +6 -0
  473. package/dist/utils/semver.js +13 -0
  474. package/dist/utils/sliceAnsi.d.ts +12 -0
  475. package/dist/utils/sliceAnsi.js +62 -0
  476. package/dist/utils/systemTheme.d.ts +40 -0
  477. package/dist/utils/systemTheme.js +108 -0
  478. package/dist/utils/task-sanitizer.d.ts +6 -0
  479. package/dist/utils/task-sanitizer.js +24 -0
  480. package/dist/utils/theme.d.ts +93 -0
  481. package/dist/utils/theme.js +544 -0
  482. package/dist/utils/toolDisplay.d.ts +31 -0
  483. package/dist/utils/toolDisplay.js +188 -0
  484. package/package.json +72 -0
@@ -0,0 +1,508 @@
1
+ /**
2
+ * Arena types — multi-model review, discussion, and planning.
3
+ *
4
+ * V2 architecture: shared facts → independent research → findings → cross-review → consensus.
5
+ */
6
+ import type { LLMConfig } from "../types.js";
7
+ /** Arena operating mode — determines prompts, output format, and default rounds */
8
+ export type ArenaMode = "review" | "discussion" | "planning";
9
+ /** Analysis lens — the perspective from which participants analyze */
10
+ export type ArenaLensName = "engineering" | "product" | "architecture" | "general";
11
+ /** Lens reference with optional weight for multi-lens scenarios */
12
+ export interface ArenaLensRef {
13
+ name: ArenaLensName;
14
+ weight?: number;
15
+ }
16
+ /** A lens defines roles, criteria, and emphasis for a given perspective */
17
+ export interface ArenaLens {
18
+ name: ArenaLensName;
19
+ label: string;
20
+ participantRole: string;
21
+ reviewerRole: string;
22
+ moderatorRole: string;
23
+ summaryLabel: string;
24
+ criteria: string[];
25
+ preferredFindingKinds: FindingKind[];
26
+ }
27
+ /** Evidence source kind — where to collect facts */
28
+ export type ArenaSourceKind = "git" | "repo" | "docs" | "web" | "none";
29
+ /** Source specification with optional targets and tool pack */
30
+ export interface ArenaSourceSpec {
31
+ kind: ArenaSourceKind;
32
+ targets?: string[];
33
+ toolPack?: string;
34
+ }
35
+ /** Subject of the arena session */
36
+ export interface ArenaSubject {
37
+ kind: "changes" | "files" | "docs" | "topic" | "mixed";
38
+ label: string;
39
+ targets?: string[];
40
+ }
41
+ /** Output shape hints for rendering */
42
+ export interface ArenaOutputShape {
43
+ overviewLabel: string;
44
+ emphasize: Array<"strength" | "improvement" | "risk" | "question">;
45
+ }
46
+ /** The full plan produced by the Planner — drives the entire pipeline */
47
+ export interface ArenaPlan {
48
+ mode: ArenaMode;
49
+ lenses: ArenaLensRef[];
50
+ sources: ArenaSourceSpec[];
51
+ subject: ArenaSubject;
52
+ outputShape: ArenaOutputShape;
53
+ confidence: "high" | "medium" | "low";
54
+ followUpQuestion?: string;
55
+ }
56
+ /** Unified artifact — all providers output this, replacing codeFacts/gitFacts split */
57
+ export interface ArenaArtifact {
58
+ id: string;
59
+ kind: "diff" | "file" | "tree" | "grep" | "doc" | "web";
60
+ source: ArenaSourceKind;
61
+ title: string;
62
+ ref?: string;
63
+ preview: string;
64
+ metadata?: Record<string, unknown>;
65
+ }
66
+ /** Tool pack — a named set of tools available during research */
67
+ export interface ArenaToolPack {
68
+ name: string;
69
+ toolNames: string[];
70
+ }
71
+ /** Context provider interface — collects evidence from a source */
72
+ export interface ArenaContextProvider {
73
+ kind: ArenaSourceKind;
74
+ collect(plan: ArenaPlan, topic: string): ArenaArtifact[] | Promise<ArenaArtifact[]>;
75
+ }
76
+ /** Quick fact — high-signal summary entry */
77
+ export interface ArenaQuickFact {
78
+ label: string;
79
+ value: string;
80
+ }
81
+ /** Default max discussion rounds per mode */
82
+ export declare const ARENA_MODE_DEFAULTS: Record<ArenaMode, {
83
+ maxDiscussionRounds: number;
84
+ convergenceThreshold: number;
85
+ }>;
86
+ /** A participant in the arena (a model instance) */
87
+ export interface ArenaParticipant {
88
+ /** Display name, e.g. "Claude Sonnet", "GPT-4o" */
89
+ name: string;
90
+ /** LLM config for this participant */
91
+ llm: LLMConfig;
92
+ }
93
+ export interface ArenaBaseContext {
94
+ /** Evidence-driven plan that drives the session */
95
+ plan: ArenaPlan;
96
+ /** Unified artifacts from all providers */
97
+ artifacts: ArenaArtifact[];
98
+ /** High-signal summary facts */
99
+ quickFacts: ArenaQuickFact[];
100
+ }
101
+ export type FindingKind = "strength" | "improvement" | "risk" | "question";
102
+ export interface ArenaFinding {
103
+ id: string;
104
+ kind: FindingKind;
105
+ title: string;
106
+ summary: string;
107
+ severity?: "high" | "medium" | "low";
108
+ confidence: number;
109
+ evidence: Array<{
110
+ type: "file" | "diff" | "grep" | "git" | "doc";
111
+ ref: string;
112
+ note: string;
113
+ }>;
114
+ affectedFiles: string[];
115
+ suggestedChange?: string;
116
+ }
117
+ export interface ParticipantContextRequest {
118
+ participant: string;
119
+ requests: Array<{
120
+ tool: string;
121
+ reason: string;
122
+ args: Record<string, unknown>;
123
+ }>;
124
+ }
125
+ export interface ParticipantReport {
126
+ participant: string;
127
+ contextSummary: string;
128
+ findings: ArenaFinding[];
129
+ }
130
+ /** Record of a single tool invocation during research or review */
131
+ export interface ToolTrace {
132
+ round: number;
133
+ toolName: string;
134
+ args: Record<string, unknown>;
135
+ resultRef?: string;
136
+ keptAsEvidence?: boolean;
137
+ }
138
+ /** A discrete packet of evidence collected during research or review */
139
+ export interface EvidencePacket {
140
+ packetId: string;
141
+ participant: string;
142
+ source: ArenaSourceKind;
143
+ title: string;
144
+ refs: string[];
145
+ summary: string;
146
+ excerpts: Array<{
147
+ ref: string;
148
+ snippet: string;
149
+ note: string;
150
+ }>;
151
+ }
152
+ /** Explicit link between a finding and its supporting evidence packets */
153
+ export interface FindingEvidenceLink {
154
+ findingId: string;
155
+ evidencePacketIds: string[];
156
+ }
157
+ /** Full research output — preserves evidence trail alongside findings */
158
+ export interface ResearchDossier {
159
+ participant: string;
160
+ contextSummary: string;
161
+ findings: ArenaFinding[];
162
+ toolTrace: ToolTrace[];
163
+ evidencePackets: EvidencePacket[];
164
+ findingEvidenceLinks: FindingEvidenceLink[];
165
+ }
166
+ export type PeerVerdict = "agree" | "refine" | "disagree" | "needs_evidence";
167
+ export type ClaimStatus = "proposed" | "under_review" | "contested" | "verified" | "rejected" | "unresolved";
168
+ export interface RequestedCheck {
169
+ requestId: string;
170
+ claimId: string;
171
+ requester: string;
172
+ description: string;
173
+ refs?: string[];
174
+ priority?: "high" | "medium" | "low";
175
+ }
176
+ export interface ClaimChallenge {
177
+ reviewer: string;
178
+ claimId: string;
179
+ verdict: PeerVerdict;
180
+ reason: string;
181
+ supportingEvidenceRefs?: string[];
182
+ requestedChecks?: RequestedCheck[];
183
+ }
184
+ export interface DebateTurn {
185
+ participant: string;
186
+ stance: "support" | "oppose" | "narrow" | "uncertain";
187
+ summary: string;
188
+ newEvidenceRefs?: string[];
189
+ }
190
+ export interface DebateRound {
191
+ round: number;
192
+ claimId: string;
193
+ participants: DebateTurn[];
194
+ resolved: boolean;
195
+ resolutionNote?: string;
196
+ }
197
+ export interface ClaimAdjudication {
198
+ claimId: string;
199
+ outcome: "accepted" | "accepted_with_revision" | "rejected" | "unresolved";
200
+ rationale: string;
201
+ finalSummary: string;
202
+ supportingEvidenceRefs: string[];
203
+ }
204
+ /** The minimum unit of debate — a finding elevated to a trackable claim */
205
+ export interface ClaimRecord {
206
+ claimId: string;
207
+ owner: string;
208
+ finding: ArenaFinding;
209
+ evidenceRefs: string[];
210
+ evidencePacketIds: string[];
211
+ status: ClaimStatus;
212
+ challenges: ClaimChallenge[];
213
+ debateRounds: DebateRound[];
214
+ adjudication?: ClaimAdjudication;
215
+ }
216
+ /** Append-only shared state across all rounds of research, review, debate */
217
+ export interface SharedResearchLedger {
218
+ dossiers: ResearchDossier[];
219
+ evidencePackets: EvidencePacket[];
220
+ toolTraces: ToolTrace[];
221
+ claims: ClaimRecord[];
222
+ challenges: ClaimChallenge[];
223
+ requestedChecks: RequestedCheck[];
224
+ adjudications: ClaimAdjudication[];
225
+ }
226
+ /** Per-round digest — a filtered view of the ledger for prompt injection */
227
+ export interface RoundResearchDigest {
228
+ round: number;
229
+ relevantClaimIds: string[];
230
+ evidencePackets: EvidencePacket[];
231
+ toolTraceSummary: Array<{
232
+ participant: string;
233
+ toolName: string;
234
+ ref?: string;
235
+ }>;
236
+ recentChallenges: ClaimChallenge[];
237
+ requestedChecks: RequestedCheck[];
238
+ priorAdjudications: ClaimAdjudication[];
239
+ }
240
+ /** Task for executing a targeted re-research check */
241
+ export interface TargetedCheckTask {
242
+ request: RequestedCheck;
243
+ assignee: string;
244
+ status: "pending" | "running" | "done" | "skipped";
245
+ producedPacketIds: string[];
246
+ }
247
+ /** Global caps to prevent cost explosion in review/debate phases */
248
+ export interface ArenaExecutionLimits {
249
+ maxClaimsForReview: number;
250
+ maxContestedClaimsForDebate: number;
251
+ maxRequestedChecksPerClaimPerRound: number;
252
+ maxReviewersPerClaim: number;
253
+ /** Max roadmap phases in planning mode */
254
+ maxRoadmapPhases: number;
255
+ /** Max phases to expand with detail in planning mode */
256
+ maxExpandedPhasesPerRun: number;
257
+ }
258
+ export declare const DEFAULT_EXECUTION_LIMITS: ArenaExecutionLimits;
259
+ export interface FindingReview {
260
+ reviewer: string;
261
+ findingId: string;
262
+ verdict: PeerVerdict;
263
+ reason: string;
264
+ extraEvidence?: string[];
265
+ }
266
+ export interface ArenaConsensusItem {
267
+ title: string;
268
+ summary: string;
269
+ support: string[];
270
+ challenge: string[];
271
+ confidence: number;
272
+ evidenceRefs: string[];
273
+ }
274
+ export interface ArenaRoadmapPhase {
275
+ title: string;
276
+ priority: "high" | "medium" | "low";
277
+ goal: string;
278
+ scope: string[];
279
+ deliverables: string[];
280
+ dependencies: string[];
281
+ risks: string[];
282
+ successCriteria: string[];
283
+ relatedFindings: string[];
284
+ }
285
+ /** Repo-level implementation detail for a roadmap phase (planning mode) */
286
+ export interface ArenaRoadmapPhaseDetail {
287
+ phaseTitle: string;
288
+ objective: string;
289
+ targetFiles: string[];
290
+ codeChanges: string[];
291
+ interfaces: string[];
292
+ migrationSteps: string[];
293
+ validation: string[];
294
+ effort: "small" | "medium" | "large";
295
+ blockers: string[];
296
+ evidenceRefs: string[];
297
+ }
298
+ export interface ArenaConsensus {
299
+ /** Overall assessment */
300
+ summary: string;
301
+ /** Subject summary — rendered as "What Changed" / "Current Scope" / "Problem Framing" per mode */
302
+ subjectSummary?: string;
303
+ strengths: ArenaConsensusItem[];
304
+ improvements: ArenaConsensusItem[];
305
+ risks: ArenaConsensusItem[];
306
+ openQuestions: ArenaConsensusItem[];
307
+ roadmap: ArenaRoadmapPhase[];
308
+ /** Repo-level implementation details per roadmap phase (planning mode) */
309
+ roadmapDetails?: ArenaRoadmapPhaseDetail[];
310
+ nextActions: Array<{
311
+ title: string;
312
+ priority: "high" | "medium" | "low";
313
+ rationale: string;
314
+ relatedFindings: string[];
315
+ }>;
316
+ }
317
+ export interface ArenaResultV2 {
318
+ topic: string;
319
+ mode: ArenaMode;
320
+ participants: string[];
321
+ plan: ArenaPlan;
322
+ baseContext: ArenaBaseContext;
323
+ reports: ParticipantReport[];
324
+ /** Research dossiers with evidence trails (Phase 3+) */
325
+ dossiers?: ResearchDossier[];
326
+ /** Registered claims derived from findings (Phase 3+) */
327
+ claims?: ClaimRecord[];
328
+ reviews: FindingReview[];
329
+ /** Debate rounds for contested claims (Phase 3+) */
330
+ debateRounds?: DebateRound[];
331
+ /** Claim adjudications (Phase 3+) */
332
+ adjudications?: ClaimAdjudication[];
333
+ consensus: ArenaConsensus;
334
+ }
335
+ /**
336
+ * ArenaStrategy — encapsulates mode-specific behavior for prompts and parsing.
337
+ *
338
+ * V2 strategies produce structured findings instead of free-text opinions.
339
+ */
340
+ export interface ArenaStrategy {
341
+ /** Build the system prompt for participant research phase */
342
+ researchSystemPrompt(participantName: string): string;
343
+ /** Build the user prompt for participant research, given base context */
344
+ researchUserPrompt(topic: string, baseContext: ArenaBaseContext): string;
345
+ /** Parse participant research response into structured report */
346
+ parseResearchResponse(participant: string, text: string): ParticipantReport;
347
+ /** Build the system prompt for cross-review phase */
348
+ crossReviewSystemPrompt(reviewerName: string): string;
349
+ /** Build the user prompt for cross-reviewing other participants' findings */
350
+ crossReviewUserPrompt(topic: string, myReport: ParticipantReport, otherReports: ParticipantReport[]): string;
351
+ /** Parse cross-review response into finding reviews */
352
+ parseCrossReviewResponse(reviewer: string, text: string): FindingReview[];
353
+ /** Build the system prompt for consensus building */
354
+ consensusSystemPrompt(): string;
355
+ /** Build the user prompt for consensus building */
356
+ consensusUserPrompt(topic: string, reports: ParticipantReport[], reviews: FindingReview[]): string;
357
+ /** Parse consensus response */
358
+ parseConsensusResponse(text: string): ArenaConsensus;
359
+ /** Finding kinds this mode emphasizes */
360
+ preferredFindingKinds(): FindingKind[];
361
+ }
362
+ /**
363
+ * ArenaStrategyV2 — extends ArenaStrategy with claim-aware prompt methods.
364
+ *
365
+ * Strategies implementing V2 participate in the full evidence-driven loop:
366
+ * verification review, debate, adjudication, and claim-aware consensus.
367
+ *
368
+ * Strategies that only implement ArenaStrategy continue to work via
369
+ * automatic fallback paths in each phase.
370
+ */
371
+ export interface ArenaStrategyV2 extends ArenaStrategy {
372
+ /** Build verification-review user prompt with claim data and digest */
373
+ verificationReviewUserPrompt(topic: string, myReport: ParticipantReport, claimsToReview: ClaimRecord[], digest: RoundResearchDigest): string;
374
+ /** Parse verification review into ClaimChallenge records */
375
+ parseVerificationReviewResponse(reviewer: string, text: string): ClaimChallenge[];
376
+ /** Build debate turn prompt for a participant on a specific claim */
377
+ debateTurnUserPrompt(topic: string, claim: ClaimRecord, priorTurns: DebateTurn[], digest: RoundResearchDigest): string;
378
+ /** Parse a debate turn response */
379
+ parseDebateTurnResponse(participant: string, text: string): DebateTurn;
380
+ /** Build adjudication prompt for the moderator */
381
+ adjudicationUserPrompt(topic: string, claim: ClaimRecord, debateRounds: DebateRound[], digest: RoundResearchDigest): string;
382
+ /** Parse adjudication response */
383
+ parseAdjudicationResponse(text: string): ClaimAdjudication;
384
+ /** Build claim-aware consensus prompt */
385
+ claimAwareConsensusUserPrompt(topic: string, reports: ParticipantReport[], reviews: FindingReview[], claimSummary: ClaimStatusSummary): string;
386
+ }
387
+ /**
388
+ * ArenaStrategyPlanning — extends ArenaStrategyV2 with planning-specific methods.
389
+ *
390
+ * Strategies implementing this participate in the planning-specific flow:
391
+ * merge-oriented review and detail expansion.
392
+ */
393
+ export interface ArenaStrategyPlanning extends ArenaStrategyV2 {
394
+ /** Build merge-oriented review prompt for planning mode */
395
+ mergeReviewUserPrompt(topic: string, myReport: ParticipantReport, claimsToReview: ClaimRecord[], digest: RoundResearchDigest): string;
396
+ /** Parse merge-review response into challenges with planning semantics */
397
+ parseMergeReviewResponse(reviewer: string, text: string): ClaimChallenge[];
398
+ /** Build detail expansion system prompt */
399
+ detailExpansionSystemPrompt(): string;
400
+ /** Build detail expansion user prompt for a single roadmap phase */
401
+ detailExpansionUserPrompt(topic: string, phase: ArenaRoadmapPhase, digest: RoundResearchDigest): string;
402
+ /** Parse detail expansion response */
403
+ parseDetailExpansionResponse(text: string): ArenaRoadmapPhaseDetail;
404
+ }
405
+ /** Type guard: does a strategy implement ArenaStrategyPlanning? */
406
+ export declare function isStrategyPlanning(s: ArenaStrategy): s is ArenaStrategyPlanning;
407
+ /** Grouped claims by terminal status — used in claim-aware consensus */
408
+ export interface ClaimStatusSummary {
409
+ verified: ClaimRecord[];
410
+ contested: ClaimRecord[];
411
+ unresolved: ClaimRecord[];
412
+ rejected: ClaimRecord[];
413
+ }
414
+ /** Type guard: does a strategy implement ArenaStrategyV2? */
415
+ export declare function isStrategyV2(s: ArenaStrategy): s is ArenaStrategyV2;
416
+ /** Arena configuration */
417
+ export interface ArenaConfig {
418
+ /** Participants (models) in the arena */
419
+ participants: ArenaParticipant[];
420
+ /** Arena mode (default: "review") */
421
+ mode?: ArenaMode;
422
+ /** Maximum discussion rounds after initial opinions (overrides mode default if set) */
423
+ maxDiscussionRounds?: number;
424
+ /** Which participant generates the final conclusion (default: first) */
425
+ concluder?: string;
426
+ /** Optional custom strategy — overrides mode-based strategy selection */
427
+ strategy?: ArenaStrategy;
428
+ /**
429
+ * Enable read-only context tools (read_file, grep_code, list_files) during
430
+ * participant research. Participants can request additional source context.
431
+ */
432
+ enableContextTools?: boolean;
433
+ /** Execution limits for review/debate/adjudication phases */
434
+ executionLimits?: ArenaExecutionLimits;
435
+ /** Callback for streaming arena progress */
436
+ onProgress?: (event: ArenaProgressEvent) => void;
437
+ /** AbortSignal for cancelling a running arena session */
438
+ signal?: AbortSignal;
439
+ }
440
+ export type ArenaProgressEvent = {
441
+ type: "plan_resolved";
442
+ plan: ArenaPlan;
443
+ } | {
444
+ type: "evidence_started";
445
+ source: ArenaSourceKind;
446
+ } | {
447
+ type: "evidence_source_done";
448
+ source: ArenaSourceKind;
449
+ count: number;
450
+ durationMs: number;
451
+ timedOut: boolean;
452
+ } | {
453
+ type: "evidence_collected";
454
+ artifacts: ArenaArtifact[];
455
+ } | {
456
+ type: "research_start";
457
+ participant: string;
458
+ } | {
459
+ type: "research_done";
460
+ participant: string;
461
+ report: ParticipantReport;
462
+ } | {
463
+ type: "context_lookup";
464
+ participant: string;
465
+ tools: string[];
466
+ } | {
467
+ type: "claims_registered";
468
+ claimCount: number;
469
+ } | {
470
+ type: "cross_review_start";
471
+ round: number;
472
+ } | {
473
+ type: "cross_review_done";
474
+ reviews: FindingReview[];
475
+ } | {
476
+ type: "verification_start";
477
+ } | {
478
+ type: "verification_done";
479
+ challengeCount: number;
480
+ } | {
481
+ type: "debate_round_start";
482
+ round: number;
483
+ claims: string[];
484
+ } | {
485
+ type: "debate_round_done";
486
+ round: number;
487
+ resolved: number;
488
+ } | {
489
+ type: "adjudication_done";
490
+ accepted: number;
491
+ unresolved: number;
492
+ } | {
493
+ type: "planning_merge_review_start";
494
+ } | {
495
+ type: "planning_merge_review_done";
496
+ mergeCount: number;
497
+ } | {
498
+ type: "roadmap_expansion_start";
499
+ phaseCount: number;
500
+ } | {
501
+ type: "roadmap_expansion_done";
502
+ detailCount: number;
503
+ } | {
504
+ type: "consensus_start";
505
+ } | {
506
+ type: "consensus_done";
507
+ consensus: ArenaConsensus;
508
+ };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Arena types — multi-model review, discussion, and planning.
3
+ *
4
+ * V2 architecture: shared facts → independent research → findings → cross-review → consensus.
5
+ */
6
+ /** Default max discussion rounds per mode */
7
+ export const ARENA_MODE_DEFAULTS = {
8
+ review: { maxDiscussionRounds: 3, convergenceThreshold: 200 },
9
+ discussion: { maxDiscussionRounds: 4, convergenceThreshold: 300 },
10
+ planning: { maxDiscussionRounds: 5, convergenceThreshold: 400 },
11
+ };
12
+ export const DEFAULT_EXECUTION_LIMITS = {
13
+ maxClaimsForReview: 12,
14
+ maxContestedClaimsForDebate: 5,
15
+ maxRequestedChecksPerClaimPerRound: 2,
16
+ maxReviewersPerClaim: 2,
17
+ maxRoadmapPhases: 6,
18
+ maxExpandedPhasesPerRun: 6,
19
+ };
20
+ /** Type guard: does a strategy implement ArenaStrategyPlanning? */
21
+ export function isStrategyPlanning(s) {
22
+ return typeof s.detailExpansionUserPrompt === "function";
23
+ }
24
+ /** Type guard: does a strategy implement ArenaStrategyV2? */
25
+ export function isStrategyV2(s) {
26
+ return typeof s.verificationReviewUserPrompt === "function";
27
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * agent-server-stdio — Electron worker entry point.
3
+ *
4
+ * Bootstraps EngineRuntime + ChatSessionManager and exposes AgentServer
5
+ * over a newline-delimited JSON stdio transport so Electron's main process
6
+ * (or any other parent that spawns this file as a child process) can drive
7
+ * multi-session agent runs through the standard protocol.
8
+ *
9
+ * Bootstrap approach (bootstrap-then-extract / approach a):
10
+ * 1. Construct a single "seed" Engine without a runtime. Engine's
11
+ * constructor calls populateModelPoolFromSettings() which reads
12
+ * settings.json, registers model entries and provider catalog, and
13
+ * resolves the active model — exactly the initialization work we need.
14
+ * 2. Extract the fully-populated modelPool and toolRegistry from the seed
15
+ * engine, plus construct SettingsManager, MCPManager, CostTracker.
16
+ * 3. Wrap those shared resources in an EngineRuntime.
17
+ * 4. Pass the runtime to ChatSessionManager's engineFactory so every
18
+ * session engine shares the pool (same active model, same tool set).
19
+ * 5. Discard the seed engine — it will never run a task.
20
+ *
21
+ * Why this over pure "factor-out-builders" (approach b):
22
+ * Engine.populateModelPoolFromSettings() is a 60-line private method that
23
+ * reads settings, resolves the active key, builds the ProviderCatalog, and
24
+ * reloads cached context windows. Extracting it as a standalone helper
25
+ * would require making several private fields and imports public. The seed
26
+ * engine pattern reuses the existing, tested code with zero API changes.
27
+ *
28
+ * Clients (Electron renderer, TUI) must not change. As long as the
29
+ * transport is stdio NDJSON and the protocol surface is unchanged, this
30
+ * bootstrap is invisible to them.
31
+ */
32
+ export {};
@@ -0,0 +1,116 @@
1
+ /**
2
+ * agent-server-stdio — Electron worker entry point.
3
+ *
4
+ * Bootstraps EngineRuntime + ChatSessionManager and exposes AgentServer
5
+ * over a newline-delimited JSON stdio transport so Electron's main process
6
+ * (or any other parent that spawns this file as a child process) can drive
7
+ * multi-session agent runs through the standard protocol.
8
+ *
9
+ * Bootstrap approach (bootstrap-then-extract / approach a):
10
+ * 1. Construct a single "seed" Engine without a runtime. Engine's
11
+ * constructor calls populateModelPoolFromSettings() which reads
12
+ * settings.json, registers model entries and provider catalog, and
13
+ * resolves the active model — exactly the initialization work we need.
14
+ * 2. Extract the fully-populated modelPool and toolRegistry from the seed
15
+ * engine, plus construct SettingsManager, MCPManager, CostTracker.
16
+ * 3. Wrap those shared resources in an EngineRuntime.
17
+ * 4. Pass the runtime to ChatSessionManager's engineFactory so every
18
+ * session engine shares the pool (same active model, same tool set).
19
+ * 5. Discard the seed engine — it will never run a task.
20
+ *
21
+ * Why this over pure "factor-out-builders" (approach b):
22
+ * Engine.populateModelPoolFromSettings() is a 60-line private method that
23
+ * reads settings, resolves the active key, builds the ProviderCatalog, and
24
+ * reloads cached context windows. Extracting it as a standalone helper
25
+ * would require making several private fields and imports public. The seed
26
+ * engine pattern reuses the existing, tested code with zero API changes.
27
+ *
28
+ * Clients (Electron renderer, TUI) must not change. As long as the
29
+ * transport is stdio NDJSON and the protocol surface is unchanged, this
30
+ * bootstrap is invisible to them.
31
+ */
32
+ import { Engine } from "../engine/engine.js";
33
+ import { EngineRuntime } from "../engine/runtime.js";
34
+ import { ChatSessionManager } from "../protocol/chat-session-manager.js";
35
+ import { AgentServer } from "../protocol/server.js";
36
+ import { StdioTransport } from "../protocol/transport.js";
37
+ import { SettingsManager } from "../settings/manager.js";
38
+ import { MCPManager } from "../tool-system/mcp-manager.js";
39
+ import { CostTracker } from "../cost-tracker.js";
40
+ // ─── Read base config from environment / settings ─────────────────
41
+ const cwd = process.env.AGENT_CWD ?? process.cwd();
42
+ // Load settings once to derive llm config for the seed engine.
43
+ const settingsManager = new SettingsManager(cwd);
44
+ const settings = settingsManager.get();
45
+ const llmConfig = {
46
+ provider: settings.model.provider,
47
+ model: settings.model.name,
48
+ apiKey: settings.model.apiKey ?? "",
49
+ baseUrl: settings.model.baseUrl,
50
+ temperature: settings.model.temperature,
51
+ maxTokens: settings.model.maxTokens,
52
+ };
53
+ // ─── Step 1: seed engine — populates model pool from settings ─────
54
+ const seedEngine = new Engine({
55
+ llm: llmConfig,
56
+ cwd,
57
+ // No runtime — Engine.populateModelPoolFromSettings() runs in ctor.
58
+ });
59
+ // ─── Step 2: extract shared resources ────────────────────────────
60
+ const modelPool = seedEngine.getModelPool();
61
+ const toolRegistry = seedEngine.getToolRegistry();
62
+ // Capture the seed engine's resolved llmConfig (post-populateModelPoolFromSettings).
63
+ // This includes resolved provider/baseUrl/apiKey from settings.providers[].
64
+ const resolvedLlmConfig = seedEngine.getConfig().llm;
65
+ // Reuse the same SettingsManager instance for the runtime instead of constructing
66
+ // a fresh one — avoids duplication and keeps the pattern cleaner.
67
+ const sharedSettings = settingsManager;
68
+ // MCPManager: not connected to any servers at bootstrap time.
69
+ // Individual session engines will connect to mcpServers from their config.
70
+ // This instance satisfies the EngineRuntime type requirement; it is a
71
+ // no-op holder until an engineFactory caller opts to attach servers.
72
+ // TODO(future) — currently a top-level placeholder. Future work: aggregate
73
+ // MCP server connections across sessions instead of each session creating
74
+ // its own MCPManager via Engine.run lazy init.
75
+ const mcpPool = new MCPManager(toolRegistry);
76
+ // CostTracker: shared across all sessions for aggregate tracking.
77
+ // TODO(future) — shared across all sessions, but Engine doesn't yet read
78
+ // runtime.costTracker. Future work: per-session cost accounting through
79
+ // the shared runtime.
80
+ const costTracker = new CostTracker();
81
+ // ─── Step 3: build the shared EngineRuntime ───────────────────────
82
+ const runtime = new EngineRuntime({
83
+ modelPool,
84
+ toolRegistry,
85
+ settings: sharedSettings,
86
+ mcpPool,
87
+ costTracker,
88
+ });
89
+ // ─── Step 4: ChatSessionManager ──────────────────────────────────
90
+ const chatManager = new ChatSessionManager({
91
+ runtime,
92
+ engineFactory: (slice) => new Engine({
93
+ llm: resolvedLlmConfig,
94
+ cwd,
95
+ runtime,
96
+ // Per-session overrides from the protocol request
97
+ permissionMode: slice.permissionMode,
98
+ preset: slice.preset,
99
+ customSystemPrompt: slice.customSystemPrompt,
100
+ appendSystemPrompt: slice.appendSystemPrompt,
101
+ maxTurns: slice.maxTurns,
102
+ maxContextTokens: slice.maxContextTokens,
103
+ ...(slice.cwd ? { cwd: slice.cwd } : {}),
104
+ }),
105
+ maxSessions: 16,
106
+ idleTtlMs: 30 * 60 * 1000,
107
+ });
108
+ chatManager.startIdleSweeper();
109
+ // ─── Step 5: AgentServer over stdio ──────────────────────────────
110
+ const stdioTransport = new StdioTransport(process.stdin, process.stdout);
111
+ new AgentServer({
112
+ chatManager,
113
+ transport: stdioTransport,
114
+ });
115
+ // Keep the process alive — readline in StdioTransport holds the event loop.
116
+ // On parent close / stdin EOF the process will exit naturally.