@lesliechan721/agent-skill-eval 0.1.0-beta.27 → 0.1.0-beta.29

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-workflow-evaluation.js","sourceRoot":"","sources":["../src/codex-workflow-evaluation.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { type CodexEvalProcessManagementEvidence } from './codex-eval-app-server
2
2
  import { type CodexEvalRuntimeConfig } from './codex-eval-runtime-config.js';
3
3
  import type { ProcessTreeDependencies } from './process-tree.js';
4
4
  import { type EvalProviderRunInput, type EvalProviderRunResult } from './custom-process.js';
5
+ import { type WorkflowEvaluationRequest } from './codex-workflow-evaluation.js';
5
6
  export declare const CODEX_WORKFLOW_ARTIFACTS: readonly [{
6
7
  readonly path: "workflow-evidence.json";
7
8
  readonly role: "evidence";
@@ -29,6 +30,7 @@ export interface CodexWorkflowRequest {
29
30
  model: string | null;
30
31
  developerInstructions: string;
31
32
  roles: CodexWorkflowRole[];
33
+ evaluation?: WorkflowEvaluationRequest;
32
34
  multiAgent: {
33
35
  protocol: 'v1' | 'v2';
34
36
  maxDepth: number;
@@ -120,6 +122,7 @@ export interface CodexWorkflowEvidence {
120
122
  cleanup: {
121
123
  isolatedCodexHomeRemoved: true;
122
124
  };
125
+ evaluation?: Record<string, unknown>;
123
126
  }
124
127
  export interface CodexWorkflowExecutionResult {
125
128
  evidence: CodexWorkflowEvidence;
@@ -136,6 +139,7 @@ export interface CodexWorkflowTransportInput {
136
139
  sourceEnv: NodeJS.ProcessEnv;
137
140
  timeoutMs: number;
138
141
  processManagement: CodexEvalProcessManagementEvidence;
142
+ protectedEvalRoots?: readonly string[];
139
143
  signal?: AbortSignal;
140
144
  }
141
145
  export interface CodexWorkflowTransport {
@@ -152,6 +156,7 @@ export interface CodexWorkflowExecutorOptions {
152
156
  processTree?: ProcessTreeDependencies;
153
157
  processManagement?: CodexEvalProcessManagementEvidence;
154
158
  transport?: CodexWorkflowTransport;
159
+ protectedEvalRoots?: readonly string[];
155
160
  }
156
161
  export declare function parseCodexWorkflowRequest(value: unknown, allowedModels: readonly string[], workspace: string): Promise<CodexWorkflowRequest>;
157
162
  export declare function codexWorkflowAdapterEnvironment(sourceEnv: NodeJS.ProcessEnv, evalRoot: string, phase: 'prepare' | 'grade'): NodeJS.ProcessEnv;
@@ -2,12 +2,14 @@ import { createHash } from 'node:crypto';
2
2
  import path from 'node:path';
3
3
  import process from 'node:process';
4
4
  import fs from 'fs-extra';
5
- import { CodexEvalAttemptControl, EvalAppServerSession, extractAppServerThreadId, } from './codex-eval-app-server.js';
5
+ import { CodexEvalAttemptControl, EvalAppServerSession, extractAppServerThreadId, assertHostReadContainmentAvailable, hostReadContainmentProfile, } from './codex-eval-app-server.js';
6
6
  import { applyCodexEvalProviderEnvironment, createCodexEvalTemporaryRoot, materializeCodexEvalRuntimeHome, redactCodexEvalValue, } from './codex-eval-runtime-config.js';
7
7
  import { applyCodexEvalGitIsolation } from './codex-eval-isolation.js';
8
8
  import { runProviderProcess } from './process.js';
9
9
  import { assertProviderRunPaths } from './run-paths.js';
10
10
  import { parseEvalProviderGrade, } from './custom-process.js';
11
+ import { createCodexGrader, parseConversationGraderOutput } from './providers.js';
12
+ import { parseWorkflowEvaluation, normalizeWorkflowChecks, WorkflowEvaluation, } from './codex-workflow-evaluation.js';
11
13
  const MAX_ADAPTER_OUTPUT_BYTES = 4 * 1024 * 1024;
12
14
  const MAX_REQUEST_TEXT_BYTES = 200_000;
13
15
  const MAX_ROLE_COUNT = 32;
@@ -71,7 +73,7 @@ async function assertWorkspaceRoleFile(workspace, relative) {
71
73
  export async function parseCodexWorkflowRequest(value, allowedModels, workspace) {
72
74
  if (!isRecord(value))
73
75
  throw new Error('workflow prepare stdout must be one JSON object.');
74
- exactKeys(value, ['version', 'prompt', 'sandbox', 'model', 'developerInstructions', 'roles', 'multiAgent'], [], 'workflow prepare stdout');
76
+ exactKeys(value, ['version', 'prompt', 'sandbox', 'model', 'developerInstructions', 'roles', 'multiAgent'], ['evaluation'], 'workflow prepare stdout');
75
77
  if (value.version !== 1)
76
78
  throw new Error('workflow prepare stdout version must be 1.');
77
79
  if (value.sandbox !== 'read-only' && value.sandbox !== 'workspace-write') {
@@ -126,6 +128,7 @@ export async function parseCodexWorkflowRequest(value, allowedModels, workspace)
126
128
  model: value.model,
127
129
  developerInstructions: boundedString(value.developerInstructions, 'workflow request developerInstructions', MAX_REQUEST_TEXT_BYTES),
128
130
  roles,
131
+ ...(value.evaluation === undefined ? {} : { evaluation: parseWorkflowEvaluation(value.evaluation) }),
129
132
  multiAgent: {
130
133
  protocol: multiAgent.protocol,
131
134
  maxDepth: multiAgent.maxDepth,
@@ -1462,6 +1465,9 @@ export async function normalizeCodexWorkflowRollouts(options) {
1462
1465
  };
1463
1466
  }
1464
1467
  function sandboxPolicy(request) {
1468
+ // Opt-in evaluations use one outer OS profile; nesting Seatbelt is unreliable.
1469
+ if (request.evaluation)
1470
+ return { type: 'externalSandbox', networkAccess: 'enabled' };
1465
1471
  return request.sandbox === 'read-only'
1466
1472
  ? { type: 'readOnly', networkAccess: true }
1467
1473
  : {
@@ -1487,6 +1493,26 @@ const defaultTransport = {
1487
1493
  let codexHomeRemoved = false;
1488
1494
  const startedAt = Date.now();
1489
1495
  const frames = [];
1496
+ const judgeUsage = [];
1497
+ let judgeNumber = 0;
1498
+ const runGrader = input.request.evaluation ? createCodexGrader({
1499
+ sourceEnv: input.sourceEnv,
1500
+ codexRuntime: input.codexRuntime,
1501
+ codexBin: input.codexBin,
1502
+ ...(input.request.model ? { model: input.request.model } : {}),
1503
+ processManagement: input.processManagement,
1504
+ }) : undefined;
1505
+ const evaluation = input.request.evaluation ? new WorkflowEvaluation(input.request.evaluation, input.input.workspacePath, async (prompt) => {
1506
+ const outputDir = path.join(input.input.outputDir, 'workflow-judges', String(++judgeNumber));
1507
+ await fs.ensureDir(outputDir);
1508
+ const result = await runGrader({
1509
+ prompt, outputDir, timeoutMs: control.remaining('workflow semantic check'), signal: control.signal,
1510
+ });
1511
+ if (!result.mechanicalPassed)
1512
+ throw new Error('workflow semantic grader did not complete its read-only checks.');
1513
+ judgeUsage.push(result.usage);
1514
+ return parseConversationGraderOutput(result.output);
1515
+ }) : undefined;
1490
1516
  let removeHandler;
1491
1517
  let removeFailureHandler;
1492
1518
  try {
@@ -1498,6 +1524,15 @@ const defaultTransport = {
1498
1524
  }),
1499
1525
  ]);
1500
1526
  const before = await snapshotWorkspace(input.input.workspacePath);
1527
+ let containment;
1528
+ if (evaluation) {
1529
+ containment = hostReadContainmentProfile({
1530
+ forbiddenHostRoots: [input.input.fixturesPath, input.input.outputDir],
1531
+ writableRoots: [temporaryRoot.root, input.input.workspacePath],
1532
+ unwritableRoots: input.request.sandbox === 'read-only' ? [input.input.workspacePath] : [],
1533
+ }) + '\n' + [...new Set([input.evalRoot, ...(input.protectedEvalRoots ?? [])])].map((root) => `(deny file-read* (require-all (subpath ${JSON.stringify(root)}) (require-not (subpath ${JSON.stringify(input.input.workspacePath)}))))`).join('\n');
1534
+ await assertHostReadContainmentAvailable(containment);
1535
+ }
1501
1536
  session = new EvalAppServerSession({
1502
1537
  codexBin: input.codexBin,
1503
1538
  cwd: input.input.workspacePath,
@@ -1507,6 +1542,7 @@ const defaultTransport = {
1507
1542
  isolation: 'standard',
1508
1543
  processManagement: input.processManagement,
1509
1544
  configOverrides: workflowConfig(input.request, input.input.workspacePath),
1545
+ ...(containment ? { hostReadContainmentProfile: containment } : {}),
1510
1546
  });
1511
1547
  await session.initialize(control.rpcTimeout('initialize'));
1512
1548
  const threadResult = await session.sendRequest('thread/start', {
@@ -1522,11 +1558,8 @@ const defaultTransport = {
1522
1558
  let turnStatus = null;
1523
1559
  let resolveTurn;
1524
1560
  let rejectTurn;
1525
- const turnDone = new Promise((resolve, reject) => {
1526
- resolveTurn = resolve;
1527
- rejectTurn = reject;
1528
- });
1529
- void turnDone.catch(() => undefined);
1561
+ let lastMessageOrdinal = 0;
1562
+ let frameQueue = Promise.resolve();
1530
1563
  removeFailureHandler = session.onFailure((error) => rejectTurn?.(error));
1531
1564
  removeHandler = session.onFrame((frame) => {
1532
1565
  const isolatedPaths = [
@@ -1537,68 +1570,112 @@ const defaultTransport = {
1537
1570
  frames.push(sanitizeTraceValue(frame, input.codexRuntime, isolatedPaths, input.request.multiAgent.protocol === 'v2'));
1538
1571
  const method = typeof frame.method === 'string' ? frame.method : '';
1539
1572
  const params = isRecord(frame.params) ? frame.params : {};
1540
- if (method === 'turn/completed') {
1573
+ // Capture on receipt, before asynchronous semantic matching. All threads count.
1574
+ const ordinal = evaluation && ['item/completed', 'item/tool/requestUserInput', 'turn/completed'].includes(method)
1575
+ ? evaluation.observe(sanitizeTraceValue(frame, input.codexRuntime, isolatedPaths, input.request.multiAgent.protocol === 'v2'), codexWorkflowFrameThreadId(frame)) : 0;
1576
+ frameQueue = frameQueue.then(async () => {
1577
+ if (method === 'turn/completed') {
1578
+ if (!codexWorkflowFrameIsForRoot(frame, rootThreadId))
1579
+ return;
1580
+ const turn = isRecord(params.turn) ? params.turn : {};
1581
+ turnStatus = typeof turn.status === 'string' ? turn.status : 'unknown';
1582
+ resolveTurn?.();
1583
+ return;
1584
+ }
1541
1585
  if (!codexWorkflowFrameIsForRoot(frame, rootThreadId))
1542
1586
  return;
1543
- const turn = isRecord(params.turn) ? params.turn : {};
1544
- turnStatus = typeof turn.status === 'string' ? turn.status : 'unknown';
1545
- resolveTurn?.();
1546
- return;
1587
+ if (method === 'item/completed' && isRecord(params.item)) {
1588
+ const item = params.item;
1589
+ if (item.type === 'agentMessage'
1590
+ && item.phase === 'final_answer'
1591
+ && typeof item.text === 'string') {
1592
+ finalMessage = item.text;
1593
+ lastMessageOrdinal = ordinal;
1594
+ }
1595
+ }
1596
+ if (method === 'thread/tokenUsage/updated')
1597
+ usage = params.tokenUsage ?? usage;
1598
+ if (method === 'item/tool/requestUserInput') {
1599
+ if (!evaluation)
1600
+ throw new Error('codex-workflow root requested interactive user input.');
1601
+ if ((typeof frame.id !== 'string' && typeof frame.id !== 'number') || !Array.isArray(params.questions)) {
1602
+ throw new Error('workflow user-input request lacks its actual id or questions.');
1603
+ }
1604
+ const reply = await evaluation.reply({ questions: params.questions }, ordinal);
1605
+ const answers = Object.fromEntries(params.questions.filter(isRecord).map((question) => [
1606
+ String(question.id), { answers: [reply && reply.questionId === question.id
1607
+ ? reply.text : 'No user decision is available for this question. Return control without dependent changes.'] },
1608
+ ]));
1609
+ await session.respond(frame.id, { answers });
1610
+ }
1611
+ if (method === 'error')
1612
+ rejectTurn?.(new Error(`codex-workflow app-server error: ${JSON.stringify(params)}`));
1613
+ });
1614
+ return frameQueue;
1615
+ });
1616
+ let nextPrompt = input.request.evaluation?.setupPrompt ?? input.request.prompt;
1617
+ let setup = input.request.evaluation?.setupPrompt !== undefined;
1618
+ while (true) {
1619
+ const turnDone = new Promise((resolve, reject) => {
1620
+ resolveTurn = resolve;
1621
+ rejectTurn = reject;
1622
+ });
1623
+ void turnDone.catch(() => undefined);
1624
+ finalMessage = null;
1625
+ turnStatus = null;
1626
+ await session.sendRequest('turn/start', {
1627
+ threadId: rootThreadId,
1628
+ input: [{ type: 'text', text: nextPrompt, text_elements: [] }],
1629
+ cwd: input.input.workspacePath,
1630
+ approvalPolicy: 'never',
1631
+ sandboxPolicy: sandboxPolicy(input.request),
1632
+ ...(input.request.model ? { model: input.request.model } : {}),
1633
+ }, control.rpcTimeout('turn/start'));
1634
+ let abortTurnWait;
1635
+ try {
1636
+ await Promise.race([
1637
+ turnDone,
1638
+ new Promise((_resolve, reject) => {
1639
+ abortTurnWait = () => reject(control.stopError('turn wait'));
1640
+ if (control.signal.aborted)
1641
+ abortTurnWait();
1642
+ else
1643
+ control.signal.addEventListener('abort', abortTurnWait, { once: true });
1644
+ }),
1645
+ ]);
1547
1646
  }
1548
- if (!codexWorkflowFrameIsForRoot(frame, rootThreadId))
1549
- return;
1550
- if (method === 'item/completed' && isRecord(params.item)) {
1551
- const item = params.item;
1552
- if (item.type === 'agentMessage'
1553
- && item.phase === 'final_answer'
1554
- && typeof item.text === 'string')
1555
- finalMessage = item.text;
1647
+ finally {
1648
+ if (abortTurnWait)
1649
+ control.signal.removeEventListener('abort', abortTurnWait);
1556
1650
  }
1557
- if (method === 'thread/tokenUsage/updated')
1558
- usage = params.tokenUsage ?? usage;
1559
- if (method === 'item/tool/requestUserInput') {
1560
- rejectTurn?.(new Error('codex-workflow root requested interactive user input.'));
1651
+ await frameQueue;
1652
+ control.throwIfStopped('turn wait');
1653
+ if (turnStatus !== 'completed') {
1654
+ throw new Error(`codex-workflow root turn ended with status ${String(turnStatus)}.`);
1561
1655
  }
1562
- if (method === 'error')
1563
- rejectTurn?.(new Error(`codex-workflow app-server error: ${JSON.stringify(params)}`));
1564
- });
1565
- await session.sendRequest('turn/start', {
1566
- threadId: rootThreadId,
1567
- input: [{ type: 'text', text: input.request.prompt, text_elements: [] }],
1568
- cwd: input.input.workspacePath,
1569
- approvalPolicy: 'never',
1570
- sandboxPolicy: sandboxPolicy(input.request),
1571
- ...(input.request.model ? { model: input.request.model } : {}),
1572
- }, control.rpcTimeout('turn/start'));
1573
- let abortTurnWait;
1574
- try {
1575
- await Promise.race([
1576
- turnDone,
1577
- new Promise((_resolve, reject) => {
1578
- abortTurnWait = () => reject(control.stopError('turn wait'));
1579
- if (control.signal.aborted)
1580
- abortTurnWait();
1581
- else
1582
- control.signal.addEventListener('abort', abortTurnWait, { once: true });
1583
- }),
1584
- ]);
1585
- }
1586
- finally {
1587
- if (abortTurnWait)
1588
- control.signal.removeEventListener('abort', abortTurnWait);
1589
- }
1590
- control.throwIfStopped('turn wait');
1591
- if (turnStatus !== 'completed') {
1592
- throw new Error(`codex-workflow root turn ended with status ${String(turnStatus)}.`);
1593
- }
1594
- if (!finalMessage) {
1595
- const diagnostic = codexWorkflowMissingFinalMessageDiagnostic({
1596
- frames,
1597
- rootThreadId,
1598
- turnStatus,
1599
- usage,
1600
- });
1601
- throw new Error(`codex-workflow root turn did not produce a final message: ${JSON.stringify(diagnostic)}.`);
1656
+ if (!finalMessage) {
1657
+ const diagnostic = codexWorkflowMissingFinalMessageDiagnostic({
1658
+ frames,
1659
+ rootThreadId,
1660
+ turnStatus,
1661
+ usage,
1662
+ });
1663
+ throw new Error(`codex-workflow root turn did not produce a final message: ${JSON.stringify(diagnostic)}.`);
1664
+ }
1665
+ if (setup) {
1666
+ setup = false;
1667
+ evaluation.measurementStart = evaluation.observe({ method: 'evaluation/measurementStart' }, rootThreadId);
1668
+ nextPrompt = input.request.prompt;
1669
+ continue;
1670
+ }
1671
+ if (evaluation?.hasPendingDecision) {
1672
+ const reply = await evaluation.reply({ text: finalMessage }, lastMessageOrdinal);
1673
+ if (reply) {
1674
+ nextPrompt = reply.text;
1675
+ continue;
1676
+ }
1677
+ }
1678
+ break;
1602
1679
  }
1603
1680
  const isolatedPaths = [
1604
1681
  { path: codexHome, marker: '[codex-home]' },
@@ -1635,7 +1712,7 @@ const defaultTransport = {
1635
1712
  appServerProcessTreeCleanupConfirmed: true,
1636
1713
  },
1637
1714
  usage,
1638
- finalMessage,
1715
+ finalMessage: finalMessage,
1639
1716
  workspaceDiff: workspaceDiff(before, after),
1640
1717
  skillLoads: rollout.skillLoads,
1641
1718
  threadGraph: rollout.threadGraph,
@@ -1643,6 +1720,17 @@ const defaultTransport = {
1643
1720
  leafCalls: rollout.leafCalls,
1644
1721
  cleanup: { isolatedCodexHomeRemoved: true },
1645
1722
  };
1723
+ if (evaluation) {
1724
+ // Subject processes are stopped before final snapshots and independent grading.
1725
+ evidence.evaluation = await evaluation.finish(evidence, rollout.trace);
1726
+ const totals = [usage, ...judgeUsage].map(standardUsage);
1727
+ if (totals.some((value) => value === null))
1728
+ throw new Error('workflow evaluation lacks required judge usage evidence.');
1729
+ evidence.usage = {
1730
+ inputTokens: totals.reduce((sum, value) => sum + value.inputTokens, 0),
1731
+ outputTokens: totals.reduce((sum, value) => sum + value.outputTokens, 0),
1732
+ };
1733
+ }
1646
1734
  return {
1647
1735
  evidence: session.scrub(redactCodexEvalValue(evidence, input.codexRuntime)),
1648
1736
  trace: session.scrub(redactCodexEvalValue([
@@ -1650,7 +1738,7 @@ const defaultTransport = {
1650
1738
  ...rollout.trace,
1651
1739
  ], input.codexRuntime)),
1652
1740
  modelOutput: redactCodexEvalValue(finalMessage, input.codexRuntime),
1653
- usage: redactCodexEvalValue(usage, input.codexRuntime),
1741
+ usage: redactCodexEvalValue(evidence.usage, input.codexRuntime),
1654
1742
  };
1655
1743
  }
1656
1744
  finally {
@@ -1772,6 +1860,7 @@ export async function executeCodexWorkflowProvider(options) {
1772
1860
  sourceEnv,
1773
1861
  timeoutMs: control.remaining('Codex execution'),
1774
1862
  processManagement,
1863
+ ...(options.protectedEvalRoots ? { protectedEvalRoots: options.protectedEvalRoots } : {}),
1775
1864
  signal: control.signal,
1776
1865
  });
1777
1866
  }
@@ -1815,6 +1904,21 @@ export async function executeCodexWorkflowProvider(options) {
1815
1904
  throw error;
1816
1905
  }
1817
1906
  const grade = parseEvalProviderGrade(gradeValue, 'workflow grade stdout');
1907
+ if (request.evaluation) {
1908
+ const results = sanitized.evidence.evaluation;
1909
+ const required = [
1910
+ ...request.evaluation.checks,
1911
+ ...(request.evaluation.interactions.length ? [{ name: 'user-decisions', criterion: 'All required user decisions were delivered.' }] : []),
1912
+ ];
1913
+ const complete = normalizeWorkflowChecks(required, {
1914
+ passed: true, score: null, details: results,
1915
+ }).every((check) => check.verdict === 'pass');
1916
+ if (!complete) {
1917
+ grade.passed = false;
1918
+ grade.score = 0;
1919
+ grade.details = { ...grade.details, workflowEvidenceSatisfied: false };
1920
+ }
1921
+ }
1818
1922
  const afterGrade = await artifactDigests(paths.outputDir);
1819
1923
  if (JSON.stringify(beforeGrade) !== JSON.stringify(afterGrade)) {
1820
1924
  throw new Error('workflow grade modified Engine-owned attempt artifacts.');