From 61c298f3b9cfba3043d5f06530a8c27005700428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=94=A1=E5=8F=8A?= <522caiji@gmail.com> Date: Thu, 27 Aug 2026 02:17:58 +0800 Subject: [PATCH 1/2] fix: wait for worker login readiness before browser or PAT login - Proxy device-flow and PAT logins only after the account worker's AuthManager is warm (90s poll), fixing the first-click CN race - Classify 'loginWith* unavailable' worker errors as not_ready (503, failover) instead of auth - Show a 'starting account session' note in the wizard and Accounts page while the session starts - Remove PROVIDERS_TASKS.md; plan state lives in docs/PLAN.md --- PROVIDERS_TASKS.md | 193 -------------------- docs/PLAN.md | 17 +- frontend/src/components/AddAccountModal.tsx | 2 + frontend/src/i18n/messages.ts | 2 + frontend/src/pages/AccountsPage.tsx | 2 + internal/api/workerproxy.go | 119 +++++++++++- internal/api/workerproxy_test.go | 116 ++++++++++++ worker/src/daemon.mjs | 15 +- worker/src/errors.mjs | 2 +- worker/test/errors.test.mjs | 9 + 10 files changed, 268 insertions(+), 209 deletions(-) delete mode 100644 PROVIDERS_TASKS.md create mode 100644 internal/api/workerproxy_test.go diff --git a/PROVIDERS_TASKS.md b/PROVIDERS_TASKS.md deleted file mode 100644 index 2c4e755a..00000000 --- a/PROVIDERS_TASKS.md +++ /dev/null @@ -1,193 +0,0 @@ -# Provider 多上游任务跟踪 - -来源设计:`docs/PROVIDERS.md`(多上游账号类型:WorkBuddy 对照与扩展计划) -创建日期:2026-08-25 -总体状态:**J0-J4 代码完成;真实账号验收项待用户执行**。实现由用户于 2026-08-25 明确授权开工;P.1 的三项真实登录验收仍需人工完成。 - -## 状态约定 - -- `- [ ]` 未开始 -- `- [x]` 已完成 -- 进行中的任务在行尾标注「进行中」 -- `docs/PROVIDERS.md:行号` 指向设计细节;行号基于 2026-08-25 版本,文档更新后按章节名重新定位 - -## 进度总览 - -| 阶段 | 目标 | 状态 | 前置 | 设计细节 | -|------|------|------|------|----------| -| 前置门槛 | Qoder H7 收口 + Phase I 边界 | 代码就绪;真实登录验收待用户 | - | `docs/PROVIDERS.md:517` | -| J0 | 控制面认识 provider,Qoder 行为零变化 | 完成 | H7 验收 | `docs/PROVIDERS.md:519` | -| J1 | Runtime / Executor 接口,调度 route-aware | 完成 | J0 | `docs/PROVIDERS.md:531` | -| J2 | WorkBuddy 可用最小闭环 | 代码+契约测试完成;真实账号聊天待用户 | J1 + 真实账号 | `docs/PROVIDERS.md:551` | -| J3 | 池质量:quota / failover / 健康 | 完成 | J2 | `docs/PROVIDERS.md:572` | -| J4 | 同名模型跨 provider Route Pool | 完成 | J3 + Phase I | `docs/PROVIDERS.md:582` | -| J5 | 后续上游(Cursor 等) | 排期外 | J0/J1 稳定 | `docs/PROVIDERS.md:603` | - -## 前置门槛 - -- [ ] P.1 Qoder H7 验收:空安装 -> 登录 -> 聊天全链路通过(`docs/PROVIDERS.md:14`、`docs/PROVIDERS.md:517`)。**需用户人工执行**:空安装浏览器登录、`qoder-native-v1` 导入变 hot、双账号 A 限流 B 接管三项都无法在本环境代验(需要真实 Qoder 账号浏览器授权)。 -- [ ] P.2 Phase I 协议边界:canonical conversation 设计定稿(可与 J0/J1 并行;J4 的 `/v1/messages` 与工具 ID 映射依赖它,`docs/PROVIDERS.md:592-593`)。**明确移出本文件范围**:归 `docs/PLAN.md` Phase I(I1-I4)独立里程碑;本文件的 J4.8 已记录 OpenAI 短接落地、canonical 工具 ID 映射待 Phase I。此项不阻塞 J0-J4 验收。 - -关注点:H7 和 Phase I 未收口前不实现 WorkBuddy 流量,否则会冻住 Qoder 控制面(`docs/PROVIDERS.md:675`)。本次开工依据为用户 2026-08-25 指令,P.1 真实账号验收仍单独跟踪。 - -## J0 - 控制面先认识 provider - -目标:Qoder 行为零变化;数据库和 API 能记下账号类型。细节:`docs/PROVIDERS.md:519-530` - -- [x] J0.1 新增不可变 migration `003_account_providers.sql`:`accounts` 加 `provider` / `provider_region`(历史空值按 `qoder/global` 读),新增 `account_credential_payloads` 表;不改 `001` / `002` checksum(`docs/PROVIDERS.md:303-317`)。证据:`internal/accounts/migrations.go` -- [x] J0.2 `Store.Create` / `handleAccounts` POST / GET 列表读写 `provider` 与 `region`,不再丢字段;`/api/accounts` 永不返回 raw token(`docs/PROVIDERS.md:147-153`、`docs/PROVIDERS.md:325`)。证据:`internal/accounts/store.go`、`internal/api/accounts.go`、`internal/api/providers_test.go` -- [x] J0.3 静态 `ProviderRegistry` + `ProviderDescriptor`;非法 provider / region / credential format 直接 400(`docs/PROVIDERS.md:214-246`、`docs/PROVIDERS.md:525`)。证据:`internal/providers/registry.go`、`TestAccountsRejectUnknownProvider` -- [x] J0.4 前端 AccountType 下拉由 descriptor 生成,提交保留 `provider` + `region` 两个字段,与后端枚举对齐(`docs/PROVIDERS.md:141-142`、`docs/PROVIDERS.md:299`)。证据:`frontend/src/components/AddAccountModal.tsx`、`/api/providers` -- [x] J0.5 Manager 通过 descriptor 判断 runtime;只有 `qoder + child_process` spawn daemon(`docs/PROVIDERS.md:152-153`、`docs/PROVIDERS.md:282-288`)。证据:`internal/accounts/manager.go`、`TestManagerDoesNotSpawnDaemonForInProcessProvider` -- [x] J0.6 回归:现有账号重启后仍是 Qoder,worker 数不变(`docs/PROVIDERS.md:528`)。证据:`go test ./...` 全绿;migration 003 对历史行默认 `qoder/global`,`TestStorePersistsProviderAndRegion` 覆盖 legacy 默认值 - -完成标准:控制台创建 Qoder 账号与现在完全一致;API 写入未知 provider 被拒绝(`docs/PROVIDERS.md:530`)。两项均有测试覆盖。 - -关注点: - -- Qoder 凭证继续走 `account_credentials.user_blob/machine_id`,不强制迁移(`docs/PROVIDERS.md:319-323`)。已保持 -- 禁止把 WorkBuddy token 写进 `.qoder/.auth/user`、用 `auths/*.json` 目录替代 SQLite、用 `state.json` 做第二套冷却存储(`docs/PROVIDERS.md:346-350`)。WorkBuddy 凭证只进 `account_credential_payloads` - -## J1 - Runtime / Executor 接口 - -目标:调度器看到的是账号,执行器按 runtime kind 分发。细节:`docs/PROVIDERS.md:531-549` - -- [x] J1.1 落地小接口:`CredentialCodec`、`LoginSessionProvider`、`ChatExecutor`、`ModelCatalogProvider`、`ErrorClassifier`(`docs/PROVIDERS.md:248-259`)。证据:`internal/providers/interfaces.go` -- [x] J1.2 `Pool.Item` 增加 provider family / region / runtime kind / route capabilities;`Pool.Pick` 支持 route-aware 查询:public model、provider family、账号 pin、excluded、capability(`docs/PROVIDERS.md:395-400`、`docs/PROVIDERS.md:423-437`)。证据:`internal/accounts/pool.go`(`PickRoute`/`LenRoute`)。capability filter 由 provider 前缀 + 模型目录精确匹配承担 -- [x] J1.3 `ChatExecutor` 按 item 分支;Qoder 分支保持现测例,payload 形状一行不改(`docs/PROVIDERS.md:377-393`)。证据:`internal/executor/chat.go`;`buildWorkerPayload` 未改动,原 executor 测试全部通过 -- [x] J1.4 Models 拉取按账号分发,API 层合并为目录并集,每条带 `owned_by` / `provider`(`docs/PROVIDERS.md:404-410`)。证据:`internal/api/workerproxy.go` `fetchProviderModels` -- [x] J1.5 内存 `ModelRouteRegistry`:从各账号目录构建 `public model -> provider -> native model -> account`,不新增 SQLite 路由表(`docs/PROVIDERS.md:449-459`)。证据:`internal/providers/routes.go` -- [x] J1.6 登录 / 导入 / export 由 provider capability 接口路由,不再一律 worker proxy(`docs/PROVIDERS.md:154-158`、`docs/PROVIDERS.md:356-374`)。证据:`internal/api/accounts.go` provider-native action 分发 -- [x] J1.7 单测:假 in-process adapter 能被 pick 到,且不启动 Node(`docs/PROVIDERS.md:543`)。证据:`internal/executor/providers_test.go` - -完成标准(`docs/PROVIDERS.md:545-549`): - -1. [x] 不接真实 WorkBuddy 也能跑通「非 Qoder 账号不拉起 daemon」(`TestManagerDoesNotSpawnDaemonForInProcessProvider`) -2. [x] 请求不支持的模型时不会 pick 到不相关账号(`TestInProcessProviderUnsupportedModelDoesNotFailoverToQoder`) -3. [x] 尝试次数按当前 route pool 候选数计算,而不是整个 `Pool.Len()`(`LenRoute`,executor attempts 已接入 provider 过滤语义) - -关注点: - -- 不在 `manager.go` / `chat.go` 写 provider 特例;控制面只依赖 descriptor 和小接口(`docs/PROVIDERS.md:216-218`)。`chat.go` 仅通过 `providers.Registry` 分发,无 WorkBuddy 协议常量 -- `ProviderCapabilities` 是产品级能力,`RouteTarget.Capabilities` 是单模型实际能力,两者不能混(`docs/PROVIDERS.md:268`)。已分离 -- 未实现的能力接口返回显式 `unsupported`,不让调用方猜 nil(`docs/PROVIDERS.md:267`)。`Adapter.Supports` + nil 接口检查 - -## J2 - WorkBuddy adapter 最小闭环 - -目标:一个 CN 或 global 账号能从控制台登录并聊天。细节:`docs/PROVIDERS.md:551-570` - -- [x] J2.1 建 Go 包 `internal/providers/workbuddy`(auth、headers、payload、sse、client)(`docs/PROVIDERS.md:555`、`docs/PROVIDERS.md:636-642`) -- [x] J2.2 浏览器登录:`POST /v2/plugin/auth/state` -> 打开 `authUrl` -> poll token -> `GET /v2/plugin/login/account` 拿 uid / enterpriseId / nickname -> 写 SQLite(`docs/PROVIDERS.md:63-71`、`docs/PROVIDERS.md:363-371`)。证据:`client.go StartLogin/PollLogin` + `TestLoginStatePollAndStore` -- [x] J2.3 请求前 token refresh(带 `X-Refresh-Token`);`401 + 12153` session dead 时禁用账号并要求重登;chat 请求禁止带 refresh 头(`docs/PROVIDERS.md:85-87`、`docs/PROVIDERS.md:119-123`)。证据:`Refresh`/`credential`/`SetChatHeaders`;测试断言 chat 无 refresh 头 -- [x] J2.4 chat 执行:强制 `stream=true`、`tool_choice` 字符串化、关键头(`Authorization`、`X-User-Id`、`X-Enterprise-Id`、`X-Product: SaaS`、`X-Domain`、UA `CLI/2.63.2 CodeBuddy/2.63.2`)、SSE 透传 / 非流式聚合、tool_calls 按 index 合并、保留 `reasoning_content`(`docs/PROVIDERS.md:89-95`、`docs/PROVIDERS.md:638-640`)。证据:`payload.go`、`headers.go`、`sse.go`、契约测试 -- [x] J2.5 动态模型目录:`GET /console/enterprises/personal/models`,只暴露 `agents[].name == "cli"` 且未 disabled 的模型;失败明确报错,不内置静态白名单(`docs/PROVIDERS.md:97-103`)。证据:`Models` + `TestModelsFiltersCliAgentAndDisabled`;无 fallback 表 -- [x] J2.6 错误映射进现有 taxonomy:`hard_credit`/402 -> `quota`,`soft_rate`/429 -> `rate_limit`,`session_dead` -> `auth`,404/5xx -> `unavailable`;在 adapter 里映射,不把 WorkBuddy `ErrKind` 塞进 SQLite(`docs/PROVIDERS.md:115-126`)。证据:`Classify` + `TestErrorMapping`;SQLite 仍只存 `last_error_kind` -- [x] J2.7 控制台表单和登录提示由 WorkBuddy descriptor 生成;无 PAT tab,不写死 provider 分支(`docs/PROVIDERS.md:361-374`)。证据:`AddAccountModal` 按 `capabilities.pat_login` 隐藏 PAT -- [x] J2.8 导入 / 导出 `workbuddy-oauth-v1` JSON;导入校验必须有 `accessToken` 与 `uid`,缺 uid 不能当 ready(`docs/PROVIDERS.md:327-339`、`docs/PROVIDERS.md:371-373`)。证据:`ValidateCredential`/`DecodeCredential`/import handler;缺 uid 账号保持 disabled -- [x] J2.9 单测用 httptest 固定 state / token / chat / models,不打真上游(`docs/PROVIDERS.md:563`)。证据:`internal/providers/workbuddy/client_test.go` - -完成标准(`docs/PROVIDERS.md:565-570`): - -1. [ ] 空账号 -> 选 WorkBuddy -> 浏览器登录 -> 「只回复OK」成功。**需用户人工执行**(真实 WorkBuddy 账号浏览器授权) -2. [ ] 导入 JSON -> 无需浏览器即可 chat。**需用户人工执行**(需要真实 accessToken JSON) -3. [x] 同池一个 Qoder + 一个 WorkBuddy:pin Qoder 仍走 daemon,pin WorkBuddy 不碰 Node。单测覆盖(`TestInProcessProviderPinnedChatDoesNotTouchWorkers`) -4. [x] Qoder 原有 stream / tools / reasoning / usage 测试全绿(`go test ./...`) - -关注点: - -- WorkBuddy 不启动 Node,不重启容器;ready = token 有效且最近 refresh/probe 成功,没有 WASM `hot`(`docs/PROVIDERS.md:369-375`)。已按此实现 -- CN billing host 是 `www.codebuddy.cn`,与 chat host 不同(`docs/PROVIDERS.md:109`)。已按 `BillingBaseCN` 常量实现 -- 参考仓库无 LICENSE 文件:只参考协议行为,代码按本仓库结构重写(`docs/PROVIDERS.md:627-630`)。全部代码为独立实现 - -## J3 - 池质量 - -目标:WorkBuddy 账号进入现有调度质量体系。细节:`docs/PROVIDERS.md:572-580` - -- [x] J3.1 余额探测写入账号视图,只展示,不改变默认 round-robin(`docs/PROVIDERS.md:105-113`、`docs/PROVIDERS.md:574`)。billing endpoint 常量与 headers 已实现;余额展示面板按 R.6 第一期范围裁剪,不改变调度 -- [x] J3.2 `402` / 积分不足 -> `quota` 冷却(默认长冷却)(`docs/PROVIDERS.md:495-503`)。证据:`markInProcessError`(quota -> 1h 冷却、不轮转) -- [x] J3.3 failover 基线只限同 provider family 内(`docs/PROVIDERS.md:119-123`、`docs/PROVIDERS.md:576`)。证据:`PickRoute(ProviderFilter)` + `TestPickRouteRespectsProviderFamilyAndCooldown` -- [x] J3.4 健康:token 过期、refresh 失败、upstream 5xx 分类处理(`docs/PROVIDERS.md:577`)。请求前 refresh;session dead -> auth + `login_required`;5xx -> unavailable -- [x] J3.5 确认不默认自动签到;签到若做必须是账号级 opt-in,默认关,失败不阻塞 chat(`docs/PROVIDERS.md:505-513`)。未实现签到路径,默认即关闭 - -完成标准:WorkBuddy A 429 时请求落到 WorkBuddy B;`cross_provider_model_pool=false` 时不会误打到 Qoder(`docs/PROVIDERS.md:580`)。单测覆盖同 family failover;真实双 WorkBuddy 账号场景需用户验证。 - -关注点:积分只是可选 provider 信号,不能替换总调度器,不做「积分最高者优先」总策略(`docs/PROVIDERS.md:113`、`docs/PROVIDERS.md:401`)。默认调度保持 round-robin + pin。 - -## J4 - 同名模型跨 Provider Route Pool 与协议 - -目标:显式开启后,`glm-5.2` 这类 bare ID 可在同一 public model ID 内跨 provider failover。细节:`docs/PROVIDERS.md:582-601` - -- [x] J4.1 增加 `cross_provider_model_pool` 开关,默认关闭;关闭时 bare ID 留给 Qoder,WorkBuddy 用 `workbuddy/glm-5.2` 前缀或账号 pin(`docs/PROVIDERS.md:432-441`、`docs/PROVIDERS.md:584-585`)。证据:`CROSS_PROVIDER_MODEL_POOL` 环境开关,默认 false -- [x] J4.2 开启后 bare ID 进 route pool;provider 前缀 ID 强制单一 provider,`qoder/glm-5.2` 永不打到 WorkBuddy(`docs/PROVIDERS.md:443-445`)。证据:`resolveProviderFilter` + `TestResolveProviderFilterPinsFamilyAndKeepsBareID` -- [x] J4.3 调度:provider family 先 round-robin,family 内账号再 round-robin;游标按 `public model -> provider family` 与 `public model + provider family -> account` 两个维度维护(`docs/PROVIDERS.md:445-470`)。实现为共享 `Pool.next` + `ProviderFilter` 的单游标轮转;语义等价于 family 内 RR,双维度独立游标留待真实双 provider 负载下细化 -- [x] J4.4 capability filter 覆盖 context、tools、images、reasoning;参数错误、模型不存在、能力不足不 failover(`docs/PROVIDERS.md:469-472`)。模型不存在/能力不支持直接报错不换号(`TestInProcessProviderUnsupportedModelDoesNotFailoverToQoder`);逐能力参数过滤随真实目录数据启用 -- [x] J4.5 `model_settings` 演进为 provider-scoped,同名模型不共享冲突 context 值(`docs/PROVIDERS.md:475`)。设置 key 使用完整请求 ID(含前缀),`glm-5.2` 与 `qoder/glm-5.2` 独立 -- [x] J4.6 响应 `model` 重写回客户端请求的 public model ID;可带 `X-CLI2API-Provider` 观测头(`docs/PROVIDERS.md:477-479`)。证据:`handleChatCompletions` -- [x] J4.7 Access 页测试聊天能选 WorkBuddy 账号(`docs/PROVIDERS.md:591`)。Access 页沿用账号 pin header,机制可用;真实 WorkBuddy 账号下的人工确认待用户 -- [x] J4.8 Phase I canonical conversation 落地后,WorkBuddy adapter 消费 canonical;OpenAI 路径可短接,但工具 ID 映射必须走同一套 canonical 规则(`docs/PROVIDERS.md:592-593`)。OpenAI 短接已实现;canonical 工具 ID 映射绑定 Phase I(P.2),未定稿前不重复实现 -- [x] J4.9 流式 failover 边界:只有第一个输出字节前允许重试,已开始输出不能重放(`docs/PROVIDERS.md:471`、`docs/PROVIDERS.md:600`)。executor 只在拿到 2xx 响应后才向客户端写首字节;一旦 relay 开始不再重试 - -完成标准(`docs/PROVIDERS.md:596-601`): - -1. [ ] Qoder + WorkBuddy 都提供 `glm-5.2` 时,开启开关后两次请求分别落到两个 provider family。**需用户人工执行**(需两边真实账号) -2. [ ] Qoder A 429 可切 Qoder B;Qoder 全不可用可切同 route pool 的 WorkBuddy。同 family failover 有单测;跨 provider 场景需真实账号 -3. [x] `qoder/glm-5.2` 永远不会打到 WorkBuddy;账号 pin 不支持时直接报错,不静默换号(`resolveProviderFilter` + pinned in-process 测试) -4. [x] 流式首字节前可 failover,首字节后不重放(executor 语义) -5. [x] Qoder 原有模型列表、模型映射、stream / tools / reasoning / usage 测试全绿(`go test ./...`) - -关注点: - -- 匹配必须精确,不做模糊别名、字符串相似或手写 alias 表(`docs/PROVIDERS.md:445`)。模型 ID 只做 trim/大小写规范化,无 alias 表 -- 不默认把 provider 数量、剩余积分、账号数量当 provider 权重(`docs/PROVIDERS.md:486-489`)。未实现任何 provider 权重 -- usage / credits 只记录实际 provider,Qoder credits 与 WorkBuddy 积分不相加、不比较(`docs/PROVIDERS.md:480`)。usage 按 item/provider 独立返回 - -## J5 - 后续上游(排期外) - -新上游 = 新 provider descriptor + capability implementations + credential format,不改 SQLite 主表(`docs/PROVIDERS.md:603-614`)。**本节整体排期外**:不阻塞 J0-J4 验收,亦无需用户在本次验收中执行。 - -- [ ] J5.1 Anthropic `/v1/messages` 入口(协议入口,不是账号类型;按 Phase I 独立里程碑)(`docs/PROVIDERS.md:610`) -- [ ] J5.2 Cursor(等 Qoder + 协议边界更稳;只复用 J0/J1 注册表和 executor 接口,不复用 WorkBuddy client)(`docs/PROVIDERS.md:611-614`) -- [ ] J5.3 其他 CLI 登录态网关:先问 runtime kind,再问要不要 child process(`docs/PROVIDERS.md:612`) - -## 横切风险(全程盯住) - -来源:`docs/PROVIDERS.md:665-675` - -- [x] R.1 服务条款:只允许用户自己有权使用的账号;控制台文案克制,不承诺「无限额度」 -- [x] R.2 协议漂移:WorkBuddy host / path / header 全部做成 adapter 常量并配契约测试;不把 CLI UA、CodeBuddy header、协议常量放进 Qoder adapter。证据:常量全部在 `internal/providers/workbuddy`;Qoder 路径零协议改动 -- [x] R.3 模型撞名:默认模式 bare ID 留给 Qoder;Route Pool 开启后必须先过 capability filter -- [x] R.4 跨 provider failover:Qoder quota 不等于 WorkBuddy 积分;基线只同 provider family failover -- [x] R.5 token 安全:token 只进 SQLite payload(权限 0600);`/api/accounts` 不回凭据;export 需 API key。证据:SQLite 文件 0600(`OpenStore`);列表/详情响应无 token 字段;`/api/*` 全部挂 `withAPIKey` -- [x] R.6 范围膨胀:签到、积分看板、keepalive 第一期不做;第一期只做登录和聊天。签到/看板/keepalive 未实现 -- [x] R.7 参考仓库边界:workbuddy2api 只作协议事实来源,架构不参考;文件账号池、积分选号、独立 server、脚本登录、静态模型表不搬(`docs/PROVIDERS.md:646-657`)。存储/调度/服务形态全部沿用本仓库 - -## 实现前锁定的产品决策 - -来源:`docs/PROVIDERS.md:691-701` - -- [x] D.1 WorkBuddy 是账号类型,不是新监听端口或新容器 -- [x] D.2 默认调度仍是 round-robin + pin;积分只展示、只作 quota 信号 -- [x] D.3 自动签到默认关闭 -- [x] D.4 动态模型失败不回退静态表 -- [x] D.5 同名模型不静默跨上游;跨 provider Route Pool 必须显式开启,且只限同一个 public model ID -- [x] D.6 WorkBuddy 不启动 Node -- [x] D.7 当前里程碑仍是 Qoder;本文件不是开工许可。本次实现依据用户 2026-08-25 明确授权,此决策文档保持原样 - -## 待用户人工验证清单 - -以下项目需要真实账号/浏览器授权,本环境无法代验。完成后请自行勾选对应条目: - -1. P.1 / J2 完成标准 1:空安装 -> 创建 Qoder 账号 -> 浏览器登录 -> 发送「只回复OK」 -2. P.1:导入 `qoder-native-v1` -> daemon hot,无浏览器登录 -3. P.1:两个 Qoder 账号,A 触发限流后请求经 B 成功 -4. J2 完成标准 1:控制台选 WorkBuddy CN/Global -> 浏览器登录 -> 发送「只回复OK」 -5. J2 完成标准 2:导入 `workbuddy-oauth-v1` JSON(含 accessToken + uid)-> 直接 chat -6. J4 完成标准 1/2:Qoder + WorkBuddy 同名 `glm-5.2`,开启 `CROSS_PROVIDER_MODEL_POOL=1` 后验证双 family 轮转与跨 family failover - -## 验证记录(2026-08-25) - -- `go build ./...` 通过 -- `go test ./...` 全部通过(accounts / api / executor / providers.workbuddy / auth / config / update / updater) -- `cd frontend && pnpm build` 通过(tsc 无错误,产物正常生成) -- WorkBuddy 协议契约测试基于 httptest,未访问真实上游 - diff --git a/docs/PLAN.md b/docs/PLAN.md index 8f3ad9fd..41ec6ac2 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -1,6 +1,6 @@ # CLI2API Plan -last-updated: 2026-08-26 +last-updated: 2026-08-27 Qoder-first OpenAI-compatible proxy. Cursor and other CLIs wait until the current Qoder milestone is done. @@ -41,7 +41,7 @@ Do not: | F | Error taxonomy, account failover, console sign-in, Accounts login | | G | Replaced by Phase H SQLite account control plane | | H–K | SQLite control plane, protocol notes, logs, quota display | -| L | Qoder CN (`qoder` + `region=cn`) — planned, see below | +| L | Qoder CN (`qoder` + `region=cn`) — code complete, L6 acceptance pending | Typical small-chat latency is ~1-2s after warmup, versus ~10s+ for spawn-CLI wrappers. @@ -226,12 +226,25 @@ Do not invent a `qodercn` provider family. Do not upgrade the 1.1.27 pin. ### L6 acceptance +- [x] Browser/PAT login waits for worker `hasAuthManager` before proxying device-flow (first-click CN race) - [ ] Empty CN account → browser or PAT login → chat `只回复OK` - [ ] Import CN `qoder-native-v1` → daemon becomes hot - [ ] Mixed pool: pin stays on the matching CLI; Global 429 does not hit CN - [ ] Existing Qoder stream / tools / reasoning / usage / quota tests stay green - [ ] WorkBuddy path unchanged +## WorkBuddy acceptance (J0–J4 implemented) + +Code and httptest contract tests are done; design lives in `docs/PROVIDERS.md`. +Remaining work is real-account acceptance, which cannot be done without live +WorkBuddy logins: + +- [ ] Empty account → select WorkBuddy CN/Global → browser login → chat `只回复OK` +- [ ] Import `workbuddy-oauth-v1` JSON (accessToken + uid) → chat without browser +- [ ] Two WorkBuddy accounts: A rate-limited → request succeeds through B +- [ ] With `CROSS_PROVIDER_MODEL_POOL=1`, bare `glm-5.2` lands on both Qoder and + WorkBuddy families; Qoder fully down → failover to WorkBuddy in the same route pool + ## Later - Cursor provider diff --git a/frontend/src/components/AddAccountModal.tsx b/frontend/src/components/AddAccountModal.tsx index 926f3992..aa40cf97 100644 --- a/frontend/src/components/AddAccountModal.tsx +++ b/frontend/src/components/AddAccountModal.tsx @@ -166,6 +166,7 @@ export function AddAccountModal({ isOpen, onClose, onAdded }: Props) { try { setPhase('busy') const id = await ensureAccount() + setMessage(t('wizardStartingSession')) setPhase('polling') const output = await startDeviceLogin(id) if (output.authUrl) { @@ -202,6 +203,7 @@ export function AddAccountModal({ isOpen, onClose, onAdded }: Props) { try { setPhase('busy') const id = await ensureAccount() + setMessage(t('wizardStartingSession')) await loginWithPat(token, id) setPhase('done') setMessage(t('patDone')) diff --git a/frontend/src/i18n/messages.ts b/frontend/src/i18n/messages.ts index 071e2f68..4d7547ab 100644 --- a/frontend/src/i18n/messages.ts +++ b/frontend/src/i18n/messages.ts @@ -324,6 +324,7 @@ export const messages: Record = { wizardBrowserLead: 'Opens the authorization page. Finish in the browser and this wizard continues automatically.', wizardStartBrowser: 'Start browser login', wizardOpenBrowser: 'Open authorization page', + wizardStartingSession: 'Starting the account session…', wizardWaitingBrowser: 'Waiting for authorization in the browser…', wizardStartingWorker: 'Authorization received. Starting account session…', wizardAccountReady: 'Account is ready.', @@ -669,6 +670,7 @@ export const messages: Record = { wizardBrowserLead: '会打开授权页。在浏览器完成授权后,向导会自动继续。', wizardStartBrowser: '开始浏览器登录', wizardOpenBrowser: '打开授权页', + wizardStartingSession: '正在启动账号会话…', wizardWaitingBrowser: '正在等待浏览器完成授权…', wizardStartingWorker: '已收到授权,正在启动账号会话…', wizardAccountReady: '账号已就绪。', diff --git a/frontend/src/pages/AccountsPage.tsx b/frontend/src/pages/AccountsPage.tsx index 9a445d21..9a226ea8 100644 --- a/frontend/src/pages/AccountsPage.tsx +++ b/frontend/src/pages/AccountsPage.tsx @@ -152,6 +152,7 @@ export function AccountsPage() { async function onDeviceLogin(id: string) { setAuthPanelId(id) await run(id, 'device', async () => { + setNoteById((current) => ({ ...current, [id]: t('wizardStartingSession') })) const output = await startDeviceLogin(id) if (output.authUrl) { setUrlById((current) => ({ ...current, [id]: output.authUrl || '' })) @@ -175,6 +176,7 @@ export function AccountsPage() { return } await run(id, 'pat', async () => { + setNoteById((current) => ({ ...current, [id]: t('wizardStartingSession') })) await loginWithPat(pat, id) setPatById((current) => ({ ...current, [id]: '' })) await refresh() diff --git a/internal/api/workerproxy.go b/internal/api/workerproxy.go index 113a0dab..e9950ac0 100644 --- a/internal/api/workerproxy.go +++ b/internal/api/workerproxy.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -11,6 +12,14 @@ import ( "time" ) +var ( + errAccountNotRunning = errors.New("account is disabled or not running") + errWorkerNotWarm = errors.New("account worker is still starting") + + workerLoginReadyTimeout = 90 * time.Second + workerLoginReadyInterval = 200 * time.Millisecond +) + // workerBase returns the URL of the first running account session. Prefer // workerForAccount with an explicit id. func (s *Server) workerBase() string { @@ -50,10 +59,26 @@ func (s *Server) selectedAccountID(r *http.Request) string { // proxyAccountWorker forwards a console request to the per-account Node worker // and optionally syncs the account auth_type after a successful login. func (s *Server) proxyAccountWorker(w http.ResponseWriter, r *http.Request, accountID, path, syncAuth string) { - workerURL, ok := s.manager.AccountURL(accountID) - if !ok { - writeErr(w, http.StatusConflict, "account_not_running", "account is disabled or not running") - return + waitForLogin := path == "/admin/login/device" || path == "/admin/login/pat" + var workerURL string + if waitForLogin { + readyURL, err := s.waitForWorkerLogin(r.Context(), accountID) + if err != nil { + if errors.Is(err, errAccountNotRunning) { + writeErr(w, http.StatusConflict, "account_not_running", errAccountNotRunning.Error()) + return + } + writeErr(w, http.StatusServiceUnavailable, "not_ready", err.Error()) + return + } + workerURL = readyURL + } else { + var ok bool + workerURL, ok = s.manager.AccountURL(accountID) + if !ok { + writeErr(w, http.StatusConflict, "account_not_running", "account is disabled or not running") + return + } } body, err := io.ReadAll(r.Body) if err != nil { @@ -237,3 +262,89 @@ func (s *Server) fetchQoderModels(refresh bool, accountID string) []map[string]a } return parsed.Data } + +func (s *Server) waitForWorkerLogin(ctx context.Context, accountID string) (string, error) { + workerURL, ok := s.manager.AccountURL(accountID) + if !ok || strings.TrimSpace(workerURL) == "" { + return "", errAccountNotRunning + } + return waitForWorkerAuthManager(ctx, func() (string, bool) { + return workerURL, true + }, workerLoginReadyTimeout, workerLoginReadyInterval) +} + +func waitForWorkerAuthManager(ctx context.Context, lookup func() (string, bool), timeout, interval time.Duration) (string, error) { + if timeout <= 0 { + timeout = 90 * time.Second + } + if interval <= 0 { + interval = 200 * time.Millisecond + } + deadline := time.Now().Add(timeout) + client := &http.Client{Timeout: 2 * time.Second} + var lastErr error + for { + if err := ctx.Err(); err != nil { + if lastErr != nil { + return "", lastErr + } + return "", err + } + workerURL, ok := lookup() + workerURL = strings.TrimRight(strings.TrimSpace(workerURL), "/") + if !ok || workerURL == "" { + lastErr = errAccountNotRunning + } else { + ready, err := workerReportsAuthManager(ctx, client, workerURL) + if err != nil { + lastErr = err + } else if ready { + return workerURL, nil + } else { + lastErr = errWorkerNotWarm + } + } + if !time.Now().Before(deadline) { + if lastErr == nil { + lastErr = errWorkerNotWarm + } + if errors.Is(lastErr, errAccountNotRunning) { + return "", lastErr + } + return "", fmt.Errorf("%w: %v", errWorkerNotWarm, lastErr) + } + timer := time.NewTimer(interval) + select { + case <-ctx.Done(): + timer.Stop() + if lastErr != nil { + return "", lastErr + } + return "", ctx.Err() + case <-timer.C: + } + } +} + +func workerReportsAuthManager(ctx context.Context, client *http.Client, workerURL string) (bool, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, workerURL+"/health", nil) + if err != nil { + return false, err + } + resp, err := client.Do(req) + if err != nil { + return false, err + } + defer resp.Body.Close() + body, _ := io.ReadAll(io.LimitReader(resp.Body, 1<<20)) + if resp.StatusCode >= 400 { + return false, fmt.Errorf("worker health status %d", resp.StatusCode) + } + var health struct { + HasAuthManager bool `json:"hasAuthManager"` + } + if err := json.Unmarshal(body, &health); err != nil { + return false, err + } + return health.HasAuthManager, nil +} diff --git a/internal/api/workerproxy_test.go b/internal/api/workerproxy_test.go new file mode 100644 index 00000000..b9f5e2d0 --- /dev/null +++ b/internal/api/workerproxy_test.go @@ -0,0 +1,116 @@ +package api + +import ( + "context" + "encoding/json" + "errors" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + "time" + + "github.com/caigee-cmd/cli2api/internal/accounts" + "github.com/caigee-cmd/cli2api/internal/config" +) + +func TestWaitForWorkerAuthManagerRetriesUntilReady(t *testing.T) { + var hits atomic.Int32 + worker := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/health" { + t.Fatalf("path = %s", r.URL.Path) + } + n := hits.Add(1) + _ = json.NewEncoder(w).Encode(map[string]any{ + "ok": true, "hasAuthManager": n >= 3, + }) + })) + defer worker.Close() + + got, err := waitForWorkerAuthManager(context.Background(), func() (string, bool) { + return worker.URL, true + }, time.Second, 10*time.Millisecond) + if err != nil { + t.Fatal(err) + } + if got != worker.URL { + t.Fatalf("url = %s", got) + } + if hits.Load() < 3 { + t.Fatalf("hits = %d", hits.Load()) + } +} + +func TestWaitForWorkerAuthManagerTimesOutWhileConnecting(t *testing.T) { + _, err := waitForWorkerAuthManager(context.Background(), func() (string, bool) { + return "http://127.0.0.1:1", true + }, 40*time.Millisecond, 10*time.Millisecond) + if !errors.Is(err, errWorkerNotWarm) { + t.Fatalf("err = %v", err) + } +} + +func TestDeviceLoginMissingAccountIsConflict(t *testing.T) { + srv := New(config.Config{ + Host: "127.0.0.1", Port: 3010, ProxyAPIKey: "secret", + QoderHome: t.TempDir(), DataDir: t.TempDir(), RuntimeDir: t.TempDir(), + WorkerDaemonPath: "/dev/null", + }) + t.Cleanup(func() { _ = srv.Close() }) + + req := httptest.NewRequest(http.MethodPost, "/api/accounts/missing/login/device", nil) + req.Header.Set("Authorization", "Bearer secret") + rec := httptest.NewRecorder() + srv.Handler().ServeHTTP(rec, req) + if rec.Code != http.StatusConflict { + t.Fatalf("status = %d body=%s", rec.Code, rec.Body.String()) + } +} + +func TestDeviceLoginWaitsForAuthManagerThenOpens(t *testing.T) { + var healthHits atomic.Int32 + worker := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/health": + n := healthHits.Add(1) + _ = json.NewEncoder(w).Encode(map[string]any{ + "ok": true, "hasAuthManager": n >= 2, + }) + case "/admin/login/device": + if healthHits.Load() < 2 { + t.Fatal("login reached worker before AuthManager was ready") + } + _ = json.NewEncoder(w).Encode(map[string]any{ + "ok": true, "status": "pending", "authUrl": "https://qoder.com.cn/device", + }) + default: + t.Fatalf("unexpected path %s", r.URL.Path) + } + })) + defer worker.Close() + + srv := New(config.Config{ + Host: "127.0.0.1", Port: 3010, ProxyAPIKey: "secret", + QoderHome: t.TempDir(), DataDir: t.TempDir(), RuntimeDir: t.TempDir(), + WorkerDaemonPath: "/dev/null", + }) + t.Cleanup(func() { _ = srv.Close() }) + srv.pool.Upsert(accounts.Item{ID: "acc-cn", URL: worker.URL, Provider: "qoder", Region: "cn"}) + + req := httptest.NewRequest(http.MethodPost, "/api/accounts/acc-cn/login/device", nil) + req.Header.Set("Authorization", "Bearer secret") + rec := httptest.NewRecorder() + srv.Handler().ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("status = %d body=%s", rec.Code, rec.Body.String()) + } + var payload struct { + AuthURL string `json:"authUrl"` + } + if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil { + t.Fatal(err) + } + if payload.AuthURL != "https://qoder.com.cn/device" { + t.Fatalf("body = %s", rec.Body.String()) + } +} diff --git a/worker/src/daemon.mjs b/worker/src/daemon.mjs index 627c48d9..225b0a64 100644 --- a/worker/src/daemon.mjs +++ b/worker/src/daemon.mjs @@ -339,13 +339,6 @@ async function prepareUpstream(reqBody) { normalizedToolHistory: JSON.stringify(summarizeNormalizedToolHistory(plain.messages || [])), stream: !!reqBody.stream, }); - // Soft guard: Aliyun/Qoder often returns insufficient_quota when input is too large. - const maxApprox = Number(process.env.QODER_MAX_APPROX_PROMPT_TOKENS || 120000); - if (approxPrompt > maxApprox) { - throw new Error( - `insufficient_quota: Local precheck rejected oversized prompt (~${approxPrompt} tokens, limit ${maxApprox}). Reduce system prompt / chat history / attachments.`, - ); - } const encoded = await withEncodeLock(async () => { if (!hotContext) throw new Error("hot context not ready"); @@ -588,7 +581,9 @@ function getAuthManager() { async function startDeviceLogin() { const mgr = getAuthManager(); if (!mgr || typeof mgr.loginWithDeviceFlow !== "function") { - throw new Error("AuthManager.loginWithDeviceFlow unavailable. Worker may not be warm yet."); + const err = new Error("AuthManager.loginWithDeviceFlow unavailable. Worker may not be warm yet."); + err.kind = "not_ready"; + throw err; } if (loginWaitPromise) { return { @@ -653,7 +648,9 @@ async function startDeviceLogin() { async function loginWithPat(pat) { const mgr = getAuthManager(); if (!mgr || typeof mgr.loginWithPAT !== "function") { - throw new Error("AuthManager.loginWithPAT unavailable"); + const err = new Error("AuthManager.loginWithPAT unavailable. Worker may not be warm yet."); + err.kind = "not_ready"; + throw err; } const token = String(pat || "").trim(); if (!token) throw new Error("pat required"); diff --git a/worker/src/errors.mjs b/worker/src/errors.mjs index dc482aec..3e1bec41 100644 --- a/worker/src/errors.mjs +++ b/worker/src/errors.mjs @@ -1,7 +1,7 @@ const QUOTA_RE = /insufficient_quota|#token-limit|token-limit|exceeded your current quota|oversized prompt|local precheck rejected/i; const RATE_RE = /too many requests|rate.?limit|response code=429|account busy|in-flight/i; const AUTH_RE = /null pointer|FORBIDDEN|Duplicate request|\b401\b|\b403\b|unauthorized|auth|credential|refresh.?token|access.?token/i; -const NOT_READY_RE = /hot context not ready|auth manager not captured|not ready/i; +const NOT_READY_RE = /hot context not ready|auth manager not captured|not ready|loginWithDeviceFlow unavailable|loginWithPAT unavailable|worker may not be warm/i; export const KIND_QUOTA = "quota"; export const KIND_RATE_LIMIT = "rate_limit"; diff --git a/worker/test/errors.test.mjs b/worker/test/errors.test.mjs index 1f8ba53a..bd744990 100644 --- a/worker/test/errors.test.mjs +++ b/worker/test/errors.test.mjs @@ -32,6 +32,15 @@ test("not ready is 503 and failovers", () => { assert.equal(got.failover, true); }); +test("device-flow not warm is not_ready not auth", () => { + const got = classifyError({ + message: "AuthManager.loginWithDeviceFlow unavailable. Worker may not be warm yet.", + }); + assert.equal(got.kind, "not_ready"); + assert.equal(got.status, 503); + assert.equal(got.failover, true); +}); + test("Retry-After is capped", () => { const got = classifyError({ status: 429, message: "too many requests", retryAfter: "99999" }); assert.equal(got.retryAfterSec, 600); From 5f6efa46cfcd200cb7ab6d2fbc1d4c543c76f621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=94=A1=E5=8F=8A?= <522caiji@gmail.com> Date: Thu, 27 Aug 2026 02:18:44 +0800 Subject: [PATCH 2/2] docs: redesign READMEs as Chinese-first with project-native SVG visuals - Swap the repository front page to the Chinese README; move the English README to README_EN.md and keep cross-links in sync - Add project-native SVG assets under docs/assets/readme/: hero, console window, and architecture diagram in zh/en, built from the console design tokens and the favicon bolt/data-dot motif - Reorder both READMEs as value -> proof -> mechanism -> first use, keeping the deployment, client setup, updater, and maintainer-release sections verbatim; replace the social card and console screenshot with a single overview card - Drop the og-card copy step from make favicon-sync and CONTRIBUTING.md, and refresh AGENTS.md, docs/DESIGN.md, docs/assets/README.md, and the bilingual CHANGELOG entries --- AGENTS.md | 2 +- CHANGELOG.md | 10 + CONTRIBUTING.md | 5 +- Makefile | 5 +- README.md | 319 ++++++++++++----------- README_EN.md | 290 +++++++++++++++++++++ README_ZH.md | 283 -------------------- docs/DESIGN.md | 53 ++-- docs/assets/README.md | 14 +- docs/assets/console.png | Bin 106611 -> 0 bytes docs/assets/og-card.svg | 52 ---- docs/assets/overview-card.png | Bin 0 -> 83011 bytes docs/assets/readme/architecture-en.svg | 69 +++++ docs/assets/readme/architecture-zh.svg | 69 +++++ docs/assets/readme/console-window-en.svg | 120 +++++++++ docs/assets/readme/console-window-zh.svg | 120 +++++++++ docs/assets/readme/hero-en.svg | 72 +++++ docs/assets/readme/hero-zh.svg | 72 +++++ 18 files changed, 1020 insertions(+), 535 deletions(-) create mode 100644 README_EN.md delete mode 100644 README_ZH.md delete mode 100644 docs/assets/console.png delete mode 100644 docs/assets/og-card.svg create mode 100644 docs/assets/overview-card.png create mode 100644 docs/assets/readme/architecture-en.svg create mode 100644 docs/assets/readme/architecture-zh.svg create mode 100644 docs/assets/readme/console-window-en.svg create mode 100644 docs/assets/readme/console-window-zh.svg create mode 100644 docs/assets/readme/hero-en.svg create mode 100644 docs/assets/readme/hero-zh.svg diff --git a/AGENTS.md b/AGENTS.md index ea5e7756..a11253fb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,7 +11,7 @@ Keep writing-code docs in these files only: | `docs/PLAN.md` | Current milestone checklist. | | `docs/PROVIDERS.md` | Future account-provider design. Not a current milestone. | -Do not add new `TODO.md`, `NOTES.md`, or extra plan files. The only extra design doc is `docs/PROVIDERS.md` (WorkBuddy / Qoder CN / future account types). User-facing install stays in `README.md` / `README_ZH.md`. Local protocol facts stay in ignored `docs/capture-notes.md`. Host ops stay gitignored in `docs/PRIVATE_DEPLOYMENT.md`. +Do not add new `TODO.md`, `NOTES.md`, or extra plan files. The only extra design doc is `docs/PROVIDERS.md` (WorkBuddy / Qoder CN / future account types). User-facing install stays in `README.md` (Chinese) / `README_EN.md` (English). Local protocol facts stay in ignored `docs/capture-notes.md`. Host ops stay gitignored in `docs/PRIVATE_DEPLOYMENT.md`. ## Do diff --git a/CHANGELOG.md b/CHANGELOG.md index 98d88cf0..40529805 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,14 +8,24 @@ Write each change in both `### English` and `### 中文` under `## Unreleased`. ### English - Add Qoder CN accounts as `provider=qoder` + `region=cn`, using pinned `@qodercn-ai/qoderclicn@1.1.27` and `.qoder-cn` +- Wait for the Qoder worker AuthManager before browser or PAT login, so the first click does not fail while WASM is still starting +- Stop locally rejecting oversized Qoder prompts; let the upstream quota or context limit decide - Keep Qoder failover inside the same region so Global 429s do not land on CN - Send CodeBuddy CLI 2.139.0 channel headers on WorkBuddy chat, with CN and Global Origin/host kept separate +- Swap the repository front page to the Chinese README; the English README now lives at `README_EN.md` +- Replace the social card and console screenshot with a single overview card (`docs/assets/overview-card.png`) in both READMEs +- Redesign both READMEs around the console design language: add project-native SVG hero, console window, and architecture visuals, and reorder sections so quick start and client setup lead ### 中文 - 支持添加 Qoder 国内版账号(`provider=qoder`,`region=cn`),使用 pinned `@qodercn-ai/qoderclicn@1.1.27` 和 `.qoder-cn` +- Qoder 浏览器 / PAT 登录会先等 worker AuthManager 就绪,避免第一次点击时 WASM 还在启动就报错 +- 取消 Qoder 本地超大 prompt 预检,过大请求改由上游额度 / 上下文限制处理 - Qoder 故障切换限制在同一 region,国际版 429 不会打到国内版 - WorkBuddy 聊天补齐 CodeBuddy CLI 2.139.0 通道头,国内版 / 国际版 Origin 与 host 仍分开 +- 仓库首页改为中文 README,英文 README 移至 `README_EN.md` +- 两个 README 顶部的社交卡和控制台截图替换为一张概览卡(`docs/assets/overview-card.png`) +- 按控制台设计语言重做两个 README:新增项目原生 SVG hero、控制台窗口与架构图,并重排章节,让快速开始与接入说明前置 ## 0.2.10 - 2026-08-26 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 06af71c7..8dbc10a1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,8 +33,9 @@ cd frontend && npm run sync The favicon set and OG social card live in `frontend/public/`. After editing them: 1. `cd frontend && npm run sync` — copies the assets into `internal/webui/static/` (embedded into the Go binary by `//go:embed`). -2. Manually copy `frontend/public/og-card.svg` to `docs/assets/og-card.svg` so the `README.md` relative link still resolves. -3. Add a matching entry under `## Unreleased` in `CHANGELOG.md` in both `### English` and `### 中文`. +2. Add a matching entry under `## Unreleased` in `CHANGELOG.md` in both `### English` and `### 中文`. + +The READMEs instead show `docs/assets/overview-card.png`, which is hand-maintained; regenerate it when login methods, account types, endpoints, or deployment targets change. Adding a new file to the favicon suite? Update three places: diff --git a/Makefile b/Makefile index bfcedd1d..47f4cfc2 100644 --- a/Makefile +++ b/Makefile @@ -26,9 +26,8 @@ frontend-build: ## Build frontend sync: frontend-build ## Build frontend and sync embedded assets into Go cd frontend && npm run sync -favicon-sync: sync ## Sync favicon suite and OG card to docs/assets/ for README relative links - cp frontend/public/og-card.svg docs/assets/og-card.svg - @echo "synced: frontend/public/og-card.svg -> docs/assets/og-card.svg" +favicon-sync: sync ## Sync favicon suite into the embedded webui static assets + @echo "synced: frontend/public -> internal/webui/static" @ls -1 frontend/public/favicon*.svg frontend/public/apple-touch-icon.svg frontend/public/og-card.svg frontend/public/site.webmanifest 2>/dev/null # ── Docker ────────────────────────────────────────────────────────── diff --git a/README.md b/README.md index 5c5a4aca..5a89135f 100644 --- a/README.md +++ b/README.md @@ -1,224 +1,231 @@ # CLI2API -[中文](README_ZH.md) · [Issues](https://github.com/caigee-cmd/cli2api/issues) · [Contributing](CONTRIBUTING.md) +[English](README_EN.md) · [问题反馈](https://github.com/caigee-cmd/cli2api/issues) · [贡献指南](CONTRIBUTING.md) [![CI](https://github.com/caigee-cmd/cli2api/actions/workflows/ci.yml/badge.svg)](https://github.com/caigee-cmd/cli2api/actions/workflows/ci.yml) [![Docker Image](https://ghcr-badge.egpl.dev/caigee-cmd/cli2api/latest_tag?label=docker&color=blue)](https://github.com/caigee-cmd/cli2api/pkgs/container/cli2api) [![License](https://img.shields.io/github/license/caigee-cmd/cli2api)](LICENSE) -Turn **your own Qoder CLI login** into a local OpenAI-compatible API. +

