@sayknow-cli/coding-agent 0.3.16 → 0.4.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/CHANGELOG.md +52 -0
- package/package.json +127 -110
- package/scripts/build-sdk-package-smoke.ts +132 -0
- package/scripts/capture-notifications-settings-showcase.ts +435 -0
- package/scripts/compile-args.ts +5 -2
- package/scripts/g005-daemon-smoke.ts +4 -5
- package/scripts/g011-daemon-path-smoke.ts +5 -5
- package/scripts/generate-hotkeys-docs.ts +74 -0
- package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
- package/scripts/generate-sdk-operation-inventory.ts +914 -0
- package/scripts/generate-telegram-baseline-manifest.ts +128 -0
- package/scripts/manifest-schema.ts +124 -0
- package/scripts/run-test-manifest.ts +153 -0
- package/scripts/run-threat-model-check.ts +217 -0
- package/scripts/verify-skc-sdk-canonicalization.ts +3647 -0
- package/scripts/verify-skc-sdk-rename.ts +90 -0
- package/src/append-only-mode.ts +1 -1
- package/src/async/job-manager.ts +455 -69
- package/src/cli/args.ts +43 -12
- package/src/cli/auth-gateway-cli.ts +2 -2
- package/src/cli/config-cli.ts +77 -3
- package/src/cli/daemon-cli.ts +63 -14
- package/src/cli/launch-disposition.ts +42 -0
- package/src/cli/list-models.ts +1 -1
- package/src/cli/notify-cli.ts +373 -283
- package/src/cli/session-picker.ts +20 -3
- package/src/cli/setup-cli.ts +1 -1
- package/src/cli/worktree-cli.ts +9 -287
- package/src/cli.ts +31 -11
- package/src/commands/config.ts +1 -1
- package/src/commands/daemon.ts +50 -6
- package/src/commands/gc.ts +11 -1
- package/src/commands/harness.ts +127 -142
- package/src/commands/launch.ts +11 -6
- package/src/commands/mcp-serve.ts +97 -13
- package/src/commands/mcp.ts +2 -2
- package/src/commands/notify.ts +44 -7
- package/src/commands/sdk.ts +453 -0
- package/src/commands/ultragoal.ts +4 -1
- package/src/commands/worktree.ts +10 -53
- package/src/commit/agentic/agent.ts +1 -0
- package/src/config/atomic-yaml-patch.ts +490 -0
- package/src/config/file-lock.ts +105 -43
- package/src/config/keybindings.ts +64 -20
- package/src/config/model-auth.ts +9 -0
- package/src/config/model-bindings-applier.ts +139 -0
- package/src/config/model-discovery-manager.ts +224 -0
- package/src/config/model-equivalence.ts +66 -0
- package/src/config/model-profile-activation.ts +233 -86
- package/src/config/model-profiles.ts +52 -49
- package/src/config/model-registry.ts +5 -4
- package/src/config/model-resolver.ts +487 -410
- package/src/config/model-selector-value.ts +50 -0
- package/src/config/models-config-schema.ts +17 -23
- package/src/config/settings-schema.ts +372 -21
- package/src/config/settings.ts +1120 -182
- package/src/coordinator-mcp/model-preset.ts +74 -20
- package/src/coordinator-mcp/policy.ts +76 -11
- package/src/coordinator-mcp/question-gate-codec.ts +274 -0
- package/src/coordinator-mcp/question-state.ts +778 -0
- package/src/coordinator-mcp/server.ts +3120 -3111
- package/src/daemon/builtin.ts +8 -5
- package/src/daemon/control-types.ts +1 -1
- package/src/daemon/runtime.ts +2 -2
- package/src/debug/index.ts +1 -1
- package/src/defaults/skc/skills/team/SKILL.md +27 -13
- package/src/defaults/skc/skills/ultragoal/SKILL.md +0 -2
- package/src/discovery/helpers.ts +1 -50
- package/src/discovery/mcp-json.ts +327 -20
- package/src/edit/index.ts +64 -0
- package/src/eval/js/shared/runtime.ts +1 -1
- package/src/eval/py/env.ts +26 -0
- package/src/eval/py/index.ts +2 -2
- package/src/eval/py/kernel.ts +5 -3
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +52 -18
- package/src/extensibility/custom-tools/types.ts +1 -1
- package/src/extensibility/extensions/compact-handler.ts +3 -3
- package/src/extensibility/extensions/get-commands-handler.ts +2 -2
- package/src/extensibility/extensions/loader.ts +77 -5
- package/src/extensibility/extensions/runner.ts +124 -7
- package/src/extensibility/extensions/types.ts +215 -18
- package/src/extensibility/hooks/runner.ts +2 -2
- package/src/extensibility/hooks/types.ts +1 -1
- package/src/extensibility/plugins/marketplace/manager.ts +94 -10
- package/src/extensibility/runtime-skill-discovery.ts +33 -13
- package/src/extensibility/shared-events.ts +2 -0
- package/src/extensibility/skc-plugins/installer.ts +16 -16
- package/src/extensibility/slash-commands.ts +3 -3
- package/src/goals/continuation-timeout-guard.ts +79 -0
- package/src/goals/runtime.ts +7 -5
- package/src/goals/state.ts +18 -0
- package/src/harness-control-plane/lifecycle-reconciliation.ts +64 -0
- package/src/harness-control-plane/operate.ts +9 -9
- package/src/harness-control-plane/owner.ts +341 -41
- package/src/harness-control-plane/phase-rollup.ts +4 -7
- package/src/harness-control-plane/receipt-ingest.ts +5 -0
- package/src/harness-control-plane/receipt-spool.ts +51 -7
- package/src/harness-control-plane/receipts.ts +0 -1
- package/src/harness-control-plane/sdk-transport.ts +395 -0
- package/src/harness-control-plane/session-lease.ts +12 -130
- package/src/harness-control-plane/session-transport.ts +94 -0
- package/src/harness-control-plane/types.ts +1 -1
- package/src/hindsight/backend.ts +26 -27
- package/src/hindsight/client.ts +65 -2
- package/src/hindsight/state.ts +101 -32
- package/src/hooks/skill-state.ts +17 -11
- package/src/i18n/messages/en.ts +1 -0
- package/src/internal-urls/agent-protocol.ts +76 -5
- package/src/internal-urls/docs-index.generated.ts +44 -37
- package/src/internal-urls/local-protocol.ts +420 -18
- package/src/lsp/client.ts +43 -7
- package/src/lsp/config.ts +145 -26
- package/src/lsp/index.ts +7 -91
- package/src/lsp/lspmux.ts +39 -10
- package/src/lsp/path-trust.ts +81 -0
- package/src/main.ts +451 -236
- package/src/memories/index.ts +1 -0
- package/src/memories/storage.ts +6 -2
- package/src/modes/DESIGN.md +258 -0
- package/src/modes/acp/acp-agent.ts +1236 -2612
- package/src/modes/acp/acp-client-bridge.ts +2 -20
- package/src/modes/acp/acp-event-mapper.ts +18 -2
- package/src/modes/acp/acp-mode.ts +8 -36
- package/src/modes/acp/permission-mode.ts +25 -0
- package/src/modes/acp/startup-options.ts +6 -0
- package/src/modes/action-registry.ts +165 -0
- package/src/modes/bridge/bridge-mode.ts +6 -4
- package/src/modes/components/agent-dashboard.ts +37 -17
- package/src/modes/components/ansi-display-validator.ts +54 -0
- package/src/modes/components/chrome.ts +40 -0
- package/src/modes/components/command-palette.ts +168 -0
- package/src/modes/components/custom-editor.ts +105 -33
- package/src/modes/components/custom-provider-wizard.ts +77 -15
- package/src/modes/components/index.ts +2 -1
- package/src/modes/components/model-selector.ts +93 -35
- package/src/modes/components/notifications-settings-editor.ts +1403 -0
- package/src/modes/components/pet-capability.ts +115 -0
- package/src/modes/components/pet-selector.ts +15 -23
- package/src/modes/components/plan-preview-overlay.ts +295 -0
- package/src/modes/components/queue-mode-selector.ts +10 -27
- package/src/modes/components/queue-pane.ts +79 -0
- package/src/modes/components/read-tool-group.ts +13 -0
- package/src/modes/components/sayknow-pet-widget.ts +169 -20
- package/src/modes/components/session-observer-overlay.ts +213 -775
- package/src/modes/components/sessions-dashboard.ts +181 -0
- package/src/modes/components/settings-selector.ts +89 -12
- package/src/modes/components/show-images-selector.ts +10 -24
- package/src/modes/components/status-line/types.ts +1 -1
- package/src/modes/components/status-line.ts +1 -969
- package/src/modes/components/tasks-pane.ts +73 -0
- package/src/modes/components/theme-selector.ts +11 -31
- package/src/modes/components/tool-execution.ts +22 -0
- package/src/modes/components/tool-status-header.ts +1056 -0
- package/src/modes/components/tool-transcript-format.ts +393 -0
- package/src/modes/components/transcript-viewer-overlay.ts +446 -0
- package/src/modes/components/welcome.ts +4 -4
- package/src/modes/controllers/btw-controller.ts +1 -0
- package/src/modes/controllers/command-controller.ts +25 -17
- package/src/modes/controllers/event-controller.ts +14 -18
- package/src/modes/controllers/extension-ui-controller.ts +441 -37
- package/src/modes/controllers/goal-mode-controller.ts +493 -0
- package/src/modes/controllers/input-controller.ts +889 -263
- package/src/modes/controllers/mode-gate.ts +24 -0
- package/src/modes/controllers/plan-mode-controller.ts +519 -0
- package/src/modes/controllers/runtime-mcp-command-controller.ts +3 -0
- package/src/modes/controllers/selector-controller.ts +957 -54
- package/src/modes/controllers/stt-controller.ts +125 -0
- package/src/modes/index.ts +0 -22
- package/src/modes/interactive-mode.ts +376 -1130
- package/src/modes/jobs-observer.ts +3 -0
- package/src/modes/prompt-action-autocomplete.ts +7 -0
- package/src/modes/rpc/rpc-mode.ts +3 -1
- package/src/modes/runtime-init.ts +320 -6
- package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
- package/src/modes/shared/agent-wire/command-dispatch.ts +3 -1
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +65 -111
- package/src/modes/shared/agent-wire/event-contract.ts +7 -8
- package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
- package/src/modes/shared/agent-wire/event-observation.ts +16 -7
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1331 -89
- package/src/modes/shared/agent-wire/workflow-gate-schema.ts +19 -17
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +407 -0
- package/src/modes/tasks-aggregator.ts +199 -0
- package/src/modes/transcript-item-registry.ts +229 -0
- package/src/modes/types.ts +63 -21
- package/src/modes/utils/ui-helpers.ts +17 -9
- package/src/notifications/index.ts +8 -2
- package/src/plan-mode/approved-plan.ts +3 -1
- package/src/prompts/agent-fragments/ralplan-persistence.md +6 -0
- package/src/prompts/agent-fragments/restricted-bash.md +1 -0
- package/src/prompts/agents/architect.md +3 -8
- package/src/prompts/agents/critic.md +3 -8
- package/src/prompts/agents/executor.md +3 -0
- package/src/prompts/agents/planner.md +4 -12
- package/src/prompts/system/custom-system-prompt.md +2 -24
- package/src/prompts/system/plan-mode-approved.md +8 -0
- package/src/prompts/system/system-prompt.md +18 -94
- package/src/prompts/tools/bash.md +4 -4
- package/src/prompts/tools/browser.md +15 -52
- package/src/prompts/tools/find.md +2 -2
- package/src/prompts/tools/hashline.md +13 -55
- package/src/prompts/tools/lsp.md +3 -3
- package/src/prompts/tools/read.md +3 -6
- package/src/prompts/tools/search-tool-bm25.md +0 -2
- package/src/prompts/tools/search.md +2 -4
- package/src/prompts/tools/skill-discovery.md +1 -2
- package/src/prompts/tools/task.md +1 -1
- package/src/runtime-mcp/client.ts +94 -19
- package/src/runtime-mcp/config.ts +27 -15
- package/src/runtime-mcp/discoverable-tool-metadata.ts +16 -13
- package/src/runtime-mcp/manager.ts +359 -106
- package/src/runtime-mcp/oauth-discovery.ts +116 -26
- package/src/runtime-mcp/oauth-flow.ts +42 -12
- package/src/runtime-mcp/transports/http.ts +49 -19
- package/src/runtime-mcp/transports/stdio.ts +47 -28
- package/src/runtime-mcp/types.ts +10 -0
- package/src/sdk/acp/adapter.ts +418 -0
- package/src/sdk/acp/index.ts +2 -0
- package/src/sdk/broker/broker.ts +877 -0
- package/src/sdk/broker/discovery.ts +238 -0
- package/src/sdk/broker/ensure.ts +393 -0
- package/src/sdk/broker/identity.ts +42 -0
- package/src/sdk/broker/index.ts +8 -0
- package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
- package/src/sdk/broker/internal-source.bunfig.toml +1 -0
- package/src/sdk/broker/internal.ts +10 -0
- package/src/sdk/broker/lifecycle-codec.ts +11 -0
- package/src/sdk/broker/lifecycle-ledger.ts +583 -0
- package/src/sdk/broker/lifecycle.ts +3413 -0
- package/src/sdk/broker/process-incarnation.ts +151 -0
- package/src/sdk/broker/runtime.ts +164 -0
- package/src/sdk/broker/session-index.ts +678 -0
- package/src/sdk/broker/state-version.ts +47 -0
- package/src/sdk/broker/transport.ts +125 -0
- package/src/sdk/bus/attachment-registry.ts +23 -0
- package/src/sdk/bus/chat-adapters.ts +147 -0
- package/src/sdk/bus/chat-command-policy.ts +107 -0
- package/src/sdk/bus/chat-daemon-cli.ts +278 -0
- package/src/sdk/bus/chat-daemon-control.ts +1101 -0
- package/src/sdk/bus/chat-daemon-runtime.ts +527 -0
- package/src/sdk/bus/chat-effect-journal.ts +363 -0
- package/src/sdk/bus/config-commands.ts +192 -0
- package/src/sdk/bus/config.ts +568 -0
- package/src/sdk/bus/conversation-store.ts +367 -0
- package/src/sdk/bus/daemon-paths.ts +34 -0
- package/src/sdk/bus/discord-conversation.ts +85 -0
- package/src/sdk/bus/discord-daemon.ts +2292 -0
- package/src/sdk/bus/discord-live-provider.ts +521 -0
- package/src/sdk/bus/discord-provider.ts +56 -0
- package/src/sdk/bus/engine.ts +100 -0
- package/src/sdk/bus/helpers.ts +135 -0
- package/src/sdk/bus/html-format.ts +518 -0
- package/src/sdk/bus/index.ts +4961 -0
- package/src/sdk/bus/lifecycle-commands.ts +291 -0
- package/src/sdk/bus/lifecycle-control-runtime.ts +1409 -0
- package/src/sdk/bus/lifecycle-orchestrator.ts +458 -0
- package/src/sdk/bus/managed-daemon.ts +163 -0
- package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
- package/src/sdk/bus/natives-augment.d.ts +63 -0
- package/src/sdk/bus/notification-orchestration.ts +535 -0
- package/src/sdk/bus/notification-service.ts +1174 -0
- package/src/sdk/bus/operator-runtime.ts +171 -0
- package/src/sdk/bus/rate-limit-pool.ts +276 -0
- package/src/sdk/bus/recent-activity.ts +279 -0
- package/src/sdk/bus/reply-sent-store.ts +134 -0
- package/src/sdk/bus/rich-document.ts +258 -0
- package/src/sdk/bus/rich-draft.ts +107 -0
- package/src/sdk/bus/rich-render.ts +135 -0
- package/src/sdk/bus/session-control.ts +439 -0
- package/src/sdk/bus/slack-conversation.ts +74 -0
- package/src/sdk/bus/slack-daemon.ts +2144 -0
- package/src/sdk/bus/slack-live-provider.ts +380 -0
- package/src/sdk/bus/slack-provider.ts +76 -0
- package/src/sdk/bus/telegram-cli.ts +194 -0
- package/src/sdk/bus/telegram-daemon-cli.ts +292 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +27 -0
- package/src/sdk/bus/telegram-daemon-control.ts +642 -0
- package/src/sdk/bus/telegram-daemon.ts +6675 -0
- package/src/sdk/bus/telegram-reference.ts +436 -0
- package/src/sdk/bus/telegram-setup.ts +663 -0
- package/src/sdk/bus/threaded-inbound.ts +141 -0
- package/src/sdk/bus/threaded-render.ts +294 -0
- package/src/sdk/bus/topic-registry.ts +364 -0
- package/src/sdk/cli/index.ts +1 -0
- package/src/sdk/cli/session-cli.ts +275 -0
- package/src/sdk/client/client.ts +1 -0
- package/src/sdk/client/discovery.ts +108 -0
- package/src/sdk/client/index.ts +2 -0
- package/src/sdk/host/control/dispatch.ts +388 -0
- package/src/sdk/host/control/index.ts +10 -0
- package/src/sdk/host/control/operations.ts +68 -0
- package/src/sdk/host/events.ts +91 -0
- package/src/sdk/host/host.ts +338 -0
- package/src/sdk/host/index.ts +4 -0
- package/src/sdk/host/query/cursor.ts +189 -0
- package/src/sdk/host/query/handlers.ts +531 -0
- package/src/sdk/host/query/index.ts +3 -0
- package/src/sdk/host/query/revision-store.ts +1149 -0
- package/src/sdk/host/reverse-leases.ts +325 -0
- package/src/sdk/host/types.ts +29 -0
- package/src/sdk/index.ts +14 -0
- package/src/sdk/lifecycle-session.ts +39 -0
- package/src/sdk/mcp/index.ts +1 -0
- package/src/sdk/mcp/server.ts +332 -0
- package/src/sdk/models.ts +168 -0
- package/src/sdk/protocol/adapter-validation.ts +48 -0
- package/src/sdk/protocol/operation-inventory.generated.json +4719 -0
- package/src/sdk/protocol/operation-registry.ts +312 -0
- package/src/sdk/session-directory.ts +141 -0
- package/src/sdk/session.ts +2869 -0
- package/src/sdk/startup-capability.ts +189 -0
- package/src/secrets/index.ts +53 -10
- package/src/secrets/obfuscator.ts +21 -18
- package/src/secrets/regex.ts +2 -0
- package/src/session/agent-session.ts +5602 -2138
- package/src/session/agent-storage.ts +18 -0
- package/src/session/artifacts.ts +188 -23
- package/src/session/cache-economics.ts +25 -8
- package/src/session/context-estimation.ts +7 -2
- package/src/session/default-model-selection.ts +93 -0
- package/src/session/fallback-chain-controller.ts +186 -0
- package/src/session/internal/managed-session-scope.ts +2402 -0
- package/src/session/internal/managed-session-storage.ts +1559 -0
- package/src/session/messages.ts +91 -2
- package/src/session/session-manager-internal.ts +33 -0
- package/src/session/session-manager.ts +2578 -392
- package/src/session/session-storage.ts +550 -40
- package/src/session/streaming-output.ts +6 -0
- package/src/session/volatile-context-pruning.ts +78 -0
- package/src/session/yield-queue.ts +20 -0
- package/src/setup/credential-auto-import.ts +291 -35
- package/src/setup/hermes/templates/operator-instructions.v1.md +4 -6
- package/src/setup/provider-onboarding.ts +36 -61
- package/src/setup/provider-presets.json +5 -0
- package/src/skc-runtime/deep-interview-recorder.ts +70 -3
- package/src/skc-runtime/deep-interview-state.ts +441 -5
- package/src/skc-runtime/gc-render.ts +19 -1
- package/src/skc-runtime/gc-runtime.ts +68 -3
- package/src/skc-runtime/goal-mode-request.ts +55 -8
- package/src/skc-runtime/launch-worktree.ts +5 -5
- package/src/skc-runtime/linux-proc.ts +71 -0
- package/src/skc-runtime/managed-owner-admission.ts +352 -0
- package/src/skc-runtime/managed-owner-supervisor.ts +162 -0
- package/src/skc-runtime/psmux-detect.ts +82 -4
- package/src/skc-runtime/ralplan-runtime.ts +74 -90
- package/src/skc-runtime/session-resolution.ts +18 -3
- package/src/skc-runtime/session-state-sidecar.ts +47 -138
- package/src/skc-runtime/state-argv.ts +292 -0
- package/src/skc-runtime/state-migrations.ts +1 -1
- package/src/skc-runtime/state-runtime.ts +387 -451
- package/src/skc-runtime/state-writer.ts +36 -40
- package/src/skc-runtime/team-launch.ts +319 -0
- package/src/skc-runtime/team-notify.ts +326 -0
- package/src/skc-runtime/team-runtime.ts +8 -2
- package/src/skc-runtime/team-store.ts +828 -0
- package/src/skc-runtime/team-workers.ts +962 -0
- package/src/skc-runtime/tmux-owner-isolation-cli.ts +55 -28
- package/src/skc-runtime/tmux-owner-isolation.ts +136 -11
- package/src/skc-runtime/tmux-sessions.ts +23 -34
- package/src/skc-runtime/ultragoal-change-set.ts +172 -0
- package/src/skc-runtime/ultragoal-evidence.ts +874 -0
- package/src/skc-runtime/ultragoal-guard.ts +136 -18
- package/src/skc-runtime/ultragoal-owner-loss-recovery.ts +328 -0
- package/src/skc-runtime/ultragoal-pipeline.ts +306 -0
- package/src/skc-runtime/ultragoal-receipt-freshness.ts +102 -1
- package/src/skc-runtime/ultragoal-runtime.ts +325 -1322
- package/src/skc-runtime/windows-powershell-command.ts +58 -0
- package/src/skc-runtime/workflow-cli-common.ts +30 -0
- package/src/skc-runtime/workflow-manifest.generated.json +58 -0
- package/src/skc-runtime/workflow-manifest.ts +18 -0
- package/src/skill-state/active-state.ts +3 -13
- package/src/skill-state/workflow-mutation-guard.ts +661 -0
- package/src/skill-state/workflow-state-contract.ts +6 -41
- package/src/slash-commands/builtin-registry.ts +115 -41
- package/src/system-prompt.ts +37 -44
- package/src/task/agents.ts +19 -1
- package/src/task/executor.ts +223 -45
- package/src/task/index.ts +124 -56
- package/src/thinking.ts +21 -6
- package/src/tool-discovery/tool-index.ts +20 -134
- package/src/tools/ask-answer-registry.ts +16 -2
- package/src/tools/ast-edit.ts +1 -1
- package/src/tools/bash-allowed-prefixes.ts +79 -29
- package/src/tools/bash-skill-urls.ts +14 -3
- package/src/tools/bash.ts +40 -2
- package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
- package/src/tools/browser/benchmark/detector-report.ts +157 -0
- package/src/tools/browser/benchmark/run-suite.ts +39 -0
- package/src/tools/browser/dead-tab-recovery.ts +78 -0
- package/src/tools/browser/launch.ts +127 -20
- package/src/tools/browser/profile-discovery.ts +63 -0
- package/src/tools/browser/profile-posture.ts +59 -0
- package/src/tools/browser/profile-reuse.ts +102 -0
- package/src/tools/browser/profile-warmup.ts +109 -0
- package/src/tools/browser/readable.ts +1 -1
- package/src/tools/browser/registry.ts +87 -11
- package/src/tools/browser/screenshot-format.ts +34 -0
- package/src/tools/browser/tab-protocol.ts +4 -0
- package/src/tools/browser/tab-supervisor.ts +392 -142
- package/src/tools/browser/tab-worker-entry.ts +33 -14
- package/src/tools/browser/tab-worker-path-resolver.ts +67 -0
- package/src/tools/browser/tab-worker-smoke.ts +87 -0
- package/src/tools/browser/tab-worker.ts +8 -6
- package/src/tools/browser.ts +6 -0
- package/src/tools/computer.ts +10 -3
- package/src/tools/cron.ts +30 -16
- package/src/tools/fetch.ts +11 -4
- package/src/tools/index.ts +88 -32
- package/src/tools/output-meta.ts +19 -7
- package/src/tools/path-utils.ts +42 -35
- package/src/tools/plan-mode-guard.ts +1 -0
- package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
- package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
- package/src/tools/read.ts +226 -65
- package/src/tools/resource-gc.ts +125 -36
- package/src/tools/search-tool-bm25.ts +11 -74
- package/src/tools/sqlite-reader.ts +3 -2
- package/src/tools/subagent-render.ts +19 -8
- package/src/tools/subagent.ts +129 -34
- package/src/tools/telegram-send.ts +2 -2
- package/src/utils/event-bus.ts +9 -4
- package/src/utils/file-mentions.ts +4 -4
- package/src/utils/image-loading.ts +85 -34
- package/src/utils/image-resize.ts +16 -9
- package/src/utils/pasted-image-loading.ts +514 -0
- package/src/utils/pasted-image-path.ts +223 -98
- package/src/web/scrapers/html-to-markdown.ts +68 -0
- package/src/web/scrapers/readthedocs.ts +1 -1
- package/src/web/scrapers/types.ts +1 -68
- package/src/web/search/index.ts +3 -3
- package/src/web/search/providers/openai-compatible.ts +76 -23
- package/dist/types/append-only-mode.d.ts +0 -31
- package/dist/types/async/index.d.ts +0 -2
- package/dist/types/async/job-manager.d.ts +0 -328
- package/dist/types/async/support.d.ts +0 -2
- package/dist/types/autoresearch/dashboard.d.ts +0 -4
- package/dist/types/autoresearch/git.d.ts +0 -36
- package/dist/types/autoresearch/helpers.d.ts +0 -24
- package/dist/types/autoresearch/index.d.ts +0 -2
- package/dist/types/autoresearch/state.d.ts +0 -17
- package/dist/types/autoresearch/storage.d.ts +0 -142
- package/dist/types/autoresearch/tools/init-experiment.d.ts +0 -31
- package/dist/types/autoresearch/tools/log-experiment.d.ts +0 -23
- package/dist/types/autoresearch/tools/run-experiment.d.ts +0 -8
- package/dist/types/autoresearch/tools/update-notes.d.ts +0 -12
- package/dist/types/autoresearch/types.d.ts +0 -154
- package/dist/types/build-metadata.d.ts +0 -7
- package/dist/types/capability/context-file.d.ts +0 -17
- package/dist/types/capability/extension-module.d.ts +0 -15
- package/dist/types/capability/extension.d.ts +0 -28
- package/dist/types/capability/fs.d.ts +0 -20
- package/dist/types/capability/hook.d.ts +0 -19
- package/dist/types/capability/index.d.ts +0 -80
- package/dist/types/capability/instruction.d.ts +0 -17
- package/dist/types/capability/mcp.d.ts +0 -49
- package/dist/types/capability/prompt.d.ts +0 -15
- package/dist/types/capability/rule.d.ts +0 -69
- package/dist/types/capability/settings.d.ts +0 -15
- package/dist/types/capability/skill.d.ts +0 -36
- package/dist/types/capability/slash-command.d.ts +0 -17
- package/dist/types/capability/ssh.d.ts +0 -23
- package/dist/types/capability/system-prompt.d.ts +0 -15
- package/dist/types/capability/tool.d.ts +0 -19
- package/dist/types/capability/types.d.ts +0 -154
- package/dist/types/cli/agents-cli.d.ts +0 -12
- package/dist/types/cli/args.d.ts +0 -57
- package/dist/types/cli/auth-broker-cli.d.ts +0 -25
- package/dist/types/cli/auth-gateway-cli.d.ts +0 -18
- package/dist/types/cli/classify-install-target.d.ts +0 -8
- package/dist/types/cli/commands/init-xdg.d.ts +0 -1
- package/dist/types/cli/completion-cli.d.ts +0 -41
- package/dist/types/cli/config-cli.d.ts +0 -23
- package/dist/types/cli/daemon-cli.d.ts +0 -27
- package/dist/types/cli/fast-help.d.ts +0 -1
- package/dist/types/cli/file-processor.d.ts +0 -11
- package/dist/types/cli/fixture-report.d.ts +0 -20
- package/dist/types/cli/fixture-report.test.d.ts +0 -1
- package/dist/types/cli/grep-cli.d.ts +0 -17
- package/dist/types/cli/initial-message.d.ts +0 -17
- package/dist/types/cli/list-models.d.ts +0 -36
- package/dist/types/cli/local-provider-smoke.d.ts +0 -59
- package/dist/types/cli/malloc-env-guard.d.ts +0 -65
- package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
- package/dist/types/cli/mcp-cli.d.ts +0 -25
- package/dist/types/cli/migrate-cli.d.ts +0 -20
- package/dist/types/cli/nofile-limit.d.ts +0 -11
- package/dist/types/cli/notify-cli.d.ts +0 -39
- package/dist/types/cli/plugin-cli.d.ts +0 -34
- package/dist/types/cli/read-cli.d.ts +0 -4
- package/dist/types/cli/session-picker.d.ts +0 -4
- package/dist/types/cli/setup-cli.d.ts +0 -73
- package/dist/types/cli/shell-cli.d.ts +0 -8
- package/dist/types/cli/skills-cli.d.ts +0 -9
- package/dist/types/cli/ssh-cli.d.ts +0 -21
- package/dist/types/cli/stats-cli.d.ts +0 -17
- package/dist/types/cli/telegram-cli.d.ts +0 -13
- package/dist/types/cli/update-cli.d.ts +0 -108
- package/dist/types/cli/web-search-cli.d.ts +0 -32
- package/dist/types/cli/worktree-cli.d.ts +0 -26
- package/dist/types/cli.d.ts +0 -140
- package/dist/types/commands/acp.d.ts +0 -12
- package/dist/types/commands/agents.d.ts +0 -34
- package/dist/types/commands/auth-broker.d.ts +0 -54
- package/dist/types/commands/auth-gateway.d.ts +0 -32
- package/dist/types/commands/codex-native-hook.d.ts +0 -6
- package/dist/types/commands/commit.d.ts +0 -27
- package/dist/types/commands/completion.d.ts +0 -29
- package/dist/types/commands/config.d.ts +0 -33
- package/dist/types/commands/contribution-prep.d.ts +0 -18
- package/dist/types/commands/coordinator.d.ts +0 -19
- package/dist/types/commands/daemon.d.ts +0 -45
- package/dist/types/commands/deep-interview.d.ts +0 -54
- package/dist/types/commands/gc.d.ts +0 -26
- package/dist/types/commands/grep.d.ts +0 -42
- package/dist/types/commands/harness.d.ts +0 -43
- package/dist/types/commands/launch.d.ts +0 -131
- package/dist/types/commands/local-provider.d.ts +0 -34
- package/dist/types/commands/mcp-serve.d.ts +0 -24
- package/dist/types/commands/mcp.d.ts +0 -70
- package/dist/types/commands/migrate.d.ts +0 -33
- package/dist/types/commands/notify.d.ts +0 -47
- package/dist/types/commands/plugin.d.ts +0 -58
- package/dist/types/commands/ralplan.d.ts +0 -7
- package/dist/types/commands/read.d.ts +0 -15
- package/dist/types/commands/rlm.d.ts +0 -10
- package/dist/types/commands/session.d.ts +0 -30
- package/dist/types/commands/setup.d.ts +0 -105
- package/dist/types/commands/shell.d.ts +0 -21
- package/dist/types/commands/skills.d.ts +0 -26
- package/dist/types/commands/ssh.d.ts +0 -48
- package/dist/types/commands/state.d.ts +0 -7
- package/dist/types/commands/stats.d.ts +0 -25
- package/dist/types/commands/team.d.ts +0 -24
- package/dist/types/commands/telegram.d.ts +0 -22
- package/dist/types/commands/ultragoal.d.ts +0 -8
- package/dist/types/commands/update.d.ts +0 -20
- package/dist/types/commands/web-search.d.ts +0 -87
- package/dist/types/commands/worktree.d.ts +0 -34
- package/dist/types/commit/agentic/agent.d.ts +0 -31
- package/dist/types/commit/agentic/fallback.d.ts +0 -5
- package/dist/types/commit/agentic/index.d.ts +0 -2
- package/dist/types/commit/agentic/state.d.ts +0 -58
- package/dist/types/commit/agentic/tools/analyze-file.d.ts +0 -19
- package/dist/types/commit/agentic/tools/git-file-diff.d.ts +0 -10
- package/dist/types/commit/agentic/tools/git-hunk.d.ts +0 -9
- package/dist/types/commit/agentic/tools/git-overview.d.ts +0 -9
- package/dist/types/commit/agentic/tools/index.d.ts +0 -16
- package/dist/types/commit/agentic/tools/propose-changelog.d.ts +0 -28
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +0 -36
- package/dist/types/commit/agentic/tools/recent-commits.d.ts +0 -7
- package/dist/types/commit/agentic/tools/schemas.d.ts +0 -27
- package/dist/types/commit/agentic/tools/split-commit.d.ts +0 -53
- package/dist/types/commit/agentic/topo-sort.d.ts +0 -4
- package/dist/types/commit/agentic/trivial.d.ts +0 -7
- package/dist/types/commit/agentic/validation.d.ts +0 -20
- package/dist/types/commit/analysis/conventional.d.ts +0 -22
- package/dist/types/commit/analysis/index.d.ts +0 -4
- package/dist/types/commit/analysis/scope.d.ts +0 -6
- package/dist/types/commit/analysis/summary.d.ts +0 -19
- package/dist/types/commit/analysis/validation.d.ts +0 -8
- package/dist/types/commit/changelog/detect.d.ts +0 -2
- package/dist/types/commit/changelog/generate.d.ts +0 -30
- package/dist/types/commit/changelog/index.d.ts +0 -30
- package/dist/types/commit/changelog/parse.d.ts +0 -2
- package/dist/types/commit/cli.d.ts +0 -3
- package/dist/types/commit/git/diff.d.ts +0 -5
- package/dist/types/commit/index.d.ts +0 -4
- package/dist/types/commit/map-reduce/index.d.ts +0 -28
- package/dist/types/commit/map-reduce/map-phase.d.ts +0 -17
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +0 -13
- package/dist/types/commit/map-reduce/utils.d.ts +0 -2
- package/dist/types/commit/message.d.ts +0 -2
- package/dist/types/commit/model-selection.d.ts +0 -15
- package/dist/types/commit/pipeline.d.ts +0 -5
- package/dist/types/commit/shared-llm.d.ts +0 -54
- package/dist/types/commit/types.d.ts +0 -78
- package/dist/types/commit/utils/exclusions.d.ts +0 -4
- package/dist/types/commit/utils.d.ts +0 -20
- package/dist/types/config/config-file.d.ts +0 -58
- package/dist/types/config/file-lock-gc.d.ts +0 -5
- package/dist/types/config/file-lock.d.ts +0 -36
- package/dist/types/config/keybindings.d.ts +0 -364
- package/dist/types/config/model-equivalence.d.ts +0 -24
- package/dist/types/config/model-profile-activation.d.ts +0 -65
- package/dist/types/config/model-profiles.d.ts +0 -39
- package/dist/types/config/model-registry.d.ts +0 -473
- package/dist/types/config/model-resolver.d.ts +0 -217
- package/dist/types/config/models-config-schema.d.ts +0 -700
- package/dist/types/config/prompt-templates.d.ts +0 -32
- package/dist/types/config/resolve-config-value.d.ts +0 -17
- package/dist/types/config/settings-schema.d.ts +0 -4223
- package/dist/types/config/settings.d.ts +0 -158
- package/dist/types/config/skill-settings-defaults.d.ts +0 -14
- package/dist/types/config/telegram-autostart.d.ts +0 -14
- package/dist/types/config/telegram-env-bridge.d.ts +0 -18
- package/dist/types/config.d.ts +0 -66
- package/dist/types/coordinator/contract.d.ts +0 -4
- package/dist/types/coordinator-mcp/model-preset.d.ts +0 -45
- package/dist/types/coordinator-mcp/policy.d.ts +0 -27
- package/dist/types/coordinator-mcp/safety.d.ts +0 -26
- package/dist/types/coordinator-mcp/server.d.ts +0 -139
- package/dist/types/coordinator-mcp/session-reaper.d.ts +0 -53
- package/dist/types/cursor.d.ts +0 -24
- package/dist/types/daemon/builtin.d.ts +0 -20
- package/dist/types/daemon/control-types.d.ts +0 -67
- package/dist/types/daemon/operator-contract.d.ts +0 -47
- package/dist/types/daemon/runtime.d.ts +0 -25
- package/dist/types/dap/client.d.ts +0 -39
- package/dist/types/dap/config.d.ts +0 -6
- package/dist/types/dap/index.d.ts +0 -4
- package/dist/types/dap/session.d.ts +0 -108
- package/dist/types/dap/types.d.ts +0 -524
- package/dist/types/debug/crash-diagnostics.d.ts +0 -45
- package/dist/types/debug/index.d.ts +0 -15
- package/dist/types/debug/log-formatting.d.ts +0 -4
- package/dist/types/debug/log-viewer.d.ts +0 -68
- package/dist/types/debug/profiler.d.ts +0 -24
- package/dist/types/debug/raw-sse-buffer.d.ts +0 -44
- package/dist/types/debug/raw-sse.d.ts +0 -16
- package/dist/types/debug/report-bundle.d.ts +0 -55
- package/dist/types/debug/runtime-gauges.d.ts +0 -6
- package/dist/types/debug/system-info.d.ts +0 -26
- package/dist/types/deep-interview/plaintext-gate-guard.d.ts +0 -11
- package/dist/types/deep-interview/render-middleware.d.ts +0 -6
- package/dist/types/defaults/skc/extensions/grok-build/index.d.ts +0 -1
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/index.d.ts +0 -1
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.d.ts +0 -29
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.d.ts +0 -27
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/billing.d.ts +0 -8
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/register.d.ts +0 -5
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/stream.d.ts +0 -10
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/usage.d.ts +0 -2
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/base-url.d.ts +0 -2
- package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/errors.d.ts +0 -38
- package/dist/types/defaults/skc-defaults.d.ts +0 -64
- package/dist/types/defaults/skc-grok-cli.d.ts +0 -5
- package/dist/types/discovery/agents-md.d.ts +0 -1
- package/dist/types/discovery/agents.d.ts +0 -12
- package/dist/types/discovery/builtin.d.ts +0 -1
- package/dist/types/discovery/claude-plugins.d.ts +0 -1
- package/dist/types/discovery/claude.d.ts +0 -1
- package/dist/types/discovery/cline.d.ts +0 -1
- package/dist/types/discovery/codex.d.ts +0 -1
- package/dist/types/discovery/cursor.d.ts +0 -19
- package/dist/types/discovery/gemini.d.ts +0 -1
- package/dist/types/discovery/github.d.ts +0 -1
- package/dist/types/discovery/helpers.d.ts +0 -271
- package/dist/types/discovery/index.d.ts +0 -48
- package/dist/types/discovery/mcp-json.d.ts +0 -1
- package/dist/types/discovery/opencode.d.ts +0 -1
- package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
- package/dist/types/discovery/ssh.d.ts +0 -1
- package/dist/types/discovery/substitute-plugin-root.d.ts +0 -1
- package/dist/types/discovery/vscode.d.ts +0 -1
- package/dist/types/discovery/windsurf.d.ts +0 -15
- package/dist/types/edit/apply-patch/index.d.ts +0 -35
- package/dist/types/edit/apply-patch/parser.d.ts +0 -34
- package/dist/types/edit/diff.d.ts +0 -75
- package/dist/types/edit/file-read-cache.d.ts +0 -25
- package/dist/types/edit/index.d.ts +0 -58
- package/dist/types/edit/modes/apply-patch.d.ts +0 -24
- package/dist/types/edit/modes/patch.d.ts +0 -99
- package/dist/types/edit/modes/replace.d.ts +0 -149
- package/dist/types/edit/normalize.d.ts +0 -43
- package/dist/types/edit/notebook.d.ts +0 -26
- package/dist/types/edit/read-file.d.ts +0 -8
- package/dist/types/edit/renderer.d.ts +0 -110
- package/dist/types/edit/streaming.d.ts +0 -66
- package/dist/types/eval/backend.d.ts +0 -40
- package/dist/types/eval/index.d.ts +0 -4
- package/dist/types/eval/js/context-manager.d.ts +0 -27
- package/dist/types/eval/js/executor.d.ts +0 -29
- package/dist/types/eval/js/index.d.ts +0 -10
- package/dist/types/eval/js/shared/helpers.d.ts +0 -38
- package/dist/types/eval/js/shared/indirect-eval.d.ts +0 -14
- package/dist/types/eval/js/shared/prelude.d.ts +0 -1
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +0 -6
- package/dist/types/eval/js/shared/runtime.d.ts +0 -47
- package/dist/types/eval/js/shared/types.d.ts +0 -24
- package/dist/types/eval/js/tool-bridge.d.ts +0 -18
- package/dist/types/eval/js/worker-core.d.ts +0 -5
- package/dist/types/eval/js/worker-entry.d.ts +0 -1
- package/dist/types/eval/js/worker-protocol.d.ts +0 -77
- package/dist/types/eval/py/display.d.ts +0 -25
- package/dist/types/eval/py/executor.d.ts +0 -88
- package/dist/types/eval/py/index.d.ts +0 -10
- package/dist/types/eval/py/kernel.d.ts +0 -65
- package/dist/types/eval/py/prelude.d.ts +0 -1
- package/dist/types/eval/py/runtime.d.ts +0 -29
- package/dist/types/eval/py/tool-bridge.d.ts +0 -20
- package/dist/types/eval/types.d.ts +0 -52
- package/dist/types/exa/factory.d.ts +0 -13
- package/dist/types/exa/index.d.ts +0 -20
- package/dist/types/exa/mcp-client.d.ts +0 -45
- package/dist/types/exa/render.d.ts +0 -19
- package/dist/types/exa/researcher.d.ts +0 -9
- package/dist/types/exa/search.d.ts +0 -9
- package/dist/types/exa/types.d.ts +0 -155
- package/dist/types/exa/websets.d.ts +0 -9
- package/dist/types/exec/bash-executor.d.ts +0 -64
- package/dist/types/exec/exec.d.ts +0 -25
- package/dist/types/exec/idle-timeout-watchdog.d.ts +0 -18
- package/dist/types/exec/non-interactive-env.d.ts +0 -1
- package/dist/types/export/custom-share.d.ts +0 -20
- package/dist/types/export/html/index.d.ts +0 -10
- package/dist/types/export/html/template.generated.d.ts +0 -1
- package/dist/types/export/html/template.macro.d.ts +0 -5
- package/dist/types/export/ttsr.d.ts +0 -55
- package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +0 -9
- package/dist/types/extensibility/custom-commands/index.d.ts +0 -2
- package/dist/types/extensibility/custom-commands/loader.d.ts +0 -29
- package/dist/types/extensibility/custom-commands/types.d.ts +0 -106
- package/dist/types/extensibility/custom-tools/index.d.ts +0 -6
- package/dist/types/extensibility/custom-tools/loader.d.ts +0 -69
- package/dist/types/extensibility/custom-tools/types.d.ts +0 -229
- package/dist/types/extensibility/custom-tools/wrapper.d.ts +0 -24
- package/dist/types/extensibility/extensions/compact-handler.d.ts +0 -26
- package/dist/types/extensibility/extensions/get-commands-handler.d.ts +0 -29
- package/dist/types/extensibility/extensions/index.d.ts +0 -9
- package/dist/types/extensibility/extensions/loader.d.ts +0 -43
- package/dist/types/extensibility/extensions/prefix-command-bridge.d.ts +0 -35
- package/dist/types/extensibility/extensions/runner.d.ts +0 -135
- package/dist/types/extensibility/extensions/types.d.ts +0 -920
- package/dist/types/extensibility/extensions/wrapper.d.ts +0 -55
- package/dist/types/extensibility/hooks/index.d.ts +0 -5
- package/dist/types/extensibility/hooks/loader.d.ts +0 -89
- package/dist/types/extensibility/hooks/runner.d.ts +0 -126
- package/dist/types/extensibility/hooks/tool-wrapper.d.ts +0 -25
- package/dist/types/extensibility/hooks/types.d.ts +0 -431
- package/dist/types/extensibility/plugins/doctor.d.ts +0 -3
- package/dist/types/extensibility/plugins/git-url.d.ts +0 -34
- package/dist/types/extensibility/plugins/index.d.ts +0 -8
- package/dist/types/extensibility/plugins/installer.d.ts +0 -5
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +0 -2
- package/dist/types/extensibility/plugins/loader.d.ts +0 -31
- package/dist/types/extensibility/plugins/manager.d.ts +0 -65
- package/dist/types/extensibility/plugins/marketplace/cache.d.ts +0 -41
- package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +0 -48
- package/dist/types/extensibility/plugins/marketplace/index.d.ts +0 -6
- package/dist/types/extensibility/plugins/marketplace/manager.d.ts +0 -57
- package/dist/types/extensibility/plugins/marketplace/registry.d.ts +0 -34
- package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +0 -28
- package/dist/types/extensibility/plugins/marketplace/types.d.ts +0 -130
- package/dist/types/extensibility/plugins/parser.d.ts +0 -52
- package/dist/types/extensibility/plugins/security-scanner.d.ts +0 -31
- package/dist/types/extensibility/plugins/types.d.ts +0 -149
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +0 -20
- package/dist/types/extensibility/shared-events.d.ts +0 -281
- package/dist/types/extensibility/skc-plugins/activation.d.ts +0 -14
- package/dist/types/extensibility/skc-plugins/compiler.d.ts +0 -19
- package/dist/types/extensibility/skc-plugins/constrained-hooks.d.ts +0 -29
- package/dist/types/extensibility/skc-plugins/index.d.ts +0 -18
- package/dist/types/extensibility/skc-plugins/injection.d.ts +0 -40
- package/dist/types/extensibility/skc-plugins/installer.d.ts +0 -13
- package/dist/types/extensibility/skc-plugins/loader.d.ts +0 -3
- package/dist/types/extensibility/skc-plugins/mcp-policy.d.ts +0 -26
- package/dist/types/extensibility/skc-plugins/observability.d.ts +0 -27
- package/dist/types/extensibility/skc-plugins/paths.d.ts +0 -8
- package/dist/types/extensibility/skc-plugins/prompt-appendix.d.ts +0 -16
- package/dist/types/extensibility/skc-plugins/registry.d.ts +0 -32
- package/dist/types/extensibility/skc-plugins/runtime-adapters.d.ts +0 -64
- package/dist/types/extensibility/skc-plugins/schema.d.ts +0 -3
- package/dist/types/extensibility/skc-plugins/session-validation.d.ts +0 -42
- package/dist/types/extensibility/skc-plugins/state.d.ts +0 -9
- package/dist/types/extensibility/skc-plugins/tools.d.ts +0 -8
- package/dist/types/extensibility/skc-plugins/types.d.ts +0 -220
- package/dist/types/extensibility/skc-plugins/validation.d.ts +0 -11
- package/dist/types/extensibility/skills.d.ts +0 -82
- package/dist/types/extensibility/slash-commands.d.ts +0 -48
- package/dist/types/extensibility/tool-proxy.d.ts +0 -4
- package/dist/types/extensibility/typebox.d.ts +0 -155
- package/dist/types/extensibility/utils.d.ts +0 -12
- package/dist/types/goals/index.d.ts +0 -3
- package/dist/types/goals/runtime.d.ts +0 -63
- package/dist/types/goals/state.d.ts +0 -32
- package/dist/types/goals/tools/goal-tool.d.ts +0 -62
- package/dist/types/harness-control-plane/classifier.d.ts +0 -13
- package/dist/types/harness-control-plane/control-endpoint.d.ts +0 -31
- package/dist/types/harness-control-plane/finalize.d.ts +0 -60
- package/dist/types/harness-control-plane/gc-adapter.d.ts +0 -3
- package/dist/types/harness-control-plane/operate.d.ts +0 -35
- package/dist/types/harness-control-plane/owner.d.ts +0 -53
- package/dist/types/harness-control-plane/phase-rollup.d.ts +0 -23
- package/dist/types/harness-control-plane/preserve.d.ts +0 -19
- package/dist/types/harness-control-plane/receipt-ingest.d.ts +0 -19
- package/dist/types/harness-control-plane/receipt-spool.d.ts +0 -19
- package/dist/types/harness-control-plane/receipts.d.ts +0 -149
- package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
- package/dist/types/harness-control-plane/seams.d.ts +0 -21
- package/dist/types/harness-control-plane/session-lease.d.ts +0 -65
- package/dist/types/harness-control-plane/state-machine.d.ts +0 -24
- package/dist/types/harness-control-plane/storage.d.ts +0 -81
- package/dist/types/harness-control-plane/types.d.ts +0 -187
- package/dist/types/hashline/anchors.d.ts +0 -20
- package/dist/types/hashline/apply.d.ts +0 -14
- package/dist/types/hashline/constants.d.ts +0 -19
- package/dist/types/hashline/diff-preview.d.ts +0 -2
- package/dist/types/hashline/diff.d.ts +0 -17
- package/dist/types/hashline/execute.d.ts +0 -4
- package/dist/types/hashline/hash.d.ts +0 -123
- package/dist/types/hashline/index.d.ts +0 -13
- package/dist/types/hashline/input.d.ts +0 -11
- package/dist/types/hashline/parser.d.ts +0 -7
- package/dist/types/hashline/prefixes.d.ts +0 -7
- package/dist/types/hashline/recovery.d.ts +0 -27
- package/dist/types/hashline/stream.d.ts +0 -2
- package/dist/types/hashline/types.d.ts +0 -77
- package/dist/types/hindsight/backend.d.ts +0 -13
- package/dist/types/hindsight/bank.d.ts +0 -54
- package/dist/types/hindsight/client.d.ts +0 -224
- package/dist/types/hindsight/config.d.ts +0 -51
- package/dist/types/hindsight/content.d.ts +0 -70
- package/dist/types/hindsight/index.d.ts +0 -8
- package/dist/types/hindsight/mental-models.d.ts +0 -125
- package/dist/types/hindsight/state.d.ts +0 -99
- package/dist/types/hindsight/transcript.d.ts +0 -28
- package/dist/types/hooks/codex-native-hooks-config.d.ts +0 -29
- package/dist/types/hooks/native-skill-hook.d.ts +0 -28
- package/dist/types/hooks/skill-keywords.d.ts +0 -18
- package/dist/types/hooks/skill-state.d.ts +0 -93
- package/dist/types/i18n/index.d.ts +0 -38
- package/dist/types/i18n/messages/de.d.ts +0 -2
- package/dist/types/i18n/messages/de.messages.d.ts +0 -1
- package/dist/types/i18n/messages/de.settings.d.ts +0 -1
- package/dist/types/i18n/messages/en.d.ts +0 -81
- package/dist/types/i18n/messages/es.d.ts +0 -2
- package/dist/types/i18n/messages/es.messages.d.ts +0 -1
- package/dist/types/i18n/messages/es.settings.d.ts +0 -1
- package/dist/types/i18n/messages/fr.d.ts +0 -2
- package/dist/types/i18n/messages/fr.messages.d.ts +0 -1
- package/dist/types/i18n/messages/fr.settings.d.ts +0 -1
- package/dist/types/i18n/messages/ja.d.ts +0 -2
- package/dist/types/i18n/messages/ja.messages.d.ts +0 -1
- package/dist/types/i18n/messages/ja.settings.d.ts +0 -1
- package/dist/types/i18n/messages/ko.d.ts +0 -2
- package/dist/types/i18n/messages/ko.messages.d.ts +0 -1
- package/dist/types/i18n/messages/ko.settings.d.ts +0 -1
- package/dist/types/i18n/messages/zh.d.ts +0 -2
- package/dist/types/i18n/messages/zh.messages.d.ts +0 -1
- package/dist/types/i18n/messages/zh.settings.d.ts +0 -1
- package/dist/types/index.d.ts +0 -33
- package/dist/types/internal-urls/agent-protocol.d.ts +0 -12
- package/dist/types/internal-urls/artifact-protocol.d.ts +0 -6
- package/dist/types/internal-urls/docs-index.generated.d.ts +0 -2
- package/dist/types/internal-urls/index.d.ts +0 -20
- package/dist/types/internal-urls/issue-pr-protocol.d.ts +0 -17
- package/dist/types/internal-urls/json-query.d.ts +0 -30
- package/dist/types/internal-urls/local-protocol.d.ts +0 -43
- package/dist/types/internal-urls/mcp-protocol.d.ts +0 -12
- package/dist/types/internal-urls/memory-protocol.d.ts +0 -23
- package/dist/types/internal-urls/parse.d.ts +0 -19
- package/dist/types/internal-urls/registry-helpers.d.ts +0 -11
- package/dist/types/internal-urls/router.d.ts +0 -14
- package/dist/types/internal-urls/rule-protocol.d.ts +0 -6
- package/dist/types/internal-urls/skc-protocol.d.ts +0 -12
- package/dist/types/internal-urls/skill-protocol.d.ts +0 -13
- package/dist/types/internal-urls/types.d.ts +0 -109
- package/dist/types/lsp/client.d.ts +0 -66
- package/dist/types/lsp/clients/biome-client.d.ts +0 -16
- package/dist/types/lsp/clients/index.d.ts +0 -19
- package/dist/types/lsp/clients/lsp-linter-client.d.ts +0 -16
- package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -20
- package/dist/types/lsp/config.d.ts +0 -65
- package/dist/types/lsp/edits.d.ts +0 -23
- package/dist/types/lsp/index.d.ts +0 -130
- package/dist/types/lsp/lspmux.d.ts +0 -58
- package/dist/types/lsp/render.d.ts +0 -32
- package/dist/types/lsp/startup-events.d.ts +0 -12
- package/dist/types/lsp/types.d.ts +0 -306
- package/dist/types/lsp/utils.d.ts +0 -108
- package/dist/types/main.d.ts +0 -139
- package/dist/types/memories/index.d.ts +0 -28
- package/dist/types/memories/storage.d.ts +0 -110
- package/dist/types/memory-backend/index.d.ts +0 -4
- package/dist/types/memory-backend/local-backend.d.ts +0 -9
- package/dist/types/memory-backend/off-backend.d.ts +0 -7
- package/dist/types/memory-backend/resolve.d.ts +0 -15
- package/dist/types/memory-backend/types.d.ts +0 -61
- package/dist/types/migrate/action-planner.d.ts +0 -11
- package/dist/types/migrate/adapters/claude-code.d.ts +0 -2
- package/dist/types/migrate/adapters/codex.d.ts +0 -5
- package/dist/types/migrate/adapters/index.d.ts +0 -45
- package/dist/types/migrate/adapters/opencode.d.ts +0 -2
- package/dist/types/migrate/executor.d.ts +0 -2
- package/dist/types/migrate/mcp-mapper.d.ts +0 -20
- package/dist/types/migrate/report.d.ts +0 -18
- package/dist/types/migrate/skill-normalizer.d.ts +0 -27
- package/dist/types/migrate/types.d.ts +0 -126
- package/dist/types/modes/acp/acp-agent.d.ts +0 -78
- package/dist/types/modes/acp/acp-client-bridge.d.ts +0 -9
- package/dist/types/modes/acp/acp-event-mapper.d.ts +0 -36
- package/dist/types/modes/acp/acp-mode.d.ts +0 -17
- package/dist/types/modes/acp/index.d.ts +0 -2
- package/dist/types/modes/acp/terminal-auth.d.ts +0 -6
- package/dist/types/modes/bridge/auth.d.ts +0 -12
- package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
- package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
- package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
- package/dist/types/modes/bridge/event-stream.d.ts +0 -8
- package/dist/types/modes/components/agent-dashboard.d.ts +0 -21
- package/dist/types/modes/components/assistant-message.d.ts +0 -20
- package/dist/types/modes/components/bash-execution.d.ts +0 -29
- package/dist/types/modes/components/bordered-loader.d.ts +0 -11
- package/dist/types/modes/components/branch-summary-message.d.ts +0 -13
- package/dist/types/modes/components/btw-panel.d.ts +0 -16
- package/dist/types/modes/components/compaction-summary-message.d.ts +0 -13
- package/dist/types/modes/components/countdown-timer.d.ts +0 -14
- package/dist/types/modes/components/custom-editor.d.ts +0 -69
- package/dist/types/modes/components/custom-message.d.ts +0 -15
- package/dist/types/modes/components/custom-model-preset-wizard.d.ts +0 -12
- package/dist/types/modes/components/custom-provider-wizard.d.ts +0 -10
- package/dist/types/modes/components/diff.d.ts +0 -11
- package/dist/types/modes/components/dynamic-border.d.ts +0 -14
- package/dist/types/modes/components/eval-execution.d.ts +0 -23
- package/dist/types/modes/components/execution-shared.d.ts +0 -46
- package/dist/types/modes/components/extensions/extension-dashboard.d.ts +0 -26
- package/dist/types/modes/components/extensions/extension-list.d.ts +0 -39
- package/dist/types/modes/components/extensions/index.d.ts +0 -8
- package/dist/types/modes/components/extensions/inspector-panel.d.ts +0 -8
- package/dist/types/modes/components/extensions/state-manager.d.ts +0 -50
- package/dist/types/modes/components/extensions/types.d.ts +0 -151
- package/dist/types/modes/components/footer.d.ts +0 -30
- package/dist/types/modes/components/history-search.d.ts +0 -7
- package/dist/types/modes/components/hook-editor.d.ts +0 -18
- package/dist/types/modes/components/hook-input.d.ts +0 -15
- package/dist/types/modes/components/hook-message.d.ts +0 -15
- package/dist/types/modes/components/hook-selector.d.ts +0 -59
- package/dist/types/modes/components/index.d.ts +0 -35
- package/dist/types/modes/components/irc-sidebar.d.ts +0 -32
- package/dist/types/modes/components/jobs-overlay-model.d.ts +0 -31
- package/dist/types/modes/components/jobs-overlay.d.ts +0 -30
- package/dist/types/modes/components/keybinding-hints.d.ts +0 -40
- package/dist/types/modes/components/login-dialog.d.ts +0 -32
- package/dist/types/modes/components/message-frame.d.ts +0 -42
- package/dist/types/modes/components/model-selector.d.ts +0 -60
- package/dist/types/modes/components/oauth-selector.d.ts +0 -17
- package/dist/types/modes/components/pet-selector.d.ts +0 -11
- package/dist/types/modes/components/plugin-selector.d.ts +0 -26
- package/dist/types/modes/components/plugin-settings.d.ts +0 -66
- package/dist/types/modes/components/provider-onboarding-selector.d.ts +0 -7
- package/dist/types/modes/components/queue-mode-selector.d.ts +0 -9
- package/dist/types/modes/components/queued-message-selector.d.ts +0 -12
- package/dist/types/modes/components/read-tool-group.d.ts +0 -30
- package/dist/types/modes/components/runtime-mcp-add-wizard.d.ts +0 -26
- package/dist/types/modes/components/sayknow-pet-widget.d.ts +0 -59
- package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
- package/dist/types/modes/components/session-selector.d.ts +0 -43
- package/dist/types/modes/components/settings-defs.d.ts +0 -50
- package/dist/types/modes/components/settings-selector.d.ts +0 -64
- package/dist/types/modes/components/show-images-selector.d.ts +0 -9
- package/dist/types/modes/components/skill-hud/render.d.ts +0 -2
- package/dist/types/modes/components/skill-message.d.ts +0 -10
- package/dist/types/modes/components/status-line/context-thresholds.d.ts +0 -4
- package/dist/types/modes/components/status-line/git-utils.d.ts +0 -28
- package/dist/types/modes/components/status-line/index.d.ts +0 -4
- package/dist/types/modes/components/status-line/presets.d.ts +0 -3
- package/dist/types/modes/components/status-line/segments.d.ts +0 -5
- package/dist/types/modes/components/status-line/separators.d.ts +0 -3
- package/dist/types/modes/components/status-line/token-rate.d.ts +0 -10
- package/dist/types/modes/components/status-line/types.d.ts +0 -83
- package/dist/types/modes/components/status-line.d.ts +0 -94
- package/dist/types/modes/components/theme-selector.d.ts +0 -10
- package/dist/types/modes/components/thinking-selector.d.ts +0 -15
- package/dist/types/modes/components/todo-reminder.d.ts +0 -13
- package/dist/types/modes/components/tool-execution.d.ts +0 -55
- package/dist/types/modes/components/tree-selector.d.ts +0 -31
- package/dist/types/modes/components/ttsr-notification.d.ts +0 -13
- package/dist/types/modes/components/two-column-body.d.ts +0 -9
- package/dist/types/modes/components/user-message-selector.d.ts +0 -28
- package/dist/types/modes/components/user-message.d.ts +0 -8
- package/dist/types/modes/components/visual-truncate.d.ts +0 -19
- package/dist/types/modes/components/welcome.d.ts +0 -46
- package/dist/types/modes/controllers/btw-controller.d.ts +0 -10
- package/dist/types/modes/controllers/command-controller-shared.d.ts +0 -47
- package/dist/types/modes/controllers/command-controller.d.ts +0 -40
- package/dist/types/modes/controllers/event-controller.d.ts +0 -21
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -80
- package/dist/types/modes/controllers/input-controller.d.ts +0 -42
- package/dist/types/modes/controllers/runtime-mcp-command-controller.d.ts +0 -10
- package/dist/types/modes/controllers/selector-controller.d.ts +0 -68
- package/dist/types/modes/controllers/ssh-command-controller.d.ts +0 -10
- package/dist/types/modes/controllers/todo-command-controller.d.ts +0 -7
- package/dist/types/modes/emoji-autocomplete.d.ts +0 -16
- package/dist/types/modes/index.d.ts +0 -10
- package/dist/types/modes/interactive-mode.d.ts +0 -297
- package/dist/types/modes/irc-observation-ledger.d.ts +0 -22
- package/dist/types/modes/jobs-observer.d.ts +0 -57
- package/dist/types/modes/oauth-manual-input.d.ts +0 -8
- package/dist/types/modes/print-mode.d.ts +0 -44
- package/dist/types/modes/prompt-action-autocomplete.d.ts +0 -50
- package/dist/types/modes/rpc/host-tools.d.ts +0 -1
- package/dist/types/modes/rpc/host-uris.d.ts +0 -1
- package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
- package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
- package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
- package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
- package/dist/types/modes/runtime-init.d.ts +0 -21
- package/dist/types/modes/session-observer-registry.d.ts +0 -26
- package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +0 -57
- package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +0 -102
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +0 -103
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +0 -60
- package/dist/types/modes/shared/agent-wire/event-observation.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
- package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
- package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
- package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
- package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
- package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
- package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
- package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
- package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
- package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +0 -154
- package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +0 -39
- package/dist/types/modes/shared.d.ts +0 -15
- package/dist/types/modes/slash-command-visibility.d.ts +0 -1
- package/dist/types/modes/theme/defaults/index.d.ts +0 -652
- package/dist/types/modes/theme/mermaid-cache.d.ts +0 -9
- package/dist/types/modes/theme/shimmer.d.ts +0 -38
- package/dist/types/modes/theme/theme.d.ts +0 -275
- package/dist/types/modes/tmux-scroll.d.ts +0 -18
- package/dist/types/modes/types.d.ts +0 -318
- package/dist/types/modes/utils/abort-message.d.ts +0 -4
- package/dist/types/modes/utils/context-usage.d.ts +0 -36
- package/dist/types/modes/utils/hotkeys-markdown.d.ts +0 -5
- package/dist/types/modes/utils/injected-user-submission.d.ts +0 -52
- package/dist/types/modes/utils/irc-message.d.ts +0 -38
- package/dist/types/modes/utils/keybinding-matchers.d.ts +0 -10
- package/dist/types/modes/utils/terminal-bell.d.ts +0 -3
- package/dist/types/modes/utils/tools-markdown.d.ts +0 -5
- package/dist/types/modes/utils/ui-helpers.d.ts +0 -75
- package/dist/types/notifications/attachment-registry.d.ts +0 -17
- package/dist/types/notifications/chat-adapters.d.ts +0 -9
- package/dist/types/notifications/config-commands.d.ts +0 -64
- package/dist/types/notifications/config.d.ts +0 -132
- package/dist/types/notifications/daemon-paths.d.ts +0 -17
- package/dist/types/notifications/engine.d.ts +0 -59
- package/dist/types/notifications/helpers.d.ts +0 -55
- package/dist/types/notifications/html-format.d.ts +0 -75
- package/dist/types/notifications/index.d.ts +0 -219
- package/dist/types/notifications/lifecycle-commands.d.ts +0 -69
- package/dist/types/notifications/lifecycle-control-runtime.d.ts +0 -107
- package/dist/types/notifications/lifecycle-orchestrator.d.ts +0 -144
- package/dist/types/notifications/managed-daemon.d.ts +0 -48
- package/dist/types/notifications/notification-service.d.ts +0 -144
- package/dist/types/notifications/operator-runtime.d.ts +0 -52
- package/dist/types/notifications/rate-limit-pool.d.ts +0 -113
- package/dist/types/notifications/recent-activity.d.ts +0 -39
- package/dist/types/notifications/reply-sent-store.d.ts +0 -53
- package/dist/types/notifications/rich-draft.d.ts +0 -68
- package/dist/types/notifications/rich-render.d.ts +0 -90
- package/dist/types/notifications/telegram-cli.d.ts +0 -19
- package/dist/types/notifications/telegram-daemon-cli.d.ts +0 -28
- package/dist/types/notifications/telegram-daemon-control.d.ts +0 -70
- package/dist/types/notifications/telegram-daemon.d.ts +0 -558
- package/dist/types/notifications/telegram-reference.d.ts +0 -136
- package/dist/types/notifications/threaded-inbound.d.ts +0 -77
- package/dist/types/notifications/threaded-render.d.ts +0 -88
- package/dist/types/notifications/topic-registry.d.ts +0 -89
- package/dist/types/plan-mode/approved-plan.d.ts +0 -49
- package/dist/types/plan-mode/state.d.ts +0 -6
- package/dist/types/registry/agent-registry.d.ts +0 -64
- package/dist/types/reminders/star-reminder.d.ts +0 -115
- package/dist/types/research-plan/index.d.ts +0 -1
- package/dist/types/research-plan/ledger.d.ts +0 -33
- package/dist/types/rlm/artifacts.d.ts +0 -9
- package/dist/types/rlm/complete-research-tool.d.ts +0 -35
- package/dist/types/rlm/data-context.d.ts +0 -6
- package/dist/types/rlm/index.d.ts +0 -47
- package/dist/types/rlm/notebook.d.ts +0 -12
- package/dist/types/rlm/preset.d.ts +0 -23
- package/dist/types/rlm/python-tool.d.ts +0 -16
- package/dist/types/rlm/report.d.ts +0 -14
- package/dist/types/rlm/types.d.ts +0 -37
- package/dist/types/runtime/process-lifecycle.d.ts +0 -108
- package/dist/types/runtime-api-key.d.ts +0 -7
- package/dist/types/runtime-credential-selector.d.ts +0 -7
- package/dist/types/runtime-mcp/client.d.ts +0 -74
- package/dist/types/runtime-mcp/config-writer.d.ts +0 -89
- package/dist/types/runtime-mcp/config.d.ts +0 -77
- package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
- package/dist/types/runtime-mcp/index.d.ts +0 -18
- package/dist/types/runtime-mcp/json-rpc.d.ts +0 -22
- package/dist/types/runtime-mcp/loader.d.ts +0 -45
- package/dist/types/runtime-mcp/manager.d.ts +0 -195
- package/dist/types/runtime-mcp/oauth-discovery.d.ts +0 -40
- package/dist/types/runtime-mcp/oauth-flow.d.ts +0 -59
- package/dist/types/runtime-mcp/render.d.ts +0 -25
- package/dist/types/runtime-mcp/smithery-auth.d.ts +0 -16
- package/dist/types/runtime-mcp/smithery-connect.d.ts +0 -38
- package/dist/types/runtime-mcp/smithery-registry.d.ts +0 -51
- package/dist/types/runtime-mcp/tool-bridge.d.ts +0 -86
- package/dist/types/runtime-mcp/tool-cache.d.ts +0 -8
- package/dist/types/runtime-mcp/transports/http.d.ts +0 -36
- package/dist/types/runtime-mcp/transports/index.d.ts +0 -5
- package/dist/types/runtime-mcp/transports/stdio.d.ts +0 -29
- package/dist/types/runtime-mcp/types.d.ts +0 -349
- package/dist/types/sdk.d.ts +0 -256
- package/dist/types/secrets/index.d.ts +0 -9
- package/dist/types/secrets/obfuscator.d.ts +0 -23
- package/dist/types/secrets/regex.d.ts +0 -2
- package/dist/types/session/agent-session.d.ts +0 -1238
- package/dist/types/session/agent-storage.d.ts +0 -101
- package/dist/types/session/artifacts.d.ts +0 -64
- package/dist/types/session/auth-broker-config.d.ts +0 -13
- package/dist/types/session/auth-storage.d.ts +0 -6
- package/dist/types/session/blob-store.d.ts +0 -160
- package/dist/types/session/cache-economics.d.ts +0 -79
- package/dist/types/session/client-bridge.d.ts +0 -88
- package/dist/types/session/context-estimation.d.ts +0 -31
- package/dist/types/session/contribution-prep.d.ts +0 -47
- package/dist/types/session/file-mention-pruning.d.ts +0 -8
- package/dist/types/session/history-storage.d.ts +0 -16
- package/dist/types/session/messages.d.ts +0 -169
- package/dist/types/session/provider-safety-stop.d.ts +0 -5
- package/dist/types/session/session-dump-format.d.ts +0 -22
- package/dist/types/session/session-manager.d.ts +0 -781
- package/dist/types/session/session-storage.d.ts +0 -230
- package/dist/types/session/streaming-output.d.ts +0 -209
- package/dist/types/session/tool-choice-queue.d.ts +0 -84
- package/dist/types/session/yield-queue.d.ts +0 -24
- package/dist/types/setup/credential-auto-import.d.ts +0 -63
- package/dist/types/setup/credential-import.d.ts +0 -82
- package/dist/types/setup/hermes-setup.d.ts +0 -78
- package/dist/types/setup/host-plugin-setup.d.ts +0 -39
- package/dist/types/setup/model-onboarding-guidance.d.ts +0 -9
- package/dist/types/setup/provider-onboarding.d.ts +0 -52
- package/dist/types/skc-runtime/cli-write-receipt.d.ts +0 -24
- package/dist/types/skc-runtime/deep-interview-ambiguity.d.ts +0 -39
- package/dist/types/skc-runtime/deep-interview-recorder.d.ts +0 -114
- package/dist/types/skc-runtime/deep-interview-runtime.d.ts +0 -36
- package/dist/types/skc-runtime/deep-interview-state.d.ts +0 -127
- package/dist/types/skc-runtime/gc-render.d.ts +0 -6
- package/dist/types/skc-runtime/gc-runtime.d.ts +0 -134
- package/dist/types/skc-runtime/goal-mode-request.d.ts +0 -53
- package/dist/types/skc-runtime/launch-tmux.d.ts +0 -78
- package/dist/types/skc-runtime/launch-worktree.d.ts +0 -46
- package/dist/types/skc-runtime/ledger-event-renderer.d.ts +0 -68
- package/dist/types/skc-runtime/psmux-detect.d.ts +0 -78
- package/dist/types/skc-runtime/ralplan-runtime.d.ts +0 -26
- package/dist/types/skc-runtime/restricted-role-agent-bash.d.ts +0 -3
- package/dist/types/skc-runtime/session-layout.d.ts +0 -59
- package/dist/types/skc-runtime/session-resolution.d.ts +0 -47
- package/dist/types/skc-runtime/session-state-sidecar.d.ts +0 -70
- package/dist/types/skc-runtime/state-graph.d.ts +0 -4
- package/dist/types/skc-runtime/state-migrations.d.ts +0 -33
- package/dist/types/skc-runtime/state-renderer.d.ts +0 -70
- package/dist/types/skc-runtime/state-runtime.d.ts +0 -38
- package/dist/types/skc-runtime/state-schema.d.ts +0 -319
- package/dist/types/skc-runtime/state-validation.d.ts +0 -6
- package/dist/types/skc-runtime/state-writer.d.ts +0 -244
- package/dist/types/skc-runtime/team-gc.d.ts +0 -7
- package/dist/types/skc-runtime/team-runtime.d.ts +0 -355
- package/dist/types/skc-runtime/tmux-common.d.ts +0 -111
- package/dist/types/skc-runtime/tmux-gc.d.ts +0 -7
- package/dist/types/skc-runtime/tmux-owner-isolation-cli.d.ts +0 -5
- package/dist/types/skc-runtime/tmux-owner-isolation.d.ts +0 -309
- package/dist/types/skc-runtime/tmux-sessions.d.ts +0 -94
- package/dist/types/skc-runtime/ultragoal-guard.d.ts +0 -93
- package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +0 -42
- package/dist/types/skc-runtime/ultragoal-runtime.d.ts +0 -410
- package/dist/types/skc-runtime/workflow-command-ref.d.ts +0 -43
- package/dist/types/skc-runtime/workflow-manifest.d.ts +0 -54
- package/dist/types/skill-state/active-state.d.ts +0 -126
- package/dist/types/skill-state/canonical-skills.d.ts +0 -3
- package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +0 -38
- package/dist/types/skill-state/initial-phase.d.ts +0 -12
- package/dist/types/skill-state/workflow-hud.d.ts +0 -83
- package/dist/types/skill-state/workflow-state-contract.d.ts +0 -57
- package/dist/types/skill-state/workflow-state-version.d.ts +0 -3
- package/dist/types/slash-commands/acp-builtins.d.ts +0 -18
- package/dist/types/slash-commands/builtin-registry.d.ts +0 -24
- package/dist/types/slash-commands/helpers/context-report.d.ts +0 -7
- package/dist/types/slash-commands/helpers/fast-status-report.d.ts +0 -82
- package/dist/types/slash-commands/helpers/format.d.ts +0 -10
- package/dist/types/slash-commands/helpers/mcp.d.ts +0 -3
- package/dist/types/slash-commands/helpers/parse.d.ts +0 -33
- package/dist/types/slash-commands/helpers/ssh.d.ts +0 -3
- package/dist/types/slash-commands/helpers/todo.d.ts +0 -3
- package/dist/types/slash-commands/helpers/usage-report.d.ts +0 -7
- package/dist/types/slash-commands/types.d.ts +0 -120
- package/dist/types/ssh/config-writer.d.ts +0 -49
- package/dist/types/ssh/connection-manager.d.ts +0 -33
- package/dist/types/ssh/ssh-executor.d.ts +0 -37
- package/dist/types/ssh/sshfs-mount.d.ts +0 -6
- package/dist/types/ssh/utils.d.ts +0 -2
- package/dist/types/stt/downloader.d.ts +0 -9
- package/dist/types/stt/index.d.ts +0 -3
- package/dist/types/stt/recorder.d.ts +0 -13
- package/dist/types/stt/setup.d.ts +0 -18
- package/dist/types/stt/stt-controller.d.ts +0 -16
- package/dist/types/stt/transcriber.d.ts +0 -16
- package/dist/types/system-prompt.d.ts +0 -118
- package/dist/types/task/agents.d.ts +0 -28
- package/dist/types/task/commands.d.ts +0 -35
- package/dist/types/task/discovery.d.ts +0 -19
- package/dist/types/task/executor.d.ts +0 -127
- package/dist/types/task/fork-context-advisory.d.ts +0 -13
- package/dist/types/task/fork-context-budget.d.ts +0 -7
- package/dist/types/task/id.d.ts +0 -7
- package/dist/types/task/index.d.ts +0 -43
- package/dist/types/task/name-generator.d.ts +0 -16
- package/dist/types/task/output-manager.d.ts +0 -36
- package/dist/types/task/parallel.d.ts +0 -34
- package/dist/types/task/receipt.d.ts +0 -89
- package/dist/types/task/render.d.ts +0 -28
- package/dist/types/task/roi-reconciliation.d.ts +0 -27
- package/dist/types/task/simple-mode.d.ts +0 -8
- package/dist/types/task/skc-command.d.ts +0 -7
- package/dist/types/task/spawn-gate.d.ts +0 -29
- package/dist/types/task/subprocess-tool-registry.d.ts +0 -72
- package/dist/types/task/token-log.d.ts +0 -30
- package/dist/types/task/token-log.test.d.ts +0 -1
- package/dist/types/task/types.d.ts +0 -516
- package/dist/types/task/worktree.d.ts +0 -94
- package/dist/types/thinking-metadata.d.ts +0 -16
- package/dist/types/thinking.d.ts +0 -22
- package/dist/types/tool-discovery/tool-index.d.ts +0 -112
- package/dist/types/tools/archive-reader.d.ts +0 -40
- package/dist/types/tools/ask-answer-registry.d.ts +0 -18
- package/dist/types/tools/ask.d.ts +0 -123
- package/dist/types/tools/ast-edit.d.ts +0 -77
- package/dist/types/tools/ast-grep.d.ts +0 -69
- package/dist/types/tools/auto-generated-guard.d.ts +0 -17
- package/dist/types/tools/bash-allowed-prefixes.d.ts +0 -10
- package/dist/types/tools/bash-command-fixup.d.ts +0 -11
- package/dist/types/tools/bash-interactive.d.ts +0 -16
- package/dist/types/tools/bash-interceptor.d.ts +0 -24
- package/dist/types/tools/bash-pty-selection.d.ts +0 -7
- package/dist/types/tools/bash-skill-urls.d.ts +0 -31
- package/dist/types/tools/bash.d.ts +0 -157
- package/dist/types/tools/bisect.d.ts +0 -81
- package/dist/types/tools/browser/actions.d.ts +0 -54
- package/dist/types/tools/browser/attach.d.ts +0 -50
- package/dist/types/tools/browser/launch.d.ts +0 -62
- package/dist/types/tools/browser/readable.d.ts +0 -17
- package/dist/types/tools/browser/registry.d.ts +0 -57
- package/dist/types/tools/browser/render.d.ts +0 -53
- package/dist/types/tools/browser/tab-protocol.d.ts +0 -144
- package/dist/types/tools/browser/tab-supervisor.d.ts +0 -109
- package/dist/types/tools/browser/tab-worker-entry.d.ts +0 -1
- package/dist/types/tools/browser/tab-worker.d.ts +0 -19
- package/dist/types/tools/browser.d.ts +0 -211
- package/dist/types/tools/calculator.d.ts +0 -76
- package/dist/types/tools/checkpoint.d.ts +0 -63
- package/dist/types/tools/composer-bash-policy.d.ts +0 -14
- package/dist/types/tools/computer/render.d.ts +0 -17
- package/dist/types/tools/computer-gc.d.ts +0 -23
- package/dist/types/tools/computer.d.ts +0 -465
- package/dist/types/tools/conflict-detect.d.ts +0 -205
- package/dist/types/tools/context.d.ts +0 -19
- package/dist/types/tools/cron.d.ts +0 -91
- package/dist/types/tools/debug.d.ts +0 -209
- package/dist/types/tools/eval.d.ts +0 -108
- package/dist/types/tools/fetch.d.ts +0 -84
- package/dist/types/tools/file-recorder.d.ts +0 -13
- package/dist/types/tools/find.d.ts +0 -95
- package/dist/types/tools/fs-cache-invalidation.d.ts +0 -15
- package/dist/types/tools/gh-format.d.ts +0 -6
- package/dist/types/tools/gh-renderer.d.ts +0 -25
- package/dist/types/tools/gh.d.ts +0 -356
- package/dist/types/tools/github-cache.d.ts +0 -103
- package/dist/types/tools/grouped-file-output.d.ts +0 -36
- package/dist/types/tools/hindsight-recall.d.ts +0 -21
- package/dist/types/tools/hindsight-reflect.d.ts +0 -23
- package/dist/types/tools/hindsight-retain.d.ts +0 -27
- package/dist/types/tools/image-gen.d.ts +0 -79
- package/dist/types/tools/index.d.ts +0 -371
- package/dist/types/tools/irc.d.ts +0 -79
- package/dist/types/tools/job.d.ts +0 -78
- package/dist/types/tools/json-tree.d.ts +0 -23
- package/dist/types/tools/jtd-to-json-schema.d.ts +0 -29
- package/dist/types/tools/jtd-to-typescript.d.ts +0 -26
- package/dist/types/tools/jtd-utils.d.ts +0 -42
- package/dist/types/tools/list-limit.d.ts +0 -12
- package/dist/types/tools/match-line-format.d.ts +0 -11
- package/dist/types/tools/monitor.d.ts +0 -54
- package/dist/types/tools/output-meta.d.ts +0 -204
- package/dist/types/tools/path-utils.d.ts +0 -147
- package/dist/types/tools/plan-mode-guard.d.ts +0 -18
- package/dist/types/tools/read.d.ts +0 -85
- package/dist/types/tools/recipe/index.d.ts +0 -45
- package/dist/types/tools/recipe/render.d.ts +0 -36
- package/dist/types/tools/recipe/runner.d.ts +0 -60
- package/dist/types/tools/recipe/runners/cargo.d.ts +0 -16
- package/dist/types/tools/recipe/runners/index.d.ts +0 -2
- package/dist/types/tools/recipe/runners/just.d.ts +0 -2
- package/dist/types/tools/recipe/runners/make.d.ts +0 -2
- package/dist/types/tools/recipe/runners/pkg.d.ts +0 -2
- package/dist/types/tools/recipe/runners/task.d.ts +0 -2
- package/dist/types/tools/render-mermaid.d.ts +0 -37
- package/dist/types/tools/render-utils.d.ts +0 -158
- package/dist/types/tools/renderers.d.ts +0 -26
- package/dist/types/tools/resolve.d.ts +0 -80
- package/dist/types/tools/resource-gc.d.ts +0 -54
- package/dist/types/tools/review.d.ts +0 -63
- package/dist/types/tools/search-tool-bm25.d.ts +0 -65
- package/dist/types/tools/search.d.ts +0 -93
- package/dist/types/tools/skill-discovery.d.ts +0 -40
- package/dist/types/tools/skill.d.ts +0 -48
- package/dist/types/tools/sqlite-reader.d.ts +0 -94
- package/dist/types/tools/ssh.d.ts +0 -67
- package/dist/types/tools/subagent-render.d.ts +0 -31
- package/dist/types/tools/subagent.d.ts +0 -117
- package/dist/types/tools/telegram-send.d.ts +0 -39
- package/dist/types/tools/todo-write.d.ts +0 -120
- package/dist/types/tools/tool-errors.d.ts +0 -33
- package/dist/types/tools/tool-result.d.ts +0 -30
- package/dist/types/tools/tool-timeouts.d.ts +0 -56
- package/dist/types/tools/ultragoal-ask-guard.d.ts +0 -12
- package/dist/types/tools/vim.d.ts +0 -58
- package/dist/types/tools/write.d.ts +0 -59
- package/dist/types/tools/yield.d.ts +0 -25
- package/dist/types/tui/code-cell.d.ts +0 -32
- package/dist/types/tui/file-list.d.ts +0 -22
- package/dist/types/tui/hyperlink.d.ts +0 -42
- package/dist/types/tui/index.d.ts +0 -11
- package/dist/types/tui/output-block.d.ts +0 -28
- package/dist/types/tui/status-line.d.ts +0 -18
- package/dist/types/tui/tree-list.d.ts +0 -19
- package/dist/types/tui/types.d.ts +0 -13
- package/dist/types/tui/utils.d.ts +0 -36
- package/dist/types/utils/changelog.d.ts +0 -37
- package/dist/types/utils/clipboard.d.ts +0 -22
- package/dist/types/utils/cmux-workspace.d.ts +0 -52
- package/dist/types/utils/command-args.d.ts +0 -9
- package/dist/types/utils/commit-message-generator.d.ts +0 -7
- package/dist/types/utils/edit-mode.d.ts +0 -13
- package/dist/types/utils/event-bus.d.ts +0 -6
- package/dist/types/utils/external-editor.d.ts +0 -19
- package/dist/types/utils/file-display-mode.d.ts +0 -27
- package/dist/types/utils/file-mentions.d.ts +0 -25
- package/dist/types/utils/git.d.ts +0 -393
- package/dist/types/utils/image-loading.d.ts +0 -26
- package/dist/types/utils/image-resize.d.ts +0 -39
- package/dist/types/utils/lang-from-path.d.ts +0 -8
- package/dist/types/utils/linkedom.d.ts +0 -4
- package/dist/types/utils/markit.d.ts +0 -7
- package/dist/types/utils/open.d.ts +0 -2
- package/dist/types/utils/pasted-image-path.d.ts +0 -32
- package/dist/types/utils/session-color.d.ts +0 -10
- package/dist/types/utils/shell-snapshot.d.ts +0 -5
- package/dist/types/utils/sixel.d.ts +0 -21
- package/dist/types/utils/title-generator.d.ts +0 -31
- package/dist/types/utils/tool-choice.d.ts +0 -20
- package/dist/types/utils/tools-manager.d.ts +0 -9
- package/dist/types/vim/buffer.d.ts +0 -41
- package/dist/types/vim/commands.d.ts +0 -6
- package/dist/types/vim/engine.d.ts +0 -47
- package/dist/types/vim/parser.d.ts +0 -3
- package/dist/types/vim/render.d.ts +0 -25
- package/dist/types/vim/types.d.ts +0 -182
- package/dist/types/web/insane/bridge.d.ts +0 -103
- package/dist/types/web/insane/url-guard.d.ts +0 -25
- package/dist/types/web/kagi.d.ts +0 -23
- package/dist/types/web/parallel.d.ts +0 -58
- package/dist/types/web/scrapers/artifacthub.d.ts +0 -6
- package/dist/types/web/scrapers/arxiv.d.ts +0 -5
- package/dist/types/web/scrapers/aur.d.ts +0 -5
- package/dist/types/web/scrapers/biorxiv.d.ts +0 -5
- package/dist/types/web/scrapers/bluesky.d.ts +0 -5
- package/dist/types/web/scrapers/brew.d.ts +0 -5
- package/dist/types/web/scrapers/cheatsh.d.ts +0 -8
- package/dist/types/web/scrapers/chocolatey.d.ts +0 -5
- package/dist/types/web/scrapers/choosealicense.d.ts +0 -2
- package/dist/types/web/scrapers/cisa-kev.d.ts +0 -5
- package/dist/types/web/scrapers/clojars.d.ts +0 -5
- package/dist/types/web/scrapers/coingecko.d.ts +0 -5
- package/dist/types/web/scrapers/crates-io.d.ts +0 -5
- package/dist/types/web/scrapers/crossref.d.ts +0 -2
- package/dist/types/web/scrapers/devto.d.ts +0 -5
- package/dist/types/web/scrapers/discogs.d.ts +0 -8
- package/dist/types/web/scrapers/discourse.d.ts +0 -5
- package/dist/types/web/scrapers/dockerhub.d.ts +0 -5
- package/dist/types/web/scrapers/docs-rs.d.ts +0 -2
- package/dist/types/web/scrapers/fdroid.d.ts +0 -5
- package/dist/types/web/scrapers/firefox-addons.d.ts +0 -2
- package/dist/types/web/scrapers/flathub.d.ts +0 -2
- package/dist/types/web/scrapers/github-gist.d.ts +0 -5
- package/dist/types/web/scrapers/github.d.ts +0 -12
- package/dist/types/web/scrapers/gitlab.d.ts +0 -5
- package/dist/types/web/scrapers/go-pkg.d.ts +0 -5
- package/dist/types/web/scrapers/hackage.d.ts +0 -5
- package/dist/types/web/scrapers/hackernews.d.ts +0 -2
- package/dist/types/web/scrapers/hex.d.ts +0 -5
- package/dist/types/web/scrapers/huggingface.d.ts +0 -2
- package/dist/types/web/scrapers/iacr.d.ts +0 -5
- package/dist/types/web/scrapers/index.d.ts +0 -84
- package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +0 -2
- package/dist/types/web/scrapers/lemmy.d.ts +0 -2
- package/dist/types/web/scrapers/lobsters.d.ts +0 -5
- package/dist/types/web/scrapers/mastodon.d.ts +0 -5
- package/dist/types/web/scrapers/maven.d.ts +0 -6
- package/dist/types/web/scrapers/mdn.d.ts +0 -2
- package/dist/types/web/scrapers/metacpan.d.ts +0 -5
- package/dist/types/web/scrapers/musicbrainz.d.ts +0 -5
- package/dist/types/web/scrapers/npm.d.ts +0 -5
- package/dist/types/web/scrapers/nuget.d.ts +0 -5
- package/dist/types/web/scrapers/nvd.d.ts +0 -5
- package/dist/types/web/scrapers/ollama.d.ts +0 -2
- package/dist/types/web/scrapers/open-vsx.d.ts +0 -5
- package/dist/types/web/scrapers/opencorporates.d.ts +0 -5
- package/dist/types/web/scrapers/openlibrary.d.ts +0 -5
- package/dist/types/web/scrapers/orcid.d.ts +0 -5
- package/dist/types/web/scrapers/osv.d.ts +0 -5
- package/dist/types/web/scrapers/packagist.d.ts +0 -5
- package/dist/types/web/scrapers/pub-dev.d.ts +0 -5
- package/dist/types/web/scrapers/pubmed.d.ts +0 -5
- package/dist/types/web/scrapers/pypi.d.ts +0 -5
- package/dist/types/web/scrapers/rawg.d.ts +0 -2
- package/dist/types/web/scrapers/readthedocs.d.ts +0 -2
- package/dist/types/web/scrapers/reddit.d.ts +0 -5
- package/dist/types/web/scrapers/repology.d.ts +0 -5
- package/dist/types/web/scrapers/rfc.d.ts +0 -5
- package/dist/types/web/scrapers/rubygems.d.ts +0 -5
- package/dist/types/web/scrapers/searchcode.d.ts +0 -2
- package/dist/types/web/scrapers/sec-edgar.d.ts +0 -5
- package/dist/types/web/scrapers/semantic-scholar.d.ts +0 -2
- package/dist/types/web/scrapers/snapcraft.d.ts +0 -2
- package/dist/types/web/scrapers/sourcegraph.d.ts +0 -2
- package/dist/types/web/scrapers/spdx.d.ts +0 -5
- package/dist/types/web/scrapers/spotify.d.ts +0 -8
- package/dist/types/web/scrapers/stackoverflow.d.ts +0 -6
- package/dist/types/web/scrapers/terraform.d.ts +0 -5
- package/dist/types/web/scrapers/tldr.d.ts +0 -7
- package/dist/types/web/scrapers/twitter.d.ts +0 -5
- package/dist/types/web/scrapers/types.d.ts +0 -83
- package/dist/types/web/scrapers/utils.d.ts +0 -32
- package/dist/types/web/scrapers/vimeo.d.ts +0 -5
- package/dist/types/web/scrapers/vscode-marketplace.d.ts +0 -5
- package/dist/types/web/scrapers/w3c.d.ts +0 -2
- package/dist/types/web/scrapers/wikidata.d.ts +0 -5
- package/dist/types/web/scrapers/wikipedia.d.ts +0 -5
- package/dist/types/web/scrapers/youtube.d.ts +0 -13
- package/dist/types/web/search/index.d.ts +0 -118
- package/dist/types/web/search/provider.d.ts +0 -55
- package/dist/types/web/search/providers/anthropic.d.ts +0 -32
- package/dist/types/web/search/providers/base.d.ts +0 -90
- package/dist/types/web/search/providers/brave.d.ts +0 -27
- package/dist/types/web/search/providers/codex.d.ts +0 -35
- package/dist/types/web/search/providers/duckduckgo.d.ts +0 -57
- package/dist/types/web/search/providers/exa.d.ts +0 -52
- package/dist/types/web/search/providers/gemini.d.ts +0 -57
- package/dist/types/web/search/providers/insane.d.ts +0 -53
- package/dist/types/web/search/providers/jina.d.ts +0 -26
- package/dist/types/web/search/providers/kagi.d.ts +0 -24
- package/dist/types/web/search/providers/kimi.d.ts +0 -27
- package/dist/types/web/search/providers/openai-compatible.d.ts +0 -9
- package/dist/types/web/search/providers/parallel.d.ts +0 -15
- package/dist/types/web/search/providers/perplexity.d.ts +0 -38
- package/dist/types/web/search/providers/searxng.d.ts +0 -44
- package/dist/types/web/search/providers/synthetic.d.ts +0 -21
- package/dist/types/web/search/providers/tavily.d.ts +0 -29
- package/dist/types/web/search/providers/text-citations.d.ts +0 -23
- package/dist/types/web/search/providers/utils.d.ts +0 -88
- package/dist/types/web/search/providers/xai.d.ts +0 -64
- package/dist/types/web/search/providers/zai.d.ts +0 -28
- package/dist/types/web/search/render.d.ts +0 -36
- package/dist/types/web/search/types.d.ts +0 -372
- package/dist/types/web/search/utils.d.ts +0 -4
- package/dist/types/workflow/workflow-intent-diff.d.ts +0 -25
- package/dist/types/workflow/workflow-intent-report-consumer.d.ts +0 -50
- package/dist/types/workflow/workflow-intent-report-schema.d.ts +0 -2
- package/dist/types/workflow/workflow-intent-report.d.ts +0 -48
- package/dist/types/workspace-tree.d.ts +0 -42
- package/src/sdk.ts +0 -2623
|
@@ -4,16 +4,29 @@
|
|
|
4
4
|
|
|
5
5
|
import { ThinkingLevel } from "@sayknow-cli/agent-core";
|
|
6
6
|
import { type Api, DEFAULT_MODEL_PER_PROVIDER, type KnownProvider, type Model, modelsAreEqual } from "@sayknow-cli/ai";
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
import { logger } from "@sayknow-cli/utils";
|
|
9
9
|
import chalk from "chalk";
|
|
10
|
-
import { parseThinkingLevel, resolveThinkingLevelForModel } from "../thinking";
|
|
11
|
-
import {
|
|
10
|
+
import { parseThinkingLevel, resolveThinkingLevelForModel, splitSelectorThinkingSuffix } from "../thinking";
|
|
11
|
+
import { isAuthenticatedOrKeyless } from "./model-auth";
|
|
12
|
+
import { compareEquivalentModelVariants } from "./model-equivalence";
|
|
13
|
+
import { MODEL_ROLE_IDS, type ModelRegistry, type ModelRole } from "./model-registry";
|
|
14
|
+
import { type ModelSelectorValue, normalizeModelSelectorValue } from "./model-selector-value";
|
|
12
15
|
import type { Settings } from "./settings";
|
|
13
16
|
|
|
14
17
|
/** Default model IDs for each known provider */
|
|
15
18
|
export const defaultModelPerProvider: Record<KnownProvider, string> = DEFAULT_MODEL_PER_PROVIDER;
|
|
16
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Cursor's current RPC transport executes its exec protocol while streaming and
|
|
22
|
+
* has no client-side tool-call mode. Managed fallback attempts must not enable
|
|
23
|
+
* that irreversible path.
|
|
24
|
+
*/
|
|
25
|
+
export function managedCursorFallbackUnavailableReason(model: Model<Api>, selector: string): string | undefined {
|
|
26
|
+
if (model.api !== "cursor-agent") return undefined;
|
|
27
|
+
return `Cursor model ${selector} requires provider-side tool execution and cannot be used in a retryable fallback chain`;
|
|
28
|
+
}
|
|
29
|
+
|
|
17
30
|
export interface ScopedModelSelection {
|
|
18
31
|
model: Model<Api>;
|
|
19
32
|
thinkingLevel?: ThinkingLevel;
|
|
@@ -24,6 +37,9 @@ export interface ScopedModel extends ScopedModelSelection {
|
|
|
24
37
|
explicitThinkingLevel: boolean;
|
|
25
38
|
}
|
|
26
39
|
|
|
40
|
+
export type { SelectorThinkingSuffix } from "../thinking";
|
|
41
|
+
export { splitSelectorThinkingSuffix } from "../thinking";
|
|
42
|
+
|
|
27
43
|
/**
|
|
28
44
|
* Parse a model string in "provider/modelId" format.
|
|
29
45
|
* Returns undefined if the format is invalid.
|
|
@@ -33,18 +49,11 @@ export function parseModelString(
|
|
|
33
49
|
): { provider: string; id: string; thinkingLevel?: ThinkingLevel } | undefined {
|
|
34
50
|
const slashIdx = modelStr.indexOf("/");
|
|
35
51
|
if (slashIdx <= 0) return undefined;
|
|
36
|
-
const id = modelStr.slice(slashIdx + 1);
|
|
37
52
|
const provider = modelStr.slice(0, slashIdx);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const thinkingLevel = parseThinkingLevel(suffix);
|
|
43
|
-
if (thinkingLevel) {
|
|
44
|
-
return { provider, id: id.slice(0, colonIdx), thinkingLevel };
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return { provider, id };
|
|
53
|
+
const suffix = splitSelectorThinkingSuffix(modelStr);
|
|
54
|
+
return suffix.thinkingLevel
|
|
55
|
+
? { provider, id: suffix.selector.slice(slashIdx + 1), thinkingLevel: suffix.thinkingLevel }
|
|
56
|
+
: { provider, id: modelStr.slice(slashIdx + 1) };
|
|
48
57
|
}
|
|
49
58
|
|
|
50
59
|
/**
|
|
@@ -112,15 +121,22 @@ function cloneModelWithRequestedId(model: Model<Api>, requestedId: string): Mode
|
|
|
112
121
|
};
|
|
113
122
|
}
|
|
114
123
|
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
[
|
|
118
|
-
|
|
124
|
+
const providerModelIndexes = new WeakMap<
|
|
125
|
+
readonly Model<Api>[],
|
|
126
|
+
{ fingerprint: string; models: readonly Model<Api>[]; index: Map<string, Model<Api> | null> }
|
|
127
|
+
>();
|
|
128
|
+
|
|
129
|
+
function modelFingerprint(availableModels: readonly Model<Api>[]): string {
|
|
130
|
+
return availableModels.map(model => `${model.provider}\u0000${model.id}`).join("\u0001");
|
|
131
|
+
}
|
|
119
132
|
|
|
120
133
|
function getProviderModelIndex(availableModels: readonly Model<Api>[]): Map<string, Model<Api> | null> {
|
|
121
|
-
const
|
|
122
|
-
const cached =
|
|
123
|
-
if (cached)
|
|
134
|
+
const fingerprint = modelFingerprint(availableModels);
|
|
135
|
+
const cached = providerModelIndexes.get(availableModels);
|
|
136
|
+
if (cached?.fingerprint === fingerprint && cached.models.every((model, index) => model === availableModels[index])) {
|
|
137
|
+
return cached.index;
|
|
138
|
+
}
|
|
139
|
+
|
|
124
140
|
const index = new Map<string, Model<Api> | null>();
|
|
125
141
|
for (const m of availableModels) {
|
|
126
142
|
const key = `${m.provider.toLowerCase()}\u0000${m.id.toLowerCase()}`;
|
|
@@ -130,7 +146,8 @@ function getProviderModelIndex(availableModels: readonly Model<Api>[]): Map<stri
|
|
|
130
146
|
index.set(key, m);
|
|
131
147
|
}
|
|
132
148
|
}
|
|
133
|
-
|
|
149
|
+
providerModelIndexes.set(availableModels, { fingerprint, models: [...availableModels], index });
|
|
150
|
+
|
|
134
151
|
return index;
|
|
135
152
|
}
|
|
136
153
|
|
|
@@ -147,13 +164,10 @@ export function resolveProviderModelReference(
|
|
|
147
164
|
return undefined;
|
|
148
165
|
}
|
|
149
166
|
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
// ambiguous for fuzzy/case-insensitive lookup, but an exact selector should
|
|
155
|
-
// still resolve deterministically.
|
|
156
|
-
const caseExact = availableModels.find(m => m.provider === trimmedProvider && m.id === trimmedModelId);
|
|
167
|
+
// Preserve exact provider/id replacement semantics before case-insensitive
|
|
168
|
+
// ambiguity handling. Custom entries can intentionally replace a bundled
|
|
169
|
+
// model while a differently-cased catalog alias remains present.
|
|
170
|
+
const caseExact = availableModels.find(model => model.provider === trimmedProvider && model.id === trimmedModelId);
|
|
157
171
|
if (caseExact) return caseExact;
|
|
158
172
|
|
|
159
173
|
const index = getProviderModelIndex(availableModels);
|
|
@@ -194,8 +208,8 @@ export type CanonicalModelRegistry = Partial<
|
|
|
194
208
|
>;
|
|
195
209
|
export type ModelLookupRegistry = Pick<ModelRegistry, "getAvailable"> & Partial<CanonicalModelRegistry>;
|
|
196
210
|
type CliModelRegistry = Pick<ModelRegistry, "getAll"> & Partial<CanonicalModelRegistry>;
|
|
197
|
-
type InitialModelRegistry = Pick<ModelRegistry, "getAvailable"
|
|
198
|
-
type RestorableModelRegistry = Pick<ModelRegistry, "getAvailable" | "
|
|
211
|
+
type InitialModelRegistry = Pick<ModelRegistry, "getAvailable">;
|
|
212
|
+
type RestorableModelRegistry = Pick<ModelRegistry, "getAvailable" | "getApiKey">;
|
|
199
213
|
|
|
200
214
|
interface ModelPreferenceContext {
|
|
201
215
|
modelUsageRank: Map<string, number>;
|
|
@@ -204,68 +218,99 @@ interface ModelPreferenceContext {
|
|
|
204
218
|
modelOrder: Map<string, number>;
|
|
205
219
|
}
|
|
206
220
|
|
|
221
|
+
const preferenceContexts = new WeakMap<
|
|
222
|
+
readonly Model<Api>[],
|
|
223
|
+
{
|
|
224
|
+
fingerprint: string;
|
|
225
|
+
models: readonly Model<Api>[];
|
|
226
|
+
cacheKey: string;
|
|
227
|
+
context: ModelPreferenceContext;
|
|
228
|
+
}
|
|
229
|
+
>();
|
|
230
|
+
|
|
231
|
+
function modelPreferenceKey(model: Pick<Model<Api>, "provider" | "id">): string {
|
|
232
|
+
return `${model.provider}/${model.id}`.toLowerCase();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function preferenceCacheKey(preferences: ModelMatchPreferences | undefined): string {
|
|
236
|
+
return JSON.stringify([preferences?.usageOrder ?? [], preferences?.deprioritizeProviders ?? ["openrouter"]]);
|
|
237
|
+
}
|
|
238
|
+
|
|
207
239
|
function buildPreferenceContext(
|
|
208
240
|
availableModels: Model<Api>[],
|
|
209
241
|
preferences: ModelMatchPreferences | undefined,
|
|
210
242
|
): ModelPreferenceContext {
|
|
243
|
+
const fingerprint = modelFingerprint(availableModels);
|
|
244
|
+
const cacheKey = preferenceCacheKey(preferences);
|
|
245
|
+
const cached = preferenceContexts.get(availableModels);
|
|
246
|
+
if (
|
|
247
|
+
cached?.fingerprint === fingerprint &&
|
|
248
|
+
cached.cacheKey === cacheKey &&
|
|
249
|
+
cached.models.every((model, index) => model === availableModels[index])
|
|
250
|
+
) {
|
|
251
|
+
return cached.context;
|
|
252
|
+
}
|
|
253
|
+
|
|
211
254
|
const modelUsageRank = new Map<string, number>();
|
|
212
255
|
const providerUsageRank = new Map<string, number>();
|
|
213
256
|
const usageOrder = preferences?.usageOrder ?? [];
|
|
214
257
|
for (let i = 0; i < usageOrder.length; i += 1) {
|
|
215
258
|
const key = usageOrder[i];
|
|
216
|
-
if (!modelUsageRank.has(key))
|
|
217
|
-
modelUsageRank.set(key, i);
|
|
218
|
-
}
|
|
259
|
+
if (!modelUsageRank.has(key.toLowerCase())) modelUsageRank.set(key.toLowerCase(), i);
|
|
219
260
|
const parsed = parseModelString(key);
|
|
220
|
-
if (parsed && !providerUsageRank.has(parsed.provider)) {
|
|
221
|
-
providerUsageRank.set(parsed.provider, i);
|
|
261
|
+
if (parsed && !providerUsageRank.has(parsed.provider.toLowerCase())) {
|
|
262
|
+
providerUsageRank.set(parsed.provider.toLowerCase(), i);
|
|
222
263
|
}
|
|
223
264
|
}
|
|
224
265
|
|
|
225
|
-
const deprioritizedProviders = new Set(
|
|
266
|
+
const deprioritizedProviders = new Set(
|
|
267
|
+
(preferences?.deprioritizeProviders ?? ["openrouter"]).map(provider => provider.toLowerCase()),
|
|
268
|
+
);
|
|
269
|
+
|
|
226
270
|
const modelOrder = new Map<string, number>();
|
|
227
271
|
for (let i = 0; i < availableModels.length; i += 1) {
|
|
228
272
|
modelOrder.set(formatModelString(availableModels[i]), i);
|
|
229
273
|
}
|
|
274
|
+
const context = { modelUsageRank, providerUsageRank, deprioritizedProviders, modelOrder };
|
|
275
|
+
preferenceContexts.set(availableModels, {
|
|
276
|
+
fingerprint,
|
|
277
|
+
models: [...availableModels],
|
|
278
|
+
cacheKey,
|
|
279
|
+
context,
|
|
280
|
+
});
|
|
230
281
|
|
|
231
|
-
return
|
|
282
|
+
return context;
|
|
232
283
|
}
|
|
233
284
|
|
|
234
285
|
function pickPreferredModel(candidates: Model<Api>[], context: ModelPreferenceContext): Model<Api> {
|
|
235
286
|
if (candidates.length <= 1) return candidates[0];
|
|
236
287
|
return [...candidates].sort((a, b) => {
|
|
237
|
-
const
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
const bUsage = context.modelUsageRank.get(bKey);
|
|
288
|
+
const aUsage = context.modelUsageRank.get(modelPreferenceKey(a));
|
|
289
|
+
const bUsage = context.modelUsageRank.get(modelPreferenceKey(b));
|
|
290
|
+
|
|
241
291
|
if (aUsage !== undefined || bUsage !== undefined) {
|
|
242
292
|
return (aUsage ?? Number.POSITIVE_INFINITY) - (bUsage ?? Number.POSITIVE_INFINITY);
|
|
243
293
|
}
|
|
244
294
|
|
|
245
|
-
const aProviderUsage = context.providerUsageRank.get(a.provider);
|
|
246
|
-
const bProviderUsage = context.providerUsageRank.get(b.provider);
|
|
295
|
+
const aProviderUsage = context.providerUsageRank.get(a.provider.toLowerCase());
|
|
296
|
+
const bProviderUsage = context.providerUsageRank.get(b.provider.toLowerCase());
|
|
297
|
+
|
|
247
298
|
if (aProviderUsage !== undefined || bProviderUsage !== undefined) {
|
|
248
299
|
return (aProviderUsage ?? Number.POSITIVE_INFINITY) - (bProviderUsage ?? Number.POSITIVE_INFINITY);
|
|
249
300
|
}
|
|
250
301
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
const aVision = a.input.includes("image") ? 0 : 1;
|
|
255
|
-
const bVision = b.input.includes("image") ? 0 : 1;
|
|
256
|
-
if (aVision !== bVision) {
|
|
257
|
-
return aVision - bVision;
|
|
302
|
+
const variantRank = compareEquivalentModelVariants(a, b, { finalize: false });
|
|
303
|
+
if (variantRank !== 0) {
|
|
304
|
+
return variantRank;
|
|
258
305
|
}
|
|
259
306
|
|
|
260
|
-
const aDeprioritized = context.deprioritizedProviders.has(a.provider);
|
|
261
|
-
const bDeprioritized = context.deprioritizedProviders.has(b.provider);
|
|
307
|
+
const aDeprioritized = context.deprioritizedProviders.has(a.provider.toLowerCase());
|
|
308
|
+
const bDeprioritized = context.deprioritizedProviders.has(b.provider.toLowerCase());
|
|
262
309
|
if (aDeprioritized !== bDeprioritized) {
|
|
263
310
|
return aDeprioritized ? 1 : -1;
|
|
264
311
|
}
|
|
265
312
|
|
|
266
|
-
|
|
267
|
-
const bOrder = context.modelOrder.get(bKey) ?? 0;
|
|
268
|
-
return aOrder - bOrder;
|
|
313
|
+
return compareEquivalentModelVariants(a, b, { modelOrder: context.modelOrder });
|
|
269
314
|
})[0];
|
|
270
315
|
}
|
|
271
316
|
|
|
@@ -310,6 +355,7 @@ function findExactCanonicalModelMatch(
|
|
|
310
355
|
modelReference: string,
|
|
311
356
|
availableModels: Model<Api>[],
|
|
312
357
|
modelRegistry: CanonicalModelRegistry | undefined,
|
|
358
|
+
sessionId?: string,
|
|
313
359
|
): Model<Api> | undefined {
|
|
314
360
|
if (!modelRegistry) {
|
|
315
361
|
return undefined;
|
|
@@ -324,6 +370,33 @@ function findExactCanonicalModelMatch(
|
|
|
324
370
|
});
|
|
325
371
|
}
|
|
326
372
|
|
|
373
|
+
/**
|
|
374
|
+
* Resolve an unqualified exact alias through its canonical record so it uses
|
|
375
|
+
* the registry's equivalent-variant ranking rather than generic fuzzy policy.
|
|
376
|
+
*/
|
|
377
|
+
function findExactEquivalentModelMatch(
|
|
378
|
+
modelReference: string,
|
|
379
|
+
availableModels: Model<Api>[],
|
|
380
|
+
modelRegistry: CanonicalModelRegistry | undefined,
|
|
381
|
+
sessionId?: string,
|
|
382
|
+
): Model<Api> | undefined {
|
|
383
|
+
if (!modelRegistry?.getCanonicalId || !modelRegistry.resolveCanonicalModel) return undefined;
|
|
384
|
+
const trimmedReference = modelReference.trim();
|
|
385
|
+
if (!trimmedReference || trimmedReference.includes("/")) return undefined;
|
|
386
|
+
const exactMatches = availableModels.filter(model => model.id.toLowerCase() === trimmedReference.toLowerCase());
|
|
387
|
+
if (exactMatches.length === 0) return undefined;
|
|
388
|
+
const canonicalIds = new Set(
|
|
389
|
+
exactMatches
|
|
390
|
+
.map(model => modelRegistry.getCanonicalId!(model))
|
|
391
|
+
.filter((canonicalId): canonicalId is string => Boolean(canonicalId)),
|
|
392
|
+
);
|
|
393
|
+
if (canonicalIds.size !== 1) return undefined;
|
|
394
|
+
return modelRegistry.resolveCanonicalModel([...canonicalIds][0]!, {
|
|
395
|
+
availableOnly: false,
|
|
396
|
+
candidates: availableModels,
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
|
|
327
400
|
/**
|
|
328
401
|
* Try to match a pattern to a model from the available models list.
|
|
329
402
|
* Returns the matched model or undefined if no match found.
|
|
@@ -332,7 +405,7 @@ function tryMatchModel(
|
|
|
332
405
|
modelPattern: string,
|
|
333
406
|
availableModels: Model<Api>[],
|
|
334
407
|
context: ModelPreferenceContext,
|
|
335
|
-
options?: { modelRegistry?: CanonicalModelRegistry },
|
|
408
|
+
options?: { modelRegistry?: CanonicalModelRegistry; sessionId?: string },
|
|
336
409
|
): Model<Api> | undefined {
|
|
337
410
|
// Explicit provider/model selectors always bypass canonical coalescing.
|
|
338
411
|
const exactRefMatch = findExactModelReferenceMatch(modelPattern, availableModels);
|
|
@@ -341,11 +414,26 @@ function tryMatchModel(
|
|
|
341
414
|
}
|
|
342
415
|
|
|
343
416
|
// Exact canonical ids coalesce provider variants before bare-id matching.
|
|
344
|
-
const exactCanonicalMatch = findExactCanonicalModelMatch(
|
|
417
|
+
const exactCanonicalMatch = findExactCanonicalModelMatch(
|
|
418
|
+
modelPattern,
|
|
419
|
+
availableModels,
|
|
420
|
+
options?.modelRegistry,
|
|
421
|
+
options?.sessionId,
|
|
422
|
+
);
|
|
345
423
|
if (exactCanonicalMatch) {
|
|
346
424
|
return exactCanonicalMatch;
|
|
347
425
|
}
|
|
348
426
|
|
|
427
|
+
const exactEquivalentMatch = findExactEquivalentModelMatch(
|
|
428
|
+
modelPattern,
|
|
429
|
+
availableModels,
|
|
430
|
+
options?.modelRegistry,
|
|
431
|
+
options?.sessionId,
|
|
432
|
+
);
|
|
433
|
+
if (exactEquivalentMatch) {
|
|
434
|
+
return exactEquivalentMatch;
|
|
435
|
+
}
|
|
436
|
+
|
|
349
437
|
// Exact ID match (case-insensitive) — this must happen before provider-scoped
|
|
350
438
|
// fuzzy matching so raw IDs that contain slashes (for example OpenRouter model
|
|
351
439
|
// IDs like "openai/gpt-4o:extended") still resolve as IDs instead of being
|
|
@@ -354,41 +442,19 @@ function tryMatchModel(
|
|
|
354
442
|
if (exactMatches.length > 0) {
|
|
355
443
|
return pickPreferredModel(exactMatches, context);
|
|
356
444
|
}
|
|
357
|
-
//
|
|
445
|
+
// Provider-qualified selectors are exact-only. Case-only duplicate catalog
|
|
446
|
+
// entries still rank deterministically within the explicitly named provider.
|
|
358
447
|
const slashIndex = modelPattern.indexOf("/");
|
|
359
448
|
if (slashIndex !== -1) {
|
|
360
|
-
const provider = modelPattern.
|
|
361
|
-
const modelId = modelPattern
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
.filter(entry => entry.match.matches);
|
|
370
|
-
if (scored.length === 0) {
|
|
371
|
-
return undefined;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
scored.sort((a, b) => {
|
|
375
|
-
if (a.match.score !== b.match.score) return a.match.score - b.match.score;
|
|
376
|
-
const aKey = formatModelString(a.model);
|
|
377
|
-
const bKey = formatModelString(b.model);
|
|
378
|
-
const aUsage = context.modelUsageRank.get(aKey) ?? Number.POSITIVE_INFINITY;
|
|
379
|
-
const bUsage = context.modelUsageRank.get(bKey) ?? Number.POSITIVE_INFINITY;
|
|
380
|
-
if (aUsage !== bUsage) return aUsage - bUsage;
|
|
381
|
-
|
|
382
|
-
const aProviderUsage = context.providerUsageRank.get(a.model.provider) ?? Number.POSITIVE_INFINITY;
|
|
383
|
-
const bProviderUsage = context.providerUsageRank.get(b.model.provider) ?? Number.POSITIVE_INFINITY;
|
|
384
|
-
if (aProviderUsage !== bProviderUsage) return aProviderUsage - bProviderUsage;
|
|
385
|
-
|
|
386
|
-
const aOrder = context.modelOrder.get(aKey) ?? 0;
|
|
387
|
-
const bOrder = context.modelOrder.get(bKey) ?? 0;
|
|
388
|
-
return aOrder - bOrder;
|
|
389
|
-
});
|
|
390
|
-
return scored[0]?.model;
|
|
391
|
-
}
|
|
449
|
+
const provider = modelPattern.slice(0, slashIndex).trim().toLowerCase();
|
|
450
|
+
const modelId = modelPattern
|
|
451
|
+
.slice(slashIndex + 1)
|
|
452
|
+
.trim()
|
|
453
|
+
.toLowerCase();
|
|
454
|
+
const providerExactMatches = availableModels.filter(
|
|
455
|
+
model => model.provider.toLowerCase() === provider && model.id.toLowerCase() === modelId,
|
|
456
|
+
);
|
|
457
|
+
return providerExactMatches.length > 0 ? pickPreferredModel(providerExactMatches, context) : undefined;
|
|
392
458
|
}
|
|
393
459
|
|
|
394
460
|
// No exact match - fall back to partial matching
|
|
@@ -430,84 +496,80 @@ export interface ParsedModelResult {
|
|
|
430
496
|
explicitThinkingLevel: boolean;
|
|
431
497
|
}
|
|
432
498
|
|
|
499
|
+
export interface ResolveSelectorOptions {
|
|
500
|
+
allowInvalidThinkingSelectorFallback?: boolean;
|
|
501
|
+
modelRegistry?: CanonicalModelRegistry;
|
|
502
|
+
preferences?: ModelMatchPreferences;
|
|
503
|
+
sessionId?: string;
|
|
504
|
+
}
|
|
505
|
+
|
|
433
506
|
/**
|
|
434
|
-
*
|
|
435
|
-
*
|
|
436
|
-
*
|
|
437
|
-
* Algorithm:
|
|
438
|
-
* 1. Try to match full pattern as a model
|
|
439
|
-
* 2. If found, return it with undefined thinking level
|
|
440
|
-
* 3. If not found and has colons, split on last colon:
|
|
441
|
-
* - If suffix is valid thinking level, use it and recurse on prefix
|
|
442
|
-
* - If suffix is invalid, warn and recurse on prefix
|
|
443
|
-
*
|
|
444
|
-
* @internal Exported for testing
|
|
507
|
+
* Resolve one selector through ordered exact, canonical, bare-id, provider-fuzzy,
|
|
508
|
+
* substring/alias, and glob stages. Thinking is split only after a full selector
|
|
509
|
+
* cannot resolve, which preserves OpenRouter route suffixes in concrete IDs.
|
|
445
510
|
*/
|
|
446
|
-
function
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
options?: { allowInvalidThinkingSelectorFallback?: boolean; modelRegistry?: CanonicalModelRegistry },
|
|
511
|
+
export function resolveSelector(
|
|
512
|
+
selector: string,
|
|
513
|
+
candidates: Model<Api>[],
|
|
514
|
+
options?: ResolveSelectorOptions,
|
|
451
515
|
): ParsedModelResult {
|
|
452
|
-
|
|
453
|
-
const
|
|
454
|
-
if (
|
|
455
|
-
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
516
|
+
const context = buildPreferenceContext(candidates, options?.preferences);
|
|
517
|
+
const exact = tryMatchModel(selector, candidates, context, options);
|
|
518
|
+
if (exact) return { model: exact, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
519
|
+
const glob = findGlobMatch(selector, candidates, context);
|
|
520
|
+
if (glob) return { model: glob, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
521
|
+
|
|
522
|
+
const suffix = splitSelectorThinkingSuffix(selector);
|
|
523
|
+
if (
|
|
524
|
+
suffix.selector === selector ||
|
|
525
|
+
(suffix.invalidSuffix !== undefined && !(options?.allowInvalidThinkingSelectorFallback ?? true))
|
|
526
|
+
) {
|
|
462
527
|
return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
463
528
|
}
|
|
464
529
|
|
|
465
|
-
const
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
if (
|
|
470
|
-
|
|
471
|
-
const result = parseModelPatternWithContext(prefix, availableModels, context, options);
|
|
472
|
-
if (result.model) {
|
|
473
|
-
// Only use this thinking level if no warning from inner recursion
|
|
474
|
-
const explicitThinkingLevel = !result.warning;
|
|
475
|
-
return {
|
|
476
|
-
model: result.model,
|
|
477
|
-
thinkingLevel: explicitThinkingLevel ? parsedThinkingLevel : undefined,
|
|
478
|
-
warning: result.warning,
|
|
479
|
-
explicitThinkingLevel,
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
return result;
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
const allowFallback = options?.allowInvalidThinkingSelectorFallback ?? true;
|
|
486
|
-
if (!allowFallback) {
|
|
487
|
-
return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
530
|
+
const model =
|
|
531
|
+
tryMatchModel(suffix.selector, candidates, context, options) ??
|
|
532
|
+
findGlobMatch(suffix.selector, candidates, context);
|
|
533
|
+
if (!model) return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
534
|
+
if (suffix.thinkingLevel) {
|
|
535
|
+
return { model, thinkingLevel: suffix.thinkingLevel, warning: undefined, explicitThinkingLevel: true };
|
|
488
536
|
}
|
|
537
|
+
return {
|
|
538
|
+
model,
|
|
539
|
+
thinkingLevel: undefined,
|
|
540
|
+
warning: `Invalid thinking level "${suffix.invalidSuffix}" in pattern "${selector}". Using default instead.`,
|
|
541
|
+
explicitThinkingLevel: false,
|
|
542
|
+
};
|
|
543
|
+
}
|
|
489
544
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
545
|
+
function findGlobMatch(
|
|
546
|
+
selector: string,
|
|
547
|
+
candidates: Model<Api>[],
|
|
548
|
+
context: ModelPreferenceContext,
|
|
549
|
+
): Model<Api> | undefined {
|
|
550
|
+
if (!selector.includes("*") && !selector.includes("?") && !selector.includes("[")) return undefined;
|
|
551
|
+
const glob = new Bun.Glob(selector.toLowerCase());
|
|
552
|
+
return pickPreferredModel(
|
|
553
|
+
candidates.filter(
|
|
554
|
+
model => glob.match(formatModelString(model).toLowerCase()) || glob.match(model.id.toLowerCase()),
|
|
555
|
+
),
|
|
556
|
+
context,
|
|
557
|
+
);
|
|
501
558
|
}
|
|
502
559
|
|
|
560
|
+
/** @internal Exported for testing and legacy adapters. */
|
|
561
|
+
|
|
503
562
|
export function parseModelPattern(
|
|
504
563
|
pattern: string,
|
|
505
564
|
availableModels: Model<Api>[],
|
|
506
565
|
preferences?: ModelMatchPreferences,
|
|
507
|
-
options?: {
|
|
566
|
+
options?: {
|
|
567
|
+
allowInvalidThinkingSelectorFallback?: boolean;
|
|
568
|
+
modelRegistry?: CanonicalModelRegistry;
|
|
569
|
+
sessionId?: string;
|
|
570
|
+
},
|
|
508
571
|
): ParsedModelResult {
|
|
509
|
-
|
|
510
|
-
return parseModelPatternWithContext(pattern, availableModels, context, options);
|
|
572
|
+
return resolveSelector(pattern, availableModels, { ...options, preferences });
|
|
511
573
|
}
|
|
512
574
|
|
|
513
575
|
const PREFIX_MODEL_ROLE = "pi/";
|
|
@@ -524,10 +586,8 @@ function getModelRoleAlias(value: string): ModelRole | undefined {
|
|
|
524
586
|
return undefined;
|
|
525
587
|
}
|
|
526
588
|
|
|
527
|
-
function normalizeModelPatternList(value:
|
|
528
|
-
|
|
529
|
-
const patterns = Array.isArray(value) ? value : value.split(",");
|
|
530
|
-
return patterns.map(pattern => pattern.trim()).filter(Boolean);
|
|
589
|
+
function normalizeModelPatternList(value: ModelSelectorValue | undefined): string[] {
|
|
590
|
+
return normalizeModelSelectorValue(value);
|
|
531
591
|
}
|
|
532
592
|
|
|
533
593
|
function isSessionInheritedAgentPattern(value: string): boolean {
|
|
@@ -538,14 +598,14 @@ function resolveConfiguredRolePattern(value: string, settings?: Settings): strin
|
|
|
538
598
|
const normalized = value.trim();
|
|
539
599
|
if (!normalized) return undefined;
|
|
540
600
|
|
|
541
|
-
const
|
|
542
|
-
const thinkingLevel =
|
|
543
|
-
|
|
544
|
-
const aliasCandidate = thinkingLevel ? normalized.slice(0, lastColonIndex) : normalized;
|
|
601
|
+
const suffix = splitSelectorThinkingSuffix(normalized);
|
|
602
|
+
const thinkingLevel = suffix.thinkingLevel;
|
|
603
|
+
const aliasCandidate = thinkingLevel ? suffix.selector : normalized;
|
|
545
604
|
const role = getModelRoleAlias(aliasCandidate);
|
|
605
|
+
|
|
546
606
|
if (!role) return [normalized];
|
|
547
607
|
|
|
548
|
-
const configured = settings?.getModelRole(role)
|
|
608
|
+
const configured = settings?.getModelRole(role);
|
|
549
609
|
const resolved = configured ? normalizeModelPatternList(configured) : undefined;
|
|
550
610
|
if (!resolved || resolved.length === 0) {
|
|
551
611
|
return undefined;
|
|
@@ -560,14 +620,14 @@ function resolveConfiguredRolePattern(value: string, settings?: Settings): strin
|
|
|
560
620
|
export function expandRoleAlias(value: string, settings?: Settings): string {
|
|
561
621
|
const normalized = value.trim();
|
|
562
622
|
if (normalized === DEFAULT_MODEL_ROLE) {
|
|
563
|
-
return settings?.getModelRole("default") ?? value;
|
|
623
|
+
return normalizeModelPatternList(settings?.getModelRole("default"))[0] ?? value;
|
|
564
624
|
}
|
|
565
625
|
|
|
566
626
|
const resolved = resolveConfiguredRolePattern(value, settings)?.[0];
|
|
567
627
|
return resolved ?? value;
|
|
568
628
|
}
|
|
569
629
|
|
|
570
|
-
export function resolveConfiguredModelPatterns(value:
|
|
630
|
+
export function resolveConfiguredModelPatterns(value: ModelSelectorValue | undefined, settings?: Settings): string[] {
|
|
571
631
|
const patterns = normalizeModelPatternList(value);
|
|
572
632
|
return patterns.flatMap(pattern => {
|
|
573
633
|
const resolved = resolveConfiguredRolePattern(pattern, settings);
|
|
@@ -575,8 +635,8 @@ export function resolveConfiguredModelPatterns(value: string | string[] | undefi
|
|
|
575
635
|
});
|
|
576
636
|
}
|
|
577
637
|
export interface AgentModelPatternResolutionOptions {
|
|
578
|
-
settingsOverride?:
|
|
579
|
-
agentModel?:
|
|
638
|
+
settingsOverride?: ModelSelectorValue;
|
|
639
|
+
agentModel?: ModelSelectorValue;
|
|
580
640
|
settings?: Settings;
|
|
581
641
|
activeModelPattern?: string;
|
|
582
642
|
fallbackModelPattern?: string;
|
|
@@ -597,7 +657,10 @@ export function resolveAgentModelPatterns(options: AgentModelPatternResolutionOp
|
|
|
597
657
|
}
|
|
598
658
|
|
|
599
659
|
const fallback =
|
|
600
|
-
activeModelPattern?.trim() ||
|
|
660
|
+
activeModelPattern?.trim() ||
|
|
661
|
+
fallbackModelPattern?.trim() ||
|
|
662
|
+
normalizeModelPatternList(settings?.getModelRole("default"))[0] ||
|
|
663
|
+
"";
|
|
601
664
|
return resolveConfiguredModelPatterns(fallback, settings);
|
|
602
665
|
}
|
|
603
666
|
|
|
@@ -612,21 +675,19 @@ export interface ResolvedModelRoleValue {
|
|
|
612
675
|
}
|
|
613
676
|
|
|
614
677
|
export function resolveModelRoleValue(
|
|
615
|
-
roleValue:
|
|
678
|
+
roleValue: ModelSelectorValue | undefined,
|
|
616
679
|
availableModels: Model<Api>[],
|
|
617
|
-
options?: {
|
|
680
|
+
options?: {
|
|
681
|
+
settings?: Settings;
|
|
682
|
+
matchPreferences?: ModelMatchPreferences;
|
|
683
|
+
modelRegistry?: CanonicalModelRegistry;
|
|
684
|
+
sessionId?: string;
|
|
685
|
+
},
|
|
618
686
|
): ResolvedModelRoleValue {
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
const normalized = roleValue.trim();
|
|
624
|
-
if (!normalized || normalized === DEFAULT_MODEL_ROLE) {
|
|
625
|
-
return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
const effectivePatterns = resolveConfiguredRolePattern(normalized, options?.settings);
|
|
629
|
-
if (!effectivePatterns || effectivePatterns.length === 0) {
|
|
687
|
+
const effectivePatterns = normalizeModelPatternList(roleValue).flatMap(
|
|
688
|
+
pattern => resolveConfiguredRolePattern(pattern, options?.settings) ?? [],
|
|
689
|
+
);
|
|
690
|
+
if (effectivePatterns.length === 0) {
|
|
630
691
|
return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
|
|
631
692
|
}
|
|
632
693
|
|
|
@@ -634,6 +695,7 @@ export function resolveModelRoleValue(
|
|
|
634
695
|
for (const effectivePattern of effectivePatterns) {
|
|
635
696
|
const resolved = parseModelPattern(effectivePattern, availableModels, options?.matchPreferences, {
|
|
636
697
|
modelRegistry: options?.modelRegistry,
|
|
698
|
+
sessionId: options?.sessionId,
|
|
637
699
|
});
|
|
638
700
|
if (resolved.model) {
|
|
639
701
|
return {
|
|
@@ -654,20 +716,18 @@ export function resolveModelRoleValue(
|
|
|
654
716
|
}
|
|
655
717
|
|
|
656
718
|
export function extractExplicitThinkingSelector(
|
|
657
|
-
value:
|
|
719
|
+
value: ModelSelectorValue | undefined,
|
|
658
720
|
settings?: Settings,
|
|
659
721
|
): ThinkingLevel | undefined {
|
|
660
|
-
|
|
661
|
-
const normalized = value.trim();
|
|
722
|
+
const normalized = normalizeModelPatternList(value)[0];
|
|
662
723
|
if (!normalized || normalized === DEFAULT_MODEL_ROLE) return undefined;
|
|
663
724
|
|
|
664
725
|
const visited = new Set<string>();
|
|
665
726
|
let current = normalized;
|
|
666
727
|
while (!visited.has(current)) {
|
|
667
728
|
visited.add(current);
|
|
668
|
-
const
|
|
669
|
-
|
|
670
|
-
lastColonIndex > PREFIX_MODEL_ROLE.length ? parseThinkingLevel(current.slice(lastColonIndex + 1)) : undefined;
|
|
729
|
+
const thinkingSelector = splitSelectorThinkingSuffix(current).thinkingLevel;
|
|
730
|
+
|
|
671
731
|
if (thinkingSelector) {
|
|
672
732
|
return thinkingSelector;
|
|
673
733
|
}
|
|
@@ -689,12 +749,7 @@ export function resolveModelFromString(
|
|
|
689
749
|
matchPreferences?: ModelMatchPreferences,
|
|
690
750
|
modelRegistry?: CanonicalModelRegistry,
|
|
691
751
|
): Model<Api> | undefined {
|
|
692
|
-
|
|
693
|
-
if (parsed) {
|
|
694
|
-
const exact = available.find(model => model.provider === parsed.provider && model.id === parsed.id);
|
|
695
|
-
if (exact) return exact;
|
|
696
|
-
}
|
|
697
|
-
return parseModelPattern(value, available, matchPreferences, { modelRegistry }).model;
|
|
752
|
+
return resolveSelector(value, available, { preferences: matchPreferences, modelRegistry }).model;
|
|
698
753
|
}
|
|
699
754
|
|
|
700
755
|
/**
|
|
@@ -712,12 +767,13 @@ export function resolveModelFromSettings(options: {
|
|
|
712
767
|
let sawConfiguredProviderQualifiedRole = false;
|
|
713
768
|
for (const role of roles) {
|
|
714
769
|
const configured = settings.getModelRole(role);
|
|
715
|
-
|
|
716
|
-
|
|
770
|
+
const expanded = normalizeModelPatternList(configured)[0];
|
|
771
|
+
if (!expanded) continue;
|
|
772
|
+
const resolvedValue = expandRoleAlias(expanded, settings).trim();
|
|
717
773
|
if (expanded.includes("/")) {
|
|
718
774
|
sawConfiguredProviderQualifiedRole = true;
|
|
719
775
|
}
|
|
720
|
-
const resolved = resolveModelFromString(
|
|
776
|
+
const resolved = resolveModelFromString(resolvedValue, availableModels, matchPreferences, modelRegistry);
|
|
721
777
|
if (resolved) return resolved;
|
|
722
778
|
}
|
|
723
779
|
return sawConfiguredProviderQualifiedRole ? undefined : availableModels[0];
|
|
@@ -730,6 +786,7 @@ export function resolveModelOverride(
|
|
|
730
786
|
modelPatterns: string[],
|
|
731
787
|
modelRegistry: ModelLookupRegistry,
|
|
732
788
|
settings?: Settings,
|
|
789
|
+
sessionId?: string,
|
|
733
790
|
): { model?: Model<Api>; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } {
|
|
734
791
|
if (modelPatterns.length === 0) return { explicitThinkingLevel: false };
|
|
735
792
|
const availableModels = modelRegistry.getAvailable();
|
|
@@ -739,6 +796,7 @@ export function resolveModelOverride(
|
|
|
739
796
|
settings,
|
|
740
797
|
matchPreferences,
|
|
741
798
|
modelRegistry,
|
|
799
|
+
sessionId,
|
|
742
800
|
});
|
|
743
801
|
if (model) {
|
|
744
802
|
return { model, thinkingLevel, explicitThinkingLevel };
|
|
@@ -747,6 +805,61 @@ export function resolveModelOverride(
|
|
|
747
805
|
return { explicitThinkingLevel: false };
|
|
748
806
|
}
|
|
749
807
|
|
|
808
|
+
/**
|
|
809
|
+
* Resolve a configured fallback chain to its first callable entry without
|
|
810
|
+
* charging requests. For retryable chains, consumers MUST pass
|
|
811
|
+
* `{ managedFallback: true }` so unsuitable entries (including Cursor's
|
|
812
|
+
* provider-side tool mode) fail closed during resolution before any request
|
|
813
|
+
* is attempted. Single-entry chains remain non-managed selections.
|
|
814
|
+
*/
|
|
815
|
+
export interface ModelChainResolutionOptions {
|
|
816
|
+
managedFallback?: boolean;
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
export async function resolveModelChainWithAuth(
|
|
820
|
+
modelPatterns: readonly string[],
|
|
821
|
+
modelRegistry: ModelLookupRegistry & Pick<ModelRegistry, "getApiKey">,
|
|
822
|
+
settings?: Settings,
|
|
823
|
+
sessionId?: string,
|
|
824
|
+
options?: ModelChainResolutionOptions,
|
|
825
|
+
): Promise<{
|
|
826
|
+
model?: Model<Api>;
|
|
827
|
+
thinkingLevel?: ThinkingLevel;
|
|
828
|
+
explicitThinkingLevel: boolean;
|
|
829
|
+
activeIndex: number;
|
|
830
|
+
skips: Array<{ selector: string; reason: string }>;
|
|
831
|
+
}> {
|
|
832
|
+
const availableModels = modelRegistry.getAvailable();
|
|
833
|
+
const matchPreferences = { usageOrder: settings?.getStorage()?.getModelUsageOrder() };
|
|
834
|
+
const skips: Array<{ selector: string; reason: string }> = [];
|
|
835
|
+
for (let activeIndex = 0; activeIndex < modelPatterns.length; activeIndex += 1) {
|
|
836
|
+
const selector = modelPatterns[activeIndex];
|
|
837
|
+
const candidate = resolveModelRoleValue(selector, availableModels, {
|
|
838
|
+
settings,
|
|
839
|
+
matchPreferences,
|
|
840
|
+
modelRegistry,
|
|
841
|
+
sessionId,
|
|
842
|
+
});
|
|
843
|
+
if (!candidate.model) {
|
|
844
|
+
skips.push({ selector, reason: "unknown_model" });
|
|
845
|
+
continue;
|
|
846
|
+
}
|
|
847
|
+
if (options?.managedFallback && modelPatterns.length > 1) {
|
|
848
|
+
const cursorReason = managedCursorFallbackUnavailableReason(candidate.model, selector);
|
|
849
|
+
if (cursorReason) {
|
|
850
|
+
skips.push({ selector, reason: cursorReason });
|
|
851
|
+
continue;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
const key = await modelRegistry.getApiKey(candidate.model, sessionId);
|
|
855
|
+
if (isAuthenticatedOrKeyless(key)) {
|
|
856
|
+
return { ...candidate, activeIndex, skips };
|
|
857
|
+
}
|
|
858
|
+
skips.push({ selector, reason: "unauthenticated" });
|
|
859
|
+
}
|
|
860
|
+
return { explicitThinkingLevel: false, activeIndex: modelPatterns.length, skips };
|
|
861
|
+
}
|
|
862
|
+
|
|
750
863
|
/**
|
|
751
864
|
* Resolve a list of override patterns to the first matching model, with an
|
|
752
865
|
* auth-aware fallback to the parent session's active model.
|
|
@@ -773,7 +886,9 @@ export async function resolveModelOverrideWithAuthFallback(
|
|
|
773
886
|
parentActiveModelPattern: string | undefined,
|
|
774
887
|
modelRegistry: ModelLookupRegistry & Pick<ModelRegistry, "getApiKey">,
|
|
775
888
|
settings?: Settings,
|
|
776
|
-
|
|
889
|
+
authSessionId?: string,
|
|
890
|
+
options?: ModelChainResolutionOptions,
|
|
891
|
+
canonicalSessionId?: string,
|
|
777
892
|
): Promise<{
|
|
778
893
|
model?: Model<Api>;
|
|
779
894
|
thinkingLevel?: ThinkingLevel;
|
|
@@ -781,31 +896,74 @@ export async function resolveModelOverrideWithAuthFallback(
|
|
|
781
896
|
authFallbackUsed: boolean;
|
|
782
897
|
requestedModel?: Model<Api>;
|
|
783
898
|
fallbackReason?: "auth_unavailable";
|
|
899
|
+
activeIndex?: number;
|
|
900
|
+
parentFallbackSelector?: string;
|
|
901
|
+
skips: Array<{ selector: string; reason: string }>;
|
|
784
902
|
}> {
|
|
785
|
-
const
|
|
786
|
-
const
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
const
|
|
792
|
-
if (
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
if (!fallback.model) {
|
|
798
|
-
return unchanged;
|
|
799
|
-
}
|
|
800
|
-
if (modelsAreEqual(fallback.model, primary.model)) {
|
|
801
|
-
return unchanged;
|
|
903
|
+
const availableModels = modelRegistry.getAvailable();
|
|
904
|
+
const matchPreferences = { usageOrder: settings?.getStorage()?.getModelUsageOrder() };
|
|
905
|
+
let requestedModel: Model<Api> | undefined;
|
|
906
|
+
let requestedResolution: ResolvedModelRoleValue | undefined;
|
|
907
|
+
const skips: Array<{ selector: string; reason: string }> = [];
|
|
908
|
+
let activeIndex = 0;
|
|
909
|
+
const canonicalScope = canonicalSessionId ?? authSessionId;
|
|
910
|
+
if (canonicalScope && parentActiveModelPattern) {
|
|
911
|
+
const parentActiveModel = resolveModelOverride([parentActiveModelPattern], modelRegistry, settings).model;
|
|
912
|
+
// TODO(upstream-v0.11): ModelRegistry.seedCanonicalVariant was removed;
|
|
913
|
+
// rewire canonical-variant seeding if a successor API appears.
|
|
914
|
+
void parentActiveModel;
|
|
802
915
|
}
|
|
803
|
-
const
|
|
804
|
-
|
|
805
|
-
|
|
916
|
+
for (const pattern of modelPatterns) {
|
|
917
|
+
const candidate = resolveModelRoleValue(pattern, availableModels, {
|
|
918
|
+
settings,
|
|
919
|
+
matchPreferences,
|
|
920
|
+
modelRegistry,
|
|
921
|
+
sessionId: canonicalScope,
|
|
922
|
+
});
|
|
923
|
+
if (!requestedModel && candidate.model) {
|
|
924
|
+
requestedModel = candidate.model;
|
|
925
|
+
requestedResolution = candidate;
|
|
926
|
+
}
|
|
927
|
+
if (!candidate.model) {
|
|
928
|
+
skips.push({ selector: pattern, reason: "unknown_model" });
|
|
929
|
+
activeIndex += 1;
|
|
930
|
+
continue;
|
|
931
|
+
}
|
|
932
|
+
if (options?.managedFallback && modelPatterns.length > 1) {
|
|
933
|
+
const cursorReason = managedCursorFallbackUnavailableReason(candidate.model, pattern);
|
|
934
|
+
if (cursorReason) {
|
|
935
|
+
skips.push({ selector: pattern, reason: cursorReason });
|
|
936
|
+
activeIndex += 1;
|
|
937
|
+
continue;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
const key = await modelRegistry.getApiKey(candidate.model, authSessionId);
|
|
941
|
+
if (isAuthenticatedOrKeyless(key)) {
|
|
942
|
+
return { ...candidate, requestedModel: candidate.model, authFallbackUsed: false, activeIndex, skips };
|
|
943
|
+
}
|
|
944
|
+
skips.push({ selector: pattern, reason: "unauthenticated" });
|
|
945
|
+
activeIndex += 1;
|
|
946
|
+
}
|
|
947
|
+
const fallback = parentActiveModelPattern
|
|
948
|
+
? resolveModelOverride([parentActiveModelPattern], modelRegistry, settings, authSessionId)
|
|
949
|
+
: { explicitThinkingLevel: false };
|
|
950
|
+
if (fallback.model) {
|
|
951
|
+
const fallbackKey = await modelRegistry.getApiKey(fallback.model, authSessionId);
|
|
952
|
+
if (isAuthenticatedOrKeyless(fallbackKey)) {
|
|
953
|
+
const isParentSubstitution = requestedModel === undefined || !modelsAreEqual(fallback.model, requestedModel);
|
|
954
|
+
return {
|
|
955
|
+
...fallback,
|
|
956
|
+
requestedModel,
|
|
957
|
+
authFallbackUsed: requestedModel !== undefined && isParentSubstitution,
|
|
958
|
+
fallbackReason: requestedModel && isParentSubstitution ? "auth_unavailable" : undefined,
|
|
959
|
+
parentFallbackSelector: isParentSubstitution ? formatModelString(fallback.model) : undefined,
|
|
960
|
+
skips,
|
|
961
|
+
};
|
|
962
|
+
}
|
|
806
963
|
}
|
|
807
|
-
|
|
808
|
-
|
|
964
|
+
return requestedResolution
|
|
965
|
+
? { ...requestedResolution, requestedModel, authFallbackUsed: false, activeIndex, skips }
|
|
966
|
+
: { explicitThinkingLevel: false, requestedModel, authFallbackUsed: false, activeIndex, skips };
|
|
809
967
|
}
|
|
810
968
|
|
|
811
969
|
/**
|
|
@@ -836,21 +994,20 @@ function resolveExactCanonicalScopePattern(
|
|
|
836
994
|
modelRegistry: Pick<ModelRegistry, "getCanonicalVariants">,
|
|
837
995
|
availableModels: Model<Api>[],
|
|
838
996
|
): { models: Model<Api>[]; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } | undefined {
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
const parsedThinkingLevel = parseThinkingLevel(suffix);
|
|
847
|
-
if (parsedThinkingLevel) {
|
|
848
|
-
canonicalId = pattern.substring(0, lastColonIndex);
|
|
849
|
-
thinkingLevel = parsedThinkingLevel;
|
|
850
|
-
explicitThinkingLevel = true;
|
|
851
|
-
}
|
|
997
|
+
// Exact concrete selectors must win before a suffix is interpreted as thinking.
|
|
998
|
+
// This preserves canonical/OpenRouter model IDs that themselves contain colons.
|
|
999
|
+
if (
|
|
1000
|
+
findExactModelReferenceMatch(pattern, availableModels) ||
|
|
1001
|
+
(pattern.includes(":") && availableModels.some(model => model.id.toLowerCase() === pattern.trim().toLowerCase()))
|
|
1002
|
+
) {
|
|
1003
|
+
return undefined;
|
|
852
1004
|
}
|
|
853
1005
|
|
|
1006
|
+
const suffix = splitSelectorThinkingSuffix(pattern);
|
|
1007
|
+
const canonicalId = suffix.thinkingLevel ? suffix.selector : pattern;
|
|
1008
|
+
const thinkingLevel = suffix.thinkingLevel;
|
|
1009
|
+
const explicitThinkingLevel = thinkingLevel !== undefined;
|
|
1010
|
+
|
|
854
1011
|
const variants = modelRegistry
|
|
855
1012
|
.getCanonicalVariants(canonicalId, { availableOnly: true, candidates: availableModels })
|
|
856
1013
|
.map(variant => variant.model);
|
|
@@ -862,43 +1019,39 @@ function resolveExactCanonicalScopePattern(
|
|
|
862
1019
|
}
|
|
863
1020
|
|
|
864
1021
|
/**
|
|
865
|
-
* Resolve model patterns to actual Model objects with optional thinking levels
|
|
866
|
-
*
|
|
867
|
-
*
|
|
868
|
-
*
|
|
869
|
-
*
|
|
870
|
-
*
|
|
871
|
-
* Supports models with colons in their IDs (e.g., OpenRouter's model:exacto).
|
|
872
|
-
* The algorithm tries to match the full pattern first, then progressively
|
|
873
|
-
* strips colon-suffixes to find a match.
|
|
1022
|
+
* Resolve model patterns to actual Model objects with optional thinking levels.
|
|
1023
|
+
* A `:level` suffix is interpreted only after the complete selector fails to
|
|
1024
|
+
* resolve, preserving concrete model IDs that contain colon-bearing route suffixes.
|
|
1025
|
+
* For each non-glob pattern, alias IDs are preferred over dated versions; otherwise
|
|
1026
|
+
* the latest dated version is selected.
|
|
874
1027
|
*/
|
|
1028
|
+
|
|
875
1029
|
export async function resolveModelScope(
|
|
876
1030
|
patterns: string[],
|
|
877
1031
|
modelRegistry: Pick<ModelRegistry, "getAvailable" | "getCanonicalVariants">,
|
|
878
1032
|
preferences?: ModelMatchPreferences,
|
|
879
1033
|
): Promise<ScopedModel[]> {
|
|
880
1034
|
const availableModels = modelRegistry.getAvailable();
|
|
881
|
-
|
|
1035
|
+
|
|
882
1036
|
const scopedModels: ScopedModel[] = [];
|
|
1037
|
+
const addScopedModel = (selection: ScopedModel): void => {
|
|
1038
|
+
const duplicate = scopedModels.some(
|
|
1039
|
+
existing =>
|
|
1040
|
+
modelsAreEqual(existing.model, selection.model) &&
|
|
1041
|
+
existing.thinkingLevel === selection.thinkingLevel &&
|
|
1042
|
+
existing.explicitThinkingLevel === selection.explicitThinkingLevel,
|
|
1043
|
+
);
|
|
1044
|
+
if (!duplicate) scopedModels.push(selection);
|
|
1045
|
+
};
|
|
883
1046
|
|
|
884
1047
|
for (const pattern of patterns) {
|
|
885
1048
|
// Check if pattern contains glob characters
|
|
886
1049
|
if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) {
|
|
887
|
-
// Extract optional thinking
|
|
888
|
-
const
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
if (colonIdx !== -1) {
|
|
894
|
-
const suffix = pattern.substring(colonIdx + 1);
|
|
895
|
-
const parsedThinkingLevel = parseThinkingLevel(suffix);
|
|
896
|
-
if (parsedThinkingLevel) {
|
|
897
|
-
thinkingLevel = parsedThinkingLevel;
|
|
898
|
-
explicitThinkingLevel = true;
|
|
899
|
-
globPattern = pattern.substring(0, colonIdx);
|
|
900
|
-
}
|
|
901
|
-
}
|
|
1050
|
+
// Extract the optional thinking suffix once, preserving route suffixes.
|
|
1051
|
+
const suffix = splitSelectorThinkingSuffix(pattern);
|
|
1052
|
+
const globPattern = suffix.thinkingLevel ? suffix.selector : pattern;
|
|
1053
|
+
const thinkingLevel = suffix.thinkingLevel;
|
|
1054
|
+
const explicitThinkingLevel = thinkingLevel !== undefined;
|
|
902
1055
|
|
|
903
1056
|
// Match against "provider/modelId" format OR just model ID
|
|
904
1057
|
// This allows "*sonnet*" to match without requiring "anthropic/*sonnet*"
|
|
@@ -914,42 +1067,37 @@ export async function resolveModelScope(
|
|
|
914
1067
|
}
|
|
915
1068
|
|
|
916
1069
|
for (const model of matchingModels) {
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
thinkingLevel
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
});
|
|
925
|
-
}
|
|
1070
|
+
addScopedModel({
|
|
1071
|
+
model,
|
|
1072
|
+
thinkingLevel: explicitThinkingLevel
|
|
1073
|
+
? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
|
|
1074
|
+
: thinkingLevel,
|
|
1075
|
+
explicitThinkingLevel,
|
|
1076
|
+
});
|
|
926
1077
|
}
|
|
1078
|
+
|
|
927
1079
|
continue;
|
|
928
1080
|
}
|
|
929
1081
|
|
|
930
1082
|
const exactCanonical = resolveExactCanonicalScopePattern(pattern, modelRegistry, availableModels);
|
|
931
1083
|
if (exactCanonical) {
|
|
932
1084
|
for (const model of exactCanonical.models) {
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
thinkingLevel
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
explicitThinkingLevel: exactCanonical.explicitThinkingLevel,
|
|
941
|
-
});
|
|
942
|
-
}
|
|
1085
|
+
addScopedModel({
|
|
1086
|
+
model,
|
|
1087
|
+
thinkingLevel: exactCanonical.explicitThinkingLevel
|
|
1088
|
+
? (resolveThinkingLevelForModel(model, exactCanonical.thinkingLevel) ?? exactCanonical.thinkingLevel)
|
|
1089
|
+
: exactCanonical.thinkingLevel,
|
|
1090
|
+
explicitThinkingLevel: exactCanonical.explicitThinkingLevel,
|
|
1091
|
+
});
|
|
943
1092
|
}
|
|
1093
|
+
|
|
944
1094
|
continue;
|
|
945
1095
|
}
|
|
946
1096
|
|
|
947
|
-
const { model, thinkingLevel, warning, explicitThinkingLevel } =
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
{ modelRegistry },
|
|
952
|
-
);
|
|
1097
|
+
const { model, thinkingLevel, warning, explicitThinkingLevel } = resolveSelector(pattern, availableModels, {
|
|
1098
|
+
modelRegistry,
|
|
1099
|
+
preferences,
|
|
1100
|
+
});
|
|
953
1101
|
|
|
954
1102
|
if (warning) {
|
|
955
1103
|
logger.warn(warning);
|
|
@@ -960,16 +1108,13 @@ export async function resolveModelScope(
|
|
|
960
1108
|
continue;
|
|
961
1109
|
}
|
|
962
1110
|
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
model,
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
explicitThinkingLevel,
|
|
971
|
-
});
|
|
972
|
-
}
|
|
1111
|
+
addScopedModel({
|
|
1112
|
+
model,
|
|
1113
|
+
thinkingLevel: explicitThinkingLevel
|
|
1114
|
+
? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
|
|
1115
|
+
: thinkingLevel,
|
|
1116
|
+
explicitThinkingLevel,
|
|
1117
|
+
});
|
|
973
1118
|
}
|
|
974
1119
|
|
|
975
1120
|
return scopedModels;
|
|
@@ -1013,9 +1158,7 @@ export interface ResolveCliModelResult {
|
|
|
1013
1158
|
error: string | undefined;
|
|
1014
1159
|
}
|
|
1015
1160
|
|
|
1016
|
-
/**
|
|
1017
|
-
* Resolve a single model from CLI flags.
|
|
1018
|
-
*/
|
|
1161
|
+
/** Resolve a single model from CLI flags through the staged selector resolver. */
|
|
1019
1162
|
export function resolveCliModel(options: {
|
|
1020
1163
|
cliProvider?: string;
|
|
1021
1164
|
cliModel?: string;
|
|
@@ -1023,10 +1166,7 @@ export function resolveCliModel(options: {
|
|
|
1023
1166
|
preferences?: ModelMatchPreferences;
|
|
1024
1167
|
}): ResolveCliModelResult {
|
|
1025
1168
|
const { cliProvider, cliModel, modelRegistry, preferences } = options;
|
|
1026
|
-
|
|
1027
|
-
if (!cliModel) {
|
|
1028
|
-
return { model: undefined, selector: undefined, warning: undefined, error: undefined };
|
|
1029
|
-
}
|
|
1169
|
+
if (!cliModel) return { model: undefined, selector: undefined, warning: undefined, error: undefined };
|
|
1030
1170
|
|
|
1031
1171
|
const availableModels = modelRegistry.getAll();
|
|
1032
1172
|
if (availableModels.length === 0) {
|
|
@@ -1038,12 +1178,9 @@ export function resolveCliModel(options: {
|
|
|
1038
1178
|
};
|
|
1039
1179
|
}
|
|
1040
1180
|
|
|
1041
|
-
const
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
|
-
let provider = cliProvider ? providerMap.get(cliProvider.toLowerCase()) : undefined;
|
|
1181
|
+
const provider = cliProvider
|
|
1182
|
+
? availableModels.find(model => model.provider.toLowerCase() === cliProvider.toLowerCase())?.provider
|
|
1183
|
+
: undefined;
|
|
1047
1184
|
if (cliProvider && !provider) {
|
|
1048
1185
|
return {
|
|
1049
1186
|
model: undefined,
|
|
@@ -1053,117 +1190,55 @@ export function resolveCliModel(options: {
|
|
|
1053
1190
|
};
|
|
1054
1191
|
}
|
|
1055
1192
|
|
|
1056
|
-
const
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
};
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1082
|
-
if (!exact) {
|
|
1083
|
-
exact = availableModels.find(
|
|
1084
|
-
model => model.id.toLowerCase() === lower || `${model.provider}/${model.id}`.toLowerCase() === lower,
|
|
1085
|
-
);
|
|
1086
|
-
}
|
|
1087
|
-
if (exact) {
|
|
1088
|
-
return {
|
|
1089
|
-
model: exact,
|
|
1090
|
-
selector: formatModelString(exact),
|
|
1091
|
-
warning: undefined,
|
|
1092
|
-
thinkingLevel: undefined,
|
|
1093
|
-
error: undefined,
|
|
1094
|
-
};
|
|
1095
|
-
}
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
|
-
let pattern = trimmedModel;
|
|
1099
|
-
|
|
1100
|
-
if (!provider) {
|
|
1101
|
-
const slashIndex = cliModel.indexOf("/");
|
|
1102
|
-
if (slashIndex !== -1) {
|
|
1103
|
-
const maybeProvider = cliModel.substring(0, slashIndex);
|
|
1104
|
-
const canonical = providerMap.get(maybeProvider.toLowerCase());
|
|
1105
|
-
if (canonical) {
|
|
1106
|
-
provider = canonical;
|
|
1107
|
-
pattern = cliModel.substring(slashIndex + 1);
|
|
1108
|
-
}
|
|
1109
|
-
}
|
|
1110
|
-
} else {
|
|
1111
|
-
const prefix = `${provider}/`;
|
|
1112
|
-
if (cliModel.toLowerCase().startsWith(prefix.toLowerCase())) {
|
|
1113
|
-
pattern = cliModel.substring(prefix.length);
|
|
1114
|
-
}
|
|
1115
|
-
}
|
|
1116
|
-
|
|
1117
|
-
if (provider) {
|
|
1118
|
-
const exactProviderMatch = resolveProviderModelReference(provider, pattern, availableModels);
|
|
1119
|
-
if (exactProviderMatch) {
|
|
1120
|
-
return {
|
|
1121
|
-
model: exactProviderMatch,
|
|
1122
|
-
selector: formatModelString(exactProviderMatch),
|
|
1123
|
-
warning: undefined,
|
|
1124
|
-
thinkingLevel: undefined,
|
|
1125
|
-
error: undefined,
|
|
1126
|
-
};
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
const candidates = provider ? availableModels.filter(model => model.provider === provider) : availableModels;
|
|
1131
|
-
const { model, thinkingLevel, warning } = parseModelPattern(pattern, candidates, preferences, {
|
|
1132
|
-
allowInvalidThinkingSelectorFallback: false,
|
|
1133
|
-
modelRegistry,
|
|
1134
|
-
});
|
|
1193
|
+
const modelInput = cliModel.trim();
|
|
1194
|
+
const providerPrefix = provider ? `${provider}/` : "";
|
|
1195
|
+
const pattern =
|
|
1196
|
+
provider && modelInput.toLowerCase().startsWith(providerPrefix.toLowerCase())
|
|
1197
|
+
? modelInput.slice(providerPrefix.length)
|
|
1198
|
+
: modelInput;
|
|
1199
|
+
const candidates = provider
|
|
1200
|
+
? availableModels.filter(model => model.provider.toLowerCase() === provider.toLowerCase())
|
|
1201
|
+
: availableModels;
|
|
1202
|
+
const selectorInput = provider ? `${provider}/${pattern}` : pattern;
|
|
1203
|
+
const exactProviderResolved = provider
|
|
1204
|
+
? resolveSelector(selectorInput, candidates, {
|
|
1205
|
+
allowInvalidThinkingSelectorFallback: false,
|
|
1206
|
+
preferences,
|
|
1207
|
+
})
|
|
1208
|
+
: undefined;
|
|
1209
|
+
const resolved = exactProviderResolved?.model
|
|
1210
|
+
? exactProviderResolved
|
|
1211
|
+
: resolveSelector(provider ? pattern : selectorInput, candidates, {
|
|
1212
|
+
allowInvalidThinkingSelectorFallback: false,
|
|
1213
|
+
modelRegistry: provider ? undefined : modelRegistry,
|
|
1214
|
+
preferences,
|
|
1215
|
+
});
|
|
1135
1216
|
|
|
1136
|
-
if (!model) {
|
|
1137
|
-
const display = provider ? `${provider}/${pattern}` : cliModel;
|
|
1217
|
+
if (!resolved.model) {
|
|
1138
1218
|
return {
|
|
1139
1219
|
model: undefined,
|
|
1140
1220
|
selector: undefined,
|
|
1141
1221
|
thinkingLevel: undefined,
|
|
1142
|
-
warning,
|
|
1143
|
-
error: `Model "${
|
|
1222
|
+
warning: resolved.warning,
|
|
1223
|
+
error: `Model "${selectorInput}" not found. Use --list-models to see available models.`,
|
|
1144
1224
|
};
|
|
1145
1225
|
}
|
|
1146
1226
|
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
? pattern.substring(0, lastColonIndex)
|
|
1153
|
-
: pattern;
|
|
1154
|
-
if (!canonicalCandidate.includes("/")) {
|
|
1155
|
-
const canonicalResolved = modelRegistry.resolveCanonicalModel?.(canonicalCandidate, { availableOnly: false });
|
|
1156
|
-
if (canonicalResolved && canonicalResolved.provider === model.provider && canonicalResolved.id === model.id) {
|
|
1157
|
-
selector = modelRegistry.getCanonicalId?.(canonicalResolved) ?? canonicalCandidate;
|
|
1158
|
-
}
|
|
1159
|
-
}
|
|
1160
|
-
}
|
|
1161
|
-
|
|
1227
|
+
const suffix = splitSelectorThinkingSuffix(selectorInput);
|
|
1228
|
+
const canonicalSelector = suffix.selector.includes("/") ? undefined : suffix.selector;
|
|
1229
|
+
const canonicalModel = canonicalSelector
|
|
1230
|
+
? modelRegistry.resolveCanonicalModel?.(canonicalSelector, { availableOnly: false, candidates: availableModels })
|
|
1231
|
+
: undefined;
|
|
1162
1232
|
return {
|
|
1163
|
-
model,
|
|
1164
|
-
selector
|
|
1165
|
-
|
|
1166
|
-
|
|
1233
|
+
model: resolved.model,
|
|
1234
|
+
selector:
|
|
1235
|
+
canonicalModel &&
|
|
1236
|
+
canonicalModel.provider === resolved.model.provider &&
|
|
1237
|
+
canonicalModel.id === resolved.model.id
|
|
1238
|
+
? (modelRegistry.getCanonicalId?.(canonicalModel) ?? canonicalSelector)
|
|
1239
|
+
: formatModelString(resolved.model),
|
|
1240
|
+
thinkingLevel: resolved.thinkingLevel,
|
|
1241
|
+
warning: resolved.warning,
|
|
1167
1242
|
error: undefined,
|
|
1168
1243
|
};
|
|
1169
1244
|
}
|
|
@@ -1208,7 +1283,8 @@ export async function findInitialModel(options: {
|
|
|
1208
1283
|
|
|
1209
1284
|
// 1. CLI args take priority
|
|
1210
1285
|
if (cliProvider && cliModel) {
|
|
1211
|
-
const found =
|
|
1286
|
+
const found = resolveProviderModelReference(cliProvider, cliModel, modelRegistry.getAvailable());
|
|
1287
|
+
|
|
1212
1288
|
if (!found) {
|
|
1213
1289
|
console.error(chalk.red(`Model ${cliProvider}/${cliModel} not found`));
|
|
1214
1290
|
process.exit(1);
|
|
@@ -1232,7 +1308,8 @@ export async function findInitialModel(options: {
|
|
|
1232
1308
|
|
|
1233
1309
|
// 3. Try saved default from settings
|
|
1234
1310
|
if (defaultProvider && defaultModelId) {
|
|
1235
|
-
const found =
|
|
1311
|
+
const found = resolveProviderModelReference(defaultProvider, defaultModelId, modelRegistry.getAvailable());
|
|
1312
|
+
|
|
1236
1313
|
if (found) {
|
|
1237
1314
|
model = found;
|
|
1238
1315
|
thinkingLevel = resolveThinkingLevelForModel(found, defaultThinkingSelector);
|
|
@@ -1271,7 +1348,7 @@ export async function restoreModelFromSession(
|
|
|
1271
1348
|
shouldPrintMessages: boolean,
|
|
1272
1349
|
modelRegistry: RestorableModelRegistry,
|
|
1273
1350
|
): Promise<{ model: Model<Api> | undefined; fallbackMessage: string | undefined }> {
|
|
1274
|
-
const restoredModel =
|
|
1351
|
+
const restoredModel = resolveProviderModelReference(savedProvider, savedModelId, modelRegistry.getAvailable());
|
|
1275
1352
|
|
|
1276
1353
|
// Check if restored model exists and has a valid API key
|
|
1277
1354
|
const hasApiKey = restoredModel ? !!(await modelRegistry.getApiKey(restoredModel)) : false;
|