diff --git a/package.json b/package.json index b93691d269..b6cc2e9e9d 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "clean": "turbo clean --log-order grouped --output-logs new-only && rimraf dist out bin .vite-port .turbo", "install:vsix": "pnpm install --frozen-lockfile && pnpm clean && pnpm vsix && node scripts/install-vsix.js", "install:vsix:nightly": "pnpm install --frozen-lockfile && pnpm clean && pnpm vsix:nightly && node scripts/install-vsix.js --nightly", + "code-server:install": "node scripts/code-server.js", "changeset:version": "cp CHANGELOG.md src/CHANGELOG.md && changeset version && cp -vf src/CHANGELOG.md .", "knip": "knip --include files", "evals": "dotenvx run -f packages/evals/.env.development packages/evals/.env.local -- docker compose -f packages/evals/docker-compose.yml --profile server --profile runner up --build --scale runner=0", diff --git a/scripts/code-server.js b/scripts/code-server.js new file mode 100644 index 0000000000..1b6b434840 --- /dev/null +++ b/scripts/code-server.js @@ -0,0 +1,71 @@ +/** + * Serve script for Roo Code extension development + * + * Usage: + * pnpm code-server:install # Build and install the extension into code-server + * + * After making code changes, run `pnpm code-server:install` again and reload the window + * (Cmd+Shift+P → "Developer: Reload Window") + */ + +const { execSync } = require("child_process") +const path = require("path") +const os = require("os") + +const RESET = "\x1b[0m" +const BOLD = "\x1b[1m" +const GREEN = "\x1b[32m" +const YELLOW = "\x1b[33m" +const CYAN = "\x1b[36m" +const RED = "\x1b[31m" + +// Build vsix to a fixed path in temp directory +const VSIX_PATH = path.join(os.tmpdir(), "roo-code-serve.vsix") + +function log(message) { + console.log(`${CYAN}[code-server]${RESET} ${message}`) +} + +function logSuccess(message) { + console.log(`${GREEN}✓${RESET} ${message}`) +} + +function logWarning(message) { + console.log(`${YELLOW}⚠${RESET} ${message}`) +} + +function logError(message) { + console.error(`${RED}✗${RESET} ${message}`) +} + +async function main() { + console.log(`\n${BOLD}🔧 Roo Code - Install Extension${RESET}\n`) + + // Build vsix to temp directory + log(`Building vsix to ${VSIX_PATH}...`) + try { + execSync(`pnpm vsix -- --out "${VSIX_PATH}"`, { stdio: "inherit" }) + logSuccess("Build complete") + } catch (error) { + logError("Build failed") + process.exit(1) + } + + // Install extension into code-server + log("Installing extension into code-server...") + try { + execSync(`code-server --install-extension "${VSIX_PATH}"`, { stdio: "inherit" }) + logSuccess("Extension installed") + } catch (error) { + logWarning("Extension installation had warnings (this is usually fine)") + } + + console.log(`\n${GREEN}✓ Extension built and installed.${RESET}`) + console.log(` If code-server is running, reload the window to pick up changes.`) + console.log(` (Cmd+Shift+P → "Developer: Reload Window")\n`) +} + +main().catch((error) => { + logError(error.message) + process.exit(1) +})