AtomCode v5.2.3 新子系统深度分析 — Provider 生态扩展:Responses API / 模型发现 / 探测 / OpenRouter / 推理强度
基于
strings模块路径 + 事件枚举 + webui 打包 JS + 运行时验证的还原分析 2026-10-14 前置报告:06-version-diff-v5.0.9-to-v5.2.3.md姊妹报告:DEEP_ANALYSIS_57(安全授权)、DEEP_ANALYSIS_54(缓存与断流恢复)、DEEP_ANALYSIS_38(v5.0.9 Provider 登录)
1. 新增 Provider 模块总览
| 模块 | 职责 | v5.0.9 是否存在 |
|---|---|---|
crates/atomcode-capabilities/src/provider/responses.rs | OpenAI Responses API 适配器 | ❌ 新增 |
crates/atomcode-capabilities/src/provider/discovery.rs | 模型发现 | ❌ 新增 |
crates/atomcode-capabilities/src/provider/probe.rs | 连通性探测 | ❌ 新增 |
crates/atomcode-capabilities/src/provider/latency.rs | 延迟/流指标 | ❌ 新增 |
crates/atomcode-capabilities/src/provider/reasoning.rs | 推理强度规范化 | ❌ 新增 |
crates/atomcode-auth/src/openrouter.rs | OpenRouter OAuth PKCE | ❌ 新增 |
crates/atomcode-config/src/provider_book.rs | Provider 预设库 | ❌ 新增 |
crates/atomcode-config/src/provider_edit.rs | Provider 编辑 | ❌ 新增 |
crates/atomcode-harness/src/plugins/reasoning_effort.rs | 推理强度 harness 插件 | ❌ 新增 |
crates/atomcode-cli/src/tui_openrouter.rs | TUI OpenRouter 向导 | ❌ 新增 |
2. OpenAI Responses API(/v1/responses)
2.1 模块与事件谱
crates/atomcode-capabilities/src/provider/responses.rs:544 / :356
atomcode_capabilities::provider::responses
response.output_item.added
response.output_text.delta
response.reasoning_summary_text.delta
response.reasoning_text.delta
response.function_call_arguments.delta
response.function_call_arguments.done
response.output_item.done
response.completed / response.failed / response.incomplete
output_index / item/type / item/call_id / item/name / item/arguments
/input_tokens_details/cached_tokens2.2 机制
- 系统消息 →
instructions - 工具/工具结果 → Responses 编码
response.*SSE 流解码(output_item.added → output_text.delta → output_item.done → completed)- 推理用
response.reasoning_summary_text.delta/response.reasoning_text.delta - 与 chat/completions 共享连接池、TLS 与重试语义
- 预设注册:
OpenAI Responses endpoint协议枚举(provider_book.rs)
3. 模型发现(discovery)
3.1 证据
/v1/models / /api/tags
model discovery supports only http and https URLs
limit=1000
model discovery URL must not contain credentials3.2 WebUI 路由
POST /providers/discover-models ← 请求 {type, base_url, api_key},返回 n.models
settings.discoveredContextPreferred:Uses the model-specific value returned by discovery when available
ProviderPresetInfo / model_sourcediscoverable / ProviderAccountInfo {model_ids, preset_name, probeable}→ 保存 Provider 时可自动从服务端拉取模型列表;discoverable 标记控制发现是否可用。
4. 连通性探测(probe)
4.1 证据
crates/atomcode-capabilities/src/provider/probe.rs
POST /provider-accounts/:account/probe?selection=
POST /provider-accounts/:account/models4.2 WebUI i18n
providers.checking: Checking connectivity
providers.probeApplyFix: Use {url}
providers.probeAgain: Check again
providers.probeNow: Check connectivity
providers.probeOk: Connected→ 保存 Provider 后自动检测连通性;失败时提示 Use {url} 一键应用修复。
5. OpenRouter 一键接入(OAuth PKCE + 免费模型发现)
5.1 模块证据(openrouter.rs)
https://openrouter.ai/auth / parse /models response
https://openrouter.ai/api/v1/models
parse /auth/keys response / /auth/keys response missing `key`
bind loopback callback port / set callback listener non-blocking
https://openrouter.ai/api/v1/auth/keys
openrouter-free
https://openrouter.ai/discover
openrouter: no free-model ranking on the discover page; ordering by context
/v1/chat/completions5.2 OAuth PKCE 参数
code_challenge=&code_challenge_method=S256
response_type / redirect_uri / code_challenge / code_challenge_method
authorization_code / grant_type / code_verifier5.3 CLI 命令状态机
/openrouter [key] 带参数直接使用已有 API Key
/openrouter login 无参数走浏览器 OAuth(PKCE)
connect OpenRouter's free models (reuses the saved key once authorised; login authorises again)
Using the key saved last time no browser needed (to switch accounts: /openrouter login)
The saved key is no longer valid; authorising again.
Could not check whether the saved key still works (network or proxy?); using it anyway
if what follows fails, authorise again with /openrouter login. No answer from the browser
cancelled or timed out.
OpenRouter returned no free models.5.4 免费模型推荐逻辑(Top 5 上榜/淘汰)
OpenRouter is connected: free model(s) added,
e earlier one(s) not in this recommendation removed (gone, no longer free, or outside the
top five), `B` is the default.
Models you configured yourself were not touched.→ 接入后自动拉取并按能力过滤(tool-use + 文本输出)Top 5 免费模型落盘配置; 额度用尽或新用户未领 CodingPlan 时引导跳转;ESC 可取消连接流程。
6. 推理强度(reasoning_effort)
6.1 证据
invalid reasoning_effort: / accepted values
reasoning_effort not supported by ...
(Provider rejected reasoning_effort; auto-disabled for this session
reasoning_effort cleared (API default)
effort must be one of , not `
no such effort `; it takes , default
thinking_budget must be >= 1024
LowMediumXHigh ← 枚举序数:Low / Medium / X / High 四档6.2 配置字段
reasoning_effort / thinking_type / thinking_keep / reasoning_history / reasoning_effort_levels
supports_reasoning_effort / effort_levels / effort_applicable / clear_reasoning_effort
clear_reasoning_effort_levels6.3 行为
/effort只列出当前模型支持的档位/model切换后若新模型声明了思考强度则递上档位选择- 新增 xhigh 档位:
reasoning_effort_levels sent by the server - 角色可声明自己的思考档位
7. Ollama 上下文钉住 与 OpenCode Zen
7.1 Ollama
http://localhost:11434 / /api/tags
num_predict / num_ctx / done_reason / prompt_eval_count / eval_count
ATOMCODE_OLLAMA_NUM_CTX(新 env)显式钉住运行时窗口,避免声明窗口与守护进程默认不一致7.2 OpenCode Zen
https://opencode.ai/zen/v1 / OpenCode Zen (OpenAI-compatible)
请求自动补发 x-opencode-session 头7.3 全 Provider 预设注册表(provider_book.rs)
.../v1 DASHSCOPE_API_KEY aliyun Alibaba Cloud Model Studio
ZHIPUAI_API_KEY zhipu Zhipu Coding Plan
OPENROUTER_API_KEY OpenRouter
opencode.ai/zen/v1 OPENAI_API_KEY openai OpenAI
ANTHROPIC_API_KEY anthropic Anthropic
localhost:11434 ollama Ollama
协议枚举:openai-compatible / anthropic-compatible / OpenAI Responses endpoint→ 新增 OpenRouter、OpenCode Zen、OpenAI Responses endpoint、xiaomi-mimo、zhipu-coding 预设。
8. 结构体清单
struct ProviderPresetInfo
struct ProviderAccountInfo {model_ids, preset_name, probeable}
struct ModelSource / model_sourcediscoverable
struct TokenBreakdown
struct TokenUsage9. 运行时验证记录
daemon --help:--port 13456 / --client / --idle-timeout / --no-authwebui --help:--port 13457 / --host 127.0.0.1 / --no-open- health:
capabilities: ["goal", "session_scoped_live"] --tui --demo:状态栏显示1.2K tok、缓存 33%