@within-7/minto 0.4.2 → 0.4.3
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/cli.cjs +32 -154
- package/cli.js +3255 -0
- package/package.json +21 -38
- package/scripts/postinstall.cjs +19 -136
- package/vendor/ripgrep/arm64-linux/rg +0 -0
- package/vendor/ripgrep/x64-darwin/rg +0 -0
- package/vendor/ripgrep/x64-linux/rg +0 -0
- package/vendor/ripgrep/x64-win32/rg.exe +0 -0
- package/dist/Tool.js +0 -46
- package/dist/Tool.js.map +0 -7
- package/dist/commands/agents/AgentsCommand.js +0 -2170
- package/dist/commands/agents/AgentsCommand.js.map +0 -7
- package/dist/commands/agents/constants.js +0 -58
- package/dist/commands/agents/constants.js.map +0 -7
- package/dist/commands/agents/index.js +0 -37
- package/dist/commands/agents/index.js.map +0 -7
- package/dist/commands/agents/types.js +0 -11
- package/dist/commands/agents/types.js.map +0 -7
- package/dist/commands/agents/utils/fileOperations.js +0 -245
- package/dist/commands/agents/utils/fileOperations.js.map +0 -7
- package/dist/commands/agents/utils/index.js +0 -23
- package/dist/commands/agents/utils/index.js.map +0 -7
- package/dist/commands/approvedTools.js +0 -36
- package/dist/commands/approvedTools.js.map +0 -7
- package/dist/commands/bug.js +0 -88
- package/dist/commands/bug.js.map +0 -7
- package/dist/commands/clear.js +0 -41
- package/dist/commands/clear.js.map +0 -7
- package/dist/commands/compact.js +0 -119
- package/dist/commands/compact.js.map +0 -7
- package/dist/commands/config.js +0 -20
- package/dist/commands/config.js.map +0 -7
- package/dist/commands/context.js +0 -118
- package/dist/commands/context.js.map +0 -7
- package/dist/commands/cost.js +0 -19
- package/dist/commands/cost.js.map +0 -7
- package/dist/commands/ctx_viz.js +0 -193
- package/dist/commands/ctx_viz.js.map +0 -7
- package/dist/commands/doctor.js +0 -171
- package/dist/commands/doctor.js.map +0 -7
- package/dist/commands/effort.js +0 -87
- package/dist/commands/effort.js.map +0 -7
- package/dist/commands/export.js +0 -747
- package/dist/commands/export.js.map +0 -7
- package/dist/commands/help.js +0 -20
- package/dist/commands/help.js.map +0 -7
- package/dist/commands/ide.js +0 -18
- package/dist/commands/ide.js.map +0 -7
- package/dist/commands/init.js +0 -38
- package/dist/commands/init.js.map +0 -7
- package/dist/commands/language.js +0 -110
- package/dist/commands/language.js.map +0 -7
- package/dist/commands/login.js +0 -128
- package/dist/commands/login.js.map +0 -7
- package/dist/commands/mcp-interactive.js +0 -485
- package/dist/commands/mcp-interactive.js.map +0 -7
- package/dist/commands/memory.js +0 -119
- package/dist/commands/memory.js.map +0 -7
- package/dist/commands/model.js +0 -497
- package/dist/commands/model.js.map +0 -7
- package/dist/commands/new.js +0 -56
- package/dist/commands/new.js.map +0 -7
- package/dist/commands/outputStyle.js +0 -64
- package/dist/commands/outputStyle.js.map +0 -7
- package/dist/commands/permissions.js +0 -113
- package/dist/commands/permissions.js.map +0 -7
- package/dist/commands/plugin/AddMarketplaceForm.js +0 -91
- package/dist/commands/plugin/AddMarketplaceForm.js.map +0 -7
- package/dist/commands/plugin/ConfirmDialog.js +0 -84
- package/dist/commands/plugin/ConfirmDialog.js.map +0 -7
- package/dist/commands/plugin/ErrorView.js +0 -34
- package/dist/commands/plugin/ErrorView.js.map +0 -7
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +0 -152
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +0 -7
- package/dist/commands/plugin/InstalledPluginsManager.js +0 -102
- package/dist/commands/plugin/InstalledPluginsManager.js.map +0 -7
- package/dist/commands/plugin/LoadingView.js +0 -14
- package/dist/commands/plugin/LoadingView.js.map +0 -7
- package/dist/commands/plugin/MainMenu.js +0 -67
- package/dist/commands/plugin/MainMenu.js.map +0 -7
- package/dist/commands/plugin/MarketplaceManager.js +0 -201
- package/dist/commands/plugin/MarketplaceManager.js.map +0 -7
- package/dist/commands/plugin/MarketplaceSelector.js +0 -124
- package/dist/commands/plugin/MarketplaceSelector.js.map +0 -7
- package/dist/commands/plugin/PlaceholderScreen.js +0 -31
- package/dist/commands/plugin/PlaceholderScreen.js.map +0 -7
- package/dist/commands/plugin/PluginBrowser.js +0 -183
- package/dist/commands/plugin/PluginBrowser.js.map +0 -7
- package/dist/commands/plugin/PluginDetailsInstall.js +0 -159
- package/dist/commands/plugin/PluginDetailsInstall.js.map +0 -7
- package/dist/commands/plugin/PluginDetailsManage.js +0 -210
- package/dist/commands/plugin/PluginDetailsManage.js.map +0 -7
- package/dist/commands/plugin/components.js +0 -16
- package/dist/commands/plugin/components.js.map +0 -7
- package/dist/commands/plugin/example-usage.js +0 -63
- package/dist/commands/plugin/example-usage.js.map +0 -7
- package/dist/commands/plugin/types.js +0 -1
- package/dist/commands/plugin/types.js.map +0 -7
- package/dist/commands/plugin/utils.js +0 -109
- package/dist/commands/plugin/utils.js.map +0 -7
- package/dist/commands/plugin.js +0 -1410
- package/dist/commands/plugin.js.map +0 -7
- package/dist/commands/quit.js +0 -20
- package/dist/commands/quit.js.map +0 -7
- package/dist/commands/refreshCommands.js +0 -48
- package/dist/commands/refreshCommands.js.map +0 -7
- package/dist/commands/resume.js +0 -71
- package/dist/commands/resume.js.map +0 -7
- package/dist/commands/review.js +0 -51
- package/dist/commands/review.js.map +0 -7
- package/dist/commands/sandbox.js +0 -203
- package/dist/commands/sandbox.js.map +0 -7
- package/dist/commands/sessions.js +0 -224
- package/dist/commands/sessions.js.map +0 -7
- package/dist/commands/setup.js +0 -653
- package/dist/commands/setup.js.map +0 -7
- package/dist/commands/stats.js +0 -292
- package/dist/commands/stats.js.map +0 -7
- package/dist/commands/status.js +0 -127
- package/dist/commands/status.js.map +0 -7
- package/dist/commands/tasks.js +0 -108
- package/dist/commands/tasks.js.map +0 -7
- package/dist/commands/terminalSetup.js +0 -174
- package/dist/commands/terminalSetup.js.map +0 -7
- package/dist/commands/todos.js +0 -123
- package/dist/commands/todos.js.map +0 -7
- package/dist/commands/undo.js +0 -227
- package/dist/commands/undo.js.map +0 -7
- package/dist/commands/vim.js +0 -22
- package/dist/commands/vim.js.map +0 -7
- package/dist/commands.js +0 -130
- package/dist/commands.js.map +0 -7
- package/dist/components/AgentDetailView.js +0 -126
- package/dist/components/AgentDetailView.js.map +0 -7
- package/dist/components/AgentResponseBlock.js +0 -41
- package/dist/components/AgentResponseBlock.js.map +0 -7
- package/dist/components/AgentThinkingBlock.js +0 -32
- package/dist/components/AgentThinkingBlock.js.map +0 -7
- package/dist/components/AgentViewBanner.js +0 -22
- package/dist/components/AgentViewBanner.js.map +0 -7
- package/dist/components/AsciiLogo.js +0 -18
- package/dist/components/AsciiLogo.js.map +0 -7
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +0 -142
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +0 -7
- package/dist/components/AskUserQuestionDialog/QuestionView.js +0 -55
- package/dist/components/AskUserQuestionDialog/QuestionView.js.map +0 -7
- package/dist/components/AskUserQuestionDialog/index.js +0 -7
- package/dist/components/AskUserQuestionDialog/index.js.map +0 -7
- package/dist/components/BackgroundTasksPanel.js +0 -177
- package/dist/components/BackgroundTasksPanel.js.map +0 -7
- package/dist/components/BashStreamingProgress.js +0 -24
- package/dist/components/BashStreamingProgress.js.map +0 -7
- package/dist/components/CollapsibleHint.js +0 -15
- package/dist/components/CollapsibleHint.js.map +0 -7
- package/dist/components/Config.js +0 -181
- package/dist/components/Config.js.map +0 -7
- package/dist/components/ConsoleOAuthFlow.js +0 -179
- package/dist/components/ConsoleOAuthFlow.js.map +0 -7
- package/dist/components/Cost.js +0 -14
- package/dist/components/Cost.js.map +0 -7
- package/dist/components/CostThresholdDialog.js +0 -38
- package/dist/components/CostThresholdDialog.js.map +0 -7
- package/dist/components/CustomSelect/option-map.js +0 -32
- package/dist/components/CustomSelect/option-map.js.map +0 -7
- package/dist/components/CustomSelect/select-option.js +0 -37
- package/dist/components/CustomSelect/select-option.js.map +0 -7
- package/dist/components/CustomSelect/select.js +0 -64
- package/dist/components/CustomSelect/select.js.map +0 -7
- package/dist/components/CustomSelect/theme.js +0 -1
- package/dist/components/CustomSelect/theme.js.map +0 -7
- package/dist/components/CustomSelect/use-select-state.js +0 -220
- package/dist/components/CustomSelect/use-select-state.js.map +0 -7
- package/dist/components/CustomSelect/use-select.js +0 -21
- package/dist/components/CustomSelect/use-select.js.map +0 -7
- package/dist/components/FallbackToolUseRejectedMessage.js +0 -11
- package/dist/components/FallbackToolUseRejectedMessage.js.map +0 -7
- package/dist/components/FileEditToolUpdatedMessage.js +0 -32
- package/dist/components/FileEditToolUpdatedMessage.js.map +0 -7
- package/dist/components/HeaderBar.js +0 -63
- package/dist/components/HeaderBar.js.map +0 -7
- package/dist/components/Help.js +0 -185
- package/dist/components/Help.js.map +0 -7
- package/dist/components/HighlightedCode.js +0 -31
- package/dist/components/HighlightedCode.js.map +0 -7
- package/dist/components/HistorySearchOverlay.js +0 -49
- package/dist/components/HistorySearchOverlay.js.map +0 -7
- package/dist/components/HotkeyHelpPanel.js +0 -154
- package/dist/components/HotkeyHelpPanel.js.map +0 -7
- package/dist/components/IdleNotificationBar.js +0 -10
- package/dist/components/IdleNotificationBar.js.map +0 -7
- package/dist/components/InfoPanel/InfoPanel.js +0 -123
- package/dist/components/InfoPanel/InfoPanel.js.map +0 -7
- package/dist/components/InfoPanel/index.js +0 -5
- package/dist/components/InfoPanel/index.js.map +0 -7
- package/dist/components/InfoPanel/types.js +0 -1
- package/dist/components/InfoPanel/types.js.map +0 -7
- package/dist/components/InteractionRoundBlock.js +0 -56
- package/dist/components/InteractionRoundBlock.js.map +0 -7
- package/dist/components/InvalidConfigDialog.js +0 -84
- package/dist/components/InvalidConfigDialog.js.map +0 -7
- package/dist/components/Link.js +0 -18
- package/dist/components/Link.js.map +0 -7
- package/dist/components/LogSelector.js +0 -50
- package/dist/components/LogSelector.js.map +0 -7
- package/dist/components/Logo.js +0 -55
- package/dist/components/Logo.js.map +0 -7
- package/dist/components/MCPServerApprovalDialog.js +0 -81
- package/dist/components/MCPServerApprovalDialog.js.map +0 -7
- package/dist/components/MCPServerDialogCopy.js +0 -12
- package/dist/components/MCPServerDialogCopy.js.map +0 -7
- package/dist/components/MCPServerMultiselectDialog.js +0 -82
- package/dist/components/MCPServerMultiselectDialog.js.map +0 -7
- package/dist/components/Message.js +0 -162
- package/dist/components/Message.js.map +0 -7
- package/dist/components/MessageResponse.js +0 -9
- package/dist/components/MessageResponse.js.map +0 -7
- package/dist/components/MessageSelector.js +0 -127
- package/dist/components/MessageSelector.js.map +0 -7
- package/dist/components/ModeIndicator.js +0 -39
- package/dist/components/ModeIndicator.js.map +0 -7
- package/dist/components/ModelConfig.js +0 -223
- package/dist/components/ModelConfig.js.map +0 -7
- package/dist/components/ModelListManager.js +0 -142
- package/dist/components/ModelListManager.js.map +0 -7
- package/dist/components/ModelSelector/BrandTextInput.js +0 -43
- package/dist/components/ModelSelector/BrandTextInput.js.map +0 -7
- package/dist/components/ModelSelector/ModelSelector.js +0 -2103
- package/dist/components/ModelSelector/ModelSelector.js.map +0 -7
- package/dist/components/ModelSelector/ScreenContainer.js +0 -27
- package/dist/components/ModelSelector/ScreenContainer.js.map +0 -7
- package/dist/components/ModelSelector/WizardContainer.js +0 -45
- package/dist/components/ModelSelector/WizardContainer.js.map +0 -7
- package/dist/components/ModelSelector/constants.js +0 -37
- package/dist/components/ModelSelector/constants.js.map +0 -7
- package/dist/components/ModelSelector/hooks/index.js +0 -5
- package/dist/components/ModelSelector/hooks/index.js.map +0 -7
- package/dist/components/ModelSelector/hooks/useEscapeNavigation.js +0 -21
- package/dist/components/ModelSelector/hooks/useEscapeNavigation.js.map +0 -7
- package/dist/components/ModelSelector/index.js +0 -15
- package/dist/components/ModelSelector/index.js.map +0 -7
- package/dist/components/ModelSelector/types.js +0 -1
- package/dist/components/ModelSelector/types.js.map +0 -7
- package/dist/components/Onboarding.js +0 -159
- package/dist/components/Onboarding.js.map +0 -7
- package/dist/components/OperationSummary.js +0 -130
- package/dist/components/OperationSummary.js.map +0 -7
- package/dist/components/PressEnterToContinue.js +0 -10
- package/dist/components/PressEnterToContinue.js.map +0 -7
- package/dist/components/ProgressBar.js +0 -74
- package/dist/components/ProgressBar.js.map +0 -7
- package/dist/components/ProjectOnboarding.js +0 -99
- package/dist/components/ProjectOnboarding.js.map +0 -7
- package/dist/components/PromptInput.js +0 -1067
- package/dist/components/PromptInput.js.map +0 -7
- package/dist/components/PulseLabel.js +0 -44
- package/dist/components/PulseLabel.js.map +0 -7
- package/dist/components/QuitSummary.js +0 -88
- package/dist/components/QuitSummary.js.map +0 -7
- package/dist/components/RequestStatusIndicator.js +0 -194
- package/dist/components/RequestStatusIndicator.js.map +0 -7
- package/dist/components/RewindPanel.js +0 -272
- package/dist/components/RewindPanel.js.map +0 -7
- package/dist/components/SensitiveFileWarning.js +0 -35
- package/dist/components/SensitiveFileWarning.js.map +0 -7
- package/dist/components/SentryErrorBoundary.js +0 -27
- package/dist/components/SentryErrorBoundary.js.map +0 -7
- package/dist/components/SimpleSelector/SimpleSelector.js +0 -154
- package/dist/components/SimpleSelector/SimpleSelector.js.map +0 -7
- package/dist/components/SimpleSelector/index.js +0 -5
- package/dist/components/SimpleSelector/index.js.map +0 -7
- package/dist/components/SimpleSelector/types.js +0 -1
- package/dist/components/SimpleSelector/types.js.map +0 -7
- package/dist/components/Spinner.js +0 -174
- package/dist/components/Spinner.js.map +0 -7
- package/dist/components/SpinnerSymbol.js +0 -72
- package/dist/components/SpinnerSymbol.js.map +0 -7
- package/dist/components/StartupStatus.js +0 -57
- package/dist/components/StartupStatus.js.map +0 -7
- package/dist/components/StatusOverlayContent.js +0 -21
- package/dist/components/StatusOverlayContent.js.map +0 -7
- package/dist/components/StreamingBashOutput.js +0 -71
- package/dist/components/StreamingBashOutput.js.map +0 -7
- package/dist/components/StreamingTextPreview.js +0 -29
- package/dist/components/StreamingTextPreview.js.map +0 -7
- package/dist/components/StructuredDiff.js +0 -146
- package/dist/components/StructuredDiff.js.map +0 -7
- package/dist/components/SubagentBlock.js +0 -197
- package/dist/components/SubagentBlock.js.map +0 -7
- package/dist/components/SubagentManager.js +0 -65
- package/dist/components/SubagentManager.js.map +0 -7
- package/dist/components/SubagentProgress.js +0 -123
- package/dist/components/SubagentProgress.js.map +0 -7
- package/dist/components/SubagentStatusMarker.js +0 -37
- package/dist/components/SubagentStatusMarker.js.map +0 -7
- package/dist/components/TabbedListView/ScrollableList.js +0 -117
- package/dist/components/TabbedListView/ScrollableList.js.map +0 -7
- package/dist/components/TabbedListView/SearchInput.js +0 -23
- package/dist/components/TabbedListView/SearchInput.js.map +0 -7
- package/dist/components/TabbedListView/TabBar.js +0 -25
- package/dist/components/TabbedListView/TabBar.js.map +0 -7
- package/dist/components/TabbedListView/TabbedListView.js +0 -292
- package/dist/components/TabbedListView/TabbedListView.js.map +0 -7
- package/dist/components/TabbedListView/index.js +0 -11
- package/dist/components/TabbedListView/index.js.map +0 -7
- package/dist/components/TabbedListView/types.js +0 -1
- package/dist/components/TabbedListView/types.js.map +0 -7
- package/dist/components/TaskCard.js +0 -176
- package/dist/components/TaskCard.js.map +0 -7
- package/dist/components/TeamMemberPanel.js +0 -107
- package/dist/components/TeamMemberPanel.js.map +0 -7
- package/dist/components/TextInput.js +0 -108
- package/dist/components/TextInput.js.map +0 -7
- package/dist/components/ThinkingSelector.js +0 -84
- package/dist/components/ThinkingSelector.js.map +0 -7
- package/dist/components/TimelineRenderer.js +0 -31
- package/dist/components/TimelineRenderer.js.map +0 -7
- package/dist/components/TitledDivider.js +0 -26
- package/dist/components/TitledDivider.js.map +0 -7
- package/dist/components/TodoChangeBlock.js +0 -30
- package/dist/components/TodoChangeBlock.js.map +0 -7
- package/dist/components/TodoChangeLine.js +0 -22
- package/dist/components/TodoChangeLine.js.map +0 -7
- package/dist/components/TodoItem.js +0 -35
- package/dist/components/TodoItem.js.map +0 -7
- package/dist/components/TodoPanel.js +0 -167
- package/dist/components/TodoPanel.js.map +0 -7
- package/dist/components/TokenCounter.js +0 -74
- package/dist/components/TokenCounter.js.map +0 -7
- package/dist/components/TokenWarning.js +0 -41
- package/dist/components/TokenWarning.js.map +0 -7
- package/dist/components/ToolExecutionBlock.js +0 -18
- package/dist/components/ToolExecutionBlock.js.map +0 -7
- package/dist/components/ToolUseLoader.js +0 -29
- package/dist/components/ToolUseLoader.js.map +0 -7
- package/dist/components/TreeConnector.js +0 -26
- package/dist/components/TreeConnector.js.map +0 -7
- package/dist/components/TrustDialog.js +0 -71
- package/dist/components/TrustDialog.js.map +0 -7
- package/dist/components/TurnCompletionIndicator.js +0 -18
- package/dist/components/TurnCompletionIndicator.js.map +0 -7
- package/dist/components/UserQueryBlock.js +0 -12
- package/dist/components/UserQueryBlock.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedback.js +0 -50
- package/dist/components/binary-feedback/BinaryFeedback.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +0 -92
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedbackView.js +0 -140
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +0 -7
- package/dist/components/binary-feedback/utils.js +0 -108
- package/dist/components/binary-feedback/utils.js.map +0 -7
- package/dist/components/messages/AssistantBashOutputMessage.js +0 -23
- package/dist/components/messages/AssistantBashOutputMessage.js.map +0 -7
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js +0 -36
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +0 -7
- package/dist/components/messages/AssistantRedactedThinkingMessage.js +0 -12
- package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +0 -7
- package/dist/components/messages/AssistantTextMessage.js +0 -92
- package/dist/components/messages/AssistantTextMessage.js.map +0 -7
- package/dist/components/messages/AssistantThinkingMessage.js +0 -42
- package/dist/components/messages/AssistantThinkingMessage.js.map +0 -7
- package/dist/components/messages/AssistantToolUseMessage.js +0 -108
- package/dist/components/messages/AssistantToolUseMessage.js.map +0 -7
- package/dist/components/messages/DefaultToolResultFallback.js +0 -11
- package/dist/components/messages/DefaultToolResultFallback.js.map +0 -7
- package/dist/components/messages/GroupRenderer.js +0 -54
- package/dist/components/messages/GroupRenderer.js.map +0 -7
- package/dist/components/messages/NestedTasksPreview.js +0 -24
- package/dist/components/messages/NestedTasksPreview.js.map +0 -7
- package/dist/components/messages/ParallelTasksGroupView.js +0 -101
- package/dist/components/messages/ParallelTasksGroupView.js.map +0 -7
- package/dist/components/messages/TaskInModuleView.js +0 -218
- package/dist/components/messages/TaskInModuleView.js.map +0 -7
- package/dist/components/messages/TaskOutputContent.js +0 -56
- package/dist/components/messages/TaskOutputContent.js.map +0 -7
- package/dist/components/messages/TaskProgressMessage.js +0 -11
- package/dist/components/messages/TaskProgressMessage.js.map +0 -7
- package/dist/components/messages/TaskToolMessage.js +0 -39
- package/dist/components/messages/TaskToolMessage.js.map +0 -7
- package/dist/components/messages/UserBashInputMessage.js +0 -18
- package/dist/components/messages/UserBashInputMessage.js.map +0 -7
- package/dist/components/messages/UserCommandMessage.js +0 -20
- package/dist/components/messages/UserCommandMessage.js.map +0 -7
- package/dist/components/messages/UserGuidanceMessage.js +0 -26
- package/dist/components/messages/UserGuidanceMessage.js.map +0 -7
- package/dist/components/messages/UserKodingInputMessage.js +0 -18
- package/dist/components/messages/UserKodingInputMessage.js.map +0 -7
- package/dist/components/messages/UserPromptMessage.js +0 -26
- package/dist/components/messages/UserPromptMessage.js.map +0 -7
- package/dist/components/messages/UserTeamNotificationMessage.js +0 -91
- package/dist/components/messages/UserTeamNotificationMessage.js.map +0 -7
- package/dist/components/messages/UserTextMessage.js +0 -33
- package/dist/components/messages/UserTextMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +0 -11
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +0 -15
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +0 -27
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +0 -64
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +0 -33
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/utils.js +0 -50
- package/dist/components/messages/UserToolResultMessage/utils.js.map +0 -7
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -112
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FallbackPermissionRequest.js +0 -131
- package/dist/components/permissions/FallbackPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -159
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -58
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +0 -7
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -153
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -70
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +0 -7
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -212
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +0 -7
- package/dist/components/permissions/PermissionRequest.js +0 -74
- package/dist/components/permissions/PermissionRequest.js.map +0 -7
- package/dist/components/permissions/PermissionRequestTitle.js +0 -52
- package/dist/components/permissions/PermissionRequestTitle.js.map +0 -7
- package/dist/components/permissions/PlanApprovalRequest.js +0 -164
- package/dist/components/permissions/PlanApprovalRequest.js.map +0 -7
- package/dist/components/permissions/hooks.js +0 -23
- package/dist/components/permissions/hooks.js.map +0 -7
- package/dist/components/permissions/toolUseOptions.js +0 -46
- package/dist/components/permissions/toolUseOptions.js.map +0 -7
- package/dist/components/permissions/utils.js +0 -21
- package/dist/components/permissions/utils.js.map +0 -7
- package/dist/constants/agentTeams.js +0 -17
- package/dist/constants/agentTeams.js.map +0 -7
- package/dist/constants/claude-asterisk-ascii-art.js +0 -242
- package/dist/constants/claude-asterisk-ascii-art.js.map +0 -7
- package/dist/constants/colors.js +0 -192
- package/dist/constants/colors.js.map +0 -7
- package/dist/constants/compressionPrompts.js +0 -73
- package/dist/constants/compressionPrompts.js.map +0 -7
- package/dist/constants/figures.js +0 -6
- package/dist/constants/figures.js.map +0 -7
- package/dist/constants/formatRules.js +0 -102
- package/dist/constants/formatRules.js.map +0 -7
- package/dist/constants/macros.js +0 -12
- package/dist/constants/macros.js.map +0 -7
- package/dist/constants/modelCapabilities.js +0 -239
- package/dist/constants/modelCapabilities.js.map +0 -7
- package/dist/constants/models.js +0 -1034
- package/dist/constants/models.js.map +0 -7
- package/dist/constants/oauth.js +0 -18
- package/dist/constants/oauth.js.map +0 -7
- package/dist/constants/product.js +0 -28
- package/dist/constants/product.js.map +0 -7
- package/dist/constants/prompts/agentPrompt.js +0 -31
- package/dist/constants/prompts/agentPrompt.js.map +0 -7
- package/dist/constants/prompts/autoMemory.js +0 -39
- package/dist/constants/prompts/autoMemory.js.map +0 -7
- package/dist/constants/prompts/codeConventions.js +0 -15
- package/dist/constants/prompts/codeConventions.js.map +0 -7
- package/dist/constants/prompts/doingTasks.js +0 -34
- package/dist/constants/prompts/doingTasks.js.map +0 -7
- package/dist/constants/prompts/envInfo.js +0 -16
- package/dist/constants/prompts/envInfo.js.map +0 -7
- package/dist/constants/prompts/executingWithCare.js +0 -17
- package/dist/constants/prompts/executingWithCare.js.map +0 -7
- package/dist/constants/prompts/identity.js +0 -10
- package/dist/constants/prompts/identity.js.map +0 -7
- package/dist/constants/prompts/index.js +0 -100
- package/dist/constants/prompts/index.js.map +0 -7
- package/dist/constants/prompts/taskManagement.js +0 -19
- package/dist/constants/prompts/taskManagement.js.map +0 -7
- package/dist/constants/prompts/teamOverlays.js +0 -50
- package/dist/constants/prompts/teamOverlays.js.map +0 -7
- package/dist/constants/prompts/toneAndStyle.js +0 -37
- package/dist/constants/prompts/toneAndStyle.js.map +0 -7
- package/dist/constants/prompts/toolUsagePolicy.js +0 -23
- package/dist/constants/prompts/toolUsagePolicy.js.map +0 -7
- package/dist/constants/prompts.js +0 -13
- package/dist/constants/prompts.js.map +0 -7
- package/dist/constants/providerRegistry.js +0 -235
- package/dist/constants/providerRegistry.js.map +0 -7
- package/dist/constants/providers.js +0 -35
- package/dist/constants/providers.js.map +0 -7
- package/dist/constants/releaseNotes.js +0 -9
- package/dist/constants/releaseNotes.js.map +0 -7
- package/dist/constants/symbols.js +0 -108
- package/dist/constants/symbols.js.map +0 -7
- package/dist/constants/timing.js +0 -39
- package/dist/constants/timing.js.map +0 -7
- package/dist/constants/toolInputExamples.js +0 -88
- package/dist/constants/toolInputExamples.js.map +0 -7
- package/dist/context/PermissionContext.js +0 -110
- package/dist/context/PermissionContext.js.map +0 -7
- package/dist/context.js +0 -367
- package/dist/context.js.map +0 -7
- package/dist/core/backupHook.js +0 -29
- package/dist/core/backupHook.js.map +0 -7
- package/dist/core/backupManager.js +0 -321
- package/dist/core/backupManager.js.map +0 -7
- package/dist/core/config/defaults.js +0 -93
- package/dist/core/config/defaults.js.map +0 -7
- package/dist/core/config/index.js +0 -111
- package/dist/core/config/index.js.map +0 -7
- package/dist/core/config/loader.js +0 -221
- package/dist/core/config/loader.js.map +0 -7
- package/dist/core/config/migrations.js +0 -128
- package/dist/core/config/migrations.js.map +0 -7
- package/dist/core/config/schema.js +0 -196
- package/dist/core/config/schema.js.map +0 -7
- package/dist/core/costTracker.js +0 -131
- package/dist/core/costTracker.js.map +0 -7
- package/dist/core/gitAutoCommit.js +0 -287
- package/dist/core/gitAutoCommit.js.map +0 -7
- package/dist/core/index.js +0 -7
- package/dist/core/index.js.map +0 -7
- package/dist/core/operationTracker.js +0 -212
- package/dist/core/operationTracker.js.map +0 -7
- package/dist/core/permissions/auditLog.js +0 -204
- package/dist/core/permissions/auditLog.js.map +0 -7
- package/dist/core/permissions/engine/index.js +0 -3
- package/dist/core/permissions/engine/index.js.map +0 -7
- package/dist/core/permissions/engine/permissionEngine.js +0 -106
- package/dist/core/permissions/engine/permissionEngine.js.map +0 -7
- package/dist/core/permissions/engine/types.js +0 -1
- package/dist/core/permissions/engine/types.js.map +0 -7
- package/dist/core/permissions/index.js +0 -84
- package/dist/core/permissions/index.js.map +0 -7
- package/dist/core/permissions/ruleEngine.js +0 -259
- package/dist/core/permissions/ruleEngine.js.map +0 -7
- package/dist/core/permissions/rules/allowedToolsRule.js +0 -62
- package/dist/core/permissions/rules/allowedToolsRule.js.map +0 -7
- package/dist/core/permissions/rules/autoEscalationRule.js +0 -296
- package/dist/core/permissions/rules/autoEscalationRule.js.map +0 -7
- package/dist/core/permissions/rules/index.js +0 -46
- package/dist/core/permissions/rules/index.js.map +0 -7
- package/dist/core/permissions/rules/planModeRule.js +0 -55
- package/dist/core/permissions/rules/planModeRule.js.map +0 -7
- package/dist/core/permissions/rules/projectBoundaryRule.js +0 -173
- package/dist/core/permissions/rules/projectBoundaryRule.js.map +0 -7
- package/dist/core/permissions/rules/safeModeRule.js +0 -65
- package/dist/core/permissions/rules/safeModeRule.js.map +0 -7
- package/dist/core/permissions/rules/sensitivePathsRule.js +0 -345
- package/dist/core/permissions/rules/sensitivePathsRule.js.map +0 -7
- package/dist/core/permissions/types.js +0 -127
- package/dist/core/permissions/types.js.map +0 -7
- package/dist/core/tokenStats.js +0 -9
- package/dist/core/tokenStats.js.map +0 -7
- package/dist/core/tokenStatsManager.js +0 -354
- package/dist/core/tokenStatsManager.js.map +0 -7
- package/dist/core/tools/executor.js +0 -143
- package/dist/core/tools/executor.js.map +0 -7
- package/dist/core/tools/index.js +0 -15
- package/dist/core/tools/index.js.map +0 -7
- package/dist/core/tools/registry.js +0 -183
- package/dist/core/tools/registry.js.map +0 -7
- package/dist/core/tools/types.js +0 -1
- package/dist/core/tools/types.js.map +0 -7
- package/dist/cost-tracker.js +0 -68
- package/dist/cost-tracker.js.map +0 -7
- package/dist/engine/AgentEngine.js +0 -902
- package/dist/engine/AgentEngine.js.map +0 -7
- package/dist/engine/EngineRegistry.js +0 -89
- package/dist/engine/EngineRegistry.js.map +0 -7
- package/dist/engine/foregroundAdapter.js +0 -191
- package/dist/engine/foregroundAdapter.js.map +0 -7
- package/dist/engine/index.js +0 -15
- package/dist/engine/index.js.map +0 -7
- package/dist/engine/types.js +0 -1
- package/dist/engine/types.js.map +0 -7
- package/dist/entrypoints/bootstrap.js +0 -56
- package/dist/entrypoints/bootstrap.js.map +0 -7
- package/dist/entrypoints/cli.js +0 -1721
- package/dist/entrypoints/cli.js.map +0 -7
- package/dist/entrypoints/mcp.js +0 -153
- package/dist/entrypoints/mcp.js.map +0 -7
- package/dist/history.js +0 -96
- package/dist/history.js.map +0 -7
- package/dist/hooks/useAgentEngine.js +0 -129
- package/dist/hooks/useAgentEngine.js.map +0 -7
- package/dist/hooks/useAgentTokenStats.js +0 -56
- package/dist/hooks/useAgentTokenStats.js.map +0 -7
- package/dist/hooks/useAgentTranscripts.js +0 -141
- package/dist/hooks/useAgentTranscripts.js.map +0 -7
- package/dist/hooks/useAnimationSync.js +0 -53
- package/dist/hooks/useAnimationSync.js.map +0 -7
- package/dist/hooks/useApiKeyVerification.js +0 -12
- package/dist/hooks/useApiKeyVerification.js.map +0 -7
- package/dist/hooks/useArrowKeyHistory.js +0 -52
- package/dist/hooks/useArrowKeyHistory.js.map +0 -7
- package/dist/hooks/useAskUser.js +0 -24
- package/dist/hooks/useAskUser.js.map +0 -7
- package/dist/hooks/useBackgroundShells.js +0 -29
- package/dist/hooks/useBackgroundShells.js.map +0 -7
- package/dist/hooks/useCanUseTool.js +0 -134
- package/dist/hooks/useCanUseTool.js.map +0 -7
- package/dist/hooks/useDeferredLoading.js +0 -67
- package/dist/hooks/useDeferredLoading.js.map +0 -7
- package/dist/hooks/useDoublePress.js +0 -31
- package/dist/hooks/useDoublePress.js.map +0 -7
- package/dist/hooks/useExitOnCtrlCD.js +0 -30
- package/dist/hooks/useExitOnCtrlCD.js.map +0 -7
- package/dist/hooks/useHistorySearch.js +0 -62
- package/dist/hooks/useHistorySearch.js.map +0 -7
- package/dist/hooks/useHookStatus.js +0 -40
- package/dist/hooks/useHookStatus.js.map +0 -7
- package/dist/hooks/useIdleNotifications.js +0 -66
- package/dist/hooks/useIdleNotifications.js.map +0 -7
- package/dist/hooks/useInterval.js +0 -18
- package/dist/hooks/useInterval.js.map +0 -7
- package/dist/hooks/useLogMessages.js +0 -41
- package/dist/hooks/useLogMessages.js.map +0 -7
- package/dist/hooks/useLogStartupTime.js +0 -10
- package/dist/hooks/useLogStartupTime.js.map +0 -7
- package/dist/hooks/useMessageGroups.js +0 -43
- package/dist/hooks/useMessageGroups.js.map +0 -7
- package/dist/hooks/useNotifyAfterTimeout.js +0 -42
- package/dist/hooks/useNotifyAfterTimeout.js.map +0 -7
- package/dist/hooks/usePermissionRequestLogging.js +0 -23
- package/dist/hooks/usePermissionRequestLogging.js.map +0 -7
- package/dist/hooks/useSessionTracking.js +0 -57
- package/dist/hooks/useSessionTracking.js.map +0 -7
- package/dist/hooks/useTeamMembers.js +0 -51
- package/dist/hooks/useTeamMembers.js.map +0 -7
- package/dist/hooks/useTerminalSize.js +0 -115
- package/dist/hooks/useTerminalSize.js.map +0 -7
- package/dist/hooks/useTextInput.js +0 -253
- package/dist/hooks/useTextInput.js.map +0 -7
- package/dist/hooks/useUnifiedCompletion.js +0 -1098
- package/dist/hooks/useUnifiedCompletion.js.map +0 -7
- package/dist/i18n/index.js +0 -109
- package/dist/i18n/index.js.map +0 -7
- package/dist/i18n/locales/en.js +0 -993
- package/dist/i18n/locales/en.js.map +0 -7
- package/dist/i18n/locales/index.js +0 -7
- package/dist/i18n/locales/index.js.map +0 -7
- package/dist/i18n/locales/zh-CN.js +0 -993
- package/dist/i18n/locales/zh-CN.js.map +0 -7
- package/dist/i18n/types.js +0 -8
- package/dist/i18n/types.js.map +0 -7
- package/dist/index.js +0 -5
- package/dist/index.js.map +0 -7
- package/dist/messages.js +0 -68
- package/dist/messages.js.map +0 -7
- package/dist/package.json +0 -4
- package/dist/permissions.js +0 -536
- package/dist/permissions.js.map +0 -7
- package/dist/query.js +0 -851
- package/dist/query.js.map +0 -7
- package/dist/screens/LogList.js +0 -55
- package/dist/screens/LogList.js.map +0 -7
- package/dist/screens/REPL.js +0 -1240
- package/dist/screens/REPL.js.map +0 -7
- package/dist/screens/ResumeConversation.js +0 -244
- package/dist/screens/ResumeConversation.js.map +0 -7
- package/dist/services/adapters/base.js +0 -29
- package/dist/services/adapters/base.js.map +0 -7
- package/dist/services/adapters/chatCompletions.js +0 -71
- package/dist/services/adapters/chatCompletions.js.map +0 -7
- package/dist/services/adapters/messageNormalizer.js +0 -354
- package/dist/services/adapters/messageNormalizer.js.map +0 -7
- package/dist/services/adapters/responsesAPI.js +0 -137
- package/dist/services/adapters/responsesAPI.js.map +0 -7
- package/dist/services/agentTeams/backends/headless.js +0 -108
- package/dist/services/agentTeams/backends/headless.js.map +0 -7
- package/dist/services/agentTeams/backends/inProcess.js +0 -102
- package/dist/services/agentTeams/backends/inProcess.js.map +0 -7
- package/dist/services/agentTeams/backends/resolver.js +0 -18
- package/dist/services/agentTeams/backends/resolver.js.map +0 -7
- package/dist/services/agentTeams/backends/tmux.js +0 -168
- package/dist/services/agentTeams/backends/tmux.js.map +0 -7
- package/dist/services/agentTeams/backends/types.js +0 -1
- package/dist/services/agentTeams/backends/types.js.map +0 -7
- package/dist/services/agentTeams/heartbeat.js +0 -88
- package/dist/services/agentTeams/heartbeat.js.map +0 -7
- package/dist/services/agentTeams/index.js +0 -75
- package/dist/services/agentTeams/index.js.map +0 -7
- package/dist/services/agentTeams/injectionChannel.js +0 -105
- package/dist/services/agentTeams/injectionChannel.js.map +0 -7
- package/dist/services/agentTeams/mailbox.js +0 -494
- package/dist/services/agentTeams/mailbox.js.map +0 -7
- package/dist/services/agentTeams/messageFormatter.js +0 -80
- package/dist/services/agentTeams/messageFormatter.js.map +0 -7
- package/dist/services/agentTeams/permissionDelegation.js +0 -71
- package/dist/services/agentTeams/permissionDelegation.js.map +0 -7
- package/dist/services/agentTeams/teamEvents.js +0 -45
- package/dist/services/agentTeams/teamEvents.js.map +0 -7
- package/dist/services/agentTeams/teamManager.js +0 -366
- package/dist/services/agentTeams/teamManager.js.map +0 -7
- package/dist/services/agentTeams/teamTaskStore.js +0 -343
- package/dist/services/agentTeams/teamTaskStore.js.map +0 -7
- package/dist/services/agentTeams/teammateSpawner.js +0 -161
- package/dist/services/agentTeams/teammateSpawner.js.map +0 -7
- package/dist/services/checkpointManager.js +0 -399
- package/dist/services/checkpointManager.js.map +0 -7
- package/dist/services/claude.js +0 -41
- package/dist/services/claude.js.map +0 -7
- package/dist/services/compressionService.js +0 -259
- package/dist/services/compressionService.js.map +0 -7
- package/dist/services/contextMonitor.js +0 -162
- package/dist/services/contextMonitor.js.map +0 -7
- package/dist/services/customCommands.js +0 -489
- package/dist/services/customCommands.js.map +0 -7
- package/dist/services/fileFreshness.js +0 -275
- package/dist/services/fileFreshness.js.map +0 -7
- package/dist/services/gpt5ConnectionTest.js +0 -263
- package/dist/services/gpt5ConnectionTest.js.map +0 -7
- package/dist/services/hookExecutor.js +0 -771
- package/dist/services/hookExecutor.js.map +0 -7
- package/dist/services/intelligentCompactor.js +0 -281
- package/dist/services/intelligentCompactor.js.map +0 -7
- package/dist/services/llm/anthropicProvider.js +0 -804
- package/dist/services/llm/anthropicProvider.js.map +0 -7
- package/dist/services/llm/dispatch.js +0 -237
- package/dist/services/llm/dispatch.js.map +0 -7
- package/dist/services/llm/index.js +0 -44
- package/dist/services/llm/index.js.map +0 -7
- package/dist/services/llm/mintoContext.js +0 -69
- package/dist/services/llm/mintoContext.js.map +0 -7
- package/dist/services/llm/openaiProvider.js +0 -601
- package/dist/services/llm/openaiProvider.js.map +0 -7
- package/dist/services/llm/types.js +0 -231
- package/dist/services/llm/types.js.map +0 -7
- package/dist/services/lspConfig.js +0 -109
- package/dist/services/lspConfig.js.map +0 -7
- package/dist/services/mainAgentCompressor.js +0 -84
- package/dist/services/mainAgentCompressor.js.map +0 -7
- package/dist/services/mcpClient.js +0 -997
- package/dist/services/mcpClient.js.map +0 -7
- package/dist/services/mcpServerApproval.js +0 -55
- package/dist/services/mcpServerApproval.js.map +0 -7
- package/dist/services/mentionProcessor.js +0 -214
- package/dist/services/mentionProcessor.js.map +0 -7
- package/dist/services/mintoAuth.js +0 -299
- package/dist/services/mintoAuth.js.map +0 -7
- package/dist/services/modelAdapterFactory.js +0 -47
- package/dist/services/modelAdapterFactory.js.map +0 -7
- package/dist/services/modelOrchestrator.js +0 -310
- package/dist/services/modelOrchestrator.js.map +0 -7
- package/dist/services/notifier.js +0 -49
- package/dist/services/notifier.js.map +0 -7
- package/dist/services/oauth.js +0 -249
- package/dist/services/oauth.js.map +0 -7
- package/dist/services/openai.js +0 -1120
- package/dist/services/openai.js.map +0 -7
- package/dist/services/outputStyles.js +0 -219
- package/dist/services/outputStyles.js.map +0 -7
- package/dist/services/plugins/index.js +0 -5
- package/dist/services/plugins/index.js.map +0 -7
- package/dist/services/plugins/lspServers.js +0 -188
- package/dist/services/plugins/lspServers.js.map +0 -7
- package/dist/services/plugins/pluginRuntime.js +0 -236
- package/dist/services/plugins/pluginRuntime.js.map +0 -7
- package/dist/services/plugins/pluginValidation.js +0 -228
- package/dist/services/plugins/pluginValidation.js.map +0 -7
- package/dist/services/plugins/skillMarketplace.js +0 -567
- package/dist/services/plugins/skillMarketplace.js.map +0 -7
- package/dist/services/responseStateManager.js +0 -102
- package/dist/services/responseStateManager.js.map +0 -7
- package/dist/services/sandbox/filesystemBoundary.js +0 -341
- package/dist/services/sandbox/filesystemBoundary.js.map +0 -7
- package/dist/services/sandbox/index.js +0 -14
- package/dist/services/sandbox/index.js.map +0 -7
- package/dist/services/sandbox/networkProxy.js +0 -293
- package/dist/services/sandbox/networkProxy.js.map +0 -7
- package/dist/services/sandbox/sandboxController.js +0 -582
- package/dist/services/sandbox/sandboxController.js.map +0 -7
- package/dist/services/sandbox/types.js +0 -50
- package/dist/services/sandbox/types.js.map +0 -7
- package/dist/services/sentry.js +0 -9
- package/dist/services/sentry.js.map +0 -7
- package/dist/services/sessionMemory.js +0 -279
- package/dist/services/sessionMemory.js.map +0 -7
- package/dist/services/sessionMemoryInjector.js +0 -77
- package/dist/services/sessionMemoryInjector.js.map +0 -7
- package/dist/services/subagentAbortManager.js +0 -95
- package/dist/services/subagentAbortManager.js.map +0 -7
- package/dist/services/subagentCompressor.js +0 -146
- package/dist/services/subagentCompressor.js.map +0 -7
- package/dist/services/systemReminder.js +0 -815
- package/dist/services/systemReminder.js.map +0 -7
- package/dist/services/taskRouter.js +0 -324
- package/dist/services/taskRouter.js.map +0 -7
- package/dist/services/taskStore.js +0 -415
- package/dist/services/taskStore.js.map +0 -7
- package/dist/services/topicDetector.js +0 -169
- package/dist/services/topicDetector.js.map +0 -7
- package/dist/services/vcr.js +0 -133
- package/dist/services/vcr.js.map +0 -7
- package/dist/tools/ArchitectTool/ArchitectTool.js +0 -126
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +0 -7
- package/dist/tools/ArchitectTool/prompt.js +0 -18
- package/dist/tools/ArchitectTool/prompt.js.map +0 -7
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -420
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +0 -7
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +0 -158
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +0 -7
- package/dist/tools/AskUserQuestionTool/index.js +0 -5
- package/dist/tools/AskUserQuestionTool/index.js.map +0 -7
- package/dist/tools/AskUserQuestionTool/prompt.js +0 -167
- package/dist/tools/AskUserQuestionTool/prompt.js.map +0 -7
- package/dist/tools/BaseTool.js +0 -72
- package/dist/tools/BaseTool.js.map +0 -7
- package/dist/tools/BashOutputTool/BashOutputTool.js +0 -120
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +0 -7
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +0 -14
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +0 -7
- package/dist/tools/BashOutputTool/prompt.js +0 -13
- package/dist/tools/BashOutputTool/prompt.js.map +0 -7
- package/dist/tools/BashTool/BashTool.js +0 -353
- package/dist/tools/BashTool/BashTool.js.map +0 -7
- package/dist/tools/BashTool/BashToolResultMessage.js +0 -24
- package/dist/tools/BashTool/BashToolResultMessage.js.map +0 -7
- package/dist/tools/BashTool/OutputLine.js +0 -84
- package/dist/tools/BashTool/OutputLine.js.map +0 -7
- package/dist/tools/BashTool/prompt.js +0 -496
- package/dist/tools/BashTool/prompt.js.map +0 -7
- package/dist/tools/BashTool/utils.js +0 -89
- package/dist/tools/BashTool/utils.js.map +0 -7
- package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js +0 -121
- package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js.map +0 -7
- package/dist/tools/EnterWorktreeTool/prompt.js +0 -22
- package/dist/tools/EnterWorktreeTool/prompt.js.map +0 -7
- package/dist/tools/FileEditTool/FileEditTool.js +0 -278
- package/dist/tools/FileEditTool/FileEditTool.js.map +0 -7
- package/dist/tools/FileEditTool/prompt.js +0 -56
- package/dist/tools/FileEditTool/prompt.js.map +0 -7
- package/dist/tools/FileEditTool/utils.js +0 -48
- package/dist/tools/FileEditTool/utils.js.map +0 -7
- package/dist/tools/FileReadTool/FileReadTool.js +0 -427
- package/dist/tools/FileReadTool/FileReadTool.js.map +0 -7
- package/dist/tools/FileReadTool/prompt.js +0 -24
- package/dist/tools/FileReadTool/prompt.js.map +0 -7
- package/dist/tools/FileWriteTool/FileWriteTool.js +0 -211
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +0 -7
- package/dist/tools/FileWriteTool/prompt.js +0 -21
- package/dist/tools/FileWriteTool/prompt.js.map +0 -7
- package/dist/tools/GlobTool/GlobTool.js +0 -100
- package/dist/tools/GlobTool/GlobTool.js.map +0 -7
- package/dist/tools/GlobTool/prompt.js +0 -23
- package/dist/tools/GlobTool/prompt.js.map +0 -7
- package/dist/tools/GrepTool/GrepTool.js +0 -417
- package/dist/tools/GrepTool/GrepTool.js.map +0 -7
- package/dist/tools/GrepTool/prompt.js +0 -22
- package/dist/tools/GrepTool/prompt.js.map +0 -7
- package/dist/tools/KillShellTool/KillShellTool.js +0 -92
- package/dist/tools/KillShellTool/KillShellTool.js.map +0 -7
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js +0 -14
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +0 -7
- package/dist/tools/KillShellTool/prompt.js +0 -12
- package/dist/tools/KillShellTool/prompt.js.map +0 -7
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +0 -109
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +0 -7
- package/dist/tools/ListMcpResourcesTool/prompt.js +0 -19
- package/dist/tools/ListMcpResourcesTool/prompt.js.map +0 -7
- package/dist/tools/LspTool/LspTool.js +0 -673
- package/dist/tools/LspTool/LspTool.js.map +0 -7
- package/dist/tools/LspTool/prompt.js +0 -27
- package/dist/tools/LspTool/prompt.js.map +0 -7
- package/dist/tools/MCPSearchTool/MCPSearchTool.js +0 -172
- package/dist/tools/MCPSearchTool/MCPSearchTool.js.map +0 -7
- package/dist/tools/MCPSearchTool/prompt.js +0 -77
- package/dist/tools/MCPSearchTool/prompt.js.map +0 -7
- package/dist/tools/MCPTool/MCPTool.js +0 -97
- package/dist/tools/MCPTool/MCPTool.js.map +0 -7
- package/dist/tools/MCPTool/prompt.js +0 -7
- package/dist/tools/MCPTool/prompt.js.map +0 -7
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +0 -117
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +0 -7
- package/dist/tools/MemoryReadTool/prompt.js +0 -7
- package/dist/tools/MemoryReadTool/prompt.js.map +0 -7
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +0 -78
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +0 -7
- package/dist/tools/MemoryWriteTool/prompt.js +0 -7
- package/dist/tools/MemoryWriteTool/prompt.js.map +0 -7
- package/dist/tools/MultiEditTool/MultiEditTool.js +0 -328
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +0 -7
- package/dist/tools/MultiEditTool/prompt.js +0 -47
- package/dist/tools/MultiEditTool/prompt.js.map +0 -7
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +0 -257
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +0 -7
- package/dist/tools/NotebookEditTool/prompt.js +0 -7
- package/dist/tools/NotebookEditTool/prompt.js.map +0 -7
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +0 -218
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +0 -7
- package/dist/tools/NotebookReadTool/prompt.js +0 -7
- package/dist/tools/NotebookReadTool/prompt.js.map +0 -7
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +0 -85
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +0 -7
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +0 -164
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +0 -7
- package/dist/tools/PlanModeTool/prompt.js +0 -43
- package/dist/tools/PlanModeTool/prompt.js.map +0 -7
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +0 -130
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +0 -7
- package/dist/tools/ReadMcpResourceTool/prompt.js +0 -17
- package/dist/tools/ReadMcpResourceTool/prompt.js.map +0 -7
- package/dist/tools/SendMessageTool/SendMessageTool.js +0 -341
- package/dist/tools/SendMessageTool/SendMessageTool.js.map +0 -7
- package/dist/tools/SendMessageTool/prompt.js +0 -44
- package/dist/tools/SendMessageTool/prompt.js.map +0 -7
- package/dist/tools/SkillTool/SkillTool.js +0 -227
- package/dist/tools/SkillTool/SkillTool.js.map +0 -7
- package/dist/tools/SkillTool/prompt.js +0 -81
- package/dist/tools/SkillTool/prompt.js.map +0 -7
- package/dist/tools/SlashCommandTool/SlashCommandTool.js +0 -416
- package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +0 -7
- package/dist/tools/SlashCommandTool/prompt.js +0 -35
- package/dist/tools/SlashCommandTool/prompt.js.map +0 -7
- package/dist/tools/TaskCreateTool/TaskCreateTool.js +0 -102
- package/dist/tools/TaskCreateTool/TaskCreateTool.js.map +0 -7
- package/dist/tools/TaskCreateTool/prompt.js +0 -58
- package/dist/tools/TaskCreateTool/prompt.js.map +0 -7
- package/dist/tools/TaskGetTool/TaskGetTool.js +0 -115
- package/dist/tools/TaskGetTool/TaskGetTool.js.map +0 -7
- package/dist/tools/TaskGetTool/prompt.js +0 -28
- package/dist/tools/TaskGetTool/prompt.js.map +0 -7
- package/dist/tools/TaskListTool/TaskListTool.js +0 -102
- package/dist/tools/TaskListTool/TaskListTool.js.map +0 -7
- package/dist/tools/TaskListTool/prompt.js +0 -42
- package/dist/tools/TaskListTool/prompt.js.map +0 -7
- package/dist/tools/TaskOutputTool/TaskOutputTool.js +0 -190
- package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +0 -7
- package/dist/tools/TaskOutputTool/prompt.js +0 -16
- package/dist/tools/TaskOutputTool/prompt.js.map +0 -7
- package/dist/tools/TaskStopTool/TaskStopTool.js +0 -150
- package/dist/tools/TaskStopTool/TaskStopTool.js.map +0 -7
- package/dist/tools/TaskStopTool/prompt.js +0 -15
- package/dist/tools/TaskStopTool/prompt.js.map +0 -7
- package/dist/tools/TaskTool/TaskTool.js +0 -1525
- package/dist/tools/TaskTool/TaskTool.js.map +0 -7
- package/dist/tools/TaskTool/constants.js +0 -11
- package/dist/tools/TaskTool/constants.js.map +0 -7
- package/dist/tools/TaskTool/prompt.js +0 -121
- package/dist/tools/TaskTool/prompt.js.map +0 -7
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js +0 -148
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +0 -7
- package/dist/tools/TaskUpdateTool/prompt.js +0 -81
- package/dist/tools/TaskUpdateTool/prompt.js.map +0 -7
- package/dist/tools/TeamCreateTool/TeamCreateTool.js +0 -129
- package/dist/tools/TeamCreateTool/TeamCreateTool.js.map +0 -7
- package/dist/tools/TeamCreateTool/prompt.js +0 -58
- package/dist/tools/TeamCreateTool/prompt.js.map +0 -7
- package/dist/tools/TeamDeleteTool/TeamDeleteTool.js +0 -151
- package/dist/tools/TeamDeleteTool/TeamDeleteTool.js.map +0 -7
- package/dist/tools/TeamDeleteTool/prompt.js +0 -16
- package/dist/tools/TeamDeleteTool/prompt.js.map +0 -7
- package/dist/tools/ThinkTool/ThinkTool.js +0 -45
- package/dist/tools/ThinkTool/ThinkTool.js.map +0 -7
- package/dist/tools/ThinkTool/prompt.js +0 -16
- package/dist/tools/ThinkTool/prompt.js.map +0 -7
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +0 -232
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +0 -7
- package/dist/tools/TodoWriteTool/prompt.js +0 -87
- package/dist/tools/TodoWriteTool/prompt.js.map +0 -7
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +0 -234
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +0 -7
- package/dist/tools/URLFetcherTool/cache.js +0 -95
- package/dist/tools/URLFetcherTool/cache.js.map +0 -7
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +0 -44
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +0 -7
- package/dist/tools/URLFetcherTool/prompt.js +0 -28
- package/dist/tools/URLFetcherTool/prompt.js.map +0 -7
- package/dist/tools/WebSearchTool/WebSearchTool.js +0 -92
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +0 -7
- package/dist/tools/WebSearchTool/prompt.js +0 -24
- package/dist/tools/WebSearchTool/prompt.js.map +0 -7
- package/dist/tools/WebSearchTool/searchProviders.js +0 -58
- package/dist/tools/WebSearchTool/searchProviders.js.map +0 -7
- package/dist/tools/lsTool/lsTool.js +0 -201
- package/dist/tools/lsTool/lsTool.js.map +0 -7
- package/dist/tools/lsTool/prompt.js +0 -5
- package/dist/tools/lsTool/prompt.js.map +0 -7
- package/dist/tools.js +0 -207
- package/dist/tools.js.map +0 -7
- package/dist/types/PermissionMode.js +0 -160
- package/dist/types/PermissionMode.js.map +0 -7
- package/dist/types/RequestContext.js +0 -47
- package/dist/types/RequestContext.js.map +0 -7
- package/dist/types/agentTeams.js +0 -1
- package/dist/types/agentTeams.js.map +0 -7
- package/dist/types/askUserQuestion.js +0 -1
- package/dist/types/askUserQuestion.js.map +0 -7
- package/dist/types/common.d.js +0 -1
- package/dist/types/common.d.js.map +0 -7
- package/dist/types/conversation.js +0 -1
- package/dist/types/conversation.js.map +0 -7
- package/dist/types/core.js +0 -1
- package/dist/types/core.js.map +0 -7
- package/dist/types/hooks.js +0 -47
- package/dist/types/hooks.js.map +0 -7
- package/dist/types/interactionRound.js +0 -1
- package/dist/types/interactionRound.js.map +0 -7
- package/dist/types/logs.js +0 -1
- package/dist/types/logs.js.map +0 -7
- package/dist/types/marketplace.js +0 -107
- package/dist/types/marketplace.js.map +0 -7
- package/dist/types/messageGroup.js +0 -36
- package/dist/types/messageGroup.js.map +0 -7
- package/dist/types/modelCapabilities.js +0 -1
- package/dist/types/modelCapabilities.js.map +0 -7
- package/dist/types/notebook.js +0 -1
- package/dist/types/notebook.js.map +0 -7
- package/dist/types/plugin.js +0 -86
- package/dist/types/plugin.js.map +0 -7
- package/dist/types/subagent.js +0 -1
- package/dist/types/subagent.js.map +0 -7
- package/dist/types/thinking.js +0 -1
- package/dist/types/thinking.js.map +0 -7
- package/dist/utils/BackgroundShellManager.js +0 -378
- package/dist/utils/BackgroundShellManager.js.map +0 -7
- package/dist/utils/CircuitBreaker.js +0 -248
- package/dist/utils/CircuitBreaker.js.map +0 -7
- package/dist/utils/Cursor.js +0 -315
- package/dist/utils/Cursor.js.map +0 -7
- package/dist/utils/MessageBatchBuffer.js +0 -102
- package/dist/utils/MessageBatchBuffer.js.map +0 -7
- package/dist/utils/PersistentShell.js +0 -526
- package/dist/utils/PersistentShell.js.map +0 -7
- package/dist/utils/advancedFuzzyMatcher.js +0 -209
- package/dist/utils/advancedFuzzyMatcher.js.map +0 -7
- package/dist/utils/agentHookExecutor.js +0 -103
- package/dist/utils/agentHookExecutor.js.map +0 -7
- package/dist/utils/agentLoader.js +0 -655
- package/dist/utils/agentLoader.js.map +0 -7
- package/dist/utils/agentMemory.js +0 -134
- package/dist/utils/agentMemory.js.map +0 -7
- package/dist/utils/agentStorage.js +0 -59
- package/dist/utils/agentStorage.js.map +0 -7
- package/dist/utils/agentTranscripts.js +0 -641
- package/dist/utils/agentTranscripts.js.map +0 -7
- package/dist/utils/animationManager.js +0 -250
- package/dist/utils/animationManager.js.map +0 -7
- package/dist/utils/animationSync.js +0 -110
- package/dist/utils/animationSync.js.map +0 -7
- package/dist/utils/array.js +0 -7
- package/dist/utils/array.js.map +0 -7
- package/dist/utils/ask.js +0 -80
- package/dist/utils/ask.js.map +0 -7
- package/dist/utils/async.js +0 -167
- package/dist/utils/async.js.map +0 -7
- package/dist/utils/asyncFile.js +0 -215
- package/dist/utils/asyncFile.js.map +0 -7
- package/dist/utils/atomicWrite.js +0 -23
- package/dist/utils/atomicWrite.js.map +0 -7
- package/dist/utils/auth.js +0 -11
- package/dist/utils/auth.js.map +0 -7
- package/dist/utils/autoCompactCore.js +0 -203
- package/dist/utils/autoCompactCore.js.map +0 -7
- package/dist/utils/autoMemoryPaths.js +0 -89
- package/dist/utils/autoMemoryPaths.js.map +0 -7
- package/dist/utils/autoUpdater.js +0 -113
- package/dist/utils/autoUpdater.js.map +0 -7
- package/dist/utils/backgroundAgentManager.js +0 -231
- package/dist/utils/backgroundAgentManager.js.map +0 -7
- package/dist/utils/browser.js +0 -15
- package/dist/utils/browser.js.map +0 -7
- package/dist/utils/claudeCodeSync.js +0 -439
- package/dist/utils/claudeCodeSync.js.map +0 -7
- package/dist/utils/cleanup.js +0 -54
- package/dist/utils/cleanup.js.map +0 -7
- package/dist/utils/commands.js +0 -219
- package/dist/utils/commands.js.map +0 -7
- package/dist/utils/commonUnixCommands.js +0 -689
- package/dist/utils/commonUnixCommands.js.map +0 -7
- package/dist/utils/compressionMode.js +0 -47
- package/dist/utils/compressionMode.js.map +0 -7
- package/dist/utils/config.js +0 -716
- package/dist/utils/config.js.map +0 -7
- package/dist/utils/configPaths.js +0 -199
- package/dist/utils/configPaths.js.map +0 -7
- package/dist/utils/configSchema.js +0 -232
- package/dist/utils/configSchema.js.map +0 -7
- package/dist/utils/conversationRecovery.js +0 -54
- package/dist/utils/conversationRecovery.js.map +0 -7
- package/dist/utils/credentials/CredentialStore.js +0 -1
- package/dist/utils/credentials/CredentialStore.js.map +0 -7
- package/dist/utils/credentials/EncryptedFileStore.js +0 -157
- package/dist/utils/credentials/EncryptedFileStore.js.map +0 -7
- package/dist/utils/credentials/index.js +0 -51
- package/dist/utils/credentials/index.js.map +0 -7
- package/dist/utils/credentials/migration.js +0 -82
- package/dist/utils/credentials/migration.js.map +0 -7
- package/dist/utils/debugLogger.js +0 -889
- package/dist/utils/debugLogger.js.map +0 -7
- package/dist/utils/diff.js +0 -32
- package/dist/utils/diff.js.map +0 -7
- package/dist/utils/dualPath.js +0 -24
- package/dist/utils/dualPath.js.map +0 -7
- package/dist/utils/env.js +0 -45
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/envConfig.js +0 -116
- package/dist/utils/envConfig.js.map +0 -7
- package/dist/utils/errorHandling.js +0 -89
- package/dist/utils/errorHandling.js.map +0 -7
- package/dist/utils/errors.js +0 -23
- package/dist/utils/errors.js.map +0 -7
- package/dist/utils/execFileNoThrow.js +0 -45
- package/dist/utils/execFileNoThrow.js.map +0 -7
- package/dist/utils/exit.js +0 -132
- package/dist/utils/exit.js.map +0 -7
- package/dist/utils/expertChatStorage.js +0 -78
- package/dist/utils/expertChatStorage.js.map +0 -7
- package/dist/utils/externalEditor.js +0 -155
- package/dist/utils/externalEditor.js.map +0 -7
- package/dist/utils/file.js +0 -282
- package/dist/utils/file.js.map +0 -7
- package/dist/utils/fileLock.js +0 -67
- package/dist/utils/fileLock.js.map +0 -7
- package/dist/utils/fileRecoveryCore.js +0 -41
- package/dist/utils/fileRecoveryCore.js.map +0 -7
- package/dist/utils/format.js +0 -119
- package/dist/utils/format.js.map +0 -7
- package/dist/utils/fuzzyMatcher.js +0 -258
- package/dist/utils/fuzzyMatcher.js.map +0 -7
- package/dist/utils/generators.js +0 -116
- package/dist/utils/generators.js.map +0 -7
- package/dist/utils/git.js +0 -83
- package/dist/utils/git.js.map +0 -7
- package/dist/utils/globalErrorHandler.js +0 -58
- package/dist/utils/globalErrorHandler.js.map +0 -7
- package/dist/utils/gpt5.js +0 -146
- package/dist/utils/gpt5.js.map +0 -7
- package/dist/utils/groupHandlers/index.js +0 -8
- package/dist/utils/groupHandlers/index.js.map +0 -7
- package/dist/utils/groupHandlers/parallelTasksHandler.js +0 -142
- package/dist/utils/groupHandlers/parallelTasksHandler.js.map +0 -7
- package/dist/utils/groupHandlers/taskHandler.js +0 -104
- package/dist/utils/groupHandlers/taskHandler.js.map +0 -7
- package/dist/utils/groupHandlers/types.js +0 -1
- package/dist/utils/groupHandlers/types.js.map +0 -7
- package/dist/utils/historyManager.js +0 -234
- package/dist/utils/historyManager.js.map +0 -7
- package/dist/utils/hookManager.js +0 -540
- package/dist/utils/hookManager.js.map +0 -7
- package/dist/utils/http.js +0 -7
- package/dist/utils/http.js.map +0 -7
- package/dist/utils/imagePaste.js +0 -29
- package/dist/utils/imagePaste.js.map +0 -7
- package/dist/utils/json.js +0 -16
- package/dist/utils/json.js.map +0 -7
- package/dist/utils/log.js +0 -333
- package/dist/utils/log.js.map +0 -7
- package/dist/utils/logRotation.js +0 -224
- package/dist/utils/logRotation.js.map +0 -7
- package/dist/utils/markdown.js +0 -464
- package/dist/utils/markdown.js.map +0 -7
- package/dist/utils/marketplaceManager.js +0 -545
- package/dist/utils/marketplaceManager.js.map +0 -7
- package/dist/utils/memSafety.js +0 -264
- package/dist/utils/memSafety.js.map +0 -7
- package/dist/utils/memoizeWithTTL.js +0 -25
- package/dist/utils/memoizeWithTTL.js.map +0 -7
- package/dist/utils/messageContextManager.js +0 -208
- package/dist/utils/messageContextManager.js.map +0 -7
- package/dist/utils/messageGroupManager.js +0 -274
- package/dist/utils/messageGroupManager.js.map +0 -7
- package/dist/utils/messages.js +0 -725
- package/dist/utils/messages.js.map +0 -7
- package/dist/utils/migration/index.js +0 -37
- package/dist/utils/migration/index.js.map +0 -7
- package/dist/utils/migration/migrateHistory.js +0 -273
- package/dist/utils/migration/migrateHistory.js.map +0 -7
- package/dist/utils/migration/migrateTodos.js +0 -323
- package/dist/utils/migration/migrateTodos.js.map +0 -7
- package/dist/utils/model.js +0 -846
- package/dist/utils/model.js.map +0 -7
- package/dist/utils/pasteCache.js +0 -313
- package/dist/utils/pasteCache.js.map +0 -7
- package/dist/utils/permissions/filesystem.js +0 -236
- package/dist/utils/permissions/filesystem.js.map +0 -7
- package/dist/utils/plan/planMode.js +0 -143
- package/dist/utils/plan/planMode.js.map +0 -7
- package/dist/utils/pluginInstaller.js +0 -518
- package/dist/utils/pluginInstaller.js.map +0 -7
- package/dist/utils/pluginLoader.js +0 -819
- package/dist/utils/pluginLoader.js.map +0 -7
- package/dist/utils/pluginRegistry.js +0 -111
- package/dist/utils/pluginRegistry.js.map +0 -7
- package/dist/utils/pluginValidator.js +0 -798
- package/dist/utils/pluginValidator.js.map +0 -7
- package/dist/utils/ptyCompat.js +0 -125
- package/dist/utils/ptyCompat.js.map +0 -7
- package/dist/utils/replStateMachine.js +0 -145
- package/dist/utils/replStateMachine.js.map +0 -7
- package/dist/utils/repoFetcher.js +0 -110
- package/dist/utils/repoFetcher.js.map +0 -7
- package/dist/utils/ripgrep.js +0 -236
- package/dist/utils/ripgrep.js.map +0 -7
- package/dist/utils/roundConverter.js +0 -262
- package/dist/utils/roundConverter.js.map +0 -7
- package/dist/utils/safeFetch.js +0 -45
- package/dist/utils/safeFetch.js.map +0 -7
- package/dist/utils/safePath.js +0 -132
- package/dist/utils/safePath.js.map +0 -7
- package/dist/utils/sanitizeInput.js +0 -32
- package/dist/utils/sanitizeInput.js.map +0 -7
- package/dist/utils/secureFile.js +0 -512
- package/dist/utils/secureFile.js.map +0 -7
- package/dist/utils/secureKeyStorage.js +0 -341
- package/dist/utils/secureKeyStorage.js.map +0 -7
- package/dist/utils/sensitiveFiles.js +0 -125
- package/dist/utils/sensitiveFiles.js.map +0 -7
- package/dist/utils/session/sessionPlugins.js +0 -67
- package/dist/utils/session/sessionPlugins.js.map +0 -7
- package/dist/utils/sessionIndex.js +0 -192
- package/dist/utils/sessionIndex.js.map +0 -7
- package/dist/utils/sessionState.js +0 -22
- package/dist/utils/sessionState.js.map +0 -7
- package/dist/utils/sessionTracker.js +0 -170
- package/dist/utils/sessionTracker.js.map +0 -7
- package/dist/utils/simpleMode.js +0 -7
- package/dist/utils/simpleMode.js.map +0 -7
- package/dist/utils/skillLoader.js +0 -230
- package/dist/utils/skillLoader.js.map +0 -7
- package/dist/utils/state.js +0 -24
- package/dist/utils/state.js.map +0 -7
- package/dist/utils/stats.js +0 -417
- package/dist/utils/stats.js.map +0 -7
- package/dist/utils/streamingState.js +0 -62
- package/dist/utils/streamingState.js.map +0 -7
- package/dist/utils/stringSubstitution.js +0 -106
- package/dist/utils/stringSubstitution.js.map +0 -7
- package/dist/utils/style.js +0 -34
- package/dist/utils/style.js.map +0 -7
- package/dist/utils/taskDisplayUtils.js +0 -258
- package/dist/utils/taskDisplayUtils.js.map +0 -7
- package/dist/utils/teamConfig.js +0 -624
- package/dist/utils/teamConfig.js.map +0 -7
- package/dist/utils/terminal.js +0 -59
- package/dist/utils/terminal.js.map +0 -7
- package/dist/utils/theme.js +0 -134
- package/dist/utils/theme.js.map +0 -7
- package/dist/utils/thinking.js +0 -63
- package/dist/utils/thinking.js.map +0 -7
- package/dist/utils/todoChangeCalculator.js +0 -64
- package/dist/utils/todoChangeCalculator.js.map +0 -7
- package/dist/utils/todoStorage.js +0 -413
- package/dist/utils/todoStorage.js.map +0 -7
- package/dist/utils/tokenProgress.js +0 -55
- package/dist/utils/tokenProgress.js.map +0 -7
- package/dist/utils/tokens.js +0 -30
- package/dist/utils/tokens.js.map +0 -7
- package/dist/utils/toolExecutionController.js +0 -109
- package/dist/utils/toolExecutionController.js.map +0 -7
- package/dist/utils/toolRiskClassification.js +0 -210
- package/dist/utils/toolRiskClassification.js.map +0 -7
- package/dist/utils/toolTimeout.js +0 -136
- package/dist/utils/toolTimeout.js.map +0 -7
- package/dist/utils/tooling/safeRender.js +0 -115
- package/dist/utils/tooling/safeRender.js.map +0 -7
- package/dist/utils/tooling/toolError.js +0 -12
- package/dist/utils/tooling/toolError.js.map +0 -7
- package/dist/utils/unaryLogging.js +0 -6
- package/dist/utils/unaryLogging.js.map +0 -7
- package/dist/utils/user.js +0 -40
- package/dist/utils/user.js.map +0 -7
- package/dist/utils/userFriendlyError.js +0 -346
- package/dist/utils/userFriendlyError.js.map +0 -7
- package/dist/utils/validate.js +0 -132
- package/dist/utils/validate.js.map +0 -7
- package/dist/version.js +0 -7
- package/dist/version.js.map +0 -7
- package/dist/yoga.wasm +0 -0
- /package/{dist/utils/vendor → vendor}/ripgrep/arm64-darwin/rg +0 -0
|
@@ -1,2103 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect, useRef } from "react";
|
|
2
|
-
import { Text, useInput } from "ink";
|
|
3
|
-
import { getModelManager } from "../../utils/model.js";
|
|
4
|
-
import { useExitOnCtrlCD } from "../../hooks/useExitOnCtrlCD.js";
|
|
5
|
-
import {
|
|
6
|
-
getGlobalConfig,
|
|
7
|
-
setAllPointersToModel,
|
|
8
|
-
setModelPointer,
|
|
9
|
-
resolveApiKey
|
|
10
|
-
} from "../../utils/config.js";
|
|
11
|
-
import models, { providers } from "../../constants/models.js";
|
|
12
|
-
import OpenAI from "openai";
|
|
13
|
-
import { verifyApiKey } from "../../services/claude.js";
|
|
14
|
-
import { fetchCustomModels } from "../../services/openai.js";
|
|
15
|
-
import {
|
|
16
|
-
testGPT5Connection,
|
|
17
|
-
validateGPT5Config
|
|
18
|
-
} from "../../services/gpt5ConnectionTest.js";
|
|
19
|
-
import { SEMANTIC_COLORS } from "../../constants/colors.js";
|
|
20
|
-
import { isOpenAICompatibleProvider } from "../../constants/providers.js";
|
|
21
|
-
import { getEffectiveCapabilities } from "../../constants/providerRegistry.js";
|
|
22
|
-
import { t } from "../../i18n/index.js";
|
|
23
|
-
import { SimpleSelector } from "../SimpleSelector/SimpleSelector.js";
|
|
24
|
-
import { InfoPanel } from "../InfoPanel/InfoPanel.js";
|
|
25
|
-
import { BrandTextInput } from "./BrandTextInput.js";
|
|
26
|
-
import {
|
|
27
|
-
CONTEXT_LENGTH_OPTIONS,
|
|
28
|
-
DEFAULT_CONTEXT_LENGTH,
|
|
29
|
-
MAX_TOKENS_OPTIONS,
|
|
30
|
-
DEFAULT_MAX_TOKENS
|
|
31
|
-
} from "./constants.js";
|
|
32
|
-
function ModelSelector({
|
|
33
|
-
onDone: onDoneProp,
|
|
34
|
-
abortController,
|
|
35
|
-
targetPointer,
|
|
36
|
-
isOnboarding = false,
|
|
37
|
-
onCancel,
|
|
38
|
-
skipModelType = false,
|
|
39
|
-
editingModel
|
|
40
|
-
}) {
|
|
41
|
-
const config = getGlobalConfig();
|
|
42
|
-
const onDone = onDoneProp;
|
|
43
|
-
useExitOnCtrlCD(() => process.exit(0));
|
|
44
|
-
const isEditMode = !!editingModel;
|
|
45
|
-
const [screenStack, setScreenStack] = useState([isEditMode ? "testAndSave" : "provider"]);
|
|
46
|
-
const currentScreen = screenStack[screenStack.length - 1];
|
|
47
|
-
const currentScreenRef = useRef(currentScreen);
|
|
48
|
-
currentScreenRef.current = currentScreen;
|
|
49
|
-
const pendingTimerRef = useRef(null);
|
|
50
|
-
const navigateTo = (screen) => {
|
|
51
|
-
setScreenStack((prev) => [...prev, screen]);
|
|
52
|
-
};
|
|
53
|
-
const navigateToIfStillOn = (expectedScreen, targetScreen) => {
|
|
54
|
-
if (currentScreenRef.current === expectedScreen) {
|
|
55
|
-
navigateTo(targetScreen);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
const goBack = () => {
|
|
59
|
-
if (screenStack.length > 1) {
|
|
60
|
-
setScreenStack((prev) => prev.slice(0, -1));
|
|
61
|
-
} else {
|
|
62
|
-
onDone();
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
const [selectedProvider, setSelectedProvider] = useState(
|
|
66
|
-
editingModel?.provider ?? config.primaryProvider ?? "anthropic"
|
|
67
|
-
);
|
|
68
|
-
const [anthropicProviderType, setAnthropicProviderType] = useState("official");
|
|
69
|
-
const [selectedModel, setSelectedModel] = useState(
|
|
70
|
-
editingModel?.modelName ?? ""
|
|
71
|
-
);
|
|
72
|
-
const [apiKey, setApiKey] = useState(editingModel?.apiKey ?? "");
|
|
73
|
-
const [maxTokens, setMaxTokens] = useState(
|
|
74
|
-
editingModel?.maxTokens?.toString() ?? config.maxTokens?.toString() ?? DEFAULT_MAX_TOKENS.toString()
|
|
75
|
-
);
|
|
76
|
-
const [maxTokensMode, setMaxTokensMode] = useState(
|
|
77
|
-
"preset"
|
|
78
|
-
);
|
|
79
|
-
const [selectedMaxTokensPreset, setSelectedMaxTokensPreset] = useState(config.maxTokens || DEFAULT_MAX_TOKENS);
|
|
80
|
-
const [reasoningEffort, setReasoningEffort] = useState(
|
|
81
|
-
editingModel?.reasoningEffort ?? "medium"
|
|
82
|
-
);
|
|
83
|
-
const [supportsReasoningEffort, setSupportsReasoningEffort] = useState(!!editingModel?.reasoningEffort);
|
|
84
|
-
const [contextLength, setContextLength] = useState(
|
|
85
|
-
editingModel?.contextLength ?? DEFAULT_CONTEXT_LENGTH
|
|
86
|
-
);
|
|
87
|
-
const [activeFieldIndex, setActiveFieldIndex] = useState(0);
|
|
88
|
-
const [maxTokensCursorOffset, setMaxTokensCursorOffset] = useState(0);
|
|
89
|
-
const [availableModels, setAvailableModels] = useState([]);
|
|
90
|
-
const [isLoadingModels, setIsLoadingModels] = useState(false);
|
|
91
|
-
const [modelLoadError, setModelLoadError] = useState(null);
|
|
92
|
-
const [modelSearchQuery, setModelSearchQuery] = useState("");
|
|
93
|
-
const [modelSearchCursorOffset, setModelSearchCursorOffset] = useState(0);
|
|
94
|
-
const [cursorOffset, setCursorOffset] = useState(0);
|
|
95
|
-
const [apiKeyEdited, setApiKeyEdited] = useState(isEditMode);
|
|
96
|
-
const [originalEncryptedRef, setOriginalEncryptedRef] = useState(editingModel?.apiKey?.startsWith("encrypted:") ? editingModel.apiKey : null);
|
|
97
|
-
const [apiKeyUserModified, setApiKeyUserModified] = useState(false);
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
if (editingModel?.apiKey?.startsWith("encrypted:")) {
|
|
100
|
-
resolveApiKey(editingModel).then((resolved) => {
|
|
101
|
-
if (resolved) setApiKey(resolved);
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}, []);
|
|
105
|
-
const [fetchRetryCount, setFetchRetryCount] = useState(0);
|
|
106
|
-
const [isRetrying, setIsRetrying] = useState(false);
|
|
107
|
-
const [isTestingConnection, setIsTestingConnection] = useState(false);
|
|
108
|
-
const [connectionTestResult, setConnectionTestResult] = useState(null);
|
|
109
|
-
const [validationError, setValidationError] = useState(null);
|
|
110
|
-
const [isManualModelEntry, setIsManualModelEntry] = useState(false);
|
|
111
|
-
const [resourceName, setResourceName] = useState("");
|
|
112
|
-
const [resourceNameCursorOffset, setResourceNameCursorOffset] = useState(0);
|
|
113
|
-
const [customModelName, setCustomModelName] = useState("");
|
|
114
|
-
const [customModelNameCursorOffset, setCustomModelNameCursorOffset] = useState(0);
|
|
115
|
-
const [ollamaBaseUrl, setOllamaBaseUrl] = useState(
|
|
116
|
-
"http://localhost:11434/v1"
|
|
117
|
-
);
|
|
118
|
-
const [ollamaBaseUrlCursorOffset, setOllamaBaseUrlCursorOffset] = useState(0);
|
|
119
|
-
const [customBaseUrl, setCustomBaseUrl] = useState(
|
|
120
|
-
editingModel?.provider === "custom-openai" ? editingModel?.baseURL ?? "" : ""
|
|
121
|
-
);
|
|
122
|
-
const [customBaseUrlCursorOffset, setCustomBaseUrlCursorOffset] = useState(0);
|
|
123
|
-
const [providerBaseUrl, setProviderBaseUrl] = useState(
|
|
124
|
-
editingModel?.baseURL ?? ""
|
|
125
|
-
);
|
|
126
|
-
const [providerBaseUrlCursorOffset, setProviderBaseUrlCursorOffset] = useState(0);
|
|
127
|
-
const reasoningEffortOptions = [
|
|
128
|
-
{ label: "Low - Faster responses, less thorough reasoning", value: "low" },
|
|
129
|
-
{ label: "Medium - Balanced speed and reasoning depth", value: "medium" },
|
|
130
|
-
{
|
|
131
|
-
label: "High - Slower responses, more thorough reasoning",
|
|
132
|
-
value: "high"
|
|
133
|
-
}
|
|
134
|
-
];
|
|
135
|
-
const availableProviders = Object.keys(providers).filter(
|
|
136
|
-
(provider) => provider !== "bigdream" && provider !== "opendev"
|
|
137
|
-
);
|
|
138
|
-
const providerOptions = availableProviders.map((provider) => {
|
|
139
|
-
const modelCount = models[provider]?.length || 0;
|
|
140
|
-
const label = getProviderLabel(provider, modelCount);
|
|
141
|
-
return {
|
|
142
|
-
label,
|
|
143
|
-
value: provider
|
|
144
|
-
};
|
|
145
|
-
});
|
|
146
|
-
useEffect(() => {
|
|
147
|
-
if (!apiKeyEdited && selectedProvider) {
|
|
148
|
-
if (process.env[selectedProvider.toUpperCase() + "_API_KEY"]) {
|
|
149
|
-
setApiKey(
|
|
150
|
-
process.env[selectedProvider.toUpperCase() + "_API_KEY"]
|
|
151
|
-
);
|
|
152
|
-
} else {
|
|
153
|
-
setApiKey("");
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}, [selectedProvider, apiKey, apiKeyEdited]);
|
|
157
|
-
useEffect(() => {
|
|
158
|
-
if (currentScreen === "contextLength" && !CONTEXT_LENGTH_OPTIONS.find((opt) => opt.value === contextLength)) {
|
|
159
|
-
setContextLength(DEFAULT_CONTEXT_LENGTH);
|
|
160
|
-
}
|
|
161
|
-
}, [currentScreen, contextLength]);
|
|
162
|
-
useEffect(() => {
|
|
163
|
-
if (currentScreen === "testAndSave" && !isEditMode && !isTestingConnection && !connectionTestResult) {
|
|
164
|
-
handleConnectionTest();
|
|
165
|
-
}
|
|
166
|
-
}, [currentScreen]);
|
|
167
|
-
const ourModelNames = new Set(
|
|
168
|
-
(models[selectedProvider] || []).map(
|
|
169
|
-
(model) => model.model
|
|
170
|
-
)
|
|
171
|
-
);
|
|
172
|
-
const filteredModels = modelSearchQuery ? availableModels.filter(
|
|
173
|
-
(model) => model.model?.toLowerCase().includes(modelSearchQuery.toLowerCase())
|
|
174
|
-
) : availableModels;
|
|
175
|
-
const sortModelsByPriority = (models2) => {
|
|
176
|
-
const priorityKeywords = [
|
|
177
|
-
"claude",
|
|
178
|
-
"kimi",
|
|
179
|
-
"deepseek",
|
|
180
|
-
"minimax",
|
|
181
|
-
"o3",
|
|
182
|
-
"gpt",
|
|
183
|
-
"qwen"
|
|
184
|
-
];
|
|
185
|
-
return models2.sort((a, b) => {
|
|
186
|
-
const aModelLower = a.model?.toLowerCase() || "";
|
|
187
|
-
const bModelLower = b.model?.toLowerCase() || "";
|
|
188
|
-
const aHasPriority = priorityKeywords.some(
|
|
189
|
-
(keyword) => aModelLower.includes(keyword)
|
|
190
|
-
);
|
|
191
|
-
const bHasPriority = priorityKeywords.some(
|
|
192
|
-
(keyword) => bModelLower.includes(keyword)
|
|
193
|
-
);
|
|
194
|
-
if (aHasPriority && !bHasPriority) return -1;
|
|
195
|
-
if (!aHasPriority && bHasPriority) return 1;
|
|
196
|
-
return a.model.localeCompare(b.model);
|
|
197
|
-
});
|
|
198
|
-
};
|
|
199
|
-
const sortedFilteredModels = sortModelsByPriority(filteredModels);
|
|
200
|
-
const modelOptions = sortedFilteredModels.map((model) => {
|
|
201
|
-
const isInOurModels = ourModelNames.has(model.model);
|
|
202
|
-
return {
|
|
203
|
-
label: `${model.model}${getModelDetails(model)}`,
|
|
204
|
-
value: model.model
|
|
205
|
-
};
|
|
206
|
-
});
|
|
207
|
-
function getModelDetails(model) {
|
|
208
|
-
const details = [];
|
|
209
|
-
if (model.context_length) {
|
|
210
|
-
details.push(`${formatNumber(model.context_length)} tokens`);
|
|
211
|
-
} else if (model.max_tokens) {
|
|
212
|
-
details.push(`${formatNumber(model.max_tokens)} tokens`);
|
|
213
|
-
}
|
|
214
|
-
if (model.supports_vision) {
|
|
215
|
-
details.push("vision");
|
|
216
|
-
}
|
|
217
|
-
if (model.supports_function_calling) {
|
|
218
|
-
details.push("tools");
|
|
219
|
-
}
|
|
220
|
-
return details.length > 0 ? ` (${details.join(", ")})` : "";
|
|
221
|
-
}
|
|
222
|
-
function formatNumber(num) {
|
|
223
|
-
if (num >= 1e6) {
|
|
224
|
-
return `${(num / 1e6).toFixed(1)}M`;
|
|
225
|
-
} else if (num >= 1e3) {
|
|
226
|
-
return `${(num / 1e3).toFixed(0)}K`;
|
|
227
|
-
}
|
|
228
|
-
return num.toString();
|
|
229
|
-
}
|
|
230
|
-
function getProviderLabel(provider, modelCount) {
|
|
231
|
-
if (providers[provider]) {
|
|
232
|
-
return `${providers[provider].name} ${providers[provider].status === "wip" ? "(WIP)" : ""} (${modelCount} models)`;
|
|
233
|
-
}
|
|
234
|
-
return `${provider}`;
|
|
235
|
-
}
|
|
236
|
-
function handleProviderSelection(provider) {
|
|
237
|
-
const providerType = provider;
|
|
238
|
-
setSelectedProvider(providerType);
|
|
239
|
-
if (provider === "custom") {
|
|
240
|
-
saveConfiguration(providerType, selectedModel || "");
|
|
241
|
-
onDone();
|
|
242
|
-
} else if (provider === "anthropic") {
|
|
243
|
-
navigateTo("anthropicSubMenu");
|
|
244
|
-
} else {
|
|
245
|
-
const defaultBaseUrl = providers[providerType]?.baseURL || "";
|
|
246
|
-
setProviderBaseUrl(defaultBaseUrl);
|
|
247
|
-
navigateTo("baseUrl");
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
async function fetchAnthropicModels2(baseURL, apiKey2) {
|
|
251
|
-
try {
|
|
252
|
-
const response = await fetch(`${baseURL}/v1/models`, {
|
|
253
|
-
method: "GET",
|
|
254
|
-
headers: {
|
|
255
|
-
"x-api-key": apiKey2,
|
|
256
|
-
"anthropic-version": "2023-06-01",
|
|
257
|
-
"Content-Type": "application/json",
|
|
258
|
-
Authorization: `Bearer ${apiKey2}`
|
|
259
|
-
},
|
|
260
|
-
signal: AbortSignal.timeout(3e4)
|
|
261
|
-
});
|
|
262
|
-
if (!response.ok) {
|
|
263
|
-
if (response.status === 401) {
|
|
264
|
-
throw new Error(
|
|
265
|
-
"Invalid API key. Please check your API key and try again."
|
|
266
|
-
);
|
|
267
|
-
} else if (response.status === 403) {
|
|
268
|
-
throw new Error("API key does not have permission to access models.");
|
|
269
|
-
} else if (response.status === 404) {
|
|
270
|
-
throw new Error(
|
|
271
|
-
"API endpoint not found. This provider may not support model listing."
|
|
272
|
-
);
|
|
273
|
-
} else if (response.status === 429) {
|
|
274
|
-
throw new Error(
|
|
275
|
-
"Too many requests. Please wait a moment and try again."
|
|
276
|
-
);
|
|
277
|
-
} else if (response.status >= 500) {
|
|
278
|
-
throw new Error(
|
|
279
|
-
"API service is temporarily unavailable. Please try again later."
|
|
280
|
-
);
|
|
281
|
-
} else {
|
|
282
|
-
throw new Error(`Unable to connect to API (${response.status}).`);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
const data = await response.json();
|
|
286
|
-
let models2 = [];
|
|
287
|
-
if (data && data.data && Array.isArray(data.data)) {
|
|
288
|
-
models2 = data.data;
|
|
289
|
-
} else if (Array.isArray(data)) {
|
|
290
|
-
models2 = data;
|
|
291
|
-
} else if (data && data.models && Array.isArray(data.models)) {
|
|
292
|
-
models2 = data.models;
|
|
293
|
-
} else {
|
|
294
|
-
throw new Error("API returned unexpected response format.");
|
|
295
|
-
}
|
|
296
|
-
return models2;
|
|
297
|
-
} catch (error) {
|
|
298
|
-
if (error instanceof Error && (error.message.includes("API key") || error.message.includes("API endpoint") || error.message.includes("API service") || error.message.includes("response format"))) {
|
|
299
|
-
throw error;
|
|
300
|
-
}
|
|
301
|
-
if (error instanceof Error && error.message.includes("fetch")) {
|
|
302
|
-
throw new Error(
|
|
303
|
-
"Unable to connect to the API. Please check the base URL and your internet connection."
|
|
304
|
-
);
|
|
305
|
-
}
|
|
306
|
-
throw new Error(
|
|
307
|
-
"Failed to fetch models from API. Please check your configuration and try again."
|
|
308
|
-
);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
async function fetchAnthropicCompatibleModelsWithFallback(baseURL, provider, apiKeyUrl) {
|
|
312
|
-
let lastError = null;
|
|
313
|
-
try {
|
|
314
|
-
const models2 = await fetchAnthropicModels2(baseURL, apiKey);
|
|
315
|
-
return models2.map((model) => ({
|
|
316
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
317
|
-
provider,
|
|
318
|
-
max_tokens: model.max_tokens || 8192,
|
|
319
|
-
supports_vision: model.supports_vision || true,
|
|
320
|
-
supports_function_calling: model.supports_function_calling || true,
|
|
321
|
-
supports_reasoning_effort: false
|
|
322
|
-
}));
|
|
323
|
-
} catch (error) {
|
|
324
|
-
lastError = error;
|
|
325
|
-
}
|
|
326
|
-
try {
|
|
327
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
328
|
-
return models2.map((model) => ({
|
|
329
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
330
|
-
provider,
|
|
331
|
-
max_tokens: model.max_tokens || 8192,
|
|
332
|
-
supports_vision: model.supports_vision || false,
|
|
333
|
-
supports_function_calling: model.supports_function_calling || true,
|
|
334
|
-
supports_reasoning_effort: false
|
|
335
|
-
}));
|
|
336
|
-
} catch (error) {
|
|
337
|
-
lastError = error;
|
|
338
|
-
}
|
|
339
|
-
let errorMessage = `Failed to fetch ${provider} models using both Anthropic and OpenAI API formats`;
|
|
340
|
-
if (lastError) {
|
|
341
|
-
errorMessage = lastError.message;
|
|
342
|
-
}
|
|
343
|
-
if (errorMessage.includes("API key")) {
|
|
344
|
-
errorMessage += `
|
|
345
|
-
|
|
346
|
-
\u{1F4A1} Tip: Get your API key from ${apiKeyUrl}`;
|
|
347
|
-
} else if (errorMessage.includes("permission")) {
|
|
348
|
-
errorMessage += `
|
|
349
|
-
|
|
350
|
-
\u{1F4A1} Tip: Make sure your API key has access to the ${provider} API`;
|
|
351
|
-
} else if (errorMessage.includes("connection")) {
|
|
352
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
353
|
-
}
|
|
354
|
-
setModelLoadError(errorMessage);
|
|
355
|
-
throw new Error(errorMessage);
|
|
356
|
-
}
|
|
357
|
-
async function fetchAnthropicCompatibleProviderModels() {
|
|
358
|
-
let defaultBaseURL;
|
|
359
|
-
let apiKeyUrl;
|
|
360
|
-
let actualProvider;
|
|
361
|
-
switch (anthropicProviderType) {
|
|
362
|
-
case "official":
|
|
363
|
-
defaultBaseURL = "https://api.anthropic.com";
|
|
364
|
-
apiKeyUrl = "https://console.anthropic.com/settings/keys";
|
|
365
|
-
actualProvider = "anthropic";
|
|
366
|
-
break;
|
|
367
|
-
case "bigdream":
|
|
368
|
-
defaultBaseURL = "https://api-key.info";
|
|
369
|
-
apiKeyUrl = "https://api-key.info/register?aff=MSl4";
|
|
370
|
-
actualProvider = "bigdream";
|
|
371
|
-
break;
|
|
372
|
-
case "opendev":
|
|
373
|
-
defaultBaseURL = "https://api.openai-next.com";
|
|
374
|
-
apiKeyUrl = "https://api.openai-next.com/register/?aff_code=4xo7";
|
|
375
|
-
actualProvider = "opendev";
|
|
376
|
-
break;
|
|
377
|
-
case "custom":
|
|
378
|
-
defaultBaseURL = providerBaseUrl;
|
|
379
|
-
apiKeyUrl = "your custom API provider";
|
|
380
|
-
actualProvider = "anthropic";
|
|
381
|
-
break;
|
|
382
|
-
default:
|
|
383
|
-
throw new Error(
|
|
384
|
-
`Unsupported Anthropic provider type: ${anthropicProviderType}`
|
|
385
|
-
);
|
|
386
|
-
}
|
|
387
|
-
const baseURL = anthropicProviderType === "custom" ? providerBaseUrl : providerBaseUrl || defaultBaseURL;
|
|
388
|
-
return await fetchAnthropicCompatibleModelsWithFallback(
|
|
389
|
-
baseURL,
|
|
390
|
-
actualProvider,
|
|
391
|
-
apiKeyUrl
|
|
392
|
-
);
|
|
393
|
-
}
|
|
394
|
-
async function fetchKimiModels() {
|
|
395
|
-
try {
|
|
396
|
-
const baseURL = providerBaseUrl || "https://api.moonshot.cn/v1";
|
|
397
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
398
|
-
const kimiModels = models2.map((model) => ({
|
|
399
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
400
|
-
provider: "kimi",
|
|
401
|
-
max_tokens: model.max_tokens || 8192,
|
|
402
|
-
supports_vision: false,
|
|
403
|
-
// Default to false, could be enhanced
|
|
404
|
-
supports_function_calling: true,
|
|
405
|
-
supports_reasoning_effort: false
|
|
406
|
-
}));
|
|
407
|
-
return kimiModels;
|
|
408
|
-
} catch (error) {
|
|
409
|
-
let errorMessage = "Failed to fetch Kimi models";
|
|
410
|
-
if (error instanceof Error) {
|
|
411
|
-
errorMessage = error.message;
|
|
412
|
-
}
|
|
413
|
-
if (errorMessage.includes("API key")) {
|
|
414
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Get your API key from https://platform.moonshot.cn/console/api-keys";
|
|
415
|
-
} else if (errorMessage.includes("permission")) {
|
|
416
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure your API key has access to the Kimi API";
|
|
417
|
-
} else if (errorMessage.includes("connection")) {
|
|
418
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
419
|
-
}
|
|
420
|
-
setModelLoadError(errorMessage);
|
|
421
|
-
throw error;
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
async function fetchDeepSeekModels() {
|
|
425
|
-
try {
|
|
426
|
-
const baseURL = providerBaseUrl || "https://api.deepseek.com";
|
|
427
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
428
|
-
const deepseekModels = models2.map((model) => ({
|
|
429
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
430
|
-
provider: "deepseek",
|
|
431
|
-
max_tokens: model.max_tokens || 8192,
|
|
432
|
-
supports_vision: false,
|
|
433
|
-
// Default to false, could be enhanced
|
|
434
|
-
supports_function_calling: true,
|
|
435
|
-
supports_reasoning_effort: false
|
|
436
|
-
}));
|
|
437
|
-
return deepseekModels;
|
|
438
|
-
} catch (error) {
|
|
439
|
-
let errorMessage = "Failed to fetch DeepSeek models";
|
|
440
|
-
if (error instanceof Error) {
|
|
441
|
-
errorMessage = error.message;
|
|
442
|
-
}
|
|
443
|
-
if (errorMessage.includes("API key")) {
|
|
444
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Get your API key from https://platform.deepseek.com/api_keys";
|
|
445
|
-
} else if (errorMessage.includes("permission")) {
|
|
446
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure your API key has access to the DeepSeek API";
|
|
447
|
-
} else if (errorMessage.includes("connection")) {
|
|
448
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
449
|
-
}
|
|
450
|
-
setModelLoadError(errorMessage);
|
|
451
|
-
throw error;
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
async function fetchSiliconFlowModels() {
|
|
455
|
-
try {
|
|
456
|
-
const baseURL = providerBaseUrl || "https://api.siliconflow.cn/v1";
|
|
457
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
458
|
-
const siliconflowModels = models2.map((model) => ({
|
|
459
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
460
|
-
provider: "siliconflow",
|
|
461
|
-
max_tokens: model.max_tokens || 8192,
|
|
462
|
-
supports_vision: false,
|
|
463
|
-
// Default to false, could be enhanced
|
|
464
|
-
supports_function_calling: true,
|
|
465
|
-
supports_reasoning_effort: false
|
|
466
|
-
}));
|
|
467
|
-
return siliconflowModels;
|
|
468
|
-
} catch (error) {
|
|
469
|
-
let errorMessage = "Failed to fetch SiliconFlow models";
|
|
470
|
-
if (error instanceof Error) {
|
|
471
|
-
errorMessage = error.message;
|
|
472
|
-
}
|
|
473
|
-
if (errorMessage.includes("API key")) {
|
|
474
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Get your API key from https://cloud.siliconflow.cn/i/oJWsm6io";
|
|
475
|
-
} else if (errorMessage.includes("permission")) {
|
|
476
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure your API key has access to the SiliconFlow API";
|
|
477
|
-
} else if (errorMessage.includes("connection")) {
|
|
478
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
479
|
-
}
|
|
480
|
-
setModelLoadError(errorMessage);
|
|
481
|
-
throw error;
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
async function fetchQwenModels() {
|
|
485
|
-
try {
|
|
486
|
-
const baseURL = providerBaseUrl || "https://dashscope.aliyuncs.com/compatible-mode/v1";
|
|
487
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
488
|
-
const qwenModels = models2.map((model) => ({
|
|
489
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
490
|
-
provider: "qwen",
|
|
491
|
-
max_tokens: model.max_tokens || 8192,
|
|
492
|
-
supports_vision: false,
|
|
493
|
-
supports_function_calling: true,
|
|
494
|
-
supports_reasoning_effort: false
|
|
495
|
-
}));
|
|
496
|
-
return qwenModels;
|
|
497
|
-
} catch (error) {
|
|
498
|
-
let errorMessage = "Failed to fetch Qwen models";
|
|
499
|
-
if (error instanceof Error) {
|
|
500
|
-
errorMessage = error.message;
|
|
501
|
-
}
|
|
502
|
-
if (errorMessage.includes("API key")) {
|
|
503
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Get your API key from https://bailian.console.aliyun.com/?tab=model#/api-key";
|
|
504
|
-
} else if (errorMessage.includes("permission")) {
|
|
505
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure your API key has access to the Qwen API";
|
|
506
|
-
} else if (errorMessage.includes("connection")) {
|
|
507
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
508
|
-
}
|
|
509
|
-
setModelLoadError(errorMessage);
|
|
510
|
-
throw error;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
async function fetchGLMModels() {
|
|
514
|
-
try {
|
|
515
|
-
const baseURL = providerBaseUrl || "https://open.bigmodel.cn/api/paas/v4";
|
|
516
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
517
|
-
const glmModels = models2.map((model) => ({
|
|
518
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
519
|
-
provider: "glm",
|
|
520
|
-
max_tokens: model.max_tokens || 8192,
|
|
521
|
-
supports_vision: false,
|
|
522
|
-
supports_function_calling: true,
|
|
523
|
-
supports_reasoning_effort: false
|
|
524
|
-
}));
|
|
525
|
-
return glmModels;
|
|
526
|
-
} catch (error) {
|
|
527
|
-
let errorMessage = "Failed to fetch GLM models";
|
|
528
|
-
if (error instanceof Error) {
|
|
529
|
-
errorMessage = error.message;
|
|
530
|
-
}
|
|
531
|
-
if (errorMessage.includes("API key")) {
|
|
532
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Get your API key from https://open.bigmodel.cn (API Keys section)";
|
|
533
|
-
} else if (errorMessage.includes("permission")) {
|
|
534
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure your API key has access to the GLM API";
|
|
535
|
-
} else if (errorMessage.includes("connection")) {
|
|
536
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
537
|
-
}
|
|
538
|
-
setModelLoadError(errorMessage);
|
|
539
|
-
throw error;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
async function fetchMinimaxModels() {
|
|
543
|
-
try {
|
|
544
|
-
const baseURL = providerBaseUrl || "https://api.minimaxi.com/v1";
|
|
545
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
546
|
-
const minimaxModels = models2.map((model) => ({
|
|
547
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
548
|
-
provider: "minimax",
|
|
549
|
-
max_tokens: model.max_tokens || 8192,
|
|
550
|
-
supports_vision: false,
|
|
551
|
-
supports_function_calling: true,
|
|
552
|
-
supports_reasoning_effort: false
|
|
553
|
-
}));
|
|
554
|
-
return minimaxModels;
|
|
555
|
-
} catch (error) {
|
|
556
|
-
let errorMessage = "Failed to fetch MiniMax models";
|
|
557
|
-
if (error instanceof Error) {
|
|
558
|
-
errorMessage = error.message;
|
|
559
|
-
}
|
|
560
|
-
if (errorMessage.includes("API key")) {
|
|
561
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Get your API key from https://www.minimax.io/platform/user-center/basic-information";
|
|
562
|
-
} else if (errorMessage.includes("permission")) {
|
|
563
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure your API key has access to the MiniMax API";
|
|
564
|
-
} else if (errorMessage.includes("connection")) {
|
|
565
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
566
|
-
}
|
|
567
|
-
setModelLoadError(errorMessage);
|
|
568
|
-
throw error;
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
async function fetchBaiduQianfanModels() {
|
|
572
|
-
try {
|
|
573
|
-
const baseURL = providerBaseUrl || "https://qianfan.baidubce.com/v2";
|
|
574
|
-
const models2 = await fetchCustomModels(baseURL, apiKey);
|
|
575
|
-
const baiduModels = models2.map((model) => ({
|
|
576
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
577
|
-
provider: "baidu-qianfan",
|
|
578
|
-
max_tokens: model.max_tokens || 8192,
|
|
579
|
-
supports_vision: false,
|
|
580
|
-
supports_function_calling: true,
|
|
581
|
-
supports_reasoning_effort: false
|
|
582
|
-
}));
|
|
583
|
-
return baiduModels;
|
|
584
|
-
} catch (error) {
|
|
585
|
-
let errorMessage = "Failed to fetch Baidu Qianfan models";
|
|
586
|
-
if (error instanceof Error) {
|
|
587
|
-
errorMessage = error.message;
|
|
588
|
-
}
|
|
589
|
-
if (errorMessage.includes("API key")) {
|
|
590
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Get your API key from https://console.bce.baidu.com/iam/#/iam/accesslist";
|
|
591
|
-
} else if (errorMessage.includes("permission")) {
|
|
592
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure your API key has access to the Baidu Qianfan API";
|
|
593
|
-
} else if (errorMessage.includes("connection")) {
|
|
594
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check your internet connection and try again";
|
|
595
|
-
}
|
|
596
|
-
setModelLoadError(errorMessage);
|
|
597
|
-
throw error;
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
async function fetchCustomOpenAIModels() {
|
|
601
|
-
try {
|
|
602
|
-
const models2 = await fetchCustomModels(customBaseUrl, apiKey);
|
|
603
|
-
const customModels = models2.map((model) => ({
|
|
604
|
-
model: model.modelName || model.id || model.name || model.model || "unknown",
|
|
605
|
-
provider: "custom-openai",
|
|
606
|
-
max_tokens: model.max_tokens || 4096,
|
|
607
|
-
supports_vision: false,
|
|
608
|
-
// Default to false, could be enhanced
|
|
609
|
-
supports_function_calling: true,
|
|
610
|
-
supports_reasoning_effort: false
|
|
611
|
-
}));
|
|
612
|
-
return customModels;
|
|
613
|
-
} catch (error) {
|
|
614
|
-
let errorMessage = "Failed to fetch custom API models";
|
|
615
|
-
if (error instanceof Error) {
|
|
616
|
-
errorMessage = error.message;
|
|
617
|
-
}
|
|
618
|
-
if (errorMessage.includes("API key")) {
|
|
619
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Check that your API key is valid for this endpoint";
|
|
620
|
-
} else if (errorMessage.includes("endpoint not found")) {
|
|
621
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Make sure the base URL ends with /v1 and supports OpenAI-compatible API";
|
|
622
|
-
} else if (errorMessage.includes("connect")) {
|
|
623
|
-
errorMessage += "\n\n\u{1F4A1} Tip: Verify the base URL is correct and accessible";
|
|
624
|
-
} else if (errorMessage.includes("response format")) {
|
|
625
|
-
errorMessage += "\n\n\u{1F4A1} Tip: This API may not be fully OpenAI-compatible";
|
|
626
|
-
}
|
|
627
|
-
setModelLoadError(errorMessage);
|
|
628
|
-
throw error;
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
async function fetchGeminiModels() {
|
|
632
|
-
try {
|
|
633
|
-
const response = await fetch(
|
|
634
|
-
`https://generativelanguage.googleapis.com/v1beta/models?key=${apiKey}`,
|
|
635
|
-
{ signal: AbortSignal.timeout(3e4) }
|
|
636
|
-
);
|
|
637
|
-
if (!response.ok) {
|
|
638
|
-
const errorData = await response.json();
|
|
639
|
-
throw new Error(
|
|
640
|
-
errorData.error?.message || `API error: ${response.status}`
|
|
641
|
-
);
|
|
642
|
-
}
|
|
643
|
-
const { models: models2 } = await response.json();
|
|
644
|
-
const geminiModels = models2.filter(
|
|
645
|
-
(model) => model.supportedGenerationMethods.includes("generateContent")
|
|
646
|
-
).map((model) => ({
|
|
647
|
-
model: model.name.replace("models/", ""),
|
|
648
|
-
provider: "gemini",
|
|
649
|
-
max_tokens: model.outputTokenLimit,
|
|
650
|
-
supports_vision: model.supportedGenerationMethods.includes("generateContent"),
|
|
651
|
-
supports_function_calling: model.supportedGenerationMethods.includes("generateContent")
|
|
652
|
-
}));
|
|
653
|
-
return geminiModels;
|
|
654
|
-
} catch (error) {
|
|
655
|
-
setModelLoadError(
|
|
656
|
-
error instanceof Error ? error.message : "Unknown error"
|
|
657
|
-
);
|
|
658
|
-
throw error;
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
async function fetchOllamaModels() {
|
|
662
|
-
try {
|
|
663
|
-
const response = await fetch(`${ollamaBaseUrl}/models`, {
|
|
664
|
-
signal: AbortSignal.timeout(3e4)
|
|
665
|
-
});
|
|
666
|
-
if (!response.ok) {
|
|
667
|
-
throw new Error(`HTTP error ${response.status}: ${response.statusText}`);
|
|
668
|
-
}
|
|
669
|
-
const responseData = await response.json();
|
|
670
|
-
let models2 = [];
|
|
671
|
-
if (responseData.data && Array.isArray(responseData.data)) {
|
|
672
|
-
models2 = responseData.data;
|
|
673
|
-
} else if (Array.isArray(responseData.models)) {
|
|
674
|
-
models2 = responseData.models;
|
|
675
|
-
} else if (Array.isArray(responseData)) {
|
|
676
|
-
models2 = responseData;
|
|
677
|
-
} else {
|
|
678
|
-
throw new Error(
|
|
679
|
-
"Invalid response from Ollama API: missing models array"
|
|
680
|
-
);
|
|
681
|
-
}
|
|
682
|
-
const ollamaModels = models2.map((model) => ({
|
|
683
|
-
model: model.id ?? model.name ?? model.modelName ?? (typeof model === "string" ? model : ""),
|
|
684
|
-
provider: "ollama",
|
|
685
|
-
max_tokens: DEFAULT_MAX_TOKENS,
|
|
686
|
-
// Default output tokens (8K is reasonable)
|
|
687
|
-
supports_vision: false,
|
|
688
|
-
supports_function_calling: true,
|
|
689
|
-
supports_reasoning_effort: false
|
|
690
|
-
}));
|
|
691
|
-
const validModels = ollamaModels.filter((model) => model.model);
|
|
692
|
-
const normalizeOllamaRoot = (url) => {
|
|
693
|
-
try {
|
|
694
|
-
const u = new URL(url);
|
|
695
|
-
let pathname = u.pathname.replace(/\/+$|^$/, "");
|
|
696
|
-
if (pathname.endsWith("/v1")) {
|
|
697
|
-
pathname = pathname.slice(0, -3);
|
|
698
|
-
}
|
|
699
|
-
u.pathname = pathname;
|
|
700
|
-
return u.toString().replace(/\/+$/, "");
|
|
701
|
-
} catch {
|
|
702
|
-
return url.replace(/\/v1\/?$/, "");
|
|
703
|
-
}
|
|
704
|
-
};
|
|
705
|
-
const extractContextTokens = (data) => {
|
|
706
|
-
if (!data || typeof data !== "object") return null;
|
|
707
|
-
if (data.model_info && typeof data.model_info === "object") {
|
|
708
|
-
const modelInfo = data.model_info;
|
|
709
|
-
for (const key of Object.keys(modelInfo)) {
|
|
710
|
-
if (key.endsWith(".context_length") || key.endsWith("_context_length")) {
|
|
711
|
-
const val = modelInfo[key];
|
|
712
|
-
if (typeof val === "number" && isFinite(val) && val > 0) {
|
|
713
|
-
return val;
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
const candidates = [
|
|
719
|
-
data?.parameters?.num_ctx,
|
|
720
|
-
data?.model_info?.num_ctx,
|
|
721
|
-
data?.config?.num_ctx,
|
|
722
|
-
data?.details?.context_length,
|
|
723
|
-
data?.context_length,
|
|
724
|
-
data?.num_ctx,
|
|
725
|
-
data?.max_tokens,
|
|
726
|
-
data?.max_new_tokens
|
|
727
|
-
].filter((v) => typeof v === "number" && isFinite(v) && v > 0);
|
|
728
|
-
if (candidates.length > 0) {
|
|
729
|
-
return Math.max(...candidates);
|
|
730
|
-
}
|
|
731
|
-
if (typeof data?.parameters === "string") {
|
|
732
|
-
const m = data.parameters.match(/num_ctx\s*[:=]\s*(\d+)/i);
|
|
733
|
-
if (m) {
|
|
734
|
-
const n = parseInt(m[1], 10);
|
|
735
|
-
if (Number.isFinite(n) && n > 0) return n;
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
return null;
|
|
739
|
-
};
|
|
740
|
-
const ollamaRoot = normalizeOllamaRoot(ollamaBaseUrl);
|
|
741
|
-
const enrichedModels = await Promise.all(
|
|
742
|
-
validModels.map(async (m) => {
|
|
743
|
-
try {
|
|
744
|
-
const showResp = await fetch(`${ollamaRoot}/api/show`, {
|
|
745
|
-
method: "POST",
|
|
746
|
-
headers: { "Content-Type": "application/json" },
|
|
747
|
-
body: JSON.stringify({ name: m.model }),
|
|
748
|
-
signal: AbortSignal.timeout(3e4)
|
|
749
|
-
});
|
|
750
|
-
if (showResp.ok) {
|
|
751
|
-
const showData = await showResp.json();
|
|
752
|
-
const ctx = extractContextTokens(showData);
|
|
753
|
-
if (typeof ctx === "number" && isFinite(ctx) && ctx > 0) {
|
|
754
|
-
return { ...m, context_length: ctx };
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
return m;
|
|
758
|
-
} catch {
|
|
759
|
-
return m;
|
|
760
|
-
}
|
|
761
|
-
})
|
|
762
|
-
);
|
|
763
|
-
setAvailableModels(enrichedModels);
|
|
764
|
-
if (enrichedModels.length > 0) {
|
|
765
|
-
navigateToIfStillOn("baseUrl", "model");
|
|
766
|
-
} else {
|
|
767
|
-
setModelLoadError("No models found in your Ollama installation");
|
|
768
|
-
}
|
|
769
|
-
return enrichedModels;
|
|
770
|
-
} catch (error) {
|
|
771
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
772
|
-
if (errorMessage.includes("fetch")) {
|
|
773
|
-
setModelLoadError(
|
|
774
|
-
`Could not connect to Ollama server at ${ollamaBaseUrl}. Make sure Ollama is running and the URL is correct.`
|
|
775
|
-
);
|
|
776
|
-
} else {
|
|
777
|
-
setModelLoadError(`Error loading Ollama models: ${errorMessage}`);
|
|
778
|
-
}
|
|
779
|
-
return [];
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
async function fetchModelsWithRetry() {
|
|
783
|
-
const MAX_RETRIES = 2;
|
|
784
|
-
let lastError = null;
|
|
785
|
-
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
|
|
786
|
-
setFetchRetryCount(attempt);
|
|
787
|
-
setIsRetrying(attempt > 1);
|
|
788
|
-
if (attempt > 1) {
|
|
789
|
-
setModelLoadError(
|
|
790
|
-
`Attempt ${attempt}/${MAX_RETRIES}: Retrying model discovery...`
|
|
791
|
-
);
|
|
792
|
-
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
793
|
-
}
|
|
794
|
-
try {
|
|
795
|
-
const models2 = await fetchModels();
|
|
796
|
-
setFetchRetryCount(0);
|
|
797
|
-
setIsRetrying(false);
|
|
798
|
-
setModelLoadError(null);
|
|
799
|
-
return models2;
|
|
800
|
-
} catch (error) {
|
|
801
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
802
|
-
if (attempt === MAX_RETRIES) {
|
|
803
|
-
break;
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
setIsRetrying(false);
|
|
808
|
-
const errorMessage = lastError?.message || "Unknown error";
|
|
809
|
-
const supportsManualInput = [
|
|
810
|
-
"anthropic",
|
|
811
|
-
"kimi",
|
|
812
|
-
"deepseek",
|
|
813
|
-
"siliconflow",
|
|
814
|
-
"qwen",
|
|
815
|
-
"glm",
|
|
816
|
-
"minimax",
|
|
817
|
-
"baidu-qianfan",
|
|
818
|
-
"custom-openai"
|
|
819
|
-
].includes(selectedProvider);
|
|
820
|
-
if (supportsManualInput) {
|
|
821
|
-
setModelLoadError(
|
|
822
|
-
`Failed to auto-discover models after ${MAX_RETRIES} attempts: ${errorMessage}
|
|
823
|
-
|
|
824
|
-
\u26A1 Automatically switching to manual model configuration...`
|
|
825
|
-
);
|
|
826
|
-
pendingTimerRef.current = setTimeout(() => {
|
|
827
|
-
pendingTimerRef.current = null;
|
|
828
|
-
setModelLoadError(null);
|
|
829
|
-
navigateToIfStillOn("apiKey", "modelInput");
|
|
830
|
-
}, 2e3);
|
|
831
|
-
} else {
|
|
832
|
-
setModelLoadError(
|
|
833
|
-
`Failed to load models after ${MAX_RETRIES} attempts: ${errorMessage}`
|
|
834
|
-
);
|
|
835
|
-
}
|
|
836
|
-
return [];
|
|
837
|
-
}
|
|
838
|
-
async function fetchModels() {
|
|
839
|
-
const originScreen = currentScreenRef.current;
|
|
840
|
-
setIsLoadingModels(true);
|
|
841
|
-
setModelLoadError(null);
|
|
842
|
-
try {
|
|
843
|
-
if (selectedProvider === "anthropic") {
|
|
844
|
-
const anthropicModels = await fetchAnthropicCompatibleProviderModels();
|
|
845
|
-
setAvailableModels(anthropicModels);
|
|
846
|
-
navigateToIfStillOn(originScreen, "model");
|
|
847
|
-
return anthropicModels;
|
|
848
|
-
}
|
|
849
|
-
if (selectedProvider === "custom-openai") {
|
|
850
|
-
const customModels = await fetchCustomOpenAIModels();
|
|
851
|
-
setAvailableModels(customModels);
|
|
852
|
-
navigateToIfStillOn(originScreen, "model");
|
|
853
|
-
return customModels;
|
|
854
|
-
}
|
|
855
|
-
if (selectedProvider === "gemini") {
|
|
856
|
-
const geminiModels = await fetchGeminiModels();
|
|
857
|
-
setAvailableModels(geminiModels);
|
|
858
|
-
navigateToIfStillOn(originScreen, "model");
|
|
859
|
-
return geminiModels;
|
|
860
|
-
}
|
|
861
|
-
if (selectedProvider === "kimi") {
|
|
862
|
-
const kimiModels = await fetchKimiModels();
|
|
863
|
-
setAvailableModels(kimiModels);
|
|
864
|
-
navigateToIfStillOn(originScreen, "model");
|
|
865
|
-
return kimiModels;
|
|
866
|
-
}
|
|
867
|
-
if (selectedProvider === "deepseek") {
|
|
868
|
-
const deepseekModels = await fetchDeepSeekModels();
|
|
869
|
-
setAvailableModels(deepseekModels);
|
|
870
|
-
navigateToIfStillOn(originScreen, "model");
|
|
871
|
-
return deepseekModels;
|
|
872
|
-
}
|
|
873
|
-
if (selectedProvider === "siliconflow") {
|
|
874
|
-
const siliconflowModels = await fetchSiliconFlowModels();
|
|
875
|
-
setAvailableModels(siliconflowModels);
|
|
876
|
-
navigateToIfStillOn(originScreen, "model");
|
|
877
|
-
return siliconflowModels;
|
|
878
|
-
}
|
|
879
|
-
if (selectedProvider === "qwen") {
|
|
880
|
-
const qwenModels = await fetchQwenModels();
|
|
881
|
-
setAvailableModels(qwenModels);
|
|
882
|
-
navigateToIfStillOn(originScreen, "model");
|
|
883
|
-
return qwenModels;
|
|
884
|
-
}
|
|
885
|
-
if (selectedProvider === "glm") {
|
|
886
|
-
const glmModels = await fetchGLMModels();
|
|
887
|
-
setAvailableModels(glmModels);
|
|
888
|
-
navigateToIfStillOn(originScreen, "model");
|
|
889
|
-
return glmModels;
|
|
890
|
-
}
|
|
891
|
-
if (selectedProvider === "baidu-qianfan") {
|
|
892
|
-
const baiduModels = await fetchBaiduQianfanModels();
|
|
893
|
-
setAvailableModels(baiduModels);
|
|
894
|
-
navigateToIfStillOn(originScreen, "model");
|
|
895
|
-
return baiduModels;
|
|
896
|
-
}
|
|
897
|
-
if (selectedProvider === "azure") {
|
|
898
|
-
navigateToIfStillOn(originScreen, "modelInput");
|
|
899
|
-
return [];
|
|
900
|
-
}
|
|
901
|
-
let baseURL = providerBaseUrl || providers[selectedProvider]?.baseURL;
|
|
902
|
-
if (selectedProvider === "custom-openai") {
|
|
903
|
-
baseURL = customBaseUrl;
|
|
904
|
-
}
|
|
905
|
-
const openai = new OpenAI({
|
|
906
|
-
apiKey: apiKey || "dummy-key-for-ollama",
|
|
907
|
-
// Ollama doesn't need a real key
|
|
908
|
-
baseURL,
|
|
909
|
-
dangerouslyAllowBrowser: true
|
|
910
|
-
});
|
|
911
|
-
const response = await openai.models.list();
|
|
912
|
-
const fetchedModels = [];
|
|
913
|
-
for (const model of response.data) {
|
|
914
|
-
const modelName = model.modelName || model.id || model.name || model.model || "unknown";
|
|
915
|
-
const modelInfo = models[selectedProvider]?.find(
|
|
916
|
-
(m) => m.model === modelName
|
|
917
|
-
);
|
|
918
|
-
fetchedModels.push({
|
|
919
|
-
model: modelName,
|
|
920
|
-
provider: selectedProvider,
|
|
921
|
-
max_tokens: modelInfo?.max_output_tokens,
|
|
922
|
-
supports_vision: modelInfo?.supports_vision || false,
|
|
923
|
-
supports_function_calling: modelInfo?.supports_function_calling || false,
|
|
924
|
-
supports_reasoning_effort: modelInfo?.supports_reasoning_effort || false
|
|
925
|
-
});
|
|
926
|
-
}
|
|
927
|
-
setAvailableModels(fetchedModels);
|
|
928
|
-
navigateToIfStillOn(originScreen, "model");
|
|
929
|
-
return fetchedModels;
|
|
930
|
-
} catch (error) {
|
|
931
|
-
throw error;
|
|
932
|
-
} finally {
|
|
933
|
-
setIsLoadingModels(false);
|
|
934
|
-
}
|
|
935
|
-
}
|
|
936
|
-
function handleApiKeySubmit(key) {
|
|
937
|
-
setApiKey(key);
|
|
938
|
-
if (isEditMode) {
|
|
939
|
-
goBack();
|
|
940
|
-
return;
|
|
941
|
-
}
|
|
942
|
-
if (selectedProvider === "azure") {
|
|
943
|
-
navigateTo("resourceName");
|
|
944
|
-
return;
|
|
945
|
-
}
|
|
946
|
-
fetchModelsWithRetry().catch(() => {
|
|
947
|
-
});
|
|
948
|
-
}
|
|
949
|
-
function handleResourceNameSubmit(name) {
|
|
950
|
-
setResourceName(name);
|
|
951
|
-
navigateTo("modelInput");
|
|
952
|
-
}
|
|
953
|
-
function handleOllamaBaseUrlSubmit(url) {
|
|
954
|
-
setOllamaBaseUrl(url);
|
|
955
|
-
setIsLoadingModels(true);
|
|
956
|
-
setModelLoadError(null);
|
|
957
|
-
fetchOllamaModels().finally(() => {
|
|
958
|
-
setIsLoadingModels(false);
|
|
959
|
-
});
|
|
960
|
-
}
|
|
961
|
-
function handleCustomBaseUrlSubmit(url) {
|
|
962
|
-
const cleanUrl = url.replace(/\/+$/, "");
|
|
963
|
-
setCustomBaseUrl(cleanUrl);
|
|
964
|
-
setProviderBaseUrl(cleanUrl);
|
|
965
|
-
if (isEditMode) {
|
|
966
|
-
goBack();
|
|
967
|
-
return;
|
|
968
|
-
}
|
|
969
|
-
navigateTo("apiKey");
|
|
970
|
-
}
|
|
971
|
-
function handleProviderBaseUrlSubmit(url) {
|
|
972
|
-
const cleanUrl = url.replace(/\/+$/, "");
|
|
973
|
-
setProviderBaseUrl(cleanUrl);
|
|
974
|
-
if (isEditMode) {
|
|
975
|
-
goBack();
|
|
976
|
-
return;
|
|
977
|
-
}
|
|
978
|
-
if (selectedProvider === "ollama") {
|
|
979
|
-
setOllamaBaseUrl(cleanUrl);
|
|
980
|
-
setIsLoadingModels(true);
|
|
981
|
-
setModelLoadError(null);
|
|
982
|
-
fetchOllamaModels().finally(() => {
|
|
983
|
-
setIsLoadingModels(false);
|
|
984
|
-
});
|
|
985
|
-
} else {
|
|
986
|
-
navigateTo("apiKey");
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
function handleAnthropicProviderSelection(providerType) {
|
|
990
|
-
setAnthropicProviderType(providerType);
|
|
991
|
-
if (providerType === "custom") {
|
|
992
|
-
setProviderBaseUrl("");
|
|
993
|
-
navigateTo("baseUrl");
|
|
994
|
-
} else {
|
|
995
|
-
const defaultUrls = {
|
|
996
|
-
official: "https://api.anthropic.com",
|
|
997
|
-
bigdream: "https://api-key.info",
|
|
998
|
-
opendev: "https://api.openai-next.com"
|
|
999
|
-
};
|
|
1000
|
-
setProviderBaseUrl(defaultUrls[providerType]);
|
|
1001
|
-
navigateTo("apiKey");
|
|
1002
|
-
}
|
|
1003
|
-
}
|
|
1004
|
-
function handleCustomModelSubmit(model) {
|
|
1005
|
-
setCustomModelName(model);
|
|
1006
|
-
setSelectedModel(model);
|
|
1007
|
-
setIsManualModelEntry(true);
|
|
1008
|
-
setSupportsReasoningEffort(false);
|
|
1009
|
-
setReasoningEffort(null);
|
|
1010
|
-
setMaxTokensMode("preset");
|
|
1011
|
-
setSelectedMaxTokensPreset(DEFAULT_MAX_TOKENS);
|
|
1012
|
-
setMaxTokens(DEFAULT_MAX_TOKENS.toString());
|
|
1013
|
-
setMaxTokensCursorOffset(DEFAULT_MAX_TOKENS.toString().length);
|
|
1014
|
-
navigateTo("modelParams");
|
|
1015
|
-
setActiveFieldIndex(0);
|
|
1016
|
-
}
|
|
1017
|
-
function handleModelSelection(model) {
|
|
1018
|
-
setSelectedModel(model);
|
|
1019
|
-
setIsManualModelEntry(false);
|
|
1020
|
-
const modelInfo = availableModels.find((m) => m.model === model);
|
|
1021
|
-
setSupportsReasoningEffort(modelInfo?.supports_reasoning_effort || false);
|
|
1022
|
-
if (!modelInfo?.supports_reasoning_effort) {
|
|
1023
|
-
setReasoningEffort(null);
|
|
1024
|
-
}
|
|
1025
|
-
if (modelInfo?.context_length) {
|
|
1026
|
-
setContextLength(modelInfo.context_length);
|
|
1027
|
-
} else {
|
|
1028
|
-
setContextLength(DEFAULT_CONTEXT_LENGTH);
|
|
1029
|
-
}
|
|
1030
|
-
if (modelInfo?.max_tokens) {
|
|
1031
|
-
const modelMaxTokens = modelInfo.max_tokens;
|
|
1032
|
-
const matchingPreset = MAX_TOKENS_OPTIONS.find(
|
|
1033
|
-
(option) => option.value === modelMaxTokens
|
|
1034
|
-
);
|
|
1035
|
-
if (matchingPreset) {
|
|
1036
|
-
setMaxTokensMode("preset");
|
|
1037
|
-
setSelectedMaxTokensPreset(modelMaxTokens);
|
|
1038
|
-
setMaxTokens(modelMaxTokens.toString());
|
|
1039
|
-
} else {
|
|
1040
|
-
setMaxTokensMode("custom");
|
|
1041
|
-
setMaxTokens(modelMaxTokens.toString());
|
|
1042
|
-
}
|
|
1043
|
-
setMaxTokensCursorOffset(modelMaxTokens.toString().length);
|
|
1044
|
-
} else {
|
|
1045
|
-
setMaxTokensMode("preset");
|
|
1046
|
-
setSelectedMaxTokensPreset(DEFAULT_MAX_TOKENS);
|
|
1047
|
-
setMaxTokens(DEFAULT_MAX_TOKENS.toString());
|
|
1048
|
-
setMaxTokensCursorOffset(DEFAULT_MAX_TOKENS.toString().length);
|
|
1049
|
-
}
|
|
1050
|
-
navigateTo("modelParams");
|
|
1051
|
-
setActiveFieldIndex(0);
|
|
1052
|
-
}
|
|
1053
|
-
const handleModelParamsSubmit = () => {
|
|
1054
|
-
if (isEditMode) {
|
|
1055
|
-
goBack();
|
|
1056
|
-
return;
|
|
1057
|
-
}
|
|
1058
|
-
if (!isManualModelEntry) {
|
|
1059
|
-
const modelInfo = availableModels.find((m) => m.model === selectedModel);
|
|
1060
|
-
if (modelInfo?.context_length || modelInfo?.max_input_tokens) {
|
|
1061
|
-
navigateTo("testAndSave");
|
|
1062
|
-
return;
|
|
1063
|
-
}
|
|
1064
|
-
}
|
|
1065
|
-
if (!CONTEXT_LENGTH_OPTIONS.find((opt) => opt.value === contextLength)) {
|
|
1066
|
-
setContextLength(DEFAULT_CONTEXT_LENGTH);
|
|
1067
|
-
}
|
|
1068
|
-
navigateTo("contextLength");
|
|
1069
|
-
};
|
|
1070
|
-
async function testConnection() {
|
|
1071
|
-
setIsTestingConnection(true);
|
|
1072
|
-
setConnectionTestResult(null);
|
|
1073
|
-
try {
|
|
1074
|
-
let testBaseURL = providerBaseUrl || providers[selectedProvider]?.baseURL || "";
|
|
1075
|
-
if (selectedProvider === "azure") {
|
|
1076
|
-
testBaseURL = `https://${resourceName}.openai.azure.com/openai/deployments/${selectedModel}`;
|
|
1077
|
-
} else if (selectedProvider === "custom-openai") {
|
|
1078
|
-
testBaseURL = customBaseUrl;
|
|
1079
|
-
}
|
|
1080
|
-
if (isOpenAICompatibleProvider(selectedProvider)) {
|
|
1081
|
-
const isGPT5 = selectedModel?.toLowerCase().includes("gpt-5");
|
|
1082
|
-
if (isGPT5) {
|
|
1083
|
-
const configValidation = validateGPT5Config({
|
|
1084
|
-
model: selectedModel,
|
|
1085
|
-
apiKey,
|
|
1086
|
-
baseURL: testBaseURL,
|
|
1087
|
-
maxTokens: parseInt(maxTokens) || 8192,
|
|
1088
|
-
provider: selectedProvider
|
|
1089
|
-
});
|
|
1090
|
-
if (!configValidation.valid) {
|
|
1091
|
-
return {
|
|
1092
|
-
success: false,
|
|
1093
|
-
message: "\u274C GPT-5 configuration validation failed",
|
|
1094
|
-
details: configValidation.errors.join("\n")
|
|
1095
|
-
};
|
|
1096
|
-
}
|
|
1097
|
-
const gpt5Result = await testGPT5Connection({
|
|
1098
|
-
model: selectedModel,
|
|
1099
|
-
apiKey,
|
|
1100
|
-
baseURL: testBaseURL,
|
|
1101
|
-
maxTokens: parseInt(maxTokens) || 8192,
|
|
1102
|
-
provider: selectedProvider
|
|
1103
|
-
});
|
|
1104
|
-
return gpt5Result;
|
|
1105
|
-
}
|
|
1106
|
-
const endpointsToTry = [];
|
|
1107
|
-
if (selectedProvider === "minimax") {
|
|
1108
|
-
endpointsToTry.push(
|
|
1109
|
-
{
|
|
1110
|
-
path: "/text/chatcompletion_v2",
|
|
1111
|
-
name: "MiniMax v2 (recommended)"
|
|
1112
|
-
},
|
|
1113
|
-
{ path: "/chat/completions", name: "Standard OpenAI" }
|
|
1114
|
-
);
|
|
1115
|
-
} else {
|
|
1116
|
-
endpointsToTry.push({
|
|
1117
|
-
path: "/chat/completions",
|
|
1118
|
-
name: "Standard OpenAI"
|
|
1119
|
-
});
|
|
1120
|
-
}
|
|
1121
|
-
let lastError = null;
|
|
1122
|
-
for (const endpoint of endpointsToTry) {
|
|
1123
|
-
try {
|
|
1124
|
-
const testResult = await testChatEndpoint(
|
|
1125
|
-
testBaseURL,
|
|
1126
|
-
endpoint.path,
|
|
1127
|
-
endpoint.name
|
|
1128
|
-
);
|
|
1129
|
-
if (testResult.success) {
|
|
1130
|
-
return testResult;
|
|
1131
|
-
}
|
|
1132
|
-
lastError = testResult;
|
|
1133
|
-
} catch (error) {
|
|
1134
|
-
lastError = {
|
|
1135
|
-
success: false,
|
|
1136
|
-
message: `Failed to test ${endpoint.name}`,
|
|
1137
|
-
endpoint: endpoint.path,
|
|
1138
|
-
details: error instanceof Error ? error.message : String(error)
|
|
1139
|
-
};
|
|
1140
|
-
}
|
|
1141
|
-
}
|
|
1142
|
-
return lastError || {
|
|
1143
|
-
success: false,
|
|
1144
|
-
message: "All endpoints failed",
|
|
1145
|
-
details: "No endpoints could be reached"
|
|
1146
|
-
};
|
|
1147
|
-
} else {
|
|
1148
|
-
return await testProviderSpecificEndpoint(testBaseURL);
|
|
1149
|
-
}
|
|
1150
|
-
} catch (error) {
|
|
1151
|
-
return {
|
|
1152
|
-
success: false,
|
|
1153
|
-
message: "Connection test failed",
|
|
1154
|
-
details: error instanceof Error ? error.message : String(error)
|
|
1155
|
-
};
|
|
1156
|
-
} finally {
|
|
1157
|
-
setIsTestingConnection(false);
|
|
1158
|
-
}
|
|
1159
|
-
}
|
|
1160
|
-
async function testChatEndpoint(baseURL, endpointPath, endpointName) {
|
|
1161
|
-
const testURL = `${baseURL.replace(/\/+$/, "")}${endpointPath}`;
|
|
1162
|
-
const testPayload = {
|
|
1163
|
-
model: selectedModel,
|
|
1164
|
-
messages: [
|
|
1165
|
-
{
|
|
1166
|
-
role: "user",
|
|
1167
|
-
content: 'Please respond with exactly "YES" (in capital letters) to confirm this connection is working.'
|
|
1168
|
-
}
|
|
1169
|
-
],
|
|
1170
|
-
max_tokens: Math.max(parseInt(maxTokens) || 8192, 8192),
|
|
1171
|
-
// Ensure minimum 8192 tokens for connection test
|
|
1172
|
-
temperature: 0,
|
|
1173
|
-
stream: false
|
|
1174
|
-
};
|
|
1175
|
-
if (selectedModel && selectedProvider) {
|
|
1176
|
-
const caps = getEffectiveCapabilities(selectedProvider, selectedModel);
|
|
1177
|
-
if (caps.maxTokensField !== "max_tokens" && testPayload.max_tokens) {
|
|
1178
|
-
testPayload[caps.maxTokensField] = testPayload.max_tokens;
|
|
1179
|
-
delete testPayload.max_tokens;
|
|
1180
|
-
}
|
|
1181
|
-
if (caps.temperatureRange === "omit") {
|
|
1182
|
-
delete testPayload.temperature;
|
|
1183
|
-
} else if (typeof caps.temperatureRange === "object") {
|
|
1184
|
-
testPayload.temperature = Math.min(
|
|
1185
|
-
testPayload.temperature,
|
|
1186
|
-
caps.temperatureRange.max
|
|
1187
|
-
);
|
|
1188
|
-
}
|
|
1189
|
-
}
|
|
1190
|
-
const headers = {
|
|
1191
|
-
"Content-Type": "application/json"
|
|
1192
|
-
};
|
|
1193
|
-
if (selectedProvider === "azure") {
|
|
1194
|
-
headers["api-key"] = apiKey;
|
|
1195
|
-
} else {
|
|
1196
|
-
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
1197
|
-
}
|
|
1198
|
-
try {
|
|
1199
|
-
const response = await fetch(testURL, {
|
|
1200
|
-
method: "POST",
|
|
1201
|
-
headers,
|
|
1202
|
-
body: JSON.stringify(testPayload),
|
|
1203
|
-
signal: AbortSignal.timeout(3e4)
|
|
1204
|
-
});
|
|
1205
|
-
if (response.ok) {
|
|
1206
|
-
const data = await response.json();
|
|
1207
|
-
let responseContent = "";
|
|
1208
|
-
if (data.choices && data.choices.length > 0) {
|
|
1209
|
-
responseContent = data.choices[0]?.message?.content || "";
|
|
1210
|
-
} else if (data.reply) {
|
|
1211
|
-
responseContent = data.reply;
|
|
1212
|
-
} else if (data.output) {
|
|
1213
|
-
responseContent = data.output?.text || data.output || "";
|
|
1214
|
-
}
|
|
1215
|
-
const containsYes = responseContent.toLowerCase().includes("yes");
|
|
1216
|
-
if (containsYes) {
|
|
1217
|
-
return {
|
|
1218
|
-
success: true,
|
|
1219
|
-
message: `\u2705 Connection test passed with ${endpointName}`,
|
|
1220
|
-
endpoint: endpointPath,
|
|
1221
|
-
details: `Model responded correctly: "${responseContent.trim()}"`
|
|
1222
|
-
};
|
|
1223
|
-
} else {
|
|
1224
|
-
return {
|
|
1225
|
-
success: false,
|
|
1226
|
-
message: `\u26A0\uFE0F ${endpointName} connected but model response unexpected`,
|
|
1227
|
-
endpoint: endpointPath,
|
|
1228
|
-
details: `Expected "YES" but got: "${responseContent.trim() || "(empty response)"}"`
|
|
1229
|
-
};
|
|
1230
|
-
}
|
|
1231
|
-
} else {
|
|
1232
|
-
const errorData = await response.json().catch(() => null);
|
|
1233
|
-
const errorMessage = errorData?.error?.message || errorData?.message || response.statusText;
|
|
1234
|
-
return {
|
|
1235
|
-
success: false,
|
|
1236
|
-
message: `\u274C ${endpointName} failed (${response.status})`,
|
|
1237
|
-
endpoint: endpointPath,
|
|
1238
|
-
details: `Error: ${errorMessage}`
|
|
1239
|
-
};
|
|
1240
|
-
}
|
|
1241
|
-
} catch (error) {
|
|
1242
|
-
return {
|
|
1243
|
-
success: false,
|
|
1244
|
-
message: `\u274C ${endpointName} connection failed`,
|
|
1245
|
-
endpoint: endpointPath,
|
|
1246
|
-
details: error instanceof Error ? error.message : String(error)
|
|
1247
|
-
};
|
|
1248
|
-
}
|
|
1249
|
-
}
|
|
1250
|
-
async function testResponsesEndpoint(baseURL, endpointPath, endpointName) {
|
|
1251
|
-
const testURL = `${baseURL.replace(/\/+$/, "")}${endpointPath}`;
|
|
1252
|
-
const testPayload = {
|
|
1253
|
-
model: selectedModel,
|
|
1254
|
-
input: [
|
|
1255
|
-
{
|
|
1256
|
-
role: "user",
|
|
1257
|
-
content: 'Please respond with exactly "YES" (in capital letters) to confirm this connection is working.'
|
|
1258
|
-
}
|
|
1259
|
-
],
|
|
1260
|
-
max_completion_tokens: Math.max(parseInt(maxTokens) || 8192, 8192),
|
|
1261
|
-
temperature: 1,
|
|
1262
|
-
// GPT-5 only supports temperature=1
|
|
1263
|
-
// 🚀 Add reasoning configuration for better GPT-5 performance
|
|
1264
|
-
reasoning: {
|
|
1265
|
-
effort: "low"
|
|
1266
|
-
// Fast response for connection test
|
|
1267
|
-
}
|
|
1268
|
-
};
|
|
1269
|
-
const headers = {
|
|
1270
|
-
"Content-Type": "application/json",
|
|
1271
|
-
Authorization: `Bearer ${apiKey}`
|
|
1272
|
-
};
|
|
1273
|
-
try {
|
|
1274
|
-
const response = await fetch(testURL, {
|
|
1275
|
-
method: "POST",
|
|
1276
|
-
headers,
|
|
1277
|
-
body: JSON.stringify(testPayload),
|
|
1278
|
-
signal: AbortSignal.timeout(3e4)
|
|
1279
|
-
});
|
|
1280
|
-
if (response.ok) {
|
|
1281
|
-
const data = await response.json();
|
|
1282
|
-
let responseContent = "";
|
|
1283
|
-
if (data.output_text) {
|
|
1284
|
-
responseContent = data.output_text;
|
|
1285
|
-
} else if (data.output) {
|
|
1286
|
-
responseContent = typeof data.output === "string" ? data.output : data.output.text || "";
|
|
1287
|
-
}
|
|
1288
|
-
const containsYes = responseContent.toLowerCase().includes("yes");
|
|
1289
|
-
if (containsYes) {
|
|
1290
|
-
return {
|
|
1291
|
-
success: true,
|
|
1292
|
-
message: `\u2705 Connection test passed with ${endpointName}`,
|
|
1293
|
-
endpoint: endpointPath,
|
|
1294
|
-
details: `GPT-5 responded correctly via Responses API: "${responseContent.trim()}"`
|
|
1295
|
-
};
|
|
1296
|
-
} else {
|
|
1297
|
-
return {
|
|
1298
|
-
success: false,
|
|
1299
|
-
message: `\u26A0\uFE0F ${endpointName} connected but model response unexpected`,
|
|
1300
|
-
endpoint: endpointPath,
|
|
1301
|
-
details: `Expected "YES" but got: "${responseContent.trim() || "(empty response)"}"`
|
|
1302
|
-
};
|
|
1303
|
-
}
|
|
1304
|
-
} else {
|
|
1305
|
-
const errorData = await response.json().catch(() => null);
|
|
1306
|
-
const errorMessage = errorData?.error?.message || errorData?.message || response.statusText;
|
|
1307
|
-
let details = `Responses API Error: ${errorMessage}`;
|
|
1308
|
-
if (response.status === 400 && errorMessage.includes("max_tokens")) {
|
|
1309
|
-
details += "\n\u{1F527} Note: This appears to be a parameter compatibility issue. The fallback to Chat Completions should handle this.";
|
|
1310
|
-
} else if (response.status === 404) {
|
|
1311
|
-
details += "\n\u{1F527} Note: Responses API endpoint may not be available for this model or provider.";
|
|
1312
|
-
} else if (response.status === 401) {
|
|
1313
|
-
details += "\n\u{1F527} Note: API key authentication failed.";
|
|
1314
|
-
}
|
|
1315
|
-
return {
|
|
1316
|
-
success: false,
|
|
1317
|
-
message: `\u274C ${endpointName} failed (${response.status})`,
|
|
1318
|
-
endpoint: endpointPath,
|
|
1319
|
-
details
|
|
1320
|
-
};
|
|
1321
|
-
}
|
|
1322
|
-
} catch (error) {
|
|
1323
|
-
return {
|
|
1324
|
-
success: false,
|
|
1325
|
-
message: `\u274C ${endpointName} connection failed`,
|
|
1326
|
-
endpoint: endpointPath,
|
|
1327
|
-
details: error instanceof Error ? error.message : String(error)
|
|
1328
|
-
};
|
|
1329
|
-
}
|
|
1330
|
-
}
|
|
1331
|
-
async function testProviderSpecificEndpoint(baseURL) {
|
|
1332
|
-
if (selectedProvider === "anthropic" || selectedProvider === "bigdream") {
|
|
1333
|
-
try {
|
|
1334
|
-
let testBaseURL = void 0;
|
|
1335
|
-
if (selectedProvider === "bigdream") {
|
|
1336
|
-
testBaseURL = baseURL || "https://api-key.info";
|
|
1337
|
-
} else if (selectedProvider === "anthropic") {
|
|
1338
|
-
testBaseURL = baseURL && baseURL !== "https://api.anthropic.com" ? baseURL : void 0;
|
|
1339
|
-
}
|
|
1340
|
-
const isValid = await verifyApiKey(
|
|
1341
|
-
apiKey,
|
|
1342
|
-
testBaseURL,
|
|
1343
|
-
selectedProvider
|
|
1344
|
-
);
|
|
1345
|
-
if (isValid) {
|
|
1346
|
-
return {
|
|
1347
|
-
success: true,
|
|
1348
|
-
message: `\u2705 ${selectedProvider} connection test passed`,
|
|
1349
|
-
endpoint: "/messages",
|
|
1350
|
-
details: "API key verified using official Anthropic SDK"
|
|
1351
|
-
};
|
|
1352
|
-
} else {
|
|
1353
|
-
return {
|
|
1354
|
-
success: false,
|
|
1355
|
-
message: `\u274C ${selectedProvider} API key verification failed`,
|
|
1356
|
-
endpoint: "/messages",
|
|
1357
|
-
details: "Invalid API key. Please check your API key and try again."
|
|
1358
|
-
};
|
|
1359
|
-
}
|
|
1360
|
-
} catch (error) {
|
|
1361
|
-
return {
|
|
1362
|
-
success: false,
|
|
1363
|
-
message: `\u274C ${selectedProvider} connection failed`,
|
|
1364
|
-
endpoint: "/messages",
|
|
1365
|
-
details: error instanceof Error ? error.message : String(error)
|
|
1366
|
-
};
|
|
1367
|
-
}
|
|
1368
|
-
}
|
|
1369
|
-
return {
|
|
1370
|
-
success: true,
|
|
1371
|
-
message: `\u2705 Configuration saved for ${selectedProvider}`,
|
|
1372
|
-
details: "Provider-specific testing not implemented yet"
|
|
1373
|
-
};
|
|
1374
|
-
}
|
|
1375
|
-
async function handleConnectionTest() {
|
|
1376
|
-
const result = await testConnection();
|
|
1377
|
-
setConnectionTestResult(result);
|
|
1378
|
-
}
|
|
1379
|
-
const handleContextLengthSubmit = () => {
|
|
1380
|
-
if (isEditMode) {
|
|
1381
|
-
goBack();
|
|
1382
|
-
return;
|
|
1383
|
-
}
|
|
1384
|
-
navigateTo("testAndSave");
|
|
1385
|
-
};
|
|
1386
|
-
async function saveConfiguration(provider, model) {
|
|
1387
|
-
let baseURL = providerBaseUrl || providers[provider]?.baseURL || "";
|
|
1388
|
-
let actualProvider = provider;
|
|
1389
|
-
if (provider === "anthropic") {
|
|
1390
|
-
switch (anthropicProviderType) {
|
|
1391
|
-
case "official":
|
|
1392
|
-
actualProvider = "anthropic";
|
|
1393
|
-
baseURL = baseURL || "https://api.anthropic.com";
|
|
1394
|
-
break;
|
|
1395
|
-
case "bigdream":
|
|
1396
|
-
actualProvider = "bigdream";
|
|
1397
|
-
baseURL = baseURL || "https://api-key.info";
|
|
1398
|
-
break;
|
|
1399
|
-
case "custom":
|
|
1400
|
-
actualProvider = "anthropic";
|
|
1401
|
-
break;
|
|
1402
|
-
}
|
|
1403
|
-
}
|
|
1404
|
-
if (provider === "azure") {
|
|
1405
|
-
baseURL = `https://${resourceName}.openai.azure.com/openai/deployments/${model}`;
|
|
1406
|
-
} else if (provider === "custom-openai") {
|
|
1407
|
-
baseURL = customBaseUrl;
|
|
1408
|
-
}
|
|
1409
|
-
try {
|
|
1410
|
-
const modelManager = getModelManager();
|
|
1411
|
-
const modelConfig = {
|
|
1412
|
-
name: `${actualProvider} ${model}`,
|
|
1413
|
-
provider: actualProvider,
|
|
1414
|
-
modelName: model,
|
|
1415
|
-
baseURL,
|
|
1416
|
-
apiKey: apiKey || "",
|
|
1417
|
-
maxTokens: parseInt(maxTokens) || DEFAULT_MAX_TOKENS,
|
|
1418
|
-
contextLength: contextLength || DEFAULT_CONTEXT_LENGTH,
|
|
1419
|
-
reasoningEffort
|
|
1420
|
-
};
|
|
1421
|
-
return await modelManager.addModel(modelConfig);
|
|
1422
|
-
} catch (error) {
|
|
1423
|
-
setValidationError(
|
|
1424
|
-
error instanceof Error ? error.message : "Failed to add model"
|
|
1425
|
-
);
|
|
1426
|
-
return null;
|
|
1427
|
-
}
|
|
1428
|
-
}
|
|
1429
|
-
async function handleConfirmation() {
|
|
1430
|
-
setValidationError(null);
|
|
1431
|
-
if (isEditMode && editingModel) {
|
|
1432
|
-
try {
|
|
1433
|
-
const modelManager = getModelManager();
|
|
1434
|
-
const saveApiKey = !apiKeyUserModified && originalEncryptedRef ? originalEncryptedRef : apiKey || editingModel.apiKey;
|
|
1435
|
-
modelManager.updateModel(editingModel.modelName, {
|
|
1436
|
-
baseURL: providerBaseUrl || editingModel.baseURL,
|
|
1437
|
-
apiKey: saveApiKey,
|
|
1438
|
-
maxTokens: parseInt(maxTokens) || editingModel.maxTokens,
|
|
1439
|
-
contextLength: contextLength || editingModel.contextLength,
|
|
1440
|
-
reasoningEffort
|
|
1441
|
-
});
|
|
1442
|
-
onDone();
|
|
1443
|
-
} catch (error) {
|
|
1444
|
-
setValidationError(
|
|
1445
|
-
error instanceof Error ? error.message : "Failed to update model"
|
|
1446
|
-
);
|
|
1447
|
-
}
|
|
1448
|
-
return;
|
|
1449
|
-
}
|
|
1450
|
-
const modelId = await saveConfiguration(selectedProvider, selectedModel);
|
|
1451
|
-
if (!modelId) {
|
|
1452
|
-
return;
|
|
1453
|
-
}
|
|
1454
|
-
if (modelId && (isOnboarding || targetPointer)) {
|
|
1455
|
-
if (isOnboarding) {
|
|
1456
|
-
setAllPointersToModel(modelId);
|
|
1457
|
-
} else if (targetPointer) {
|
|
1458
|
-
setModelPointer(targetPointer, modelId);
|
|
1459
|
-
}
|
|
1460
|
-
}
|
|
1461
|
-
onDone();
|
|
1462
|
-
}
|
|
1463
|
-
const handleBack = () => {
|
|
1464
|
-
if (pendingTimerRef.current) {
|
|
1465
|
-
clearTimeout(pendingTimerRef.current);
|
|
1466
|
-
pendingTimerRef.current = null;
|
|
1467
|
-
}
|
|
1468
|
-
if (screenStack.length <= 1) {
|
|
1469
|
-
if (onCancel) {
|
|
1470
|
-
onCancel();
|
|
1471
|
-
} else {
|
|
1472
|
-
onDone();
|
|
1473
|
-
}
|
|
1474
|
-
} else {
|
|
1475
|
-
if (currentScreen === "testAndSave") {
|
|
1476
|
-
setConnectionTestResult(null);
|
|
1477
|
-
setIsTestingConnection(false);
|
|
1478
|
-
setValidationError(null);
|
|
1479
|
-
}
|
|
1480
|
-
const prevScreen = screenStack[screenStack.length - 2];
|
|
1481
|
-
if (prevScreen === "modelParams") {
|
|
1482
|
-
const formFields = getFormFieldsForModelParams();
|
|
1483
|
-
const submitIndex = formFields.findIndex((f) => f.name === "submit");
|
|
1484
|
-
setActiveFieldIndex(Math.max(0, submitIndex - 1));
|
|
1485
|
-
}
|
|
1486
|
-
setScreenStack((prev) => prev.slice(0, -1));
|
|
1487
|
-
}
|
|
1488
|
-
};
|
|
1489
|
-
function handleCursorOffsetChange(offset) {
|
|
1490
|
-
setCursorOffset(offset);
|
|
1491
|
-
}
|
|
1492
|
-
function handleApiKeyChange(value) {
|
|
1493
|
-
setApiKeyEdited(true);
|
|
1494
|
-
setApiKeyUserModified(true);
|
|
1495
|
-
setApiKey(value);
|
|
1496
|
-
}
|
|
1497
|
-
function handleModelSearchChange(value) {
|
|
1498
|
-
setModelSearchQuery(value);
|
|
1499
|
-
setModelSearchCursorOffset(value.length);
|
|
1500
|
-
}
|
|
1501
|
-
function handleModelSearchCursorOffsetChange(offset) {
|
|
1502
|
-
setModelSearchCursorOffset(offset);
|
|
1503
|
-
}
|
|
1504
|
-
const textScreens = ["apiKey", "baseUrl", "resourceName", "modelInput"];
|
|
1505
|
-
useInput((input, key) => {
|
|
1506
|
-
if (!textScreens.includes(currentScreen)) return;
|
|
1507
|
-
if (key.escape) {
|
|
1508
|
-
handleBack();
|
|
1509
|
-
return;
|
|
1510
|
-
}
|
|
1511
|
-
if (currentScreen === "apiKey" && key.return) {
|
|
1512
|
-
if (apiKey) {
|
|
1513
|
-
handleApiKeySubmit(apiKey);
|
|
1514
|
-
}
|
|
1515
|
-
return;
|
|
1516
|
-
}
|
|
1517
|
-
if (currentScreen === "apiKey" && key.tab) {
|
|
1518
|
-
if (selectedProvider === "anthropic" || selectedProvider === "kimi" || selectedProvider === "deepseek" || selectedProvider === "qwen" || selectedProvider === "glm" || selectedProvider === "minimax" || selectedProvider === "baidu-qianfan" || selectedProvider === "siliconflow" || selectedProvider === "custom-openai") {
|
|
1519
|
-
navigateTo("modelInput");
|
|
1520
|
-
return;
|
|
1521
|
-
}
|
|
1522
|
-
fetchModelsWithRetry().catch(() => {
|
|
1523
|
-
});
|
|
1524
|
-
return;
|
|
1525
|
-
}
|
|
1526
|
-
if (currentScreen === "resourceName" && key.return) {
|
|
1527
|
-
if (resourceName) {
|
|
1528
|
-
handleResourceNameSubmit(resourceName);
|
|
1529
|
-
}
|
|
1530
|
-
return;
|
|
1531
|
-
}
|
|
1532
|
-
if (currentScreen === "baseUrl" && key.return) {
|
|
1533
|
-
if (selectedProvider === "custom-openai") {
|
|
1534
|
-
handleCustomBaseUrlSubmit(customBaseUrl);
|
|
1535
|
-
} else {
|
|
1536
|
-
handleProviderBaseUrlSubmit(providerBaseUrl);
|
|
1537
|
-
}
|
|
1538
|
-
return;
|
|
1539
|
-
}
|
|
1540
|
-
if (currentScreen === "modelInput" && key.return) {
|
|
1541
|
-
if (customModelName) {
|
|
1542
|
-
handleCustomModelSubmit(customModelName);
|
|
1543
|
-
}
|
|
1544
|
-
return;
|
|
1545
|
-
}
|
|
1546
|
-
});
|
|
1547
|
-
useEffect(() => {
|
|
1548
|
-
if (currentScreen !== "modelParams") return;
|
|
1549
|
-
const formFields = getFormFieldsForModelParams();
|
|
1550
|
-
const currentField = formFields[activeFieldIndex];
|
|
1551
|
-
if (!currentField || currentField.name === "submit") {
|
|
1552
|
-
handleModelParamsSubmit();
|
|
1553
|
-
}
|
|
1554
|
-
}, [currentScreen, activeFieldIndex]);
|
|
1555
|
-
function getFormFieldsForModelParams() {
|
|
1556
|
-
return [
|
|
1557
|
-
{
|
|
1558
|
-
name: "maxTokens",
|
|
1559
|
-
label: "Maximum Tokens",
|
|
1560
|
-
description: "Select the maximum number of tokens to generate.",
|
|
1561
|
-
value: parseInt(maxTokens),
|
|
1562
|
-
component: "select",
|
|
1563
|
-
options: MAX_TOKENS_OPTIONS.map((option) => ({
|
|
1564
|
-
label: option.label,
|
|
1565
|
-
value: option.value.toString()
|
|
1566
|
-
})),
|
|
1567
|
-
defaultValue: maxTokens
|
|
1568
|
-
},
|
|
1569
|
-
...supportsReasoningEffort ? [
|
|
1570
|
-
{
|
|
1571
|
-
name: "reasoningEffort",
|
|
1572
|
-
label: "Reasoning Effort",
|
|
1573
|
-
description: "Controls reasoning depth for complex problems.",
|
|
1574
|
-
value: reasoningEffort,
|
|
1575
|
-
component: "select"
|
|
1576
|
-
}
|
|
1577
|
-
] : [],
|
|
1578
|
-
{
|
|
1579
|
-
name: "submit",
|
|
1580
|
-
label: "Continue \u2192",
|
|
1581
|
-
component: "button"
|
|
1582
|
-
}
|
|
1583
|
-
];
|
|
1584
|
-
}
|
|
1585
|
-
if (currentScreen === "apiKey") {
|
|
1586
|
-
const providerLabel = getProviderLabel(selectedProvider, 0).split(" (")[0];
|
|
1587
|
-
const apiKeyUrls = {
|
|
1588
|
-
kimi: "https://platform.moonshot.cn/console/api-keys",
|
|
1589
|
-
deepseek: "https://platform.deepseek.com/api_keys",
|
|
1590
|
-
siliconflow: "https://cloud.siliconflow.cn/i/oJWsm6io",
|
|
1591
|
-
qwen: "https://bailian.console.aliyun.com/?tab=model#/api-key",
|
|
1592
|
-
glm: "https://open.bigmodel.cn (API Keys section)",
|
|
1593
|
-
minimax: "https://www.minimax.io/platform/user-center/basic-information",
|
|
1594
|
-
"baidu-qianfan": "https://console.bce.baidu.com/iam/#/iam/accesslist",
|
|
1595
|
-
openai: "https://platform.openai.com/api-keys"
|
|
1596
|
-
};
|
|
1597
|
-
let apiKeyUrl = apiKeyUrls[selectedProvider] || "";
|
|
1598
|
-
if (selectedProvider === "anthropic") {
|
|
1599
|
-
apiKeyUrl = anthropicProviderType === "official" ? "https://console.anthropic.com/settings/keys" : anthropicProviderType === "bigdream" ? "https://api-key.info/register?aff=MSl4" : anthropicProviderType === "opendev" ? "https://api.openai-next.com/register/?aff_code=4xo7" : "your custom API provider";
|
|
1600
|
-
}
|
|
1601
|
-
const supportsManualInput = selectedProvider === "anthropic" || selectedProvider === "kimi" || selectedProvider === "deepseek" || selectedProvider === "qwen" || selectedProvider === "glm" || selectedProvider === "minimax" || selectedProvider === "baidu-qianfan" || selectedProvider === "siliconflow" || selectedProvider === "custom-openai";
|
|
1602
|
-
const tabHintText = supportsManualInput ? t("modelSelector.apiKeyTabHintManual") : t("modelSelector.apiKeyTabHintSkip");
|
|
1603
|
-
const apiKeyHint = apiKeyUrl ? /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Get your API key from:", " ", /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.info }, apiKeyUrl)) : void 0;
|
|
1604
|
-
return /* @__PURE__ */ React.createElement(
|
|
1605
|
-
BrandTextInput,
|
|
1606
|
-
{
|
|
1607
|
-
title: `${t("modelSelector.apiKeyTitle")} \u2014 ${providerLabel}`,
|
|
1608
|
-
description: t("modelSelector.apiKeyDesc"),
|
|
1609
|
-
placeholder: "sk-...",
|
|
1610
|
-
value: apiKey,
|
|
1611
|
-
onChange: handleApiKeyChange,
|
|
1612
|
-
onSubmit: handleApiKeySubmit,
|
|
1613
|
-
mask: "*",
|
|
1614
|
-
error: modelLoadError ? `Error: ${modelLoadError}` : null,
|
|
1615
|
-
isLoading: isLoadingModels,
|
|
1616
|
-
loadingText: "Loading available models...",
|
|
1617
|
-
hint: apiKeyHint,
|
|
1618
|
-
footerHint: `Enter continue \xB7 Tab ${tabHintText} \xB7 Esc back`,
|
|
1619
|
-
cursorOffset,
|
|
1620
|
-
onChangeCursorOffset: handleCursorOffsetChange
|
|
1621
|
-
}
|
|
1622
|
-
);
|
|
1623
|
-
}
|
|
1624
|
-
if (currentScreen === "model") {
|
|
1625
|
-
const providerLabel = getProviderLabel(
|
|
1626
|
-
selectedProvider,
|
|
1627
|
-
availableModels.length
|
|
1628
|
-
).split(" (")[0];
|
|
1629
|
-
const modelSelectorItems = modelOptions.map((opt) => ({
|
|
1630
|
-
id: opt.value,
|
|
1631
|
-
label: opt.label
|
|
1632
|
-
}));
|
|
1633
|
-
const subtitle = modelOptions.length > 0 ? `${modelOptions.length}/${availableModels.length} models` : availableModels.length > 0 ? t("modelSelector.noModelsMatch") : t("modelSelector.noModelsAvailable");
|
|
1634
|
-
return /* @__PURE__ */ React.createElement(
|
|
1635
|
-
SimpleSelector,
|
|
1636
|
-
{
|
|
1637
|
-
title: `${t("modelSelector.modelSelectionTitle")} \u2014 ${providerLabel}`,
|
|
1638
|
-
subtitle,
|
|
1639
|
-
items: modelSelectorItems,
|
|
1640
|
-
onSelect: (item) => handleModelSelection(item.id),
|
|
1641
|
-
onClose: handleBack
|
|
1642
|
-
}
|
|
1643
|
-
);
|
|
1644
|
-
}
|
|
1645
|
-
if (currentScreen === "modelParams") {
|
|
1646
|
-
const formFields = getFormFieldsForModelParams();
|
|
1647
|
-
const currentField = formFields[activeFieldIndex];
|
|
1648
|
-
if (currentField?.name === "maxTokens") {
|
|
1649
|
-
const maxTokensItems = MAX_TOKENS_OPTIONS.map((opt) => ({
|
|
1650
|
-
id: opt.value.toString(),
|
|
1651
|
-
label: opt.label,
|
|
1652
|
-
isCurrent: opt.value === parseInt(maxTokens)
|
|
1653
|
-
}));
|
|
1654
|
-
return /* @__PURE__ */ React.createElement(
|
|
1655
|
-
SimpleSelector,
|
|
1656
|
-
{
|
|
1657
|
-
title: `${t("modelSelector.modelParamsTitle")} \u2014 ${t("modelSelector.maxTokens")}`,
|
|
1658
|
-
subtitle: selectedModel,
|
|
1659
|
-
items: maxTokensItems,
|
|
1660
|
-
onSelect: (item) => {
|
|
1661
|
-
const numValue = parseInt(item.id);
|
|
1662
|
-
setMaxTokens(numValue.toString());
|
|
1663
|
-
setSelectedMaxTokensPreset(numValue);
|
|
1664
|
-
setMaxTokensCursorOffset(numValue.toString().length);
|
|
1665
|
-
setActiveFieldIndex(activeFieldIndex + 1);
|
|
1666
|
-
},
|
|
1667
|
-
onClose: handleBack
|
|
1668
|
-
}
|
|
1669
|
-
);
|
|
1670
|
-
}
|
|
1671
|
-
if (currentField?.name === "reasoningEffort") {
|
|
1672
|
-
const effortItems = reasoningEffortOptions.map((opt) => ({
|
|
1673
|
-
id: opt.value,
|
|
1674
|
-
label: opt.label,
|
|
1675
|
-
isCurrent: opt.value === reasoningEffort
|
|
1676
|
-
}));
|
|
1677
|
-
return /* @__PURE__ */ React.createElement(
|
|
1678
|
-
SimpleSelector,
|
|
1679
|
-
{
|
|
1680
|
-
title: `${t("modelSelector.modelParamsTitle")} \u2014 ${t("modelSelector.reasoningEffort")}`,
|
|
1681
|
-
subtitle: selectedModel,
|
|
1682
|
-
items: effortItems,
|
|
1683
|
-
onSelect: (item) => {
|
|
1684
|
-
setReasoningEffort(item.id);
|
|
1685
|
-
setActiveFieldIndex(activeFieldIndex + 1);
|
|
1686
|
-
},
|
|
1687
|
-
onClose: () => {
|
|
1688
|
-
setActiveFieldIndex(0);
|
|
1689
|
-
}
|
|
1690
|
-
}
|
|
1691
|
-
);
|
|
1692
|
-
}
|
|
1693
|
-
return null;
|
|
1694
|
-
}
|
|
1695
|
-
if (currentScreen === "resourceName") {
|
|
1696
|
-
return /* @__PURE__ */ React.createElement(
|
|
1697
|
-
BrandTextInput,
|
|
1698
|
-
{
|
|
1699
|
-
title: t("modelSelector.resourceNameTitle"),
|
|
1700
|
-
description: t("modelSelector.resourceNameDesc"),
|
|
1701
|
-
placeholder: "myazureresource",
|
|
1702
|
-
value: resourceName,
|
|
1703
|
-
onChange: setResourceName,
|
|
1704
|
-
onSubmit: handleResourceNameSubmit,
|
|
1705
|
-
footerHint: t("modelSelector.footerEnterContinue"),
|
|
1706
|
-
cursorOffset: resourceNameCursorOffset,
|
|
1707
|
-
onChangeCursorOffset: setResourceNameCursorOffset
|
|
1708
|
-
}
|
|
1709
|
-
);
|
|
1710
|
-
}
|
|
1711
|
-
if (currentScreen === "baseUrl") {
|
|
1712
|
-
const isCustomOpenAI = selectedProvider === "custom-openai";
|
|
1713
|
-
if (isCustomOpenAI) {
|
|
1714
|
-
return /* @__PURE__ */ React.createElement(
|
|
1715
|
-
BrandTextInput,
|
|
1716
|
-
{
|
|
1717
|
-
title: t("modelSelector.customApiTitle"),
|
|
1718
|
-
description: t("modelSelector.customApiDesc"),
|
|
1719
|
-
placeholder: "https://api.example.com/v1",
|
|
1720
|
-
value: customBaseUrl,
|
|
1721
|
-
onChange: setCustomBaseUrl,
|
|
1722
|
-
onSubmit: handleCustomBaseUrlSubmit,
|
|
1723
|
-
isLoading: isLoadingModels,
|
|
1724
|
-
loadingText: "Connecting...",
|
|
1725
|
-
error: modelLoadError ? `Error: ${modelLoadError}` : null,
|
|
1726
|
-
footerHint: t("modelSelector.footerEnterContinue"),
|
|
1727
|
-
cursorOffset: customBaseUrlCursorOffset,
|
|
1728
|
-
onChangeCursorOffset: setCustomBaseUrlCursorOffset
|
|
1729
|
-
}
|
|
1730
|
-
);
|
|
1731
|
-
}
|
|
1732
|
-
const providerName = providers[selectedProvider]?.name || selectedProvider;
|
|
1733
|
-
const defaultUrl = providers[selectedProvider]?.baseURL || "";
|
|
1734
|
-
const desc = selectedProvider === "ollama" ? t("modelSelector.baseUrlOllamaDesc") : `${t("modelSelector.baseUrlDesc")} You can modify this URL or press Enter to use the default.`;
|
|
1735
|
-
return /* @__PURE__ */ React.createElement(
|
|
1736
|
-
BrandTextInput,
|
|
1737
|
-
{
|
|
1738
|
-
title: `${t("modelSelector.baseUrlTitle")} \u2014 ${providerName}`,
|
|
1739
|
-
description: desc,
|
|
1740
|
-
placeholder: defaultUrl,
|
|
1741
|
-
value: providerBaseUrl,
|
|
1742
|
-
onChange: setProviderBaseUrl,
|
|
1743
|
-
onSubmit: handleProviderBaseUrlSubmit,
|
|
1744
|
-
isLoading: isLoadingModels,
|
|
1745
|
-
loadingText: selectedProvider === "ollama" ? "Connecting to Ollama server..." : `Connecting to ${providerName}...`,
|
|
1746
|
-
error: modelLoadError ? `Error: ${modelLoadError}` : null,
|
|
1747
|
-
footerHint: t("modelSelector.footerEnterContinue"),
|
|
1748
|
-
cursorOffset: providerBaseUrlCursorOffset,
|
|
1749
|
-
onChangeCursorOffset: setProviderBaseUrlCursorOffset
|
|
1750
|
-
}
|
|
1751
|
-
);
|
|
1752
|
-
}
|
|
1753
|
-
if (currentScreen === "modelInput") {
|
|
1754
|
-
const modelInputConfig = {
|
|
1755
|
-
azure: {
|
|
1756
|
-
title: "Azure Model Setup",
|
|
1757
|
-
placeholder: "gpt-4",
|
|
1758
|
-
examples: 'e.g. "gpt-4", "gpt-35-turbo"'
|
|
1759
|
-
},
|
|
1760
|
-
anthropic: {
|
|
1761
|
-
title: "Claude Model Setup",
|
|
1762
|
-
placeholder: "claude-3-5-sonnet-latest",
|
|
1763
|
-
examples: 'e.g. "claude-3-5-sonnet-latest", "claude-3-5-haiku-latest"'
|
|
1764
|
-
},
|
|
1765
|
-
bigdream: {
|
|
1766
|
-
title: "BigDream Model Setup",
|
|
1767
|
-
placeholder: "claude-3-5-sonnet-latest",
|
|
1768
|
-
examples: 'e.g. "claude-3-5-sonnet-latest", "claude-3-5-haiku-latest"'
|
|
1769
|
-
},
|
|
1770
|
-
kimi: {
|
|
1771
|
-
title: "Kimi Model Setup",
|
|
1772
|
-
placeholder: "kimi-k2-0711-preview",
|
|
1773
|
-
examples: 'e.g. "kimi-k2-0711-preview"'
|
|
1774
|
-
},
|
|
1775
|
-
deepseek: {
|
|
1776
|
-
title: "DeepSeek Model Setup",
|
|
1777
|
-
placeholder: "deepseek-chat",
|
|
1778
|
-
examples: 'e.g. "deepseek-chat", "deepseek-coder", "deepseek-reasoner"'
|
|
1779
|
-
},
|
|
1780
|
-
siliconflow: {
|
|
1781
|
-
title: "SiliconFlow Model Setup",
|
|
1782
|
-
placeholder: "Qwen/Qwen2.5-72B-Instruct",
|
|
1783
|
-
examples: 'e.g. "Qwen/Qwen2.5-72B-Instruct"'
|
|
1784
|
-
},
|
|
1785
|
-
qwen: {
|
|
1786
|
-
title: "Qwen Model Setup",
|
|
1787
|
-
placeholder: "qwen-plus",
|
|
1788
|
-
examples: 'e.g. "qwen-plus", "qwen-turbo", "qwen-max"'
|
|
1789
|
-
},
|
|
1790
|
-
glm: {
|
|
1791
|
-
title: "GLM Model Setup",
|
|
1792
|
-
placeholder: "glm-4",
|
|
1793
|
-
examples: 'e.g. "glm-4", "glm-4v", "glm-3-turbo"'
|
|
1794
|
-
},
|
|
1795
|
-
minimax: {
|
|
1796
|
-
title: "MiniMax Model Setup",
|
|
1797
|
-
placeholder: "abab6.5s-chat",
|
|
1798
|
-
examples: 'e.g. "abab6.5s-chat", "abab6.5g-chat"'
|
|
1799
|
-
},
|
|
1800
|
-
"baidu-qianfan": {
|
|
1801
|
-
title: "Baidu Qianfan Model Setup",
|
|
1802
|
-
placeholder: "ERNIE-4.0-8K",
|
|
1803
|
-
examples: 'e.g. "ERNIE-4.0-8K", "ERNIE-3.5-8K"'
|
|
1804
|
-
},
|
|
1805
|
-
"custom-openai": {
|
|
1806
|
-
title: "Custom API Model Setup",
|
|
1807
|
-
placeholder: "model-name",
|
|
1808
|
-
examples: "Enter the exact model name supported by your API endpoint."
|
|
1809
|
-
}
|
|
1810
|
-
};
|
|
1811
|
-
const cfg = modelInputConfig[selectedProvider] || {
|
|
1812
|
-
title: t("modelSelector.modelInputTitle"),
|
|
1813
|
-
placeholder: "gpt-4",
|
|
1814
|
-
examples: 'e.g. "gpt-4", "gpt-3.5-turbo"'
|
|
1815
|
-
};
|
|
1816
|
-
return /* @__PURE__ */ React.createElement(
|
|
1817
|
-
BrandTextInput,
|
|
1818
|
-
{
|
|
1819
|
-
title: cfg.title,
|
|
1820
|
-
description: cfg.examples,
|
|
1821
|
-
placeholder: cfg.placeholder,
|
|
1822
|
-
value: customModelName,
|
|
1823
|
-
onChange: setCustomModelName,
|
|
1824
|
-
onSubmit: handleCustomModelSubmit,
|
|
1825
|
-
footerHint: t("modelSelector.footerEnterContinue"),
|
|
1826
|
-
cursorOffset: customModelNameCursorOffset,
|
|
1827
|
-
onChangeCursorOffset: setCustomModelNameCursorOffset
|
|
1828
|
-
}
|
|
1829
|
-
);
|
|
1830
|
-
}
|
|
1831
|
-
if (currentScreen === "contextLength") {
|
|
1832
|
-
const contextItems = CONTEXT_LENGTH_OPTIONS.map((opt) => ({
|
|
1833
|
-
id: opt.value.toString(),
|
|
1834
|
-
label: opt.value === DEFAULT_CONTEXT_LENGTH ? `${opt.label} (${t("modelSelector.recommended")})` : opt.label,
|
|
1835
|
-
isCurrent: opt.value === contextLength
|
|
1836
|
-
}));
|
|
1837
|
-
return /* @__PURE__ */ React.createElement(
|
|
1838
|
-
SimpleSelector,
|
|
1839
|
-
{
|
|
1840
|
-
title: t("modelSelector.contextLengthTitle"),
|
|
1841
|
-
subtitle: t("modelSelector.contextLengthDesc"),
|
|
1842
|
-
items: contextItems,
|
|
1843
|
-
onSelect: (item) => {
|
|
1844
|
-
setContextLength(parseInt(item.id));
|
|
1845
|
-
handleContextLengthSubmit();
|
|
1846
|
-
},
|
|
1847
|
-
onClose: handleBack
|
|
1848
|
-
}
|
|
1849
|
-
);
|
|
1850
|
-
}
|
|
1851
|
-
if (currentScreen === "testAndSave") {
|
|
1852
|
-
const providerDisplayName = getProviderLabel(selectedProvider, 0).split(
|
|
1853
|
-
" ("
|
|
1854
|
-
)[0];
|
|
1855
|
-
const showsApiKey = selectedProvider !== "ollama";
|
|
1856
|
-
const contextLengthLabel = CONTEXT_LENGTH_OPTIONS.find((opt) => opt.value === contextLength)?.label || `${contextLength.toLocaleString()} tokens`;
|
|
1857
|
-
if (isEditMode) {
|
|
1858
|
-
const editItems = [];
|
|
1859
|
-
if (showsApiKey) {
|
|
1860
|
-
editItems.push({
|
|
1861
|
-
id: "__edit_apiKey__",
|
|
1862
|
-
label: "API Key",
|
|
1863
|
-
description: apiKey ? `****${apiKey.slice(-4)}` : "(not set)",
|
|
1864
|
-
category: t("modelSelector.testAndSaveDesc")
|
|
1865
|
-
});
|
|
1866
|
-
}
|
|
1867
|
-
if (selectedProvider === "custom-openai" || providerBaseUrl !== providers[selectedProvider]?.baseURL) {
|
|
1868
|
-
editItems.push({
|
|
1869
|
-
id: "__edit_baseUrl__",
|
|
1870
|
-
label: "Base URL",
|
|
1871
|
-
description: providerBaseUrl || customBaseUrl || "(not set)",
|
|
1872
|
-
category: t("modelSelector.testAndSaveDesc")
|
|
1873
|
-
});
|
|
1874
|
-
}
|
|
1875
|
-
editItems.push({
|
|
1876
|
-
id: "__edit_modelParams__",
|
|
1877
|
-
label: "Max Tokens",
|
|
1878
|
-
description: maxTokens,
|
|
1879
|
-
category: t("modelSelector.testAndSaveDesc")
|
|
1880
|
-
});
|
|
1881
|
-
editItems.push({
|
|
1882
|
-
id: "__edit_contextLength__",
|
|
1883
|
-
label: "Context Length",
|
|
1884
|
-
description: contextLengthLabel,
|
|
1885
|
-
category: t("modelSelector.testAndSaveDesc")
|
|
1886
|
-
});
|
|
1887
|
-
if (connectionTestResult) {
|
|
1888
|
-
editItems.push({
|
|
1889
|
-
id: "__test_status__",
|
|
1890
|
-
label: "Connection",
|
|
1891
|
-
description: connectionTestResult.message,
|
|
1892
|
-
statusIcon: connectionTestResult.success ? "\u2713" : "\u2715",
|
|
1893
|
-
statusColor: connectionTestResult.success ? SEMANTIC_COLORS.success : SEMANTIC_COLORS.error,
|
|
1894
|
-
category: t("modelSelector.testAndSaveDesc")
|
|
1895
|
-
});
|
|
1896
|
-
}
|
|
1897
|
-
editItems.push({
|
|
1898
|
-
id: "__save__",
|
|
1899
|
-
label: t("modelSelector.confirmationSave"),
|
|
1900
|
-
category: t("commands.model.actionsCategory"),
|
|
1901
|
-
statusIcon: "\u2713",
|
|
1902
|
-
statusColor: SEMANTIC_COLORS.success
|
|
1903
|
-
});
|
|
1904
|
-
editItems.push({
|
|
1905
|
-
id: "__test__",
|
|
1906
|
-
label: t("modelSelector.connectionTestRetry"),
|
|
1907
|
-
category: t("commands.model.actionsCategory")
|
|
1908
|
-
});
|
|
1909
|
-
const editTitle = t("commands.model.editTitle").replace(
|
|
1910
|
-
"{model}",
|
|
1911
|
-
editingModel?.name ?? selectedModel
|
|
1912
|
-
);
|
|
1913
|
-
const editOverlay = isTestingConnection ? {
|
|
1914
|
-
type: "loading",
|
|
1915
|
-
message: t("modelSelector.autoTesting")
|
|
1916
|
-
} : validationError ? { type: "error", message: validationError } : null;
|
|
1917
|
-
return /* @__PURE__ */ React.createElement(
|
|
1918
|
-
SimpleSelector,
|
|
1919
|
-
{
|
|
1920
|
-
title: editTitle,
|
|
1921
|
-
items: editItems,
|
|
1922
|
-
groupByCategory: true,
|
|
1923
|
-
onSelect: (item) => {
|
|
1924
|
-
if (item.id === "__edit_apiKey__") {
|
|
1925
|
-
navigateTo("apiKey");
|
|
1926
|
-
} else if (item.id === "__edit_baseUrl__") {
|
|
1927
|
-
navigateTo("baseUrl");
|
|
1928
|
-
} else if (item.id === "__edit_modelParams__") {
|
|
1929
|
-
setActiveFieldIndex(0);
|
|
1930
|
-
navigateTo("modelParams");
|
|
1931
|
-
} else if (item.id === "__edit_contextLength__") {
|
|
1932
|
-
navigateTo("contextLength");
|
|
1933
|
-
} else if (item.id === "__save__") {
|
|
1934
|
-
handleConfirmation().catch((error) => {
|
|
1935
|
-
setValidationError(
|
|
1936
|
-
error instanceof Error ? error.message : "Unexpected error occurred"
|
|
1937
|
-
);
|
|
1938
|
-
});
|
|
1939
|
-
} else if (item.id === "__test__") {
|
|
1940
|
-
setConnectionTestResult(null);
|
|
1941
|
-
handleConnectionTest();
|
|
1942
|
-
}
|
|
1943
|
-
},
|
|
1944
|
-
onClose: handleBack,
|
|
1945
|
-
statusOverlay: editOverlay
|
|
1946
|
-
}
|
|
1947
|
-
);
|
|
1948
|
-
}
|
|
1949
|
-
const configItems = [
|
|
1950
|
-
{ label: "Provider", value: providerDisplayName },
|
|
1951
|
-
...selectedProvider === "azure" ? [{ label: "Resource Name", value: resourceName }] : [],
|
|
1952
|
-
...selectedProvider === "ollama" ? [{ label: "Server URL", value: ollamaBaseUrl }] : [],
|
|
1953
|
-
...selectedProvider === "custom-openai" ? [{ label: "API Base URL", value: customBaseUrl }] : [],
|
|
1954
|
-
{ label: "Model", value: selectedModel },
|
|
1955
|
-
...apiKey && showsApiKey ? [{ label: "API Key", value: `****${apiKey.slice(-4)}` }] : [],
|
|
1956
|
-
...maxTokens ? [{ label: "Max Tokens", value: maxTokens }] : [],
|
|
1957
|
-
{ label: "Context Length", value: contextLengthLabel },
|
|
1958
|
-
...supportsReasoningEffort ? [{ label: "Reasoning Effort", value: reasoningEffort }] : []
|
|
1959
|
-
];
|
|
1960
|
-
if (connectionTestResult) {
|
|
1961
|
-
configItems.push({
|
|
1962
|
-
label: "Connection",
|
|
1963
|
-
value: connectionTestResult.message,
|
|
1964
|
-
valueColor: connectionTestResult.success ? SEMANTIC_COLORS.success : SEMANTIC_COLORS.error
|
|
1965
|
-
});
|
|
1966
|
-
if (connectionTestResult.details && !connectionTestResult.success) {
|
|
1967
|
-
configItems.push({
|
|
1968
|
-
label: "Details",
|
|
1969
|
-
value: connectionTestResult.details
|
|
1970
|
-
});
|
|
1971
|
-
}
|
|
1972
|
-
}
|
|
1973
|
-
const testAndSaveSections = [
|
|
1974
|
-
{
|
|
1975
|
-
title: t("modelSelector.testAndSaveDesc"),
|
|
1976
|
-
items: configItems
|
|
1977
|
-
}
|
|
1978
|
-
];
|
|
1979
|
-
if (validationError) {
|
|
1980
|
-
testAndSaveSections.unshift({
|
|
1981
|
-
title: t("modelSelector.configError"),
|
|
1982
|
-
items: [
|
|
1983
|
-
{
|
|
1984
|
-
label: "Error",
|
|
1985
|
-
value: validationError,
|
|
1986
|
-
valueColor: SEMANTIC_COLORS.error
|
|
1987
|
-
}
|
|
1988
|
-
]
|
|
1989
|
-
});
|
|
1990
|
-
}
|
|
1991
|
-
const testAndSaveActions = [];
|
|
1992
|
-
if (connectionTestResult?.success) {
|
|
1993
|
-
testAndSaveActions.push({
|
|
1994
|
-
key: "return",
|
|
1995
|
-
keyLabel: "Enter",
|
|
1996
|
-
description: t("modelSelector.confirmationSave"),
|
|
1997
|
-
onPress: () => {
|
|
1998
|
-
handleConfirmation().catch((error) => {
|
|
1999
|
-
setValidationError(
|
|
2000
|
-
error instanceof Error ? error.message : "Unexpected error occurred"
|
|
2001
|
-
);
|
|
2002
|
-
});
|
|
2003
|
-
}
|
|
2004
|
-
});
|
|
2005
|
-
} else if (connectionTestResult && !connectionTestResult.success) {
|
|
2006
|
-
testAndSaveActions.push({
|
|
2007
|
-
key: "return",
|
|
2008
|
-
keyLabel: "Enter",
|
|
2009
|
-
description: t("modelSelector.connectionTestRetry"),
|
|
2010
|
-
onPress: () => {
|
|
2011
|
-
setConnectionTestResult(null);
|
|
2012
|
-
handleConnectionTest();
|
|
2013
|
-
}
|
|
2014
|
-
});
|
|
2015
|
-
testAndSaveActions.push({
|
|
2016
|
-
key: "s",
|
|
2017
|
-
keyLabel: "s",
|
|
2018
|
-
description: t("modelSelector.saveAnyway"),
|
|
2019
|
-
onPress: () => {
|
|
2020
|
-
handleConfirmation().catch((error) => {
|
|
2021
|
-
setValidationError(
|
|
2022
|
-
error instanceof Error ? error.message : "Unexpected error occurred"
|
|
2023
|
-
);
|
|
2024
|
-
});
|
|
2025
|
-
}
|
|
2026
|
-
});
|
|
2027
|
-
}
|
|
2028
|
-
const testAndSaveOverlay = isTestingConnection ? {
|
|
2029
|
-
type: "loading",
|
|
2030
|
-
message: t("modelSelector.autoTesting")
|
|
2031
|
-
} : null;
|
|
2032
|
-
return /* @__PURE__ */ React.createElement(
|
|
2033
|
-
InfoPanel,
|
|
2034
|
-
{
|
|
2035
|
-
title: t("modelSelector.testAndSaveTitle"),
|
|
2036
|
-
sections: testAndSaveSections,
|
|
2037
|
-
actions: testAndSaveActions,
|
|
2038
|
-
onClose: handleBack,
|
|
2039
|
-
statusOverlay: testAndSaveOverlay
|
|
2040
|
-
}
|
|
2041
|
-
);
|
|
2042
|
-
}
|
|
2043
|
-
if (currentScreen === "anthropicSubMenu") {
|
|
2044
|
-
const anthropicItems = [
|
|
2045
|
-
{
|
|
2046
|
-
id: "official",
|
|
2047
|
-
label: t("modelSelector.anthropicOfficial"),
|
|
2048
|
-
description: t("modelSelector.anthropicOfficialDesc")
|
|
2049
|
-
},
|
|
2050
|
-
{
|
|
2051
|
-
id: "bigdream",
|
|
2052
|
-
label: t("modelSelector.anthropicBigdream"),
|
|
2053
|
-
description: t("modelSelector.anthropicBigdreamDesc")
|
|
2054
|
-
},
|
|
2055
|
-
{
|
|
2056
|
-
id: "opendev",
|
|
2057
|
-
label: t("modelSelector.anthropicOpendev"),
|
|
2058
|
-
description: t("modelSelector.anthropicOpendevDesc")
|
|
2059
|
-
},
|
|
2060
|
-
{
|
|
2061
|
-
id: "custom",
|
|
2062
|
-
label: t("modelSelector.anthropicCustom"),
|
|
2063
|
-
description: t("modelSelector.anthropicCustomDesc")
|
|
2064
|
-
}
|
|
2065
|
-
];
|
|
2066
|
-
return /* @__PURE__ */ React.createElement(
|
|
2067
|
-
SimpleSelector,
|
|
2068
|
-
{
|
|
2069
|
-
title: t("modelSelector.anthropicSubMenu"),
|
|
2070
|
-
subtitle: t("modelSelector.anthropicSubMenuDesc"),
|
|
2071
|
-
items: anthropicItems,
|
|
2072
|
-
onSelect: (item) => handleAnthropicProviderSelection(
|
|
2073
|
-
item.id
|
|
2074
|
-
),
|
|
2075
|
-
onClose: handleBack
|
|
2076
|
-
}
|
|
2077
|
-
);
|
|
2078
|
-
}
|
|
2079
|
-
const providerSelectorItems = providerOptions.map((opt) => ({
|
|
2080
|
-
id: opt.value,
|
|
2081
|
-
label: opt.label
|
|
2082
|
-
}));
|
|
2083
|
-
return /* @__PURE__ */ React.createElement(
|
|
2084
|
-
SimpleSelector,
|
|
2085
|
-
{
|
|
2086
|
-
title: t("modelSelector.providerSelection"),
|
|
2087
|
-
subtitle: t("modelSelector.providerSelectionDesc"),
|
|
2088
|
-
items: providerSelectorItems,
|
|
2089
|
-
onSelect: (item) => handleProviderSelection(item.id),
|
|
2090
|
-
onClose: () => {
|
|
2091
|
-
if (onCancel) {
|
|
2092
|
-
onCancel();
|
|
2093
|
-
} else {
|
|
2094
|
-
onDone();
|
|
2095
|
-
}
|
|
2096
|
-
}
|
|
2097
|
-
}
|
|
2098
|
-
);
|
|
2099
|
-
}
|
|
2100
|
-
export {
|
|
2101
|
-
ModelSelector
|
|
2102
|
-
};
|
|
2103
|
-
//# sourceMappingURL=ModelSelector.js.map
|