@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.
- package/README.md +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +20 -5
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +20 -4
- package/dist/context/manager.js +42 -7
- package/dist/context/token-counter.js +5 -3
- package/dist/context/tool-result-storage.d.ts +6 -0
- package/dist/context/tool-result-storage.js +25 -4
- package/dist/credentials/access.d.ts +13 -2
- package/dist/credentials/access.js +99 -4
- package/dist/credentials/index.d.ts +3 -2
- package/dist/credentials/index.js +2 -1
- package/dist/credentials/oauth.d.ts +9 -1
- package/dist/credentials/oauth.js +80 -1
- package/dist/credentials/store.d.ts +16 -2
- package/dist/credentials/store.js +33 -11
- package/dist/credentials/types.d.ts +62 -1
- package/dist/credentials/types.js +16 -1
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +272 -184
- package/dist/engine/engine.js +1869 -1864
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/session-title.d.ts +2 -1
- package/dist/engine/session-title.js +4 -1
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +67 -10
- package/dist/engine/turn-loop.js +538 -97
- package/dist/engine/types.d.ts +35 -4
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +26 -9
- package/dist/hooks/events.js +0 -3
- package/dist/hooks/goal-stop-hook.d.ts +28 -29
- package/dist/hooks/goal-stop-hook.js +344 -144
- package/dist/hooks/registry.js +4 -1
- package/dist/hooks/shell-runner.d.ts +12 -1
- package/dist/hooks/shell-runner.js +160 -9
- package/dist/index.d.ts +51 -110
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +37 -125
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +72 -10
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/llm/types.d.ts +12 -5
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +10 -4
- package/dist/plugins/pluginCommandHook.js +133 -18
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +77 -3
- package/dist/protocol/chat-session-manager.js +194 -18
- package/dist/protocol/chat-session.d.ts +72 -9
- package/dist/protocol/chat-session.js +151 -16
- package/dist/protocol/client.d.ts +37 -4
- package/dist/protocol/client.js +118 -6
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +152 -14
- package/dist/protocol/server.js +1574 -229
- package/dist/protocol/types.d.ts +182 -32
- package/dist/protocol/types.js +18 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.d.ts +3 -0
- package/dist/services/dream-consolidation.js +14 -2
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.d.ts +34 -10
- package/dist/services/oauth.js +236 -98
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +208 -25
- package/dist/session/session-manager.js +1232 -116
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +76 -6
- package/dist/session/transcript.js +278 -7
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +279 -34
- package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
- package/dist/tool-system/builtin/background-jobs.js +111 -15
- package/dist/tool-system/builtin/background-work.d.ts +12 -1
- package/dist/tool-system/builtin/background-work.js +12 -1
- package/dist/tool-system/builtin/bash.d.ts +3 -5
- package/dist/tool-system/builtin/bash.js +14 -6
- package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +14 -10
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.d.ts +4 -0
- package/dist/tool-system/builtin/generate-video.js +164 -28
- package/dist/tool-system/builtin/glob.d.ts +2 -1
- package/dist/tool-system/builtin/glob.js +28 -3
- package/dist/tool-system/builtin/grep.d.ts +1 -0
- package/dist/tool-system/builtin/grep.js +82 -17
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +57 -18
- package/dist/tool-system/builtin/index.js +280 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/video-providers.d.ts +12 -15
- package/dist/tool-system/builtin/video-providers.js +1 -0
- package/dist/tool-system/builtin/view-image.d.ts +2 -2
- package/dist/tool-system/builtin/web-fetch.js +60 -15
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +14 -4
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +94 -24
- package/dist/tool-system/executor.js +99 -58
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +17 -1
- package/dist/tool-system/mcp-manager.js +72 -7
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/path-policy.d.ts +19 -0
- package/dist/tool-system/path-policy.js +62 -1
- package/dist/tool-system/permission.d.ts +69 -3
- package/dist/tool-system/permission.js +429 -30
- package/dist/tool-system/registry.d.ts +15 -3
- package/dist/tool-system/registry.js +82 -40
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +201 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -43
- package/dist/arena/arena.js +0 -333
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -24
- package/dist/arena/phases/adjudication.js +0 -141
- package/dist/arena/phases/build-consensus.d.ts +0 -29
- package/dist/arena/phases/build-consensus.js +0 -83
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -45
- package/dist/arena/phases/cross-review.js +0 -218
- package/dist/arena/phases/debate-rounds.d.ts +0 -27
- package/dist/arena/phases/debate-rounds.js +0 -159
- package/dist/arena/phases/participant-research.d.ts +0 -38
- package/dist/arena/phases/participant-research.js +0 -314
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
- package/dist/arena/phases/planning-detail-expansion.js +0 -119
- package/dist/arena/planner.d.ts +0 -27
- package/dist/arena/planner.js +0 -311
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -514
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -69
- package/dist/git/worktree/crud.js +0 -206
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -51
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -42
- package/dist/git/worktree/query.js +0 -121
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -415
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -345
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
package/dist/arena/planner.d.ts
DELETED
|
@@ -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>;
|
package/dist/arena/planner.js
DELETED
|
@@ -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
|
-
}>;
|