@bradtaylorsf/alpha-loop 1.2.0 → 1.4.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 (79) hide show
  1. package/README.md +60 -19
  2. package/dist/cli.js +83 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/auth.js +1 -1
  5. package/dist/commands/auth.js.map +1 -1
  6. package/dist/commands/eval.d.ts +53 -0
  7. package/dist/commands/eval.js +538 -0
  8. package/dist/commands/eval.js.map +1 -0
  9. package/dist/commands/evolve.d.ts +25 -0
  10. package/dist/commands/evolve.js +270 -0
  11. package/dist/commands/evolve.js.map +1 -0
  12. package/dist/commands/history.d.ts +1 -1
  13. package/dist/commands/history.js +4 -4
  14. package/dist/commands/history.js.map +1 -1
  15. package/dist/commands/init.d.ts +14 -0
  16. package/dist/commands/init.js +199 -30
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/resume.js +1 -0
  19. package/dist/commands/resume.js.map +1 -1
  20. package/dist/commands/run.js +170 -12
  21. package/dist/commands/run.js.map +1 -1
  22. package/dist/commands/scan.d.ts +1 -1
  23. package/dist/commands/scan.js +12 -9
  24. package/dist/commands/scan.js.map +1 -1
  25. package/dist/commands/sync.d.ts +5 -0
  26. package/dist/commands/sync.js +24 -5
  27. package/dist/commands/sync.js.map +1 -1
  28. package/dist/commands/vision.js +5 -3
  29. package/dist/commands/vision.js.map +1 -1
  30. package/dist/engine/agents.d.ts +6 -1
  31. package/dist/engine/agents.js +14 -12
  32. package/dist/engine/agents.js.map +1 -1
  33. package/dist/engine/prerequisites.d.ts +4 -7
  34. package/dist/engine/prerequisites.js +12 -36
  35. package/dist/engine/prerequisites.js.map +1 -1
  36. package/dist/lib/agent.d.ts +18 -0
  37. package/dist/lib/agent.js +211 -30
  38. package/dist/lib/agent.js.map +1 -1
  39. package/dist/lib/config.d.ts +25 -2
  40. package/dist/lib/config.js +80 -7
  41. package/dist/lib/config.js.map +1 -1
  42. package/dist/lib/eval-checks.d.ts +91 -0
  43. package/dist/lib/eval-checks.js +254 -0
  44. package/dist/lib/eval-checks.js.map +1 -0
  45. package/dist/lib/eval-runner.d.ts +29 -0
  46. package/dist/lib/eval-runner.js +439 -0
  47. package/dist/lib/eval-runner.js.map +1 -0
  48. package/dist/lib/eval.d.ts +170 -0
  49. package/dist/lib/eval.js +507 -0
  50. package/dist/lib/eval.js.map +1 -0
  51. package/dist/lib/learning.js +2 -2
  52. package/dist/lib/learning.js.map +1 -1
  53. package/dist/lib/pipeline.d.ts +44 -0
  54. package/dist/lib/pipeline.js +607 -138
  55. package/dist/lib/pipeline.js.map +1 -1
  56. package/dist/lib/prompts.d.ts +19 -0
  57. package/dist/lib/prompts.js +56 -5
  58. package/dist/lib/prompts.js.map +1 -1
  59. package/dist/lib/score.d.ts +80 -0
  60. package/dist/lib/score.js +172 -0
  61. package/dist/lib/score.js.map +1 -0
  62. package/dist/lib/session.d.ts +2 -1
  63. package/dist/lib/session.js +70 -19
  64. package/dist/lib/session.js.map +1 -1
  65. package/dist/lib/traces.d.ts +173 -0
  66. package/dist/lib/traces.js +272 -0
  67. package/dist/lib/traces.js.map +1 -0
  68. package/dist/lib/verify.d.ts +7 -1
  69. package/dist/lib/verify.js +109 -157
  70. package/dist/lib/verify.js.map +1 -1
  71. package/dist/lib/worktree.d.ts +1 -0
  72. package/dist/lib/worktree.js +9 -1
  73. package/dist/lib/worktree.js.map +1 -1
  74. package/package.json +1 -1
  75. package/templates/agents/implementer.md +1 -1
  76. package/templates/agents/reviewer.md +1 -1
  77. package/dist/engine/config.d.ts +0 -71
  78. package/dist/engine/config.js +0 -73
  79. package/dist/engine/config.js.map +0 -1
