Skip to content

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

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

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

@t3dotgg t3dotgg 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.
@t3dotgg t3dotgg added the [WIP - for content] WIP pull request opened for content review label Aug 12, 2026
@coderabbitai

coderabbitai Bot 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-actions github-actions Bot 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 thread apps/server/src/provider/Layers/GrokAdapter.ts
Comment thread apps/server/src/provider/Layers/GrokAdapter.ts
Comment thread apps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment thread apps/server/src/provider/acp/GrokAcpSupport.ts Outdated
Comment thread apps/server/src/provider/acp/XAiAcpExtension.ts Outdated
Comment thread apps/server/src/provider/Layers/GrokAdapter.ts Outdated
@github-actions

github-actions Bot 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 thread apps/server/src/provider/acp/GrokAcpSupport.ts
Comment thread apps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment thread apps/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.

🟡 Medium acp/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)) {
return requested;
}
if (advertised.length === 0 || advertised.includes(requested)) {
return requested;
}
🚀 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.

🟡 Medium acp/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
const supportsReasoningEffort = meta.supportsReasoningEffort === true || choices.length > 0;
const supportsReasoningEffort = 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.

@cursor cursor Bot 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 Cursor Fix in Web

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

@macroscopeapp

macroscopeapp Bot commented Aug 12, 2026

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.

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

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:trusted PR 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