diff options
| author | Evan Senter <[email protected]> | 2025-04-18 17:35:29 +0100 |
|---|---|---|
| committer | Evan Senter <[email protected]> | 2025-04-18 18:16:52 +0100 |
| commit | 1bfc62dcc2c10e962d4a67009027b7187e690d03 (patch) | |
| tree | d28e075e789d1df9f9403e61e7a42894f8c871b1 /packages/cli/src | |
| parent | e0339993aeae97e0ce77ffa430214b64007b9f6f (diff) | |
Adding some wiring to allow the Ink app to warn if there are local development changes that haven't been captured in the recent build of the Gemini CLI.
Diffstat (limited to 'packages/cli/src')
| -rw-r--r-- | packages/cli/src/core/gemini-client.ts | 2 | ||||
| -rw-r--r-- | packages/cli/src/ui/App.tsx | 41 |
2 files changed, 42 insertions, 1 deletions
diff --git a/packages/cli/src/core/gemini-client.ts b/packages/cli/src/core/gemini-client.ts index 0b79a2ad..6ce89816 100644 --- a/packages/cli/src/core/gemini-client.ts +++ b/packages/cli/src/core/gemini-client.ts @@ -9,7 +9,7 @@ import { Content, } from '@google/genai'; import { getApiKey } from '../config/env.js'; -import { getModel } from '../config/globalConfig.js'; +import { getModel } from '../config/globalConfig.js'; import { CoreSystemPrompt } from './prompts.js'; import { type ToolCallEvent, diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index 1bc0f6c6..cc440392 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -1,5 +1,8 @@ import React, { useState, useEffect } from 'react'; import { Box, Text } from 'ink'; +import fs from 'fs'; +import path from 'path'; +import os from 'os'; import type { HistoryItem } from './types.js'; import { useGeminiStream } from './hooks/useGeminiStream.js'; import { useLoadingIndicator } from './hooks/useLoadingIndicator.js'; @@ -12,6 +15,8 @@ import Footer from './components/Footer.js'; import { StreamingState } from '../core/gemini-stream.js'; import { PartListUnion } from '@google/genai'; +const warningsFilePath = path.join(os.tmpdir(), 'gemini-code-cli-warnings.txt'); + interface AppProps { directory: string; } @@ -19,11 +24,31 @@ interface AppProps { const App = ({ directory }: AppProps) => { const [query, setQuery] = useState(''); const [history, setHistory] = useState<HistoryItem[]>([]); + const [startupWarnings, setStartupWarnings] = useState<string[]>([]); const { streamingState, submitQuery, initError } = useGeminiStream(setHistory); const { elapsedTime, currentLoadingPhrase } = useLoadingIndicator(streamingState); + useEffect(() => { + try { + if (fs.existsSync(warningsFilePath)) { + console.log('[App] Found warnings file:', warningsFilePath); + const warningsContent = fs.readFileSync(warningsFilePath, 'utf-8'); + setStartupWarnings(warningsContent.split('\n').filter(line => line.trim() !== '')); + try { + fs.unlinkSync(warningsFilePath); + } catch (unlinkErr: any) { + console.warn(`[App] Warning: Could not delete warnings file: ${unlinkErr.message}`); + } + } else { + console.log('[App] No warnings file found.'); + } + } catch (err: any) { + console.error(`[App] Error checking/reading warnings file: ${err.message}`); + } + }, []); + const handleInputSubmit = (value: PartListUnion) => { submitQuery(value) .then(() => { @@ -63,6 +88,22 @@ const App = ({ directory }: AppProps) => { <Box flexDirection="column" padding={1} marginBottom={1} width="100%"> <Header cwd={directory} /> + {startupWarnings.length > 0 && ( + <Box + borderStyle="round" + borderColor="yellow" + paddingX={1} + marginY={1} + flexDirection="column" + > + {startupWarnings.map((warning, index) => ( + <Text key={index} color="yellow"> + {warning} + </Text> + ))} + </Box> + )} + <Tips /> {initError && |
