2026-04-26 17:44:03 +08:00

DesireCore Config Center

DesireCore 官方配置中心:托管 Provider / Model / Pricing / ServiceMap 数据,由 desirecore 客户端通过 npm run sync-config-center 脚本和运行时后台 fetch 拉取。


数据契约Frozen Schema

schemas/ 目录下的 JSON Schema 是已发布客户端的兼容契约。所有写入此仓库的数据必须通过 schemas/ 校验,否则会破坏老版本客户端。

历史背景

PR #1 曾把 reasoning 模型的 defaultTemperature / defaultTopP 写为 null 导致已发布客户端schema 严格 numberreadComputeConfig 校验失败 → 同步路径死锁 → 远程数据 revert 也救不了已污染的本地用户。详见 desirecore PR #471。

为防止此类事故重演,本仓库引入 frozen schema + CI 自动校验。

校验规则

Schema 适用文件 关键约束
provider.schema.json compute/providers/*.jsoncompute/coding-plans/*.json defaultTemperature/defaultTopP 必须是 number禁止 null/stringadditionalProperties: false
manifest.schema.json manifest.json presetDataVersion 必须是递增整数
service-map.schema.json compute/service-map.json 每条映射须含 modelName + providerId
model-spec.schema.json + model-specs-index.schema.json compute/model-specs/*.json + _index.json 模型内在规格、智能路由三档、exact model 策略与稳定优先级
providers-index.schema.json 两个 _index.json order 数组无重复
pricing.schema.json compute/pricing.json markupRatio / usdToCny 为正数

关键规则reasoning 模型的温度参数

禁止"defaultTemperature": null"defaultTopP": null

正确做法:完全省略字段。

// ❌ 错误:会破坏 fix #471 之前的客户端
{ "modelName": "deepseek-reasoner", "defaultTemperature": null }

// ✅ 正确reasoning 模型省略温度字段
{ "modelName": "deepseek-reasoner", "displayName": "DeepSeek Reasoner", ... }

关键规则:计价币种按 Provider 归属决定

  • 国内 Provider 必须使用 priceCurrency: "CNY",并写入国内平台人民币价格。
  • 国外 Provider 必须使用 priceCurrency: "USD",并写入美元价格。
  • Provider 归属与其托管模型的产地冲突时,以 Provider 为准。例如OpenRouter 托管的 Qwen 模型仍按 USD 计价;国内 Provider 托管的国外模型仍按 CNY 计价。
  • 新增 Provider 时必须同步更新全量币种归属测试,避免未分类数据进入预置。

关键规则:新增字段需先升级老客户端 schema

providermodel 顶层均启用 additionalProperties: false。如需新增字段:

  1. 先在 desirecore 主仓 lib/schemas/agent-service/compute.ts 升级 schema 接受新字段
  2. 发布新版本客户端
  3. 等大部分用户升级
  4. 再更新本仓库的 frozen schema 和数据

否则老客户端会因未知字段校验失败死锁。

智能路由的模型规格边界

compute/model-specs 是智能路由唯一的模型规格主数据:

  • 每个 ModelSpec 的 spec 保存能力、上下文和输出上限;routing 保存 tier、稳定优先级、Agent 可选性和标准化 reasoning 合同;
  • _index.json#routingTiers 保存三档展示和回退顺序;不得创建 compute/smart-routing/** 等平行目录;
  • Provider 仅保存接入面、可用性、凭据和必要的接入面收紧;历史 Provider 模型字段是旧客户端兼容副本,不能覆盖 ModelSpec
  • desirecore-cloud 的连接、订阅、网关与计费仍由登录后的 Provider 接口动态下发,只有精确匹配 ModelSpec 的模型才可参加智能路由。

本地校验

npm install
npm run validate     # 校验所有数据文件
npm test             # 跑单元测试(含反例测试)

CIGitHub Actions会在每个 PR 自动运行 validatetest,不通过禁止合并。


数据修改流程

  1. 编辑 compute/model-specs/<name>.json(模型规格或智能路由策略)、compute/providers/<name>.json(接入面覆盖)、compute/coding-plans/<name>.jsoncompute/service-map.json
  2. 编辑 compute/model-specs/_index.json(新增规格文件或调整三档策略)、compute/providers/_index.jsoncoding-plans/_index.json(新增/删除 provider 时)
  3. 必须递增 manifest.json#presetDataVersion,并更新 updatedAt
  4. npm run validate 本地确认通过
  5. 提 PR等 CI 校验通过
  6. 合并到 main 后客户端会在下次后台 fetch最长 30 分钟)拾取更新

客户端拉取机制

详见 desirecore CLAUDE.md "Config Center" 章节。

  • 构建期同步npm run sync-config-center 把数据复制到 desirecore 主仓 lib/agent-service/defaults/
  • 运行时同步:客户端启动后后台 git fetch 本仓库,每 30 分钟检查一次远程更新
  • 版本比对presetDataVersion(递增整数)+ digestSHA-256双重校验
  • 智能路由规格:新客户端按 compute/model-specs/_index.json 与已列出 ModelSpec 文件的版本签名热加载;缺失、无精确匹配或校验失败时,该模型不会进入 Smart 路由fixed 模式保持兼容
Description
DesireCore 配置中心。
Readme 1.6 MiB
Languages
JavaScript 97.5%
Shell 2.5%