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
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:

  1. createRequire("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs")
  2. Ye("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs")
  3. __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

View original on GitHub ↗

5 Comments

github-actions[bot] · 6 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/28054
  2. https://github.com/anthropics/claude-code/issues/28056
  3. https://github.com/anthropics/claude-code/issues/28072

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

StealUrKill · 6 months ago

I just had it make a powershell so i did not have to dig through it lol

PS C:\Users\HSS> powershell.exe -ExecutionPolicy Bypass -File .\fix-claude-code-extension.ps1 Found 1 Claude Code extension(s): [anthropic.claude-code-2.1.51-win32-x64] Found 2 occurrence(s) of the bad CI path. Patching... [anthropic.claude-code-2.1.51-win32-x64] Backup saved -> extension.js.bak [anthropic.claude-code-2.1.51-win32-x64] Fix 1 (createRequire): replaced 1 occurrence(s) [anthropic.claude-code-2.1.51-win32-x64] Fix 2 (path resolver): replaced 1 occurrence(s) [anthropic.claude-code-2.1.51-win32-x64] Patched successfully Done. Reload VSCode to apply: Ctrl+Shift+P -> 'Developer: Reload Window'

<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 `

  • ([regex]::Matches($patched2, [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

rakib-hasan17 · 6 months ago

downgrade to version 2.0 by downloading the .vsix file

shawnm-anthropic · 6 months ago

Hi, sorry about the disruption. We just published v2.1.52 which should hopefully work better.

github-actions[bot] · 6 months ago

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.