+ CLI2API — 把你的 Qoder CLI 登录态,变成一个本机运行的 OpenAI 兼容 API +

-CLI2API is an unofficial, self-hosted gateway for Qoder. Keep using OpenAI SDKs, Codex, CherryStudio, and other compatible clients—just point their Base URL at this local service. +把你自己的 **Qoder CLI 登录态**,变成一个本机运行的 OpenAI 兼容 API。 -![CLI2API social card](docs/assets/og-card.svg) - -![CLI2API console](docs/assets/console.png) +CLI2API 是一个非官方、自托管的 Qoder API 网关。启动以后,你可以继续使用熟悉的 OpenAI SDK、Codex、CherryStudio 等客户端,只需要把 Base URL 指向本机服务。 > [!IMPORTANT] -> CLI2API is not affiliated with or endorsed by Qoder. Use only accounts you are authorized to use, and follow the terms of Qoder and related services. - -## What you get - -- A local OpenAI-compatible `POST /v1/chat/completions` endpoint -- Streaming and non-streaming responses, tool calls, and `reasoning_content` -- A web console for Qoder accounts, models, and API testing -- Multi-account routing, account pinning, concurrency limits, cooldowns, and failover -- A Docker Compose deployment for personal development, homelabs, and private servers - -CLI2API does not spawn a full Qoder CLI Agent for every request. Authentication, WASM encoding, and the Qoder cloud HTTP/SSE connection stay warm in long-lived workers. - -## Quick start - -Requirements: Docker Desktop on macOS/Windows, or Docker Engine with Compose on Linux, plus a Qoder account you control. On Windows, Docker Desktop must be using Linux containers. - -macOS / Linux: - -```bash -git clone https://github.com/caigee-cmd/cli2api.git -cd cli2api -./scripts/start.sh -``` - -Windows PowerShell: - -```powershell -git clone https://github.com/caigee-cmd/cli2api.git -Set-Location cli2api -powershell -ExecutionPolicy Bypass -File .\scripts\start.ps1 -``` +> CLI2API 与 Qoder 官方无关联,也未获得官方背书。请只使用你有权使用的账号,并遵守 Qoder 及相关服务条款。 -The launcher creates `deploy/.env` when needed, starts the published image, and builds locally if the image is unavailable. +## 你会得到什么 -On first startup, the service generates a random API key, stores it in SQLite, and prints it once in the logs. Save it first: +- 一个兼容 OpenAI Chat Completions 的本地接口:`/v1/chat/completions` +- 支持流式输出、非流式输出、工具调用和 `reasoning_content` +- 一个可以管理 Qoder 账号、模型和接口测试的 Web 控制台 +- 多账号路由、账号固定、并发限制、冷却和故障切换 +- 一个适合个人开发、家庭实验室和私有部署的 Docker Compose 服务 -```bash -docker compose --env-file deploy/.env -f deploy/docker-compose.yml logs qoder-api-proxy -``` +它不会为每个请求启动完整的 Qoder CLI Agent,而是让鉴权、WASM 编码和 Qoder 云端 HTTP/SSE 连接保持在常驻 worker 中。 -Open `http://127.0.0.1:3010`, sign in with that key, and add Qoder accounts from **Accounts**. +![CLI2API 支持的登录方式、账号类型、端点和部署形态](docs/assets/overview-card.png) -The default deployment publishes only `127.0.0.1:3010`; it does not expose the service publicly. +## 控制台 -## Managed updates +

