news 2026/9/23 2:08:39

OpenCodex Provider/Model 补丁索引:一文掌握 built-in provider、模型与配置变更的标准修改路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenCodex Provider/Model 补丁索引:一文掌握 built-in provider、模型与配置变更的标准修改路径

【免费下载链接】opencodex

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

项目地址:https://gitcode.com/gh_mirrors/ope/opencodex
点击查看免费下载

本指南以devlog/_chase/_model/004_patch_index.md为骨架,梳理 OpenCodex 在新增 provider、追加模型、扩展配置字段、打通 jawcode 元数据时的所有实际修改点与联动契约。读完你可以照着索引在 src/providers/registry.ts 等核心文件中定位正确的"首个修改点",并跑通最小验证命令集,避免把代码写进错误的归属层。

OpenCodex 是面向 OpenAI Codex 与 Claude Code 的通用 provider 代理,负责把 Codex CLI/App/SDK 的请求路由到 Claude、Gemini、Grok、DeepSeek、Ollama 等任意上游。模型/provider 的增删改看似只是"加一个名字",实际上牵动 registry、derive、router、adapter、catalog、management API 与 jawcode 元数据生成多条链路。004_patch_index.md正是为这类变更准备的"改动路由表":先用一张表判断变更类型,再按对应清单逐点落位。

快速分类:先判定变更类型,再决定首个修改点

任何 provider/model 相关改动,第一步不是写代码,而是对照下表完成分类,确定"首个所有者"以及"需要一起确认的地方"。

变更类型首个所有者需要一起检查的位置
新增 built-in providersrc/providers/registry.tsderive、auth、router、adapter、catalog、management API、tests/docs
给已有 provider 添加模型registry 或 live metadata parseradapter override、catalog tests、picker 可见性
OAuth/login 变更src/oauth/registry 的authKind/oauthId、store 并发、management API
API-key pool / 429 变更src/providers/key-failover.tsrelay retry 边界、tests、quota 展示
wire request/stream 变更src/adapters/src/server/adapter-resolve.ts、bridge/parser tests
Codex picker 元数据src/codex/catalog.tsregistry hints、生成 jawcode metadata、/api/models
jawcode model metadata 同步jawcode generator sourcebun run generate:jawcode-metadata、catalog diff
GUI provider presetregistry → derive 路径management API(GUI 只消费派生值)

这张表的潜台词是 OpenCodex 的分层原则:registry 是唯一正本,GUI 与 key-login 列表从不复制同一份数据。例如 provider preset 的变更必须落在"registry → derive"路径上,管理 API 与 GUI 只消费派生结果,而不是各自维护一套配置。这一规则在 devlog/_chase/_model/README.md 的操作规则一节有明确表述:built-in provider 的正本是PROVIDER_REGISTRY

新增 built-in provider 的标准七步流程

原文档给出了完整七步,这里结合源码逐条展开:

  1. 在 registry 中登记稳定 id:在 src/providers/registry.ts 的 provider entry 中写入 stable id、label、adapter、base URL 与 auth kind。PROVIDER_REGISTRYPROVIDER_REGISTRY_COREPROVIDER_REGISTRY_EXTENDED两个分表合并而来(registry.ts),新 provider 应归入其中一张分表。entry 的字段契约定义在 src/providers/registry/types.ts 的ProviderRegistryEntryidlabeladapterbaseUrlauthKind是必填骨架,其余如dashboardUrlmodelsliveModelsmodelContextWindows等按需填充。registry 加载时还会对每个 entry 执行fastWireDeclarationError校验,声明非法会直接抛TypeError(registry.ts)。

  2. 确认现有 adapter 是否够用:只有在出现全新 wire shape 时才扩展 src/adapters/ 与resolveAdapter()。从 001_provider_inventory.md 的统计看,多数 provider 落在 openai-chat(38 个)、anthropic(5 个)、google(3 个)等既有 adapter family 上——这也是文档强调"现有 adapter 够用就不新建 adapter/auth flow"的原因。

  3. 处理 key/OAuth 契约:key provider 要核对dashboardUrlderiveKeyLoginMap()契约;OAuth provider 则需在 src/oauth/index.ts 注册 login/refresh controller,并在 registry entry 中设置oauthId,同时确认 src/oauth/store.ts 的按账号 credential store 与刷新序列化行为。ProviderAuthKind只有forward | oauth | key | local四种(registry/types.ts),先归类再动手。

  4. 只有必要时才扩展 bare model prefix:默认使用显式provider/model命名空间。文档明确"基本默认是显式 provider/model",bare prefix 是例外而非常态——src/router.ts 中的MODEL_PROVIDER_PATTERNS目前仅覆盖claude-*groqllama-/mixtral-/gemma-)两类前缀(router.ts),扩表需谨慎。

  5. 决定 fallback 模型与 capability 元数据的归属:static fallback 模型、live discovery、context/modality/reasoning 元数据各归其主。从 002_catalog_contract.md 的契约看,liveModels: true的 provider 以 live/models结果为模型 ID 的权威来源,registry 只提供 fallback 与 capability hint。

  6. 核对对外接口:检查/api/providers/api/models、selected/disabled models 以及 Codex catalog sync。管理 API 实现位于 src/server/management-api.ts,catalog 的合并与缓存失效在 src/codex/catalog.ts。

  7. 补测试、跑 typecheck、更新文档:执行针对 provider/adapter/catalog 的 focused test 与bun run typecheck,并同步用户文档。

