@lesliechan721/agent-skill-eval 0.1.0-beta.7 → 0.1.0-beta.9

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 (98) hide show
  1. package/dist/bin.js +149 -39
  2. package/dist/bin.js.map +1 -1
  3. package/dist/codex-eval-app-server.d.ts +199 -0
  4. package/dist/codex-eval-app-server.js +1366 -0
  5. package/dist/codex-eval-app-server.js.map +1 -0
  6. package/dist/codex-eval-cases.d.ts +43 -0
  7. package/dist/codex-eval-cases.js +327 -0
  8. package/dist/codex-eval-cases.js.map +1 -0
  9. package/dist/codex-eval-isolation.d.ts +61 -0
  10. package/dist/codex-eval-isolation.js +318 -0
  11. package/dist/codex-eval-isolation.js.map +1 -0
  12. package/dist/codex-eval-process-tree.d.ts +38 -0
  13. package/dist/codex-eval-process-tree.js +803 -0
  14. package/dist/codex-eval-process-tree.js.map +1 -0
  15. package/dist/codex-eval-runtime-config.d.ts +43 -0
  16. package/dist/codex-eval-runtime-config.js +607 -0
  17. package/dist/codex-eval-runtime-config.js.map +1 -0
  18. package/dist/codex-trigger-eval.d.ts +82 -0
  19. package/dist/codex-trigger-eval.js +789 -0
  20. package/dist/codex-trigger-eval.js.map +1 -0
  21. package/dist/codex-workflow.d.ts +188 -0
  22. package/dist/codex-workflow.js +1790 -0
  23. package/dist/codex-workflow.js.map +1 -0
  24. package/dist/credentials.d.ts +5 -0
  25. package/dist/credentials.js +30 -0
  26. package/dist/credentials.js.map +1 -0
  27. package/dist/custom-process.d.ts +58 -0
  28. package/dist/custom-process.js +409 -0
  29. package/dist/custom-process.js.map +1 -0
  30. package/dist/eval-audit.d.ts +38 -0
  31. package/dist/eval-audit.js +71 -0
  32. package/dist/eval-audit.js.map +1 -0
  33. package/dist/eval-file.d.ts +9 -0
  34. package/dist/eval-file.js +15 -0
  35. package/dist/eval-file.js.map +1 -0
  36. package/dist/eval-result.d.ts +64 -0
  37. package/dist/eval-result.js +144 -0
  38. package/dist/eval-result.js.map +1 -0
  39. package/dist/eval-run.d.ts +23 -0
  40. package/dist/eval-run.js +539 -0
  41. package/dist/eval-run.js.map +1 -0
  42. package/dist/eval-spec.d.ts +57 -0
  43. package/dist/eval-spec.js +120 -0
  44. package/dist/eval-spec.js.map +1 -0
  45. package/dist/eval-suite-binding.d.ts +4 -0
  46. package/dist/eval-suite-binding.js +19 -0
  47. package/dist/eval-suite-binding.js.map +1 -0
  48. package/dist/index.d.ts +34 -9
  49. package/dist/index.js +18 -6
  50. package/dist/index.js.map +1 -1
  51. package/dist/json-schema.js +75 -5
  52. package/dist/json-schema.js.map +1 -1
  53. package/dist/output-path.js +2 -2
  54. package/dist/process-tree.d.ts +19 -1
  55. package/dist/process-tree.js +321 -66
  56. package/dist/process-tree.js.map +1 -1
  57. package/dist/process.d.ts +0 -2
  58. package/dist/process.js +76 -25
  59. package/dist/process.js.map +1 -1
  60. package/dist/provider-doctor.d.ts +33 -0
  61. package/dist/provider-doctor.js +86 -0
  62. package/dist/provider-doctor.js.map +1 -0
  63. package/dist/providers.d.ts +82 -0
  64. package/dist/providers.js +630 -0
  65. package/dist/providers.js.map +1 -0
  66. package/dist/run-paths.d.ts +8 -0
  67. package/dist/run-paths.js +71 -0
  68. package/dist/run-paths.js.map +1 -0
  69. package/dist/runtime-skill.d.ts +6 -0
  70. package/dist/runtime-skill.js +87 -3
  71. package/dist/runtime-skill.js.map +1 -1
  72. package/dist/schemas/digests.json +3 -3
  73. package/dist/schemas/eval-audit.schema.json +64 -0
  74. package/dist/schemas/eval-result.schema.json +202 -0
  75. package/dist/schemas/eval-spec.schema.json +109 -0
  76. package/dist/schemas.d.ts +1 -3
  77. package/dist/schemas.js +0 -17
  78. package/dist/schemas.js.map +1 -1
  79. package/dist/selected-cases.d.ts +30 -0
  80. package/dist/selected-cases.js +388 -0
  81. package/dist/selected-cases.js.map +1 -0
  82. package/dist/types.d.ts +2 -34
  83. package/package.json +6 -1
  84. package/dist/bundle.d.ts +0 -93
  85. package/dist/bundle.js +0 -216
  86. package/dist/bundle.js.map +0 -1
  87. package/dist/capabilities.d.ts +0 -2
  88. package/dist/capabilities.js +0 -38
  89. package/dist/capabilities.js.map +0 -1
  90. package/dist/plan.d.ts +0 -79
  91. package/dist/plan.js +0 -285
  92. package/dist/plan.js.map +0 -1
  93. package/dist/run.d.ts +0 -2
  94. package/dist/run.js +0 -592
  95. package/dist/run.js.map +0 -1
  96. package/dist/schemas/aw-skill-eval-execution-plan.schema.json +0 -220
  97. package/dist/schemas/eval-run-bundle.schema.json +0 -408
  98. package/dist/schemas/eval-runtime-capabilities.schema.json +0 -85
