[BUG] The build 2.1.51 has a hardcoded Linux path (file:///home/runner/work/claude-cli-internal/...) baked into extension.js that crashes createRequire on Windows.
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The build has a hardcoded Linux path (file:///home/runner/work/claude-cli-internal/...) baked into extension.js that crashes createRequire on Windows.
What Should Happen?
The Claude Code VS Code extension (v2.1.51, win32-x64) should activate successfully on Windows. Instead, it fails with:
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'
The extension's extension.js (line 45) contains a hardcoded Linux CI build path that causes Module.createRequire to fail on Windows. The path file:///home/runner/work/... is a GitHub Actions runner path baked into the build artifact, which is invalid on Windows.
Expected: The extension should activate normally and register all commands including claude-vscode.editor.openLast.
Additional context:
OS: Windows 11
VS Code version: (add yours)
Extension version: 2.1.51 (win32-x64)
CLI version: 2.1.51
The vsix file is also missing from the npm package's vendor/ directory
/ide command throws onInstall is not defined
Clean reinstall from marketplace installs the same broken version
Error Messages/Logs
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'
2026-02-24 09:28:18.577 [info] ExtensionService#_doActivateExtension Anthropic.claude-code, startup: false, activationEvent: 'onWalkthrough:claude-code-walkthrough'
2026-02-24 09:28:18.728 [error] Activating extension Anthropic.claude-code failed due to an error:
2026-02-24 09:28:18.728 [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\Onkar\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js:45:4602)
at Module._compile (node:internal/modules/cjs/loader:1714:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1848:10)
at Module.load (node:internal/modules/cjs/loader:1448:32)
at Module._load (node:internal/modules/cjs/loader:1270:12)
Steps to Reproduce
Steps to reproduce:
Install Claude Code CLI via npm on Windows:
npm install -g @anthropic-ai/claude-code@latest
CLI version installed: 2.1.51
Install the VS Code extension:
code --install-extension anthropic.claude-code
Extension version installed: 2.1.51 (win32-x64)
Open VS Code and observe:
Extension shows as "Activating" indefinitely in Developer: Show Running Extensions
No "Claude Code" output channel appears in Output panel
Command claude-vscode.editor.openLast not found in Command Palette
Check Extension Host log (Output → Extension Host):
Extension activation fails with createRequire TypeError referencing Linux CI path
Additional reproduction:
Run claude /ide in terminal → crashes with onInstall is not defined
Check %APPDATA%\npm\node_modules\@anthropic-ai\claude-code\vendor\ → claude-code.vsix file is completely missing, only ripgrep/ folder exists
Uninstalling and reinstalling both CLI and extension reproduces the same error
Environment:
OS: Windows 11
VS Code: (add your version — check Help → About)
Node.js: (add output of node --version)
Claude Code CLI: 2.1.51
Extension: anthropic.claude-code-2.1.51-win32-x64
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.50
Claude Code Version
2.1.51
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
_No response_
4 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Used Claude to Fix Claude, works great.
<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
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.