@google/gemini-cli 0.1.1 → 0.1.3-rc.1
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/README.md +7 -6
- package/dist/.last_build +0 -0
- package/dist/google-gemini-cli-0.1.3.tgz +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 +74 -0
- package/dist/src/config/auth.d.ts +6 -0
- package/dist/src/config/auth.js +38 -0
- package/dist/src/config/auth.js.map +1 -0
- package/dist/src/config/config.d.ts +14 -0
- package/dist/src/config/config.js +225 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/extension.d.ts +19 -0
- package/dist/src/config/extension.js +81 -0
- package/dist/src/config/extension.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 +69 -0
- package/dist/src/config/settings.js +165 -0
- package/dist/src/config/settings.js.map +1 -0
- package/dist/src/gemini.d.ts +6 -0
- package/dist/src/gemini.js +212 -0
- package/dist/src/gemini.js.map +1 -0
- package/dist/src/gemini.test.d.ts +6 -0
- package/dist/src/gemini.test.js +122 -0
- package/dist/src/gemini.test.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 +112 -0
- package/dist/src/nonInteractiveCli.js.map +1 -0
- package/dist/src/ui/App.d.ts +14 -0
- package/dist/src/ui/App.js +398 -0
- package/dist/src/ui/App.js.map +1 -0
- package/dist/src/ui/App.test.d.ts +6 -0
- package/dist/src/ui/App.test.js +280 -0
- package/dist/src/ui/App.test.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/components/AboutBox.d.ts +14 -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 +26 -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 +67 -0
- package/dist/src/ui/components/AuthDialog.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
- package/dist/src/ui/components/AuthDialog.test.js +69 -0
- package/dist/src/ui/components/AuthDialog.test.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 +40 -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 +22 -0
- package/dist/src/ui/components/Footer.js +13 -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 +7 -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 +15 -0
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js +85 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.d.ts +24 -0
- package/dist/src/ui/components/InputPrompt.js +313 -0
- package/dist/src/ui/components/InputPrompt.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.test.d.ts +6 -0
- package/dist/src/ui/components/InputPrompt.test.js +154 -0
- package/dist/src/ui/components/InputPrompt.test.js.map +1 -0
- package/dist/src/ui/components/LoadingIndicator.d.ts +15 -0
- package/dist/src/ui/components/LoadingIndicator.js +19 -0
- package/dist/src/ui/components/LoadingIndicator.js.map +1 -0
- package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
- package/dist/src/ui/components/LoadingIndicator.test.js +141 -0
- package/dist/src/ui/components/LoadingIndicator.test.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/SessionSummaryDisplay.d.ts +13 -0
- package/dist/src/ui/components/SessionSummaryDisplay.js +20 -0
- package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -0
- package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/SessionSummaryDisplay.test.js +41 -0
- package/dist/src/ui/components/SessionSummaryDisplay.test.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/Stats.d.ts +39 -0
- package/dist/src/ui/components/Stats.js +23 -0
- package/dist/src/ui/components/Stats.js.map +1 -0
- package/dist/src/ui/components/Stats.test.d.ts +6 -0
- package/dist/src/ui/components/Stats.test.js +57 -0
- package/dist/src/ui/components/Stats.test.js.map +1 -0
- package/dist/src/ui/components/StatsDisplay.d.ts +14 -0
- package/dist/src/ui/components/StatsDisplay.js +28 -0
- package/dist/src/ui/components/StatsDisplay.js.map +1 -0
- package/dist/src/ui/components/StatsDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/StatsDisplay.test.js +51 -0
- package/dist/src/ui/components/StatsDisplay.test.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/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/DiffRenderer.test.d.ts +6 -0
- package/dist/src/ui/components/messages/DiffRenderer.test.js +239 -0
- package/dist/src/ui/components/messages/DiffRenderer.test.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 +15 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +111 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.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/ToolMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolMessage.test.js +116 -0
- package/dist/src/ui/components/messages/ToolMessage.test.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 +383 -0
- package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.js +134 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.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 +121 -0
- package/dist/src/ui/components/shared/text-buffer.js +1147 -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 +35 -0
- package/dist/src/ui/contexts/SessionContext.js +132 -0
- package/dist/src/ui/contexts/SessionContext.js.map +1 -0
- package/dist/src/ui/contexts/SessionContext.test.d.ts +6 -0
- package/dist/src/ui/contexts/SessionContext.test.js +151 -0
- package/dist/src/ui/contexts/SessionContext.test.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 +50 -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 +312 -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 +31 -0
- package/dist/src/ui/hooks/slashCommandProcessor.js +922 -0
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -0
- package/dist/src/ui/hooks/useAuthCommand.d.ts +15 -0
- package/dist/src/ui/hooks/useAuthCommand.js +65 -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/useCompletion.d.ts +21 -0
- package/dist/src/ui/hooks/useCompletion.js +321 -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 +59 -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 +552 -0
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.test.d.ts +6 -0
- package/dist/src/ui/hooks/useGeminiStream.test.js +823 -0
- package/dist/src/ui/hooks/useGeminiStream.test.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/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/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/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/theme-manager.d.ts +33 -0
- package/dist/src/ui/themes/theme-manager.js +107 -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 +149 -0
- package/dist/src/ui/types.js +41 -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/MarkdownDisplay.d.ts +14 -0
- package/dist/src/ui/utils/MarkdownDisplay.js +221 -0
- package/dist/src/ui/utils/MarkdownDisplay.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/errorParsing.d.ts +15 -0
- package/dist/src/ui/utils/errorParsing.js +80 -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 +34 -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/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/package.json +60 -71
- package/LICENSE +0 -202
- package/bundle/gemini.js +0 -257368
- package/bundle/shell.json +0 -18
- package/bundle/shell.md +0 -16
- /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
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ With the Gemini CLI you can:
|
|
|
13
13
|
- Generate new apps from PDFs or sketches, using Gemini's multimodal capabilities.
|
|
14
14
|
- Automate operational tasks, like querying pull requests or handling complex rebases.
|
|
15
15
|
- Use tools and MCP servers to connect new capabilities, including [media generation with Imagen,
|
|
16
|
-
Veo or Lyria](https://github.com/GoogleCloudPlatform/vertex-ai-creative-studio/tree/main/experiments/mcp-
|
|
16
|
+
Veo or Lyria](https://github.com/GoogleCloudPlatform/vertex-ai-creative-studio/tree/main/experiments/mcp-genmedia)
|
|
17
17
|
- Ground your queries with the [Google Search](https://ai.google.dev/gemini-api/docs/grounding)
|
|
18
18
|
tool, built in to Gemini.
|
|
19
19
|
|
|
@@ -30,6 +30,7 @@ With the Gemini CLI you can:
|
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
npm install -g @google/gemini-cli
|
|
33
|
+
gemini
|
|
33
34
|
```
|
|
34
35
|
|
|
35
36
|
3. **Pick a color theme**
|
|
@@ -57,17 +58,17 @@ Once the CLI is running, you can start interacting with Gemini from your shell.
|
|
|
57
58
|
You can start a project from a new directory:
|
|
58
59
|
|
|
59
60
|
```sh
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
cd new-project/
|
|
62
|
+
gemini
|
|
62
63
|
> Write me a Gemini Discord bot that answers questions using a FAQ.md file I will provide
|
|
63
64
|
```
|
|
64
65
|
|
|
65
66
|
Or work with an existing project:
|
|
66
67
|
|
|
67
68
|
```sh
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
git clone https://github.com/google-gemini/gemini-cli
|
|
70
|
+
cd gemini-cli
|
|
71
|
+
gemini
|
|
71
72
|
> Give me a summary of all of the changes that went in yesterday
|
|
72
73
|
```
|
|
73
74
|
|
package/dist/.last_build
ADDED
|
File without changes
|
|
Binary file
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import './src/gemini.js';
|
|
8
|
+
import { main } from './src/gemini.js';
|
|
9
|
+
// --- Global Entry Point ---
|
|
10
|
+
main().catch((error) => {
|
|
11
|
+
console.error('An unexpected critical error occurred:');
|
|
12
|
+
if (error instanceof Error) {
|
|
13
|
+
console.error(error.stack);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
console.error(String(error));
|
|
17
|
+
}
|
|
18
|
+
process.exit(1);
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,6BAA6B;AAC7B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@google/gemini-cli",
|
|
3
|
+
"version": "0.1.3-rc.1",
|
|
4
|
+
"description": "Gemini CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"repository": "google-gemini/gemini-cli",
|
|
8
|
+
"bin": {
|
|
9
|
+
"gemini": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "node ../../scripts/build_package.js",
|
|
13
|
+
"clean": "rm -rf dist",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"debug": "node --inspect-brk dist/index.js",
|
|
16
|
+
"lint": "eslint . --ext .ts,.tsx",
|
|
17
|
+
"format": "prettier --write .",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:ci": "vitest run --coverage",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"prerelease:version": "node ../../scripts/bind_package_version.js",
|
|
22
|
+
"prerelease:deps": "node ../../scripts/bind_package_dependencies.js",
|
|
23
|
+
"prepack": "npm run build"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"config": {
|
|
29
|
+
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.1.3"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@google/gemini-cli-core": "0.1.3-rc.0",
|
|
33
|
+
"@types/update-notifier": "^6.0.8",
|
|
34
|
+
"command-exists": "^1.2.9",
|
|
35
|
+
"diff": "^7.0.0",
|
|
36
|
+
"dotenv": "^16.4.7",
|
|
37
|
+
"glob": "^10.4.1",
|
|
38
|
+
"highlight.js": "^11.11.1",
|
|
39
|
+
"ink": "^5.2.0",
|
|
40
|
+
"ink-big-text": "^2.0.0",
|
|
41
|
+
"ink-gradient": "^3.0.0",
|
|
42
|
+
"ink-select-input": "^6.0.0",
|
|
43
|
+
"ink-spinner": "^5.0.0",
|
|
44
|
+
"ink-text-input": "^6.0.0",
|
|
45
|
+
"lowlight": "^3.3.0",
|
|
46
|
+
"mime-types": "^2.1.4",
|
|
47
|
+
"open": "^10.1.2",
|
|
48
|
+
"react": "^18.3.1",
|
|
49
|
+
"read-package-up": "^11.0.0",
|
|
50
|
+
"shell-quote": "^1.8.2",
|
|
51
|
+
"string-width": "^7.1.0",
|
|
52
|
+
"strip-ansi": "^7.1.0",
|
|
53
|
+
"strip-json-comments": "^3.1.1",
|
|
54
|
+
"update-notifier": "^7.3.1",
|
|
55
|
+
"yargs": "^17.7.2"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@testing-library/react": "^14.0.0",
|
|
59
|
+
"@types/command-exists": "^1.2.3",
|
|
60
|
+
"@types/diff": "^7.0.2",
|
|
61
|
+
"@types/dotenv": "^6.1.1",
|
|
62
|
+
"@types/node": "^20.11.24",
|
|
63
|
+
"@types/react": "^18.3.1",
|
|
64
|
+
"@types/shell-quote": "^1.7.5",
|
|
65
|
+
"@types/yargs": "^17.0.32",
|
|
66
|
+
"ink-testing-library": "^4.0.0",
|
|
67
|
+
"jsdom": "^26.1.0",
|
|
68
|
+
"typescript": "^5.3.3",
|
|
69
|
+
"vitest": "^3.1.1"
|
|
70
|
+
},
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": ">=18"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { AuthType } from '@google/gemini-cli-core';
|
|
7
|
+
import { loadEnvironment } from './config.js';
|
|
8
|
+
export const validateAuthMethod = (authMethod) => {
|
|
9
|
+
loadEnvironment();
|
|
10
|
+
if (authMethod === AuthType.LOGIN_WITH_GOOGLE_PERSONAL) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
if (authMethod === AuthType.LOGIN_WITH_GOOGLE_ENTERPRISE) {
|
|
14
|
+
if (!process.env.GOOGLE_CLOUD_PROJECT) {
|
|
15
|
+
return 'GOOGLE_CLOUD_PROJECT environment variable not found. Add that to your .env and try again, no reload needed!';
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (authMethod === AuthType.USE_GEMINI) {
|
|
20
|
+
if (!process.env.GEMINI_API_KEY) {
|
|
21
|
+
return 'GEMINI_API_KEY environment variable not found. Add that to your .env and try again, no reload needed!';
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (authMethod === AuthType.USE_VERTEX_AI) {
|
|
26
|
+
const hasVertexProjectLocationConfig = !!process.env.GOOGLE_CLOUD_PROJECT && !!process.env.GOOGLE_CLOUD_LOCATION;
|
|
27
|
+
const hasGoogleApiKey = !!process.env.GOOGLE_API_KEY;
|
|
28
|
+
if (!hasVertexProjectLocationConfig && !hasGoogleApiKey) {
|
|
29
|
+
return ('Must specify GOOGLE_GENAI_USE_VERTEXAI=true and either:\n' +
|
|
30
|
+
'• GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION environment variables.\n' +
|
|
31
|
+
'• GOOGLE_API_KEY environment variable (if using express mode).\n' +
|
|
32
|
+
'Update your .env and try again, no reload needed!');
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return 'Invalid auth method selected.';
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/config/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAkB,EAAiB,EAAE;IACtE,eAAe,EAAE,CAAC;IAClB,IAAI,UAAU,KAAK,QAAQ,CAAC,0BAA0B,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,CAAC,4BAA4B,EAAE,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACtC,OAAO,6GAA6G,CAAC;QACvH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,uGAAuG,CAAC;QACjH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,8BAA8B,GAClC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAC5E,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACrD,IAAI,CAAC,8BAA8B,IAAI,CAAC,eAAe,EAAE,CAAC;YACxD,OAAO,CACL,2DAA2D;gBAC3D,2EAA2E;gBAC3E,kEAAkE;gBAClE,mDAAmD,CACpD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,+BAA+B,CAAC;AACzC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Config, FileDiscoveryService } from '@google/gemini-cli-core';
|
|
7
|
+
import { Settings } from './settings.js';
|
|
8
|
+
import { Extension } from './extension.js';
|
|
9
|
+
export declare function loadHierarchicalGeminiMemory(currentWorkingDirectory: string, debugMode: boolean, fileService: FileDiscoveryService, extensionContextFilePaths?: string[]): Promise<{
|
|
10
|
+
memoryContent: string;
|
|
11
|
+
fileCount: number;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function loadCliConfig(settings: Settings, extensions: Extension[], sessionId: string): Promise<Config>;
|
|
14
|
+
export declare function loadEnvironment(): void;
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import yargs from 'yargs/yargs';
|
|
7
|
+
import { hideBin } from 'yargs/helpers';
|
|
8
|
+
import process from 'node:process';
|
|
9
|
+
import { Config, loadServerHierarchicalMemory, setGeminiMdFilename as setServerGeminiMdFilename, getCurrentGeminiMdFilename, ApprovalMode, GEMINI_CONFIG_DIR as GEMINI_DIR, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_EMBEDDING_MODEL, FileDiscoveryService, } from '@google/gemini-cli-core';
|
|
10
|
+
import { getCliVersion } from '../utils/version.js';
|
|
11
|
+
import * as dotenv from 'dotenv';
|
|
12
|
+
import * as fs from 'node:fs';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
import * as os from 'node:os';
|
|
15
|
+
import { loadSandboxConfig } from './sandboxConfig.js';
|
|
16
|
+
// Simple console logger for now - replace with actual logger if available
|
|
17
|
+
const logger = {
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
+
debug: (...args) => console.debug('[DEBUG]', ...args),
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
warn: (...args) => console.warn('[WARN]', ...args),
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
+
error: (...args) => console.error('[ERROR]', ...args),
|
|
24
|
+
};
|
|
25
|
+
async function parseArguments() {
|
|
26
|
+
const argv = await yargs(hideBin(process.argv))
|
|
27
|
+
.option('model', {
|
|
28
|
+
alias: 'm',
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: `Model`,
|
|
31
|
+
default: process.env.GEMINI_MODEL || DEFAULT_GEMINI_MODEL,
|
|
32
|
+
})
|
|
33
|
+
.option('prompt', {
|
|
34
|
+
alias: 'p',
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'Prompt. Appended to input on stdin (if any).',
|
|
37
|
+
})
|
|
38
|
+
.option('sandbox', {
|
|
39
|
+
alias: 's',
|
|
40
|
+
type: 'boolean',
|
|
41
|
+
description: 'Run in sandbox?',
|
|
42
|
+
})
|
|
43
|
+
.option('sandbox-image', {
|
|
44
|
+
type: 'string',
|
|
45
|
+
description: 'Sandbox image URI.',
|
|
46
|
+
})
|
|
47
|
+
.option('debug', {
|
|
48
|
+
alias: 'd',
|
|
49
|
+
type: 'boolean',
|
|
50
|
+
description: 'Run in debug mode?',
|
|
51
|
+
default: false,
|
|
52
|
+
})
|
|
53
|
+
.option('all_files', {
|
|
54
|
+
alias: 'a',
|
|
55
|
+
type: 'boolean',
|
|
56
|
+
description: 'Include ALL files in context?',
|
|
57
|
+
default: false,
|
|
58
|
+
})
|
|
59
|
+
.option('show_memory_usage', {
|
|
60
|
+
type: 'boolean',
|
|
61
|
+
description: 'Show memory usage in status bar',
|
|
62
|
+
default: false,
|
|
63
|
+
})
|
|
64
|
+
.option('yolo', {
|
|
65
|
+
alias: 'y',
|
|
66
|
+
type: 'boolean',
|
|
67
|
+
description: 'Automatically accept all actions (aka YOLO mode, see https://www.youtube.com/watch?v=xvFZjo5PgG0 for more details)?',
|
|
68
|
+
default: false,
|
|
69
|
+
})
|
|
70
|
+
.option('telemetry', {
|
|
71
|
+
type: 'boolean',
|
|
72
|
+
description: 'Enable telemetry? This flag specifically controls if telemetry is sent. Other --telemetry-* flags set specific values but do not enable telemetry on their own.',
|
|
73
|
+
})
|
|
74
|
+
.option('telemetry-target', {
|
|
75
|
+
type: 'string',
|
|
76
|
+
choices: ['local', 'gcp'],
|
|
77
|
+
description: 'Set the telemetry target (local or gcp). Overrides settings files.',
|
|
78
|
+
})
|
|
79
|
+
.option('telemetry-otlp-endpoint', {
|
|
80
|
+
type: 'string',
|
|
81
|
+
description: 'Set the OTLP endpoint for telemetry. Overrides environment variables and settings files.',
|
|
82
|
+
})
|
|
83
|
+
.option('telemetry-log-prompts', {
|
|
84
|
+
type: 'boolean',
|
|
85
|
+
description: 'Enable or disable logging of user prompts for telemetry. Overrides settings files.',
|
|
86
|
+
})
|
|
87
|
+
.option('checkpointing', {
|
|
88
|
+
alias: 'c',
|
|
89
|
+
type: 'boolean',
|
|
90
|
+
description: 'Enables checkpointing of file edits',
|
|
91
|
+
default: false,
|
|
92
|
+
})
|
|
93
|
+
.version(await getCliVersion()) // This will enable the --version flag based on package.json
|
|
94
|
+
.alias('v', 'version')
|
|
95
|
+
.help()
|
|
96
|
+
.alias('h', 'help')
|
|
97
|
+
.strict().argv;
|
|
98
|
+
return argv;
|
|
99
|
+
}
|
|
100
|
+
// This function is now a thin wrapper around the server's implementation.
|
|
101
|
+
// It's kept in the CLI for now as App.tsx directly calls it for memory refresh.
|
|
102
|
+
// TODO: Consider if App.tsx should get memory via a server call or if Config should refresh itself.
|
|
103
|
+
export async function loadHierarchicalGeminiMemory(currentWorkingDirectory, debugMode, fileService, extensionContextFilePaths = []) {
|
|
104
|
+
if (debugMode) {
|
|
105
|
+
logger.debug(`CLI: Delegating hierarchical memory load to server for CWD: ${currentWorkingDirectory}`);
|
|
106
|
+
}
|
|
107
|
+
// Directly call the server function.
|
|
108
|
+
// The server function will use its own homedir() for the global path.
|
|
109
|
+
return loadServerHierarchicalMemory(currentWorkingDirectory, debugMode, fileService, extensionContextFilePaths);
|
|
110
|
+
}
|
|
111
|
+
export async function loadCliConfig(settings, extensions, sessionId) {
|
|
112
|
+
loadEnvironment();
|
|
113
|
+
const argv = await parseArguments();
|
|
114
|
+
const debugMode = argv.debug || false;
|
|
115
|
+
// Set the context filename in the server's memoryTool module BEFORE loading memory
|
|
116
|
+
// TODO(b/343434939): This is a bit of a hack. The contextFileName should ideally be passed
|
|
117
|
+
// directly to the Config constructor in core, and have core handle setGeminiMdFilename.
|
|
118
|
+
// However, loadHierarchicalGeminiMemory is called *before* createServerConfig.
|
|
119
|
+
if (settings.contextFileName) {
|
|
120
|
+
setServerGeminiMdFilename(settings.contextFileName);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Reset to default if not provided in settings.
|
|
124
|
+
setServerGeminiMdFilename(getCurrentGeminiMdFilename());
|
|
125
|
+
}
|
|
126
|
+
const extensionContextFilePaths = extensions.flatMap((e) => e.contextFiles);
|
|
127
|
+
const fileService = new FileDiscoveryService(process.cwd());
|
|
128
|
+
// Call the (now wrapper) loadHierarchicalGeminiMemory which calls the server's version
|
|
129
|
+
const { memoryContent, fileCount } = await loadHierarchicalGeminiMemory(process.cwd(), debugMode, fileService, extensionContextFilePaths);
|
|
130
|
+
const mcpServers = mergeMcpServers(settings, extensions);
|
|
131
|
+
const sandboxConfig = await loadSandboxConfig(settings, argv);
|
|
132
|
+
return new Config({
|
|
133
|
+
sessionId,
|
|
134
|
+
embeddingModel: DEFAULT_GEMINI_EMBEDDING_MODEL,
|
|
135
|
+
sandbox: sandboxConfig,
|
|
136
|
+
targetDir: process.cwd(),
|
|
137
|
+
debugMode,
|
|
138
|
+
question: argv.prompt || '',
|
|
139
|
+
fullContext: argv.all_files || false,
|
|
140
|
+
coreTools: settings.coreTools || undefined,
|
|
141
|
+
excludeTools: settings.excludeTools || undefined,
|
|
142
|
+
toolDiscoveryCommand: settings.toolDiscoveryCommand,
|
|
143
|
+
toolCallCommand: settings.toolCallCommand,
|
|
144
|
+
mcpServerCommand: settings.mcpServerCommand,
|
|
145
|
+
mcpServers,
|
|
146
|
+
userMemory: memoryContent,
|
|
147
|
+
geminiMdFileCount: fileCount,
|
|
148
|
+
approvalMode: argv.yolo || false ? ApprovalMode.YOLO : ApprovalMode.DEFAULT,
|
|
149
|
+
showMemoryUsage: argv.show_memory_usage || settings.showMemoryUsage || false,
|
|
150
|
+
accessibility: settings.accessibility,
|
|
151
|
+
telemetry: {
|
|
152
|
+
enabled: argv.telemetry ?? settings.telemetry?.enabled,
|
|
153
|
+
target: (argv.telemetryTarget ??
|
|
154
|
+
settings.telemetry?.target),
|
|
155
|
+
otlpEndpoint: argv.telemetryOtlpEndpoint ??
|
|
156
|
+
process.env.OTEL_EXPORTER_OTLP_ENDPOINT ??
|
|
157
|
+
settings.telemetry?.otlpEndpoint,
|
|
158
|
+
logPrompts: argv.telemetryLogPrompts ?? settings.telemetry?.logPrompts,
|
|
159
|
+
},
|
|
160
|
+
usageStatisticsEnabled: settings.usageStatisticsEnabled ?? true,
|
|
161
|
+
// Git-aware file filtering settings
|
|
162
|
+
fileFiltering: {
|
|
163
|
+
respectGitIgnore: settings.fileFiltering?.respectGitIgnore,
|
|
164
|
+
enableRecursiveFileSearch: settings.fileFiltering?.enableRecursiveFileSearch,
|
|
165
|
+
},
|
|
166
|
+
checkpointing: argv.checkpointing || settings.checkpointing?.enabled,
|
|
167
|
+
proxy: process.env.HTTPS_PROXY ||
|
|
168
|
+
process.env.https_proxy ||
|
|
169
|
+
process.env.HTTP_PROXY ||
|
|
170
|
+
process.env.http_proxy,
|
|
171
|
+
cwd: process.cwd(),
|
|
172
|
+
fileDiscoveryService: fileService,
|
|
173
|
+
bugCommand: settings.bugCommand,
|
|
174
|
+
model: argv.model,
|
|
175
|
+
extensionContextFilePaths,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function mergeMcpServers(settings, extensions) {
|
|
179
|
+
const mcpServers = { ...(settings.mcpServers || {}) };
|
|
180
|
+
for (const extension of extensions) {
|
|
181
|
+
Object.entries(extension.config.mcpServers || {}).forEach(([key, server]) => {
|
|
182
|
+
if (mcpServers[key]) {
|
|
183
|
+
logger.warn(`Skipping extension MCP config for server with key "${key}" as it already exists.`);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
mcpServers[key] = server;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return mcpServers;
|
|
190
|
+
}
|
|
191
|
+
function findEnvFile(startDir) {
|
|
192
|
+
let currentDir = path.resolve(startDir);
|
|
193
|
+
while (true) {
|
|
194
|
+
// prefer gemini-specific .env under GEMINI_DIR
|
|
195
|
+
const geminiEnvPath = path.join(currentDir, GEMINI_DIR, '.env');
|
|
196
|
+
if (fs.existsSync(geminiEnvPath)) {
|
|
197
|
+
return geminiEnvPath;
|
|
198
|
+
}
|
|
199
|
+
const envPath = path.join(currentDir, '.env');
|
|
200
|
+
if (fs.existsSync(envPath)) {
|
|
201
|
+
return envPath;
|
|
202
|
+
}
|
|
203
|
+
const parentDir = path.dirname(currentDir);
|
|
204
|
+
if (parentDir === currentDir || !parentDir) {
|
|
205
|
+
// check .env under home as fallback, again preferring gemini-specific .env
|
|
206
|
+
const homeGeminiEnvPath = path.join(os.homedir(), GEMINI_DIR, '.env');
|
|
207
|
+
if (fs.existsSync(homeGeminiEnvPath)) {
|
|
208
|
+
return homeGeminiEnvPath;
|
|
209
|
+
}
|
|
210
|
+
const homeEnvPath = path.join(os.homedir(), '.env');
|
|
211
|
+
if (fs.existsSync(homeEnvPath)) {
|
|
212
|
+
return homeEnvPath;
|
|
213
|
+
}
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
currentDir = parentDir;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export function loadEnvironment() {
|
|
220
|
+
const envFilePath = findEnvFile(process.cwd());
|
|
221
|
+
if (envFilePath) {
|
|
222
|
+
dotenv.config({ path: envFilePath });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { MCPServerConfig } from '@google/gemini-cli-core';
|
|
7
|
+
export declare const EXTENSIONS_DIRECTORY_NAME: string;
|
|
8
|
+
export declare const EXTENSIONS_CONFIG_FILENAME = "gemini-extension.json";
|
|
9
|
+
export interface Extension {
|
|
10
|
+
config: ExtensionConfig;
|
|
11
|
+
contextFiles: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface ExtensionConfig {
|
|
14
|
+
name: string;
|
|
15
|
+
version: string;
|
|
16
|
+
mcpServers?: Record<string, MCPServerConfig>;
|
|
17
|
+
contextFileName?: string | string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function loadExtensions(workspaceDir: string): Extension[];
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
export const EXTENSIONS_DIRECTORY_NAME = path.join('.gemini', 'extensions');
|
|
10
|
+
export const EXTENSIONS_CONFIG_FILENAME = 'gemini-extension.json';
|
|
11
|
+
export function loadExtensions(workspaceDir) {
|
|
12
|
+
const allExtensions = [
|
|
13
|
+
...loadExtensionsFromDir(workspaceDir),
|
|
14
|
+
...loadExtensionsFromDir(os.homedir()),
|
|
15
|
+
];
|
|
16
|
+
const uniqueExtensions = [];
|
|
17
|
+
const seenNames = new Set();
|
|
18
|
+
for (const extension of allExtensions) {
|
|
19
|
+
if (!seenNames.has(extension.config.name)) {
|
|
20
|
+
console.log(`Loading extension: ${extension.config.name} (version: ${extension.config.version})`);
|
|
21
|
+
uniqueExtensions.push(extension);
|
|
22
|
+
seenNames.add(extension.config.name);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return uniqueExtensions;
|
|
26
|
+
}
|
|
27
|
+
function loadExtensionsFromDir(dir) {
|
|
28
|
+
const extensionsDir = path.join(dir, EXTENSIONS_DIRECTORY_NAME);
|
|
29
|
+
if (!fs.existsSync(extensionsDir)) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const extensions = [];
|
|
33
|
+
for (const subdir of fs.readdirSync(extensionsDir)) {
|
|
34
|
+
const extensionDir = path.join(extensionsDir, subdir);
|
|
35
|
+
const extension = loadExtension(extensionDir);
|
|
36
|
+
if (extension != null) {
|
|
37
|
+
extensions.push(extension);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return extensions;
|
|
41
|
+
}
|
|
42
|
+
function loadExtension(extensionDir) {
|
|
43
|
+
if (!fs.statSync(extensionDir).isDirectory()) {
|
|
44
|
+
console.error(`Warning: unexpected file ${extensionDir} in extensions directory.`);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const configFilePath = path.join(extensionDir, EXTENSIONS_CONFIG_FILENAME);
|
|
48
|
+
if (!fs.existsSync(configFilePath)) {
|
|
49
|
+
console.error(`Warning: extension directory ${extensionDir} does not contain a config file ${configFilePath}.`);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const configContent = fs.readFileSync(configFilePath, 'utf-8');
|
|
54
|
+
const config = JSON.parse(configContent);
|
|
55
|
+
if (!config.name || !config.version) {
|
|
56
|
+
console.error(`Invalid extension config in ${configFilePath}: missing name or version.`);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const contextFiles = getContextFileNames(config)
|
|
60
|
+
.map((contextFileName) => path.join(extensionDir, contextFileName))
|
|
61
|
+
.filter((contextFilePath) => fs.existsSync(contextFilePath));
|
|
62
|
+
return {
|
|
63
|
+
config,
|
|
64
|
+
contextFiles,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
console.error(`Warning: error parsing extension config in ${configFilePath}: ${e}`);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function getContextFileNames(config) {
|
|
73
|
+
if (!config.contextFileName) {
|
|
74
|
+
return ['GEMINI.md'];
|
|
75
|
+
}
|
|
76
|
+
else if (!Array.isArray(config.contextFileName)) {
|
|
77
|
+
return [config.contextFileName];
|
|
78
|
+
}
|
|
79
|
+
return config.contextFileName;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/config/extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { SandboxConfig } from '@google/gemini-cli-core';
|
|
7
|
+
import { Settings } from './settings.js';
|
|
8
|
+
interface SandboxCliArgs {
|
|
9
|
+
sandbox?: boolean | string;
|
|
10
|
+
'sandbox-image'?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function loadSandboxConfig(settings: Settings, argv: SandboxCliArgs): Promise<SandboxConfig | undefined>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import commandExists from 'command-exists';
|
|
7
|
+
import * as os from 'node:os';
|
|
8
|
+
import { getPackageJson } from '../utils/package.js';
|
|
9
|
+
const VALID_SANDBOX_COMMANDS = [
|
|
10
|
+
'docker',
|
|
11
|
+
'podman',
|
|
12
|
+
'sandbox-exec',
|
|
13
|
+
];
|
|
14
|
+
function isSandboxCommand(value) {
|
|
15
|
+
return VALID_SANDBOX_COMMANDS.includes(value);
|
|
16
|
+
}
|
|
17
|
+
function getSandboxCommand(sandbox) {
|
|
18
|
+
// If the SANDBOX env var is set, we're already inside the sandbox.
|
|
19
|
+
if (process.env.SANDBOX) {
|
|
20
|
+
return '';
|
|
21
|
+
}
|
|
22
|
+
// note environment variable takes precedence over argument (from command line or settings)
|
|
23
|
+
const environmentConfiguredSandbox = process.env.GEMINI_SANDBOX?.toLowerCase().trim() ?? '';
|
|
24
|
+
sandbox =
|
|
25
|
+
environmentConfiguredSandbox?.length > 0
|
|
26
|
+
? environmentConfiguredSandbox
|
|
27
|
+
: sandbox;
|
|
28
|
+
if (sandbox === '1' || sandbox === 'true')
|
|
29
|
+
sandbox = true;
|
|
30
|
+
else if (sandbox === '0' || sandbox === 'false' || !sandbox)
|
|
31
|
+
sandbox = false;
|
|
32
|
+
if (sandbox === false) {
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
if (typeof sandbox === 'string' && sandbox) {
|
|
36
|
+
if (!isSandboxCommand(sandbox)) {
|
|
37
|
+
console.error(`ERROR: invalid sandbox command '${sandbox}'. Must be one of ${VALID_SANDBOX_COMMANDS.join(', ')}`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// confirm that specfied command exists
|
|
41
|
+
if (commandExists.sync(sandbox)) {
|
|
42
|
+
return sandbox;
|
|
43
|
+
}
|
|
44
|
+
console.error(`ERROR: missing sandbox command '${sandbox}' (from GEMINI_SANDBOX)`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
// look for seatbelt, docker, or podman, in that order
|
|
48
|
+
// for container-based sandboxing, require sandbox to be enabled explicitly
|
|
49
|
+
if (os.platform() === 'darwin' && commandExists.sync('sandbox-exec')) {
|
|
50
|
+
return 'sandbox-exec';
|
|
51
|
+
}
|
|
52
|
+
else if (commandExists.sync('docker') && sandbox === true) {
|
|
53
|
+
return 'docker';
|
|
54
|
+
}
|
|
55
|
+
else if (commandExists.sync('podman') && sandbox === true) {
|
|
56
|
+
return 'podman';
|
|
57
|
+
}
|
|
58
|
+
// throw an error if user requested sandbox but no command was found
|
|
59
|
+
if (sandbox === true) {
|
|
60
|
+
console.error('ERROR: GEMINI_SANDBOX is true but failed to determine command for sandbox; ' +
|
|
61
|
+
'install docker or podman or specify command in GEMINI_SANDBOX');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
return '';
|
|
65
|
+
}
|
|
66
|
+
export async function loadSandboxConfig(settings, argv) {
|
|
67
|
+
const sandboxOption = argv.sandbox ?? settings.sandbox;
|
|
68
|
+
const command = getSandboxCommand(sandboxOption);
|
|
69
|
+
const packageJson = await getPackageJson();
|
|
70
|
+
const image = argv['sandbox-image'] ??
|
|
71
|
+
process.env.GEMINI_SANDBOX_IMAGE ??
|
|
72
|
+
packageJson?.config?.sandboxImageUri;
|
|
73
|
+
return command && image ? { command, image } : undefined;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=sandboxConfig.js.map
|