feat: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge
, '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: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge
, '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: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge
, '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: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge
, '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: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge
, '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: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge
, '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: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge
, '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: integrate Grok Build CLI ACP provider with custom branding icons - #2909

Closed
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration
Closed

feat: integrate Grok Build CLI ACP provider with custom branding icons#2909
MalinoizXD wants to merge 1 commit into
pingdotgg:mainfrom
MalinoizXD:feat/grok-build-integration

Conversation

@MalinoizXD

@MalinoizXDMalinoizXD commented Jun 2, 2026

Copy link
Copy Markdown

Summary

This PR integrates the new Grok Build CLI provider (xAI's coding assistant) as a first-class local agent session provider using the stdio-based Agent Communication Protocol (ACP). It also introduces custom branding SVG icons for xAI and Grok Build, replacing generic terminal icons and placeholder text.


Key Changes

1. Contracts & Configuration (packages/contracts)

  • model.ts:
    • Added grok-build provider definition with GROK_BUILD_DRIVER_KIND.
    • Configured supported models (grok-build and composer-2.5) with default display metadata.
  • settings.ts:
    • Defined strict Effect Schemas for Grok Build CLI config options (GrokBuildSettings, GrokBuildSettingsPatch).

2. Server Implementation (apps/server)

  • Grok Build Driver (GrokBuildDriver.ts, GrokBuildProvider.ts):
    • Added CLI runner driver supporting custom command overrides, arguments, and custom environment JSON.
    • Performs health checks by validating CLI installation/presence on startup.
  • AcpSessionRuntime Set-Model Fallback (AcpSessionRuntime.ts):
    • Grok Build CLI ACP does not support standard custom model_picker config options.
    • Implemented standard ACP session/set_model fallback method so model swaps work correctly out of the box.
  • Grok Build ACP Adapter (GrokBuildAdapter.ts):
    • Wrapped grok stdio ACP lifecycle and authentication (cached_token).
    • Added turn lifecycle hook logic to translate streaming tokens into standard turn lifecycle events.
    • Handles base model mapping for Composer 2.5.

3. Web & Branding Improvements (apps/web)

  • Branding Icons (Icons.tsx):
    • Added proper vector SVG brand icons for XaiIcon (xAI company) and GrokIcon (Grok looping X symbol).
  • Icons Wiring (providerDriverMeta.ts, providerIconUtils.ts):
    • Configured GrokIcon as the primary logo for grok-build instead of fallback Terminal or initial placeholders ("GB").

Verification

The following verification steps have been executed and verified on a Windows machine:

  1. Compilation:bun run typecheck passes 100% cleanly across all 14 workspace packages.
  2. Linting & Formatting:bun lint and bun run fmt ran with zero lint errors and correct code formatting.
  3. Automated Unit Tests:
    • Web application test suites pass successfully (988 tests passing).
    • Server-side ACP integration test suite passes successfully.

Open in Devin Review

Note

Cursor Bugbot is generating a summary for commit 7dca963. Configure here.

Note

Add Grok Build CLI ACP provider with custom branding icons

  • Adds a new grok-build provider driver (GrokBuildDriver.ts) that spawns the Grok CLI as an ACP subprocess, manages session lifecycle, and streams runtime events.
  • Implements the full adapter in GrokBuildAdapter.ts: start/stop sessions, send turns, handle approval workflows, interrupt turns, and resolve model aliases (composer-2.5grok-composer-2.5-fast).
  • Probes for the grok CLI via --version at startup to set provider status; shows install instructions if missing (GrokBuildProvider.ts).
  • Adds GrokIcon and XaiIcon SVG components and wires grok-build into the provider icon map and settings UI.
  • Adds GrokBuildSettings schema (command, args, envJson, customModels) to contracts and registers the driver in the built-in driver registry.
📊 Macroscope summarized 7dca963. 14 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@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

Run ID: 3a111b31-4ac4-416a-92b7-4a7d88ea4069

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 2, 2026

@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 and found 2 potential issues.

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 7dca963. Configure here.

Comment threadpackage.json
},
"dependencies": {
"@t3tools/monorepo": "."
},

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.

Root package.json has accidental self-referencing dependency

Medium Severity

The root workspace package.json adds "@t3tools/monorepo": "." as a dependency of itself. Since the package is already named @t3tools/monorepo, this creates a circular self-reference that serves no purpose and pollutes the dependency graph and bun.lock. This was almost certainly introduced unintentionally by tooling or an AI assistant.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

}),
).pipe(Effect.asVoid);
}
}),

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.

setModel fallback changes behavior for all ACP providers

Medium Severity

