AtomCode v5.0.9 新子系统深度分析 — Provider 生态与登录认证
基于
strings端点 / 结构体元数据 / 错误串的还原分析 2026-09-09 前置报告:05-version-diff-v4.25.5-to-v5.0.9.md
1. Provider 生态总览(v5.0.9)
1.1 内建端点全集(二进制内)
| Provider | 端点 | 类型 |
|---|---|---|
| AtomGit(默认) | https://llm-api.atomgit.com/v1 | OpenAI-compat |
| 官方代理 | https://api.atomgit.com/api/v5 | CodingPlan 网关 |
| OpenAI | https://api.openai.com/v1 | OpenAI-compat |
| Anthropic | https://api.anthropic.com | Anthropic |
| OpenRouter | https://openrouter.ai/api/v1 | OpenAI-compat |
| DeepSeek | https://api.deepseek.com/v1 | OpenAI-compat |
| Moonshot | https://api.moonshot.cn/v1 | OpenAI-compat |
| MiniMax | https://api.minimaxi.com/v1 | OpenAI-compat |
| SiliconFlow | https://api.siliconflow.cn/v1 | OpenAI-compat |
| Xiaomi MiMo | https://api.xiaomimimo.com/v1 | OpenAI-compat |
| Volcengine Ark | https://ark.cn-beijing.volces.com/api/v3 | OpenAI-compat |
| DashScope | https://dashscope.aliyuncs.com/compatible-mode/v1 | OpenAI-compat |
| LongCat | https://api.longcat.chat/openai/v1 | OpenAI-compat |
| Zhipu CodingPlan | https://open.bigmodel.cn/api/coding/paas/v4 | CodingPlan |
| Zhipu AI | https://open.bigmodel.cn/api/paas/v4 | OpenAI-compat |
| OpenCode Zen | https://opencode.ai/zen/v1 | OpenAI-compat |
| TaoToken | https://taotoken.net/api/v1 | OpenAI-compat |
| Ollama | http://localhost:11434 | Ollama |
1.2 API Key 环境变量(14 个)
ANTHROPIC_API_KEY OPENAI_API_KEY OPENROUTER_API_KEY DEEPSEEK_API_KEY
MOONSHOT_API_KEY MINIMAX_API_KEY SILICONFLOW_API_KEY MIMO_API_KEY
ARK(volcengine) DASHSCOPE_API_KEY LONGCAT_API_KEY ZHIPUAI_API_KEY
OPENCODE_API_KEY OLLAMA_API_KEY ATOMCODE_API_KEY2. 模型发现(DiscoverModels)
2.1 请求/响应结构(strings 类型元数据)
struct DiscoverModelsRequest with 4 elements
struct DiscoverModelsResponse
struct DiscoverModelsResponse with 3 elements
selection_id / created ...2.2 发现流程(错误串还原)
model discovery supports only http and https URLs
model discovery URL must not contain credentials
model listing has no valid data array; enter the model manually
Ollama model listing has no valid models array
Model discovery timed out
model listing exceeds the 4 MiB response limit; check the API key
Could not reach the model endpoint
This provider protocol has no supported model listing; enter the model manually| 协议 | 发现方式 | 失败行为 |
|---|---|---|
| OpenAI-compat | /v1/models | 手动输入模型 |
| Ollama | /api/tags | 手动输入 |
| Anthropic | 不支持 | 手动输入 |
| CodingPlan | 服务端宣告 | 自动 |
→ 发现结果缓存:selection_id + created 标识模型列表,供 UI 选择器复用。
2.3 前端校验(WebUI JS)
throw Error(`model discovery returned an invalid payload`)3. 登录 / 认证系统
3.1 统一登录流(v5 重构)
/login ← 统一入口(codingplan 已并入)
hidden alias for `atomcode login`:kept so existing scripts / muscle memory
don't break after `/codingplan` and `atomcode codingplan` were folded into
the unified `/login` flow
FORCE → 强制重新登录
/effort → 默认 provider / 模型切换3.2 GitHub OAuth
https://github.com/login/oauth/authorize
https://github.com/login/oauth/access_token
scope: read:org notifications
add-github-oauth ← 登录命令/按钮
X-AtomCode-Nonce ← 防重放 nonce 头→ 认证后认领 CodingPlan 模型(Sign in with {oauth} and claim CodingPlan models)。
3.3 CodingPlan 账户
struct CodingPlanSetupSteps / SetupResponse / PlanResponse
claimed_at / expires_at / total_days / remaining_days
report_text / steps| 字段 | 含义 |
|---|---|
claimed_at | 认领时间 |
expires_at | 过期时间 |
total_days / remaining_days | 总天数 / 剩余天数 |
3.4 受管 Provider 保护
CodingPlan providers are managed by /login and cannot be deleted
CodingPlan providers are managed by /login and cannot be replaced
CodingPlan providers are managed by /login and cannot be edited
CodingPlan provider accounts are managed by /login and cannot be modified→ CodingPlan provider 是受管实体:/login 独占管理,用户侧只读,防误删/误改。
4. Provider 管理校验面
4.1 参数校验
max_tokens must be greater than zero
context_window must be greater than zero
model cannot be empty
thinking_budget must be >= 1024
Provider type cannot be empty4.2 会话/认证状态
login session corrupt ← 登录状态不完整
Login session state is incomplete
Login credential persistence state is incomplete
Too many login sessions are active; cancel or wait for an existing login
Failed to save login credentials
after login did not persist config
login cancelled by user
login poller stopped unexpectedly
no model is configured; run /login or /provider first4.3 登录轮询
input channel closed
login poller stopped unexpectedly→ 登录采用 浏览器 OAuth → 本地轮询回调 模型。
5. 逆向方法论备注
- Provider 端点以
https://<host>/<path>纯文本存在于 .rodata → 完整枚举 struct DiscoverModelsRequest with 4 elements等揭示模型发现契约- "受管 provider 不可改"错误串揭示 CodingPlan 所有权模型(/login 独占)
- OAuth 端点 + scope 串(
read:org notifications)还原授权范围 - 校验错误串(
thinking_budget must be >= 1024)暴露参数约束
本报告由持续分析循环生成 — v5.0.9 Provider 生态与登录认证深度分析