[BUG] TypeError: createRequire fails with hardcoded Linux path on Windows — extension fails to activate (v2.1.51)

Status Fixed / completed
Reported on v2.1.51
Maintainer reply None cached
Activity 4 comments · opened Feb 24, 2026 · closed Feb 24, 2026

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 VS Code extension (v2.1.51, win32-x64) fails to activate on Windows. The sidebar shows an infinite loading state with no error surfaced to the user.

The extension.js bundle contains a hardcoded Linux CI build path that is invalid on Windows, causing the extension host to throw immediately on load.

What Should Happen?

The extension should activate successfully and the Claude Code sidebar should load normally on Windows.

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'
    at Module.createRequire (node:internal/modules/cjs/loader:1915:13)
    at Object.<anonymous> (C:\Users\<username>\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js:45:4602)

Steps to Reproduce

  1. Install the Claude Code extension v2.1.51 on Windows via VS Code marketplace
  2. Open VS Code
  3. Open the Claude Code sidebar (claudeVSCodeSidebarSecondary)
  4. Sidebar shows infinite loading — extension never activates
  5. Open Help > Toggle Developer Tools > Console to see the TypeError above

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

v2.1.51

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

VS Code integrated terminal

Additional Information

_No response_

View original on GitHub ↗

4 Comments

StealUrKill · 7 months ago

Used Claude to Fix Claude, works great.

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

Velvetbin · 7 months ago

Workaround for v2.1.51 Windows activation failure

Until a fix is released, apply these patches manually (no admin required).

---

Fix 1 — Extension activation (sidebar not loading)

PowerShell:

$f="$env:USERPROFILE\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js";$c=[IO.File]::ReadAllText($f);[IO.File]::WriteAllText($f,$c.Replace('.createRequire("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs")','.createRequire(__filename)'))

CMD:

powershell -Command "$f='%USERPROFILE%\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js';$c=[IO.File]::ReadAllText($f);[IO.File]::WriteAllText($f,$c.Replace('.createRequire(\"file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs\")','.createRequire(__filename)'))"

What it does: Replaces the hardcoded Linux CI build path in extension.js with __filename, which resolves correctly on Windows.

---

Fix 2 — Agent SDK invocation (extension loads but fails when used)

Apply this after Fix 1 if the extension activates but fails when sending a message.

PowerShell:

$f="$env:USERPROFILE\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js";$c=[IO.File]::ReadAllText($f);$c2=[regex]::Replace($c,'[a-zA-Z_$][a-zA-Z0-9_$]*\("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk\.mjs"\)','(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){}}())');[IO.File]::WriteAllText($f,$c2)

CMD:

powershell -Command "$f='%USERPROFILE%\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js';$c=[IO.File]::ReadAllText($f);$c2=[regex]::Replace($c,'[a-zA-Z_$][a-zA-Z0-9_$]*\(\"file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk\.mjs\"\)','(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){}}())');[IO.File]::WriteAllText($f,$c2)"

What it does: Replaces the remaining hardcoded CI path used to locate the claude CLI binary with a runtime lookup via where.exe (Windows) or which (Unix).

---

Then reload VS Code after each fix: Ctrl+Shift+P → Developer: Reload Window

Just resued the answer from @StealUrKill since I can't run ps1 script on the current machine

scorpfromhell · 7 months ago

The workaround is working. Thank you so much.

Will I need to do anything extra, like to remove the workaround, when the next release hits?

github-actions[bot] · 7 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.