From 910e130a082c7fc4ac471fc2ccf1361d56a3e073 Mon Sep 17 00:00:00 2001
From: BrianBoyCN <175931469+BrianBoyCN@users.noreply.github.com>
Date: Thu, 24 Sep 2026 10:27:16 +0800
Subject: [PATCH 1/4] feat(command): add Command Code provider for the $1 Go
plan
Command Code's /provider/v1/messages and /provider/v1/chat/completions
require the Pro plan or higher and return 403 upgrade_required on the $1 Go
plan. /alpha/generate is the undocumented envelope the `cmd` CLI itself uses
on every turn; it is not plan-gated and serves the whole model catalog, so
this adapter always speaks it.
- internal/providers/command: in-process adapter (constants, credential,
catalog, payload -> Vercel ModelMessage[] envelope, chat non-stream +
NDJSON->SSE stream rewrite, errors -> accounts taxonomy, probe via
/alpha/whoami, credits via /alpha/billing/credits). Modelled on the Devin
adapter; imports no executor/store/HTTP packages.
- registry + app: register the global in-process descriptor (PAT auth).
- control: LoginPAT wires the existing paste-key tab for in-process PAT
adapters (Qoder keeps its worker login path).
- frontend: provider mark, labels/hints, PAT-tab default for a provider with
no browser login.
- README/AGENTS/CONTRIBUTING + bilingual changelog fragment.
The /alpha/generate schema is strict and version-coupled (x-command-code-
version), so the CLI version is pinned and fails loudly rather than degrading
silently. Reasoning is only advertised for models with verified
reasoning_effort support (DeepSeek V4 Pro/Flash). Experimental; not
production-ready.
Protocol facts derived from safzanpirani/pi-commandcode-provider (MIT); see
internal/providers/command/NOTICE.
---
AGENTS.md | 2 +-
CONTRIBUTING.md | 2 +-
README.md | 6 +-
README_EN.md | 6 +-
.../unreleased/command-code-go-provider.md | 7 +
frontend/src/components/AddAccountModal.tsx | 24 +-
frontend/src/components/CommandMark.tsx | 16 +
frontend/src/components/ProviderMark.tsx | 4 +
frontend/src/i18n/messages.ts | 6 +
frontend/src/lib/provider.ts | 8 +
internal/app/app.go | 2 +
internal/app/architecture_test.go | 2 +-
internal/control/accounts.go | 20 +-
internal/control/login.go | 47 +++
internal/providers/command/NOTICE | 14 +
internal/providers/command/catalog.go | 167 ++++++++
internal/providers/command/catalog_test.go | 116 ++++++
internal/providers/command/chat.go | 290 ++++++++++++++
internal/providers/command/chat_test.go | 267 +++++++++++++
internal/providers/command/client.go | 191 +++++++++
internal/providers/command/constants.go | 52 +++
internal/providers/command/credential.go | 109 ++++++
internal/providers/command/credential_test.go | 80 ++++
internal/providers/command/doc.go | 22 ++
internal/providers/command/errors.go | 154 ++++++++
internal/providers/command/errors_test.go | 72 ++++
internal/providers/command/helpers_test.go | 170 ++++++++
internal/providers/command/identity.go | 105 +++++
internal/providers/command/import.go | 34 ++
internal/providers/command/mapping.go | 43 +++
internal/providers/command/payload.go | 363 ++++++++++++++++++
internal/providers/command/payload_test.go | 194 ++++++++++
internal/providers/command/rewrite.go | 236 ++++++++++++
internal/providers/command/status.go | 66 ++++
.../testdata/command_models.sample.json | 122 ++++++
internal/providers/command/wire.go | 144 +++++++
internal/providers/registry.go | 29 +-
...t-LDlaPdaZ.js => TrafficChart-6yIC3DZc.js} | 2 +-
...{index-MXEsySTj.css => index-1ZGhwpsw.css} | 2 +-
.../webui/static/assets/index-AqNpHvC8.js | 28 --
.../webui/static/assets/index-BZjmbYnG.js | 28 ++
internal/webui/static/index.html | 4 +-
42 files changed, 3211 insertions(+), 45 deletions(-)
create mode 100644 changelog/unreleased/command-code-go-provider.md
create mode 100644 frontend/src/components/CommandMark.tsx
create mode 100644 internal/providers/command/NOTICE
create mode 100644 internal/providers/command/catalog.go
create mode 100644 internal/providers/command/catalog_test.go
create mode 100644 internal/providers/command/chat.go
create mode 100644 internal/providers/command/chat_test.go
create mode 100644 internal/providers/command/client.go
create mode 100644 internal/providers/command/constants.go
create mode 100644 internal/providers/command/credential.go
create mode 100644 internal/providers/command/credential_test.go
create mode 100644 internal/providers/command/doc.go
create mode 100644 internal/providers/command/errors.go
create mode 100644 internal/providers/command/errors_test.go
create mode 100644 internal/providers/command/helpers_test.go
create mode 100644 internal/providers/command/identity.go
create mode 100644 internal/providers/command/import.go
create mode 100644 internal/providers/command/mapping.go
create mode 100644 internal/providers/command/payload.go
create mode 100644 internal/providers/command/payload_test.go
create mode 100644 internal/providers/command/rewrite.go
create mode 100644 internal/providers/command/status.go
create mode 100644 internal/providers/command/testdata/command_models.sample.json
create mode 100644 internal/providers/command/wire.go
rename internal/webui/static/assets/{TrafficChart-LDlaPdaZ.js => TrafficChart-6yIC3DZc.js} (99%)
rename internal/webui/static/assets/{index-MXEsySTj.css => index-1ZGhwpsw.css} (93%)
delete mode 100644 internal/webui/static/assets/index-AqNpHvC8.js
create mode 100644 internal/webui/static/assets/index-BZjmbYnG.js
diff --git a/AGENTS.md b/AGENTS.md
index 0053a00..04eb22d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,6 +1,6 @@
# AGENTS
-Go + Node gateway for personal Qoder, WorkBuddy, Trae CN Work, and experimental Devin accounts, with OpenAI / Anthropic-compatible endpoints.
+Go + Node gateway for personal Qoder, WorkBuddy, Trae CN Work, and experimental Devin and Command Code accounts, with OpenAI / Anthropic-compatible endpoints.
## Docs
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 544f27b..661d37e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,7 +1,7 @@
# Contributing
CLI2API keeps the Qoder execution path stable while supporting provider-specific
-adapters for Qoder, WorkBuddy, Trae, and experimental Devin. Keep new provider work behind the shared
+adapters for Qoder, WorkBuddy, Trae, and experimental Devin and Command Code. Keep new provider work behind the shared
account, routing, and protocol contracts. Read [AGENTS.md](AGENTS.md) for hard rules, [docs/ARCHITECTURE_SUMMARY.md](docs/ARCHITECTURE_SUMMARY.md) for the public backend map, and [docs/REFACTORING.md](docs/REFACTORING.md) for accepted package boundaries. Preserve existing uncommitted work;
before feature work, fetch and merge the latest `origin/main` into your branch.
diff --git a/README.md b/README.md
index 865796a..4cab354 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
**把你自己的登录态,变成一个本机 OpenAI 兼容 API**
-接入 **Qoder(国际版 / 国内版)**、**WorkBuddy(国际版 / 国内版)**、**Trae 国内版 Work**,以及实验性的 **Devin**。
+接入 **Qoder(国际版 / 国内版)**、**WorkBuddy(国际版 / 国内版)**、**Trae 国内版 Work**,以及实验性的 **Devin** 和 **Command Code**。
用 Docker 部署,在 Web 控制台管理账号,再通过兼容 API 接入客户端。
@@ -24,7 +24,7 @@
- **统一控制台**:管理账号、模型、客户端密钥、代理设置,查看额度和请求日志。
- **Docker 运维**:持久化账号数据;可选安装宿主机更新器,在控制台下载更新、确认升级和回滚。
-Qoder 国内版、WorkBuddy、Trae 的适配代码已实现,真账号验收仍未完成;Devin 为实验性接入,不承诺生产可用。托管更新的真实升级 / 回滚验收也尚未完成。
+Qoder 国内版、WorkBuddy、Trae 的适配代码已实现,真账号验收仍未完成;Devin 与 Command Code(Go 套餐)为实验性接入,不承诺生产可用。托管更新的真实升级 / 回滚验收也尚未完成。
## 快速开始
@@ -59,7 +59,7 @@ API Key: <在 API keys 页面创建的客户端密钥>