fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@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

fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@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

fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@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

fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@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

fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@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

fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@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

fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@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

fix(server): alias Grok's product-name model slug to a valid ACP modelId - #7819

Closed
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias
Closed

fix(server): alias Grok's product-name model slug to a valid ACP modelId#7819
Exotic209093 wants to merge 1 commit into
pingdotgg:mainfrom
Exotic209093:fix/grok-model-id-alias

Conversation

@Exotic209093

@Exotic209093Exotic209093 commented Aug 21, 2026

Copy link
Copy Markdown

Summary

Fixes#7791. Selecting the Grok provider and sending a message fails immediately with Error: Invalid params at decodeJsonError — the underlying ACP error is unknown model id. Grok's ACP session/set_model only accepts grok-4.6 and grok-4.5 as modelIds. T3 sends "grok-build" (the Grok Build CLI's own product name, not a model id) as the default, and Grok's ACP rejects it outright.

Verified directly against a live ACP probe (per the issue): "grok-build"unknown model id; "grok-4.6"/"grok-4.5" → success.

Fix

Added a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver — the same mechanism Claude and Codex already use for their own display/legacy slugs (e.g. Claude's opusclaude-opus-5) — so normalizeModelSlug/resolveGrokAcpBaseModelId resolve "grok-build" to "grok-4.6" before it ever reaches the wire. DEFAULT_MODEL_BY_PROVIDER's display slug is untouched, matching how the other providers' aliasing works.

Also updated apps/server/scripts/acp-mock-agent.ts's mock Grok ACP model list, which previously accepted the never-actually-valid "grok-build" — that mock now mirrors the real Grok ACP's behavior ("grok-4.6" valid, "grok-build" not), which is what let this bug slip past the existing test suite.

Test plan

  • Added a regression test in packages/shared/src/model.test.ts asserting normalizeModelSlug("grok-build", grok) resolves to "grok-4.6".
  • Updated the existing resolveGrokAcpBaseModelId test to assert the default (and explicit "grok-build") now resolve to "grok-4.6" instead of passing through verbatim.
  • vp test run packages/shared/src/model.test.ts apps/server/src/provider/acp/GrokAcpSupport.test.ts — passed.
  • Full Grok test suite (GrokAdapter.test.ts, GrokProvider.test.ts, GrokTextGeneration.test.ts, AcpRuntimeModel.test.ts) run under Linux (these spawn real subprocesses, which needs a POSIX environment) — 56 passed, 0 failed, after updating the mock agent's model list.
  • Confirmed Cursor's tests are unaffected: Cursor uses its own dedicated cursor/list_available_models RPC, not the generic ACP session-model mechanism the mock's model list change touches.
  • vp run --filter t3 typecheck — clean.
  • vp lint on changed files — clean.

Note

Low Risk
Small model-id alias plus mock-agent alignment; no auth or data-path changes. Display default remains grok-build.

Overview
Fixes Grok ACP session/set_model failing with unknown model id when the default product slug grok-build is sent on the wire.

Adds a Grok entry in MODEL_SLUG_ALIASES_BY_PROVIDER so normalizeModelSlug / resolveGrokAcpBaseModelId map grok-buildgrok-4.6 (the id Grok ACP actually accepts). Display default is unchanged.

The ACP mock agent now lists grok-4.6 instead of grok-build, matching real Grok ACP so this cannot slip past tests again.

Reviewed by Cursor Bugbot for commit 8e90ce6. Configure here.

Note

Alias Grok's grok-build product slug to valid ACP modelId grok-4.6

Adds a grok-buildgrok-4.6 entry to MODEL_SLUG_ALIASES_BY_PROVIDER in model.ts because grok-build is a CLI product name, not a valid ACP modelId (ACP only accepts grok-4.6 and grok-4.5). Updates the mock ACP agent in acp-mock-agent.ts and the resolveGrokAcpBaseModelId tests in GrokAcpSupport.test.ts to use grok-4.6 as the default and fallback modelId instead of grok-build. Also adds a normalization test case in model.test.ts.

Macroscope summarized 8e90ce6.

Grok's ACP session/set_model only accepts "grok-4.6"/"grok-4.5", but T3
sent "grok-build" verbatim as the default modelId — that's the Grok
Build CLI's own product name, not a model id, so every Grok session
start failed with "unknown model id" immediately.
Add a MODEL_SLUG_ALIASES_BY_PROVIDER entry for the Grok driver, same as
Claude and Codex already have for their own display/legacy slugs, so
normalizeModelSlug resolves it to "grok-4.6" before it ever reaches the
wire. Updated the mock ACP agent used by GrokAdapter's tests to accept
"grok-4.6" instead of the never-actually-valid "grok-build", matching
what the real Grok ACP accepts.
Fixespingdotgg#7791
@coderabbitai

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: 55ad82a2-703c-42f0-8e23-20356cfc59e5

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 21, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8e90ce6

Macroscope's review found this PR approvable — Straightforward bug fix that adds a model slug alias to convert 'grok-build' to a valid Grok ACP model ID ('grok-4.6'). The change follows existing alias patterns, is well-documented, and includes appropriate test coverage.

You can add or adjust custom eligibility rules. Learn more.

@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 Claude Fable 5.1 responding on behalf of Theo

Closing this now that #9154 is on main. Thank you for tracking this down, @Exotic209093. Your diagnosis was exactly right: grok-build is the product name, not an id the ACP accepts, and the mock agent hid that by accepting it.

We went a slightly different direction on the fix. Instead of aliasing grok-build to grok-4.6, the adapter now treats it as "keep the session's current model" and never sends it in session/set_model. That way nothing needs updating when xAI ships the next model. Your mock agent change landed in the same spirit: it now advertises versioned ids like the real CLI.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Sep 2, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Grok driver sends invalid modelId to Grok's ACP — session/set_model fails with unknown model id

2 participants

@Exotic209093@t3dotgg