@@ -0,0 +1,507 @@
1
+ /**
2
+ * Eval Framework Core — define, load, run, and score eval cases.
3
+ *
4
+ * Eval cases live in .alpha-loop/evals/*.yaml and define:
5
+ * - A fixture repo + ref (the codebase state to test against)
6
+ * - An issue description (what the agent should implement)
7
+ * - Expected outcome (what success looks like)
8
+ * - Tags for filtering and categorization
9
+ *
10
+ * Two eval types:
11
+ * - 'full' — runs the complete pipeline (slow, expensive, comprehensive)
12
+ * - 'step' — tests a single pipeline stage (fast, cheap, targeted)
13
+ */
14
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
15
+ import { join, basename } from 'node:path';
16
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
17
+ import { log } from './logger.js';
18
+ import { computeCompositeScore, appendScore, hashConfig } from './score.js';
19
+ import { parseChecks } from './eval-checks.js';
20
+ const EVALS_DIR = '.alpha-loop/evals';
21
+ /** Get the evals directory path. Uses config evalDir if provided, otherwise default. */
22
+ export function evalsDir(projectDir, evalDir) {
23
+ return join(projectDir ?? process.cwd(), evalDir ?? EVALS_DIR);
24
+ }
25
+ /**
26
+ * Load a single eval case from a YAML file.
27
+ */
28
+ export function loadEvalCase(filePath) {
29
+ try {
30
+ const raw = readFileSync(filePath, 'utf-8');
31
+ const parsed = parseYaml(raw);
32
+ if (!parsed || typeof parsed !== 'object')
33
+ return null;
34
+ const id = String(parsed.id ?? basename(filePath, '.yaml'));
35
+ const expected = (parsed.expected ?? {});
36
+ return {
37
+ id,
38
+ description: String(parsed.description ?? ''),
39
+ type: parsed.type === 'step' ? 'step' : 'full',
40
+ step: parsed.step ? String(parsed.step) : undefined,
41
+ fixtureRepo: String(parsed.fixture_repo ?? parsed.fixtureRepo ?? ''),
42
+ fixtureRef: String(parsed.fixture_ref ?? parsed.fixtureRef ?? 'main'),
43
+ issueTitle: String(parsed.issue_title ?? parsed.issueTitle ?? ''),
44
+ issueBody: String(parsed.issue_body ?? parsed.issueBody ?? ''),
45
+ expected: {
46
+ success: expected.success !== false,
47
+ filesChanged: Array.isArray(expected.files_changed) ? expected.files_changed.map(String) : undefined,
48
+ testsPassing: typeof expected.tests_passing === 'boolean' ? expected.tests_passing : undefined,
49
+ diffContains: Array.isArray(expected.diff_contains) ? expected.diff_contains.map(String) : undefined,
50
+ diffNotContains: Array.isArray(expected.diff_not_contains) ? expected.diff_not_contains.map(String) : undefined,
51
+ outputContains: Array.isArray(expected.output_contains) ? expected.output_contains.map(String) : undefined,
52
+ },
53
+ tags: Array.isArray(parsed.tags) ? parsed.tags.map(String) : [],
54
+ timeout: typeof parsed.timeout === 'number' ? parsed.timeout : 0,
55
+ source: String(parsed.source ?? 'manual'),
56
+ };
57
+ }
58
+ catch (err) {
59
+ log.warn(`Failed to load eval case from ${filePath}: ${err instanceof Error ? err.message : err}`);
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * Load an eval case from a directory containing issue.md, checks.yaml, metadata.yaml.
65
+ */
66
+ export function loadEvalCaseDir(dirPath) {
67
+ try {
68
+ const metadataPath = join(dirPath, 'metadata.yaml');
69
+ const checksPath = join(dirPath, 'checks.yaml');
70
+ const issuePath = join(dirPath, 'issue.md');
71
+ const inputPath = join(dirPath, 'input.md');
72
+ if (!existsSync(metadataPath) || !existsSync(checksPath))
73
+ return null;
74
+ const metadata = parseYaml(readFileSync(metadataPath, 'utf-8'));
75
+ const checksRaw = parseYaml(readFileSync(checksPath, 'utf-8'));
76
+ // Parse issue.md — title is the first markdown heading, body is the rest
77
+ let issueTitle = '';
78
+ let issueBody = '';
79
+ if (existsSync(issuePath)) {
80
+ const issueContent = readFileSync(issuePath, 'utf-8');
81
+ const titleMatch = issueContent.match(/^#\s+(.+)$/m);
82
+ issueTitle = titleMatch ? titleMatch[1].trim() : '';
83
+ issueBody = titleMatch
84
+ ? issueContent.slice(titleMatch.index + titleMatch[0].length).trim()
85
+ : issueContent;
86
+ }
87
+ // Parse input.md for step cases
88
+ let inputText;
89
+ if (existsSync(inputPath)) {
90
+ inputText = readFileSync(inputPath, 'utf-8');
91
+ }
92
+ const id = basename(dirPath);
93
+ const type = String(checksRaw.type ?? metadata.type ?? 'e2e');
94
+ const evalType = type === 'step' ? 'step' : 'full';
95
+ const checks = parseChecks(checksRaw);
96
+ // Read capture status from checks.yaml (auto-captured cases use 'needs-annotation')
97
+ const captureStatus = checksRaw.status === 'needs-annotation' ? 'needs-annotation'
98
+ : checksRaw.status === 'ready' ? 'ready'
99
+ : undefined;
100
+ return {
101
+ id,
102
+ description: String(metadata.description ?? (issueTitle || id)),
103
+ type: evalType,
104
+ step: checksRaw.step ? String(checksRaw.step) : undefined,
105
+ fixtureRepo: String(checksRaw.repo ?? metadata.repo ?? ''),
106
+ fixtureRef: String(checksRaw.fixture_ref ?? metadata.fixture_ref ?? 'main'),
107
+ issueTitle,
108
+ issueBody: issueBody || inputText || '',
109
+ expected: {
110
+ success: true,
111
+ testsPassing: checks.some((c) => c.type === 'test_pass') ? true : undefined,
112
+ },
113
+ tags: Array.isArray(metadata.tags) ? metadata.tags.map(String) : [],
114
+ timeout: typeof checksRaw.timeout === 'number' ? checksRaw.timeout : (typeof metadata.timeout === 'number' ? metadata.timeout : 0),
115
+ source: String(metadata.source ?? 'manual'),
116
+ checks,
117
+ inputText,
118
+ captureStatus,
119
+ };
120
+ }
121
+ catch (err) {
122
+ log.warn(`Failed to load eval case dir ${dirPath}: ${err instanceof Error ? err.message : err}`);
123
+ return null;
124
+ }
125
+ }
126
+ /**
127
+ * Load all eval cases from the evals directory.
128
+ * Supports both flat case-*.yaml files and directory-based cases under cases/{e2e,step}/.
129
+ * Optionally filter by tags, type, step, or caseId prefix.
130
+ */
131
+ export function loadEvalCases(options) {
132
+ const dir = evalsDir(options?.projectDir, options?.evalDir);
133
+ if (!existsSync(dir))
134
+ return [];
135
+ const cases = [];
136
+ // Load flat case-*.yaml files (backward compat)
137
+ const files = readdirSync(dir).filter((f) => f.endsWith('.yaml') && f.startsWith('case-'));
138
+ for (const file of files) {
139
+ const evalCase = loadEvalCase(join(dir, file));
140
+ if (evalCase)
141
+ cases.push(evalCase);
142
+ }
143
+ // Load directory-based cases under cases/{e2e,step}/
144
+ const casesDir = join(dir, 'cases');
145
+ if (existsSync(casesDir)) {
146
+ for (const suiteType of ['e2e', 'step']) {
147
+ const suiteDir = join(casesDir, suiteType);
148
+ if (!existsSync(suiteDir))
149
+ continue;
150
+ // Step cases may have an extra level: step/{review,plan,...}/001-name/
151
+ if (suiteType === 'step') {
152
+ const stepDirs = readdirSync(suiteDir, { withFileTypes: true })
153
+ .filter((d) => d.isDirectory());
154
+ for (const stepDir of stepDirs) {
155
+ const stepPath = join(suiteDir, stepDir.name);
156
+ // Check if this is a case dir or a step-name dir
157
+ if (existsSync(join(stepPath, 'metadata.yaml'))) {
158
+ const evalCase = loadEvalCaseDir(stepPath);
159
+ if (evalCase)
160
+ cases.push(evalCase);
161
+ }
162
+ else {
163
+ // Nested: step/{stepName}/{caseDir}/
164
+ const caseDirs = readdirSync(stepPath, { withFileTypes: true })
165
+ .filter((d) => d.isDirectory());
166
+ for (const caseDir of caseDirs) {
167
+ const evalCase = loadEvalCaseDir(join(stepPath, caseDir.name));
168
+ if (evalCase)
169
+ cases.push(evalCase);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ else {
175
+ const caseDirs = readdirSync(suiteDir, { withFileTypes: true })
176
+ .filter((d) => d.isDirectory());
177
+ for (const caseDir of caseDirs) {
178
+ const evalCase = loadEvalCaseDir(join(suiteDir, caseDir.name));
179
+ if (evalCase)
180
+ cases.push(evalCase);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ // Apply filters
186
+ const filtered = cases.filter((evalCase) => {
187
+ // Skip unannotated cases unless explicitly including them
188
+ if (evalCase.captureStatus === 'needs-annotation' && !options?.includeUnannotated)
189
+ return false;
190
+ // Filter by case ID prefix
191
+ if (options?.caseId && !evalCase.id.startsWith(options.caseId))
192
+ return false;
193
+ // Filter by type (map 'e2e' suite to 'full' type)
194
+ if (options?.type && evalCase.type !== options.type)
195
+ return false;
196
+ // Filter by step
197
+ if (options?.step && evalCase.step !== options.step)
198
+ return false;
199
+ // Filter by tags (any match)
200
+ if (options?.tags && options.tags.length > 0) {
201
+ const hasTag = options.tags.some((t) => evalCase.tags.includes(t));
202
+ if (!hasTag)
203
+ return false;
204
+ }
205
+ return true;
206
+ });
207
+ return filtered.sort((a, b) => a.id.localeCompare(b.id));
208
+ }
209
+ /**
210
+ * Save an eval case to a YAML file.
211
+ */
212
+ export function saveEvalCase(evalCase, projectDir, evalDirOverride) {
213
+ const dir = evalsDir(projectDir, evalDirOverride);
214
+ mkdirSync(dir, { recursive: true });
215
+ const filePath = join(dir, `case-${evalCase.id}.yaml`);
216
+ const yamlData = {
217
+ id: evalCase.id,
218
+ description: evalCase.description,
219
+ type: evalCase.type,
220
+ ...(evalCase.step && { step: evalCase.step }),
221
+ fixture_repo: evalCase.fixtureRepo,
222
+ fixture_ref: evalCase.fixtureRef,
223
+ issue_title: evalCase.issueTitle,
224
+ issue_body: evalCase.issueBody,
225
+ expected: {
226
+ success: evalCase.expected.success,
227
+ ...(evalCase.expected.filesChanged && { files_changed: evalCase.expected.filesChanged }),
228
+ ...(evalCase.expected.testsPassing !== undefined && { tests_passing: evalCase.expected.testsPassing }),
229
+ ...(evalCase.expected.diffContains && { diff_contains: evalCase.expected.diffContains }),
230
+ ...(evalCase.expected.diffNotContains && { diff_not_contains: evalCase.expected.diffNotContains }),
231
+ ...(evalCase.expected.outputContains && { output_contains: evalCase.expected.outputContains }),
232
+ },
233
+ tags: evalCase.tags,
234
+ timeout: evalCase.timeout,
235
+ source: evalCase.source,
236
+ };
237
+ writeFileSync(filePath, stringifyYaml(yamlData));
238
+ return filePath;
239
+ }
240
+ /**
241
+ * Evaluate a completed pipeline result against expected outcomes.
242
+ * Returns partial credit based on how many criteria match.
243
+ */
244
+ export function evaluateResult(evalCase, actual) {
245
+ const checks = {
246
+ successMatch: actual.success === evalCase.expected.success,
247
+ filesMatch: true,
248
+ testsMatch: true,
249
+ diffMatch: true,
250
+ outputMatch: true,
251
+ };
252
+ // Check files changed
253
+ if (evalCase.expected.filesChanged && evalCase.expected.filesChanged.length > 0) {
254
+ checks.filesMatch = evalCase.expected.filesChanged.every((pattern) => actual.filesChanged.some((f) => f.includes(pattern) || minimatch(f, pattern)));
255
+ }
256
+ // Check tests passing
257
+ if (evalCase.expected.testsPassing !== undefined) {
258
+ checks.testsMatch = actual.testsPassing === evalCase.expected.testsPassing;
259
+ }
260
+ // Check diff contains
261
+ if (evalCase.expected.diffContains) {
262
+ checks.diffMatch = evalCase.expected.diffContains.every((s) => actual.diff.includes(s));
263
+ }
264
+ if (evalCase.expected.diffNotContains) {
265
+ checks.diffMatch = checks.diffMatch &&
266
+ evalCase.expected.diffNotContains.every((s) => !actual.diff.includes(s));
267
+ }
268
+ // Check output contains (for step evals)
269
+ if (evalCase.expected.outputContains) {
270
+ checks.outputMatch = evalCase.expected.outputContains.every((s) => actual.output.includes(s));
271
+ }
272
+ // Compute partial credit (0-1)
273
+ const checkValues = Object.values(checks);
274
+ const partialCredit = checkValues.filter(Boolean).length / checkValues.length;
275
+ const passed = checkValues.every(Boolean);
276
+ return {
277
+ caseId: evalCase.id,
278
+ passed,
279
+ partialCredit,
280
+ retries: actual.retries,
281
+ duration: actual.duration,
282
+ details: checks,
283
+ };
284
+ }
285
+ /**
286
+ * Simple glob-like pattern matching (supports * wildcards).
287
+ * Not a full glob implementation — just enough for eval file matching.
288
+ */
289
+ function minimatch(str, pattern) {
290
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
291
+ const regex = new RegExp('^' + escaped.replace(/\*/g, '.*').replace(/\?/g, '.') + '$');
292
+ return regex.test(str);
293
+ }
294
+ /**
295
+ * Record eval suite results: compute composite score and append to score history.
296
+ */
297
+ export function recordEvalResults(results, config, cost, projectDir) {
298
+ const caseResults = results.map((r) => ({
299
+ caseId: r.caseId,
300
+ passed: r.passed,
301
+ partialCredit: r.partialCredit,
302
+ retries: r.retries,
303
+ duration: r.duration,
304
+ error: r.error,
305
+ }));
306
+ const composite = computeCompositeScore(caseResults);
307
+ const configObj = {
308
+ agent: config.agent,
309
+ model: config.model,
310
+ reviewModel: config.reviewModel,
311
+ maxTestRetries: config.maxTestRetries,
312
+ testCommand: config.testCommand,
313
+ };
314
+ const entry = {
315
+ timestamp: new Date().toISOString(),
316
+ configHash: hashConfig(configObj),
317
+ config: configObj,
318
+ cases: caseResults,
319
+ composite,
320
+ totalCost: cost,
321
+ };
322
+ appendScore(evalsDir(projectDir, config.evalDir), entry);
323
+ const passCount = results.filter((r) => r.passed).length;
324
+ const failCount = results.length - passCount;
325
+ const totalDuration = results.reduce((sum, r) => sum + r.duration, 0);
326
+ return { cases: results, composite, totalDuration, passCount, failCount };
327
+ }
328
+ /**
329
+ * Format eval case for display.
330
+ */
331
+ export function formatEvalCase(evalCase) {
332
+ const tags = evalCase.tags.length > 0 ? ` [${evalCase.tags.join(', ')}]` : '';
333
+ const step = evalCase.step ? ` (${evalCase.step})` : '';
334
+ return `${evalCase.id}: ${evalCase.description} — ${evalCase.type}${step}${tags}`;
335
+ }
336
+ /**
337
+ * Detect which pipeline step failed from a PipelineResult.
338
+ */
339
+ export function detectFailureStep(result) {
340
+ if (!result.testsPassing) {
341
+ // If the issue's filesChanged > 0, the agent at least tried to implement;
342
+ // multiple retries suggest a test-fix loop failure
343
+ return result.filesChanged > 1 ? 'test-fix' : 'implement';
344
+ }
345
+ if (!result.verifyPassing && !result.verifySkipped)
346
+ return 'verify';
347
+ return 'review';
348
+ }
349
+ /**
350
+ * Generate a slug from an issue title for directory naming.
351
+ */
352
+ function slugify(title) {
353
+ return title
354
+ .toLowerCase()
355
+ .replace(/[^a-z0-9]+/g, '-')
356
+ .replace(/^-+|-+$/g, '')
357
+ .slice(0, 40);
358
+ }
359
+ /**
360
+ * Save a captured eval case as a directory-based skeleton.
361
+ * Creates .alpha-loop/evals/cases/step/{stepName}/captured-{issueNum}-{slug}/
362
+ * with metadata.yaml, checks.yaml, and issue.md.
363
+ *
364
+ * Returns the path to the created case directory.
365
+ */
366
+ export function saveCapturedCase(opts) {
367
+ const dir = evalsDir(opts.projectDir, opts.evalDir);
368
+ const slug = slugify(opts.title);
369
+ const caseDirName = `captured-${String(opts.issueNum).padStart(3, '0')}-${slug}`;
370
+ const casePath = join(dir, 'cases', 'step', opts.step, caseDirName);
371
+ mkdirSync(casePath, { recursive: true });
372
+ // metadata.yaml
373
+ const metadata = stringifyYaml({
374
+ id: caseDirName,
375
+ description: opts.title,
376
+ tags: opts.tags ?? [],
377
+ source: 'auto-captured',
378
+ captured_from: {
379
+ issue: opts.issueNum,
380
+ session: opts.session,
381
+ date: new Date().toISOString().split('T')[0],
382
+ },
383
+ });
384
+ writeFileSync(join(casePath, 'metadata.yaml'), metadata);
385
+ // checks.yaml — skeleton with needs-annotation status
386
+ const checks = stringifyYaml({
387
+ type: 'step',
388
+ step: opts.step,
389
+ eval_method: 'pending',
390
+ status: 'needs-annotation',
391
+ source: 'auto-captured',
392
+ captured_from: {
393
+ issue: opts.issueNum,
394
+ session: opts.session,
395
+ date: new Date().toISOString().split('T')[0],
396
+ },
397
+ checks: [],
398
+ });
399
+ writeFileSync(join(casePath, 'checks.yaml'), checks);
400
+ // issue.md
401
+ const issueContent = `# ${opts.title}\n\n${opts.issueBody ?? `Captured from issue #${opts.issueNum}`}\n`;
402
+ writeFileSync(join(casePath, 'issue.md'), issueContent);
403
+ return casePath;
404
+ }
405
+ /**
406
+ * Load all unannotated (needs-annotation) captured cases.
407
+ */
408
+ export function loadUnannotatedCases(projectDir, evalDirOverride) {
409
+ const cases = loadEvalCases({ projectDir, evalDir: evalDirOverride, includeUnannotated: true });
410
+ return cases
411
+ .filter((c) => c.captureStatus === 'needs-annotation')
412
+ .map((c) => {
413
+ // Reconstruct the directory path from the case ID
414
+ const dir = evalsDir(projectDir, evalDirOverride);
415
+ // Search for the case directory
416
+ const casePath = findCaseDir(dir, c.id);
417
+ return { path: casePath, evalCase: c };
418
+ })
419
+ .filter((entry) => entry.path !== '');
420
+ }
421
+ /**
422
+ * Find a case directory by its ID within the evals directory tree.
423
+ */
424
+ function findCaseDir(baseDir, caseId) {
425
+ const casesDir = join(baseDir, 'cases');
426
+ if (!existsSync(casesDir))
427
+ return '';
428
+ for (const suiteType of ['e2e', 'step']) {
429
+ const suiteDir = join(casesDir, suiteType);
430
+ if (!existsSync(suiteDir))
431
+ continue;
432
+ if (suiteType === 'step') {
433
+ const stepDirs = readdirSync(suiteDir, { withFileTypes: true })
434
+ .filter((d) => d.isDirectory());
435
+ for (const stepDir of stepDirs) {
436
+ const candidate = join(suiteDir, stepDir.name, caseId);
437
+ if (existsSync(candidate) && existsSync(join(candidate, 'checks.yaml'))) {
438
+ return candidate;
439
+ }
440
+ // Also check nested
441
+ const nested = join(suiteDir, stepDir.name);
442
+ if (existsSync(nested)) {
443
+ const subdirs = readdirSync(nested, { withFileTypes: true })
444
+ .filter((d) => d.isDirectory() && d.name === caseId);
445
+ if (subdirs.length > 0)
446
+ return join(nested, subdirs[0].name);
447
+ }
448
+ }
449
+ }
450
+ else {
451
+ const candidate = join(suiteDir, caseId);
452
+ if (existsSync(candidate) && existsSync(join(candidate, 'checks.yaml'))) {
453
+ return candidate;
454
+ }
455
+ }
456
+ }
457
+ return '';
458
+ }
459
+ /**
460
+ * Annotate a captured case — updates checks.yaml with failure description,
461
+ * expected behavior, and sets status to 'ready'.
462
+ */
463
+ export function annotateCapturedCase(casePath, annotation) {
464
+ const checksPath = join(casePath, 'checks.yaml');
465
+ if (!existsSync(checksPath)) {
466
+ throw new Error(`No checks.yaml found at ${casePath}`);
467
+ }
468
+ const checksRaw = parseYaml(readFileSync(checksPath, 'utf-8'));
469
+ checksRaw.status = 'ready';
470
+ checksRaw.eval_method = 'annotated';
471
+ checksRaw.failure_description = annotation.whatWentWrong;
472
+ checksRaw.expected_behavior = annotation.whatShouldHaveHappened;
473
+ // Add keyword checks based on the annotation
474
+ const checks = [];
475
+ if (annotation.whatShouldHaveHappened) {
476
+ checks.push({
477
+ type: 'keyword_present',
478
+ keywords: extractKeywords(annotation.whatShouldHaveHappened),
479
+ });
480
+ }
481
+ if (checks.length > 0) {
482
+ checksRaw.checks = checks;
483
+ }
484
+ writeFileSync(checksPath, stringifyYaml(checksRaw));
485
+ // Update metadata tags if provided
486
+ if (annotation.tags && annotation.tags.length > 0) {
487
+ const metadataPath = join(casePath, 'metadata.yaml');
488
+ if (existsSync(metadataPath)) {
489
+ const metadata = parseYaml(readFileSync(metadataPath, 'utf-8'));
490
+ const existingTags = Array.isArray(metadata.tags) ? metadata.tags.map(String) : [];
491
+ metadata.tags = [...new Set([...existingTags, ...annotation.tags])];
492
+ writeFileSync(metadataPath, stringifyYaml(metadata));
493
+ }
494
+ }
495
+ }
496
+ /**
497
+ * Extract meaningful keywords from annotation text for keyword_present checks.
498
+ */
499
+ function extractKeywords(text) {
500
+ // Split on common delimiters and take meaningful words (>3 chars)
501
+ return text
502
+ .split(/[\s,;.!?]+/)
503
+ .filter((w) => w.length > 3)
504
+ .map((w) => w.toLowerCase())
505
+ .slice(0, 5);
506
+ }
507
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/lib/eval.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,7 @@ export async function extractLearnings(options) {
39
39
  return;
40
40
  }
41
41
  const result = await spawnAgent({
42
- agent: 'claude',
42
+ agent: config.agent,
43
43
  model: config.reviewModel,
44
44
  prompt,
45
45
  cwd: process.cwd(),
@@ -189,7 +189,7 @@ Output ONLY this markdown structure:
189
189
  | Avg duration | ${Math.round(totalDuration / results.length)}s |
190
190
  | Total duration | ${Math.round(totalDuration / 60)} min |`;
191
191
  const agentResult = await spawnAgent({
192
- agent: 'claude',
192
+ agent: config.agent,
193
193
  model: config.reviewModel,
194
194
  prompt,
195
195
  cwd: process.cwd(),
@@ -1 +1 @@
1
- {"version":3,"file":"learning.js","sourceRoot":"","sources":["../../src/lib/learning.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"learning.js","sourceRoot":"","sources":["../../src/lib/learning.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,56 @@
1
1
  import type { Config } from './config.js';
2
2
  import type { SessionContext } from './session.js';
3
+ /**
4
+ * Structured plan output from the planning agent.
5
+ * Controls which pipeline steps run and how.
6
+ */
7
+ export type IssuePlan = {
8
+ summary: string;
9
+ files: string[];
10
+ implementation: string;
11
+ testing: {
12
+ needed: boolean;
13
+ reason: string;
14
+ };
15
+ verification: {
16
+ needed: boolean;
17
+ instructions?: string;
18
+ reason: string;
19
+ };
20
+ };
21
+ /**
22
+ * Structured gate result written by review/verify agents as JSON files.
23
+ * The orchestrator reads these to decide: continue or loop back to implementer.
24
+ */
25
+ export type GateResult = {
26
+ passed: boolean;
27
+ summary: string;
28
+ findings: Array<{
29
+ severity: 'critical' | 'warning' | 'info';
30
+ description: string;
31
+ fixed: boolean;
32
+ file?: string;
33
+ }>;
34
+ };
35
+ /**
36
+ * Read and validate a gate result JSON file written by review/verify agents.
37
+ * Falls back to DEFAULT_GATE if the file doesn't exist or is invalid.
38
+ */
39
+ export declare function readGateResult(gateFile: string): GateResult;
40
+ /**
41
+ * Format gate findings into a prompt section for the implementer.
42
+ */
43
+ export declare function formatGateFindings(gate: GateResult, gateType: string): string;
3
44
  export type PipelineResult = {
4
45
  issueNum: number;
5
46
  title: string;
6
47
  status: 'success' | 'failure';
48
+ /** Why the issue failed — 'transient' means re-queue (e.g. usage limit), 'permanent' means label failed. */
49
+ failureReason?: 'transient' | 'permanent';
7
50
  prUrl?: string;
8
51
  testsPassing: boolean;
9
52
  verifyPassing: boolean;
53
+ verifySkipped: boolean;
10
54
  duration: number;
11
55
  filesChanged: number;
12
56
  };