mirror of
https://git.openapi.site/https://github.com/desirecore/config-center.git
synced 2026-06-06 05:50:50 +08:00
8aa03dbb4ed22e5effb863e80c2ce817152ba552
回应 PR #3 review 反馈: 1. 移除 'npm ci || npm install' 兜底 (Copilot review #2) lockfile 已 commit,兜底反而会掩盖未来 lockfile 不一致问题, 导致 CI 依赖解析随时间漂移。改为纯 'npm ci' 严格按 lockfile 安装。 2. test 脚本改用具体文件路径 (Copilot review #3) 原 'node --test __tests__/*.test.mjs' 依赖 shell glob 展开, 在 Windows cmd(npm 在 Windows 上的默认 script-shell)不展开 glob。 实测 'node --test __tests__'(Copilot 建议)在 Node v22 报 'Cannot find module',故改用直接列具体文件方式: 'node --test __tests__/validate.test.mjs',跨平台稳定。 未来新增测试文件需手动追加(成本极低)。 未应用的 review 评论: - README 表格语法误报:实际已用单 |,Copilot 误读 unified diff 的 + 前缀 - loadSchemas 加 try/catch:schema 文件由维护者控制,原 stack trace 已显示路径, 额外错误处理属过度防御
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 严格 number)readComputeConfig 校验失败 → 同步路径死锁
→ 远程数据 revert 也救不了已污染的本地用户。详见 desirecore PR #471。
为防止此类事故重演,本仓库引入 frozen schema + CI 自动校验。
校验规则
| Schema | 适用文件 | 关键约束 |
|---|---|---|
provider.schema.json |
compute/providers/*.json、compute/coding-plans/*.json |
defaultTemperature/defaultTopP 必须是 number,禁止 null/string;additionalProperties: false |
manifest.schema.json |
manifest.json |
presetDataVersion 必须是递增整数 |
service-map.schema.json |
compute/service-map.json |
每条映射须含 modelName + providerId |
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", ... }
关键规则:新增字段需先升级老客户端 schema
provider 和 model 顶层均启用 additionalProperties: false。如需新增字段:
- 先在 desirecore 主仓
lib/schemas/agent-service/compute.ts升级 schema 接受新字段 - 发布新版本客户端
- 等大部分用户升级
- 再更新本仓库的 frozen schema 和数据
否则老客户端会因未知字段校验失败死锁。
本地校验
npm install
npm run validate # 校验所有数据文件
npm test # 跑单元测试(含反例测试)
CI(GitHub Actions)会在每个 PR 自动运行 validate 和 test,不通过禁止合并。
数据修改流程
- 编辑
compute/providers/<name>.json、compute/coding-plans/<name>.json或compute/service-map.json - 编辑
compute/providers/_index.json或coding-plans/_index.json(新增/删除 provider 时) - 必须递增
manifest.json#presetDataVersion,并更新updatedAt npm run validate本地确认通过- 提 PR,等 CI 校验通过
- 合并到 main 后客户端会在下次后台 fetch(最长 30 分钟)拾取更新
客户端拉取机制
详见 desirecore CLAUDE.md "Config Center" 章节。
- 构建期同步:
npm run sync-config-center把数据复制到 desirecore 主仓lib/agent-service/defaults/ - 运行时同步:客户端启动后后台 git fetch 本仓库,每 30 分钟检查一次远程更新
- 版本比对:
presetDataVersion(递增整数)+ digest(SHA-256)双重校验
Description
Languages
JavaScript
96.2%
Shell
3.8%