SKILL.mdlisted
Install: claude install-skill shuangying0001-beep/config-merge
# config-merge —— 配置分层合并与校验
> 把「默认值 / 系统配置 / 任务配置」三层合并成一份最终配置,自动校验、自动修复冲突,并支持快照与 diff。
> 纯函数实现(Node ESM,零依赖,仅用内置 `node:crypto`)。schema 可注入。
## 适用场景
- 有「全局默认 + 用户设置 + 单次任务参数」三层配置的工具 / 服务
- 配置冲突需要自动修复(如 `delayMax < delayMin` → 自动纠正)
- 任务前 dry-run 预演、配置版本快照与回归 diff
## 提供的函数
| 函数 | 说明 |
|------|------|
| `resolveConfig({defaults,system,task,schema?})` | 三层合并 + 校验 + 自动修复,返回含 `_meta`/`configHash` 的结果 |
| `diffConfigs(c1, c2)` | 对比两份配置,返回差异字段列表 |
| `configSnapshot(resolved)` / `configFromSnapshot(str)` | 快照存档 / 恢复 |
| `freezeConfig(resolved)` | 冻结为不可变快照 |
| `runAssertions(resolved, fns)` | 运行断言集合(dry-run 验证) |
| `commonAssertions` | 常用断言构造器:`range` / `gte` / `truthy` |
schema 字段规则:
- `systemOnly: true` —— 该字段任务层不可覆盖(只取系统/默认)
- `validator(v)` —— 值校验,不合法则跳过该来源
- `autoFix(resolved)` —— 返回 `{value, message}` 时自动修正并记录冲突
## 用法
```js
import { resolveConfig, diffConfigs, runAssertions, commonAssertions } from './scripts/config-merge.mjs';
const resolved = resolveConfig({
defaults: { maxPages: 10, delayMin: 3000, delayMax: 8000 },
system: { delayMin: 5000 },
task: { maxPages: 5, delayMax: 1000 }, // delayMax 小于 delayMin,会被自动修复
schema: {
delayMax: { autoFix: (r) => r.delayMax < r.delayMin
? { value: r.delayMin + 2000, message: '最大延迟小于最小延迟,已自动修正' } : null },
},
});
// resolved.delayMax === 7000; resolved._meta.conflicts 含一条自动修复记录
const check = runAssertions(resolved, [commonAssertions.gte('delayMax', 'delayMin')]);
// check.success === true
```
## 设计要点
-