fix(vscode): launch fully isolated dev instance

This commit is contained in:
kirillk
2026-07-29 14:42:29 -04:00
parent 3a9c5ae7fb
commit e6bdd4b2b4
3 changed files with 27 additions and 37 deletions
+6 -28
View File
@@ -26,39 +26,17 @@
},
{
"name": "VSCode - Run Extension (Isolated)",
"type": "extensionHost",
"type": "node-terminal",
"request": "launch",
"args": [
"--profile=Kilo Dev Isolated",
"--extensionDevelopmentPath=${workspaceFolder}/packages/kilo-vscode",
"${workspaceFolder}"
],
"outFiles": ["${workspaceFolder}/packages/kilo-vscode/dist/**/*.js"],
"preLaunchTask": "VSCode - Compile",
"env": {
"XDG_DATA_HOME": "${workspaceFolder}/.kilo-dev/data",
"XDG_CONFIG_HOME": "${workspaceFolder}/.kilo-dev/config",
"XDG_STATE_HOME": "${workspaceFolder}/.kilo-dev/state",
"XDG_CACHE_HOME": "${workspaceFolder}/.kilo-dev/cache"
}
"command": "bun script/launch.ts --state-dir \"${workspaceFolder}/.kilo-dev/vscode\" --kilo-storage-dir \"${workspaceFolder}/.kilo-dev\" --workspace \"${workspaceFolder}\"",
"cwd": "${workspaceFolder}/packages/kilo-vscode"
},
{
"name": "VSCode - Run Extension (Isolated Clean)",
"type": "extensionHost",
"type": "node-terminal",
"request": "launch",
"args": [
"--profile-temp",
"--extensionDevelopmentPath=${workspaceFolder}/packages/kilo-vscode",
"${workspaceFolder}"
],
"outFiles": ["${workspaceFolder}/packages/kilo-vscode/dist/**/*.js"],
"preLaunchTask": "VSCode - Compile (Clean Isolated)",
"env": {
"XDG_DATA_HOME": "${workspaceFolder}/.kilo-dev/data",
"XDG_CONFIG_HOME": "${workspaceFolder}/.kilo-dev/config",
"XDG_STATE_HOME": "${workspaceFolder}/.kilo-dev/state",
"XDG_CACHE_HOME": "${workspaceFolder}/.kilo-dev/cache"
}
"command": "bun script/launch.ts --clean --state-dir \"${workspaceFolder}/.kilo-dev/vscode\" --kilo-storage-dir \"${workspaceFolder}/.kilo-dev\" --workspace \"${workspaceFolder}\"",
"cwd": "${workspaceFolder}/packages/kilo-vscode"
}
]
}
+2 -2
View File
@@ -95,7 +95,7 @@
"problemMatcher": ["$tsc", "$eslint-stylish"]
},
{
"label": "VSCode - Clear Isolated Kilo State",
"label": "VSCode - Clear Isolated State",
"type": "process",
"command": "bun",
"args": [
@@ -113,7 +113,7 @@
},
{
"label": "VSCode - Compile (Clean Isolated)",
"dependsOn": ["VSCode - Clear Isolated Kilo State", "VSCode - Compile"],
"dependsOn": ["VSCode - Clear Isolated State", "VSCode - Compile"],
"dependsOrder": "sequence",
"problemMatcher": []
},
+19 -7
View File
@@ -10,9 +10,11 @@
* --workspace PATH Folder to open in VS Code (default: repo root)
* --mode dev|vsix "dev" uses --extensionDevelopmentPath, "vsix" packages a VSIX (default: dev)
* --app-path PATH Explicit path to the VS Code executable (auto-detected if omitted)
* --state-dir PATH Directory for isolated VS Code user-data/extensions (default: OS temp per repo)
* --kilo-storage-dir PATH Directory for isolated Kilo XDG storage
* --insiders Prefer VS Code Insiders over stable
* --wait Block until the VS Code window is closed
* --clean Wipe the user-data and extensions dirs before launching
* --clean Wipe isolated VS Code dirs and Kilo storage before launching
* --preserve-settings Merge defaults into existing VS Code user settings
* --accessible Enable VS Code accessibility support for assistive-technology testing
*
@@ -35,12 +37,6 @@ const win = process.platform === "win32"
const root = join(import.meta.dir, "..")
const repo = resolve(root, "..", "..")
// Stable per-repo directory under OS temp — no accumulation
const hash = createHash("sha256").update(repo).digest("hex").slice(0, 12)
const base = join(tmpdir(), `kilo-vscode-dev-${hash}`)
const userDir = join(base, "user-data")
const extDir = join(base, "extensions")
// ---------------------------------------------------------------------------
// Argument parsing
// ---------------------------------------------------------------------------
@@ -79,6 +75,14 @@ function parse(argv: string[]) {
}
const opts = parse(process.argv.slice(2))
// Stable per-repo directory under OS temp — no accumulation
const hash = createHash("sha256").update(repo).digest("hex").slice(0, 12)
const base = opts["state-dir"] ? resolve(opts["state-dir"] as string) : join(tmpdir(), `kilo-vscode-dev-${hash}`)
const userDir = join(base, "user-data")
const extDir = join(base, "extensions")
const kilo = opts["kilo-storage-dir"] ? resolve(opts["kilo-storage-dir"] as string) : undefined
const shouldBuild = opts["build"] !== false
const mode = (opts["mode"] as string) ?? "dev"
const workspace = opts["workspace"] ? resolve(opts["workspace"] as string) : repo
@@ -305,6 +309,7 @@ async function launch() {
if (clean) {
console.log("[launch] Cleaning previous state...")
rmSync(base, { recursive: true, force: true })
if (kilo) rmSync(kilo, { recursive: true, force: true })
}
mkdirSync(userDir, { recursive: true })
@@ -336,6 +341,12 @@ async function launch() {
// Strip Electron/VS Code env vars so the spawned instance doesn't attach
// to the current Electron process (e.g. when launched from a VS Code task).
const env = cleanEnv(process.env)
if (kilo) {
env.XDG_DATA_HOME = join(kilo, "data")
env.XDG_CONFIG_HOME = join(kilo, "config")
env.XDG_STATE_HOME = join(kilo, "state")
env.XDG_CACHE_HOME = join(kilo, "cache")
}
for (const key of Object.keys(env)) {
if (key.startsWith("ELECTRON_") || key.startsWith("VSCODE_")) delete env[key]
}
@@ -344,6 +355,7 @@ async function launch() {
console.log(`[launch] Executable: ${app}`)
console.log(`[launch] Workspace: ${workspace}`)
console.log(`[launch] State: ${base}`)
if (kilo) console.log(`[launch] Kilo state: ${kilo}`)
console.log(`[launch] Accessibility support: ${accessible ? "on" : "off"}`)
if (blocking) {