From 1d930ee7de4029268fb620187202422e18dfd17e Mon Sep 17 00:00:00 2001 From: Bertan Ari Date: Tue, 14 Jul 2026 15:34:29 -0700 Subject: [PATCH 1/3] feat(vscode-lm): add newly-available copilot models to the static manifest Adds four copilot-vendor models discovered via vscode.lm.selectChatModels, each with its enforced single-message input ceiling measured by the documented binary-search probe on VS Code 1.126.0 (largest input the backend actually accepts): claude-sonnet-5 = 925449 (near-full window; older claude rows cap at ~197.9K), gpt-5.6-luna = 199753, gpt-5.6-sol / gpt-5.6-terra = 271785. Values are measured, not inferred: claude-sonnet-5 alone would have been ~4.7x off if copied from claude-sonnet-4.6. Updates the header provenance comment and adds a test asserting the measured literals. --- .../types/src/__tests__/vscode-llm.spec.ts | 12 +++++ packages/types/src/providers/vscode-llm.ts | 52 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/packages/types/src/__tests__/vscode-llm.spec.ts b/packages/types/src/__tests__/vscode-llm.spec.ts index b03a3e0a600..4bd4a5f1c27 100644 --- a/packages/types/src/__tests__/vscode-llm.spec.ts +++ b/packages/types/src/__tests__/vscode-llm.spec.ts @@ -22,6 +22,18 @@ describe("vscodeLlmModels", () => { expect(vscodeLlmModels["gemini-2.5-pro"].maxInputTokens).toBe(108594) }) + it("includes the 2026-07-14 additions with their measured single-message ceilings", () => { + // Measured via single-message binary search on VS Code 1.126.0 (largest input the backend + // accepts). claude-sonnet-5 accepts nearly its full advertised window (925449), unlike the + // older claude rows that cap at ~197.9K — this divergence is exactly why the values are + // measured rather than inferred from a sibling row. + expect(vscodeLlmModels["claude-sonnet-5"].maxInputTokens).toBe(925449) + expect(vscodeLlmModels["claude-sonnet-5"].contextWindow).toBe(925449) + expect(vscodeLlmModels["gpt-5.6-luna"].maxInputTokens).toBe(199753) + expect(vscodeLlmModels["gpt-5.6-sol"].maxInputTokens).toBe(271785) + expect(vscodeLlmModels["gpt-5.6-terra"].maxInputTokens).toBe(271785) + }) + it("keeps both window fields populated and positive for every row", () => { // NOTE: contextWindow and maxInputTokens are intentionally ALLOWED to differ (claude-opus-4.8 // diverges: 679560 vs 197897). The UI reads maxInputTokens, and that divergence is a deliberate diff --git a/packages/types/src/providers/vscode-llm.ts b/packages/types/src/providers/vscode-llm.ts index b00bf4e8daa..9e917f86ef8 100644 --- a/packages/types/src/providers/vscode-llm.ts +++ b/packages/types/src/providers/vscode-llm.ts @@ -18,6 +18,10 @@ export const vscodeLlmDefaultModelId: VscodeLlmModelId = "claude-sonnet-4.5" // - claude-opus-4.7 / 4.6, claude-sonnet-4.6, // gemini-3.1-pro-preview, gemini-3.5-flash: enforced ~197.9K // - gpt-5.5 / gpt-5.4: enforced ~268.4K +// Additions measured 2026-07-14 (VS Code 1.126.0) with the same single-message binary search: +// - claude-sonnet-5: enforced 925449 (near-full window, unlike the older ~197.9K claude rows) +// - gpt-5.6-luna: enforced 199753 +// - gpt-5.6-sol / gpt-5.6-terra: enforced 271785 // Guardrail: these are empirically measured — re-measure (do not hand-tune) if the models change. // See GitHub issue simurg79/Roo-Code#10 and myplans/VSCode LM Model Table Integrity/vscode_lm_opus_data_integrity_design.md. export const vscodeLlmModels = { @@ -69,6 +73,18 @@ export const vscodeLlmModels = { supportsToolCalling: true, maxInputTokens: 167790, }, + "claude-sonnet-5": { + contextWindow: 925449, + supportsImages: true, + supportsPromptCache: false, + inputPrice: 0, + outputPrice: 0, + family: "claude-sonnet-5", + version: "claude-sonnet-5", + name: "Claude Sonnet 5", + supportsToolCalling: true, + maxInputTokens: 925449, + }, "claude-sonnet-4.6": { contextWindow: 197896, supportsImages: true, @@ -105,6 +121,42 @@ export const vscodeLlmModels = { supportsToolCalling: true, maxInputTokens: 135790, }, + "gpt-5.6-luna": { + contextWindow: 199753, + supportsImages: true, + supportsPromptCache: false, + inputPrice: 0, + outputPrice: 0, + family: "gpt-5.6-luna", + version: "gpt-5.6-luna", + name: "GPT-5.6 Luna", + supportsToolCalling: true, + maxInputTokens: 199753, + }, + "gpt-5.6-sol": { + contextWindow: 271785, + supportsImages: true, + supportsPromptCache: false, + inputPrice: 0, + outputPrice: 0, + family: "gpt-5.6-sol", + version: "gpt-5.6-sol", + name: "GPT-5.6 Sol", + supportsToolCalling: true, + maxInputTokens: 271785, + }, + "gpt-5.6-terra": { + contextWindow: 271785, + supportsImages: true, + supportsPromptCache: false, + inputPrice: 0, + outputPrice: 0, + family: "gpt-5.6-terra", + version: "gpt-5.6-terra", + name: "GPT-5.6 Terra", + supportsToolCalling: true, + maxInputTokens: 271785, + }, "gpt-5.5": { contextWindow: 268426, supportsImages: true, From c3255ccbde0e82b32a0c28069eb4b6170afaf450 Mon Sep 17 00:00:00 2001 From: Bertan Ari Date: Tue, 14 Jul 2026 15:39:44 -0700 Subject: [PATCH 2/3] chore: bump version to 3.53.3 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 420be82a1bd..5ed4ab6ed15 100644 --- a/src/package.json +++ b/src/package.json @@ -3,7 +3,7 @@ "displayName": "%extension.displayName%", "description": "%extension.description%", "publisher": "RooVeterinaryInc", - "version": "3.53.2", + "version": "3.53.3", "icon": "assets/icons/icon.png", "galleryBanner": { "color": "#617A91", From 922db52fdf24fd102fbf4056f33b0136b60ea0ee Mon Sep 17 00:00:00 2001 From: Bertan Ari Date: Tue, 28 Jul 2026 08:20:01 -0700 Subject: [PATCH 3/3] feat(vscode-lm): add claude-opus-5 and gemini-3.6-flash copilot model rows Captured from VS Code's chat.cachedLanguageModels model-picker cache; both rows carry the advertised 935793 window for contextWindow and maxInputTokens since no binary search has been run yet. Adds spec assertions covering the new rows and the excluded pseudo-models. --- .../types/src/__tests__/vscode-llm.spec.ts | 12 ++++++++ packages/types/src/providers/vscode-llm.ts | 29 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/packages/types/src/__tests__/vscode-llm.spec.ts b/packages/types/src/__tests__/vscode-llm.spec.ts index 4bd4a5f1c27..9c5b17e1ba6 100644 --- a/packages/types/src/__tests__/vscode-llm.spec.ts +++ b/packages/types/src/__tests__/vscode-llm.spec.ts @@ -34,6 +34,15 @@ describe("vscodeLlmModels", () => { expect(vscodeLlmModels["gpt-5.6-terra"].maxInputTokens).toBe(271785) }) + it("includes the 2026-07-26 model-picker-cache additions at their advertised windows", () => { + // Sourced from `chat.cachedLanguageModels` in User/globalStorage/state.vscdb; not yet + // binary-searched, so both fields carry the advertised value exactly as captured. + expect(vscodeLlmModels["claude-opus-5"].maxInputTokens).toBe(935793) + expect(vscodeLlmModels["claude-opus-5"].contextWindow).toBe(935793) + expect(vscodeLlmModels["gemini-3.6-flash"].maxInputTokens).toBe(935793) + expect(vscodeLlmModels["gemini-3.6-flash"].contextWindow).toBe(935793) + }) + it("keeps both window fields populated and positive for every row", () => { // NOTE: contextWindow and maxInputTokens are intentionally ALLOWED to differ (claude-opus-4.8 // diverges: 679560 vs 197897). The UI reads maxInputTokens, and that divergence is a deliberate @@ -52,6 +61,9 @@ describe("vscodeLlmModels", () => { expect(vscodeLlmModels).not.toHaveProperty("claude-opus-4.7-high") expect(vscodeLlmModels).not.toHaveProperty("claude-3.5-sonnet") expect(vscodeLlmModels).not.toHaveProperty("claude-4-sonnet") + expect(vscodeLlmModels).not.toHaveProperty("auto") + expect(vscodeLlmModels).not.toHaveProperty("copilot-utility") + expect(vscodeLlmModels).not.toHaveProperty("copilot-utility-small") }) it("defaults to a model id that exists in the table", () => { diff --git a/packages/types/src/providers/vscode-llm.ts b/packages/types/src/providers/vscode-llm.ts index 9e917f86ef8..e3c5b01d031 100644 --- a/packages/types/src/providers/vscode-llm.ts +++ b/packages/types/src/providers/vscode-llm.ts @@ -22,9 +22,26 @@ export const vscodeLlmDefaultModelId: VscodeLlmModelId = "claude-sonnet-4.5" // - claude-sonnet-5: enforced 925449 (near-full window, unlike the older ~197.9K claude rows) // - gpt-5.6-luna: enforced 199753 // - gpt-5.6-sol / gpt-5.6-terra: enforced 271785 +// Additions sourced 2026-07-26 from the Copilot model-picker cache (`chat.cachedLanguageModels` in +// VS Code's User/globalStorage/state.vscdb), which persists the metadata `selectChatModels` returns: +// - claude-opus-5 / gemini-3.6-flash: advertised 935793, NOT yet binary-searched +// Those two rows carry the advertised value exactly as captured; re-measure by binary search and +// correct them if the backend turns out to enforce a lower ceiling. // Guardrail: these are empirically measured — re-measure (do not hand-tune) if the models change. // See GitHub issue simurg79/Roo-Code#10 and myplans/VSCode LM Model Table Integrity/vscode_lm_opus_data_integrity_design.md. export const vscodeLlmModels = { + "claude-opus-5": { + contextWindow: 935793, + supportsImages: true, + supportsPromptCache: false, + inputPrice: 0, + outputPrice: 0, + family: "claude-opus-5", + version: "claude-opus-5", + name: "Claude Opus 5", + supportsToolCalling: true, + maxInputTokens: 935793, + }, "claude-opus-4.8": { contextWindow: 679560, supportsImages: true, @@ -229,6 +246,18 @@ export const vscodeLlmModels = { supportsToolCalling: true, maxInputTokens: 12078, }, + "gemini-3.6-flash": { + contextWindow: 935793, + supportsImages: true, + supportsPromptCache: false, + inputPrice: 0, + outputPrice: 0, + family: "gemini-3.6-flash", + version: "gemini-3.6-flash", + name: "Gemini 3.6 Flash", + supportsToolCalling: true, + maxInputTokens: 935793, + }, "gemini-3.1-pro-preview": { contextWindow: 197897, supportsImages: true,