[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
Workaround ✓ Mentioned in thread ↓
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
- Install the Claude Code extension v2.1.51 on Windows via VS Code marketplace
- Open VS Code
- Open the Claude Code sidebar (claudeVSCodeSidebarSecondary)
- Sidebar shows infinite loading — extension never activates
- 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_
4 Comments
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
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:
CMD:
What it does: Replaces the hardcoded Linux CI build path in
extension.jswith__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:
CMD:
What it does: Replaces the remaining hardcoded CI path used to locate the
claudeCLI binary with a runtime lookup viawhere.exe(Windows) orwhich(Unix).---
Then reload VS Code after each fix:
Ctrl+Shift+P→Developer: Reload WindowJust resued the answer from @StealUrKill since I can't run ps1 script on the current machine
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?
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.