1
0
Files
DiAL/openspec/changes/archive/2026-05-10-abstract-target-expect-checkers/proposal.md

40 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
当前系统以 HTTP 请求作为唯一 checker 形态,`target``expect`、存储、API 和 Dashboard 都围绕 URL、HTTP method、status code 与 response body 建模,无法自然表达本地命令检查等非 HTTP 场景。项目尚未上线,没有兼容性约束,适合一次性重构为面向多种 checker 类型的清晰模型。
## What Changes
- **BREAKING**: 移除顶层 `target.url``target.method``target.headers``target.body` 配置形态,改为 `target.type` 判别不同 checker 类型,并将领域字段放入 `http``command` 分组。
- **BREAKING**: `expect.body` 从对象分组改为有序规则数组,按配置顺序执行并快速失败。
- 引入 `http` target 类型,支持 HTTP URL、method、headers、body、最大 body 读取字节数和 HTTP 专用 expect。
- 引入 `command` target 类型,支持本地命令 `exec + args``cwd``env`、最大输出读取字节数和 command 专用 expect。
- 为不同 checker 类型提供领域默认成功语义HTTP 默认 `expect.status: [200]`command 默认 `expect.exitCode: [0]`
- 引入全局并发限制 `runtime.maxConcurrentChecks`,默认值为 20。
- 引入 size 配置解析,支持 `B``KB``MB``GB`HTTP `maxBodyBytes` 和 command `maxOutputBytes` 默认均为 `100MB`
- 调整 expect 执行管线:先执行状态类检查,再执行耗时检查,再执行元数据或内容检查;同一内容字段内部按数组顺序检查,任一失败立即返回结构化失败信息。
- 将 check result 的失败信息结构化入库,区分 runner 执行错误与 expect 不匹配,便于后续追查。
- 将 DB、API、Dashboard 从 HTTP-only 字段命名调整为通用 checker 展示模型,同时保留 HTTP 和 command 的领域专用细节。
- 同步更新 README、示例配置和测试覆盖 typed target、默认 expect、快速失败、输出限制、失败信息和 Dashboard 展示。
## Capabilities
### New Capabilities
- `command-checker`: 定义本地命令 checker 的配置、执行、安全边界、默认成功语义、输出限制和 expect 校验。
### Modified Capabilities
- `probe-config`: YAML 配置从 HTTP-only target 改为 typed target新增 runtime 并发限制、HTTP/command 默认配置和 size 字符串解析。
- `probe-engine`: 调度引擎从固定 HTTP fetch 改为按 target type 选择 runner并在全局并发限制下执行检查。
- `expect-body-checkers`: HTTP body expect 改为有序规则数组,通用值操作符可复用于 stdout/stderr/header/body 等不同字段。
- `probe-data-store`: targets 和 check_results schema 从 HTTP-only 字段改为 checker 通用字段,并持久化结构化失败信息。
- `probe-api`: API 响应从 URL/method/statusCode/latencyMs 为中心改为 type/target/durationMs/statusDetail/failure 等通用 checker 契约。
- `probe-dashboard`: Dashboard 从 HTTP 拨测视图调整为 checker 通用视图,展示类型、目标、耗时、最近失败原因和领域状态详情。
## Impact
- 影响后端类型定义、配置加载校验、调度执行、HTTP runner、command runner、expect 校验模块、SQLite schema、聚合查询和 API 映射。
- 影响前后端共享 API 类型和 Dashboard 表格、详情、历史记录、趋势图展示字段。
- 影响 README、`probes.example.yaml`、单元测试和 smoke test 配置样例。
- 不引入新依赖,优先复用 Bun、TypeScript、现有 cheerio/xpath 和 SQLite 能力。