skalpel 4.0.47 → 4.0.49

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skalpel",
3
- "version": "4.0.47",
3
+ "version": "4.0.49",
4
4
  "description": "Behavioral graph for AI-assisted coding — learns how you work and steers Claude Code + Codex in real time.",
5
5
  "type": "module",
6
6
  "bin": {
package/skalpel-setup.mjs CHANGED
@@ -66,6 +66,7 @@ const KNOWN_SUBS = new Set([
66
66
  "catches",
67
67
  "card",
68
68
  "ledger",
69
+ "eval",
69
70
  "analytics",
70
71
  "verify",
71
72
  "yes",
@@ -87,6 +88,7 @@ usage:
87
88
  skalpel catches scan your own history for "done" claims over failing tests
88
89
  skalpel card [--last|--id <id>] [--md] share one verified catch: the claim + its own failing proof
89
90
  skalpel ledger your running tally: N "done"s checked, M verified FALSE
91
+ skalpel eval [--variant <v>] [--json] offline replay of your history: lie frequency, measured cost, catch accuracy
90
92
  skalpel analytics interactive local analytics — caught lies, measured cost, steers, re-asks
91
93
  skalpel verify on|off|status arm/disarm the live catch (re-runs your own proof on a "done" claim)
92
94
  skalpel yes | skalpel no was the last catch right? (feeds precision; "no" stops that proof this session)
@@ -125,11 +127,12 @@ function validateArgv() {
125
127
  process.exit(0);
126
128
  }
127
129
  if (BOOL_FLAGS.has(a)) continue; // valueless flag (e.g. `uninstall --purge`)
128
- // `skalpel card` owns its own flags (--last / --id <id> / --md / --plain) and forwards them to
129
- // card.mjs. They are NOT setup options, so setup must not reject them as unknown pass any token
130
- // after the `card` subcommand straight through (card.mjs validates its own flags). Global -v/-h
131
- // above still win for a bare `skalpel -v`. Scoped to `card` so no other subcommand's contract shifts.
132
- if (i > 0 && argv[0] === "card") continue;
130
+ // `skalpel card` (--last / --id <id> / --md / --plain) and `skalpel eval` (--variant / --limit /
131
+ // --json / --home / --out) own their own flags and forward them to card.mjs / efficacy-eval.mjs.
132
+ // They are NOT setup options, so setup must not reject them as unknown — pass any token after those
133
+ // subcommands straight through (each module validates its own flags). Global -v/-h above still win
134
+ // for a bare `skalpel -v`. Scoped so no other subcommand's contract shifts.
135
+ if (i > 0 && (argv[0] === "card" || argv[0] === "eval")) continue;
133
136
  if (a.startsWith("-")) {
134
137
  console.error(`skalpel: unknown option \`${a}\`\n\n${USAGE}`);
135
138
  process.exit(2);
@@ -993,6 +996,17 @@ async function main() {
993
996
  spawnSync("node", [join(__dir, "ledger.mjs"), ...argv.slice(1)], { stdio: "inherit" });
994
997
  return;
995
998
  }
999
+ // `skalpel eval` — THE EFFICACY EVAL: a LOCAL, READ-ONLY, ZERO-NETWORK offline REPLAY of the user's own
1000
+ // Claude Code + Codex history that measures whether the "agent lies about done" fire is real FOR THEM and
1001
+ // how much it costs — lie frequency (confirmed-lie vs true-done vs unverifiable), MEASURED red→green cost
1002
+ // (real timestamps only, never estimated), and catch accuracy (raw-flag → surfaced vs harness-suppressed,
1003
+ // precision + relative recall) with a pluggable catch-config `--variant` so a stricter gate replays in
1004
+ // seconds. Reuses the SAME detectors as the live catch (no divergent claim logic); never re-runs a proof,
1005
+ // never touches the network, never fabricates a number; writes nothing unless the user asks with `--out`.
1006
+ if (sub === "eval") {
1007
+ spawnSync("node", [join(__dir, "efficacy-eval.mjs"), ...argv.slice(1)], { stdio: "inherit" });
1008
+ return;
1009
+ }
996
1010
  // `skalpel analytics` — INTERACTIVE LOCAL ANALYTICS: a keyboard-navigable, READ-ONLY terminal view
997
1011
  // derived from the same honest local data as `skalpel ledger` (verify-shadow.log + steers.ndjson +
998
1012
  // insights.ndjson). Zero network, zero writes, zero estimates. Degrades to a plain static snapshot