summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui')
-rw-r--r--packages/cli/src/ui/components/AboutBox.tsx28
-rw-r--r--packages/cli/src/ui/components/HistoryItemDisplay.test.tsx2
-rw-r--r--packages/cli/src/ui/components/HistoryItemDisplay.tsx2
-rw-r--r--packages/cli/src/ui/hooks/slashCommandProcessor.test.ts83
-rw-r--r--packages/cli/src/ui/hooks/slashCommandProcessor.ts7
-rw-r--r--packages/cli/src/ui/types.ts4
6 files changed, 126 insertions, 0 deletions
diff --git a/packages/cli/src/ui/components/AboutBox.tsx b/packages/cli/src/ui/components/AboutBox.tsx
index 0744beff..71afbdd4 100644
--- a/packages/cli/src/ui/components/AboutBox.tsx
+++ b/packages/cli/src/ui/components/AboutBox.tsx
@@ -14,6 +14,8 @@ interface AboutBoxProps {
osVersion: string;
sandboxEnv: string;
modelVersion: string;
+ selectedAuthType: string;
+ gcpProject: string;
}
export const AboutBox: React.FC<AboutBoxProps> = ({
@@ -21,6 +23,8 @@ export const AboutBox: React.FC<AboutBoxProps> = ({
osVersion,
sandboxEnv,
modelVersion,
+ selectedAuthType,
+ gcpProject,
}) => (
<Box
borderStyle="round"
@@ -87,5 +91,29 @@ export const AboutBox: React.FC<AboutBoxProps> = ({
<Text>{osVersion}</Text>
</Box>
</Box>
+ <Box flexDirection="row">
+ <Box width="35%">
+ <Text bold color={Colors.LightBlue}>
+ Auth Method
+ </Text>
+ </Box>
+ <Box>
+ <Text>
+ {selectedAuthType.startsWith('oauth') ? 'OAuth' : selectedAuthType}
+ </Text>
+ </Box>
+ </Box>
+ {gcpProject && (
+ <Box flexDirection="row">
+ <Box width="35%">
+ <Text bold color={Colors.LightBlue}>
+ GCP Project
+ </Text>
+ </Box>
+ <Box>
+ <Text>{gcpProject}</Text>
+ </Box>
+ </Box>
+ )}
</Box>
);
diff --git a/packages/cli/src/ui/components/HistoryItemDisplay.test.tsx b/packages/cli/src/ui/components/HistoryItemDisplay.test.tsx
index 464647b0..5816f7b4 100644
--- a/packages/cli/src/ui/components/HistoryItemDisplay.test.tsx
+++ b/packages/cli/src/ui/components/HistoryItemDisplay.test.tsx
@@ -67,6 +67,8 @@ describe('<HistoryItemDisplay />', () => {
osVersion: 'test-os',
sandboxEnv: 'test-env',
modelVersion: 'test-model',
+ selectedAuthType: 'test-auth',
+ gcpProject: 'test-project',
};
const { lastFrame } = render(
<HistoryItemDisplay {...baseItem} item={item} />,
diff --git a/packages/cli/src/ui/components/HistoryItemDisplay.tsx b/packages/cli/src/ui/components/HistoryItemDisplay.tsx
index dbbb5938..76b6ba6e 100644
--- a/packages/cli/src/ui/components/HistoryItemDisplay.tsx
+++ b/packages/cli/src/ui/components/HistoryItemDisplay.tsx
@@ -65,6 +65,8 @@ export const HistoryItemDisplay: React.FC<HistoryItemDisplayProps> = ({
osVersion={item.osVersion}
sandboxEnv={item.sandboxEnv}
modelVersion={item.modelVersion}
+ selectedAuthType={item.selectedAuthType}
+ gcpProject={item.gcpProject}
/>
)}
{item.type === 'stats' && (
diff --git a/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts b/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts
index 09d2acab..01954670 100644
--- a/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts
+++ b/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts
@@ -336,6 +336,89 @@ describe('useSlashCommandProcessor', () => {
});
});
+ describe('/about command', () => {
+ it('should show the about box with all details including auth and project', async () => {
+ // Arrange
+ mockGetCliVersionFn.mockResolvedValue('test-version');
+ process.env.SANDBOX = 'gemini-sandbox';
+ process.env.GOOGLE_CLOUD_PROJECT = 'test-gcp-project';
+ vi.mocked(mockConfig.getModel).mockReturnValue('test-model-from-config');
+
+ const settings = {
+ merged: {
+ selectedAuthType: 'test-auth-type',
+ contextFileName: 'GEMINI.md',
+ },
+ } as LoadedSettings;
+
+ const { result } = renderHook(() =>
+ useSlashCommandProcessor(
+ mockConfig,
+ settings,
+ [],
+ mockAddItem,
+ mockClearItems,
+ mockLoadHistory,
+ mockRefreshStatic,
+ mockSetShowHelp,
+ mockOnDebugMessage,
+ mockOpenThemeDialog,
+ mockOpenAuthDialog,
+ mockOpenEditorDialog,
+ mockPerformMemoryRefresh,
+ mockCorgiMode,
+ false,
+ mockSetQuittingMessages,
+ ),
+ );
+
+ // Act
+ await act(async () => {
+ await result.current.handleSlashCommand('/about');
+ });
+
+ // Assert
+ expect(mockAddItem).toHaveBeenCalledTimes(2); // user message + about message
+ expect(mockAddItem).toHaveBeenNthCalledWith(
+ 2,
+ expect.objectContaining({
+ type: 'about',
+ cliVersion: 'test-version',
+ osVersion: 'test-platform',
+ sandboxEnv: 'gemini-sandbox',
+ modelVersion: 'test-model-from-config',
+ selectedAuthType: 'test-auth-type',
+ gcpProject: 'test-gcp-project',
+ }),
+ expect.any(Number),
+ );
+ });
+
+ it('should show sandbox-exec profile when applicable', async () => {
+ // Arrange
+ mockGetCliVersionFn.mockResolvedValue('test-version');
+ process.env.SANDBOX = 'sandbox-exec';
+ process.env.SEATBELT_PROFILE = 'test-profile';
+ vi.mocked(mockConfig.getModel).mockReturnValue('test-model-from-config');
+
+ const { result } = getProcessorHook();
+
+ // Act
+ await act(async () => {
+ await result.current.handleSlashCommand('/about');
+ });
+
+ // Assert
+ expect(mockAddItem).toHaveBeenNthCalledWith(
+ 2,
+ expect.objectContaining({
+ sandboxEnv: 'sandbox-exec (test-profile)',
+ }),
+ expect.any(Number),
+ );
+ });
+ });
+
describe('Other commands', () => {
it('/help should open help and return true', async () => {
const { handleSlashCommand } = getProcessor();
diff --git a/packages/cli/src/ui/hooks/slashCommandProcessor.ts b/packages/cli/src/ui/hooks/slashCommandProcessor.ts
index 52e8effc..bd0e38b8 100644
--- a/packages/cli/src/ui/hooks/slashCommandProcessor.ts
+++ b/packages/cli/src/ui/hooks/slashCommandProcessor.ts
@@ -103,6 +103,8 @@ export const useSlashCommandProcessor = (
osVersion: message.osVersion,
sandboxEnv: message.sandboxEnv,
modelVersion: message.modelVersion,
+ selectedAuthType: message.selectedAuthType,
+ gcpProject: message.gcpProject,
};
} else if (message.type === MessageType.STATS) {
historyItemContent = {
@@ -596,6 +598,8 @@ export const useSlashCommandProcessor = (
}
const modelVersion = config?.getModel() || 'Unknown';
const cliVersion = await getCliVersion();
+ const selectedAuthType = settings.merged.selectedAuthType || '';
+ const gcpProject = process.env.GOOGLE_CLOUD_PROJECT || '';
addMessage({
type: MessageType.ABOUT,
timestamp: new Date(),
@@ -603,6 +607,8 @@ export const useSlashCommandProcessor = (
osVersion,
sandboxEnv,
modelVersion,
+ selectedAuthType,
+ gcpProject,
});
},
},
@@ -1007,6 +1013,7 @@ export const useSlashCommandProcessor = (
toggleCorgiMode,
savedChatTags,
config,
+ settings,
showToolDescriptions,
session,
gitService,
diff --git a/packages/cli/src/ui/types.ts b/packages/cli/src/ui/types.ts
index 1bddfc32..66a465ba 100644
--- a/packages/cli/src/ui/types.ts
+++ b/packages/cli/src/ui/types.ts
@@ -94,6 +94,8 @@ export type HistoryItemAbout = HistoryItemBase & {
osVersion: string;
sandboxEnv: string;
modelVersion: string;
+ selectedAuthType: string;
+ gcpProject: string;
};
export type HistoryItemStats = HistoryItemBase & {
@@ -169,6 +171,8 @@ export type Message =
osVersion: string;
sandboxEnv: string;
modelVersion: string;
+ selectedAuthType: string;
+ gcpProject: string;
content?: string; // Optional content, not really used for ABOUT
}
| {