Skip to content

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.rsOpenAI 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.rsOpenRouter OAuth PKCE❌ 新增
crates/atomcode-config/src/provider_book.rsProvider 预设库❌ 新增
crates/atomcode-config/src/provider_edit.rsProvider 编辑❌ 新增
crates/atomcode-harness/src/plugins/reasoning_effort.rs推理强度 harness 插件❌ 新增
crates/atomcode-cli/src/tui_openrouter.rsTUI 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_tokens

2.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 credentials

3.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/models

4.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/completions

5.2 OAuth PKCE 参数 ​

code_challenge=&code_challenge_method=S256
response_type / redirect_uri / code_challenge / code_challenge_method
authorization_code / grant_type / code_verifier

5.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_levels

6.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 TokenUsage

9. 运行时验证记录 ​

  • daemon --help:--port 13456 / --client / --idle-timeout / --no-auth
  • webui --help:--port 13457 / --host 127.0.0.1 / --no-open
  • health:capabilities: ["goal", "session_scoped_live"]
  • --tui --demo:状态栏显示 1.2K tok、缓存 33%

基于 VitePress 构建 · AtomCode v5.2.3 逆向工程分析文档