@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
|
@@ -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.");
|
|
@@ -3,5 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { ToolDefinition } from "../../types.js";
|
|
5
5
|
import type { ToolContext } from "../context.js";
|
|
6
|
+
import type { ToolFailure } from "./index.js";
|
|
6
7
|
export declare const editToolDef: ToolDefinition;
|
|
7
|
-
export declare function editTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
8
|
+
export declare function editTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | ToolFailure>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Built-in Edit file tool — exact string replacement.
|
|
3
3
|
*/
|
|
4
|
-
import { readFile
|
|
4
|
+
import { readFile } from "node:fs/promises";
|
|
5
5
|
import { existsSync } from "node:fs";
|
|
6
6
|
import { isAbsolute, resolve } from "node:path";
|
|
7
7
|
import { fileCache } from "./file-cache.js";
|
|
8
8
|
import { detectEol, toLf, applyEol } from "./eol.js";
|
|
9
|
+
import { getFinalWritePathSnapshot, revalidateFinalWritePath, writeFileNoFollow, } from "../path-policy.js";
|
|
9
10
|
export const editToolDef = {
|
|
10
11
|
name: "Edit",
|
|
11
12
|
description: "Perform exact string replacements in a file. " +
|
|
@@ -50,7 +51,11 @@ export async function editTool(args, ctx) {
|
|
|
50
51
|
if (!existsSync(filePath))
|
|
51
52
|
return `Error: File not found: ${filePath}`;
|
|
52
53
|
try {
|
|
53
|
-
const
|
|
54
|
+
const approvedPath = getFinalWritePathSnapshot(args, filePath, cwd);
|
|
55
|
+
const beforeRead = revalidateFinalWritePath(filePath, cwd, approvedPath);
|
|
56
|
+
if ("error" in beforeRead)
|
|
57
|
+
return { ok: false, error: beforeRead.error };
|
|
58
|
+
const raw = await readFile(beforeRead.resolvedPath, "utf-8");
|
|
54
59
|
// CRLF handling: detect the file's line ending, then match/replace in LF
|
|
55
60
|
// space (the model emits LF, so a CRLF file would never match otherwise),
|
|
56
61
|
// and write back in the ORIGINAL EOL so a CRLF file stays CRLF (no whole-
|
|
@@ -69,14 +74,13 @@ export async function editTool(args, ctx) {
|
|
|
69
74
|
return "Error: old_string is not unique in the file. Provide more context or use replace_all.";
|
|
70
75
|
}
|
|
71
76
|
}
|
|
72
|
-
const updatedLf = replaceAll
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
const updatedLf = replaceAll ? content.split(oldLf).join(newLf) : content.replace(oldLf, newLf);
|
|
78
|
+
const beforeWrite = revalidateFinalWritePath(filePath, cwd, approvedPath);
|
|
79
|
+
if ("error" in beforeWrite)
|
|
80
|
+
return { ok: false, error: beforeWrite.error };
|
|
81
|
+
await writeFileNoFollow(beforeWrite.resolvedPath, applyEol(updatedLf, eol));
|
|
76
82
|
fileCache.invalidate(filePath);
|
|
77
|
-
const count = replaceAll
|
|
78
|
-
? (content.split(oldLf).length - 1)
|
|
79
|
-
: 1;
|
|
83
|
+
const count = replaceAll ? content.split(oldLf).length - 1 : 1;
|
|
80
84
|
// Generate a compact diff summary
|
|
81
85
|
const oldLines = oldLf.split("\n");
|
|
82
86
|
const newLines = newLf.split("\n");
|
|
@@ -84,7 +88,7 @@ export async function editTool(args, ctx) {
|
|
|
84
88
|
return `Successfully edited ${filePath} (${count} replacement${count > 1 ? "s" : ""})\n${diffSummary}`;
|
|
85
89
|
}
|
|
86
90
|
catch (err) {
|
|
87
|
-
return `Error editing file: ${err.message}
|
|
91
|
+
return { ok: false, error: `Error editing file: ${err.message}` };
|
|
88
92
|
}
|
|
89
93
|
}
|
|
90
94
|
function generateCompactDiff(oldLines, newLines, filePath) {
|
|
@@ -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) {
|
|
@@ -32,6 +32,10 @@ export declare function __normalizeImagesForTests(images: string[] | undefined,
|
|
|
32
32
|
ok: false;
|
|
33
33
|
error: string;
|
|
34
34
|
}>;
|
|
35
|
+
export declare function __setVideoPollingLimitsForTests(limits: {
|
|
36
|
+
maxPollMs: number;
|
|
37
|
+
requestTimeoutMs: number;
|
|
38
|
+
} | null): void;
|
|
35
39
|
export declare const generateVideoToolDef: ToolDefinition;
|
|
36
40
|
export declare function __setVideoProviderForTests(p: VideoProvider | null): void;
|
|
37
41
|
export declare function isGenerateVideoAvailable(cwd?: string, nowMs?: number): boolean;
|