给已有 provider 添加模型:六步轻量流程

新增模型与新增 provider 是两类变更,后者大多无需动 adapter 或 auth:

  1. 确认 upstream 模型 ID 与实际 wire protocol;
  2. 若 provider 是liveModels: true不要写 static allowlist,只补 fallback/capability hint——live 结果是权威,registry 的models仅作 fallback;
  3. 按需在对应 registry entry 上补充modelContextWindowsmodelInputModalitiesmodelReasoningEfforts及参数排除列表(如noVisionModelsnoReasoningModelsnoTemperatureModelsnoTopPModelsnoPenaltyModels,字段定义见 registry/types.ts);
  4. 仅当该模型 wire 与 provider 默认不同时才修改resolveWireProtocolOverride()——它按"硬 pin → 用户 per-model override → registry 混合 wire 默认 → provider 自身 adapter"的优先级解析(adapter-resolve.ts),当前仓库中的典型例子是 OpenCode Go 的部分 MiniMax 模型;
  5. 区分 media-generation 模型与 vision-input chat 模型,确认 catalog filter 是否放行/隔离——media 生成模型要从 coding model picker 中分离;
  6. 若需复用 jawcode 元数据,先改生成 source 再重新生成 snapshot,不要手改生成文件。

新增配置字段的六步契约链

文档强调"新字段真的需要时才做",并给出严格顺序:

  1. 先在 src/types.ts 的ProviderRegistryEntry(或OcxProviderConfig)契约上扩展类型;
  2. 在 src/config.ts 实现 validation/default/migration;
  3. 打通providerConfigSeed()enrichProviderFromRegistry()的派生路径(实现位于 src/providers/derive.ts);
  4. 修改 router/adapter/catalog 中的实际消费者;
  5. 更新 management API DTO 与 GUI editor;
  6. 补齐 round-trip config test 与 backward-compat test。

顺序的意图是把"类型 → 校验 → 派生 → 消费 → 对外呈现 → 回归"串成一条单向链,任何一环缺失都会让新字段在某个环节悄悄失效。

与 jawcode 的边界:谁拥有什么

OpenCodex 的模型元数据部分来自 jawcode(packages/ai/src/models.json)生成的 snapshot,但两者的所有权必须严格区分:

问题jawcode 拥有OpenCodex 拥有
JWC 自身调用 provider?packages/ai/src/providers/、descriptor、auth storage不适用
把 Codex 请求代理到 provider?参考实现registry、router、adapters、bridge
JWC bundled model metadatagenerator +packages/ai/src/models.json消费生成的 metadata snapshot
Codex App picker 暴露不适用src/codex/catalog.ts 与 sync/cache
OpenCodex OAuth 账号/密钥池不适用src/oauth/、src/providers/api-keys.ts