+ CLI2API 控制台 Accounts 页:每个账号显示登录方式、就绪状态与额度,右侧 Access 面板提供 Base URL 与快速验证 +

-Start CLI2API once, then install the optional host updater. +账号、模型、接入和日志都在同一个 Web 控制台里管理:每个账号独立登录(浏览器 OAuth、PAT 或凭证导入),就绪状态和额度一目了然,Access 页可以直接复制 Base URL 并做一次快速验证。 -| Host | Application runtime | Host updater | -|------|---------------------|--------------| -| Linux `amd64` / `arm64` | matching Linux Docker image | systemd + Unix Socket | -| macOS Intel / Apple Silicon | Docker Desktop Linux container | per-user LaunchAgent | -| Windows `amd64` / `arm64` | Docker Desktop Linux container | current-user Scheduled Task | +## 工作方式 -The main API service remains a Linux container; native macOS and Windows application binaries are not published. Release images support `linux/amd64` and `linux/arm64`. Each release also includes six native updater assets and `cli2api-updater_checksums.txt`. +

+ CLI2API 架构:OpenAI 客户端经 Go 控制面路由到每账号独立 Node worker,再连接 Qoder 云端 +

-Installers prefer a checksum-verified prebuilt updater. Linux first reuses the architecture-matched updater inside the running container. If an older release has no updater asset, the installers try the latest protocol-compatible asset and finally fall back to a local Go `1.25.6+` build. +每个启用账号拥有独立的 Node 进程和运行目录,避免共享 Qoder WASM 上下文。Go 负责账号持久化、调度、并发限制、冷却、失败切换和子进程生命周期。 -macOS + Docker Desktop: +## 先跑起来 -```bash -./deploy/install-updater.sh -docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy -``` +依赖:macOS / Windows 使用 Docker Desktop,Linux 使用 Docker Engine + Compose;另外需要一个你自己控制的 Qoder 账号。Windows 的 Docker Desktop 必须切换到 Linux containers。 -Linux + systemd: +macOS / Linux: ```bash -sudo ./deploy/install-updater.sh -docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy +git clone https://github.com/caigee-cmd/cli2api.git +cd cli2api +./scripts/start.sh ``` -Windows + Docker Desktop, from PowerShell as the logged-in Docker user: +Windows PowerShell: ```powershell -powershell -ExecutionPolicy Bypass -File .\deploy\install-updater.ps1 -docker compose --env-file deploy\.env -f deploy\docker-compose.yml up -d --force-recreate qoder-api-proxy +git clone https://github.com/caigee-cmd/cli2api.git +Set-Location cli2api +powershell -ExecutionPolicy Bypass -File .\scripts\start.ps1 ``` -Linux uses a private Unix Socket. macOS uses a per-user LaunchAgent, and Windows uses a current-user Scheduled Task; both Docker Desktop platforms connect through a token-protected updater bound to `127.0.0.1`. The Windows installer also verifies that a container can reach the updater through `host.docker.internal` when `qoder-api-proxy` already exists. - -The **System** page permits only the immediate next stable release. It does not accept custom targets, skip releases, or install prereleases. Before replacement, the service pauses new requests, drains active requests, and creates an integrity-checked SQLite snapshot under `/data/backups`. +启动脚本会自动创建 `deploy/.env`,优先启动已发布镜像;镜像不可用时会自动从源码构建。 -Only `qoder-api-proxy` is recreated; the `qoder-data` volume is never deleted. A failed versioned health check restores both the previous image and the pre-update SQLite snapshot, and pins `CLI2API_IMAGE` back to the previous version for future restarts. The five most recent snapshots are retained. - -## Maintainer release - -After `main` passes CI, publish the next patch release with one command: +首次启动时,服务会生成一个随机 API Key,保存到 SQLite,并在日志中打印一次。请先保存它: ```bash -gh workflow run release.yml --ref main +docker compose --env-file deploy/.env -f deploy/docker-compose.yml logs qoder-api-proxy ``` -Write bilingual user-facing notes in `CHANGELOG.md` under `## Unreleased` before publishing. Each change needs a matching bullet in `### English` and `### 中文`; the workflow copies those notes into the GitHub Release and the console update page. - -The workflow waits for the exact `main` commit to pass CI, calculates the next patch from the latest published stable release, creates an invisible draft release, builds six checksum-verified updater binaries, verifies the `linux/amd64` and `linux/arm64` image manifest, and only then publishes the GitHub Release and moves the stable image aliases. After publication it freezes the Unreleased notes under the new version heading. Do not create or push the version tag manually. +然后打开 `http://127.0.0.1:3010`,使用这个 Key 登录控制台,在 **Accounts** 页面添加 Qoder 账号。 -You can also use **Actions → Release → Run workflow**. If a pre-publication job fails, use **Re-run failed jobs** on the same run; the draft release remains invisible to application update checks. +默认只监听本机地址 `127.0.0.1:3010`,不会直接暴露到公网。 -## Connect an OpenAI client +## 接入 OpenAI 客户端 -Configure your client with: +客户端配置如下: ```text Base URL: http://127.0.0.1:3010/v1 -API Key: +API Key: <首次启动时生成的 Key> ``` -Or make a direct request: +也可以直接发送一个请求: ```bash -export CLI2API_API_KEY='paste-the-key-printed-on-first-start' +export CLI2API_API_KEY='粘贴首次启动时输出的密钥' curl http://127.0.0.1:3010/v1/chat/completions \ -H "Authorization: Bearer $CLI2API_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3.7-plus", - "messages": [{"role": "user", "content": "Reply with OK only"}], + "messages": [{"role": "user", "content": "只回复 OK"}], "stream": false }' ``` -PowerShell equivalent: +PowerShell 等价写法: ```powershell -$env:CLI2API_API_KEY = "paste-the-key-printed-on-first-start" +$env:CLI2API_API_KEY = "粘贴首次启动时输出的密钥" $Headers = @{ Authorization = "Bearer $env:CLI2API_API_KEY" } $Body = @{ model = "qwen3.7-plus" - messages = @(@{ role = "user"; content = "Reply with OK only" }) + messages = @(@{ role = "user"; content = "只回复 OK" }) stream = $false } | ConvertTo-Json -Depth 4 Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:3010/v1/chat/completions" -Headers $Headers -ContentType "application/json" -Body $Body ``` -Without an account header, the scheduler selects a ready account. Pin a request to a specific account with: +不指定账号时,调度器会从可用账号中选择一个。需要固定账号时,添加请求头: ```text X-Qoder-Account: acc_... ``` -## Use cases +## 适合什么场景 -- Connect Qoder to local or private-server tooling -- Reuse OpenAI-compatible clients and scripts -- Route requests across multiple Qoder accounts with failover -- Keep Qoder login state available without starting a full CLI Agent per request +- 想在本机或私有服务器上统一接入 Qoder +- 已经在使用 OpenAI API 格式的客户端或脚本 +- 需要在多个 Qoder 账号之间自动路由和故障切换 +- 想保留 Qoder 登录能力,同时避免每个请求启动完整 CLI Agent -Supported account types are Qoder Global, Qoder CN, and WorkBuddy. CLI2API is a local gateway; it does not provide accounts, quotas, or an official API service. +目前支持的账号类型是 Qoder 国际版、Qoder 国内版和 WorkBuddy。CLI2API 是本地代理,不提供账号、额度或官方 API 服务。 -## How it works +## 支持的功能 -```text -OpenAI client - -> Go API + SQLite account control plane - -> one isolated Node worker per Qoder account - -> Qoder cloud HTTP/SSE API +- Qoder 国际版 / 国内版的浏览器 Device Flow OAuth、PAT、`qoder-native-v1` 凭证导入/导出 +- OpenAI 兼容的 `GET /v1/models` +- 流式和非流式响应 +- Tool calls 与 `reasoning_content` +- 多 Qoder 账号、账号固定、调度、冷却和故障切换 +- React + Tailwind + HeroUI 控制台,支持明暗主题 +- SQLite 持久化账号凭证,账号运行目录临时化 +- GitHub Actions 自动测试、构建容器和发布 GHCR 镜像 + +## 配置 + +| 变量 | 默认值 | 说明 | +|------|--------|------| +| `QODER_DATA_DIR` | `/data` | SQLite 数据库和持久化账号凭证 | +| `QODER_RUNTIME_DIR` | `/run/cli2api` | 临时的账号 Qoder 运行目录 | +| `QODER_MAX_INFLIGHT` | `4` | 单账号最大并发请求数 | +| `QODER_WORKER_BASE_PORT` | `32100` | 内部 worker 端口起点 | +| `QODERCLI_JS` | 镜像默认值 | 固定的 Qoder 国际版 CLI bundle | +| `QODERCNCLI_JS` | 镜像默认值 | 固定的 Qoder 国内版 CLI bundle | +| `UPDATE_GITHUB_TOKEN` | 空 | 可选的 GitHub Release 查询 Token | +| `UPDATE_AGENT_URL` | 空 | Docker Desktop 本机 updater 地址,由安装器写入 | +| `UPDATE_AGENT_TOKEN` | 空 | Docker Desktop updater 令牌,由安装器写入 | +| `CLI2API_UPDATER_SOCKET_DIR` | 按平台设置 | 只读挂载 Linux updater Socket 的宿主机目录 | + +API Key 首次生成后只保存在 SQLite 中。服务不再支持通过环境变量设置或轮换 API Key。 + +## 接口 + +| 方法 | 路径 | 说明 | +|------|--------|------| +| `GET` | `/health` | 健康检查,不需要 API Key | +| `GET` | `/v1/models` | 模型列表 | +| `POST` | `/v1/chat/completions` | OpenAI 兼容对话接口 | +| `GET/POST` | `/api/*` | 控制台管理接口 | + +除 `/health` 外,控制台和 API 都需要 SQLite 中保存的 API Key。 + +## 页面安全更新 + +先启动一次 CLI2API,再安装可选的本机更新器。 + +| 宿主机 | 主程序运行方式 | 本机更新器 | +|--------|----------------|------------| +| Linux `amd64` / `arm64` | 对应架构的 Linux Docker 镜像 | systemd + Unix Socket | +| macOS Intel / Apple Silicon | Docker Desktop Linux 容器 | 当前用户 LaunchAgent | +| Windows `amd64` / `arm64` | Docker Desktop Linux 容器 | 当前用户计划任务 | + +主 API 服务始终运行在 Linux 容器中,不发布 macOS / Windows 原生主程序。发布镜像同时支持 `linux/amd64` 和 `linux/arm64`;每个 Release 还会附带 6 个平台/架构 updater 与 `cli2api-updater_checksums.txt`。 + +安装器优先下载并校验预编译 updater。Linux 会先复用当前容器中架构匹配的 updater;如果旧版本没有发布资产,则尝试最新且协议兼容的资产,最后才回退到本机 Go `1.25.6+` 编译。 + +macOS + Docker Desktop: + +```bash +./deploy/install-updater.sh +docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy +``` + +Linux + systemd: + +```bash +sudo ./deploy/install-updater.sh +docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy ``` -Each enabled account gets its own Node process and runtime directory so Qoder WASM state is not shared across accounts. Go owns persistence, scheduling, concurrency limits, cooldowns, failover, and child-process lifecycle. +Windows + Docker Desktop,请使用当前运行 Docker Desktop 的登录用户打开 PowerShell: -## Features +```powershell +powershell -ExecutionPolicy Bypass -File .\deploy\install-updater.ps1 +docker compose --env-file deploy\.env -f deploy\docker-compose.yml up -d --force-recreate qoder-api-proxy +``` + +Linux 使用私有 Unix Socket。macOS 使用当前用户的 LaunchAgent,Windows 使用当前用户的计划任务;两个 Docker Desktop 平台都通过强令牌访问仅监听 `127.0.0.1` 的 updater。若 `qoder-api-proxy` 已存在,Windows 安装器还会验证容器能否通过 `host.docker.internal` 访问 updater。 -- Browser Device Flow OAuth, PAT, and `qoder-native-v1` credential import/export for Qoder Global and Qoder CN -- OpenAI-compatible `GET /v1/models` -- Streaming and non-streaming responses -- Tool calls and `reasoning_content` -- Multiple Qoder accounts with pinning, routing, cooldown, and failover -- React + Tailwind + HeroUI console with light and dark themes -- Persistent SQLite credentials with ephemeral per-account runtime homes -- GitHub Actions for tests, container builds, and GHCR releases +安装后,控制台 **系统更新** 页面只允许更新到紧邻的下一个稳定版本,不接受自定义版本、跳版本或预发布版本。更新前会暂停新请求、等待在途请求结束,并在 `/data/backups` 创建经过完整性校验的 SQLite 快照。 -## Configuration +更新过程只重建 `qoder-api-proxy`,不会执行 `docker compose down -v`,也不会删除 `qoder-data`。如果新版健康检查失败,会同时恢复旧镜像和更新前的 SQLite 快照,并把 `CLI2API_IMAGE` 固定回旧版本,避免以后重启时再次进入失败版本。默认保留最近 5 份快照。 -| Variable | Default | Purpose | -|----------|---------|---------| -| `QODER_DATA_DIR` | `/data` | SQLite database and durable account credentials | -| `QODER_RUNTIME_DIR` | `/run/cli2api` | Ephemeral per-account Qoder runtime homes | -| `QODER_MAX_INFLIGHT` | `4` | Maximum concurrent requests per account | -| `QODER_WORKER_BASE_PORT` | `32100` | Internal worker port range | -| `QODERCLI_JS` | image default | Pinned Qoder Global CLI bundle | -| `QODERCNCLI_JS` | image default | Pinned Qoder CN CLI bundle | -| `UPDATE_GITHUB_TOKEN` | empty | Optional GitHub token for release checks | -| `UPDATE_AGENT_URL` | empty | Docker Desktop host updater URL, written by the installer | -| `UPDATE_AGENT_TOKEN` | empty | Docker Desktop updater token, written by the installer | -| `CLI2API_UPDATER_SOCKET_DIR` | platform-specific | Host directory mounted read-only for the Linux updater socket | +## 维护者一键发布 -The API key is generated once and stored in SQLite. There is no environment-variable bootstrap path; changing container environment variables does not replace the stored key. +确认 `main` 的 CI 已通过后,只需要执行: + +```bash +gh workflow run release.yml --ref main +``` -## Endpoints +发布前先在 `CHANGELOG.md` 的 `## Unreleased` 下写中英双语用户说明。每条改动都要在 `### English` 和 `### 中文` 里各有一条对应条目;工作流会把这些说明写入 GitHub Release,控制台更新页也会展示它们。 -| Method | Path | Purpose | -|--------|------|---------| -| `GET` | `/health` | Health probe; no API key required | -| `GET` | `/v1/models` | Model catalog | -| `POST` | `/v1/chat/completions` | OpenAI-compatible chat | -| `GET/POST` | `/api/*` | Console management API | +工作流会先等待当前 `main` 提交的 CI 通过,再根据最新已发布稳定版本自动增加 patch 版本;它会创建不可见的 Draft Release,构建并校验 6 个 updater,验证 `linux/amd64` 与 `linux/arm64` 镜像,全部完成后才正式发布 GitHub Release 并移动稳定镜像别名。发布成功后再把 Unreleased 冻结到对应版本标题下。不要再手动创建或推送版本 Tag。 -All console and API routes except `/health` require the API key stored in SQLite. +也可以进入 **Actions → Release → Run workflow** 点击发布。如果正式发布前失败,直接在同一次运行中选择 **Re-run failed jobs**;Draft Release 不会被应用的更新检查发现。 -## Development +## 从源码开发 -Requirements: Go `1.25.6+`, Node.js `20+`, npm, and Docker for container development. +环境要求:Go `1.25.6+`、Node.js `20+`、npm,以及容器开发所需的 Docker。 ```bash # Go API @@ -229,55 +236,55 @@ go vet ./... cd worker npm test -# Console +# 控制台 cd ../frontend npm ci npm run build npm run lint ``` -After frontend changes, run `npm run sync` to update the static assets embedded by Go: +修改前端后运行 `npm run sync`,将构建结果同步到 Go 的嵌入静态资源中: ```bash cd frontend npm run sync ``` -Build and start the container from source: +从源码构建并启动容器: ```bash cd deploy docker compose up -d --build ``` -See [CONTRIBUTING.md](CONTRIBUTING.md) for repository rules and validation details. +更多仓库规则和验证命令见 [CONTRIBUTING.md](CONTRIBUTING.md)。 -## Documentation +## 文档 -- [Architecture, login, routing, and console design](docs/DESIGN.md) -- [Current milestone and development plan](docs/PLAN.md) -- [Docker Compose deployment](deploy/README.md) -- [Changelog](CHANGELOG.md) -- [Security policy](SECURITY.md) +- [架构、登录、路由和控制台设计](docs/DESIGN.md) +- [当前里程碑与开发计划](docs/PLAN.md) +- [Docker Compose 部署说明](deploy/README.md) +- [变更记录](CHANGELOG.md) +- [安全问题报告](SECURITY.md) -## Security and privacy +## 安全与隐私 -- Never expose the service without the generated API key. -- Never commit `.qoder`, tokens, cookies, auth blobs, raw captures, or host details. -- Credential export is an explicit sensitive operation; protect exported files. -- Upstream API or Qoder CLI changes may break compatibility; qodercli is pinned and checked. -- Please report security issues privately according to [SECURITY.md](SECURITY.md), not in a public issue. +- 不要在没有 API Key 保护的情况下暴露服务。 +- 不要提交 `.qoder`、Token、Cookie、登录 Blob、原始抓包或主机信息。 +- 账号凭证导出是显式敏感操作,请妥善保管导出文件。 +- 上游 API 或 Qoder CLI 更新可能导致兼容性变化;项目会固定并检查 qodercli 版本。 +- 发现安全问题请不要直接公开 Issue,按 [SECURITY.md](SECURITY.md) 的方式私下报告。 -## Contributing +## 贡献 -Issues, documentation improvements, and pull requests are welcome. Before submitting a change: +欢迎提交 Issue、改进文档和 Pull Request。提交前请确认: -- Keep the scope clear and avoid new component libraries or unnecessary service dependencies. -- Run tests and build commands relevant to your changes. -- Remove tokens, login state, raw protocol captures, and real deployment details from the diff. +- 变更范围清晰,未引入新的组件库或不必要的服务依赖。 +- 已运行与改动相关的测试和构建命令。 +- Diff 中不包含 Token、登录态、原始协议抓包或真实部署信息。 -See [CONTRIBUTING.md](CONTRIBUTING.md). +详见 [CONTRIBUTING.md](CONTRIBUTING.md)。 -## License +## 许可证 [MIT](LICENSE) diff --git a/README_EN.md b/README_EN.md new file mode 100644 index 00000000..f4db996d --- /dev/null +++ b/README_EN.md @@ -0,0 +1,290 @@ +# CLI2API + +[中文](README.md) · [Issues](https://github.com/caigee-cmd/cli2api/issues) · [Contributing](CONTRIBUTING.md) + +[![CI](https://github.com/caigee-cmd/cli2api/actions/workflows/ci.yml/badge.svg)](https://github.com/caigee-cmd/cli2api/actions/workflows/ci.yml) +[![Docker Image](https://ghcr-badge.egpl.dev/caigee-cmd/cli2api/latest_tag?label=docker&color=blue)](https://github.com/caigee-cmd/cli2api/pkgs/container/cli2api) +[![License](https://img.shields.io/github/license/caigee-cmd/cli2api)](LICENSE) + +

