@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,27 +0,0 @@
1
- /**
2
- * Planner — the brain of Evidence-Driven Arena.
3
- *
4
- * Takes a natural language user request and produces a complete ArenaPlan:
5
- * - mode (how to collaborate)
6
- * - lenses (from what perspectives)
7
- * - sources (where to gather evidence)
8
- * - subject (what is being analyzed)
9
- * - outputShape (how to structure the result)
10
- *
11
- * Replaces the old IntentResolver + ScopeResolver pipeline with a single
12
- * LLM call that outputs a holistic execution plan.
13
- */
14
- import type { LLMConfig } from "../types.js";
15
- import type { ArenaPlan, ArenaMode } from "./types.js";
16
- /** Explicit flags the user may pass via CLI or tool args */
17
- export interface PlannerFlags {
18
- mode?: ArenaMode;
19
- base?: string;
20
- head?: string;
21
- }
22
- /**
23
- * Run the planner to produce an ArenaPlan from natural language.
24
- *
25
- * Priority: explicit flags > LLM plan > safe defaults.
26
- */
27
- export declare function planArena(topic: string, llmConfig: LLMConfig, flags?: PlannerFlags, signal?: AbortSignal): Promise<ArenaPlan>;
@@ -1,311 +0,0 @@
1
- /**
2
- * Planner — the brain of Evidence-Driven Arena.
3
- *
4
- * Takes a natural language user request and produces a complete ArenaPlan:
5
- * - mode (how to collaborate)
6
- * - lenses (from what perspectives)
7
- * - sources (where to gather evidence)
8
- * - subject (what is being analyzed)
9
- * - outputShape (how to structure the result)
10
- *
11
- * Replaces the old IntentResolver + ScopeResolver pipeline with a single
12
- * LLM call that outputs a holistic execution plan.
13
- */
14
- import { createLLMClient } from "../llm/client-factory.js";
15
- import { LENS_NAMES } from "./lenses/index.js";
16
- import { logger } from "../logging/logger.js";
17
- const PLANNER_SYSTEM_PROMPT = `You are the planner for a multi-model collaborative analysis tool called Arena.
18
-
19
- Given a user's natural language request, produce an execution plan. You must determine:
20
-
21
- 1. **mode** — how to collaborate:
22
- - "review": find issues, verify quality, give a structured verdict
23
- - "discussion": explore trade-offs, compare viewpoints, preserve disagreements
24
- - "planning": build a roadmap, identify phases, dependencies, and risks
25
-
26
- 2. **lenses** — from what analytical perspectives (can be multiple):
27
- - "engineering": code quality, correctness, performance, maintainability
28
- - "product": user value, requirements completeness, acceptance criteria, UX
29
- - "architecture": system boundaries, modularity, coupling, evolution paths
30
- - "general": broad analysis, logic, trade-offs (use as fallback)
31
-
32
- 3. **sources** — where to gather evidence (can be multiple):
33
- - "git": diffs, commit history, branch comparison, changed files
34
- - "repo": directory structure, source code files, symbol search
35
- - "docs": markdown/text documents, PRDs, design docs
36
- - "web": external information, standards, competitor analysis
37
- - "none": pure topic discussion, no external evidence needed
38
-
39
- 4. **subject** — what is being analyzed:
40
- - kind: "changes" (code changes), "files" (specific files), "docs" (documents), "topic" (abstract topic), "mixed"
41
- - label: human-readable description
42
- - targets: specific file paths, branch names, or doc names if applicable
43
-
44
- 5. **outputShape** — what to emphasize in the output
45
-
46
- Respond ONLY with JSON, no markdown fences:
47
- {
48
- "mode": "review|discussion|planning",
49
- "lenses": [{"name": "engineering|product|architecture|general", "weight": 1.0}],
50
- "sources": [{"kind": "git|repo|docs|web|none", "targets": ["optional specific targets"]}],
51
- "subject": {"kind": "changes|files|docs|topic|mixed", "label": "description", "targets": ["optional"]},
52
- "outputShape": {"overviewLabel": "e.g. What Changed / Current Scope / Problem Framing", "emphasize": ["risk", "improvement"]},
53
- "confidence": "high|medium|low",
54
- "followUpQuestion": "question if confidence is low, or null"
55
- }`;
56
- /**
57
- * Run the planner to produce an ArenaPlan from natural language.
58
- *
59
- * Priority: explicit flags > LLM plan > safe defaults.
60
- */
61
- export async function planArena(topic, llmConfig, flags, signal) {
62
- // If mode and base are both explicit, we can skip the LLM call
63
- if (flags?.mode && flags?.base) {
64
- return buildExplicitPlan(topic, flags);
65
- }
66
- try {
67
- signal?.throwIfAborted();
68
- const client = await createLLMClient({
69
- ...llmConfig,
70
- maxTokens: 1024,
71
- });
72
- const response = await client.createMessage({
73
- systemPrompt: PLANNER_SYSTEM_PROMPT,
74
- messages: [{ role: "user", content: `<user_request>\n${topic}\n</user_request>\n\nAnalyze the user request above and output the arena plan as JSON.` }],
75
- maxTokens: 1024,
76
- signal,
77
- });
78
- const plan = parsePlanResponse(response.text, topic);
79
- // Explicit flags override LLM output
80
- if (flags?.mode)
81
- plan.mode = flags.mode;
82
- if (flags?.base) {
83
- plan.sources = [{ kind: "git", targets: [flags.base, flags.head ?? "HEAD"] }];
84
- plan.subject = { kind: "changes", label: `${flags.base}...${flags.head ?? "HEAD"}`, targets: [flags.base, flags.head ?? "HEAD"] };
85
- }
86
- logger.info("arena.planner", { plan });
87
- return plan;
88
- }
89
- catch (err) {
90
- logger.warn("arena.planner_fallback", { error: err.message });
91
- return buildFallbackPlan(topic, flags);
92
- }
93
- }
94
- function parsePlanResponse(text, topic) {
95
- const fenced = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
96
- const jsonStr = fenced ? fenced[1].trim() : text.match(/\{[\s\S]*\}/)?.[0] ?? text;
97
- try {
98
- const parsed = JSON.parse(jsonStr);
99
- return {
100
- mode: validateMode(parsed.mode),
101
- lenses: parseLenses(parsed.lenses),
102
- sources: parseSources(parsed.sources),
103
- subject: parseSubject(parsed.subject, topic),
104
- outputShape: parseOutputShape(parsed.outputShape, parsed.mode),
105
- confidence: validateConfidence(parsed.confidence),
106
- followUpQuestion: parsed.followUpQuestion || undefined,
107
- };
108
- }
109
- catch {
110
- return buildFallbackPlan(topic);
111
- }
112
- }
113
- function buildExplicitPlan(topic, flags) {
114
- return {
115
- mode: flags.mode,
116
- lenses: [{ name: "engineering", weight: 1 }],
117
- sources: [
118
- { kind: "git", targets: [flags.base, flags.head ?? "HEAD"] },
119
- { kind: "repo" },
120
- ],
121
- subject: {
122
- kind: "changes",
123
- label: `${flags.base}...${flags.head ?? "HEAD"}`,
124
- targets: [flags.base, flags.head ?? "HEAD"],
125
- },
126
- outputShape: {
127
- overviewLabel: "What Changed",
128
- emphasize: ["risk", "improvement"],
129
- },
130
- confidence: "high",
131
- };
132
- }
133
- function buildFallbackPlan(topic, flags) {
134
- if (flags?.base) {
135
- return {
136
- mode: flags.mode ?? "review",
137
- lenses: [{ name: "engineering", weight: 1 }],
138
- sources: [{ kind: "git" }, { kind: "repo" }],
139
- subject: { kind: "changes", label: topic, targets: [flags.base, flags.head ?? "HEAD"] },
140
- outputShape: {
141
- overviewLabel: "What Changed",
142
- emphasize: ["risk", "improvement"],
143
- },
144
- confidence: "low",
145
- };
146
- }
147
- const lower = topic.toLowerCase();
148
- const hasDoc = /\b(prd|doc|docs|spec|rfc|design doc|requirement|proposal)\b/i.test(topic)
149
- || /(文档|需求|方案)/.test(topic);
150
- const hasRoadmap = /\b(roadmap|plan|planning|strategy|migration|refactor)\b/i.test(topic)
151
- || /(演进|路线图|规划|重构)/.test(topic);
152
- const hasFeasibility = /\b(feasibility|feasible|can we|should we|trade-?off)\b/i.test(topic)
153
- || /(可行|能不能|值不值得|取舍)/.test(topic);
154
- const hasReview = /\b(review|pr|diff|patch|change)\b/i.test(topic)
155
- || /(改动|评审|审查)/.test(topic);
156
- const hasRepo = /\b(repo|repository|codebase|module|architecture)\b/i.test(topic)
157
- || /(代码库|仓库|模块|架构)/.test(topic);
158
- if (hasRoadmap) {
159
- return {
160
- mode: "planning",
161
- lenses: hasDoc
162
- ? [{ name: "architecture", weight: 1 }, { name: "product", weight: 0.7 }]
163
- : [{ name: "architecture", weight: 1 }, { name: "engineering", weight: 0.8 }],
164
- sources: hasDoc
165
- ? [{ kind: "docs" }, ...(hasRepo ? [{ kind: "repo" }] : [])]
166
- : [{ kind: "repo" }, { kind: "docs" }],
167
- subject: { kind: hasDoc ? "mixed" : "topic", label: topic },
168
- outputShape: {
169
- overviewLabel: "Current Scope",
170
- emphasize: ["improvement", "risk", "question"],
171
- },
172
- confidence: "low",
173
- };
174
- }
175
- if (hasDoc && hasFeasibility) {
176
- return {
177
- mode: "discussion",
178
- lenses: [{ name: "product", weight: 1 }, { name: "engineering", weight: 0.8 }],
179
- sources: hasRepo ? [{ kind: "docs" }, { kind: "repo" }] : [{ kind: "docs" }],
180
- subject: { kind: hasRepo ? "mixed" : "docs", label: topic },
181
- outputShape: {
182
- overviewLabel: "Problem Framing",
183
- emphasize: ["question", "risk", "improvement"],
184
- },
185
- confidence: "low",
186
- };
187
- }
188
- if (hasDoc) {
189
- return {
190
- mode: hasReview ? "review" : "discussion",
191
- lenses: [{ name: "product", weight: 1 }, { name: "architecture", weight: 0.6 }],
192
- sources: hasRepo ? [{ kind: "docs" }, { kind: "repo" }] : [{ kind: "docs" }],
193
- subject: { kind: hasRepo ? "mixed" : "docs", label: topic },
194
- outputShape: {
195
- overviewLabel: hasReview ? "Current Scope" : "Problem Framing",
196
- emphasize: ["question", "improvement", "risk"],
197
- },
198
- confidence: "low",
199
- };
200
- }
201
- if (hasFeasibility) {
202
- return {
203
- mode: "discussion",
204
- lenses: hasRepo
205
- ? [{ name: "product", weight: 1 }, { name: "engineering", weight: 0.8 }]
206
- : [{ name: "general", weight: 1 }, { name: "product", weight: 0.6 }],
207
- sources: hasRepo ? [{ kind: "repo" }, { kind: "docs" }] : [{ kind: "none" }],
208
- subject: { kind: hasRepo ? "topic" : "topic", label: topic },
209
- outputShape: {
210
- overviewLabel: "Problem Framing",
211
- emphasize: ["question", "risk", "improvement"],
212
- },
213
- confidence: "low",
214
- };
215
- }
216
- if (hasReview || /\b(commit|branch|diff|patch|bug|fix|回归)\b/i.test(lower)) {
217
- return {
218
- mode: "review",
219
- lenses: [{ name: "engineering", weight: 1 }],
220
- sources: [{ kind: "git" }, { kind: "repo" }],
221
- subject: { kind: "changes", label: topic },
222
- outputShape: {
223
- overviewLabel: "What Changed",
224
- emphasize: ["risk", "improvement", "question"],
225
- },
226
- confidence: "low",
227
- };
228
- }
229
- return {
230
- mode: flags?.mode ?? "review",
231
- lenses: [{ name: hasRepo ? "architecture" : "general", weight: 1 }],
232
- sources: hasRepo ? [{ kind: "repo" }, { kind: "docs" }] : [{ kind: "none" }],
233
- subject: { kind: "topic", label: topic },
234
- outputShape: {
235
- overviewLabel: hasRepo ? "Current Scope" : "Problem Framing",
236
- emphasize: hasRepo ? ["improvement", "risk", "question"] : ["question", "risk", "improvement"],
237
- },
238
- confidence: "low",
239
- };
240
- }
241
- // ─── Validators ─────────────────────────────────────────────────
242
- function validateMode(v) {
243
- if (v === "review" || v === "discussion" || v === "planning")
244
- return v;
245
- return "review";
246
- }
247
- function validateConfidence(v) {
248
- if (v === "high" || v === "medium" || v === "low")
249
- return v;
250
- return "medium";
251
- }
252
- function parseLenses(v) {
253
- if (!Array.isArray(v) || v.length === 0) {
254
- return [{ name: "general", weight: 1 }];
255
- }
256
- const result = v
257
- .filter((item) => LENS_NAMES.includes(item?.name))
258
- .map((item) => ({
259
- name: item.name,
260
- weight: typeof item.weight === "number" ? item.weight : 1,
261
- }));
262
- return result.length > 0 ? result : [{ name: "general", weight: 1 }];
263
- }
264
- function parseSources(v) {
265
- if (!Array.isArray(v) || v.length === 0) {
266
- return [{ kind: "none" }];
267
- }
268
- const validKinds = ["git", "repo", "docs", "web", "none"];
269
- const result = v
270
- .filter((item) => validKinds.includes(item?.kind))
271
- .map((item) => ({
272
- kind: item.kind,
273
- targets: Array.isArray(item.targets) ? item.targets : undefined,
274
- }));
275
- return result.length > 0 ? result : [{ kind: "none" }];
276
- }
277
- function parseSubject(v, topic) {
278
- if (!v || typeof v !== "object") {
279
- return { kind: "topic", label: topic };
280
- }
281
- const obj = v;
282
- const validKinds = ["changes", "files", "docs", "topic", "mixed"];
283
- return {
284
- kind: validKinds.includes(obj.kind) ? obj.kind : "topic",
285
- label: obj.label ?? topic,
286
- targets: Array.isArray(obj.targets) ? obj.targets : undefined,
287
- };
288
- }
289
- const VALID_EMPHASIZE = new Set(["strength", "improvement", "risk", "question"]);
290
- function parseOutputShape(v, mode) {
291
- if (v && typeof v === "object") {
292
- const obj = v;
293
- return {
294
- overviewLabel: obj.overviewLabel ?? "Overview",
295
- emphasize: Array.isArray(obj.emphasize)
296
- ? obj.emphasize.filter((k) => VALID_EMPHASIZE.has(k))
297
- : ["risk", "improvement"],
298
- };
299
- }
300
- // Defaults per mode
301
- switch (mode) {
302
- case "review":
303
- return { overviewLabel: "What Changed", emphasize: ["risk", "improvement"] };
304
- case "discussion":
305
- return { overviewLabel: "Problem Framing", emphasize: ["strength", "risk", "question"] };
306
- case "planning":
307
- return { overviewLabel: "Current Scope", emphasize: ["improvement", "risk"] };
308
- default:
309
- return { overviewLabel: "Overview", emphasize: ["risk", "improvement"] };
310
- }
311
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * DocsProvider — collects evidence from documentation files:
3
- * markdown, text, PRDs, design docs.
4
- */
5
- import type { ArenaContextProvider } from "../types.js";
6
- export declare const docsProvider: ArenaContextProvider;
7
- export declare function truncate(content: string): string;
@@ -1,111 +0,0 @@
1
- /**
2
- * DocsProvider — collects evidence from documentation files:
3
- * markdown, text, PRDs, design docs.
4
- */
5
- import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
6
- import { join, extname } from "node:path";
7
- import { logger } from "../../logging/logger.js";
8
- const MAX_DOC_CHARS = 10_000;
9
- const DOC_EXTENSIONS = new Set([".md", ".txt", ".rst", ".adoc", ".org"]);
10
- export const docsProvider = {
11
- kind: "docs",
12
- collect(plan, topic) {
13
- const artifacts = [];
14
- const sourceSpec = plan.sources.find((s) => s.kind === "docs");
15
- const targets = sourceSpec?.targets ?? [];
16
- // Read explicit target documents
17
- for (const target of targets) {
18
- const content = safeReadDoc(target);
19
- if (content) {
20
- artifacts.push({
21
- id: `doc-${target}`,
22
- kind: "doc",
23
- source: "docs",
24
- title: target,
25
- ref: target,
26
- preview: truncate(content),
27
- });
28
- }
29
- }
30
- // If no explicit targets, scan common doc locations
31
- if (targets.length === 0) {
32
- const docDirs = ["docs", "doc", "design", "specs", "proposals", "."];
33
- const found = new Set();
34
- for (const dir of docDirs) {
35
- if (!existsSync(dir))
36
- continue;
37
- const docs = findDocFiles(dir, 2);
38
- for (const docPath of docs) {
39
- if (found.has(docPath))
40
- continue;
41
- found.add(docPath);
42
- // Score relevance by checking if doc content/name relates to topic
43
- const name = docPath.toLowerCase();
44
- const topicLower = topic.toLowerCase();
45
- const keywords = topicLower.split(/\s+/).filter((w) => w.length > 2);
46
- const isRelevant = keywords.some((kw) => name.includes(kw));
47
- if (isRelevant || found.size <= 5) {
48
- const content = safeReadDoc(docPath);
49
- if (content) {
50
- artifacts.push({
51
- id: `doc-${docPath}`,
52
- kind: "doc",
53
- source: "docs",
54
- title: docPath,
55
- ref: docPath,
56
- preview: truncate(content),
57
- });
58
- }
59
- }
60
- }
61
- }
62
- }
63
- logger.info("arena.provider.docs", { artifactCount: artifacts.length });
64
- return artifacts;
65
- },
66
- };
67
- function findDocFiles(dir, maxDepth, depth = 0) {
68
- if (depth >= maxDepth)
69
- return [];
70
- const files = [];
71
- try {
72
- const entries = readdirSync(dir);
73
- for (const entry of entries) {
74
- if (entry.startsWith(".") || entry === "node_modules")
75
- continue;
76
- const full = join(dir, entry);
77
- const st = statSync(full);
78
- if (st.isFile() && DOC_EXTENSIONS.has(extname(entry).toLowerCase())) {
79
- files.push(full);
80
- }
81
- else if (st.isDirectory() && depth < maxDepth - 1) {
82
- files.push(...findDocFiles(full, maxDepth, depth + 1));
83
- }
84
- }
85
- }
86
- catch { /* ignore */ }
87
- return files;
88
- }
89
- function safeReadDoc(filePath) {
90
- try {
91
- if (!existsSync(filePath))
92
- return null;
93
- const st = statSync(filePath);
94
- if (st.size > 500_000)
95
- return null;
96
- return readFileSync(filePath, "utf-8");
97
- }
98
- catch {
99
- return null;
100
- }
101
- }
102
- export function truncate(content) {
103
- if (content.length <= MAX_DOC_CHARS)
104
- return content;
105
- const t = content.slice(0, MAX_DOC_CHARS);
106
- const lastNl = t.lastIndexOf("\n");
107
- // No newline in the window → lastNl is -1 and slice(0,-1) would drop just
108
- // the last char; cut at MAX_DOC_CHARS instead.
109
- const body = lastNl > 0 ? t.slice(0, lastNl) : t;
110
- return body + `\n... (truncated, ${content.length} chars total)`;
111
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * GitProvider — collects evidence from git: diffs, commit logs, changed files.
3
- *
4
- * Security: All git commands use execFileSync with argument arrays
5
- * to prevent shell injection. Git refs are sanitized before use.
6
- */
7
- import type { ArenaContextProvider } from "../types.js";
8
- export declare const gitProvider: ArenaContextProvider;
@@ -1,174 +0,0 @@
1
- /**
2
- * GitProvider — collects evidence from git: diffs, commit logs, changed files.
3
- *
4
- * Security: All git commands use execFileSync with argument arrays
5
- * to prevent shell injection. Git refs are sanitized before use.
6
- */
7
- import { execFileSync } from "node:child_process";
8
- import { logger } from "../../logging/logger.js";
9
- const MAX_DIFF_CHARS = 20_000;
10
- const MAX_CHANGED_FILES = 30;
11
- export const gitProvider = {
12
- kind: "git",
13
- collect(plan, _topic) {
14
- const artifacts = [];
15
- const targets = plan.sources.find((s) => s.kind === "git")?.targets;
16
- const baseRef = sanitizeRef(targets?.[0]);
17
- const headRef = sanitizeRef(targets?.[1]) ?? "HEAD";
18
- const isCompare = !!baseRef;
19
- // Current branch
20
- const currentBranch = git(["rev-parse", "--abbrev-ref", "HEAD"]);
21
- if (currentBranch) {
22
- artifacts.push({
23
- id: "git-branch",
24
- kind: "doc",
25
- source: "git",
26
- title: "Current Branch",
27
- preview: currentBranch,
28
- });
29
- }
30
- // Commit log
31
- const logArgs = isCompare
32
- ? ["log", "--oneline", `${baseRef}..${headRef}`, "--max-count=20"]
33
- : ["log", "--oneline", "-10"];
34
- const log = git(logArgs);
35
- if (log) {
36
- artifacts.push({
37
- id: "git-log",
38
- kind: "doc",
39
- source: "git",
40
- title: "Commit Log",
41
- preview: log,
42
- });
43
- }
44
- // Diff stat
45
- const statArgs = isCompare
46
- ? ["diff", "--stat", `${baseRef}...${headRef}`]
47
- : ["diff", "--stat", "HEAD"];
48
- let stat = git(statArgs);
49
- if (!stat && !isCompare)
50
- stat = git(["diff", "--stat", "--cached"]);
51
- if (stat) {
52
- artifacts.push({
53
- id: "git-diffstat",
54
- kind: "doc",
55
- source: "git",
56
- title: "Diff Stat",
57
- preview: stat,
58
- });
59
- }
60
- // Changed files
61
- const filesArgs = isCompare
62
- ? ["diff", "--name-status", `${baseRef}...${headRef}`]
63
- : ["diff", "--name-status", "HEAD"];
64
- let changedFiles = git(filesArgs);
65
- if (!changedFiles && !isCompare)
66
- changedFiles = git(["diff", "--name-status", "--cached"]);
67
- if (changedFiles) {
68
- const allChanged = changedFiles.split("\n").filter(Boolean);
69
- const limited = allChanged.slice(0, MAX_CHANGED_FILES);
70
- if (allChanged.length > MAX_CHANGED_FILES) {
71
- limited.push(`... and ${allChanged.length - MAX_CHANGED_FILES} more files`);
72
- }
73
- artifacts.push({
74
- id: "git-changed-files",
75
- kind: "doc",
76
- source: "git",
77
- title: "Changed Files",
78
- preview: limited.join("\n"),
79
- metadata: { totalCount: allChanged.length },
80
- });
81
- // Directory clustering
82
- const paths = allChanged.map((line) => line.split("\t").slice(1).join("\t")).filter(Boolean);
83
- const dirCounts = clusterByDirectory(paths);
84
- if (dirCounts.length > 0) {
85
- artifacts.push({
86
- id: "git-dir-clusters",
87
- kind: "doc",
88
- source: "git",
89
- title: "Changes by Directory",
90
- preview: dirCounts.slice(0, 15).map(([dir, count]) => ` ${dir}/ (${count} files)`).join("\n"),
91
- });
92
- }
93
- }
94
- // Truncated diff
95
- const diffArgs = isCompare
96
- ? ["diff", `${baseRef}...${headRef}`]
97
- : ["diff", "HEAD"];
98
- let diff = git(diffArgs);
99
- if (!diff && !isCompare)
100
- diff = git(["diff", "--cached"]);
101
- if (diff) {
102
- const truncated = diff.length > MAX_DIFF_CHARS;
103
- const preview = truncated
104
- ? diff.slice(0, MAX_DIFF_CHARS).slice(0, diff.slice(0, MAX_DIFF_CHARS).lastIndexOf("\n"))
105
- : diff;
106
- artifacts.push({
107
- id: "git-diff",
108
- kind: "diff",
109
- source: "git",
110
- title: "Diff",
111
- preview: preview + (truncated
112
- ? `\n\n... TRUNCATED (${diff.length} chars total). Use read_file to inspect specific files.`
113
- : ""),
114
- metadata: { totalChars: diff.length, truncated },
115
- });
116
- }
117
- // Fallback: git status
118
- if (!diff && !stat) {
119
- const status = git(["status", "--short"]);
120
- if (status) {
121
- artifacts.push({
122
- id: "git-status",
123
- kind: "doc",
124
- source: "git",
125
- title: "Git Status",
126
- preview: status,
127
- });
128
- }
129
- }
130
- logger.info("arena.provider.git", {
131
- artifactCount: artifacts.length,
132
- hasCompare: isCompare,
133
- });
134
- return artifacts;
135
- },
136
- };
137
- /**
138
- * Execute a git command safely using execFileSync (no shell interpretation).
139
- */
140
- function git(args) {
141
- try {
142
- return execFileSync("git", args, {
143
- encoding: "utf-8",
144
- maxBuffer: 1024 * 1024,
145
- timeout: 10_000,
146
- }).trim();
147
- }
148
- catch {
149
- return "";
150
- }
151
- }
152
- /**
153
- * Sanitize a git ref string from LLM output.
154
- * Strips range operators (.., ...) and shell-unsafe characters so that
155
- * the ref can be safely interpolated into `git diff baseRef...headRef`.
156
- */
157
- function sanitizeRef(ref) {
158
- if (!ref)
159
- return undefined;
160
- // Strip range operators that the LLM may have included
161
- let cleaned = ref.replace(/\.{2,}/g, "");
162
- // Only allow safe git ref characters: alphanumeric, /, -, _, ~, ^, .
163
- cleaned = cleaned.replace(/[^a-zA-Z0-9/_\-~^.]/g, "");
164
- return cleaned || undefined;
165
- }
166
- function clusterByDirectory(paths) {
167
- const counts = new Map();
168
- for (const p of paths) {
169
- const parts = p.split("/");
170
- const dir = parts.length > 2 ? parts.slice(0, 2).join("/") : parts[0];
171
- counts.set(dir, (counts.get(dir) ?? 0) + 1);
172
- }
173
- return [...counts.entries()].sort((a, b) => b[1] - a[1]);
174
- }
@@ -1,32 +0,0 @@
1
- /**
2
- * Provider registry — evidence collectors for Arena.
3
- */
4
- import type { ArenaPlan, ArenaArtifact, ArenaSourceKind, ArenaQuickFact } from "../types.js";
5
- export { gitProvider } from "./git.js";
6
- export { repoProvider } from "./repo.js";
7
- export { docsProvider } from "./docs.js";
8
- export { noneProvider } from "./none.js";
9
- export interface CollectEvidenceOptions {
10
- /** Heartbeat callback fired before/after each provider runs. */
11
- onProgress?: (event: {
12
- type: "evidence_started" | "evidence_collected";
13
- source: ArenaSourceKind;
14
- count?: number;
15
- durationMs?: number;
16
- timedOut?: boolean;
17
- }) => void;
18
- signal?: AbortSignal;
19
- }
20
- /**
21
- * Collect all evidence according to the plan's sources.
22
- * Returns unified ArenaArtifact[] and quickFacts.
23
- *
24
- * Providers run in parallel (independent of one another) with a
25
- * per-provider timeout, so a single slow source can't stall the
26
- * whole arena. Heartbeats are emitted around each provider so the
27
- * UI can show "collecting from repo..." instead of a blank pause.
28
- */
29
- export declare function collectEvidence(plan: ArenaPlan, topic: string, options?: CollectEvidenceOptions): Promise<{
30
- artifacts: ArenaArtifact[];
31
- quickFacts: ArenaQuickFact[];
32
- }>;