VS Code extension v2.1.51 fails to activate on Windows - hardcoded Linux CI paths in extension.js
Status Fixed / completed
Reported on v2.1.51
Maintainer reply None cached
Workaround ✓ Mentioned in description ↑
Activity 5 comments · opened Feb 24, 2026 · closed Feb 24, 2026
Bug description
The Claude Code VS Code extension (v2.1.51, win32-x64) fails to activate on Windows with the following error:
TypeError: The argument 'filename' must be a file URL object, file URL string, or absolute path string.
Received 'file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs'
at Module.createRequire (node:internal/modules/cjs/loader:1915:13)
at Object.<anonymous> (c:\Users\admin\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js:45:4602)
This causes all commands (e.g. claude-vscode.editor.openLast) to be reported as "command not found".
Root cause
extension.js contains 3 hardcoded Linux CI paths from the build environment:
createRequire("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs")Ye("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs")__dirname="/home/runner/work/claude-cli-internal/claude-cli-internal/packages/claude-vscode/src/extension"
On Windows, Node.js Module.createRequire rejects this Linux-style file:/// URL, crashing the extension during activation.
Workaround
Replace the hardcoded paths in extension.js:
"file:///home/runner/work/.../sdk.mjs"→require("url").pathToFileURL(module.filename).href"/home/runner/work/.../src/extension"→require("path").dirname(module.filename)
Environment
- VS Code: 1.109.5 (x64)
- Extension: anthropic.claude-code v2.1.51 (win32-x64)
- OS: Windows 10 Pro 10.0.19045
- Claude CLI: 2.1.51
5 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
I just had it make a powershell so i did not have to dig through it lol
<img width="232" height="217" alt="Image" src="https://github.com/user-attachments/assets/f40b30da-23e8-4174-bf99-da8ba0a5b9fe" />
```# fix-claude-code-extension.ps1
#
Fixes Claude Code VSCode extension activation failure on Windows.
#
Error:
Activating extension 'Anthropic.claude-code' failed:
The argument 'filename' must be a file URL object, file URL string,
or absolute path string. Received 'file:///home/runner/work/...'
#
Root cause:
The extension bundle contains two hardcoded Linux CI build paths
(file:///home/runner/work/...). On Windows, Node.js rejects these
URLs in fileURLToPath() because they have no Windows drive letter.
This crashes the extension immediately at activation.
#
What this script patches:
Fix 1 - createRequire call: crashes at activation time
.createRequire("file:///home/runner/.../sdk.mjs")
-> .createRequire(__filename) (use actual file path instead)
#
Fix 2 - path resolution call: crashes when agent SDK is invoked
SomeFunc("file:///home/runner/.../sdk.mjs")
-> inline child_process lookup for the claude CLI on PATH
#
Usage:
Right-click -> "Run with PowerShell"
OR from a PowerShell prompt: .\fix-claude-code-extension.ps1
$ErrorActionPreference = "Stop"
$extensionRoot = "$env:USERPROFILE\.vscode\extensions"
$badUrl = 'file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs'
---- Regex patterns (stable across minified versions) ----
Fix 1: .createRequire("file:///home/...sdk.mjs")
The method name createRequire is stable even in minified code.
$pattern1 = '\.createRequire\("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk\.mjs"\)'
$replacement1 = '.createRequire(__filename)'
Fix 2: anyMinifiedName("file:///home/...sdk.mjs")
After fix 1 removes the createRequire case, any remaining call
with this URL is the fileURLToPath wrapper (Ye or similar).
Replace it with an inline lookup that finds the claude CLI on PATH.
$pattern2 = '[a-zA-Z_$][a-zA-Z0-9_$]*\("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk\.mjs"\)'
$replacement2 = '(function(){try{return(require("child_process").spawnSync(process.platform==="win32"?"where.exe":"which",["claude"],{encoding:"utf8"}).stdout||"").split(/[\r\n]+/).filter(Boolean)[0]}catch(e){}})()'
---- Find extension directories ----
if (-not (Test-Path $extensionRoot)) {
Write-Host "VSCode extensions directory not found: $extensionRoot" -ForegroundColor Red
exit 1
}
$dirs = Get-ChildItem $extensionRoot -Directory | Where-Object { $_.Name -like 'anthropic.claude-code-*' }
if ($dirs.Count -eq 0) {
Write-Host "No Claude Code extension found in: $extensionRoot" -ForegroundColor Yellow
exit 1
}
Write-Host "Found $($dirs.Count) Claude Code extension(s):`n"
foreach ($dir in $dirs) {
$label = $dir.Name
$file = Join-Path $dir.FullName 'extension.js'
if (-not (Test-Path $file)) {
Write-Host "[$label] extension.js not found, skipping" -ForegroundColor Yellow
continue
}
$content = [System.IO.File]::ReadAllText($file, [System.Text.Encoding]::UTF8)
if ($content.IndexOf($badUrl) -lt 0) {
Write-Host "[$label] Not affected (bad URL not found) - already patched or different version" -ForegroundColor Green
continue
}
# Count occurrences before patching
$count = ([regex]::Matches($content, [regex]::Escape($badUrl))).Count
Write-Host "[$label] Found $count occurrence(s) of the bad CI path. Patching..." -ForegroundColor Cyan
# Backup original
$backup = "$file.bak"
Copy-Item $file $backup
Write-Host "[$label] Backup saved -> extension.js.bak"
# Apply Fix 1: createRequire
$patched = [regex]::Replace($content, $pattern1, $replacement1)
$fix1count = $count - ([regex]::Matches($patched, [regex]::Escape($badUrl))).Count
Write-Host "[$label] Fix 1 (createRequire): replaced $fix1count occurrence(s)"
# Apply Fix 2: fileURLToPath wrapper
$patched2 = [regex]::Replace($patched, $pattern2, $replacement2)
$fix2count = ([regex]::Matches($patched, [regex]::Escape($badUrl))).Count `
Write-Host "[$label] Fix 2 (path resolver): replaced $fix2count occurrence(s)"
# Verify no bad URLs remain
$remaining = ([regex]::Matches($patched2, [regex]::Escape($badUrl))).Count
if ($remaining -gt 0) {
Write-Host "[$label] WARNING: $remaining occurrence(s) still remain after patching!" -ForegroundColor Yellow
}
# Write patched file
[System.IO.File]::WriteAllText($file, $patched2, [System.Text.Encoding]::UTF8)
Write-Host "[$label] Patched successfully" -ForegroundColor Green
Write-Host ""
}
Write-Host "Done. Reload VSCode to apply: Ctrl+Shift+P -> 'Developer: Reload Window'" -ForegroundColor White
downgrade to version 2.0 by downloading the .vsix file
Hi, sorry about the disruption. We just published v2.1.52 which should hopefully work better.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.