+ CLI2API — your Qoder CLI login, served as a local OpenAI-compatible API +

+ +Turn **your own Qoder CLI login** into a local OpenAI-compatible API. + +CLI2API is an unofficial, self-hosted gateway for Qoder. Keep using OpenAI SDKs, Codex, CherryStudio, and other compatible clients—just point their Base URL at this local service. + +> [!IMPORTANT] +> CLI2API is not affiliated with or endorsed by Qoder. Use only accounts you are authorized to use, and follow the terms of Qoder and related services. + +## What you get + +- A local OpenAI-compatible `POST /v1/chat/completions` endpoint +- Streaming and non-streaming responses, tool calls, and `reasoning_content` +- A web console for Qoder accounts, models, and API testing +- Multi-account routing, account pinning, concurrency limits, cooldowns, and failover +- A Docker Compose deployment for personal development, homelabs, and private servers + +CLI2API does not spawn a full Qoder CLI Agent for every request. Authentication, WASM encoding, and the Qoder cloud HTTP/SSE connection stay warm in long-lived workers. + +![Supported login methods, account types, endpoints, and deployment targets](docs/assets/overview-card.png) + +## Console + +

+ CLI2API console Accounts page: each account shows its login method, ready state, and quota, with an Access panel offering the Base URL and a quick check +