@@ -0,0 +1,539 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import process from 'node:process';
5
+ import fs from 'fs-extra';
6
+ import { sha256, toPosixRelative } from './common.js';
7
+ import { credentialValues, redactSecrets } from './credentials.js';
8
+ import { CODEX_PROVIDER_ENVIRONMENT_ALLOWLIST, executeCustomProcessProvider, } from './custom-process.js';
9
+ import { validateEvalAuditFile } from './eval-audit.js';
10
+ import { computeEvalResultSummary, createEvalResultBinding, validateEvalResult, } from './eval-result.js';
11
+ import { validateEvalSpecFile } from './eval-spec.js';
12
+ import { assertEvalProviderSuiteKind } from './eval-suite-binding.js';
13
+ import { runBuiltinEvalProvider, } from './providers.js';
14
+ import { resolveCodexEvalRuntimeConfig } from './codex-eval-runtime-config.js';
15
+ import { ProviderProcessCleanupError } from './process.js';
16
+ import { executeCodexWorkflowProvider, } from './codex-workflow.js';
17
+ import { computeCanonicalDirectoryDigest, computeSkillDigest } from './runtime-skill.js';
18
+ import { parseSelectedCases, } from './selected-cases.js';
19
+ class BoundInputChangedError extends Error {
20
+ }
21
+ function secretValues(sourceEnv) {
22
+ return credentialValues(sourceEnv, CODEX_PROVIDER_ENVIRONMENT_ALLOWLIST);
23
+ }
24
+ function redactText(value, secrets) {
25
+ return redactSecrets(value, secrets);
26
+ }
27
+ function redactValue(value, secrets) {
28
+ if (typeof value === 'string')
29
+ return redactText(value, secrets);
30
+ if (Array.isArray(value))
31
+ return value.map((entry) => redactValue(entry, secrets));
32
+ if (value && typeof value === 'object') {
33
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
34
+ redactText(key, secrets),
35
+ redactValue(entry, secrets),
36
+ ]));
37
+ }
38
+ return value;
39
+ }
40
+ async function inputDigests(calculated) {
41
+ return {
42
+ workspace: await computeCanonicalDirectoryDigest(calculated.paths.workspace),
43
+ target: await computeSkillDigest(calculated.paths.target),
44
+ cases: sha256(await readFile(calculated.paths.cases)),
45
+ previousTarget: calculated.paths.previousTarget
46
+ ? await computeSkillDigest(calculated.paths.previousTarget)
47
+ : null,
48
+ };
49
+ }
50
+ function sameDigests(left, right) {
51
+ return left.workspace === right.workspace &&
52
+ left.target === right.target &&
53
+ left.cases === right.cases &&
54
+ left.previousTarget === right.previousTarget;
55
+ }
56
+ async function assertInputsUnchanged(calculated, captured) {
57
+ let current;
58
+ try {
59
+ current = await inputDigests(calculated);
60
+ }
61
+ catch (error) {
62
+ throw new BoundInputChangedError(`Prepared Eval input changed: ${error.message}`);
63
+ }
64
+ if (!sameDigests(captured, current) || !digestsMatchSpec(calculated, current)) {
65
+ throw new BoundInputChangedError('Prepared Eval input digest changed or no longer matches EvalSpec digests.');
66
+ }
67
+ }
68
+ function digestsMatchSpec(calculated, digests) {
69
+ return digests.workspace === calculated.workspaceDigest
70
+ && digests.workspace === calculated.spec.workspace.digest
71
+ && digests.target === calculated.targetDigest
72
+ && digests.cases === calculated.caseDigest
73
+ && digests.previousTarget === calculated.previousTargetDigest;
74
+ }
75
+ function assertDigestsMatchSpec(calculated, digests) {
76
+ if (!digestsMatchSpec(calculated, digests)) {
77
+ throw new BoundInputChangedError('Prepared Eval input no longer matches EvalSpec digests.');
78
+ }
79
+ }
80
+ function triggerProviderCase(document, evalCase) {
81
+ if (!document.suite.providerSuite || !evalCase.providerCase) {
82
+ throw new Error('Selected trigger case has no canonical provider form.');
83
+ }
84
+ return {
85
+ suite: document.suite.providerSuite,
86
+ value: evalCase.providerCase,
87
+ };
88
+ }
89
+ export function adaptConversationProviderCase(document, evalCase) {
90
+ const participants = [...new Set([
91
+ document.suite.unitUnderTest,
92
+ ...(document.suite.participants ?? []),
93
+ ])];
94
+ const assertions = evalCase.assertions;
95
+ const input = evalCase.input && typeof evalCase.input === 'object' && !Array.isArray(evalCase.input)
96
+ ? evalCase.input
97
+ : {};
98
+ const expected = evalCase.expected && typeof evalCase.expected === 'object' && !Array.isArray(evalCase.expected)
99
+ ? evalCase.expected
100
+ : {};
101
+ const audit = evalCase.audit && typeof evalCase.audit === 'object' && !Array.isArray(evalCase.audit)
102
+ ? evalCase.audit
103
+ : null;
104
+ const workspaceUnchanged = expected.workspaceUnchanged === undefined
105
+ ? true
106
+ : expected.workspaceUnchanged;
107
+ const scriptedReplies = Array.isArray(input.scriptedReplies)
108
+ ? input.scriptedReplies.map((reply) => {
109
+ if (typeof reply === 'string')
110
+ return reply;
111
+ const row = reply;
112
+ return {
113
+ answers_by_index: row.answersByIndex,
114
+ ...(row.expectedQuestionCount === undefined
115
+ ? {}
116
+ : { expected_question_count: row.expectedQuestionCount }),
117
+ unexpected_question_answer: row.unexpectedQuestionAnswer,
118
+ };
119
+ })
120
+ : [];
121
+ const workspaceFiles = input.workspaceFiles && typeof input.workspaceFiles === 'object'
122
+ && !Array.isArray(input.workspaceFiles)
123
+ ? input.workspaceFiles
124
+ : {};
125
+ const allowedWorkspaceChanges = Array.isArray(expected.allowedWorkspaceChanges)
126
+ ? expected.allowedWorkspaceChanges
127
+ : [];
128
+ const artifacts = Array.isArray(expected.artifacts)
129
+ ? expected.artifacts.map((artifact) => {
130
+ const row = artifact;
131
+ const { notContains, ...providerArtifact } = row;
132
+ return {
133
+ ...providerArtifact,
134
+ ...(Object.hasOwn(row, 'notContains') ? { not_contains: notContains } : {}),
135
+ };
136
+ })
137
+ : [];
138
+ return {
139
+ value: {
140
+ id: evalCase.id,
141
+ prompt: evalCase.prompt,
142
+ scripted_replies: scriptedReplies,
143
+ expected_output: expected.output ?? 'Evaluate the response against the approved assertions.',
144
+ ...(Object.keys(workspaceFiles).length > 0 ? { workspace_files: workspaceFiles } : {}),
145
+ ...(Array.isArray(input.pathPrepend) && input.pathPrepend.length > 0
146
+ ? { environment: { pathPrepend: input.pathPrepend } }
147
+ : {}),
148
+ sandbox: workspaceUnchanged === false ? 'workspace-write' : 'read-only',
149
+ review: {
150
+ checks: assertions,
151
+ workspace_unchanged: workspaceUnchanged,
152
+ ...(allowedWorkspaceChanges.length > 0
153
+ ? { allowed_workspace_changes: allowedWorkspaceChanges }
154
+ : {}),
155
+ ...(artifacts.length > 0 ? { artifacts } : {}),
156
+ },
157
+ },
158
+ skillName: document.suite.unitUnderTest,
159
+ skillNames: participants,
160
+ isolation: document.suite.runtime?.isolation === 'strict' ? 'strict' : 'standard',
161
+ suitePathPrepend: document.suite.runtime?.pathPrepend ?? [],
162
+ assertions,
163
+ ...(audit && Object.hasOwn(audit, 'allowedVariance')
164
+ ? { allowedVariance: audit.allowedVariance }
165
+ : {}),
166
+ };
167
+ }
168
+ function providerCase(document, evalCase) {
169
+ if (document.suite.kind === 'trigger')
170
+ return triggerProviderCase(document, evalCase);
171
+ if (document.suite.kind === 'conversation')
172
+ return adaptConversationProviderCase(document, evalCase);
173
+ return evalCase;
174
+ }
175
+ async function prepareAttempt(options) {
176
+ const attemptRoot = path.join(options.calculated.paths.outputDir, 'runs', options.caseId, options.variant, `attempt-${options.attempt}`);
177
+ const workspacePath = path.join(attemptRoot, 'workspace', 'subject');
178
+ const fixturesPath = path.join(attemptRoot, 'workspace', 'eval');
179
+ const runOutput = path.join(attemptRoot, 'output');
180
+ await fs.ensureDir(path.dirname(attemptRoot));
181
+ await mkdir(attemptRoot);
182
+ try {
183
+ await mkdir(path.join(attemptRoot, 'workspace'));
184
+ await fs.copy(path.join(options.snapshot.workspace, 'subject'), workspacePath, {
185
+ dereference: false,
186
+ overwrite: false,
187
+ errorOnExist: true,
188
+ });
189
+ await fs.copy(path.join(options.snapshot.workspace, 'eval'), fixturesPath, {
190
+ dereference: false,
191
+ overwrite: false,
192
+ errorOnExist: true,
193
+ });
194
+ await mkdir(runOutput);
195
+ }
196
+ catch (error) {
197
+ await fs.remove(attemptRoot);
198
+ throw error;
199
+ }
200
+ const target = options.variant === 'current'
201
+ ? options.snapshot.currentTarget
202
+ : options.variant === 'previous-version'
203
+ ? options.snapshot.previousTarget
204
+ : null;
205
+ if (target) {
206
+ try {
207
+ const destination = path.join(workspacePath, '.agents', 'skills', options.document.suite.unitUnderTest);
208
+ if (await fs.pathExists(destination)) {
209
+ throw new Error('Prepared subject unexpectedly contains the unit-under-test Skill.');
210
+ }
211
+ await fs.ensureDir(path.dirname(destination));
212
+ await fs.copy(target, destination, {
213
+ dereference: false,
214
+ overwrite: false,
215
+ errorOnExist: true,
216
+ });
217
+ }
218
+ catch (error) {
219
+ await fs.remove(attemptRoot);
220
+ throw error;
221
+ }
222
+ }
223
+ return { attemptRoot, workspacePath, fixturesPath, runOutput };
224
+ }
225
+ async function createRunInputSnapshot(calculated, captured, casesBytes) {
226
+ const root = path.join(calculated.paths.outputDir, '.run-input');
227
+ const workspace = path.join(root, 'workspace');
228
+ const currentTarget = path.join(root, 'targets', 'current');
229
+ const previousTarget = calculated.paths.previousTarget
230
+ ? path.join(root, 'targets', 'previous')
231
+ : null;
232
+ const cases = path.join(root, 'cases.json');
233
+ await mkdir(root);
234
+ try {
235
+ await mkdir(workspace);
236
+ await mkdir(path.join(root, 'targets'));
237
+ await fs.copy(path.join(calculated.paths.workspace, 'subject'), path.join(workspace, 'subject'), {
238
+ dereference: false,
239
+ overwrite: false,
240
+ errorOnExist: true,
241
+ });
242
+ await fs.copy(path.join(calculated.paths.workspace, 'eval'), path.join(workspace, 'eval'), {
243
+ dereference: false,
244
+ overwrite: false,
245
+ errorOnExist: true,
246
+ });
247
+ await fs.copy(calculated.paths.target, currentTarget, {
248
+ dereference: false,
249
+ overwrite: false,
250
+ errorOnExist: true,
251
+ });
252
+ await writeFile(cases, casesBytes, { flag: 'wx', mode: 0o600 });
253
+ if (calculated.paths.previousTarget && previousTarget) {
254
+ await fs.copy(calculated.paths.previousTarget, previousTarget, {
255
+ dereference: false,
256
+ overwrite: false,
257
+ errorOnExist: true,
258
+ });
259
+ }
260
+ const snapshotDigests = {
261
+ workspace: await computeCanonicalDirectoryDigest(workspace),
262
+ target: await computeSkillDigest(currentTarget),
263
+ cases: sha256(await readFile(cases)),
264
+ previousTarget: previousTarget ? await computeSkillDigest(previousTarget) : null,
265
+ };
266
+ if (!sameDigests(captured, snapshotDigests)) {
267
+ throw new BoundInputChangedError('Run input snapshot does not match the prepared Eval input.');
268
+ }
269
+ assertDigestsMatchSpec(calculated, snapshotDigests);
270
+ return { root, workspace, currentTarget, previousTarget, cases };
271
+ }
272
+ catch (error) {
273
+ await fs.remove(root);
274
+ throw error;
275
+ }
276
+ }
277
+ async function assertSnapshotUnchanged(calculated, snapshot, captured) {
278
+ const current = {
279
+ workspace: await computeCanonicalDirectoryDigest(snapshot.workspace),
280
+ target: await computeSkillDigest(snapshot.currentTarget),
281
+ cases: sha256(await readFile(snapshot.cases)),
282
+ previousTarget: snapshot.previousTarget
283
+ ? await computeSkillDigest(snapshot.previousTarget)
284
+ : null,
285
+ };
286
+ if (!sameDigests(captured, current) || !digestsMatchSpec(calculated, current)) {
287
+ throw new BoundInputChangedError('Run input snapshot digest changed or no longer matches EvalSpec digests.');
288
+ }
289
+ }
290
+ function isTimeout(error) {
291
+ return /timed out|timeout/u.test(error instanceof Error ? error.message : String(error));
292
+ }
293
+ function isCleanupFailure(error) {
294
+ return error instanceof ProviderProcessCleanupError ||
295
+ /cleanup|termination|process-tree/u.test(error instanceof Error ? error.message : String(error));
296
+ }
297
+ function abortError() {
298
+ return new Error('Eval execution was aborted.');
299
+ }
300
+ async function writeResultSafely(resultPath, result, binding) {
301
+ const validation = await validateEvalResult(result, binding);
302
+ if (!validation.valid)
303
+ throw new Error(`Generated EvalResult is invalid: ${validation.errors.join('; ')}`);
304
+ if (await fs.pathExists(resultPath))
305
+ throw new Error('Eval result.json already exists.');
306
+ const bytes = Buffer.from(`${JSON.stringify(result, null, 2)}\n`);
307
+ const temporary = path.join(path.dirname(resultPath), `.result.${randomUUID()}.tmp`);
308
+ await writeFile(temporary, bytes, { flag: 'wx', mode: 0o600 });
309
+ try {
310
+ if (await fs.pathExists(resultPath))
311
+ throw new Error('Eval result.json appeared before commit.');
312
+ await rename(temporary, resultPath);
313
+ }
314
+ catch (error) {
315
+ await fs.remove(temporary).catch(() => undefined);
316
+ throw error;
317
+ }
318
+ return sha256(bytes);
319
+ }
320
+ export async function runEvalSpec(specPath, options) {
321
+ if (!options?.auditPath)
322
+ throw new Error('Eval execution requires auditPath.');
323
+ const specValidation = await validateEvalSpecFile(specPath);
324
+ if (!specValidation.valid || !specValidation.calculated) {
325
+ throw new Error(`EvalSpec is invalid: ${specValidation.errors.join('; ')}`);
326
+ }
327
+ const calculated = specValidation.calculated;
328
+ const specRoot = await fs.realpath(path.dirname(path.resolve(specPath)));
329
+ const casesBytes = await readFile(calculated.paths.cases);
330
+ if (sha256(casesBytes) !== calculated.caseDigest) {
331
+ throw new BoundInputChangedError('Selected cases changed after EvalSpec validation.');
332
+ }
333
+ const document = parseSelectedCases(JSON.parse(casesBytes.toString('utf8')));
334
+ if (document.suite.unitUnderTest !== calculated.spec.source.skill) {
335
+ throw new Error('Selected cases unitUnderTest does not match EvalSpec source.skill.');
336
+ }
337
+ assertEvalProviderSuiteKind(calculated.spec.provider, document.suite.kind);
338
+ const selectedCaseIds = document.cases.map((entry) => entry.id);
339
+ const auditValidation = await validateEvalAuditFile(options.auditPath, {
340
+ spec: calculated.spec,
341
+ selectedCaseIds,
342
+ });
343
+ if (!auditValidation.valid || !auditValidation.calculated) {
344
+ throw new Error(`EvalAudit does not admit execution: ${auditValidation.errors.join('; ')}`);
345
+ }
346
+ const resultBinding = createEvalResultBinding(calculated, auditValidation.calculated.auditDigest, document);
347
+ const captured = await inputDigests(calculated);
348
+ assertDigestsMatchSpec(calculated, captured);
349
+ await assertInputsUnchanged(calculated, captured);
350
+ const sourceEnv = options.sourceEnv
351
+ ?? options.builtinProviderDependencies?.sourceEnv
352
+ ?? process.env;
353
+ const runtime = await resolveCodexEvalRuntimeConfig({
354
+ sourceEnv,
355
+ inheritUserConfig: true,
356
+ modelOverride: options.builtinProviderDependencies?.model
357
+ ?? sourceEnv.AW_SKILL_EVAL_CODEX_MODEL,
358
+ });
359
+ const secrets = () => [
360
+ ...secretValues(sourceEnv),
361
+ ...runtime.sensitiveValues,
362
+ ];
363
+ const builtinProviderDependencies = {
364
+ ...options.builtinProviderDependencies,
365
+ sourceEnv,
366
+ model: runtime.model ?? undefined,
367
+ codexRuntime: runtime,
368
+ };
369
+ const startedAt = new Date().toISOString();
370
+ const runs = [];
371
+ let stop = false;
372
+ await assertInputsUnchanged(calculated, captured);
373
+ await fs.ensureDir(path.dirname(calculated.paths.outputDir));
374
+ await mkdir(calculated.paths.outputDir);
375
+ let snapshot;
376
+ try {
377
+ snapshot = await createRunInputSnapshot(calculated, captured, casesBytes);
378
+ }
379
+ catch (error) {
380
+ await fs.remove(calculated.paths.outputDir);
381
+ throw error;
382
+ }
383
+ for (const evalCase of document.cases) {
384
+ if (stop)
385
+ break;
386
+ for (const variant of resultBinding.allowedVariants) {
387
+ if (stop)
388
+ break;
389
+ for (let attempt = 1; attempt <= calculated.spec.runs; attempt += 1) {
390
+ const attemptStarted = Date.now();
391
+ let status = 'failed';
392
+ let usage = null;
393
+ let grade = null;
394
+ let error = null;
395
+ let artifacts;
396
+ let runOutput = path.join(calculated.paths.outputDir, 'runs', evalCase.id, variant, `attempt-${attempt}`, 'output');
397
+ try {
398
+ if (options.signal?.aborted)
399
+ throw abortError();
400
+ await assertInputsUnchanged(calculated, captured);
401
+ await assertSnapshotUnchanged(calculated, snapshot, captured);
402
+ const prepared = await prepareAttempt({
403
+ calculated,
404
+ snapshot,
405
+ document,
406
+ caseId: evalCase.id,
407
+ variant,
408
+ attempt,
409
+ });
410
+ runOutput = prepared.runOutput;
411
+ const input = {
412
+ case: providerCase(document, evalCase),
413
+ variant,
414
+ attempt,
415
+ workspacePath: prepared.workspacePath,
416
+ fixturesPath: prepared.fixturesPath,
417
+ outputDir: prepared.runOutput,
418
+ timeoutMs: calculated.spec.timeoutMs,
419
+ ...(options.signal ? { signal: options.signal } : {}),
420
+ };
421
+ const providerResult = typeof calculated.spec.provider === 'string'
422
+ ? await (options.runBuiltinProvider ?? runBuiltinEvalProvider)(calculated.spec.provider, { ...input, evalRoot: prepared.attemptRoot }, builtinProviderDependencies)
423
+ : calculated.spec.provider.type === 'custom-process'
424
+ ? await (options.executeCustomProvider ?? executeCustomProcessProvider)({
425
+ command: calculated.spec.provider.command,
426
+ evalRoot: prepared.attemptRoot,
427
+ input,
428
+ sourceEnv,
429
+ codexRuntime: runtime,
430
+ })
431
+ : await (options.executeCodexWorkflowProvider ?? executeCodexWorkflowProvider)({
432
+ provider: {
433
+ ...calculated.spec.provider,
434
+ command: calculated.spec.provider.command,
435
+ },
436
+ evalRoot: prepared.attemptRoot,
437
+ input,
438
+ sourceEnv,
439
+ codexRuntime: runtime,
440
+ codexBin: builtinProviderDependencies.codexBin,
441
+ });
442
+ if (options.signal?.aborted)
443
+ throw abortError();
444
+ const sanitized = redactValue(providerResult, secrets());
445
+ usage = sanitized.usage === null ? null : { ...sanitized.usage };
446
+ grade = sanitized.grade;
447
+ artifacts = typeof calculated.spec.provider === 'object'
448
+ && calculated.spec.provider.type === 'codex-workflow'
449
+ && sanitized.artifacts
450
+ ? [
451
+ ...sanitized.artifacts.map((artifact) => ({ ...artifact })),
452
+ { path: 'provider-result.json', role: 'result' },
453
+ ]
454
+ : undefined;
455
+ await writeFile(path.join(prepared.runOutput, 'provider-result.json'), `${JSON.stringify(sanitized, null, 2)}\n`, { flag: 'wx' });
456
+ status = 'completed';
457
+ }
458
+ catch (caught) {
459
+ status = isTimeout(caught) ? 'timeout' : 'failed';
460
+ usage = null;
461
+ grade = null;
462
+ artifacts = undefined;
463
+ error = { message: redactText(caught instanceof Error ? caught.message : String(caught), secrets()) || 'Provider failed.' };
464
+ if (options.signal?.aborted
465
+ || caught instanceof BoundInputChangedError
466
+ || isCleanupFailure(caught)
467
+ || status === 'timeout'
468
+ || (typeof calculated.spec.provider === 'object'
469
+ && calculated.spec.provider.type === 'codex-workflow'))
470
+ stop = true;
471
+ }
472
+ try {
473
+ await assertInputsUnchanged(calculated, captured);
474
+ await assertSnapshotUnchanged(calculated, snapshot, captured);
475
+ }
476
+ catch (changed) {
477
+ status = 'failed';
478
+ usage = null;
479
+ grade = null;
480
+ artifacts = undefined;
481
+ error = { message: redactText(changed.message, secrets()) };
482
+ stop = true;
483
+ }
484
+ runs.push({
485
+ caseId: evalCase.id,
486
+ variant,
487
+ attempt,
488
+ status,
489
+ durationMs: Math.max(0, Date.now() - attemptStarted),
490
+ outputDir: toPosixRelative(specRoot, runOutput),
491
+ usage,
492
+ grade,
493
+ error,
494
+ ...(artifacts ? { artifacts } : {}),
495
+ });
496
+ if (stop)
497
+ break;
498
+ }
499
+ }
500
+ }
501
+ try {
502
+ await assertInputsUnchanged(calculated, captured);
503
+ await assertSnapshotUnchanged(calculated, snapshot, captured);
504
+ }
505
+ catch (changed) {
506
+ if (runs.length === 0)
507
+ throw changed;
508
+ const last = runs[runs.length - 1];
509
+ last.status = 'failed';
510
+ last.usage = null;
511
+ last.grade = null;
512
+ delete last.artifacts;
513
+ last.error = { message: redactText(changed.message, secrets()) };
514
+ }
515
+ if (options.signal?.aborted && runs.length > 0) {
516
+ const last = runs[runs.length - 1];
517
+ last.status = 'failed';
518
+ last.usage = null;
519
+ last.grade = null;
520
+ delete last.artifacts;
521
+ last.error = { message: abortError().message };
522
+ }
523
+ const result = {
524
+ version: 1,
525
+ specDigest: calculated.specDigest,
526
+ auditDigest: auditValidation.calculated.auditDigest,
527
+ targetDigest: calculated.targetDigest,
528
+ caseDigest: calculated.caseDigest,
529
+ provider: calculated.spec.provider,
530
+ startedAt,
531
+ finishedAt: new Date().toISOString(),
532
+ runs,
533
+ summary: computeEvalResultSummary(runs),
534
+ };
535
+ const resultPath = path.join(calculated.paths.outputDir, 'result.json');
536
+ const resultDigest = await writeResultSafely(resultPath, result, resultBinding);
537
+ return { valid: true, resultPath, resultDigest, result };
538
+ }
539
+ //# sourceMappingURL=eval-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-run.js","sourceRoot":"","sources":["../src/eval-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { Digest, ValidationResult } from './types.js';
2
+ export type EvalProvider = 'codex-trigger' | 'codex-conversation' | {
3
+ type: 'custom-process';
4
+ command: string[];
5
+ } | {
6
+ type: 'codex-workflow';
7
+ command: string[];
8
+ allowedModels: string[];
9
+ };
10
+ export interface EvalSpecPathDigest {
11
+ path: string;
12
+ digest: Digest;
13
+ }
14
+ export type EvalBaseline = {
15
+ type: 'none';
16
+ } | {
17
+ type: 'without-skill';
18
+ } | {
19
+ type: 'previous-version';
20
+ target: EvalSpecPathDigest;
21
+ };
22
+ export interface EvalSpec {
23
+ version: 1;
24
+ source: {
25
+ plugin: string;
26
+ skill: string;
27
+ suite: string;
28
+ profile: string;
29
+ };
30
+ workspace: EvalSpecPathDigest;
31
+ target: EvalSpecPathDigest;
32
+ cases: EvalSpecPathDigest;
33
+ provider: EvalProvider;
34
+ runs: number;
35
+ timeoutMs: number;
36
+ baseline: EvalBaseline;
37
+ outputDir: string;
38
+ }
39
+ export interface EvalSpecCalculated {
40
+ spec: EvalSpec;
41
+ specDigest: Digest;
42
+ workspaceDigest: Digest;
43
+ providerDigest: Digest;
44
+ targetDigest: Digest;
45
+ caseDigest: Digest;
46
+ previousTargetDigest: Digest | null;
47
+ paths: {
48
+ workspace: string;
49
+ target: string;
50
+ cases: string;
51
+ previousTarget: string | null;
52
+ outputDir: string;
53
+ };
54
+ }
55
+ export declare function validateEvalSpec(value: unknown): Promise<ValidationResult<EvalSpec>>;
56
+ export declare function parseEvalSpec(value: unknown): Promise<EvalSpec>;
57
+ export declare function validateEvalSpecFile(specPath: string): Promise<ValidationResult<EvalSpecCalculated>>;