The setModel fallback path changed from calling setConfigOption("model", model) to calling acp.agent.setSessionModel(...) when started.modelConfigId is undefined. This change is in AcpSessionRuntime, which is shared infrastructure used by all ACP-based providers (Cursor, Grok Build, etc.), not just Grok Build. If any existing provider relies on the old setConfigOption("model", ...) fallback and doesn't implement session/set_model, model switching will break for that provider.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 7dca963. Configure here.

@@ -543,8 +543,23 @@ const makeAcpSessionRuntime = (
setConfigOption,
setModel: (model) =>

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/AcpSessionRuntime.ts:544

In setModel, when started.modelConfigId is defined, the setConfigOption call lacks .pipe(Effect.asVoid), so the function returns SetSessionConfigOptionResponse instead of void. This violates the interface contract at line 107 which specifies Effect.Effect<void, EffectAcpErrors.AcpError>. Consider adding .pipe(Effect.asVoid) to the branch to match the return type.

🤖 Copy this AI Prompt to have your agent fix this:
In file apps/server/src/provider/acp/AcpSessionRuntime.ts around line 544:
In `setModel`, when `started.modelConfigId` is defined, the `setConfigOption` call lacks `.pipe(Effect.asVoid)`, so the function returns `SetSessionConfigOptionResponse` instead of `void`. This violates the interface contract at line 107 which specifies `Effect.Effect<void, EffectAcpErrors.AcpError>`. Consider adding `.pipe(Effect.asVoid)` to the branch to match the return type.
Evidence trail:
apps/server/src/provider/acp/AcpSessionRuntime.ts line 107: interface declares `setModel: (model: string) => Effect.Effect<void, EffectAcpErrors.AcpError>`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 544-563: `setModel` implementation - line 548 returns `setConfigOption(started.modelConfigId, model)` (returns `Effect<SetSessionConfigOptionResponse>`), while line 560 correctly uses `.pipe(Effect.asVoid)`
apps/server/src/provider/acp/AcpSessionRuntime.ts lines 103-106: `setConfigOption` returns `Effect.Effect<EffectAcpSchema.SetSessionConfigOptionResponse, EffectAcpErrors.AcpError>`
packages/effect-acp/src/_generated/schema.gen.ts lines 9773-9776: `SetSessionConfigOptionResponse` is a struct with `_meta` and `configOptions` fields (not void)

Comment on lines +688 to +689
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"

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.

🟢 Lowcomponents/Icons.tsx:688

The <path> element sets fill="currentColor", which overrides the fill-black dark:fill-white classes on the parent <svg>. This causes the icon to use the inherited text color property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.

Suggested change
fill="currentColor"
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
<path
d="M63.83 56.843c27.469-27.48 67.635-34.865 101.712-21.87l2.314.917c7.645 2.844 14.309 6.89 19.507 10.651l-28.857 13.342c-26.869-11.286-57.649-3.609-76.435 15.2c-25.405 25.414-30.539 69.484-.764 97.96L0 245.764c4.296-5.923 9.457-11.573 14.75-17.178l5.815-6.13l2.608-2.774c15.53-16.655 28.81-33.77 20.496-56.709l-.766-1.98c-14.592-35.497-6.094-77.096 20.928-104.15m156.956-21.587L256 0l-10.128 14.069c-21.094 29.716-30.456 48.424-21.11 88.659l-.065-.065c7.23 30.728-.503 64.803-25.472 89.802c-31.478 31.538-81.852 38.558-123.336 10.17l28.923-13.407c26.476 10.41 55.442 5.839 76.26-15.003c20.818-20.844 25.493-51.2 15.03-76.462c-1.989-4.79-7.952-5.992-12.125-2.909L98.87 157.755L220.786 35.147z"
🤖 Copy this AI Prompt to have your agent fix this:
In file apps/web/src/components/Icons.tsx around lines 688-689:
The `<path>` element sets `fill="currentColor"`, which overrides the `fill-black dark:fill-white` classes on the parent `<svg>`. This causes the icon to use the inherited text `color` property instead of the explicit black/white fill intended by the classes, unlike other icons in this file.
Evidence trail:
apps/web/src/components/Icons.tsx lines 685-692 (GrokIcon with fill-black dark:fill-white on svg and fill="currentColor" on path), lines 676-683 (XaiIcon same pattern), lines 474-479 (OpenAI icon with fill-black dark:fill-white on svg but NO fill on path), lines 656-662 (Discord icon same pattern as OpenAI), lines 667-673 (Arc icon same pattern as OpenAI)

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new Grok Build provider integration with ~1200 lines of new code and modifies shared AcpSessionRuntime infrastructure that affects all ACP providers. Unresolved review comments identify a potential breaking change to existing provider behavior and an accidental self-referencing dependency.

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

@juliusmarminge

Copy link
Copy Markdown
Member

Closing as superseded: Grok ACP provider support was already merged in #2809. This competing implementation is conflicting and retains actionable review findings.

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

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MalinoizXD@juliusmarminge