summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/config/config.test.ts10
-rw-r--r--packages/cli/src/config/config.ts9
-rw-r--r--packages/cli/src/ui/commands/ideCommand.test.ts10
-rw-r--r--packages/cli/src/ui/commands/ideCommand.ts90
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(),
+ );
},
};