Vitest Testing
提供 Vitest 单元测试与集成测试的模式与最佳实践,涵盖断言、异步测试与模拟方法。
针对 Codex API 代理的配置、认证及模型注册问题提供诊断方案。
openclaw skills install @17329971/cli-proxy-troubleshooting命令、参数、文件名以原文为准
排查基于 [CLI Proxy API](https://github.com/stainless-codex/cli-proxy-api) 的 Codex OAuth / OpenAI-compatible 代理问题。
当遇到以下情况时,先按本文的“快速诊断流程”执行,再按需阅读 references/source-architecture.md:
unknown provider for modelCLI Proxy 的核心架构:
config.yaml / auth-dir → reloadClients → snapshotCoreAuths
→ refreshAuthState → dispatchAuthUpdates → applyCoreAuthAddOrUpdate
→ registerModelsForAuth → 模型注册表(全局单例)请求处理链路:
HTTP → ChatCompletions handler → getRequestDetails(modelName)
→ GetProviderName(baseModel) → GetModelProviders(modelName)
→ AuthManager.Execute(providers, req) → Codex executor → ChatGPTsync.Once),运行中可热加载不同认证类型注册不同的模型集:
| 认证类型 | 注册的模型 | 来源 |
|---|---|---|
Codex Free(auth-dir 的 JSON 文件带 -free) | gpt-5.4, gpt-5.4-mini, gpt-5.3-codex, gpt-5.2 | models.json 中的 CodexFreeModels |
Codex Pro(auth-dir 的 JSON 文件无 -free) | 同上 + gpt-5.3-codex-spark | GetCodexProModels() |
| codex-api-key(config.yaml 中配置) | Pro 模型集 | synthesizeCodexKeys→GetCodexProModels() |
| OpenAI API Key | gpt-4o, gpt-4o-mini | 标准 OpenAI 模型 |
内嵌模型定义在 internal/registry/models/models.json,编译时打包进二进制。
错误消息的细节决定排查方向:
"unknown provider for model gpt-5.4" → 模型名被正确解析,但 provider(认证)未注册 → 检查认证文件和 API key"unknown provider for model"(没有模型名) → 请求体被破坏,模型字段缺失 → 检查请求编码💡 核心发现: 错误消息中的模型名是否出现,直接指向完全不同的根因。
PowerShell 会对 -d 参数中的 JSON 做转义处理,导致:
" → \" 或丢失)修复方法:
# 用文件方式(推荐)
echo '{"model":"gpt-5.4","messages":[{"role":"user","content":"hi"}]}' > body.json
curl -X POST <proxy-base-url>/v1/chat/completions -d @body.json
# 或用 Python 发请求
python -c "
import requests
r = requests.post('<proxy-base-url>/v1/chat/completions',
json={'model':'gpt-5.4','messages':[{'role':'user','content':'hi'}]})
print(r.text)
"CLI Proxy 启动时会调用 SanitizeCodexKeys() 清理配置中的 codex-api-key 条目。
清理规则: 移除**没有 base-url** 的条目。
# ❌ 会被移除
codex_api_keys:
my-key:
key: "sk-xxx"
# ✅ 保留
codex_api_keys:
my-key:
key: "sk-xxx"
base-url: "https://chatgpt.com/backend-api/codex"base-url 必须是 /backend-api/codex 路径,不是纯域名。
**管理 API 返回 None 不代表配置没加载。** auth-dir 字段是 json:"-" 标记的,管理 API 故意不暴露。
排查方法: 直接检查:
<auth-dir>/ 目录 — 认证文件是否存在applied core auth / registerModelsForAuth 输出CLI Proxy 需要访问 chatgpt.com 后端。如果 ChatGPT 被墙:
proxy-url: "http://127.0.0.1:PORT"图片生成通过 Responses API 转发,使用 tool_choice: {type: "image_generation"} 调用。
常见失败场景:
Tool choice 'image_generation' not found当用户报告模型调用异常时:
@body.json 重发验证registerModelsForAuth、applied core auth、provider_not_foundreferences/source-architecture.md该 reference 文件包含关键源码文件、函数链路和模型注册逻辑的完整说明。
已收录 2 个 Skill