From 9abb165f7bff770469f672f478447b8a9c8580c8 Mon Sep 17 00:00:00 2001 From: Shreya Keshive Date: Mon, 22 Sep 2025 12:12:43 -0400 Subject: [PATCH] refactor(vscode-ide-companion): Reduce VSIX size and improve build process (#9118) --- packages/vscode-ide-companion/development.md | 28 ++++++++----------- packages/vscode-ide-companion/package.json | 19 +++++++------ .../vscode-ide-companion/src/diff-manager.ts | 2 +- .../src/extension.test.ts | 11 ++++++-- .../vscode-ide-companion/src/extension.ts | 2 +- .../vscode-ide-companion/src/ide-server.ts | 2 +- .../src/open-files-manager.ts | 5 +++- scripts/clean.js | 6 +++- 8 files changed, 42 insertions(+), 33 deletions(-) diff --git a/packages/vscode-ide-companion/development.md b/packages/vscode-ide-companion/development.md index 0fdc93f23a..4a3f33e32f 100644 --- a/packages/vscode-ide-companion/development.md +++ b/packages/vscode-ide-companion/development.md @@ -1,30 +1,24 @@ -# Local Development +# Local Development ⚙️ ## Running the Extension -To run the extension locally for development: +To run the extension locally for development, we recommend using the automatic watch process for continuous compilation: -1. From the root of the repository, install dependencies: +1. **Install Dependencies** (from the root of the repository): ```bash npm install ``` -2. Open this directory (`packages/vscode-ide-companion`) in VS Code. -3. Compile the extension: +2. **Open in VS Code:** Open this directory (`packages/vscode-ide-companion`) in your VS Code editor. +3. **Start Watch Mode:** Run the watch script to compile the extension and monitor changes in both **esbuild** and **TypeScript**: ```bash - npm run compile + npm run watch ``` -4. Press `F5` (fn+f5 on mac) to open a new Extension Development Host window with the extension running. +4. **Launch Host:** Press **`F5`** (or **`fn+F5`** on Mac) to open a new **Extension Development Host** window with the extension running. -To watch for changes and have the extension rebuild automatically, run: +### Manual Build + +If you only need to compile the extension once without watching for changes: ```bash -npm run watch -``` - -## Running Tests - -To run the automated tests, run: - -```bash -npm run test +npm run build ``` diff --git a/packages/vscode-ide-companion/package.json b/packages/vscode-ide-companion/package.json index c8e449e9ac..ec688055a8 100644 --- a/packages/vscode-ide-companion/package.json +++ b/packages/vscode-ide-companion/package.json @@ -96,18 +96,21 @@ "main": "./dist/extension.cjs", "type": "module", "scripts": { - "vscode:prepublish": "npm run generate:notices && npm run check-types && npm run lint && node esbuild.js --production", - "build": "npm run compile", - "compile": "npm run check-types && npm run lint && node esbuild.js", - "watch": "npm-run-all -p watch:*", + "prepackage": "npm run generate:notices && npm run check-types && npm run lint && npm run build:prod", + "build": "npm run build:dev", + "build:dev": "npm run check-types && npm run lint && node esbuild.js", + "build:prod": "node esbuild.js --production", + "generate:notices": "node ./scripts/generate-notices.js", + "prepare": "npm run generate:notices", + "check-types": "tsc --noEmit", + "lint": "eslint src", + "watch": "npm-run-all2 -p watch:*", "watch:esbuild": "node esbuild.js --watch", "watch:tsc": "tsc --noEmit --watch --project tsconfig.json", "package": "vsce package --no-dependencies", - "generate:notices": "node ./scripts/generate-notices.js", - "check-types": "tsc --noEmit", - "lint": "eslint src", "test": "vitest run", - "test:ci": "vitest run --coverage" + "test:ci": "vitest run --coverage", + "validate:notices": "node ./scripts/validate-notices.js" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/packages/vscode-ide-companion/src/diff-manager.ts b/packages/vscode-ide-companion/src/diff-manager.ts index 7acce07a61..5cdb31aed0 100644 --- a/packages/vscode-ide-companion/src/diff-manager.ts +++ b/packages/vscode-ide-companion/src/diff-manager.ts @@ -7,7 +7,7 @@ import { IdeDiffAcceptedNotificationSchema, IdeDiffClosedNotificationSchema, -} from '@google/gemini-cli-core'; +} from '@google/gemini-cli-core/src/ide/types.js'; import { type JSONRPCNotification } from '@modelcontextprotocol/sdk/types.js'; import * as path from 'node:path'; import * as vscode from 'vscode'; diff --git a/packages/vscode-ide-companion/src/extension.test.ts b/packages/vscode-ide-companion/src/extension.test.ts index f7acb2956e..e79f273e83 100644 --- a/packages/vscode-ide-companion/src/extension.test.ts +++ b/packages/vscode-ide-companion/src/extension.test.ts @@ -7,10 +7,15 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import * as vscode from 'vscode'; import { activate } from './extension.js'; -import { IDE_DEFINITIONS, detectIdeFromEnv } from '@google/gemini-cli-core'; +import { + IDE_DEFINITIONS, + detectIdeFromEnv, +} from '@google/gemini-cli-core/src/ide/detect-ide.js'; -vi.mock('@google/gemini-cli-core', async () => { - const actual = await vi.importActual('@google/gemini-cli-core'); +vi.mock('@google/gemini-cli-core/src/ide/detect-ide.js', async () => { + const actual = await vi.importActual( + '@google/gemini-cli-core/src/ide/detect-ide.js', + ); return { ...actual, detectIdeFromEnv: vi.fn(() => IDE_DEFINITIONS.vscode), diff --git a/packages/vscode-ide-companion/src/extension.ts b/packages/vscode-ide-companion/src/extension.ts index e75158d660..0bfab851f9 100644 --- a/packages/vscode-ide-companion/src/extension.ts +++ b/packages/vscode-ide-companion/src/extension.ts @@ -13,7 +13,7 @@ import { detectIdeFromEnv, IDE_DEFINITIONS, type IdeInfo, -} from '@google/gemini-cli-core'; +} from '@google/gemini-cli-core/src/ide/detect-ide.js'; const CLI_IDE_COMPANION_IDENTIFIER = 'Google.gemini-cli-vscode-ide-companion'; const INFO_MESSAGE_SHOWN_KEY = 'geminiCliInfoMessageShown'; diff --git a/packages/vscode-ide-companion/src/ide-server.ts b/packages/vscode-ide-companion/src/ide-server.ts index 12dbaac6bd..eb04aa0320 100644 --- a/packages/vscode-ide-companion/src/ide-server.ts +++ b/packages/vscode-ide-companion/src/ide-server.ts @@ -9,7 +9,7 @@ import { CloseDiffRequestSchema, IdeContextNotificationSchema, OpenDiffRequestSchema, -} from '@google/gemini-cli-core'; +} from '@google/gemini-cli-core/src/ide/types.js'; import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js'; import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; diff --git a/packages/vscode-ide-companion/src/open-files-manager.ts b/packages/vscode-ide-companion/src/open-files-manager.ts index 57bbdd9e84..c8023bf418 100644 --- a/packages/vscode-ide-companion/src/open-files-manager.ts +++ b/packages/vscode-ide-companion/src/open-files-manager.ts @@ -5,7 +5,10 @@ */ import * as vscode from 'vscode'; -import type { File, IdeContext } from '@google/gemini-cli-core'; +import type { + File, + IdeContext, +} from '@google/gemini-cli-core/src/ide/types.js'; export const MAX_FILES = 10; const MAX_SELECTED_TEXT_LENGTH = 16384; // 16 KiB limit diff --git a/scripts/clean.js b/scripts/clean.js index 88493a63c1..864a2bec7b 100644 --- a/scripts/clean.js +++ b/scripts/clean.js @@ -46,7 +46,11 @@ for (const workspace of rootPackageJson.workspaces) { } } -// Clean up vsix files in vscode-ide-companion +// Clean up vscode-ide-companion package +rmSync(join(root, 'packages/vscode-ide-companion/node_modules'), { + recursive: true, + force: true, +}); const vsixFiles = globSync('packages/vscode-ide-companion/*.vsix', { cwd: root, });