diff --git a/package.json b/package.json index b970096e..5cefd8db 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "test": "npm run test --workspaces", "lint": "eslint . --ext .ts,.tsx", "typecheck": "tsc --noEmit --jsx react", - "start": "node ./scripts/check-build-status.js && npm run start --workspace=gemini-code-cli -- \"$@\"", + "start": "npm run start --workspace=gemini-code-cli -- \"$@\"", "format": "prettier --write ." }, "devDependencies": { diff --git a/packages/cli/package.json b/packages/cli/package.json index e2bd5c3d..b5dd0c23 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -5,7 +5,7 @@ "type": "module", "main": "dist/gemini.js", "scripts": { - "build": "tsc && touch dist/.last_build", + "build": "tsc", "start": "node dist/gemini.js", "debug": "node --inspect-brk dist/gemini.js", "lint": "eslint . --ext .ts,.tsx", diff --git a/packages/cli/src/core/gemini-client.ts b/packages/cli/src/core/gemini-client.ts index 6ce89816..0b79a2ad 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 cc440392..1bc0f6c6 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -1,8 +1,5 @@ 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'; @@ -15,8 +12,6 @@ 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; } @@ -24,31 +19,11 @@ interface AppProps { const App = ({ directory }: AppProps) => { const [query, setQuery] = useState(''); const [history, setHistory] = useState([]); - const [startupWarnings, setStartupWarnings] = useState([]); 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(() => { @@ -88,22 +63,6 @@ const App = ({ directory }: AppProps) => {
- {startupWarnings.length > 0 && ( - - {startupWarnings.map((warning, index) => ( - - {warning} - - ))} - - )} - {initError && diff --git a/scripts/check-build-status.js b/scripts/check-build-status.js deleted file mode 100644 index fd38d003..00000000 --- a/scripts/check-build-status.js +++ /dev/null @@ -1,129 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import os from 'os'; // Import os module - -// --- Configuration --- -const cliPackageDir = path.resolve('packages', 'cli'); // Base directory for the CLI package -const buildTimestampPath = path.join(cliPackageDir, 'dist', '.last_build'); // Path to the timestamp file within the CLI package -const sourceDirs = [path.join(cliPackageDir, 'src')]; // Source directory within the CLI package -const filesToWatch = [path.join(cliPackageDir, 'package.json'), path.join(cliPackageDir, 'tsconfig.json')]; // Specific files within the CLI package -const buildDir = path.join(cliPackageDir, 'dist'); // Build output directory within the CLI package -const warningsFilePath = path.join(os.tmpdir(), 'gemini-code-cli-warnings.txt'); // Temp file for warnings -// --------------------- - -function getMtime(filePath) { - try { - return fs.statSync(filePath).mtimeMs; // Use mtimeMs for higher precision - } catch (err) { - if (err.code === 'ENOENT') { - return null; // File doesn't exist - } - console.error(`Error getting stats for ${filePath}:`, err); - process.exit(1); // Exit on unexpected errors getting stats - } -} - -function findSourceFiles(dir, allFiles = []) { - const entries = fs.readdirSync(dir, { withFileTypes: true }); - for (const entry of entries) { - const fullPath = path.join(dir, entry.name); - // Simple check to avoid recursing into node_modules or build dir itself - if (entry.isDirectory() && entry.name !== 'node_modules' && fullPath !== buildDir) { - findSourceFiles(fullPath, allFiles); - } else if (entry.isFile()) { - allFiles.push(fullPath); - } - } - return allFiles; -} - -console.log('Checking build status...'); - -// Clean up old warnings file before check -try { - if (fs.existsSync(warningsFilePath)) { - fs.unlinkSync(warningsFilePath); - } -} catch (err) { - console.warn(`[Check Script] Warning: Could not delete previous warnings file: ${err.message}`); -} - -const buildMtime = getMtime(buildTimestampPath); -if (!buildMtime) { - // If build is missing, write that as a warning and exit(0) so app can display it - const errorMessage = `ERROR: Build timestamp file (${path.relative(process.cwd(), buildTimestampPath)}) not found. Run \`npm run build\` first.`; - console.error(errorMessage); // Still log error here - try { - fs.writeFileSync(warningsFilePath, errorMessage); - } catch (writeErr) { - console.error(`[Check Script] Error writing missing build warning file: ${writeErr.message}`); - } - process.exit(0); // Allow app to start and show the error -} - -let newerSourceFileFound = false; -const warningMessages = []; // Collect warnings here -const allSourceFiles = []; - -// Collect files from specified directories -sourceDirs.forEach((dir) => { - const dirPath = path.resolve(dir); - if (fs.existsSync(dirPath)) { - findSourceFiles(dirPath, allSourceFiles); - } else { - console.warn(`Warning: Source directory "${dir}" not found.`); - } -}); - -// Add specific files -filesToWatch.forEach((file) => { - const filePath = path.resolve(file); - if (fs.existsSync(filePath)) { - allSourceFiles.push(filePath); - } else { - console.warn(`Warning: Watched file "${file}" not found.`); - } -}); - - -// Check modification times -for (const file of allSourceFiles) { - const sourceMtime = getMtime(file); - const relativePath = path.relative(process.cwd(), file); - const isNewer = sourceMtime && sourceMtime > buildMtime; - - if (isNewer) { - const warning = `Warning: Source file "${relativePath}" has been modified since the last build.`; - console.warn(warning); // Keep console warning for script debugging - warningMessages.push(warning); - newerSourceFileFound = true; - // break; // Uncomment to stop checking after the first newer file - } -} - -if (newerSourceFileFound) { - const finalWarning = '\nRun "npm run build" to incorporate changes before starting.'; - warningMessages.push(finalWarning); - console.warn(finalWarning); - - // Write warnings to the temp file - try { - fs.writeFileSync(warningsFilePath, warningMessages.join('\n')); - // Removed debug log - } catch (err) { - console.error(`[Check Script] Error writing warnings file: ${err.message}`); - // Proceed without writing, app won't show warnings - } -} else { - console.log('Build is up-to-date.'); - // Ensure no stale warning file exists if build is ok - try { - if (fs.existsSync(warningsFilePath)) { - fs.unlinkSync(warningsFilePath); - } - } catch (err) { - console.warn(`[Check Script] Warning: Could not delete previous warnings file: ${err.message}`); - } -} - -process.exit(0); // Always exit successfully so the app starts \ No newline at end of file