From 7f3798e180db8d56fd45002ca61331e305a36a41 Mon Sep 17 00:00:00 2001 From: Brandon Keiji Date: Wed, 23 Apr 2025 22:00:40 +0000 Subject: feat: add CLI version number to footer (#134) --- packages/cli/package.json | 1 + packages/cli/src/gemini.ts | 14 +++++++++++++- packages/cli/src/ui/App.tsx | 4 +++- packages/cli/src/ui/components/Footer.tsx | 3 +++ 4 files changed, 20 insertions(+), 2 deletions(-) (limited to 'packages') diff --git a/packages/cli/package.json b/packages/cli/package.json index abd0e819..e140c783 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -35,6 +35,7 @@ "ink-text-input": "^6.0.0", "lowlight": "^3.3.0", "react": "^18.3.1", + "read-package-up": "^11.0.0", "yargs": "^17.7.2" }, "devDependencies": { diff --git a/packages/cli/src/gemini.ts b/packages/cli/src/gemini.ts index 0579f059..3a618b96 100644 --- a/packages/cli/src/gemini.ts +++ b/packages/cli/src/gemini.ts @@ -10,6 +10,12 @@ import { App } from './ui/App.js'; import { loadCliConfig } from './config/config.js'; import { readStdin } from './utils/readStdin.js'; import { GeminiClient } from '@gemini-code/server'; +import { readPackageUp } from 'read-package-up'; +import { fileURLToPath } from 'node:url'; +import { dirname } from 'node:path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); async function main() { const config = loadCliConfig(); @@ -17,14 +23,20 @@ async function main() { // Render UI, passing necessary config values. Check that there is no command line question. if (process.stdin.isTTY && input?.length === 0) { + const readUpResult = await readPackageUp({ cwd: __dirname }); + const cliVersion = + process.env.NODE_ENV === 'development' + ? 'local' + : (readUpResult?.packageJson.version ?? 'unknown'); + render( React.createElement(App, { config, + cliVersion, }), ); return; } - // If not a TTY, read from stdin // This is for cases where the user pipes input directly into the command if (!process.stdin.isTTY) { diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index 48184cea..d6813387 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -28,9 +28,10 @@ import { Tips } from './components/Tips.js'; interface AppProps { config: Config; + cliVersion: string; } -export const App = ({ config }: AppProps) => { +export const App = ({ config, cliVersion }: AppProps) => { const [history, setHistory] = useState([]); const [startupWarnings, setStartupWarnings] = useState([]); const { streamingState, submitQuery, initError, debugMessage } = @@ -165,6 +166,7 @@ export const App = ({ config }: AppProps) => { queryLength={query.length} debugMode={config.getDebugMode()} debugMessage={debugMessage} + cliVersion={cliVersion} /> diff --git a/packages/cli/src/ui/components/Footer.tsx b/packages/cli/src/ui/components/Footer.tsx index 6722c0fd..1a61bd2f 100644 --- a/packages/cli/src/ui/components/Footer.tsx +++ b/packages/cli/src/ui/components/Footer.tsx @@ -14,6 +14,7 @@ interface FooterProps { queryLength: number; debugMode: boolean; debugMessage: string; + cliVersion: string; } export const Footer: React.FC = ({ @@ -21,6 +22,7 @@ export const Footer: React.FC = ({ queryLength, debugMode, debugMessage, + cliVersion, }) => ( {/* Left Section: Help/DebugMode */} @@ -50,6 +52,7 @@ export const Footer: React.FC = ({ {/* Right Section: Gemini Label */} {config.getModel()} + | CLI Version: {cliVersion} ); -- cgit v1.2.3