lastlight-evals 0.1.0

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 (41) hide show
  1. package/README.md +187 -0
  2. package/datasets/code-fix/instances.json +26 -0
  3. package/datasets/code-fix/repos/codefix__date-range-off-by-one/README.md +8 -0
  4. package/datasets/code-fix/repos/codefix__date-range-off-by-one/package.json +9 -0
  5. package/datasets/code-fix/repos/codefix__date-range-off-by-one/src/date-range.ts +25 -0
  6. package/datasets/code-fix/tests/codefix__date-range-off-by-one/date-range.test.ts +18 -0
  7. package/datasets/code-fix/tier.json +5 -0
  8. package/datasets/triage/instances.json +62 -0
  9. package/datasets/triage/tier.json +5 -0
  10. package/dist/bootstrap.js +46 -0
  11. package/dist/bootstrap.js.map +1 -0
  12. package/dist/discovery.js +100 -0
  13. package/dist/discovery.js.map +1 -0
  14. package/dist/env.js +109 -0
  15. package/dist/env.js.map +1 -0
  16. package/dist/fake-github.js +249 -0
  17. package/dist/fake-github.js.map +1 -0
  18. package/dist/grade.js +134 -0
  19. package/dist/grade.js.map +1 -0
  20. package/dist/html-report.js +325 -0
  21. package/dist/html-report.js.map +1 -0
  22. package/dist/init.js +122 -0
  23. package/dist/init.js.map +1 -0
  24. package/dist/mechanism.test.js +108 -0
  25. package/dist/mechanism.test.js.map +1 -0
  26. package/dist/metrics.js +86 -0
  27. package/dist/metrics.js.map +1 -0
  28. package/dist/paths.js +33 -0
  29. package/dist/paths.js.map +1 -0
  30. package/dist/report.js +137 -0
  31. package/dist/report.js.map +1 -0
  32. package/dist/run-instance.js +203 -0
  33. package/dist/run-instance.js.map +1 -0
  34. package/dist/run.js +476 -0
  35. package/dist/run.js.map +1 -0
  36. package/dist/schema.js +15 -0
  37. package/dist/schema.js.map +1 -0
  38. package/dist/seed.js +49 -0
  39. package/dist/seed.js.map +1 -0
  40. package/models.json +17 -0
  41. package/package.json +50 -0
