turboflux 1.0.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/LICENSE +21 -0
- package/README.md +177 -0
- package/bin/turboflux.mjs +28 -0
- package/dist/cli/brand.d.ts +7 -0
- package/dist/cli/brand.js +33 -0
- package/dist/cli/brand.js.map +1 -0
- package/dist/cli/commands/index.d.ts +4 -0
- package/dist/cli/commands/index.js +671 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/registry.d.ts +24 -0
- package/dist/cli/commands/registry.js +124 -0
- package/dist/cli/commands/registry.js.map +1 -0
- package/dist/cli/commands/types.d.ts +69 -0
- package/dist/cli/commands/types.js +2 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/components/App.d.ts +15 -0
- package/dist/cli/components/App.js +1738 -0
- package/dist/cli/components/App.js.map +1 -0
- package/dist/cli/components/ConversationHistory.d.ts +15 -0
- package/dist/cli/components/ConversationHistory.js +92 -0
- package/dist/cli/components/ConversationHistory.js.map +1 -0
- package/dist/cli/components/TranscriptViewport.d.ts +25 -0
- package/dist/cli/components/TranscriptViewport.js +77 -0
- package/dist/cli/components/TranscriptViewport.js.map +1 -0
- package/dist/cli/components/agentActivityModel.d.ts +24 -0
- package/dist/cli/components/agentActivityModel.js +45 -0
- package/dist/cli/components/agentActivityModel.js.map +1 -0
- package/dist/cli/components/appHelpers.d.ts +34 -0
- package/dist/cli/components/appHelpers.js +209 -0
- package/dist/cli/components/appHelpers.js.map +1 -0
- package/dist/cli/components/design-system/StatusIcon.d.ts +5 -0
- package/dist/cli/components/design-system/StatusIcon.js +25 -0
- package/dist/cli/components/design-system/StatusIcon.js.map +1 -0
- package/dist/cli/components/developerFlowModel.d.ts +36 -0
- package/dist/cli/components/developerFlowModel.js +88 -0
- package/dist/cli/components/developerFlowModel.js.map +1 -0
- package/dist/cli/components/diff/DiffCard.d.ts +16 -0
- package/dist/cli/components/diff/DiffCard.js +30 -0
- package/dist/cli/components/diff/DiffCard.js.map +1 -0
- package/dist/cli/components/diff/DiffHunks.d.ts +11 -0
- package/dist/cli/components/diff/DiffHunks.js +58 -0
- package/dist/cli/components/diff/DiffHunks.js.map +1 -0
- package/dist/cli/components/header/Header.d.ts +13 -0
- package/dist/cli/components/header/Header.js +25 -0
- package/dist/cli/components/header/Header.js.map +1 -0
- package/dist/cli/components/header/Mascot.d.ts +4 -0
- package/dist/cli/components/header/Mascot.js +53 -0
- package/dist/cli/components/header/Mascot.js.map +1 -0
- package/dist/cli/components/header/StatusLine.d.ts +21 -0
- package/dist/cli/components/header/StatusLine.js +110 -0
- package/dist/cli/components/header/StatusLine.js.map +1 -0
- package/dist/cli/components/input/EffortPicker.d.ts +30 -0
- package/dist/cli/components/input/EffortPicker.js +126 -0
- package/dist/cli/components/input/EffortPicker.js.map +1 -0
- package/dist/cli/components/input/ModelPicker.d.ts +15 -0
- package/dist/cli/components/input/ModelPicker.js +95 -0
- package/dist/cli/components/input/ModelPicker.js.map +1 -0
- package/dist/cli/components/input/PromptInput.d.ts +79 -0
- package/dist/cli/components/input/PromptInput.js +496 -0
- package/dist/cli/components/input/PromptInput.js.map +1 -0
- package/dist/cli/components/input/RewindSelector.d.ts +8 -0
- package/dist/cli/components/input/RewindSelector.js +45 -0
- package/dist/cli/components/input/RewindSelector.js.map +1 -0
- package/dist/cli/components/input/pasteState.d.ts +6 -0
- package/dist/cli/components/input/pasteState.js +42 -0
- package/dist/cli/components/input/pasteState.js.map +1 -0
- package/dist/cli/components/input/terminalInputStateMachine.d.ts +29 -0
- package/dist/cli/components/input/terminalInputStateMachine.js +67 -0
- package/dist/cli/components/input/terminalInputStateMachine.js.map +1 -0
- package/dist/cli/components/layout/CockpitRails.d.ts +6 -0
- package/dist/cli/components/layout/CockpitRails.js +13 -0
- package/dist/cli/components/layout/CockpitRails.js.map +1 -0
- package/dist/cli/components/layout/LandingView.d.ts +15 -0
- package/dist/cli/components/layout/LandingView.js +12 -0
- package/dist/cli/components/layout/LandingView.js.map +1 -0
- package/dist/cli/components/layout/SessionSidebar.d.ts +18 -0
- package/dist/cli/components/layout/SessionSidebar.js +70 -0
- package/dist/cli/components/layout/SessionSidebar.js.map +1 -0
- package/dist/cli/components/layout/StartupAnimation.d.ts +14 -0
- package/dist/cli/components/layout/StartupAnimation.js +30 -0
- package/dist/cli/components/layout/StartupAnimation.js.map +1 -0
- package/dist/cli/components/markdown/highlighter.d.ts +1 -0
- package/dist/cli/components/markdown/highlighter.js +110 -0
- package/dist/cli/components/markdown/highlighter.js.map +1 -0
- package/dist/cli/components/markdown/index.d.ts +11 -0
- package/dist/cli/components/markdown/index.js +86 -0
- package/dist/cli/components/markdown/index.js.map +1 -0
- package/dist/cli/components/messages/MessageList.d.ts +16 -0
- package/dist/cli/components/messages/MessageList.js +56 -0
- package/dist/cli/components/messages/MessageList.js.map +1 -0
- package/dist/cli/components/messages/Messages.d.ts +26 -0
- package/dist/cli/components/messages/Messages.js +32 -0
- package/dist/cli/components/messages/Messages.js.map +1 -0
- package/dist/cli/components/messages/ThinkingBlock.d.ts +9 -0
- package/dist/cli/components/messages/ThinkingBlock.js +51 -0
- package/dist/cli/components/messages/ThinkingBlock.js.map +1 -0
- package/dist/cli/components/messages/WindowedMessageList.d.ts +21 -0
- package/dist/cli/components/messages/WindowedMessageList.js +44 -0
- package/dist/cli/components/messages/WindowedMessageList.js.map +1 -0
- package/dist/cli/components/permissions/PermissionDialog.d.ts +23 -0
- package/dist/cli/components/permissions/PermissionDialog.js +83 -0
- package/dist/cli/components/permissions/PermissionDialog.js.map +1 -0
- package/dist/cli/components/spinner/SpinnerGlyph.d.ts +6 -0
- package/dist/cli/components/spinner/SpinnerGlyph.js +55 -0
- package/dist/cli/components/spinner/SpinnerGlyph.js.map +1 -0
- package/dist/cli/components/spinner/constants.d.ts +4 -0
- package/dist/cli/components/spinner/constants.js +5 -0
- package/dist/cli/components/spinner/constants.js.map +1 -0
- package/dist/cli/components/tools/ActiveWorkPanel.d.ts +22 -0
- package/dist/cli/components/tools/ActiveWorkPanel.js +70 -0
- package/dist/cli/components/tools/ActiveWorkPanel.js.map +1 -0
- package/dist/cli/components/tools/AgentActivityLine.d.ts +13 -0
- package/dist/cli/components/tools/AgentActivityLine.js +88 -0
- package/dist/cli/components/tools/AgentActivityLine.js.map +1 -0
- package/dist/cli/components/tools/QueuedPromptList.d.ts +10 -0
- package/dist/cli/components/tools/QueuedPromptList.js +26 -0
- package/dist/cli/components/tools/QueuedPromptList.js.map +1 -0
- package/dist/cli/components/tools/TaskFlowHud.d.ts +15 -0
- package/dist/cli/components/tools/TaskFlowHud.js +55 -0
- package/dist/cli/components/tools/TaskFlowHud.js.map +1 -0
- package/dist/cli/components/tools/TerminalSessionsFooter.d.ts +6 -0
- package/dist/cli/components/tools/TerminalSessionsFooter.js +36 -0
- package/dist/cli/components/tools/TerminalSessionsFooter.js.map +1 -0
- package/dist/cli/components/tools/ToolActivityList.d.ts +11 -0
- package/dist/cli/components/tools/ToolActivityList.js +73 -0
- package/dist/cli/components/tools/ToolActivityList.js.map +1 -0
- package/dist/cli/components/tools/ToolCallTree.d.ts +11 -0
- package/dist/cli/components/tools/ToolCallTree.js +14 -0
- package/dist/cli/components/tools/ToolCallTree.js.map +1 -0
- package/dist/cli/components/tools/toolLifecycleModel.d.ts +16 -0
- package/dist/cli/components/tools/toolLifecycleModel.js +30 -0
- package/dist/cli/components/tools/toolLifecycleModel.js.map +1 -0
- package/dist/cli/components/tools/toolPresentation.d.ts +9 -0
- package/dist/cli/components/tools/toolPresentation.js +171 -0
- package/dist/cli/components/tools/toolPresentation.js.map +1 -0
- package/dist/cli/components/tools/toolTypes.d.ts +16 -0
- package/dist/cli/components/tools/toolTypes.js +2 -0
- package/dist/cli/components/tools/toolTypes.js.map +1 -0
- package/dist/cli/components/transcriptWindowing.d.ts +19 -0
- package/dist/cli/components/transcriptWindowing.js +81 -0
- package/dist/cli/components/transcriptWindowing.js.map +1 -0
- package/dist/cli/config.d.ts +1 -0
- package/dist/cli/config.js +2 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/conversations/journalWriter.d.ts +50 -0
- package/dist/cli/conversations/journalWriter.js +191 -0
- package/dist/cli/conversations/journalWriter.js.map +1 -0
- package/dist/cli/conversations/manager.d.ts +65 -0
- package/dist/cli/conversations/manager.js +435 -0
- package/dist/cli/conversations/manager.js.map +1 -0
- package/dist/cli/conversations/recoveryExport.d.ts +18 -0
- package/dist/cli/conversations/recoveryExport.js +39 -0
- package/dist/cli/conversations/recoveryExport.js.map +1 -0
- package/dist/cli/conversations/recoveryMessages.d.ts +2 -0
- package/dist/cli/conversations/recoveryMessages.js +3 -0
- package/dist/cli/conversations/recoveryMessages.js.map +1 -0
- package/dist/cli/conversations/store.d.ts +14 -0
- package/dist/cli/conversations/store.js +603 -0
- package/dist/cli/conversations/store.js.map +1 -0
- package/dist/cli/conversations/types.d.ts +142 -0
- package/dist/cli/conversations/types.js +2 -0
- package/dist/cli/conversations/types.js.map +1 -0
- package/dist/cli/globalConfiguration.d.ts +13 -0
- package/dist/cli/globalConfiguration.js +61 -0
- package/dist/cli/globalConfiguration.js.map +1 -0
- package/dist/cli/hooks/useMessageCursor.d.ts +16 -0
- package/dist/cli/hooks/useMessageCursor.js +75 -0
- package/dist/cli/hooks/useMessageCursor.js.map +1 -0
- package/dist/cli/hooks/useOverlayStack.d.ts +9 -0
- package/dist/cli/hooks/useOverlayStack.js +26 -0
- package/dist/cli/hooks/useOverlayStack.js.map +1 -0
- package/dist/cli/hooks/useTerminalSize.d.ts +16 -0
- package/dist/cli/hooks/useTerminalSize.js +37 -0
- package/dist/cli/hooks/useTerminalSize.js.map +1 -0
- package/dist/cli/i18n/index.d.ts +15 -0
- package/dist/cli/i18n/index.js +32 -0
- package/dist/cli/i18n/index.js.map +1 -0
- package/dist/cli/i18n/messages.d.ts +1305 -0
- package/dist/cli/i18n/messages.js +1305 -0
- package/dist/cli/i18n/messages.js.map +1 -0
- package/dist/cli/imageAttachments.d.ts +22 -0
- package/dist/cli/imageAttachments.js +329 -0
- package/dist/cli/imageAttachments.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/platform/terminalAttention.d.ts +46 -0
- package/dist/cli/platform/terminalAttention.js +152 -0
- package/dist/cli/platform/terminalAttention.js.map +1 -0
- package/dist/cli/platform/terminalTransparency.d.ts +11 -0
- package/dist/cli/platform/terminalTransparency.js +193 -0
- package/dist/cli/platform/terminalTransparency.js.map +1 -0
- package/dist/cli/repl.d.ts +15 -0
- package/dist/cli/repl.js +38 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/setup.d.ts +17 -0
- package/dist/cli/setup.js +991 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/singleShot.d.ts +30 -0
- package/dist/cli/singleShot.js +167 -0
- package/dist/cli/singleShot.js.map +1 -0
- package/dist/cli/state/adaptiveStreamScheduler.d.ts +53 -0
- package/dist/cli/state/adaptiveStreamScheduler.js +136 -0
- package/dist/cli/state/adaptiveStreamScheduler.js.map +1 -0
- package/dist/cli/state/agentFlowController.d.ts +37 -0
- package/dist/cli/state/agentFlowController.js +402 -0
- package/dist/cli/state/agentFlowController.js.map +1 -0
- package/dist/cli/state/approvalPresentationScheduler.d.ts +28 -0
- package/dist/cli/state/approvalPresentationScheduler.js +72 -0
- package/dist/cli/state/approvalPresentationScheduler.js.map +1 -0
- package/dist/cli/state/flowFeatureFlags.d.ts +18 -0
- package/dist/cli/state/flowFeatureFlags.js +45 -0
- package/dist/cli/state/flowFeatureFlags.js.map +1 -0
- package/dist/cli/state/flowReducer.d.ts +120 -0
- package/dist/cli/state/flowReducer.js +535 -0
- package/dist/cli/state/flowReducer.js.map +1 -0
- package/dist/cli/state/flowSelectors.d.ts +45 -0
- package/dist/cli/state/flowSelectors.js +144 -0
- package/dist/cli/state/flowSelectors.js.map +1 -0
- package/dist/cli/state/flowStore.d.ts +19 -0
- package/dist/cli/state/flowStore.js +51 -0
- package/dist/cli/state/flowStore.js.map +1 -0
- package/dist/cli/state/globalCommandActivity.d.ts +25 -0
- package/dist/cli/state/globalCommandActivity.js +57 -0
- package/dist/cli/state/globalCommandActivity.js.map +1 -0
- package/dist/cli/state/goldenTraces.d.ts +2 -0
- package/dist/cli/state/goldenTraces.js +15 -0
- package/dist/cli/state/goldenTraces.js.map +1 -0
- package/dist/cli/state/notificationCoordinator.d.ts +38 -0
- package/dist/cli/state/notificationCoordinator.js +101 -0
- package/dist/cli/state/notificationCoordinator.js.map +1 -0
- package/dist/cli/stateProvider.d.ts +5 -0
- package/dist/cli/stateProvider.js +7 -0
- package/dist/cli/stateProvider.js.map +1 -0
- package/dist/cli/telemetry/localFlowTelemetry.d.ts +42 -0
- package/dist/cli/telemetry/localFlowTelemetry.js +131 -0
- package/dist/cli/telemetry/localFlowTelemetry.js.map +1 -0
- package/dist/cli/telemetry/terminalBaseline.d.ts +93 -0
- package/dist/cli/telemetry/terminalBaseline.js +199 -0
- package/dist/cli/telemetry/terminalBaseline.js.map +1 -0
- package/dist/cli/telemetry/terminalLatencyTracker.d.ts +24 -0
- package/dist/cli/telemetry/terminalLatencyTracker.js +59 -0
- package/dist/cli/telemetry/terminalLatencyTracker.js.map +1 -0
- package/dist/cli/terminalLayout.d.ts +2 -0
- package/dist/cli/terminalLayout.js +16 -0
- package/dist/cli/terminalLayout.js.map +1 -0
- package/dist/cli/terminalMouse.d.ts +10 -0
- package/dist/cli/terminalMouse.js +29 -0
- package/dist/cli/terminalMouse.js.map +1 -0
- package/dist/cli/theme/ThemeProvider.d.ts +9 -0
- package/dist/cli/theme/ThemeProvider.js +26 -0
- package/dist/cli/theme/ThemeProvider.js.map +1 -0
- package/dist/cli/theme/dark.d.ts +2 -0
- package/dist/cli/theme/dark.js +27 -0
- package/dist/cli/theme/dark.js.map +1 -0
- package/dist/cli/theme/index.d.ts +5 -0
- package/dist/cli/theme/index.js +5 -0
- package/dist/cli/theme/index.js.map +1 -0
- package/dist/cli/theme/light.d.ts +2 -0
- package/dist/cli/theme/light.js +26 -0
- package/dist/cli/theme/light.js.map +1 -0
- package/dist/cli/theme/palette.d.ts +7 -0
- package/dist/cli/theme/palette.js +8 -0
- package/dist/cli/theme/palette.js.map +1 -0
- package/dist/cli/theme/resolveColor.d.ts +4 -0
- package/dist/cli/theme/resolveColor.js +43 -0
- package/dist/cli/theme/resolveColor.js.map +1 -0
- package/dist/cli/theme/types.d.ts +27 -0
- package/dist/cli/theme/types.js +2 -0
- package/dist/cli/theme/types.js.map +1 -0
- package/dist/cli/toolExecutor.d.ts +1 -0
- package/dist/cli/toolExecutor.js +2 -0
- package/dist/cli/toolExecutor.js.map +1 -0
- package/dist/core/agentEngine.d.ts +425 -0
- package/dist/core/agentEngine.js +5170 -0
- package/dist/core/agentEngine.js.map +1 -0
- package/dist/core/agents/loader.d.ts +9 -0
- package/dist/core/agents/loader.js +144 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/applyPatch.d.ts +24 -0
- package/dist/core/applyPatch.js +158 -0
- package/dist/core/applyPatch.js.map +1 -0
- package/dist/core/cacheMonitor.d.ts +24 -0
- package/dist/core/cacheMonitor.js +211 -0
- package/dist/core/cacheMonitor.js.map +1 -0
- package/dist/core/clientIdentity.d.ts +6 -0
- package/dist/core/clientIdentity.js +44 -0
- package/dist/core/clientIdentity.js.map +1 -0
- package/dist/core/config.d.ts +99 -0
- package/dist/core/config.js +715 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/contextCompaction.d.ts +20 -0
- package/dist/core/contextCompaction.js +158 -0
- package/dist/core/contextCompaction.js.map +1 -0
- package/dist/core/contextManager.d.ts +44 -0
- package/dist/core/contextManager.js +590 -0
- package/dist/core/contextManager.js.map +1 -0
- package/dist/core/contextPolicy.d.ts +18 -0
- package/dist/core/contextPolicy.js +39 -0
- package/dist/core/contextPolicy.js.map +1 -0
- package/dist/core/credentialStore.d.ts +8 -0
- package/dist/core/credentialStore.js +37 -0
- package/dist/core/credentialStore.js.map +1 -0
- package/dist/core/diffCompute.d.ts +31 -0
- package/dist/core/diffCompute.js +116 -0
- package/dist/core/diffCompute.js.map +1 -0
- package/dist/core/editHelpers.d.ts +8 -0
- package/dist/core/editHelpers.js +35 -0
- package/dist/core/editHelpers.js.map +1 -0
- package/dist/core/fileIO.d.ts +12 -0
- package/dist/core/fileIO.js +199 -0
- package/dist/core/fileIO.js.map +1 -0
- package/dist/core/gitService.d.ts +83 -0
- package/dist/core/gitService.js +522 -0
- package/dist/core/gitService.js.map +1 -0
- package/dist/core/index.d.ts +30 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/mcp/client.d.ts +32 -0
- package/dist/core/mcp/client.js +186 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/settings.d.ts +2 -0
- package/dist/core/mcp/settings.js +26 -0
- package/dist/core/mcp/settings.js.map +1 -0
- package/dist/core/mcp/toolBridge.d.ts +20 -0
- package/dist/core/mcp/toolBridge.js +74 -0
- package/dist/core/mcp/toolBridge.js.map +1 -0
- package/dist/core/mcp/types.d.ts +29 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/modelDiscovery.d.ts +14 -0
- package/dist/core/modelDiscovery.js +566 -0
- package/dist/core/modelDiscovery.js.map +1 -0
- package/dist/core/modelProtocol.d.ts +43 -0
- package/dist/core/modelProtocol.js +238 -0
- package/dist/core/modelProtocol.js.map +1 -0
- package/dist/core/modelRegistry.d.ts +56 -0
- package/dist/core/modelRegistry.js +308 -0
- package/dist/core/modelRegistry.js.map +1 -0
- package/dist/core/networkProxy.d.ts +20 -0
- package/dist/core/networkProxy.js +145 -0
- package/dist/core/networkProxy.js.map +1 -0
- package/dist/core/normalizeBaseUrl.d.ts +1 -0
- package/dist/core/normalizeBaseUrl.js +9 -0
- package/dist/core/normalizeBaseUrl.js.map +1 -0
- package/dist/core/pathUtils.d.ts +3 -0
- package/dist/core/pathUtils.js +46 -0
- package/dist/core/pathUtils.js.map +1 -0
- package/dist/core/permissions.d.ts +29 -0
- package/dist/core/permissions.js +245 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/persona/voiceProfile.d.ts +7 -0
- package/dist/core/persona/voiceProfile.js +14 -0
- package/dist/core/persona/voiceProfile.js.map +1 -0
- package/dist/core/profile.d.ts +35 -0
- package/dist/core/profile.js +373 -0
- package/dist/core/profile.js.map +1 -0
- package/dist/core/requestCompatibility.d.ts +13 -0
- package/dist/core/requestCompatibility.js +181 -0
- package/dist/core/requestCompatibility.js.map +1 -0
- package/dist/core/runtime/agentRuntime.d.ts +43 -0
- package/dist/core/runtime/agentRuntime.js +137 -0
- package/dist/core/runtime/agentRuntime.js.map +1 -0
- package/dist/core/runtime/approvalCoordinator.d.ts +36 -0
- package/dist/core/runtime/approvalCoordinator.js +113 -0
- package/dist/core/runtime/approvalCoordinator.js.map +1 -0
- package/dist/core/runtime/capabilityBoundary.d.ts +18 -0
- package/dist/core/runtime/capabilityBoundary.js +89 -0
- package/dist/core/runtime/capabilityBoundary.js.map +1 -0
- package/dist/core/runtime/nodeToolExecutor.d.ts +200 -0
- package/dist/core/runtime/nodeToolExecutor.js +2446 -0
- package/dist/core/runtime/nodeToolExecutor.js.map +1 -0
- package/dist/core/runtime/runtimeLogWriter.d.ts +32 -0
- package/dist/core/runtime/runtimeLogWriter.js +129 -0
- package/dist/core/runtime/runtimeLogWriter.js.map +1 -0
- package/dist/core/runtime/runtimeTaskManager.d.ts +78 -0
- package/dist/core/runtime/runtimeTaskManager.js +374 -0
- package/dist/core/runtime/runtimeTaskManager.js.map +1 -0
- package/dist/core/runtime/sessionRegistry.d.ts +19 -0
- package/dist/core/runtime/sessionRegistry.js +41 -0
- package/dist/core/runtime/sessionRegistry.js.map +1 -0
- package/dist/core/runtime/stateProvider.d.ts +69 -0
- package/dist/core/runtime/stateProvider.js +131 -0
- package/dist/core/runtime/stateProvider.js.map +1 -0
- package/dist/core/runtime/subAgentTaskManager.d.ts +111 -0
- package/dist/core/runtime/subAgentTaskManager.js +386 -0
- package/dist/core/runtime/subAgentTaskManager.js.map +1 -0
- package/dist/core/schemaValidation.d.ts +5 -0
- package/dist/core/schemaValidation.js +153 -0
- package/dist/core/schemaValidation.js.map +1 -0
- package/dist/core/skills/loader.d.ts +7 -0
- package/dist/core/skills/loader.js +91 -0
- package/dist/core/skills/loader.js.map +1 -0
- package/dist/core/skills/runtime.d.ts +19 -0
- package/dist/core/skills/runtime.js +61 -0
- package/dist/core/skills/runtime.js.map +1 -0
- package/dist/core/subAgent.d.ts +50 -0
- package/dist/core/subAgent.js +1258 -0
- package/dist/core/subAgent.js.map +1 -0
- package/dist/core/systemPrompt.d.ts +27 -0
- package/dist/core/systemPrompt.js +219 -0
- package/dist/core/systemPrompt.js.map +1 -0
- package/dist/core/taskManager.d.ts +105 -0
- package/dist/core/taskManager.js +617 -0
- package/dist/core/taskManager.js.map +1 -0
- package/dist/core/tokenCompressor.d.ts +14 -0
- package/dist/core/tokenCompressor.js +161 -0
- package/dist/core/tokenCompressor.js.map +1 -0
- package/dist/core/tokenCounter.d.ts +28 -0
- package/dist/core/tokenCounter.js +101 -0
- package/dist/core/tokenCounter.js.map +1 -0
- package/dist/core/toolDispatcher.d.ts +11 -0
- package/dist/core/toolDispatcher.js +38 -0
- package/dist/core/toolDispatcher.js.map +1 -0
- package/dist/core/toolExecutionLedger.d.ts +9 -0
- package/dist/core/toolExecutionLedger.js +84 -0
- package/dist/core/toolExecutionLedger.js.map +1 -0
- package/dist/core/toolRegistry.d.ts +19 -0
- package/dist/core/toolRegistry.js +820 -0
- package/dist/core/toolRegistry.js.map +1 -0
- package/dist/core/turnStrategy.d.ts +20 -0
- package/dist/core/turnStrategy.js +103 -0
- package/dist/core/turnStrategy.js.map +1 -0
- package/dist/platform/process.d.ts +14 -0
- package/dist/platform/process.js +28 -0
- package/dist/platform/process.js.map +1 -0
- package/dist/platform/runtime.d.ts +8 -0
- package/dist/platform/runtime.js +21 -0
- package/dist/platform/runtime.js.map +1 -0
- package/dist/server/adminPage.d.ts +1 -0
- package/dist/server/adminPage.js +755 -0
- package/dist/server/adminPage.js.map +1 -0
- package/dist/server/index.d.ts +22 -0
- package/dist/server/index.js +566 -0
- package/dist/server/index.js.map +1 -0
- package/dist/shared/agentTypes.d.ts +227 -0
- package/dist/shared/agentTypes.js +79 -0
- package/dist/shared/agentTypes.js.map +1 -0
- package/dist/shared/codeIndexTypes.d.ts +32 -0
- package/dist/shared/codeIndexTypes.js +2 -0
- package/dist/shared/codeIndexTypes.js.map +1 -0
- package/dist/shared/flowEvents.d.ts +192 -0
- package/dist/shared/flowEvents.js +37 -0
- package/dist/shared/flowEvents.js.map +1 -0
- package/dist/shared/memoryTypes.d.ts +100 -0
- package/dist/shared/memoryTypes.js +2 -0
- package/dist/shared/memoryTypes.js.map +1 -0
- package/dist/shared/pluginTypes.d.ts +345 -0
- package/dist/shared/pluginTypes.js +2 -0
- package/dist/shared/pluginTypes.js.map +1 -0
- package/dist/shared/runtimeTaskTypes.d.ts +43 -0
- package/dist/shared/runtimeTaskTypes.js +2 -0
- package/dist/shared/runtimeTaskTypes.js.map +1 -0
- package/dist/shared/skillTypes.d.ts +1 -0
- package/dist/shared/skillTypes.js +2 -0
- package/dist/shared/skillTypes.js.map +1 -0
- package/dist/shared/subAgentTypes.d.ts +99 -0
- package/dist/shared/subAgentTypes.js +2 -0
- package/dist/shared/subAgentTypes.js.map +1 -0
- package/dist/shared/terminalTypes.d.ts +102 -0
- package/dist/shared/terminalTypes.js +2 -0
- package/dist/shared/terminalTypes.js.map +1 -0
- package/dist/shared/toolCallMarkup.d.ts +10 -0
- package/dist/shared/toolCallMarkup.js +107 -0
- package/dist/shared/toolCallMarkup.js.map +1 -0
- package/dist/shared/toolTypes.d.ts +24 -0
- package/dist/shared/toolTypes.js +2 -0
- package/dist/shared/toolTypes.js.map +1 -0
- package/dist/shared/types.d.ts +81 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/state/types.d.ts +69 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/tools/executor.d.ts +133 -0
- package/dist/tools/executor.js +2 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/memory/loaders.d.ts +6 -0
- package/dist/tools/memory/loaders.js +292 -0
- package/dist/tools/memory/loaders.js.map +1 -0
- package/dist/tools/memory/sanitizer.d.ts +6 -0
- package/dist/tools/memory/sanitizer.js +48 -0
- package/dist/tools/memory/sanitizer.js.map +1 -0
- package/dist/tools/memory/service.d.ts +24 -0
- package/dist/tools/memory/service.js +273 -0
- package/dist/tools/memory/service.js.map +1 -0
- package/dist/tools/memory/writer.d.ts +17 -0
- package/dist/tools/memory/writer.js +192 -0
- package/dist/tools/memory/writer.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { normalizeBaseUrl } from './normalizeBaseUrl';
|
|
2
|
+
const PROTOCOL_LABELS = {
|
|
3
|
+
anthropic_messages: 'Anthropic Messages',
|
|
4
|
+
openai_chat: 'OpenAI Chat Completions',
|
|
5
|
+
openai_responses: 'OpenAI Responses',
|
|
6
|
+
};
|
|
7
|
+
const PROTOCOL_PATHS = {
|
|
8
|
+
anthropic_messages: '/messages',
|
|
9
|
+
openai_chat: '/chat/completions',
|
|
10
|
+
openai_responses: '/responses',
|
|
11
|
+
};
|
|
12
|
+
const DIRECT_FALLBACK_STATUSES = new Set([404, 405, 415]);
|
|
13
|
+
const NEVER_CROSS_PROTOCOL_STATUSES = new Set([401, 403, 408, 409, 425, 429]);
|
|
14
|
+
const PROTOCOL_MISMATCH_DETAIL = new RegExp([
|
|
15
|
+
'(?:unknown|unsupported|unrecognized|invalid|missing|required|expected|must provide|does not support|not found)',
|
|
16
|
+
'.{0,100}',
|
|
17
|
+
'(?:endpoint|route|path|url|schema|payload|request format|model|messages|instructions|input|max_tokens|max_completion_tokens|max_output_tokens|anthropic-version|x-api-key|authorization|content-type|tool_choice|tools|stream|thinking|output_config|cache_control|prompt_cache_key)',
|
|
18
|
+
'|(?:endpoint|route|path|url|schema|payload|request format|model|messages|instructions|input|max_tokens|max_completion_tokens|max_output_tokens|anthropic-version|x-api-key|authorization|content-type|thinking|output_config|cache_control|prompt_cache_key)',
|
|
19
|
+
'.{0,100}',
|
|
20
|
+
'(?:unknown|unsupported|unrecognized|invalid|missing|required|expected|not found)',
|
|
21
|
+
].join(''), 'i');
|
|
22
|
+
export class ModelProtocolRequestError extends Error {
|
|
23
|
+
protocol;
|
|
24
|
+
url;
|
|
25
|
+
status;
|
|
26
|
+
kind;
|
|
27
|
+
receivedStreamData;
|
|
28
|
+
constructor(message, options) {
|
|
29
|
+
super(compactProtocolError(message));
|
|
30
|
+
this.name = 'ModelProtocolRequestError';
|
|
31
|
+
this.protocol = options.protocol;
|
|
32
|
+
this.url = options.url;
|
|
33
|
+
this.status = options.status;
|
|
34
|
+
this.kind = options.kind || (options.status ? 'http' : 'internal');
|
|
35
|
+
this.receivedStreamData = options.receivedStreamData === true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function protocolLabel(protocol) {
|
|
39
|
+
return PROTOCOL_LABELS[protocol];
|
|
40
|
+
}
|
|
41
|
+
export function protocolPath(protocol) {
|
|
42
|
+
return PROTOCOL_PATHS[protocol];
|
|
43
|
+
}
|
|
44
|
+
export function buildModelProtocolUrl(baseUrl, protocol, provider) {
|
|
45
|
+
if (protocol === 'anthropic_messages' && provider === 'deepseek') {
|
|
46
|
+
return `${deepSeekAnthropicBaseUrl(baseUrl)}${protocolPath(protocol)}`;
|
|
47
|
+
}
|
|
48
|
+
return `${normalizeBaseUrl(baseUrl)}${protocolPath(protocol)}`;
|
|
49
|
+
}
|
|
50
|
+
function deepSeekAnthropicBaseUrl(baseUrl) {
|
|
51
|
+
const normalized = normalizeBaseUrl(baseUrl)
|
|
52
|
+
.replace(/\/v\d+$/i, '')
|
|
53
|
+
.replace(/\/anthropic$/i, '');
|
|
54
|
+
return `${normalized}/anthropic/v1`;
|
|
55
|
+
}
|
|
56
|
+
export function planModelProtocols(provider, model) {
|
|
57
|
+
if (provider === 'anthropic' || looksLikeClaudeModel(model)) {
|
|
58
|
+
return ['anthropic_messages', 'openai_chat', 'openai_responses'];
|
|
59
|
+
}
|
|
60
|
+
if (provider === 'deepseek' || looksLikeDeepSeekModel(model)) {
|
|
61
|
+
if (looksLikeDeepSeekProModel(model)) {
|
|
62
|
+
return ['openai_chat', 'anthropic_messages'];
|
|
63
|
+
}
|
|
64
|
+
if (looksLikeDeepSeekFlashModel(model)) {
|
|
65
|
+
return ['openai_chat', 'openai_responses', 'anthropic_messages'];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (provider === 'openai' || looksLikeResponsesPreferredModel(model)) {
|
|
69
|
+
return ['openai_responses', 'openai_chat', 'anthropic_messages'];
|
|
70
|
+
}
|
|
71
|
+
return ['openai_chat', 'openai_responses', 'anthropic_messages'];
|
|
72
|
+
}
|
|
73
|
+
export function looksLikeClaudeModel(model) {
|
|
74
|
+
return /(?:^|[/_.:-])claude(?:$|[/_.:-])/i.test(model.trim());
|
|
75
|
+
}
|
|
76
|
+
export function looksLikeResponsesPreferredModel(model) {
|
|
77
|
+
return /(?:^|[/_.:-])(?:gpt-5(?:$|[/_.:-])|o[1-9](?:$|[/_.:-])|codex(?:$|[/_.:-]))/i.test(model.trim());
|
|
78
|
+
}
|
|
79
|
+
export function looksLikeDeepSeekModel(model) {
|
|
80
|
+
return /(?:^|[/_.:-])deepseek(?:$|[/_.:-])/i.test(model.trim());
|
|
81
|
+
}
|
|
82
|
+
export function looksLikeDeepSeekProModel(model) {
|
|
83
|
+
return /(?:^|[/_.:-])deepseek(?:[-_.:]?(?:v4[-_.:]?)?(?:pro|reasoner))(?:$|[/_.:-])/i.test(model.trim());
|
|
84
|
+
}
|
|
85
|
+
export function looksLikeDeepSeekFlashModel(model) {
|
|
86
|
+
return /(?:^|[/_.:-])deepseek(?:[-_.:]?(?:v4[-_.:]?)?(?:flash|chat))(?:$|[/_.:-])/i.test(model.trim());
|
|
87
|
+
}
|
|
88
|
+
export function looksLikeKimiModel(model) {
|
|
89
|
+
return /(?:^|[/_.:-])(?:kimi|moonshot)(?:$|[/_.:-])/i.test(model.trim());
|
|
90
|
+
}
|
|
91
|
+
export function shouldFallbackProtocol(error) {
|
|
92
|
+
if (error.kind === 'response_shape')
|
|
93
|
+
return true;
|
|
94
|
+
if (error.receivedStreamData)
|
|
95
|
+
return false;
|
|
96
|
+
if (error.status === undefined)
|
|
97
|
+
return false;
|
|
98
|
+
if (NEVER_CROSS_PROTOCOL_STATUSES.has(error.status) || error.status >= 500)
|
|
99
|
+
return false;
|
|
100
|
+
if (DIRECT_FALLBACK_STATUSES.has(error.status))
|
|
101
|
+
return true;
|
|
102
|
+
if (error.status === 400 || error.status === 422) {
|
|
103
|
+
return PROTOCOL_MISMATCH_DETAIL.test(error.message);
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
export function toProtocolAttempt(error) {
|
|
108
|
+
return {
|
|
109
|
+
protocol: error.protocol,
|
|
110
|
+
url: error.url,
|
|
111
|
+
status: error.status,
|
|
112
|
+
error: error.message,
|
|
113
|
+
receivedStreamData: error.receivedStreamData,
|
|
114
|
+
fallbackAllowed: shouldFallbackProtocol(error),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export function formatProtocolAttempt(attempt) {
|
|
118
|
+
const status = attempt.status ? `HTTP ${attempt.status}` : attempt.receivedStreamData ? 'stream error' : 'request error';
|
|
119
|
+
const detail = attempt.status && new RegExp(`^HTTP\\s+${attempt.status}\\b`, 'i').test(attempt.error)
|
|
120
|
+
? attempt.error
|
|
121
|
+
: `${status}: ${attempt.error}`;
|
|
122
|
+
return `${protocolLabel(attempt.protocol)} ${attempt.url} — ${detail}`;
|
|
123
|
+
}
|
|
124
|
+
export function formatProtocolFailure(attempts) {
|
|
125
|
+
if (attempts.length === 0)
|
|
126
|
+
return 'Model request failed before a protocol attempt was recorded.';
|
|
127
|
+
const lines = attempts.map((attempt, index) => `${index + 1}. ${formatProtocolAttempt(attempt)}`);
|
|
128
|
+
return `All compatible model protocols failed:\n${lines.join('\n')}`;
|
|
129
|
+
}
|
|
130
|
+
export function compactProtocolError(message, maxLength = 700) {
|
|
131
|
+
const compact = String(message || 'Model request failed').replace(/\s+/g, ' ').trim();
|
|
132
|
+
return compact.length > maxLength ? `${compact.slice(0, maxLength - 1)}…` : compact;
|
|
133
|
+
}
|
|
134
|
+
export function toResponsesTools(tools) {
|
|
135
|
+
const converted = [];
|
|
136
|
+
for (const tool of tools) {
|
|
137
|
+
if (!tool || typeof tool !== 'object')
|
|
138
|
+
continue;
|
|
139
|
+
const record = tool;
|
|
140
|
+
const fn = record.function && typeof record.function === 'object'
|
|
141
|
+
? record.function
|
|
142
|
+
: null;
|
|
143
|
+
if (record.type !== 'function' || !fn || typeof fn.name !== 'string')
|
|
144
|
+
continue;
|
|
145
|
+
converted.push({
|
|
146
|
+
type: 'function',
|
|
147
|
+
name: fn.name,
|
|
148
|
+
description: typeof fn.description === 'string' ? fn.description : undefined,
|
|
149
|
+
parameters: fn.parameters && typeof fn.parameters === 'object'
|
|
150
|
+
? fn.parameters
|
|
151
|
+
: { type: 'object', properties: {} },
|
|
152
|
+
...(typeof fn.strict === 'boolean' ? { strict: fn.strict } : {}),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return converted;
|
|
156
|
+
}
|
|
157
|
+
export function toResponsesInput(messages) {
|
|
158
|
+
const input = [];
|
|
159
|
+
for (const message of messages) {
|
|
160
|
+
const role = typeof message.role === 'string' ? message.role : '';
|
|
161
|
+
if (role === 'system' || role === 'developer')
|
|
162
|
+
continue;
|
|
163
|
+
if (role === 'tool') {
|
|
164
|
+
const callId = typeof message.tool_call_id === 'string' ? message.tool_call_id : '';
|
|
165
|
+
if (!callId)
|
|
166
|
+
continue;
|
|
167
|
+
input.push({
|
|
168
|
+
type: 'function_call_output',
|
|
169
|
+
call_id: callId,
|
|
170
|
+
output: stringifyResponseContent(message.content),
|
|
171
|
+
});
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (role === 'assistant' && Array.isArray(message.tool_calls)) {
|
|
175
|
+
if (hasResponseContent(message.content)) {
|
|
176
|
+
input.push({ role: 'assistant', content: convertResponseMessageContent(message.content) });
|
|
177
|
+
}
|
|
178
|
+
for (const toolCall of message.tool_calls) {
|
|
179
|
+
if (!toolCall || typeof toolCall !== 'object')
|
|
180
|
+
continue;
|
|
181
|
+
const record = toolCall;
|
|
182
|
+
const fn = record.function && typeof record.function === 'object'
|
|
183
|
+
? record.function
|
|
184
|
+
: null;
|
|
185
|
+
if (!fn || typeof fn.name !== 'string')
|
|
186
|
+
continue;
|
|
187
|
+
const callId = typeof record.id === 'string' && record.id ? record.id : `call_${input.length}`;
|
|
188
|
+
input.push({
|
|
189
|
+
type: 'function_call',
|
|
190
|
+
call_id: callId,
|
|
191
|
+
name: fn.name,
|
|
192
|
+
arguments: typeof fn.arguments === 'string' ? fn.arguments : JSON.stringify(fn.arguments || {}),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (role === 'user' || role === 'assistant') {
|
|
198
|
+
input.push({ role, content: convertResponseMessageContent(message.content) });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return input;
|
|
202
|
+
}
|
|
203
|
+
function hasResponseContent(content) {
|
|
204
|
+
if (typeof content === 'string')
|
|
205
|
+
return Boolean(content);
|
|
206
|
+
return Array.isArray(content) && content.length > 0;
|
|
207
|
+
}
|
|
208
|
+
function stringifyResponseContent(content) {
|
|
209
|
+
if (typeof content === 'string')
|
|
210
|
+
return content;
|
|
211
|
+
if (content === undefined || content === null)
|
|
212
|
+
return '';
|
|
213
|
+
try {
|
|
214
|
+
return JSON.stringify(content);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return String(content);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function convertResponseMessageContent(content) {
|
|
221
|
+
if (!Array.isArray(content))
|
|
222
|
+
return typeof content === 'string' ? content : stringifyResponseContent(content);
|
|
223
|
+
return content.map(block => {
|
|
224
|
+
if (!block || typeof block !== 'object')
|
|
225
|
+
return { type: 'input_text', text: String(block) };
|
|
226
|
+
const record = block;
|
|
227
|
+
if (record.type === 'text')
|
|
228
|
+
return { type: 'input_text', text: typeof record.text === 'string' ? record.text : '' };
|
|
229
|
+
if (record.type === 'image_url') {
|
|
230
|
+
const imageUrl = record.image_url && typeof record.image_url === 'object'
|
|
231
|
+
? record.image_url.url
|
|
232
|
+
: record.image_url;
|
|
233
|
+
return { type: 'input_image', image_url: imageUrl };
|
|
234
|
+
}
|
|
235
|
+
return record;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=modelProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelProtocol.js","sourceRoot":"","sources":["../../src/core/modelProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { TiktokenEncoding } from 'js-tiktoken';
|
|
2
|
+
import { type NativeReasoningConfig, type ReasoningEffort } from '../shared/agentTypes';
|
|
3
|
+
import type { ModelCapabilities } from './config';
|
|
4
|
+
export type SupportedModelProvider = 'openai' | 'anthropic' | 'deepseek' | 'kimi' | 'glm';
|
|
5
|
+
export type SupportedModelId = 'gpt-5.6' | 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-5.6-luna' | 'gpt-5.5' | 'gpt-5.4' | 'claude-fable-5' | 'claude-mythos-5' | 'claude-mythos-preview' | 'claude-opus-5' | 'claude-opus-4-8' | 'claude-sonnet-5' | 'claude-haiku-4-5-20251001' | 'claude-opus-4-7' | 'claude-opus-4-6' | 'claude-sonnet-4-6' | 'deepseek-v4-pro' | 'deepseek-v4-flash' | 'kimi-k3' | 'kimi-k2.7-code' | 'kimi-k2.7-code-highspeed' | 'kimi-k2.6' | 'kimi-k2.5' | 'glm-5.2' | 'glm-5.1' | 'glm-5' | 'glm-5-turbo' | 'glm-4.7' | 'glm-4.6' | 'glm-4.5';
|
|
6
|
+
export type ReasoningControlKind = 'effort' | 'adaptive-effort' | 'budget' | 'toggle-effort' | 'toggle' | 'fixed';
|
|
7
|
+
export interface ModelReasoningCapabilities {
|
|
8
|
+
family: SupportedModelProvider;
|
|
9
|
+
control: ReasoningControlKind;
|
|
10
|
+
efforts: ReasoningEffort[];
|
|
11
|
+
supportsToggle: boolean;
|
|
12
|
+
defaultEnabled: boolean;
|
|
13
|
+
defaultEffort?: ReasoningEffort;
|
|
14
|
+
defaultBudgetTokens?: number;
|
|
15
|
+
omitTemperature: boolean;
|
|
16
|
+
preservesReasoningContent?: boolean;
|
|
17
|
+
description: string;
|
|
18
|
+
}
|
|
19
|
+
export interface NativeReasoningRequest {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
reasoningEffort?: ReasoningEffort;
|
|
22
|
+
thinking?: {
|
|
23
|
+
type: 'disabled' | 'enabled' | 'adaptive';
|
|
24
|
+
budget_tokens?: number;
|
|
25
|
+
keep?: 'all';
|
|
26
|
+
};
|
|
27
|
+
outputConfig?: {
|
|
28
|
+
effort: ReasoningEffort;
|
|
29
|
+
};
|
|
30
|
+
omitTemperature: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface SupportedModelSpec {
|
|
33
|
+
id: SupportedModelId;
|
|
34
|
+
aliases: string[];
|
|
35
|
+
name: string;
|
|
36
|
+
provider: SupportedModelProvider;
|
|
37
|
+
contextWindow: number;
|
|
38
|
+
maxOutputTokens: number;
|
|
39
|
+
defaultRequestTokens: number;
|
|
40
|
+
tokenizer?: TiktokenEncoding;
|
|
41
|
+
supportsProviderTokenCount?: boolean;
|
|
42
|
+
supportsVision?: boolean;
|
|
43
|
+
description: string;
|
|
44
|
+
sourceNote: string;
|
|
45
|
+
}
|
|
46
|
+
export declare const SUPPORTED_MODEL_SPECS: SupportedModelSpec[];
|
|
47
|
+
export declare function normalizeModelKey(value?: string): string;
|
|
48
|
+
export declare function getSupportedModelSpec(value?: string): SupportedModelSpec | undefined;
|
|
49
|
+
export declare function isSupportedModel(value?: string): boolean;
|
|
50
|
+
export declare function canonicalModelId(value?: string): SupportedModelId | undefined;
|
|
51
|
+
export declare function resolveTokenizerForModel(value?: string): TiktokenEncoding | undefined;
|
|
52
|
+
export declare function resolveProviderForModel(value?: string): SupportedModelProvider | undefined;
|
|
53
|
+
export declare function getModelReasoningCapabilities(model: string, provider?: string, discovered?: ModelCapabilities): ModelReasoningCapabilities | null;
|
|
54
|
+
export declare function normalizeNativeReasoningConfig(model: string, config?: NativeReasoningConfig, provider?: string, discovered?: ModelCapabilities): NativeReasoningConfig | undefined;
|
|
55
|
+
export declare function resolveNativeReasoningRequest(model: string, config?: NativeReasoningConfig, provider?: string, discovered?: ModelCapabilities): NativeReasoningRequest | null;
|
|
56
|
+
export declare function formatNativeReasoningSetting(model: string, config?: NativeReasoningConfig, provider?: string, discovered?: ModelCapabilities): string | null;
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { REASONING_EFFORTS } from '../shared/agentTypes';
|
|
2
|
+
const OPENAI_LONG_CONTEXT = 1_050_000;
|
|
3
|
+
const CLAUDE_LONG_CONTEXT = 1_000_000;
|
|
4
|
+
const DEEPSEEK_LONG_CONTEXT = 1_000_000;
|
|
5
|
+
const KIMI_LONG_CONTEXT = 1_000_000;
|
|
6
|
+
const GLM_LONG_CONTEXT = 1_000_000;
|
|
7
|
+
function modelSpec(id, name, provider, contextWindow, maxOutputTokens, description, sourceNote, options = {}) {
|
|
8
|
+
return {
|
|
9
|
+
id,
|
|
10
|
+
aliases: [],
|
|
11
|
+
name,
|
|
12
|
+
provider,
|
|
13
|
+
contextWindow,
|
|
14
|
+
maxOutputTokens,
|
|
15
|
+
defaultRequestTokens: 16_384,
|
|
16
|
+
description,
|
|
17
|
+
sourceNote,
|
|
18
|
+
...options,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export const SUPPORTED_MODEL_SPECS = [
|
|
22
|
+
modelSpec('gpt-5.6', 'GPT-5.6', 'openai', OPENAI_LONG_CONTEXT, 128_000, 'GPT-5.6 flagship alias.', 'OpenAI model guidance: gpt-5.6 routes to gpt-5.6-sol.', { aliases: ['GPT5.6'], tokenizer: 'o200k_base', supportsVision: true }),
|
|
23
|
+
modelSpec('gpt-5.6-sol', 'GPT-5.6 Sol', 'openai', OPENAI_LONG_CONTEXT, 128_000, 'Frontier GPT-5.6 route.', 'OpenAI model guidance, July 2026.', { aliases: ['GPT5.6Sol'], tokenizer: 'o200k_base', supportsVision: true }),
|
|
24
|
+
modelSpec('gpt-5.6-terra', 'GPT-5.6 Terra', 'openai', OPENAI_LONG_CONTEXT, 128_000, 'Balanced GPT-5.6 route.', 'OpenAI model guidance, July 2026.', { aliases: ['GPT5.6Terra'], tokenizer: 'o200k_base', supportsVision: true }),
|
|
25
|
+
modelSpec('gpt-5.6-luna', 'GPT-5.6 Luna', 'openai', OPENAI_LONG_CONTEXT, 128_000, 'Low-latency GPT-5.6 route.', 'OpenAI model guidance, July 2026.', { aliases: ['GPT5.6Luna'], tokenizer: 'o200k_base', supportsVision: true }),
|
|
26
|
+
modelSpec('gpt-5.5', 'GPT-5.5', 'openai', OPENAI_LONG_CONTEXT, 128_000, 'Previous GPT frontier generation.', 'OpenAI reasoning guide.', { aliases: ['GPT5.5'], tokenizer: 'o200k_base', supportsVision: true }),
|
|
27
|
+
modelSpec('gpt-5.4', 'GPT-5.4', 'openai', OPENAI_LONG_CONTEXT, 128_000, 'Previous GPT frontier generation.', 'OpenAI reasoning guide.', { aliases: ['GPT5.4'], tokenizer: 'o200k_base', supportsVision: true }),
|
|
28
|
+
modelSpec('claude-fable-5', 'Claude Fable 5', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Current highest-capability Claude API model.', 'Anthropic models overview, July 2026.', { supportsProviderTokenCount: true, supportsVision: true }),
|
|
29
|
+
modelSpec('claude-mythos-5', 'Claude Mythos 5', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Limited-availability Claude model for approved Project Glasswing customers.', 'Anthropic models overview, July 2026.', { supportsProviderTokenCount: true, supportsVision: true }),
|
|
30
|
+
modelSpec('claude-mythos-preview', 'Claude Mythos Preview', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Invitation-only defensive cybersecurity Claude model.', 'Anthropic models overview, July 2026.', { supportsProviderTokenCount: true, supportsVision: true }),
|
|
31
|
+
modelSpec('claude-opus-5', 'Claude Opus 5', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Anthropic flagship for complex agentic coding and enterprise work.', 'Anthropic models overview and effort guide, July 2026.', { aliases: ['ClaudeOpus5'], supportsProviderTokenCount: true, supportsVision: true }),
|
|
32
|
+
modelSpec('claude-opus-4-8', 'Claude Opus 4.8', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Claude for agentic coding and enterprise work.', 'Anthropic models overview, July 2026.', { aliases: ['ClaudeOpus4.8'], supportsProviderTokenCount: true, supportsVision: true }),
|
|
33
|
+
modelSpec('claude-sonnet-5', 'Claude Sonnet 5', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Current balanced Claude model.', 'Anthropic models overview, July 2026.', { supportsProviderTokenCount: true, supportsVision: true }),
|
|
34
|
+
modelSpec('claude-haiku-4-5-20251001', 'Claude Haiku 4.5', 'anthropic', 200_000, 64_000, 'Current low-latency Claude model.', 'Anthropic models overview, July 2026.', { aliases: ['claude-haiku-4-5'], supportsProviderTokenCount: true, supportsVision: true }),
|
|
35
|
+
modelSpec('claude-opus-4-7', 'Claude Opus 4.7', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Claude Opus with adaptive thinking and xhigh effort.', 'Anthropic effort guide.', { aliases: ['ClaudeOpus4.7'], supportsProviderTokenCount: true, supportsVision: true }),
|
|
36
|
+
modelSpec('claude-opus-4-6', 'Claude Opus 4.6', 'anthropic', CLAUDE_LONG_CONTEXT, 128_000, 'Claude Opus with adaptive thinking.', 'Anthropic effort guide.', { aliases: ['ClaudeOpus4.6'], supportsProviderTokenCount: true, supportsVision: true }),
|
|
37
|
+
modelSpec('claude-sonnet-4-6', 'Claude Sonnet 4.6', 'anthropic', CLAUDE_LONG_CONTEXT, 64_000, 'Claude Sonnet with adaptive thinking.', 'Anthropic effort guide.', { aliases: ['ClaudeSonnet4.6'], supportsProviderTokenCount: true, supportsVision: true }),
|
|
38
|
+
modelSpec('deepseek-v4-pro', 'DeepSeek V4 Pro', 'deepseek', DEEPSEEK_LONG_CONTEXT, 384_000, 'DeepSeek V4 high-capability route.', 'DeepSeek models and pricing.', { aliases: ['DeepSeekV4Pro', 'DeepSeek-V4-Pro'] }),
|
|
39
|
+
modelSpec('deepseek-v4-flash', 'DeepSeek V4 Flash', 'deepseek', DEEPSEEK_LONG_CONTEXT, 384_000, 'DeepSeek V4 low-latency route.', 'DeepSeek models and pricing.', { aliases: ['DeepSeekV4Flash', 'DeepSeek-V4-Flash', 'deepseek-chat', 'deepseek-reasoner'] }),
|
|
40
|
+
modelSpec('kimi-k3', 'Kimi K3', 'kimi', KIMI_LONG_CONTEXT, 1_048_576, 'Current Kimi flagship thinking model.', 'Kimi API model and thinking guides.', { supportsVision: true }),
|
|
41
|
+
modelSpec('kimi-k2.7-code', 'Kimi K2.7 Code', 'kimi', KIMI_LONG_CONTEXT, 128_000, 'Kimi coding model with fixed preserved thinking.', 'Kimi API thinking guide.'),
|
|
42
|
+
modelSpec('kimi-k2.7-code-highspeed', 'Kimi K2.7 Code Highspeed', 'kimi', KIMI_LONG_CONTEXT, 128_000, 'High-speed Kimi K2.7 Code route.', 'Kimi API thinking guide.'),
|
|
43
|
+
modelSpec('kimi-k2.6', 'Kimi K2.6', 'kimi', KIMI_LONG_CONTEXT, 128_000, 'Kimi model with switchable preserved thinking.', 'Kimi API thinking guide.'),
|
|
44
|
+
modelSpec('kimi-k2.5', 'Kimi K2.5', 'kimi', KIMI_LONG_CONTEXT, 128_000, 'Kimi model with switchable thinking.', 'Kimi API thinking guide.'),
|
|
45
|
+
modelSpec('glm-5.2', 'GLM-5.2', 'glm', GLM_LONG_CONTEXT, 65_536, 'Current GLM coding and agent model.', 'Zhipu GLM-5.2 model guide.'),
|
|
46
|
+
modelSpec('glm-5.1', 'GLM-5.1', 'glm', GLM_LONG_CONTEXT, 65_536, 'GLM 5.1 reasoning model.', 'Zhipu model guide.'),
|
|
47
|
+
modelSpec('glm-5', 'GLM-5', 'glm', 200_000, 65_536, 'GLM 5 reasoning model.', 'Zhipu model guide.'),
|
|
48
|
+
modelSpec('glm-5-turbo', 'GLM-5 Turbo', 'glm', 200_000, 65_536, 'GLM 5 low-latency route.', 'Zhipu model guide.'),
|
|
49
|
+
modelSpec('glm-4.7', 'GLM-4.7', 'glm', 200_000, 65_536, 'GLM 4.7 reasoning model.', 'Zhipu model guide.'),
|
|
50
|
+
modelSpec('glm-4.6', 'GLM-4.6', 'glm', 200_000, 65_536, 'GLM 4.6 reasoning model.', 'Zhipu model guide.'),
|
|
51
|
+
modelSpec('glm-4.5', 'GLM-4.5', 'glm', 128_000, 65_536, 'GLM 4.5 reasoning model.', 'Zhipu model guide.'),
|
|
52
|
+
];
|
|
53
|
+
const MODEL_LOOKUP = new Map();
|
|
54
|
+
for (const spec of SUPPORTED_MODEL_SPECS) {
|
|
55
|
+
MODEL_LOOKUP.set(normalizeModelKey(spec.id), spec);
|
|
56
|
+
for (const alias of spec.aliases)
|
|
57
|
+
MODEL_LOOKUP.set(normalizeModelKey(alias), spec);
|
|
58
|
+
}
|
|
59
|
+
export function normalizeModelKey(value) {
|
|
60
|
+
return (value || '').trim().toLowerCase();
|
|
61
|
+
}
|
|
62
|
+
function modelFamilyKey(value) {
|
|
63
|
+
const normalized = normalizeModelKey(value);
|
|
64
|
+
return normalized.includes('/') ? normalized.slice(normalized.lastIndexOf('/') + 1) : normalized;
|
|
65
|
+
}
|
|
66
|
+
export function getSupportedModelSpec(value) {
|
|
67
|
+
const normalized = normalizeModelKey(value);
|
|
68
|
+
return MODEL_LOOKUP.get(normalized) ?? MODEL_LOOKUP.get(modelFamilyKey(normalized));
|
|
69
|
+
}
|
|
70
|
+
export function isSupportedModel(value) {
|
|
71
|
+
return Boolean(getSupportedModelSpec(value));
|
|
72
|
+
}
|
|
73
|
+
export function canonicalModelId(value) {
|
|
74
|
+
return getSupportedModelSpec(value)?.id;
|
|
75
|
+
}
|
|
76
|
+
export function resolveTokenizerForModel(value) {
|
|
77
|
+
return getSupportedModelSpec(value)?.tokenizer;
|
|
78
|
+
}
|
|
79
|
+
export function resolveProviderForModel(value) {
|
|
80
|
+
return getSupportedModelSpec(value)?.provider;
|
|
81
|
+
}
|
|
82
|
+
function capabilities(family, control, efforts, options) {
|
|
83
|
+
return {
|
|
84
|
+
family,
|
|
85
|
+
control,
|
|
86
|
+
efforts,
|
|
87
|
+
supportsToggle: control !== 'fixed',
|
|
88
|
+
defaultEnabled: true,
|
|
89
|
+
omitTemperature: control !== 'effort',
|
|
90
|
+
description: 'Provider-native reasoning control.',
|
|
91
|
+
...options,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function reconcileAdvertisedReasoning(base, discovered) {
|
|
95
|
+
if (!discovered)
|
|
96
|
+
return base;
|
|
97
|
+
if (discovered.reasoning === false)
|
|
98
|
+
return null;
|
|
99
|
+
if (base.control === 'budget' || (base.control === 'fixed' && base.efforts.length === 0))
|
|
100
|
+
return base;
|
|
101
|
+
const advertised = discovered.reasoningEfforts?.filter(effort => REASONING_EFFORTS.includes(effort)) ?? [];
|
|
102
|
+
if (advertised.length === 0)
|
|
103
|
+
return base;
|
|
104
|
+
const intersection = base.efforts.filter(effort => advertised.includes(effort));
|
|
105
|
+
const efforts = intersection.length > 0 ? intersection : advertised;
|
|
106
|
+
const defaultEffort = efforts.includes(base.defaultEffort)
|
|
107
|
+
? base.defaultEffort
|
|
108
|
+
: efforts.includes('medium')
|
|
109
|
+
? 'medium'
|
|
110
|
+
: efforts[0];
|
|
111
|
+
return { ...base, efforts, defaultEffort };
|
|
112
|
+
}
|
|
113
|
+
export function getModelReasoningCapabilities(model, provider, discovered) {
|
|
114
|
+
const key = modelFamilyKey(model);
|
|
115
|
+
const providerKey = normalizeModelKey(provider);
|
|
116
|
+
if (/^claude-(?:fable-5|mythos-(?:5|preview))/.test(key)) {
|
|
117
|
+
return reconcileAdvertisedReasoning(capabilities('anthropic', 'adaptive-effort', ['low', 'medium', 'high', 'xhigh', 'max'], {
|
|
118
|
+
supportsToggle: false,
|
|
119
|
+
defaultEffort: 'high',
|
|
120
|
+
description: 'Adaptive thinking is always on; effort controls total response work.',
|
|
121
|
+
}), discovered);
|
|
122
|
+
}
|
|
123
|
+
if (/^claude-(?:opus-5|opus-4-(?:8|7)|sonnet-5)/.test(key)) {
|
|
124
|
+
return reconcileAdvertisedReasoning(capabilities('anthropic', 'adaptive-effort', ['low', 'medium', 'high', 'xhigh', 'max'], {
|
|
125
|
+
defaultEffort: 'high',
|
|
126
|
+
description: 'Adaptive thinking with native low through max effort.',
|
|
127
|
+
}), discovered);
|
|
128
|
+
}
|
|
129
|
+
if (/^claude-(?:opus|sonnet)-4-6/.test(key)) {
|
|
130
|
+
return reconcileAdvertisedReasoning(capabilities('anthropic', 'adaptive-effort', ['low', 'medium', 'high', 'max'], {
|
|
131
|
+
defaultEffort: key.includes('sonnet') ? 'medium' : 'high',
|
|
132
|
+
description: 'Adaptive thinking with native effort; manual budgets are deprecated.',
|
|
133
|
+
}), discovered);
|
|
134
|
+
}
|
|
135
|
+
if (/^claude-opus-4-5/.test(key)) {
|
|
136
|
+
return reconcileAdvertisedReasoning(capabilities('anthropic', 'adaptive-effort', ['low', 'medium', 'high'], {
|
|
137
|
+
defaultEffort: 'high',
|
|
138
|
+
description: 'Adaptive thinking with native low, medium, and high effort.',
|
|
139
|
+
}), discovered);
|
|
140
|
+
}
|
|
141
|
+
if (/^claude-/.test(key) || providerKey === 'anthropic') {
|
|
142
|
+
return reconcileAdvertisedReasoning(capabilities('anthropic', 'budget', [], {
|
|
143
|
+
defaultBudgetTokens: 8_192,
|
|
144
|
+
description: 'Manual extended thinking controlled by a token budget.',
|
|
145
|
+
}), discovered);
|
|
146
|
+
}
|
|
147
|
+
if (/^gpt-5\.6(?:$|-)/.test(key)) {
|
|
148
|
+
return reconcileAdvertisedReasoning(capabilities('openai', 'effort', ['none', 'low', 'medium', 'high', 'xhigh', 'max'], {
|
|
149
|
+
defaultEffort: 'medium',
|
|
150
|
+
omitTemperature: false,
|
|
151
|
+
description: 'GPT-5.6 native reasoning effort.',
|
|
152
|
+
}), discovered);
|
|
153
|
+
}
|
|
154
|
+
if (/^(?:gpt-5(?:\.|$)|o[1-9](?:-|$))/.test(key)) {
|
|
155
|
+
return reconcileAdvertisedReasoning(capabilities('openai', 'effort', ['none', 'minimal', 'low', 'medium', 'high', 'xhigh'], {
|
|
156
|
+
defaultEffort: 'medium',
|
|
157
|
+
omitTemperature: false,
|
|
158
|
+
description: 'OpenAI model-native reasoning effort; accepted values remain model-dependent.',
|
|
159
|
+
}), discovered);
|
|
160
|
+
}
|
|
161
|
+
if (/^deepseek-v4-flash/.test(key)) {
|
|
162
|
+
return reconcileAdvertisedReasoning(capabilities('deepseek', 'toggle-effort', ['low', 'high', 'max'], {
|
|
163
|
+
defaultEffort: 'high',
|
|
164
|
+
preservesReasoningContent: true,
|
|
165
|
+
description: 'Thinking toggle with low, high, and max native effort levels.',
|
|
166
|
+
}), discovered);
|
|
167
|
+
}
|
|
168
|
+
if (/^deepseek-v4-pro/.test(key) || providerKey === 'deepseek') {
|
|
169
|
+
return reconcileAdvertisedReasoning(capabilities('deepseek', 'toggle-effort', ['high', 'max'], {
|
|
170
|
+
defaultEffort: 'high',
|
|
171
|
+
preservesReasoningContent: true,
|
|
172
|
+
description: 'Thinking toggle with high and max native effort levels.',
|
|
173
|
+
}), discovered);
|
|
174
|
+
}
|
|
175
|
+
if (/^kimi-k3/.test(key)) {
|
|
176
|
+
return reconcileAdvertisedReasoning(capabilities('kimi', 'fixed', ['low', 'high', 'max'], {
|
|
177
|
+
supportsToggle: false,
|
|
178
|
+
defaultEffort: 'max',
|
|
179
|
+
preservesReasoningContent: true,
|
|
180
|
+
description: 'Thinking is always on; Kimi K3 accepts low, high, and max effort.',
|
|
181
|
+
}), discovered);
|
|
182
|
+
}
|
|
183
|
+
if (/^kimi-k2\.7-code/.test(key)) {
|
|
184
|
+
return reconcileAdvertisedReasoning(capabilities('kimi', 'fixed', [], {
|
|
185
|
+
supportsToggle: false,
|
|
186
|
+
preservesReasoningContent: true,
|
|
187
|
+
description: 'Thinking and preserved thinking are always on with no request control.',
|
|
188
|
+
}), discovered);
|
|
189
|
+
}
|
|
190
|
+
if (/^kimi-k2\.(?:6|5)/.test(key)) {
|
|
191
|
+
return reconcileAdvertisedReasoning(capabilities('kimi', 'toggle', [], {
|
|
192
|
+
preservesReasoningContent: key.startsWith('kimi-k2.6'),
|
|
193
|
+
description: 'Kimi thinking can be enabled or disabled for this model.',
|
|
194
|
+
}), discovered);
|
|
195
|
+
}
|
|
196
|
+
if (/^glm-5\.2/.test(key)) {
|
|
197
|
+
return reconcileAdvertisedReasoning(capabilities('glm', 'toggle-effort', ['max'], {
|
|
198
|
+
defaultEffort: 'max',
|
|
199
|
+
omitTemperature: false,
|
|
200
|
+
preservesReasoningContent: true,
|
|
201
|
+
description: 'GLM-5.2 thinking toggle with native max reasoning effort.',
|
|
202
|
+
}), discovered);
|
|
203
|
+
}
|
|
204
|
+
if (/^glm-(?:5(?:$|-|\.1)|4\.(?:5|6|7))/.test(key) || providerKey === 'glm') {
|
|
205
|
+
return reconcileAdvertisedReasoning(capabilities('glm', 'toggle', [], {
|
|
206
|
+
omitTemperature: false,
|
|
207
|
+
preservesReasoningContent: true,
|
|
208
|
+
description: 'GLM native thinking toggle.',
|
|
209
|
+
}), discovered);
|
|
210
|
+
}
|
|
211
|
+
if (discovered?.reasoning) {
|
|
212
|
+
const efforts = discovered.reasoningEfforts?.filter(effort => effort !== undefined) ?? [];
|
|
213
|
+
const supportsEffort = efforts.length > 0 || discovered.supportedParameters?.includes('reasoning_effort');
|
|
214
|
+
if (supportsEffort) {
|
|
215
|
+
const available = efforts.length > 0 ? efforts : ['low', 'medium', 'high'];
|
|
216
|
+
return capabilities('openai', 'effort', available, {
|
|
217
|
+
defaultEffort: available.includes('medium') ? 'medium' : available[0],
|
|
218
|
+
omitTemperature: false,
|
|
219
|
+
description: 'Reasoning effort reported by the active API model metadata.',
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return capabilities('openai', 'fixed', [], {
|
|
223
|
+
supportsToggle: false,
|
|
224
|
+
omitTemperature: false,
|
|
225
|
+
description: 'Reasoning is supported, but the API did not advertise an adjustable control.',
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
export function normalizeNativeReasoningConfig(model, config, provider, discovered) {
|
|
231
|
+
const capability = getModelReasoningCapabilities(model, provider, discovered);
|
|
232
|
+
if (!capability)
|
|
233
|
+
return undefined;
|
|
234
|
+
const enabled = capability.supportsToggle ? config?.enabled ?? capability.defaultEnabled : true;
|
|
235
|
+
const requestedEffort = config?.effort;
|
|
236
|
+
const effort = capability.efforts.length > 0
|
|
237
|
+
? capability.efforts.includes(requestedEffort)
|
|
238
|
+
? requestedEffort
|
|
239
|
+
: capability.defaultEffort ?? capability.efforts[0]
|
|
240
|
+
: undefined;
|
|
241
|
+
const budgetTokens = capability.control === 'budget'
|
|
242
|
+
? Math.max(1_024, Math.min(128_000, Math.round(config?.budgetTokens ?? capability.defaultBudgetTokens ?? 8_192)))
|
|
243
|
+
: undefined;
|
|
244
|
+
return { enabled, effort, budgetTokens };
|
|
245
|
+
}
|
|
246
|
+
export function resolveNativeReasoningRequest(model, config, provider, discovered) {
|
|
247
|
+
const capability = getModelReasoningCapabilities(model, provider, discovered);
|
|
248
|
+
const normalized = normalizeNativeReasoningConfig(model, config, provider, discovered);
|
|
249
|
+
if (!capability || !normalized)
|
|
250
|
+
return null;
|
|
251
|
+
const request = {
|
|
252
|
+
enabled: normalized.enabled !== false,
|
|
253
|
+
omitTemperature: capability.omitTemperature && normalized.enabled !== false,
|
|
254
|
+
};
|
|
255
|
+
if (capability.control === 'effort') {
|
|
256
|
+
request.reasoningEffort = request.enabled
|
|
257
|
+
? normalized.effort
|
|
258
|
+
: capability.efforts.includes('none') ? 'none' : undefined;
|
|
259
|
+
request.omitTemperature = request.reasoningEffort !== 'none';
|
|
260
|
+
}
|
|
261
|
+
else if (capability.control === 'adaptive-effort') {
|
|
262
|
+
const opusFiveHighEffort = capability.family === 'anthropic'
|
|
263
|
+
&& /^claude-opus-5/.test(modelFamilyKey(model))
|
|
264
|
+
&& (normalized.effort === 'xhigh' || normalized.effort === 'max');
|
|
265
|
+
request.thinking = request.enabled && !opusFiveHighEffort ? { type: 'adaptive' } : { type: 'disabled' };
|
|
266
|
+
if (request.enabled && normalized.effort)
|
|
267
|
+
request.outputConfig = { effort: normalized.effort };
|
|
268
|
+
}
|
|
269
|
+
else if (capability.control === 'budget') {
|
|
270
|
+
request.thinking = request.enabled
|
|
271
|
+
? { type: 'enabled', budget_tokens: normalized.budgetTokens }
|
|
272
|
+
: { type: 'disabled' };
|
|
273
|
+
}
|
|
274
|
+
else if (capability.control === 'toggle-effort') {
|
|
275
|
+
request.thinking = { type: request.enabled ? 'enabled' : 'disabled' };
|
|
276
|
+
if (request.enabled && normalized.effort)
|
|
277
|
+
request.reasoningEffort = normalized.effort;
|
|
278
|
+
}
|
|
279
|
+
else if (capability.control === 'toggle') {
|
|
280
|
+
request.thinking = { type: request.enabled ? 'enabled' : 'disabled' };
|
|
281
|
+
}
|
|
282
|
+
else if (capability.control === 'fixed' && capability.family === 'kimi' && capability.preservesReasoningContent) {
|
|
283
|
+
request.thinking = { type: 'enabled', keep: 'all' };
|
|
284
|
+
}
|
|
285
|
+
else if (capability.control === 'fixed' && normalized.effort) {
|
|
286
|
+
request.reasoningEffort = normalized.effort;
|
|
287
|
+
}
|
|
288
|
+
if (capability.family === 'kimi' && request.enabled && request.thinking && capability.preservesReasoningContent) {
|
|
289
|
+
request.thinking.keep = 'all';
|
|
290
|
+
}
|
|
291
|
+
return request;
|
|
292
|
+
}
|
|
293
|
+
export function formatNativeReasoningSetting(model, config, provider, discovered) {
|
|
294
|
+
const capability = getModelReasoningCapabilities(model, provider, discovered);
|
|
295
|
+
const normalized = normalizeNativeReasoningConfig(model, config, provider, discovered);
|
|
296
|
+
if (!capability || !normalized)
|
|
297
|
+
return null;
|
|
298
|
+
if (normalized.enabled === false)
|
|
299
|
+
return 'off';
|
|
300
|
+
if (normalized.effort)
|
|
301
|
+
return normalized.effort;
|
|
302
|
+
if (capability.control === 'budget')
|
|
303
|
+
return `${normalized.budgetTokens}t`;
|
|
304
|
+
if (capability.control === 'fixed')
|
|
305
|
+
return 'fixed';
|
|
306
|
+
return 'on';
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=modelRegistry.js.map
|