summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
authorEvan Senter <[email protected]>2025-04-18 17:35:29 +0100
committerEvan Senter <[email protected]>2025-04-18 18:16:52 +0100
commit1bfc62dcc2c10e962d4a67009027b7187e690d03 (patch)
treed28e075e789d1df9f9403e61e7a42894f8c871b1 /packages/cli/src
parente0339993aeae97e0ce77ffa430214b64007b9f6f (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.ts2
-rw-r--r--packages/cli/src/ui/App.tsx41
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 &&