@qduc/term2 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +32 -10
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +83 -6
- package/dist/app.js.map +1 -1
- package/dist/cli.js +84 -2
- package/dist/cli.js.map +1 -1
- package/dist/components/InputBox.js +2 -3
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/common/MenuContainer.d.ts +5 -0
- package/dist/components/common/MenuContainer.d.ts.map +1 -1
- package/dist/components/common/MenuContainer.js +13 -3
- package/dist/components/common/MenuContainer.js.map +1 -1
- package/dist/components/input/MenuSurface.d.ts.map +1 -1
- package/dist/components/input/MenuSurface.js +12 -2
- package/dist/components/input/MenuSurface.js.map +1 -1
- package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
- package/dist/components/input/ModelMenuSession.js +67 -16
- package/dist/components/input/ModelMenuSession.js.map +1 -1
- package/dist/components/input/SettingsMenuSession.d.ts.map +1 -1
- package/dist/components/input/SettingsMenuSession.js +56 -17
- package/dist/components/input/SettingsMenuSession.js.map +1 -1
- package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
- package/dist/components/input/SettingsValueMenuSession.js +33 -3
- package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
- package/dist/components/input/menu-types.d.ts +1 -1
- package/dist/components/input/menu-types.d.ts.map +1 -1
- package/dist/components/input/triggers.js +2 -2
- package/dist/components/input/triggers.js.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.d.ts +0 -1
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.js +4 -112
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.d.ts +10 -0
- package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js +85 -16
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/components/menu/ProfileSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ProfileSelectionMenu.js +5 -4
- package/dist/components/menu/ProfileSelectionMenu.js.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.js +3 -5
- package/dist/components/menu/ResumeSelectionMenu.js.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.js +4 -32
- package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/menu/SettingsValueSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsValueSelectionMenu.js +12 -5
- package/dist/components/menu/SettingsValueSelectionMenu.js.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.js +3 -6
- package/dist/components/menu/SkillSelectionMenu.js.map +1 -1
- package/dist/components/menu/SlashCommandMenu.d.ts +8 -0
- package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
- package/dist/components/menu/SlashCommandMenu.js +16 -6
- package/dist/components/menu/SlashCommandMenu.js.map +1 -1
- package/dist/components/menu/StandaloneModelPickerApp.d.ts +40 -0
- package/dist/components/menu/StandaloneModelPickerApp.d.ts.map +1 -0
- package/dist/components/menu/StandaloneModelPickerApp.js +106 -0
- package/dist/components/menu/StandaloneModelPickerApp.js.map +1 -0
- package/dist/components/menu/settings-value-formatter.d.ts +11 -0
- package/dist/components/menu/settings-value-formatter.d.ts.map +1 -0
- package/dist/components/menu/settings-value-formatter.js +214 -0
- package/dist/components/menu/settings-value-formatter.js.map +1 -0
- package/dist/components/message/CommandMessage.d.ts.map +1 -1
- package/dist/components/message/CommandMessage.js +22 -17
- package/dist/components/message/CommandMessage.js.map +1 -1
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +13 -2
- package/dist/components/message/MessageList.js.map +1 -1
- package/dist/components/message/RunCodeRenderer.d.ts +16 -0
- package/dist/components/message/RunCodeRenderer.d.ts.map +1 -0
- package/dist/components/message/RunCodeRenderer.js +25 -0
- package/dist/components/message/RunCodeRenderer.js.map +1 -0
- package/dist/components/message/command-message-helpers.d.ts +30 -0
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/components/message/command-message-helpers.js +85 -0
- package/dist/components/message/command-message-helpers.js.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.js +12 -21
- package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
- package/dist/components/theme.d.ts +1 -0
- package/dist/components/theme.d.ts.map +1 -1
- package/dist/components/theme.js +1 -0
- package/dist/components/theme.js.map +1 -1
- package/dist/contracts/streamed-model-turn.d.ts +6 -0
- package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.js +5 -2
- package/dist/hooks/conversation-ui-reducer.js.map +1 -1
- package/dist/hooks/settings-completion-config.d.ts +1 -1
- package/dist/hooks/settings-completion-config.d.ts.map +1 -1
- package/dist/hooks/settings-completion-config.js +4 -122
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/settings-completion-logic.d.ts +1 -1
- package/dist/hooks/settings-completion-logic.d.ts.map +1 -1
- package/dist/hooks/settings-completion-logic.js.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.js +33 -20
- package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +3 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +107 -16
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-model-selection.d.ts +33 -4
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +204 -114
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +1 -6
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.d.ts +1 -8
- package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-value-completion.js +10 -100
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/hooks/use-standalone-model-picker.d.ts +64 -0
- package/dist/hooks/use-standalone-model-picker.d.ts.map +1 -0
- package/dist/hooks/use-standalone-model-picker.js +310 -0
- package/dist/hooks/use-standalone-model-picker.js.map +1 -0
- package/dist/lib/agent-client.d.ts +17 -1
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +173 -53
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +12 -3
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +26 -7
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +3 -0
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +49 -7
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/ask-user-answer-store.d.ts +1 -0
- package/dist/lib/ask-user-answer-store.d.ts.map +1 -1
- package/dist/lib/ask-user-answer-store.js +3 -0
- package/dist/lib/ask-user-answer-store.js.map +1 -1
- package/dist/lib/tool-invoke.d.ts +1 -0
- package/dist/lib/tool-invoke.d.ts.map +1 -1
- package/dist/lib/tool-invoke.js +1 -0
- package/dist/lib/tool-invoke.js.map +1 -1
- package/dist/non-interactive.d.ts +23 -0
- package/dist/non-interactive.d.ts.map +1 -1
- package/dist/non-interactive.js +225 -31
- package/dist/non-interactive.js.map +1 -1
- package/dist/prompts/background-shell.d.ts.map +1 -1
- package/dist/prompts/background-shell.js +4 -2
- package/dist/prompts/background-shell.js.map +1 -1
- package/dist/prompts/background-shell.ts +4 -2
- package/dist/prompts/codex.md +1 -3
- package/dist/prompts/fragments/gpt-6-astra.md +13 -0
- package/dist/prompts/gpt-5-modern.md +1 -3
- package/dist/prompts/gpt-5.4-mini.md +0 -2
- package/dist/prompts/gpt-5.5.md +0 -2
- package/dist/prompts/gpt-5.6.md +0 -1
- package/dist/prompts/lite.md +1 -6
- package/dist/prompts/memory.md +2 -2
- package/dist/prompts/orchestrator.md +4 -4
- package/dist/prompts/prompt-constructor.d.ts +2 -0
- package/dist/prompts/prompt-constructor.d.ts.map +1 -1
- package/dist/prompts/prompt-constructor.js +4 -2
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +178 -5
- package/dist/prompts/prompt-constructor.ts +7 -1
- package/dist/prompts/prompt-profiles.d.ts.map +1 -1
- package/dist/prompts/prompt-profiles.js +6 -0
- package/dist/prompts/prompt-profiles.js.map +1 -1
- package/dist/prompts/prompt-profiles.test.ts +6 -4
- package/dist/prompts/prompt-profiles.ts +6 -0
- package/dist/prompts/session-browser.md +4 -2
- package/dist/prompts/shell-auto-approval.d.ts +1 -1
- package/dist/prompts/shell-auto-approval.d.ts.map +1 -1
- package/dist/prompts/shell-auto-approval.js +2 -2
- package/dist/prompts/shell-auto-approval.ts +2 -2
- package/dist/prompts/subagent-delegation.js +3 -3
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +3 -3
- package/dist/prompts/subagent-delegation.ts +3 -3
- package/dist/prompts/subagents/librarian.md +4 -4
- package/dist/prompts/subagents/worker-prompt.test.ts +7 -0
- package/dist/prompts/tool-surface-guidance.d.ts +4 -0
- package/dist/prompts/tool-surface-guidance.d.ts.map +1 -0
- package/dist/prompts/tool-surface-guidance.js +19 -0
- package/dist/prompts/tool-surface-guidance.js.map +1 -0
- package/dist/prompts/tool-surface-guidance.ts +20 -0
- package/dist/providers/codex-compact.d.ts +2 -0
- package/dist/providers/codex-compact.d.ts.map +1 -1
- package/dist/providers/codex-compact.js +14 -0
- package/dist/providers/codex-compact.js.map +1 -1
- package/dist/providers/codex-responses-model.d.ts +23 -3
- package/dist/providers/codex-responses-model.d.ts.map +1 -1
- package/dist/providers/codex-responses-model.js +121 -33
- package/dist/providers/codex-responses-model.js.map +1 -1
- package/dist/providers/codex.provider.d.ts +2 -0
- package/dist/providers/codex.provider.d.ts.map +1 -1
- package/dist/providers/codex.provider.js +3 -2
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/grok.provider.d.ts.map +1 -1
- package/dist/providers/grok.provider.js +5 -2
- package/dist/providers/grok.provider.js.map +1 -1
- package/dist/providers/model-catalog/catalog.generated.d.ts +453 -309
- package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
- package/dist/providers/model-catalog/catalog.generated.js +453 -309
- package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
- package/dist/providers/opencode-session.d.ts.map +1 -1
- package/dist/providers/opencode-session.js +5 -0
- package/dist/providers/opencode-session.js.map +1 -1
- package/dist/providers/openrouter.provider.js +8 -1
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/responses-websocket-sessions.d.ts +10 -0
- package/dist/providers/responses-websocket-sessions.d.ts.map +1 -1
- package/dist/providers/responses-websocket-sessions.js +9 -4
- package/dist/providers/responses-websocket-sessions.js.map +1 -1
- package/dist/providers/retrying-model.d.ts +2 -1
- package/dist/providers/retrying-model.d.ts.map +1 -1
- package/dist/providers/retrying-model.js +3 -0
- package/dist/providers/retrying-model.js.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts +8 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.js +30 -6
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
- package/dist/services/agent-runtime/context-compaction/index.d.ts +2 -0
- package/dist/services/agent-runtime/context-compaction/index.d.ts.map +1 -1
- package/dist/services/agent-runtime/context-compaction/index.js +30 -4
- package/dist/services/agent-runtime/context-compaction/index.js.map +1 -1
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +3 -0
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +15 -9
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
- package/dist/services/agent-runtime/tool-invocation-context.d.ts +12 -0
- package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -1
- package/dist/services/agent-runtime/workflow/workflow-evaluator.d.ts +7 -1
- package/dist/services/agent-runtime/workflow/workflow-evaluator.d.ts.map +1 -1
- package/dist/services/agent-runtime/workflow/workflow-evaluator.js +78 -183
- package/dist/services/agent-runtime/workflow/workflow-evaluator.js.map +1 -1
- package/dist/services/agent-runtime/workflow/workflow-sandbox.d.ts +4 -3
- package/dist/services/agent-runtime/workflow/workflow-sandbox.d.ts.map +1 -1
- package/dist/services/agent-runtime/workflow/workflow-sandbox.js +9 -7
- package/dist/services/agent-runtime/workflow/workflow-sandbox.js.map +1 -1
- package/dist/services/agent-runtime/workflow/workflow-types.d.ts +1 -1
- package/dist/services/agent-runtime/workflow/workflow-types.d.ts.map +1 -1
- package/dist/services/agent-runtime/workflow/workflow-types.js.map +1 -1
- package/dist/services/approval/approval-decision-executor.d.ts +2 -1
- package/dist/services/approval/approval-decision-executor.d.ts.map +1 -1
- package/dist/services/approval/approval-decision-executor.js +22 -116
- package/dist/services/approval/approval-decision-executor.js.map +1 -1
- package/dist/services/approval/approval-descriptor.d.ts +10 -0
- package/dist/services/approval/approval-descriptor.d.ts.map +1 -0
- package/dist/services/approval/approval-descriptor.js +23 -0
- package/dist/services/approval/approval-descriptor.js.map +1 -0
- package/dist/services/approval/approval-flow-coordinator.d.ts +2 -1
- package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.js +2 -1
- package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
- package/dist/services/approval/approval-grant-executor.d.ts +25 -0
- package/dist/services/approval/approval-grant-executor.d.ts.map +1 -0
- package/dist/services/approval/approval-grant-executor.js +125 -0
- package/dist/services/approval/approval-grant-executor.js.map +1 -0
- package/dist/services/approval/background-subagent-approval-controller.d.ts +2 -1
- package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
- package/dist/services/approval/nested-approval-owner.d.ts +52 -0
- package/dist/services/approval/nested-approval-owner.d.ts.map +1 -0
- package/dist/services/approval/nested-approval-owner.js +194 -0
- package/dist/services/approval/nested-approval-owner.js.map +1 -0
- package/dist/services/approval/non-interactive-approval-policy.js +1 -1
- package/dist/services/approval/non-interactive-approval-policy.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.js +2 -4
- package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +4 -0
- package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts +10 -3
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.js +16 -5
- package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
- package/dist/services/approval/tool-approval-policy-registry.d.ts +13 -0
- package/dist/services/approval/tool-approval-policy-registry.d.ts.map +1 -1
- package/dist/services/approval/tool-approval-policy-registry.js +16 -1
- package/dist/services/approval/tool-approval-policy-registry.js.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.d.ts +3 -1
- package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.js +3 -3
- package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +3 -2
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +32 -23
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts +11 -0
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +65 -42
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-persistence.d.ts +6 -1
- package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.js +68 -19
- package/dist/services/conversation/conversation-persistence.js.map +1 -1
- package/dist/services/conversation/conversation-result-builder.d.ts +3 -0
- package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
- package/dist/services/conversation/conversation-result-builder.js +27 -23
- package/dist/services/conversation/conversation-result-builder.js.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.d.ts +5 -0
- package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.js +1 -0
- package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +11 -1
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +68 -17
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/session-browser.d.ts +34 -27
- package/dist/services/conversation/session-browser.d.ts.map +1 -1
- package/dist/services/conversation/session-browser.js +221 -60
- package/dist/services/conversation/session-browser.js.map +1 -1
- package/dist/services/conversation/session-index/session-index-database.d.ts +138 -0
- package/dist/services/conversation/session-index/session-index-database.d.ts.map +1 -0
- package/dist/services/conversation/session-index/session-index-database.js +684 -0
- package/dist/services/conversation/session-index/session-index-database.js.map +1 -0
- package/dist/services/conversation/session-index/session-index-schema.d.ts +35 -0
- package/dist/services/conversation/session-index/session-index-schema.d.ts.map +1 -0
- package/dist/services/conversation/session-index/session-index-schema.js +156 -0
- package/dist/services/conversation/session-index/session-index-schema.js.map +1 -0
- package/dist/services/conversation/session-index/session-index-service.d.ts +30 -0
- package/dist/services/conversation/session-index/session-index-service.d.ts.map +1 -0
- package/dist/services/conversation/session-index/session-index-service.js +234 -0
- package/dist/services/conversation/session-index/session-index-service.js.map +1 -0
- package/dist/services/conversation/session-index/session-index-worker-client.d.ts +36 -0
- package/dist/services/conversation/session-index/session-index-worker-client.d.ts.map +1 -0
- package/dist/services/conversation/session-index/session-index-worker-client.js +143 -0
- package/dist/services/conversation/session-index/session-index-worker-client.js.map +1 -0
- package/dist/services/conversation/session-index/session-index-worker.d.ts +56 -0
- package/dist/services/conversation/session-index/session-index-worker.d.ts.map +1 -0
- package/dist/services/conversation/session-index/session-index-worker.js +96 -0
- package/dist/services/conversation/session-index/session-index-worker.js.map +1 -0
- package/dist/services/conversation/session-search-helpers.d.ts +4 -0
- package/dist/services/conversation/session-search-helpers.d.ts.map +1 -0
- package/dist/services/conversation/session-search-helpers.js +13 -0
- package/dist/services/conversation/session-search-helpers.js.map +1 -0
- package/dist/services/conversation-agent-client.d.ts +8 -0
- package/dist/services/conversation-agent-client.d.ts.map +1 -1
- package/dist/services/execution-context.js +2 -2
- package/dist/services/execution-context.js.map +1 -1
- package/dist/services/hooks/hook-event-factory.d.ts +2 -1
- package/dist/services/hooks/hook-event-factory.d.ts.map +1 -1
- package/dist/services/hooks/hook-event-factory.js +2 -1
- package/dist/services/hooks/hook-event-factory.js.map +1 -1
- package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-writer.js +50 -26
- package/dist/services/logging/conversation-log-writer.js.map +1 -1
- package/dist/services/logging/logging-service.d.ts.map +1 -1
- package/dist/services/logging/logging-service.js +1 -0
- package/dist/services/logging/logging-service.js.map +1 -1
- package/dist/services/logging/provider-traffic.d.ts +22 -2
- package/dist/services/logging/provider-traffic.d.ts.map +1 -1
- package/dist/services/logging/provider-traffic.js +147 -12
- package/dist/services/logging/provider-traffic.js.map +1 -1
- package/dist/services/model-service.d.ts +42 -0
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js +161 -26
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/models/model-catalog-session.d.ts.map +1 -1
- package/dist/services/models/model-catalog-session.js +11 -7
- package/dist/services/models/model-catalog-session.js.map +1 -1
- package/dist/services/models/model-favorites.d.ts +56 -0
- package/dist/services/models/model-favorites.d.ts.map +1 -0
- package/dist/services/models/model-favorites.js +93 -0
- package/dist/services/models/model-favorites.js.map +1 -0
- package/dist/services/models/model-listing.d.ts +40 -0
- package/dist/services/models/model-listing.d.ts.map +1 -1
- package/dist/services/models/model-listing.js +35 -2
- package/dist/services/models/model-listing.js.map +1 -1
- package/dist/services/models/model-nicknames.d.ts +113 -0
- package/dist/services/models/model-nicknames.d.ts.map +1 -0
- package/dist/services/models/model-nicknames.js +182 -0
- package/dist/services/models/model-nicknames.js.map +1 -0
- package/dist/services/models/model-picker-host.d.ts +72 -0
- package/dist/services/models/model-picker-host.d.ts.map +1 -0
- package/dist/services/models/model-picker-host.js +83 -0
- package/dist/services/models/model-picker-host.js.map +1 -0
- package/dist/services/models/model-resolution.d.ts +35 -3
- package/dist/services/models/model-resolution.d.ts.map +1 -1
- package/dist/services/models/model-resolution.js +276 -47
- package/dist/services/models/model-resolution.js.map +1 -1
- package/dist/services/models/reasoning-effort.d.ts +20 -0
- package/dist/services/models/reasoning-effort.d.ts.map +1 -0
- package/dist/services/models/reasoning-effort.js +28 -0
- package/dist/services/models/reasoning-effort.js.map +1 -0
- package/dist/services/models/unified-model-catalog.d.ts +4 -0
- package/dist/services/models/unified-model-catalog.d.ts.map +1 -0
- package/dist/services/models/unified-model-catalog.js +54 -0
- package/dist/services/models/unified-model-catalog.js.map +1 -0
- package/dist/services/retry/provider-failure-classification.d.ts +16 -0
- package/dist/services/retry/provider-failure-classification.d.ts.map +1 -1
- package/dist/services/retry/provider-failure-classification.js +45 -0
- package/dist/services/retry/provider-failure-classification.js.map +1 -1
- package/dist/services/retry/retry-recovery-budget.d.ts +26 -1
- package/dist/services/retry/retry-recovery-budget.d.ts.map +1 -1
- package/dist/services/retry/retry-recovery-budget.js +33 -1
- package/dist/services/retry/retry-recovery-budget.js.map +1 -1
- package/dist/services/sandboxed-code-host/host-types.d.ts +135 -0
- package/dist/services/sandboxed-code-host/host-types.d.ts.map +1 -0
- package/dist/services/sandboxed-code-host/host-types.js +6 -0
- package/dist/services/sandboxed-code-host/host-types.js.map +1 -0
- package/dist/services/sandboxed-code-host/host-worker.d.ts +9 -0
- package/dist/services/sandboxed-code-host/host-worker.d.ts.map +1 -0
- package/dist/services/sandboxed-code-host/host-worker.js +351 -0
- package/dist/services/sandboxed-code-host/host-worker.js.map +1 -0
- package/dist/services/sandboxed-code-host/sandbox.d.ts +16 -0
- package/dist/services/sandboxed-code-host/sandbox.d.ts.map +1 -0
- package/dist/services/sandboxed-code-host/sandbox.js +21 -0
- package/dist/services/sandboxed-code-host/sandbox.js.map +1 -0
- package/dist/services/sandboxed-code-host/sandboxed-code-host.d.ts +17 -0
- package/dist/services/sandboxed-code-host/sandboxed-code-host.d.ts.map +1 -0
- package/dist/services/sandboxed-code-host/sandboxed-code-host.js +347 -0
- package/dist/services/sandboxed-code-host/sandboxed-code-host.js.map +1 -0
- package/dist/services/service-interfaces.d.ts +32 -0
- package/dist/services/service-interfaces.d.ts.map +1 -1
- package/dist/services/session/background-task-control.d.ts +3 -1
- package/dist/services/session/background-task-control.d.ts.map +1 -1
- package/dist/services/session/background-task-control.js +4 -0
- package/dist/services/session/background-task-control.js.map +1 -1
- package/dist/services/session/continuation-plan-applier.d.ts +2 -1
- package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
- package/dist/services/session/continuation-plan-applier.js.map +1 -1
- package/dist/services/session/continuation-recovery-handler.d.ts +2 -1
- package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/continuation-recovery-handler.js +49 -5
- package/dist/services/session/continuation-recovery-handler.js.map +1 -1
- package/dist/services/session/initial-input-preparer.d.ts +2 -1
- package/dist/services/session/initial-input-preparer.d.ts.map +1 -1
- package/dist/services/session/initial-input-preparer.js +2 -1
- package/dist/services/session/initial-input-preparer.js.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.d.ts +2 -1
- package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.js +51 -16
- package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
- package/dist/services/session/post-execute-pending-registry.d.ts +2 -1
- package/dist/services/session/post-execute-pending-registry.d.ts.map +1 -1
- package/dist/services/session/post-execute-pending-registry.js +3 -2
- package/dist/services/session/post-execute-pending-registry.js.map +1 -1
- package/dist/services/session/session-client-factory.d.ts +4 -0
- package/dist/services/session/session-client-factory.d.ts.map +1 -1
- package/dist/services/session/session-client-factory.js +12 -4
- package/dist/services/session/session-client-factory.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +26 -2
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +97 -18
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-continuity-reset.d.ts +2 -1
- package/dist/services/session/session-continuity-reset.d.ts.map +1 -1
- package/dist/services/session/session-continuity-reset.js +5 -2
- package/dist/services/session/session-continuity-reset.js.map +1 -1
- package/dist/services/session/session-identity.d.ts +20 -0
- package/dist/services/session/session-identity.d.ts.map +1 -0
- package/dist/services/session/session-identity.js +43 -0
- package/dist/services/session/session-identity.js.map +1 -0
- package/dist/services/session/session-lifecycle.d.ts +5 -1
- package/dist/services/session/session-lifecycle.d.ts.map +1 -1
- package/dist/services/session/session-lifecycle.js +5 -1
- package/dist/services/session/session-lifecycle.js.map +1 -1
- package/dist/services/session/session-stream-processor.d.ts +2 -1
- package/dist/services/session/session-stream-processor.d.ts.map +1 -1
- package/dist/services/session/session-stream-processor.js +5 -4
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.js +14 -9
- package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -1
- package/dist/services/session/turn-coordinator.d.ts +2 -1
- package/dist/services/session/turn-coordinator.d.ts.map +1 -1
- package/dist/services/session/turn-coordinator.js +3 -0
- package/dist/services/session/turn-coordinator.js.map +1 -1
- package/dist/services/session/turn-workflow.d.ts +4 -1
- package/dist/services/session/turn-workflow.d.ts.map +1 -1
- package/dist/services/session/turn-workflow.js +58 -21
- package/dist/services/session/turn-workflow.js.map +1 -1
- package/dist/services/session-rollover/session-rollover-brief.d.ts +8 -1
- package/dist/services/session-rollover/session-rollover-brief.d.ts.map +1 -1
- package/dist/services/session-rollover/session-rollover-brief.js +14 -1
- package/dist/services/session-rollover/session-rollover-brief.js.map +1 -1
- package/dist/services/settings/setting-schema-utils.d.ts +2 -0
- package/dist/services/settings/setting-schema-utils.d.ts.map +1 -1
- package/dist/services/settings/setting-schema-utils.js +15 -27
- package/dist/services/settings/setting-schema-utils.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +8 -0
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +23 -6
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-sources.d.ts +207 -0
- package/dist/services/settings/settings-sources.d.ts.map +1 -1
- package/dist/services/settings/settings-sources.js +48 -1
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/settings/settings-ui-metadata.d.ts +27 -0
- package/dist/services/settings/settings-ui-metadata.d.ts.map +1 -0
- package/dist/services/settings/settings-ui-metadata.js +283 -0
- package/dist/services/settings/settings-ui-metadata.js.map +1 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +10 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js +46 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
- package/dist/services/subagents/execution-runner.d.ts.map +1 -1
- package/dist/services/subagents/execution-runner.js +8 -0
- package/dist/services/subagents/execution-runner.js.map +1 -1
- package/dist/services/subagents/role-loader.d.ts.map +1 -1
- package/dist/services/subagents/role-loader.js +4 -0
- package/dist/services/subagents/role-loader.js.map +1 -1
- package/dist/services/subagents/subagent-client-types.d.ts +7 -0
- package/dist/services/subagents/subagent-client-types.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js +4 -1
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-notification-store.d.ts +2 -0
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
- package/dist/services/subagents/subagent-notification-store.js +4 -0
- package/dist/services/subagents/subagent-notification-store.js.map +1 -1
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -1
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +2 -1
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts +8 -0
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +289 -41
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +2 -1
- package/dist/services/subagents/types.d.ts.map +1 -1
- package/dist/services/subagents/types.js.map +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.d.ts +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.d.ts.map +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.js +6 -1
- package/dist/test-helpers/conversation-session-with-adapter.js.map +1 -1
- package/dist/test-helpers/vitest-cache-isolation.d.ts +2 -0
- package/dist/test-helpers/vitest-cache-isolation.d.ts.map +1 -0
- package/dist/test-helpers/vitest-cache-isolation.js +17 -0
- package/dist/test-helpers/vitest-cache-isolation.js.map +1 -0
- package/dist/tools/agent/activate-skill.d.ts.map +1 -1
- package/dist/tools/agent/activate-skill.js +1 -0
- package/dist/tools/agent/activate-skill.js.map +1 -1
- package/dist/tools/agent/configure-task-check-in.d.ts.map +1 -1
- package/dist/tools/agent/configure-task-check-in.js +1 -0
- package/dist/tools/agent/configure-task-check-in.js.map +1 -1
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +16 -12
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/file/apply-patch.d.ts.map +1 -1
- package/dist/tools/file/apply-patch.js +9 -11
- package/dist/tools/file/apply-patch.js.map +1 -1
- package/dist/tools/file/code-context.d.ts.map +1 -1
- package/dist/tools/file/code-context.js +40 -5
- package/dist/tools/file/code-context.js.map +1 -1
- package/dist/tools/file/create-file.d.ts.map +1 -1
- package/dist/tools/file/create-file.js +13 -8
- package/dist/tools/file/create-file.js.map +1 -1
- package/dist/tools/file/glob.d.ts.map +1 -1
- package/dist/tools/file/glob.js +49 -11
- package/dist/tools/file/glob.js.map +1 -1
- package/dist/tools/file/grep.d.ts.map +1 -1
- package/dist/tools/file/grep.js +32 -8
- package/dist/tools/file/grep.js.map +1 -1
- package/dist/tools/file/read-file.d.ts.map +1 -1
- package/dist/tools/file/read-file.js +109 -6
- package/dist/tools/file/read-file.js.map +1 -1
- package/dist/tools/file/search-replace.js +4 -4
- package/dist/tools/file/search-replace.js.map +1 -1
- package/dist/tools/file/upstream-apply-patch.d.ts.map +1 -1
- package/dist/tools/file/upstream-apply-patch.js +4 -1
- package/dist/tools/file/upstream-apply-patch.js.map +1 -1
- package/dist/tools/memory/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory/memory-tools.js +19 -1
- package/dist/tools/memory/memory-tools.js.map +1 -1
- package/dist/tools/session-browser/session-browser-tools.d.ts.map +1 -1
- package/dist/tools/session-browser/session-browser-tools.js +24 -8
- package/dist/tools/session-browser/session-browser-tools.js.map +1 -1
- package/dist/tools/session-rollover/session-rollover-tool.d.ts.map +1 -1
- package/dist/tools/session-rollover/session-rollover-tool.js +8 -2
- package/dist/tools/session-rollover/session-rollover-tool.js.map +1 -1
- package/dist/tools/system/run-code/index.d.ts +2 -0
- package/dist/tools/system/run-code/index.d.ts.map +1 -0
- package/dist/tools/system/run-code/index.js +2 -0
- package/dist/tools/system/run-code/index.js.map +1 -0
- package/dist/tools/system/run-code/run-code-telemetry.d.ts +92 -0
- package/dist/tools/system/run-code/run-code-telemetry.d.ts.map +1 -0
- package/dist/tools/system/run-code/run-code-telemetry.js +189 -0
- package/dist/tools/system/run-code/run-code-telemetry.js.map +1 -0
- package/dist/tools/system/run-code/run-code.d.ts +98 -0
- package/dist/tools/system/run-code/run-code.d.ts.map +1 -0
- package/dist/tools/system/run-code/run-code.js +1078 -0
- package/dist/tools/system/run-code/run-code.js.map +1 -0
- package/dist/tools/system/run-code/tools-header.d.ts +25 -0
- package/dist/tools/system/run-code/tools-header.d.ts.map +1 -0
- package/dist/tools/system/run-code/tools-header.js +136 -0
- package/dist/tools/system/run-code/tools-header.js.map +1 -0
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +58 -9
- package/dist/tools/system/shell.js.map +1 -1
- package/dist/tools/system/worktree.js +2 -2
- package/dist/tools/system/worktree.js.map +1 -1
- package/dist/tools/types.d.ts +24 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/utils.d.ts +10 -0
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +13 -0
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/web/web-fetch.d.ts.map +1 -1
- package/dist/tools/web/web-fetch.js +14 -6
- package/dist/tools/web/web-fetch.js.map +1 -1
- package/dist/tools/web/web-search.d.ts.map +1 -1
- package/dist/tools/web/web-search.js +2 -1
- package/dist/tools/web/web-search.js.map +1 -1
- package/dist/utils/ai/model-settings.d.ts.map +1 -1
- package/dist/utils/ai/model-settings.js +0 -47
- package/dist/utils/ai/model-settings.js.map +1 -1
- package/dist/utils/conversation/apply-conversation-result.d.ts.map +1 -1
- package/dist/utils/conversation/apply-conversation-result.js +13 -0
- package/dist/utils/conversation/apply-conversation-result.js.map +1 -1
- package/dist/utils/conversation/conversation-utils.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-utils.js +14 -0
- package/dist/utils/conversation/conversation-utils.js.map +1 -1
- package/dist/utils/output/bound-tool-result.d.ts +23 -0
- package/dist/utils/output/bound-tool-result.d.ts.map +1 -1
- package/dist/utils/output/bound-tool-result.js +27 -0
- package/dist/utils/output/bound-tool-result.js.map +1 -1
- package/dist/utils/settings-command.d.ts +8 -0
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +45 -30
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/shell/execute-shell.d.ts +18 -0
- package/dist/utils/shell/execute-shell.d.ts.map +1 -1
- package/dist/utils/shell/execute-shell.js +48 -6
- package/dist/utils/shell/execute-shell.js.map +1 -1
- package/dist/utils/shell/shell-output.d.ts +7 -1
- package/dist/utils/shell/shell-output.d.ts.map +1 -1
- package/dist/utils/shell/shell-output.js +37 -7
- package/dist/utils/shell/shell-output.js.map +1 -1
- package/dist/utils/streaming/streaming-session-factory.d.ts +9 -0
- package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
- package/dist/utils/streaming/streaming-session-factory.js +1 -1
- package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
- package/dist/utils/tool-args-display.d.ts +21 -0
- package/dist/utils/tool-args-display.d.ts.map +1 -0
- package/dist/utils/tool-args-display.js +34 -0
- package/dist/utils/tool-args-display.js.map +1 -0
- package/dist/utils/value-suggestions.d.ts +4 -10
- package/dist/utils/value-suggestions.d.ts.map +1 -1
- package/dist/utils/value-suggestions.js +77 -144
- package/dist/utils/value-suggestions.js.map +1 -1
- package/dist/utils/worker-bootstrap.d.ts +3 -0
- package/dist/utils/worker-bootstrap.d.ts.map +1 -0
- package/dist/utils/worker-bootstrap.js +7 -0
- package/dist/utils/worker-bootstrap.js.map +1 -0
- package/dist/utils/worker-cwd-preload.cjs +23 -0
- package/dist/utils/worker-cwd-preload.cjs.map +1 -0
- package/dist/utils/worker-cwd-preload.d.cts +2 -0
- package/dist/utils/worker-cwd-preload.d.cts.map +1 -0
- package/package.json +5 -2
- package/dist/services/agent-runtime/workflow/workflow-worker.d.ts +0 -4
- package/dist/services/agent-runtime/workflow/workflow-worker.d.ts.map +0 -1
- package/dist/services/agent-runtime/workflow/workflow-worker.js +0 -55
- package/dist/services/agent-runtime/workflow/workflow-worker.js.map +0 -1
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { parseFavoriteEntry, serializeFavorite, FAVORITES_TAB_ID } from './model-favorites.js';
|
|
2
|
+
import { stripReasoningEffortSuffix } from './reasoning-effort.js';
|
|
3
|
+
/**
|
|
4
|
+
* Nicknames are typed as CLI values (`-m <nickname>`) and rendered inline in
|
|
5
|
+
* the picker, so they are restricted to an identifier shape: letters, digits,
|
|
6
|
+
* hyphens, and underscores, starting with a letter or digit.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately excluded, each for a concrete reason:
|
|
9
|
+
* - '/' — a slash in a --model flag parses as a provider prefix, and the
|
|
10
|
+
* stored target already uses first-slash splitting (see model-favorites.ts);
|
|
11
|
+
* - ':' — a trailing ":<effort>" parses as a reasoning-effort suffix;
|
|
12
|
+
* - whitespace, quotes, and shell metacharacters — the value is typed as a
|
|
13
|
+
* CLI argument and must stay shell-safe;
|
|
14
|
+
* - a leading '-' — meow would parse `-m -op` as an unknown flag;
|
|
15
|
+
* - '.' — keeps a nickname visibly distinct from dotted model ids, the shape
|
|
16
|
+
* it must never be confused with.
|
|
17
|
+
*/
|
|
18
|
+
export const NICKNAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;
|
|
19
|
+
/** Generous ceiling; nicknames exist to be shorter than the ids they replace. */
|
|
20
|
+
export const NICKNAME_MAX_LENGTH = 64;
|
|
21
|
+
/**
|
|
22
|
+
* Parses one persisted target entry ("provider/modelId" with an optional
|
|
23
|
+
* trailing ":<effort>"). Splitting on the FIRST '/' reuses model-favorites'
|
|
24
|
+
* helper because it solved this exact serialization problem: provider ids can
|
|
25
|
+
* never contain '/', but a model id can (e.g. OpenRouter's
|
|
26
|
+
* `anthropic/claude-3.5-sonnet`). Returns null for malformed entries so a
|
|
27
|
+
* hand-edited settings file degrades to "fewer nicknames" instead of crashing
|
|
28
|
+
* resolution or the picker.
|
|
29
|
+
*/
|
|
30
|
+
export function parseNicknameTargetEntry(raw) {
|
|
31
|
+
const { value, reasoningEffort } = stripReasoningEffortSuffix(raw);
|
|
32
|
+
const parsed = parseFavoriteEntry(value);
|
|
33
|
+
if (!parsed)
|
|
34
|
+
return null;
|
|
35
|
+
return reasoningEffort ? { ...parsed, reasoningEffort } : parsed;
|
|
36
|
+
}
|
|
37
|
+
/** Serializes a target back to its persisted "provider/modelId[:effort]" form. */
|
|
38
|
+
export function serializeNicknameTarget(target) {
|
|
39
|
+
const base = serializeFavorite(target.provider, target.modelId);
|
|
40
|
+
return target.reasoningEffort ? base + ':' + target.reasoningEffort : base;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Reads and parses `agent.modelNicknames`, silently dropping malformed
|
|
44
|
+
* entries and keeping only the first of case-insensitive duplicate names (a
|
|
45
|
+
* JSON object cannot hold duplicate keys, but a case-duplicate pair can be
|
|
46
|
+
* hand-edited in; dropping keeps every lookup unambiguous).
|
|
47
|
+
*/
|
|
48
|
+
export function getNicknameEntries(settingsService) {
|
|
49
|
+
const raw = settingsService.get('agent.modelNicknames');
|
|
50
|
+
if (raw === null || raw === undefined || typeof raw !== 'object' || Array.isArray(raw))
|
|
51
|
+
return [];
|
|
52
|
+
const entries = [];
|
|
53
|
+
const seenLower = new Set();
|
|
54
|
+
for (const [nickname, target] of Object.entries(raw)) {
|
|
55
|
+
if (typeof target !== 'string')
|
|
56
|
+
continue;
|
|
57
|
+
if (!NICKNAME_PATTERN.test(nickname))
|
|
58
|
+
continue;
|
|
59
|
+
const lower = nickname.toLowerCase();
|
|
60
|
+
if (seenLower.has(lower))
|
|
61
|
+
continue;
|
|
62
|
+
const parsed = parseNicknameTargetEntry(target);
|
|
63
|
+
if (!parsed)
|
|
64
|
+
continue;
|
|
65
|
+
seenLower.add(lower);
|
|
66
|
+
entries.push({ nickname, ...parsed });
|
|
67
|
+
}
|
|
68
|
+
return entries;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Nickname labels keyed by serialized model identity (`provider/modelId`),
|
|
72
|
+
* for rendering existing nicknames on picker rows.
|
|
73
|
+
*/
|
|
74
|
+
export function getNicknameLabels(settingsService) {
|
|
75
|
+
const labels = new Map();
|
|
76
|
+
for (const entry of getNicknameEntries(settingsService)) {
|
|
77
|
+
labels.set(serializeFavorite(entry.provider, entry.modelId), entry.nickname);
|
|
78
|
+
}
|
|
79
|
+
return labels;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Validates a nickname name against the ambiguity rules:
|
|
83
|
+
* - identifier shape (see NICKNAME_PATTERN) and bounded length;
|
|
84
|
+
* - never the reserved Favorites pseudo-provider sentinel;
|
|
85
|
+
* - never equal to a registered provider id (checked case-insensitively) —
|
|
86
|
+
* `-m <provider>` means "match that provider", and a nickname must not
|
|
87
|
+
* shadow that reading;
|
|
88
|
+
* - unique among the other nicknames (case-insensitively) — two names that
|
|
89
|
+
* differ only by case would make lookup order-dependent.
|
|
90
|
+
*
|
|
91
|
+
* Callers that are renaming pass `existingNicknames` already minus the name
|
|
92
|
+
* being replaced. Collisions with real model ids are NOT rejected here
|
|
93
|
+
* (detecting them needs a catalog, unavailable offline); precedence at
|
|
94
|
+
* resolution time — exact nickname wins, the real id stays reachable as
|
|
95
|
+
* `provider/id` — covers that case instead.
|
|
96
|
+
*/
|
|
97
|
+
export function validateNicknameName(rawNickname, options = {}) {
|
|
98
|
+
const nickname = rawNickname.trim();
|
|
99
|
+
if (!nickname)
|
|
100
|
+
return { ok: false, error: 'Nickname cannot be empty.' };
|
|
101
|
+
if (nickname.length > NICKNAME_MAX_LENGTH) {
|
|
102
|
+
return { ok: false, error: 'Nickname must be at most ' + NICKNAME_MAX_LENGTH + ' characters.' };
|
|
103
|
+
}
|
|
104
|
+
if (!NICKNAME_PATTERN.test(nickname)) {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
error: 'Nicknames may only contain letters, numbers, hyphens, and underscores, and must start with a letter or number.',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (nickname.toLowerCase() === FAVORITES_TAB_ID.toLowerCase()) {
|
|
111
|
+
return { ok: false, error: '"' + nickname + '" is a reserved name.' };
|
|
112
|
+
}
|
|
113
|
+
const lower = nickname.toLowerCase();
|
|
114
|
+
if (options.providerIds?.some((providerId) => providerId.toLowerCase() === lower)) {
|
|
115
|
+
return { ok: false, error: '"' + nickname + '" is already a provider name.' };
|
|
116
|
+
}
|
|
117
|
+
if (options.existingNicknames?.some((existing) => existing.toLowerCase() === lower)) {
|
|
118
|
+
return { ok: false, error: 'Nickname "' + nickname + '" is already in use.' };
|
|
119
|
+
}
|
|
120
|
+
return { ok: true, nickname };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Validates and persists one nickname -> target mapping. Rejected input
|
|
124
|
+
* returns the reason and writes nothing, so an editor can keep the user in
|
|
125
|
+
* place. Renaming (the target already mapped under another name) removes the
|
|
126
|
+
* old key; re-pointing a name at a new target just overwrites it. Committing
|
|
127
|
+
* an unchanged mapping writes nothing.
|
|
128
|
+
*/
|
|
129
|
+
export function setNicknameTarget(settingsService, rawNickname, target, options = {}) {
|
|
130
|
+
const entries = getNicknameEntries(settingsService);
|
|
131
|
+
const existingForTarget = entries.find((entry) => entry.provider.toLowerCase() === target.provider.toLowerCase() && entry.modelId === target.modelId);
|
|
132
|
+
const lower = rawNickname.trim().toLowerCase();
|
|
133
|
+
const validation = validateNicknameName(rawNickname, {
|
|
134
|
+
providerIds: options.providerIds,
|
|
135
|
+
// Only the entry being renamed away is exempt; every other live name —
|
|
136
|
+
// including a case-different variant — is a conflict. Re-pointing a name
|
|
137
|
+
// at a different model is deliberately NOT an operation here: silently
|
|
138
|
+
// stealing another model's nickname is never what a typo-ing user wants,
|
|
139
|
+
// and a lookup keyed case-insensitively could not tell them apart anyway.
|
|
140
|
+
existingNicknames: entries.filter((entry) => entry !== existingForTarget).map((entry) => entry.nickname),
|
|
141
|
+
});
|
|
142
|
+
if (!validation.ok)
|
|
143
|
+
return validation;
|
|
144
|
+
const nickname = validation.nickname;
|
|
145
|
+
const serialized = serializeNicknameTarget(target);
|
|
146
|
+
if (existingForTarget &&
|
|
147
|
+
existingForTarget.nickname === nickname &&
|
|
148
|
+
serializeNicknameTarget(existingForTarget) === serialized) {
|
|
149
|
+
return { ok: true };
|
|
150
|
+
}
|
|
151
|
+
const next = {};
|
|
152
|
+
for (const entry of entries) {
|
|
153
|
+
if (existingForTarget && entry.nickname === existingForTarget.nickname)
|
|
154
|
+
continue;
|
|
155
|
+
if (entry.nickname.toLowerCase() === lower)
|
|
156
|
+
continue;
|
|
157
|
+
next[entry.nickname] = serializeNicknameTarget(entry);
|
|
158
|
+
}
|
|
159
|
+
next[nickname] = serialized;
|
|
160
|
+
settingsService.setPersistent('agent.modelNicknames', next);
|
|
161
|
+
return { ok: true };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Exact, case-insensitive nickname lookup for the --model fast path.
|
|
165
|
+
* `providerScope` (an explicit --provider or a provider prefix parsed from
|
|
166
|
+
* the flag) narrows eligibility to targets on that provider: the user named a
|
|
167
|
+
* provider, so a nickname homed elsewhere must not hijack the flag.
|
|
168
|
+
* `knownProviders` excludes hand-edited nicknames equal to a registered
|
|
169
|
+
* provider id, which creation-time validation would have rejected.
|
|
170
|
+
*/
|
|
171
|
+
export function findNicknameMatch(settingsService, pattern, options) {
|
|
172
|
+
const trimmed = pattern.trim();
|
|
173
|
+
if (!trimmed)
|
|
174
|
+
return undefined;
|
|
175
|
+
const patternLower = trimmed.toLowerCase();
|
|
176
|
+
const scope = options?.providerScope?.toLowerCase();
|
|
177
|
+
const providerNamed = new Set((options?.knownProviders ?? []).map((providerId) => providerId.toLowerCase()));
|
|
178
|
+
return getNicknameEntries(settingsService).find((entry) => entry.nickname.toLowerCase() === patternLower &&
|
|
179
|
+
(!scope || entry.provider.toLowerCase() === scope) &&
|
|
180
|
+
!providerNamed.has(entry.nickname.toLowerCase()));
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=model-nicknames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-nicknames.js","sourceRoot":"","sources":["../../../source/services/models/model-nicknames.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type StandaloneModelPickerOutcome } from '../../components/menu/StandaloneModelPickerApp.js';
|
|
2
|
+
import type { ILoggingService } from '../service-interfaces.js';
|
|
3
|
+
import type { SettingsService } from '../settings/settings-service.js';
|
|
4
|
+
import type { ModelFetcher } from './model-catalog-session.js';
|
|
5
|
+
export type ModelPickerHostResult = StandaloneModelPickerOutcome;
|
|
6
|
+
type TtyStreamLike = {
|
|
7
|
+
isTTY?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type ModelPickerHostStreams = {
|
|
10
|
+
stdin?: NodeJS.ReadStream;
|
|
11
|
+
stdout?: NodeJS.WriteStream;
|
|
12
|
+
stderr?: NodeJS.WriteStream;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* `--model` resolves before the interactive app renders (see cli.tsx), so
|
|
16
|
+
* this is the only place in the boot sequence that can ever need to mount an
|
|
17
|
+
* Ink tree ahead of `App`. This guard, and `isModelPickerEligible` below, are
|
|
18
|
+
* the single source of truth for "may this process ever mount the picker" —
|
|
19
|
+
* cli.tsx calls them instead of re-deriving the TTY/mode checks inline, so
|
|
20
|
+
* the "never mount Ink for a non-interactive run" rule lives in one tested
|
|
21
|
+
* place.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isModelPickerHostSupported(streams?: {
|
|
24
|
+
stdin?: TtyStreamLike;
|
|
25
|
+
stdout?: TtyStreamLike;
|
|
26
|
+
}): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Full eligibility for offering the interactive picker anywhere in the
|
|
29
|
+
* `--model` flow (ambiguous match, no match, or no value): a real TTY on
|
|
30
|
+
* both ends, no positional prompt (non-interactive run), no `--json`, and no
|
|
31
|
+
* isolated-harness marker. Every one of these must independently block the
|
|
32
|
+
* picker; a session that fails any of them keeps today's non-interactive
|
|
33
|
+
* behavior (readline disambiguation, hard errors, or silent passthrough)
|
|
34
|
+
* untouched.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isModelPickerEligible(opts: {
|
|
37
|
+
stdin?: TtyStreamLike;
|
|
38
|
+
stdout?: TtyStreamLike;
|
|
39
|
+
hasPositionalPrompt: boolean;
|
|
40
|
+
json: boolean;
|
|
41
|
+
harnessIdle: boolean;
|
|
42
|
+
}): boolean;
|
|
43
|
+
export type ModelPickerHostOptions = ModelPickerHostStreams & {
|
|
44
|
+
settingsService: SettingsService;
|
|
45
|
+
loggingService: ILoggingService;
|
|
46
|
+
modelFetcher?: ModelFetcher;
|
|
47
|
+
/** Filter query the menu opens with (e.g. the pattern typed after --model). */
|
|
48
|
+
initialQuery?: string;
|
|
49
|
+
/** Provider whose catalog should be prioritized (e.g. where the top-ranked match lives). */
|
|
50
|
+
initialProvider?: string;
|
|
51
|
+
/** When set (an explicit --provider), search is scoped to this provider. */
|
|
52
|
+
lockProvider?: string;
|
|
53
|
+
/** One-line explanations shown above the menu (e.g. "No models match ..."). */
|
|
54
|
+
bannerLines?: string[];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Mounts the standalone model picker, waits for a selection or cancellation,
|
|
58
|
+
* and unmounts before returning — a short-lived Ink render ahead of the main
|
|
59
|
+
* app's own `render()` call in cli.tsx. Never mounts without a real TTY on
|
|
60
|
+
* both ends (`isModelPickerHostSupported`), returning `cancelled` instead.
|
|
61
|
+
*
|
|
62
|
+
* Teardown is Ink's own normal app-exit path: `StandaloneModelPickerApp`
|
|
63
|
+
* calls `useApp().exit()` exactly once (via `onDone`), which runs Ink's
|
|
64
|
+
* `unmount()` synchronously (raw mode, the resize listener, and the cursor
|
|
65
|
+
* are restored by Ink itself) before `waitUntilExit()` resolves. Ink keys its
|
|
66
|
+
* one live renderer per stdout object and deletes that entry on unmount, so
|
|
67
|
+
* a later `render()` call against the same stdout (the main app's) creates a
|
|
68
|
+
* fresh instance rather than colliding with this one.
|
|
69
|
+
*/
|
|
70
|
+
export declare function runModelPickerHost(options: ModelPickerHostOptions): Promise<ModelPickerHostResult>;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=model-picker-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-picker-host.d.ts","sourceRoot":"","sources":["../../../source/services/models/model-picker-host.tsx"],"names":[],"mappings":"AAEA,OAAiC,EAC/B,KAAK,4BAA4B,EAClC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAEjE,KAAK,aAAa,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzC,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GAAG,OAAO,CAInH;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAOV;AAED,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,GAAG;IAC5D,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,eAAe,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAmDxG"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render } from 'ink';
|
|
3
|
+
import StandaloneModelPickerApp from '../../components/menu/StandaloneModelPickerApp.js';
|
|
4
|
+
/**
|
|
5
|
+
* `--model` resolves before the interactive app renders (see cli.tsx), so
|
|
6
|
+
* this is the only place in the boot sequence that can ever need to mount an
|
|
7
|
+
* Ink tree ahead of `App`. This guard, and `isModelPickerEligible` below, are
|
|
8
|
+
* the single source of truth for "may this process ever mount the picker" —
|
|
9
|
+
* cli.tsx calls them instead of re-deriving the TTY/mode checks inline, so
|
|
10
|
+
* the "never mount Ink for a non-interactive run" rule lives in one tested
|
|
11
|
+
* place.
|
|
12
|
+
*/
|
|
13
|
+
export function isModelPickerHostSupported(streams = {}) {
|
|
14
|
+
const stdin = streams.stdin ?? process.stdin;
|
|
15
|
+
const stdout = streams.stdout ?? process.stdout;
|
|
16
|
+
return Boolean(stdin.isTTY) && Boolean(stdout.isTTY);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Full eligibility for offering the interactive picker anywhere in the
|
|
20
|
+
* `--model` flow (ambiguous match, no match, or no value): a real TTY on
|
|
21
|
+
* both ends, no positional prompt (non-interactive run), no `--json`, and no
|
|
22
|
+
* isolated-harness marker. Every one of these must independently block the
|
|
23
|
+
* picker; a session that fails any of them keeps today's non-interactive
|
|
24
|
+
* behavior (readline disambiguation, hard errors, or silent passthrough)
|
|
25
|
+
* untouched.
|
|
26
|
+
*/
|
|
27
|
+
export function isModelPickerEligible(opts) {
|
|
28
|
+
return (isModelPickerHostSupported({ stdin: opts.stdin, stdout: opts.stdout }) &&
|
|
29
|
+
!opts.hasPositionalPrompt &&
|
|
30
|
+
!opts.json &&
|
|
31
|
+
!opts.harnessIdle);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Mounts the standalone model picker, waits for a selection or cancellation,
|
|
35
|
+
* and unmounts before returning — a short-lived Ink render ahead of the main
|
|
36
|
+
* app's own `render()` call in cli.tsx. Never mounts without a real TTY on
|
|
37
|
+
* both ends (`isModelPickerHostSupported`), returning `cancelled` instead.
|
|
38
|
+
*
|
|
39
|
+
* Teardown is Ink's own normal app-exit path: `StandaloneModelPickerApp`
|
|
40
|
+
* calls `useApp().exit()` exactly once (via `onDone`), which runs Ink's
|
|
41
|
+
* `unmount()` synchronously (raw mode, the resize listener, and the cursor
|
|
42
|
+
* are restored by Ink itself) before `waitUntilExit()` resolves. Ink keys its
|
|
43
|
+
* one live renderer per stdout object and deletes that entry on unmount, so
|
|
44
|
+
* a later `render()` call against the same stdout (the main app's) creates a
|
|
45
|
+
* fresh instance rather than colliding with this one.
|
|
46
|
+
*/
|
|
47
|
+
export async function runModelPickerHost(options) {
|
|
48
|
+
const stdin = options.stdin ?? process.stdin;
|
|
49
|
+
const stdout = options.stdout ?? process.stdout;
|
|
50
|
+
const stderr = options.stderr ?? process.stderr;
|
|
51
|
+
if (!isModelPickerHostSupported({ stdin, stdout })) {
|
|
52
|
+
return { status: 'cancelled' };
|
|
53
|
+
}
|
|
54
|
+
let outcome = { status: 'cancelled' };
|
|
55
|
+
const { waitUntilExit } = render(React.createElement(StandaloneModelPickerApp, { settingsService: options.settingsService, loggingService: options.loggingService, modelFetcher: options.modelFetcher, initialQuery: options.initialQuery, initialProvider: options.initialProvider, lockProvider: options.lockProvider, bannerLines: options.bannerLines, onDone: (result) => {
|
|
56
|
+
outcome = result;
|
|
57
|
+
} }), {
|
|
58
|
+
stdin,
|
|
59
|
+
stdout,
|
|
60
|
+
stderr,
|
|
61
|
+
// Interactive by construction: the guard above already requires a real
|
|
62
|
+
// TTY on both ends, which is what interactivity actually needs. Ink's
|
|
63
|
+
// own default is `!is-in-ci && stdout.isTTY`, and CI detection wins
|
|
64
|
+
// even over a TTY (see node_modules/ink/build/ink.js
|
|
65
|
+
// `resolveInteractiveOption`). Left to that default, a run with `CI` set
|
|
66
|
+
// renders no frame at all while the menu is up — it defers output and
|
|
67
|
+
// writes only the final frame at unmount — so the picker the user is
|
|
68
|
+
// choosing from never appears. Note this is not test-only: the same
|
|
69
|
+
// shape (a PTY under a CI-marked environment) is why the provider
|
|
70
|
+
// black-box harness deletes `CI` from its child env.
|
|
71
|
+
interactive: true,
|
|
72
|
+
// The picker never writes to `console` itself, and nothing else logs
|
|
73
|
+
// while it is mounted, so Ink's own console patch/restore machinery
|
|
74
|
+
// (there to keep stray console output from corrupting the frame) has
|
|
75
|
+
// nothing to do here. Skipping it also sidesteps a real fragility:
|
|
76
|
+
// Ink's patch assumes a constructible `console.Console`, which some
|
|
77
|
+
// test/runtime consoles do not provide.
|
|
78
|
+
patchConsole: false,
|
|
79
|
+
});
|
|
80
|
+
await waitUntilExit();
|
|
81
|
+
return outcome;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=model-picker-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-picker-host.js","sourceRoot":"","sources":["../../../source/services/models/model-picker-host.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,wBAEN,MAAM,mDAAmD,CAAC;AAe3D;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAO,GAAsD,EAAE;IACxG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAMrC;IACC,OAAO,CACL,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACtE,CAAC,IAAI,CAAC,mBAAmB;QACzB,CAAC,IAAI,CAAC,IAAI;QACV,CAAC,IAAI,CAAC,WAAW,CAClB,CAAC;AACJ,CAAC;AAgBD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA+B;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAEhD,IAAI,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,GAAiC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAEpE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,oBAAC,wBAAwB,IACvB,eAAe,EAAE,OAAO,CAAC,eAAe,EACxC,cAAc,EAAE,OAAO,CAAC,cAAc,EACtC,YAAY,EAAE,OAAO,CAAC,YAAY,EAClC,YAAY,EAAE,OAAO,CAAC,YAAY,EAClC,eAAe,EAAE,OAAO,CAAC,eAAe,EACxC,YAAY,EAAE,OAAO,CAAC,YAAY,EAClC,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACjB,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC,GACD,EACF;QACE,KAAK;QACL,MAAM;QACN,MAAM;QACN,uEAAuE;QACvE,sEAAsE;QACtE,oEAAoE;QACpE,qDAAqD;QACrD,yEAAyE;QACzE,sEAAsE;QACtE,qEAAqE;QACrE,oEAAoE;QACpE,kEAAkE;QAClE,qDAAqD;QACrD,WAAW,EAAE,IAAI;QACjB,qEAAqE;QACrE,oEAAoE;QACpE,qEAAqE;QACrE,mEAAmE;QACnE,oEAAoE;QACpE,wCAAwC;QACxC,YAAY,EAAE,KAAK;KACpB,CACF,CAAC;IAEF,MAAM,aAAa,EAAE,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type ModelInfo } from '../model-service.js';
|
|
2
2
|
import type { ILoggingService, ISettingsService } from '../service-interfaces.js';
|
|
3
3
|
import { type ProviderModelGroup } from './model-listing.js';
|
|
4
|
-
import type
|
|
5
|
-
|
|
6
|
-
export type ModelSettingsReasoningEffort
|
|
4
|
+
import { type ModelFetcher } from './model-catalog-session.js';
|
|
5
|
+
import { type ModelSettingsReasoningEffort } from './reasoning-effort.js';
|
|
6
|
+
export { VALID_REASONING_EFFORTS, type ModelSettingsReasoningEffort } from './reasoning-effort.js';
|
|
7
7
|
export type ParsedModelFlag = {
|
|
8
8
|
provider?: string;
|
|
9
9
|
pattern: string;
|
|
@@ -14,6 +14,36 @@ export type ModelMatch = {
|
|
|
14
14
|
provider: string;
|
|
15
15
|
model: ModelInfo;
|
|
16
16
|
};
|
|
17
|
+
export type InteractivePickerSelection = {
|
|
18
|
+
modelId: string;
|
|
19
|
+
provider: string;
|
|
20
|
+
};
|
|
21
|
+
export type InteractivePickerRequest = {
|
|
22
|
+
/** Filter query the picker opens with (the stripped, provider/suffix-free pattern). */
|
|
23
|
+
initialQuery: string;
|
|
24
|
+
/**
|
|
25
|
+
* Provider tab the picker should open on: the provider of the top-ranked
|
|
26
|
+
* match, so the seeded query actually matches in the catalog the picker
|
|
27
|
+
* is prioritized in the unified catalog.
|
|
28
|
+
*/
|
|
29
|
+
initialProvider?: string;
|
|
30
|
+
/** Set when --provider (or a parsed provider prefix) narrows permanently; locks the tab. */
|
|
31
|
+
lockProvider?: string;
|
|
32
|
+
/** One-line explanations shown above the menu (e.g. why nothing matched). */
|
|
33
|
+
bannerLines?: string[];
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Opens the interactive model picker and resolves to the chosen model, or
|
|
37
|
+
* `null` on cancellation. Callers wire this to `runModelPickerHost`
|
|
38
|
+
* (source/services/models/model-picker-host.tsx); tests can supply a stub.
|
|
39
|
+
* When supplied, it REPLACES the readline-based `promptForDisambiguation`
|
|
40
|
+
* fallback for ambiguous matches, and replaces the hard `no_match` error with
|
|
41
|
+
* an interactive re-search seeded with the same query. It must only ever be
|
|
42
|
+
* supplied by a caller that has already confirmed an interactive session
|
|
43
|
+
* (real TTY, no positional prompt, no --json, no isolated-harness marker) —
|
|
44
|
+
* this module does not re-derive that eligibility itself.
|
|
45
|
+
*/
|
|
46
|
+
export type InteractivePicker = (request: InteractivePickerRequest) => Promise<InteractivePickerSelection | null>;
|
|
17
47
|
export type ModelResolutionResult = {
|
|
18
48
|
status: 'resolved';
|
|
19
49
|
modelId: string;
|
|
@@ -84,5 +114,7 @@ export declare function resolveModelFlag(deps: {
|
|
|
84
114
|
};
|
|
85
115
|
knownProviders?: string[];
|
|
86
116
|
providerIds?: string[];
|
|
117
|
+
/** See `InteractivePicker`. Only ever set by a confirmed-interactive caller. */
|
|
118
|
+
interactivePicker?: InteractivePicker;
|
|
87
119
|
}): Promise<ModelResolutionResult>;
|
|
88
120
|
//# sourceMappingURL=model-resolution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolution.d.ts","sourceRoot":"","sources":["../../../source/services/models/model-resolution.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"model-resolution.d.ts","sourceRoot":"","sources":["../../../source/services/models/model-resolution.ts"],"names":[],"mappings":"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"}
|