Repository navigation
[Bug]: Unknown-model warning flood (claude-opus-5-5) crashes the VS Code window with OOM on Windows (v2.4.0) #122
Description
Preflight checklist
- I searched existing issues. The closest are Extension causes high cpu load #99 (high CPU) and the open PR perf: report an unknown model once, not once per priced record (#99) #120 (report an unknown model once). This report adds what the warning flood does to VS Code itself on Windows: it crashes the window and exhausts system memory.
- Version below (2.4.0, latest Marketplace release).
What happened?
For about a week, the VS Code window kept crashing with renderer process gone (reason: oom, code: -536870904), each time followed by an extension-host crash. It happened three times in a single evening. Other applications crashed at the same moment (Chrome), and copy/paste froze for minutes, while Task Manager still showed several GB of free RAM.
What I measured on the live machine:
- The unknown model.
getModelPricingdoes not knowclaude-opus-5-5(the table hasclaude-opus-5). It therefore falls through toinferPricingByFamilyand callsconsole.warn("Unknown model: claude-opus-5-5, using … pricing as fallback")for every priced record. My history has about 50,000 Opus 5.5 records. A refresh prices them more than once, becausegetBranchBreakdownandgetWorkflowBreakdownboth callcalculateUsageData. - VS Code forwards the warnings. Every
console.*call made in the extension host is forwarded to the window renderer (_handleConsoleCall→ RPC →MessagePort.postMessage). Batches larger than Mojo's 64 KB inline limit travel in shared-memory sections. - The renderer cannot keep up. Its
Sectionhandles climb in bursts: +30,000 in 5 s, up to about 270,000. They pin 10–30 GB of pagefile-backed commit that shows up in no process's private bytes. - Out of memory. Once commit reaches the limit, the renderer is killed and every allocation on the machine starts failing.
Evidence (Windows 11 build 26200, 15.4 GB RAM):
-
Extension-host CPU profile during a burst (10 s, 1 ms sampling, taken through the host's inspector). 73.7% of samples have a
growthjack.claude-code-usage-2.4.0frame on the stack. 54% of self time is nativepostMessage. The dominantpostMessagestacks:postMessage < send < _remoteCall < _handleConsoleCall < getModelPricing (pricing.js:435) < calculateCostBreakdown (pricing.js:553) < calculateUsageData (dataLoader.js:1097) < getBranchBreakdown (dataLoader.js:2740) | getWorkflowBreakdown (dataLoader.js:2210) < updateClaudeUsageIndex (claudeIncrementalIndex.js:1904) -
CPU during bursts. The extension host ran at 130–190%, the workbench renderer at 200% or more, and the webview renderer stayed idle.
-
Renderer handle breakdown, about 8 minutes after a window reload. 84,460 of its 84,545 handles were
Sectionobjects, holding about 10 GB of pagefile-backed memory; the largest single section was 12.7 MB. -
Windows event log. Windows logged 14 Resource-Exhaustion-Detector 2004 events (low virtual memory) in 5 days. The first one came about 5 hours after the auto-update to 2.4.0 on 2026-09-25, as Opus 5.5 records were piling up.
What did you expect instead?
An unknown model should be reported once, which is what PR #120 does. claude-opus-5-5 should also be priced without a warning, either as a table entry or through a claude-opus-5-* prefix match before the family fallback.
Steps to reproduce
- On Windows, have a Claude Code history with many records from a model that is missing from the pricing table. Here that was
claude-opus-5-5: about 50k records in about 1.2 GB of JSONL. - Keep a Claude Code session active, so that transcripts change and the index refreshes.
- Watch the handle count of the VS Code window renderer (Task Manager → Details → Handles column). It jumps by tens of thousands within seconds on each refresh, and commit charge follows.
Extension version
2.4.0
Claude Code version
2.1.284, then 2.1.285 (VS Code extension)
VS Code version
1.139.1 (commit 04c0d99f4f)
Operating system
Windows 11 Pro 25H2 (build 26200)
Model / proxy setup
Native Anthropic (Claude Code, Opus 5.5 with 1M context)
Diagnostic logs
Not captured: the window was crashing every few minutes. The CPU profile above was taken during a burst instead.
Anything else?
- Why this is worse than a CPU cost. Extension console output is not free in VS Code: each call crosses the process boundary to the renderer. A warning written once per record becomes hundreds of thousands of IPC messages per refresh. On a 16 GB machine, that is enough to take down the whole window.
- Suggestions:
- ship perf: report an unknown model once, not once per priced record (#99) #120 in a patch release;
- add
claude-opus-5-5, or a prefix match; - send throttled diagnostics to the extension's own output channel rather than to
console.
- Workaround until then: disable the extension.
- Possibly the same renderer signature (unconfirmed) in VS Code renderer causes severe memory/commit leak while idle, eventually freezing Windows microsoft/vscode#332836 (Windows, renderer at about 122k handles, commit going from 18 to 36 GB in 11 minutes) and Window renderer killed by macOS for Mach port exhaustion (EXC_RESOURCE PORTS), still on 1.139.1 microsoft/vscode#338196 (macOS, workbench renderer killed for Mach port exhaustion during long Claude Code sessions).
Activity
github-actions commentedon Sep 29, 2026
🤖 Automated first-pass reply
TL;DR: Treat this as two connected fixes: stop pricing
claude-opus-5-5through the unknown-model fallback, and make any remaining unknown-model diagnostic one-time/throttled rather than per-record. The current Anthropic table insrc/pricing.tsalready hasclaude-opus-5but notclaude-opus-5-5, so the direct fix is a pricing entry or prefix match.Analysis
src/pricing.tsshows the exact Anthropic table has'claude-opus-5': OPUS_CURRENTbut noclaude-opus-5-5entry. The Bedrock resolver already matches anyclaude-opus-5*vianame.includes('claude-opus-5'), so the Anthropic path is the gap.getModelPricing()/inferPricingByFamily()callingconsole.warn()in the fallback path; the source excerpt does not include those functions, but the table gap is visible.claude-opus-5-5resolve directly toOPUS_CURRENTinstead of entering the warning path.AGENTS.mdrequires explicit privacy review for diagnostic changes and says diagnostic output lives undersrc/extension.ts.Suggested next step(s)
claude-opus-5-5: OPUS_CURRENTtoMODEL_PRICINGinsrc/pricing.tsand a red-green test insrc/test/pricing.test.tsasserting it resolves without falling into the unknown-model path. Consider aclaude-opus-5-*prefix match before the family fallback to cover future point releases.console; confirm this against the existing diagnostic ownership insrc/extension.ts.claude-opus-5-5, this issue is not fully fixed by perf: report an unknown model once, not once per priced record (#99) #120 alone.🤖 Generated by DeepSeek as an automated first pass — not a maintainer decision.
Carl723000 commentedon Sep 30, 2026
Thank you @jordanvalnet for the detailed Windows profiling, and @rsyuzyov for the targeted fix in #120.
We have confirmed the repeated-warning path and implemented a fix targeted for v2.4.1, the next patch release:
The repeated-record and model-churn regressions pass. The current fix set also passes 1,152 Node tests and 182 browser UI tests. It is in final review and is not yet available on Marketplace.
These tests verify the source warning amplification is removed; they do not prove the Windows-native handle/commit-memory regression is resolved. We are keeping this issue open for validation of the released patch against the reported environment.
Until that update is available, disabling Claude Code Usage is the safest temporary workaround for anyone seeing the same warning flood or crashes. Please do not upload conversation logs or credentials; anonymous diagnostics and a redacted CPU profile are sufficient if further evidence is needed.
🤖 Generated with OpenAI Codex
Carl723000 commentedon Oct 5, 2026
Thank you @jordanvalnet for the detailed Windows evidence, and @rsyuzyov for #120. v2.4.1 is now available on VS Code Marketplace; the publish workflow and public version listing both confirm delivery.
The patch removes the reported per-record pricing-warning amplification:
claude-opus-5-5resolves to its own explicit pricing entry, including cache/TTL rates, without an unknown-model warning.The repeated-record/model-churn regressions and release CI pass. We have not reproduced your Windows-native Section-handle/commit-memory scenario, so source tests are not proof that every renderer OOM is resolved.
Could you confirm the installed extension is 2.4.1 and retest in the same Windows environment, checking whether warning bursts, handle growth and crashes stop? If they persist, please share anonymous diagnostics and a redacted profile rather than raw conversation logs, credentials or personal paths. We will keep this issue open pending that released-version validation.
🤖 Generated with OpenAI Codex
Carl723000 commentedon Oct 15, 2026
Released-version follow-up: 2.5.0 is now public. It retains the explicit Opus 5.5 pricing and lifetime-bounded unknown-model diagnostics shipped in 2.4.1, and adds the separately identified large-history stack-overflow fix in #126/#131.
The warning-flood source path has regression coverage, but neither the new release nor green source tests prove that your Windows-native Section-handle/commit-memory crash is resolved. Keeping this issue open for validation in the reported environment.
If you choose to retest, please confirm the installed version is 2.5.0 and whether the repeated warnings, handle growth and crashes still occur. Anonymous diagnostics and a redacted profile are enough; do not share conversation logs, credentials or personal paths. If it is still unstable, please disable the extension to protect your work.
🤖 Generated by OpenAI Codex as an automated first pass — not a maintainer decision.