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
package/dist/ui/types.ts
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
ToolCallConfirmationDetails,
|
|
9
|
-
ToolResultDisplay,
|
|
10
|
-
} from 'fss-link-core';
|
|
11
|
-
|
|
12
|
-
// Only defining the state enum needed by the UI
|
|
13
|
-
export enum StreamingState {
|
|
14
|
-
Idle = 'idle',
|
|
15
|
-
Responding = 'responding',
|
|
16
|
-
WaitingForConfirmation = 'waiting_for_confirmation',
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Copied from server/src/core/turn.ts for CLI usage
|
|
20
|
-
export enum GeminiEventType {
|
|
21
|
-
Content = 'content',
|
|
22
|
-
ToolCallRequest = 'tool_call_request',
|
|
23
|
-
// Add other event types if the UI hook needs to handle them
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export enum ToolCallStatus {
|
|
27
|
-
Pending = 'Pending',
|
|
28
|
-
Canceled = 'Canceled',
|
|
29
|
-
Confirming = 'Confirming',
|
|
30
|
-
Executing = 'Executing',
|
|
31
|
-
Success = 'Success',
|
|
32
|
-
Error = 'Error',
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface ToolCallEvent {
|
|
36
|
-
type: 'tool_call';
|
|
37
|
-
status: ToolCallStatus;
|
|
38
|
-
callId: string;
|
|
39
|
-
name: string;
|
|
40
|
-
args: Record<string, never>;
|
|
41
|
-
resultDisplay: ToolResultDisplay | undefined;
|
|
42
|
-
confirmationDetails: ToolCallConfirmationDetails | undefined;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface IndividualToolCallDisplay {
|
|
46
|
-
callId: string;
|
|
47
|
-
name: string;
|
|
48
|
-
description: string;
|
|
49
|
-
resultDisplay: ToolResultDisplay | undefined;
|
|
50
|
-
status: ToolCallStatus;
|
|
51
|
-
confirmationDetails: ToolCallConfirmationDetails | undefined;
|
|
52
|
-
renderOutputAsMarkdown?: boolean;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface CompressionProps {
|
|
56
|
-
isPending: boolean;
|
|
57
|
-
originalTokenCount: number | null;
|
|
58
|
-
newTokenCount: number | null;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export interface HistoryItemBase {
|
|
62
|
-
text?: string; // Text content for user/gemini/info/error messages
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export type HistoryItemUser = HistoryItemBase & {
|
|
66
|
-
type: 'user';
|
|
67
|
-
text: string;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export type HistoryItemGemini = HistoryItemBase & {
|
|
71
|
-
type: 'gemini';
|
|
72
|
-
text: string;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export type HistoryItemGeminiContent = HistoryItemBase & {
|
|
76
|
-
type: 'gemini_content';
|
|
77
|
-
text: string;
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export type HistoryItemInfo = HistoryItemBase & {
|
|
81
|
-
type: 'info';
|
|
82
|
-
text: string;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export type HistoryItemError = HistoryItemBase & {
|
|
86
|
-
type: 'error';
|
|
87
|
-
text: string;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export type HistoryItemAbout = HistoryItemBase & {
|
|
91
|
-
type: 'about';
|
|
92
|
-
cliVersion: string;
|
|
93
|
-
osVersion: string;
|
|
94
|
-
sandboxEnv: string;
|
|
95
|
-
modelVersion: string;
|
|
96
|
-
selectedAuthType: string;
|
|
97
|
-
gcpProject: string;
|
|
98
|
-
ideClient: string;
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export type HistoryItemHelp = HistoryItemBase & {
|
|
102
|
-
type: 'help';
|
|
103
|
-
timestamp: Date;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
export type HistoryItemStats = HistoryItemBase & {
|
|
107
|
-
type: 'stats';
|
|
108
|
-
duration: string;
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
export type HistoryItemModelStats = HistoryItemBase & {
|
|
112
|
-
type: 'model_stats';
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
export type HistoryItemToolStats = HistoryItemBase & {
|
|
116
|
-
type: 'tool_stats';
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export type HistoryItemQuit = HistoryItemBase & {
|
|
120
|
-
type: 'quit';
|
|
121
|
-
duration: string;
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
export type HistoryItemToolGroup = HistoryItemBase & {
|
|
125
|
-
type: 'tool_group';
|
|
126
|
-
tools: IndividualToolCallDisplay[];
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
export type HistoryItemUserShell = HistoryItemBase & {
|
|
130
|
-
type: 'user_shell';
|
|
131
|
-
text: string;
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
export type HistoryItemCompression = HistoryItemBase & {
|
|
135
|
-
type: 'compression';
|
|
136
|
-
compression: CompressionProps;
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
// Using Omit<HistoryItem, 'id'> seems to have some issues with typescript's
|
|
140
|
-
// type inference e.g. historyItem.type === 'tool_group' isn't auto-inferring that
|
|
141
|
-
// 'tools' in historyItem.
|
|
142
|
-
// Individually exported types extending HistoryItemBase
|
|
143
|
-
export type HistoryItemWithoutId =
|
|
144
|
-
| HistoryItemUser
|
|
145
|
-
| HistoryItemUserShell
|
|
146
|
-
| HistoryItemGemini
|
|
147
|
-
| HistoryItemGeminiContent
|
|
148
|
-
| HistoryItemInfo
|
|
149
|
-
| HistoryItemError
|
|
150
|
-
| HistoryItemAbout
|
|
151
|
-
| HistoryItemHelp
|
|
152
|
-
| HistoryItemToolGroup
|
|
153
|
-
| HistoryItemStats
|
|
154
|
-
| HistoryItemModelStats
|
|
155
|
-
| HistoryItemToolStats
|
|
156
|
-
| HistoryItemQuit
|
|
157
|
-
| HistoryItemCompression;
|
|
158
|
-
|
|
159
|
-
export type HistoryItem = HistoryItemWithoutId & { id: number };
|
|
160
|
-
|
|
161
|
-
// Message types used by internal command feedback (subset of HistoryItem types)
|
|
162
|
-
export enum MessageType {
|
|
163
|
-
INFO = 'info',
|
|
164
|
-
ERROR = 'error',
|
|
165
|
-
USER = 'user',
|
|
166
|
-
ABOUT = 'about',
|
|
167
|
-
HELP = 'help',
|
|
168
|
-
STATS = 'stats',
|
|
169
|
-
MODEL_STATS = 'model_stats',
|
|
170
|
-
TOOL_STATS = 'tool_stats',
|
|
171
|
-
QUIT = 'quit',
|
|
172
|
-
FSS_LINK = 'fss_link',
|
|
173
|
-
COMPRESSION = 'compression',
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Simplified message structure for internal feedback
|
|
177
|
-
export type Message =
|
|
178
|
-
| {
|
|
179
|
-
type: MessageType.INFO | MessageType.ERROR | MessageType.USER;
|
|
180
|
-
content: string; // Renamed from text for clarity in this context
|
|
181
|
-
timestamp: Date;
|
|
182
|
-
}
|
|
183
|
-
| {
|
|
184
|
-
type: MessageType.ABOUT;
|
|
185
|
-
timestamp: Date;
|
|
186
|
-
cliVersion: string;
|
|
187
|
-
osVersion: string;
|
|
188
|
-
sandboxEnv: string;
|
|
189
|
-
modelVersion: string;
|
|
190
|
-
selectedAuthType: string;
|
|
191
|
-
gcpProject: string;
|
|
192
|
-
ideClient: string;
|
|
193
|
-
content?: string; // Optional content, not really used for ABOUT
|
|
194
|
-
}
|
|
195
|
-
| {
|
|
196
|
-
type: MessageType.HELP;
|
|
197
|
-
timestamp: Date;
|
|
198
|
-
content?: string; // Optional content, not really used for HELP
|
|
199
|
-
}
|
|
200
|
-
| {
|
|
201
|
-
type: MessageType.STATS;
|
|
202
|
-
timestamp: Date;
|
|
203
|
-
duration: string;
|
|
204
|
-
content?: string;
|
|
205
|
-
}
|
|
206
|
-
| {
|
|
207
|
-
type: MessageType.MODEL_STATS;
|
|
208
|
-
timestamp: Date;
|
|
209
|
-
content?: string;
|
|
210
|
-
}
|
|
211
|
-
| {
|
|
212
|
-
type: MessageType.TOOL_STATS;
|
|
213
|
-
timestamp: Date;
|
|
214
|
-
content?: string;
|
|
215
|
-
}
|
|
216
|
-
| {
|
|
217
|
-
type: MessageType.QUIT;
|
|
218
|
-
timestamp: Date;
|
|
219
|
-
duration: string;
|
|
220
|
-
content?: string;
|
|
221
|
-
}
|
|
222
|
-
| {
|
|
223
|
-
type: MessageType.COMPRESSION;
|
|
224
|
-
compression: CompressionProps;
|
|
225
|
-
timestamp: Date;
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
export interface ConsoleMessageItem {
|
|
229
|
-
type: 'log' | 'warn' | 'error' | 'debug' | 'info';
|
|
230
|
-
content: string;
|
|
231
|
-
count: number;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Result type for a slash command that should immediately result in a prompt
|
|
236
|
-
* being submitted to the Gemini model.
|
|
237
|
-
*/
|
|
238
|
-
export interface SubmitPromptResult {
|
|
239
|
-
type: 'submit_prompt';
|
|
240
|
-
content: string;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Defines the result of the slash command processor for its consumer (useGeminiStream).
|
|
245
|
-
*/
|
|
246
|
-
export type SlashCommandProcessorResult =
|
|
247
|
-
| {
|
|
248
|
-
type: 'schedule_tool';
|
|
249
|
-
toolName: string;
|
|
250
|
-
toolArgs: Record<string, unknown>;
|
|
251
|
-
}
|
|
252
|
-
| {
|
|
253
|
-
type: 'handled'; // Indicates the command was processed and no further action is needed.
|
|
254
|
-
}
|
|
255
|
-
| SubmitPromptResult;
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import React from 'react';
|
|
8
|
-
import { Text, Box } from 'ink';
|
|
9
|
-
import { common, createLowlight } from 'lowlight';
|
|
10
|
-
import type {
|
|
11
|
-
Root,
|
|
12
|
-
Element,
|
|
13
|
-
Text as HastText,
|
|
14
|
-
ElementContent,
|
|
15
|
-
RootContent,
|
|
16
|
-
} from 'hast';
|
|
17
|
-
import { themeManager } from '../themes/theme-manager.js';
|
|
18
|
-
import { Theme } from '../themes/theme.js';
|
|
19
|
-
import {
|
|
20
|
-
MaxSizedBox,
|
|
21
|
-
MINIMUM_MAX_HEIGHT,
|
|
22
|
-
} from '../components/shared/MaxSizedBox.js';
|
|
23
|
-
import { LoadedSettings } from '../../config/settings.js';
|
|
24
|
-
|
|
25
|
-
// Configure theming and parsing utilities.
|
|
26
|
-
const lowlight = createLowlight(common);
|
|
27
|
-
|
|
28
|
-
function renderHastNode(
|
|
29
|
-
node: Root | Element | HastText | RootContent,
|
|
30
|
-
theme: Theme,
|
|
31
|
-
inheritedColor: string | undefined,
|
|
32
|
-
): React.ReactNode {
|
|
33
|
-
if (node.type === 'text') {
|
|
34
|
-
// Use the color passed down from parent element, if any
|
|
35
|
-
return <Text color={inheritedColor}>{node.value}</Text>;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Handle Element Nodes: Determine color and pass it down, don't wrap
|
|
39
|
-
if (node.type === 'element') {
|
|
40
|
-
const nodeClasses: string[] =
|
|
41
|
-
(node.properties?.['className'] as string[]) || [];
|
|
42
|
-
let elementColor: string | undefined = undefined;
|
|
43
|
-
|
|
44
|
-
// Find color defined specifically for this element's class
|
|
45
|
-
for (let i = nodeClasses.length - 1; i >= 0; i--) {
|
|
46
|
-
const color = theme.getInkColor(nodeClasses[i]);
|
|
47
|
-
if (color) {
|
|
48
|
-
elementColor = color;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Determine the color to pass down: Use this element's specific color
|
|
54
|
-
// if found; otherwise, continue passing down the already inherited color.
|
|
55
|
-
const colorToPassDown = elementColor || inheritedColor;
|
|
56
|
-
|
|
57
|
-
// Recursively render children, passing the determined color down
|
|
58
|
-
// Ensure child type matches expected HAST structure (ElementContent is common)
|
|
59
|
-
const children = node.children?.map(
|
|
60
|
-
(child: ElementContent, index: number) => (
|
|
61
|
-
<React.Fragment key={index}>
|
|
62
|
-
{renderHastNode(child, theme, colorToPassDown)}
|
|
63
|
-
</React.Fragment>
|
|
64
|
-
),
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
// Element nodes now only group children; color is applied by Text nodes.
|
|
68
|
-
// Use a React Fragment to avoid adding unnecessary elements.
|
|
69
|
-
return <React.Fragment>{children}</React.Fragment>;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Handle Root Node: Start recursion with initially inherited color
|
|
73
|
-
if (node.type === 'root') {
|
|
74
|
-
// Check if children array is empty - this happens when lowlight can't detect language – fall back to plain text
|
|
75
|
-
if (!node.children || node.children.length === 0) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Pass down the initial inheritedColor (likely undefined from the top call)
|
|
80
|
-
// Ensure child type matches expected HAST structure (RootContent is common)
|
|
81
|
-
return node.children?.map((child: RootContent, index: number) => (
|
|
82
|
-
<React.Fragment key={index}>
|
|
83
|
-
{renderHastNode(child, theme, inheritedColor)}
|
|
84
|
-
</React.Fragment>
|
|
85
|
-
));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Handle unknown or unsupported node types
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function highlightAndRenderLine(
|
|
93
|
-
line: string,
|
|
94
|
-
language: string | null,
|
|
95
|
-
theme: Theme,
|
|
96
|
-
): React.ReactNode {
|
|
97
|
-
try {
|
|
98
|
-
const getHighlightedLine = () =>
|
|
99
|
-
!language || !lowlight.registered(language)
|
|
100
|
-
? lowlight.highlightAuto(line)
|
|
101
|
-
: lowlight.highlight(language, line);
|
|
102
|
-
|
|
103
|
-
const renderedNode = renderHastNode(getHighlightedLine(), theme, undefined);
|
|
104
|
-
|
|
105
|
-
return renderedNode !== null ? renderedNode : line;
|
|
106
|
-
} catch (_error) {
|
|
107
|
-
return line;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export function colorizeLine(
|
|
112
|
-
line: string,
|
|
113
|
-
language: string | null,
|
|
114
|
-
theme?: Theme,
|
|
115
|
-
): React.ReactNode {
|
|
116
|
-
const activeTheme = theme || themeManager.getActiveTheme();
|
|
117
|
-
return highlightAndRenderLine(line, language, activeTheme);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Renders syntax-highlighted code for Ink applications using a selected theme.
|
|
122
|
-
*
|
|
123
|
-
* @param code The code string to highlight.
|
|
124
|
-
* @param language The language identifier (e.g., 'javascript', 'css', 'html')
|
|
125
|
-
* @returns A React.ReactNode containing Ink <Text> elements for the highlighted code.
|
|
126
|
-
*/
|
|
127
|
-
export function colorizeCode(
|
|
128
|
-
code: string,
|
|
129
|
-
language: string | null,
|
|
130
|
-
availableHeight?: number,
|
|
131
|
-
maxWidth?: number,
|
|
132
|
-
theme?: Theme,
|
|
133
|
-
settings?: LoadedSettings,
|
|
134
|
-
): React.ReactNode {
|
|
135
|
-
const codeToHighlight = code.replace(/\n$/, '');
|
|
136
|
-
const activeTheme = theme || themeManager.getActiveTheme();
|
|
137
|
-
const showLineNumbers = settings?.merged.showLineNumbers ?? true;
|
|
138
|
-
|
|
139
|
-
try {
|
|
140
|
-
// Render the HAST tree using the adapted theme
|
|
141
|
-
// Apply the theme's default foreground color to the top-level Text element
|
|
142
|
-
let lines = codeToHighlight.split('\n');
|
|
143
|
-
const padWidth = String(lines.length).length; // Calculate padding width based on number of lines
|
|
144
|
-
|
|
145
|
-
let hiddenLinesCount = 0;
|
|
146
|
-
|
|
147
|
-
// Optimization to avoid highlighting lines that cannot possibly be displayed.
|
|
148
|
-
if (availableHeight !== undefined) {
|
|
149
|
-
availableHeight = Math.max(availableHeight, MINIMUM_MAX_HEIGHT);
|
|
150
|
-
if (lines.length > availableHeight) {
|
|
151
|
-
const sliceIndex = lines.length - availableHeight;
|
|
152
|
-
hiddenLinesCount = sliceIndex;
|
|
153
|
-
lines = lines.slice(sliceIndex);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return (
|
|
158
|
-
<MaxSizedBox
|
|
159
|
-
maxHeight={availableHeight}
|
|
160
|
-
maxWidth={maxWidth}
|
|
161
|
-
additionalHiddenLinesCount={hiddenLinesCount}
|
|
162
|
-
overflowDirection="top"
|
|
163
|
-
>
|
|
164
|
-
{lines.map((line, index) => {
|
|
165
|
-
const contentToRender = highlightAndRenderLine(
|
|
166
|
-
line,
|
|
167
|
-
language,
|
|
168
|
-
activeTheme,
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
return (
|
|
172
|
-
<Box key={index}>
|
|
173
|
-
{showLineNumbers && (
|
|
174
|
-
<Text color={activeTheme.colors.Gray}>
|
|
175
|
-
{`${String(index + 1 + hiddenLinesCount).padStart(
|
|
176
|
-
padWidth,
|
|
177
|
-
' ',
|
|
178
|
-
)} `}
|
|
179
|
-
</Text>
|
|
180
|
-
)}
|
|
181
|
-
<Text color={activeTheme.defaultColor} wrap="wrap">
|
|
182
|
-
{contentToRender}
|
|
183
|
-
</Text>
|
|
184
|
-
</Box>
|
|
185
|
-
);
|
|
186
|
-
})}
|
|
187
|
-
</MaxSizedBox>
|
|
188
|
-
);
|
|
189
|
-
} catch (error) {
|
|
190
|
-
console.error(
|
|
191
|
-
`[colorizeCode] Error highlighting code for language "${language}":`,
|
|
192
|
-
error,
|
|
193
|
-
);
|
|
194
|
-
// Fall back to plain text with default color on error
|
|
195
|
-
// Also display line numbers in fallback
|
|
196
|
-
const lines = codeToHighlight.split('\n');
|
|
197
|
-
const padWidth = String(lines.length).length; // Calculate padding width based on number of lines
|
|
198
|
-
return (
|
|
199
|
-
<MaxSizedBox
|
|
200
|
-
maxHeight={availableHeight}
|
|
201
|
-
maxWidth={maxWidth}
|
|
202
|
-
overflowDirection="top"
|
|
203
|
-
>
|
|
204
|
-
{lines.map((line, index) => (
|
|
205
|
-
<Box key={index}>
|
|
206
|
-
{showLineNumbers && (
|
|
207
|
-
<Text color={activeTheme.defaultColor}>
|
|
208
|
-
{`${String(index + 1).padStart(padWidth, ' ')} `}
|
|
209
|
-
</Text>
|
|
210
|
-
)}
|
|
211
|
-
<Text color={activeTheme.colors.Gray}>{line}</Text>
|
|
212
|
-
</Box>
|
|
213
|
-
))}
|
|
214
|
-
</MaxSizedBox>
|
|
215
|
-
);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import util from 'util';
|
|
8
|
-
import { ConsoleMessageItem } from '../types.js';
|
|
9
|
-
|
|
10
|
-
interface ConsolePatcherParams {
|
|
11
|
-
onNewMessage?: (message: Omit<ConsoleMessageItem, 'id'>) => void;
|
|
12
|
-
debugMode: boolean;
|
|
13
|
-
stderr?: boolean;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export class ConsolePatcher {
|
|
17
|
-
private originalConsoleLog = console.log;
|
|
18
|
-
private originalConsoleWarn = console.warn;
|
|
19
|
-
private originalConsoleError = console.error;
|
|
20
|
-
private originalConsoleDebug = console.debug;
|
|
21
|
-
private originalConsoleInfo = console.info;
|
|
22
|
-
|
|
23
|
-
private params: ConsolePatcherParams;
|
|
24
|
-
|
|
25
|
-
constructor(params: ConsolePatcherParams) {
|
|
26
|
-
this.params = params;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
patch() {
|
|
30
|
-
console.log = this.patchConsoleMethod('log', this.originalConsoleLog);
|
|
31
|
-
console.warn = this.patchConsoleMethod('warn', this.originalConsoleWarn);
|
|
32
|
-
console.error = this.patchConsoleMethod('error', this.originalConsoleError);
|
|
33
|
-
console.debug = this.patchConsoleMethod('debug', this.originalConsoleDebug);
|
|
34
|
-
console.info = this.patchConsoleMethod('info', this.originalConsoleInfo);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
cleanup = () => {
|
|
38
|
-
console.log = this.originalConsoleLog;
|
|
39
|
-
console.warn = this.originalConsoleWarn;
|
|
40
|
-
console.error = this.originalConsoleError;
|
|
41
|
-
console.debug = this.originalConsoleDebug;
|
|
42
|
-
console.info = this.originalConsoleInfo;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
private formatArgs = (args: unknown[]): string => util.format(...args);
|
|
46
|
-
|
|
47
|
-
private patchConsoleMethod =
|
|
48
|
-
(
|
|
49
|
-
type: 'log' | 'warn' | 'error' | 'debug' | 'info',
|
|
50
|
-
originalMethod: (...args: unknown[]) => void,
|
|
51
|
-
) =>
|
|
52
|
-
(...args: unknown[]) => {
|
|
53
|
-
if (this.params.stderr) {
|
|
54
|
-
if (type !== 'debug' || this.params.debugMode) {
|
|
55
|
-
this.originalConsoleError(this.formatArgs(args));
|
|
56
|
-
}
|
|
57
|
-
} else {
|
|
58
|
-
if (this.params.debugMode) {
|
|
59
|
-
originalMethod.apply(console, args);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (type !== 'debug' || this.params.debugMode) {
|
|
63
|
-
this.params.onNewMessage?.({
|
|
64
|
-
type,
|
|
65
|
-
content: this.formatArgs(args),
|
|
66
|
-
count: 1,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import React from 'react';
|
|
8
|
-
import { Text } from 'ink';
|
|
9
|
-
import { Colors } from '../colors.js';
|
|
10
|
-
import stringWidth from 'string-width';
|
|
11
|
-
|
|
12
|
-
// Constants for Markdown parsing
|
|
13
|
-
const BOLD_MARKER_LENGTH = 2; // For "**"
|
|
14
|
-
const ITALIC_MARKER_LENGTH = 1; // For "*" or "_"
|
|
15
|
-
const STRIKETHROUGH_MARKER_LENGTH = 2; // For "~~"
|
|
16
|
-
const INLINE_CODE_MARKER_LENGTH = 1; // For "`"
|
|
17
|
-
const UNDERLINE_TAG_START_LENGTH = 3; // For "<u>"
|
|
18
|
-
const UNDERLINE_TAG_END_LENGTH = 4; // For "</u>"
|
|
19
|
-
|
|
20
|
-
interface RenderInlineProps {
|
|
21
|
-
text: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const RenderInlineInternal: React.FC<RenderInlineProps> = ({ text }) => {
|
|
25
|
-
// Early return for plain text without markdown or URLs
|
|
26
|
-
if (!/[*_~`<[https?:]/.test(text)) {
|
|
27
|
-
return <Text>{text}</Text>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const nodes: React.ReactNode[] = [];
|
|
31
|
-
let lastIndex = 0;
|
|
32
|
-
const inlineRegex =
|
|
33
|
-
/(\*\*.*?\*\*|\*.*?\*|_.*?_|~~.*?~~|\[.*?\]\(.*?\)|`+.+?`+|<u>.*?<\/u>|https?:\/\/\S+)/g;
|
|
34
|
-
let match;
|
|
35
|
-
|
|
36
|
-
while ((match = inlineRegex.exec(text)) !== null) {
|
|
37
|
-
if (match.index > lastIndex) {
|
|
38
|
-
nodes.push(
|
|
39
|
-
<Text key={`t-${lastIndex}`}>
|
|
40
|
-
{text.slice(lastIndex, match.index)}
|
|
41
|
-
</Text>,
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const fullMatch = match[0];
|
|
46
|
-
let renderedNode: React.ReactNode = null;
|
|
47
|
-
const key = `m-${match.index}`;
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
if (
|
|
51
|
-
fullMatch.startsWith('**') &&
|
|
52
|
-
fullMatch.endsWith('**') &&
|
|
53
|
-
fullMatch.length > BOLD_MARKER_LENGTH * 2
|
|
54
|
-
) {
|
|
55
|
-
renderedNode = (
|
|
56
|
-
<Text key={key} bold>
|
|
57
|
-
{fullMatch.slice(BOLD_MARKER_LENGTH, -BOLD_MARKER_LENGTH)}
|
|
58
|
-
</Text>
|
|
59
|
-
);
|
|
60
|
-
} else if (
|
|
61
|
-
fullMatch.length > ITALIC_MARKER_LENGTH * 2 &&
|
|
62
|
-
((fullMatch.startsWith('*') && fullMatch.endsWith('*')) ||
|
|
63
|
-
(fullMatch.startsWith('_') && fullMatch.endsWith('_'))) &&
|
|
64
|
-
!/\w/.test(text.substring(match.index - 1, match.index)) &&
|
|
65
|
-
!/\w/.test(
|
|
66
|
-
text.substring(inlineRegex.lastIndex, inlineRegex.lastIndex + 1),
|
|
67
|
-
) &&
|
|
68
|
-
!/\S[./\\]/.test(text.substring(match.index - 2, match.index)) &&
|
|
69
|
-
!/[./\\]\S/.test(
|
|
70
|
-
text.substring(inlineRegex.lastIndex, inlineRegex.lastIndex + 2),
|
|
71
|
-
)
|
|
72
|
-
) {
|
|
73
|
-
renderedNode = (
|
|
74
|
-
<Text key={key} italic>
|
|
75
|
-
{fullMatch.slice(ITALIC_MARKER_LENGTH, -ITALIC_MARKER_LENGTH)}
|
|
76
|
-
</Text>
|
|
77
|
-
);
|
|
78
|
-
} else if (
|
|
79
|
-
fullMatch.startsWith('~~') &&
|
|
80
|
-
fullMatch.endsWith('~~') &&
|
|
81
|
-
fullMatch.length > STRIKETHROUGH_MARKER_LENGTH * 2
|
|
82
|
-
) {
|
|
83
|
-
renderedNode = (
|
|
84
|
-
<Text key={key} strikethrough>
|
|
85
|
-
{fullMatch.slice(
|
|
86
|
-
STRIKETHROUGH_MARKER_LENGTH,
|
|
87
|
-
-STRIKETHROUGH_MARKER_LENGTH,
|
|
88
|
-
)}
|
|
89
|
-
</Text>
|
|
90
|
-
);
|
|
91
|
-
} else if (
|
|
92
|
-
fullMatch.startsWith('`') &&
|
|
93
|
-
fullMatch.endsWith('`') &&
|
|
94
|
-
fullMatch.length > INLINE_CODE_MARKER_LENGTH
|
|
95
|
-
) {
|
|
96
|
-
const codeMatch = fullMatch.match(/^(`+)(.+?)\1$/s);
|
|
97
|
-
if (codeMatch && codeMatch[2]) {
|
|
98
|
-
renderedNode = (
|
|
99
|
-
<Text key={key} color={Colors.AccentPurple}>
|
|
100
|
-
{codeMatch[2]}
|
|
101
|
-
</Text>
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
} else if (
|
|
105
|
-
fullMatch.startsWith('[') &&
|
|
106
|
-
fullMatch.includes('](') &&
|
|
107
|
-
fullMatch.endsWith(')')
|
|
108
|
-
) {
|
|
109
|
-
const linkMatch = fullMatch.match(/\[(.*?)\]\((.*?)\)/);
|
|
110
|
-
if (linkMatch) {
|
|
111
|
-
const linkText = linkMatch[1];
|
|
112
|
-
const url = linkMatch[2];
|
|
113
|
-
renderedNode = (
|
|
114
|
-
<Text key={key}>
|
|
115
|
-
{linkText}
|
|
116
|
-
<Text color={Colors.AccentBlue}> ({url})</Text>
|
|
117
|
-
</Text>
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
} else if (
|
|
121
|
-
fullMatch.startsWith('<u>') &&
|
|
122
|
-
fullMatch.endsWith('</u>') &&
|
|
123
|
-
fullMatch.length >
|
|
124
|
-
UNDERLINE_TAG_START_LENGTH + UNDERLINE_TAG_END_LENGTH - 1 // -1 because length is compared to combined length of start and end tags
|
|
125
|
-
) {
|
|
126
|
-
renderedNode = (
|
|
127
|
-
<Text key={key} underline>
|
|
128
|
-
{fullMatch.slice(
|
|
129
|
-
UNDERLINE_TAG_START_LENGTH,
|
|
130
|
-
-UNDERLINE_TAG_END_LENGTH,
|
|
131
|
-
)}
|
|
132
|
-
</Text>
|
|
133
|
-
);
|
|
134
|
-
} else if (fullMatch.match(/^https?:\/\//)) {
|
|
135
|
-
renderedNode = (
|
|
136
|
-
<Text key={key} color={Colors.AccentBlue}>
|
|
137
|
-
{fullMatch}
|
|
138
|
-
</Text>
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
} catch (e) {
|
|
142
|
-
console.error('Error parsing inline markdown part:', fullMatch, e);
|
|
143
|
-
renderedNode = null;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
nodes.push(renderedNode ?? <Text key={key}>{fullMatch}</Text>);
|
|
147
|
-
lastIndex = inlineRegex.lastIndex;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
if (lastIndex < text.length) {
|
|
151
|
-
nodes.push(<Text key={`t-${lastIndex}`}>{text.slice(lastIndex)}</Text>);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return <>{nodes.filter((node) => node !== null)}</>;
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
export const RenderInline = React.memo(RenderInlineInternal);
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Utility function to get the plain text length of a string with markdown formatting
|
|
161
|
-
* This is useful for calculating column widths in tables
|
|
162
|
-
*/
|
|
163
|
-
export const getPlainTextLength = (text: string): number => {
|
|
164
|
-
const cleanText = text
|
|
165
|
-
.replace(/\*\*(.*?)\*\*/g, '$1')
|
|
166
|
-
.replace(/\*(.*?)\*/g, '$1')
|
|
167
|
-
.replace(/_(.*?)_/g, '$1')
|
|
168
|
-
.replace(/~~(.*?)~~/g, '$1')
|
|
169
|
-
.replace(/`(.*?)`/g, '$1')
|
|
170
|
-
.replace(/<u>(.*?)<\/u>/g, '$1')
|
|
171
|
-
.replace(/\[(.*?)\]\(.*?\)/g, '$1');
|
|
172
|
-
return stringWidth(cleanText);
|
|
173
|
-
};
|