Skip to content

feat(chat): add ACP providers to model picker - #1202

Merged
arul28 merged 1 commit into
mainfrom
ade/acp-qwen-kimi-copilot-a0f67ad8
Sep 2, 2026
Merged

feat(chat): add ACP providers to model picker#1202
arul28 merged 1 commit into
mainfrom
ade/acp-qwen-kimi-copilot-a0f67ad8

Conversation

@arul28

@arul28 arul28 commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Problem

ADE could not expose or reliably route Qwen, Kimi, Grok, and GitHub Copilot across provider status, model selection, and chat surfaces.

Cause

Provider detection, ACP runtime lifecycle, and model catalogs used separate auth and fallback assumptions. Existing pooled runtimes could also retain a prior permission mode.

Change and boundary

  • Add shared ACP hosting and provider dialects for Qwen, Kimi, Grok, and GitHub Copilot.
  • Make provider status and catalogs reflect live authentication and configuration, remove stale ACP fallbacks, and apply the requested picker order across desktop, hosted web, TUI/CLI, and iOS.
  • Preserve existing Claude, Codex, Cursor, OpenCode, Pi, Droid, Ollama, and LM Studio paths; harden only test isolation and portable fixtures where validation exposed host-dependent assumptions.
  • Rebuild an ACP runtime when permission mode changes, including safe handling during an active turn.
  • No credentials or vendor config files are written.

Verification

  • Focused desktop ACP and picker suite: 13 files, 1,320 tests passed on the rebased commit.
  • Earlier full desktop matrix: 8/8 shards green.
  • Earlier CLI/TUI suite: 3,975 passed, 19 skipped.
  • Desktop and CLI typechecks passed.
  • Desktop lint: 0 errors (existing warnings only).
  • Targeted iOS XCTest passed.
  • Live ACP host checks: 6/6.
  • Live Electron turns: Qwen, Grok, and GitHub Copilot.
  • git diff --check passed.

Kimi remains correctly sign-in-required where no authenticated local CLI is available. No API keys or vendor config files were modified.

Model and harness: GPT-5.6 / ADE Codex app-server harness.


Note

Medium Risk
Touches auth probing, Grok permission supervision, and provider enablement across chat creation and tracked terminals; mistakes could misreport sign-in state or weaken Grok approval guarantees, but changes are heavily tested and fail-safe on probe failures.

Overview
Adds four Agent Client Protocol (ACP) providersQwen, Kimi, Grok, and GitHub Copilot — across the CLI, RPC, mobile sync, TUI, and desktop AI stack so users can start chats, tracked CLI sessions, and model picks with the same flows as existing agents.

CLI & sync: --provider / start_cli_session enums and validation now include the new names; agentRegistry registers install/auth hints and error patterns; remote model-catalog refresh and chat-create paths treat them like OpenCode/Pi (activateRuntime for auth-gated model lists). TUI pieces (model picker rails, themes, terminal resume, slash palette) align with shared MODEL_PICKER_PROVIDER_ORDER.

Desktop: New ACP executable resolution, disk-based credential hints in authDetector, and probeAcpProviderAuth (protocol session/new, cached, forced on settings refresh). Grok gets a dedicated permission preflight that attests Claude-settings neutralization via debug logs (not grok inspect). Qwen user settings.json can override curated model rows. Settings/status wiring exposes optional availability flags, provider connections, disabled-provider filtering, and diagnostics (doctor where supported).

Tests: Coverage for ACP auth, executables, Grok preflight, Qwen settings; CLI serve tests set ADE_DISABLE_RUNTIME_SERVICE_INSTALL / ADE_DISABLE_TOOLS_FETCH for stability.

Reviewed by Cursor Bugbot for commit 15f0604. Configure here.

@vercel

vercel Bot commented Sep 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
ade Ignored Ignored Preview Sep 2, 2026 12:31am UTC

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 174 files, which is 74 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: b52cce29-3f71-4fb0-b9a2-b91200b7dd0a

📥 Commits

Reviewing files that changed from the base of the PR and between 3b0a6dc and eb2ef1d.

