跳转到内容

严格配置验证

严格配置验证(仅通过 doctor 进行迁移)

Section titled “严格配置验证(仅通过 doctor 进行迁移)”
  • 在所有地方拒绝未知配置键(根级 + 嵌套)。
  • 拒绝没有 schema 的插件配置;不加载该插件。
  • 移除加载时的旧版自动迁移;迁移仅通过 doctor 运行。
  • 启动时自动运行 doctor(dry-run);如果无效,阻止非诊断命令。
  • 加载时的向后兼容性(旧版键不会自动迁移)。
  • 静默丢弃无法识别的键。
  • 配置必须在每个层级精确匹配 schema。
  • 未知键是验证错误(根级或嵌套都不允许透传)。
  • plugins.entries.<id>.config 必须由插件的 schema 验证。
    • 如果插件缺少 schema,拒绝插件加载并显示清晰的错误。
  • 未知的 channels.<id> 键是错误,除非插件清单声明了该渠道 id。
  • 所有插件都需要插件清单(coderclaw.plugin.json)。
  • 每个插件为其配置提供严格的 JSON Schema(内联在清单中)。
  • 插件加载流程:
    1. 解析插件清单 + schema(coderclaw.plugin.json)。
    2. 根据 schema 验证配置。
    3. 如果缺少 schema 或配置无效:阻止插件加载,记录错误。
  • 错误消息包括:
    • 插件 id
    • 原因(缺少 schema / 配置无效)
    • 验证失败的路径
  • 禁用的插件保留其配置,但 Doctor + 日志会显示警告。
  • 每次加载配置时都会运行 Doctor(默认 dry-run)。
  • 如果配置无效:
    • 打印摘要 + 可操作的错误。
    • 指示:coderclaw doctor --fix
  • coderclaw doctor --fix
    • 应用迁移。
    • 移除未知键。
    • 写入更新后的配置。

允许的命令(仅诊断):

  • coderclaw doctor
  • coderclaw logs
  • coderclaw health
  • coderclaw help
  • coderclaw status
  • coderclaw gateway status

其他所有命令必须硬失败并显示:“Config invalid. Run coderclaw doctor --fix.”

  • 单个摘要标题。
  • 分组部分:
    • 未知键(完整路径)
    • 旧版键/需要迁移
    • 插件加载失败(插件 id + 原因 + 路径)
  • src/config/zod-schema.ts:移除根级透传;所有地方使用严格对象。
  • src/config/zod-schema.providers.ts:确保严格的渠道 schema。
  • src/config/validation.ts:未知键时失败;不应用旧版迁移。
  • src/config/io.ts:移除旧版自动迁移;始终运行 doctor dry-run。
  • src/config/legacy*.ts:将用法移至仅 doctor。
  • src/plugins/*:添加 schema 注册表 + 门控。
  • src/cli 中的 CLI 命令门控。
  • 未知键拒绝(根级 + 嵌套)。
  • 插件缺少 schema → 插件加载被阻止并显示清晰错误。
  • 无效配置 → Gateway 网关启动被阻止,诊断命令除外。
  • Doctor dry-run 自动运行;doctor --fix 写入修正后的配置。