feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg
, '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

feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg
, '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

feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg
, '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

feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg
, '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

feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg
, '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

feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg
, '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

feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg
, '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

feat(usage): include Grok Build in the usage view - #6051

Closed
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build
Closed

feat(usage): include Grok Build in the usage view#6051
EliasofIX wants to merge 5 commits into
pingdotgg:mainfrom
EliasofIX:feat/usage-grok-build

Conversation

@EliasofIX

@EliasofIXEliasofIX commented Aug 10, 2026

Copy link
Copy Markdown

Summary

The usage page only scanned Claude Code and Codex session transcripts, so Grok Build work never showed up even though sessions under ~/.grok already carry per-turn token and cost data.

This adds Grok as a third usage provider end to end:

  • Parse turn_completed usage from Grok updates.jsonl (per-model modelUsage, cache breakdown, costUsdTicks at 10^10 ticks per USD)
  • Scan $GROK_HOME/sessions (default ~/.grok/sessions), restricted to updates.jsonl so large chat/events logs stay out of the cold path
  • Surface Grok Build in the web and mobile usage charts/labels
  • Bump the usage contract version for the new provider kind

Test plan

  • Open Usage after pairing a local server that has Grok sessions in ~/.grok
  • Confirm Grok Build appears in the provider split, daily chart, and model table
  • Confirm Claude/Codex totals still match the previous behavior
  • vp test run apps/server/src/usage/usageTranscripts.test.ts

Made with Grok Build (xAI).


Note

Medium Risk
New transcript parsing and cost pro-rating logic could mis-attribute tokens or dollars for edge-case Grok logs, but changes are confined to usage scanning/aggregation with broad test coverage and a contract version bump for older clients.

Overview
Grok Build is added as a third usage provider alongside Claude Code and Codex, so local Grok sessions under ~/.grok (or GROK_HOME) show up on the usage page.

The server scans ~/.grok/sessions/**/updates.jsonl only—skipping large chat_history / events logs—and parses turn_completed lines into per-model usage records with cache breakdowns and costUsdTicks converted to USD (10¹⁰ ticks per dollar). Multi-model turns get pro-rated cost when per-model ticks are missing or only partially reported. The usage contract adds grok to UsageProviderKind and bumps USAGE_CONTRACT_VERSION to 5; the scan cache accepts grok entries.

Web and mobile usage UI gain Grok Build labels, chart bands, icons, and theme-aware colors; the time breakdown table’s empty-state colSpan follows PROVIDER_ORDER so a third provider column doesn’t break layout.

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

Note

Add Grok Build as a provider in the usage view

  • Adds a parseGrokLine function in usageTranscripts.ts that parses Grok updates.jsonl session logs into per-model UsageRecord entries with cost tick-to-USD conversion and pro-rated cost attribution.
  • Extends the server-side usage scanner in UsageService.ts to discover Grok sessions via $GROK_HOME or ~/.grok, filtering to updates.jsonl files only.
  • Adds "grok" to UsageProviderKind and bumps the contract version from 4 to 5 in usage.ts.
  • Updates mobile and web UI provider registries to display Grok Build with a label, color, and icon in charts and tables.
  • Fixes the empty-state table colspan in UsagePage.tsx to compute dynamically from PROVIDER_ORDER.length instead of a hardcoded value.

Macroscope summarized 4c7a276.

@coderabbitai

coderabbitaiBot commented Aug 10, 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: 768538bd-fb54-4ea7-ae9f-9a73bed604b0

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 10, 2026
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature adding Grok Build as a third usage provider with substantial new parsing logic, contract version bump, and new user-facing behavior. New feature integrations warrant human review.

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

@EliasofIXEliasofIX left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submitting pending review so follow-up fix replies can land on the nits below.

Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
Comment threadapps/web/src/components/usage/usageProviders.ts Outdated
Comment threadapps/server/src/usage/usageTranscripts.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0d56431a655d962959d1899e171ec784c5b3c311. Configure here.

Comment threadapps/server/src/usage/usageTranscripts.ts
Comment threadapps/server/src/usage/usageTranscripts.ts Outdated
The usage page only scanned Claude and Codex transcripts, so Grok sessions
never appeared. Parse Grok `updates.jsonl` turn_completed usage (including
per-model breakdowns and cost ticks), surface it as a third provider on web
and mobile, and bump the usage contract for the new provider kind.
Adding Grok to PROVIDER_ORDER left the day-table empty row spanning 5
columns instead of 6, and the chart unit test still expected only two
provider bands. Derive the empty-state colspan from PROVIDER_ORDER and
assert the zero-filled Grok band.
Cover the no-modelUsage fallback in tests, pro-rate multi-model provider
cost ticks when only the aggregate reports cost, and tweak web Grok chart
color for better contrast.
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

I am closing this because #8358 has landed in main and covers the same Grok historical usage reporting. I checked the current implementation and did not find any remaining change from this PR that we still need to merge.

Thank you for putting this together. The closure is only because the work is now covered elsewhere, not because there was a problem with your contribution.

@t3dotggt3dotgg closed this Aug 27, 2026
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

@EliasofIX@t3dotgg