diff options
| author | christine betts <[email protected]> | 2025-08-04 21:36:23 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-04 21:36:23 +0000 |
| commit | 93f8fe3671babbd3065d7a80b9e5ac50c42042da (patch) | |
| tree | 5a1ab2c6a3a863f24a27ced76c0d56bea173e58f /packages/vscode-ide-companion/src/extension.ts | |
| parent | e7b468e122a29341a6e2e2ca67366e6d62014a6d (diff) | |
[ide-mode] Add openDiff tool to IDE MCP server (#4519)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'packages/vscode-ide-companion/src/extension.ts')
| -rw-r--r-- | packages/vscode-ide-companion/src/extension.ts | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/packages/vscode-ide-companion/src/extension.ts b/packages/vscode-ide-companion/src/extension.ts index 73090175..b31e15b8 100644 --- a/packages/vscode-ide-companion/src/extension.ts +++ b/packages/vscode-ide-companion/src/extension.ts @@ -6,12 +6,15 @@ import * as vscode from 'vscode'; import { IDEServer } from './ide-server.js'; +import { DiffContentProvider, DiffManager } from './diff-manager.js'; import { createLogger } from './utils/logger.js'; const IDE_WORKSPACE_PATH_ENV_VAR = 'GEMINI_CLI_IDE_WORKSPACE_PATH'; +export const DIFF_SCHEME = 'gemini-diff'; let ideServer: IDEServer; let logger: vscode.OutputChannel; + let log: (message: string) => void = () => {}; function updateWorkspacePath(context: vscode.ExtensionContext) { @@ -37,7 +40,40 @@ export async function activate(context: vscode.ExtensionContext) { updateWorkspacePath(context); - ideServer = new IDEServer(log); + const diffContentProvider = new DiffContentProvider(); + const diffManager = new DiffManager(logger, diffContentProvider); + + context.subscriptions.push( + vscode.workspace.onDidCloseTextDocument((doc) => { + if (doc.uri.scheme === DIFF_SCHEME) { + diffManager.cancelDiff(doc.uri); + } + }), + vscode.workspace.registerTextDocumentContentProvider( + DIFF_SCHEME, + diffContentProvider, + ), + vscode.commands.registerCommand( + 'gemini.diff.accept', + (uri?: vscode.Uri) => { + const docUri = uri ?? vscode.window.activeTextEditor?.document.uri; + if (docUri && docUri.scheme === DIFF_SCHEME) { + diffManager.acceptDiff(docUri); + } + }, + ), + vscode.commands.registerCommand( + 'gemini.diff.cancel', + (uri?: vscode.Uri) => { + const docUri = uri ?? vscode.window.activeTextEditor?.document.uri; + if (docUri && docUri.scheme === DIFF_SCHEME) { + diffManager.cancelDiff(docUri); + } + }, + ), + ); + + ideServer = new IDEServer(log, diffManager); try { await ideServer.start(context); } catch (err) { |
