@cjhyy/code-shell-core 0.7.1 → 0.8.1

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 (595) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/path-policy.js +99 -2
  374. package/dist/tool-system/permission.d.ts +26 -0
  375. package/dist/tool-system/permission.js +46 -0
  376. package/dist/tool-system/registry.d.ts +12 -1
  377. package/dist/tool-system/registry.js +31 -7
  378. package/dist/tool-system/sandbox/index.js +3 -8
  379. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  380. package/dist/tool-system/session-tool-host.d.ts +139 -0
  381. package/dist/tool-system/session-tool-host.js +167 -0
  382. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  383. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  384. package/dist/tool-system/validation.d.ts +14 -7
  385. package/dist/tool-system/validation.js +701 -7
  386. package/dist/types.d.ts +186 -20
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  388. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  389. package/dist/utils/file-mutex.d.ts +65 -0
  390. package/dist/utils/file-mutex.js +145 -0
  391. package/dist/utils/json.d.ts +2 -4
  392. package/dist/utils/json.js +2 -4
  393. package/dist/utils/lockfile.d.ts +30 -1
  394. package/dist/utils/lockfile.js +2 -2
  395. package/dist/utils/secret-scrubber.d.ts +8 -0
  396. package/dist/utils/secret-scrubber.js +227 -0
  397. package/dist/utils/toolDisplay.js +1 -1
  398. package/package.json +20 -5
  399. package/THIRD_PARTY_NOTICES.md +0 -206
  400. package/dist/arena/arena.d.ts +0 -45
  401. package/dist/arena/arena.js +0 -362
  402. package/dist/arena/context/context-tools.d.ts +0 -16
  403. package/dist/arena/context/context-tools.js +0 -272
  404. package/dist/arena/context/within-root.d.ts +0 -7
  405. package/dist/arena/context/within-root.js +0 -15
  406. package/dist/arena/detect-mode.d.ts +0 -20
  407. package/dist/arena/detect-mode.js +0 -78
  408. package/dist/arena/digest-builder.d.ts +0 -25
  409. package/dist/arena/digest-builder.js +0 -120
  410. package/dist/arena/index.d.ts +0 -29
  411. package/dist/arena/index.js +0 -29
  412. package/dist/arena/iterate/convergence.d.ts +0 -25
  413. package/dist/arena/iterate/convergence.js +0 -103
  414. package/dist/arena/iterate/formats/index.d.ts +0 -22
  415. package/dist/arena/iterate/formats/index.js +0 -283
  416. package/dist/arena/iterate/index.d.ts +0 -11
  417. package/dist/arena/iterate/index.js +0 -9
  418. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  419. package/dist/arena/iterate/iterative-arena.js +0 -237
  420. package/dist/arena/iterate/parse.d.ts +0 -42
  421. package/dist/arena/iterate/parse.js +0 -123
  422. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  423. package/dist/arena/iterate/phases/argue.js +0 -165
  424. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  425. package/dist/arena/iterate/phases/revise.js +0 -62
  426. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  427. package/dist/arena/iterate/phases/tournament.js +0 -113
  428. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  429. package/dist/arena/iterate/tools/web-tools.js +0 -54
  430. package/dist/arena/iterate/types.d.ts +0 -152
  431. package/dist/arena/iterate/types.js +0 -8
  432. package/dist/arena/ledger.d.ts +0 -47
  433. package/dist/arena/ledger.js +0 -159
  434. package/dist/arena/lenses/architecture.d.ts +0 -5
  435. package/dist/arena/lenses/architecture.js +0 -22
  436. package/dist/arena/lenses/engineering.d.ts +0 -5
  437. package/dist/arena/lenses/engineering.js +0 -22
  438. package/dist/arena/lenses/general.d.ts +0 -5
  439. package/dist/arena/lenses/general.js +0 -20
  440. package/dist/arena/lenses/index.d.ts +0 -16
  441. package/dist/arena/lenses/index.js +0 -47
  442. package/dist/arena/lenses/product.d.ts +0 -5
  443. package/dist/arena/lenses/product.js +0 -22
  444. package/dist/arena/model-presets.d.ts +0 -23
  445. package/dist/arena/model-presets.js +0 -44
  446. package/dist/arena/phases/adjudication.d.ts +0 -25
  447. package/dist/arena/phases/adjudication.js +0 -142
  448. package/dist/arena/phases/build-consensus.d.ts +0 -30
  449. package/dist/arena/phases/build-consensus.js +0 -85
  450. package/dist/arena/phases/claim-registry.d.ts +0 -26
  451. package/dist/arena/phases/claim-registry.js +0 -60
  452. package/dist/arena/phases/cross-review.d.ts +0 -47
  453. package/dist/arena/phases/cross-review.js +0 -224
  454. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  455. package/dist/arena/phases/debate-rounds.js +0 -161
  456. package/dist/arena/phases/participant-research.d.ts +0 -39
  457. package/dist/arena/phases/participant-research.js +0 -316
  458. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  459. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  460. package/dist/arena/planner.d.ts +0 -28
  461. package/dist/arena/planner.js +0 -312
  462. package/dist/arena/providers/docs.d.ts +0 -7
  463. package/dist/arena/providers/docs.js +0 -111
  464. package/dist/arena/providers/git.d.ts +0 -8
  465. package/dist/arena/providers/git.js +0 -174
  466. package/dist/arena/providers/index.d.ts +0 -32
  467. package/dist/arena/providers/index.js +0 -132
  468. package/dist/arena/providers/none.d.ts +0 -7
  469. package/dist/arena/providers/none.js +0 -11
  470. package/dist/arena/providers/repo.d.ts +0 -7
  471. package/dist/arena/providers/repo.js +0 -258
  472. package/dist/arena/render/session.d.ts +0 -17
  473. package/dist/arena/render/session.js +0 -190
  474. package/dist/arena/render/terminal.d.ts +0 -34
  475. package/dist/arena/render/terminal.js +0 -286
  476. package/dist/arena/strategies/discussion.d.ts +0 -25
  477. package/dist/arena/strategies/discussion.js +0 -143
  478. package/dist/arena/strategies/index.d.ts +0 -15
  479. package/dist/arena/strategies/index.js +0 -28
  480. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  481. package/dist/arena/strategies/language-wrapper.js +0 -102
  482. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  483. package/dist/arena/strategies/lens-wrapper.js +0 -236
  484. package/dist/arena/strategies/planning.d.ts +0 -30
  485. package/dist/arena/strategies/planning.js +0 -225
  486. package/dist/arena/strategies/review.d.ts +0 -26
  487. package/dist/arena/strategies/review.js +0 -168
  488. package/dist/arena/strategies/utils.d.ts +0 -36
  489. package/dist/arena/strategies/utils.js +0 -603
  490. package/dist/arena/tools/selector.d.ts +0 -17
  491. package/dist/arena/tools/selector.js +0 -61
  492. package/dist/arena/transitions.d.ts +0 -53
  493. package/dist/arena/transitions.js +0 -97
  494. package/dist/arena/types.d.ts +0 -518
  495. package/dist/arena/types.js +0 -27
  496. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  497. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  498. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  499. package/dist/cc-orchestrator/cc-capability.js +0 -53
  500. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  501. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  502. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  503. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  504. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  505. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  506. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  507. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  508. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  509. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  510. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  511. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  512. package/dist/cc-orchestrator/index.d.ts +0 -8
  513. package/dist/cc-orchestrator/index.js +0 -8
  514. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  515. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  516. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  517. package/dist/cc-orchestrator/session-discovery.js +0 -125
  518. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  519. package/dist/cc-orchestrator/session-history.js +0 -150
  520. package/dist/cron/cron-runtime.d.ts +0 -2
  521. package/dist/cron/cron-runtime.js +0 -2
  522. package/dist/cron/cron-store.d.ts +0 -2
  523. package/dist/cron/cron-store.js +0 -2
  524. package/dist/cron/scheduler.d.ts +0 -7
  525. package/dist/cron/scheduler.js +0 -7
  526. package/dist/engine/goal.js +0 -206
  527. package/dist/external-agents/config.d.ts +0 -2
  528. package/dist/external-agents/config.js +0 -15
  529. package/dist/external-agents/types.d.ts +0 -31
  530. package/dist/git/parse-log.d.ts +0 -13
  531. package/dist/git/parse-log.js +0 -21
  532. package/dist/git/utils.d.ts +0 -49
  533. package/dist/git/utils.js +0 -161
  534. package/dist/git/worktree/crud.d.ts +0 -72
  535. package/dist/git/worktree/crud.js +0 -235
  536. package/dist/git/worktree/diff.d.ts +0 -14
  537. package/dist/git/worktree/diff.js +0 -82
  538. package/dist/git/worktree/git-exec.d.ts +0 -7
  539. package/dist/git/worktree/git-exec.js +0 -87
  540. package/dist/git/worktree/index.d.ts +0 -5
  541. package/dist/git/worktree/index.js +0 -5
  542. package/dist/git/worktree/query.d.ts +0 -43
  543. package/dist/git/worktree/query.js +0 -128
  544. package/dist/git/worktree/slug.d.ts +0 -11
  545. package/dist/git/worktree/slug.js +0 -58
  546. package/dist/git/worktree.d.ts +0 -1
  547. package/dist/git/worktree.js +0 -5
  548. package/dist/lsp/client.d.ts +0 -41
  549. package/dist/lsp/client.js +0 -186
  550. package/dist/lsp/manager.d.ts +0 -40
  551. package/dist/lsp/manager.js +0 -155
  552. package/dist/lsp/root-path.d.ts +0 -9
  553. package/dist/lsp/root-path.js +0 -12
  554. package/dist/lsp/servers.d.ts +0 -16
  555. package/dist/lsp/servers.js +0 -60
  556. package/dist/prompt/sections/coding.md +0 -35
  557. package/dist/quota/credentials.d.ts +0 -3
  558. package/dist/quota/credentials.js +0 -80
  559. package/dist/quota/index.d.ts +0 -36
  560. package/dist/quota/index.js +0 -155
  561. package/dist/quota/types.d.ts +0 -48
  562. package/dist/quota/types.js +0 -13
  563. package/dist/review/review-prompt.d.ts +0 -28
  564. package/dist/review/review-prompt.js +0 -81
  565. package/dist/state.d.ts +0 -160
  566. package/dist/state.js +0 -267
  567. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  568. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  570. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  571. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  572. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  573. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  574. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  576. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  577. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  578. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  579. package/dist/tool-system/builtin/arena.d.ts +0 -31
  580. package/dist/tool-system/builtin/arena.js +0 -416
  581. package/dist/tool-system/builtin/brief.d.ts +0 -6
  582. package/dist/tool-system/builtin/brief.js +0 -41
  583. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  584. package/dist/tool-system/builtin/check-quota.js +0 -34
  585. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  586. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  587. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  588. package/dist/tool-system/builtin/lsp.js +0 -144
  589. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  590. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  591. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  592. package/dist/tool-system/builtin/worktree.js +0 -363
  593. /package/dist/{external-agents → links}/types.js +0 -0
  594. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  595. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -1,28 +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 { ArenaUsageRecorder } from "./types.js";