⛔ Files ignored due to path filters (7)
  • apps/ios/ADE/Assets.xcassets/ProviderKimi.imageset/kimi.svg is excluded by !**/*.svg
  • apps/ios/ADE/Assets.xcassets/ProviderQwen.imageset/qwen.svg is excluded by !**/*.svg
  • apps/ios/ADE/Assets.xcassets/ProviderXAI.imageset/xai.svg is excluded by !**/*.svg
  • docs/features/chat/acp-providers-spec.md is excluded by !docs/**
  • docs/features/chat/acp-verification-brief.md is excluded by !docs/**
  • docs/features/chat/composer-and-ui.md is excluded by !docs/**
  • docs/features/onboarding-and-settings/configuration-schema.md is excluded by !docs/**
📒 Files selected for processing (174)
  • apps/ade-cli/src/adeRpcServer.ts
  • apps/ade-cli/src/cli.test.ts
  • apps/ade-cli/src/cli.ts
  • apps/ade-cli/src/services/agentRegistry.ts
  • apps/ade-cli/src/services/push/attentionItemBuilder.ts
  • apps/ade-cli/src/services/sync/syncRemoteCommandService.ts
  • apps/ade-cli/src/tuiClient/adeApi.ts
  • apps/ade-cli/src/tuiClient/app.tsx
  • apps/ade-cli/src/tuiClient/closedCliSessions.ts
  • apps/ade-cli/src/tuiClient/components/ApprovalPrompt.tsx
  • apps/ade-cli/src/tuiClient/components/CommandPalette.tsx
  • apps/ade-cli/src/tuiClient/components/ModelPicker/ModelPickerPane.tsx
  • apps/ade-cli/src/tuiClient/components/ModelPicker/modelPickerLayout.test.ts
  • apps/ade-cli/src/tuiClient/components/ModelPicker/modelPickerLayout.ts
  • apps/ade-cli/src/tuiClient/components/SlashPalette.tsx
  • apps/ade-cli/src/tuiClient/modelState.ts
  • apps/ade-cli/src/tuiClient/providerMetadata.ts
  • apps/ade-cli/src/tuiClient/remoteLauncher.ts
  • apps/ade-cli/src/tuiClient/theme.ts
  • apps/ade-cli/src/tuiClient/types.ts
  • apps/desktop/src/main/services/ai/acpAuthProbe.test.ts
  • apps/desktop/src/main/services/ai/acpAuthProbe.ts
  • apps/desktop/src/main/services/ai/acpExecutables.test.ts
  • apps/desktop/src/main/services/ai/acpExecutables.ts
  • apps/desktop/src/main/services/ai/acpProviderDiagnostics.test.ts
  • apps/desktop/src/main/services/ai/acpProviderDiagnostics.ts
  • apps/desktop/src/main/services/ai/aiIntegrationService.test.ts
  • apps/desktop/src/main/services/ai/aiIntegrationService.ts
  • apps/desktop/src/main/services/ai/authDetector.test.ts
  • apps/desktop/src/main/services/ai/authDetector.ts
  • apps/desktop/src/main/services/ai/claudeCodeExecutable.test.ts
  • apps/desktop/src/main/services/ai/cliExecutableResolver.test.ts
  • apps/desktop/src/main/services/ai/cliExecutableResolver.ts
  • apps/desktop/src/main/services/ai/codexExecutable.test.ts
  • apps/desktop/src/main/services/ai/grokPermissionPreflight.test.ts
  • apps/desktop/src/main/services/ai/grokPermissionPreflight.ts
  • apps/desktop/src/main/services/ai/providerConnectionStatus.ts
  • apps/desktop/src/main/services/ai/providerRuntimeHealth.ts
  • apps/desktop/src/main/services/ai/qwenUserSettings.test.ts
  • apps/desktop/src/main/services/ai/qwenUserSettings.ts
  • apps/desktop/src/main/services/chat/acpHost/acpConnection.ts
  • apps/desktop/src/main/services/chat/acpHost/acpDialects/copilot.ts
  • apps/desktop/src/main/services/chat/acpHost/acpDialects/grok.ts
  • apps/desktop/src/main/services/chat/acpHost/acpDialects/index.ts
  • apps/desktop/src/main/services/chat/acpHost/acpDialects/kimi.ts
  • apps/desktop/src/main/services/chat/acpHost/acpDialects/qwen.ts
  • apps/desktop/src/main/services/chat/acpHost/acpDialects/shared.ts
  • apps/desktop/src/main/services/chat/acpHost/acpEventTranslator.ts
  • apps/desktop/src/main/services/chat/acpHost/acpHost.fixtures.test.ts
  • apps/desktop/src/main/services/chat/acpHost/acpHost.live.test.ts
  • apps/desktop/src/main/services/chat/acpHost/acpHost.test.ts
  • apps/desktop/src/main/services/chat/acpHost/acpHostTypes.ts
  • apps/desktop/src/main/services/chat/acpHost/acpPermissionBridge.ts
  • apps/desktop/src/main/services/chat/acpHost/acpPromptBlocks.test.ts
  • apps/desktop/src/main/services/chat/acpHost/acpPromptBlocks.ts
  • apps/desktop/src/main/services/chat/acpHost/acpProtocolTypes.ts
  • apps/desktop/src/main/services/chat/acpHost/acpRuntimeCoordinator.ts
  • apps/desktop/src/main/services/chat/acpHost/acpSession.ts
  • apps/desktop/src/main/services/chat/acpHost/acpSessionPool.ts
  • apps/desktop/src/main/services/chat/acpHost/acpSupervisionGuard.ts
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilot.config-options.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilot.initialize.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilot.live-turn.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilot.model-probe.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilot.trust-gate.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilotLiveTurn.mjs
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilotModelProbe.mjs
  • apps/desktop/src/main/services/chat/acpHost/fixtures/copilotTrustGateProbe.mjs
  • apps/desktop/src/main/services/chat/acpHost/fixtures/grok.followup-probe.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/grok.initialize.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/grok.permission-probe.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/grok.promptResult.meta.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/grok.shell-permission-probe.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/grokFollowupProbe.mjs
  • apps/desktop/src/main/services/chat/acpHost/fixtures/grokPermissionProbe.mjs
  • apps/desktop/src/main/services/chat/acpHost/fixtures/kimi.initialize.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/liveBinaryProbe.mjs
  • apps/desktop/src/main/services/chat/acpHost/fixtures/qwen-kimi-close-probe.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/qwen.initialize.json
  • apps/desktop/src/main/services/chat/acpHost/fixtures/qwenKimiCloseProbe.mjs
  • apps/desktop/src/main/services/chat/acpHost/fixtures/qwenKimiUnauthProbe.mjs
  • apps/desktop/src/main/services/chat/acpHost/index.ts
  • apps/desktop/src/main/services/chat/acpHost/mockAcpAgent.ts
  • apps/desktop/src/main/services/chat/agentChatService.test.ts
  • apps/desktop/src/main/services/chat/agentChatService.ts
  • apps/desktop/src/main/services/config/projectConfigService.test.ts
  • apps/desktop/src/main/services/config/projectConfigService.ts
  • apps/desktop/src/main/services/ipc/registerIpc.ts
  • apps/desktop/src/main/services/lanes/laneService.ts
  • apps/desktop/src/main/services/lanes/laneStorageLifecycle.test.ts
  • apps/desktop/src/main/services/pty/ptyService.test.ts
  • apps/desktop/src/main/services/pty/ptyService.ts
  • apps/desktop/src/main/services/shared/providerConfigHomes.ts
  • apps/desktop/src/main/utils/terminalTuiMarkers.ts
  • apps/desktop/src/preload/global.d.ts
  • apps/desktop/src/preload/preload.ts
  • apps/desktop/src/renderer/components/app/SettingsPage.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatComposer.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatMessageList.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.tsx
  • apps/desktop/src/renderer/components/chat/AgentCliAuthCard.tsx
  • apps/desktop/src/renderer/components/prs/state/PrsContext.tsx
  • apps/desktop/src/renderer/components/settings/ChatAppearancePreview.test.tsx
  • apps/desktop/src/renderer/components/settings/ProvidersSection.test.tsx
  • apps/desktop/src/renderer/components/settings/ProvidersSection.tsx
  • apps/desktop/src/renderer/components/settings/providerSectionPrimitives.tsx
  • apps/desktop/src/renderer/components/settings/providers/ProviderDetailPage.tsx
  • apps/desktop/src/renderer/components/settings/providers/ProviderSignInModal.tsx
  • apps/desktop/src/renderer/components/settings/providers/ProviderTileCard.tsx
  • apps/desktop/src/renderer/components/settings/providers/acpProviders.tsx
  • apps/desktop/src/renderer/components/settings/providers/bodies/CliAuthActions.tsx
  • apps/desktop/src/renderer/components/settings/providers/bodies/CursorBody.tsx
  • apps/desktop/src/renderer/components/settings/providers/bodies/OpenCodeBody.tsx
  • apps/desktop/src/renderer/components/settings/providers/bodies/PiBody.tsx
  • apps/desktop/src/renderer/components/settings/providers/cliTools.ts
  • apps/desktop/src/renderer/components/settings/providers/descriptors.tsx
  • apps/desktop/src/renderer/components/settings/providers/providerDiagnosticsReport.ts
  • apps/desktop/src/renderer/components/settings/providers/providerUi.test.ts
  • apps/desktop/src/renderer/components/settings/providers/providerUi.tsx
  • apps/desktop/src/renderer/components/settings/providers/types.ts
  • apps/desktop/src/renderer/components/settings/settingsManifest.test.ts
  • apps/desktop/src/renderer/components/settings/settingsManifest.ts
  • apps/desktop/src/renderer/components/shared/ModelPicker/ModelPicker.test.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/ModelPicker.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/ModelPickerContent.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/ModelPickerRail.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/ReasoningEffortPicker.test.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/modelCatalog.test.ts
  • apps/desktop/src/renderer/components/shared/ModelPicker/modelCatalog.ts
  • apps/desktop/src/renderer/components/shared/ModelPicker/providerEmptyState.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/runtimeCatalogCache.ts
  • apps/desktop/src/renderer/components/shared/ModelPicker/useProviderAuthStatus.test.ts
  • apps/desktop/src/renderer/components/shared/ModelPicker/useProviderAuthStatus.ts
  • apps/desktop/src/renderer/components/shared/ProviderLogos.tsx
  • apps/desktop/src/renderer/components/shared/permissionOptions.ts
  • apps/desktop/src/renderer/components/terminals/WorkViewArea.test.tsx
  • apps/desktop/src/renderer/components/terminals/cliLaunch.test.ts
  • apps/desktop/src/renderer/lib/modelOptions.ts
  • apps/desktop/src/renderer/lib/nativeLaunchControls.ts
  • apps/desktop/src/renderer/lib/sessions.test.ts
  • apps/desktop/src/renderer/lib/sessions.ts
  • apps/desktop/src/shared/acpProviderMetadata.ts
  • apps/desktop/src/shared/cliLaunch.ts
  • apps/desktop/src/shared/grokSupervision.ts
  • apps/desktop/src/shared/ipc.ts
  • apps/desktop/src/shared/modelCatalog.test.ts
  • apps/desktop/src/shared/modelCatalog.ts
  • apps/desktop/src/shared/modelRegistry.test.ts
  • apps/desktop/src/shared/modelRegistry.ts
  • apps/desktop/src/shared/orchestrationRuntimePolicy.test.ts
  • apps/desktop/src/shared/orchestrationRuntimePolicy.ts
  • apps/desktop/src/shared/pendingInputLabels.ts
  • apps/desktop/src/shared/providerEnablement.test.ts
  • apps/desktop/src/shared/providerEnablement.ts
  • apps/desktop/src/shared/types/chat.ts
  • apps/desktop/src/shared/types/config.ts
  • apps/desktop/src/shared/types/sessions.ts
  • apps/desktop/src/shared/types/sync.ts
  • apps/ios/ADE/Assets.xcassets/ProviderKimi.imageset/Contents.json
  • apps/ios/ADE/Assets.xcassets/ProviderQwen.imageset/Contents.json
  • apps/ios/ADE/Assets.xcassets/ProviderXAI.imageset/Contents.json
  • apps/ios/ADE/Shared/ADESharedTheme.swift
  • apps/ios/ADE/Views/Components/ADEDesignSystem.swift
  • apps/ios/ADE/Views/Work/WorkContextCompactDivider.swift
  • apps/ios/ADE/Views/Work/WorkModelCatalog.swift
  • apps/ios/ADE/Views/Work/WorkModelPickerSheet.swift
  • apps/ios/ADE/Views/Work/WorkModels.swift
  • apps/ios/ADE/Views/Work/WorkNewChatScreen.swift
  • apps/ios/ADE/Views/Work/WorkNewChatSheet.swift
  • apps/ios/ADE/Views/Work/WorkRootScreen+Actions.swift
  • apps/ios/ADE/Views/Work/WorkSessionDestinationView.swift
  • apps/ios/ADE/Views/Work/WorkStatusAndFormattingHelpers.swift
  • apps/ios/ADETests/ADETests.swift

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


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.

@cursor

cursor Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_c915a506-1b8d-4fd8-8dc6-d551e599c1cb)

@arul28 arul28 changed the title acp-qwen-kimi-copilot -> Primary feat(chat): add ACP providers to model picker Sep 2, 2026
@arul28
arul28 force-pushed the ade/acp-qwen-kimi-copilot-a0f67ad8 branch from 15f0604 to eb2ef1d Compare September 2, 2026 00:31
@arul28
arul28 merged commit a509417 into main Sep 2, 2026
39 checks passed
@arul28
arul28 deleted the ade/acp-qwen-kimi-copilot-a0f67ad8 branch September 2, 2026 03:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant