diff options
Diffstat (limited to 'packages/cli/src')
| -rw-r--r-- | packages/cli/src/config/config.test.ts | 10 | ||||
| -rw-r--r-- | packages/cli/src/config/config.ts | 9 | ||||
| -rw-r--r-- | packages/cli/src/ui/commands/ideCommand.test.ts | 10 | ||||
| -rw-r--r-- | packages/cli/src/ui/commands/ideCommand.ts | 90 |
4 files changed, 69 insertions, 50 deletions
diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index f5d0ddf8..64ecdbb8 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -1007,16 +1007,6 @@ describe('loadCliConfig ideModeFeature', () => { const config = await loadCliConfig(settings, [], 'test-session', argv); expect(config.getIdeModeFeature()).toBe(false); }); - - it('should be false when settings.ideModeFeature is true, but SANDBOX is set', async () => { - process.argv = ['node', 'script.js']; - const argv = await parseArguments(); - process.env.TERM_PROGRAM = 'vscode'; - process.env.SANDBOX = 'true'; - const settings: Settings = { ideModeFeature: true }; - const config = await loadCliConfig(settings, [], 'test-session', argv); - expect(config.getIdeModeFeature()).toBe(false); - }); }); vi.mock('fs', async () => { diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index d3d37c6a..beba9602 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -22,7 +22,6 @@ import { FileDiscoveryService, TelemetryTarget, FileFilteringOptions, - IdeClient, } from '@google/gemini-cli-core'; import { Settings } from './settings.js'; @@ -296,13 +295,10 @@ export async function loadCliConfig( ) || false; const memoryImportFormat = settings.memoryImportFormat || 'tree'; - const ideMode = settings.ideMode ?? false; + const ideMode = settings.ideMode ?? false; const ideModeFeature = - (argv.ideModeFeature ?? settings.ideModeFeature ?? false) && - !process.env.SANDBOX; - - const ideClient = IdeClient.getInstance(ideMode && ideModeFeature); + argv.ideModeFeature ?? settings.ideModeFeature ?? false; const allExtensions = annotateActiveExtensions( extensions, @@ -471,7 +467,6 @@ export async function loadCliConfig( summarizeToolOutput: settings.summarizeToolOutput, ideMode, ideModeFeature, - ideClient, }); } diff --git a/packages/cli/src/ui/commands/ideCommand.test.ts b/packages/cli/src/ui/commands/ideCommand.test.ts index 4f2b7af2..9898b1e8 100644 --- a/packages/cli/src/ui/commands/ideCommand.test.ts +++ b/packages/cli/src/ui/commands/ideCommand.test.ts @@ -42,9 +42,15 @@ describe('ideCommand', () => { mockConfig = { getIdeModeFeature: vi.fn(), getIdeMode: vi.fn(), - getIdeClient: vi.fn(), + getIdeClient: vi.fn(() => ({ + reconnect: vi.fn(), + disconnect: vi.fn(), + getCurrentIde: vi.fn(), + getDetectedIdeDisplayName: vi.fn(), + getConnectionStatus: vi.fn(), + })), + setIdeModeAndSyncConnection: vi.fn(), setIdeMode: vi.fn(), - setIdeClientDisconnected: vi.fn(), } as unknown as Config; platformSpy = vi.spyOn(process, 'platform', 'get'); diff --git a/packages/cli/src/ui/commands/ideCommand.ts b/packages/cli/src/ui/commands/ideCommand.ts index c6d65264..fe9f764a 100644 --- a/packages/cli/src/ui/commands/ideCommand.ts +++ b/packages/cli/src/ui/commands/ideCommand.ts @@ -10,6 +10,7 @@ import { IDEConnectionStatus, getIdeDisplayName, getIdeInstaller, + IdeClient, } from '@google/gemini-cli-core'; import { CommandContext, @@ -19,6 +20,35 @@ import { } from './types.js'; import { SettingScope } from '../../config/settings.js'; +function getIdeStatusMessage(ideClient: IdeClient): { + messageType: 'info' | 'error'; + content: string; +} { + const connection = ideClient.getConnectionStatus(); + switch (connection.status) { + case IDEConnectionStatus.Connected: + return { + messageType: 'info', + content: `🟢 Connected to ${ideClient.getDetectedIdeDisplayName()}`, + }; + case IDEConnectionStatus.Connecting: + return { + messageType: 'info', + content: `🟡 Connecting...`, + }; + default: { + let content = `🔴 Disconnected`; + if (connection?.details) { + content += `: ${connection.details}`; + } + return { + messageType: 'error', + content, + }; + } + } +} + export const ideCommand = (config: Config | null): SlashCommand | null => { if (!config || !config.getIdeModeFeature()) { return null; @@ -54,33 +84,13 @@ export const ideCommand = (config: Config | null): SlashCommand | null => { name: 'status', description: 'check status of IDE integration', kind: CommandKind.BUILT_IN, - action: (_context: CommandContext): SlashCommandActionReturn => { - const connection = ideClient.getConnectionStatus(); - switch (connection.status) { - case IDEConnectionStatus.Connected: - return { - type: 'message', - messageType: 'info', - content: `🟢 Connected to ${ideClient.getDetectedIdeDisplayName()}`, - } as const; - case IDEConnectionStatus.Connecting: - return { - type: 'message', - messageType: 'info', - content: `🟡 Connecting...`, - } as const; - default: { - let content = `🔴 Disconnected`; - if (connection?.details) { - content += `: ${connection.details}`; - } - return { - type: 'message', - messageType: 'error', - content, - } as const; - } - } + action: (): SlashCommandActionReturn => { + const { messageType, content } = getIdeStatusMessage(ideClient); + return { + type: 'message', + messageType, + content, + } as const; }, }; @@ -110,6 +120,10 @@ export const ideCommand = (config: Config | null): SlashCommand | null => { ); const result = await installer.install(); + if (result.success) { + config.setIdeMode(true); + context.services.settings.setValue(SettingScope.User, 'ideMode', true); + } context.ui.addItem( { type: result.success ? 'info' : 'error', @@ -126,8 +140,15 @@ export const ideCommand = (config: Config | null): SlashCommand | null => { kind: CommandKind.BUILT_IN, action: async (context: CommandContext) => { context.services.settings.setValue(SettingScope.User, 'ideMode', true); - config.setIdeMode(true); - config.setIdeClientConnected(); + await config.setIdeModeAndSyncConnection(true); + const { messageType, content } = getIdeStatusMessage(ideClient); + context.ui.addItem( + { + type: messageType, + text: content, + }, + Date.now(), + ); }, }; @@ -137,8 +158,15 @@ export const ideCommand = (config: Config | null): SlashCommand | null => { kind: CommandKind.BUILT_IN, action: async (context: CommandContext) => { context.services.settings.setValue(SettingScope.User, 'ideMode', false); - config.setIdeMode(false); - config.setIdeClientDisconnected(); + await config.setIdeModeAndSyncConnection(false); + const { messageType, content } = getIdeStatusMessage(ideClient); + context.ui.addItem( + { + type: messageType, + text: content, + }, + Date.now(), + ); }, }; |
