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,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
8
|
-
import { getUserStartupWarnings } from './userStartupWarnings.js';
|
|
9
|
-
import * as os from 'os';
|
|
10
|
-
import fs from 'fs/promises';
|
|
11
|
-
import path from 'path';
|
|
12
|
-
|
|
13
|
-
// Mock os.homedir to control the home directory in tests
|
|
14
|
-
vi.mock('os', async (importOriginal) => {
|
|
15
|
-
const actualOs = await importOriginal<typeof os>();
|
|
16
|
-
return {
|
|
17
|
-
...actualOs,
|
|
18
|
-
homedir: vi.fn(),
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
describe('getUserStartupWarnings', () => {
|
|
23
|
-
let testRootDir: string;
|
|
24
|
-
let homeDir: string;
|
|
25
|
-
|
|
26
|
-
beforeEach(async () => {
|
|
27
|
-
testRootDir = await fs.mkdtemp(path.join(os.tmpdir(), 'warnings-test-'));
|
|
28
|
-
homeDir = path.join(testRootDir, 'home');
|
|
29
|
-
await fs.mkdir(homeDir, { recursive: true });
|
|
30
|
-
vi.mocked(os.homedir).mockReturnValue(homeDir);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
afterEach(async () => {
|
|
34
|
-
await fs.rm(testRootDir, { recursive: true, force: true });
|
|
35
|
-
vi.clearAllMocks();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
describe('home directory check', () => {
|
|
39
|
-
it('should return a warning when running in home directory', async () => {
|
|
40
|
-
const warnings = await getUserStartupWarnings(homeDir);
|
|
41
|
-
expect(warnings).toContainEqual(
|
|
42
|
-
expect.stringContaining('home directory'),
|
|
43
|
-
);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should not return a warning when running in a project directory', async () => {
|
|
47
|
-
const projectDir = path.join(testRootDir, 'project');
|
|
48
|
-
await fs.mkdir(projectDir);
|
|
49
|
-
const warnings = await getUserStartupWarnings(projectDir);
|
|
50
|
-
expect(warnings).not.toContainEqual(
|
|
51
|
-
expect.stringContaining('home directory'),
|
|
52
|
-
);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
describe('root directory check', () => {
|
|
57
|
-
it('should return a warning when running in a root directory', async () => {
|
|
58
|
-
const rootDir = path.parse(testRootDir).root;
|
|
59
|
-
const warnings = await getUserStartupWarnings(rootDir);
|
|
60
|
-
expect(warnings).toContainEqual(
|
|
61
|
-
expect.stringContaining('root directory'),
|
|
62
|
-
);
|
|
63
|
-
expect(warnings).toContainEqual(
|
|
64
|
-
expect.stringContaining('folder structure will be used'),
|
|
65
|
-
);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('should not return a warning when running in a non-root directory', async () => {
|
|
69
|
-
const projectDir = path.join(testRootDir, 'project');
|
|
70
|
-
await fs.mkdir(projectDir);
|
|
71
|
-
const warnings = await getUserStartupWarnings(projectDir);
|
|
72
|
-
expect(warnings).not.toContainEqual(
|
|
73
|
-
expect.stringContaining('root directory'),
|
|
74
|
-
);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
describe('error handling', () => {
|
|
79
|
-
it('should handle errors when checking directory', async () => {
|
|
80
|
-
const nonExistentPath = path.join(testRootDir, 'non-existent');
|
|
81
|
-
const warnings = await getUserStartupWarnings(nonExistentPath);
|
|
82
|
-
const expectedWarning =
|
|
83
|
-
'Could not verify the current directory due to a file system error.';
|
|
84
|
-
expect(warnings).toEqual([expectedWarning, expectedWarning]);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
});
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import fs from 'fs/promises';
|
|
8
|
-
import * as os from 'os';
|
|
9
|
-
import path from 'path';
|
|
10
|
-
|
|
11
|
-
type WarningCheck = {
|
|
12
|
-
id: string;
|
|
13
|
-
check: (workspaceRoot: string) => Promise<string | null>;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
// Individual warning checks
|
|
17
|
-
const homeDirectoryCheck: WarningCheck = {
|
|
18
|
-
id: 'home-directory',
|
|
19
|
-
check: async (workspaceRoot: string) => {
|
|
20
|
-
try {
|
|
21
|
-
const [workspaceRealPath, homeRealPath] = await Promise.all([
|
|
22
|
-
fs.realpath(workspaceRoot),
|
|
23
|
-
fs.realpath(os.homedir()),
|
|
24
|
-
]);
|
|
25
|
-
|
|
26
|
-
if (workspaceRealPath === homeRealPath) {
|
|
27
|
-
return 'You are running FSS Link in your home directory. It is recommended to run in a project-specific directory.';
|
|
28
|
-
}
|
|
29
|
-
return null;
|
|
30
|
-
} catch (_err: unknown) {
|
|
31
|
-
return 'Could not verify the current directory due to a file system error.';
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const rootDirectoryCheck: WarningCheck = {
|
|
37
|
-
id: 'root-directory',
|
|
38
|
-
check: async (workspaceRoot: string) => {
|
|
39
|
-
try {
|
|
40
|
-
const workspaceRealPath = await fs.realpath(workspaceRoot);
|
|
41
|
-
const errorMessage =
|
|
42
|
-
'Warning: You are running FSS Link in the root directory. Your entire folder structure will be used for context. It is strongly recommended to run in a project-specific directory.';
|
|
43
|
-
|
|
44
|
-
// Check for Unix root directory
|
|
45
|
-
if (path.dirname(workspaceRealPath) === workspaceRealPath) {
|
|
46
|
-
return errorMessage;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return null;
|
|
50
|
-
} catch (_err: unknown) {
|
|
51
|
-
return 'Could not verify the current directory due to a file system error.';
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
// All warning checks
|
|
57
|
-
const WARNING_CHECKS: readonly WarningCheck[] = [
|
|
58
|
-
homeDirectoryCheck,
|
|
59
|
-
rootDirectoryCheck,
|
|
60
|
-
];
|
|
61
|
-
|
|
62
|
-
export async function getUserStartupWarnings(
|
|
63
|
-
workspaceRoot: string,
|
|
64
|
-
): Promise<string[]> {
|
|
65
|
-
const results = await Promise.all(
|
|
66
|
-
WARNING_CHECKS.map((check) => check.check(workspaceRoot)),
|
|
67
|
-
);
|
|
68
|
-
return results.filter((msg) => msg !== null);
|
|
69
|
-
}
|
package/dist/utils/version.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { getPackageJson } from './package.js';
|
|
8
|
-
|
|
9
|
-
export async function getCliVersion(): Promise<string> {
|
|
10
|
-
const pkgJson = await getPackageJson();
|
|
11
|
-
return process.env['CLI_VERSION'] || pkgJson?.version || 'unknown';
|
|
12
|
-
}
|
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
8
|
-
import {
|
|
9
|
-
validateNonInteractiveAuth,
|
|
10
|
-
NonInteractiveConfig,
|
|
11
|
-
} from './validateNonInterActiveAuth.js';
|
|
12
|
-
import { AuthType } from 'fss-link-core';
|
|
13
|
-
import * as auth from './config/auth.js';
|
|
14
|
-
|
|
15
|
-
describe('validateNonInterActiveAuth', () => {
|
|
16
|
-
let originalEnvGeminiApiKey: string | undefined;
|
|
17
|
-
let originalEnvVertexAi: string | undefined;
|
|
18
|
-
let originalEnvGcp: string | undefined;
|
|
19
|
-
let originalEnvOpenAiApiKey: string | undefined;
|
|
20
|
-
let consoleErrorSpy: ReturnType<typeof vi.spyOn>;
|
|
21
|
-
let processExitSpy: ReturnType<typeof vi.spyOn>;
|
|
22
|
-
let refreshAuthMock: jest.MockedFunction<
|
|
23
|
-
(authType: AuthType) => Promise<unknown>
|
|
24
|
-
>;
|
|
25
|
-
|
|
26
|
-
beforeEach(() => {
|
|
27
|
-
originalEnvGeminiApiKey = process.env['GEMINI_API_KEY'];
|
|
28
|
-
originalEnvVertexAi = process.env['GOOGLE_GENAI_USE_VERTEXAI'];
|
|
29
|
-
originalEnvGcp = process.env['GOOGLE_GENAI_USE_GCA'];
|
|
30
|
-
originalEnvOpenAiApiKey = process.env['OPENAI_API_KEY'];
|
|
31
|
-
delete process.env['GEMINI_API_KEY'];
|
|
32
|
-
delete process.env['GOOGLE_GENAI_USE_VERTEXAI'];
|
|
33
|
-
delete process.env['GOOGLE_GENAI_USE_GCA'];
|
|
34
|
-
delete process.env['OPENAI_API_KEY'];
|
|
35
|
-
consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
|
36
|
-
processExitSpy = vi.spyOn(process, 'exit').mockImplementation((code) => {
|
|
37
|
-
throw new Error(`process.exit(${code}) called`);
|
|
38
|
-
});
|
|
39
|
-
refreshAuthMock = vi.fn().mockResolvedValue('refreshed');
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
afterEach(() => {
|
|
43
|
-
if (originalEnvGeminiApiKey !== undefined) {
|
|
44
|
-
process.env['GEMINI_API_KEY'] = originalEnvGeminiApiKey;
|
|
45
|
-
} else {
|
|
46
|
-
delete process.env['GEMINI_API_KEY'];
|
|
47
|
-
}
|
|
48
|
-
if (originalEnvVertexAi !== undefined) {
|
|
49
|
-
process.env['GOOGLE_GENAI_USE_VERTEXAI'] = originalEnvVertexAi;
|
|
50
|
-
} else {
|
|
51
|
-
delete process.env['GOOGLE_GENAI_USE_VERTEXAI'];
|
|
52
|
-
}
|
|
53
|
-
if (originalEnvGcp !== undefined) {
|
|
54
|
-
process.env['GOOGLE_GENAI_USE_GCA'] = originalEnvGcp;
|
|
55
|
-
} else {
|
|
56
|
-
delete process.env['GOOGLE_GENAI_USE_GCA'];
|
|
57
|
-
}
|
|
58
|
-
if (originalEnvOpenAiApiKey !== undefined) {
|
|
59
|
-
process.env['OPENAI_API_KEY'] = originalEnvOpenAiApiKey;
|
|
60
|
-
} else {
|
|
61
|
-
delete process.env['OPENAI_API_KEY'];
|
|
62
|
-
}
|
|
63
|
-
vi.restoreAllMocks();
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it('exits if no auth type is configured or env vars set', async () => {
|
|
67
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
68
|
-
refreshAuth: refreshAuthMock,
|
|
69
|
-
};
|
|
70
|
-
try {
|
|
71
|
-
await validateNonInteractiveAuth(
|
|
72
|
-
undefined,
|
|
73
|
-
undefined,
|
|
74
|
-
nonInteractiveConfig,
|
|
75
|
-
);
|
|
76
|
-
expect.fail('Should have exited');
|
|
77
|
-
} catch (e) {
|
|
78
|
-
expect((e as Error).message).toContain('process.exit(1) called');
|
|
79
|
-
}
|
|
80
|
-
expect(consoleErrorSpy).toHaveBeenCalledWith(
|
|
81
|
-
expect.stringContaining('Please set an Auth method'),
|
|
82
|
-
);
|
|
83
|
-
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('uses LOGIN_WITH_GOOGLE if GOOGLE_GENAI_USE_GCA is set', async () => {
|
|
87
|
-
process.env['GOOGLE_GENAI_USE_GCA'] = 'true';
|
|
88
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
89
|
-
refreshAuth: refreshAuthMock,
|
|
90
|
-
};
|
|
91
|
-
await validateNonInteractiveAuth(
|
|
92
|
-
undefined,
|
|
93
|
-
undefined,
|
|
94
|
-
nonInteractiveConfig,
|
|
95
|
-
);
|
|
96
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.LOGIN_WITH_GOOGLE);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it('uses USE_GEMINI if GEMINI_API_KEY is set', async () => {
|
|
100
|
-
process.env['GEMINI_API_KEY'] = 'fake-key';
|
|
101
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
102
|
-
refreshAuth: refreshAuthMock,
|
|
103
|
-
};
|
|
104
|
-
await validateNonInteractiveAuth(
|
|
105
|
-
undefined,
|
|
106
|
-
undefined,
|
|
107
|
-
nonInteractiveConfig,
|
|
108
|
-
);
|
|
109
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.USE_GEMINI);
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('uses USE_OPENAI if OPENAI_API_KEY is set', async () => {
|
|
113
|
-
process.env['OPENAI_API_KEY'] = 'fake-openai-key';
|
|
114
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
115
|
-
refreshAuth: refreshAuthMock,
|
|
116
|
-
};
|
|
117
|
-
await validateNonInteractiveAuth(
|
|
118
|
-
undefined,
|
|
119
|
-
undefined,
|
|
120
|
-
nonInteractiveConfig,
|
|
121
|
-
);
|
|
122
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.USE_OPENAI);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('uses USE_VERTEX_AI if GOOGLE_GENAI_USE_VERTEXAI is true (with GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION)', async () => {
|
|
126
|
-
process.env['GOOGLE_GENAI_USE_VERTEXAI'] = 'true';
|
|
127
|
-
process.env['GOOGLE_CLOUD_PROJECT'] = 'test-project';
|
|
128
|
-
process.env['GOOGLE_CLOUD_LOCATION'] = 'us-central1';
|
|
129
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
130
|
-
refreshAuth: refreshAuthMock,
|
|
131
|
-
};
|
|
132
|
-
await validateNonInteractiveAuth(
|
|
133
|
-
undefined,
|
|
134
|
-
undefined,
|
|
135
|
-
nonInteractiveConfig,
|
|
136
|
-
);
|
|
137
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.USE_VERTEX_AI);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('uses USE_VERTEX_AI if GOOGLE_GENAI_USE_VERTEXAI is true and GOOGLE_API_KEY is set', async () => {
|
|
141
|
-
process.env['GOOGLE_GENAI_USE_VERTEXAI'] = 'true';
|
|
142
|
-
process.env['GOOGLE_API_KEY'] = 'vertex-api-key';
|
|
143
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
144
|
-
refreshAuth: refreshAuthMock,
|
|
145
|
-
};
|
|
146
|
-
await validateNonInteractiveAuth(
|
|
147
|
-
undefined,
|
|
148
|
-
undefined,
|
|
149
|
-
nonInteractiveConfig,
|
|
150
|
-
);
|
|
151
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.USE_VERTEX_AI);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('uses LOGIN_WITH_GOOGLE if GOOGLE_GENAI_USE_GCA is set, even with other env vars', async () => {
|
|
155
|
-
process.env['GOOGLE_GENAI_USE_GCA'] = 'true';
|
|
156
|
-
process.env['GEMINI_API_KEY'] = 'fake-key';
|
|
157
|
-
process.env['GOOGLE_GENAI_USE_VERTEXAI'] = 'true';
|
|
158
|
-
process.env['GOOGLE_CLOUD_PROJECT'] = 'test-project';
|
|
159
|
-
process.env['GOOGLE_CLOUD_LOCATION'] = 'us-central1';
|
|
160
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
161
|
-
refreshAuth: refreshAuthMock,
|
|
162
|
-
};
|
|
163
|
-
await validateNonInteractiveAuth(
|
|
164
|
-
undefined,
|
|
165
|
-
undefined,
|
|
166
|
-
nonInteractiveConfig,
|
|
167
|
-
);
|
|
168
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.LOGIN_WITH_GOOGLE);
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('uses USE_VERTEX_AI if both GEMINI_API_KEY and GOOGLE_GENAI_USE_VERTEXAI are set', async () => {
|
|
172
|
-
process.env['GEMINI_API_KEY'] = 'fake-key';
|
|
173
|
-
process.env['GOOGLE_GENAI_USE_VERTEXAI'] = 'true';
|
|
174
|
-
process.env['GOOGLE_CLOUD_PROJECT'] = 'test-project';
|
|
175
|
-
process.env['GOOGLE_CLOUD_LOCATION'] = 'us-central1';
|
|
176
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
177
|
-
refreshAuth: refreshAuthMock,
|
|
178
|
-
};
|
|
179
|
-
await validateNonInteractiveAuth(
|
|
180
|
-
undefined,
|
|
181
|
-
undefined,
|
|
182
|
-
nonInteractiveConfig,
|
|
183
|
-
);
|
|
184
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.USE_VERTEX_AI);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('uses USE_GEMINI if GOOGLE_GENAI_USE_VERTEXAI is false, GEMINI_API_KEY is set, and project/location are available', async () => {
|
|
188
|
-
process.env['GOOGLE_GENAI_USE_VERTEXAI'] = 'false';
|
|
189
|
-
process.env['GEMINI_API_KEY'] = 'fake-key';
|
|
190
|
-
process.env['GOOGLE_CLOUD_PROJECT'] = 'test-project';
|
|
191
|
-
process.env['GOOGLE_CLOUD_LOCATION'] = 'us-central1';
|
|
192
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
193
|
-
refreshAuth: refreshAuthMock,
|
|
194
|
-
};
|
|
195
|
-
await validateNonInteractiveAuth(
|
|
196
|
-
undefined,
|
|
197
|
-
undefined,
|
|
198
|
-
nonInteractiveConfig,
|
|
199
|
-
);
|
|
200
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.USE_GEMINI);
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it('uses configuredAuthType if provided', async () => {
|
|
204
|
-
// Set required env var for USE_GEMINI
|
|
205
|
-
process.env['GEMINI_API_KEY'] = 'fake-key';
|
|
206
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
207
|
-
refreshAuth: refreshAuthMock,
|
|
208
|
-
};
|
|
209
|
-
await validateNonInteractiveAuth(
|
|
210
|
-
AuthType.USE_GEMINI,
|
|
211
|
-
undefined,
|
|
212
|
-
nonInteractiveConfig,
|
|
213
|
-
);
|
|
214
|
-
expect(refreshAuthMock).toHaveBeenCalledWith(AuthType.USE_GEMINI);
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it('exits if validateAuthMethod returns error', async () => {
|
|
218
|
-
// Mock validateAuthMethod to return error
|
|
219
|
-
vi.spyOn(auth, 'validateAuthMethod').mockReturnValue('Auth error!');
|
|
220
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
221
|
-
refreshAuth: refreshAuthMock,
|
|
222
|
-
};
|
|
223
|
-
try {
|
|
224
|
-
await validateNonInteractiveAuth(
|
|
225
|
-
AuthType.USE_GEMINI,
|
|
226
|
-
undefined,
|
|
227
|
-
nonInteractiveConfig,
|
|
228
|
-
);
|
|
229
|
-
expect.fail('Should have exited');
|
|
230
|
-
} catch (e) {
|
|
231
|
-
expect((e as Error).message).toContain('process.exit(1) called');
|
|
232
|
-
}
|
|
233
|
-
expect(consoleErrorSpy).toHaveBeenCalledWith('Auth error!');
|
|
234
|
-
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
it('skips validation if useExternalAuth is true', async () => {
|
|
238
|
-
// Mock validateAuthMethod to return error to ensure it's not being called
|
|
239
|
-
const validateAuthMethodSpy = vi
|
|
240
|
-
.spyOn(auth, 'validateAuthMethod')
|
|
241
|
-
.mockReturnValue('Auth error!');
|
|
242
|
-
const nonInteractiveConfig: NonInteractiveConfig = {
|
|
243
|
-
refreshAuth: refreshAuthMock,
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
// Even with an invalid auth type, it should not exit
|
|
247
|
-
// because validation is skipped.
|
|
248
|
-
await validateNonInteractiveAuth(
|
|
249
|
-
'invalid-auth-type' as AuthType,
|
|
250
|
-
true, // useExternalAuth = true
|
|
251
|
-
nonInteractiveConfig,
|
|
252
|
-
);
|
|
253
|
-
|
|
254
|
-
expect(validateAuthMethodSpy).not.toHaveBeenCalled();
|
|
255
|
-
expect(consoleErrorSpy).not.toHaveBeenCalled();
|
|
256
|
-
expect(processExitSpy).not.toHaveBeenCalled();
|
|
257
|
-
// We still expect refreshAuth to be called with the (invalid) type
|
|
258
|
-
expect(refreshAuthMock).toHaveBeenCalledWith('invalid-auth-type');
|
|
259
|
-
});
|
|
260
|
-
});
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { AuthType, Config } from 'fss-link-core';
|
|
8
|
-
import { USER_SETTINGS_PATH } from './config/settings.js';
|
|
9
|
-
import { validateAuthMethod } from './config/auth.js';
|
|
10
|
-
|
|
11
|
-
function getAuthTypeFromEnv(): AuthType | undefined {
|
|
12
|
-
if (process.env['GOOGLE_GENAI_USE_GCA'] === 'true') {
|
|
13
|
-
return AuthType.LOGIN_WITH_GOOGLE;
|
|
14
|
-
}
|
|
15
|
-
if (process.env['GOOGLE_GENAI_USE_VERTEXAI'] === 'true') {
|
|
16
|
-
return AuthType.USE_VERTEX_AI;
|
|
17
|
-
}
|
|
18
|
-
if (process.env['GEMINI_API_KEY']) {
|
|
19
|
-
return AuthType.USE_GEMINI;
|
|
20
|
-
}
|
|
21
|
-
if (process.env['OPENAI_API_KEY']) {
|
|
22
|
-
return AuthType.USE_OPENAI;
|
|
23
|
-
}
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export async function validateNonInteractiveAuth(
|
|
28
|
-
configuredAuthType: AuthType | undefined,
|
|
29
|
-
useExternalAuth: boolean | undefined,
|
|
30
|
-
nonInteractiveConfig: Config,
|
|
31
|
-
) {
|
|
32
|
-
const effectiveAuthType = configuredAuthType || getAuthTypeFromEnv();
|
|
33
|
-
|
|
34
|
-
if (!effectiveAuthType) {
|
|
35
|
-
console.error(
|
|
36
|
-
`Please set an Auth method in your ${USER_SETTINGS_PATH} or specify one of the following environment variables before running: GEMINI_API_KEY, OPENAI_API_KEY, GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_GENAI_USE_GCA`,
|
|
37
|
-
);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!useExternalAuth) {
|
|
42
|
-
const err = validateAuthMethod(effectiveAuthType);
|
|
43
|
-
if (err != null) {
|
|
44
|
-
console.error(err);
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
await nonInteractiveConfig.refreshAuth(effectiveAuthType);
|
|
50
|
-
return nonInteractiveConfig;
|
|
51
|
-
}
|
package/dist/vitest.config.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/// <reference types="vitest" />
|
|
8
|
-
import { defineConfig } from 'vitest/config';
|
|
9
|
-
|
|
10
|
-
export default defineConfig({
|
|
11
|
-
test: {
|
|
12
|
-
include: ['**/*.{test,spec}.?(c|m)[jt]s?(x)', 'config.test.ts'],
|
|
13
|
-
exclude: ['**/node_modules/**', '**/dist/**', '**/cypress/**'],
|
|
14
|
-
environment: 'jsdom',
|
|
15
|
-
globals: true,
|
|
16
|
-
reporters: ['default', 'junit'],
|
|
17
|
-
silent: true,
|
|
18
|
-
outputFile: {
|
|
19
|
-
junit: 'junit.xml',
|
|
20
|
-
},
|
|
21
|
-
setupFiles: ['./test-setup.ts'],
|
|
22
|
-
coverage: {
|
|
23
|
-
enabled: true,
|
|
24
|
-
provider: 'v8',
|
|
25
|
-
reportsDirectory: './coverage',
|
|
26
|
-
include: ['src/**/*'],
|
|
27
|
-
reporter: [
|
|
28
|
-
['text', { file: 'full-text-summary.txt' }],
|
|
29
|
-
'html',
|
|
30
|
-
'json',
|
|
31
|
-
'lcov',
|
|
32
|
-
'cobertura',
|
|
33
|
-
['json-summary', { outputFile: 'coverage-summary.json' }],
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
});
|