summaryrefslogtreecommitdiff
path: root/packages/vscode-ide-companion/src/extension.ts
diff options
context:
space:
mode:
authorchristine betts <[email protected]>2025-08-04 21:36:23 +0000
committerGitHub <[email protected]>2025-08-04 21:36:23 +0000
commit93f8fe3671babbd3065d7a80b9e5ac50c42042da (patch)
tree5a1ab2c6a3a863f24a27ced76c0d56bea173e58f /packages/vscode-ide-companion/src/extension.ts
parente7b468e122a29341a6e2e2ca67366e6d62014a6d (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.ts38
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) {