Skip to content

feat(desktop): add Qoder ACP runtime - #2921

Closed
xinyuan0801 wants to merge 2 commits into
block:mainfrom
xinyuan0801:agent/add-qoder-support
Closed

feat(desktop): add Qoder ACP runtime#2921
xinyuan0801 wants to merge 2 commits into
block:mainfrom
xinyuan0801:agent/add-qoder-support

Conversation

@xinyuan0801

@xinyuan0801 xinyuan0801 commented Jul 26, 2026

Copy link
Copy Markdown

Summary

  • add Qoder as a first-class desktop ACP runtime using its native qodercli --acp server
  • provide platform install commands, login guidance, runtime configuration metadata, model discovery, managed-process cleanup, and .qoder/skills integration
  • include authenticated Qoder installations in onboarding, readiness detection, and preferred-runtime selection
  • expose provider ownership through the Rust runtime catalog so switching to Qoder clears stale Buzz-managed provider state and displays Qoder (locked) correctly
  • define typed authentication-probe contracts and validate Qoder's logged_in JSON boolean strictly, failing closed on malformed, missing, or incorrectly typed responses

Why

Buzz already supports Goose, Codex, and Claude Code, but Qoder users could not select or launch Qoder from the managed-agent runtime catalog. Qoder implements ACP directly, so Buzz can integrate it without an adapter.

Qoder's unauthenticated status command exits successfully and reports the real state through {"logged_in": false}. Exit status alone therefore cannot establish authentication. The catalog now declares whether a probe uses exit status or a required JSON boolean, preserving the existing Claude/Codex behavior while making Qoder fail closed.

The runtime catalog is also the single source of truth for provider capability. This prevents frontend runtime-ID guesses, removes stale providers when moving from a provider-backed runtime to Qoder, and keeps locked-provider labels runtime-specific.

User impact

Users can install or select Qoder in Buzz, authenticate with qodercli login, choose it during onboarding, save it as the preferred runtime, launch its native ACP server, discover and switch Qoder models through ACP, and use Buzz skills from Qoder workspaces.

Existing agents switched to Qoder no longer retain an incompatible provider from their previous runtime. Invalid Qoder status output is shown conservatively as not ready instead of being accepted as authenticated.

Validation

  • just ci — passed
  • desktop unit suite — 3,519 passed
  • desktop Tauri suite — 1,643 unit tests plus 3 mixer diagnostics passed
  • onboarding Playwright suite — 20 passed
  • mobile Flutter suite — 585 passed, 1 skipped
  • cargo test -p buzz-acp — 599 library tests and 9 integration tests passed
  • git diff --check — passed
  • manual Qoder CLI 1.1.5 ACP initialization returned agentInfo.name = "qoder-cli"; unauthenticated session creation correctly requested authentication

Signed-off-by: xinyuan0801 <w596323108y@gmail.com>
@xinyuan0801
xinyuan0801 force-pushed the agent/add-qoder-support branch from 1622927 to bafc00c Compare July 26, 2026 01:05
Signed-off-by: xinyuan0801 <w596323108y@gmail.com>
@xinyuan0801
xinyuan0801 marked this pull request as ready for review July 26, 2026 01:58
@xinyuan0801
xinyuan0801 requested a review from a team as a code owner July 26, 2026 01:58
@wpfleger96

Copy link
Copy Markdown
Member

🤖 hey @xinyuan0801 — thanks for building this, the fail-closed auth-probe design in here is genuinely careful work. PRs like this one are exactly what convinced us to solve harness support generically instead of one runtime at a time.

That work landed in #2773 and ships in v0.5.0: any ACP-over-stdio binary can be registered from Settings, so qodercli --acp works today as a custom harness with no code change. There's no Qoder preset yet, but presets are now a small data entry rather than per-harness Rust — a tiny PR away if you want Qoder to be one click.

Closing as superseded. The typed auth-probe contract idea (exit-status vs required JSON boolean) is bigger than any one harness — if that still interests you, an issue proposing it for the generic readiness path would be worth filing.

@wpfleger96 wpfleger96 closed this Jul 27, 2026
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.

2 participants