fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(grok): surface context window usage in the composer - #5405

Open
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window
Open

fix(grok): surface context window usage in the composer#5405
ahmed-besic wants to merge 5 commits into
pingdotgg:mainfrom
ahmed-besic:fix/grok-context-window

Conversation

@ahmed-besic

@ahmed-besicahmed-besic commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What Changed

Grok already reports session context fill and model window size over ACP, but T3 never turned that into the composer context meter that Codex already shows.

This maps:

  • ACP sessionUpdate: "usage_update" (used / size) when present
  • Grok's current path: session/update_meta.totalTokens while streaming, plus availableModels[]._meta.totalContextTokens for the window size
  • Prompt response _meta.totalTokens / _meta.usage as a reliable end-of-turn snapshot

Those become thread.token-usage.updatedcontext-window.updated, which the existing ContextWindowMeter already renders. No new UI components.

Cursor gets a no-op case for the shared TokenUsageUpdated parse event so the ACP union stays exhaustive; wiring makeAcpTokenUsageUpdatedEvent there is the same one-liner once verified against a real Cursor ACP install.

Why

Codex threads show a context ring (used / max / %). Grok threads showed nothing, even though grok agent stdio already streams fill (_meta.totalTokens) and advertises per-model windows (totalContextTokens, e.g. 500k / 200k / 128k). Without the adapter mapping, the meter never got a snapshot.

Live probe against grok 0.2.118: Grok does not emit standard ACP usage_update yet, so this PR supports that path for when it lands and uses the _meta sources that work today.

UI Changes

Uses the existing context window meter in the composer.

  • Before: Grok threads have no context size / fill indicator.
  • After: After the first usage-bearing update (stream meta or prompt result), Grok shows the same ring + used/max tooltip as Codex.

Validation

  • vp test run src/provider/acp/AcpRuntimeModel.test.ts src/provider/acp/AcpCoreRuntimeEvents.test.ts src/provider/acp/GrokAcpSupport.test.ts — 23 passed
  • vp test run src/provider/Layers/GrokAdapter.test.ts — 20 passed
  • Live ACP probe (grok agent stdio): confirmed _meta.totalTokens on session/update, totalContextTokens on models, and prompt _meta.usage; no usage_update from this CLI version yet
  • Meter math from live numbers: e.g. 19,267 / 500,000 ≈ 3.9% used

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (happy to add after a UI smoke against a Grok thread)
  • A video is not applicable (no animation/timing change)

Made by Grok Build via the Grok Build harness while working on T3 Code.


Note

Medium Risk
Touches Grok ACP session event handling and token-usage snapshots that feed the composer meter. Parsing is additive and conservative (positive used tokens, no guessing among multiple windows), but incorrect mapping would show a wrong fill % to users.

Overview
Grok threads now feed the existing composer context meter. The adapter emits thread.token-usage.updated from ACP usage_update (when present), streaming session/update_meta.totalTokens, and prompt-response _meta as an end-of-turn snapshot, enriched with per-model totalContextTokens and compactsAutomatically.

Session context keeps a modelId→window map and last-known max so fill % still works between turns and after model lookup misses. Usage events are allowed after activeTurnId is cleared so the meter can update between turns; interrupted turns are skipped.

Cursor only adds a no-op TokenUsageUpdated case so the shared ACP event union stays exhaustive. UI change is a grokGrok display-name mapping.

Reviewed by Cursor Bugbot for commit 8a491a6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Surface context window usage in the Grok provider composer

  • Adds thread.token-usage.updated event emission to the Grok adapter, fired both during streaming (via ACP session/update notifications) and at the end of each prompt turn from prompt response metadata.
  • Introduces helpers in GrokAcpSupport.ts to extract context window sizes from model metadata, build a modelId→window map, and enrich usage snapshots with maxTokens and compactsAutomatically.
  • Extends AcpRuntimeModel.ts to parse usage_update ACP notifications and _meta fields into TokenUsageUpdated events.
  • Adds makeAcpTokenUsageUpdatedEvent factory in AcpCoreRuntimeEvents.ts for consistent construction of token-usage runtime events across ACP providers.
  • Maps the grok provider string to 'Grok' in contextWindow.ts for correct UI display.

Macroscope summarized 8a491a6.

@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 943c338f-0f2a-40ce-9163-8bef728f6237

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 5, 2026
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new user-facing functionality (context window usage meter in the composer) with ~650 lines of new code, new event types, and new state management. Despite the 'fix' label, this is a feature addition that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Grok reports context fill via session/update _meta.totalTokens and
model windows via availableModels _meta.totalContextTokens, but T3
never mapped these into thread.token-usage.updated. Parse ACP
usage_update and Grok meta, join with the model window, and emit for
the existing ContextWindowMeter. Cursor keeps a no-op case for the
shared event until verified on a real Cursor install.
Used tokens were surfacing without maxTokens, so the meter only showed
"16k" with no limit. Keep a lastKnownMaxTokens from session model meta
and always enrich usage snapshots with that window for used/max fill.
Avoid catalog-coupled and personal custom model ids in unit tests.
Preserve zero-valued token breakdowns from prompt meta, and only fall
back to a sole known model window when resolving the initial max.
@ahmed-besic

Copy link
Copy Markdown
ContributorAuthor

Merged current main. Context-window tests, Grok adapter tests, and server/web typechecks are passing.

@theman6660

Copy link
Copy Markdown

Live check against current Grok ACP: tokenUsageFromGrokPromptMeta should not feed the composer meter.

On a greeting turn:

  • session/update_meta.totalTokens = 1615 (context occupancy)
  • Prompt response usage.totalTokens = 20554 (billed tokens)

If the prompt-response path runs after the notification, the ring jumps to the billed number. Grok still does not send usage_update; occupancy lives on session/update _meta.totalTokens. Window size came from session signals.json (contextWindowTokens: 500000), not from the prompt result.

The rest of the mapping (accept usage_update if it ever lands, plus _meta.totalTokens while streaming) matches what I saw. The prompt-meta snapshot is the part that would show the wrong fill %.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ahmed-besic@theman6660