@prometheus-ai/agent 0.5.4 → 0.5.8
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 +30 -0
- package/dist/cli.js +25110 -0
- package/dist/types/async/index.d.ts +0 -1
- package/dist/types/async/job-manager.d.ts +33 -0
- package/dist/types/autolearn/controller.d.ts +25 -0
- package/dist/types/autolearn/managed-skills.d.ts +45 -0
- package/dist/types/autoresearch/state.d.ts +1 -1
- package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
- package/dist/types/autoresearch/types.d.ts +1 -1
- package/dist/types/capability/context-file.d.ts +0 -13
- package/dist/types/capability/mcp.d.ts +1 -0
- package/dist/types/capability/rule-buckets.d.ts +1 -1
- package/dist/types/capability/rule.d.ts +6 -1
- package/dist/types/capability/types.d.ts +0 -4
- package/dist/types/cli/args.d.ts +23 -3
- package/dist/types/cli/bench-cli.d.ts +78 -0
- package/dist/types/cli/claude-trace-cli.d.ts +7 -0
- package/dist/types/cli/dry-balance-cli.d.ts +16 -2
- package/dist/types/cli/gallery-cli.d.ts +43 -0
- package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
- package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
- package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
- package/dist/types/cli/gallery-screenshot.d.ts +35 -0
- package/dist/types/cli/grievances-cli.d.ts +1 -1
- package/dist/types/cli/list-models.d.ts +6 -14
- package/dist/types/cli/models-cli.d.ts +49 -0
- package/dist/types/cli/session-picker.d.ts +1 -1
- package/dist/types/cli/setup-cli.d.ts +1 -1
- package/dist/types/cli/setup-model-picker.d.ts +14 -0
- package/dist/types/cli/startup-cwd.d.ts +2 -0
- package/dist/types/cli/update-cli.d.ts +13 -40
- package/dist/types/cli/usage-cli.d.ts +81 -0
- package/dist/types/cli-commands.d.ts +12 -0
- package/dist/types/collab/crypto.d.ts +7 -0
- package/dist/types/collab/guest.d.ts +37 -0
- package/dist/types/collab/host.d.ts +29 -0
- package/dist/types/collab/protocol.d.ts +119 -0
- package/dist/types/collab/relay-client.d.ts +22 -0
- package/dist/types/commands/bench.d.ts +29 -0
- package/dist/types/commands/gallery.d.ts +47 -0
- package/dist/types/commands/install.d.ts +1 -1
- package/dist/types/commands/join.d.ts +12 -0
- package/dist/types/commands/launch.d.ts +8 -4
- package/dist/types/commands/models.d.ts +33 -0
- package/dist/types/commands/read.d.ts +1 -1
- package/dist/types/commands/say.d.ts +24 -0
- package/dist/types/commands/token.d.ts +25 -0
- package/dist/types/commands/usage.d.ts +34 -0
- package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
- package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
- package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
- package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
- package/dist/types/commit/analysis/conventional.d.ts +2 -2
- package/dist/types/commit/analysis/summary.d.ts +2 -2
- package/dist/types/commit/changelog/generate.d.ts +3 -3
- package/dist/types/commit/changelog/index.d.ts +2 -2
- package/dist/types/commit/map-reduce/index.d.ts +3 -3
- package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
- package/dist/types/commit/model-selection.d.ts +10 -4
- package/dist/types/commit/shared-llm.d.ts +1 -1
- package/dist/types/config/api-key-resolver.d.ts +43 -0
- package/dist/types/config/append-only-context-mode.d.ts +2 -1
- package/dist/types/config/keybindings.d.ts +12 -7
- package/dist/types/config/model-discovery.d.ts +57 -0
- package/dist/types/config/model-equivalence.d.ts +1 -1
- package/dist/types/config/model-registry.d.ts +86 -222
- package/dist/types/config/model-resolver.d.ts +43 -12
- package/dist/types/config/model-roles.d.ts +29 -0
- package/dist/types/config/models-config-schema.d.ts +536 -43
- package/dist/types/config/models-config.d.ts +391 -0
- package/dist/types/config/settings-schema.d.ts +1202 -324
- package/dist/types/config/settings.d.ts +15 -3
- package/dist/types/dap/config.d.ts +14 -1
- package/dist/types/dap/types.d.ts +10 -0
- package/dist/types/debug/log-viewer.d.ts +1 -1
- package/dist/types/debug/raw-sse.d.ts +1 -1
- package/dist/types/debug/report-bundle.d.ts +3 -0
- package/dist/types/debug/terminal-info.d.ts +0 -1
- package/dist/types/discovery/at-imports.d.ts +15 -0
- package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
- package/dist/types/edit/diff.d.ts +3 -2
- package/dist/types/edit/file-snapshot-store.d.ts +18 -0
- package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
- package/dist/types/edit/hashline/params.d.ts +1 -1
- package/dist/types/edit/index.d.ts +0 -1
- package/dist/types/edit/modes/apply-patch.d.ts +1 -1
- package/dist/types/edit/modes/patch.d.ts +1 -1
- package/dist/types/edit/modes/replace.d.ts +1 -1
- package/dist/types/edit/renderer.d.ts +1 -0
- package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
- package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
- package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
- package/dist/types/eval/backend.d.ts +7 -2
- package/dist/types/eval/bridge-timeout.d.ts +1 -1
- package/dist/types/eval/completion-bridge.d.ts +25 -0
- package/dist/types/eval/idle-timeout.d.ts +1 -5
- package/dist/types/eval/js/context-manager.d.ts +1 -0
- package/dist/types/eval/js/executor.d.ts +2 -0
- package/dist/types/eval/js/index.d.ts +1 -1
- package/dist/types/eval/js/shared/helpers.d.ts +7 -1
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
- package/dist/types/eval/js/shared/runtime.d.ts +6 -1
- package/dist/types/eval/js/worker-protocol.d.ts +6 -0
- package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
- package/dist/types/eval/py/executor.d.ts +12 -0
- package/dist/types/eval/py/index.d.ts +1 -1
- package/dist/types/eval/py/kernel.d.ts +6 -1
- package/dist/types/eval/py/runtime.d.ts +9 -0
- package/dist/types/exa/index.d.ts +1 -19
- package/dist/types/exa/mcp-client.d.ts +10 -3
- package/dist/types/exa/types.d.ts +0 -83
- package/dist/types/exec/bash-executor.d.ts +7 -0
- package/dist/types/export/custom-share.d.ts +1 -2
- package/dist/types/export/html/index.d.ts +39 -0
- package/dist/types/export/html/template-js.d.ts +2 -0
- package/dist/types/export/share.d.ts +61 -0
- package/dist/types/export/ttsr.d.ts +14 -0
- package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
- package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
- package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
- package/dist/types/extensibility/extensions/index.d.ts +1 -1
- package/dist/types/extensibility/extensions/loader.d.ts +20 -1
- package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
- package/dist/types/extensibility/extensions/runner.d.ts +5 -2
- package/dist/types/extensibility/extensions/types.d.ts +72 -11
- package/dist/types/extensibility/hooks/index.d.ts +2 -1
- package/dist/types/extensibility/hooks/loader.d.ts +1 -1
- package/dist/types/extensibility/hooks/types.d.ts +11 -5
- package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
- package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
- package/dist/types/extensibility/plugins/loader.d.ts +11 -0
- package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
- package/dist/types/extensibility/plugins/types.d.ts +2 -2
- package/dist/types/extensibility/shared-events.d.ts +3 -3
- package/dist/types/extensibility/skills.d.ts +10 -0
- package/dist/types/extensibility/slash-commands.d.ts +1 -11
- package/dist/types/goals/guided-setup.d.ts +18 -0
- package/dist/types/goals/state.d.ts +1 -1
- package/dist/types/goals/tools/goal-tool.d.ts +1 -1
- package/dist/types/hindsight/mental-models.d.ts +17 -8
- package/dist/types/hindsight/transcript.d.ts +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
- package/dist/types/internal-urls/history-protocol.d.ts +14 -0
- package/dist/types/internal-urls/index.d.ts +1 -0
- package/dist/types/internal-urls/local-protocol.d.ts +14 -2
- package/dist/types/internal-urls/types.d.ts +1 -1
- package/dist/types/irc/bus.d.ts +79 -0
- package/dist/types/lib/xai-http.d.ts +1 -1
- package/dist/types/lsp/client.d.ts +10 -0
- package/dist/types/lsp/config.d.ts +2 -2
- package/dist/types/lsp/edits.d.ts +9 -0
- package/dist/types/lsp/format-options.d.ts +32 -0
- package/dist/types/lsp/index.d.ts +2 -7
- package/dist/types/lsp/types.d.ts +13 -1
- package/dist/types/lsp/utils.d.ts +6 -2
- package/dist/types/main.d.ts +23 -8
- package/dist/types/mcp/json-rpc.d.ts +5 -0
- package/dist/types/mcp/manager.d.ts +8 -0
- package/dist/types/mcp/oauth-discovery.d.ts +6 -1
- package/dist/types/mcp/oauth-flow.d.ts +13 -3
- package/dist/types/mcp/startup-events.d.ts +11 -0
- package/dist/types/mcp/tool-bridge.d.ts +2 -0
- package/dist/types/mcp/transports/stdio.d.ts +13 -0
- package/dist/types/mcp/types.d.ts +2 -0
- package/dist/types/memories/index.d.ts +7 -15
- package/dist/types/memories/storage.d.ts +0 -10
- package/dist/types/memory-backend/index.d.ts +3 -1
- package/dist/types/memory-backend/local-backend.d.ts +4 -3
- package/dist/types/memory-backend/resolve.d.ts +2 -2
- package/dist/types/memory-backend/runtime.d.ts +4 -0
- package/dist/types/memory-backend/types.d.ts +67 -2
- package/dist/types/mnemopi/config.d.ts +31 -1
- package/dist/types/mnemopi/state.d.ts +40 -2
- package/dist/types/modes/acp/acp-agent.d.ts +1 -2
- package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
- package/dist/types/modes/components/agent-hub.d.ts +82 -0
- package/dist/types/modes/components/assistant-message.d.ts +5 -12
- package/dist/types/modes/components/bash-execution.d.ts +1 -1
- package/dist/types/modes/components/chat-block.d.ts +64 -0
- package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
- package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
- package/dist/types/modes/components/copy-selector.d.ts +1 -1
- package/dist/types/modes/components/custom-editor.d.ts +49 -2
- package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
- package/dist/types/modes/components/dynamic-border.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
- package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
- package/dist/types/modes/components/footer.d.ts +1 -1
- package/dist/types/modes/components/hook-editor.d.ts +5 -0
- package/dist/types/modes/components/hook-input.d.ts +4 -0
- package/dist/types/modes/components/hook-selector.d.ts +5 -7
- package/dist/types/modes/components/index.d.ts +1 -0
- package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
- package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
- package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
- package/dist/types/modes/components/model-selector.d.ts +1 -1
- package/dist/types/modes/components/oauth-selector.d.ts +10 -1
- package/dist/types/modes/components/overlay-box.d.ts +17 -0
- package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
- package/dist/types/modes/components/plan-toc.d.ts +41 -0
- package/dist/types/modes/components/read-tool-group.d.ts +8 -0
- package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
- package/dist/types/modes/components/segment-track.d.ts +11 -6
- package/dist/types/modes/components/session-selector.d.ts +18 -9
- package/dist/types/modes/components/settings-defs.d.ts +9 -2
- package/dist/types/modes/components/settings-selector.d.ts +17 -4
- package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
- package/dist/types/modes/components/status-line/component.d.ts +61 -0
- package/dist/types/modes/components/status-line/index.d.ts +1 -0
- package/dist/types/modes/components/status-line/types.d.ts +47 -3
- package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
- package/dist/types/modes/components/tool-execution.d.ts +49 -2
- package/dist/types/modes/components/transcript-container.d.ts +76 -26
- package/dist/types/modes/components/tree-selector.d.ts +2 -2
- package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
- package/dist/types/modes/components/usage-row.d.ts +3 -0
- package/dist/types/modes/components/user-message-selector.d.ts +1 -1
- package/dist/types/modes/components/user-message.d.ts +2 -1
- package/dist/types/modes/components/visual-truncate.d.ts +1 -1
- package/dist/types/modes/components/welcome.d.ts +12 -2
- package/dist/types/modes/controllers/command-controller.d.ts +3 -2
- package/dist/types/modes/controllers/event-controller.d.ts +7 -1
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
- package/dist/types/modes/controllers/input-controller.d.ts +25 -3
- package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
- package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
- package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
- package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
- package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
- package/dist/types/modes/gradient-highlight.d.ts +9 -4
- package/dist/types/modes/image-references.d.ts +14 -3
- package/dist/types/modes/index.d.ts +8 -7
- package/dist/types/modes/interactive-mode.d.ts +92 -16
- package/dist/types/modes/magic-keywords.d.ts +14 -2
- package/dist/types/modes/markdown-prose.d.ts +1 -1
- package/dist/types/modes/oauth-manual-input.d.ts +7 -0
- package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
- package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
- package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
- package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
- package/dist/types/modes/runtime-init.d.ts +4 -0
- package/dist/types/modes/session-observer-registry.d.ts +9 -0
- package/dist/types/modes/setup-version.d.ts +11 -0
- package/dist/types/modes/setup-wizard/index.d.ts +7 -2
- package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
- package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
- package/dist/types/modes/theme/theme.d.ts +42 -7
- package/dist/types/modes/types.d.ts +62 -13
- package/dist/types/modes/utils/context-usage.d.ts +6 -1
- package/dist/types/modes/utils/copy-targets.d.ts +21 -1
- package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
- package/dist/types/modes/workflow.d.ts +3 -3
- package/dist/types/plan-mode/approved-plan.d.ts +27 -8
- package/dist/types/plan-mode/plan-protection.d.ts +4 -4
- package/dist/types/registry/agent-lifecycle.d.ts +51 -0
- package/dist/types/registry/agent-registry.d.ts +33 -5
- package/dist/types/sdk.d.ts +46 -4
- package/dist/types/secrets/index.d.ts +1 -1
- package/dist/types/secrets/obfuscator.d.ts +9 -3
- package/dist/types/session/agent-session.d.ts +136 -66
- package/dist/types/session/agent-storage.d.ts +2 -1
- package/dist/types/session/auth-broker-config.d.ts +4 -0
- package/dist/types/session/auth-storage.d.ts +1 -1
- package/dist/types/session/codex-auto-reset.d.ts +111 -0
- package/dist/types/session/indexed-session-storage.d.ts +3 -3
- package/dist/types/session/messages.d.ts +26 -15
- package/dist/types/session/session-context.d.ts +39 -0
- package/dist/types/session/session-entries.d.ts +159 -0
- package/dist/types/session/session-history-format.d.ts +12 -0
- package/dist/types/session/session-listing.d.ts +69 -0
- package/dist/types/session/session-loader.d.ts +16 -0
- package/dist/types/session/session-manager.d.ts +107 -440
- package/dist/types/session/session-migrations.d.ts +12 -0
- package/dist/types/session/session-paths.d.ts +25 -0
- package/dist/types/session/session-persistence.d.ts +8 -0
- package/dist/types/session/session-storage.d.ts +11 -7
- package/dist/types/session/snapcompact-inline.d.ts +145 -0
- package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
- package/dist/types/session/streaming-output.d.ts +46 -0
- package/dist/types/session/tool-choice-queue.d.ts +6 -6
- package/dist/types/session/yield-queue.d.ts +10 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
- package/dist/types/slash-commands/available-commands.d.ts +34 -0
- package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
- package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
- package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
- package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
- package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
- package/dist/types/slash-commands/types.d.ts +5 -9
- package/dist/types/ssh/connection-manager.d.ts +8 -0
- package/dist/types/stt/asr-client.d.ts +90 -0
- package/dist/types/stt/asr-protocol.d.ts +97 -0
- package/dist/types/stt/asr-worker.d.ts +2 -0
- package/dist/types/stt/downloader.d.ts +38 -0
- package/dist/types/stt/endpointer.d.ts +59 -0
- package/dist/types/stt/index.d.ts +5 -1
- package/dist/types/stt/models.d.ts +120 -0
- package/dist/types/stt/recorder.d.ts +17 -0
- package/dist/types/stt/stt-controller.d.ts +6 -0
- package/dist/types/stt/transcriber.d.ts +5 -7
- package/dist/types/stt/wav.d.ts +29 -0
- package/dist/types/system-prompt.d.ts +9 -1
- package/dist/types/task/commands.d.ts +1 -1
- package/dist/types/task/discovery.d.ts +1 -2
- package/dist/types/task/executor.d.ts +61 -2
- package/dist/types/task/index.d.ts +37 -6
- package/dist/types/task/output-manager.d.ts +0 -7
- package/dist/types/task/parallel.d.ts +2 -2
- package/dist/types/task/prometheus-command.d.ts +2 -2
- package/dist/types/task/render.d.ts +20 -7
- package/dist/types/task/repair-args.d.ts +8 -7
- package/dist/types/task/types.d.ts +109 -52
- package/dist/types/task/worktree.d.ts +2 -0
- package/dist/types/telemetry-export.d.ts +2 -2
- package/dist/types/thinking.d.ts +4 -0
- package/dist/types/tiny/models.d.ts +1 -1
- package/dist/types/tiny/title-client.d.ts +12 -1
- package/dist/types/tiny/title-protocol.d.ts +1 -0
- package/dist/types/tools/archive-reader.d.ts +5 -0
- package/dist/types/tools/ask.d.ts +6 -1
- package/dist/types/tools/ast-edit.d.ts +4 -1
- package/dist/types/tools/ast-grep.d.ts +4 -1
- package/dist/types/tools/bash.d.ts +5 -2
- package/dist/types/tools/browser/attach.d.ts +4 -4
- package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
- package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
- package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
- package/dist/types/tools/browser/registry.d.ts +17 -3
- package/dist/types/tools/browser/render.d.ts +2 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
- package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
- package/dist/types/tools/browser/tab-worker.d.ts +18 -1
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/checkpoint.d.ts +1 -1
- package/dist/types/tools/conflict-detect.d.ts +16 -0
- package/dist/types/tools/debug.d.ts +1 -1
- package/dist/types/tools/eval-render.d.ts +1 -8
- package/dist/types/tools/eval.d.ts +9 -1
- package/dist/types/tools/fetch.d.ts +17 -8
- package/dist/types/tools/find.d.ts +1 -8
- package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
- package/dist/types/tools/gh.d.ts +4 -1
- package/dist/types/tools/github-cache.d.ts +19 -0
- package/dist/types/tools/grouped-file-output.d.ts +46 -12
- package/dist/types/tools/image-gen.d.ts +1 -1
- package/dist/types/tools/index.d.ts +89 -8
- package/dist/types/tools/inspect-image.d.ts +1 -1
- package/dist/types/tools/irc.d.ts +79 -39
- package/dist/types/tools/job.d.ts +8 -2
- package/dist/types/tools/learn.d.ts +51 -0
- package/dist/types/tools/manage-skill.d.ts +40 -0
- package/dist/types/tools/memory-edit.d.ts +2 -2
- package/dist/types/tools/memory-recall.d.ts +1 -1
- package/dist/types/tools/memory-reflect.d.ts +1 -1
- package/dist/types/tools/memory-render.d.ts +4 -1
- package/dist/types/tools/memory-retain.d.ts +1 -1
- package/dist/types/tools/path-utils.d.ts +17 -5
- package/dist/types/tools/plan-mode-guard.d.ts +18 -9
- package/dist/types/tools/read.d.ts +3 -2
- package/dist/types/tools/render-mermaid.d.ts +1 -1
- package/dist/types/tools/render-utils.d.ts +47 -27
- package/dist/types/tools/renderers.d.ts +10 -2
- package/dist/types/tools/report-tool-issue.d.ts +6 -1
- package/dist/types/tools/resolve.d.ts +1 -1
- package/dist/types/tools/review.d.ts +1 -1
- package/dist/types/tools/search-tool-bm25.d.ts +1 -1
- package/dist/types/tools/search.d.ts +7 -3
- package/dist/types/tools/sqlite-reader.d.ts +4 -0
- package/dist/types/tools/ssh.d.ts +2 -1
- package/dist/types/tools/todo.d.ts +7 -15
- package/dist/types/tools/tool-result.d.ts +2 -0
- package/dist/types/tools/tool-timeouts.d.ts +1 -1
- package/dist/types/tools/tts.d.ts +26 -1
- package/dist/types/tools/write.d.ts +6 -3
- package/dist/types/tools/yield.d.ts +8 -0
- package/dist/types/tts/downloader.d.ts +20 -0
- package/dist/types/tts/index.d.ts +8 -0
- package/dist/types/tts/models.d.ts +82 -0
- package/dist/types/tts/player.d.ts +32 -0
- package/dist/types/tts/runtime.d.ts +6 -0
- package/dist/types/tts/streaming-player.d.ts +41 -0
- package/dist/types/tts/tts-client.d.ts +93 -0
- package/dist/types/tts/tts-protocol.d.ts +95 -0
- package/dist/types/tts/tts-worker.d.ts +2 -0
- package/dist/types/tts/vocalizer.d.ts +41 -0
- package/dist/types/tts/wav.d.ts +8 -0
- package/dist/types/tui/code-cell.d.ts +0 -2
- package/dist/types/tui/hyperlink.d.ts +13 -7
- package/dist/types/tui/output-block.d.ts +16 -22
- package/dist/types/tui/status-line.d.ts +3 -0
- package/dist/types/utils/block-context.d.ts +35 -0
- package/dist/types/utils/changelog.d.ts +8 -0
- package/dist/types/utils/clipboard.d.ts +4 -3
- package/dist/types/utils/enhanced-paste.d.ts +20 -0
- package/dist/types/utils/file-mentions.d.ts +7 -0
- package/dist/types/utils/git.d.ts +22 -3
- package/dist/types/utils/image-loading.d.ts +30 -1
- package/dist/types/utils/session-color.d.ts +15 -3
- package/dist/types/utils/thinking-display.d.ts +17 -0
- package/dist/types/utils/title-generator.d.ts +3 -2
- package/dist/types/utils/tool-choice.d.ts +8 -0
- package/dist/types/utils/tools-manager.d.ts +2 -1
- package/dist/types/web/kagi.d.ts +2 -2
- package/dist/types/web/parallel.d.ts +3 -0
- package/dist/types/web/scrapers/github.d.ts +22 -0
- package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
- package/dist/types/web/scrapers/types.d.ts +12 -0
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/providers/anthropic.d.ts +2 -1
- package/dist/types/web/search/providers/base.d.ts +2 -1
- package/dist/types/web/search/providers/brave.d.ts +2 -1
- package/dist/types/web/search/providers/codex.d.ts +2 -1
- package/dist/types/web/search/providers/exa.d.ts +2 -1
- package/dist/types/web/search/providers/gemini.d.ts +10 -6
- package/dist/types/web/search/providers/jina.d.ts +7 -2
- package/dist/types/web/search/providers/kagi.d.ts +7 -2
- package/dist/types/web/search/providers/kimi.d.ts +7 -2
- package/dist/types/web/search/providers/parallel.d.ts +2 -1
- package/dist/types/web/search/providers/perplexity.d.ts +10 -2
- package/dist/types/web/search/providers/searxng.d.ts +2 -1
- package/dist/types/web/search/providers/synthetic.d.ts +7 -3
- package/dist/types/web/search/providers/tavily.d.ts +2 -1
- package/dist/types/web/search/providers/zai.d.ts +2 -1
- package/dist/types/web/search/types.d.ts +1 -1
- package/examples/extensions/api-demo.ts +2 -2
- package/package.json +41 -15
- package/scripts/bench-guard.ts +71 -0
- package/scripts/build-binary.ts +24 -25
- package/scripts/bundle-dist.ts +97 -0
- package/scripts/generate-share-viewer.ts +34 -0
- package/scripts/prometheus +42 -0
- package/scripts/prometheus.ts +20 -0
- package/src/async/index.ts +0 -1
- package/src/async/job-manager.ts +106 -3
- package/src/auto-thinking/classifier.ts +2 -1
- package/src/autolearn/controller.ts +139 -0
- package/src/autolearn/managed-skills.ts +257 -0
- package/src/autoresearch/dashboard.ts +1 -1
- package/src/autoresearch/prompt-setup.md +6 -6
- package/src/autoresearch/prompt.md +6 -6
- package/src/autoresearch/state.ts +1 -1
- package/src/autoresearch/storage.ts +2 -1
- package/src/autoresearch/tools/init-experiment.ts +1 -1
- package/src/autoresearch/tools/log-experiment.ts +1 -1
- package/src/autoresearch/tools/run-experiment.ts +1 -1
- package/src/autoresearch/tools/update-notes.ts +1 -1
- package/src/autoresearch/types.ts +1 -1
- package/src/capability/context-file.ts +0 -14
- package/src/capability/fs.ts +10 -0
- package/src/capability/index.ts +1 -6
- package/src/capability/mcp.ts +1 -0
- package/src/capability/rule-buckets.ts +4 -2
- package/src/capability/rule.ts +10 -1
- package/src/capability/types.ts +0 -4
- package/src/cli/args.ts +66 -13
- package/src/cli/auth-broker-cli.ts +6 -7
- package/src/cli/auth-gateway-cli.ts +8 -9
- package/src/cli/bench-cli.ts +437 -0
- package/src/cli/claude-trace-cli.ts +28 -50
- package/src/cli/completion-gen.ts +28 -28
- package/src/cli/dry-balance-cli.ts +56 -23
- package/src/cli/gallery-cli.ts +231 -0
- package/src/cli/gallery-fixtures/agentic.ts +407 -0
- package/src/cli/gallery-fixtures/codeintel.ts +187 -0
- package/src/cli/gallery-fixtures/edit.ts +194 -0
- package/src/cli/gallery-fixtures/fs.ts +220 -0
- package/src/cli/gallery-fixtures/index.ts +40 -0
- package/src/cli/gallery-fixtures/interaction.ts +49 -0
- package/src/cli/gallery-fixtures/memory.ts +81 -0
- package/src/cli/gallery-fixtures/misc.ts +250 -0
- package/src/cli/gallery-fixtures/search.ts +213 -0
- package/src/cli/gallery-fixtures/shell.ts +167 -0
- package/src/cli/gallery-fixtures/types.ts +57 -0
- package/src/cli/gallery-fixtures/web.ts +158 -0
- package/src/cli/gallery-screenshot.ts +279 -0
- package/src/cli/grievances-cli.ts +1 -1
- package/src/cli/list-models.ts +16 -174
- package/src/cli/models-cli.ts +429 -0
- package/src/cli/session-picker.ts +2 -1
- package/src/cli/setup-cli.ts +148 -47
- package/src/cli/setup-model-picker.ts +43 -0
- package/src/cli/startup-cwd.ts +68 -0
- package/src/cli/update-cli.ts +144 -272
- package/src/cli/usage-cli.ts +774 -0
- package/src/cli-commands.ts +36 -0
- package/src/cli.ts +141 -32
- package/src/collab/crypto.ts +63 -0
- package/src/collab/guest.ts +451 -0
- package/src/collab/host.ts +565 -0
- package/src/collab/protocol.ts +241 -0
- package/src/collab/relay-client.ts +216 -0
- package/src/commands/bench.ts +42 -0
- package/src/commands/complete.ts +1 -1
- package/src/commands/gallery.ts +52 -0
- package/src/commands/install.ts +1 -1
- package/src/commands/join.ts +39 -0
- package/src/commands/launch.ts +8 -4
- package/src/commands/models.ts +61 -0
- package/src/commands/read.ts +6 -3
- package/src/commands/say.ts +102 -0
- package/src/commands/setup.ts +1 -1
- package/src/commands/token.ts +89 -0
- package/src/commands/usage.ts +43 -0
- package/src/commit/agentic/agent.ts +2 -1
- package/src/commit/agentic/tools/analyze-file.ts +42 -20
- package/src/commit/agentic/tools/git-file-diff.ts +1 -1
- package/src/commit/agentic/tools/git-hunk.ts +1 -1
- package/src/commit/agentic/tools/git-overview.ts +1 -1
- package/src/commit/agentic/tools/propose-changelog.ts +1 -1
- package/src/commit/agentic/tools/propose-commit.ts +1 -1
- package/src/commit/agentic/tools/recent-commits.ts +1 -1
- package/src/commit/agentic/tools/schemas.ts +1 -1
- package/src/commit/agentic/tools/split-commit.ts +9 -2
- package/src/commit/analysis/conventional.ts +2 -2
- package/src/commit/analysis/summary.ts +3 -3
- package/src/commit/changelog/generate.ts +3 -3
- package/src/commit/changelog/index.ts +2 -2
- package/src/commit/map-reduce/index.ts +3 -3
- package/src/commit/map-reduce/map-phase.ts +2 -2
- package/src/commit/map-reduce/reduce-phase.ts +2 -2
- package/src/commit/model-selection.ts +35 -12
- package/src/commit/pipeline.ts +4 -4
- package/src/commit/shared-llm.ts +1 -1
- package/src/config/api-key-resolver.ts +67 -0
- package/src/config/append-only-context-mode.ts +6 -12
- package/src/config/keybindings.ts +9 -4
- package/src/config/mcp-schema.json +4 -0
- package/src/config/model-discovery.ts +574 -0
- package/src/config/model-equivalence.ts +5 -4
- package/src/config/model-registry.ts +659 -1093
- package/src/config/model-resolver.ts +374 -174
- package/src/config/model-roles.ts +88 -0
- package/src/config/models-config-schema.ts +61 -9
- package/src/config/models-config.ts +130 -0
- package/src/config/settings-schema.ts +1441 -387
- package/src/config/settings.ts +261 -69
- package/src/dap/client.ts +138 -53
- package/src/dap/config.ts +41 -2
- package/src/dap/defaults.json +1 -0
- package/src/dap/session.ts +263 -161
- package/src/dap/types.ts +10 -0
- package/src/debug/index.ts +50 -60
- package/src/debug/log-viewer.ts +1 -1
- package/src/debug/protocol-probe.ts +1 -1
- package/src/debug/raw-sse-buffer.ts +7 -4
- package/src/debug/raw-sse.ts +1 -1
- package/src/debug/report-bundle.ts +9 -0
- package/src/debug/terminal-info.ts +0 -3
- package/src/discovery/agents-md.ts +25 -21
- package/src/discovery/agents.ts +9 -15
- package/src/discovery/at-imports.ts +273 -0
- package/src/discovery/builtin-rules/index.ts +4 -0
- package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
- package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
- package/src/discovery/builtin.ts +45 -23
- package/src/discovery/claude-plugins.ts +44 -5
- package/src/discovery/helpers.ts +50 -9
- package/src/discovery/prometheus-extension-roots.ts +10 -10
- package/src/discovery/prometheus-plugins.ts +10 -10
- package/src/edit/diff.ts +191 -4
- package/src/edit/file-snapshot-store.ts +34 -1
- package/src/edit/hashline/block-resolver.ts +20 -1
- package/src/edit/hashline/diff.ts +123 -2
- package/src/edit/hashline/execute.ts +60 -4
- package/src/edit/hashline/filesystem.ts +2 -1
- package/src/edit/hashline/noop-loop-guard.ts +99 -0
- package/src/edit/hashline/params.ts +1 -1
- package/src/edit/index.ts +47 -18
- package/src/edit/modes/apply-patch.ts +1 -1
- package/src/edit/modes/patch.ts +59 -3
- package/src/edit/modes/replace.ts +58 -24
- package/src/edit/notebook.ts +22 -2
- package/src/edit/renderer.ts +315 -151
- package/src/eval/__tests__/agent-bridge.test.ts +105 -39
- package/src/eval/__tests__/budget-bridge.test.ts +1 -1
- package/src/eval/__tests__/completion-bridge.test.ts +412 -0
- package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
- package/src/eval/__tests__/js-context-manager.test.ts +241 -0
- package/src/eval/__tests__/llm-bridge.test.ts +6 -4
- package/src/eval/__tests__/shared-executors.test.ts +34 -92
- package/src/eval/agent-bridge.ts +39 -23
- package/src/eval/backend.ts +15 -2
- package/src/eval/bridge-timeout.ts +1 -1
- package/src/eval/completion-bridge.ts +203 -0
- package/src/eval/idle-timeout.ts +3 -10
- package/src/eval/js/context-manager.ts +108 -31
- package/src/eval/js/executor.ts +9 -2
- package/src/eval/js/index.ts +7 -3
- package/src/eval/js/shared/helpers.ts +59 -13
- package/src/eval/js/shared/local-module-loader.ts +2 -2
- package/src/eval/js/shared/prelude.txt +167 -30
- package/src/eval/js/shared/rewrite-imports.ts +58 -34
- package/src/eval/js/shared/runtime.ts +24 -16
- package/src/eval/js/tool-bridge.ts +4 -0
- package/src/eval/js/worker-core.ts +1 -0
- package/src/eval/js/worker-entry.ts +6 -0
- package/src/eval/js/worker-protocol.ts +6 -0
- package/src/eval/llm-bridge.ts +2 -1
- package/src/eval/py/__tests__/prelude.test.ts +19 -0
- package/src/eval/py/executor.ts +70 -26
- package/src/eval/py/index.ts +13 -4
- package/src/eval/py/kernel.ts +48 -9
- package/src/eval/py/prelude.py +73 -24
- package/src/eval/py/runner.py +133 -28
- package/src/eval/py/runtime.ts +38 -1
- package/src/exa/index.ts +1 -26
- package/src/exa/mcp-client.ts +10 -10
- package/src/exa/types.ts +0 -97
- package/src/exec/bash-executor.ts +104 -7
- package/src/export/custom-share.ts +1 -1
- package/src/export/html/index.ts +119 -17
- package/src/export/html/share-loader.js +102 -0
- package/src/export/html/template-js.ts +6 -0
- package/src/export/html/template.css +745 -459
- package/src/export/html/template.css.d.ts +2 -0
- package/src/export/html/template.html +6 -3
- package/src/export/html/template.js +277 -891
- package/src/export/html/tool-views.generated.d.ts +2 -0
- package/src/export/html/tool-views.generated.js +38 -0
- package/src/export/share.ts +269 -0
- package/src/export/ttsr.ts +122 -1
- package/src/extensibility/custom-commands/loader.ts +7 -4
- package/src/extensibility/custom-commands/types.ts +9 -4
- package/src/extensibility/custom-tools/loader.ts +51 -23
- package/src/extensibility/custom-tools/types.ts +16 -8
- package/src/extensibility/extensions/get-commands-handler.ts +2 -1
- package/src/extensibility/extensions/index.ts +1 -0
- package/src/extensibility/extensions/loader.ts +70 -20
- package/src/extensibility/extensions/model-api.ts +41 -0
- package/src/extensibility/extensions/runner.ts +12 -2
- package/src/extensibility/extensions/types.ts +83 -11
- package/src/extensibility/extensions/wrapper.ts +41 -5
- package/src/extensibility/hooks/index.ts +2 -1
- package/src/extensibility/hooks/loader.ts +6 -3
- package/src/extensibility/hooks/types.ts +11 -5
- package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
- package/src/extensibility/plugins/doctor.ts +1 -2
- package/src/extensibility/plugins/installer.ts +2 -2
- package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
- package/src/extensibility/plugins/loader.ts +34 -23
- package/src/extensibility/plugins/manager.ts +226 -95
- package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
- package/src/extensibility/plugins/types.ts +3 -3
- package/src/extensibility/shared-events.ts +3 -3
- package/src/extensibility/skills.ts +113 -9
- package/src/extensibility/slash-commands.ts +1 -97
- package/src/goals/guided-setup.ts +133 -0
- package/src/goals/state.ts +1 -1
- package/src/goals/tools/goal-tool.ts +38 -28
- package/src/hindsight/bank.ts +17 -2
- package/src/hindsight/client.ts +27 -2
- package/src/hindsight/mental-models.ts +59 -12
- package/src/hindsight/state.ts +12 -3
- package/src/hindsight/transcript.ts +1 -1
- package/src/index.ts +5 -0
- package/src/internal-urls/artifact-protocol.ts +11 -2
- package/src/internal-urls/docs-index.generated.ts +9 -7
- package/src/internal-urls/history-protocol.ts +113 -0
- package/src/internal-urls/index.ts +1 -0
- package/src/internal-urls/issue-pr-protocol.ts +22 -9
- package/src/internal-urls/local-protocol.ts +42 -7
- package/src/internal-urls/memory-protocol.ts +4 -31
- package/src/internal-urls/router.ts +3 -1
- package/src/internal-urls/types.ts +1 -1
- package/src/irc/bus.ts +303 -0
- package/src/lib/xai-http.ts +3 -3
- package/src/lsp/client.ts +245 -104
- package/src/lsp/clients/biome-client.ts +101 -39
- package/src/lsp/clients/lsp-linter-client.ts +2 -10
- package/src/lsp/config.ts +15 -5
- package/src/lsp/defaults.json +6 -0
- package/src/lsp/edits.ts +143 -95
- package/src/lsp/format-options.ts +119 -0
- package/src/lsp/index.ts +233 -93
- package/src/lsp/render.ts +11 -35
- package/src/lsp/types.ts +13 -1
- package/src/lsp/utils.ts +31 -12
- package/src/main.ts +396 -216
- package/src/mcp/config-writer.ts +7 -3
- package/src/mcp/json-rpc.ts +35 -5
- package/src/mcp/manager.ts +31 -16
- package/src/mcp/oauth-discovery.ts +34 -4
- package/src/mcp/oauth-flow.ts +61 -8
- package/src/mcp/render.ts +7 -1
- package/src/mcp/startup-events.ts +21 -0
- package/src/mcp/tool-bridge.ts +2 -0
- package/src/mcp/transports/stdio.ts +224 -4
- package/src/mcp/types.ts +2 -0
- package/src/memories/index.ts +174 -1128
- package/src/memories/storage.ts +2 -41
- package/src/memory-backend/index.ts +14 -1
- package/src/memory-backend/local-backend.ts +18 -3
- package/src/memory-backend/off-backend.ts +9 -0
- package/src/memory-backend/resolve.ts +4 -6
- package/src/memory-backend/runtime.ts +66 -0
- package/src/memory-backend/types.ts +82 -2
- package/src/mnemopi/backend.ts +220 -28
- package/src/mnemopi/config.ts +138 -33
- package/src/mnemopi/state.ts +91 -11
- package/src/modes/acp/acp-agent.ts +149 -142
- package/src/modes/acp/acp-event-mapper.ts +5 -1
- package/src/modes/components/agent-dashboard.ts +17 -11
- package/src/modes/components/agent-hub.ts +1346 -0
- package/src/modes/components/assistant-message.ts +190 -80
- package/src/modes/components/bash-execution.ts +1 -1
- package/src/modes/components/btw-panel.ts +5 -1
- package/src/modes/components/chat-block.ts +111 -0
- package/src/modes/components/collab-prompt-message.ts +30 -0
- package/src/modes/components/compaction-summary-message.ts +168 -33
- package/src/modes/components/copy-selector.ts +2 -45
- package/src/modes/components/custom-editor.test.ts +96 -0
- package/src/modes/components/custom-editor.ts +405 -118
- package/src/modes/components/custom-message.ts +1 -3
- package/src/modes/components/diff.ts +13 -2
- package/src/modes/components/dynamic-border.ts +12 -3
- package/src/modes/components/execution-shared.ts +1 -2
- package/src/modes/components/extensions/extension-dashboard.ts +8 -5
- package/src/modes/components/extensions/extension-list.ts +1 -1
- package/src/modes/components/extensions/inspector-panel.ts +7 -3
- package/src/modes/components/extensions/state-manager.ts +36 -41
- package/src/modes/components/footer.ts +4 -2
- package/src/modes/components/history-search.ts +1 -1
- package/src/modes/components/hook-editor.ts +8 -0
- package/src/modes/components/hook-input.ts +8 -0
- package/src/modes/components/hook-message.ts +1 -3
- package/src/modes/components/hook-selector.ts +6 -7
- package/src/modes/components/index.ts +1 -0
- package/src/modes/components/late-diagnostics-message.ts +60 -0
- package/src/modes/components/login-dialog.ts +1 -1
- package/src/modes/components/logout-account-selector.ts +130 -0
- package/src/modes/components/mcp-add-wizard.ts +14 -1
- package/src/modes/components/model-selector.ts +177 -75
- package/src/modes/components/oauth-selector.ts +102 -16
- package/src/modes/components/overlay-box.ts +108 -0
- package/src/modes/components/plan-review-overlay.ts +845 -0
- package/src/modes/components/plan-toc.ts +138 -0
- package/src/modes/components/plugin-settings.ts +22 -5
- package/src/modes/components/read-tool-group.ts +442 -39
- package/src/modes/components/reset-usage-selector.ts +161 -0
- package/src/modes/components/segment-track.ts +44 -7
- package/src/modes/components/session-selector.ts +97 -37
- package/src/modes/components/settings-defs.ts +28 -6
- package/src/modes/components/settings-selector.ts +541 -93
- package/src/modes/components/skill-message.ts +0 -1
- package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
- package/src/modes/components/snapcompact-shape-preview.ts +193 -0
- package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
- package/src/modes/components/status-line/index.ts +1 -0
- package/src/modes/components/status-line/presets.ts +3 -3
- package/src/modes/components/status-line/segments.ts +26 -7
- package/src/modes/components/status-line/types.ts +40 -9
- package/src/modes/components/tiny-title-download-progress.ts +1 -1
- package/src/modes/components/tips.txt +7 -3
- package/src/modes/components/todo-reminder.ts +0 -2
- package/src/modes/components/tool-execution.ts +236 -103
- package/src/modes/components/transcript-container.ts +724 -99
- package/src/modes/components/tree-selector.ts +19 -4
- package/src/modes/components/ttsr-notification.ts +72 -30
- package/src/modes/components/usage-row.ts +18 -0
- package/src/modes/components/user-message-selector.ts +1 -1
- package/src/modes/components/user-message.ts +28 -12
- package/src/modes/components/visual-truncate.ts +1 -1
- package/src/modes/components/welcome.ts +80 -22
- package/src/modes/controllers/command-controller-shared.ts +7 -6
- package/src/modes/controllers/command-controller.ts +210 -180
- package/src/modes/controllers/event-controller.ts +352 -142
- package/src/modes/controllers/extension-ui-controller.ts +167 -208
- package/src/modes/controllers/input-controller.ts +778 -162
- package/src/modes/controllers/mcp-command-controller.ts +232 -80
- package/src/modes/controllers/selector-controller.ts +284 -145
- package/src/modes/controllers/session-focus-controller.ts +112 -0
- package/src/modes/controllers/ssh-command-controller.ts +2 -2
- package/src/modes/controllers/streaming-reveal.ts +295 -0
- package/src/modes/controllers/tan-command-controller.ts +173 -0
- package/src/modes/controllers/tool-args-reveal.ts +174 -0
- package/src/modes/gradient-highlight.ts +21 -9
- package/src/modes/image-references.ts +33 -7
- package/src/modes/index.ts +8 -25
- package/src/modes/interactive-mode.ts +840 -186
- package/src/modes/magic-keywords.ts +28 -6
- package/src/modes/markdown-prose.ts +1 -1
- package/src/modes/oauth-manual-input.ts +30 -3
- package/src/modes/rpc/rpc-client.ts +186 -3
- package/src/modes/rpc/rpc-mode.ts +318 -24
- package/src/modes/rpc/rpc-subagents.ts +265 -0
- package/src/modes/rpc/rpc-types.ts +111 -2
- package/src/modes/runtime-init.ts +28 -3
- package/src/modes/session-observer-registry.ts +72 -3
- package/src/modes/setup-version.ts +11 -0
- package/src/modes/setup-wizard/index.ts +16 -4
- package/src/modes/setup-wizard/lazy.ts +16 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
- package/src/modes/setup-wizard/scenes/providers.ts +45 -12
- package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
- package/src/modes/setup-wizard/scenes/splash.ts +1 -1
- package/src/modes/setup-wizard/scenes/theme.ts +29 -2
- package/src/modes/setup-wizard/scenes/types.ts +11 -2
- package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
- package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
- package/src/modes/shared.ts +2 -0
- package/src/modes/theme/defaults/dark-poimandres.json +1 -1
- package/src/modes/theme/defaults/light-poimandres.json +1 -1
- package/src/modes/theme/shimmer.ts +20 -9
- package/src/modes/theme/theme-schema.json +1 -1
- package/src/modes/theme/theme.ts +342 -82
- package/src/modes/types.ts +60 -18
- package/src/modes/utils/context-usage.ts +88 -8
- package/src/modes/utils/copy-targets.ts +133 -27
- package/src/modes/utils/hotkeys-markdown.ts +3 -2
- package/src/modes/utils/ui-helpers.ts +191 -110
- package/src/modes/workflow.ts +10 -10
- package/src/plan-mode/approved-plan.ts +66 -43
- package/src/plan-mode/plan-protection.ts +4 -4
- package/src/priority.json +5 -1
- package/src/prompts/agents/designer.md +1 -1
- package/src/prompts/agents/explore.md +3 -3
- package/src/prompts/agents/librarian.md +2 -3
- package/src/prompts/agents/oracle.md +2 -2
- package/src/prompts/agents/plan.md +6 -6
- package/src/prompts/agents/reviewer.md +1 -1
- package/src/prompts/agents/task.md +6 -5
- package/src/prompts/bench.md +12 -0
- package/src/prompts/ci-green-request.md +5 -7
- package/src/prompts/goals/goal-budget-limit.md +2 -2
- package/src/prompts/goals/goal-continuation.md +4 -4
- package/src/prompts/goals/goal-mode-active.md +1 -1
- package/src/prompts/goals/guided-goal-interview.md +8 -0
- package/src/prompts/goals/guided-goal-system.md +12 -0
- package/src/prompts/memories/consolidation.md +2 -7
- package/src/prompts/memories/consolidation_system.md +4 -0
- package/src/prompts/memories/identity_review.md +2 -2
- package/src/prompts/memories/read-path.md +11 -10
- package/src/prompts/memories/stage_one_system.md +2 -2
- package/src/prompts/review-custom-request.md +1 -1
- package/src/prompts/system/agent-creation-architect.md +2 -2
- package/src/prompts/system/auto-continue.md +1 -1
- package/src/prompts/system/autolearn-guidance-learn.md +1 -0
- package/src/prompts/system/autolearn-guidance.md +7 -0
- package/src/prompts/system/autolearn-nudge.md +3 -0
- package/src/prompts/system/background-tan-dispatch.md +8 -0
- package/src/prompts/system/btw-user.md +2 -2
- package/src/prompts/system/commit-message-system.md +13 -1
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/eager-task.md +7 -0
- package/src/prompts/system/eager-todo.md +11 -6
- package/src/prompts/system/empty-stop-retry.md +4 -6
- package/src/prompts/system/irc-autoreply.md +6 -0
- package/src/prompts/system/irc-incoming.md +3 -4
- package/src/prompts/system/manual-continue.md +7 -0
- package/src/prompts/system/omfg-user.md +3 -4
- package/src/prompts/system/orchestrate-notice.md +10 -10
- package/src/prompts/system/personalities/default.md +26 -0
- package/src/prompts/system/personalities/friendly.md +17 -0
- package/src/prompts/system/personalities/pragmatic.md +15 -0
- package/src/prompts/system/plan-mode-active.md +70 -77
- package/src/prompts/system/plan-mode-approved.md +1 -1
- package/src/prompts/system/plan-mode-subagent.md +4 -5
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
- package/src/prompts/system/project-prompt.md +2 -2
- package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-context-stub.md +1 -0
- package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-system-stub.md +1 -0
- package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
- package/src/prompts/system/subagent-system-prompt.md +7 -8
- package/src/prompts/system/system-prompt.md +28 -57
- package/src/prompts/system/tiny-title-system.md +1 -1
- package/src/prompts/system/title-marker-instruction.md +1 -0
- package/src/prompts/system/title-system-marker.md +16 -0
- package/src/prompts/system/title-system.md +16 -3
- package/src/prompts/system/ttsr-tool-reminder.md +1 -1
- package/src/prompts/system/workflow-notice.md +4 -4
- package/src/prompts/tools/ast-edit.md +1 -1
- package/src/prompts/tools/ast-grep.md +2 -2
- package/src/prompts/tools/bash.md +16 -8
- package/src/prompts/tools/browser.md +33 -43
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/eval.md +31 -51
- package/src/prompts/tools/find.md +0 -1
- package/src/prompts/tools/github.md +8 -7
- package/src/prompts/tools/goal.md +1 -1
- package/src/prompts/tools/image-gen.md +1 -1
- package/src/prompts/tools/inspect-image-system.md +1 -1
- package/src/prompts/tools/irc.md +39 -31
- package/src/prompts/tools/job.md +2 -1
- package/src/prompts/tools/learn.md +7 -0
- package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
- package/src/prompts/tools/lsp.md +2 -2
- package/src/prompts/tools/manage-skill.md +9 -0
- package/src/prompts/tools/memory-edit.md +1 -1
- package/src/prompts/tools/patch.md +2 -2
- package/src/prompts/tools/read.md +31 -39
- package/src/prompts/tools/recall.md +1 -1
- package/src/prompts/tools/reflect.md +1 -1
- package/src/prompts/tools/render-mermaid.md +2 -2
- package/src/prompts/tools/replace.md +4 -10
- package/src/prompts/tools/rewind.md +2 -2
- package/src/prompts/tools/search-tool-bm25.md +1 -9
- package/src/prompts/tools/search.md +0 -1
- package/src/prompts/tools/ssh.md +0 -4
- package/src/prompts/tools/task-summary.md +5 -16
- package/src/prompts/tools/task.md +47 -31
- package/src/prompts/tools/todo.md +6 -3
- package/src/registry/agent-lifecycle.ts +218 -0
- package/src/registry/agent-registry.ts +46 -5
- package/src/sdk.ts +692 -219
- package/src/secrets/index.ts +8 -1
- package/src/secrets/obfuscator.ts +40 -19
- package/src/session/agent-session.ts +1577 -806
- package/src/session/agent-storage.ts +18 -9
- package/src/session/auth-broker-config.ts +30 -1
- package/src/session/auth-storage.ts +6 -0
- package/src/session/codex-auto-reset.ts +202 -0
- package/src/session/history-storage.ts +3 -2
- package/src/session/indexed-session-storage.ts +7 -10
- package/src/session/messages.ts +59 -95
- package/src/session/session-context.ts +352 -0
- package/src/session/session-dump-format.ts +12 -3
- package/src/session/session-entries.ts +194 -0
- package/src/session/session-history-format.ts +246 -0
- package/src/session/session-listing.ts +588 -0
- package/src/session/session-loader.ts +106 -0
- package/src/session/session-manager.ts +1003 -2920
- package/src/session/session-migrations.ts +78 -0
- package/src/session/session-paths.ts +193 -0
- package/src/session/session-persistence.ts +131 -0
- package/src/session/session-storage.ts +91 -30
- package/src/session/snapcompact-inline.ts +542 -0
- package/src/session/snapcompact-savings-journal.ts +113 -0
- package/src/session/streaming-output.ts +248 -11
- package/src/session/tool-choice-queue.ts +23 -11
- package/src/session/yield-queue.ts +20 -2
- package/src/slash-commands/acp-builtins.ts +25 -1
- package/src/slash-commands/available-commands.ts +105 -0
- package/src/slash-commands/builtin-registry.ts +575 -49
- package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
- package/src/slash-commands/helpers/context-report.ts +28 -1
- package/src/slash-commands/helpers/logout.ts +88 -0
- package/src/slash-commands/helpers/reset-usage.ts +66 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/slash-commands/helpers/usage-report.ts +38 -3
- package/src/slash-commands/types.ts +5 -9
- package/src/ssh/connection-manager.ts +27 -0
- package/src/ssh/ssh-executor.ts +60 -4
- package/src/stt/asr-client.ts +520 -0
- package/src/stt/asr-protocol.ts +65 -0
- package/src/stt/asr-worker.ts +790 -0
- package/src/stt/downloader.ts +107 -47
- package/src/stt/endpointer.ts +259 -0
- package/src/stt/index.ts +5 -1
- package/src/stt/models.ts +150 -0
- package/src/stt/recorder.ts +254 -67
- package/src/stt/stt-controller.ts +201 -22
- package/src/stt/transcriber.ts +37 -68
- package/src/stt/wav.ts +173 -0
- package/src/system-prompt.ts +52 -10
- package/src/task/agents.ts +3 -4
- package/src/task/commands.ts +3 -2
- package/src/task/discovery.ts +17 -24
- package/src/task/executor.ts +1054 -529
- package/src/task/index.ts +862 -757
- package/src/task/output-manager.ts +0 -11
- package/src/task/parallel.ts +3 -3
- package/src/task/prometheus-command.ts +2 -2
- package/src/task/render.ts +529 -182
- package/src/task/repair-args.ts +21 -9
- package/src/task/types.ts +144 -66
- package/src/task/worktree.ts +64 -56
- package/src/telemetry-export.ts +27 -9
- package/src/thinking.ts +9 -7
- package/src/tiny/models.ts +2 -2
- package/src/tiny/text.ts +5 -1
- package/src/tiny/title-client.ts +72 -20
- package/src/tiny/title-protocol.ts +1 -1
- package/src/tiny/worker.ts +23 -99
- package/src/tool-discovery/tool-index.ts +2 -0
- package/src/tools/archive-reader.ts +94 -2
- package/src/tools/ask.ts +234 -177
- package/src/tools/ast-edit.ts +136 -80
- package/src/tools/ast-grep.ts +41 -45
- package/src/tools/auto-generated-guard.ts +20 -3
- package/src/tools/bash-interactive.ts +28 -8
- package/src/tools/bash.ts +198 -35
- package/src/tools/browser/attach.ts +26 -7
- package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
- package/src/tools/browser/cmux/rpc.ts +156 -0
- package/src/tools/browser/cmux/socket-client.ts +309 -0
- package/src/tools/browser/launch.ts +11 -2
- package/src/tools/browser/readable.ts +19 -2
- package/src/tools/browser/registry.ts +52 -5
- package/src/tools/browser/render.ts +13 -5
- package/src/tools/browser/tab-protocol.ts +2 -0
- package/src/tools/browser/tab-supervisor.ts +256 -34
- package/src/tools/browser/tab-worker.ts +259 -91
- package/src/tools/browser.ts +44 -2
- package/src/tools/checkpoint.ts +1 -1
- package/src/tools/conflict-detect.ts +50 -4
- package/src/tools/debug.ts +27 -12
- package/src/tools/eval-render.ts +32 -35
- package/src/tools/eval.ts +26 -12
- package/src/tools/fetch.ts +450 -99
- package/src/tools/find.ts +182 -142
- package/src/tools/gh-cache-invalidation.ts +255 -0
- package/src/tools/gh-renderer.ts +104 -51
- package/src/tools/gh.ts +232 -37
- package/src/tools/github-cache.ts +97 -7
- package/src/tools/grouped-file-output.ts +159 -52
- package/src/tools/image-gen.ts +237 -132
- package/src/tools/index.ts +147 -26
- package/src/tools/inspect-image-renderer.ts +74 -45
- package/src/tools/inspect-image.ts +12 -6
- package/src/tools/irc.ts +626 -173
- package/src/tools/job.ts +106 -29
- package/src/tools/learn.ts +144 -0
- package/src/tools/manage-skill.ts +104 -0
- package/src/tools/memory-edit.ts +4 -4
- package/src/tools/memory-recall.ts +7 -9
- package/src/tools/memory-reflect.ts +5 -9
- package/src/tools/memory-render.ts +23 -6
- package/src/tools/memory-retain.ts +4 -4
- package/src/tools/path-utils.ts +102 -48
- package/src/tools/plan-mode-guard.ts +101 -40
- package/src/tools/read.ts +475 -120
- package/src/tools/render-mermaid.ts +1 -1
- package/src/tools/render-utils.ts +132 -76
- package/src/tools/renderers.ts +12 -1
- package/src/tools/report-tool-issue.ts +14 -6
- package/src/tools/resolve.ts +20 -3
- package/src/tools/review.ts +2 -2
- package/src/tools/search-tool-bm25.ts +37 -24
- package/src/tools/search.ts +233 -115
- package/src/tools/sqlite-reader.ts +26 -17
- package/src/tools/ssh.ts +20 -14
- package/src/tools/todo.ts +197 -191
- package/src/tools/tool-result.ts +8 -0
- package/src/tools/tool-timeouts.ts +1 -1
- package/src/tools/tts.ts +205 -74
- package/src/tools/write.ts +291 -155
- package/src/tools/yield.ts +10 -1
- package/src/tts/downloader.ts +64 -0
- package/src/tts/index.ts +8 -0
- package/src/tts/models.ts +137 -0
- package/src/tts/player.ts +137 -0
- package/src/tts/runtime.ts +21 -0
- package/src/tts/streaming-player.ts +266 -0
- package/src/tts/tts-client.ts +647 -0
- package/src/tts/tts-protocol.ts +60 -0
- package/src/tts/tts-worker.ts +505 -0
- package/src/tts/vocalizer.ts +162 -0
- package/src/tts/wav.ts +58 -0
- package/src/tui/code-cell.ts +2 -7
- package/src/tui/hyperlink.ts +40 -26
- package/src/tui/output-block.ts +60 -108
- package/src/tui/status-line.ts +5 -1
- package/src/utils/block-context.ts +312 -0
- package/src/utils/changelog.ts +27 -1
- package/src/utils/clipboard.ts +91 -22
- package/src/utils/commit-message-generator.ts +8 -3
- package/src/utils/enhanced-paste.ts +230 -0
- package/src/utils/file-mentions.ts +3 -1
- package/src/utils/git.ts +315 -15
- package/src/utils/image-loading.ts +65 -4
- package/src/utils/session-color.ts +83 -9
- package/src/utils/thinking-display.ts +37 -0
- package/src/utils/title-generator.ts +73 -10
- package/src/utils/tool-choice.ts +16 -0
- package/src/utils/tools-manager.ts +19 -1
- package/src/web/kagi.ts +28 -26
- package/src/web/parallel.ts +7 -3
- package/src/web/scrapers/arxiv.ts +1 -1
- package/src/web/scrapers/github.ts +351 -3
- package/src/web/scrapers/go-pkg.ts +1 -1
- package/src/web/scrapers/iacr.ts +1 -1
- package/src/web/scrapers/readthedocs.ts +1 -1
- package/src/web/scrapers/twitter.ts +2 -1
- package/src/web/scrapers/types.ts +87 -8
- package/src/web/scrapers/wikipedia.ts +1 -1
- package/src/web/scrapers/youtube.ts +9 -3
- package/src/web/search/index.ts +15 -2
- package/src/web/search/providers/anthropic.ts +62 -21
- package/src/web/search/providers/base.ts +2 -1
- package/src/web/search/providers/brave.ts +5 -2
- package/src/web/search/providers/codex.ts +87 -51
- package/src/web/search/providers/exa.ts +101 -10
- package/src/web/search/providers/gemini.ts +49 -24
- package/src/web/search/providers/jina.ts +15 -5
- package/src/web/search/providers/kagi.ts +9 -2
- package/src/web/search/providers/kimi.ts +45 -20
- package/src/web/search/providers/parallel.ts +39 -24
- package/src/web/search/providers/perplexity.ts +226 -63
- package/src/web/search/providers/searxng.ts +19 -3
- package/src/web/search/providers/synthetic.ts +16 -11
- package/src/web/search/providers/tavily.ts +12 -9
- package/src/web/search/providers/zai.ts +22 -9
- package/src/web/search/render.ts +59 -64
- package/src/web/search/types.ts +5 -1
- package/dist/types/discovery/context-files.d.ts +0 -17
- package/dist/types/exa/factory.d.ts +0 -13
- 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/websets.d.ts +0 -9
- package/dist/types/export/html/template.generated.d.ts +0 -1
- package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
- package/dist/types/modes/components/status-line.d.ts +0 -77
- package/dist/types/slash-commands/headless-plan.d.ts +0 -3
- package/dist/types/stt/setup.d.ts +0 -18
- package/scripts/generate-template.ts +0 -33
- package/src/discovery/context-files.ts +0 -49
- package/src/exa/factory.ts +0 -60
- package/src/exa/render.ts +0 -244
- package/src/exa/researcher.ts +0 -36
- package/src/exa/search.ts +0 -47
- package/src/exa/websets.ts +0 -248
- package/src/export/html/template.generated.ts +0 -2
- package/src/modes/components/session-observer-overlay.ts +0 -852
- package/src/slash-commands/headless-plan.ts +0 -142
- package/src/stt/setup.ts +0 -52
- package/src/stt/transcribe.py +0 -70
- /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
- /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
|
@@ -1,27 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Model resolution, scoping, and initial selection
|
|
2
|
+
* Model resolution, scoping, and initial selection.
|
|
3
|
+
*
|
|
4
|
+
* Layering:
|
|
5
|
+
* - `matchModel` is the single matching engine. Order: exact `provider/id`
|
|
6
|
+
* reference (with variant-alias and OpenRouter routed/date fallbacks) →
|
|
7
|
+
* exact canonical id → exact bare id → retired variant alias →
|
|
8
|
+
* provider-scoped fuzzy → substring with alias-vs-dated pick.
|
|
9
|
+
* - `parseModelPatternWithContext`/`parseModelPattern` layer the selector
|
|
10
|
+
* grammar on top: trailing `:level` thinking suffixes (`splitThinkingSuffix`)
|
|
11
|
+
* and `@upstream` provider routing (`splitUpstreamRouting`).
|
|
12
|
+
* - Everything else (`resolveModelFromString`, `resolveModelOverride*`,
|
|
13
|
+
* `resolveRoleSelection`, `resolveModelScope`, `resolveCliModel`,
|
|
14
|
+
* `findSmolModel`/`findSlowModel`) adapts inputs — roles, settings patterns,
|
|
15
|
+
* CLI flags, scope globs — onto that pipeline.
|
|
3
16
|
*/
|
|
4
17
|
|
|
5
18
|
import { ThinkingLevel } from "@prometheus-ai/agent-core";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
} from "@prometheus-ai/
|
|
19
|
+
import type { Api, Effort, KnownProvider, Model, ModelSpec } from "@prometheus-ai/ai";
|
|
20
|
+
import { buildModel } from "@prometheus-ai/catalog/build";
|
|
21
|
+
import { modelMatchesHost } from "@prometheus-ai/catalog/hosts";
|
|
22
|
+
import { buildModelProviderPriorityRank } from "@prometheus-ai/catalog/identity";
|
|
23
|
+
import { stripThinkingVariantToken } from "@prometheus-ai/catalog/identity/family";
|
|
24
|
+
import { clampThinkingLevelForModel } from "@prometheus-ai/catalog/model-thinking";
|
|
25
|
+
import { modelsAreEqual } from "@prometheus-ai/catalog/models";
|
|
26
|
+
import { DEFAULT_MODEL_PER_PROVIDER } from "@prometheus-ai/catalog/provider-models";
|
|
27
|
+
import { resolveBareVariantAlias, resolveVariantAlias } from "@prometheus-ai/catalog/variant-collapse";
|
|
15
28
|
import { fuzzyMatch } from "@prometheus-ai/tui";
|
|
16
29
|
import { logger } from "@prometheus-ai/utils";
|
|
17
30
|
import chalk from "chalk";
|
|
18
31
|
import MODEL_PRIO from "../priority.json" with { type: "json" };
|
|
19
32
|
import { parseThinkingLevel, resolveThinkingLevelForModel } from "../thinking";
|
|
20
|
-
import { isAuthenticated, kNoAuth,
|
|
33
|
+
import { isAuthenticated, kNoAuth, type ModelRegistry } from "./model-registry";
|
|
34
|
+
import { MODEL_ROLE_IDS, type ModelRole } from "./model-roles";
|
|
21
35
|
import type { Settings } from "./settings";
|
|
22
36
|
|
|
23
|
-
/**
|
|
24
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Pick the first available model matching a known provider's default id
|
|
39
|
+
* (catalog table order), falling back to the first available model.
|
|
40
|
+
*/
|
|
41
|
+
function pickDefaultAvailableModel(availableModels: Model<Api>[]): Model<Api> | undefined {
|
|
42
|
+
for (const provider of Object.keys(DEFAULT_MODEL_PER_PROVIDER) as KnownProvider[]) {
|
|
43
|
+
const defaultId = DEFAULT_MODEL_PER_PROVIDER[provider];
|
|
44
|
+
const match = availableModels.find(m => m.provider === provider && m.id === defaultId);
|
|
45
|
+
if (match) return match;
|
|
46
|
+
}
|
|
47
|
+
return availableModels[0];
|
|
48
|
+
}
|
|
25
49
|
|
|
26
50
|
export interface ScopedModel {
|
|
27
51
|
model: Model<Api>;
|
|
@@ -29,6 +53,22 @@ export interface ScopedModel {
|
|
|
29
53
|
explicitThinkingLevel: boolean;
|
|
30
54
|
}
|
|
31
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Split a trailing `:<level>` thinking selector off a model pattern.
|
|
58
|
+
*
|
|
59
|
+
* `level` is set only when the suffix parses as a valid thinking level, in
|
|
60
|
+
* which case `base` has the suffix stripped; otherwise `base` is the input.
|
|
61
|
+
* `minColonIndex` requires the colon to appear strictly after that index —
|
|
62
|
+
* role-alias callers pass `LEGACY_MODEL_ROLE_PREFIX.length` so the base is at
|
|
63
|
+
* least as long as the shortest role prefix.
|
|
64
|
+
*/
|
|
65
|
+
function splitThinkingSuffix(pattern: string, minColonIndex = -1): { base: string; level?: ThinkingLevel } {
|
|
66
|
+
const colonIdx = pattern.lastIndexOf(":");
|
|
67
|
+
if (colonIdx <= minColonIndex) return { base: pattern };
|
|
68
|
+
const level = parseThinkingLevel(pattern.slice(colonIdx + 1));
|
|
69
|
+
return level ? { base: pattern.slice(0, colonIdx), level } : { base: pattern };
|
|
70
|
+
}
|
|
71
|
+
|
|
32
72
|
/**
|
|
33
73
|
* Parse a model string in "provider/modelId" format.
|
|
34
74
|
* Returns undefined if the format is invalid.
|
|
@@ -41,15 +81,8 @@ export function parseModelString(
|
|
|
41
81
|
const id = modelStr.slice(slashIdx + 1);
|
|
42
82
|
const provider = modelStr.slice(0, slashIdx);
|
|
43
83
|
// Strip valid thinking level suffix (e.g., "claude-sonnet-4-6:high" -> id "claude-sonnet-4-6", thinkingLevel "high")
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
const suffix = id.slice(colonIdx + 1);
|
|
47
|
-
const thinkingLevel = parseThinkingLevel(suffix);
|
|
48
|
-
if (thinkingLevel) {
|
|
49
|
-
return { provider, id: id.slice(0, colonIdx), thinkingLevel };
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return { provider, id };
|
|
84
|
+
const { base, level } = splitThinkingSuffix(id);
|
|
85
|
+
return level ? { provider, id: base, thinkingLevel: level } : { provider, id };
|
|
53
86
|
}
|
|
54
87
|
|
|
55
88
|
/**
|
|
@@ -117,6 +150,45 @@ function cloneModelWithRequestedId(model: Model<Api>, requestedId: string): Mode
|
|
|
117
150
|
};
|
|
118
151
|
}
|
|
119
152
|
|
|
153
|
+
const UPSTREAM_ROUTING_SLUG = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Split a trailing `@<upstream>` provider-routing selector off a model pattern.
|
|
157
|
+
*
|
|
158
|
+
* `openrouter/z-ai/glm-4.7@cerebras` -> base `openrouter/z-ai/glm-4.7`, upstream
|
|
159
|
+
* `cerebras`. A `:thinking` suffix after the slug is kept on the base
|
|
160
|
+
* (`...@cerebras:high` -> base `...:high`). Returns undefined when there is no
|
|
161
|
+
* `@` or the suffix is not a bare provider slug, so model ids that legitimately
|
|
162
|
+
* contain `@` (`claude-opus-4-8@default`, `workers-ai/@cf/...`) are never split.
|
|
163
|
+
*/
|
|
164
|
+
function splitUpstreamRouting(pattern: string): { base: string; upstream: string } | undefined {
|
|
165
|
+
const at = pattern.lastIndexOf("@");
|
|
166
|
+
if (at <= 0) return undefined;
|
|
167
|
+
const rest = pattern.slice(at + 1);
|
|
168
|
+
const colon = rest.indexOf(":");
|
|
169
|
+
const upstream = colon === -1 ? rest : rest.slice(0, colon);
|
|
170
|
+
if (!UPSTREAM_ROUTING_SLUG.test(upstream)) return undefined;
|
|
171
|
+
const trailing = colon === -1 ? "" : rest.slice(colon);
|
|
172
|
+
return { base: pattern.slice(0, at) + trailing, upstream };
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** OpenRouter and Vercel AI Gateway are the aggregators that honor per-request upstream routing. */
|
|
176
|
+
function supportsUpstreamRouting(model: Model<Api>): boolean {
|
|
177
|
+
return modelMatchesHost(model, "openrouter") || modelMatchesHost(model, "vercelAIGateway");
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Pin a resolved aggregator model to a single upstream provider via its compat routing block. */
|
|
181
|
+
function applyUpstreamRouting(model: Model<Api>, upstream: string): Model<Api> {
|
|
182
|
+
const aggregatorModel = model as Model<"openai-completions">;
|
|
183
|
+
const routing = { only: [upstream] };
|
|
184
|
+
return buildModel({
|
|
185
|
+
...model,
|
|
186
|
+
compat: modelMatchesHost(model, "vercelAIGateway")
|
|
187
|
+
? { ...aggregatorModel.compatConfig, vercelGatewayRouting: routing }
|
|
188
|
+
: { ...aggregatorModel.compatConfig, openRouterRouting: routing },
|
|
189
|
+
} as ModelSpec<Api>);
|
|
190
|
+
}
|
|
191
|
+
|
|
120
192
|
const kProviderModelIndex = Symbol("model-resolver.providerIndex");
|
|
121
193
|
type ModelsWithProviderIndex = readonly Model<Api>[] & {
|
|
122
194
|
[kProviderModelIndex]?: Map<string, Model<Api> | null>;
|
|
@@ -159,6 +231,18 @@ export function resolveProviderModelReference(
|
|
|
159
231
|
return exact;
|
|
160
232
|
}
|
|
161
233
|
|
|
234
|
+
// Retired effort-tier variant ids resolve to their collapsed logical
|
|
235
|
+
// model: hand-table aliases first, then the `X-thinking` → `X` grammar
|
|
236
|
+
// for auto-derived pairs. Exact lookup above always wins while raw is live.
|
|
237
|
+
const variantAliasId =
|
|
238
|
+
resolveVariantAlias(normalizedProvider, normalizedModelId) ?? stripThinkingVariantToken(normalizedModelId);
|
|
239
|
+
if (variantAliasId) {
|
|
240
|
+
const aliased = index.get(`${normalizedProvider}\u0000${variantAliasId.toLowerCase()}`);
|
|
241
|
+
if (aliased) {
|
|
242
|
+
return aliased;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
162
246
|
if (normalizedProvider !== "openrouter") {
|
|
163
247
|
return undefined;
|
|
164
248
|
}
|
|
@@ -179,7 +263,9 @@ export function resolveProviderModelReference(
|
|
|
179
263
|
export interface ModelMatchPreferences {
|
|
180
264
|
/** Most-recently-used model keys (provider/modelId) to prefer when ambiguous. */
|
|
181
265
|
usageOrder?: string[];
|
|
182
|
-
/**
|
|
266
|
+
/** Provider precedence used for ambiguous unqualified model patterns. */
|
|
267
|
+
providerOrder?: readonly string[];
|
|
268
|
+
/** Providers to deprioritize when no recent usage or provider priority is available. */
|
|
183
269
|
deprioritizeProviders?: string[];
|
|
184
270
|
}
|
|
185
271
|
|
|
@@ -194,6 +280,7 @@ type RestorableModelRegistry = Pick<ModelRegistry, "getAvailable" | "find" | "ge
|
|
|
194
280
|
interface ModelPreferenceContext {
|
|
195
281
|
modelUsageRank: Map<string, number>;
|
|
196
282
|
providerUsageRank: Map<string, number>;
|
|
283
|
+
providerPriorityRank: Map<string, number>;
|
|
197
284
|
deprioritizedProviders: Set<string>;
|
|
198
285
|
modelOrder: Map<string, number>;
|
|
199
286
|
}
|
|
@@ -215,14 +302,35 @@ function buildPreferenceContext(
|
|
|
215
302
|
providerUsageRank.set(parsed.provider, i);
|
|
216
303
|
}
|
|
217
304
|
}
|
|
218
|
-
|
|
219
|
-
const deprioritizedProviders = new Set(preferences?.deprioritizeProviders ?? [
|
|
305
|
+
const providerPriorityRank = buildModelProviderPriorityRank(preferences?.providerOrder);
|
|
306
|
+
const deprioritizedProviders = new Set(preferences?.deprioritizeProviders ?? []);
|
|
220
307
|
const modelOrder = new Map<string, number>();
|
|
221
308
|
for (let i = 0; i < availableModels.length; i += 1) {
|
|
222
309
|
modelOrder.set(formatModelString(availableModels[i]), i);
|
|
223
310
|
}
|
|
224
311
|
|
|
225
|
-
return { modelUsageRank, providerUsageRank, deprioritizedProviders, modelOrder };
|
|
312
|
+
return { modelUsageRank, providerUsageRank, providerPriorityRank, deprioritizedProviders, modelOrder };
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export function getModelMatchPreferences(
|
|
316
|
+
settings?: Partial<Pick<Settings, "get" | "getStorage">>,
|
|
317
|
+
): ModelMatchPreferences {
|
|
318
|
+
return {
|
|
319
|
+
usageOrder: settings?.getStorage?.()?.getModelUsageOrder(),
|
|
320
|
+
providerOrder: settings?.get?.("modelProviderOrder"),
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function mergeModelMatchPreferences(
|
|
325
|
+
settings: Settings | undefined,
|
|
326
|
+
preferences: ModelMatchPreferences | undefined,
|
|
327
|
+
): ModelMatchPreferences {
|
|
328
|
+
const settingsPreferences = getModelMatchPreferences(settings);
|
|
329
|
+
return {
|
|
330
|
+
usageOrder: preferences?.usageOrder ?? settingsPreferences.usageOrder,
|
|
331
|
+
providerOrder: preferences?.providerOrder ?? settingsPreferences.providerOrder,
|
|
332
|
+
deprioritizeProviders: preferences?.deprioritizeProviders,
|
|
333
|
+
};
|
|
226
334
|
}
|
|
227
335
|
|
|
228
336
|
function pickPreferredModel(candidates: Model<Api>[], context: ModelPreferenceContext): Model<Api> {
|
|
@@ -236,6 +344,12 @@ function pickPreferredModel(candidates: Model<Api>[], context: ModelPreferenceCo
|
|
|
236
344
|
return (aUsage ?? Number.POSITIVE_INFINITY) - (bUsage ?? Number.POSITIVE_INFINITY);
|
|
237
345
|
}
|
|
238
346
|
|
|
347
|
+
const aProviderPriority = context.providerPriorityRank.get(a.provider.toLowerCase());
|
|
348
|
+
const bProviderPriority = context.providerPriorityRank.get(b.provider.toLowerCase());
|
|
349
|
+
if (aProviderPriority !== undefined || bProviderPriority !== undefined) {
|
|
350
|
+
return (aProviderPriority ?? Number.POSITIVE_INFINITY) - (bProviderPriority ?? Number.POSITIVE_INFINITY);
|
|
351
|
+
}
|
|
352
|
+
|
|
239
353
|
const aProviderUsage = context.providerUsageRank.get(a.provider);
|
|
240
354
|
const bProviderUsage = context.providerUsageRank.get(b.provider);
|
|
241
355
|
if (aProviderUsage !== undefined || bProviderUsage !== undefined) {
|
|
@@ -271,10 +385,7 @@ function isAlias(id: string): boolean {
|
|
|
271
385
|
* Find an exact explicit provider/model match.
|
|
272
386
|
* Bare model ids are handled separately so canonical ids can coalesce variants.
|
|
273
387
|
*/
|
|
274
|
-
|
|
275
|
-
modelReference: string,
|
|
276
|
-
availableModels: Model<Api>[],
|
|
277
|
-
): Model<Api> | undefined {
|
|
388
|
+
function findExactModelReferenceMatch(modelReference: string, availableModels: Model<Api>[]): Model<Api> | undefined {
|
|
278
389
|
const trimmedReference = modelReference.trim();
|
|
279
390
|
if (!trimmedReference) {
|
|
280
391
|
return undefined;
|
|
@@ -310,10 +421,17 @@ function findExactCanonicalModelMatch(
|
|
|
310
421
|
}
|
|
311
422
|
|
|
312
423
|
/**
|
|
313
|
-
*
|
|
424
|
+
* The single model-matching engine. Tries, in order:
|
|
425
|
+
* 1. exact `provider/id` reference (variant-alias and OpenRouter routed/date
|
|
426
|
+
* fallbacks included),
|
|
427
|
+
* 2. exact canonical id (coalesces provider variants),
|
|
428
|
+
* 3. exact bare id (preference-ranked),
|
|
429
|
+
* 4. retired effort-tier variant alias (collapsed catalog entries),
|
|
430
|
+
* 5. provider-scoped fuzzy match,
|
|
431
|
+
* 6. substring match with the alias-vs-dated pick.
|
|
314
432
|
* Returns the matched model or undefined if no match found.
|
|
315
433
|
*/
|
|
316
|
-
function
|
|
434
|
+
function matchModel(
|
|
317
435
|
modelPattern: string,
|
|
318
436
|
availableModels: Model<Api>[],
|
|
319
437
|
context: ModelPreferenceContext,
|
|
@@ -339,6 +457,20 @@ function tryMatchModel(
|
|
|
339
457
|
if (exactMatches.length > 0) {
|
|
340
458
|
return pickPreferredModel(exactMatches, context);
|
|
341
459
|
}
|
|
460
|
+
|
|
461
|
+
// Retired effort-tier variant ids (bare, no provider prefix) resolve to
|
|
462
|
+
// their collapsed logical model; models from the providers whose table
|
|
463
|
+
// declared the alias win ties. Auto-derived `X-thinking` pairs resolve
|
|
464
|
+
// through the grammar fallback.
|
|
465
|
+
const bareAlias = resolveBareVariantAlias(modelPattern);
|
|
466
|
+
const bareAliasTargetId = bareAlias?.id ?? stripThinkingVariantToken(modelPattern);
|
|
467
|
+
if (bareAliasTargetId) {
|
|
468
|
+
const aliasMatches = availableModels.filter(m => m.id.toLowerCase() === bareAliasTargetId.toLowerCase());
|
|
469
|
+
if (aliasMatches.length > 0) {
|
|
470
|
+
const preferred = bareAlias ? aliasMatches.filter(m => bareAlias.providers.includes(m.provider)) : [];
|
|
471
|
+
return pickPreferredModel(preferred.length > 0 ? preferred : aliasMatches, context);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
342
474
|
// Check for provider/modelId format — fuzzy match within provider only.
|
|
343
475
|
const slashIndex = modelPattern.indexOf("/");
|
|
344
476
|
if (slashIndex !== -1) {
|
|
@@ -411,6 +543,8 @@ export interface ParsedModelResult {
|
|
|
411
543
|
model: Model<Api> | undefined;
|
|
412
544
|
/** Thinking level if explicitly specified in pattern, undefined otherwise */
|
|
413
545
|
thinkingLevel?: ThinkingLevel;
|
|
546
|
+
/** Upstream provider slug from an `@upstream` routing selector, if present. */
|
|
547
|
+
upstream?: string;
|
|
414
548
|
warning: string | undefined;
|
|
415
549
|
explicitThinkingLevel: boolean;
|
|
416
550
|
}
|
|
@@ -435,31 +569,21 @@ function parseModelPatternWithContext(
|
|
|
435
569
|
options?: { allowInvalidThinkingSelectorFallback?: boolean; modelRegistry?: CanonicalModelRegistry },
|
|
436
570
|
): ParsedModelResult {
|
|
437
571
|
// Try exact match first
|
|
438
|
-
const exactMatch =
|
|
572
|
+
const exactMatch = matchModel(pattern, availableModels, context, options);
|
|
439
573
|
if (exactMatch) {
|
|
440
574
|
return { model: exactMatch, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
441
575
|
}
|
|
442
576
|
|
|
443
|
-
// No match - try
|
|
444
|
-
const
|
|
445
|
-
if (
|
|
446
|
-
|
|
447
|
-
return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
const prefix = pattern.substring(0, lastColonIndex);
|
|
451
|
-
const suffix = pattern.substring(lastColonIndex + 1);
|
|
452
|
-
|
|
453
|
-
const parsedThinkingLevel = parseThinkingLevel(suffix);
|
|
454
|
-
if (parsedThinkingLevel) {
|
|
455
|
-
// Valid thinking level - recurse on prefix and use this level
|
|
456
|
-
const result = parseModelPatternWithContext(prefix, availableModels, context, options);
|
|
577
|
+
// No match - try stripping a valid thinking suffix and recursing
|
|
578
|
+
const { base, level } = splitThinkingSuffix(pattern);
|
|
579
|
+
if (level) {
|
|
580
|
+
const result = parseModelPatternWithContext(base, availableModels, context, options);
|
|
457
581
|
if (result.model) {
|
|
458
582
|
// Only use this thinking level if no warning from inner recursion
|
|
459
583
|
const explicitThinkingLevel = !result.warning;
|
|
460
584
|
return {
|
|
461
585
|
model: result.model,
|
|
462
|
-
thinkingLevel: explicitThinkingLevel ?
|
|
586
|
+
thinkingLevel: explicitThinkingLevel ? level : undefined,
|
|
463
587
|
warning: result.warning,
|
|
464
588
|
explicitThinkingLevel,
|
|
465
589
|
};
|
|
@@ -467,6 +591,14 @@ function parseModelPatternWithContext(
|
|
|
467
591
|
return result;
|
|
468
592
|
}
|
|
469
593
|
|
|
594
|
+
const lastColonIndex = pattern.lastIndexOf(":");
|
|
595
|
+
if (lastColonIndex === -1) {
|
|
596
|
+
// No colons, pattern simply doesn't match any model
|
|
597
|
+
return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
598
|
+
}
|
|
599
|
+
const prefix = pattern.substring(0, lastColonIndex);
|
|
600
|
+
const suffix = pattern.substring(lastColonIndex + 1);
|
|
601
|
+
|
|
470
602
|
const allowFallback = options?.allowInvalidThinkingSelectorFallback ?? true;
|
|
471
603
|
if (!allowFallback) {
|
|
472
604
|
return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
|
|
@@ -492,19 +624,35 @@ export function parseModelPattern(
|
|
|
492
624
|
options?: { allowInvalidThinkingSelectorFallback?: boolean; modelRegistry?: CanonicalModelRegistry },
|
|
493
625
|
): ParsedModelResult {
|
|
494
626
|
const context = buildPreferenceContext(availableModels, preferences);
|
|
495
|
-
|
|
627
|
+
const direct = parseModelPatternWithContext(pattern, availableModels, context, options);
|
|
628
|
+
if (direct.model) return direct;
|
|
629
|
+
|
|
630
|
+
// No direct match: a trailing `@upstream` may be a provider-routing selector.
|
|
631
|
+
// Only honor it when the base resolves to an aggregator model (OpenRouter /
|
|
632
|
+
// Vercel Gateway); otherwise `@` stays part of the id and `direct` stands.
|
|
633
|
+
const routing = splitUpstreamRouting(pattern);
|
|
634
|
+
if (routing) {
|
|
635
|
+
const routed = parseModelPatternWithContext(routing.base, availableModels, context, options);
|
|
636
|
+
if (routed.model && supportsUpstreamRouting(routed.model)) {
|
|
637
|
+
return { ...routed, model: applyUpstreamRouting(routed.model, routing.upstream), upstream: routing.upstream };
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
return direct;
|
|
496
641
|
}
|
|
497
642
|
|
|
498
|
-
const
|
|
643
|
+
const LEGACY_MODEL_ROLE_PREFIX = "pi/";
|
|
644
|
+
const PROMETHEUS_MODEL_ROLE_PREFIX = "prometheus/";
|
|
645
|
+
const MODEL_ROLE_PREFIXES = [LEGACY_MODEL_ROLE_PREFIX, PROMETHEUS_MODEL_ROLE_PREFIX] as const;
|
|
499
646
|
const DEFAULT_MODEL_ROLE = "default";
|
|
500
647
|
|
|
501
648
|
function getModelRoleAlias(value: string): ModelRole | undefined {
|
|
502
649
|
const normalized = value.trim();
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
650
|
+
for (const prefix of MODEL_ROLE_PREFIXES) {
|
|
651
|
+
if (!normalized.startsWith(prefix)) continue;
|
|
652
|
+
const candidate = normalized.slice(prefix.length);
|
|
653
|
+
for (const role of MODEL_ROLE_IDS) {
|
|
654
|
+
if (candidate === role) return role;
|
|
655
|
+
}
|
|
508
656
|
}
|
|
509
657
|
return undefined;
|
|
510
658
|
}
|
|
@@ -518,26 +666,84 @@ function normalizeModelPatternList(value: string | string[] | undefined): string
|
|
|
518
666
|
function isSessionInheritedAgentPattern(value: string): boolean {
|
|
519
667
|
return (
|
|
520
668
|
value === DEFAULT_MODEL_ROLE ||
|
|
521
|
-
value === `${
|
|
522
|
-
value === `${PREFIX_MODEL_ROLE}task`
|
|
669
|
+
MODEL_ROLE_PREFIXES.some(prefix => value === `${prefix}${DEFAULT_MODEL_ROLE}` || value === `${prefix}task`)
|
|
523
670
|
);
|
|
524
671
|
}
|
|
525
672
|
|
|
526
|
-
function
|
|
673
|
+
function shouldInheritDefaultBeforePriority(role: ModelRole): boolean {
|
|
674
|
+
return role === "smol" || role === "slow" || role === "designer";
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
function resolveDefaultInheritedPatterns(
|
|
678
|
+
role: ModelRole,
|
|
679
|
+
configuredDefault: string | undefined,
|
|
680
|
+
roleDefaults: string[],
|
|
681
|
+
settings: Settings | undefined,
|
|
682
|
+
visited: Set<ModelRole>,
|
|
683
|
+
): string[] {
|
|
684
|
+
if (!shouldInheritDefaultBeforePriority(role) || !configuredDefault) return [];
|
|
685
|
+
|
|
686
|
+
const resolved: string[] = [];
|
|
687
|
+
for (const pattern of normalizeModelPatternList(configuredDefault)) {
|
|
688
|
+
const { base: aliasCandidate, level: thinkingLevel } = splitThinkingSuffix(
|
|
689
|
+
pattern,
|
|
690
|
+
LEGACY_MODEL_ROLE_PREFIX.length,
|
|
691
|
+
);
|
|
692
|
+
const aliasRole = getModelRoleAlias(aliasCandidate);
|
|
693
|
+
if (aliasRole === role) {
|
|
694
|
+
// Self-alias (e.g. modelRoles.default = "pi/smol" or "prometheus/smol")
|
|
695
|
+
// would loop back to the same unset role; collapse straight to the
|
|
696
|
+
// built-in priority chain.
|
|
697
|
+
resolved.push(
|
|
698
|
+
...(thinkingLevel
|
|
699
|
+
? roleDefaults.map(defaultPattern => `${defaultPattern}:${thinkingLevel}`)
|
|
700
|
+
: roleDefaults),
|
|
701
|
+
);
|
|
702
|
+
continue;
|
|
703
|
+
}
|
|
704
|
+
if (aliasRole && !visited.has(aliasRole)) {
|
|
705
|
+
// Cross-role alias (e.g. modelRoles.default = "pi/slow" or
|
|
706
|
+
// "prometheus/slow"): resolve the target role's patterns now so
|
|
707
|
+
// downstream one-layer expanders see concrete model patterns instead of
|
|
708
|
+
// another role alias.
|
|
709
|
+
const recursed = resolveConfiguredRolePattern(pattern, settings, new Set(visited));
|
|
710
|
+
if (recursed && recursed.length > 0) {
|
|
711
|
+
resolved.push(...recursed);
|
|
712
|
+
continue;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
resolved.push(pattern);
|
|
716
|
+
}
|
|
717
|
+
return resolved;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
function resolveConfiguredRolePattern(
|
|
721
|
+
value: string,
|
|
722
|
+
settings?: Settings,
|
|
723
|
+
visited: Set<ModelRole> = new Set(),
|
|
724
|
+
): string[] | undefined {
|
|
527
725
|
const normalized = value.trim();
|
|
528
726
|
if (!normalized) return undefined;
|
|
529
727
|
|
|
530
|
-
const
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
728
|
+
const { base: aliasCandidate, level: thinkingLevel } = splitThinkingSuffix(
|
|
729
|
+
normalized,
|
|
730
|
+
LEGACY_MODEL_ROLE_PREFIX.length,
|
|
731
|
+
);
|
|
534
732
|
const role = getModelRoleAlias(aliasCandidate);
|
|
535
733
|
if (!role) return [normalized];
|
|
734
|
+
if (visited.has(role)) return undefined;
|
|
735
|
+
visited.add(role);
|
|
536
736
|
|
|
537
737
|
const configured = settings?.getModelRole(role)?.trim();
|
|
738
|
+
const configuredDefault = settings?.getModelRole(DEFAULT_MODEL_ROLE)?.trim();
|
|
538
739
|
const roleDefaults = normalizeModelPatternList(MODEL_PRIO[role as keyof typeof MODEL_PRIO]);
|
|
539
|
-
const resolved = configured
|
|
540
|
-
|
|
740
|
+
const resolved = configured
|
|
741
|
+
? normalizeModelPatternList(configured)
|
|
742
|
+
: resolveDefaultInheritedPatterns(role, configuredDefault, roleDefaults, settings, visited);
|
|
743
|
+
if (resolved.length === 0) {
|
|
744
|
+
resolved.push(...roleDefaults);
|
|
745
|
+
}
|
|
746
|
+
if (resolved.length === 0) {
|
|
541
747
|
return undefined;
|
|
542
748
|
}
|
|
543
749
|
|
|
@@ -545,7 +751,8 @@ function resolveConfiguredRolePattern(value: string, settings?: Settings): strin
|
|
|
545
751
|
}
|
|
546
752
|
|
|
547
753
|
/**
|
|
548
|
-
* Expand a role alias like "prometheus/smol" to the configured
|
|
754
|
+
* Expand a role alias like "pi/smol" or "prometheus/smol" to the configured
|
|
755
|
+
* model string.
|
|
549
756
|
*/
|
|
550
757
|
export function expandRoleAlias(value: string, settings?: Settings): string {
|
|
551
758
|
const normalized = value.trim();
|
|
@@ -584,7 +791,7 @@ export function resolveAgentModelPatterns(options: AgentModelPatternResolutionOp
|
|
|
584
791
|
const agentInheritsSessionModel = singleAgentPattern ? isSessionInheritedAgentPattern(singleAgentPattern) : false;
|
|
585
792
|
if (configuredAgentPatterns.length > 0) {
|
|
586
793
|
if (!agentInheritsSessionModel) return configuredAgentPatterns;
|
|
587
|
-
if (singleAgentPattern ===
|
|
794
|
+
if (singleAgentPattern === "pi/task") return configuredAgentPatterns;
|
|
588
795
|
}
|
|
589
796
|
|
|
590
797
|
const fallback =
|
|
@@ -616,14 +823,15 @@ export function resolveModelRoleValue(
|
|
|
616
823
|
return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
|
|
617
824
|
}
|
|
618
825
|
|
|
619
|
-
const effectivePatterns =
|
|
826
|
+
const effectivePatterns = resolveConfiguredModelPatterns(normalized, options?.settings);
|
|
620
827
|
if (!effectivePatterns || effectivePatterns.length === 0) {
|
|
621
828
|
return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
|
|
622
829
|
}
|
|
623
830
|
|
|
624
831
|
let warning: string | undefined;
|
|
832
|
+
const matchPreferences = mergeModelMatchPreferences(options?.settings, options?.matchPreferences);
|
|
625
833
|
for (const effectivePattern of effectivePatterns) {
|
|
626
|
-
const resolved = parseModelPattern(effectivePattern, availableModels,
|
|
834
|
+
const resolved = parseModelPattern(effectivePattern, availableModels, matchPreferences, {
|
|
627
835
|
modelRegistry: options?.modelRegistry,
|
|
628
836
|
});
|
|
629
837
|
if (resolved.model) {
|
|
@@ -656,9 +864,7 @@ export function extractExplicitThinkingSelector(
|
|
|
656
864
|
let current = normalized;
|
|
657
865
|
while (!visited.has(current)) {
|
|
658
866
|
visited.add(current);
|
|
659
|
-
const
|
|
660
|
-
const thinkingSelector =
|
|
661
|
-
lastColonIndex > PREFIX_MODEL_ROLE.length ? parseThinkingLevel(current.slice(lastColonIndex + 1)) : undefined;
|
|
867
|
+
const thinkingSelector = splitThinkingSuffix(current, LEGACY_MODEL_ROLE_PREFIX.length).level;
|
|
662
868
|
if (thinkingSelector) {
|
|
663
869
|
return thinkingSelector;
|
|
664
870
|
}
|
|
@@ -724,7 +930,7 @@ export function resolveModelOverride(
|
|
|
724
930
|
): { model?: Model<Api>; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } {
|
|
725
931
|
if (modelPatterns.length === 0) return { explicitThinkingLevel: false };
|
|
726
932
|
const availableModels = modelRegistry.getAvailable();
|
|
727
|
-
const matchPreferences =
|
|
933
|
+
const matchPreferences = getModelMatchPreferences(settings);
|
|
728
934
|
for (const pattern of modelPatterns) {
|
|
729
935
|
const { model, thinkingLevel, explicitThinkingLevel } = resolveModelRoleValue(pattern, availableModels, {
|
|
730
936
|
settings,
|
|
@@ -804,7 +1010,7 @@ export function resolveRoleSelection(
|
|
|
804
1010
|
availableModels: Model<Api>[],
|
|
805
1011
|
modelRegistry?: CanonicalModelRegistry,
|
|
806
1012
|
): { model: Model<Api>; thinkingLevel?: ThinkingLevel } | undefined {
|
|
807
|
-
const matchPreferences =
|
|
1013
|
+
const matchPreferences = getModelMatchPreferences(settings);
|
|
808
1014
|
for (const role of roles) {
|
|
809
1015
|
const resolved = resolveModelRoleValue(settings.getModelRole(role), availableModels, {
|
|
810
1016
|
settings,
|
|
@@ -823,20 +1029,8 @@ function resolveExactCanonicalScopePattern(
|
|
|
823
1029
|
modelRegistry: Pick<ModelRegistry, "getCanonicalVariants">,
|
|
824
1030
|
availableModels: Model<Api>[],
|
|
825
1031
|
): { models: Model<Api>[]; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } | undefined {
|
|
826
|
-
const
|
|
827
|
-
|
|
828
|
-
let thinkingLevel: ThinkingLevel | undefined;
|
|
829
|
-
let explicitThinkingLevel = false;
|
|
830
|
-
|
|
831
|
-
if (lastColonIndex !== -1) {
|
|
832
|
-
const suffix = pattern.substring(lastColonIndex + 1);
|
|
833
|
-
const parsedThinkingLevel = parseThinkingLevel(suffix);
|
|
834
|
-
if (parsedThinkingLevel) {
|
|
835
|
-
canonicalId = pattern.substring(0, lastColonIndex);
|
|
836
|
-
thinkingLevel = parsedThinkingLevel;
|
|
837
|
-
explicitThinkingLevel = true;
|
|
838
|
-
}
|
|
839
|
-
}
|
|
1032
|
+
const { base: canonicalId, level: thinkingLevel } = splitThinkingSuffix(pattern);
|
|
1033
|
+
const explicitThinkingLevel = thinkingLevel !== undefined;
|
|
840
1034
|
|
|
841
1035
|
const variants = modelRegistry
|
|
842
1036
|
.getCanonicalVariants(canonicalId, { availableOnly: true, candidates: availableModels })
|
|
@@ -867,25 +1061,23 @@ export async function resolveModelScope(
|
|
|
867
1061
|
const availableModels = modelRegistry.getAvailable();
|
|
868
1062
|
const context = buildPreferenceContext(availableModels, preferences);
|
|
869
1063
|
const scopedModels: ScopedModel[] = [];
|
|
1064
|
+
const addScopedModel = (model: Model<Api>, thinkingLevel: ThinkingLevel | undefined, explicit: boolean) => {
|
|
1065
|
+
if (scopedModels.some(sm => modelsAreEqual(sm.model, model))) return;
|
|
1066
|
+
scopedModels.push({
|
|
1067
|
+
model,
|
|
1068
|
+
thinkingLevel: explicit
|
|
1069
|
+
? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
|
|
1070
|
+
: thinkingLevel,
|
|
1071
|
+
explicitThinkingLevel: explicit,
|
|
1072
|
+
});
|
|
1073
|
+
};
|
|
870
1074
|
|
|
871
1075
|
for (const pattern of patterns) {
|
|
872
1076
|
// Check if pattern contains glob characters
|
|
873
1077
|
if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) {
|
|
874
1078
|
// Extract optional thinking level suffix (e.g., "provider/*:high")
|
|
875
|
-
const
|
|
876
|
-
|
|
877
|
-
let thinkingLevel: ThinkingLevel | undefined;
|
|
878
|
-
let explicitThinkingLevel = false;
|
|
879
|
-
|
|
880
|
-
if (colonIdx !== -1) {
|
|
881
|
-
const suffix = pattern.substring(colonIdx + 1);
|
|
882
|
-
const parsedThinkingLevel = parseThinkingLevel(suffix);
|
|
883
|
-
if (parsedThinkingLevel) {
|
|
884
|
-
thinkingLevel = parsedThinkingLevel;
|
|
885
|
-
explicitThinkingLevel = true;
|
|
886
|
-
globPattern = pattern.substring(0, colonIdx);
|
|
887
|
-
}
|
|
888
|
-
}
|
|
1079
|
+
const { base: globPattern, level: thinkingLevel } = splitThinkingSuffix(pattern);
|
|
1080
|
+
const explicitThinkingLevel = thinkingLevel !== undefined;
|
|
889
1081
|
|
|
890
1082
|
// Match against "provider/modelId" format OR just model ID
|
|
891
1083
|
// This allows "*sonnet*" to match without requiring "anthropic/*sonnet*"
|
|
@@ -901,15 +1093,7 @@ export async function resolveModelScope(
|
|
|
901
1093
|
}
|
|
902
1094
|
|
|
903
1095
|
for (const model of matchingModels) {
|
|
904
|
-
|
|
905
|
-
scopedModels.push({
|
|
906
|
-
model,
|
|
907
|
-
thinkingLevel: explicitThinkingLevel
|
|
908
|
-
? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
|
|
909
|
-
: thinkingLevel,
|
|
910
|
-
explicitThinkingLevel,
|
|
911
|
-
});
|
|
912
|
-
}
|
|
1096
|
+
addScopedModel(model, thinkingLevel, explicitThinkingLevel);
|
|
913
1097
|
}
|
|
914
1098
|
continue;
|
|
915
1099
|
}
|
|
@@ -917,16 +1101,7 @@ export async function resolveModelScope(
|
|
|
917
1101
|
const exactCanonical = resolveExactCanonicalScopePattern(pattern, modelRegistry, availableModels);
|
|
918
1102
|
if (exactCanonical) {
|
|
919
1103
|
for (const model of exactCanonical.models) {
|
|
920
|
-
|
|
921
|
-
scopedModels.push({
|
|
922
|
-
model,
|
|
923
|
-
thinkingLevel: exactCanonical.explicitThinkingLevel
|
|
924
|
-
? (resolveThinkingLevelForModel(model, exactCanonical.thinkingLevel) ??
|
|
925
|
-
exactCanonical.thinkingLevel)
|
|
926
|
-
: exactCanonical.thinkingLevel,
|
|
927
|
-
explicitThinkingLevel: exactCanonical.explicitThinkingLevel,
|
|
928
|
-
});
|
|
929
|
-
}
|
|
1104
|
+
addScopedModel(model, exactCanonical.thinkingLevel, exactCanonical.explicitThinkingLevel);
|
|
930
1105
|
}
|
|
931
1106
|
continue;
|
|
932
1107
|
}
|
|
@@ -947,16 +1122,7 @@ export async function resolveModelScope(
|
|
|
947
1122
|
continue;
|
|
948
1123
|
}
|
|
949
1124
|
|
|
950
|
-
|
|
951
|
-
if (!scopedModels.find(sm => modelsAreEqual(sm.model, model))) {
|
|
952
|
-
scopedModels.push({
|
|
953
|
-
model,
|
|
954
|
-
thinkingLevel: explicitThinkingLevel
|
|
955
|
-
? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
|
|
956
|
-
: thinkingLevel,
|
|
957
|
-
explicitThinkingLevel,
|
|
958
|
-
});
|
|
959
|
-
}
|
|
1125
|
+
addScopedModel(model, thinkingLevel, explicitThinkingLevel);
|
|
960
1126
|
}
|
|
961
1127
|
|
|
962
1128
|
return scopedModels;
|
|
@@ -992,6 +1158,66 @@ export async function resolveAllowedModels(
|
|
|
992
1158
|
return available.filter(model => allowed.has(`${model.provider}/${model.id}`));
|
|
993
1159
|
}
|
|
994
1160
|
|
|
1161
|
+
/**
|
|
1162
|
+
* Synchronous subset of {@link resolveAllowedModels} for contexts where async is unavailable
|
|
1163
|
+
* (e.g. `getAvailableModels()` which is called from the ACP model-list advertisement, RPC
|
|
1164
|
+
* `get_available_models`, and the `/model` slash command). Uses the same effective
|
|
1165
|
+
* `enabledModels` scope semantics as startup resolution:
|
|
1166
|
+
*
|
|
1167
|
+
* - Glob selectors match `provider/modelId` and bare model id
|
|
1168
|
+
* - Exact canonical ids expand to all available concrete variants
|
|
1169
|
+
* - Exact `provider/modelId`, bare ids, provider-scoped fuzzy, and substring selectors
|
|
1170
|
+
* resolve through the shared model-pattern matcher
|
|
1171
|
+
* - Optional `:thinkingLevel` suffixes are stripped only when valid
|
|
1172
|
+
*
|
|
1173
|
+
* When no pattern resolves to any model (misconfiguration / typo) an empty list is returned,
|
|
1174
|
+
* consistent with the empty-list contract of {@link resolveAllowedModels}. Callers that render
|
|
1175
|
+
* a UI picker should treat an empty list as "hide the picker entry", matching how the SDK
|
|
1176
|
+
* surfaces the same misconfiguration during session initialization.
|
|
1177
|
+
*/
|
|
1178
|
+
export function filterAvailableModelsByEnabledPatterns(
|
|
1179
|
+
available: Model<Api>[],
|
|
1180
|
+
patterns: readonly string[],
|
|
1181
|
+
registry: Pick<ModelRegistry, "getCanonicalVariants">,
|
|
1182
|
+
): Model<Api>[] {
|
|
1183
|
+
if (patterns.length === 0) return available;
|
|
1184
|
+
|
|
1185
|
+
const context = buildPreferenceContext(available, undefined);
|
|
1186
|
+
const allowed = new Set<string>();
|
|
1187
|
+
const addAllowed = (model: Model<Api>) => {
|
|
1188
|
+
allowed.add(`${model.provider}/${model.id}`);
|
|
1189
|
+
};
|
|
1190
|
+
|
|
1191
|
+
for (const pattern of patterns) {
|
|
1192
|
+
if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) {
|
|
1193
|
+
const { base: globPattern } = splitThinkingSuffix(pattern);
|
|
1194
|
+
const glob = new Bun.Glob(globPattern.toLowerCase());
|
|
1195
|
+
for (const model of available) {
|
|
1196
|
+
const fullId = `${model.provider}/${model.id}`.toLowerCase();
|
|
1197
|
+
if (glob.match(fullId) || glob.match(model.id.toLowerCase())) {
|
|
1198
|
+
addAllowed(model);
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
continue;
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
const exactCanonical = resolveExactCanonicalScopePattern(pattern, registry, available);
|
|
1205
|
+
if (exactCanonical) {
|
|
1206
|
+
for (const model of exactCanonical.models) {
|
|
1207
|
+
addAllowed(model);
|
|
1208
|
+
}
|
|
1209
|
+
continue;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
const { model } = parseModelPatternWithContext(pattern, available, context, { modelRegistry: registry });
|
|
1213
|
+
if (model) {
|
|
1214
|
+
addAllowed(model);
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
return allowed.size === 0 ? [] : available.filter(model => allowed.has(`${model.provider}/${model.id}`));
|
|
1219
|
+
}
|
|
1220
|
+
|
|
995
1221
|
export interface ResolveCliModelResult {
|
|
996
1222
|
model: Model<Api> | undefined;
|
|
997
1223
|
selector?: string;
|
|
@@ -1036,7 +1262,7 @@ export function resolveCliModel(options: {
|
|
|
1036
1262
|
model: undefined,
|
|
1037
1263
|
selector: undefined,
|
|
1038
1264
|
warning: undefined,
|
|
1039
|
-
error: `Unknown provider "${cliProvider}".
|
|
1265
|
+
error: `Unknown provider "${cliProvider}". Run "prometheus models" to see available providers/models.`,
|
|
1040
1266
|
};
|
|
1041
1267
|
}
|
|
1042
1268
|
|
|
@@ -1047,14 +1273,11 @@ export function resolveCliModel(options: {
|
|
|
1047
1273
|
// provider+id match over flat id match. Without this, a model with id
|
|
1048
1274
|
// "zai/glm-5" on provider "vercel-ai-gateway" wins over provider "zai"
|
|
1049
1275
|
// with id "glm-5", because Array.find returns the first catalog hit.
|
|
1050
|
-
|
|
1051
|
-
let exact: (typeof availableModels)[number] | undefined;
|
|
1052
|
-
if (slashIdx !== -1) {
|
|
1053
|
-
const prefix = lower.substring(0, slashIdx);
|
|
1054
|
-
const suffix = trimmedModel.substring(slashIdx + 1);
|
|
1055
|
-
exact = resolveProviderModelReference(prefix, suffix, availableModels);
|
|
1056
|
-
}
|
|
1276
|
+
let exact = findExactModelReferenceMatch(trimmedModel, availableModels);
|
|
1057
1277
|
if (!exact && !trimmedModel.includes(":")) {
|
|
1278
|
+
// CLI flags address the full catalog, so unlike the engine's canonical
|
|
1279
|
+
// step this lookup is unrestricted; the `:`-guard defers suffixed
|
|
1280
|
+
// selectors (thinking levels, ollama-style ids) to the grammar below.
|
|
1058
1281
|
const canonicalMatch = modelRegistry.resolveCanonicalModel?.(trimmedModel, { availableOnly: false });
|
|
1059
1282
|
if (canonicalMatch) {
|
|
1060
1283
|
return {
|
|
@@ -1067,6 +1290,8 @@ export function resolveCliModel(options: {
|
|
|
1067
1290
|
}
|
|
1068
1291
|
}
|
|
1069
1292
|
if (!exact) {
|
|
1293
|
+
// Flat exact id (or full selector) by catalog order: CLI resolution
|
|
1294
|
+
// stays deterministic across runs regardless of usage-based ranking.
|
|
1070
1295
|
exact = availableModels.find(
|
|
1071
1296
|
model => model.id.toLowerCase() === lower || `${model.provider}/${model.id}`.toLowerCase() === lower,
|
|
1072
1297
|
);
|
|
@@ -1115,7 +1340,7 @@ export function resolveCliModel(options: {
|
|
|
1115
1340
|
}
|
|
1116
1341
|
|
|
1117
1342
|
const candidates = provider ? availableModels.filter(model => model.provider === provider) : availableModels;
|
|
1118
|
-
const { model, thinkingLevel, warning } = parseModelPattern(pattern, candidates, preferences, {
|
|
1343
|
+
const { model, thinkingLevel, warning, upstream } = parseModelPattern(pattern, candidates, preferences, {
|
|
1119
1344
|
allowInvalidThinkingSelectorFallback: false,
|
|
1120
1345
|
modelRegistry,
|
|
1121
1346
|
});
|
|
@@ -1127,17 +1352,13 @@ export function resolveCliModel(options: {
|
|
|
1127
1352
|
selector: undefined,
|
|
1128
1353
|
thinkingLevel: undefined,
|
|
1129
1354
|
warning,
|
|
1130
|
-
error: `Model "${display}" not found.
|
|
1355
|
+
error: `Model "${display}" not found. Run "prometheus models" to see available models.`,
|
|
1131
1356
|
};
|
|
1132
1357
|
}
|
|
1133
1358
|
|
|
1134
1359
|
let selector = provider ? formatModelString(model) : undefined;
|
|
1135
1360
|
if (!provider) {
|
|
1136
|
-
const
|
|
1137
|
-
const canonicalCandidate =
|
|
1138
|
-
lastColonIndex !== -1 && parseThinkingLevel(pattern.substring(lastColonIndex + 1))
|
|
1139
|
-
? pattern.substring(0, lastColonIndex)
|
|
1140
|
-
: pattern;
|
|
1361
|
+
const canonicalCandidate = splitThinkingSuffix(pattern).base;
|
|
1141
1362
|
if (!canonicalCandidate.includes("/")) {
|
|
1142
1363
|
const canonicalResolved = modelRegistry.resolveCanonicalModel?.(canonicalCandidate, { availableOnly: false });
|
|
1143
1364
|
if (canonicalResolved && canonicalResolved.provider === model.provider && canonicalResolved.id === model.id) {
|
|
@@ -1145,6 +1366,9 @@ export function resolveCliModel(options: {
|
|
|
1145
1366
|
}
|
|
1146
1367
|
}
|
|
1147
1368
|
}
|
|
1369
|
+
if (selector !== undefined && upstream) {
|
|
1370
|
+
selector = `${selector}@${upstream}`;
|
|
1371
|
+
}
|
|
1148
1372
|
|
|
1149
1373
|
return {
|
|
1150
1374
|
model,
|
|
@@ -1233,18 +1457,9 @@ export async function findInitialModel(options: {
|
|
|
1233
1457
|
// 4. Try first available model with valid API key
|
|
1234
1458
|
const availableModels = modelRegistry.getAvailable();
|
|
1235
1459
|
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
const defaultId = defaultModelPerProvider[provider];
|
|
1240
|
-
const match = availableModels.find(m => m.provider === provider && m.id === defaultId);
|
|
1241
|
-
if (match) {
|
|
1242
|
-
return { model: match, thinkingLevel: undefined, fallbackMessage: undefined };
|
|
1243
|
-
}
|
|
1244
|
-
}
|
|
1245
|
-
|
|
1246
|
-
// If no default found, use first available
|
|
1247
|
-
return { model: availableModels[0], thinkingLevel: undefined, fallbackMessage: undefined };
|
|
1460
|
+
const fallback = pickDefaultAvailableModel(availableModels);
|
|
1461
|
+
if (fallback) {
|
|
1462
|
+
return { model: fallback, thinkingLevel: undefined, fallbackMessage: undefined };
|
|
1248
1463
|
}
|
|
1249
1464
|
|
|
1250
1465
|
// 5. No model found
|
|
@@ -1294,23 +1509,8 @@ export async function restoreModelFromSession(
|
|
|
1294
1509
|
// Try to find any available model
|
|
1295
1510
|
const availableModels = modelRegistry.getAvailable();
|
|
1296
1511
|
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
let fallbackModel: Model<Api> | undefined;
|
|
1300
|
-
for (const provider of Object.keys(defaultModelPerProvider) as KnownProvider[]) {
|
|
1301
|
-
const defaultId = defaultModelPerProvider[provider];
|
|
1302
|
-
const match = availableModels.find(m => m.provider === provider && m.id === defaultId);
|
|
1303
|
-
if (match) {
|
|
1304
|
-
fallbackModel = match;
|
|
1305
|
-
break;
|
|
1306
|
-
}
|
|
1307
|
-
}
|
|
1308
|
-
|
|
1309
|
-
// If no default found, use first available
|
|
1310
|
-
if (!fallbackModel) {
|
|
1311
|
-
fallbackModel = availableModels[0];
|
|
1312
|
-
}
|
|
1313
|
-
|
|
1512
|
+
const fallbackModel = pickDefaultAvailableModel(availableModels);
|
|
1513
|
+
if (fallbackModel) {
|
|
1314
1514
|
if (shouldPrintMessages) {
|
|
1315
1515
|
console.log(chalk.dim(`Falling back to: ${fallbackModel.provider}/${fallbackModel.id}`));
|
|
1316
1516
|
}
|