Rename directory command to workspace

This commit is contained in:
Dmitry Lyalin
2026-03-10 09:46:48 -04:00
parent a6b95897ad
commit 8b5102e55e
21 changed files with 110 additions and 110 deletions

View File

@@ -71,7 +71,7 @@ describe('mcp add command', () => {
});
});
it('should add a stdio server to project settings', async () => {
it('should add a stdio server to workspace settings', async () => {
await parser.parseAsync(
'add -e FOO=bar my-server /path/to/server arg1 arg2',
);
@@ -121,7 +121,7 @@ describe('mcp add command', () => {
});
});
it('should add an http server to project settings', async () => {
it('should add an http server to workspace settings', async () => {
await parser.parseAsync(
'add --transport http -H "Authorization: Bearer your-token" http-server https://example.com/mcp',
);
@@ -219,12 +219,12 @@ describe('mcp add command', () => {
});
};
describe('when in a project directory', () => {
describe('when in a workspace directory', () => {
beforeEach(() => {
setupMocks('/path/to/project', '/path/to/project');
});
it('should use project scope by default', async () => {
it('should use workspace scope by default', async () => {
await parser.parseAsync(`add ${serverName} ${command}`);
expect(mockSetValue).toHaveBeenCalledWith(
SettingScope.Workspace,
@@ -233,7 +233,7 @@ describe('mcp add command', () => {
);
});
it('should use project scope when --scope=project is used', async () => {
it('should support --scope=project as a compatibility alias', async () => {
await parser.parseAsync(`add --scope project ${serverName} ${command}`);
expect(mockSetValue).toHaveBeenCalledWith(
SettingScope.Workspace,
@@ -252,12 +252,12 @@ describe('mcp add command', () => {
});
});
describe('when in a subdirectory of a project', () => {
describe('when in a subdirectory of a workspace', () => {
beforeEach(() => {
setupMocks('/path/to/project/subdir', '/path/to/project');
});
it('should use project scope by default', async () => {
it('should use workspace scope by default', async () => {
await parser.parseAsync(`add ${serverName} ${command}`);
expect(mockSetValue).toHaveBeenCalledWith(
SettingScope.Workspace,
@@ -290,7 +290,7 @@ describe('mcp add command', () => {
expect(mockSetValue).not.toHaveBeenCalled();
});
it('should show an error when --scope=project is used explicitly', async () => {
it('should show an error when --scope=project is used as a compatibility alias', async () => {
const mockProcessExit = vi
.spyOn(process, 'exit')
.mockImplementation((() => {
@@ -319,12 +319,12 @@ describe('mcp add command', () => {
});
});
describe('when in a subdirectory of home (not a project)', () => {
describe('when in a subdirectory of home (not a workspace)', () => {
beforeEach(() => {
setupMocks('/home/user/some/dir', '/home/user/some/dir');
});
it('should use project scope by default', async () => {
it('should use workspace scope by default', async () => {
await parser.parseAsync(`add ${serverName} ${command}`);
expect(mockSetValue).toHaveBeenCalledWith(
SettingScope.Workspace,
@@ -347,12 +347,12 @@ describe('mcp add command', () => {
});
});
describe('when outside of home (not a project)', () => {
describe('when outside of home (not a workspace)', () => {
beforeEach(() => {
setupMocks('/tmp/foo', '/tmp/foo');
});
it('should use project scope by default', async () => {
it('should use workspace scope by default', async () => {
await parser.parseAsync(`add ${serverName} ${command}`);
expect(mockSetValue).toHaveBeenCalledWith(
SettingScope.Workspace,
@@ -386,7 +386,7 @@ describe('mcp add command', () => {
});
});
it('should update the existing server in the project scope', async () => {
it('should update the existing server in the workspace scope', async () => {
await parser.parseAsync(
`add ${serverName} ${updatedCommand} ${updatedArgs.join(' ')}`,
);

View File

@@ -38,10 +38,12 @@ async function addMcpServer(
excludeTools,
} = options;
const displayScope = scope === 'user' ? 'user' : 'workspace';
const settings = loadSettings(process.cwd());
const inHome = settings.workspace.path === settings.user.path;
if (scope === 'project' && inHome) {
if (displayScope === 'workspace' && inHome) {
debugLogger.error(
'Error: Please use --scope user to edit settings in the home directory.',
);
@@ -120,7 +122,7 @@ async function addMcpServer(
const isExistingServer = !!mcpServers[name];
if (isExistingServer) {
debugLogger.log(
`MCP server "${name}" is already configured within ${scope} settings.`,
`MCP server "${name}" is already configured within ${displayScope} settings.`,
);
}
@@ -129,10 +131,12 @@ async function addMcpServer(
settings.setValue(settingsScope, 'mcpServers', mcpServers);
if (isExistingServer) {
debugLogger.log(`MCP server "${name}" updated in ${scope} settings.`);
debugLogger.log(
`MCP server "${name}" updated in ${displayScope} settings.`,
);
} else {
debugLogger.log(
`MCP server "${name}" added to ${scope} settings. (${transport})`,
`MCP server "${name}" added to ${displayScope} settings. (${transport})`,
);
}
}
@@ -159,10 +163,10 @@ export const addCommand: CommandModule = {
})
.option('scope', {
alias: 's',
describe: 'Configuration scope (user or project)',
describe: 'Configuration scope (user or workspace)',
type: 'string',
default: 'project',
choices: ['user', 'project'],
default: 'workspace',
choices: ['user', 'workspace', 'project'],
})
.option('transport', {
alias: ['t', 'type'],

View File

@@ -81,7 +81,7 @@ describe('mcp remove command', () => {
parser = yargsInstance;
});
it('should remove a server from project settings', async () => {
it('should remove a server from workspace settings', async () => {
await parser.parseAsync('remove test-server');
expect(mockSetValue).toHaveBeenCalledWith(
@@ -99,7 +99,7 @@ describe('mcp remove command', () => {
expect(mockSetValue).not.toHaveBeenCalled();
expect(debugLogSpy).toHaveBeenCalledWith(
'Server "non-existent-server" not found in project settings.',
'Server "non-existent-server" not found in workspace settings.',
);
debugLogSpy.mockRestore();
});
@@ -159,7 +159,7 @@ describe('mcp remove command', () => {
expect(updatedContent).not.toContain('"server-to-remove"');
expect(debugLogSpy).toHaveBeenCalledWith(
'Server "server-to-remove" removed from project settings.',
'Server "server-to-remove" removed from workspace settings.',
);
debugLogSpy.mockRestore();

View File

@@ -17,6 +17,7 @@ async function removeMcpServer(
},
) {
const { scope } = options;
const displayScope = scope === 'user' ? 'user' : 'workspace';
const settingsScope =
scope === 'user' ? SettingScope.User : SettingScope.Workspace;
const settings = loadSettings();
@@ -25,7 +26,7 @@ async function removeMcpServer(
const mcpServers = existingSettings.mcpServers || {};
if (!mcpServers[name]) {
debugLogger.log(`Server "${name}" not found in ${scope} settings.`);
debugLogger.log(`Server "${name}" not found in ${displayScope} settings.`);
return;
}
@@ -33,7 +34,7 @@ async function removeMcpServer(
settings.setValue(settingsScope, 'mcpServers', mcpServers);
debugLogger.log(`Server "${name}" removed from ${scope} settings.`);
debugLogger.log(`Server "${name}" removed from ${displayScope} settings.`);
}
export const removeCommand: CommandModule = {
@@ -49,10 +50,10 @@ export const removeCommand: CommandModule = {
})
.option('scope', {
alias: 's',
describe: 'Configuration scope (user or project)',
describe: 'Configuration scope (user or workspace)',
type: 'string',
default: 'project',
choices: ['user', 'project'],
default: 'workspace',
choices: ['user', 'workspace', 'project'],
}),
handler: async (argv) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion

View File

@@ -9,8 +9,8 @@ import type { MergedSettings } from './settings.js';
export const ALL_ITEMS = [
{
id: 'workspace',
header: 'workspace (/directory)',
description: 'Current working directory',
header: 'workspace',
description: 'Current workspace path',
},
{
id: 'git-branch',

View File

@@ -588,11 +588,11 @@ const SETTINGS_SCHEMA = {
},
hideCWD: {
type: 'boolean',
label: 'Hide CWD',
label: 'Hide Workspace Path',
category: 'UI',
requiresRestart: false,
default: false,
description: 'Hide the current working directory in the footer.',
description: 'Hide the workspace path in the footer.',
showInDialog: true,
},
hideSandboxStatus: {

View File

@@ -29,7 +29,7 @@ import { compressCommand } from '../ui/commands/compressCommand.js';
import { copyCommand } from '../ui/commands/copyCommand.js';
import { corgiCommand } from '../ui/commands/corgiCommand.js';
import { docsCommand } from '../ui/commands/docsCommand.js';
import { directoryCommand } from '../ui/commands/directoryCommand.js';
import { workspaceCommand } from '../ui/commands/workspaceCommand.js';
import { editorCommand } from '../ui/commands/editorCommand.js';
import { extensionsCommand } from '../ui/commands/extensionsCommand.js';
import { footerCommand } from '../ui/commands/footerCommand.js';
@@ -131,7 +131,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
copyCommand,
corgiCommand,
docsCommand,
directoryCommand,
workspaceCommand,
editorCommand,
...(this.config?.getExtensionsEnabled() === false
? [

View File

@@ -6,7 +6,7 @@
import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
import type { Mock } from 'vitest';
import { directoryCommand } from './directoryCommand.js';
import { workspaceCommand } from './workspaceCommand.js';
import {
expandHomeDir,
getDirectorySuggestions,
@@ -38,14 +38,14 @@ vi.mock('../utils/directoryUtils.js', async (importOriginal) => {
};
});
describe('directoryCommand', () => {
describe('workspaceCommand', () => {
let mockContext: CommandContext;
let mockConfig: Config;
let mockWorkspaceContext: WorkspaceContext;
const addCommand = directoryCommand.subCommands?.find(
const addCommand = workspaceCommand.subCommands?.find(
(c) => c.name === 'add',
);
const showCommand = directoryCommand.subCommands?.find(
const showCommand = workspaceCommand.subCommands?.find(
(c) => c.name === 'show',
);
@@ -126,7 +126,7 @@ describe('directoryCommand', () => {
type: 'message',
messageType: 'error',
content:
'The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.',
'The /workspace add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.',
});
});
@@ -343,7 +343,6 @@ describe('directoryCommand', () => {
beforeEach(() => {
vi.spyOn(trustedFolders, 'isFolderTrustEnabled').mockReturnValue(true);
// isWorkspaceTrusted is no longer checked, so we don't need to mock it returning true
mockIsPathTrusted = vi.fn();
const mockLoadedFolders = {
isPathTrusted: mockIsPathTrusted,
@@ -375,7 +374,7 @@ describe('directoryCommand', () => {
it('should return a custom dialog for an explicitly untrusted directory (upgrade flow)', async () => {
if (!addCommand?.action) throw new Error('No action');
mockIsPathTrusted.mockReturnValue(false); // DO_NOT_TRUST
mockIsPathTrusted.mockReturnValue(false);
const newPath = path.resolve('/home/user/untrusted-project');
const result = await addCommand.action(mockContext, newPath);
@@ -384,7 +383,7 @@ describe('directoryCommand', () => {
expect.objectContaining({
type: 'custom_dialog',
component: expect.objectContaining({
type: expect.any(Function), // React component for MultiFolderTrustDialog
type: expect.any(Function),
}),
}),
);
@@ -407,7 +406,7 @@ describe('directoryCommand', () => {
expect.objectContaining({
type: 'custom_dialog',
component: expect.objectContaining({
type: expect.any(Function), // React component for MultiFolderTrustDialog
type: expect.any(Function),
}),
}),
);
@@ -421,7 +420,6 @@ describe('directoryCommand', () => {
it('should prompt for directory even if workspace is untrusted', async () => {
if (!addCommand?.action) throw new Error('No action');
// Even if workspace is untrusted, we should still check directory trust
vi.spyOn(trustedFolders, 'isWorkspaceTrusted').mockReturnValue({
isTrusted: false,
source: 'file',

View File

@@ -77,9 +77,9 @@ async function finishAddingDirectories(
}
}
export const directoryCommand: SlashCommand = {
name: 'directory',
altNames: ['dir'],
export const workspaceCommand: SlashCommand = {
name: 'workspace',
altNames: ['directory', 'dir'],
description: 'Manage workspace directories',
kind: CommandKind.BUILT_IN,
subCommands: [
@@ -156,7 +156,7 @@ export const directoryCommand: SlashCommand = {
type: 'message' as const,
messageType: 'error' as const,
content:
'The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.',
'The /workspace add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.',
};
}

View File

@@ -755,7 +755,7 @@ describe('<Footer />', () => {
const output = lastFrame();
const modelIdx = output.indexOf('/model');
const cwdIdx = output.indexOf('workspace (/directory)');
const cwdIdx = output.indexOf('workspace');
expect(modelIdx).toBeLessThan(cwdIdx);
unmount();
});
@@ -786,7 +786,7 @@ describe('<Footer />', () => {
const output = lastFrame();
expect(output).toBeDefined();
// Headers should be present
expect(output).toContain('workspace (/directory)');
expect(output).toContain('workspace');
expect(output).toContain('branch');
expect(output).toContain('sandbox');
expect(output).toContain('/model');
@@ -842,7 +842,7 @@ describe('<Footer />', () => {
const output = lastFrame();
expect(output).toBeDefined();
expect(output).not.toContain('branch');
expect(output).toContain('workspace (/directory)');
expect(output).toContain('workspace');
expect(output).toContain('/model');
unmount();
});

View File

@@ -226,7 +226,7 @@ describe('<FooterConfigDialog />', () => {
await waitUntilReady();
// By default labels are on
expect(lastFrame()).toContain('workspace (/directory)');
expect(lastFrame()).toContain('workspace');
expect(lastFrame()).toContain('sandbox');
expect(lastFrame()).toContain('/model');
@@ -248,12 +248,6 @@ describe('<FooterConfigDialog />', () => {
await waitFor(() => {
expect(lastFrame()).toMatch(/> \[ \] Show footer labels/);
// The headers should no longer be in the preview
expect(lastFrame()).not.toContain('workspace (/directory)');
expect(lastFrame()).not.toContain('/model');
// We can't strictly search for "sandbox" because the menu item also says "sandbox".
// Let's assert that the spacer dots are now present in the preview instead.
const previewLine =
lastFrame()
.split('\n')
@@ -262,6 +256,9 @@ describe('<FooterConfigDialog />', () => {
lastFrame().split('\n')[
lastFrame().split('\n').indexOf(previewLine) + 1
] || '';
// The preview should render values only when labels are hidden.
expect(nextLine).not.toContain('/model');
expect(nextLine).toContain('·');
expect(nextLine).toContain('~/project/path');
expect(nextLine).toContain('docker');

View File

@@ -1,25 +1,25 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`<Footer /> > displays "Limit reached" message when remaining is 0 1`] = `
" workspace (/directory) sandbox /model /stats
" workspace sandbox /model /stats
~/project/foo/bar/and/some/more/directories/to/make/it/long no sandbox gemini-pro limit reached
"
`;
exports[`<Footer /> > displays the usage indicator when usage is low 1`] = `
" workspace (/directory) sandbox /model /stats
" workspace sandbox /model /stats
~/project/foo/bar/and/some/more/directories/to/make/it/long no sandbox gemini-pro 85%
"
`;
exports[`<Footer /> > footer configuration filtering (golden snapshots) > renders complete footer in narrow terminal (baseline narrow) > complete-footer-narrow 1`] = `
" workspace (/directory) sandbox /model context
" workspace sandbox /model context
...me/more/directories/to/make/it/long no sandbox gemini-pro 14%
"
`;
exports[`<Footer /> > footer configuration filtering (golden snapshots) > renders complete footer with all sections visible (baseline) > complete-footer-wide 1`] = `
" workspace (/directory) sandbox /model context
" workspace sandbox /model context
~/project/foo/bar/and/some/more/directories/to/make/it/long no sandbox gemini-pro 14% used
"
`;
@@ -33,13 +33,13 @@ exports[`<Footer /> > footer configuration filtering (golden snapshots) > render
exports[`<Footer /> > footer configuration filtering (golden snapshots) > renders footer with all optional sections hidden (minimal footer) > footer-minimal 1`] = `""`;
exports[`<Footer /> > footer configuration filtering (golden snapshots) > renders footer with only model info hidden (partial filtering) > footer-no-model 1`] = `
" workspace (/directory) sandbox
" workspace sandbox
~/project/foo/bar/and/some/more/directories/to/make/it/long no sandbox
"
`;
exports[`<Footer /> > hides the usage indicator when usage is not near limit 1`] = `
" workspace (/directory) sandbox /model /stats
" workspace sandbox /model /stats
~/project/foo/bar/and/some/more/directories/to/make/it/long no sandbox gemini-pro 15%
"
`;

View File

@@ -22,7 +22,7 @@
<text x="72" y="104" fill="#ffffff" textLength="90" lengthAdjust="spacingAndGlyphs"> workspace</text>
<text x="891" y="104" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="121" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="45" y="121" fill="#afafaf" textLength="234" lengthAdjust="spacingAndGlyphs"> Current working directory</text>
<text x="45" y="121" fill="#afafaf" textLength="207" lengthAdjust="spacingAndGlyphs"> Current workspace path</text>
<text x="891" y="121" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="138" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="45" y="138" fill="#d7ffd7" textLength="27" lengthAdjust="spacingAndGlyphs">[✓]</text>
@@ -124,11 +124,11 @@
<text x="891" y="580" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="597" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="27" y="597" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="45" y="597" fill="#afafaf" textLength="198" lengthAdjust="spacingAndGlyphs">workspace (/directory)</text>
<text x="297" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">branch</text>
<text x="405" y="597" fill="#afafaf" textLength="63" lengthAdjust="spacingAndGlyphs">sandbox</text>
<text x="513" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">/model</text>
<text x="693" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">/stats</text>
<text x="45" y="597" fill="#afafaf" textLength="81" lengthAdjust="spacingAndGlyphs">workspace</text>
<text x="234" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">branch</text>
<text x="360" y="597" fill="#afafaf" textLength="63" lengthAdjust="spacingAndGlyphs">sandbox</text>
<text x="486" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">/model</text>
<text x="684" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">/stats</text>
<rect x="801" y="595" width="36" height="17" fill="#001a00" />
<text x="801" y="597" fill="#ffffff" textLength="36" lengthAdjust="spacingAndGlyphs">diff</text>
<rect x="837" y="595" width="18" height="17" fill="#001a00" />
@@ -137,10 +137,10 @@
<text x="0" y="614" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="27" y="614" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="45" y="614" fill="#ffffff" textLength="126" lengthAdjust="spacingAndGlyphs">~/project/path</text>
<text x="297" y="614" fill="#ffffff" textLength="36" lengthAdjust="spacingAndGlyphs">main</text>
<text x="405" y="614" fill="#00cd00" textLength="54" lengthAdjust="spacingAndGlyphs">docker</text>
<text x="513" y="614" fill="#ffffff" textLength="126" lengthAdjust="spacingAndGlyphs">gemini-2.5-pro</text>
<text x="693" y="614" fill="#ffffff" textLength="27" lengthAdjust="spacingAndGlyphs">97%</text>
<text x="234" y="614" fill="#ffffff" textLength="36" lengthAdjust="spacingAndGlyphs">main</text>
<text x="360" y="614" fill="#00cd00" textLength="54" lengthAdjust="spacingAndGlyphs">docker</text>
<text x="486" y="614" fill="#ffffff" textLength="126" lengthAdjust="spacingAndGlyphs">gemini-2.5-pro</text>
<text x="684" y="614" fill="#ffffff" textLength="27" lengthAdjust="spacingAndGlyphs">97%</text>
<rect x="801" y="612" width="27" height="17" fill="#001a00" />
<text x="801" y="614" fill="#d7ffd7" textLength="27" lengthAdjust="spacingAndGlyphs">+12</text>
<rect x="828" y="612" width="9" height="17" fill="#001a00" />

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -29,9 +29,9 @@
<text x="891" y="104" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="121" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<rect x="27" y="119" width="18" height="17" fill="#001a00" />
<rect x="45" y="119" width="234" height="17" fill="#001a00" />
<text x="45" y="121" fill="#afafaf" textLength="234" lengthAdjust="spacingAndGlyphs"> Current working directory</text>
<rect x="279" y="119" width="594" height="17" fill="#001a00" />
<rect x="45" y="119" width="207" height="17" fill="#001a00" />
<text x="45" y="121" fill="#afafaf" textLength="207" lengthAdjust="spacingAndGlyphs"> Current workspace path</text>
<rect x="252" y="119" width="621" height="17" fill="#001a00" />
<text x="891" y="121" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="138" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="45" y="138" fill="#d7ffd7" textLength="27" lengthAdjust="spacingAndGlyphs">[✓]</text>
@@ -124,11 +124,12 @@
<text x="891" y="580" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="597" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="27" y="597" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<rect x="45" y="595" width="198" height="17" fill="#001a00" />
<text x="45" y="597" fill="#ffffff" textLength="198" lengthAdjust="spacingAndGlyphs">workspace (/directory)</text>
<text x="324" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">branch</text>
<text x="459" y="597" fill="#afafaf" textLength="63" lengthAdjust="spacingAndGlyphs">sandbox</text>
<text x="594" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">/model</text>
<rect x="45" y="595" width="81" height="17" fill="#001a00" />
<text x="45" y="597" fill="#ffffff" textLength="81" lengthAdjust="spacingAndGlyphs">workspace</text>
<rect x="126" y="595" width="45" height="17" fill="#001a00" />
<text x="270" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">branch</text>
<text x="423" y="597" fill="#afafaf" textLength="63" lengthAdjust="spacingAndGlyphs">sandbox</text>
<text x="576" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">/model</text>
<text x="801" y="597" fill="#afafaf" textLength="54" lengthAdjust="spacingAndGlyphs">/stats</text>
<text x="864" y="597" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="891" y="597" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
@@ -136,10 +137,9 @@
<text x="27" y="614" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<rect x="45" y="612" width="126" height="17" fill="#001a00" />
<text x="45" y="614" fill="#ffffff" textLength="126" lengthAdjust="spacingAndGlyphs">~/project/path</text>
<rect x="171" y="612" width="72" height="17" fill="#001a00" />
<text x="324" y="614" fill="#ffffff" textLength="36" lengthAdjust="spacingAndGlyphs">main</text>
<text x="459" y="614" fill="#00cd00" textLength="54" lengthAdjust="spacingAndGlyphs">docker</text>
<text x="594" y="614" fill="#ffffff" textLength="126" lengthAdjust="spacingAndGlyphs">gemini-2.5-pro</text>
<text x="270" y="614" fill="#ffffff" textLength="36" lengthAdjust="spacingAndGlyphs">main</text>
<text x="423" y="614" fill="#00cd00" textLength="54" lengthAdjust="spacingAndGlyphs">docker</text>
<text x="576" y="614" fill="#ffffff" textLength="126" lengthAdjust="spacingAndGlyphs">gemini-2.5-pro</text>
<text x="801" y="614" fill="#ffffff" textLength="27" lengthAdjust="spacingAndGlyphs">97%</text>
<text x="864" y="614" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="891" y="614" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -22,7 +22,7 @@
<text x="72" y="104" fill="#ffffff" textLength="90" lengthAdjust="spacingAndGlyphs"> workspace</text>
<text x="891" y="104" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="121" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="45" y="121" fill="#afafaf" textLength="234" lengthAdjust="spacingAndGlyphs"> Current working directory</text>
<text x="45" y="121" fill="#afafaf" textLength="207" lengthAdjust="spacingAndGlyphs"> Current workspace path</text>
<text x="891" y="121" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="0" y="138" fill="#333333" textLength="9" lengthAdjust="spacingAndGlyphs"></text>
<text x="45" y="138" fill="#d7ffd7" textLength="27" lengthAdjust="spacingAndGlyphs">[✓]</text>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -8,7 +8,7 @@ exports[`<FooterConfigDialog /> > highlights the active item in the preview 1`]
│ Select which items to display in the footer. │
│ │
│ [✓] workspace │
│ Current working directory
│ Current workspace path
│ [✓] git-branch │
│ Current git branch name (not shown when unavailable) │
│ [✓] sandbox │
@@ -36,8 +36,8 @@ exports[`<FooterConfigDialog /> > highlights the active item in the preview 1`]
│ │
│ ┌────────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Preview: │ │
│ │ workspace (/directory) branch sandbox /model /stats diff │ │
│ │ ~/project/path main docker gemini-2.5-pro 97% +12 -4 │ │
│ │ workspace branch sandbox /model /stats diff │ │
│ │ ~/project/path main docker gemini-2.5-pro 97% +12 -4 │ │
│ └────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
@@ -51,7 +51,7 @@ exports[`<FooterConfigDialog /> > renders correctly with default settings 1`] =
│ Select which items to display in the footer. │
│ │
│ > [✓] workspace │
│ Current working directory
│ Current workspace path
│ [✓] git-branch │
│ Current git branch name (not shown when unavailable) │
│ [✓] sandbox │
@@ -79,8 +79,8 @@ exports[`<FooterConfigDialog /> > renders correctly with default settings 1`] =
│ │
│ ┌────────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Preview: │ │
│ │ workspace (/directory) branch sandbox /model /stats │ │
│ │ ~/project/path main docker gemini-2.5-pro 97% │ │
│ │ workspace branch sandbox /model /stats │ │
│ │ ~/project/path main docker gemini-2.5-pro 97% │ │
│ └────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -95,7 +95,7 @@ exports[`<FooterConfigDialog /> > renders correctly with default settings 2`] =
│ Select which items to display in the footer. │
│ │
│ > [✓] workspace │
│ Current working directory
│ Current workspace path
│ [✓] git-branch │
│ Current git branch name (not shown when unavailable) │
│ [✓] sandbox │
@@ -123,8 +123,8 @@ exports[`<FooterConfigDialog /> > renders correctly with default settings 2`] =
│ │
│ ┌────────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Preview: │ │
│ │ workspace (/directory) branch sandbox /model /stats │ │
│ │ ~/project/path main docker gemini-2.5-pro 97% │ │
│ │ workspace branch sandbox /model /stats │ │
│ │ ~/project/path main docker gemini-2.5-pro 97% │ │
│ └────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
@@ -138,7 +138,7 @@ exports[`<FooterConfigDialog /> > updates the preview when Show footer labels is
│ Select which items to display in the footer. │
│ │
│ [✓] workspace │
│ Current working directory
│ Current workspace path
│ [✓] git-branch │
│ Current git branch name (not shown when unavailable) │
│ [✓] sandbox │

View File

@@ -131,9 +131,9 @@ export const INFORMATIVE_TIPS = [
'Save tokens by summarizing the context with /compress…',
'Copy the last response to your clipboard with /copy…',
'Open the full documentation in your browser with /docs…',
'Add directories to your workspace with /directory add <path>…',
'Show all directories in your workspace with /directory show…',
'Use /dir as a shortcut for /directory…',
'Add directories to your workspace with /workspace add <path>…',
'Show all directories in your workspace with /workspace show…',
'Use /dir or /directory as a shortcut for /workspace…',
'Set your preferred external editor with /editor…',
'List all active extensions with /extensions list…',
'Update all or specific extensions with /extensions update…',