@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
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parsing helpers for LLM responses in iterate mode.
|
|
3
|
-
*
|
|
4
|
-
* We use literal XML-ish markers (<v1_content>…</v1_content>) instead of
|
|
5
|
-
* pure JSON because LLMs are far more reliable at "write 5000 chars of
|
|
6
|
-
* markdown then a small JSON block at the end" than at producing one
|
|
7
|
-
* giant well-formed JSON document with a 5000-char string field.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Extract content between `<tag>` and `</tag>`.
|
|
11
|
-
*
|
|
12
|
-
* Forgiving in two ways:
|
|
13
|
-
* - Case-insensitive on the tag name.
|
|
14
|
-
* - If the closing tag is missing (LLM hit max_tokens mid-output), we still
|
|
15
|
-
* return everything after the opening tag, stopping at the next sibling
|
|
16
|
-
* tag (e.g. the `<merge_rationale>` block) if present, otherwise EOF.
|
|
17
|
-
*/
|
|
18
|
-
export function extractTag(text, tag) {
|
|
19
|
-
// First try the well-formed case (open + close).
|
|
20
|
-
const closed = new RegExp(`<${tag}>([\\s\\S]*?)<\\/${tag}>`, "i");
|
|
21
|
-
const closedMatch = text.match(closed);
|
|
22
|
-
if (closedMatch)
|
|
23
|
-
return closedMatch[1].trim();
|
|
24
|
-
// Fall back to "open tag without close" — find <tag> and return content
|
|
25
|
-
// until the next opening tag of any kind, or EOF.
|
|
26
|
-
const opener = new RegExp(`<${tag}>`, "i");
|
|
27
|
-
const openMatch = opener.exec(text);
|
|
28
|
-
if (!openMatch)
|
|
29
|
-
return null;
|
|
30
|
-
const after = text.slice(openMatch.index + openMatch[0].length);
|
|
31
|
-
const nextTag = after.search(/<[a-z_][\w]*>/i);
|
|
32
|
-
const body = nextTag >= 0 ? after.slice(0, nextTag) : after;
|
|
33
|
-
return body.trim();
|
|
34
|
-
}
|
|
35
|
-
/** Parse merge response: extract v1 content + rationale. Falls back to whole text if markers are missing. */
|
|
36
|
-
export function parseMergeResponse(text) {
|
|
37
|
-
const content = extractTag(text, "v1_content");
|
|
38
|
-
const rationale = extractTag(text, "merge_rationale");
|
|
39
|
-
if (content) {
|
|
40
|
-
return { content, rationale: rationale ?? undefined };
|
|
41
|
-
}
|
|
42
|
-
// Fallback: no markers — treat whole response as content (with a warning sentinel).
|
|
43
|
-
return { content: text.trim(), rationale: "[merge markers not found; using full response]" };
|
|
44
|
-
}
|
|
45
|
-
/** Parse revise response: extract content + meta JSON. */
|
|
46
|
-
export function parseReviseResponse(text) {
|
|
47
|
-
const content = extractTag(text, "v_next_content");
|
|
48
|
-
const metaRaw = extractTag(text, "v_next_meta");
|
|
49
|
-
let meta = {};
|
|
50
|
-
if (metaRaw) {
|
|
51
|
-
// Strip surrounding code fences if present.
|
|
52
|
-
const cleaned = metaRaw.replace(/^```(?:json)?\s*/i, "").replace(/\s*```$/, "").trim();
|
|
53
|
-
try {
|
|
54
|
-
meta = JSON.parse(cleaned);
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
meta = { changelog: `[meta JSON parse failed; raw text below]\n${metaRaw}` };
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
content: content ?? text.trim(),
|
|
62
|
-
meta,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Parse critique JSON from an argue-phase response.
|
|
67
|
-
* Tolerant: handles bare objects, fenced JSON, leading prose, trailing prose.
|
|
68
|
-
*/
|
|
69
|
-
export function parseCritiquesResponse(text, criticName, idPrefix) {
|
|
70
|
-
const cleaned = text.replace(/^[^{[]*/, "").replace(/[^}\]]*$/, "").trim();
|
|
71
|
-
let parsed;
|
|
72
|
-
try {
|
|
73
|
-
parsed = JSON.parse(cleaned);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
// Try to find the largest JSON object/array in the text.
|
|
77
|
-
const jsonMatch = text.match(/\{[\s\S]*\}|\[[\s\S]*\]/);
|
|
78
|
-
if (!jsonMatch)
|
|
79
|
-
return [];
|
|
80
|
-
try {
|
|
81
|
-
parsed = JSON.parse(jsonMatch[0]);
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
return [];
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
// Accept either {critiques: [...]} or [...] directly.
|
|
88
|
-
const arr = Array.isArray(parsed)
|
|
89
|
-
? parsed
|
|
90
|
-
: parsed.critiques;
|
|
91
|
-
if (!Array.isArray(arr))
|
|
92
|
-
return [];
|
|
93
|
-
const out = [];
|
|
94
|
-
for (let i = 0; i < arr.length; i++) {
|
|
95
|
-
const c = arr[i];
|
|
96
|
-
if (!c.anchor || !c.comment)
|
|
97
|
-
continue;
|
|
98
|
-
let evidence;
|
|
99
|
-
if (Array.isArray(c.evidence)) {
|
|
100
|
-
evidence = c.evidence
|
|
101
|
-
.filter((e) => {
|
|
102
|
-
if (typeof e !== "object" || e === null)
|
|
103
|
-
return false;
|
|
104
|
-
const obj = e;
|
|
105
|
-
return typeof obj.url === "string";
|
|
106
|
-
})
|
|
107
|
-
.map((e) => ({ url: e.url, snippet: e.snippet }));
|
|
108
|
-
if (evidence.length === 0)
|
|
109
|
-
evidence = undefined;
|
|
110
|
-
}
|
|
111
|
-
out.push({
|
|
112
|
-
id: `${idPrefix}-${criticName}-${i + 1}`,
|
|
113
|
-
critic: criticName,
|
|
114
|
-
anchor: String(c.anchor),
|
|
115
|
-
severity: c.severity ?? "minor",
|
|
116
|
-
category: c.category ?? "other",
|
|
117
|
-
comment: String(c.comment),
|
|
118
|
-
suggestion: c.suggestion ? String(c.suggestion) : undefined,
|
|
119
|
-
evidence,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
return out;
|
|
123
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Argue phase — critics read a draft and produce critiques in parallel.
|
|
3
|
-
*
|
|
4
|
-
* If `enableWebSearch` is on, each critic runs a tool-use loop and may call
|
|
5
|
-
* web_search / web_fetch up to `maxArgueToolRounds` times before producing
|
|
6
|
-
* the final critiques JSON. This is the deep-research path that catches
|
|
7
|
-
* fabricated claims.
|
|
8
|
-
*/
|
|
9
|
-
import type { ArenaParticipant } from "../../types.js";
|
|
10
|
-
import type { FormatPack } from "../formats/index.js";
|
|
11
|
-
import type { Critique, Draft, IterateProgressEvent, IterateSubject } from "../types.js";
|
|
12
|
-
export declare function runArgueRound(args: {
|
|
13
|
-
subject: IterateSubject;
|
|
14
|
-
format: FormatPack;
|
|
15
|
-
draft: Draft;
|
|
16
|
-
critics: ArenaParticipant[];
|
|
17
|
-
round: number;
|
|
18
|
-
enableWebSearch?: boolean;
|
|
19
|
-
maxToolRounds?: number;
|
|
20
|
-
signal?: AbortSignal;
|
|
21
|
-
onProgress?: (e: IterateProgressEvent) => void;
|
|
22
|
-
}): Promise<Critique[]>;
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Argue phase — critics read a draft and produce critiques in parallel.
|
|
3
|
-
*
|
|
4
|
-
* If `enableWebSearch` is on, each critic runs a tool-use loop and may call
|
|
5
|
-
* web_search / web_fetch up to `maxArgueToolRounds` times before producing
|
|
6
|
-
* the final critiques JSON. This is the deep-research path that catches
|
|
7
|
-
* fabricated claims.
|
|
8
|
-
*/
|
|
9
|
-
import { createLLMClient } from "../../../llm/client-factory.js";
|
|
10
|
-
import { logger } from "../../../logging/logger.js";
|
|
11
|
-
import { parseCritiquesResponse } from "../parse.js";
|
|
12
|
-
import { ITERATE_WEB_TOOLS, executeIterateWebTool, hasWebSearchProvider } from "../tools/web-tools.js";
|
|
13
|
-
const DEFAULT_MAX_TOOL_ROUNDS = 8;
|
|
14
|
-
export async function runArgueRound(args) {
|
|
15
|
-
const { subject, format, draft, critics, round, enableWebSearch, maxToolRounds, signal, onProgress } = args;
|
|
16
|
-
onProgress?.({ type: "argue_start", round, data: { criticCount: critics.length } });
|
|
17
|
-
// Web search is only useful if a provider is actually configured. Silently
|
|
18
|
-
// downgrade if not — log a warning so the user knows.
|
|
19
|
-
const wantWeb = Boolean(enableWebSearch);
|
|
20
|
-
const webAvailable = wantWeb && hasWebSearchProvider();
|
|
21
|
-
if (wantWeb && !webAvailable) {
|
|
22
|
-
logger.warn("arena.iterate.argue_web_unavailable", {
|
|
23
|
-
reason: "No SERPER_API_KEY / TAVILY_API_KEY / SEARXNG_URL configured",
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
const idPrefix = `r${round}`;
|
|
27
|
-
const tasks = critics.map(async (c) => {
|
|
28
|
-
signal?.throwIfAborted();
|
|
29
|
-
try {
|
|
30
|
-
if (webAvailable) {
|
|
31
|
-
return await argueWithToolLoop({
|
|
32
|
-
critic: c,
|
|
33
|
-
subject,
|
|
34
|
-
format,
|
|
35
|
-
draft,
|
|
36
|
-
idPrefix,
|
|
37
|
-
maxToolRounds: maxToolRounds ?? DEFAULT_MAX_TOOL_ROUNDS,
|
|
38
|
-
signal,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return await argueSingleShot({ critic: c, subject, format, draft, idPrefix, signal });
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
logger.warn("arena.iterate.argue_failed", {
|
|
45
|
-
round,
|
|
46
|
-
critic: c.name,
|
|
47
|
-
error: err.message,
|
|
48
|
-
});
|
|
49
|
-
return [];
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
const results = await Promise.all(tasks);
|
|
53
|
-
const allCritiques = results.flat();
|
|
54
|
-
onProgress?.({
|
|
55
|
-
type: "argue_done",
|
|
56
|
-
round,
|
|
57
|
-
data: { critiqueCount: allCritiques.length, webEnabled: webAvailable },
|
|
58
|
-
});
|
|
59
|
-
return allCritiques;
|
|
60
|
-
}
|
|
61
|
-
// ─── Single-shot argue (no tools) ─────────────────────────────────────
|
|
62
|
-
async function argueSingleShot(args) {
|
|
63
|
-
const { critic, subject, format, draft, idPrefix, signal } = args;
|
|
64
|
-
const client = await createLLMClient(critic.llm, critic.clientDefaults);
|
|
65
|
-
const resp = await client.createMessage({
|
|
66
|
-
systemPrompt: format.argueSystem(format.format),
|
|
67
|
-
messages: [{ role: "user", content: format.argueUser(subject, draft) }],
|
|
68
|
-
tools: [],
|
|
69
|
-
signal,
|
|
70
|
-
});
|
|
71
|
-
const critiques = parseCritiquesResponse(resp.text, critic.name, idPrefix);
|
|
72
|
-
logger.info("arena.iterate.argue_singleshot", {
|
|
73
|
-
critic: critic.name,
|
|
74
|
-
critiqueCount: critiques.length,
|
|
75
|
-
});
|
|
76
|
-
return critiques;
|
|
77
|
-
}
|
|
78
|
-
// ─── Tool-use argue (with web search) ─────────────────────────────────
|
|
79
|
-
async function argueWithToolLoop(args) {
|
|
80
|
-
const { critic, subject, format, draft, idPrefix, maxToolRounds, signal } = args;
|
|
81
|
-
const client = await createLLMClient(critic.llm, critic.clientDefaults);
|
|
82
|
-
const messages = [
|
|
83
|
-
{ role: "user", content: format.argueUser(subject, draft) },
|
|
84
|
-
];
|
|
85
|
-
let toolRounds = 0;
|
|
86
|
-
let finalText = "";
|
|
87
|
-
while (toolRounds < maxToolRounds) {
|
|
88
|
-
signal?.throwIfAborted();
|
|
89
|
-
const resp = await client.createMessage({
|
|
90
|
-
systemPrompt: format.argueSystem(format.format),
|
|
91
|
-
messages,
|
|
92
|
-
tools: ITERATE_WEB_TOOLS,
|
|
93
|
-
signal,
|
|
94
|
-
});
|
|
95
|
-
if (resp.text)
|
|
96
|
-
finalText = resp.text;
|
|
97
|
-
if (!resp.toolCalls || resp.toolCalls.length === 0) {
|
|
98
|
-
// Done — final response with critiques JSON.
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
// Append assistant message with tool_use blocks
|
|
102
|
-
messages.push({
|
|
103
|
-
role: "assistant",
|
|
104
|
-
content: [
|
|
105
|
-
...(resp.text ? [{ type: "text", text: resp.text }] : []),
|
|
106
|
-
...resp.toolCalls.map((tc) => ({
|
|
107
|
-
type: "tool_use",
|
|
108
|
-
id: tc.id,
|
|
109
|
-
name: tc.toolName,
|
|
110
|
-
input: tc.args,
|
|
111
|
-
})),
|
|
112
|
-
],
|
|
113
|
-
});
|
|
114
|
-
// Execute tools and append tool_result blocks
|
|
115
|
-
const toolResults = await Promise.all(resp.toolCalls.map(async (tc) => {
|
|
116
|
-
try {
|
|
117
|
-
const result = await executeIterateWebTool(tc.toolName, tc.args);
|
|
118
|
-
return { id: tc.id, content: result };
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
return { id: tc.id, content: `Error: ${err.message}` };
|
|
122
|
-
}
|
|
123
|
-
}));
|
|
124
|
-
messages.push({
|
|
125
|
-
role: "user",
|
|
126
|
-
content: toolResults.map((tr) => ({
|
|
127
|
-
type: "tool_result",
|
|
128
|
-
tool_use_id: tr.id,
|
|
129
|
-
content: tr.content,
|
|
130
|
-
})),
|
|
131
|
-
});
|
|
132
|
-
toolRounds++;
|
|
133
|
-
}
|
|
134
|
-
// If we ran out of rounds with no final text, prod the model once more.
|
|
135
|
-
if (!finalText && toolRounds >= maxToolRounds) {
|
|
136
|
-
const resp = await client.createMessage({
|
|
137
|
-
systemPrompt: format.argueSystem(format.format),
|
|
138
|
-
messages: [
|
|
139
|
-
...messages,
|
|
140
|
-
{
|
|
141
|
-
role: "user",
|
|
142
|
-
content: "You have used the maximum number of tool rounds. Produce your " +
|
|
143
|
-
"critiques JSON now, based on what you have already gathered. " +
|
|
144
|
-
"Do not request any more tools.",
|
|
145
|
-
},
|
|
146
|
-
],
|
|
147
|
-
tools: [],
|
|
148
|
-
signal,
|
|
149
|
-
});
|
|
150
|
-
finalText = resp.text;
|
|
151
|
-
}
|
|
152
|
-
if (!finalText) {
|
|
153
|
-
// Both the tool loop and the force-conclude fallback produced no text
|
|
154
|
-
// (e.g. repeated max-token truncation). Log it — parseCritiquesResponse
|
|
155
|
-
// will just yield no critiques rather than silently parsing "".
|
|
156
|
-
logger.warn("arena.iterate.argue_empty_response", { critic: critic.name, toolRounds });
|
|
157
|
-
}
|
|
158
|
-
const critiques = parseCritiquesResponse(finalText, critic.name, idPrefix);
|
|
159
|
-
logger.info("arena.iterate.argue_toolloop", {
|
|
160
|
-
critic: critic.name,
|
|
161
|
-
critiqueCount: critiques.length,
|
|
162
|
-
toolRounds,
|
|
163
|
-
});
|
|
164
|
-
return critiques;
|
|
165
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Revise phase — author rewrites the draft addressing critiques.
|
|
3
|
-
*/
|
|
4
|
-
import type { ArenaParticipant } from "../../types.js";
|
|
5
|
-
import type { FormatPack } from "../formats/index.js";
|
|
6
|
-
import type { Critique, Draft, IterateProgressEvent, IterateSubject } from "../types.js";
|
|
7
|
-
export declare function runRevise(args: {
|
|
8
|
-
subject: IterateSubject;
|
|
9
|
-
format: FormatPack;
|
|
10
|
-
previous: Draft;
|
|
11
|
-
critiques: Critique[];
|
|
12
|
-
author: ArenaParticipant;
|
|
13
|
-
minDraftLength: number;
|
|
14
|
-
signal?: AbortSignal;
|
|
15
|
-
onProgress?: (e: IterateProgressEvent) => void;
|
|
16
|
-
}): Promise<Draft>;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Revise phase — author rewrites the draft addressing critiques.
|
|
3
|
-
*/
|
|
4
|
-
import { createLLMClient } from "../../../llm/client-factory.js";
|
|
5
|
-
import { logger } from "../../../logging/logger.js";
|
|
6
|
-
import { parseReviseResponse } from "../parse.js";
|
|
7
|
-
export async function runRevise(args) {
|
|
8
|
-
const { subject, format, previous, critiques, author, minDraftLength, signal, onProgress } = args;
|
|
9
|
-
onProgress?.({ type: "revise_start", round: previous.version + 1, participant: author.name });
|
|
10
|
-
const client = await createLLMClient(author.llm, author.clientDefaults);
|
|
11
|
-
const prompt = format.revisePrompt(subject, previous, critiques, minDraftLength);
|
|
12
|
-
const resp = await client.createMessage({
|
|
13
|
-
systemPrompt: prompt,
|
|
14
|
-
messages: [{ role: "user", content: `Produce v${previous.version + 1} now.` }],
|
|
15
|
-
tools: [],
|
|
16
|
-
maxTokens: 32_000,
|
|
17
|
-
signal,
|
|
18
|
-
});
|
|
19
|
-
const { content, meta } = parseReviseResponse(resp.text);
|
|
20
|
-
// Defensive: refuse to accept a revision that's drastically shorter than v(N) — that's
|
|
21
|
-
// usually the model collapsing into a summary rather than rewriting.
|
|
22
|
-
// Accept if shrinkage < 30% OR new content is still above the minimum length.
|
|
23
|
-
let acceptedContent = content;
|
|
24
|
-
const shrinkage = previous.content.length > 0
|
|
25
|
-
? 1 - acceptedContent.length / previous.content.length
|
|
26
|
-
: 0;
|
|
27
|
-
if (shrinkage > 0.3 && acceptedContent.length < minDraftLength) {
|
|
28
|
-
logger.warn("arena.iterate.revise_too_short", {
|
|
29
|
-
version: previous.version + 1,
|
|
30
|
-
previousLength: previous.content.length,
|
|
31
|
-
newLength: acceptedContent.length,
|
|
32
|
-
minDraftLength,
|
|
33
|
-
});
|
|
34
|
-
// Don't retry automatically — keep going but flag in changelog.
|
|
35
|
-
meta.changelog =
|
|
36
|
-
`[WARNING: revision is ${Math.round(shrinkage * 100)}% shorter than v${previous.version}; the author may have summarized instead of rewriting]\n\n` +
|
|
37
|
-
(meta.changelog ?? "");
|
|
38
|
-
}
|
|
39
|
-
const next = {
|
|
40
|
-
version: previous.version + 1,
|
|
41
|
-
author: author.name,
|
|
42
|
-
format: format.format,
|
|
43
|
-
content: acceptedContent,
|
|
44
|
-
acceptedCritiques: meta.acceptedCritiques,
|
|
45
|
-
rejectedCritiques: meta.rejectedCritiques,
|
|
46
|
-
changelog: meta.changelog,
|
|
47
|
-
};
|
|
48
|
-
onProgress?.({
|
|
49
|
-
type: "revise_done",
|
|
50
|
-
round: next.version,
|
|
51
|
-
participant: author.name,
|
|
52
|
-
data: { length: acceptedContent.length, accepted: meta.acceptedCritiques?.length ?? 0 },
|
|
53
|
-
});
|
|
54
|
-
logger.info("arena.iterate.revise", {
|
|
55
|
-
version: next.version,
|
|
56
|
-
author: author.name,
|
|
57
|
-
length: acceptedContent.length,
|
|
58
|
-
accepted: meta.acceptedCritiques?.length ?? 0,
|
|
59
|
-
rejected: meta.rejectedCritiques?.length ?? 0,
|
|
60
|
-
});
|
|
61
|
-
return next;
|
|
62
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tournament v1 phase — every participant writes a candidate, then the
|
|
3
|
-
* author merges anonymized candidates into v1.
|
|
4
|
-
*/
|
|
5
|
-
import type { ArenaParticipant } from "../../types.js";
|
|
6
|
-
import type { FormatPack } from "../formats/index.js";
|
|
7
|
-
import type { Draft, DraftCandidate, IterateProgressEvent, IterateSubject } from "../types.js";
|
|
8
|
-
/** Run the v1 tournament: parallel candidate generation. */
|
|
9
|
-
export declare function runTournamentCandidates(args: {
|
|
10
|
-
subject: IterateSubject;
|
|
11
|
-
format: FormatPack;
|
|
12
|
-
participants: ArenaParticipant[];
|
|
13
|
-
minDraftLength: number;
|
|
14
|
-
signal?: AbortSignal;
|
|
15
|
-
onProgress?: (e: IterateProgressEvent) => void;
|
|
16
|
-
}): Promise<DraftCandidate[]>;
|
|
17
|
-
/** Merge candidates into v1 using the author. */
|
|
18
|
-
export declare function mergeCandidatesToV1(args: {
|
|
19
|
-
subject: IterateSubject;
|
|
20
|
-
format: FormatPack;
|
|
21
|
-
author: ArenaParticipant;
|
|
22
|
-
candidates: DraftCandidate[];
|
|
23
|
-
minDraftLength: number;
|
|
24
|
-
signal?: AbortSignal;
|
|
25
|
-
onProgress?: (e: IterateProgressEvent) => void;
|
|
26
|
-
}): Promise<Draft>;
|
|
27
|
-
/** Single-author v1 (tournament disabled) — author writes alone. */
|
|
28
|
-
export declare function singleAuthorV1(args: {
|
|
29
|
-
subject: IterateSubject;
|
|
30
|
-
format: FormatPack;
|
|
31
|
-
author: ArenaParticipant;
|
|
32
|
-
minDraftLength: number;
|
|
33
|
-
signal?: AbortSignal;
|
|
34
|
-
}): Promise<Draft>;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tournament v1 phase — every participant writes a candidate, then the
|
|
3
|
-
* author merges anonymized candidates into v1.
|
|
4
|
-
*/
|
|
5
|
-
import { createLLMClient } from "../../../llm/client-factory.js";
|
|
6
|
-
import { logger } from "../../../logging/logger.js";
|
|
7
|
-
import { parseMergeResponse } from "../parse.js";
|
|
8
|
-
/** Run the v1 tournament: parallel candidate generation. */
|
|
9
|
-
export async function runTournamentCandidates(args) {
|
|
10
|
-
const { subject, format, participants, minDraftLength, signal, onProgress } = args;
|
|
11
|
-
onProgress?.({ type: "v1_tournament_start", data: { count: participants.length } });
|
|
12
|
-
const tasks = participants.map(async (p, idx) => {
|
|
13
|
-
signal?.throwIfAborted();
|
|
14
|
-
const client = await createLLMClient(p.llm, p.clientDefaults);
|
|
15
|
-
const prompt = format.draftPrompt(subject, minDraftLength);
|
|
16
|
-
// Long-form generation needs a high output ceiling; the default 8k from
|
|
17
|
-
// LLMClientBase is too low for a substantive PRD or design doc and
|
|
18
|
-
// results in mid-sentence truncation that breaks downstream parsing.
|
|
19
|
-
const resp = await client.createMessage({
|
|
20
|
-
systemPrompt: prompt,
|
|
21
|
-
messages: [{ role: "user", content: `Write your draft now.` }],
|
|
22
|
-
tools: [],
|
|
23
|
-
maxTokens: 32_000,
|
|
24
|
-
signal,
|
|
25
|
-
});
|
|
26
|
-
const content = resp.text.trim();
|
|
27
|
-
const candidate = {
|
|
28
|
-
author: p.name,
|
|
29
|
-
anonymousLabel: `Draft ${String.fromCharCode(65 + idx)}`, // A, B, C...
|
|
30
|
-
content,
|
|
31
|
-
};
|
|
32
|
-
onProgress?.({
|
|
33
|
-
type: "v1_candidate_done",
|
|
34
|
-
participant: p.name,
|
|
35
|
-
data: { length: content.length, anonymousLabel: candidate.anonymousLabel },
|
|
36
|
-
});
|
|
37
|
-
logger.info("arena.iterate.v1_candidate", {
|
|
38
|
-
participant: p.name,
|
|
39
|
-
anonymousLabel: candidate.anonymousLabel,
|
|
40
|
-
length: content.length,
|
|
41
|
-
});
|
|
42
|
-
return candidate;
|
|
43
|
-
});
|
|
44
|
-
// Tolerate individual failures — we'd rather merge fewer drafts than abort.
|
|
45
|
-
const settled = await Promise.allSettled(tasks);
|
|
46
|
-
const candidates = [];
|
|
47
|
-
for (const s of settled) {
|
|
48
|
-
if (s.status === "fulfilled")
|
|
49
|
-
candidates.push(s.value);
|
|
50
|
-
else
|
|
51
|
-
logger.warn("arena.iterate.v1_candidate_failed", { error: s.reason?.message });
|
|
52
|
-
}
|
|
53
|
-
if (candidates.length === 0) {
|
|
54
|
-
throw new Error("All v1 tournament candidates failed");
|
|
55
|
-
}
|
|
56
|
-
// Shuffle so anonymous labels don't correlate with participants[] order.
|
|
57
|
-
for (let i = candidates.length - 1; i > 0; i--) {
|
|
58
|
-
const j = Math.floor(Math.random() * (i + 1));
|
|
59
|
-
[candidates[i], candidates[j]] = [candidates[j], candidates[i]];
|
|
60
|
-
candidates[i].anonymousLabel = `Draft ${String.fromCharCode(65 + i)}`;
|
|
61
|
-
}
|
|
62
|
-
candidates[0].anonymousLabel = `Draft A`;
|
|
63
|
-
return candidates;
|
|
64
|
-
}
|
|
65
|
-
/** Merge candidates into v1 using the author. */
|
|
66
|
-
export async function mergeCandidatesToV1(args) {
|
|
67
|
-
const { subject, format, author, candidates, minDraftLength, signal, onProgress } = args;
|
|
68
|
-
onProgress?.({ type: "v1_merge_start", participant: author.name });
|
|
69
|
-
const client = await createLLMClient(author.llm, author.clientDefaults);
|
|
70
|
-
const prompt = format.mergePrompt(subject, candidates, minDraftLength);
|
|
71
|
-
const resp = await client.createMessage({
|
|
72
|
-
systemPrompt: prompt,
|
|
73
|
-
messages: [{ role: "user", content: `Produce v1 now.` }],
|
|
74
|
-
tools: [],
|
|
75
|
-
maxTokens: 32_000,
|
|
76
|
-
signal,
|
|
77
|
-
});
|
|
78
|
-
const { content, rationale } = parseMergeResponse(resp.text);
|
|
79
|
-
const draft = {
|
|
80
|
-
version: 1,
|
|
81
|
-
author: author.name,
|
|
82
|
-
format: format.format,
|
|
83
|
-
content,
|
|
84
|
-
draftCandidates: candidates,
|
|
85
|
-
mergeRationale: rationale,
|
|
86
|
-
};
|
|
87
|
-
onProgress?.({ type: "v1_merge_done", participant: author.name, data: { length: content.length } });
|
|
88
|
-
logger.info("arena.iterate.v1_merge", {
|
|
89
|
-
author: author.name,
|
|
90
|
-
candidateCount: candidates.length,
|
|
91
|
-
length: content.length,
|
|
92
|
-
});
|
|
93
|
-
return draft;
|
|
94
|
-
}
|
|
95
|
-
/** Single-author v1 (tournament disabled) — author writes alone. */
|
|
96
|
-
export async function singleAuthorV1(args) {
|
|
97
|
-
const { subject, format, author, minDraftLength, signal } = args;
|
|
98
|
-
const client = await createLLMClient(author.llm, author.clientDefaults);
|
|
99
|
-
const prompt = format.draftPrompt(subject, minDraftLength);
|
|
100
|
-
const resp = await client.createMessage({
|
|
101
|
-
systemPrompt: prompt,
|
|
102
|
-
messages: [{ role: "user", content: `Write your draft now.` }],
|
|
103
|
-
tools: [],
|
|
104
|
-
maxTokens: 32_000,
|
|
105
|
-
signal,
|
|
106
|
-
});
|
|
107
|
-
return {
|
|
108
|
-
version: 1,
|
|
109
|
-
author: author.name,
|
|
110
|
-
format: format.format,
|
|
111
|
-
content: resp.text.trim(),
|
|
112
|
-
};
|
|
113
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Web tools for arena iterate critics — fabrication detection support.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the existing builtin webSearchTool / webFetchTool so critics can
|
|
5
|
-
* verify factual claims during the argue phase.
|
|
6
|
-
*/
|
|
7
|
-
import type { ToolDefinition } from "../../../types.js";
|
|
8
|
-
export declare const webSearchToolDef: ToolDefinition;
|
|
9
|
-
export declare const webFetchToolDef: ToolDefinition;
|
|
10
|
-
export declare const ITERATE_WEB_TOOLS: ToolDefinition[];
|
|
11
|
-
export declare function executeIterateWebTool(toolName: string, args: Record<string, unknown>): Promise<string>;
|
|
12
|
-
/** Probe env to determine if any web-search provider is configured. */
|
|
13
|
-
export declare function hasWebSearchProvider(): boolean;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Web tools for arena iterate critics — fabrication detection support.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the existing builtin webSearchTool / webFetchTool so critics can
|
|
5
|
-
* verify factual claims during the argue phase.
|
|
6
|
-
*/
|
|
7
|
-
import { webSearchTool } from "../../../tool-system/builtin/web-search.js";
|
|
8
|
-
import { webFetchTool } from "../../../tool-system/builtin/web-fetch.js";
|
|
9
|
-
export const webSearchToolDef = {
|
|
10
|
-
name: "web_search",
|
|
11
|
-
description: "Search the web (Google via Serper / Tavily / SearXNG depending on env). " +
|
|
12
|
-
"Use this to verify any specific number, citation, URL, library version, " +
|
|
13
|
-
"API name, or external claim made in the draft you are reviewing. " +
|
|
14
|
-
"If a claim cannot be verified by web_search, mark it as a fabrication " +
|
|
15
|
-
"critique with severity = blocker.",
|
|
16
|
-
inputSchema: {
|
|
17
|
-
type: "object",
|
|
18
|
-
properties: {
|
|
19
|
-
query: { type: "string", description: "Search query (English usually works best)." },
|
|
20
|
-
num_results: { type: "number", description: "Default 5, max 20." },
|
|
21
|
-
},
|
|
22
|
-
required: ["query"],
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
export const webFetchToolDef = {
|
|
26
|
-
name: "web_fetch",
|
|
27
|
-
description: "Fetch a URL and return its text content (HTML stripped). Use after " +
|
|
28
|
-
"web_search to read the actual page content of a search result and " +
|
|
29
|
-
"confirm a specific claim, version number, or quoted figure.",
|
|
30
|
-
inputSchema: {
|
|
31
|
-
type: "object",
|
|
32
|
-
properties: {
|
|
33
|
-
url: { type: "string", description: "Full http(s) URL to fetch." },
|
|
34
|
-
max_length: { type: "number", description: "Default 50000 characters." },
|
|
35
|
-
},
|
|
36
|
-
required: ["url"],
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
export const ITERATE_WEB_TOOLS = [webSearchToolDef, webFetchToolDef];
|
|
40
|
-
export async function executeIterateWebTool(toolName, args) {
|
|
41
|
-
if (toolName === "web_search") {
|
|
42
|
-
return webSearchTool(args);
|
|
43
|
-
}
|
|
44
|
-
if (toolName === "web_fetch") {
|
|
45
|
-
return webFetchTool(args);
|
|
46
|
-
}
|
|
47
|
-
return `Error: unknown tool "${toolName}"`;
|
|
48
|
-
}
|
|
49
|
-
/** Probe env to determine if any web-search provider is configured. */
|
|
50
|
-
export function hasWebSearchProvider() {
|
|
51
|
-
return Boolean(process.env.SERPER_API_KEY ||
|
|
52
|
-
process.env.TAVILY_API_KEY ||
|
|
53
|
-
process.env.SEARXNG_URL);
|
|
54
|
-
}
|