feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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(server): Grok Build effort, auth, rewind, and usage [WIP - for content] - #6383

Closed
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps
Closed

feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content]#6383
t3dotgg wants to merge 3 commits into
mainfrom
t3code/audit-grok-build-gaps

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 12, 2026

Copy link
Copy Markdown
Member

Grok Build already exposes reasoning effort, login state, rewind, and token usage. T3 ignored all of that. You could not pick effort, a logged-out CLI still looked ready, and model changes forced a new thread.

T3 now reads the live Grok effort menu from ACP model _meta, sends session/set_model with _meta.reasoningEffort, and lets you change model or effort on the current thread. ACP login failures show as unauthenticated. Conversation rollback uses _x.ai/rewind. Prompt usage is emitted as thread.token-usage.updated. There is a Grok user guide.

Made with Grok 4.6.


Note

Medium Risk
Changes Grok session lifecycle (model/effort switching, rewind mutating provider and in-memory turns) and auth probing; scope is Grok-only but rollback and turn trimming affect conversation integrity if mis-targeted.

Overview
Wires Grok Build into capabilities the CLI already exposes but T3 previously ignored: reasoning effort, login state, conversation rewind, and per-prompt token usage.

Reasoning & models: Effort menus come from ACP model _meta; the composer gets a Reasoning option (with fallbacks when discovery is thin). Selection is applied via session/set_model with _meta.reasoningEffort, optional --reasoning-effort at spawn, and in-thread model/effort changes (requiresNewThreadForModelChange is now false). Effort is not carried across a model switch unless explicitly requested.

Runtime behavior: After each prompt, usage from Grok metadata is published as thread.token-usage.updated. rollbackThread calls _x.ai/rewind/points / _x.ai/rewind/execute and trims local turn history. Provider status distinguishes unauthenticated Grok from other ACP failures and surfaces API-key vs session auth when discovery succeeds.

Supporting changes:setSessionModel accepts optional _meta; the ACP mock agent simulates rewind, usage, and effort metadata for tests. User docs add providers-grok.md; default text model for Grok is grok-build.

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

Note

Add Grok Build reasoning effort, auth detection, rewind, and token usage support

  • Adds reasoning effort selection to Grok sessions: the spawned CLI receives a --reasoning-effort flag, model capabilities expose a Reasoning selector, and applyGrokAcpModelSelection can switch effort without changing model.
  • Implements rollbackThread for Grok using the _x.ai/rewind ACP extension: fetches rewind points, selects a target by turn count, executes the rewind, and trims in-memory turns.
  • Extracts token usage from prompt _meta and publishes thread.token-usage.updated events after each turn.
  • Auth detection in checkGrokProviderStatus now distinguishes API key vs. session auth and surfaces unauthenticated on ACP auth failures via isGrokAcpAuthFailure.
  • Sets requiresNewThreadForModelChange to false and defaults the Grok provider model to grok-build.
  • Adds a user-facing providers-grok.md guide covering login, model selection, reasoning effort, and troubleshooting.

Macroscope summarized 39ed592.

Grok already advertised reasoning effort and rewind over ACP. T3 dropped the metadata and forced a new thread for model changes.
Map the live effort menu into composer options, send session/set_model _meta.reasoningEffort, probe login, roll back turns through _x.ai/rewind, and emit thread token usage.
Made with Grok 4.6.
@t3dotggt3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitaiBot commented Aug 12, 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: 22ccb553-a164-4214-8cfb-1cc0715b492f

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:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 12, 2026
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actionsBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 39ed592.

This comment will update automatically after the next completed run.

Comment threadapps/server/src/provider/acp/GrokAcpSupport.ts
Comment threadapps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment threadapps/server/src/provider/acp/XAiAcpExtension.ts Outdated
exactOptionalPropertyTypes rejected passing string | undefined into the optional effort fields, which also leaked unknown into the adapter Effect error channel.
Made with Grok 4.6.
Do not carry an old effort onto a new model. Count steered prompts when rewinding. Lock rollback against a replaced session. Keep one default effort in the composer menu.
Made with Grok 4.6.
Comment on lines +266 to +268
if (advertised.includes(requested)) {
return requested;
}

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.

🟡 Mediumacp/GrokAcpSupport.ts:266

requestedGrokReasoningEffort discards every requested effort when advertised is empty, so the UI's selected value is not passed to either the initial --reasoning-effort spawn or session/set_model. The adapter intentionally calls this with [] before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

Suggested change
if(advertised.includes(requested)){
returnrequested;
}
if(advertised.length===0||advertised.includes(requested)){
returnrequested;
}
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around lines 266-268:
`requestedGrokReasoningEffort` discards every requested effort when `advertised` is empty, so the UI's selected value is not passed to either the initial `--reasoning-effort` spawn or `session/set_model`. The adapter intentionally calls this with `[]` before discovery, and fallback capabilities can also be shown without a session menu; accept the requested value when the advertisement is empty, while still validating it when choices are available.

const choices = [...unique.values()];
const current = trimmedString(meta.reasoningEffort);
const defaultId = current ?? choices.find((choice) => choice.isDefault)?.id;
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;

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.

🟡 Mediumacp/GrokAcpSupport.ts:205

parseGrokAcpModelMeta reports supportsReasoningEffort: true when _meta.supportsReasoningEffort is true but reasoningEfforts is empty, so GrokProvider calls grokReasoningEffortCapabilities([]) and exposes no Reasoning selector instead of using FALLBACK_CAPABILITIES. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

Suggested change
constsupportsReasoningEffort=meta.supportsReasoningEffort===true||choices.length>0;
constsupportsReasoningEffort=choices.length>0;
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/server/src/provider/acp/GrokAcpSupport.ts around line 205:
`parseGrokAcpModelMeta` reports `supportsReasoningEffort: true` when `_meta.supportsReasoningEffort` is true but `reasoningEfforts` is empty, so `GrokProvider` calls `grokReasoningEffortCapabilities([])` and exposes no Reasoning selector instead of using `FALLBACK_CAPABILITIES`. Set this flag only when at least one effort choice was discovered so thin-discovery responses take the fallback path.

@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 39ed592. Configure here.

if (!requested) {
return undefined;
}
if (advertised.includes(requested)) {

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.

Spawn effort always dropped

Medium Severity

requestedGrokReasoningEffort now requires the value to appear in advertised, but startSession still calls it with an empty list before spawn. That makes requestedStartEffort always undefined, so --reasoning-effort is never passed to the Grok CLI. The same rule also drops composer effort whenever session menus are empty, even though the provider UI can still show fallback effort options.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 39ed592. Configure here.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

2 blocking correctness issues found. This PR introduces multiple new Grok provider capabilities (reasoning effort, rewind, usage tracking, auth detection) with significant new logic across several files. Additionally, there are unresolved Medium-severity findings identifying bugs in the effort propagation logic that prevent the selected reasoning effort from reaching the Grok CLI.

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

@t3-code

t3-codeBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

closing as superseded. #7070 explicitly supersedes this PR and carries the useful Grok work forward on a newer base.

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

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.[WIP - for content]WIP pull request opened for content review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg