diff options
Diffstat (limited to 'packages/cli/src/ui/components')
| -rw-r--r-- | packages/cli/src/ui/components/Footer.test.tsx | 53 | ||||
| -rw-r--r-- | packages/cli/src/ui/components/Footer.tsx | 8 |
2 files changed, 59 insertions, 2 deletions
diff --git a/packages/cli/src/ui/components/Footer.test.tsx b/packages/cli/src/ui/components/Footer.test.tsx index 5e79eea4..e3673dfe 100644 --- a/packages/cli/src/ui/components/Footer.test.tsx +++ b/packages/cli/src/ui/components/Footer.test.tsx @@ -103,4 +103,57 @@ describe('<Footer />', () => { expect(lastFrame()).toContain(defaultProps.model); expect(lastFrame()).toMatch(/\(\d+% context[\s\S]*left\)/); }); + + describe('sandbox and trust info', () => { + it('should display untrusted when isTrustedFolder is false', () => { + const { lastFrame } = renderWithWidth(120, { + ...defaultProps, + isTrustedFolder: false, + }); + expect(lastFrame()).toContain('untrusted'); + }); + + it('should display custom sandbox info when SANDBOX env is set', () => { + vi.stubEnv('SANDBOX', 'gemini-cli-test-sandbox'); + const { lastFrame } = renderWithWidth(120, { + ...defaultProps, + isTrustedFolder: undefined, + }); + expect(lastFrame()).toContain('test'); + vi.unstubAllEnvs(); + }); + + it('should display macOS Seatbelt info when SANDBOX is sandbox-exec', () => { + vi.stubEnv('SANDBOX', 'sandbox-exec'); + vi.stubEnv('SEATBELT_PROFILE', 'test-profile'); + const { lastFrame } = renderWithWidth(120, { + ...defaultProps, + isTrustedFolder: true, + }); + expect(lastFrame()).toMatch(/macOS Seatbelt.*\(test-profile\)/s); + vi.unstubAllEnvs(); + }); + + it('should display "no sandbox" when SANDBOX is not set and folder is trusted', () => { + // Clear any SANDBOX env var that might be set. + vi.stubEnv('SANDBOX', ''); + const { lastFrame } = renderWithWidth(120, { + ...defaultProps, + isTrustedFolder: true, + }); + expect(lastFrame()).toContain('no sandbox'); + vi.unstubAllEnvs(); + }); + + it('should prioritize untrusted message over sandbox info', () => { + vi.stubEnv('SANDBOX', 'gemini-cli-test-sandbox'); + const { lastFrame } = renderWithWidth(120, { + ...defaultProps, + isTrustedFolder: false, + }); + expect(lastFrame()).toContain('untrusted'); + expect(lastFrame()).not.toMatch(/test-sandbox/s); + vi.unstubAllEnvs(); + }); + }); }); diff --git a/packages/cli/src/ui/components/Footer.tsx b/packages/cli/src/ui/components/Footer.tsx index aaf6c176..09b94ec1 100644 --- a/packages/cli/src/ui/components/Footer.tsx +++ b/packages/cli/src/ui/components/Footer.tsx @@ -32,6 +32,7 @@ interface FooterProps { promptTokenCount: number; nightly: boolean; vimMode?: string; + isTrustedFolder?: boolean; } export const Footer: React.FC<FooterProps> = ({ @@ -47,6 +48,7 @@ export const Footer: React.FC<FooterProps> = ({ promptTokenCount, nightly, vimMode, + isTrustedFolder, }) => { const { columns: terminalWidth } = useTerminalSize(); @@ -90,7 +92,7 @@ export const Footer: React.FC<FooterProps> = ({ )} </Box> - {/* Middle Section: Centered Sandbox Info */} + {/* Middle Section: Centered Trust/Sandbox Info */} <Box flexGrow={isNarrow ? 0 : 1} alignItems="center" @@ -99,7 +101,9 @@ export const Footer: React.FC<FooterProps> = ({ paddingX={isNarrow ? 0 : 1} paddingTop={isNarrow ? 1 : 0} > - {process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec' ? ( + {isTrustedFolder === false ? ( + <Text color={theme.status.warning}>untrusted</Text> + ) : process.env.SANDBOX && process.env.SANDBOX !== 'sandbox-exec' ? ( <Text color="green"> {process.env.SANDBOX.replace(/^gemini-(?:cli-)?/, '')} </Text> |
