mpd-llm-cli 0.1.18 → 0.1.20
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/.last_build +0 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +83 -0
- package/dist/src/api/index.d.ts +17 -0
- package/dist/src/api/index.js +192 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/api/types.d.ts +32 -0
- package/dist/src/api/types.js +2 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/api/util.d.ts +4 -0
- package/dist/src/api/util.js +67 -0
- package/dist/src/api/util.js.map +1 -0
- package/dist/src/config/auth.d.ts +6 -0
- package/dist/src/config/auth.js +42 -0
- package/dist/src/config/auth.js.map +1 -0
- package/dist/src/config/config.d.ts +13 -0
- package/dist/src/config/config.js +248 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/extension.d.ts +21 -0
- package/dist/src/config/extension.js +109 -0
- package/dist/src/config/extension.js.map +1 -0
- package/dist/src/config/mpdaiConfig.d.ts +28 -0
- package/dist/src/config/mpdaiConfig.js +84 -0
- package/dist/src/config/mpdaiConfig.js.map +1 -0
- package/dist/src/config/sandboxConfig.d.ts +13 -0
- package/dist/src/config/sandboxConfig.js +75 -0
- package/dist/src/config/sandboxConfig.js.map +1 -0
- package/dist/src/config/settings.d.ts +72 -0
- package/dist/src/config/settings.js +227 -0
- package/dist/src/config/settings.js.map +1 -0
- package/dist/src/config/startup.d.ts +21 -0
- package/dist/src/config/startup.js +118 -0
- package/dist/src/config/startup.js.map +1 -0
- package/dist/src/gemini.d.ts +6 -0
- package/dist/src/gemini.js +300 -0
- package/dist/src/gemini.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +6 -0
- package/dist/src/generated/git-commit.js +9 -0
- package/dist/src/generated/git-commit.js.map +1 -0
- package/dist/src/nonInteractiveCli.d.ts +7 -0
- package/dist/src/nonInteractiveCli.js +115 -0
- package/dist/src/nonInteractiveCli.js.map +1 -0
- package/dist/src/services/AuthService.d.ts +110 -0
- package/dist/src/services/AuthService.js +258 -0
- package/dist/src/services/AuthService.js.map +1 -0
- package/dist/src/services/CommandService.d.ts +13 -0
- package/dist/src/services/CommandService.js +34 -0
- package/dist/src/services/CommandService.js.map +1 -0
- package/dist/src/services/EnvConfigManager.d.ts +34 -0
- package/dist/src/services/EnvConfigManager.js +141 -0
- package/dist/src/services/EnvConfigManager.js.map +1 -0
- package/dist/src/services/README.md +114 -0
- package/dist/src/services/debug-auth.d.ts +10 -0
- package/dist/src/services/debug-auth.js +104 -0
- package/dist/src/services/debug-auth.js.map +1 -0
- package/dist/src/services/demo.d.ts +10 -0
- package/dist/src/services/demo.js +96 -0
- package/dist/src/services/demo.js.map +1 -0
- package/dist/src/services/test-auth.d.ts +10 -0
- package/dist/src/services/test-auth.js +104 -0
- package/dist/src/services/test-auth.js.map +1 -0
- package/dist/src/services/test-readline.d.ts +6 -0
- package/dist/src/services/test-readline.js +32 -0
- package/dist/src/services/test-readline.js.map +1 -0
- package/dist/src/telemetry/README.md +135 -0
- package/dist/src/telemetry/costCalculator.d.ts +401 -0
- package/dist/src/telemetry/costCalculator.js +555 -0
- package/dist/src/telemetry/costCalculator.js.map +1 -0
- package/dist/src/telemetry/dataCollector.d.ts +83 -0
- package/dist/src/telemetry/dataCollector.js +392 -0
- package/dist/src/telemetry/dataCollector.js.map +1 -0
- package/dist/src/telemetry/langfuseClient.d.ts +64 -0
- package/dist/src/telemetry/langfuseClient.js +382 -0
- package/dist/src/telemetry/langfuseClient.js.map +1 -0
- package/dist/src/telemetry/langfuseConfig.d.ts +21 -0
- package/dist/src/telemetry/langfuseConfig.js +64 -0
- package/dist/src/telemetry/langfuseConfig.js.map +1 -0
- package/dist/src/telemetry/langfuseIntegration.d.ts +62 -0
- package/dist/src/telemetry/langfuseIntegration.js +173 -0
- package/dist/src/telemetry/langfuseIntegration.js.map +1 -0
- package/dist/src/telemetry/toolExecutionInterceptor.d.ts +29 -0
- package/dist/src/telemetry/toolExecutionInterceptor.js +122 -0
- package/dist/src/telemetry/toolExecutionInterceptor.js.map +1 -0
- package/dist/src/ui/App.d.ts +14 -0
- package/dist/src/ui/App.js +466 -0
- package/dist/src/ui/App.js.map +1 -0
- package/dist/src/ui/colors.d.ts +7 -0
- package/dist/src/ui/colors.js +48 -0
- package/dist/src/ui/colors.js.map +1 -0
- package/dist/src/ui/commands/clearCommand.d.ts +7 -0
- package/dist/src/ui/commands/clearCommand.js +15 -0
- package/dist/src/ui/commands/clearCommand.js.map +1 -0
- package/dist/src/ui/commands/helpCommand.d.ts +7 -0
- package/dist/src/ui/commands/helpCommand.js +18 -0
- package/dist/src/ui/commands/helpCommand.js.map +1 -0
- package/dist/src/ui/commands/logoutCommand.d.ts +7 -0
- package/dist/src/ui/commands/logoutCommand.js +77 -0
- package/dist/src/ui/commands/logoutCommand.js.map +1 -0
- package/dist/src/ui/commands/memoryCommand.d.ts +7 -0
- package/dist/src/ui/commands/memoryCommand.js +81 -0
- package/dist/src/ui/commands/memoryCommand.js.map +1 -0
- package/dist/src/ui/commands/modelCommand.d.ts +14 -0
- package/dist/src/ui/commands/modelCommand.js +58 -0
- package/dist/src/ui/commands/modelCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +63 -0
- package/dist/src/ui/commands/types.js +7 -0
- package/dist/src/ui/commands/types.js.map +1 -0
- package/dist/src/ui/components/AboutBox.d.ts +16 -0
- package/dist/src/ui/components/AboutBox.js +6 -0
- package/dist/src/ui/components/AboutBox.js.map +1 -0
- package/dist/src/ui/components/AsciiArt.d.ts +7 -0
- package/dist/src/ui/components/AsciiArt.js +25 -0
- package/dist/src/ui/components/AsciiArt.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.d.ts +15 -0
- package/dist/src/ui/components/AuthDialog.js +75 -0
- package/dist/src/ui/components/AuthDialog.js.map +1 -0
- package/dist/src/ui/components/AuthInProgress.d.ts +11 -0
- package/dist/src/ui/components/AuthInProgress.js +27 -0
- package/dist/src/ui/components/AuthInProgress.js.map +1 -0
- package/dist/src/ui/components/AutoAcceptIndicator.d.ts +12 -0
- package/dist/src/ui/components/AutoAcceptIndicator.js +26 -0
- package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -0
- package/dist/src/ui/components/ConsolePatcher.d.ts +12 -0
- package/dist/src/ui/components/ConsolePatcher.js +38 -0
- package/dist/src/ui/components/ConsolePatcher.js.map +1 -0
- package/dist/src/ui/components/ConsoleSummaryDisplay.d.ts +11 -0
- package/dist/src/ui/components/ConsoleSummaryDisplay.js +11 -0
- package/dist/src/ui/components/ConsoleSummaryDisplay.js.map +1 -0
- package/dist/src/ui/components/ContextSummaryDisplay.d.ts +15 -0
- package/dist/src/ui/components/ContextSummaryDisplay.js +41 -0
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -0
- package/dist/src/ui/components/DetailedMessagesDisplay.d.ts +14 -0
- package/dist/src/ui/components/DetailedMessagesDisplay.js +34 -0
- package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -0
- package/dist/src/ui/components/EditorSettingsDialog.d.ts +15 -0
- package/dist/src/ui/components/EditorSettingsDialog.js +73 -0
- package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -0
- package/dist/src/ui/components/Footer.d.ts +20 -0
- package/dist/src/ui/components/Footer.js +19 -0
- package/dist/src/ui/components/Footer.js.map +1 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +17 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.js +16 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -0
- package/dist/src/ui/components/Header.d.ts +12 -0
- package/dist/src/ui/components/Header.js +20 -0
- package/dist/src/ui/components/Header.js.map +1 -0
- package/dist/src/ui/components/Help.d.ts +12 -0
- package/dist/src/ui/components/Help.js +10 -0
- package/dist/src/ui/components/Help.js.map +1 -0
- package/dist/src/ui/components/HistoryItemDisplay.d.ts +18 -0
- package/dist/src/ui/components/HistoryItemDisplay.js +17 -0
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.d.ts +25 -0
- package/dist/src/ui/components/InputPrompt.js +280 -0
- package/dist/src/ui/components/InputPrompt.js.map +1 -0
- package/dist/src/ui/components/LoadingIndicator.d.ts +15 -0
- package/dist/src/ui/components/LoadingIndicator.js +20 -0
- package/dist/src/ui/components/LoadingIndicator.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.d.ts +7 -0
- package/dist/src/ui/components/MemoryUsageDisplay.js +27 -0
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -0
- package/dist/src/ui/components/ModelDialog.d.ts +14 -0
- package/dist/src/ui/components/ModelDialog.js +34 -0
- package/dist/src/ui/components/ModelDialog.js.map +1 -0
- package/dist/src/ui/components/ModelStatsDisplay.d.ts +7 -0
- package/dist/src/ui/components/ModelStatsDisplay.js +33 -0
- package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -0
- package/dist/src/ui/components/SessionSummaryDisplay.d.ts +11 -0
- package/dist/src/ui/components/SessionSummaryDisplay.js +4 -0
- package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -0
- package/dist/src/ui/components/ShellModeIndicator.d.ts +7 -0
- package/dist/src/ui/components/ShellModeIndicator.js +5 -0
- package/dist/src/ui/components/ShellModeIndicator.js.map +1 -0
- package/dist/src/ui/components/ShowMoreLines.d.ts +10 -0
- package/dist/src/ui/components/ShowMoreLines.js +24 -0
- package/dist/src/ui/components/ShowMoreLines.js.map +1 -0
- package/dist/src/ui/components/StatsDisplay.d.ts +12 -0
- package/dist/src/ui/components/StatsDisplay.js +42 -0
- package/dist/src/ui/components/StatsDisplay.js.map +1 -0
- package/dist/src/ui/components/SuggestionsDisplay.d.ts +21 -0
- package/dist/src/ui/components/SuggestionsDisplay.js +32 -0
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -0
- package/dist/src/ui/components/ThemeDialog.d.ts +19 -0
- package/dist/src/ui/components/ThemeDialog.js +126 -0
- package/dist/src/ui/components/ThemeDialog.js.map +1 -0
- package/dist/src/ui/components/Tips.d.ts +12 -0
- package/dist/src/ui/components/Tips.js +8 -0
- package/dist/src/ui/components/Tips.js.map +1 -0
- package/dist/src/ui/components/ToolStatsDisplay.d.ts +7 -0
- package/dist/src/ui/components/ToolStatsDisplay.js +41 -0
- package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -0
- package/dist/src/ui/components/UpdateNotification.d.ts +10 -0
- package/dist/src/ui/components/UpdateNotification.js +10 -0
- package/dist/src/ui/components/UpdateNotification.js.map +1 -0
- package/dist/src/ui/components/messages/CompressionMessage.d.ts +11 -0
- package/dist/src/ui/components/messages/CompressionMessage.js +16 -0
- package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -0
- package/dist/src/ui/components/messages/DiffRenderer.d.ts +15 -0
- package/dist/src/ui/components/messages/DiffRenderer.js +212 -0
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -0
- package/dist/src/ui/components/messages/ErrorMessage.d.ts +11 -0
- package/dist/src/ui/components/messages/ErrorMessage.js +9 -0
- package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -0
- package/dist/src/ui/components/messages/GeminiMessage.d.ts +14 -0
- package/dist/src/ui/components/messages/GeminiMessage.js +10 -0
- package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -0
- package/dist/src/ui/components/messages/GeminiMessageContent.d.ts +14 -0
- package/dist/src/ui/components/messages/GeminiMessageContent.js +15 -0
- package/dist/src/ui/components/messages/GeminiMessageContent.js.map +1 -0
- package/dist/src/ui/components/messages/InfoMessage.d.ts +11 -0
- package/dist/src/ui/components/messages/InfoMessage.js +9 -0
- package/dist/src/ui/components/messages/InfoMessage.js.map +1 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +17 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +279 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +18 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.js +53 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -0
- package/dist/src/ui/components/messages/ToolMessage.d.ts +15 -0
- package/dist/src/ui/components/messages/ToolMessage.js +61 -0
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -0
- package/dist/src/ui/components/messages/UserMessage.d.ts +11 -0
- package/dist/src/ui/components/messages/UserMessage.js +9 -0
- package/dist/src/ui/components/messages/UserMessage.js.map +1 -0
- package/dist/src/ui/components/messages/UserShellMessage.d.ts +11 -0
- package/dist/src/ui/components/messages/UserShellMessage.js +9 -0
- package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -0
- package/dist/src/ui/components/shared/MaxSizedBox.d.ts +61 -0
- package/dist/src/ui/components/shared/MaxSizedBox.js +384 -0
- package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +41 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.js +52 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -0
- package/dist/src/ui/components/shared/text-buffer.d.ts +184 -0
- package/dist/src/ui/components/shared/text-buffer.js +1010 -0
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -0
- package/dist/src/ui/constants.d.ts +8 -0
- package/dist/src/ui/constants.js +12 -0
- package/dist/src/ui/constants.js.map +1 -0
- package/dist/src/ui/contexts/OverflowContext.d.ts +19 -0
- package/dist/src/ui/contexts/OverflowContext.js +43 -0
- package/dist/src/ui/contexts/OverflowContext.js.map +1 -0
- package/dist/src/ui/contexts/SessionContext.d.ts +33 -0
- package/dist/src/ui/contexts/SessionContext.js +49 -0
- package/dist/src/ui/contexts/SessionContext.js.map +1 -0
- package/dist/src/ui/contexts/StreamingContext.d.ts +9 -0
- package/dist/src/ui/contexts/StreamingContext.js +15 -0
- package/dist/src/ui/contexts/StreamingContext.js.map +1 -0
- package/dist/src/ui/editors/editorSettingsManager.d.ts +19 -0
- package/dist/src/ui/editors/editorSettingsManager.js +54 -0
- package/dist/src/ui/editors/editorSettingsManager.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.d.ts +31 -0
- package/dist/src/ui/hooks/atCommandProcessor.js +310 -0
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -0
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +16 -0
- package/dist/src/ui/hooks/shellCommandProcessor.js +261 -0
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -0
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +27 -0
- package/dist/src/ui/hooks/slashCommandProcessor.js +1079 -0
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -0
- package/dist/src/ui/hooks/useAuthCommand.d.ts +14 -0
- package/dist/src/ui/hooks/useAuthCommand.js +63 -0
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +10 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js +37 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -0
- package/dist/src/ui/hooks/useBracketedPaste.d.ts +12 -0
- package/dist/src/ui/hooks/useBracketedPaste.js +32 -0
- package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -0
- package/dist/src/ui/hooks/useCompletion.d.ts +21 -0
- package/dist/src/ui/hooks/useCompletion.js +372 -0
- package/dist/src/ui/hooks/useCompletion.js.map +1 -0
- package/dist/src/ui/hooks/useConsoleMessages.d.ts +12 -0
- package/dist/src/ui/hooks/useConsoleMessages.js +60 -0
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -0
- package/dist/src/ui/hooks/useEditorSettings.d.ts +16 -0
- package/dist/src/ui/hooks/useEditorSettings.js +43 -0
- package/dist/src/ui/hooks/useEditorSettings.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.d.ts +23 -0
- package/dist/src/ui/hooks/useGeminiStream.js +569 -0
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -0
- package/dist/src/ui/hooks/useGitBranchName.d.ts +6 -0
- package/dist/src/ui/hooks/useGitBranchName.js +61 -0
- package/dist/src/ui/hooks/useGitBranchName.js.map +1 -0
- package/dist/src/ui/hooks/useHistoryManager.d.ts +22 -0
- package/dist/src/ui/hooks/useHistoryManager.js +72 -0
- package/dist/src/ui/hooks/useHistoryManager.js.map +1 -0
- package/dist/src/ui/hooks/useInputHistory.d.ts +19 -0
- package/dist/src/ui/hooks/useInputHistory.js +84 -0
- package/dist/src/ui/hooks/useInputHistory.js.map +1 -0
- package/dist/src/ui/hooks/useKeypress.d.ts +29 -0
- package/dist/src/ui/hooks/useKeypress.js +86 -0
- package/dist/src/ui/hooks/useKeypress.js.map +1 -0
- package/dist/src/ui/hooks/useLoadingIndicator.d.ts +10 -0
- package/dist/src/ui/hooks/useLoadingIndicator.js +44 -0
- package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -0
- package/dist/src/ui/hooks/useLogger.d.ts +10 -0
- package/dist/src/ui/hooks/useLogger.js +29 -0
- package/dist/src/ui/hooks/useLogger.js.map +1 -0
- package/dist/src/ui/hooks/usePhraseCycler.d.ts +14 -0
- package/dist/src/ui/hooks/usePhraseCycler.js +189 -0
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -0
- package/dist/src/ui/hooks/usePrivacySettings.d.ts +16 -0
- package/dist/src/ui/hooks/usePrivacySettings.js +115 -0
- package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -0
- package/dist/src/ui/hooks/useReactToolScheduler.d.ts +33 -0
- package/dist/src/ui/hooks/useReactToolScheduler.js +186 -0
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -0
- package/dist/src/ui/hooks/useRefreshMemoryCommand.d.ts +6 -0
- package/dist/src/ui/hooks/useRefreshMemoryCommand.js +7 -0
- package/dist/src/ui/hooks/useRefreshMemoryCommand.js.map +1 -0
- package/dist/src/ui/hooks/useShellHistory.d.ts +11 -0
- package/dist/src/ui/hooks/useShellHistory.js +89 -0
- package/dist/src/ui/hooks/useShellHistory.js.map +1 -0
- package/dist/src/ui/hooks/useShowMemoryCommand.d.ts +9 -0
- package/dist/src/ui/hooks/useShowMemoryCommand.js +58 -0
- package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -0
- package/dist/src/ui/hooks/useStateAndRef.d.ts +7 -0
- package/dist/src/ui/hooks/useStateAndRef.js +26 -0
- package/dist/src/ui/hooks/useStateAndRef.js.map +1 -0
- package/dist/src/ui/hooks/useTerminalSize.d.ts +9 -0
- package/dist/src/ui/hooks/useTerminalSize.js +27 -0
- package/dist/src/ui/hooks/useTerminalSize.js.map +1 -0
- package/dist/src/ui/hooks/useThemeCommand.d.ts +15 -0
- package/dist/src/ui/hooks/useThemeCommand.js +78 -0
- package/dist/src/ui/hooks/useThemeCommand.js.map +1 -0
- package/dist/src/ui/hooks/useTimer.d.ts +12 -0
- package/dist/src/ui/hooks/useTimer.js +58 -0
- package/dist/src/ui/hooks/useTimer.js.map +1 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +12 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +40 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -0
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.d.ts +10 -0
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js +17 -0
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -0
- package/dist/src/ui/privacy/GeminiPrivacyNotice.d.ts +10 -0
- package/dist/src/ui/privacy/GeminiPrivacyNotice.js +17 -0
- package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -0
- package/dist/src/ui/privacy/PrivacyNotice.d.ts +12 -0
- package/dist/src/ui/privacy/PrivacyNotice.js +25 -0
- package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -0
- package/dist/src/ui/themes/ansi-light.d.ts +7 -0
- package/dist/src/ui/themes/ansi-light.js +139 -0
- package/dist/src/ui/themes/ansi-light.js.map +1 -0
- package/dist/src/ui/themes/ansi.d.ts +7 -0
- package/dist/src/ui/themes/ansi.js +149 -0
- package/dist/src/ui/themes/ansi.js.map +1 -0
- package/dist/src/ui/themes/atom-one-dark.d.ts +7 -0
- package/dist/src/ui/themes/atom-one-dark.js +136 -0
- package/dist/src/ui/themes/atom-one-dark.js.map +1 -0
- package/dist/src/ui/themes/ayu-light.d.ts +7 -0
- package/dist/src/ui/themes/ayu-light.js +128 -0
- package/dist/src/ui/themes/ayu-light.js.map +1 -0
- package/dist/src/ui/themes/ayu.d.ts +7 -0
- package/dist/src/ui/themes/ayu.js +102 -0
- package/dist/src/ui/themes/ayu.js.map +1 -0
- package/dist/src/ui/themes/default-light.d.ts +7 -0
- package/dist/src/ui/themes/default-light.js +100 -0
- package/dist/src/ui/themes/default-light.js.map +1 -0
- package/dist/src/ui/themes/default.d.ts +7 -0
- package/dist/src/ui/themes/default.js +143 -0
- package/dist/src/ui/themes/default.js.map +1 -0
- package/dist/src/ui/themes/dracula.d.ts +7 -0
- package/dist/src/ui/themes/dracula.js +113 -0
- package/dist/src/ui/themes/dracula.js.map +1 -0
- package/dist/src/ui/themes/github-dark.d.ts +7 -0
- package/dist/src/ui/themes/github-dark.js +136 -0
- package/dist/src/ui/themes/github-dark.js.map +1 -0
- package/dist/src/ui/themes/github-light.d.ts +7 -0
- package/dist/src/ui/themes/github-light.js +138 -0
- package/dist/src/ui/themes/github-light.js.map +1 -0
- package/dist/src/ui/themes/googlecode.d.ts +7 -0
- package/dist/src/ui/themes/googlecode.js +135 -0
- package/dist/src/ui/themes/googlecode.js.map +1 -0
- package/dist/src/ui/themes/no-color.d.ts +7 -0
- package/dist/src/ui/themes/no-color.js +84 -0
- package/dist/src/ui/themes/no-color.js.map +1 -0
- package/dist/src/ui/themes/shades-of-purple.d.ts +11 -0
- package/dist/src/ui/themes/shades-of-purple.js +302 -0
- package/dist/src/ui/themes/shades-of-purple.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.d.ts +33 -0
- package/dist/src/ui/themes/theme-manager.js +109 -0
- package/dist/src/ui/themes/theme-manager.js.map +1 -0
- package/dist/src/ui/themes/theme.d.ts +67 -0
- package/dist/src/ui/themes/theme.js +304 -0
- package/dist/src/ui/themes/theme.js.map +1 -0
- package/dist/src/ui/themes/xcode.d.ts +7 -0
- package/dist/src/ui/themes/xcode.js +143 -0
- package/dist/src/ui/themes/xcode.js.map +1 -0
- package/dist/src/ui/types.d.ts +172 -0
- package/dist/src/ui/types.js +43 -0
- package/dist/src/ui/types.js.map +1 -0
- package/dist/src/ui/utils/CodeColorizer.d.ts +14 -0
- package/dist/src/ui/utils/CodeColorizer.js +97 -0
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -0
- package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +16 -0
- package/dist/src/ui/utils/InlineMarkdownRenderer.js +104 -0
- package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -0
- package/dist/src/ui/utils/MarkdownDisplay.d.ts +14 -0
- package/dist/src/ui/utils/MarkdownDisplay.js +197 -0
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -0
- package/dist/src/ui/utils/TableRenderer.d.ts +17 -0
- package/dist/src/ui/utils/TableRenderer.js +84 -0
- package/dist/src/ui/utils/TableRenderer.js.map +1 -0
- package/dist/src/ui/utils/commandUtils.d.ts +22 -0
- package/dist/src/ui/utils/commandUtils.js +25 -0
- package/dist/src/ui/utils/commandUtils.js.map +1 -0
- package/dist/src/ui/utils/computeStats.d.ts +10 -0
- package/dist/src/ui/utils/computeStats.js +55 -0
- package/dist/src/ui/utils/computeStats.js.map +1 -0
- package/dist/src/ui/utils/displayUtils.d.ts +17 -0
- package/dist/src/ui/utils/displayUtils.js +24 -0
- package/dist/src/ui/utils/displayUtils.js.map +1 -0
- package/dist/src/ui/utils/errorParsing.d.ts +15 -0
- package/dist/src/ui/utils/errorParsing.js +79 -0
- package/dist/src/ui/utils/errorParsing.js.map +1 -0
- package/dist/src/ui/utils/formatters.d.ts +13 -0
- package/dist/src/ui/utils/formatters.js +56 -0
- package/dist/src/ui/utils/formatters.js.map +1 -0
- package/dist/src/ui/utils/markdownUtilities.d.ts +6 -0
- package/dist/src/ui/utils/markdownUtilities.js +110 -0
- package/dist/src/ui/utils/markdownUtilities.js.map +1 -0
- package/dist/src/ui/utils/textUtils.d.ts +22 -0
- package/dist/src/ui/utils/textUtils.js +58 -0
- package/dist/src/ui/utils/textUtils.js.map +1 -0
- package/dist/src/ui/utils/updateCheck.d.ts +6 -0
- package/dist/src/ui/utils/updateCheck.js +36 -0
- package/dist/src/ui/utils/updateCheck.js.map +1 -0
- package/dist/src/utils/cleanup.d.ts +6 -0
- package/dist/src/utils/cleanup.js +19 -0
- package/dist/src/utils/cleanup.js.map +1 -0
- package/dist/src/utils/package.d.ts +12 -0
- package/dist/src/utils/package.js +24 -0
- package/dist/src/utils/package.js.map +1 -0
- package/dist/src/utils/readStdin.d.ts +6 -0
- package/dist/src/utils/readStdin.js +34 -0
- package/dist/src/utils/readStdin.js.map +1 -0
- package/dist/src/utils/sandbox.d.ts +7 -0
- package/dist/src/utils/sandbox.js +680 -0
- package/dist/src/utils/sandbox.js.map +1 -0
- package/dist/src/utils/startupWarnings.d.ts +6 -0
- package/dist/src/utils/startupWarnings.js +40 -0
- package/dist/src/utils/startupWarnings.js.map +1 -0
- package/dist/src/utils/userStartupWarnings.d.ts +6 -0
- package/dist/src/utils/userStartupWarnings.js +33 -0
- package/dist/src/utils/userStartupWarnings.js.map +1 -0
- package/dist/src/utils/version.d.ts +6 -0
- package/dist/src/utils/version.js +11 -0
- package/dist/src/utils/version.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.d.ts +7 -0
- package/dist/vitest.config.js +35 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +66 -79
- package/LICENSE +0 -202
- package/README.md +0 -203
- package/README.zh-CN.md +0 -206
- package/bundle/api.cjs +0 -166770
- package/bundle/api.js +0 -166765
- package/bundle/gemini.js +0 -278258
- /package/{bundle → dist/src/utils}/sandbox-macos-permissive-closed.sb +0 -0
- /package/{bundle → dist/src/utils}/sandbox-macos-permissive-open.sb +0 -0
- /package/{bundle → dist/src/utils}/sandbox-macos-permissive-proxied.sb +0 -0
- /package/{bundle → dist/src/utils}/sandbox-macos-restrictive-closed.sb +0 -0
- /package/{bundle → dist/src/utils}/sandbox-macos-restrictive-open.sb +0 -0
- /package/{bundle → dist/src/utils}/sandbox-macos-restrictive-proxied.sb +0 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { Colors } from '../../colors.js';
|
|
4
|
+
import crypto from 'crypto';
|
|
5
|
+
import { colorizeCode } from '../../utils/CodeColorizer.js';
|
|
6
|
+
import { MaxSizedBox } from '../shared/MaxSizedBox.js';
|
|
7
|
+
function parseDiffWithLineNumbers(diffContent) {
|
|
8
|
+
const lines = diffContent.split('\n');
|
|
9
|
+
const result = [];
|
|
10
|
+
let currentOldLine = 0;
|
|
11
|
+
let currentNewLine = 0;
|
|
12
|
+
let inHunk = false;
|
|
13
|
+
const hunkHeaderRegex = /^@@ -(\d+),?\d* \+(\d+),?\d* @@/;
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
const hunkMatch = line.match(hunkHeaderRegex);
|
|
16
|
+
if (hunkMatch) {
|
|
17
|
+
currentOldLine = parseInt(hunkMatch[1], 10);
|
|
18
|
+
currentNewLine = parseInt(hunkMatch[2], 10);
|
|
19
|
+
inHunk = true;
|
|
20
|
+
result.push({ type: 'hunk', content: line });
|
|
21
|
+
// We need to adjust the starting point because the first line number applies to the *first* actual line change/context,
|
|
22
|
+
// but we increment *before* pushing that line. So decrement here.
|
|
23
|
+
currentOldLine--;
|
|
24
|
+
currentNewLine--;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (!inHunk) {
|
|
28
|
+
// Skip standard Git header lines more robustly
|
|
29
|
+
if (line.startsWith('--- ') ||
|
|
30
|
+
line.startsWith('+++ ') ||
|
|
31
|
+
line.startsWith('diff --git') ||
|
|
32
|
+
line.startsWith('index ') ||
|
|
33
|
+
line.startsWith('similarity index') ||
|
|
34
|
+
line.startsWith('rename from') ||
|
|
35
|
+
line.startsWith('rename to') ||
|
|
36
|
+
line.startsWith('new file mode') ||
|
|
37
|
+
line.startsWith('deleted file mode'))
|
|
38
|
+
continue;
|
|
39
|
+
// If it's not a hunk or header, skip (or handle as 'other' if needed)
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (line.startsWith('+')) {
|
|
43
|
+
currentNewLine++; // Increment before pushing
|
|
44
|
+
result.push({
|
|
45
|
+
type: 'add',
|
|
46
|
+
newLine: currentNewLine,
|
|
47
|
+
content: line.substring(1),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else if (line.startsWith('-')) {
|
|
51
|
+
currentOldLine++; // Increment before pushing
|
|
52
|
+
result.push({
|
|
53
|
+
type: 'del',
|
|
54
|
+
oldLine: currentOldLine,
|
|
55
|
+
content: line.substring(1),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else if (line.startsWith(' ')) {
|
|
59
|
+
currentOldLine++; // Increment before pushing
|
|
60
|
+
currentNewLine++;
|
|
61
|
+
result.push({
|
|
62
|
+
type: 'context',
|
|
63
|
+
oldLine: currentOldLine,
|
|
64
|
+
newLine: currentNewLine,
|
|
65
|
+
content: line.substring(1),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else if (line.startsWith('\\')) {
|
|
69
|
+
// Handle ""
|
|
70
|
+
result.push({ type: 'other', content: line });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
const DEFAULT_TAB_WIDTH = 4; // Spaces per tab for normalization
|
|
76
|
+
export const DiffRenderer = ({ diffContent, filename, tabWidth = DEFAULT_TAB_WIDTH, availableTerminalHeight, terminalWidth, }) => {
|
|
77
|
+
if (!diffContent || typeof diffContent !== 'string') {
|
|
78
|
+
return _jsx(Text, { color: Colors.AccentYellow, children: "No diff content." });
|
|
79
|
+
}
|
|
80
|
+
const parsedLines = parseDiffWithLineNumbers(diffContent);
|
|
81
|
+
if (parsedLines.length === 0) {
|
|
82
|
+
return (_jsx(Box, { borderStyle: "round", borderColor: Colors.Gray, padding: 1, children: _jsx(Text, { dimColor: true, children: "No changes detected." }) }));
|
|
83
|
+
}
|
|
84
|
+
// Check if the diff represents a new file (only additions and header lines)
|
|
85
|
+
const isNewFile = parsedLines.every((line) => line.type === 'add' ||
|
|
86
|
+
line.type === 'hunk' ||
|
|
87
|
+
line.type === 'other' ||
|
|
88
|
+
line.content.startsWith('diff --git') ||
|
|
89
|
+
line.content.startsWith('new file mode'));
|
|
90
|
+
let renderedOutput;
|
|
91
|
+
if (isNewFile) {
|
|
92
|
+
// Extract only the added lines' content
|
|
93
|
+
const addedContent = parsedLines
|
|
94
|
+
.filter((line) => line.type === 'add')
|
|
95
|
+
.map((line) => line.content)
|
|
96
|
+
.join('\n');
|
|
97
|
+
// Attempt to infer language from filename, default to plain text if no filename
|
|
98
|
+
const fileExtension = filename?.split('.').pop() || null;
|
|
99
|
+
const language = fileExtension
|
|
100
|
+
? getLanguageFromExtension(fileExtension)
|
|
101
|
+
: null;
|
|
102
|
+
renderedOutput = colorizeCode(addedContent, language, availableTerminalHeight, terminalWidth);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
renderedOutput = renderDiffContent(parsedLines, filename, tabWidth, availableTerminalHeight, terminalWidth);
|
|
106
|
+
}
|
|
107
|
+
return renderedOutput;
|
|
108
|
+
};
|
|
109
|
+
const renderDiffContent = (parsedLines, filename, tabWidth = DEFAULT_TAB_WIDTH, availableTerminalHeight, terminalWidth) => {
|
|
110
|
+
// 1. Normalize whitespace (replace tabs with spaces) *before* further processing
|
|
111
|
+
const normalizedLines = parsedLines.map((line) => ({
|
|
112
|
+
...line,
|
|
113
|
+
content: line.content.replace(/\t/g, ' '.repeat(tabWidth)),
|
|
114
|
+
}));
|
|
115
|
+
// Filter out non-displayable lines (hunks, potentially 'other') using the normalized list
|
|
116
|
+
const displayableLines = normalizedLines.filter((l) => l.type !== 'hunk' && l.type !== 'other');
|
|
117
|
+
if (displayableLines.length === 0) {
|
|
118
|
+
return (_jsx(Box, { borderStyle: "round", borderColor: Colors.Gray, padding: 1, children: _jsx(Text, { dimColor: true, children: "No changes detected." }) }));
|
|
119
|
+
}
|
|
120
|
+
// Calculate the minimum indentation across all displayable lines
|
|
121
|
+
let baseIndentation = Infinity; // Start high to find the minimum
|
|
122
|
+
for (const line of displayableLines) {
|
|
123
|
+
// Only consider lines with actual content for indentation calculation
|
|
124
|
+
if (line.content.trim() === '')
|
|
125
|
+
continue;
|
|
126
|
+
const firstCharIndex = line.content.search(/\S/); // Find index of first non-whitespace char
|
|
127
|
+
const currentIndent = firstCharIndex === -1 ? 0 : firstCharIndex; // Indent is 0 if no non-whitespace found
|
|
128
|
+
baseIndentation = Math.min(baseIndentation, currentIndent);
|
|
129
|
+
}
|
|
130
|
+
// If baseIndentation remained Infinity (e.g., no displayable lines with content), default to 0
|
|
131
|
+
if (!isFinite(baseIndentation)) {
|
|
132
|
+
baseIndentation = 0;
|
|
133
|
+
}
|
|
134
|
+
const key = filename
|
|
135
|
+
? `diff-box-${filename}`
|
|
136
|
+
: `diff-box-${crypto.createHash('sha1').update(JSON.stringify(parsedLines)).digest('hex')}`;
|
|
137
|
+
let lastLineNumber = null;
|
|
138
|
+
const MAX_CONTEXT_LINES_WITHOUT_GAP = 5;
|
|
139
|
+
return (_jsx(MaxSizedBox, { maxHeight: availableTerminalHeight, maxWidth: terminalWidth, children: displayableLines.reduce((acc, line, index) => {
|
|
140
|
+
// Determine the relevant line number for gap calculation based on type
|
|
141
|
+
let relevantLineNumberForGapCalc = null;
|
|
142
|
+
if (line.type === 'add' || line.type === 'context') {
|
|
143
|
+
relevantLineNumberForGapCalc = line.newLine ?? null;
|
|
144
|
+
}
|
|
145
|
+
else if (line.type === 'del') {
|
|
146
|
+
// For deletions, the gap is typically in relation to the original file's line numbering
|
|
147
|
+
relevantLineNumberForGapCalc = line.oldLine ?? null;
|
|
148
|
+
}
|
|
149
|
+
if (lastLineNumber !== null &&
|
|
150
|
+
relevantLineNumberForGapCalc !== null &&
|
|
151
|
+
relevantLineNumberForGapCalc >
|
|
152
|
+
lastLineNumber + MAX_CONTEXT_LINES_WITHOUT_GAP + 1) {
|
|
153
|
+
acc.push(_jsx(Box, { children: _jsx(Text, { wrap: "truncate", children: '═'.repeat(terminalWidth) }) }, `gap-${index}`));
|
|
154
|
+
}
|
|
155
|
+
const lineKey = `diff-line-${index}`;
|
|
156
|
+
let gutterNumStr = '';
|
|
157
|
+
let color = undefined;
|
|
158
|
+
let prefixSymbol = ' ';
|
|
159
|
+
let dim = false;
|
|
160
|
+
switch (line.type) {
|
|
161
|
+
case 'add':
|
|
162
|
+
gutterNumStr = (line.newLine ?? '').toString();
|
|
163
|
+
color = 'green';
|
|
164
|
+
prefixSymbol = '+';
|
|
165
|
+
lastLineNumber = line.newLine ?? null;
|
|
166
|
+
break;
|
|
167
|
+
case 'del':
|
|
168
|
+
gutterNumStr = (line.oldLine ?? '').toString();
|
|
169
|
+
color = 'red';
|
|
170
|
+
prefixSymbol = '-';
|
|
171
|
+
// For deletions, update lastLineNumber based on oldLine if it's advancing.
|
|
172
|
+
// This helps manage gaps correctly if there are multiple consecutive deletions
|
|
173
|
+
// or if a deletion is followed by a context line far away in the original file.
|
|
174
|
+
if (line.oldLine !== undefined) {
|
|
175
|
+
lastLineNumber = line.oldLine;
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
case 'context':
|
|
179
|
+
gutterNumStr = (line.newLine ?? '').toString();
|
|
180
|
+
dim = true;
|
|
181
|
+
prefixSymbol = ' ';
|
|
182
|
+
lastLineNumber = line.newLine ?? null;
|
|
183
|
+
break;
|
|
184
|
+
default:
|
|
185
|
+
return acc;
|
|
186
|
+
}
|
|
187
|
+
const displayContent = line.content.substring(baseIndentation);
|
|
188
|
+
acc.push(_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: Colors.Gray, children: [gutterNumStr.padEnd(4), " "] }), _jsxs(Text, { color: color, dimColor: dim, children: [prefixSymbol, ' '] }), _jsx(Text, { color: color, dimColor: dim, wrap: "wrap", children: displayContent })] }, lineKey));
|
|
189
|
+
return acc;
|
|
190
|
+
}, []) }, key));
|
|
191
|
+
};
|
|
192
|
+
const getLanguageFromExtension = (extension) => {
|
|
193
|
+
const languageMap = {
|
|
194
|
+
js: 'javascript',
|
|
195
|
+
ts: 'typescript',
|
|
196
|
+
py: 'python',
|
|
197
|
+
json: 'json',
|
|
198
|
+
css: 'css',
|
|
199
|
+
html: 'html',
|
|
200
|
+
sh: 'bash',
|
|
201
|
+
md: 'markdown',
|
|
202
|
+
yaml: 'yaml',
|
|
203
|
+
yml: 'yaml',
|
|
204
|
+
txt: 'plaintext',
|
|
205
|
+
java: 'java',
|
|
206
|
+
c: 'c',
|
|
207
|
+
cpp: 'cpp',
|
|
208
|
+
rb: 'ruby',
|
|
209
|
+
};
|
|
210
|
+
return languageMap[extension] || null; // Return null if extension not found
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=DiffRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffRenderer.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/DiffRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Text, Box } from 'ink';
|
|
3
|
+
import { Colors } from '../../colors.js';
|
|
4
|
+
export const ErrorMessage = ({ text }) => {
|
|
5
|
+
const prefix = '✕ ';
|
|
6
|
+
const prefixWidth = prefix.length;
|
|
7
|
+
return (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Box, { width: prefixWidth, children: _jsx(Text, { color: Colors.AccentRed, children: prefix }) }), _jsx(Box, { flexGrow: 1, children: _jsx(Text, { wrap: "wrap", color: Colors.AccentRed, children: text }) })] }));
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=ErrorMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorMessage.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/ErrorMessage.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAMzC,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAElC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,YAAY,EAAE,CAAC,aACtC,KAAC,GAAG,IAAC,KAAK,EAAE,WAAW,YACrB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,YAAG,MAAM,GAAQ,GAC1C,EACN,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,MAAM,CAAC,SAAS,YACtC,IAAI,GACA,GACH,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
interface GeminiMessageProps {
|
|
8
|
+
text: string;
|
|
9
|
+
isPending: boolean;
|
|
10
|
+
availableTerminalHeight?: number;
|
|
11
|
+
terminalWidth: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const GeminiMessage: React.FC<GeminiMessageProps>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Text, Box } from 'ink';
|
|
3
|
+
import { MarkdownDisplay } from '../../utils/MarkdownDisplay.js';
|
|
4
|
+
import { Colors } from '../../colors.js';
|
|
5
|
+
export const GeminiMessage = ({ text, isPending, availableTerminalHeight, terminalWidth, }) => {
|
|
6
|
+
const prefix = '✦ ';
|
|
7
|
+
const prefixWidth = prefix.length;
|
|
8
|
+
return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { width: prefixWidth, children: _jsx(Text, { color: Colors.AccentPurple, children: prefix }) }), _jsx(Box, { flexGrow: 1, flexDirection: "column", children: _jsx(MarkdownDisplay, { text: text, isPending: isPending, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth }) })] }));
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=GeminiMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiMessage.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/GeminiMessage.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AASzC,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAC1D,IAAI,EACJ,SAAS,EACT,uBAAuB,EACvB,aAAa,GACd,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAElC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,aACtB,KAAC,GAAG,IAAC,KAAK,EAAE,WAAW,YACrB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,YAAG,MAAM,GAAQ,GAC7C,EACN,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,YACtC,KAAC,eAAe,IACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,uBAAuB,EAAE,uBAAuB,EAChD,aAAa,EAAE,aAAa,GAC5B,GACE,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
interface GeminiMessageContentProps {
|
|
8
|
+
text: string;
|
|
9
|
+
isPending: boolean;
|
|
10
|
+
availableTerminalHeight?: number;
|
|
11
|
+
terminalWidth: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const GeminiMessageContent: React.FC<GeminiMessageContentProps>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box } from 'ink';
|
|
3
|
+
import { MarkdownDisplay } from '../../utils/MarkdownDisplay.js';
|
|
4
|
+
/*
|
|
5
|
+
* Gemini message content is a semi-hacked component. The intention is to represent a partial
|
|
6
|
+
* of GeminiMessage and is only used when a response gets too long. In that instance messages
|
|
7
|
+
* are split into multiple GeminiMessageContent's to enable the root <Static> component in
|
|
8
|
+
* App.tsx to be as performant as humanly possible.
|
|
9
|
+
*/
|
|
10
|
+
export const GeminiMessageContent = ({ text, isPending, availableTerminalHeight, terminalWidth, }) => {
|
|
11
|
+
const originalPrefix = '✦ ';
|
|
12
|
+
const prefixWidth = originalPrefix.length;
|
|
13
|
+
return (_jsx(Box, { flexDirection: "column", paddingLeft: prefixWidth, children: _jsx(MarkdownDisplay, { text: text, isPending: isPending, availableTerminalHeight: availableTerminalHeight, terminalWidth: terminalWidth }) }));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=GeminiMessageContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiMessageContent.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/GeminiMessageContent.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AASjE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EACxE,IAAI,EACJ,SAAS,EACT,uBAAuB,EACvB,aAAa,GACd,EAAE,EAAE;IACH,MAAM,cAAc,GAAG,IAAI,CAAC;IAC5B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC;IAE1C,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,WAAW,YAClD,KAAC,eAAe,IACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,uBAAuB,EAAE,uBAAuB,EAChD,aAAa,EAAE,aAAa,GAC5B,GACE,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Text, Box } from 'ink';
|
|
3
|
+
import { Colors } from '../../colors.js';
|
|
4
|
+
export const InfoMessage = ({ text }) => {
|
|
5
|
+
const prefix = 'ℹ ';
|
|
6
|
+
const prefixWidth = prefix.length;
|
|
7
|
+
return (_jsxs(Box, { flexDirection: "row", marginTop: 1, children: [_jsx(Box, { width: prefixWidth, children: _jsx(Text, { color: Colors.AccentYellow, children: prefix }) }), _jsx(Box, { flexGrow: 1, children: _jsx(Text, { wrap: "wrap", color: Colors.AccentYellow, children: text }) })] }));
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=InfoMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoMessage.js","sourceRoot":"","sources":["../../../../../src/ui/components/messages/InfoMessage.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAMzC,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAElC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,SAAS,EAAE,CAAC,aACnC,KAAC,GAAG,IAAC,KAAK,EAAE,WAAW,YACrB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,YAAG,MAAM,GAAQ,GAC7C,EACN,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,MAAM,CAAC,YAAY,YACzC,IAAI,GACA,GACH,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { ToolCallConfirmationDetails, Config } from '@google/gemini-cli-core';
|
|
8
|
+
export interface ToolConfirmationMessageProps {
|
|
9
|
+
confirmationDetails: ToolCallConfirmationDetails;
|
|
10
|
+
callId?: string;
|
|
11
|
+
toolName?: string;
|
|
12
|
+
config?: Config;
|
|
13
|
+
isFocused?: boolean;
|
|
14
|
+
availableTerminalHeight?: number;
|
|
15
|
+
terminalWidth: number;
|
|
16
|
+
}
|
|
17
|
+
export declare const ToolConfirmationMessage: React.FC<ToolConfirmationMessageProps>;
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { useRef } from 'react';
|
|
8
|
+
import { Box, Text, useInput } from 'ink';
|
|
9
|
+
import { DiffRenderer } from './DiffRenderer.js';
|
|
10
|
+
import { Colors } from '../../colors.js';
|
|
11
|
+
import { ToolConfirmationOutcome, } from '@google/gemini-cli-core';
|
|
12
|
+
import { RadioButtonSelect, } from '../shared/RadioButtonSelect.js';
|
|
13
|
+
import { MaxSizedBox } from '../shared/MaxSizedBox.js';
|
|
14
|
+
import { DataCollector } from '../../../telemetry/dataCollector.js';
|
|
15
|
+
export const ToolConfirmationMessage = ({ confirmationDetails, callId, toolName, isFocused = true, availableTerminalHeight, terminalWidth, config, }) => {
|
|
16
|
+
const { onConfirm } = confirmationDetails;
|
|
17
|
+
const childWidth = terminalWidth - 2; // 2 for padding
|
|
18
|
+
const dataCollector = useRef(new DataCollector());
|
|
19
|
+
const confirmationStartTime = useRef(Date.now());
|
|
20
|
+
// 获取选择原因函数 - 移到组件内部
|
|
21
|
+
const getChoiceReason = (choice, details) => {
|
|
22
|
+
try {
|
|
23
|
+
switch (choice) {
|
|
24
|
+
case ToolConfirmationOutcome.ProceedOnce:
|
|
25
|
+
return 'User chose to allow this operation once';
|
|
26
|
+
case ToolConfirmationOutcome.ProceedAlways:
|
|
27
|
+
return 'User chose to always allow this operation';
|
|
28
|
+
case ToolConfirmationOutcome.ProceedAlwaysServer:
|
|
29
|
+
return 'User chose to always allow all tools from this server';
|
|
30
|
+
case ToolConfirmationOutcome.ProceedAlwaysTool:
|
|
31
|
+
return 'User chose to always allow this specific tool';
|
|
32
|
+
case ToolConfirmationOutcome.ModifyWithEditor:
|
|
33
|
+
return 'User chose to modify with external editor';
|
|
34
|
+
case ToolConfirmationOutcome.Cancel:
|
|
35
|
+
return 'User cancelled the operation';
|
|
36
|
+
default:
|
|
37
|
+
return 'Unknown choice';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.warn('Error getting choice reason:', error);
|
|
42
|
+
return 'Unknown choice';
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
useInput((_, key) => {
|
|
46
|
+
if (!isFocused)
|
|
47
|
+
return;
|
|
48
|
+
if (key.escape) {
|
|
49
|
+
onConfirm(ToolConfirmationOutcome.Cancel);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const handleSelect = async (item) => {
|
|
53
|
+
const choiceDuration = Date.now() - confirmationStartTime.current;
|
|
54
|
+
try {
|
|
55
|
+
// 准备确认数据 - 添加错误处理和默认值
|
|
56
|
+
const confirmationData = {
|
|
57
|
+
sessionId: (() => {
|
|
58
|
+
try {
|
|
59
|
+
return config?.getSessionId?.() || 'unknown';
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.warn('Error getting session ID:', error);
|
|
63
|
+
return 'unknown';
|
|
64
|
+
}
|
|
65
|
+
})(),
|
|
66
|
+
callId: (() => {
|
|
67
|
+
try {
|
|
68
|
+
return callId || confirmationDetails?.callId || 'unknown';
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.warn('Error getting call ID:', error);
|
|
72
|
+
return 'unknown';
|
|
73
|
+
}
|
|
74
|
+
})(),
|
|
75
|
+
toolName: (() => {
|
|
76
|
+
try {
|
|
77
|
+
// Use passed toolName prop first, then fallback to confirmationDetails
|
|
78
|
+
if (toolName) {
|
|
79
|
+
return toolName;
|
|
80
|
+
}
|
|
81
|
+
// For MCP tools, use toolName property, for other tools try tool_name
|
|
82
|
+
if (confirmationDetails?.type === 'mcp') {
|
|
83
|
+
return confirmationDetails?.toolName || 'unknown';
|
|
84
|
+
}
|
|
85
|
+
// For exec tools, use rootCommand as tool name
|
|
86
|
+
if (confirmationDetails?.type === 'exec') {
|
|
87
|
+
return confirmationDetails?.rootCommand || 'unknown';
|
|
88
|
+
}
|
|
89
|
+
// For other tools, try various property names
|
|
90
|
+
return confirmationDetails?.tool_name ||
|
|
91
|
+
confirmationDetails?.toolName ||
|
|
92
|
+
confirmationDetails?.name ||
|
|
93
|
+
'unknown';
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.warn('Error getting tool name:', error);
|
|
97
|
+
return 'unknown';
|
|
98
|
+
}
|
|
99
|
+
})(),
|
|
100
|
+
toolType: (() => {
|
|
101
|
+
try {
|
|
102
|
+
return confirmationDetails?.type || 'unknown';
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.warn('Error getting tool type:', error);
|
|
106
|
+
return 'unknown';
|
|
107
|
+
}
|
|
108
|
+
})(),
|
|
109
|
+
toolDescription: (() => {
|
|
110
|
+
try {
|
|
111
|
+
return confirmationDetails?.tool_description || '';
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.warn('Error getting tool description:', error);
|
|
115
|
+
return '';
|
|
116
|
+
}
|
|
117
|
+
})(),
|
|
118
|
+
userChoice: item,
|
|
119
|
+
choiceDurationMs: choiceDuration,
|
|
120
|
+
choiceReason: getChoiceReason(item, confirmationDetails),
|
|
121
|
+
projectPath: (() => {
|
|
122
|
+
try {
|
|
123
|
+
return process.cwd();
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.warn('Error getting project path:', error);
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
})(),
|
|
130
|
+
workingDirectory: (() => {
|
|
131
|
+
try {
|
|
132
|
+
return process.cwd();
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.warn('Error getting working directory:', error);
|
|
136
|
+
return '';
|
|
137
|
+
}
|
|
138
|
+
})(),
|
|
139
|
+
terminalWidth: terminalWidth || 0,
|
|
140
|
+
terminalHeight: availableTerminalHeight || 0,
|
|
141
|
+
availableHeight: availableTerminalHeight || 0,
|
|
142
|
+
};
|
|
143
|
+
// 调试信息
|
|
144
|
+
if (process.env.DEBUG === '1') {
|
|
145
|
+
console.log('🔧 ToolConfirmationMessage - confirmationData being sent to DataCollector:', JSON.stringify(confirmationData, null, 2));
|
|
146
|
+
}
|
|
147
|
+
// 收集数据到Langfuse
|
|
148
|
+
const result = await dataCollector.current.collectConfirmationData(confirmationData);
|
|
149
|
+
// 只在DEBUG模式下显示详细结果
|
|
150
|
+
if (process.env.DEBUG === '1') {
|
|
151
|
+
if (result.success) {
|
|
152
|
+
console.log(`Data collected to Langfuse with trace ID: ${result.traceId}`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.warn('Failed to collect data to Langfuse:', result.reason || result.error);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// 如果用户选择"总是允许",记录这个选择以便后续自动收集
|
|
159
|
+
if (item === ToolConfirmationOutcome.ProceedAlways ||
|
|
160
|
+
item === ToolConfirmationOutcome.ProceedAlwaysTool ||
|
|
161
|
+
item === ToolConfirmationOutcome.ProceedAlwaysServer) {
|
|
162
|
+
try {
|
|
163
|
+
// 存储用户选择,用于后续自动收集
|
|
164
|
+
if (typeof window !== 'undefined' && window.localStorage) {
|
|
165
|
+
localStorage.setItem('mpd_llm_auto_approve', JSON.stringify({
|
|
166
|
+
tool_name: confirmationData.toolName,
|
|
167
|
+
tool_type: confirmationData.toolType,
|
|
168
|
+
user_choice: item,
|
|
169
|
+
timestamp: new Date().toISOString(),
|
|
170
|
+
session_id: confirmationData.sessionId,
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
console.warn('Failed to store auto-approve preference:', error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// 调用原始确认回调
|
|
179
|
+
onConfirm(item);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error('Error in confirmation handling:', error);
|
|
183
|
+
// 即使数据收集失败,也要继续执行确认
|
|
184
|
+
onConfirm(item);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
let bodyContent = null; // Removed contextDisplay here
|
|
188
|
+
let question;
|
|
189
|
+
const options = new Array();
|
|
190
|
+
// Body content is now the DiffRenderer, passing filename to it
|
|
191
|
+
// The bordered box is removed from here and handled within DiffRenderer
|
|
192
|
+
function availableBodyContentHeight() {
|
|
193
|
+
if (options.length === 0) {
|
|
194
|
+
// This should not happen in practice as options are always added before this is called.
|
|
195
|
+
throw new Error('Options not provided for confirmation message');
|
|
196
|
+
}
|
|
197
|
+
if (availableTerminalHeight === undefined) {
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
// Calculate the vertical space (in lines) consumed by UI elements
|
|
201
|
+
// surrounding the main body content.
|
|
202
|
+
const PADDING_OUTER_Y = 2; // Main container has `padding={1}` (top & bottom).
|
|
203
|
+
const MARGIN_BODY_BOTTOM = 1; // margin on the body container.
|
|
204
|
+
const HEIGHT_QUESTION = 1; // The question text is one line.
|
|
205
|
+
const MARGIN_QUESTION_BOTTOM = 1; // Margin on the question container.
|
|
206
|
+
const HEIGHT_OPTIONS = options.length; // Each option in the radio select takes one line.
|
|
207
|
+
const surroundingElementsHeight = PADDING_OUTER_Y +
|
|
208
|
+
MARGIN_BODY_BOTTOM +
|
|
209
|
+
HEIGHT_QUESTION +
|
|
210
|
+
MARGIN_QUESTION_BOTTOM +
|
|
211
|
+
HEIGHT_OPTIONS;
|
|
212
|
+
return Math.max(availableTerminalHeight - surroundingElementsHeight, 1);
|
|
213
|
+
}
|
|
214
|
+
if (confirmationDetails.type === 'edit') {
|
|
215
|
+
if (confirmationDetails.isModifying) {
|
|
216
|
+
return (_jsxs(Box, { minWidth: "90%", borderStyle: "round", borderColor: Colors.Gray, justifyContent: "space-around", padding: 1, overflow: "hidden", children: [_jsx(Text, { children: "Modify in progress: " }), _jsx(Text, { color: Colors.AccentGreen, children: "Save and close external editor to continue" })] }));
|
|
217
|
+
}
|
|
218
|
+
question = `Apply this change?`;
|
|
219
|
+
options.push({
|
|
220
|
+
label: 'Yes, allow once',
|
|
221
|
+
value: ToolConfirmationOutcome.ProceedOnce,
|
|
222
|
+
}, {
|
|
223
|
+
label: 'Yes, allow always',
|
|
224
|
+
value: ToolConfirmationOutcome.ProceedAlways,
|
|
225
|
+
}, {
|
|
226
|
+
label: 'Modify with external editor',
|
|
227
|
+
value: ToolConfirmationOutcome.ModifyWithEditor,
|
|
228
|
+
}, { label: 'No (esc)', value: ToolConfirmationOutcome.Cancel });
|
|
229
|
+
bodyContent = (_jsx(DiffRenderer, { diffContent: confirmationDetails.fileDiff, filename: confirmationDetails.fileName, availableTerminalHeight: availableBodyContentHeight(), terminalWidth: childWidth }));
|
|
230
|
+
}
|
|
231
|
+
else if (confirmationDetails.type === 'exec') {
|
|
232
|
+
const executionProps = confirmationDetails;
|
|
233
|
+
question = `Allow execution?`;
|
|
234
|
+
options.push({
|
|
235
|
+
label: 'Yes, allow once',
|
|
236
|
+
value: ToolConfirmationOutcome.ProceedOnce,
|
|
237
|
+
}, {
|
|
238
|
+
label: `Yes, allow always "${executionProps.rootCommand} ..."`,
|
|
239
|
+
value: ToolConfirmationOutcome.ProceedAlways,
|
|
240
|
+
}, { label: 'No (esc)', value: ToolConfirmationOutcome.Cancel });
|
|
241
|
+
let bodyContentHeight = availableBodyContentHeight();
|
|
242
|
+
if (bodyContentHeight !== undefined) {
|
|
243
|
+
bodyContentHeight -= 2; // Account for padding;
|
|
244
|
+
}
|
|
245
|
+
bodyContent = (_jsx(Box, { flexDirection: "column", children: _jsx(Box, { paddingX: 1, marginLeft: 1, children: _jsx(MaxSizedBox, { maxHeight: bodyContentHeight, maxWidth: Math.max(childWidth - 4, 1), children: _jsx(Box, { children: _jsx(Text, { color: Colors.AccentCyan, children: executionProps.command }) }) }) }) }));
|
|
246
|
+
}
|
|
247
|
+
else if (confirmationDetails.type === 'info') {
|
|
248
|
+
const infoProps = confirmationDetails;
|
|
249
|
+
const displayUrls = infoProps.urls &&
|
|
250
|
+
!(infoProps.urls.length === 1 && infoProps.urls[0] === infoProps.prompt);
|
|
251
|
+
question = `Do you want to proceed?`;
|
|
252
|
+
options.push({
|
|
253
|
+
label: 'Yes, allow once',
|
|
254
|
+
value: ToolConfirmationOutcome.ProceedOnce,
|
|
255
|
+
}, {
|
|
256
|
+
label: 'Yes, allow always',
|
|
257
|
+
value: ToolConfirmationOutcome.ProceedAlways,
|
|
258
|
+
}, { label: 'No (esc)', value: ToolConfirmationOutcome.Cancel });
|
|
259
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [_jsx(Text, { color: Colors.AccentCyan, children: infoProps.prompt }), displayUrls && infoProps.urls && infoProps.urls.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { children: "URLs to fetch:" }), infoProps.urls.map((url) => (_jsxs(Text, { children: [" - ", url] }, url)))] }))] }));
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// mcp tool confirmation
|
|
263
|
+
const mcpProps = confirmationDetails;
|
|
264
|
+
bodyContent = (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginLeft: 1, children: [_jsxs(Text, { color: Colors.AccentCyan, children: ["MCP Server: ", mcpProps.serverName] }), _jsxs(Text, { color: Colors.AccentCyan, children: ["Tool: ", mcpProps.toolName] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: Colors.Foreground, children: "Parameters:" }), _jsx(Box, { marginLeft: 1, children: _jsx(Text, { color: Colors.Gray, children: mcpProps.args ? JSON.stringify(mcpProps.args, null, 2) : 'No parameters' }) })] })] }));
|
|
265
|
+
question = `Allow execution of MCP tool "${mcpProps.toolName}" from server "${mcpProps.serverName}"?`;
|
|
266
|
+
options.push({
|
|
267
|
+
label: 'Yes, allow once',
|
|
268
|
+
value: ToolConfirmationOutcome.ProceedOnce,
|
|
269
|
+
}, {
|
|
270
|
+
label: `Yes, always allow tool "${mcpProps.toolName}" from server "${mcpProps.serverName}"`,
|
|
271
|
+
value: ToolConfirmationOutcome.ProceedAlwaysTool, // Cast until types are updated
|
|
272
|
+
}, {
|
|
273
|
+
label: `Yes, always allow all tools from server "${mcpProps.serverName}"`,
|
|
274
|
+
value: ToolConfirmationOutcome.ProceedAlwaysServer,
|
|
275
|
+
}, { label: 'No (esc)', value: ToolConfirmationOutcome.Cancel });
|
|
276
|
+
}
|
|
277
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, width: childWidth, children: [_jsx(Box, { flexGrow: 1, flexShrink: 1, overflow: "hidden", marginBottom: 1, children: bodyContent }), _jsx(Box, { marginBottom: 1, flexShrink: 0, children: _jsx(Text, { wrap: "truncate", children: question }) }), _jsx(Box, { flexShrink: 0, children: _jsx(RadioButtonSelect, { items: options, onSelect: handleSelect, isFocused: isFocused }) })] }));
|
|
278
|
+
};
|
|
279
|
+
//# sourceMappingURL=ToolConfirmationMessage.js.map
|