Spaces:
Runtime error
Runtime error
| /** | |
| * GitHub Copilot installation detection. | |
| * | |
| * Detection strategy: look for the Copilot extension folder inside the user's | |
| * VS Code (or fork) extensions directory. Purely filesystem-based — no shell | |
| * interpolation (Hard Rule #13). | |
| */ | |
| import fs from "node:fs"; | |
| import os from "node:os"; | |
| import path from "node:path"; | |
| import type { DetectionResult } from "../types"; | |
| const HOME = os.homedir(); | |
| const EXTENSIONS_DIRS = [ | |
| path.join(HOME, ".vscode", "extensions"), | |
| path.join(HOME, ".vscode-insiders", "extensions"), | |
| path.join(HOME, ".cursor", "extensions"), | |
| ]; | |
| export function detectCopilot(): DetectionResult { | |
| for (const dir of EXTENSIONS_DIRS) { | |
| try { | |
| if (!fs.existsSync(dir)) continue; | |
| const entries = fs.readdirSync(dir); | |
| for (const name of entries) { | |
| // Copilot extensions are named like `github.copilot-1.x.x`, | |
| // `github.copilot-chat-...`. Match by prefix only. | |
| const lower = name.toLowerCase(); | |
| if (lower.startsWith("github.copilot")) { | |
| return { installed: true, path: path.join(dir, name) }; | |
| } | |
| } | |
| } catch { | |
| // Permission or transient fs error — skip this directory. | |
| } | |
| } | |
| return { installed: false }; | |
| } | |