fss-link 1.0.49 → 1.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -0
- package/dist/package.json +2 -2
- package/dist/src/config/auth.js +8 -5
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/database.d.ts +103 -11
- package/dist/src/config/database.js +301 -59
- package/dist/src/config/database.js.map +1 -1
- package/dist/src/config/databaseBackup.d.ts +114 -0
- package/dist/src/config/databaseBackup.js +334 -0
- package/dist/src/config/databaseBackup.js.map +1 -0
- package/dist/src/config/databaseMigrations.d.ts +63 -0
- package/dist/src/config/databaseMigrations.js +379 -0
- package/dist/src/config/databaseMigrations.js.map +1 -0
- package/dist/src/config/databasePool.d.ts +70 -0
- package/dist/src/config/databasePool.js +193 -0
- package/dist/src/config/databasePool.js.map +1 -0
- package/dist/src/config/queryOptimizer.d.ts +127 -0
- package/dist/src/config/queryOptimizer.js +309 -0
- package/dist/src/config/queryOptimizer.js.map +1 -0
- package/dist/src/utils/sandbox.js +2 -8
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.js +3 -7
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/commands/mcp/add.test.ts +0 -122
- package/dist/commands/mcp/add.ts +0 -222
- package/dist/commands/mcp/list.test.ts +0 -154
- package/dist/commands/mcp/list.ts +0 -139
- package/dist/commands/mcp/remove.test.ts +0 -69
- package/dist/commands/mcp/remove.ts +0 -60
- package/dist/commands/mcp.test.ts +0 -55
- package/dist/commands/mcp.ts +0 -27
- package/dist/config/apiValidation.test.ts +0 -118
- package/dist/config/auth.test.ts +0 -79
- package/dist/config/auth.ts +0 -100
- package/dist/config/config.integration.test.ts +0 -407
- package/dist/config/config.test.ts +0 -1952
- package/dist/config/config.ts +0 -690
- package/dist/config/database.test.ts +0 -96
- package/dist/config/database.ts +0 -824
- package/dist/config/extension.test.ts +0 -236
- package/dist/config/extension.ts +0 -180
- package/dist/config/keyBindings.test.ts +0 -62
- package/dist/config/keyBindings.ts +0 -184
- package/dist/config/modelManager.ts +0 -326
- package/dist/config/providerManager.ts +0 -244
- package/dist/config/providerPersistence.test.ts +0 -377
- package/dist/config/providerPersistence.ts +0 -105
- package/dist/config/sandboxConfig.ts +0 -107
- package/dist/config/settings.test.ts +0 -1424
- package/dist/config/settings.ts +0 -517
- package/dist/config/settingsSchema.test.ts +0 -252
- package/dist/config/settingsSchema.ts +0 -728
- package/dist/config/trustedFolders.test.ts +0 -208
- package/dist/config/trustedFolders.ts +0 -167
- package/dist/gemini.test.tsx +0 -252
- package/dist/gemini.tsx +0 -357
- package/dist/generated/git-commit.ts +0 -10
- package/dist/index.ts +0 -21
- package/dist/nonInteractiveCli.test.ts +0 -276
- package/dist/nonInteractiveCli.ts +0 -143
- package/dist/patches/is-in-ci.ts +0 -17
- package/dist/services/BuiltinCommandLoader.test.ts +0 -127
- package/dist/services/BuiltinCommandLoader.ts +0 -95
- package/dist/services/CommandService.test.ts +0 -352
- package/dist/services/CommandService.ts +0 -103
- package/dist/services/FileCommandLoader.test.ts +0 -1002
- package/dist/services/FileCommandLoader.ts +0 -289
- package/dist/services/McpPromptLoader.ts +0 -231
- package/dist/services/SearchEngineConfigProvider.ts +0 -100
- package/dist/services/prompt-processors/argumentProcessor.test.ts +0 -41
- package/dist/services/prompt-processors/argumentProcessor.ts +0 -23
- package/dist/services/prompt-processors/shellProcessor.test.ts +0 -709
- package/dist/services/prompt-processors/shellProcessor.ts +0 -248
- package/dist/services/prompt-processors/types.ts +0 -44
- package/dist/services/types.ts +0 -24
- package/dist/src/config/apiValidation.test.d.ts +0 -6
- package/dist/src/config/apiValidation.test.js +0 -99
- package/dist/src/config/apiValidation.test.js.map +0 -1
- package/dist/src/config/database.test.d.ts +0 -6
- package/dist/src/config/database.test.js +0 -80
- package/dist/src/config/database.test.js.map +0 -1
- package/dist/src/config/providerManager.d.ts +0 -74
- package/dist/src/config/providerManager.js +0 -203
- package/dist/src/config/providerManager.js.map +0 -1
- package/dist/src/config/providerPersistence.test.d.ts +0 -6
- package/dist/src/config/providerPersistence.test.js +0 -283
- package/dist/src/config/providerPersistence.test.js.map +0 -1
- package/dist/src/ui/components/GeminiKeyDialog.d.ts +0 -11
- package/dist/src/ui/components/GeminiKeyDialog.js +0 -156
- package/dist/src/ui/components/GeminiKeyDialog.js.map +0 -1
- package/dist/src/ui/components/OpenAIEndpointDialog.d.ts +0 -19
- package/dist/src/ui/components/OpenAIEndpointDialog.js +0 -163
- package/dist/src/ui/components/OpenAIEndpointDialog.js.map +0 -1
- package/dist/test-setup.ts +0 -12
- package/dist/test-utils/customMatchers.ts +0 -65
- package/dist/test-utils/mockCommandContext.test.ts +0 -62
- package/dist/test-utils/mockCommandContext.ts +0 -105
- package/dist/test-utils/render.tsx +0 -18
- package/dist/ui/App.test.tsx +0 -2181
- package/dist/ui/App.tsx +0 -1344
- package/dist/ui/IdeIntegrationNudge.tsx +0 -98
- package/dist/ui/__snapshots__/App.test.tsx.snap +0 -124
- package/dist/ui/colors.ts +0 -56
- package/dist/ui/commands/aboutCommand.test.ts +0 -153
- package/dist/ui/commands/aboutCommand.ts +0 -49
- package/dist/ui/commands/authCommand.test.ts +0 -36
- package/dist/ui/commands/authCommand.ts +0 -17
- package/dist/ui/commands/bugCommand.test.ts +0 -114
- package/dist/ui/commands/bugCommand.ts +0 -92
- package/dist/ui/commands/chatCommand.test.ts +0 -414
- package/dist/ui/commands/chatCommand.ts +0 -280
- package/dist/ui/commands/clearCommand.test.ts +0 -100
- package/dist/ui/commands/clearCommand.ts +0 -29
- package/dist/ui/commands/compressCommand.test.ts +0 -129
- package/dist/ui/commands/compressCommand.ts +0 -78
- package/dist/ui/commands/contextCommand.ts +0 -132
- package/dist/ui/commands/copyCommand.test.ts +0 -296
- package/dist/ui/commands/copyCommand.ts +0 -67
- package/dist/ui/commands/corgiCommand.test.ts +0 -34
- package/dist/ui/commands/corgiCommand.ts +0 -16
- package/dist/ui/commands/directoryCommand.test.tsx +0 -185
- package/dist/ui/commands/directoryCommand.tsx +0 -179
- package/dist/ui/commands/docsCommand.test.ts +0 -99
- package/dist/ui/commands/docsCommand.ts +0 -42
- package/dist/ui/commands/editorCommand.test.ts +0 -30
- package/dist/ui/commands/editorCommand.ts +0 -21
- package/dist/ui/commands/extensionsCommand.test.ts +0 -67
- package/dist/ui/commands/extensionsCommand.ts +0 -46
- package/dist/ui/commands/helpCommand.test.ts +0 -52
- package/dist/ui/commands/helpCommand.ts +0 -23
- package/dist/ui/commands/ideCommand.test.ts +0 -255
- package/dist/ui/commands/ideCommand.ts +0 -283
- package/dist/ui/commands/initCommand.test.ts +0 -127
- package/dist/ui/commands/initCommand.ts +0 -117
- package/dist/ui/commands/mcpCommand.test.ts +0 -1057
- package/dist/ui/commands/mcpCommand.ts +0 -531
- package/dist/ui/commands/memoryCommand.test.ts +0 -344
- package/dist/ui/commands/memoryCommand.ts +0 -305
- package/dist/ui/commands/privacyCommand.test.ts +0 -38
- package/dist/ui/commands/privacyCommand.ts +0 -17
- package/dist/ui/commands/quitCommand.test.ts +0 -55
- package/dist/ui/commands/quitCommand.ts +0 -36
- package/dist/ui/commands/restoreCommand.test.ts +0 -250
- package/dist/ui/commands/restoreCommand.ts +0 -157
- package/dist/ui/commands/searchEngineSetupCommand.ts +0 -18
- package/dist/ui/commands/settingsCommand.test.ts +0 -36
- package/dist/ui/commands/settingsCommand.ts +0 -17
- package/dist/ui/commands/setupGithubCommand.test.ts +0 -238
- package/dist/ui/commands/setupGithubCommand.ts +0 -212
- package/dist/ui/commands/speakCommand.ts +0 -175
- package/dist/ui/commands/statsCommand.test.ts +0 -78
- package/dist/ui/commands/statsCommand.ts +0 -70
- package/dist/ui/commands/terminalSetupCommand.test.ts +0 -85
- package/dist/ui/commands/terminalSetupCommand.ts +0 -45
- package/dist/ui/commands/themeCommand.test.ts +0 -38
- package/dist/ui/commands/themeCommand.ts +0 -17
- package/dist/ui/commands/toolsCommand.test.ts +0 -105
- package/dist/ui/commands/toolsCommand.ts +0 -71
- package/dist/ui/commands/ttsCommand.ts +0 -143
- package/dist/ui/commands/types.ts +0 -204
- package/dist/ui/commands/vimCommand.ts +0 -25
- package/dist/ui/commands/voiceCommand.ts +0 -125
- package/dist/ui/components/AboutBox.tsx +0 -133
- package/dist/ui/components/AsciiArt.ts +0 -54
- package/dist/ui/components/AuthDialog.test.tsx +0 -334
- package/dist/ui/components/AuthDialog.tsx +0 -289
- package/dist/ui/components/AuthInProgress.tsx +0 -62
- package/dist/ui/components/AutoAcceptIndicator.tsx +0 -47
- package/dist/ui/components/ConsoleSummaryDisplay.tsx +0 -35
- package/dist/ui/components/ContextSummaryDisplay.test.tsx +0 -85
- package/dist/ui/components/ContextSummaryDisplay.tsx +0 -120
- package/dist/ui/components/ContextUsageDisplay.tsx +0 -77
- package/dist/ui/components/DebugProfiler.tsx +0 -36
- package/dist/ui/components/DetailedMessagesDisplay.tsx +0 -82
- package/dist/ui/components/EditorSettingsDialog.tsx +0 -172
- package/dist/ui/components/FolderTrustDialog.test.tsx +0 -36
- package/dist/ui/components/FolderTrustDialog.tsx +0 -74
- package/dist/ui/components/Footer.test.tsx +0 -159
- package/dist/ui/components/Footer.tsx +0 -158
- package/dist/ui/components/GeminiKeyDialog.tsx +0 -252
- package/dist/ui/components/GeminiRespondingSpinner.tsx +0 -34
- package/dist/ui/components/Header.test.tsx +0 -44
- package/dist/ui/components/Header.tsx +0 -70
- package/dist/ui/components/Help.tsx +0 -174
- package/dist/ui/components/HistoryItemDisplay.test.tsx +0 -125
- package/dist/ui/components/HistoryItemDisplay.tsx +0 -98
- package/dist/ui/components/InputPrompt.test.tsx +0 -1467
- package/dist/ui/components/InputPrompt.tsx +0 -641
- package/dist/ui/components/LMStudioModelPrompt.tsx +0 -215
- package/dist/ui/components/LoadingIndicator.test.tsx +0 -296
- package/dist/ui/components/LoadingIndicator.tsx +0 -82
- package/dist/ui/components/MemoryUsageDisplay.tsx +0 -36
- package/dist/ui/components/ModelStatsDisplay.test.tsx +0 -252
- package/dist/ui/components/ModelStatsDisplay.tsx +0 -197
- package/dist/ui/components/OllamaModelPrompt.tsx +0 -206
- package/dist/ui/components/OpenAIEndpointDialog.tsx +0 -261
- package/dist/ui/components/OpenAIKeyPrompt.test.tsx +0 -64
- package/dist/ui/components/OpenAIKeyPrompt.tsx +0 -197
- package/dist/ui/components/PrepareLabel.tsx +0 -48
- package/dist/ui/components/SearchEngineConfigDialog.tsx +0 -280
- package/dist/ui/components/SessionSummaryDisplay.test.tsx +0 -75
- package/dist/ui/components/SessionSummaryDisplay.tsx +0 -18
- package/dist/ui/components/SettingsDialog.test.tsx +0 -865
- package/dist/ui/components/SettingsDialog.tsx +0 -753
- package/dist/ui/components/ShellConfirmationDialog.test.tsx +0 -53
- package/dist/ui/components/ShellConfirmationDialog.tsx +0 -103
- package/dist/ui/components/ShellModeIndicator.tsx +0 -18
- package/dist/ui/components/ShowMoreLines.tsx +0 -40
- package/dist/ui/components/StatsDisplay.test.tsx +0 -401
- package/dist/ui/components/StatsDisplay.tsx +0 -273
- package/dist/ui/components/SuggestionsDisplay.tsx +0 -102
- package/dist/ui/components/ThemeDialog.tsx +0 -310
- package/dist/ui/components/Tips.tsx +0 -45
- package/dist/ui/components/TodoDisplay.test.tsx +0 -97
- package/dist/ui/components/TodoDisplay.tsx +0 -72
- package/dist/ui/components/ToolStatsDisplay.test.tsx +0 -180
- package/dist/ui/components/ToolStatsDisplay.tsx +0 -208
- package/dist/ui/components/UpdateNotification.tsx +0 -23
- package/dist/ui/components/WelcomeBackDialog.tsx +0 -290
- package/dist/ui/components/__snapshots__/IDEContextDetailDisplay.test.tsx.snap +0 -24
- package/dist/ui/components/__snapshots__/ModelStatsDisplay.test.tsx.snap +0 -121
- package/dist/ui/components/__snapshots__/SessionSummaryDisplay.test.tsx.snap +0 -30
- package/dist/ui/components/__snapshots__/ShellConfirmationDialog.test.tsx.snap +0 -21
- package/dist/ui/components/__snapshots__/StatsDisplay.test.tsx.snap +0 -264
- package/dist/ui/components/__snapshots__/ToolStatsDisplay.test.tsx.snap +0 -91
- package/dist/ui/components/messages/CompressionMessage.tsx +0 -49
- package/dist/ui/components/messages/DiffRenderer.test.tsx +0 -365
- package/dist/ui/components/messages/DiffRenderer.tsx +0 -358
- package/dist/ui/components/messages/ErrorMessage.tsx +0 -31
- package/dist/ui/components/messages/GeminiMessage.tsx +0 -43
- package/dist/ui/components/messages/GeminiMessageContent.tsx +0 -43
- package/dist/ui/components/messages/InfoMessage.tsx +0 -32
- package/dist/ui/components/messages/ToolConfirmationMessage.test.tsx +0 -58
- package/dist/ui/components/messages/ToolConfirmationMessage.tsx +0 -297
- package/dist/ui/components/messages/ToolGroupMessage.tsx +0 -126
- package/dist/ui/components/messages/ToolMessage.test.tsx +0 -183
- package/dist/ui/components/messages/ToolMessage.tsx +0 -296
- package/dist/ui/components/messages/UserMessage.tsx +0 -43
- package/dist/ui/components/messages/UserShellMessage.tsx +0 -25
- package/dist/ui/components/shared/MaxSizedBox.test.tsx +0 -425
- package/dist/ui/components/shared/MaxSizedBox.tsx +0 -624
- package/dist/ui/components/shared/RadioButtonSelect.test.tsx +0 -181
- package/dist/ui/components/shared/RadioButtonSelect.tsx +0 -234
- package/dist/ui/components/shared/__snapshots__/RadioButtonSelect.test.tsx.snap +0 -47
- package/dist/ui/components/shared/text-buffer.test.ts +0 -1728
- package/dist/ui/components/shared/text-buffer.ts +0 -2227
- package/dist/ui/components/shared/vim-buffer-actions.test.ts +0 -1119
- package/dist/ui/components/shared/vim-buffer-actions.ts +0 -814
- package/dist/ui/constants.ts +0 -17
- package/dist/ui/contexts/KeypressContext.test.tsx +0 -391
- package/dist/ui/contexts/KeypressContext.tsx +0 -440
- package/dist/ui/contexts/OverflowContext.tsx +0 -87
- package/dist/ui/contexts/SessionContext.test.tsx +0 -132
- package/dist/ui/contexts/SessionContext.tsx +0 -143
- package/dist/ui/contexts/SettingsContext.tsx +0 -20
- package/dist/ui/contexts/StreamingContext.tsx +0 -22
- package/dist/ui/contexts/VimModeContext.tsx +0 -79
- package/dist/ui/editors/editorSettingsManager.ts +0 -66
- package/dist/ui/hooks/atCommandProcessor.test.ts +0 -1102
- package/dist/ui/hooks/atCommandProcessor.ts +0 -485
- package/dist/ui/hooks/shellCommandProcessor.test.ts +0 -481
- package/dist/ui/hooks/shellCommandProcessor.ts +0 -314
- package/dist/ui/hooks/slashCommandProcessor.test.ts +0 -1044
- package/dist/ui/hooks/slashCommandProcessor.ts +0 -595
- package/dist/ui/hooks/useAtCompletion.test.ts +0 -497
- package/dist/ui/hooks/useAtCompletion.ts +0 -244
- package/dist/ui/hooks/useAuthCommand.ts +0 -129
- package/dist/ui/hooks/useAutoAcceptIndicator.test.ts +0 -300
- package/dist/ui/hooks/useAutoAcceptIndicator.ts +0 -52
- package/dist/ui/hooks/useBracketedPaste.ts +0 -37
- package/dist/ui/hooks/useCommandCompletion.test.ts +0 -518
- package/dist/ui/hooks/useCommandCompletion.tsx +0 -238
- package/dist/ui/hooks/useCompletion.ts +0 -128
- package/dist/ui/hooks/useConsoleMessages.test.ts +0 -147
- package/dist/ui/hooks/useConsoleMessages.ts +0 -110
- package/dist/ui/hooks/useEditorSettings.test.ts +0 -283
- package/dist/ui/hooks/useEditorSettings.ts +0 -75
- package/dist/ui/hooks/useFocus.test.ts +0 -119
- package/dist/ui/hooks/useFocus.ts +0 -48
- package/dist/ui/hooks/useFolderTrust.test.ts +0 -159
- package/dist/ui/hooks/useFolderTrust.ts +0 -72
- package/dist/ui/hooks/useGeminiStream.test.tsx +0 -1998
- package/dist/ui/hooks/useGeminiStream.ts +0 -1017
- package/dist/ui/hooks/useGitBranchName.test.ts +0 -280
- package/dist/ui/hooks/useGitBranchName.ts +0 -79
- package/dist/ui/hooks/useHistoryManager.test.ts +0 -202
- package/dist/ui/hooks/useHistoryManager.ts +0 -111
- package/dist/ui/hooks/useInputHistory.test.ts +0 -261
- package/dist/ui/hooks/useInputHistory.ts +0 -111
- package/dist/ui/hooks/useKeypress.test.ts +0 -280
- package/dist/ui/hooks/useKeypress.ts +0 -39
- package/dist/ui/hooks/useKittyKeyboardProtocol.ts +0 -31
- package/dist/ui/hooks/useLoadingIndicator.test.ts +0 -139
- package/dist/ui/hooks/useLoadingIndicator.ts +0 -57
- package/dist/ui/hooks/useLogger.ts +0 -32
- package/dist/ui/hooks/useMessageQueue.test.ts +0 -226
- package/dist/ui/hooks/useMessageQueue.ts +0 -69
- package/dist/ui/hooks/usePhraseCycler.test.ts +0 -145
- package/dist/ui/hooks/usePhraseCycler.ts +0 -198
- package/dist/ui/hooks/usePrivacySettings.test.ts +0 -242
- package/dist/ui/hooks/usePrivacySettings.ts +0 -150
- package/dist/ui/hooks/useReactToolScheduler.ts +0 -309
- package/dist/ui/hooks/useRefreshMemoryCommand.ts +0 -7
- package/dist/ui/hooks/useReverseSearchCompletion.test.tsx +0 -260
- package/dist/ui/hooks/useReverseSearchCompletion.tsx +0 -95
- package/dist/ui/hooks/useSettingsCommand.ts +0 -25
- package/dist/ui/hooks/useShellHistory.test.ts +0 -219
- package/dist/ui/hooks/useShellHistory.ts +0 -133
- package/dist/ui/hooks/useShowMemoryCommand.ts +0 -75
- package/dist/ui/hooks/useSlashCompletion.test.ts +0 -434
- package/dist/ui/hooks/useSlashCompletion.ts +0 -187
- package/dist/ui/hooks/useStateAndRef.ts +0 -36
- package/dist/ui/hooks/useTerminalSize.ts +0 -32
- package/dist/ui/hooks/useThemeCommand.ts +0 -110
- package/dist/ui/hooks/useTimer.test.ts +0 -120
- package/dist/ui/hooks/useTimer.ts +0 -65
- package/dist/ui/hooks/useToolScheduler.test.ts +0 -1123
- package/dist/ui/hooks/useWelcomeBack.ts +0 -253
- package/dist/ui/hooks/vim.test.ts +0 -1691
- package/dist/ui/hooks/vim.ts +0 -784
- package/dist/ui/keyMatchers.test.ts +0 -337
- package/dist/ui/keyMatchers.ts +0 -105
- package/dist/ui/privacy/CloudFreePrivacyNotice.tsx +0 -117
- package/dist/ui/privacy/CloudPaidPrivacyNotice.tsx +0 -59
- package/dist/ui/privacy/GeminiPrivacyNotice.tsx +0 -62
- package/dist/ui/privacy/PrivacyNotice.tsx +0 -42
- package/dist/ui/semantic-colors.ts +0 -26
- package/dist/ui/themes/ansi-light.ts +0 -150
- package/dist/ui/themes/ansi.ts +0 -159
- package/dist/ui/themes/atom-one-dark.ts +0 -147
- package/dist/ui/themes/ayu-light.ts +0 -139
- package/dist/ui/themes/ayu.ts +0 -113
- package/dist/ui/themes/color-utils.test.ts +0 -221
- package/dist/ui/themes/color-utils.ts +0 -231
- package/dist/ui/themes/default-light.ts +0 -108
- package/dist/ui/themes/default.ts +0 -151
- package/dist/ui/themes/dracula.ts +0 -124
- package/dist/ui/themes/fss-code-dark.ts +0 -156
- package/dist/ui/themes/fss-dark.ts +0 -113
- package/dist/ui/themes/fss-light.ts +0 -139
- package/dist/ui/themes/github-dark.ts +0 -147
- package/dist/ui/themes/github-light.ts +0 -149
- package/dist/ui/themes/googlecode.ts +0 -146
- package/dist/ui/themes/no-color.ts +0 -125
- package/dist/ui/themes/qwen-dark.ts +0 -118
- package/dist/ui/themes/qwen-light.ts +0 -144
- package/dist/ui/themes/semantic-tokens.ts +0 -127
- package/dist/ui/themes/shades-of-purple.ts +0 -352
- package/dist/ui/themes/theme-manager.test.ts +0 -99
- package/dist/ui/themes/theme-manager.ts +0 -257
- package/dist/ui/themes/theme.test.ts +0 -97
- package/dist/ui/themes/theme.ts +0 -451
- package/dist/ui/themes/xcode.ts +0 -154
- package/dist/ui/types.ts +0 -255
- package/dist/ui/utils/CodeColorizer.tsx +0 -217
- package/dist/ui/utils/ConsolePatcher.ts +0 -71
- package/dist/ui/utils/InlineMarkdownRenderer.tsx +0 -173
- package/dist/ui/utils/MarkdownDisplay.test.tsx +0 -244
- package/dist/ui/utils/MarkdownDisplay.tsx +0 -415
- package/dist/ui/utils/TableRenderer.tsx +0 -159
- package/dist/ui/utils/__snapshots__/MarkdownDisplay.test.tsx.snap +0 -93
- package/dist/ui/utils/clipboardUtils.test.ts +0 -76
- package/dist/ui/utils/clipboardUtils.ts +0 -149
- package/dist/ui/utils/commandUtils.test.ts +0 -384
- package/dist/ui/utils/commandUtils.ts +0 -106
- package/dist/ui/utils/computeStats.test.ts +0 -292
- package/dist/ui/utils/computeStats.ts +0 -86
- package/dist/ui/utils/displayUtils.test.ts +0 -58
- package/dist/ui/utils/displayUtils.ts +0 -32
- package/dist/ui/utils/formatters.test.ts +0 -72
- package/dist/ui/utils/formatters.ts +0 -63
- package/dist/ui/utils/isNarrowWidth.ts +0 -9
- package/dist/ui/utils/kittyProtocolDetector.ts +0 -105
- package/dist/ui/utils/markdownUtilities.test.ts +0 -50
- package/dist/ui/utils/markdownUtilities.ts +0 -125
- package/dist/ui/utils/platformConstants.ts +0 -52
- package/dist/ui/utils/terminalSetup.ts +0 -342
- package/dist/ui/utils/textUtils.ts +0 -40
- package/dist/ui/utils/updateCheck.test.ts +0 -163
- package/dist/ui/utils/updateCheck.ts +0 -100
- package/dist/utils/checks.ts +0 -28
- package/dist/utils/cleanup.test.ts +0 -68
- package/dist/utils/cleanup.ts +0 -36
- package/dist/utils/dialogScopeUtils.ts +0 -64
- package/dist/utils/events.ts +0 -14
- package/dist/utils/gitUtils.test.ts +0 -149
- package/dist/utils/gitUtils.ts +0 -116
- package/dist/utils/handleAutoUpdate.test.ts +0 -272
- package/dist/utils/handleAutoUpdate.ts +0 -145
- package/dist/utils/installationInfo.test.ts +0 -315
- package/dist/utils/installationInfo.ts +0 -176
- package/dist/utils/package.ts +0 -38
- package/dist/utils/readStdin.ts +0 -51
- package/dist/utils/resolvePath.ts +0 -21
- package/dist/utils/sandbox-macos-permissive-closed.sb +0 -32
- package/dist/utils/sandbox-macos-permissive-open.sb +0 -25
- package/dist/utils/sandbox-macos-permissive-proxied.sb +0 -37
- package/dist/utils/sandbox-macos-restrictive-closed.sb +0 -93
- package/dist/utils/sandbox-macos-restrictive-open.sb +0 -96
- package/dist/utils/sandbox-macos-restrictive-proxied.sb +0 -98
- package/dist/utils/sandbox.ts +0 -962
- package/dist/utils/settingsUtils.test.ts +0 -797
- package/dist/utils/settingsUtils.ts +0 -489
- package/dist/utils/spawnWrapper.ts +0 -9
- package/dist/utils/startupWarnings.test.ts +0 -83
- package/dist/utils/startupWarnings.ts +0 -40
- package/dist/utils/updateEventEmitter.ts +0 -13
- package/dist/utils/userStartupWarnings.test.ts +0 -87
- package/dist/utils/userStartupWarnings.ts +0 -69
- package/dist/utils/version.ts +0 -12
- package/dist/validateNonInterActiveAuth.test.ts +0 -260
- package/dist/validateNonInterActiveAuth.ts +0 -51
- package/dist/vitest.config.ts +0 -37
- package/dist/zed-integration/acp.ts +0 -366
- package/dist/zed-integration/fileSystemService.ts +0 -47
- package/dist/zed-integration/schema.ts +0 -466
- package/dist/zed-integration/zedIntegration.ts +0 -944
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { AuthType, ModelConfig } from 'fss-link-core';
|
|
8
|
-
import { getFSSLinkDatabase } from './database.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Model Manager - High-level interface for model switching and persistence
|
|
12
|
-
* Implements ModelStateProvider for integration with Config class
|
|
13
|
-
*/
|
|
14
|
-
export class ModelManager {
|
|
15
|
-
private async getDb() {
|
|
16
|
-
return await getFSSLinkDatabase();
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Set up a new model configuration and make it active
|
|
21
|
-
* Implements ModelStateProvider.setActiveModel
|
|
22
|
-
*/
|
|
23
|
-
async setActiveModel(config: ModelConfig): Promise<number> {
|
|
24
|
-
const db = await this.getDb();
|
|
25
|
-
|
|
26
|
-
// Insert the model and get its ID
|
|
27
|
-
const modelId = await db.upsertModelConfig(config);
|
|
28
|
-
|
|
29
|
-
// Set as active model (deactivates others)
|
|
30
|
-
await db.setActiveModel(modelId);
|
|
31
|
-
|
|
32
|
-
// Update environment variables for immediate use
|
|
33
|
-
await this.updateEnvironmentFromModel(config);
|
|
34
|
-
|
|
35
|
-
return modelId;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Set up a new model configuration and make it active (legacy method)
|
|
40
|
-
*/
|
|
41
|
-
async configureModel(
|
|
42
|
-
authType: AuthType,
|
|
43
|
-
modelName: string,
|
|
44
|
-
endpointUrl?: string,
|
|
45
|
-
apiKey?: string,
|
|
46
|
-
displayName?: string
|
|
47
|
-
): Promise<number> {
|
|
48
|
-
const db = await this.getDb();
|
|
49
|
-
const config: ModelConfig = {
|
|
50
|
-
authType: this.mapAuthType(authType),
|
|
51
|
-
modelName,
|
|
52
|
-
endpointUrl,
|
|
53
|
-
apiKey,
|
|
54
|
-
displayName,
|
|
55
|
-
isFavorite: false,
|
|
56
|
-
isActive: true, // Make this the active model
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
// Insert the model and get its ID
|
|
60
|
-
const modelId = await db.upsertModelConfig(config);
|
|
61
|
-
|
|
62
|
-
// Set as active model (deactivates others)
|
|
63
|
-
await db.setActiveModel(modelId);
|
|
64
|
-
|
|
65
|
-
// Update environment variables for immediate use
|
|
66
|
-
await this.updateEnvironmentFromModel(config);
|
|
67
|
-
|
|
68
|
-
return modelId;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Switch to an existing model by ID
|
|
73
|
-
*/
|
|
74
|
-
async switchToModel(modelId: number): Promise<boolean> {
|
|
75
|
-
try {
|
|
76
|
-
const db = await this.getDb();
|
|
77
|
-
await db.setActiveModel(modelId);
|
|
78
|
-
|
|
79
|
-
const activeModel = await db.getActiveModel();
|
|
80
|
-
if (activeModel) {
|
|
81
|
-
await this.updateEnvironmentFromModel(activeModel);
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return false;
|
|
86
|
-
} catch (error) {
|
|
87
|
-
console.error('Failed to switch to model:', error);
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Get the currently active model
|
|
94
|
-
*/
|
|
95
|
-
async getActiveModel(): Promise<ModelConfig | null> {
|
|
96
|
-
const db = await this.getDb();
|
|
97
|
-
return await db.getActiveModel();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Get all configured models
|
|
102
|
-
*/
|
|
103
|
-
async getAllModels(): Promise<ModelConfig[]> {
|
|
104
|
-
const db = await this.getDb();
|
|
105
|
-
return await db.getAllModels();
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Get favorite models
|
|
110
|
-
*/
|
|
111
|
-
async getFavoriteModels(): Promise<ModelConfig[]> {
|
|
112
|
-
const db = await this.getDb();
|
|
113
|
-
return await db.getFavoriteModels();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Get recently used models
|
|
118
|
-
*/
|
|
119
|
-
async getRecentModels(limit: number = 5): Promise<ModelConfig[]> {
|
|
120
|
-
const db = await this.getDb();
|
|
121
|
-
return await db.getRecentModels(limit);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Toggle favorite status for a model
|
|
126
|
-
*/
|
|
127
|
-
async toggleFavorite(modelId: number): Promise<void> {
|
|
128
|
-
const db = await this.getDb();
|
|
129
|
-
await db.toggleModelFavorite(modelId);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Delete a model configuration
|
|
134
|
-
*/
|
|
135
|
-
async deleteModel(modelId: number): Promise<void> {
|
|
136
|
-
const db = await this.getDb();
|
|
137
|
-
await db.deleteModel(modelId);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Initialize environment variables from active model on startup
|
|
142
|
-
* Implements ModelStateProvider.initializeFromStore
|
|
143
|
-
*/
|
|
144
|
-
async initializeFromStore(): Promise<boolean> {
|
|
145
|
-
const db = await this.getDb();
|
|
146
|
-
const activeModel = await db.getActiveModel();
|
|
147
|
-
|
|
148
|
-
if (activeModel) {
|
|
149
|
-
await this.updateEnvironmentFromModel(activeModel);
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Check if we have a valid active model configuration
|
|
158
|
-
*/
|
|
159
|
-
async hasValidConfiguration(): Promise<boolean> {
|
|
160
|
-
const db = await this.getDb();
|
|
161
|
-
const activeModel = await db.getActiveModel();
|
|
162
|
-
return activeModel !== null;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Get current auth type from active model
|
|
167
|
-
* Implements ModelStateProvider.getCurrentAuthType
|
|
168
|
-
*/
|
|
169
|
-
async getCurrentAuthType(): Promise<string | undefined> {
|
|
170
|
-
const db = await this.getDb();
|
|
171
|
-
const activeModel = await db.getActiveModel();
|
|
172
|
-
if (!activeModel || !activeModel.authType) return undefined;
|
|
173
|
-
|
|
174
|
-
const authType = this.mapToFSSLinkAuthType(activeModel.authType);
|
|
175
|
-
return authType as string;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Get current auth type as FSS Link AuthType enum (legacy method)
|
|
180
|
-
*/
|
|
181
|
-
async getCurrentFSSAuthType(): Promise<AuthType | undefined> {
|
|
182
|
-
const db = await this.getDb();
|
|
183
|
-
const activeModel = await db.getActiveModel();
|
|
184
|
-
if (!activeModel || !activeModel.authType) return undefined;
|
|
185
|
-
|
|
186
|
-
return this.mapToFSSLinkAuthType(activeModel.authType);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Update process environment variables from model configuration
|
|
191
|
-
* Now includes provider settings like context window
|
|
192
|
-
*/
|
|
193
|
-
private async updateEnvironmentFromModel(model: ModelConfig): Promise<void> {
|
|
194
|
-
// Load provider settings if we have a model ID
|
|
195
|
-
let settings: Record<string, string> = {};
|
|
196
|
-
if (model.id) {
|
|
197
|
-
try {
|
|
198
|
-
const db = await this.getDb();
|
|
199
|
-
settings = await db.getProviderSettings(model.id);
|
|
200
|
-
} catch (error) {
|
|
201
|
-
console.warn('Failed to load provider settings:', error);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
switch (model.authType) {
|
|
205
|
-
case 'openai':
|
|
206
|
-
process.env['OPENAI_API_KEY'] = model.apiKey || '';
|
|
207
|
-
process.env['OPENAI_BASE_URL'] = model.endpointUrl || '';
|
|
208
|
-
process.env['OPENAI_MODEL'] = model.modelName || '';
|
|
209
|
-
break;
|
|
210
|
-
|
|
211
|
-
case 'ollama':
|
|
212
|
-
process.env['OLLAMA_API_KEY'] = model.apiKey || '1';
|
|
213
|
-
process.env['OLLAMA_BASE_URL'] = model.endpointUrl || 'http://localhost:11434/v1';
|
|
214
|
-
process.env['OLLAMA_MODEL'] = model.modelName || '';
|
|
215
|
-
break;
|
|
216
|
-
|
|
217
|
-
case 'lmstudio':
|
|
218
|
-
process.env['LM_STUDIO_API_KEY'] = model.apiKey || '1';
|
|
219
|
-
process.env['LM_STUDIO_BASE_URL'] = model.endpointUrl || 'http://localhost:1234/v1';
|
|
220
|
-
process.env['LM_STUDIO_MODEL'] = model.modelName || '';
|
|
221
|
-
break;
|
|
222
|
-
|
|
223
|
-
case 'qwen-oauth':
|
|
224
|
-
// FSS Link OAuth doesn't use these environment variables
|
|
225
|
-
break;
|
|
226
|
-
|
|
227
|
-
default:
|
|
228
|
-
// Unknown auth type, no environment variables to set
|
|
229
|
-
console.warn(`Unknown auth type: ${model.authType}`);
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Apply provider settings to the global configuration if available
|
|
234
|
-
if (Object.keys(settings).length > 0) {
|
|
235
|
-
await this.applyProviderSettings(settings);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Apply provider settings to the global configuration
|
|
241
|
-
*/
|
|
242
|
-
private async applyProviderSettings(settings: Record<string, string>): Promise<void> {
|
|
243
|
-
try {
|
|
244
|
-
const { getConfig } = await import('./settings.js');
|
|
245
|
-
const config = getConfig();
|
|
246
|
-
|
|
247
|
-
// Convert string settings to appropriate types and update config
|
|
248
|
-
const samplingParams: Record<string, unknown> = {};
|
|
249
|
-
|
|
250
|
-
if (settings.num_ctx) {
|
|
251
|
-
samplingParams.num_ctx = parseInt(settings.num_ctx, 10);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
if (settings.temperature) {
|
|
255
|
-
samplingParams.temperature = parseFloat(settings.temperature);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
if (settings.top_p) {
|
|
259
|
-
samplingParams.top_p = parseFloat(settings.top_p);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
if (settings.top_k) {
|
|
263
|
-
samplingParams.top_k = parseInt(settings.top_k, 10);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
if (Object.keys(samplingParams).length > 0) {
|
|
267
|
-
config.setContentGeneratorSamplingParams(samplingParams);
|
|
268
|
-
}
|
|
269
|
-
} catch (error) {
|
|
270
|
-
console.warn('Failed to apply provider settings:', error);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Map FSS Link AuthType to database auth type
|
|
276
|
-
*/
|
|
277
|
-
private mapAuthType(authType: AuthType): 'openai' | 'ollama' | 'lmstudio' | 'qwen-oauth' {
|
|
278
|
-
switch (authType) {
|
|
279
|
-
case AuthType.USE_OPENAI:
|
|
280
|
-
return 'openai';
|
|
281
|
-
case AuthType.OLLAMA:
|
|
282
|
-
return 'ollama';
|
|
283
|
-
case AuthType.LM_STUDIO:
|
|
284
|
-
return 'lmstudio';
|
|
285
|
-
case AuthType.QWEN_OAUTH:
|
|
286
|
-
return 'qwen-oauth';
|
|
287
|
-
default:
|
|
288
|
-
throw new Error(`Unsupported auth type: ${authType}`);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Map database auth type to FSS Link AuthType
|
|
294
|
-
*/
|
|
295
|
-
private mapToFSSLinkAuthType(authType: string): AuthType {
|
|
296
|
-
if (!authType) {
|
|
297
|
-
throw new Error(`Auth type is null or undefined`);
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
switch (authType) {
|
|
301
|
-
case 'openai':
|
|
302
|
-
return AuthType.USE_OPENAI;
|
|
303
|
-
case 'ollama':
|
|
304
|
-
return AuthType.OLLAMA;
|
|
305
|
-
case 'lmstudio':
|
|
306
|
-
return AuthType.LM_STUDIO;
|
|
307
|
-
case 'qwen-oauth':
|
|
308
|
-
return AuthType.QWEN_OAUTH;
|
|
309
|
-
default:
|
|
310
|
-
throw new Error(`Unsupported database auth type: ${authType}`);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// Singleton instance
|
|
316
|
-
let modelManagerInstance: ModelManager | null = null;
|
|
317
|
-
|
|
318
|
-
/**
|
|
319
|
-
* Get the global model manager instance
|
|
320
|
-
*/
|
|
321
|
-
export function getModelManager(): ModelManager {
|
|
322
|
-
if (!modelManagerInstance) {
|
|
323
|
-
modelManagerInstance = new ModelManager();
|
|
324
|
-
}
|
|
325
|
-
return modelManagerInstance;
|
|
326
|
-
}
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { AuthType, ModelConfig } from 'fss-link-core';
|
|
8
|
-
import { getFSSLinkDatabase } from './database.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Comprehensive Provider Manager
|
|
12
|
-
* Handles all provider configurations, persistence, and smart defaults
|
|
13
|
-
*/
|
|
14
|
-
export class ProviderManager {
|
|
15
|
-
private static instance: ProviderManager;
|
|
16
|
-
|
|
17
|
-
static getInstance(): ProviderManager {
|
|
18
|
-
if (!ProviderManager.instance) {
|
|
19
|
-
ProviderManager.instance = new ProviderManager();
|
|
20
|
-
}
|
|
21
|
-
return ProviderManager.instance;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Get all configured providers with usage statistics
|
|
26
|
-
*/
|
|
27
|
-
async getAllProviders(): Promise<ModelConfig[]> {
|
|
28
|
-
const db = await getFSSLinkDatabase();
|
|
29
|
-
return await db.getAllModels();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Get smart default provider based on usage and user preferences
|
|
34
|
-
*/
|
|
35
|
-
async getDefaultProvider(): Promise<ModelConfig | null> {
|
|
36
|
-
const db = await getFSSLinkDatabase();
|
|
37
|
-
return await db.getSmartDefaultProvider();
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Save provider configuration with automatic usage tracking setup
|
|
42
|
-
*/
|
|
43
|
-
async saveProvider(config: ModelConfig): Promise<number> {
|
|
44
|
-
const db = await getFSSLinkDatabase();
|
|
45
|
-
const providerId = await db.upsertModelConfig(config);
|
|
46
|
-
|
|
47
|
-
// Save additional settings if present
|
|
48
|
-
if (config.additionalSettings) {
|
|
49
|
-
for (const [key, value] of Object.entries(config.additionalSettings)) {
|
|
50
|
-
await db.saveProviderSetting(providerId, key, JSON.stringify(value));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return providerId;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Record provider usage for intelligent defaults
|
|
59
|
-
*/
|
|
60
|
-
async recordUsage(providerId: number, tokensUsed: number, sessionDurationMs: number): Promise<void> {
|
|
61
|
-
const db = await getFSSLinkDatabase();
|
|
62
|
-
await db.recordProviderUsage(providerId, tokensUsed, Math.floor(sessionDurationMs / 1000));
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Get custom endpoints for a provider
|
|
67
|
-
*/
|
|
68
|
-
async getCustomEndpoints(providerId: number): Promise<Array<Record<string, unknown>>> {
|
|
69
|
-
const db = await getFSSLinkDatabase();
|
|
70
|
-
return await db.getCustomEndpoints(providerId);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Save custom endpoint
|
|
75
|
-
*/
|
|
76
|
-
async saveCustomEndpoint(
|
|
77
|
-
providerId: number,
|
|
78
|
-
name: string,
|
|
79
|
-
url: string,
|
|
80
|
-
description?: string,
|
|
81
|
-
isDefault = false
|
|
82
|
-
): Promise<number> {
|
|
83
|
-
const db = await getFSSLinkDatabase();
|
|
84
|
-
return await db.saveCustomEndpoint(providerId, name, url, description, isDefault);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Get provider-specific settings (like sampling params, API keys, etc.)
|
|
89
|
-
*/
|
|
90
|
-
async getProviderSettings(providerId: number): Promise<Record<string, unknown>> {
|
|
91
|
-
const db = await getFSSLinkDatabase();
|
|
92
|
-
const settings = await db.getProviderSettings(providerId);
|
|
93
|
-
|
|
94
|
-
// Parse JSON values back to their original types
|
|
95
|
-
const parsed: Record<string, unknown> = {};
|
|
96
|
-
for (const [key, value] of Object.entries(settings)) {
|
|
97
|
-
try {
|
|
98
|
-
parsed[key] = JSON.parse(value);
|
|
99
|
-
} catch {
|
|
100
|
-
parsed[key] = value; // Keep as string if not valid JSON
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return parsed;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Save provider-specific setting
|
|
109
|
-
*/
|
|
110
|
-
async saveProviderSetting(providerId: number, key: string, value: unknown): Promise<void> {
|
|
111
|
-
const db = await getFSSLinkDatabase();
|
|
112
|
-
const serializedValue = typeof value === 'string' ? value : JSON.stringify(value);
|
|
113
|
-
await db.saveProviderSetting(providerId, key, serializedValue);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Get providers by type (OpenAI, Ollama, etc.)
|
|
118
|
-
*/
|
|
119
|
-
async getProvidersByType(authType: AuthType): Promise<ModelConfig[]> {
|
|
120
|
-
const allProviders = await this.getAllProviders();
|
|
121
|
-
return allProviders.filter(p => p.authType === authType);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Mark provider as favorite (affects smart default selection)
|
|
126
|
-
*/
|
|
127
|
-
async setFavoriteProvider(providerId: number, isFavorite: boolean): Promise<void> {
|
|
128
|
-
const db = await getFSSLinkDatabase();
|
|
129
|
-
|
|
130
|
-
// If setting as favorite, unmark others as favorite for this auth type
|
|
131
|
-
if (isFavorite) {
|
|
132
|
-
const provider = await db.getModelById(providerId);
|
|
133
|
-
if (provider) {
|
|
134
|
-
const sameTypeProviders = await this.getProvidersByType(provider.authType);
|
|
135
|
-
for (const otherProvider of sameTypeProviders) {
|
|
136
|
-
if (otherProvider.id !== providerId && otherProvider.isFavorite) {
|
|
137
|
-
await this.updateProvider(otherProvider.id!, { ...otherProvider, isFavorite: false });
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const existingProvider = await db.getModelById(providerId);
|
|
144
|
-
if (existingProvider) {
|
|
145
|
-
await db.upsertModelConfig({ ...existingProvider, isFavorite });
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Update provider configuration
|
|
151
|
-
*/
|
|
152
|
-
async updateProvider(providerId: number, updates: Partial<ModelConfig>): Promise<void> {
|
|
153
|
-
const db = await getFSSLinkDatabase();
|
|
154
|
-
const existing = await db.getModelById(providerId);
|
|
155
|
-
if (existing) {
|
|
156
|
-
const updated = { ...existing, ...updates };
|
|
157
|
-
await db.upsertModelConfig(updated);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Delete provider configuration
|
|
163
|
-
*/
|
|
164
|
-
async deleteProvider(providerId: number): Promise<void> {
|
|
165
|
-
const _db = await getFSSLinkDatabase();
|
|
166
|
-
// Note: This would need to be added to the database class
|
|
167
|
-
// For now, we can mark as inactive
|
|
168
|
-
await this.updateProvider(providerId, { isActive: false });
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Get usage statistics for all providers
|
|
173
|
-
*/
|
|
174
|
-
async getUsageStatistics(): Promise<Record<number, unknown>> {
|
|
175
|
-
const _db = await getFSSLinkDatabase();
|
|
176
|
-
const allProviders = await this.getAllProviders();
|
|
177
|
-
const stats: Record<number, unknown> = {};
|
|
178
|
-
|
|
179
|
-
for (const provider of allProviders) {
|
|
180
|
-
if (provider.id) {
|
|
181
|
-
// This would need to be implemented in the database class
|
|
182
|
-
// stats[provider.id] = await db.getProviderUsageStats(provider.id);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return stats;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Auto-configure provider based on successful authentication
|
|
191
|
-
*/
|
|
192
|
-
async autoConfigureFromSuccess(
|
|
193
|
-
authType: AuthType,
|
|
194
|
-
modelName: string,
|
|
195
|
-
endpointUrl?: string,
|
|
196
|
-
apiKey?: string,
|
|
197
|
-
additionalConfig?: Record<string, unknown>
|
|
198
|
-
): Promise<number> {
|
|
199
|
-
const config: ModelConfig = {
|
|
200
|
-
authType,
|
|
201
|
-
modelName,
|
|
202
|
-
endpointUrl,
|
|
203
|
-
apiKey,
|
|
204
|
-
displayName: `${authType} - ${modelName}`,
|
|
205
|
-
isFavorite: false,
|
|
206
|
-
isActive: true,
|
|
207
|
-
additionalSettings: additionalConfig
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
const providerId = await this.saveProvider(config);
|
|
211
|
-
|
|
212
|
-
// Mark as recently used
|
|
213
|
-
await this.recordUsage(providerId, 0, 0);
|
|
214
|
-
|
|
215
|
-
return providerId;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Get recommended providers based on usage patterns
|
|
220
|
-
*/
|
|
221
|
-
async getRecommendedProviders(limit = 5): Promise<ModelConfig[]> {
|
|
222
|
-
// This would implement intelligent recommendations based on:
|
|
223
|
-
// - Recent usage
|
|
224
|
-
// - Success rates
|
|
225
|
-
// - Performance metrics
|
|
226
|
-
// - User preferences
|
|
227
|
-
|
|
228
|
-
const allProviders = await this.getAllProviders();
|
|
229
|
-
|
|
230
|
-
// For now, return most recently used active providers
|
|
231
|
-
return allProviders
|
|
232
|
-
.filter(p => p.isActive)
|
|
233
|
-
.sort((a, b) => {
|
|
234
|
-
// Sort by favorite first, then by last used
|
|
235
|
-
if (a.isFavorite && !b.isFavorite) return -1;
|
|
236
|
-
if (!a.isFavorite && b.isFavorite) return 1;
|
|
237
|
-
|
|
238
|
-
const aTime = a.lastUsed?.getTime() || 0;
|
|
239
|
-
const bTime = b.lastUsed?.getTime() || 0;
|
|
240
|
-
return bTime - aTime;
|
|
241
|
-
})
|
|
242
|
-
.slice(0, limit);
|
|
243
|
-
}
|
|
244
|
-
}
|