From e559bdd4f00dd94dbddfe6cb1079029521764c67 Mon Sep 17 00:00:00 2001 From: christine betts Date: Tue, 22 Jul 2025 15:49:31 -0400 Subject: [PATCH 1/6] add drawer for active files in IDE mode --- packages/cli/src/ui/App.tsx | 10 +++- .../ui/components/ContextSummaryDisplay.tsx | 5 +- .../ui/components/IDEContextDetailDisplay.tsx | 52 +++++++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 packages/cli/src/ui/components/IDEContextDetailDisplay.tsx diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index baf21395aa3..53c9586f679 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -46,6 +46,7 @@ import { registerCleanup } from '../utils/cleanup.js'; import { DetailedMessagesDisplay } from './components/DetailedMessagesDisplay.js'; import { HistoryItemDisplay } from './components/HistoryItemDisplay.js'; import { ContextSummaryDisplay } from './components/ContextSummaryDisplay.js'; +import { IDEContextDetailDisplay } from './components/IDEContextDetailDisplay.js'; import { useHistory } from './hooks/useHistoryManager.js'; import process from 'node:process'; import { @@ -148,6 +149,8 @@ const App = ({ config, settings, startupWarnings = [], version }: AppProps) => { const [showErrorDetails, setShowErrorDetails] = useState(false); const [showToolDescriptions, setShowToolDescriptions] = useState(false); + const [showIDEContextDetail, setShowIDEContextDetail] = + useState(false); const [ctrlCPressedOnce, setCtrlCPressedOnce] = useState(false); const [quittingMessages, setQuittingMessages] = useState< HistoryItem[] | null @@ -464,6 +467,8 @@ const App = ({ config, settings, startupWarnings = [], version }: AppProps) => { if (Object.keys(mcpServers || {}).length > 0) { handleSlashCommand(newValue ? '/mcp desc' : '/mcp nodesc'); } + } else if (key.ctrl && input === 'e' && ideContext) { + setShowIDEContextDetail((prev) => !prev); } else if (key.ctrl && (input === 'c' || input === 'C')) { handleExit(ctrlCPressedOnce, setCtrlCPressedOnce, ctrlCTimerRef); } else if (key.ctrl && (input === 'd' || input === 'D')) { @@ -860,6 +865,7 @@ const App = ({ config, settings, startupWarnings = [], version }: AppProps) => { } elapsedTime={elapsedTime} /> + { {shellModeActive && } - + {showIDEContextDetail && ( + + )} {showErrorDetails && ( diff --git a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx index 626a2fa5a14..b199ca81b14 100644 --- a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx +++ b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx @@ -8,7 +8,6 @@ import React from 'react'; import { Text } from 'ink'; import { Colors } from '../colors.js'; import { type OpenFiles, type MCPServerConfig } from '@google/gemini-cli-core'; -import path from 'path'; interface ContextSummaryDisplayProps { geminiMdFileCount: number; @@ -40,10 +39,10 @@ export const ContextSummaryDisplay: React.FC = ({ } const activeFileText = (() => { - if (!openFiles?.activeFile) { + if (!openFiles?.recentOpenFiles) { return ''; } - return `Open File (${path.basename(openFiles.activeFile)})`; + return `${openFiles.recentOpenFiles.length} recent files (ctrl+e for IDE context)`; })(); const geminiMdText = (() => { diff --git a/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx b/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx new file mode 100644 index 00000000000..cd10ed2d245 --- /dev/null +++ b/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx @@ -0,0 +1,52 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Box, Text } from 'ink'; +import { type OpenFiles } from '@google/gemini-cli-core'; +import { Colors } from '../colors.js'; +import path from 'node:path'; + +interface IDEContextDetailDisplayProps { + openFiles: OpenFiles | undefined; +} + +export function IDEContextDetailDisplay({ + openFiles, +}: IDEContextDetailDisplayProps) { + if (!openFiles || (!openFiles.activeFile && !openFiles.recentOpenFiles)) { + return null; + } + + const recentFiles = openFiles.recentOpenFiles || []; + + return ( + + + File Context (ctrl+e to close) + + {openFiles.activeFile && ( + + Active File: + {path.basename(openFiles.activeFile)} + + )} + {recentFiles.length > 0 && ( + + Recent Files: + {recentFiles.map((file, index) => ( + - {path.basename(file.filePath)} + ))} + + )} + + ); +} From 53a4d7d8b37696274eeebf2eb6e002af75dc69fd Mon Sep 17 00:00:00 2001 From: christine betts Date: Thu, 24 Jul 2025 11:00:13 -0400 Subject: [PATCH 2/6] Address comments + update UX --- .../cli/src/ui/components/ContextSummaryDisplay.tsx | 5 +++-- .../cli/src/ui/components/IDEContextDetailDisplay.tsx | 11 +++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx index b199ca81b14..b55c97d9e3b 100644 --- a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx +++ b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx @@ -5,6 +5,7 @@ */ import React from 'react'; +import path from 'path'; import { Text } from 'ink'; import { Colors } from '../colors.js'; import { type OpenFiles, type MCPServerConfig } from '@google/gemini-cli-core'; @@ -39,10 +40,10 @@ export const ContextSummaryDisplay: React.FC = ({ } const activeFileText = (() => { - if (!openFiles?.recentOpenFiles) { + if (!openFiles?.activeFile) { return ''; } - return `${openFiles.recentOpenFiles.length} recent files (ctrl+e for IDE context)`; + return `Open File (${path.basename(openFiles.activeFile)}) (ctrl+e for all IDE context)`; })(); const geminiMdText = (() => { diff --git a/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx b/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx index cd10ed2d245..c8525e9fcf3 100644 --- a/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx +++ b/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx @@ -16,10 +16,13 @@ interface IDEContextDetailDisplayProps { export function IDEContextDetailDisplay({ openFiles, }: IDEContextDetailDisplayProps) { - if (!openFiles || (!openFiles.activeFile && !openFiles.recentOpenFiles)) { + if ( + !openFiles || + (!openFiles.activeFile && + (!openFiles.recentOpenFiles || openFiles.recentOpenFiles.length === 0)) + ) { return null; } - const recentFiles = openFiles.recentOpenFiles || []; return ( @@ -42,8 +45,8 @@ export function IDEContextDetailDisplay({ {recentFiles.length > 0 && ( Recent Files: - {recentFiles.map((file, index) => ( - - {path.basename(file.filePath)} + {recentFiles.map((file, _) => ( + - {path.basename(file.filePath)} ))} )} From b206f2b5e2317c8705ac1998b3a28e422e3c3673 Mon Sep 17 00:00:00 2001 From: christine betts Date: Thu, 24 Jul 2025 11:05:32 -0400 Subject: [PATCH 3/6] update test --- packages/cli/src/ui/App.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx index 0712d81039f..6cc8b4ec363 100644 --- a/packages/cli/src/ui/App.test.tsx +++ b/packages/cli/src/ui/App.test.tsx @@ -329,7 +329,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Open File (my-file.ts) | 1 GEMINI.md File'); + expect(lastFrame()).toContain('Open File (my-file.ts) (ctrl+e for all IDE context) | 1 GEMINI.md File'); }); it('should display default "GEMINI.md" in footer when contextFileName is not set and count is 1', async () => { From c1df91088d5936fda3d38287cf46fb0d109377d6 Mon Sep 17 00:00:00 2001 From: christine betts Date: Thu, 24 Jul 2025 11:26:14 -0400 Subject: [PATCH 4/6] Address comments --- packages/cli/src/ui/App.test.tsx | 6 ++++-- packages/cli/src/ui/components/ContextSummaryDisplay.tsx | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx index 6cc8b4ec363..f84080c9055 100644 --- a/packages/cli/src/ui/App.test.tsx +++ b/packages/cli/src/ui/App.test.tsx @@ -293,7 +293,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Open File (my-file.ts)'); + expect(lastFrame()).toContain('Active File (my-file.ts)'); }); it('should not display active file when not available', async () => { @@ -329,7 +329,9 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Open File (my-file.ts) (ctrl+e for all IDE context) | 1 GEMINI.md File'); + expect(lastFrame()).toContain( + 'Active File (my-file.ts) (ctrl+e for all IDE context) | 1 GEMINI.md File', + ); }); it('should display default "GEMINI.md" in footer when contextFileName is not set and count is 1', async () => { diff --git a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx index b55c97d9e3b..c2bfcd1192d 100644 --- a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx +++ b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx @@ -43,7 +43,7 @@ export const ContextSummaryDisplay: React.FC = ({ if (!openFiles?.activeFile) { return ''; } - return `Open File (${path.basename(openFiles.activeFile)}) (ctrl+e for all IDE context)`; + return `Active File (${path.basename(openFiles.activeFile)}) (ctrl+e for all IDE context)`; })(); const geminiMdText = (() => { From 8f0ebcf01b3fe3b80524fc0b3a6355eb4aa9b84b Mon Sep 17 00:00:00 2001 From: Shreya Date: Thu, 24 Jul 2025 13:23:05 -0400 Subject: [PATCH 5/6] update based on ux --- packages/cli/src/ui/App.test.tsx | 42 +++++++++++++++---- .../ui/components/ContextSummaryDisplay.tsx | 22 +++++----- .../ui/components/IDEContextDetailDisplay.tsx | 21 ++++------ .../vscode-ide-companion/src/ide-server.ts | 11 ++--- 4 files changed, 59 insertions(+), 37 deletions(-) diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx index f84080c9055..56093562500 100644 --- a/packages/cli/src/ui/App.test.tsx +++ b/packages/cli/src/ui/App.test.tsx @@ -281,6 +281,7 @@ describe('App UI', () => { it('should display active file when available', async () => { vi.mocked(ideContext.getOpenFilesContext).mockReturnValue({ activeFile: '/path/to/my-file.ts', + recentOpenFiles: [{ filePath: '/path/to/my-file.ts', content: 'hello' }], selectedText: 'hello', }); @@ -293,7 +294,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Active File (my-file.ts)'); + expect(lastFrame()).toContain('1 recent file (ctrl+e to view)'); }); it('should not display active file when not available', async () => { @@ -316,9 +317,11 @@ describe('App UI', () => { it('should display active file and other context', async () => { vi.mocked(ideContext.getOpenFilesContext).mockReturnValue({ activeFile: '/path/to/my-file.ts', + recentOpenFiles: [{ filePath: '/path/to/my-file.ts', content: 'hello' }], selectedText: 'hello', }); mockConfig.getGeminiMdFileCount.mockReturnValue(1); + mockConfig.getAllGeminiMdFilenames.mockReturnValue(['GEMINI.md']); const { lastFrame, unmount } = render( { currentUnmount = unmount; await Promise.resolve(); expect(lastFrame()).toContain( - 'Active File (my-file.ts) (ctrl+e for all IDE context) | 1 GEMINI.md File', + 'Using: 1 recent file (ctrl+e to view) | 1 GEMINI.md file', ); }); it('should display default "GEMINI.md" in footer when contextFileName is not set and count is 1', async () => { mockConfig.getGeminiMdFileCount.mockReturnValue(1); + mockConfig.getAllGeminiMdFilenames.mockReturnValue(['GEMINI.md']); // For this test, ensure showMemoryUsage is false or debugMode is false if it relies on that mockConfig.getDebugMode.mockReturnValue(false); mockConfig.getShowMemoryUsage.mockReturnValue(false); @@ -349,11 +353,15 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); // Wait for any async updates - expect(lastFrame()).toContain('Using: 1 GEMINI.md File'); + expect(lastFrame()).toContain('Using: 1 GEMINI.md file'); }); it('should display default "GEMINI.md" with plural when contextFileName is not set and count is > 1', async () => { mockConfig.getGeminiMdFileCount.mockReturnValue(2); + mockConfig.getAllGeminiMdFilenames.mockReturnValue([ + 'GEMINI.md', + 'GEMINI.md', + ]); mockConfig.getDebugMode.mockReturnValue(false); mockConfig.getShowMemoryUsage.mockReturnValue(false); @@ -366,7 +374,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Using: 2 GEMINI.md Files'); + expect(lastFrame()).toContain('Using: 2 GEMINI.md files'); }); it('should display custom contextFileName in footer when set and count is 1', async () => { @@ -374,6 +382,7 @@ describe('App UI', () => { workspace: { contextFileName: 'AGENTS.md', theme: 'Default' }, }); mockConfig.getGeminiMdFileCount.mockReturnValue(1); + mockConfig.getAllGeminiMdFilenames.mockReturnValue(['AGENTS.md']); mockConfig.getDebugMode.mockReturnValue(false); mockConfig.getShowMemoryUsage.mockReturnValue(false); @@ -386,7 +395,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Using: 1 AGENTS.md File'); + expect(lastFrame()).toContain('Using: 1 AGENTS.md file'); }); it('should display a generic message when multiple context files with different names are provided', async () => { @@ -397,6 +406,10 @@ describe('App UI', () => { }, }); mockConfig.getGeminiMdFileCount.mockReturnValue(2); + mockConfig.getAllGeminiMdFilenames.mockReturnValue([ + 'AGENTS.md', + 'CONTEXT.md', + ]); mockConfig.getDebugMode.mockReturnValue(false); mockConfig.getShowMemoryUsage.mockReturnValue(false); @@ -409,7 +422,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Using: 2 Context Files'); + expect(lastFrame()).toContain('Using: 2 context files'); }); it('should display custom contextFileName with plural when set and count is > 1', async () => { @@ -417,6 +430,11 @@ describe('App UI', () => { workspace: { contextFileName: 'MY_NOTES.TXT', theme: 'Default' }, }); mockConfig.getGeminiMdFileCount.mockReturnValue(3); + mockConfig.getAllGeminiMdFilenames.mockReturnValue([ + 'MY_NOTES.TXT', + 'MY_NOTES.TXT', + 'MY_NOTES.TXT', + ]); mockConfig.getDebugMode.mockReturnValue(false); mockConfig.getShowMemoryUsage.mockReturnValue(false); @@ -429,7 +447,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Using: 3 MY_NOTES.TXT Files'); + expect(lastFrame()).toContain('Using: 3 MY_NOTES.TXT files'); }); it('should not display context file message if count is 0, even if contextFileName is set', async () => { @@ -437,6 +455,7 @@ describe('App UI', () => { workspace: { contextFileName: 'ANY_FILE.MD', theme: 'Default' }, }); mockConfig.getGeminiMdFileCount.mockReturnValue(0); + mockConfig.getAllGeminiMdFilenames.mockReturnValue([]); mockConfig.getDebugMode.mockReturnValue(false); mockConfig.getShowMemoryUsage.mockReturnValue(false); @@ -454,6 +473,10 @@ describe('App UI', () => { it('should display GEMINI.md and MCP server count when both are present', async () => { mockConfig.getGeminiMdFileCount.mockReturnValue(2); + mockConfig.getAllGeminiMdFilenames.mockReturnValue([ + 'GEMINI.md', + 'GEMINI.md', + ]); mockConfig.getMcpServers.mockReturnValue({ server1: {} as MCPServerConfig, }); @@ -469,11 +492,12 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('1 MCP Server'); + expect(lastFrame()).toContain('1 MCP server'); }); it('should display only MCP server count when GEMINI.md count is 0', async () => { mockConfig.getGeminiMdFileCount.mockReturnValue(0); + mockConfig.getAllGeminiMdFilenames.mockReturnValue([]); mockConfig.getMcpServers.mockReturnValue({ server1: {} as MCPServerConfig, server2: {} as MCPServerConfig, @@ -490,7 +514,7 @@ describe('App UI', () => { ); currentUnmount = unmount; await Promise.resolve(); - expect(lastFrame()).toContain('Using: 2 MCP Servers'); + expect(lastFrame()).toContain('Using: 2 MCP servers (ctrl+t to view)'); }); it('should display Tips component by default', async () => { diff --git a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx index c2bfcd1192d..b166056adf7 100644 --- a/packages/cli/src/ui/components/ContextSummaryDisplay.tsx +++ b/packages/cli/src/ui/components/ContextSummaryDisplay.tsx @@ -5,7 +5,6 @@ */ import React from 'react'; -import path from 'path'; import { Text } from 'ink'; import { Colors } from '../colors.js'; import { type OpenFiles, type MCPServerConfig } from '@google/gemini-cli-core'; @@ -34,16 +33,17 @@ export const ContextSummaryDisplay: React.FC = ({ geminiMdFileCount === 0 && mcpServerCount === 0 && blockedMcpServerCount === 0 && - !openFiles?.activeFile + (openFiles?.recentOpenFiles?.length ?? 0) === 0 ) { return ; // Render an empty space to reserve height } - const activeFileText = (() => { - if (!openFiles?.activeFile) { + const recentFilesText = (() => { + const count = openFiles?.recentOpenFiles?.length ?? 0; + if (count === 0) { return ''; } - return `Active File (${path.basename(openFiles.activeFile)}) (ctrl+e for all IDE context)`; + return `${count} recent file${count > 1 ? 's' : ''} (ctrl+e to view)`; })(); const geminiMdText = (() => { @@ -51,8 +51,8 @@ export const ContextSummaryDisplay: React.FC = ({ return ''; } const allNamesTheSame = new Set(contextFileNames).size < 2; - const name = allNamesTheSame ? contextFileNames[0] : 'Context'; - return `${geminiMdFileCount} ${name} File${ + const name = allNamesTheSame ? contextFileNames[0] : 'context'; + return `${geminiMdFileCount} ${name} file${ geminiMdFileCount > 1 ? 's' : '' }`; })(); @@ -65,14 +65,14 @@ export const ContextSummaryDisplay: React.FC = ({ const parts = []; if (mcpServerCount > 0) { parts.push( - `${mcpServerCount} MCP Server${mcpServerCount > 1 ? 's' : ''}`, + `${mcpServerCount} MCP server${mcpServerCount > 1 ? 's' : ''}`, ); } if (blockedMcpServerCount > 0) { let blockedText = `${blockedMcpServerCount} Blocked`; if (mcpServerCount === 0) { - blockedText += ` MCP Server${blockedMcpServerCount > 1 ? 's' : ''}`; + blockedText += ` MCP server${blockedMcpServerCount > 1 ? 's' : ''}`; } parts.push(blockedText); } @@ -81,8 +81,8 @@ export const ContextSummaryDisplay: React.FC = ({ let summaryText = 'Using: '; const summaryParts = []; - if (activeFileText) { - summaryParts.push(activeFileText); + if (recentFilesText) { + summaryParts.push(recentFilesText); } if (geminiMdText) { summaryParts.push(geminiMdText); diff --git a/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx b/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx index c8525e9fcf3..8d4fb2c9ea1 100644 --- a/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx +++ b/packages/cli/src/ui/components/IDEContextDetailDisplay.tsx @@ -18,8 +18,8 @@ export function IDEContextDetailDisplay({ }: IDEContextDetailDisplayProps) { if ( !openFiles || - (!openFiles.activeFile && - (!openFiles.recentOpenFiles || openFiles.recentOpenFiles.length === 0)) + !openFiles.recentOpenFiles || + openFiles.recentOpenFiles.length === 0 ) { return null; } @@ -34,19 +34,16 @@ export function IDEContextDetailDisplay({ paddingX={1} > - File Context (ctrl+e to close) + IDE Context (ctrl+e to toggle) - {openFiles.activeFile && ( - - Active File: - {path.basename(openFiles.activeFile)} - - )} {recentFiles.length > 0 && ( - Recent Files: - {recentFiles.map((file, _) => ( - - {path.basename(file.filePath)} + Recent files: + {recentFiles.map((file) => ( + + - {path.basename(file.filePath)} + {file.filePath === openFiles.activeFile ? ' (active)' : ''} + ))} )} diff --git a/packages/vscode-ide-companion/src/ide-server.ts b/packages/vscode-ide-companion/src/ide-server.ts index 75828485cf5..79e3fa0ce2d 100644 --- a/packages/vscode-ide-companion/src/ide-server.ts +++ b/packages/vscode-ide-companion/src/ide-server.ts @@ -34,9 +34,7 @@ function sendOpenFilesChangedNotification( method: 'ide/openFilesChanged', params: { activeFile: filePath, - recentOpenFiles: recentFilesManager.recentFiles.filter( - (file) => file.filePath !== filePath, - ), + recentOpenFiles: recentFilesManager.recentFiles, }, }; log( @@ -236,8 +234,11 @@ const createMcpServer = () => { inputSchema: {}, }, async () => { - const activeEditor = vscode.window.activeTextEditor; - const filePath = activeEditor ? activeEditor.document.uri.fsPath : ''; + const editor = vscode.window.activeTextEditor; + const filePath = + editor && editor.document.uri.scheme === 'file' + ? editor.document.uri.fsPath + : ''; if (filePath) { return { content: [{ type: 'text', text: `Active file: ${filePath}` }], From a148dfe950b2584c142b6655bf974209de6fb388 Mon Sep 17 00:00:00 2001 From: Shreya Date: Thu, 24 Jul 2025 13:28:20 -0400 Subject: [PATCH 6/6] lint --- packages/vscode-ide-companion/src/ide-server.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/vscode-ide-companion/src/ide-server.ts b/packages/vscode-ide-companion/src/ide-server.ts index 79e3fa0ce2d..0e717bfb65e 100644 --- a/packages/vscode-ide-companion/src/ide-server.ts +++ b/packages/vscode-ide-companion/src/ide-server.ts @@ -234,11 +234,11 @@ const createMcpServer = () => { inputSchema: {}, }, async () => { - const editor = vscode.window.activeTextEditor; - const filePath = - editor && editor.document.uri.scheme === 'file' - ? editor.document.uri.fsPath - : ''; + const editor = vscode.window.activeTextEditor; + const filePath = + editor && editor.document.uri.scheme === 'file' + ? editor.document.uri.fsPath + : ''; if (filePath) { return { content: [{ type: 'text', text: `Active file: ${filePath}` }],