@cjhyy/code-shell-core 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- 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 +254 -195
- package/dist/engine/engine.js +1812 -2041
- 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/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 +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- 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 +34 -123
- 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 +60 -0
- 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/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 +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- 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 +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- 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 +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -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.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- 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 +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- 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 +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- 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.js +2 -6
- 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.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -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/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- 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 +77 -19
- package/dist/tool-system/executor.js +75 -50
- 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 +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- 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.js +99 -2
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- 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 +186 -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 -45
- package/dist/arena/arena.js +0 -362
- 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 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- 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 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- 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 -518
- 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 -72
- package/dist/git/worktree/crud.js +0 -235
- 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 -87
- 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 -43
- package/dist/git/worktree/query.js +0 -128
- 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 -416
- 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 -363
- /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
|
@@ -8,15 +8,70 @@
|
|
|
8
8
|
* Edit, by design). See docs/.../2026-06-15-unified-model-catalog-design.md §7.
|
|
9
9
|
*/
|
|
10
10
|
import { randomBytes } from "node:crypto";
|
|
11
|
-
import { userCatalogPath } from "../../model-catalog/index.js";
|
|
11
|
+
import { BUILTIN_CATALOG, getMergedCatalog, loadUserCatalog, userCatalogPath, } from "../../model-catalog/index.js";
|
|
12
12
|
import { saveCatalogEntry } from "../../model-catalog/save-entry.js";
|
|
13
|
-
import { catalogEntrySchema } from "../../model-catalog/types.js";
|
|
13
|
+
import { catalogEntrySchema, modelPresetSchema, } from "../../model-catalog/types.js";
|
|
14
|
+
import { upsertModelPreset } from "../../model-catalog/upsert.js";
|
|
15
|
+
import { PROVIDER_KINDS } from "../../llm/provider-kinds.js";
|
|
16
|
+
const CATALOG_ADAPTER_KINDS = [...Object.keys(PROVIDER_KINDS), "fal"].join("|");
|
|
17
|
+
/**
|
|
18
|
+
* Recognise first-party provider hosts so the catalog tool can reject the
|
|
19
|
+
* dangerous-but-schema-valid combination that caused an OpenRouter model to be
|
|
20
|
+
* sent to api.openai.com. Unknown/custom hosts remain allowed.
|
|
21
|
+
*/
|
|
22
|
+
function inferProviderKindFromBaseUrl(baseUrl) {
|
|
23
|
+
let host;
|
|
24
|
+
try {
|
|
25
|
+
host = new URL(baseUrl).host.toLowerCase();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
for (const [kind, meta] of Object.entries(PROVIDER_KINDS)) {
|
|
31
|
+
if (!meta.defaultBaseUrl)
|
|
32
|
+
continue;
|
|
33
|
+
try {
|
|
34
|
+
if (new URL(meta.defaultBaseUrl).host.toLowerCase() === host)
|
|
35
|
+
return kind;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// A future custom kind may intentionally have no parseable default URL.
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
function providerIdentityError(entry) {
|
|
44
|
+
if (entry.tag !== "text")
|
|
45
|
+
return undefined;
|
|
46
|
+
const inferred = inferProviderKindFromBaseUrl(entry.defaultBaseUrl);
|
|
47
|
+
if (!inferred || inferred === "custom" || entry.adapterKind === inferred)
|
|
48
|
+
return undefined;
|
|
49
|
+
const protocolHint = inferred === "anthropic" ? "anthropic-style" : "openai-compat";
|
|
50
|
+
return (`provider mismatch: defaultBaseUrl points to ${inferred}, but adapterKind is ` +
|
|
51
|
+
`"${entry.adapterKind}". Use adapterKind="${inferred}" and ` +
|
|
52
|
+
`protocol="${protocolHint}". adapterKind identifies the provider/gateway account; ` +
|
|
53
|
+
`protocol only identifies the HTTP wire format.`);
|
|
54
|
+
}
|
|
55
|
+
let modelCatalogChangedSink = null;
|
|
56
|
+
export function setModelCatalogChangedSink(sink) {
|
|
57
|
+
modelCatalogChangedSink = sink;
|
|
58
|
+
}
|
|
59
|
+
function fireModelCatalogChanged() {
|
|
60
|
+
try {
|
|
61
|
+
modelCatalogChangedSink?.();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Host notification is best-effort; the catalog write itself succeeded.
|
|
65
|
+
}
|
|
66
|
+
}
|
|
14
67
|
export const editModelCatalogToolDef = {
|
|
15
68
|
name: "EditModelCatalog",
|
|
16
|
-
description: "Add
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
69
|
+
description: "Add a model to an existing provider, or add/replace a complete provider template, " +
|
|
70
|
+
"in the user model catalog so it appears in the connection page " +
|
|
71
|
+
"(text/image/video/audio). Prefer operation='upsertModel' whenever the provider " +
|
|
72
|
+
"already exists: it preserves all existing/built-in models and reuses that provider's " +
|
|
73
|
+
"credentials. Use operation='upsertProvider' only for a genuinely new provider/endpoint " +
|
|
74
|
+
"or an intentional full provider override. Backs up the file before writing and " +
|
|
20
75
|
"validates the entry. Use after researching a model's real facts (id, context " +
|
|
21
76
|
"window, supported params, modalities) — do NOT guess; verify against the " +
|
|
22
77
|
"provider's official docs first (see the model-fact-finder skill). Does NOT set " +
|
|
@@ -24,23 +79,58 @@ export const editModelCatalogToolDef = {
|
|
|
24
79
|
inputSchema: {
|
|
25
80
|
type: "object",
|
|
26
81
|
properties: {
|
|
82
|
+
operation: {
|
|
83
|
+
type: "string",
|
|
84
|
+
enum: ["upsertModel", "upsertProvider"],
|
|
85
|
+
description: "upsertModel appends/updates one model inside an existing provider; " +
|
|
86
|
+
"upsertProvider saves a complete provider template. Defaults from the supplied fields.",
|
|
87
|
+
},
|
|
88
|
+
providerId: {
|
|
89
|
+
type: "string",
|
|
90
|
+
description: "Existing provider id for upsertModel, e.g. 'openrouter'. Do not create a " +
|
|
91
|
+
"provider-per-model id such as 'openrouter-kimi'.",
|
|
92
|
+
},
|
|
93
|
+
modelPreset: {
|
|
94
|
+
type: "object",
|
|
95
|
+
description: "One complete ModelPreset for upsertModel: {value, label?, maxContextTokens?, " +
|
|
96
|
+
"maxOutputTokens?, supportsVision?, params?[]}. Existing model value updates in " +
|
|
97
|
+
"place; a new value appends without hiding the provider's other models.",
|
|
98
|
+
},
|
|
99
|
+
setAsDefault: {
|
|
100
|
+
type: "boolean",
|
|
101
|
+
description: "For upsertModel, also make this model the provider template default.",
|
|
102
|
+
},
|
|
27
103
|
entry: {
|
|
28
104
|
type: "object",
|
|
29
|
-
description: "
|
|
30
|
-
"(
|
|
105
|
+
description: "For upsertProvider only: a full CatalogEntry. Required: id, tag " +
|
|
106
|
+
"(text|image|video|audio), adapterKind " +
|
|
107
|
+
`(the actual provider/gateway identity: ${CATALOG_ADAPTER_KINDS}), displayName, ` +
|
|
31
108
|
"description, defaultBaseUrl. Optional: protocol (openai-compat|anthropic-style), " +
|
|
32
109
|
"defaultModel, needsKey, signupUrl, test, modelPresets[] (each {value, label?, " +
|
|
33
110
|
"maxContextTokens?, maxOutputTokens?, supportsVision?, params?[]}). Each param: " +
|
|
34
111
|
"{name, label?, control (enum|number|toggle|text), options?[], min?, max?, default?, " +
|
|
35
112
|
"doc?, wire?{field}}. Fill maxContextTokens with the model's REAL window; declare " +
|
|
36
|
-
"params per-model (only what that model supports).
|
|
37
|
-
"
|
|
113
|
+
"params per-model (only what that model supports). IMPORTANT: adapterKind is NOT " +
|
|
114
|
+
"the wire protocol. OpenRouter must use adapterKind='openrouter' with " +
|
|
115
|
+
"protocol='openai-compat'; never use adapterKind='openai' merely because an endpoint " +
|
|
116
|
+
"is OpenAI-compatible. Adding a model to OpenRouter is operation='upsertModel' with " +
|
|
117
|
+
"providerId='openrouter', not a new provider entry. For genuinely distinct custom " +
|
|
118
|
+
"providers, retain the real provider's adapterKind so credentials and capability " +
|
|
119
|
+
"rules stay in the correct provider family.",
|
|
38
120
|
},
|
|
39
121
|
},
|
|
40
|
-
required: ["entry"],
|
|
41
122
|
},
|
|
42
123
|
};
|
|
43
124
|
export async function editModelCatalogTool(args) {
|
|
125
|
+
const operation = args.operation ??
|
|
126
|
+
(args.providerId !== undefined || args.modelPreset !== undefined
|
|
127
|
+
? "upsertModel"
|
|
128
|
+
: "upsertProvider");
|
|
129
|
+
if (operation === "upsertModel")
|
|
130
|
+
return upsertExistingProviderModel(args);
|
|
131
|
+
if (operation !== "upsertProvider") {
|
|
132
|
+
return "Error: `operation` must be `upsertModel` or `upsertProvider`.";
|
|
133
|
+
}
|
|
44
134
|
const entry = args.entry;
|
|
45
135
|
if (!entry || typeof entry !== "object") {
|
|
46
136
|
return "Error: `entry` (a CatalogEntry object) is required.";
|
|
@@ -49,6 +139,9 @@ export async function editModelCatalogTool(args) {
|
|
|
49
139
|
if (!parsed.success) {
|
|
50
140
|
return `Error: invalid catalog entry: ${parsed.error.issues.map((i) => i.message).join("; ")}`;
|
|
51
141
|
}
|
|
142
|
+
const identityError = providerIdentityError(parsed.data);
|
|
143
|
+
if (identityError)
|
|
144
|
+
return `Error: ${identityError}`;
|
|
52
145
|
const stamp = `${Date.now()}-${randomBytes(3).toString("hex")}`;
|
|
53
146
|
const r = saveCatalogEntry(parsed.data, {
|
|
54
147
|
path: userCatalogPath(),
|
|
@@ -56,8 +149,75 @@ export async function editModelCatalogTool(args) {
|
|
|
56
149
|
});
|
|
57
150
|
if (!r.ok)
|
|
58
151
|
return `Error: ${r.error}`;
|
|
152
|
+
fireModelCatalogChanged();
|
|
59
153
|
return summarizeWrite(parsed.data, r.action ?? "added", r.backup);
|
|
60
154
|
}
|
|
155
|
+
async function upsertExistingProviderModel(args) {
|
|
156
|
+
const providerId = typeof args.providerId === "string" ? args.providerId.trim() : "";
|
|
157
|
+
if (!providerId)
|
|
158
|
+
return "Error: `providerId` is required for `upsertModel`.";
|
|
159
|
+
const parsedPreset = modelPresetSchema.safeParse(args.modelPreset);
|
|
160
|
+
if (!parsedPreset.success) {
|
|
161
|
+
return `Error: invalid model preset: ${parsedPreset.error.issues.map((issue) => issue.message).join("; ")}`;
|
|
162
|
+
}
|
|
163
|
+
const builtin = BUILTIN_CATALOG.find((entry) => entry.id === providerId);
|
|
164
|
+
const userEntry = loadUserCatalog().find((entry) => entry.id === providerId);
|
|
165
|
+
const provider = userEntry ?? builtin;
|
|
166
|
+
if (!provider) {
|
|
167
|
+
return (`Error: provider "${providerId}" does not exist. ` +
|
|
168
|
+
"Create it first with operation=`upsertProvider`.");
|
|
169
|
+
}
|
|
170
|
+
const effective = getMergedCatalog().find((entry) => entry.id === providerId) ?? provider;
|
|
171
|
+
const existed = effective.modelPresets?.some((preset) => preset.value === parsedPreset.data.value);
|
|
172
|
+
// For built-ins, the user file stores only model-level additions/overrides.
|
|
173
|
+
// getMergedCatalog layers these over the current shipped presets, so app
|
|
174
|
+
// upgrades can add models without being frozen by a full user override.
|
|
175
|
+
const storedPresets = builtin ? (userEntry?.modelPresets ?? []) : (provider.modelPresets ?? []);
|
|
176
|
+
const nextEntry = {
|
|
177
|
+
...(builtin ?? provider),
|
|
178
|
+
...(userEntry ?? {}),
|
|
179
|
+
...(builtin ? { modelPresetsMode: "merge" } : {}),
|
|
180
|
+
...(args.setAsDefault === true ? { defaultModel: parsedPreset.data.value } : {}),
|
|
181
|
+
modelPresets: upsertModelPreset(storedPresets, parsedPreset.data),
|
|
182
|
+
};
|
|
183
|
+
const identityError = providerIdentityError(nextEntry);
|
|
184
|
+
if (identityError)
|
|
185
|
+
return `Error: ${identityError}`;
|
|
186
|
+
const stamp = `${Date.now()}-${randomBytes(3).toString("hex")}`;
|
|
187
|
+
const result = saveCatalogEntry(nextEntry, { path: userCatalogPath(), stamp });
|
|
188
|
+
if (!result.ok)
|
|
189
|
+
return `Error: ${result.error}`;
|
|
190
|
+
fireModelCatalogChanged();
|
|
191
|
+
return summarizeModelWrite(nextEntry, parsedPreset.data, existed ? "updated" : "added", result.backup);
|
|
192
|
+
}
|
|
193
|
+
function summarizeModelWrite(entry, preset, action, backup) {
|
|
194
|
+
const lines = [
|
|
195
|
+
`✅ ${action === "updated" ? "Updated" : "Added"} model "${preset.value}" in provider "${entry.id}".`,
|
|
196
|
+
`adapter: ${entry.adapterKind} | baseUrl: ${entry.defaultBaseUrl}`,
|
|
197
|
+
`merge: existing provider models preserved${entry.defaultModel === preset.value ? " | provider default: yes" : ""}`,
|
|
198
|
+
];
|
|
199
|
+
const limits = [
|
|
200
|
+
preset.maxContextTokens ? `ctx ${preset.maxContextTokens}` : "",
|
|
201
|
+
preset.maxOutputTokens ? `out ${preset.maxOutputTokens}` : "",
|
|
202
|
+
]
|
|
203
|
+
.filter(Boolean)
|
|
204
|
+
.join(", ");
|
|
205
|
+
if (limits)
|
|
206
|
+
lines.push(`limits: ${limits}`);
|
|
207
|
+
for (const param of preset.params ?? []) {
|
|
208
|
+
const details = param.control === "enum"
|
|
209
|
+
? ` options=[${param.options?.join(", ") ?? ""}]`
|
|
210
|
+
: param.control === "number"
|
|
211
|
+
? ` range=${param.min ?? "?"}..${param.max ?? "?"}`
|
|
212
|
+
: "";
|
|
213
|
+
const defaultValue = param.default !== undefined ? ` default=${JSON.stringify(param.default)}` : "";
|
|
214
|
+
lines.push(`- ${param.name} (${param.control})${details}${defaultValue}`);
|
|
215
|
+
}
|
|
216
|
+
lines.push(`Written to ${userCatalogPath()}.` + (backup ? ` Backup: ${backup}.` : ""));
|
|
217
|
+
lines.push("Hot-reloads — the connection page refreshes after this write.");
|
|
218
|
+
lines.push("⚠️ Relay this summary to the user and ask them to verify the model facts against official docs.");
|
|
219
|
+
return lines.join("\n");
|
|
220
|
+
}
|
|
61
221
|
/**
|
|
62
222
|
* Build a structured completion summary so the user can SEE exactly what was
|
|
63
223
|
* written and catch a wrong value at a glance — every param's options/default
|
|
@@ -96,7 +256,7 @@ function summarizeWrite(entry, action, backup) {
|
|
|
96
256
|
}
|
|
97
257
|
}
|
|
98
258
|
lines.push(`\nWritten to ${userCatalogPath()}.` + (backup ? ` Backup: ${backup}.` : ""));
|
|
99
|
-
lines.push("Hot-reloads — the connection page refreshes
|
|
259
|
+
lines.push("Hot-reloads — the connection page refreshes after this write.");
|
|
100
260
|
lines.push("⚠️ Relay this summary to the user and ask them to verify each param's options/default " +
|
|
101
261
|
"match the provider's OFFICIAL docs — especially enum levels (a gateway's input aliases " +
|
|
102
262
|
"are NOT the model's native values). To fix: edit this file directly, or ask me to.");
|
|
@@ -74,17 +74,13 @@ export async function editTool(args, ctx) {
|
|
|
74
74
|
return "Error: old_string is not unique in the file. Provide more context or use replace_all.";
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
const updatedLf = replaceAll
|
|
78
|
-
? content.split(oldLf).join(newLf)
|
|
79
|
-
: content.replace(oldLf, newLf);
|
|
77
|
+
const updatedLf = replaceAll ? content.split(oldLf).join(newLf) : content.replace(oldLf, newLf);
|
|
80
78
|
const beforeWrite = revalidateFinalWritePath(filePath, cwd, approvedPath);
|
|
81
79
|
if ("error" in beforeWrite)
|
|
82
80
|
return { ok: false, error: beforeWrite.error };
|
|
83
81
|
await writeFileNoFollow(beforeWrite.resolvedPath, applyEol(updatedLf, eol));
|
|
84
82
|
fileCache.invalidate(filePath);
|
|
85
|
-
const count = replaceAll
|
|
86
|
-
? (content.split(oldLf).length - 1)
|
|
87
|
-
: 1;
|
|
83
|
+
const count = replaceAll ? content.split(oldLf).length - 1 : 1;
|
|
88
84
|
// Generate a compact diff summary
|
|
89
85
|
const oldLines = oldLf.split("\n");
|
|
90
86
|
const newLines = newLf.split("\n");
|
|
@@ -14,4 +14,6 @@ declare class FileStateCache {
|
|
|
14
14
|
get size(): number;
|
|
15
15
|
}
|
|
16
16
|
export declare const fileCache: FileStateCache;
|
|
17
|
+
/** Public capability seam: invalidate core's Read/Edit cache after an external file tool writes. */
|
|
18
|
+
export declare function invalidateFileCache(filePath: string): void;
|
|
17
19
|
export {};
|
|
@@ -45,3 +45,7 @@ class FileStateCache {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
export const fileCache = new FileStateCache();
|
|
48
|
+
/** Public capability seam: invalidate core's Read/Edit cache after an external file tool writes. */
|
|
49
|
+
export function invalidateFileCache(filePath) {
|
|
50
|
+
fileCache.invalidate(filePath);
|
|
51
|
+
}
|
|
@@ -48,7 +48,10 @@ export function effectiveApiKey(inst, list) {
|
|
|
48
48
|
*/
|
|
49
49
|
function resolveFromGenList(list, prefer, def) {
|
|
50
50
|
const usable = (p) => !!p.apiKey && getImageProvider(p.kind) !== null;
|
|
51
|
-
const credsOf = (p) => ({
|
|
51
|
+
const credsOf = (p) => ({
|
|
52
|
+
baseUrl: p.baseUrl,
|
|
53
|
+
apiKey: p.apiKey,
|
|
54
|
+
});
|
|
52
55
|
if (prefer) {
|
|
53
56
|
const chosen = list.find((p) => p.id === prefer);
|
|
54
57
|
if (chosen && usable(chosen))
|
|
@@ -57,7 +60,9 @@ function resolveFromGenList(list, prefer, def) {
|
|
|
57
60
|
}
|
|
58
61
|
const preferred = def ? list.find((p) => p.id === def) : undefined;
|
|
59
62
|
const chosen = (preferred && usable(preferred) ? preferred : undefined) ?? list.find(usable);
|
|
60
|
-
return chosen
|
|
63
|
+
return chosen
|
|
64
|
+
? { kind: chosen.kind, creds: credsOf(chosen), defaultModel: chosen.defaultModel }
|
|
65
|
+
: null;
|
|
61
66
|
}
|
|
62
67
|
const DEFAULT_SIZE = "1024x1024";
|
|
63
68
|
const DEFAULT_QUALITY = "auto";
|
|
@@ -91,12 +96,12 @@ export const generateImageToolDef = {
|
|
|
91
96
|
provider: {
|
|
92
97
|
type: "string",
|
|
93
98
|
description: "Image provider to use. With imageGen configured, this is the instance `id` " +
|
|
94
|
-
|
|
99
|
+
'(e.g. "gemini"); otherwise it\'s a provider kind (e.g. "openai"). ' +
|
|
95
100
|
"Defaults to the configured default / first available. Only specify to override.",
|
|
96
101
|
},
|
|
97
102
|
model: {
|
|
98
103
|
type: "string",
|
|
99
|
-
description:
|
|
104
|
+
description: 'Image model id (e.g. "gpt-image-2"). Defaults to the provider\'s default model. ' +
|
|
100
105
|
"Only specify to override.",
|
|
101
106
|
},
|
|
102
107
|
referenceImages: {
|
|
@@ -146,7 +151,10 @@ function resolveImageProvider(cwd, prefer) {
|
|
|
146
151
|
if (imageGen && Array.isArray(imageGen.providers) && imageGen.providers.length > 0) {
|
|
147
152
|
const list = imageGen.providers;
|
|
148
153
|
const usable = (p) => !!effectiveApiKey(p, list) && getImageProvider(p.kind) !== null;
|
|
149
|
-
const credsOf = (p) => ({
|
|
154
|
+
const credsOf = (p) => ({
|
|
155
|
+
baseUrl: p.baseUrl,
|
|
156
|
+
apiKey: effectiveApiKey(p, list),
|
|
157
|
+
});
|
|
150
158
|
if (prefer) {
|
|
151
159
|
// Explicit request — respect the user's intent. If that exact instance
|
|
152
160
|
// isn't usable (no key / no adapter), DON'T silently use another one.
|
|
@@ -171,7 +179,8 @@ function resolveImageProvider(cwd, prefer) {
|
|
|
171
179
|
// 2. Back-compat: resolve from legacy LLM providers[] by kind. The field was
|
|
172
180
|
// dropped from the schema; un-migrated settings.json still carry it via the
|
|
173
181
|
// schema's .passthrough(), so read it through an inline cast.
|
|
174
|
-
const legacyProviders = settings
|
|
182
|
+
const legacyProviders = settings
|
|
183
|
+
.providers ?? [];
|
|
175
184
|
const kinds = prefer ? [prefer] : [...IMAGE_PROVIDER_KINDS];
|
|
176
185
|
for (const kind of kinds) {
|
|
177
186
|
if (!prefer && !IMAGE_PROVIDER_KINDS.includes(kind))
|
|
@@ -331,7 +340,7 @@ export async function generateImageTool(args, ctx) {
|
|
|
331
340
|
if (!resolved) {
|
|
332
341
|
return preferKind
|
|
333
342
|
? `Error: no image provider "${preferKind}" is available (unknown id/kind, or it has no API key). Configure it in your code-shell settings, or omit \`provider\` to use the default.`
|
|
334
|
-
:
|
|
343
|
+
: "Error: no image provider available. Configure an image provider (including an apiKey) " +
|
|
335
344
|
"in your code-shell settings to use GenerateImage.";
|
|
336
345
|
}
|
|
337
346
|
const adapter = getImageProvider(resolved.kind);
|
|
@@ -363,9 +372,7 @@ export async function generateImageTool(args, ctx) {
|
|
|
363
372
|
await writeFile(path, Buffer.from(result.b64, "base64"));
|
|
364
373
|
// Name the provider/model actually used, so the user/agent knows which
|
|
365
374
|
// image backend produced this (esp. when a default fell back to another).
|
|
366
|
-
const mode = inputImages?.length
|
|
367
|
-
? ` from ${inputImages.length} reference image(s)`
|
|
368
|
-
: "";
|
|
375
|
+
const mode = inputImages?.length ? ` from ${inputImages.length} reference image(s)` : "";
|
|
369
376
|
return `Generated image with ${resolved.kind} (${model})${mode}, saved to ${path}`;
|
|
370
377
|
}
|
|
371
378
|
catch (err) {
|
|
@@ -21,7 +21,7 @@ import { notificationQueue } from "./agent-notifications.js";
|
|
|
21
21
|
import { backgroundJobRegistry } from "./background-jobs.js";
|
|
22
22
|
import { logger } from "../../logging/logger.js";
|
|
23
23
|
import { getVideoProvider, DEFAULT_VIDEO_MODEL, } from "./video-providers.js";
|
|
24
|
-
import { getImageUploader, isHttpUrl } from "./image-uploader.js";
|
|
24
|
+
import { getImageUploader, isHttpUrl, } from "./image-uploader.js";
|
|
25
25
|
import { effectiveApiKey } from "./generate-image.js";
|
|
26
26
|
import { getMergedCatalog, findCatalogEntry } from "../../model-catalog/index.js";
|
|
27
27
|
import { genInstancesFromConnections } from "../../model-catalog/gen-connections.js";
|
|
@@ -78,7 +78,10 @@ export const generateVideoToolDef = {
|
|
|
78
78
|
description: "Video provider kind to use. Defaults to the first configured video provider.",
|
|
79
79
|
},
|
|
80
80
|
model: { type: "string", description: "Video model id. Defaults to the provider's default." },
|
|
81
|
-
image: {
|
|
81
|
+
image: {
|
|
82
|
+
type: "string",
|
|
83
|
+
description: "Image URL (http/https) for image-to-video. When set, an image-to-video model is used.",
|
|
84
|
+
},
|
|
82
85
|
images: {
|
|
83
86
|
type: "array",
|
|
84
87
|
items: { type: "string" },
|
|
@@ -87,7 +90,7 @@ export const generateVideoToolDef = {
|
|
|
87
90
|
videos: {
|
|
88
91
|
type: "array",
|
|
89
92
|
items: { type: "string" },
|
|
90
|
-
description:
|
|
93
|
+
description: 'Reference/continuation video URLs (http/https only — NOT local paths) for video extension. Forces reference-to-video (Seedance model required). Up to 3. Refer to them in prompt as @Video1, @Video2 (e.g. "continue from @Video1").',
|
|
91
94
|
},
|
|
92
95
|
},
|
|
93
96
|
required: ["prompt"],
|
|
@@ -184,7 +187,10 @@ function resolveVideoProvider(cwd, preferKind) {
|
|
|
184
187
|
const list = genInstancesFromConnections(conns, (Array.isArray(creds) ? creds : []), getMergedCatalog(), "video");
|
|
185
188
|
const def = settings.defaults?.video;
|
|
186
189
|
const usable = (p) => !!p.apiKey && getVideoProvider(p.kind) !== null;
|
|
187
|
-
const credsOf = (p) => ({
|
|
190
|
+
const credsOf = (p) => ({
|
|
191
|
+
baseUrl: p.baseUrl,
|
|
192
|
+
apiKey: p.apiKey,
|
|
193
|
+
});
|
|
188
194
|
if (preferKind) {
|
|
189
195
|
const chosen = list.find((p) => (p.id === preferKind || p.kind === preferKind) && usable(p));
|
|
190
196
|
if (chosen)
|
|
@@ -202,7 +208,10 @@ function resolveVideoProvider(cwd, preferKind) {
|
|
|
202
208
|
if (videoGen?.providers?.length) {
|
|
203
209
|
const list = videoGen.providers;
|
|
204
210
|
const usable = (p) => !!effectiveApiKey(p, list) && getVideoProvider(p.kind) !== null;
|
|
205
|
-
const credsOf = (p) => ({
|
|
211
|
+
const credsOf = (p) => ({
|
|
212
|
+
baseUrl: p.baseUrl,
|
|
213
|
+
apiKey: effectiveApiKey(p, list),
|
|
214
|
+
});
|
|
206
215
|
if (preferKind) {
|
|
207
216
|
const chosen = list.find((p) => (p.id === preferKind || p.kind === preferKind) && usable(p));
|
|
208
217
|
if (chosen)
|
|
@@ -220,7 +229,8 @@ function resolveVideoProvider(cwd, preferKind) {
|
|
|
220
229
|
// Back-compat: scan legacy LLM providers[] for a video-capable kind. The
|
|
221
230
|
// field was dropped from the schema; un-migrated settings.json still carry it
|
|
222
231
|
// via .passthrough(), so read it through an inline cast.
|
|
223
|
-
const legacyProviders = settings
|
|
232
|
+
const legacyProviders = settings
|
|
233
|
+
.providers ?? [];
|
|
224
234
|
const kinds = preferKind ? [preferKind] : VIDEO_PROVIDER_KINDS;
|
|
225
235
|
for (const kind of kinds) {
|
|
226
236
|
const provider = legacyProviders.find((p) => p.kind === kind);
|
|
@@ -290,7 +300,15 @@ export async function generateVideoTool(args, ctx) {
|
|
|
290
300
|
const norm = await __normalizeImagesForTests(imagesArg, image, uploader, { baseUrl: creds.baseUrl, apiKey: creds.apiKey }, ctx?.signal);
|
|
291
301
|
if (!norm.ok)
|
|
292
302
|
return `Error: ${norm.error}`;
|
|
293
|
-
const submit = await adapter.submit({
|
|
303
|
+
const submit = await adapter.submit({
|
|
304
|
+
prompt,
|
|
305
|
+
model,
|
|
306
|
+
image: undefined,
|
|
307
|
+
images: norm.urls,
|
|
308
|
+
videos: videosArg,
|
|
309
|
+
creds,
|
|
310
|
+
signal: ctx?.signal,
|
|
311
|
+
});
|
|
294
312
|
if (!submit.ok) {
|
|
295
313
|
return `Error submitting video job: ${submit.error}`;
|
|
296
314
|
}
|
|
@@ -333,6 +351,7 @@ export async function generateVideoTool(args, ctx) {
|
|
|
333
351
|
clearTimeout(totalTimer);
|
|
334
352
|
ctx?.signal?.removeEventListener("abort", onTurnAbort);
|
|
335
353
|
});
|
|
354
|
+
ctx?.runYield?.request("background_notification");
|
|
336
355
|
return [
|
|
337
356
|
`Video generation started in the background.`,
|
|
338
357
|
`job_id: ${jobId} (internal — do not show to user)`,
|
|
@@ -135,7 +135,7 @@ export async function grepTool(args, ctx) {
|
|
|
135
135
|
if (isCommandNotFound(rgErr) || isCommandNotFound(grepErr)) {
|
|
136
136
|
return await runNodeGrep(pattern, searchPath, fileGlob, context, maxResults, outputMode, caseInsensitive, ctx?.signal);
|
|
137
137
|
}
|
|
138
|
-
throw new Error(`Error in search: ${grepErr.message}
|
|
138
|
+
throw new Error(`Error in search: ${grepErr.message}`, { cause: grepErr });
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -227,7 +227,7 @@ async function runNodeGrep(pattern, path, fileGlob, context, maxResults, outputM
|
|
|
227
227
|
regex = new RegExp(pattern, caseInsensitive ? "i" : "");
|
|
228
228
|
}
|
|
229
229
|
catch (err) {
|
|
230
|
-
throw new Error(`Error in search: ${err.message}
|
|
230
|
+
throw new Error(`Error in search: ${err.message}`, { cause: err });
|
|
231
231
|
}
|
|
232
232
|
const matches = [];
|
|
233
233
|
await walkTextFiles(path, fileGlob, async (file) => {
|
|
@@ -10,7 +10,13 @@ export function isHttpUrl(s) {
|
|
|
10
10
|
}
|
|
11
11
|
function mimeFromName(name) {
|
|
12
12
|
const ext = name.toLowerCase().split(".").pop() ?? "";
|
|
13
|
-
const map = {
|
|
13
|
+
const map = {
|
|
14
|
+
png: "image/png",
|
|
15
|
+
jpg: "image/jpeg",
|
|
16
|
+
jpeg: "image/jpeg",
|
|
17
|
+
webp: "image/webp",
|
|
18
|
+
gif: "image/gif",
|
|
19
|
+
};
|
|
14
20
|
return map[ext] ?? "application/octet-stream";
|
|
15
21
|
}
|
|
16
22
|
export class FalStorageUploader {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Built-in tool registration.
|
|
3
3
|
*/
|
|
4
|
-
import type { RegisteredTool } from "../../types.js";
|
|
4
|
+
import type { PermissionRule, RegisteredTool } from "../../types.js";
|
|
5
5
|
import type { ToolVisibilityContext } from "../context.js";
|
|
6
6
|
/**
|
|
7
7
|
* Tool executor signature.
|
|
@@ -51,14 +51,39 @@ export type BuiltinToolGuard = (ctx: ToolVisibilityContext) => boolean;
|
|
|
51
51
|
export interface BuiltinTool {
|
|
52
52
|
definition: RegisteredTool;
|
|
53
53
|
execute: BuiltinToolFn;
|
|
54
|
+
exposure: BuiltinToolExposure;
|
|
55
|
+
}
|
|
56
|
+
export interface BuiltinToolExposure {
|
|
57
|
+
/** Empty means explicit enableBuiltinTools-only. */
|
|
58
|
+
presetTags: readonly string[];
|
|
59
|
+
/** Execution policy is explicit and never inferred from permissionDefault. */
|
|
60
|
+
defaultPermissionRules?: readonly PermissionRule[];
|
|
61
|
+
/** Prompt sections enabled whenever at least one contributing tool is active. */
|
|
62
|
+
promptSections?: readonly string[];
|
|
63
|
+
/** Complete capability companions that must share every preset tag. */
|
|
64
|
+
requires?: readonly string[];
|
|
65
|
+
/** Shared by model visibility and the executor's second safety gate. */
|
|
66
|
+
availability?: BuiltinToolGuard;
|
|
67
|
+
/**
|
|
68
|
+
* Per-turn dynamic rewrite of the tool definition the model sees (e.g. a
|
|
69
|
+
* closed enum derived from run-scoped state). Pure; must not mutate `def`.
|
|
70
|
+
*/
|
|
71
|
+
rewriteDefinition?: (def: import("../../types.js").ToolDefinition, ctx: ToolVisibilityContext) => import("../../types.js").ToolDefinition;
|
|
54
72
|
}
|
|
55
73
|
export declare const BUILTIN_TOOLS: BuiltinTool[];
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
74
|
+
export declare function validateBuiltinToolExposures(tools?: readonly BuiltinTool[]): void;
|
|
75
|
+
/** Derive a preset's tool list and safe defaults from any composed tool catalog. */
|
|
76
|
+
export declare function derivePresetExposure(tag: string, tools?: readonly BuiltinTool[]): {
|
|
77
|
+
builtinTools: string[];
|
|
78
|
+
defaultPermissionRules: PermissionRule[];
|
|
79
|
+
};
|
|
80
|
+
/** Backwards-compatible name for callers deriving only from the core catalog. */
|
|
81
|
+
export declare function deriveBuiltinPresetExposure(tag: string): {
|
|
82
|
+
builtinTools: string[];
|
|
83
|
+
defaultPermissionRules: PermissionRule[];
|
|
84
|
+
};
|
|
85
|
+
export declare function deriveToolGatedPromptSections(tools?: readonly BuiltinTool[]): Record<string, string[]>;
|
|
86
|
+
/** Compatibility view consumed by engine + executor; metadata is authoritative. */
|
|
62
87
|
export declare const BUILTIN_TOOL_GUARDS: Map<string, BuiltinToolGuard>;
|
|
63
88
|
/** UseCredential is available when the cwd's credential metadata has ≥1 entry. */
|
|
64
89
|
export declare function isUseCredentialAvailable(cwd: string, settingsScope?: import("../../settings/manager.js").SettingsScope): boolean;
|