lastlight-evals 0.3.0 → 0.5.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.
- package/README.md +117 -8
- package/dashboard/dist/assets/index-DbWEwzO3.css +1 -0
- package/dashboard/dist/assets/index-GvQi4Peq.js +264 -0
- package/dashboard/dist/index.html +2 -2
- package/datasets/pr-review/README.md +58 -0
- package/datasets/pr-review/martian-leaderboard.json +5785 -0
- package/datasets/pr-review/tier.json +5 -0
- package/dist/add-case.js +295 -31
- package/dist/add-case.js.map +1 -1
- package/dist/clean.js +127 -0
- package/dist/clean.js.map +1 -0
- package/dist/discovery.js +10 -4
- package/dist/discovery.js.map +1 -1
- package/dist/fake-github.js +187 -6
- package/dist/fake-github.js.map +1 -1
- package/dist/grade.js +266 -2
- package/dist/grade.js.map +1 -1
- package/dist/judge.js +145 -0
- package/dist/judge.js.map +1 -0
- package/dist/mechanism.test.js +350 -2
- package/dist/mechanism.test.js.map +1 -1
- package/dist/report.js +157 -10
- package/dist/report.js.map +1 -1
- package/dist/run-instance.js +192 -25
- package/dist/run-instance.js.map +1 -1
- package/dist/run.js +216 -38
- package/dist/run.js.map +1 -1
- package/dist/sandbox-preflight.js +107 -0
- package/dist/sandbox-preflight.js.map +1 -0
- package/dist/seed.js +195 -8
- package/dist/seed.js.map +1 -1
- package/dist/serve.js +2 -0
- package/dist/serve.js.map +1 -1
- package/models.json +1 -0
- package/package.json +2 -2
- package/dashboard/dist/assets/index-YwScAAxm.js +0 -238
- package/dashboard/dist/assets/index-uU9Sj3M4.css +0 -1
package/dist/report.js
CHANGED
|
@@ -10,6 +10,19 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from "node:fs";
|
|
12
12
|
import { join } from "node:path";
|
|
13
|
+
import { fLabel } from "./grade.js";
|
|
14
|
+
/** A live run's heartbeat must be refreshed within this window to count as
|
|
15
|
+
* genuinely running; beyond it the writer is presumed dead. Comfortably larger
|
|
16
|
+
* than the run loop's 20s heartbeat ticker. */
|
|
17
|
+
export const HEARTBEAT_STALE_MS = 90_000;
|
|
18
|
+
/** True if a heartbeat timestamp is recent enough that the writer is presumed
|
|
19
|
+
* alive. Absent/unparseable ⇒ not fresh (older orphaned runs have no heartbeat). */
|
|
20
|
+
export function heartbeatFresh(heartbeat, nowMs) {
|
|
21
|
+
if (!heartbeat)
|
|
22
|
+
return false;
|
|
23
|
+
const t = Date.parse(heartbeat);
|
|
24
|
+
return Number.isFinite(t) && nowMs - t <= HEARTBEAT_STALE_MS;
|
|
25
|
+
}
|
|
13
26
|
/**
|
|
14
27
|
* Fold N trials of ONE case (same model + instance) into a single result:
|
|
15
28
|
* - binary verdicts (behavioral / resolved) are WORST-case — true only if
|
|
@@ -63,8 +76,28 @@ export function aggregateTrials(trials) {
|
|
|
63
76
|
out.resolvedPass = passes;
|
|
64
77
|
out.failToPass = rep.failToPass;
|
|
65
78
|
out.passToPass = rep.passToPass;
|
|
79
|
+
out.executionLog = rep.executionLog; // log of the same trial the breakdown came from
|
|
66
80
|
out.model_patch = (ok.find((t) => t.resolved) ?? ok[0]).model_patch;
|
|
67
81
|
}
|
|
82
|
+
// review (pr-review): mean the metrics across non-errored trials; carry a
|
|
83
|
+
// representative trial's FP/FN lists (the worst — lowest F-beta — for inspection).
|
|
84
|
+
const rev = ok.filter((t) => t.review);
|
|
85
|
+
if (rev.length) {
|
|
86
|
+
const rep = [...rev].sort((a, b) => (a.review.fbeta - b.review.fbeta))[0];
|
|
87
|
+
out.review = {
|
|
88
|
+
precision: mean(rev.map((t) => t.review.precision)),
|
|
89
|
+
recall: mean(rev.map((t) => t.review.recall)),
|
|
90
|
+
fbeta: mean(rev.map((t) => t.review.fbeta)),
|
|
91
|
+
beta: rev[0].review.beta,
|
|
92
|
+
posted: Math.round(mean(rev.map((t) => t.review.posted))),
|
|
93
|
+
gold: rev[0].review.gold,
|
|
94
|
+
matched: Math.round(mean(rev.map((t) => t.review.matched))),
|
|
95
|
+
falsePositives: rep.review.falsePositives,
|
|
96
|
+
falseNegatives: rep.review.falseNegatives,
|
|
97
|
+
trace: rep.review.trace,
|
|
98
|
+
};
|
|
99
|
+
out.reviewTrials = rev.length;
|
|
100
|
+
}
|
|
68
101
|
return out;
|
|
69
102
|
}
|
|
70
103
|
/** Per-model aggregation over a set of results (one tier or all of them). */
|
|
@@ -79,6 +112,7 @@ export function summarizeModels(results) {
|
|
|
79
112
|
for (const [model, list] of byModel) {
|
|
80
113
|
const codeFix = list.filter((r) => r.resolved !== undefined);
|
|
81
114
|
const behavioral = list.filter((r) => r.behavioral !== undefined && !r.error);
|
|
115
|
+
const review = list.filter((r) => r.review !== undefined && !r.error);
|
|
82
116
|
const durations = list.map((r) => r.durationMs).sort((a, b) => a - b);
|
|
83
117
|
models.push({
|
|
84
118
|
model,
|
|
@@ -87,6 +121,11 @@ export function summarizeModels(results) {
|
|
|
87
121
|
codeFixTotal: codeFix.length,
|
|
88
122
|
behavioralOk: behavioral.filter((r) => r.behavioral?.ok).length,
|
|
89
123
|
behavioralTotal: behavioral.length,
|
|
124
|
+
reviewTotal: review.length,
|
|
125
|
+
avgPrecision: avg(review.map((r) => r.review.precision)),
|
|
126
|
+
avgRecall: avg(review.map((r) => r.review.recall)),
|
|
127
|
+
avgFbeta: avg(review.map((r) => r.review.fbeta)),
|
|
128
|
+
reviewBeta: review[0]?.review.beta,
|
|
90
129
|
avgInputTokens: avg(list.map((r) => r.inputTokens)),
|
|
91
130
|
avgCachedTokens: avg(list.map((r) => r.cachedTokens)),
|
|
92
131
|
avgOutputTokens: avg(list.map((r) => r.outputTokens)),
|
|
@@ -100,12 +139,108 @@ export function summarizeModels(results) {
|
|
|
100
139
|
export function summarize(results) {
|
|
101
140
|
return { models: summarizeModels(results), results };
|
|
102
141
|
}
|
|
142
|
+
/** Load a tier's Martian leaderboard sidecar, or undefined if it ships none. */
|
|
143
|
+
export function loadMartianSidecar(tierRoot) {
|
|
144
|
+
const path = join(tierRoot, "martian-leaderboard.json");
|
|
145
|
+
if (!existsSync(path))
|
|
146
|
+
return undefined;
|
|
147
|
+
try {
|
|
148
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return undefined; // a malformed sidecar just hides the panel, never breaks a run
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const f1Of = (tp, fp, fn) => {
|
|
155
|
+
const p = tp + fp ? tp / (tp + fp) : 0;
|
|
156
|
+
const r = tp + fn ? tp / (tp + fn) : 0;
|
|
157
|
+
return { precision: p, recall: r, f1: p + r ? (2 * p * r) / (p + r) : 0 };
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Rank this run's model(s) against Martian's Code Review Bench tools over EXACTLY
|
|
161
|
+
* the PRs the run covered (subset-fair). For each covered PR we have Martian's
|
|
162
|
+
* per-tool tp/fp/fn (from the sidecar) and our own (matched / posted-matched /
|
|
163
|
+
* gold-matched from the judge). Everything is micro-aggregated — summed then
|
|
164
|
+
* P/R/F1 — matching Martian's own `overall_metrics`. A tool is ranked only if it
|
|
165
|
+
* has data on EVERY covered PR, so every row is scored on the identical PR set.
|
|
166
|
+
* Returns undefined when nothing graded overlaps the sidecar (⇒ no panel).
|
|
167
|
+
*/
|
|
168
|
+
export function computeMartianRanking(results, sidecar) {
|
|
169
|
+
// Covered PRs: graded (has a review) AND present in the sidecar. Dedup because a
|
|
170
|
+
// multi-model run repeats each instance_id once per model.
|
|
171
|
+
const covered = [...new Set(results.filter((r) => r.review && sidecar.instances[r.instance_id]).map((r) => r.instance_id))].sort();
|
|
172
|
+
if (!covered.length)
|
|
173
|
+
return undefined;
|
|
174
|
+
// Martian tools that appear on EVERY covered PR — only those are comparable on
|
|
175
|
+
// the identical subset. Micro-aggregate each across the covered PRs.
|
|
176
|
+
const onAll = covered
|
|
177
|
+
.map((id) => new Set(Object.keys(sidecar.instances[id].toolMetrics)))
|
|
178
|
+
.reduce((acc, s) => new Set([...acc].filter((t) => s.has(t))));
|
|
179
|
+
const tools = [...onAll]
|
|
180
|
+
.map((key) => {
|
|
181
|
+
let tp = 0, fp = 0, fn = 0;
|
|
182
|
+
for (const id of covered) {
|
|
183
|
+
const m = sidecar.instances[id].toolMetrics[key];
|
|
184
|
+
tp += m.tp;
|
|
185
|
+
fp += m.fp;
|
|
186
|
+
fn += m.fn;
|
|
187
|
+
}
|
|
188
|
+
return { key, name: sidecar.toolDisplayNames[key] ?? key, tp, fp, fn, ...f1Of(tp, fp, fn) };
|
|
189
|
+
})
|
|
190
|
+
.sort((a, b) => b.f1 - a.f1);
|
|
191
|
+
// Our arm(s): micro-aggregate the judge's matched/posted/gold over the covered
|
|
192
|
+
// PRs the arm actually graded, then slot into the tool ranking by F1.
|
|
193
|
+
const byModel = new Map();
|
|
194
|
+
for (const r of results) {
|
|
195
|
+
if (r.review && sidecar.instances[r.instance_id])
|
|
196
|
+
(byModel.get(r.model) ?? byModel.set(r.model, []).get(r.model)).push(r);
|
|
197
|
+
}
|
|
198
|
+
const models = [...byModel.entries()]
|
|
199
|
+
.map(([key, list]) => {
|
|
200
|
+
let tp = 0, fp = 0, fn = 0;
|
|
201
|
+
for (const r of list) {
|
|
202
|
+
const rev = r.review;
|
|
203
|
+
tp += rev.matched;
|
|
204
|
+
fp += Math.max(0, rev.posted - rev.matched);
|
|
205
|
+
fn += Math.max(0, rev.gold - rev.matched);
|
|
206
|
+
}
|
|
207
|
+
const score = f1Of(tp, fp, fn);
|
|
208
|
+
// Rank = 1 + (tools strictly better). `of` counts the tool field plus us.
|
|
209
|
+
const rank = 1 + tools.filter((t) => t.f1 > score.f1).length;
|
|
210
|
+
return { key, name: key, tp, fp, fn, ...score, rank, of: tools.length + 1 };
|
|
211
|
+
})
|
|
212
|
+
.sort((a, b) => b.f1 - a.f1);
|
|
213
|
+
return { judgeModel: sidecar.judgeModel, prCount: covered.length, coveredInstances: covered, tools, models };
|
|
214
|
+
}
|
|
103
215
|
export function renderTable(card, labels = {}) {
|
|
104
|
-
|
|
216
|
+
// Show the pr-review columns (prec/rec/F-beta) only when some run graded a
|
|
217
|
+
// review — otherwise keep the table lean for triage/code-fix. The F-beta column
|
|
218
|
+
// is labelled by the β the run used (F1 by default).
|
|
219
|
+
const hasReview = card.models.some((m) => m.reviewTotal > 0);
|
|
220
|
+
const fCol = fLabel(card.models.find((m) => m.reviewBeta !== undefined)?.reviewBeta ?? 1);
|
|
221
|
+
const header = [
|
|
222
|
+
"model",
|
|
223
|
+
"code-fix",
|
|
224
|
+
"behavioral",
|
|
225
|
+
...(hasReview ? ["prec", "rec", fCol] : []),
|
|
226
|
+
"in tok",
|
|
227
|
+
"cached",
|
|
228
|
+
"out tok",
|
|
229
|
+
"cost $",
|
|
230
|
+
"p50",
|
|
231
|
+
"err",
|
|
232
|
+
];
|
|
105
233
|
const rows = card.models.map((m) => [
|
|
106
234
|
labels[m.model] ?? m.model,
|
|
107
235
|
m.codeFixTotal ? `${m.codeFixResolved}/${m.codeFixTotal}` : "—",
|
|
108
236
|
m.behavioralTotal ? `${m.behavioralOk}/${m.behavioralTotal}` : "—",
|
|
237
|
+
...(hasReview
|
|
238
|
+
? [
|
|
239
|
+
m.reviewTotal ? m.avgPrecision.toFixed(2) : "—",
|
|
240
|
+
m.reviewTotal ? m.avgRecall.toFixed(2) : "—",
|
|
241
|
+
m.reviewTotal ? m.avgFbeta.toFixed(2) : "—",
|
|
242
|
+
]
|
|
243
|
+
: []),
|
|
109
244
|
fmtTokens(m.avgInputTokens),
|
|
110
245
|
fmtTokens(m.avgCachedTokens),
|
|
111
246
|
fmtTokens(m.avgOutputTokens),
|
|
@@ -124,7 +259,11 @@ export function writeScorecard(dir, card) {
|
|
|
124
259
|
mkdirSync(dir, { recursive: true });
|
|
125
260
|
const file = join(dir, "scorecard.json");
|
|
126
261
|
const tmp = join(dir, ".scorecard.json.tmp");
|
|
127
|
-
|
|
262
|
+
// Drop the heavy inline `model_patch` from the serialized scorecard — it's
|
|
263
|
+
// polled live every 1.5s and the diff can be large. predictions.jsonl keeps
|
|
264
|
+
// it (built from the in-memory card), and the dashboard reads the diff from
|
|
265
|
+
// each result's `modelPatchFile` (the discrete changes.diff artifact).
|
|
266
|
+
writeFileSync(tmp, JSON.stringify(card, (k, v) => (k === "model_patch" ? undefined : v), 2));
|
|
128
267
|
renameSync(tmp, file);
|
|
129
268
|
return file;
|
|
130
269
|
}
|
|
@@ -138,8 +277,13 @@ export function writeArtifacts(dir, card) {
|
|
|
138
277
|
}
|
|
139
278
|
/** Map a parsed scorecard into an {@link IndexRun}. `dir` is the run subdir name
|
|
140
279
|
* ("" for a legacy flat-layout run sitting directly in the tier dir). */
|
|
141
|
-
function indexRun(tierKey, dir, card) {
|
|
280
|
+
function indexRun(tierKey, dir, card, nowMs) {
|
|
142
281
|
const meta = card.meta;
|
|
282
|
+
// A run only counts as live if its heartbeat is fresh; a `live` scorecard with
|
|
283
|
+
// a stale/absent heartbeat (writer killed or crashed) is an interrupted run.
|
|
284
|
+
const fresh = heartbeatFresh(meta?.heartbeat, nowMs);
|
|
285
|
+
const isLive = !!meta?.live && fresh;
|
|
286
|
+
const isInterrupted = !!meta?.interrupted || (!!meta?.live && !fresh);
|
|
143
287
|
const id = dir || "root";
|
|
144
288
|
const data = dir ? `${dir}/scorecard.json` : "scorecard.json";
|
|
145
289
|
const results = card.results ?? [];
|
|
@@ -171,10 +315,12 @@ function indexRun(tierKey, dir, card) {
|
|
|
171
315
|
labels: meta?.labels ?? {},
|
|
172
316
|
byTier,
|
|
173
317
|
runs: meta?.runs ?? 1,
|
|
174
|
-
live:
|
|
318
|
+
live: isLive,
|
|
319
|
+
interrupted: isInterrupted,
|
|
175
320
|
progress: meta?.progress,
|
|
176
|
-
running
|
|
177
|
-
|
|
321
|
+
// No running/queued cases once interrupted — the writer is gone.
|
|
322
|
+
running: isInterrupted ? 0 : (meta?.pending ?? []).filter((p) => p.status === "running").length,
|
|
323
|
+
queued: isInterrupted ? 0 : (meta?.pending ?? []).filter((p) => p.status === "pending").length,
|
|
178
324
|
};
|
|
179
325
|
}
|
|
180
326
|
const parseCard = (file) => {
|
|
@@ -187,7 +333,7 @@ const parseCard = (file) => {
|
|
|
187
333
|
};
|
|
188
334
|
/** Scan one tier-combo dir for runs (subdir-per-run, plus a legacy flat run if a
|
|
189
335
|
* scorecard sits directly in the dir), newest first. */
|
|
190
|
-
export function indexTier(resultsRoot, key) {
|
|
336
|
+
export function indexTier(resultsRoot, key, nowMs = Date.now()) {
|
|
191
337
|
const tierDir = join(resultsRoot, key);
|
|
192
338
|
if (!existsSync(tierDir))
|
|
193
339
|
return [];
|
|
@@ -197,11 +343,11 @@ export function indexTier(resultsRoot, key) {
|
|
|
197
343
|
continue;
|
|
198
344
|
const card = parseCard(join(tierDir, ent.name, "scorecard.json"));
|
|
199
345
|
if (card)
|
|
200
|
-
runs.push(indexRun(key, ent.name, card));
|
|
346
|
+
runs.push(indexRun(key, ent.name, card, nowMs));
|
|
201
347
|
}
|
|
202
348
|
const flat = parseCard(join(tierDir, "scorecard.json"));
|
|
203
349
|
if (flat)
|
|
204
|
-
runs.push(indexRun(key, "", flat));
|
|
350
|
+
runs.push(indexRun(key, "", flat, nowMs));
|
|
205
351
|
const sortKey = (r) => r.generatedAt || r.runId;
|
|
206
352
|
return runs.sort((a, b) => (sortKey(a) < sortKey(b) ? 1 : sortKey(a) > sortKey(b) ? -1 : 0));
|
|
207
353
|
}
|
|
@@ -214,11 +360,12 @@ export function indexTier(resultsRoot, key) {
|
|
|
214
360
|
export function buildIndex(resultsRoot, generatedAt) {
|
|
215
361
|
if (!existsSync(resultsRoot))
|
|
216
362
|
return { generatedAt, tiers: [] };
|
|
363
|
+
const nowMs = Date.parse(generatedAt) || Date.now();
|
|
217
364
|
const tiers = [];
|
|
218
365
|
for (const ent of readdirSync(resultsRoot, { withFileTypes: true })) {
|
|
219
366
|
if (!ent.isDirectory())
|
|
220
367
|
continue;
|
|
221
|
-
const runs = indexTier(resultsRoot, ent.name);
|
|
368
|
+
const runs = indexTier(resultsRoot, ent.name, nowMs);
|
|
222
369
|
if (runs.length)
|
|
223
370
|
tiers.push({ key: ent.name, runs });
|
|
224
371
|
}
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
package/dist/run-instance.js
CHANGED
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
* 2. (code-fix) Deterministically seed the workspace: fixture repo @ base
|
|
7
7
|
* commit + a local bare `origin` so `git push` works offline.
|
|
8
8
|
* 3. Load the REAL workflow YAML (build / issue-triage / …) via the loader.
|
|
9
|
-
* 4. runWorkflow with `sandbox
|
|
10
|
-
*
|
|
9
|
+
* 4. runWorkflow with `sandbox` (default `"none"`; `"gondolin"` isolates the
|
|
10
|
+
* agent's tools in a QEMU micro-VM — see `opts.sandbox`), `githubApiBaseUrl
|
|
11
|
+
* → fake GitHub`, and an EMPTY approvalConfig so gates never pause. No real
|
|
12
|
+
* GitHub creds.
|
|
11
13
|
* 5. Grade deterministically (execution + behavioral) and collect metrics.
|
|
12
14
|
*
|
|
13
15
|
* The only deviations from production are the ones we can't do unattended:
|
|
@@ -20,9 +22,9 @@ import { join } from "node:path";
|
|
|
20
22
|
import { tmpdir } from "node:os";
|
|
21
23
|
import { getWorkflow, runWorkflow, } from "lastlight/evals";
|
|
22
24
|
import { startFakeGitHub } from "./fake-github.js";
|
|
23
|
-
import { seedWorkspace, seedWorkspaceFromGit, isRealSha } from "./seed.js";
|
|
25
|
+
import { seedWorkspace, seedWorkspaceFromGit, seedWorkspacePrReview, prFilesFromGit, isRealSha } from "./seed.js";
|
|
24
26
|
import { collectMetrics, drainSessions, readSessionLog, listSessionFiles, concatJsonl } from "./metrics.js";
|
|
25
|
-
import { gradeBehavioral, gradeExecution, gradeTriage } from "./grade.js";
|
|
27
|
+
import { gradeBehavioral, gradeExecution, gradeTriage, gradeReview } from "./grade.js";
|
|
26
28
|
const EVAL_ENV_KEYS = ["GITHUB_APP_ID", "GITHUB_APP_INSTALLATION_ID", "GITHUB_TOKEN", "GH_TOKEN", "GITHUB_API_URL"];
|
|
27
29
|
/**
|
|
28
30
|
* Install the eval's static-token GitHub env and return a restore fn:
|
|
@@ -50,21 +52,33 @@ export async function runInstance(inst, opts) {
|
|
|
50
52
|
const start = Date.now();
|
|
51
53
|
const { owner, name } = splitRepo(inst.repo);
|
|
52
54
|
const workflowName = inst.workflow ?? opts.defaultWorkflow ?? "issue-triage";
|
|
53
|
-
|
|
55
|
+
// Three tier shapes: triage (no repo), pr-review (checkout PR head, review-only,
|
|
56
|
+
// judge grade), and code-fix (everything else — seed a base checkout + execution
|
|
57
|
+
// grade). Keeping these explicit avoids the old `!== "issue-triage"` binary
|
|
58
|
+
// misclassifying pr-review as code-fix.
|
|
59
|
+
const isPrReview = workflowName === "pr-review";
|
|
60
|
+
const isCodeFix = !isPrReview && workflowName !== "issue-triage";
|
|
54
61
|
const stateDir = opts.stateDir ?? mkdtempSync(join(tmpdir(), "ll-eval-"));
|
|
55
62
|
const sessionsDir = join(stateDir, "agent-sessions");
|
|
56
63
|
// The shim appends per-phase jsonl under <sessionsDir>/projects/<slug>/ and
|
|
57
64
|
// does not create that parent recursively — pre-create it so token/cost
|
|
58
65
|
// metrics are captured (collectMetrics reads those jsonl files).
|
|
59
66
|
mkdirSync(join(sessionsDir, "projects"), { recursive: true });
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
|
|
67
|
+
// The target number is the PR number for pr-review, else the issue number.
|
|
68
|
+
const targetNumber = inst.pr?.number ?? inst.issue?.number ?? 1;
|
|
69
|
+
const taskId = `${name}-${targetNumber}-${workflowName}-${slug(inst.instance_id)}`;
|
|
70
|
+
const issueNumber = targetNumber;
|
|
71
|
+
const branch = isCodeFix
|
|
72
|
+
? `lastlight/${slug(inst.instance_id)}`
|
|
73
|
+
: isPrReview
|
|
74
|
+
? inst.pr?.head_ref ?? "main"
|
|
75
|
+
: "main";
|
|
76
|
+
// 1. Fake GitHub, seeded with the issue and/or PR.
|
|
64
77
|
const fake = await startFakeGitHub({
|
|
65
78
|
owner,
|
|
66
79
|
repo: name,
|
|
67
80
|
issues: inst.issue ? [inst.issue] : [],
|
|
81
|
+
pulls: inst.pr ? [inst.pr] : [],
|
|
68
82
|
existingLabels: inst.issue?.labels ?? [],
|
|
69
83
|
});
|
|
70
84
|
// Static-token mode: no App creds (so no real mint), a dummy token so the
|
|
@@ -88,23 +102,56 @@ export async function runInstance(inst, opts) {
|
|
|
88
102
|
// fixture dir wins; otherwise a git-source case (real base SHA + real
|
|
89
103
|
// repo) is checked out from the repo-local cache. Either way the agent
|
|
90
104
|
// works in a pre-seeded dir with an offline origin — no GitHub clone.
|
|
105
|
+
// Seed the repo into a `<workspace>/<repo>/` SUBDIRECTORY (production's nested
|
|
106
|
+
// layout) and tell the executor to run the agent there (`config.repoSubdir`
|
|
107
|
+
// below). That keeps the workflow scaffolding core stages at the workspace
|
|
108
|
+
// root — AGENTS.md, .lastlight-skills/ — OUTSIDE the repo's git tree, so the
|
|
109
|
+
// captured diff (5b') is the repo's change alone. We keep the SeedResult to
|
|
110
|
+
// diff the agent's final tree against the seeded base (the agent commits +
|
|
111
|
+
// pushes, so a `git diff HEAD` would be empty — we diff against the base).
|
|
112
|
+
const repoSubdir = isCodeFix || isPrReview ? name : undefined;
|
|
113
|
+
let seed;
|
|
91
114
|
if (isCodeFix) {
|
|
92
115
|
const fixtureDir = opts.datasetDir ? join(opts.datasetDir, "repos", inst.instance_id) : undefined;
|
|
93
116
|
if (fixtureDir && existsSync(fixtureDir)) {
|
|
94
|
-
seedWorkspace({ stateDir, taskId, fixtureDir, branch });
|
|
117
|
+
seed = seedWorkspace({ stateDir, taskId, fixtureDir, branch, repoSubdir });
|
|
95
118
|
}
|
|
96
119
|
else if (isRealSha(inst.base_commit) && /^[^/]+\/[^/]+$/.test(inst.repo)) {
|
|
97
|
-
seedWorkspaceFromGit({ stateDir, taskId, repo: inst.repo, baseCommit: inst.base_commit, branch });
|
|
120
|
+
seed = seedWorkspaceFromGit({ stateDir, taskId, repo: inst.repo, baseCommit: inst.base_commit, branch, repoSubdir });
|
|
98
121
|
}
|
|
99
122
|
}
|
|
123
|
+
else if (isPrReview && inst.pr && /^[^/]+\/[^/]+$/.test(inst.repo)) {
|
|
124
|
+
// Check out the PR HEAD into a `<repo>/` subdir (skills/pr-review's
|
|
125
|
+
// pre-clone contract), with an offline origin carrying base + head.
|
|
126
|
+
seed = seedWorkspacePrReview({
|
|
127
|
+
stateDir,
|
|
128
|
+
taskId,
|
|
129
|
+
repo: inst.repo,
|
|
130
|
+
pullNumber: inst.pr.number,
|
|
131
|
+
baseRef: inst.pr.base_ref,
|
|
132
|
+
headRef: inst.pr.head_ref,
|
|
133
|
+
baseCommit: inst.pr.base_commit,
|
|
134
|
+
headCommit: inst.pr.head_commit,
|
|
135
|
+
repoSubdir,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// The repo's working dir (the nested subdir when seeded) — where grading and
|
|
139
|
+
// the diff run. Falls back to the workspace root if nothing was seeded.
|
|
140
|
+
const repoDir = seed?.workDir ?? join(stateDir, "sandboxes", taskId);
|
|
141
|
+
// Serve the PR's changed files at GET /pulls/:n/files (pr-review): computed
|
|
142
|
+
// from base..head in the just-seeded workspace, so a review agent that lists
|
|
143
|
+
// files via the API gets the real changed set instead of a 404.
|
|
144
|
+
if (isPrReview && inst.pr && seed) {
|
|
145
|
+
fake.setPullFiles(inst.pr.number, prFilesFromGit(repoDir, inst.pr.base_commit, inst.pr.head_commit));
|
|
146
|
+
}
|
|
100
147
|
// 3. Real workflow definition + run context.
|
|
101
148
|
const def = getWorkflow(workflowName);
|
|
102
149
|
const ctx = {
|
|
103
150
|
owner,
|
|
104
151
|
repo: name,
|
|
105
152
|
issueNumber,
|
|
106
|
-
issueTitle: inst.issue?.title ?? inst.instance_id,
|
|
107
|
-
issueBody: inst.issue?.body ?? inst.problem_statement,
|
|
153
|
+
issueTitle: (isPrReview ? inst.pr?.title : inst.issue?.title) ?? inst.instance_id,
|
|
154
|
+
issueBody: (isPrReview ? inst.pr?.body : inst.issue?.body) ?? inst.problem_statement,
|
|
108
155
|
issueLabels: inst.issue?.labels ?? [],
|
|
109
156
|
commentBody: "",
|
|
110
157
|
sender: "eval",
|
|
@@ -112,6 +159,17 @@ export async function runInstance(inst, opts) {
|
|
|
112
159
|
taskId,
|
|
113
160
|
issueDir: `.lastlight/issue-${issueNumber}`,
|
|
114
161
|
bootstrapLabel: "lastlight:bootstrap",
|
|
162
|
+
// pr-review's Context block keys off `prNumber` — the skill goes straight
|
|
163
|
+
// to github_get_pull_request when it's set (buildPhasePrompt dumps every
|
|
164
|
+
// defined ctx field into the "Context:" block). `baseBranch` is what the
|
|
165
|
+
// deterministic `post-review` phase reads to compute the commentable diff
|
|
166
|
+
// (`git diff origin/<baseBranch>...HEAD`) — WITHOUT it every finding is
|
|
167
|
+
// demoted to the review body and the line-anchored inline-comment path
|
|
168
|
+
// (the point of the tier) never fires. Prod sets it from the PR's base ref;
|
|
169
|
+
// the eval must too, or it diverges from what ships.
|
|
170
|
+
...(isPrReview && inst.pr
|
|
171
|
+
? { prNumber: inst.pr.number, prTitle: inst.pr.title, baseBranch: inst.pr.base_ref }
|
|
172
|
+
: {}),
|
|
115
173
|
// No prePopulateBranch → the runner never clones from GitHub; the agent
|
|
116
174
|
// works in the dir we seeded above (or an empty dir for triage).
|
|
117
175
|
};
|
|
@@ -122,9 +180,14 @@ export async function runInstance(inst, opts) {
|
|
|
122
180
|
// context untouched and return just their forced id.
|
|
123
181
|
const prepared = opts.arm.prepare(ctx);
|
|
124
182
|
const config = {
|
|
125
|
-
sandbox: "none",
|
|
183
|
+
sandbox: opts.sandbox ?? "none",
|
|
126
184
|
stateDir,
|
|
127
185
|
sessionsDir,
|
|
186
|
+
// Run the agent inside the pre-seeded `<workspace>/<repo>/` checkout (only
|
|
187
|
+
// when we actually seeded one), matching production's nested layout. Core
|
|
188
|
+
// nests `agentCwd` here without a clone; AGENTS.md/.lastlight-skills stay
|
|
189
|
+
// at the workspace root, siblings outside the repo.
|
|
190
|
+
repoSubdir: seed ? repoSubdir : undefined,
|
|
128
191
|
// `config` arms let core pick per phase (this is only the fallback for
|
|
129
192
|
// phases that resolve to nothing — the merged config's `default`); `models`
|
|
130
193
|
// arms force their one id across every step.
|
|
@@ -207,6 +270,32 @@ export async function runInstance(inst, opts) {
|
|
|
207
270
|
: "workflow failed";
|
|
208
271
|
}
|
|
209
272
|
}
|
|
273
|
+
// 5b'. Capture the agent's changed files as a unified diff BEFORE grading
|
|
274
|
+
// touches the tree (gradeExecution copies held-out tests in / `git apply`s
|
|
275
|
+
// the test patch). Diff against the seeded base — the agent commits its work,
|
|
276
|
+
// so a `git diff HEAD` would be empty. Always-on for code-fix (independent of
|
|
277
|
+
// whether tests are configured), so the dashboard can browse what changed.
|
|
278
|
+
if (isCodeFix && seed) {
|
|
279
|
+
const patch = gitDiffAgainstBase(repoDir, seed.baseCommit);
|
|
280
|
+
// Kept in-memory for the SWE-bench predictions.jsonl roll-up.
|
|
281
|
+
result.model_patch = patch;
|
|
282
|
+
// Also persist as a DISCRETE artifact beside the trial's logs
|
|
283
|
+
// (execution.log, session jsonl) — same run-relative path scheme as
|
|
284
|
+
// `executionLog`. It publishes with the rest of the run tree
|
|
285
|
+
// (`build-site.ts` copies eval-results/ verbatim) and keeps the
|
|
286
|
+
// live-polled scorecard.json lean (the heavy diff is stripped from it —
|
|
287
|
+
// see writeScorecard). The dashboard fetches this file for the viewer.
|
|
288
|
+
if (patch && trialDir) {
|
|
289
|
+
try {
|
|
290
|
+
mkdirSync(trialDir, { recursive: true });
|
|
291
|
+
writeFileSync(join(trialDir, "changes.diff"), patch);
|
|
292
|
+
result.modelPatchFile = `${opts.sessionTrialRel ?? trialDir}/changes.diff`;
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
/* best-effort: a missing file just hides the dashboard "files" button */
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
210
299
|
// 5a. Behavioral grade (GitHub mutations).
|
|
211
300
|
const behavioralExpect = gradeBehavioral(inst.expect_github, fake, { issueNumber, branch });
|
|
212
301
|
const triage = gradeTriage(inst.triage_gold, fake, issueNumber);
|
|
@@ -214,23 +303,78 @@ export async function runInstance(inst, opts) {
|
|
|
214
303
|
ok: behavioralExpect.ok && triage.ok,
|
|
215
304
|
checks: [...behavioralExpect.checks, ...triage.checks],
|
|
216
305
|
};
|
|
217
|
-
// 5b.
|
|
218
|
-
|
|
219
|
-
|
|
306
|
+
// 5b-pr. PR-review grade (pr-review only): the submitted review scored
|
|
307
|
+
// against the gold set by an LLM judge → precision / recall / F-beta. A judge
|
|
308
|
+
// failure is surfaced as a harness error (the case is ungraded) rather than a
|
|
309
|
+
// silent zero, so it doesn't masquerade as a real score.
|
|
310
|
+
if (isPrReview && inst.review_gold) {
|
|
311
|
+
const reviews = fake.submittedReviews(issueNumber);
|
|
312
|
+
// Opt-in (`--judge-with-diff`): feed the PR diff to the judge so it can
|
|
313
|
+
// resolve terse, location-anchored review comments. The diff is base..head,
|
|
314
|
+
// already in the seeded workspace — no network.
|
|
315
|
+
let diff;
|
|
316
|
+
if (opts.judge?.withDiff && inst.pr && seed) {
|
|
317
|
+
try {
|
|
318
|
+
diff = execFileSync("git", ["diff", `${inst.pr.base_commit}..${inst.pr.head_commit}`], {
|
|
319
|
+
cwd: repoDir,
|
|
320
|
+
encoding: "utf8",
|
|
321
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
/* leave diff undefined — judge falls back to diff-blind */
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
const rg = await gradeReview({ gold: inst.review_gold, reviews, beta: opts.judge?.beta, diff });
|
|
329
|
+
result.review = {
|
|
330
|
+
precision: rg.precision,
|
|
331
|
+
recall: rg.recall,
|
|
332
|
+
fbeta: rg.fbeta,
|
|
333
|
+
beta: rg.beta,
|
|
334
|
+
posted: rg.posted,
|
|
335
|
+
gold: rg.gold,
|
|
336
|
+
matched: rg.matched,
|
|
337
|
+
falsePositives: rg.falsePositives,
|
|
338
|
+
falseNegatives: rg.falseNegatives,
|
|
339
|
+
trace: rg.trace,
|
|
340
|
+
};
|
|
341
|
+
if (rg.error)
|
|
342
|
+
result.error = result.error ?? `review judge: ${rg.error}`;
|
|
343
|
+
}
|
|
344
|
+
// 5b. Execution grade (code-fix only). Two modes:
|
|
345
|
+
// - Default (suite): run the repo's own `test_cmd` on the agent's final
|
|
346
|
+
// tree, resolved iff it exits 0. Nothing held out, nothing applied.
|
|
347
|
+
// - Hold-out (`hold_out_tests`): SWE-bench style — apply the maintainer's
|
|
348
|
+
// `test_patch` the agent never saw and grade named FAIL_TO_PASS / PASS_TO_PASS.
|
|
349
|
+
if (isCodeFix && (inst.test_cmd || inst.test_patch || inst.FAIL_TO_PASS?.length)) {
|
|
350
|
+
const holdOut = !!inst.hold_out_tests;
|
|
220
351
|
const heldOutDir = opts.datasetDir ? join(opts.datasetDir, "tests", inst.instance_id) : undefined;
|
|
221
352
|
const exec = gradeExecution({
|
|
222
|
-
workDir,
|
|
223
|
-
heldOutDir,
|
|
224
|
-
testPatch: inst.test_patch,
|
|
225
|
-
failToPass: inst.FAIL_TO_PASS ?? [],
|
|
226
|
-
passToPass: inst.PASS_TO_PASS ?? [],
|
|
353
|
+
workDir: repoDir,
|
|
354
|
+
heldOutDir: holdOut ? heldOutDir : undefined,
|
|
355
|
+
testPatch: holdOut ? inst.test_patch : undefined,
|
|
356
|
+
failToPass: holdOut ? inst.FAIL_TO_PASS ?? [] : [],
|
|
357
|
+
passToPass: holdOut ? inst.PASS_TO_PASS ?? [] : [],
|
|
227
358
|
testCmd: inst.test_cmd,
|
|
228
359
|
setupCmd: inst.setup_cmd,
|
|
229
360
|
});
|
|
230
361
|
result.resolved = exec.resolved;
|
|
231
362
|
result.failToPass = exec.failToPass;
|
|
232
363
|
result.passToPass = exec.passToPass;
|
|
233
|
-
|
|
364
|
+
// (model_patch is captured in 5b' above, before grading mutates the tree.)
|
|
365
|
+
// Persist the held-out test output (setup log + TAP) so the dashboard can
|
|
366
|
+
// show WHY a case was (un)resolved, not just the verdict. Lives beside the
|
|
367
|
+
// trial's session logs, referenced by the same run-relative path scheme.
|
|
368
|
+
if (trialDir) {
|
|
369
|
+
try {
|
|
370
|
+
mkdirSync(trialDir, { recursive: true });
|
|
371
|
+
writeFileSync(join(trialDir, "execution.log"), exec.raw ?? "");
|
|
372
|
+
result.executionLog = `${opts.sessionTrialRel ?? trialDir}/execution.log`;
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
/* best-effort: a missing log just hides the dashboard link */
|
|
376
|
+
}
|
|
377
|
+
}
|
|
234
378
|
}
|
|
235
379
|
// 5c. Metrics. Drain the fire-and-forget session flush first so the final
|
|
236
380
|
// `result` envelope (cost/tokens) has landed before we read + clean up.
|
|
@@ -323,12 +467,35 @@ function restoreEnv(snap) {
|
|
|
323
467
|
process.env[k] = v;
|
|
324
468
|
}
|
|
325
469
|
}
|
|
326
|
-
|
|
470
|
+
/**
|
|
471
|
+
* Unified diff of the agent's final tree vs the seeded `base` commit — capturing
|
|
472
|
+
* committed, uncommitted AND new/deleted files. Run inside the repo subdir, so
|
|
473
|
+
* workflow scaffolding (AGENTS.md, .lastlight-skills/) at the workspace root is
|
|
474
|
+
* naturally out of scope, and `git add -A` honours the repo's ignores (incl. the
|
|
475
|
+
* harness's `node_modules` exclude from {@link seedWorkspace}) — so the diff is
|
|
476
|
+
* the repo's own change alone. Staged into a throwaway index (`GIT_INDEX_FILE`)
|
|
477
|
+
* so the repo's real index is untouched and the later `gradeExecution`
|
|
478
|
+
* `git apply` still works.
|
|
479
|
+
*/
|
|
480
|
+
export function gitDiffAgainstBase(workDir, base) {
|
|
481
|
+
const tmpIndex = join(workDir, ".git", `eval-index-${process.pid}`);
|
|
482
|
+
const env = { ...process.env, GIT_INDEX_FILE: tmpIndex };
|
|
327
483
|
try {
|
|
328
|
-
|
|
484
|
+
execFileSync("git", ["read-tree", base], { cwd: workDir, env, stdio: "ignore" });
|
|
485
|
+
execFileSync("git", ["add", "-A"], { cwd: workDir, env, stdio: "ignore" });
|
|
486
|
+
const out = execFileSync("git", ["diff", "--cached", base], {
|
|
487
|
+
cwd: workDir,
|
|
488
|
+
env,
|
|
489
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
490
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
491
|
+
}).toString();
|
|
492
|
+
return out || undefined;
|
|
329
493
|
}
|
|
330
494
|
catch {
|
|
331
495
|
return undefined;
|
|
332
496
|
}
|
|
497
|
+
finally {
|
|
498
|
+
rmSync(tmpIndex, { force: true });
|
|
499
|
+
}
|
|
333
500
|
}
|
|
334
501
|
//# sourceMappingURL=run-instance.js.map
|