summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/config/settingsSchema.ts9
-rw-r--r--packages/cli/src/ui/App.test.tsx52
-rw-r--r--packages/cli/src/ui/App.tsx38
3 files changed, 82 insertions, 17 deletions
diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts
index 4a7a986b..ebea3ad5 100644
--- a/packages/cli/src/config/settingsSchema.ts
+++ b/packages/cli/src/config/settingsSchema.ts
@@ -86,6 +86,15 @@ export const SETTINGS_SCHEMA = {
description: 'Hide the application banner',
showInDialog: true,
},
+ hideFooter: {
+ type: 'boolean',
+ label: 'Hide Footer',
+ category: 'UI',
+ requiresRestart: false,
+ default: false,
+ description: 'Hide the footer from the UI',
+ showInDialog: true,
+ },
showMemoryUsage: {
type: 'boolean',
label: 'Show Memory Usage',
diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx
index 9a712336..6a019ab6 100644
--- a/packages/cli/src/ui/App.test.tsx
+++ b/packages/cli/src/ui/App.test.tsx
@@ -864,6 +864,58 @@ describe('App UI', () => {
expect(vi.mocked(Header)).not.toHaveBeenCalled();
});
+ it('should display Footer component by default', async () => {
+ const { lastFrame, unmount } = renderWithProviders(
+ <App
+ config={mockConfig as unknown as ServerConfig}
+ settings={mockSettings}
+ version={mockVersion}
+ />,
+ );
+ currentUnmount = unmount;
+ await Promise.resolve();
+ // Footer should render - look for target directory which is always shown
+ expect(lastFrame()).toContain('/test/dir');
+ });
+
+ it('should not display Footer component when hideFooter is true', async () => {
+ mockSettings = createMockSettings({
+ user: { hideFooter: true },
+ });
+
+ const { lastFrame, unmount } = renderWithProviders(
+ <App
+ config={mockConfig as unknown as ServerConfig}
+ settings={mockSettings}
+ version={mockVersion}
+ />,
+ );
+ currentUnmount = unmount;
+ await Promise.resolve();
+ // Footer should not render - target directory should not appear
+ expect(lastFrame()).not.toContain('/test/dir');
+ });
+
+ it('should show footer if system says show, but workspace and user settings say hide', async () => {
+ mockSettings = createMockSettings({
+ system: { hideFooter: false },
+ user: { hideFooter: true },
+ workspace: { hideFooter: true },
+ });
+
+ const { lastFrame, unmount } = renderWithProviders(
+ <App
+ config={mockConfig as unknown as ServerConfig}
+ settings={mockSettings}
+ version={mockVersion}
+ />,
+ );
+ currentUnmount = unmount;
+ await Promise.resolve();
+ // Footer should render because system overrides - look for target directory
+ expect(lastFrame()).toContain('/test/dir');
+ });
+
it('should show tips if system says show, but workspace and user settings say hide', async () => {
mockSettings = createMockSettings({
system: { hideTips: false },
diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx
index 1aeb3bd0..d71d8371 100644
--- a/packages/cli/src/ui/App.tsx
+++ b/packages/cli/src/ui/App.tsx
@@ -1249,23 +1249,27 @@ const App = ({ config, settings, startupWarnings = [], version }: AppProps) => {
)}
</Box>
)}
- <Footer
- model={currentModel}
- targetDir={config.getTargetDir()}
- debugMode={config.getDebugMode()}
- branchName={branchName}
- debugMessage={debugMessage}
- corgiMode={corgiMode}
- errorCount={errorCount}
- showErrorDetails={showErrorDetails}
- showMemoryUsage={
- config.getDebugMode() || settings.merged.showMemoryUsage || false
- }
- promptTokenCount={sessionStats.lastPromptTokenCount}
- nightly={nightly}
- vimMode={vimModeEnabled ? vimMode : undefined}
- isTrustedFolder={isTrustedFolderState}
- />
+ {!settings.merged.hideFooter && (
+ <Footer
+ model={currentModel}
+ targetDir={config.getTargetDir()}
+ debugMode={config.getDebugMode()}
+ branchName={branchName}
+ debugMessage={debugMessage}
+ corgiMode={corgiMode}
+ errorCount={errorCount}
+ showErrorDetails={showErrorDetails}
+ showMemoryUsage={
+ config.getDebugMode() ||
+ settings.merged.showMemoryUsage ||
+ false
+ }
+ promptTokenCount={sessionStats.lastPromptTokenCount}
+ nightly={nightly}
+ vimMode={vimModeEnabled ? vimMode : undefined}
+ isTrustedFolder={isTrustedFolderState}
+ />
+ )}
</Box>
</Box>
</StreamingContext.Provider>