接收 provider patch 时,先按JWC nativeOCX proxybothdocs-only四类做初步分类。jawcode 有了某 provider 不代表 OCX registry 要自动加它;OCX 能路由某 provider 也不代表要扩充 jawcode 的KnownProvider——transport、auth、retry、catalog 的所有权不因同名而共享。

最小验证命令集

文档给出的验证命令(测试文件名需在改动前用rg --files tests | rg 'provider|router|catalog|oauth'重新确认,因为仓库测试文件会演进):

bun test --isolate tests/provider-registry-parity.test.ts tests/provider-live-models.test.ts bun test --isolate tests/router.test.ts tests/codex-catalog.test.ts bun run typecheck git diff --check

按当前仓库实际结构,provider 相关测试集中在 tests/providers/ 下(如devin-live-models.test.tsdeepseek-inbound-wire.test.ts等),catalog 契约的完成标准则要求/api/models/v1/models共用同一 routed model source(详见 002_catalog_contract.md)。建议在改动前运行上述rg命令确认本次变更对应测试的准确文件名。

源码印证:从补丁索引到实现层

  • registry 正本PROVIDER_REGISTRY合并entries-coreentries-extended,加载期即校验 fastWire 声明合法性(src/providers/registry.ts);ProviderAuthKindModelWireDefaultInboundWire、live discovery 等类型契约集中在 src/providers/registry/types.ts。
  • adapter 解析resolveWireProtocolOverride()支持"hard pin 优先、per-model override 次之、registry 默认兜底"的多级覆盖,且对 forward provider 禁止切换 wire(避免丢凭证),实现在 src/server/adapter-resolve.ts。
  • 路由优先级routeModel()依次尝试显式provider/model→ 激活 provider 的defaultModel→ 已知 bare-model prefix → 静态/配置modelsdefaultProvider→ 报错(详见 003_auth_routing_flow.md,对应实现 src/router.ts);且带/的 upstream 模型 id 只有在 prefix 确为已配置 provider 时才作命名空间切分。
  • jawcode 元数据:生成输入默认是../jawcode/packages/ai/src/models.json,可用JAWCODE_MODELS_JSON环境变量覆盖,输出为src/generated/jawcode-model-metadata.ts;该文件不允许手改,只能通过bun run generate:jawcode-metadata再生成(契约见 002_catalog_contract.md)。当前仓库 src/generated/ 下的实际生成物为model-metadata.ts,说明生成脚本与产物命名仍在演进,改动前应以仓库现状为准。

进一步阅读

  • 变更全貌:chase/_model README(阅读顺序与正本路径)
  • Provider 盘点与分层:001_provider_inventory.md
  • Catalog 四输入合并契约:002_catalog_contract.md
  • 认证与路由流程:003_auth_routing_flow.md
  • 上游差距 backlog 与模型 id 差异:005_upstream_delta_backlog.md、007_model_id_delta.md

【免费下载链接】opencodex

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

项目地址:https://gitcode.com/gh_mirrors/ope/opencodex
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 2:06:01

茶叶叶片病害图像分类数据集实战:从数据清洗到模型训练全流程指南

简介:面向茶叶叶片病害识别与图像分类任务,这份数据集提供约4000张已标注的常规茶叶叶片病害图像,涵盖褐枯病、灰枯萎病、红点病等5个类别,适合农业病害检测、深度学习图像分类教学及科研实验。压缩包内已按训练集、验证集和测试集…

作者头像 李华
网站建设 2026/9/23 2:05:39

FxSound Pro音效增强工具:DSP技术与应用全解析

1. FxSound Pro 音效增强工具深度解析FxSound Pro(前身为DFX Audio Enhancer)是我近年来使用过最出色的音效增强软件之一。作为一名音频发烧友,我测试过市面上几乎所有主流音效工具,而FxSound Pro凭借其专业的DSP处理能力和丰富的…

作者头像 李华
网站建设 2026/9/23 1:55:14

PowerBI与FineBI全面对比:从数据建模到性能优化选型指南

简介:PowerBI与FineBI作为主流商业智能平台,各有适用边界。这份对比分析文档面向数据工程师、BI分析师及企业选型决策者,围绕数据连接、引擎架构、数据处理、前端展现、多维分析和集成应用等核心维度,逐一拆解两者差异。文档点明F…

作者头像 李华