SuperAPI AI 工具集

bkit-evals

测试与质量

查看项目

更新于 10-16 05:31

技能介绍

用途

bkit-evals 是 bkit-claude-code 项目中的一个技能质量评估运行器(Skill Quality Evaluation Runner),属于 v2.1.11 Sprint β FR-β2。它封装了 evals/runner.js,提供输入校验、结果持久化和结构化报告。此前用户需要直接执行 node evals/runner.js <skill>,必须自行记住 argv 结构,且忽略了超时和沙箱方面的顾虑;bkit-evals 取代了这种裸调用方式。

主要能力

run <skill>

执行单个技能的评估套件,例如 /bkit-evals run gap-detector。

具体行为:

  • 使用正则 /^[a-z][a-z0-9-]{0,63}$/ 校验技能名。不符合者被拒绝(不允许 shell 元字符、斜杠、空格等)。
  • 通过 child_process.spawnSync 以 argv 形式(非 shell)启动 node evals/runner.js --skill <skill>。默认超时 30 秒,最大 120 秒。--skill 标志形式由 runner CLI 规定,并由 L3 合约测试锁定。
  • 捕获 stdout / stderr,通过括号平衡回退(字符串感知)解析末尾的 JSON 块。
  • 应用失败关闭(fail-closed)防御:若 parsed === null 且 stdout 包含 Usage:,返回 reason: 'argv_format_mismatch';若 parsed === null 属于其他情况,返回 reason: 'parsed_null'。退出码为 0 绝不单独代表成功——必须存在解析后的 JSON。
  • 将结构化结果持久化到 .bkit/runtime/evals-{skill}-{ISO timestamp}.json,包含 stdout/stderr 尾部(各 2000 字符)、解析后的 payload 以及 reason 字段。
  • 在聊天中渲染一行摘要:退出码、解析后的通过/失败计数(若有)、持久化结果文件路径。

list

  • 读取 evals/config.json 以枚举技能分类。
  • 对每个分类(workflow、capability、hybrid),列出拥有 evals/{classification}/{skill}/eval.yaml 的技能。
  • 渲染按分类分组的表格,包含技能名以及来自 eval YAML 的一行说明(若存在 description 字段)。

若不提供参数,渲染与 list 相同的输出。

使用方式

命令形式:

  • /bkit-evals run gap-detector —— 执行单个评估
  • /bkit-evals list —— 发现可用评估

参数说明:

  • run <skill>:为单个技能执行评估套件,示例 /bkit-evals run gap-detector
  • list:列出所有拥有 eval.yaml 定义的技能,示例 /bkit-evals list

安全设计

  • 技能名正则防止参数注入。任何超出 [a-z][a-z0-9-]{0,63} 的输入会被拒绝,reason: invalid_skill_name。
  • 使用 argv 数组方式 spawn(无 shell),不将模板字符串拼接进命令行。
  • 结果文件路径由硬编码基址 + 净化后的技能名 + 时间戳组合,无法进行路径穿越。
  • 强制执行子进程超时(默认 30 秒,硬上限 120 秒),使有缺陷的评估无法无限期阻塞会话。

适用场景

  • 需要对单个技能运行质量评估并获取结构化结果时。
  • 需要列出所有具备评估定义的技能进行发现时。
  • 评估结果可贡献到信任评分(/control trust),并在 /code-review 评估技能时被使用。
  • /bkit explore(FR-β1)可将 evals 作为类别进行探索。

模块依赖

  • lib/evals/runner-wrapper.js 的 invokeEvals(skill, opts):校验 + spawn + 持久化
  • lib/evals/runner-wrapper.js 的 isValidSkillName(name):与 list 共享的正则预检查
  • evals/runner.js(子进程):现有评估执行引擎

结果 Schema

持久化文件 .bkit/runtime/evals-{skill}-{timestamp}.json 的字段包括:

  • skill:技能名,例如 "gap-detector"
  • invokedAt:ISO 8601 时间戳
  • exitCode:退出码
  • timedOut:是否超时
  • stdoutTail:stdout 尾部
  • stderrTail:stderr 尾部
  • parsed:runner.js 打印的 JSON 内容,或 null

限制

资料未提供关于收费、价格、支持平台、运行环境要求、并发能力或评估指标体系细节的信息,暂未提供。