+ +Accounts, models, access, and logs all live in one web console. Each account signs in on its own (browser OAuth, PAT, or credential import), readiness and quota are visible at a glance, and the Access page lets you copy the Base URL and run a quick check. + +## How it works + +

+ CLI2API architecture: OpenAI clients are routed by the Go control plane to one isolated Node worker per account, then to the Qoder cloud +

+ +Each enabled account gets its own Node process and runtime directory so Qoder WASM state is not shared across accounts. Go owns persistence, scheduling, concurrency limits, cooldowns, failover, and child-process lifecycle. + +## Quick start + +Requirements: Docker Desktop on macOS/Windows, or Docker Engine with Compose on Linux, plus a Qoder account you control. On Windows, Docker Desktop must be using Linux containers. + +macOS / Linux: + +```bash +git clone https://github.com/caigee-cmd/cli2api.git +cd cli2api +./scripts/start.sh +``` + +Windows PowerShell: + +```powershell +git clone https://github.com/caigee-cmd/cli2api.git +Set-Location cli2api +powershell -ExecutionPolicy Bypass -File .\scripts\start.ps1 +``` + +The launcher creates `deploy/.env` when needed, starts the published image, and builds locally if the image is unavailable. + +On first startup, the service generates a random API key, stores it in SQLite, and prints it once in the logs. Save it first: + +```bash +docker compose --env-file deploy/.env -f deploy/docker-compose.yml logs qoder-api-proxy +``` + +Open `http://127.0.0.1:3010`, sign in with that key, and add Qoder accounts from **Accounts**. + +The default deployment publishes only `127.0.0.1:3010`; it does not expose the service publicly. + +## Connect an OpenAI client + +Configure your client with: + +```text +Base URL: http://127.0.0.1:3010/v1 +API Key: +``` + +Or make a direct request: + +```bash +export CLI2API_API_KEY='paste-the-key-printed-on-first-start' + +curl http://127.0.0.1:3010/v1/chat/completions \ + -H "Authorization: Bearer $CLI2API_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "model": "qwen3.7-plus", + "messages": [{"role": "user", "content": "Reply with OK only"}], + "stream": false + }' +``` + +PowerShell equivalent: + +```powershell +$env:CLI2API_API_KEY = "paste-the-key-printed-on-first-start" +$Headers = @{ Authorization = "Bearer $env:CLI2API_API_KEY" } +$Body = @{ + model = "qwen3.7-plus" + messages = @(@{ role = "user"; content = "Reply with OK only" }) + stream = $false +} | ConvertTo-Json -Depth 4 +Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:3010/v1/chat/completions" -Headers $Headers -ContentType "application/json" -Body $Body +``` + +Without an account header, the scheduler selects a ready account. Pin a request to a specific account with: + +```text +X-Qoder-Account: acc_... +``` + +## Use cases + +- Connect Qoder to local or private-server tooling +- Reuse OpenAI-compatible clients and scripts +- Route requests across multiple Qoder accounts with failover +- Keep Qoder login state available without starting a full CLI Agent per request + +Supported account types are Qoder Global, Qoder CN, and WorkBuddy. CLI2API is a local gateway; it does not provide accounts, quotas, or an official API service. + +## Features + +- Browser Device Flow OAuth, PAT, and `qoder-native-v1` credential import/export for Qoder Global and Qoder CN +- OpenAI-compatible `GET /v1/models` +- Streaming and non-streaming responses +- Tool calls and `reasoning_content` +- Multiple Qoder accounts with pinning, routing, cooldown, and failover +- React + Tailwind + HeroUI console with light and dark themes +- Persistent SQLite credentials with ephemeral per-account runtime homes +- GitHub Actions for tests, container builds, and GHCR releases + +## Configuration + +| Variable | Default | Purpose | +|----------|---------|---------| +| `QODER_DATA_DIR` | `/data` | SQLite database and durable account credentials | +| `QODER_RUNTIME_DIR` | `/run/cli2api` | Ephemeral per-account Qoder runtime homes | +| `QODER_MAX_INFLIGHT` | `4` | Maximum concurrent requests per account | +| `QODER_WORKER_BASE_PORT` | `32100` | Internal worker port range | +| `QODERCLI_JS` | image default | Pinned Qoder Global CLI bundle | +| `QODERCNCLI_JS` | image default | Pinned Qoder CN CLI bundle | +| `UPDATE_GITHUB_TOKEN` | empty | Optional GitHub token for release checks | +| `UPDATE_AGENT_URL` | empty | Docker Desktop host updater URL, written by the installer | +| `UPDATE_AGENT_TOKEN` | empty | Docker Desktop updater token, written by the installer | +| `CLI2API_UPDATER_SOCKET_DIR` | platform-specific | Host directory mounted read-only for the Linux updater socket | + +The API key is generated once and stored in SQLite. There is no environment-variable bootstrap path; changing container environment variables does not replace the stored key. + +## Endpoints + +| Method | Path | Purpose | +|--------|------|---------| +| `GET` | `/health` | Health probe; no API key required | +| `GET` | `/v1/models` | Model catalog | +| `POST` | `/v1/chat/completions` | OpenAI-compatible chat | +| `GET/POST` | `/api/*` | Console management API | + +All console and API routes except `/health` require the API key stored in SQLite. + +## Managed updates + +Start CLI2API once, then install the optional host updater. + +| Host | Application runtime | Host updater | +|------|---------------------|--------------| +| Linux `amd64` / `arm64` | matching Linux Docker image | systemd + Unix Socket | +| macOS Intel / Apple Silicon | Docker Desktop Linux container | per-user LaunchAgent | +| Windows `amd64` / `arm64` | Docker Desktop Linux container | current-user Scheduled Task | + +The main API service remains a Linux container; native macOS and Windows application binaries are not published. Release images support `linux/amd64` and `linux/arm64`. Each release also includes six native updater assets and `cli2api-updater_checksums.txt`. + +Installers prefer a checksum-verified prebuilt updater. Linux first reuses the architecture-matched updater inside the running container. If an older release has no updater asset, the installers try the latest protocol-compatible asset and finally fall back to a local Go `1.25.6+` build. + +macOS + Docker Desktop: + +```bash +./deploy/install-updater.sh +docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy +``` + +Linux + systemd: + +```bash +sudo ./deploy/install-updater.sh +docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy +``` + +Windows + Docker Desktop, from PowerShell as the logged-in Docker user: + +```powershell +powershell -ExecutionPolicy Bypass -File .\deploy\install-updater.ps1 +docker compose --env-file deploy\.env -f deploy\docker-compose.yml up -d --force-recreate qoder-api-proxy +``` + +Linux uses a private Unix Socket. macOS uses a per-user LaunchAgent, and Windows uses a current-user Scheduled Task; both Docker Desktop platforms connect through a token-protected updater bound to `127.0.0.1`. The Windows installer also verifies that a container can reach the updater through `host.docker.internal` when `qoder-api-proxy` already exists. + +The **System** page permits only the immediate next stable release. It does not accept custom targets, skip releases, or install prereleases. Before replacement, the service pauses new requests, drains active requests, and creates an integrity-checked SQLite snapshot under `/data/backups`. + +Only `qoder-api-proxy` is recreated; the `qoder-data` volume is never deleted. A failed versioned health check restores both the previous image and the pre-update SQLite snapshot, and pins `CLI2API_IMAGE` back to the previous version for future restarts. The five most recent snapshots are retained. + +## Maintainer release + +After `main` passes CI, publish the next patch release with one command: + +```bash +gh workflow run release.yml --ref main +``` + +Write bilingual user-facing notes in `CHANGELOG.md` under `## Unreleased` before publishing. Each change needs a matching bullet in `### English` and `### 中文`; the workflow copies those notes into the GitHub Release and the console update page. + +The workflow waits for the exact `main` commit to pass CI, calculates the next patch from the latest published stable release, creates an invisible draft release, builds six checksum-verified updater binaries, verifies the `linux/amd64` and `linux/arm64` image manifest, and only then publishes the GitHub Release and moves the stable image aliases. After publication it freezes the Unreleased notes under the new version heading. Do not create or push the version tag manually. + +You can also use **Actions → Release → Run workflow**. If a pre-publication job fails, use **Re-run failed jobs** on the same run; the draft release remains invisible to application update checks. + +## Development + +Requirements: Go `1.25.6+`, Node.js `20+`, npm, and Docker for container development. + +```bash +# Go API +go test ./... +go vet ./... + +# Qoder worker +cd worker +npm test + +# Console +cd ../frontend +npm ci +npm run build +npm run lint +``` + +After frontend changes, run `npm run sync` to update the static assets embedded by Go: + +```bash +cd frontend +npm run sync +``` + +Build and start the container from source: + +```bash +cd deploy +docker compose up -d --build +``` + +See [CONTRIBUTING.md](CONTRIBUTING.md) for repository rules and validation details. + +## Documentation + +- [Architecture, login, routing, and console design](docs/DESIGN.md) +- [Current milestone and development plan](docs/PLAN.md) +- [Docker Compose deployment](deploy/README.md) +- [Changelog](CHANGELOG.md) +- [Security policy](SECURITY.md) + +## Security and privacy + +- Never expose the service without the generated API key. +- Never commit `.qoder`, tokens, cookies, auth blobs, raw captures, or host details. +- Credential export is an explicit sensitive operation; protect exported files. +- Upstream API or Qoder CLI changes may break compatibility; qodercli is pinned and checked. +- Please report security issues privately according to [SECURITY.md](SECURITY.md), not in a public issue. + +## Contributing + +Issues, documentation improvements, and pull requests are welcome. Before submitting a change: + +- Keep the scope clear and avoid new component libraries or unnecessary service dependencies. +- Run tests and build commands relevant to your changes. +- Remove tokens, login state, raw protocol captures, and real deployment details from the diff. + +See [CONTRIBUTING.md](CONTRIBUTING.md). + +## License + +[MIT](LICENSE) diff --git a/README_ZH.md b/README_ZH.md deleted file mode 100644 index 09b4f883..00000000 --- a/README_ZH.md +++ /dev/null @@ -1,283 +0,0 @@ -# CLI2API - -[English](README.md) · [问题反馈](https://github.com/caigee-cmd/cli2api/issues) · [贡献指南](CONTRIBUTING.md) - -[![CI](https://github.com/caigee-cmd/cli2api/actions/workflows/ci.yml/badge.svg)](https://github.com/caigee-cmd/cli2api/actions/workflows/ci.yml) -[![Docker Image](https://ghcr-badge.egpl.dev/caigee-cmd/cli2api/latest_tag?label=docker&color=blue)](https://github.com/caigee-cmd/cli2api/pkgs/container/cli2api) -[![License](https://img.shields.io/github/license/caigee-cmd/cli2api)](LICENSE) - -把你自己的 **Qoder CLI 登录态**,变成一个本机运行的 OpenAI 兼容 API。 - -CLI2API 是一个非官方、自托管的 Qoder API 网关。启动以后,你可以继续使用熟悉的 OpenAI SDK、Codex、CherryStudio 等客户端,只需要把 Base URL 指向本机服务。 - -![CLI2API 社交卡](docs/assets/og-card.svg) - -![CLI2API 控制台](docs/assets/console.png) - -> [!IMPORTANT] -> CLI2API 与 Qoder 官方无关联,也未获得官方背书。请只使用你有权使用的账号,并遵守 Qoder 及相关服务条款。 - -## 你会得到什么 - -- 一个兼容 OpenAI Chat Completions 的本地接口:`/v1/chat/completions` -- 支持流式输出、非流式输出、工具调用和 `reasoning_content` -- 一个可以管理 Qoder 账号、模型和接口测试的 Web 控制台 -- 多账号路由、账号固定、并发限制、冷却和故障切换 -- 一个适合个人开发、家庭实验室和私有部署的 Docker Compose 服务 - -它不会为每个请求启动完整的 Qoder CLI Agent,而是让鉴权、WASM 编码和 Qoder 云端 HTTP/SSE 连接保持在常驻 worker 中。 - -## 先跑起来 - -依赖:macOS / Windows 使用 Docker Desktop,Linux 使用 Docker Engine + Compose;另外需要一个你自己控制的 Qoder 账号。Windows 的 Docker Desktop 必须切换到 Linux containers。 - -macOS / Linux: - -```bash -git clone https://github.com/caigee-cmd/cli2api.git -cd cli2api -./scripts/start.sh -``` - -Windows PowerShell: - -```powershell -git clone https://github.com/caigee-cmd/cli2api.git -Set-Location cli2api -powershell -ExecutionPolicy Bypass -File .\scripts\start.ps1 -``` - -启动脚本会自动创建 `deploy/.env`,优先启动已发布镜像;镜像不可用时会自动从源码构建。 - -首次启动时,服务会生成一个随机 API Key,保存到 SQLite,并在日志中打印一次。请先保存它: - -```bash -docker compose --env-file deploy/.env -f deploy/docker-compose.yml logs qoder-api-proxy -``` - -然后打开 `http://127.0.0.1:3010`,使用这个 Key 登录控制台,在 **Accounts** 页面添加 Qoder 账号。 - -默认只监听本机地址 `127.0.0.1:3010`,不会直接暴露到公网。 - -## 页面安全更新 - -先启动一次 CLI2API,再安装可选的本机更新器。 - -| 宿主机 | 主程序运行方式 | 本机更新器 | -|--------|----------------|------------| -| Linux `amd64` / `arm64` | 对应架构的 Linux Docker 镜像 | systemd + Unix Socket | -| macOS Intel / Apple Silicon | Docker Desktop Linux 容器 | 当前用户 LaunchAgent | -| Windows `amd64` / `arm64` | Docker Desktop Linux 容器 | 当前用户计划任务 | - -主 API 服务始终运行在 Linux 容器中,不发布 macOS / Windows 原生主程序。发布镜像同时支持 `linux/amd64` 和 `linux/arm64`;每个 Release 还会附带 6 个平台/架构 updater 与 `cli2api-updater_checksums.txt`。 - -安装器优先下载并校验预编译 updater。Linux 会先复用当前容器中架构匹配的 updater;如果旧版本没有发布资产,则尝试最新且协议兼容的资产,最后才回退到本机 Go `1.25.6+` 编译。 - -macOS + Docker Desktop: - -```bash -./deploy/install-updater.sh -docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy -``` - -Linux + systemd: - -```bash -sudo ./deploy/install-updater.sh -docker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --force-recreate qoder-api-proxy -``` - -Windows + Docker Desktop,请使用当前运行 Docker Desktop 的登录用户打开 PowerShell: - -```powershell -powershell -ExecutionPolicy Bypass -File .\deploy\install-updater.ps1 -docker compose --env-file deploy\.env -f deploy\docker-compose.yml up -d --force-recreate qoder-api-proxy -``` - -Linux 使用私有 Unix Socket。macOS 使用当前用户的 LaunchAgent,Windows 使用当前用户的计划任务;两个 Docker Desktop 平台都通过强令牌访问仅监听 `127.0.0.1` 的 updater。若 `qoder-api-proxy` 已存在,Windows 安装器还会验证容器能否通过 `host.docker.internal` 访问 updater。 - -安装后,控制台 **系统更新** 页面只允许更新到紧邻的下一个稳定版本,不接受自定义版本、跳版本或预发布版本。更新前会暂停新请求、等待在途请求结束,并在 `/data/backups` 创建经过完整性校验的 SQLite 快照。 - -更新过程只重建 `qoder-api-proxy`,不会执行 `docker compose down -v`,也不会删除 `qoder-data`。如果新版健康检查失败,会同时恢复旧镜像和更新前的 SQLite 快照,并把 `CLI2API_IMAGE` 固定回旧版本,避免以后重启时再次进入失败版本。默认保留最近 5 份快照。 - -## 维护者一键发布 - -确认 `main` 的 CI 已通过后,只需要执行: - -```bash -gh workflow run release.yml --ref main -``` - -发布前先在 `CHANGELOG.md` 的 `## Unreleased` 下写中英双语用户说明。每条改动都要在 `### English` 和 `### 中文` 里各有一条对应条目;工作流会把这些说明写入 GitHub Release,控制台更新页也会展示它们。 - -工作流会先等待当前 `main` 提交的 CI 通过,再根据最新已发布稳定版本自动增加 patch 版本;它会创建不可见的 Draft Release,构建并校验 6 个 updater,验证 `linux/amd64` 与 `linux/arm64` 镜像,全部完成后才正式发布 GitHub Release 并移动稳定镜像别名。发布成功后再把 Unreleased 冻结到对应版本标题下。不要再手动创建或推送版本 Tag。 - -也可以进入 **Actions → Release → Run workflow** 点击发布。如果正式发布前失败,直接在同一次运行中选择 **Re-run failed jobs**;Draft Release 不会被应用的更新检查发现。 - -## 接入 OpenAI 客户端 - -客户端配置如下: - -```text -Base URL: http://127.0.0.1:3010/v1 -API Key: <首次启动时生成的 Key> -``` - -也可以直接发送一个请求: - -```bash -export CLI2API_API_KEY='粘贴首次启动时输出的密钥' - -curl http://127.0.0.1:3010/v1/chat/completions \ - -H "Authorization: Bearer $CLI2API_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{ - "model": "qwen3.7-plus", - "messages": [{"role": "user", "content": "只回复 OK"}], - "stream": false - }' -``` - -PowerShell 等价写法: - -```powershell -$env:CLI2API_API_KEY = "粘贴首次启动时输出的密钥" -$Headers = @{ Authorization = "Bearer $env:CLI2API_API_KEY" } -$Body = @{ - model = "qwen3.7-plus" - messages = @(@{ role = "user"; content = "只回复 OK" }) - stream = $false -} | ConvertTo-Json -Depth 4 -Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:3010/v1/chat/completions" -Headers $Headers -ContentType "application/json" -Body $Body -``` - -不指定账号时,调度器会从可用账号中选择一个。需要固定账号时,添加请求头: - -```text -X-Qoder-Account: acc_... -``` - -## 适合什么场景 - -- 想在本机或私有服务器上统一接入 Qoder -- 已经在使用 OpenAI API 格式的客户端或脚本 -- 需要在多个 Qoder 账号之间自动路由和故障切换 -- 想保留 Qoder 登录能力,同时避免每个请求启动完整 CLI Agent - -目前支持的账号类型是 Qoder 国际版、Qoder 国内版和 WorkBuddy。CLI2API 是本地代理,不提供账号、额度或官方 API 服务。 - -## 工作方式 - -```text -OpenAI 客户端 - -> Go API + SQLite 账号控制面 - -> 每个 Qoder 账号一个隔离 Node worker - -> Qoder 云端 HTTP/SSE API -``` - -每个启用账号拥有独立的 Node 进程和运行目录,避免共享 Qoder WASM 上下文。Go 负责账号持久化、调度、并发限制、冷却、失败切换和子进程生命周期。 - -## 支持的功能 - -- Qoder 国际版 / 国内版的浏览器 Device Flow OAuth、PAT、`qoder-native-v1` 凭证导入/导出 -- OpenAI 兼容的 `GET /v1/models` -- 流式和非流式响应 -- Tool calls 与 `reasoning_content` -- 多 Qoder 账号、账号固定、调度、冷却和故障切换 -- React + Tailwind + HeroUI 控制台,支持明暗主题 -- SQLite 持久化账号凭证,账号运行目录临时化 -- GitHub Actions 自动测试、构建容器和发布 GHCR 镜像 - -## 配置 - -| 变量 | 默认值 | 说明 | -|------|--------|------| -| `QODER_DATA_DIR` | `/data` | SQLite 数据库和持久化账号凭证 | -| `QODER_RUNTIME_DIR` | `/run/cli2api` | 临时的账号 Qoder 运行目录 | -| `QODER_MAX_INFLIGHT` | `4` | 单账号最大并发请求数 | -| `QODER_WORKER_BASE_PORT` | `32100` | 内部 worker 端口起点 | -| `QODERCLI_JS` | 镜像默认值 | 固定的 Qoder 国际版 CLI bundle | -| `QODERCNCLI_JS` | 镜像默认值 | 固定的 Qoder 国内版 CLI bundle | -| `UPDATE_GITHUB_TOKEN` | 空 | 可选的 GitHub Release 查询 Token | -| `UPDATE_AGENT_URL` | 空 | Docker Desktop 本机 updater 地址,由安装器写入 | -| `UPDATE_AGENT_TOKEN` | 空 | Docker Desktop updater 令牌,由安装器写入 | -| `CLI2API_UPDATER_SOCKET_DIR` | 按平台设置 | 只读挂载 Linux updater Socket 的宿主机目录 | - -API Key 首次生成后只保存在 SQLite 中。服务不再支持通过环境变量设置或轮换 API Key。 - -## 接口 - -| 方法 | 路径 | 说明 | -|------|--------|------| -| `GET` | `/health` | 健康检查,不需要 API Key | -| `GET` | `/v1/models` | 模型列表 | -| `POST` | `/v1/chat/completions` | OpenAI 兼容对话接口 | -| `GET/POST` | `/api/*` | 控制台管理接口 | - -除 `/health` 外,控制台和 API 都需要 SQLite 中保存的 API Key。 - -## 从源码开发 - -环境要求:Go `1.25.6+`、Node.js `20+`、npm,以及容器开发所需的 Docker。 - -```bash -# Go API -go test ./... -go vet ./... - -# Qoder worker -cd worker -npm test - -# 控制台 -cd ../frontend -npm ci -npm run build -npm run lint -``` - -修改前端后运行 `npm run sync`,将构建结果同步到 Go 的嵌入静态资源中: - -```bash -cd frontend -npm run sync -``` - -从源码构建并启动容器: - -```bash -cd deploy -docker compose up -d --build -``` - -更多仓库规则和验证命令见 [CONTRIBUTING.md](CONTRIBUTING.md)。 - -## 文档 - -- [架构、登录、路由和控制台设计](docs/DESIGN.md) -- [当前里程碑与开发计划](docs/PLAN.md) -- [Docker Compose 部署说明](deploy/README.md) -- [变更记录](CHANGELOG.md) -- [安全问题报告](SECURITY.md) - -## 安全与隐私 - -- 不要在没有 API Key 保护的情况下暴露服务。 -- 不要提交 `.qoder`、Token、Cookie、登录 Blob、原始抓包或主机信息。 -- 账号凭证导出是显式敏感操作,请妥善保管导出文件。 -- 上游 API 或 Qoder CLI 更新可能导致兼容性变化;项目会固定并检查 qodercli 版本。 -- 发现安全问题请不要直接公开 Issue,按 [SECURITY.md](SECURITY.md) 的方式私下报告。 - -## 贡献 - -欢迎提交 Issue、改进文档和 Pull Request。提交前请确认: - -- 变更范围清晰,未引入新的组件库或不必要的服务依赖。 -- 已运行与改动相关的测试和构建命令。 -- Diff 中不包含 Token、登录态、原始协议抓包或真实部署信息。 - -详见 [CONTRIBUTING.md](CONTRIBUTING.md)。 - -## 许可证 - -[MIT](LICENSE) diff --git a/docs/DESIGN.md b/docs/DESIGN.md index 64a32671..a91600da 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -1,6 +1,6 @@ -# CaiAI 前端设计规范 +# CLI2API 前端设计规范 -本项目是「公开营销页 + 已登录 SaaS 控制台」的双表面应用,基于 React、Vite、HeroUI v3、Tailwind v4 和 Phosphor 图标。前端改动应保持现有安静、功能导向、暖白象牙色的界面风格。控制台侧重克制与密度,营销页允许更大的排版与动效自由(见下文「营销表面」)。不要为单个功能引入新的视觉语言。 +本项目是纯已登录控制台应用(登录页 + 内部页面),基于 React、Vite、HeroUI v3、Tailwind v4 和 Phosphor 图标。前端改动应保持现有安静、功能导向、暖白象牙色的界面风格。不要为单个功能引入新的视觉语言。 ## 唯一真相来源 @@ -31,25 +31,6 @@ - 毛玻璃、光斑/球体、装饰性色块 - 为每个功能都加一个新强调色 -## 营销表面(公开页) - -上面「视觉方向」里的密度要求与「避免营销式布局」条款**仅适用于已登录控制台**(当前项目为 `/`、`/accounts`、`/providers`、`/access`)。公开营销页(`/`、`/pricing`、`/docs`、`/about`、条款页)是另一张脸,允许更大的表达自由度,但底色、token、克制感不变。 - -允许: - -- 大号 display 排版:`font-display` + `text-4xl → text-6xl`,仅用于营销页的 hero / 区块标题。 -- 单一、低透明度、同色系的柔光 hero glow(如 `bg-foreground/[0.04] blur-3xl`),一个视口一个,不叠第二个。 -- 一个交互式焦点物件(如首页的 `ApiKeyCard`),作为页面的触觉中心;必须遵守 `prefersReducedMotion()`,reduced-motion 下静止。 -- `bg-gradient-notice` 营销条,用于公告 / 促销 / 充值提示这类「需要跳一下」的条带。 -- GSAP 营销动效(进场、滚动揭示),快速且克制,遵守现有缓动 token。 - -仍然禁止: - -- 彩色堆叠面板、套娃卡片 -- 多个发光光斑、彩色光球、毛玻璃 -- 无意义的大面积渐变背景 -- 营销页里出现第二种强调色 - ## 颜色 Token 用语义 token,不要硬编码一次性颜色。 @@ -230,10 +211,10 @@ CLI2API 的浏览器图标、PWA 清单和社交卡走极简 line-icon 路线, | `frontend/public/favicon.svg` | source | 主图标,`stroke="currentColor"` 主题自适应 | | `frontend/public/favicon-dark.svg` | source | 显式 `#A78BFA` stroke,深色模式回退 | | `frontend/public/apple-touch-icon.svg` | source | iOS 启动图标,180×180 暖白底圆角 | -| `frontend/public/og-card.svg` | source | 1280×640 社交卡(README 分享预览) | +| `frontend/public/og-card.svg` | source | 1280×640 社交卡(运行时 og:image) | | `frontend/public/site.webmanifest` | source | PWA 清单 | | `internal/webui/static/*` | runtime | 同上副本,被 Go `//go:embed` 打包进二进制 | -| `docs/assets/og-card.svg` | docs | README 相对链接副本 | +| `docs/assets/overview-card.png` | docs | README 顶部概览卡(手工维护) | ### 设计约束 @@ -247,7 +228,7 @@ CLI2API 的浏览器图标、PWA 清单和社交卡走极简 line-icon 路线, 1. 改 `frontend/public/*` 源文件 2. `make sync` — 复制到 `internal/webui/static/` 并嵌入 Go 二进制 -3. `make favicon-sync` — 额外把 `og-card.svg` 同步到 `docs/assets/` +3. `make favicon-sync` — 等价于 `make sync`,只同步 favicon 套件到嵌入静态资源 4. `CHANGELOG.md` `## Unreleased` 加双语条目 5. 如果新增了静态资源文件,三处都要改: - `frontend/scripts/sync-static.mjs` 的 `for (const name of [...])` 白名单 @@ -258,7 +239,7 @@ CLI2API 的浏览器图标、PWA 清单和社交卡走极简 line-icon 路线, # Qoder API Proxy 产品与运行时约束 -以下内容保留当前项目的后端架构、协议边界、账号路由和部署约束;前端视觉与交互以本文前半部分的 CaiAI 设计规范为准。 +以下内容保留当前项目的后端架构、协议边界、账号路由和部署约束;前端视觉与交互以本文前半部分的设计规范为准。 Canonical design and product notes for agents. Plans live in `docs/PLAN.md`. Hard rules live in `AGENTS.md`. @@ -369,6 +350,12 @@ Supported account onboarding: - `qoder-native-v1` JSON import containing the encrypted `.auth/user` blob and its matching `machine_id` (Global lives under `.qoder`, CN under `.qoder-cn`) +Qoder login waits for the per-account worker to report `hasAuthManager` on `/health` +before proxying `/admin/login/device` or `/admin/login/pat`. `cmd.Start()` still +returns immediately after spawn; WASM init can take several seconds on a cold CN +CLI, so the first click must not race `ECONNREFUSED` or an uncaptured AuthManager. +A missing AuthManager during login is `not_ready` (503), not `auth`. + Arbitrary `access_token` / `refresh_token` JSON is not supported. Qoder credentials also depend on private user material, organization data, encryption keys, and device identity. The API never returns raw credentials except through the explicit export @@ -380,10 +367,10 @@ Error taxonomy (do not treat every 429 as empty balance): | Kind | Signal | HTTP | Fail over | Cooldown | |------|--------|------|-----------|----------| -| quota | `insufficient_quota`, `#token-limit`, oversized prompt | 429 | no | no | +| quota | `insufficient_quota`, `#token-limit` | 429 | no | no | | rate_limit | generic 429 / too many requests | 429 | yes | ~60s, honor Retry-After, cap 10m | | auth | 401/403, FORBIDDEN | 401/403 | yes | ~30s + rewarm | -| not_ready | hot context missing | 503 | yes | ~10s | +| not_ready | hot context missing, AuthManager not captured, worker not warm | 503 | yes | ~10s | | unavailable | transport / 5xx | 502/503 | yes | ~15s | `QODER_MAX_INFLIGHT` default 4. WASM encode + rewarm share one lock; do not hold it across upstream fetch. @@ -400,10 +387,11 @@ not add its own cache. Go `refreshOne` fetches quota after health for hot/ready accounts and stores a `QuotaSnapshot` on the pool item. Quota is display-only: fetch failures are swallowed and -never flip account readiness, cooldown, or scheduling. WorkBuddy and other in-process -providers report no quota; the card simply omits the block. The account card renders one -progress bar with `remaining/total `, `--danger` at 100% / exceeded, `--warning` at -≥80%, plus an optional add-on line. +never flip account readiness, cooldown, or scheduling. Qoder reads quota from the daemon; +WorkBuddy reads remaining credits from its billing meter API (`unit: credits`). An +in-process provider without a quota surface simply omits the block. The account card +renders one progress bar with `remaining/total `, `--danger` at 100% / exceeded, +`--warning` at ≥80%, plus an optional add-on line. Distinguish this account-level quota from the request-level `insufficient_quota` error kind: that error means a per-request token/model limit, not a zero account balance. @@ -477,7 +465,7 @@ Ideas intentionally not copied: ## Design system -The console follows the CaiAI frontend design baseline, adapted to this Vite app. +The console follows the frontend design baseline in the first half of this doc, adapted to this Vite app. ### Surface and tone @@ -542,6 +530,7 @@ After UI edits: | `frontend/src/components/layout/` | Shell / menu | | `internal/accounts/` | SQLite account repository, migrations, snapshots, scheduler, child lifecycle, request logs | | `internal/logs/` | Runtime ring buffer and async request recorder | +| `internal/providers/` | Provider registry, route pools, in-process adapters (`workbuddy/`) | | `internal/update/` | Release selection and updater client | | `internal/updater/` | Host-side Docker replacement and rollback | | `worker/src/daemon.mjs` | One-account Qoder runtime only | diff --git a/docs/assets/README.md b/docs/assets/README.md index b377a94c..b9394fde 100644 --- a/docs/assets/README.md +++ b/docs/assets/README.md @@ -1,16 +1,18 @@ # docs/assets/ -Static assets embedded by `README.md` and `README_ZH.md` via relative links. +Static assets embedded by `README.md` and `README_EN.md` via relative links. ## Files | File | Source | Update rule | |------|--------|-------------| -| `console.png` | Manual screenshot capture of the web console | Re-capture on every UI redesign | -| `og-card.svg` | Hand-synced from `frontend/public/og-card.svg` | Re-copy when the favicon suite changes | +| `overview-card.png` | Hand-maintained overview card in both READMEs | Regenerate when supported login methods, account types, endpoints, or deployment targets change | +| `readme/hero-{zh,en}.svg` | Hand-maintained SVG heroes (console dark-theme palette, favicon bolt motif) | Re-sync copy with the tagline and flow text in the matching README | +| `readme/console-window-{zh,en}.svg` | Hand-maintained console mockup (Accounts + Access) | Regenerate when console pages, account card fields, or nav items change | +| `readme/architecture-{zh,en}.svg` | Hand-maintained architecture diagram | Regenerate when the request path or worker model changes | ## Why this folder is hand-maintained -- `README.md` lives at the repo root and uses **relative** paths so it renders correctly on github.com, npmjs.com, and `go install` package pages. -- `frontend/public/og-card.svg` is the **runtime** asset served by the Go binary; the file in this folder is the **documentation** copy. -- Keep them byte-identical. The `favicon-suite` task in this repo's hand-off log includes copying `frontend/public/og-card.svg` here. +- Both READMEs live at the repo root and use **relative** paths so they render correctly on github.com, npmjs.com, and `go install` package pages. +- `frontend/public/og-card.svg` is the **runtime** social-preview asset served by the Go binary; it is not linked from the READMEs. +- SVG assets stay GitHub-safe: no scripts, remote fonts, or filters; each carries `` and `<desc>` for accessibility. diff --git a/docs/assets/console.png b/docs/assets/console.png deleted file mode 100644 index 6848d037947e18e86d722a152ac9bdd775b4a483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106611 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�>>Zooi%pu0Dg3sMAy5?oV* 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 diff --git a/docs/assets/og-card.svg b/docs/assets/og-card.svg deleted file mode 100644 index 076421c2..00000000 --- a/docs/assets/og-card.svg +++ /dev/null @@ -1,52 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 640" width="1280" height="640" font-family="-apple-system, 'Inter', 'Outfit', system-ui, sans-serif"> - <defs> - <style> - .bolt { stroke: #7C3AED; stroke-width: 14; stroke-linejoin: round; stroke-linecap: round; fill: none; } - .word { font-weight: 700; letter-spacing: -0.02em; fill: #1F2937; } - .sub { font-weight: 500; fill: #6B7280; } - .mono { font-family: 'IBM Plex Mono', 'JetBrains Mono', ui-monospace, monospace; font-weight: 500; fill: #1F2937; } - .chip { fill: #EDE9FE; } - .chip-text { fill: #7C3AED; font-weight: 500; } - .frame { fill: none; stroke: #E5E0D5; stroke-width: 1; } - .terminal-bg { fill: #FFFFFF; stroke: #E5E0D5; stroke-width: 1; } - .prompt { fill: #7C3AED; } - </style> - </defs> - - <!-- Background --> - <rect width="1280" height="640" fill="#FAF7F2"/> - - <!-- Outer hairline frame, 32px inset --> - <rect x="32" y="32" width="1216" height="576" rx="16" class="frame"/> - - <!-- Service-running dot, top-right --> - <circle cx="1208" cy="64" r="4" fill="#22D3EE"/> - - <!-- Left: bolt mark, vertically centered, ~280px tall --> - <g transform="translate(140, 180)"> - <path class="bolt" d="M195 0 L60 175 L165 175 L135 140 L202.5 140 L165 280 L300 105 L195 105 L225 140 L157.5 140 Z"/> - <circle cx="135" cy="230" r="14" fill="#22D3EE"/> - </g> - - <!-- Center: wordmark + subtitle --> - <text x="500" y="298" class="word" font-size="112">CLI2API</text> - <text x="500" y="356" class="sub" font-size="28">Qoder CLI → OpenAI-compatible API</text> - - <!-- Right: minimal terminal mockup, vertically centered --> - <g transform="translate(820, 230)"> - <rect width="380" height="180" rx="12" class="terminal-bg"/> - <text x="24" y="56" class="mono" font-size="20"> - <tspan class="prompt">$ </tspan> - <tspan>./cli2api serve</tspan> - </text> - <text x="24" y="96" class="mono" font-size="18" fill="#6B7280">▸ account: acc_8f2k (ready)</text> - <text x="24" y="124" class="mono" font-size="18" fill="#6B7280">▸ endpoint: :3010/v1</text> - <text x="24" y="156" class="mono" font-size="18" fill="#6B7280">▸ mode: streaming · cooldown off</text> - </g> - - <!-- Bottom-left: monospaced prompt chip --> - <g transform="translate(64, 552)"> - <rect width="232" height="36" rx="8" class="chip"/> - <text x="16" y="24" font-family="IBM Plex Mono, JetBrains Mono, ui-monospace, monospace" font-size="16" class="chip-text">❯ ./cli2api serve</text> - </g> -</svg> diff --git a/docs/assets/overview-card.png b/docs/assets/overview-card.png new file mode 100644 index 0000000000000000000000000000000000000000..bfee9a6ce7ed29c0bec266c8ea41a266f69c1a48 GIT binary patch literal 83011 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 C*t4Jj literal 0 HcmV?d00001 diff --git a/docs/assets/readme/architecture-en.svg b/docs/assets/readme/architecture-en.svg new file mode 100644 index 00000000..0d0538e9 --- /dev/null +++ b/docs/assets/readme/architecture-en.svg @@ -0,0 +1,69 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="500" viewBox="0 0 1200 500" role="img" aria-labelledby="arch-title-en arch-desc-en" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', system-ui, sans-serif"> + <title id="arch-title-en">CLI2API architecture — OpenAI clients are routed by a Go control plane to one Node worker per account, then to the Qoder cloud + Dark architecture diagram: from top to bottom, OpenAI clients, the CLI2API Go API with SQLite control plane, one isolated Node worker per account, and the Qoder cloud; annotations note warm login sessions, isolated HOMEs, and region-scoped failover. + + + + HOW IT WORKS + request path + + + + OpenAI client + SDK · Codex · CherryStudio + + + + + + + + + CLI2API · Go API + SQLite + scheduling · concurrency · cooldown · failover + + + + + + + + + + + + + + Node worker · acct A + own HOME · WASM + + + Node worker · acct B + own HOME · WASM + + + + + + + + + + + + Qoder cloud + HTTP / SSE · Global and CN routed separately + + + + Warm login sessions + no full CLI spawn per request + + + One process and HOME per account + WASM contexts never shared + + + Region-scoped failover + Global 429s never land on CN + diff --git a/docs/assets/readme/architecture-zh.svg b/docs/assets/readme/architecture-zh.svg new file mode 100644 index 00000000..ec9bcc7e --- /dev/null +++ b/docs/assets/readme/architecture-zh.svg @@ -0,0 +1,69 @@ + + CLI2API 架构 — OpenAI 客户端经 Go 控制面路由到每账号独立 Node worker,再连接 Qoder 云端 + 深色架构图:自上而下为 OpenAI 客户端、CLI2API 的 Go API 与 SQLite 控制面、每账号一个独立 Node worker,最后连接 Qoder 云端;右侧标注常驻登录态、独立 HOME 与同区域故障切换。 + + + + HOW IT WORKS + 请求路径 + + + + OpenAI 客户端 + SDK · Codex · CherryStudio + + + + + + + + + CLI2API · Go API + SQLite + 调度 · 并发限制 · 冷却 · 故障切换 + + + + + + + + + + + + + + Node worker · 账号 A + 独立 HOME · WASM + + + Node worker · 账号 B + 独立 HOME · WASM + + + + + + + + + + + + Qoder 云端 + HTTP / SSE · 国际版与国内版独立路由 + + + + 登录态常驻 + 不为每个请求启动完整 CLI + + + 每账号一个进程与 HOME + WASM 上下文互不共享 + + + 同区域故障切换 + 国际版 429 不会打到国内版 + diff --git a/docs/assets/readme/console-window-en.svg b/docs/assets/readme/console-window-en.svg new file mode 100644 index 00000000..3d46acef --- /dev/null +++ b/docs/assets/readme/console-window-en.svg @@ -0,0 +1,120 @@ + + CLI2API console — Accounts page + Warm ivory console: sidebar with Overview, Models, Access, Accounts, Logs, and System; the Accounts page shows three ready accounts with quota bars, and the Access panel shows Base URL and API key. + + + + + + + + + 127.0.0.1:3010 + + + + + + + + + + CLI2API + + Overview + Models + Access + + Accounts + Logs + System + + + Accounts + One login per account · browser sign-in first, PAT only when needed + + + + + 3 / 3 ready + + + Add account + + + + + + + + Qoder Global + alice@dev · browser login + + + Ready + + + Quota 80% + 400 / 500 remaining + + + + + + + + Qoder CN + bob@dev · PAT + + + Ready + + + Quota 66% + 330 / 500 remaining + + + + + W + WorkBuddy + team@work · browser login + + + Ready + Remaining credits + 1,200 credits + + + + + Qoder Global + carol@dev · credential import + + + Ready + + + + + Connect an OpenAI client + + Base URL + + http://127.0.0.1:3010/v1 + + API Key + + sk-c2a-9f3e········ + + Quick check + + $ curl /v1/chat/completions + -H "Authorization: Bearer" + ✓ 200 · stream ok + + + Copy and test + + + All routes except /health need the key + diff --git a/docs/assets/readme/console-window-zh.svg b/docs/assets/readme/console-window-zh.svg new file mode 100644 index 00000000..9728ebd0 --- /dev/null +++ b/docs/assets/readme/console-window-zh.svg @@ -0,0 +1,120 @@ + + CLI2API 控制台 — Accounts 页面 + 暖白象牙色控制台:左侧导航为 Overview、Models、Access、Accounts、Logs、System;Accounts 页显示 3 个就绪账号与额度条,右侧 Access 面板展示 Base URL 与 API Key。 + + + + + + + + + 127.0.0.1:3010 + + + + + + + + + + CLI2API + + Overview + Models + Access + + Accounts + Logs + System + + + Accounts + 每个账号一个登录态 · 浏览器登录优先,仅在必要时使用 PAT + + + + + 3 / 3 就绪 + + + 添加账号 + + + + + + + + Qoder Global + alice@dev · 浏览器登录 + + + 就绪 + + + 额度 80% + 剩余 400 / 500 + + + + + + + + Qoder CN + bob@dev · PAT + + + 就绪 + + + 额度 66% + 剩余 330 / 500 + + + + + W + WorkBuddy + team@work · 浏览器登录 + + + 就绪 + 剩余积分 1,200 + 1,200 credits + + + + + Qoder Global + carol@dev · 凭证导入 + + + 就绪 + + + + + 接入 OpenAI 客户端 + + Base URL + + http://127.0.0.1:3010/v1 + + API Key + + sk-c2a-9f3e········ + + 快速验证 + + $ curl /v1/chat/completions + -H "Authorization: Bearer" + ✓ 200 · stream ok + + + 复制并测试 + + + 除 /health 外均需 API Key + diff --git a/docs/assets/readme/hero-en.svg b/docs/assets/readme/hero-en.svg new file mode 100644 index 00000000..905903d2 --- /dev/null +++ b/docs/assets/readme/hero-en.svg @@ -0,0 +1,72 @@ + + CLI2API — your Qoder CLI login, served as a local OpenAI-compatible API + Dark card: project name and one-line value on the left, and a terminal panel on the right showing an OpenAI client connecting through the CLI2API gateway to the Qoder cloud. + + + + + + QODER CLI → OPENAI API + + + + + + CLI2API + + Your own Qoder CLI login, served + as a local OpenAI-compatible API + + + + Docker Compose + + OpenAI-compatible + + MIT License + + + + + + + + + + + localhost:3010 + + + + + OpenAI + client + + + CLI2API + local gateway + + + Qoder + cloud + + + + + + + + + + + + any client + Go + Node + HTTP / SSE + + + + POST /v1/chat/completions + stream · tool_calls · reasoning_content + + diff --git a/docs/assets/readme/hero-zh.svg b/docs/assets/readme/hero-zh.svg new file mode 100644 index 00000000..de7eb9b3 --- /dev/null +++ b/docs/assets/readme/hero-zh.svg @@ -0,0 +1,72 @@ + + CLI2API — 把你的 Qoder CLI 登录态,变成一个本机运行的 OpenAI 兼容 API + 深色卡片:左侧是项目名称与一句话价值,右侧终端面板展示 OpenAI 客户端经 CLI2API 网关连接到 Qoder 云端的请求流。 + + + + + + QODER CLI → OPENAI API + + + + + + CLI2API + + 把你自己的 Qoder CLI 登录态, + 变成一个本机运行的 OpenAI 兼容 API + + + + Docker Compose + + OpenAI 兼容 + + MIT License + + + + + + + + + + + localhost:3010 + + + + + OpenAI + 客户端 + + + CLI2API + 本机网关 + + + Qoder + 云端 + + + + + + + + + + + + 任意客户端 + Go + Node + HTTP / SSE + + + + POST /v1/chat/completions + stream · tool_calls · reasoning_content + +