@qduc/term2 0.20.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 +176 -102
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +144 -41
- package/dist/app.js.map +1 -1
- package/dist/cli.js +197 -38
- package/dist/cli.js.map +1 -1
- package/dist/commands/guarded-settings-command.d.ts.map +1 -1
- package/dist/commands/guarded-settings-command.js +33 -5
- package/dist/commands/guarded-settings-command.js.map +1 -1
- package/dist/commands/mode-commands.d.ts +17 -12
- package/dist/commands/mode-commands.d.ts.map +1 -1
- package/dist/commands/mode-commands.js +68 -44
- package/dist/commands/mode-commands.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/ApplicationInputSurface.d.ts.map +1 -1
- package/dist/components/input/ApplicationInputSurface.js +4 -0
- package/dist/components/input/ApplicationInputSurface.js.map +1 -1
- package/dist/components/input/MenuSurface.d.ts.map +1 -1
- package/dist/components/input/MenuSurface.js +13 -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/ProfileMenuSession.d.ts +16 -0
- package/dist/components/input/ProfileMenuSession.d.ts.map +1 -0
- package/dist/components/input/ProfileMenuSession.js +64 -0
- package/dist/components/input/ProfileMenuSession.js.map +1 -0
- 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/determine-active-menu.d.ts +3 -0
- package/dist/components/input/determine-active-menu.d.ts.map +1 -1
- package/dist/components/input/determine-active-menu.js +6 -1
- package/dist/components/input/determine-active-menu.js.map +1 -1
- package/dist/components/input/menu-registry.d.ts.map +1 -1
- package/dist/components/input/menu-registry.js +2 -0
- package/dist/components/input/menu-registry.js.map +1 -1
- package/dist/components/input/menu-types.d.ts +5 -1
- package/dist/components/input/menu-types.d.ts.map +1 -1
- package/dist/components/input/triggers.d.ts +1 -0
- package/dist/components/input/triggers.d.ts.map +1 -1
- package/dist/components/input/triggers.js +28 -2
- package/dist/components/input/triggers.js.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.js +6 -2
- package/dist/components/layout/BackgroundTaskManager.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 -104
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
- package/dist/components/layout/Banner.d.ts.map +1 -1
- package/dist/components/layout/Banner.js +10 -5
- package/dist/components/layout/Banner.js.map +1 -1
- package/dist/components/layout/StatusBar.d.ts.map +1 -1
- package/dist/components/layout/StatusBar.js +25 -12
- package/dist/components/layout/StatusBar.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 +12 -0
- package/dist/components/menu/ProfileSelectionMenu.d.ts.map +1 -0
- package/dist/components/menu/ProfileSelectionMenu.js +49 -0
- package/dist/components/menu/ProfileSelectionMenu.js.map +1 -0
- package/dist/components/menu/ResumeSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.js +9 -19
- 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/ChatMessage.js +1 -1
- package/dist/components/message/ChatMessage.js.map +1 -1
- 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 +28 -11
- 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 +35 -5
- 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/context/InputContext.d.ts +1 -1
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js +8 -0
- package/dist/context/InputContext.js.map +1 -1
- package/dist/contracts/session-rollover.d.ts +9 -1
- package/dist/contracts/session-rollover.d.ts.map +1 -1
- package/dist/contracts/streamed-model-turn.d.ts +26 -2
- package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
- package/dist/gateway/gateway.d.ts.map +1 -1
- package/dist/gateway/gateway.js +19 -23
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/launcher-seam.d.ts.map +1 -1
- package/dist/gateway/launcher-seam.js +2 -19
- package/dist/gateway/launcher-seam.js.map +1 -1
- package/dist/gateway/settings-rpc.d.ts +1 -1
- package/dist/gateway/settings-rpc.d.ts.map +1 -1
- package/dist/gateway/settings-rpc.js +2 -0
- package/dist/gateway/settings-rpc.js.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 +16 -110
- 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-commands.d.ts +3 -1
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +21 -14
- package/dist/hooks/use-app-commands.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 +5 -2
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +108 -17
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-handoff-flow.d.ts +1 -0
- package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
- package/dist/hooks/use-handoff-flow.js +19 -12
- package/dist/hooks/use-handoff-flow.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-profile-selection.d.ts +34 -0
- package/dist/hooks/use-profile-selection.d.ts.map +1 -0
- package/dist/hooks/use-profile-selection.js +103 -0
- package/dist/hooks/use-profile-selection.js.map +1 -0
- package/dist/hooks/use-resume-selection.d.ts +2 -0
- package/dist/hooks/use-resume-selection.d.ts.map +1 -1
- package/dist/hooks/use-resume-selection.js +11 -9
- package/dist/hooks/use-resume-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 +20 -94
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/hooks/use-skill-selection.d.ts +5 -3
- package/dist/hooks/use-skill-selection.d.ts.map +1 -1
- package/dist/hooks/use-skill-selection.js +8 -6
- package/dist/hooks/use-skill-selection.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 +211 -55
- 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 +27 -11
- 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 +110 -46
- 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/harness-input-idle.d.ts +10 -0
- package/dist/lib/harness-input-idle.d.ts.map +1 -1
- package/dist/lib/harness-input-idle.js +47 -5
- package/dist/lib/harness-input-idle.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 +231 -37
- 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/prefix-quality.test.ts +8 -5
- package/dist/prompts/prompt-constructor.d.ts +7 -6
- package/dist/prompts/prompt-constructor.d.ts.map +1 -1
- package/dist/prompts/prompt-constructor.js +17 -7
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +250 -52
- package/dist/prompts/prompt-constructor.ts +27 -13
- 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 +5 -1
- package/dist/prompts/shell-auto-approval.d.ts +2 -2
- package/dist/prompts/shell-auto-approval.d.ts.map +1 -1
- package/dist/prompts/shell-auto-approval.js +19 -16
- package/dist/prompts/shell-auto-approval.js.map +1 -1
- package/dist/prompts/shell-auto-approval.ts +19 -16
- 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/aborted-stream-recorder.js +2 -1
- package/dist/providers/aborted-stream-recorder.js.map +1 -1
- package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
- package/dist/providers/ai-sdk-streamed-model.js +7 -0
- package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
- 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 +193 -44
- package/dist/providers/codex-responses-model.js.map +1 -1
- package/dist/providers/codex-turn-converter.d.ts.map +1 -1
- package/dist/providers/codex-turn-converter.js +21 -4
- package/dist/providers/codex-turn-converter.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 +4 -2
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/fetch/logging-middleware.d.ts.map +1 -1
- package/dist/providers/fetch/logging-middleware.js +22 -2
- package/dist/providers/fetch/logging-middleware.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/openai-chat-completions-model.js +119 -50
- package/dist/providers/openai-chat-completions-model.js.map +1 -1
- package/dist/providers/openai-responses-model.d.ts.map +1 -1
- package/dist/providers/openai-responses-model.js +131 -15
- package/dist/providers/openai-responses-model.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/registry.d.ts +1 -1
- package/dist/providers/registry.d.ts.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 +14 -2
- package/dist/providers/retrying-model.js.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts +11 -2
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.js +128 -24
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
- package/dist/services/agent-runtime/context-compaction/context-milestone-reminder.d.ts +2 -3
- package/dist/services/agent-runtime/context-compaction/context-milestone-reminder.d.ts.map +1 -1
- package/dist/services/agent-runtime/context-compaction/context-milestone-reminder.js +18 -9
- package/dist/services/agent-runtime/context-compaction/context-milestone-reminder.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/generation-guard.d.ts +25 -1
- package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
- package/dist/services/agent-runtime/generation-guard.js +105 -1
- package/dist/services/agent-runtime/generation-guard.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/agent-stream.d.ts +2 -0
- package/dist/services/agent-stream.d.ts.map +1 -1
- package/dist/services/agent-stream.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-decision-policy.js +2 -2
- package/dist/services/approval/approval-decision-policy.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 +5 -1
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.js +44 -22
- package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts +5 -0
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +121 -20
- 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 +36 -8
- 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 +34 -32
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-decoder.d.ts.map +1 -1
- package/dist/services/conversation/conversation-decoder.js +6 -2
- package/dist/services/conversation/conversation-decoder.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 +79 -43
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-persistence.d.ts +35 -0
- package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.js +162 -19
- package/dist/services/conversation/conversation-persistence.js.map +1 -1
- package/dist/services/conversation/conversation-replay.d.ts +2 -0
- package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
- package/dist/services/conversation/conversation-replay.js +71 -57
- package/dist/services/conversation/conversation-replay.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 +48 -27
- 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 +14 -3
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +104 -32
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/session-browser.d.ts +35 -23
- package/dist/services/conversation/session-browser.d.ts.map +1 -1
- package/dist/services/conversation/session-browser.js +338 -67
- 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/handoff/handoff-session.d.ts +2 -0
- package/dist/services/handoff/handoff-session.d.ts.map +1 -1
- package/dist/services/handoff/handoff-session.js +19 -3
- package/dist/services/handoff/handoff-session.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-events.d.ts +30 -3
- package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-events.js +1 -4
- package/dist/services/logging/conversation-log-events.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 +1 -0
- package/dist/services/logging/logging-service.d.ts.map +1 -1
- package/dist/services/logging/logging-service.js +6 -2
- package/dist/services/logging/logging-service.js.map +1 -1
- package/dist/services/logging/provider-traffic.d.ts +29 -2
- package/dist/services/logging/provider-traffic.d.ts.map +1 -1
- package/dist/services/logging/provider-traffic.js +251 -21
- package/dist/services/logging/provider-traffic.js.map +1 -1
- package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
- package/dist/services/memory/memory-capabilities.js +17 -5
- package/dist/services/memory/memory-capabilities.js.map +1 -1
- package/dist/services/memory/memory-store.d.ts +17 -0
- package/dist/services/memory/memory-store.d.ts.map +1 -1
- package/dist/services/memory/memory-store.js +71 -26
- package/dist/services/memory/memory-store.js.map +1 -1
- package/dist/services/mode-notices.d.ts +12 -9
- package/dist/services/mode-notices.d.ts.map +1 -1
- package/dist/services/mode-notices.js +83 -54
- package/dist/services/mode-notices.js.map +1 -1
- package/dist/services/model-service.d.ts +64 -4
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js +303 -21
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/models/model-catalog-session.d.ts +6 -0
- package/dist/services/models/model-catalog-session.d.ts.map +1 -1
- package/dist/services/models/model-catalog-session.js +18 -10
- 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 +97 -0
- package/dist/services/models/model-listing.d.ts.map +1 -0
- package/dist/services/models/model-listing.js +129 -0
- package/dist/services/models/model-listing.js.map +1 -0
- 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 +120 -0
- package/dist/services/models/model-resolution.d.ts.map +1 -0
- package/dist/services/models/model-resolution.js +521 -0
- package/dist/services/models/model-resolution.js.map +1 -0
- 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/plan-mode-interceptor.d.ts.map +1 -1
- package/dist/services/plan-mode-interceptor.js +5 -6
- package/dist/services/plan-mode-interceptor.js.map +1 -1
- package/dist/services/profiles/active-profile.d.ts +5 -0
- package/dist/services/profiles/active-profile.d.ts.map +1 -0
- package/dist/services/profiles/active-profile.js +33 -0
- package/dist/services/profiles/active-profile.js.map +1 -0
- package/dist/services/profiles/index.d.ts +9 -0
- package/dist/services/profiles/index.d.ts.map +1 -0
- package/dist/services/profiles/index.js +9 -0
- package/dist/services/profiles/index.js.map +1 -0
- package/dist/services/profiles/labels.d.ts +7 -0
- package/dist/services/profiles/labels.d.ts.map +1 -0
- package/dist/services/profiles/labels.js +22 -0
- package/dist/services/profiles/labels.js.map +1 -0
- package/dist/services/profiles/legacy-adapter.d.ts +28 -0
- package/dist/services/profiles/legacy-adapter.d.ts.map +1 -0
- package/dist/services/profiles/legacy-adapter.js +69 -0
- package/dist/services/profiles/legacy-adapter.js.map +1 -0
- package/dist/services/profiles/profile-transition.d.ts +48 -0
- package/dist/services/profiles/profile-transition.d.ts.map +1 -0
- package/dist/services/profiles/profile-transition.js +109 -0
- package/dist/services/profiles/profile-transition.js.map +1 -0
- package/dist/services/profiles/registry.d.ts +17 -0
- package/dist/services/profiles/registry.d.ts.map +1 -0
- package/dist/services/profiles/registry.js +147 -0
- package/dist/services/profiles/registry.js.map +1 -0
- package/dist/services/profiles/resolver.d.ts +10 -0
- package/dist/services/profiles/resolver.d.ts.map +1 -0
- package/dist/services/profiles/resolver.js +573 -0
- package/dist/services/profiles/resolver.js.map +1 -0
- package/dist/services/profiles/schema.d.ts +960 -0
- package/dist/services/profiles/schema.d.ts.map +1 -0
- package/dist/services/profiles/schema.js +196 -0
- package/dist/services/profiles/schema.js.map +1 -0
- package/dist/services/profiles/types.d.ts +224 -0
- package/dist/services/profiles/types.d.ts.map +1 -0
- package/dist/services/profiles/types.js +9 -0
- package/dist/services/profiles/types.js.map +1 -0
- package/dist/services/retry/committed-tool-continuation.d.ts +5 -0
- package/dist/services/retry/committed-tool-continuation.d.ts.map +1 -1
- package/dist/services/retry/committed-tool-continuation.js +6 -3
- package/dist/services/retry/committed-tool-continuation.js.map +1 -1
- 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-classifier.d.ts.map +1 -1
- package/dist/services/retry/retry-classifier.js +13 -10
- package/dist/services/retry/retry-classifier.js.map +1 -1
- package/dist/services/retry/retry-error-classification.d.ts +7 -0
- package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.js +32 -9
- package/dist/services/retry/retry-error-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/runtime-setting-router.d.ts.map +1 -1
- package/dist/services/runtime-setting-router.js +76 -23
- package/dist/services/runtime-setting-router.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 +55 -20
- 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-input-planner.d.ts.map +1 -1
- package/dist/services/session/session-input-planner.js +2 -9
- package/dist/services/session/session-input-planner.js.map +1 -1
- 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-manager.d.ts.map +1 -1
- package/dist/services/session/session-manager.js +4 -1
- package/dist/services/session/session-manager.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 +9 -1
- package/dist/services/session-rollover/session-rollover-brief.d.ts.map +1 -1
- package/dist/services/session-rollover/session-rollover-brief.js +18 -3
- 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-persistence.js +1 -1
- package/dist/services/settings/settings-persistence.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +132 -15
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +133 -32
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-service.d.ts +3 -1
- package/dist/services/settings/settings-service.d.ts.map +1 -1
- package/dist/services/settings/settings-service.js +88 -91
- package/dist/services/settings/settings-service.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 +61 -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 +12 -2
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js +61 -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/mentor-runner.d.ts.map +1 -1
- package/dist/services/subagents/mentor-runner.js +5 -2
- package/dist/services/subagents/mentor-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 +12 -2
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
- package/dist/services/subagents/subagent-notification-store.js +14 -5
- 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 +299 -56
- 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/services/tool-toggles.d.ts +20 -0
- package/dist/services/tool-toggles.d.ts.map +1 -0
- package/dist/services/tool-toggles.js +115 -0
- package/dist/services/tool-toggles.js.map +1 -0
- package/dist/slash-commands.d.ts +3 -0
- package/dist/slash-commands.d.ts.map +1 -1
- package/dist/slash-commands.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 +2 -0
- package/dist/tools/agent/configure-task-check-in.d.ts.map +1 -1
- package/dist/tools/agent/configure-task-check-in.js +15 -6
- 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 +2 -15
- package/dist/tools/file/apply-patch.d.ts.map +1 -1
- package/dist/tools/file/apply-patch.js +171 -108
- 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 +31 -0
- package/dist/tools/file/upstream-apply-patch.d.ts.map +1 -0
- package/dist/tools/file/upstream-apply-patch.js +126 -0
- package/dist/tools/file/upstream-apply-patch.js.map +1 -0
- package/dist/tools/format-helpers.d.ts +2 -0
- package/dist/tools/format-helpers.d.ts.map +1 -1
- package/dist/tools/format-helpers.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 +33 -7
- 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 +18 -3
- 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 +66 -11
- 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 +39 -2
- 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/ai/token-usage.d.ts +7 -0
- package/dist/utils/ai/token-usage.d.ts.map +1 -1
- package/dist/utils/ai/token-usage.js +6 -2
- package/dist/utils/ai/token-usage.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 +54 -1
- package/dist/utils/conversation/conversation-utils.js.map +1 -1
- package/dist/utils/conversation/message-buffer.d.ts +16 -0
- package/dist/utils/conversation/message-buffer.d.ts.map +1 -1
- package/dist/utils/conversation/message-buffer.js +33 -0
- package/dist/utils/conversation/message-buffer.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/output/trim-tool-output.d.ts +1 -1
- package/dist/utils/output/trim-tool-output.d.ts.map +1 -1
- package/dist/utils/output/trim-tool-output.js +20 -0
- package/dist/utils/output/trim-tool-output.js.map +1 -1
- package/dist/utils/resume-list.d.ts +2 -0
- package/dist/utils/resume-list.d.ts.map +1 -1
- package/dist/utils/resume-list.js +7 -14
- package/dist/utils/resume-list.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 +138 -37
- 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 +13 -1
- package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
- package/dist/utils/streaming/streaming-speed-tracker.d.ts +15 -0
- package/dist/utils/streaming/streaming-speed-tracker.d.ts.map +1 -1
- package/dist/utils/streaming/streaming-speed-tracker.js +18 -1
- package/dist/utils/streaming/streaming-speed-tracker.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 +7 -4
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-notices.d.ts","sourceRoot":"","sources":["../../source/services/mode-notices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mode-notices.d.ts","sourceRoot":"","sources":["../../source/services/mode-notices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAwB3D,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC;AAC5E,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAkCrE,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC;AAC3E,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AA+BpE,eAAO,MAAM,sBAAsB,QAAsD,CAAC;AAC1F,eAAO,MAAM,qBAAqB,QAAqD,CAAC;AACxF,eAAO,MAAM,wBAAwB,QAAwD,CAAC;AAC9F,eAAO,MAAM,uBAAuB,QAAuD,CAAC;AAC5F,eAAO,MAAM,8BAA8B,QAA8D,CAAC;AAC1G,eAAO,MAAM,6BAA6B,QAA6D,CAAC;AAExG,iFAAiF;AACjF,wBAAgB,gCAAgC,CAC9C,eAAe,EAAE,gBAAgB,EACjC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC5B,IAAI,CASN"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { resolveActiveProfile } from './profiles/active-profile.js';
|
|
2
|
+
import { resolveProfile } from './profiles/resolver.js';
|
|
3
|
+
import { ProfileResolutionError } from './profiles/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Canonical mode-change notices injected into the next user message when the
|
|
5
6
|
* user toggles a runtime mode. Prefixing the next real turn avoids a
|
|
@@ -9,59 +10,87 @@ import path from 'node:path';
|
|
|
9
10
|
* The workflow body lives here, not in the instruction prefix, so a toggle
|
|
10
11
|
* cannot change developer instructions on chained Responses-Lite HTTP turns.
|
|
11
12
|
*/
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
.readFileSync(path.join(import.meta.dirname, '../prompts/orchestrator.md'), 'utf8')
|
|
20
|
-
.trim();
|
|
21
|
-
export const PLAN_MODE_ENTER_NOTICE = '<system-notice>\n' +
|
|
22
|
-
'Plan Mode is ON: the workspace is read-only. Do not create or modify files, run ' +
|
|
23
|
-
'state-changing commands, or spawn write-capable subagents. Investigate with read-only ' +
|
|
24
|
-
'tools and deliver a concrete, ordered implementation plan; tell the user to exit Plan ' +
|
|
25
|
-
'Mode to execute it.\n\n' +
|
|
26
|
-
PLAN_MODE_WORKFLOW +
|
|
27
|
-
'\n</system-notice>';
|
|
28
|
-
export const PLAN_MODE_EXIT_NOTICE = '<system-notice>\n' +
|
|
29
|
-
'Plan Mode is now ' +
|
|
30
|
-
'OFF: the read-only restriction is lifted. You may again create and ' +
|
|
31
|
-
'modify files, run state-changing commands, and spawn write-capable subagents to execute ' +
|
|
32
|
-
'the plan.\n' +
|
|
33
|
-
'</system-notice>';
|
|
34
|
-
export const MENTOR_MODE_ENTER_NOTICE = '<system-notice>\n' +
|
|
35
|
-
'Mentor Mode is ON. Work collaboratively with the configured mentor model and follow the mentor workflow below.\n\n' +
|
|
36
|
-
MENTOR_MODE_WORKFLOW +
|
|
37
|
-
'\n</system-notice>';
|
|
38
|
-
export const MENTOR_MODE_EXIT_NOTICE = '<system-notice>\n' +
|
|
39
|
-
'Mentor Mode is now OFF. Return to the normal workflow and do not treat the mentor-specific workflow as active.\n' +
|
|
40
|
-
'</system-notice>';
|
|
41
|
-
export const ORCHESTRATOR_MODE_ENTER_NOTICE = '<system-notice>\n' +
|
|
42
|
-
'Orchestrator Mode is ON. Follow the orchestrator workflow below while retaining end-to-end ownership of the user outcome.\n\n' +
|
|
43
|
-
ORCHESTRATOR_MODE_WORKFLOW +
|
|
44
|
-
'\n</system-notice>';
|
|
45
|
-
export const ORCHESTRATOR_MODE_EXIT_NOTICE = '<system-notice>\n' +
|
|
46
|
-
'Orchestrator Mode is now OFF. Return to the normal workflow; you may work directly when appropriate instead of following orchestrator-only delegation policy.\n' +
|
|
47
|
-
'</system-notice>';
|
|
48
|
-
export const planModeNotice = (entering) => entering ? PLAN_MODE_ENTER_NOTICE : PLAN_MODE_EXIT_NOTICE;
|
|
49
|
-
export const runtimeModeNotice = (mode, entering) => {
|
|
50
|
-
if (mode === 'plan')
|
|
51
|
-
return planModeNotice(entering);
|
|
52
|
-
if (mode === 'mentor')
|
|
53
|
-
return entering ? MENTOR_MODE_ENTER_NOTICE : MENTOR_MODE_EXIT_NOTICE;
|
|
54
|
-
return entering ? ORCHESTRATOR_MODE_ENTER_NOTICE : ORCHESTRATOR_MODE_EXIT_NOTICE;
|
|
13
|
+
const NOTICE_PROFILE_IDS = new Set(['builtin:plan', 'builtin:mentor', 'builtin:orchestrator']);
|
|
14
|
+
const resolveNoticeProfile = (profile) => {
|
|
15
|
+
if (typeof profile !== 'string')
|
|
16
|
+
return profile;
|
|
17
|
+
if (!NOTICE_PROFILE_IDS.has(profile))
|
|
18
|
+
return null;
|
|
19
|
+
return resolveProfile(profile);
|
|
55
20
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
21
|
+
const workflowText = (profile) => {
|
|
22
|
+
const workflow = profile.instructions.workflow;
|
|
23
|
+
return workflow?.kind === 'markdown' ? workflow.content : null;
|
|
24
|
+
};
|
|
25
|
+
export function profileEnterNotice(profile) {
|
|
26
|
+
const resolved = resolveNoticeProfile(profile);
|
|
27
|
+
if (!resolved)
|
|
28
|
+
return null;
|
|
29
|
+
const workflow = workflowText(resolved);
|
|
30
|
+
if (!workflow)
|
|
31
|
+
return null;
|
|
32
|
+
if (resolved.identity.id === 'builtin:plan')
|
|
33
|
+
return ('<system-notice>\n' +
|
|
34
|
+
'Plan Mode is ON: the workspace is read-only. Do not create or modify files, run ' +
|
|
35
|
+
'state-changing commands, or spawn write-capable subagents. Investigate with read-only ' +
|
|
36
|
+
'tools and deliver a concrete, ordered implementation plan; tell the user to exit Plan ' +
|
|
37
|
+
'Mode to execute it.\n\n' +
|
|
38
|
+
workflow +
|
|
39
|
+
'\n</system-notice>');
|
|
40
|
+
if (resolved.identity.id === 'builtin:mentor')
|
|
41
|
+
return ('<system-notice>\n' +
|
|
42
|
+
'Mentor Mode is ON. Work collaboratively with the configured mentor model and follow the mentor workflow below.\n\n' +
|
|
43
|
+
workflow +
|
|
44
|
+
'\n</system-notice>');
|
|
45
|
+
if (resolved.identity.id === 'builtin:orchestrator')
|
|
46
|
+
return ('<system-notice>\n' +
|
|
47
|
+
'Orchestrator Mode is ON. Follow the orchestrator workflow below while retaining end-to-end ownership of the user outcome.\n\n' +
|
|
48
|
+
workflow +
|
|
49
|
+
'\n</system-notice>');
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
export function profileExitNotice(profile) {
|
|
53
|
+
const resolved = resolveNoticeProfile(profile);
|
|
54
|
+
if (!resolved)
|
|
55
|
+
return null;
|
|
56
|
+
if (resolved.identity.id === 'builtin:plan')
|
|
57
|
+
return ('<system-notice>\n' +
|
|
58
|
+
'Plan Mode is now ' +
|
|
59
|
+
'OFF: the read-only restriction is lifted. You may again create and ' +
|
|
60
|
+
'modify files, run state-changing commands, and spawn write-capable subagents to execute ' +
|
|
61
|
+
'the plan.\n' +
|
|
62
|
+
'</system-notice>');
|
|
63
|
+
if (resolved.identity.id === 'builtin:mentor')
|
|
64
|
+
return ('<system-notice>\n' +
|
|
65
|
+
'Mentor Mode is now OFF. Return to the normal workflow and do not treat the mentor-specific workflow as active.\n' +
|
|
66
|
+
'</system-notice>');
|
|
67
|
+
if (resolved.identity.id === 'builtin:orchestrator')
|
|
68
|
+
return ('<system-notice>\n' +
|
|
69
|
+
'Orchestrator Mode is now OFF. Return to the normal workflow; you may work directly when appropriate instead of following orchestrator-only delegation policy.\n' +
|
|
70
|
+
'</system-notice>');
|
|
71
|
+
return null;
|
|
63
72
|
}
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
// Keep the historical constants available to compatibility callers. Their
|
|
74
|
+
// content is produced through Profile resolution rather than a second prompt
|
|
75
|
+
// file-loading path in this module.
|
|
76
|
+
export const PLAN_MODE_ENTER_NOTICE = profileEnterNotice(resolveProfile('builtin:plan'));
|
|
77
|
+
export const PLAN_MODE_EXIT_NOTICE = profileExitNotice(resolveProfile('builtin:plan'));
|
|
78
|
+
export const MENTOR_MODE_ENTER_NOTICE = profileEnterNotice(resolveProfile('builtin:mentor'));
|
|
79
|
+
export const MENTOR_MODE_EXIT_NOTICE = profileExitNotice(resolveProfile('builtin:mentor'));
|
|
80
|
+
export const ORCHESTRATOR_MODE_ENTER_NOTICE = profileEnterNotice(resolveProfile('builtin:orchestrator'));
|
|
81
|
+
export const ORCHESTRATOR_MODE_EXIT_NOTICE = profileExitNotice(resolveProfile('builtin:orchestrator'));
|
|
82
|
+
/** Prime the active Profile's workflow once, without consulting legacy flags. */
|
|
83
|
+
export function primeActiveProfileNoticeIfActive(settingsService, queue) {
|
|
84
|
+
try {
|
|
85
|
+
const notice = profileEnterNotice(resolveActiveProfile(settingsService));
|
|
86
|
+
if (notice)
|
|
87
|
+
queue(notice);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
// Startup priming should not make an otherwise recoverable settings state
|
|
91
|
+
// unusable. Activation itself remains strict and reports this error.
|
|
92
|
+
if (!(error instanceof ProfileResolutionError))
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
66
95
|
}
|
|
67
96
|
//# sourceMappingURL=mode-notices.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-notices.js","sourceRoot":"","sources":["../../source/services/mode-notices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mode-notices.js","sourceRoot":"","sources":["../../source/services/mode-notices.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,13 +8,53 @@ export type ModelInfo = {
|
|
|
8
8
|
/** Context window in tokens from the vendored model catalog, when known. */
|
|
9
9
|
contextWindow?: number;
|
|
10
10
|
};
|
|
11
|
-
type
|
|
12
|
-
|
|
11
|
+
export type DiskModelCacheEntry = {
|
|
12
|
+
version: 1;
|
|
13
|
+
provider: string;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
models: ModelInfo[];
|
|
16
|
+
};
|
|
17
|
+
export declare const MODEL_CACHE_TTL_MS: number;
|
|
18
|
+
export declare const MODEL_CACHE_STALE_GRACE_MS: number;
|
|
19
|
+
export type FetchModelsDeps = {
|
|
13
20
|
settingsService: ISettingsService;
|
|
14
21
|
loggingService: ILoggingService;
|
|
15
22
|
signal?: AbortSignal;
|
|
16
|
-
|
|
17
|
-
|
|
23
|
+
cacheDir?: string;
|
|
24
|
+
now?: () => number;
|
|
25
|
+
ttlMs?: number;
|
|
26
|
+
};
|
|
27
|
+
type FetchFn = typeof fetch;
|
|
28
|
+
export declare function setModelCacheDirForTest(dir: string | null): void;
|
|
29
|
+
export declare function setModelCacheClockForTest(clock: (() => number) | null): void;
|
|
30
|
+
export declare function clearModelMemoryCacheForTest(): void;
|
|
31
|
+
export declare function getModelCacheDir(customDir?: string): string;
|
|
32
|
+
export declare function getModelCacheFilePath(provider: string, customDir?: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Determines whether candidate models list represents a strict subset of previous models.
|
|
35
|
+
* An empty list or a list with strictly fewer models containing only IDs from previous is degraded.
|
|
36
|
+
*/
|
|
37
|
+
export declare function isStrictSubsetModels(candidates: ModelInfo[], previous: ModelInfo[]): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Read-only peek at whatever model listing is already warm for a provider:
|
|
40
|
+
* the in-memory cache if still fresh, else a non-expired disk cache entry.
|
|
41
|
+
* Never fetches, and never populates, refreshes, or evicts either cache
|
|
42
|
+
* layer — a cold or expired cache costs nothing beyond a Map lookup and, on
|
|
43
|
+
* a miss, one `fs.existsSync` check. Intended for opportunistic
|
|
44
|
+
* cross-provider exact-match collision detection after a fast, single-
|
|
45
|
+
* provider resolution (see `resolveModelFlag`); deliberately not a
|
|
46
|
+
* substitute for `fetchModels`, which is the only thing allowed to touch
|
|
47
|
+
* the network or write the cache.
|
|
48
|
+
*/
|
|
49
|
+
export declare function peekCachedModels(provider: string, opts?: {
|
|
50
|
+
cacheDir?: string;
|
|
51
|
+
now?: () => number;
|
|
52
|
+
ttlMs?: number;
|
|
53
|
+
}): ModelInfo[] | undefined;
|
|
54
|
+
export declare function fetchModels(deps: FetchModelsDeps, providerOverride?: string, fetchImpl?: FetchFn): Promise<ModelInfo[]>;
|
|
55
|
+
export declare function clearModelCache(provider?: string, opts?: {
|
|
56
|
+
cacheDir?: string;
|
|
57
|
+
}): void;
|
|
18
58
|
export declare function getModelDefaultReasoningLevel(provider: string, modelId: string): string | undefined;
|
|
19
59
|
/**
|
|
20
60
|
* Effort to use for a provider when the user's `agent.reasoningEffort` is
|
|
@@ -22,6 +62,26 @@ export declare function getModelDefaultReasoningLevel(provider: string, modelId:
|
|
|
22
62
|
* API choose", which for these providers means no reasoning at all.
|
|
23
63
|
*/
|
|
24
64
|
export declare function getProviderDefaultReasoningLevel(provider: string): string | undefined;
|
|
65
|
+
export type ModelMatchRank = {
|
|
66
|
+
/** Weighted subsequence score (id matches are weighted 2x over name matches). */
|
|
67
|
+
score: number;
|
|
68
|
+
/** 0 = query is a literal prefix of the matched text; 1 = query occurs right after a
|
|
69
|
+
* word boundary (`/`, `.`, `-`, `_`, or a case change); 2 = plain subsequence match. */
|
|
70
|
+
tier: number;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Classify how strongly `query` matches `text`, independent of score magnitude.
|
|
74
|
+
* Used to rank id-prefix and word-boundary hits above a merely-plausible
|
|
75
|
+
* subsequence match, before falling back to the continuous score as a tiebreaker.
|
|
76
|
+
*/
|
|
77
|
+
export declare function matchTier(query: string, text: string): number;
|
|
78
|
+
/**
|
|
79
|
+
* Score a model against a search query the way `filterModels` does internally
|
|
80
|
+
* (id matches weighted 2x over name matches, higher of the two wins), but
|
|
81
|
+
* surface the result instead of discarding it. Returns null when neither the
|
|
82
|
+
* id nor the name is a subsequence match.
|
|
83
|
+
*/
|
|
84
|
+
export declare function rankModelMatch(model: ModelInfo, query: string): ModelMatchRank | null;
|
|
25
85
|
export declare function filterModels(models: ModelInfo[], query: string): ModelInfo[];
|
|
26
86
|
export {};
|
|
27
87
|
//# sourceMappingURL=model-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-service.d.ts","sourceRoot":"","sources":["../../source/services/model-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-service.d.ts","sourceRoot":"","sources":["../../source/services/model-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,244 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import envPaths from 'env-paths';
|
|
4
|
+
import { BOUNDARY_REGEX, scoreSubsequence } from '../utils/subsequence-filter.js';
|
|
2
5
|
import { getProvider } from '../providers/index.js';
|
|
3
6
|
import { getModelContextWindow } from '../providers/model-catalog/catalog.js';
|
|
7
|
+
export const MODEL_CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
8
|
+
export const MODEL_CACHE_STALE_GRACE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days fallback ceiling for last-known-good
|
|
4
9
|
const cache = new Map();
|
|
10
|
+
let testCacheDir = null;
|
|
11
|
+
let testClock = null;
|
|
12
|
+
export function setModelCacheDirForTest(dir) {
|
|
13
|
+
testCacheDir = dir;
|
|
14
|
+
}
|
|
15
|
+
export function setModelCacheClockForTest(clock) {
|
|
16
|
+
testClock = clock;
|
|
17
|
+
}
|
|
18
|
+
export function clearModelMemoryCacheForTest() {
|
|
19
|
+
cache.clear();
|
|
20
|
+
}
|
|
21
|
+
export function getModelCacheDir(customDir) {
|
|
22
|
+
const baseDir = customDir || testCacheDir || process.env.TERM2_CACHE_DIR || envPaths('term2').cache;
|
|
23
|
+
return path.join(baseDir, 'models');
|
|
24
|
+
}
|
|
25
|
+
export function getModelCacheFilePath(provider, customDir) {
|
|
26
|
+
const safeName = provider.replace(/[^a-zA-Z0-9-]/g, (c) => `_${c.charCodeAt(0).toString(16).padStart(2, '0')}_`);
|
|
27
|
+
return path.join(getModelCacheDir(customDir), `${safeName}.json`);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Determines whether candidate models list represents a strict subset of previous models.
|
|
31
|
+
* An empty list or a list with strictly fewer models containing only IDs from previous is degraded.
|
|
32
|
+
*/
|
|
33
|
+
export function isStrictSubsetModels(candidates, previous) {
|
|
34
|
+
if (previous.length === 0)
|
|
35
|
+
return false;
|
|
36
|
+
if (candidates.length === 0)
|
|
37
|
+
return true;
|
|
38
|
+
if (candidates.length >= previous.length)
|
|
39
|
+
return false;
|
|
40
|
+
const previousIds = new Set(previous.map((m) => m.id));
|
|
41
|
+
return candidates.every((m) => previousIds.has(m.id));
|
|
42
|
+
}
|
|
43
|
+
function readDiskCache(provider, cacheDir, nowFn, ttlMs = MODEL_CACHE_TTL_MS, loggingService) {
|
|
44
|
+
try {
|
|
45
|
+
const filePath = getModelCacheFilePath(provider, cacheDir);
|
|
46
|
+
if (!fs.existsSync(filePath)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
50
|
+
const parsed = JSON.parse(raw);
|
|
51
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (parsed.version !== 1) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
if (parsed.provider !== provider) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
if (typeof parsed.timestamp !== 'number' || !Number.isFinite(parsed.timestamp)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const now = nowFn ?? testClock ?? Date.now;
|
|
64
|
+
const currentTime = now();
|
|
65
|
+
const age = currentTime - parsed.timestamp;
|
|
66
|
+
if (age < 0 || age >= ttlMs) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (!Array.isArray(parsed.models) || parsed.models.length === 0) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
for (const m of parsed.models) {
|
|
73
|
+
if (!m || typeof m !== 'object' || typeof m.id !== 'string') {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return parsed.models;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
loggingService?.debug?.('Failed to read model disk cache', { provider, error: String(error) });
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Read-only peek at whatever model listing is already warm for a provider:
|
|
86
|
+
* the in-memory cache if still fresh, else a non-expired disk cache entry.
|
|
87
|
+
* Never fetches, and never populates, refreshes, or evicts either cache
|
|
88
|
+
* layer — a cold or expired cache costs nothing beyond a Map lookup and, on
|
|
89
|
+
* a miss, one `fs.existsSync` check. Intended for opportunistic
|
|
90
|
+
* cross-provider exact-match collision detection after a fast, single-
|
|
91
|
+
* provider resolution (see `resolveModelFlag`); deliberately not a
|
|
92
|
+
* substitute for `fetchModels`, which is the only thing allowed to touch
|
|
93
|
+
* the network or write the cache.
|
|
94
|
+
*/
|
|
95
|
+
export function peekCachedModels(provider, opts) {
|
|
96
|
+
const now = opts?.now ?? testClock ?? Date.now;
|
|
97
|
+
const ttlMs = opts?.ttlMs ?? MODEL_CACHE_TTL_MS;
|
|
98
|
+
const memCached = cache.get(provider);
|
|
99
|
+
if (memCached) {
|
|
100
|
+
const age = now() - memCached.timestamp;
|
|
101
|
+
if (age >= 0 && age < ttlMs && memCached.models.length > 0) {
|
|
102
|
+
return memCached.models;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const diskCached = readDiskCache(provider, opts?.cacheDir, opts?.now, ttlMs);
|
|
106
|
+
return diskCached ?? undefined;
|
|
107
|
+
}
|
|
108
|
+
function writeDiskCache(provider, models, cacheDir, nowFn, loggingService) {
|
|
109
|
+
if (!models || models.length === 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const dir = getModelCacheDir(cacheDir);
|
|
113
|
+
const targetFile = getModelCacheFilePath(provider, cacheDir);
|
|
114
|
+
const baseName = path.basename(targetFile, '.json');
|
|
115
|
+
const tempFile = path.join(dir, `.${baseName}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`);
|
|
116
|
+
let tempCreated = false;
|
|
117
|
+
try {
|
|
118
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
119
|
+
const now = nowFn ?? testClock ?? Date.now;
|
|
120
|
+
const payload = {
|
|
121
|
+
version: 1,
|
|
122
|
+
provider,
|
|
123
|
+
timestamp: now(),
|
|
124
|
+
models,
|
|
125
|
+
};
|
|
126
|
+
const content = JSON.stringify(payload);
|
|
127
|
+
const fd = fs.openSync(tempFile, 'wx');
|
|
128
|
+
tempCreated = true;
|
|
129
|
+
try {
|
|
130
|
+
fs.writeFileSync(fd, content, 'utf-8');
|
|
131
|
+
fs.fsyncSync(fd);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
fs.closeSync(fd);
|
|
135
|
+
}
|
|
136
|
+
fs.renameSync(tempFile, targetFile);
|
|
137
|
+
tempCreated = false;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
loggingService?.warn('Failed to write model disk cache', { provider, error: String(error) });
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
if (tempCreated) {
|
|
144
|
+
try {
|
|
145
|
+
fs.unlinkSync(tempFile);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Best-effort cleanup of temp file
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
5
153
|
export async function fetchModels(deps, providerOverride, fetchImpl = fetch) {
|
|
6
154
|
const { settingsService, loggingService } = deps;
|
|
7
155
|
const provider = providerOverride || settingsService.get('agent.provider');
|
|
8
156
|
const cacheKey = provider;
|
|
9
|
-
|
|
10
|
-
|
|
157
|
+
const now = deps.now ?? testClock ?? Date.now;
|
|
158
|
+
const ttlMs = deps.ttlMs ?? MODEL_CACHE_TTL_MS;
|
|
159
|
+
// 1. In-memory cache hit
|
|
160
|
+
const memCached = cache.get(cacheKey);
|
|
161
|
+
if (memCached) {
|
|
162
|
+
const age = now() - memCached.timestamp;
|
|
163
|
+
if (age >= 0 && age < ttlMs && memCached.models.length > 0) {
|
|
164
|
+
return memCached.models;
|
|
165
|
+
}
|
|
166
|
+
cache.delete(cacheKey);
|
|
167
|
+
}
|
|
168
|
+
// 2. Disk cache hit
|
|
169
|
+
const diskCached = readDiskCache(provider, deps.cacheDir, deps.now, deps.ttlMs, loggingService);
|
|
170
|
+
if (diskCached && diskCached.length > 0) {
|
|
171
|
+
cache.set(cacheKey, { models: diskCached, timestamp: now() });
|
|
172
|
+
return diskCached;
|
|
11
173
|
}
|
|
174
|
+
// 3. Cache miss: read previous disk cache within fallback grace period as last-known-good
|
|
175
|
+
const previous = readDiskCache(provider, deps.cacheDir, deps.now, MODEL_CACHE_STALE_GRACE_MS, loggingService);
|
|
176
|
+
const startTime = now();
|
|
12
177
|
try {
|
|
13
178
|
const providerDef = getProvider(provider);
|
|
14
179
|
if (!providerDef) {
|
|
15
180
|
throw new Error(`Provider '${provider}' is not registered`);
|
|
16
181
|
}
|
|
17
182
|
const rawModels = await providerDef.fetchModels({ settingsService, loggingService, signal: deps.signal }, fetchImpl);
|
|
18
|
-
|
|
183
|
+
let models = rawModels.map((m) => ({
|
|
19
184
|
...m,
|
|
20
185
|
provider,
|
|
21
186
|
contextWindow: getModelContextWindow(provider, m.id),
|
|
22
187
|
}));
|
|
23
|
-
|
|
188
|
+
let isDegraded = previous !== null && previous.length > 0 && isStrictSubsetModels(models, previous);
|
|
189
|
+
if (isDegraded) {
|
|
190
|
+
loggingService.warn('Suspect degraded model list received from provider; attempting immediate retry', {
|
|
191
|
+
provider,
|
|
192
|
+
receivedCount: models.length,
|
|
193
|
+
previousCount: previous.length,
|
|
194
|
+
});
|
|
195
|
+
try {
|
|
196
|
+
const retryRaw = await providerDef.fetchModels({ settingsService, loggingService, signal: deps.signal }, fetchImpl);
|
|
197
|
+
const retryModels = retryRaw.map((m) => ({
|
|
198
|
+
...m,
|
|
199
|
+
provider,
|
|
200
|
+
contextWindow: getModelContextWindow(provider, m.id),
|
|
201
|
+
}));
|
|
202
|
+
if (!isStrictSubsetModels(retryModels, previous)) {
|
|
203
|
+
models = retryModels;
|
|
204
|
+
isDegraded = false;
|
|
205
|
+
loggingService.info?.('Model listing recovered on retry', {
|
|
206
|
+
provider,
|
|
207
|
+
recoveredCount: models.length,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (retryError) {
|
|
212
|
+
loggingService.warn('Model listing retry failed', {
|
|
213
|
+
provider,
|
|
214
|
+
error: String(retryError),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (isDegraded && previous && previous.length > 0) {
|
|
219
|
+
loggingService.warn('Provider returned degraded model list; preserving last-known-good catalog', {
|
|
220
|
+
provider,
|
|
221
|
+
receivedCount: models.length,
|
|
222
|
+
previousCount: previous.length,
|
|
223
|
+
});
|
|
224
|
+
// Do not write degraded models to disk cache.
|
|
225
|
+
// Retain expired disk cache file so subsequent sessions retry upstream.
|
|
226
|
+
cache.set(cacheKey, { models: previous, timestamp: now() });
|
|
227
|
+
return previous;
|
|
228
|
+
}
|
|
229
|
+
if (models.length > 0) {
|
|
230
|
+
cache.set(cacheKey, { models, timestamp: now() });
|
|
231
|
+
writeDiskCache(provider, models, deps.cacheDir, deps.now, loggingService);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
loggingService.warn('Provider returned empty model catalog; skipping disk cache write', { provider });
|
|
235
|
+
}
|
|
236
|
+
loggingService.debug?.('Fetched models from provider', {
|
|
237
|
+
provider,
|
|
238
|
+
count: models.length,
|
|
239
|
+
durationMs: now() - startTime,
|
|
240
|
+
degraded: isDegraded,
|
|
241
|
+
});
|
|
24
242
|
return models;
|
|
25
243
|
}
|
|
26
244
|
catch (error) {
|
|
@@ -42,19 +260,51 @@ export async function fetchModels(deps, providerOverride, fetchImpl = fetch) {
|
|
|
42
260
|
throw error;
|
|
43
261
|
}
|
|
44
262
|
}
|
|
45
|
-
export function clearModelCache(provider) {
|
|
263
|
+
export function clearModelCache(provider, opts) {
|
|
46
264
|
if (provider) {
|
|
47
265
|
cache.delete(provider);
|
|
48
266
|
}
|
|
49
267
|
else {
|
|
50
268
|
cache.clear();
|
|
51
269
|
}
|
|
270
|
+
try {
|
|
271
|
+
const dir = getModelCacheDir(opts?.cacheDir);
|
|
272
|
+
if (provider) {
|
|
273
|
+
const targetFile = getModelCacheFilePath(provider, opts?.cacheDir);
|
|
274
|
+
if (fs.existsSync(targetFile)) {
|
|
275
|
+
try {
|
|
276
|
+
fs.unlinkSync(targetFile);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// ignore
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
if (fs.existsSync(dir)) {
|
|
285
|
+
const files = fs.readdirSync(dir);
|
|
286
|
+
for (const file of files) {
|
|
287
|
+
if (file.endsWith('.json') || file.endsWith('.tmp')) {
|
|
288
|
+
try {
|
|
289
|
+
fs.unlinkSync(path.join(dir, file));
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
// ignore
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// Disk cache clearing is best-effort and must not throw
|
|
301
|
+
}
|
|
52
302
|
}
|
|
53
303
|
export function getModelDefaultReasoningLevel(provider, modelId) {
|
|
54
|
-
const
|
|
55
|
-
if (!
|
|
304
|
+
const entry = cache.get(provider);
|
|
305
|
+
if (!entry)
|
|
56
306
|
return undefined;
|
|
57
|
-
const model = models.find((m) => m.id === modelId);
|
|
307
|
+
const model = entry.models.find((m) => m.id === modelId);
|
|
58
308
|
return model?.default_reasoning_level;
|
|
59
309
|
}
|
|
60
310
|
// Providers that reason only when the request explicitly asks them to, and that
|
|
@@ -78,22 +328,54 @@ const PROVIDER_DEFAULT_REASONING_LEVEL = {
|
|
|
78
328
|
export function getProviderDefaultReasoningLevel(provider) {
|
|
79
329
|
return PROVIDER_DEFAULT_REASONING_LEVEL[provider.toLowerCase()];
|
|
80
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Classify how strongly `query` matches `text`, independent of score magnitude.
|
|
333
|
+
* Used to rank id-prefix and word-boundary hits above a merely-plausible
|
|
334
|
+
* subsequence match, before falling back to the continuous score as a tiebreaker.
|
|
335
|
+
*/
|
|
336
|
+
export function matchTier(query, text) {
|
|
337
|
+
const q = query.toLowerCase();
|
|
338
|
+
const t = text.toLowerCase();
|
|
339
|
+
if (!q)
|
|
340
|
+
return 2;
|
|
341
|
+
if (t.startsWith(q))
|
|
342
|
+
return 0;
|
|
343
|
+
let idx = t.indexOf(q);
|
|
344
|
+
while (idx !== -1) {
|
|
345
|
+
const prevChar = idx > 0 ? t[idx - 1] : undefined;
|
|
346
|
+
if (prevChar !== undefined && BOUNDARY_REGEX.test(prevChar)) {
|
|
347
|
+
return 1;
|
|
348
|
+
}
|
|
349
|
+
idx = t.indexOf(q, idx + 1);
|
|
350
|
+
}
|
|
351
|
+
return 2;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Score a model against a search query the way `filterModels` does internally
|
|
355
|
+
* (id matches weighted 2x over name matches, higher of the two wins), but
|
|
356
|
+
* surface the result instead of discarding it. Returns null when neither the
|
|
357
|
+
* id nor the name is a subsequence match.
|
|
358
|
+
*/
|
|
359
|
+
export function rankModelMatch(model, query) {
|
|
360
|
+
const idScore = scoreSubsequence(query, model.id);
|
|
361
|
+
const nameScore = model.name ? scoreSubsequence(query, model.name) : -Infinity;
|
|
362
|
+
// Reward ID match more than Name match
|
|
363
|
+
const weightedId = idScore === -Infinity ? -Infinity : idScore * 2;
|
|
364
|
+
const weightedName = nameScore === -Infinity ? -Infinity : nameScore;
|
|
365
|
+
if (weightedId === -Infinity && weightedName === -Infinity) {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
const useId = weightedId >= weightedName;
|
|
369
|
+
return {
|
|
370
|
+
score: useId ? weightedId : weightedName,
|
|
371
|
+
tier: matchTier(query, useId ? model.id : model.name),
|
|
372
|
+
};
|
|
373
|
+
}
|
|
81
374
|
export function filterModels(models, query) {
|
|
82
375
|
const trimmed = query.trim();
|
|
83
376
|
if (!trimmed) {
|
|
84
377
|
return models;
|
|
85
378
|
}
|
|
86
|
-
return models
|
|
87
|
-
.map((model) => {
|
|
88
|
-
const idScore = scoreSubsequence(trimmed, model.id);
|
|
89
|
-
const nameScore = model.name ? scoreSubsequence(trimmed, model.name) : -Infinity;
|
|
90
|
-
// Reward ID match more than Name match
|
|
91
|
-
const weightedId = idScore === -Infinity ? -Infinity : idScore * 2;
|
|
92
|
-
const weightedName = nameScore === -Infinity ? -Infinity : nameScore;
|
|
93
|
-
const score = Math.max(weightedId, weightedName);
|
|
94
|
-
return { model, score };
|
|
95
|
-
})
|
|
96
|
-
.filter(({ score }) => score !== -Infinity)
|
|
97
|
-
.map(({ model }) => model);
|
|
379
|
+
return models.filter((model) => rankModelMatch(model, trimmed) !== null);
|
|
98
380
|
}
|
|
99
381
|
//# sourceMappingURL=model-service.js.map
|