@skill-harness/cli 0.21.0 → 0.22.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +11 -4
  2. package/package.json +3 -3
package/dist/cli.js CHANGED
@@ -44,7 +44,7 @@ function parseArgs(argv) {
44
44
  function assertNoRetiredFlags(command, args) {
45
45
  const retired = command === "run"
46
46
  ? ["affected"]
47
- : command === "grade"
47
+ : command === "grade" || command === "regrade"
48
48
  ? ["auto-rejudge", "secondary-judge", "tie-break-judge"]
49
49
  : [];
50
50
  const found = retired.find((flag) => Object.hasOwn(args.flags, flag));
@@ -253,7 +253,7 @@ export async function cmdRun(args, adapterOverride) {
253
253
  export async function cmdGrade(args, adapterOverride) {
254
254
  const runDir = args._[0];
255
255
  if (!runDir)
256
- throw new Error("usage: skill-harness grade <run-dir> [--judge prov:model] [--suspect-only]");
256
+ throw new Error("usage: skill-harness grade <run-dir> [--judge prov:model] [--suspect-only | --unparsed-only]");
257
257
  if (!existsSync(runDir)) {
258
258
  throw new Error(`run dir not found: ${resolve(runDir)} (relative paths resolve against the cwd)`);
259
259
  }
@@ -266,8 +266,13 @@ export async function cmdGrade(args, adapterOverride) {
266
266
  // an explicit --judge flag still wins; absent or retired recorded judges use
267
267
  // the current Pi default.
268
268
  const judgeFlag = flagStr(args, "judge");
269
+ const onlyUnparsed = flagBool(args, "unparsed-only");
270
+ if (onlyUnparsed && judgeFlag !== undefined)
271
+ throw new Error("--unparsed-only uses the recorded judge; --judge cannot be combined with it");
269
272
  const resolvedRecordedJudge = judgeFlag ? undefined : recordedJudgeOrDefault(prev?.judge);
270
273
  const judge = judgeFlag ? parseModelRef(judgeFlag) : resolvedRecordedJudge.judge;
274
+ if (onlyUnparsed && resolvedRecordedJudge?.migratedFrom)
275
+ throw new Error("--unparsed-only cannot use this retired recorded judge; use grade to migrate it explicitly");
271
276
  if (resolvedRecordedJudge?.migratedFrom) {
272
277
  console.error(`skill-harness: recorded judge ${resolvedRecordedJudge.migratedFrom.provider}:${resolvedRecordedJudge.migratedFrom.model} was removed; re-judging through Pi with ${judge.provider}:${judge.model}`);
273
278
  }
@@ -287,7 +292,7 @@ export async function cmdGrade(args, adapterOverride) {
287
292
  console.error(stale);
288
293
  const results = await regradeRun({
289
294
  runDir, spec, adapter, judge, specDir: testsDir, now: nowIso,
290
- onlySuspect: flagBool(args, "suspect-only"),
295
+ onlySuspect: flagBool(args, "suspect-only"), onlyUnparsed,
291
296
  });
292
297
  for (const s of results.scenarios) {
293
298
  console.log(` ${s.id} → ${s.judge_verdict}: ${s.judge_reason}`);
@@ -731,6 +736,7 @@ export function help() {
731
736
  [--arm <name>] measure under a named arm from <skills-root>/tests/arms.yaml
732
737
  (loads its extensions, seeds pi-daddy definitions, tags the run dir)
733
738
  grade <run-dir> [--judge prov:model] [--suspect-only] re-grade saved transcripts (neutral judge)
739
+ regrade <run-dir> --unparsed-only re-judge ERROR criterion reps with recorded judge
734
740
  rescore <run-dir>... re-score saved reps vs current spec thresholds (${free("rescore")})
735
741
  regate <run-dir>... [--judge prov:model] re-evaluate saved gates (no subject call; judges fail→pass reps)
736
742
  restamp <skill|all> --skills <root> [--from <git-ref>] record the model-visible skill digest on runs that still match (${free("restamp")}; one-time migration)
@@ -761,7 +767,8 @@ export async function main(argv) {
761
767
  assertNoRetiredFlags(cmd, args);
762
768
  switch (cmd) {
763
769
  case "run": return cmdRun(args);
764
- case "grade": return cmdGrade(args);
770
+ case "grade":
771
+ case "regrade": return cmdGrade(args);
765
772
  case "rescore": return cmdRescore(args);
766
773
  case "regate": return cmdRegate(args);
767
774
  case "restamp": return cmdRestamp(args);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skill-harness/cli",
3
- "version": "0.21.0",
3
+ "version": "0.22.3",
4
4
  "description": "skill-harness CLI — run, grade, review, and lint agent-skill scenarios on the pi harness",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -44,7 +44,7 @@
44
44
  "prepack": "node ../../scripts/release-pack.mjs --guard"
45
45
  },
46
46
  "dependencies": {
47
- "@skill-harness/core": "0.21.0",
48
- "@skill-harness/adapters": "0.21.0"
47
+ "@skill-harness/core": "0.22.3",
48
+ "@skill-harness/adapters": "0.22.3"
49
49
  }
50
50
  }