16
- import type { ArenaPlan, ArenaMode } from "./types.js";
17
- /** Explicit flags the user may pass via CLI or tool args */
18
- export interface PlannerFlags {
19
- mode?: ArenaMode;
20
- base?: string;
21
- head?: string;
22
- }
23
- /**
24
- * Run the planner to produce an ArenaPlan from natural language.
25
- *
26
- * Priority: explicit flags > LLM plan > safe defaults.
27
- */
28
- export declare function planArena(topic: string, llmConfig: LLMConfig, flags?: PlannerFlags, signal?: AbortSignal, onUsage?: ArenaUsageRecorder): Promise<ArenaPlan>;
@@ -1,312 +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, onUsage) {
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
- onUsage?.(response.usage);
79
- const plan = parsePlanResponse(response.text, topic);
80
- // Explicit flags override LLM output
81
- if (flags?.mode)
82
- plan.mode = flags.mode;
83
- if (flags?.base) {
84
- plan.sources = [{ kind: "git", targets: [flags.base, flags.head ?? "HEAD"] }];
85
- plan.subject = { kind: "changes", label: `${flags.base}...${flags.head ?? "HEAD"}`, targets: [flags.base, flags.head ?? "HEAD"] };
86
- }
87
- logger.info("arena.planner", { plan });
88
- return plan;
89
- }
90
- catch (err) {
91
- logger.warn("arena.planner_fallback", { error: err.message });
92
- return buildFallbackPlan(topic, flags);
93
- }
94
- }
95
- function parsePlanResponse(text, topic) {
96
- const fenced = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
97
- const jsonStr = fenced ? fenced[1].trim() : text.match(/\{[\s\S]*\}/)?.[0] ?? text;
98
- try {
99
- const parsed = JSON.parse(jsonStr);
100
- return {
101
- mode: validateMode(parsed.mode),
102
- lenses: parseLenses(parsed.lenses),
103
- sources: parseSources(parsed.sources),
104
- subject: parseSubject(parsed.subject, topic),
105
- outputShape: parseOutputShape(parsed.outputShape, parsed.mode),
106
- confidence: validateConfidence(parsed.confidence),
107
- followUpQuestion: parsed.followUpQuestion || undefined,
108
- };
109
- }
110
- catch {
111
- return buildFallbackPlan(topic);
112
- }
113
- }
114
- function buildExplicitPlan(topic, flags) {
115
- return {
116
- mode: flags.mode,
117
- lenses: [{ name: "engineering", weight: 1 }],
118
- sources: [
119
- { kind: "git", targets: [flags.base, flags.head ?? "HEAD"] },
120
- { kind: "repo" },
121
- ],
122
- subject: {
123
- kind: "changes",
124
- label: `${flags.base}...${flags.head ?? "HEAD"}`,
125
- targets: [flags.base, flags.head ?? "HEAD"],
126
- },
127
- outputShape: {
128
- overviewLabel: "What Changed",
129
- emphasize: ["risk", "improvement"],
130
- },
131
- confidence: "high",
132
- };
133
- }
134
- function buildFallbackPlan(topic, flags) {
135
- if (flags?.base) {
136
- return {
137
- mode: flags.mode ?? "review",
138
- lenses: [{ name: "engineering", weight: 1 }],
139
- sources: [{ kind: "git" }, { kind: "repo" }],
140
- subject: { kind: "changes", label: topic, targets: [flags.base, flags.head ?? "HEAD"] },
141
- outputShape: {
142
- overviewLabel: "What Changed",
143
- emphasize: ["risk", "improvement"],
144
- },
145
- confidence: "low",
146
- };
147
- }
148
- const lower = topic.toLowerCase();
149
- const hasDoc = /\b(prd|doc|docs|spec|rfc|design doc|requirement|proposal)\b/i.test(topic)
150
- || /(文档|需求|方案)/.test(topic);
151
- const hasRoadmap = /\b(roadmap|plan|planning|strategy|migration|refactor)\b/i.test(topic)
152
- || /(演进|路线图|规划|重构)/.test(topic);
153
- const hasFeasibility = /\b(feasibility|feasible|can we|should we|trade-?off)\b/i.test(topic)
154
- || /(可行|能不能|值不值得|取舍)/.test(topic);
155
- const hasReview = /\b(review|pr|diff|patch|change)\b/i.test(topic)
156
- || /(改动|评审|审查)/.test(topic);
157
- const hasRepo = /\b(repo|repository|codebase|module|architecture)\b/i.test(topic)
158
- || /(代码库|仓库|模块|架构)/.test(topic);
159
- if (hasRoadmap) {
160
- return {
161
- mode: "planning",
162
- lenses: hasDoc
163
- ? [{ name: "architecture", weight: 1 }, { name: "product", weight: 0.7 }]
164
- : [{ name: "architecture", weight: 1 }, { name: "engineering", weight: 0.8 }],
165
- sources: hasDoc
166
- ? [{ kind: "docs" }, ...(hasRepo ? [{ kind: "repo" }] : [])]
167
- : [{ kind: "repo" }, { kind: "docs" }],
168
- subject: { kind: hasDoc ? "mixed" : "topic", label: topic },
169
- outputShape: {
170
- overviewLabel: "Current Scope",
171
- emphasize: ["improvement", "risk", "question"],
172
- },
173
- confidence: "low",
174
- };
175
- }
176
- if (hasDoc && hasFeasibility) {
177
- return {
178
- mode: "discussion",
179
- lenses: [{ name: "product", weight: 1 }, { name: "engineering", weight: 0.8 }],
180
- sources: hasRepo ? [{ kind: "docs" }, { kind: "repo" }] : [{ kind: "docs" }],
181
- subject: { kind: hasRepo ? "mixed" : "docs", label: topic },
182
- outputShape: {
183
- overviewLabel: "Problem Framing",
184
- emphasize: ["question", "risk", "improvement"],
185
- },
186
- confidence: "low",
187
- };
188
- }
189
- if (hasDoc) {
190
- return {
191
- mode: hasReview ? "review" : "discussion",
192
- lenses: [{ name: "product", weight: 1 }, { name: "architecture", weight: 0.6 }],
193
- sources: hasRepo ? [{ kind: "docs" }, { kind: "repo" }] : [{ kind: "docs" }],
194
- subject: { kind: hasRepo ? "mixed" : "docs", label: topic },
195
- outputShape: {
196
- overviewLabel: hasReview ? "Current Scope" : "Problem Framing",
197
- emphasize: ["question", "improvement", "risk"],
198
- },
199
- confidence: "low",
200
- };
201
- }
202
- if (hasFeasibility) {
203
- return {
204
- mode: "discussion",
205
- lenses: hasRepo
206
- ? [{ name: "product", weight: 1 }, { name: "engineering", weight: 0.8 }]
207
- : [{ name: "general", weight: 1 }, { name: "product", weight: 0.6 }],
208
- sources: hasRepo ? [{ kind: "repo" }, { kind: "docs" }] : [{ kind: "none" }],
209
- subject: { kind: hasRepo ? "topic" : "topic", label: topic },
210
- outputShape: {
211
- overviewLabel: "Problem Framing",
212
- emphasize: ["question", "risk", "improvement"],
213
- },
214
- confidence: "low",
215
- };
216
- }
217
- if (hasReview || /\b(commit|branch|diff|patch|bug|fix|回归)\b/i.test(lower)) {
218
- return {
219
- mode: "review",
220
- lenses: [{ name: "engineering", weight: 1 }],
221
- sources: [{ kind: "git" }, { kind: "repo" }],
222
- subject: { kind: "changes", label: topic },
223
- outputShape: {
224
- overviewLabel: "What Changed",
225
- emphasize: ["risk", "improvement", "question"],
226
- },
227
- confidence: "low",
228
- };
229
- }
230
- return {
231
- mode: flags?.mode ?? "review",
232
- lenses: [{ name: hasRepo ? "architecture" : "general", weight: 1 }],
233
- sources: hasRepo ? [{ kind: "repo" }, { kind: "docs" }] : [{ kind: "none" }],
234
- subject: { kind: "topic", label: topic },
235
- outputShape: {
236
- overviewLabel: hasRepo ? "Current Scope" : "Problem Framing",
237
- emphasize: hasRepo ? ["improvement", "risk", "question"] : ["question", "risk", "improvement"],
238
- },
239
- confidence: "low",
240
- };
241
- }
242
- // ─── Validators ─────────────────────────────────────────────────
243
- function validateMode(v) {
244
- if (v === "review" || v === "discussion" || v === "planning")
245
- return v;
246
- return "review";
247
- }
248
- function validateConfidence(v) {
249
- if (v === "high" || v === "medium" || v === "low")
250
- return v;
251
- return "medium";
252
- }
253
- function parseLenses(v) {
254
- if (!Array.isArray(v) || v.length === 0) {
255
- return [{ name: "general", weight: 1 }];
256
- }
257
- const result = v
258
- .filter((item) => LENS_NAMES.includes(item?.name))
259
- .map((item) => ({
260
- name: item.name,
261
- weight: typeof item.weight === "number" ? item.weight : 1,
262
- }));
263
- return result.length > 0 ? result : [{ name: "general", weight: 1 }];
264
- }
265
- function parseSources(v) {
266
- if (!Array.isArray(v) || v.length === 0) {
267
- return [{ kind: "none" }];
268
- }
269
- const validKinds = ["git", "repo", "docs", "web", "none"];
270
- const result = v
271
- .filter((item) => validKinds.includes(item?.kind))
272
- .map((item) => ({
273
- kind: item.kind,
274
- targets: Array.isArray(item.targets) ? item.targets : undefined,
275
- }));
276
- return result.length > 0 ? result : [{ kind: "none" }];
277
- }
278
- function parseSubject(v, topic) {
279
- if (!v || typeof v !== "object") {
280
- return { kind: "topic", label: topic };
281
- }
282
- const obj = v;
283
- const validKinds = ["changes", "files", "docs", "topic", "mixed"];
284
- return {
285
- kind: validKinds.includes(obj.kind) ? obj.kind : "topic",
286
- label: obj.label ?? topic,
287
- targets: Array.isArray(obj.targets) ? obj.targets : undefined,
288
- };
289
- }
290
- const VALID_EMPHASIZE = new Set(["strength", "improvement", "risk", "question"]);
291
- function parseOutputShape(v, mode) {
292
- if (v && typeof v === "object") {
293
- const obj = v;
294
- return {
295
- overviewLabel: obj.overviewLabel ?? "Overview",
296
- emphasize: Array.isArray(obj.emphasize)
297
- ? obj.emphasize.filter((k) => VALID_EMPHASIZE.has(k))
298
- : ["risk", "improvement"],
299
- };
300
- }
301
- // Defaults per mode
302
- switch (mode) {
303
- case "review":
304
- return { overviewLabel: "What Changed", emphasize: ["risk", "improvement"] };
305
- case "discussion":
306
- return { overviewLabel: "Problem Framing", emphasize: ["strength", "risk", "question"] };
307
- case "planning":
308
- return { overviewLabel: "Current Scope", emphasize: ["improvement", "risk"] };
309
- default:
310
- return { overviewLabel: "Overview", emphasize: ["risk", "improvement"] };
311
- }
312
- }
@@ -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
- }>;