From 43370ab0c571ccb5a2fb95b6db51a10002644021 Mon Sep 17 00:00:00 2001 From: DeWitt Clinton Date: Tue, 27 May 2025 08:17:40 -0700 Subject: [PATCH] Introduce optional gitCommitInfo as app-wide metadata. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change adds an optional `gitCommitInfo` string to the app state, which, if set by the GET_COMMIT_INFO environment variable when the application is launched, will be displayed in the /about section.  The `start.sh` and `build_package.sh` scripts set `GET_COMMIT_INFO` to the most recent git commit's short hash if known, appending the string "(local modifications)" if additional changes are detected beyond that point. --- packages/cli/src/gemini.ts | 2 ++ packages/cli/src/ui/App.tsx | 2 ++ packages/cli/src/ui/components/AboutBox.tsx | 14 ++++++++++++++ .../cli/src/ui/components/HistoryItemDisplay.tsx | 1 + .../cli/src/ui/hooks/slashCommandProcessor.ts | 3 +++ packages/cli/src/ui/types.ts | 2 ++ scripts/build_package.sh | 13 +++++++++++++ scripts/start.sh | 15 ++++++++++++++- 8 files changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/gemini.ts b/packages/cli/src/gemini.ts index 2adf4c7d81..de000f65cc 100644 --- a/packages/cli/src/gemini.ts +++ b/packages/cli/src/gemini.ts @@ -68,12 +68,14 @@ async function main() { const readUpResult = await readPackageUp({ cwd: __dirname }); const cliVersion = process.env.CLI_VERSION || readUpResult?.packageJson.version || 'unknown'; + const gitCommitInfo = process.env.GIT_COMMIT_INFO || 'N/A'; render( React.createElement(App, { config, settings, cliVersion, + gitCommitInfo, startupWarnings, }), ); diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index 727450c073..731e56b536 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -50,6 +50,7 @@ interface AppProps { config: Config; settings: LoadedSettings; cliVersion: string; + gitCommitInfo?: string; startupWarnings?: string[]; } @@ -57,6 +58,7 @@ export const App = ({ config, settings, cliVersion, + gitCommitInfo: _gitCommitInfo, startupWarnings = [], }: AppProps) => { const { history, addItem, clearItems } = useHistory(); diff --git a/packages/cli/src/ui/components/AboutBox.tsx b/packages/cli/src/ui/components/AboutBox.tsx index 9ffa1a90ed..2c1b6bda18 100644 --- a/packages/cli/src/ui/components/AboutBox.tsx +++ b/packages/cli/src/ui/components/AboutBox.tsx @@ -13,6 +13,7 @@ interface AboutBoxProps { osVersion: string; sandboxEnv: string; modelVersion: string; + gitCommitInfo?: string; } export const AboutBox: React.FC = ({ @@ -20,6 +21,7 @@ export const AboutBox: React.FC = ({ osVersion, sandboxEnv, modelVersion, + gitCommitInfo, }) => ( = ({ {cliVersion} + {gitCommitInfo && gitCommitInfo !== 'N/A' && ( + + + + Git Commit + + + + {gitCommitInfo} + + + )} diff --git a/packages/cli/src/ui/components/HistoryItemDisplay.tsx b/packages/cli/src/ui/components/HistoryItemDisplay.tsx index 39cc5308c2..2c2c7b4719 100644 --- a/packages/cli/src/ui/components/HistoryItemDisplay.tsx +++ b/packages/cli/src/ui/components/HistoryItemDisplay.tsx @@ -53,6 +53,7 @@ export const HistoryItemDisplay: React.FC = ({ osVersion={item.osVersion} sandboxEnv={item.sandboxEnv} modelVersion={item.modelVersion} + gitCommitInfo={item.gitCommitInfo} // Added this line /> )} {item.type === 'tool_group' && ( diff --git a/packages/cli/src/ui/hooks/slashCommandProcessor.ts b/packages/cli/src/ui/hooks/slashCommandProcessor.ts index 4573303ef7..39b9d9c5db 100644 --- a/packages/cli/src/ui/hooks/slashCommandProcessor.ts +++ b/packages/cli/src/ui/hooks/slashCommandProcessor.ts @@ -56,6 +56,7 @@ export const useSlashCommandProcessor = ( osVersion: message.osVersion, sandboxEnv: message.sandboxEnv, modelVersion: message.modelVersion, + gitCommitInfo: message.gitCommitInfo, // Added this line }; } else { historyItemContent = { @@ -176,6 +177,7 @@ export const useSlashCommandProcessor = ( sandboxEnv = `sandbox-exec (${process.env.SEATBELT_PROFILE || 'unknown'})`; } const modelVersion = config?.getModel() || 'Unknown'; + const gitCommitInfo = process.env.GIT_COMMIT_INFO || 'N/A'; addMessage({ type: MessageType.ABOUT, @@ -184,6 +186,7 @@ export const useSlashCommandProcessor = ( osVersion, sandboxEnv, modelVersion, + gitCommitInfo, }); }, }, diff --git a/packages/cli/src/ui/types.ts b/packages/cli/src/ui/types.ts index 2826bb1ea4..dc1d695db3 100644 --- a/packages/cli/src/ui/types.ts +++ b/packages/cli/src/ui/types.ts @@ -86,6 +86,7 @@ export type HistoryItemAbout = HistoryItemBase & { osVersion: string; sandboxEnv: string; modelVersion: string; + gitCommitInfo?: string; }; export type HistoryItemToolGroup = HistoryItemBase & { @@ -137,6 +138,7 @@ export type Message = osVersion: string; sandboxEnv: string; modelVersion: string; + gitCommitInfo?: string; content?: string; // Optional content, not really used for ABOUT }; diff --git a/scripts/build_package.sh b/scripts/build_package.sh index e64d98ccc3..df3b265f71 100755 --- a/scripts/build_package.sh +++ b/scripts/build_package.sh @@ -20,6 +20,19 @@ if [[ $(pwd) != *"/packages/"* ]]; then exit 1 fi +# Determine Git information +GIT_COMMIT_INFO="N/A" +if command -v git &> /dev/null && git rev-parse --is-inside-work-tree &> /dev/null; then + GIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "") + if [ -n "$GIT_HASH" ]; then + GIT_COMMIT_INFO="$GIT_HASH" + if [ -n "$(git status --porcelain)" ]; then + GIT_COMMIT_INFO="$GIT_COMMIT_INFO (local modifications)" + fi + fi +fi +export GIT_COMMIT_INFO + # clean dist directory # rm -rf dist/* diff --git a/scripts/start.sh b/scripts/start.sh index 2caf540d7b..120c686d0d 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -32,6 +32,19 @@ if [ -n "${DEBUG:-}" ] && ! scripts/sandbox_command.sh -q; then fi node_args+=("./packages/cli" "$@") +# Determine Git information +GIT_COMMIT_INFO="N/A" +if command -v git &> /dev/null && git rev-parse --is-inside-work-tree &> /dev/null; then + GIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "") + if [ -n "$GIT_HASH" ]; then + GIT_COMMIT_INFO="$GIT_HASH" + if [ -n "$(git status --porcelain)" ]; then + GIT_COMMIT_INFO="$GIT_COMMIT_INFO (local modifications)" + fi + fi +fi + # DEV=true to enable React Dev Tools (https://github.com/vadimdemedes/ink?tab=readme-ov-file#using-react-devtools) # CLI_VERSION to display in the app ui footer -CLI_VERSION='development' DEV=true node "${node_args[@]}" +# GIT_COMMIT_INFO to display in the about box +GIT_COMMIT_INFO="${GIT_COMMIT_INFO}" CLI_VERSION='development' DEV=true node "${node_args[@]}"