package/dist/run.js ADDED
@@ -0,0 +1,476 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Eval runner (a measurement, not a test).
4
+ *
5
+ * Drives the REAL production workflows (issue-triage / build / …) against a
6
+ * fake GitHub for each model under test, grades deterministically, and prints
7
+ * a model-comparison scorecard + writes SWE-bench-compatible artifacts. It
8
+ * exits non-zero only if the HARNESS itself errors — never because a model
9
+ * scored poorly (that's the signal we're measuring).
10
+ *
11
+ * Run:
12
+ * npm run eval # triage tier, default model
13
+ * npm run eval -- code-fix # code-fix tier
14
+ * npm run eval -- triage code-fix # both
15
+ * EVAL_MODELS="openai/gpt-5.5,openai/gpt-5.4-mini" npm run eval
16
+ *
17
+ * The deterministic, AI-free plumbing is covered separately by
18
+ * `evals/mechanism.test.ts` in the normal `npm test` suite.
19
+ */
20
+ import { existsSync } from "node:fs";
21
+ import { join } from "node:path";
22
+ import { spawn } from "node:child_process";
23
+ import * as p from "@clack/prompts";
24
+ import chalk from "chalk";
25
+ import { loadDotEnv, hasProviderKey, evalModels, compareModels, modelLabels, resolveModel, setModelsPath } from "./env.js";
26
+ import { runInstance, applyEvalEnv } from "./run-instance.js";
27
+ import { summarize, writeArtifacts, aggregateTrials } from "./report.js";
28
+ import { writeHtml } from "./html-report.js";
29
+ import { bootstrapAssets } from "./bootstrap.js";
30
+ import { discoverTiers, loadInstances, workflowFor } from "./discovery.js";
31
+ import { builtinDatasetsRoot, resultsRoot } from "./paths.js";
32
+ import { runInit } from "./init.js";
33
+ /** Open a file in the OS default browser (best-effort, never throws). */
34
+ function openInBrowser(file) {
35
+ const url = `file://${file}`;
36
+ const [cmd, args] = process.platform === "darwin"
37
+ ? ["open", [url]]
38
+ : process.platform === "win32"
39
+ ? ["cmd", ["/c", "start", "", url]]
40
+ : ["xdg-open", [url]];
41
+ try {
42
+ spawn(cmd, args, { detached: true, stdio: "ignore" }).unref();
43
+ }
44
+ catch {
45
+ /* headless / no browser — the path is printed anyway */
46
+ }
47
+ }
48
+ /**
49
+ * Run `fn` with `console.*` captured into a buffer so the deep workflow chatter
50
+ * (`[executor] …`, octokit deprecation warnings) doesn't shred the clack
51
+ * spinner — which writes via `process.stdout.write`, a different channel. The
52
+ * captured logs are returned so we can replay them only when a run errors.
53
+ */
54
+ async function quiet(fn) {
55
+ const buf = [];
56
+ const cap = (orig) => (...a) => {
57
+ buf.push(a.map((x) => (typeof x === "string" ? x : String(x))).join(" "));
58
+ void orig;
59
+ };
60
+ const { log, warn, error, info } = console;
61
+ console.log = cap(log);
62
+ console.warn = cap(warn);
63
+ console.error = cap(error);
64
+ console.info = cap(info);
65
+ try {
66
+ return { value: await fn(), logs: buf.join("\n") };
67
+ }
68
+ finally {
69
+ Object.assign(console, { log, warn, error, info });
70
+ }
71
+ }
72
+ function fmtMs(ms) {
73
+ if (!ms)
74
+ return "—";
75
+ if (ms < 1000)
76
+ return `${ms}ms`;
77
+ const s = Math.round(ms / 1000);
78
+ return s < 60 ? `${s}s` : `${Math.floor(s / 60)}m${String(s % 60).padStart(2, "0")}`;
79
+ }
80
+ /** Friendly provider-family name from an env-key (OPENAI_API_KEY → "openai"). */
81
+ function familyLabel(envKey) {
82
+ return envKey.replace(/_API_KEY$/i, "").toLowerCase() || "default";
83
+ }
84
+ /**
85
+ * Silence `console.*` for the whole batch (parallel mode). The per-run
86
+ * `quiet()` swap saves/restores console and would corrupt under concurrent
87
+ * runs (nested swaps), so parallel mode drops console output once instead.
88
+ * The clack spinner is untouched — it writes via `process.stdout.write`.
89
+ */
90
+ function silenceConsole() {
91
+ const { log, warn, error, info } = console;
92
+ const sink = () => { };
93
+ Object.assign(console, { log: sink, warn: sink, error: sink, info: sink });
94
+ return () => Object.assign(console, { log, warn, error, info });
95
+ }
96
+ /** Colored one-line verdict for a finished run (with N/N pass count if N>1). */
97
+ function verdictLine(tierName, inst, r) {
98
+ const head = `${chalk.cyan(tierName)}/${inst.instance_id}`;
99
+ if (r.error)
100
+ return `${head} ${chalk.red("harness error")}`;
101
+ const count = (pass) => (pass !== undefined && r.trials ? chalk.dim(` ${pass}/${r.trials}`) : "");
102
+ const parts = [];
103
+ if (r.resolved !== undefined)
104
+ parts.push((r.resolved ? chalk.green("resolved") : chalk.red("unresolved")) + count(r.resolvedPass));
105
+ if (r.behavioral)
106
+ parts.push((r.behavioral.ok ? chalk.green("behavioral ✓") : chalk.red("behavioral ✗")) + count(r.behavioralPass));
107
+ parts.push(chalk.dim(`$${r.costUsd.toFixed(4)}`));
108
+ parts.push(chalk.dim(fmtMs(r.durationMs)));
109
+ return `${head} ${parts.join(" ")}`;
110
+ }
111
+ /** Parse an integer CLI flag (`--name N` or `--name=N`) or `EVAL_NAME` env. */
112
+ function intFlag(name, def) {
113
+ const argv = process.argv;
114
+ for (let i = 0; i < argv.length; i++) {
115
+ if (argv[i] === `--${name}`) {
116
+ const n = parseInt(argv[i + 1] ?? "", 10);
117
+ if (n > 0)
118
+ return n;
119
+ }
120
+ const m = argv[i].match(new RegExp(`^--${name}=(\\d+)$`));
121
+ if (m)
122
+ return parseInt(m[1], 10);
123
+ }
124
+ const env = parseInt(process.env[`EVAL_${name.toUpperCase()}`] ?? "", 10);
125
+ return env > 0 ? env : def;
126
+ }
127
+ /** Parse a string CLI flag (`--name V` or `--name=V`) or `EVAL_NAME` env. */
128
+ function strFlag(name) {
129
+ const argv = process.argv;
130
+ for (let i = 0; i < argv.length; i++) {
131
+ if (argv[i] === `--${name}` && argv[i + 1] !== undefined)
132
+ return argv[i + 1];
133
+ const m = argv[i].match(new RegExp(`^--${name}=(.+)$`));
134
+ if (m)
135
+ return m[1];
136
+ }
137
+ return process.env[`EVAL_${name.toUpperCase()}`];
138
+ }
139
+ /** CLI flags that take a following value (so it isn't read as a tier name). */
140
+ const VALUE_FLAGS = new Set(["--runs", "--model", "--models", "--overlay", "--datasets", "--models-file"]);
141
+ async function runEval() {
142
+ loadDotEnv();
143
+ p.intro(chalk.bold(`Last Light ${chalk.yellow("·")} eval`));
144
+ // Asset roots FIRST — before any getWorkflow/runWorkflow. `--overlay` (or
145
+ // LASTLIGHT_OVERLAY_DIR) layers a deployment's own workflows/skills over the
146
+ // built-ins, and also contributes its `evals/datasets/` (see discovery).
147
+ const overlayDir = strFlag("overlay") ?? process.env.LASTLIGHT_OVERLAY_DIR;
148
+ bootstrapAssets({ overlayDir });
149
+ // A user/overlay can ship its own model registry too: explicit --models-file
150
+ // wins, else an overlay's `evals/models.json` if present, else the built-in.
151
+ const overlayModels = overlayDir ? join(overlayDir, "evals", "models.json") : undefined;
152
+ const modelsFile = strFlag("models-file") ?? (overlayModels && existsSync(overlayModels) ? overlayModels : undefined);
153
+ if (modelsFile)
154
+ setModelsPath(modelsFile);
155
+ // Discover tiers across built-in + user (--datasets) + overlay roots.
156
+ const userDatasetsDir = strFlag("datasets") ?? process.env.LASTLIGHT_EVALS_DATASETS;
157
+ const discovered = discoverTiers({
158
+ builtinRoot: builtinDatasetsRoot(),
159
+ userDatasetsDir,
160
+ overlayDir,
161
+ });
162
+ if (!hasProviderKey()) {
163
+ p.log.error("No provider key found. Set OPENAI_API_KEY (or ANTHROPIC_API_KEY / OPENROUTER_API_KEY)\n" +
164
+ "in your environment or .env, then re-run `npm run eval`.");
165
+ p.outro(chalk.red("aborted"));
166
+ return 1;
167
+ }
168
+ const compare = process.argv.includes("--compare");
169
+ const noOpen = process.argv.includes("--no-open") || !!process.env.CI;
170
+ const runs = intFlag("runs", 1);
171
+ // Positional tier names — skip flags AND the values that follow value-flags.
172
+ const argv = process.argv.slice(2);
173
+ const requested = [];
174
+ for (let i = 0; i < argv.length; i++) {
175
+ if (VALUE_FLAGS.has(argv[i])) {
176
+ i++; // its value isn't a tier
177
+ continue;
178
+ }
179
+ if (!argv[i].startsWith("-"))
180
+ requested.push(argv[i]);
181
+ }
182
+ const known = [...discovered.keys()];
183
+ if (!known.length) {
184
+ p.log.error("No datasets found. The package ships `triage`/`code-fix`; add your own via\n" +
185
+ "--datasets <dir> (or LASTLIGHT_EVALS_DATASETS), or --overlay <repo> with an\n" +
186
+ "`evals/datasets/` folder.");
187
+ p.outro(chalk.red("aborted"));
188
+ return 1;
189
+ }
190
+ const defaultTier = known.includes("triage") ? "triage" : known[0];
191
+ // Tiers come from argv when given; otherwise ask interactively (one or all).
192
+ // Non-interactive (CI / piped stdin) falls back to the cheapest default
193
+ // so automation never blocks on a prompt.
194
+ let chosen;
195
+ if (requested.length) {
196
+ chosen = requested;
197
+ }
198
+ else if (process.stdin.isTTY) {
199
+ const picked = await p.multiselect({
200
+ message: "Which tiers to run?",
201
+ options: known.map((name) => ({
202
+ value: name,
203
+ label: name + (discovered.get(name).source !== "builtin" ? chalk.dim(` (${discovered.get(name).source})`) : ""),
204
+ hint: discovered.get(name).description,
205
+ })),
206
+ initialValues: [defaultTier],
207
+ required: true,
208
+ });
209
+ if (p.isCancel(picked)) {
210
+ p.cancel("aborted");
211
+ return 1;
212
+ }
213
+ chosen = picked;
214
+ }
215
+ else {
216
+ chosen = [defaultTier];
217
+ }
218
+ // Stable display order (discovery order) regardless of pick order.
219
+ const tiers = known.filter((t) => chosen.includes(t));
220
+ for (const t of chosen) {
221
+ if (!discovered.has(t))
222
+ p.log.warn(`Unknown tier "${t}". Known: ${known.join(", ")}`);
223
+ }
224
+ // Model selection precedence:
225
+ // 1. --model / --models (or EVAL_MODEL[S]) — an explicit list, fuzzy-matched
226
+ // against models.json; lets you test one model quickly.
227
+ // 2. --compare — the full cross-vendor set (key-gated).
228
+ // 3. default single model from models.json.
229
+ // Each entry carries its provider family (env-key) for parallel grouping.
230
+ const modelArg = strFlag("model") ?? strFlag("models");
231
+ const mode = modelArg ? "select" : compare ? "compare" : "single";
232
+ const entries = modelArg
233
+ ? modelArg
234
+ .split(",")
235
+ .map((s) => s.trim())
236
+ .filter(Boolean)
237
+ .map((tok) => {
238
+ const r = resolveModel(tok);
239
+ return { id: r.id, family: r.family };
240
+ })
241
+ : compare
242
+ ? compareModels().map((m) => ({ id: m.id, family: m.envKey ?? m.provider ?? "default" }))
243
+ : evalModels().map((id) => ({ id, family: "default" }));
244
+ if (!entries.length) {
245
+ p.log.error("No comparison models available — set provider keys (OPENAI_API_KEY / ANTHROPIC_API_KEY /\n" +
246
+ "FIREWORKS_API_KEY …) for the entries in evals/models.json.");
247
+ p.outro(chalk.red("aborted"));
248
+ return 1;
249
+ }
250
+ const labels = modelLabels();
251
+ // Resolve the work-list up front so we can show deterministic progress.
252
+ const work = [];
253
+ for (const tierName of tiers) {
254
+ const tier = discovered.get(tierName);
255
+ const instances = loadInstances(tier);
256
+ if (!instances.length) {
257
+ p.log.warn(`tier "${tierName}": no instances at ${tier.instancesPath} — skipping`);
258
+ continue;
259
+ }
260
+ for (const e of entries) {
261
+ for (const inst of instances) {
262
+ // Per-instance workflow wins, else the tier's defaultWorkflow (throws if
263
+ // neither is set — surfaced as a harness error for that case).
264
+ work.push({
265
+ tierName,
266
+ defaultWorkflow: workflowFor(tier, inst),
267
+ datasetDir: tier.root,
268
+ model: e.id,
269
+ family: e.family,
270
+ inst,
271
+ });
272
+ }
273
+ }
274
+ }
275
+ if (!work.length) {
276
+ p.log.error("Nothing to run — no datasets matched the requested tiers.");
277
+ p.outro(chalk.red("aborted"));
278
+ return 1;
279
+ }
280
+ // Group work by provider family. Families run CONCURRENTLY (independent
281
+ // provider keys / rate limits); within a family runs stay serial. Force
282
+ // serial with --serial or when there's only one family.
283
+ const byFamily = new Map();
284
+ for (const w of work) {
285
+ const arr = byFamily.get(w.family);
286
+ if (arr)
287
+ arr.push(w);
288
+ else
289
+ byFamily.set(w.family, [w]);
290
+ }
291
+ const parallel = !process.argv.includes("--serial") && byFamily.size > 1;
292
+ const resultsDir = join(resultsRoot(), `${tiers.join("+")}${compare ? "-compare" : ""}`);
293
+ const htmlBase = {
294
+ models: entries.map((e) => labels[e.id] ?? e.id),
295
+ tiers,
296
+ labels,
297
+ runs,
298
+ };
299
+ p.note(`${chalk.bold("mode")} ${mode}${parallel ? chalk.dim(` (parallel · ${byFamily.size} families)`) : ""}\n` +
300
+ `${chalk.bold("models")} ${entries.map((e) => labels[e.id] ?? e.id).join(", ")}\n` +
301
+ `${chalk.bold("tiers")} ${tiers.join(", ")}\n` +
302
+ `${chalk.bold("cases")} ${work.length}${runs > 1
303
+ ? chalk.dim(` × ${runs} trials = ${work.length * runs} runs · worst-case verdict, mean cost`)
304
+ : ""}`, "plan");
305
+ // `total` counts individual trials so live progress advances per model call.
306
+ const total = work.length * runs;
307
+ // Open the report immediately (live placeholder) so it fills in as we go.
308
+ writeHtml(resultsDir, summarize([]), { ...htmlBase, generatedAt: new Date().toISOString(), live: true, progress: `0/${total}` });
309
+ const htmlFile = join(resultsDir, "index.html");
310
+ if (!noOpen) {
311
+ openInBrowser(htmlFile);
312
+ p.log.info(`Live report → ${chalk.cyan(htmlFile)} ${chalk.dim("(auto-refreshing)")}`);
313
+ }
314
+ const all = [];
315
+ let harnessErrors = 0;
316
+ let completed = 0;
317
+ // Track in-flight cases so the live report can show running / queued rows.
318
+ const caseKey = (tier, model, id) => `${tier}|${model}|${id}`;
319
+ const running = new Set();
320
+ // writeHtml/summarize/all.push run synchronously to completion inside one
321
+ // event-loop turn, so even with concurrent families they never interleave.
322
+ const refresh = () => {
323
+ const done = new Set(all.map((r) => caseKey(r.tier ?? "", r.model, r.instance_id)));
324
+ const pending = work
325
+ .map((w) => ({ w, k: caseKey(w.tierName, w.model, w.inst.instance_id) }))
326
+ .filter(({ k }) => !done.has(k))
327
+ .map(({ w, k }) => ({
328
+ tier: w.tierName,
329
+ model: w.model,
330
+ instance_id: w.inst.instance_id,
331
+ status: (running.has(k) ? "running" : "pending"),
332
+ }));
333
+ writeHtml(resultsDir, summarize(all), {
334
+ ...htmlBase,
335
+ generatedAt: new Date().toISOString(),
336
+ live: true,
337
+ progress: `${completed}/${total}`,
338
+ pending,
339
+ });
340
+ };
341
+ // Run one case `runs` times and fold the trials into a single result
342
+ // (worst-case verdict, mean metrics). `onTrial` ticks per model call.
343
+ const runItem = async (w, onTrial) => {
344
+ const trials = [];
345
+ for (let t = 0; t < runs; t++) {
346
+ const r = await runInstance(w.inst, {
347
+ model: w.model,
348
+ datasetDir: w.datasetDir,
349
+ defaultWorkflow: w.defaultWorkflow,
350
+ manageEnv: false,
351
+ });
352
+ r.tier = w.tierName;
353
+ trials.push(r);
354
+ completed++;
355
+ onTrial();
356
+ }
357
+ return aggregateTrials(trials);
358
+ };
359
+ // Install the eval's static-token env ONCE for the whole batch so concurrent
360
+ // runs share one stable baseline (manageEnv:false on every runInstance).
361
+ const restoreEvalEnv = applyEvalEnv();
362
+ try {
363
+ if (parallel) {
364
+ // Per-family progress for the aggregate spinner line.
365
+ const fam = new Map();
366
+ for (const [f, items] of byFamily)
367
+ fam.set(f, { done: 0, total: items.length * runs });
368
+ const status = () => {
369
+ const segs = [...fam].map(([f, c]) => {
370
+ const done = c.done === c.total ? chalk.green(`${c.done}/${c.total}`) : `${c.done}/${c.total}`;
371
+ return `${familyLabel(f)} ${done}`;
372
+ });
373
+ return `${chalk.dim(`${completed}/${total}`)} ${segs.join(chalk.dim(" · "))}`;
374
+ };
375
+ const s = p.spinner();
376
+ s.start(status());
377
+ const restoreConsole = silenceConsole();
378
+ const verdicts = [];
379
+ try {
380
+ await Promise.all([...byFamily].map(async ([f, items]) => {
381
+ for (const w of items) {
382
+ const k = caseKey(w.tierName, w.model, w.inst.instance_id);
383
+ running.add(k);
384
+ refresh();
385
+ const result = await runItem(w, () => {
386
+ fam.get(f).done++;
387
+ s.message(status());
388
+ refresh();
389
+ });
390
+ running.delete(k);
391
+ all.push(result);
392
+ if (result.error)
393
+ harnessErrors++;
394
+ const mark = result.error ? chalk.red("✗") : chalk.green("✓");
395
+ verdicts.push(`${mark} ${chalk.dim(familyLabel(f))} ${verdictLine(w.tierName, w.inst, result)}`);
396
+ refresh();
397
+ }
398
+ }));
399
+ }
400
+ finally {
401
+ restoreConsole();
402
+ }
403
+ s.stop(`${chalk.dim(`${completed}/${total}`)} ${chalk.green("done")}`);
404
+ p.log.message(verdicts.join("\n"));
405
+ }
406
+ else {
407
+ // Serial: one spinner per case (updates per trial) + a verdict line.
408
+ for (let i = 0; i < work.length; i++) {
409
+ const w = work[i];
410
+ const s = p.spinner();
411
+ const head = `${chalk.dim(`[${i + 1}/${work.length}]`)} ${chalk.cyan(w.tierName)}/${w.inst.instance_id} ${chalk.dim(labels[w.model] ?? w.model)}`;
412
+ s.start(head);
413
+ const k = caseKey(w.tierName, w.model, w.inst.instance_id);
414
+ running.add(k);
415
+ refresh();
416
+ let t = 0;
417
+ const { value: result, logs } = await quiet(() => runItem(w, () => {
418
+ t++;
419
+ if (runs > 1)
420
+ s.message(`${head} ${chalk.dim(`trial ${t}/${runs}`)}`);
421
+ refresh();
422
+ }));
423
+ running.delete(k);
424
+ all.push(result);
425
+ if (result.error)
426
+ harnessErrors++;
427
+ const mark = result.error ? chalk.red("✗") : chalk.green("✓");
428
+ s.stop(`${chalk.dim(`[${i + 1}/${work.length}]`)} ${mark} ${verdictLine(w.tierName, w.inst, result)}`);
429
+ if (result.error) {
430
+ p.log.error(chalk.dim(result.error));
431
+ const tail = logs.split("\n").filter(Boolean).slice(-12).join("\n");
432
+ if (tail)
433
+ p.log.message(chalk.dim(tail));
434
+ }
435
+ refresh();
436
+ }
437
+ }
438
+ }
439
+ finally {
440
+ restoreEvalEnv();
441
+ }
442
+ // Final, static report + machine artifacts.
443
+ const card = summarize(all);
444
+ writeArtifacts(resultsDir, card);
445
+ const html = writeHtml(resultsDir, card, { ...htmlBase, generatedAt: new Date().toISOString() });
446
+ p.log.success(`Scorecard → ${chalk.cyan(html)}`);
447
+ p.log.success(`Artifacts → ${chalk.cyan(resultsDir)}/{scorecard.json,predictions.jsonl}`);
448
+ const ran = runs > 1 ? `${completed} runs (${all.length} cases × ${runs})` : `${all.length} runs`;
449
+ if (harnessErrors > 0) {
450
+ p.outro(chalk.yellow(`done — ${ran}, ${harnessErrors} harness error${harnessErrors === 1 ? "" : "s"} (see above)`));
451
+ }
452
+ else {
453
+ p.outro(chalk.green(`done — ${ran}, report at ${html}`));
454
+ }
455
+ // Non-zero ONLY on harness failure — model quality is the measurement.
456
+ return harnessErrors > 0 ? 1 : 0;
457
+ }
458
+ /** Top-level subcommand dispatcher: `run` (default) | `init`. */
459
+ async function main() {
460
+ const sub = process.argv[2];
461
+ if (sub === "init") {
462
+ // `init [dir]` — scaffold a fresh overlay+evals repo.
463
+ return runInit(process.argv[3]);
464
+ }
465
+ // `run` is the default; allow an explicit leading `run` token too.
466
+ if (sub === "run")
467
+ process.argv.splice(2, 1);
468
+ return runEval();
469
+ }
470
+ main()
471
+ .then((code) => process.exit(code))
472
+ .catch((err) => {
473
+ console.error(err);
474
+ process.exit(1);
475
+ });
476
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
package/dist/schema.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Eval data model — SWE-bench-compatible.
3
+ *
4
+ * A benchmark case is a {@link SweBenchInstance}. The core fields mirror the
5
+ * SWE-bench / SWE-bench Lite dataset schema field-for-field (`instance_id`,
6
+ * `base_commit`, `problem_statement`, gold `patch`, held-out `test_patch`,
7
+ * `FAIL_TO_PASS`, `PASS_TO_PASS`), so a case is interchangeable with a real
8
+ * SWE-bench row and our results export to SWE-bench's predictions format.
9
+ *
10
+ * The `Last Light extensions` block (ignored by real SWE-bench) carries the
11
+ * GitHub fixtures + behavioral expectations that let us drive — and grade —
12
+ * the REAL production workflow with a mocked GitHub.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
package/dist/seed.js ADDED
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Deterministic workspace seeding for the code-fix tier.
3
+ *
4
+ * Pre-populates the run's sandbox workspace (`<stateDir>/sandboxes/<taskId>`,
5
+ * the exact dir `setupTaskWorktree` would create) with a fixture repo checked
6
+ * out at a fixed base commit, and points its `origin` at a LOCAL bare repo —
7
+ * so the real workflow's `git push origin HEAD` succeeds fully offline with NO
8
+ * GitHub clone. Because the eval calls `runWorkflow` with no
9
+ * `ctx.prePopulateBranch`, the runner never triggers its own GitHub clone and
10
+ * the agent works directly in this seeded dir.
11
+ */
12
+ import { execFileSync } from "node:child_process";
13
+ import { mkdirSync, cpSync } from "node:fs";
14
+ import { resolve } from "node:path";
15
+ const FIXED = "2026-01-01T00:00:00 +0000";
16
+ const GIT_ENV = {
17
+ ...process.env,
18
+ GIT_AUTHOR_NAME: "eval",
19
+ GIT_AUTHOR_EMAIL: "eval@example.com",
20
+ GIT_COMMITTER_NAME: "eval",
21
+ GIT_COMMITTER_EMAIL: "eval@example.com",
22
+ GIT_AUTHOR_DATE: FIXED,
23
+ GIT_COMMITTER_DATE: FIXED,
24
+ };
25
+ function git(cwd, args) {
26
+ return execFileSync("git", args, { cwd, env: GIT_ENV, stdio: ["ignore", "pipe", "pipe"] }).toString();
27
+ }
28
+ export function seedWorkspace(opts) {
29
+ const def = opts.defaultBranch ?? "main";
30
+ const sandboxBase = resolve(opts.stateDir, "sandboxes");
31
+ const workDir = resolve(sandboxBase, opts.taskId);
32
+ mkdirSync(workDir, { recursive: true });
33
+ cpSync(opts.fixtureDir, workDir, { recursive: true });
34
+ git(workDir, ["init", "-q", "-b", def]);
35
+ git(workDir, ["add", "-A"]);
36
+ git(workDir, ["commit", "-q", "-m", "base"]);
37
+ const baseCommit = git(workDir, ["rev-parse", "HEAD"]).trim();
38
+ const originsDir = resolve(opts.stateDir, "origins");
39
+ mkdirSync(originsDir, { recursive: true });
40
+ const originDir = resolve(originsDir, `${opts.taskId}.git`);
41
+ git(workDir, ["init", "--bare", "-q", originDir]);
42
+ git(workDir, ["remote", "add", "origin", `file://${originDir}`]);
43
+ git(workDir, ["push", "-q", "origin", `HEAD:refs/heads/${def}`]);
44
+ const branch = opts.branch ?? def;
45
+ if (branch !== def)
46
+ git(workDir, ["checkout", "-q", "-b", branch]);
47
+ return { workDir, originDir, baseCommit, branch };
48
+ }
49
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,KAAK,GAAG,2BAA2B,CAAC;AAC1C,MAAM,OAAO,GAAsB;IACjC,GAAG,OAAO,CAAC,GAAG;IACd,eAAe,EAAE,MAAM;IACvB,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,MAAM;IAC1B,mBAAmB,EAAE,kBAAkB;IACvC,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;CAC1B,CAAC;AAEF,SAAS,GAAG,CAAC,GAAW,EAAE,IAAc;IACtC,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxG,CAAC;AASD,MAAM,UAAU,aAAa,CAAC,IAQ7B;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACxC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE9D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;IAC5D,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAClD,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC;IACjE,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAClC,IAAI,MAAM,KAAK,GAAG;QAAE,GAAG,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAEnE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACpD,CAAC"}
package/models.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "_comment": "Models for the eval harness. `default` is what `npm run eval` uses (single model). `compare` is the cross-vendor set `npm run eval:compare` runs — each entry only runs if its `envKey` is present in the environment, so add/remove freely. `id` is the agentic-pi/pi-ai 'provider/model' spec; `label` is the display name on the scorecard.",
3
+ "default": "openai/gpt-5.4-mini",
4
+ "compare": [
5
+ { "id": "openai/gpt-5.5", "label": "GPT-5.5", "provider": "OpenAI", "envKey": "OPENAI_API_KEY" },
6
+ { "id": "openai/gpt-5.4-mini", "label": "GPT-5.4 mini", "provider": "OpenAI", "envKey": "OPENAI_API_KEY" },
7
+ { "id": "openai/gpt-5.3-codex", "label": "GPT-5.3 Codex", "provider": "OpenAI", "envKey": "OPENAI_API_KEY" },
8
+
9
+ { "id": "anthropic/claude-opus-4-8", "label": "Claude Opus 4.8", "provider": "Anthropic", "envKey": "ANTHROPIC_API_KEY" },
10
+ { "id": "anthropic/claude-sonnet-4-6", "label": "Claude Sonnet 4.6", "provider": "Anthropic", "envKey": "ANTHROPIC_API_KEY" },
11
+ { "id": "anthropic/claude-haiku-4-5", "label": "Claude Haiku 4.5", "provider": "Anthropic", "envKey": "ANTHROPIC_API_KEY" },
12
+
13
+ { "id": "fireworks/accounts/fireworks/models/glm-5p2", "label": "GLM-5.2", "provider": "Fireworks (open)", "envKey": "FIREWORKS_API_KEY" },
14
+ { "id": "fireworks/accounts/fireworks/models/deepseek-v4-pro", "label": "DeepSeek V4 Pro", "provider": "Fireworks (open)", "envKey": "FIREWORKS_API_KEY" },
15
+ { "id": "fireworks/accounts/fireworks/models/gpt-oss-120b", "label": "GPT-OSS 120B", "provider": "Fireworks (open)", "envKey": "FIREWORKS_API_KEY" }
16
+ ]
17
+ }