@post-print/agent-test 0.3.8 → 0.3.10

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 (47) hide show
  1. package/README.md +3 -2
  2. package/dist/cli.d.ts +3 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +15 -3
  5. package/dist/cli.js.map +1 -1
  6. package/dist/compare-scenario.d.ts +37 -15
  7. package/dist/compare-scenario.d.ts.map +1 -1
  8. package/dist/compare-scenario.js +236 -65
  9. package/dist/compare-scenario.js.map +1 -1
  10. package/dist/debug-bundle.d.ts +1 -0
  11. package/dist/debug-bundle.d.ts.map +1 -1
  12. package/dist/debug-bundle.js +4 -1
  13. package/dist/debug-bundle.js.map +1 -1
  14. package/dist/doctor.d.ts.map +1 -1
  15. package/dist/doctor.js +15 -13
  16. package/dist/doctor.js.map +1 -1
  17. package/dist/html-report.d.ts.map +1 -1
  18. package/dist/html-report.js +135 -37
  19. package/dist/html-report.js.map +1 -1
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/live-isolation.d.ts +3 -1
  25. package/dist/live-isolation.d.ts.map +1 -1
  26. package/dist/live-isolation.js +3 -0
  27. package/dist/live-isolation.js.map +1 -1
  28. package/dist/record-trace.d.ts +5 -4
  29. package/dist/record-trace.d.ts.map +1 -1
  30. package/dist/record-trace.js.map +1 -1
  31. package/dist/run-suite.d.ts +8 -3
  32. package/dist/run-suite.d.ts.map +1 -1
  33. package/dist/run-suite.js +132 -95
  34. package/dist/run-suite.js.map +1 -1
  35. package/dist/scenario-story.d.ts +15 -22
  36. package/dist/scenario-story.d.ts.map +1 -1
  37. package/dist/scenario-story.js +310 -61
  38. package/dist/scenario-story.js.map +1 -1
  39. package/dist/theme.d.ts.map +1 -1
  40. package/dist/theme.js +90 -14
  41. package/dist/theme.js.map +1 -1
  42. package/dist/types.d.ts +60 -14
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/validate-suite.d.ts.map +1 -1
  45. package/dist/validate-suite.js +100 -34
  46. package/dist/validate-suite.js.map +1 -1
  47. package/package.json +2 -2
@@ -12,7 +12,7 @@ export declare function scenarioArtifactSlug(name: string): string;
12
12
  export declare function getLiveStagingRoot(): string;
13
13
  export declare function getLiveStagingSessionRoot(sessionId: string): string;
14
14
  /** Staging JSON path for a live scenario trace (matches recordTrace layout). */
15
- export declare function getStagingTracePath(stagingSessionId: string, suiteName: string, scenarioName: string, arm?: "a" | "b"): string;
15
+ export declare function getStagingTracePath(stagingSessionId: string, suiteName: string, scenarioName: string, arm?: string): string;
16
16
  /** Parent arms subprocess kill from this marker (epoch ms) when the harness deadline starts. */
17
17
  export declare function getStagingAgentStartPath(stagingSessionId: string, suiteName: string, scenarioName: string): string;
18
18
  /** Child writes when the harness agent deadline clock starts (after pre-stream SDK setup). */
@@ -29,13 +29,14 @@ export interface LiveScenarioResultSidecar {
29
29
  failures: AssertionFailure[];
30
30
  durationMs: number;
31
31
  compare?: {
32
- a: LiveCompareArmSidecar;
33
- b: LiveCompareArmSidecar;
32
+ a?: LiveCompareArmSidecar;
33
+ b?: LiveCompareArmSidecar;
34
+ arms?: Record<string, LiveCompareArmSidecar>;
34
35
  };
35
36
  }
36
37
  export declare function createLiveStagingSessionId(): string;
37
38
  /** Resolve the transient trace used by isolated direct-agent runs. */
38
- export declare function resolveRecordingPath(suiteName: string, scenarioName: string, stagingSessionId: string | undefined, arm?: "a" | "b"): string | undefined;
39
+ export declare function resolveRecordingPath(suiteName: string, scenarioName: string, stagingSessionId: string | undefined, arm?: string): string | undefined;
39
40
  /** Persist a direct-run trace for parent-process judging and diagnostics. */
40
41
  export declare function recordTrace(outputPath: string, trace: AgentTrace): Promise<string>;
41
42
  /** Load a staged live trace for parent-process judge after isolated child runs. */
@@ -1 +1 @@
1
- {"version":3,"file":"record-trace.d.ts","sourceRoot":"","sources":["../src/record-trace.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAIlD,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEzE;AAED,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,SAAS,CAE/D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnE;AAMD,gFAAgF;AAChF,wBAAgB,mBAAmB,CAClC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GACb,MAAM,CAOR;AAED,gGAAgG;AAChG,wBAAgB,wBAAwB,CACvC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GAClB,MAAM,CAMR;AAED,8FAA8F;AAC9F,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED,wFAAwF;AACxF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQpF;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CACnC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GAClB,MAAM,CAMR;AAED,MAAM,WAAW,qBAAqB;IACrC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACT,CAAC,EAAE,qBAAqB,CAAC;QACzB,CAAC,EAAE,qBAAqB,CAAC;KACzB,CAAC;CACF;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GACb,MAAM,GAAG,SAAS,CAKpB;AAED,6EAA6E;AAC7E,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBxF;AAED,mFAAmF;AACnF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGxE;AAED,8FAA8F;AAC9F,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,yBAAyB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,0FAA0F;AAC1F,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAMhD;AAED,6DAA6D;AAC7D,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E"}
1
+ {"version":3,"file":"record-trace.d.ts","sourceRoot":"","sources":["../src/record-trace.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAIlD,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEzE;AAED,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,SAAS,CAE/D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnE;AAMD,gFAAgF;AAChF,wBAAgB,mBAAmB,CAClC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,GACV,MAAM,CAOR;AAED,gGAAgG;AAChG,wBAAgB,wBAAwB,CACvC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GAClB,MAAM,CAMR;AAED,8FAA8F;AAC9F,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED,wFAAwF;AACxF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQpF;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CACnC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GAClB,MAAM,CAMR;AAED,MAAM,WAAW,qBAAqB;IACrC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACT,CAAC,CAAC,EAAE,qBAAqB,CAAC;QAC1B,CAAC,CAAC,EAAE,qBAAqB,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;KAC7C,CAAC;CACF;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,GAAG,CAAC,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAKpB;AAED,6EAA6E;AAC7E,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBxF;AAED,mFAAmF;AACnF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGxE;AAED,8FAA8F;AAC9F,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,yBAAyB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,0FAA0F;AAC1F,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAMhD;AAED,6DAA6D;AAC7D,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-trace.js","sourceRoot":"","sources":["../src/record-trace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record-trace.js","sourceRoot":"","sources":["../src/record-trace.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AgentHost, JudgeCriterion, RoutingContract } from "@post-print/agent-harness";
1
+ import type { AgentHost, HostAuthMode, JudgeCriterion, RoutingContract } from "@post-print/agent-harness";
2
2
  import type { AgentScenario, AgentSuiteDefaults, ScenarioResult, ScenarioRubric, SuiteRunReport } from "./types.js";
3
3
  /** Parent process prints suite headers and final verdicts; children only print phases. */
4
4
  export declare function shouldPrintSuiteChrome(): boolean;
@@ -38,6 +38,8 @@ export interface RunSuiteOptions {
38
38
  rubricsDir?: string;
39
39
  /** Consumer adapter modules to forward to isolated children. */
40
40
  adapterModules?: string[];
41
+ /** Host billing mode. Default is subscription when omitted. */
42
+ authMode?: HostAuthMode;
41
43
  }
42
44
  export interface RunAgentTestOptions {
43
45
  cwd: string;
@@ -60,16 +62,18 @@ export interface RunAgentTestOptions {
60
62
  rubricsDir?: string;
61
63
  scenarioIndex?: number;
62
64
  scenarioTotal?: number;
65
+ /** Host billing mode. Default is subscription when omitted. */
66
+ authMode?: HostAuthMode;
63
67
  }
64
68
  /** Live-only mode hint from rubric — not part of the user scenario prompt. */
65
69
  export declare function outputContractForRubric(rubric: ScenarioRubric): RoutingContract | undefined;
66
70
  /** Explicit judge questions plus skill-invoke questions for mustInvokeSkill. */
67
71
  export declare function collectJudgeCriteria(rubric: ScenarioRubric): JudgeCriterion[];
68
- /** Pairwise judge questions only. Skill-follow checks stay per-arm and deterministic. */
72
+ /** Shared judge questions only. Skill-follow checks stay per-arm and deterministic. */
69
73
  export declare function collectCompareJudgeCriteria(rubric: ScenarioRubric): JudgeCriterion[];
70
74
  /** Judge auth and the judge call apply only when a rubric has judge work. */
71
75
  export declare function judgeAuthRequired(judge: boolean, rubrics: readonly ScenarioRubric[]): boolean;
72
- /** Pairwise judge on compare. Skill-follow judge questions stay on non-compare scenarios. */
76
+ /** Shared judge on compare. Skill-follow judge questions stay on non-compare scenarios. */
73
77
  export declare function scenarioNeedsJudge(judge: boolean, scenario: Pick<AgentScenario, "compare" | "rubric">): boolean;
74
78
  /** True when the selected live run will call the judge. */
75
79
  export declare function selectedRunNeedsJudge(options: {
@@ -108,6 +112,7 @@ export declare function runAllSuites(options: {
108
112
  scenarioRetries?: number;
109
113
  rubricsDir?: string;
110
114
  adapterModules?: string[];
115
+ authMode?: HostAuthMode;
111
116
  }): Promise<SuiteRunReport[]>;
112
117
  export { discoverSuites } from "./discover-suites.js";
113
118
  //# sourceMappingURL=run-suite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-suite.d.ts","sourceRoot":"","sources":["../src/run-suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-suite.d.ts","sourceRoot":"","sources":["../src/run-suite.ts"],"names":[],"mappings":"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"}
package/dist/run-suite.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { basename, dirname, join, resolve } from "node:path";
3
- import { cancelActiveClaudeRun, cancelActiveCursorRun, cancelActiveOpenaiRun, captureWorkingTreeStatus, createSealedWorkspace, defaultSealedOverlayPaths, enrichTrace, filterWorkingTreeLeaks, findWorkingTreeLeak, formatWorkingTreeLeak, judgeCompareTraces, judgeTrace, loadContext, loadUnifiedDiffPaths, mergeMcpServers, parseScenarioWorkspace, partitionSeedCollateralLeaks, porcelainPathsFromLines, resolveAllowUserSkills, resolveHarnessArtifactIgnoreRoots, restoreWorkingTreePaths, runAgent, skillInvokeJudgeCriteria, skillPathsFromSetting, sumUsageParts, toolPathsOutsideWorkspace, traceEditsOutsideWorktree, traceHasUserInputTool, } from "@post-print/agent-harness";
4
- import { applyCompareArm, applySidecarCompareDurations, assertCompareMetrics, compareArmDescription, compareArmLabel, compareStoryFields, plainDescription, prefixCompareFailures, } from "./compare-scenario.js";
3
+ import { cancelActiveClaudeRun, cancelActiveCursorRun, cancelActiveOpenaiRun, captureWorkingTreeStatus, createSealedWorkspace, defaultSealedOverlayPaths, enrichTrace, filterWorkingTreeLeaks, findWorkingTreeLeak, formatWorkingTreeLeak, getProcessAuthMode, judgeCompareTraces, judgeTrace, loadContext, loadUnifiedDiffPaths, mergeMcpServers, parseScenarioWorkspace, partitionSeedCollateralLeaks, porcelainPathsFromLines, resolveAllowUserSkills, resolveHarnessArtifactIgnoreRoots, restoreWorkingTreePaths, runAgent, setProcessAuthMode, skillInvokeJudgeCriteria, skillPathsFromSetting, sumUsageParts, toolPathsOutsideWorkspace, traceEditsOutsideWorktree, traceHasUserInputTool, } from "@post-print/agent-harness";
4
+ import { applyCompareArm, applySidecarCompareDurations, assertCompareMetrics, attachCompareStoryResults, buildCompareResult, compareArmDescription, compareArmLabel, compareResultArms, compareStoryFields, plainDescription, prefixCompareFailures, resolveCompareArms, resolveCompareMetricPairs, } from "./compare-scenario.js";
5
5
  import { collectDebugEnvironment, getDebugBundleDir, writeDebugBundle } from "./debug-bundle.js";
6
6
  import { discoverSuites } from "./discover-suites.js";
7
7
  import { assertRubric } from "./expect.js";
@@ -128,7 +128,7 @@ export function collectJudgeCriteria(rubric) {
128
128
  ...skillInvokeJudgeCriteria(rubric.mustInvokeSkill ?? []),
129
129
  ];
130
130
  }
131
- /** Pairwise judge questions only. Skill-follow checks stay per-arm and deterministic. */
131
+ /** Shared judge questions only. Skill-follow checks stay per-arm and deterministic. */
132
132
  export function collectCompareJudgeCriteria(rubric) {
133
133
  return normalizeJudgeCriteria(rubric.judge);
134
134
  }
@@ -136,7 +136,7 @@ export function collectCompareJudgeCriteria(rubric) {
136
136
  export function judgeAuthRequired(judge, rubrics) {
137
137
  return judge !== false && rubrics.some((rubric) => collectJudgeCriteria(rubric).length > 0);
138
138
  }
139
- /** Pairwise judge on compare. Skill-follow judge questions stay on non-compare scenarios. */
139
+ /** Shared judge on compare. Skill-follow judge questions stay on non-compare scenarios. */
140
140
  export function scenarioNeedsJudge(judge, scenario) {
141
141
  if (judge === false) {
142
142
  return false;
@@ -291,6 +291,7 @@ async function maybeWriteDebugBundle(options) {
291
291
  // override without an explicit debugDir.
292
292
  debugDir: options.debugDir ?? getLiveStagingRootOverride(),
293
293
  keepRecordings: options.keepRecordings ?? true,
294
+ authMode: options.authMode,
294
295
  },
295
296
  });
296
297
  }
@@ -422,6 +423,7 @@ async function runSuiteBody(options) {
422
423
  debug: options.debug,
423
424
  debugDir: options.debugDir,
424
425
  previousExitCode: previousAttemptExitCode,
426
+ authMode: options.authMode ?? getProcessAuthMode(),
425
427
  });
426
428
  previousAttemptExitCode = spawned.exitCode;
427
429
  previousIsolatedExitCode = spawned.exitCode;
@@ -436,11 +438,14 @@ async function runSuiteBody(options) {
436
438
  }
437
439
  if (options.stagingSessionId) {
438
440
  if (scenario.compare) {
439
- try {
440
- scenarioTrace = await loadStagingTrace(getStagingTracePath(options.stagingSessionId, suite.name, scenario.name, "a"));
441
- }
442
- catch {
443
- // Trace may be missing when the child crashed before recording.
441
+ const firstArm = resolveCompareArms(scenario.compare)[0];
442
+ if (firstArm) {
443
+ try {
444
+ scenarioTrace = await loadStagingTrace(getStagingTracePath(options.stagingSessionId, suite.name, scenario.name, firstArm.id));
445
+ }
446
+ catch {
447
+ // Trace may be missing when the child crashed before recording.
448
+ }
444
449
  }
445
450
  }
446
451
  else {
@@ -467,10 +472,14 @@ async function runSuiteBody(options) {
467
472
  const judgeHost = options.host ?? scenario.host ?? suite.defaults?.host ?? "cursor";
468
473
  if (scenario.compare && options.stagingSessionId) {
469
474
  compareResult = applySidecarCompareDurations(await loadCompareResultFromStaging(options.stagingSessionId, suite.name, scenario), childSidecar);
470
- scenarioTrace = compareResult.a.trace ?? scenarioTrace;
475
+ scenarioTrace = compareResultArms(compareResult)[0]?.trace ?? scenarioTrace;
471
476
  }
472
477
  if (failures.length === 0 && options.judge !== false) {
473
- if (scenario.compare && compareResult?.a.trace && compareResult.b.trace) {
478
+ const compareTraces = compareResult ? compareResultArms(compareResult) : [];
479
+ if (scenario.compare &&
480
+ compareResult &&
481
+ compareTraces.length > 0 &&
482
+ compareTraces.every((arm) => arm.trace)) {
474
483
  const criteria = collectCompareJudgeCriteria(scenario.rubric);
475
484
  if (criteria.length > 0) {
476
485
  releaseLiveMemory();
@@ -478,7 +487,16 @@ async function runSuiteBody(options) {
478
487
  try {
479
488
  const judged = await runCompareJudgeRubric(compareResult, scenario.rubric, options.cwd, judgeHost);
480
489
  failures.push(...judged.failures);
481
- judgeVerdicts = toJudgeVerdictResults({ ...compareResult.a.trace, judgeVerdicts: judged.verdicts }, criteria, judged.verdicts);
490
+ const firstTrace = compareTraces[0]?.trace;
491
+ judgeVerdicts = toJudgeVerdictResults({
492
+ ...(firstTrace ?? {
493
+ messages: [],
494
+ toolCalls: [],
495
+ shellCommands: [],
496
+ artifacts: {},
497
+ }),
498
+ judgeVerdicts: judged.verdicts,
499
+ }, criteria, judged.verdicts);
482
500
  }
483
501
  catch (error) {
484
502
  failures.push(assertionFailure("judge", error instanceof Error ? error.message : "failed to judge compare traces", "judge_infra"));
@@ -506,7 +524,7 @@ async function runSuiteBody(options) {
506
524
  const passed = failures.length === 0;
507
525
  const usageFields = buildScenarioResultUsage({
508
526
  agentUsage: compareResult
509
- ? sumUsageParts([compareResult.a.trace?.usage, compareResult.b.trace?.usage])
527
+ ? sumUsageParts(compareResultArms(compareResult).map((arm) => arm.trace?.usage))
510
528
  : scenarioTrace?.usage,
511
529
  judgeVerdicts,
512
530
  });
@@ -517,13 +535,7 @@ async function runSuiteBody(options) {
517
535
  failures,
518
536
  judgeVerdicts,
519
537
  compare: compareResult
520
- ? {
521
- ...compareStoryFields(scenario),
522
- aTrace: compareResult.a.trace,
523
- bTrace: compareResult.b.trace,
524
- aDurationMs: compareResult.a.durationMs,
525
- bDurationMs: compareResult.b.durationMs,
526
- }
538
+ ? attachCompareStoryResults(compareStoryFields(scenario), compareResult)
527
539
  : undefined,
528
540
  });
529
541
  const scenarioResult = {
@@ -558,6 +570,7 @@ async function runSuiteBody(options) {
558
570
  judge: options.judge,
559
571
  allowUserInput: options.allowUserInput,
560
572
  keepRecordings: options.keepRecordings,
573
+ authMode: options.authMode ?? getProcessAuthMode(),
561
574
  });
562
575
  scenarioResult.debugBundleDir = debugBundleDir;
563
576
  emitScenarioVerdict({
@@ -669,10 +682,17 @@ export async function runAgentTest(options) {
669
682
  }
670
683
  const stagingSessionId = options.stagingSessionId ??
671
684
  (options.debug || options.keepRecordings ? createLiveStagingSessionId() : undefined);
685
+ const previousAuthMode = getProcessAuthMode();
686
+ if (options.authMode !== undefined) {
687
+ setProcessAuthMode(options.authMode);
688
+ }
672
689
  try {
673
690
  return await runAgentTestBody({ ...options, stagingSessionId });
674
691
  }
675
692
  finally {
693
+ if (options.authMode !== undefined) {
694
+ setProcessAuthMode(previousAuthMode);
695
+ }
676
696
  if (options.debugDir !== undefined) {
677
697
  setLiveStagingRootOverride(previousStagingRoot);
678
698
  }
@@ -723,6 +743,7 @@ async function runAgentTestBody(options) {
723
743
  judge: options.judge ?? true,
724
744
  allowUserInput: options.allowUserInput,
725
745
  keepRecordings: options.keepRecordings,
746
+ authMode: options.authMode ?? getProcessAuthMode(),
726
747
  });
727
748
  result.debugBundleDir = debugBundleDir;
728
749
  emitScenarioVerdict({
@@ -845,6 +866,7 @@ async function runAgentTestOnce(cwd, suiteName, scenario, defaultHost, defaultPr
845
866
  outputContract,
846
867
  mcpServers,
847
868
  allowUserSkills,
869
+ authMode: getProcessAuthMode(),
848
870
  timeoutMs: liveTimeoutMs,
849
871
  failOnUserInput,
850
872
  maxConversationTurns: resolveMaxConversationTurns(),
@@ -1012,6 +1034,7 @@ async function runAgentTestOnce(cwd, suiteName, scenario, defaultHost, defaultPr
1012
1034
  judge,
1013
1035
  allowUserInput,
1014
1036
  keepRecordings,
1037
+ authMode: getProcessAuthMode(),
1015
1038
  });
1016
1039
  scenarioResult.debugBundleDir = debugBundleDir;
1017
1040
  emitScenarioVerdict({
@@ -1062,10 +1085,7 @@ async function runCompareAgentTestOnce(cwd, suiteName, scenario, defaultHost, de
1062
1085
  logProgress(theme.scenarioLabel(scenario.name, host));
1063
1086
  }
1064
1087
  logScenarioDescription(scenario.description);
1065
- const aScenario = applyCompareArm(scenario, "a");
1066
- const bScenario = applyCompareArm(scenario, "b");
1067
- const aLabel = compareArmLabel(scenario.compare?.a, "a");
1068
- const bLabel = compareArmLabel(scenario.compare?.b, "b");
1088
+ const resolvedArms = resolveCompareArms(scenario.compare);
1069
1089
  const shared = {
1070
1090
  cwd,
1071
1091
  suiteName,
@@ -1086,74 +1106,73 @@ async function runCompareAgentTestOnce(cwd, suiteName, scenario, defaultHost, de
1086
1106
  keepRecordings,
1087
1107
  rubricsDir,
1088
1108
  };
1089
- const aResult = await runAgentTestOnce(shared.cwd, shared.suiteName, aScenario, shared.defaultHost, shared.defaultProfile, shared.defaultSkills, shared.defaultContextSources, shared.defaultMcpServers, shared.defaultWorkspace, shared.defaultAllowUserSkills, false, shared.worktree, shared.stagingSessionId, undefined, undefined, shared.timeoutMs, shared.allowUserInput, shared.debugFlag, shared.debugDir, shared.suitesDir, shared.keepRecordings, shared.rubricsDir, { suppressEmit: true, compareArm: "a", writeSidecar: false });
1090
- const bResult = await runAgentTestOnce(shared.cwd, shared.suiteName, bScenario, shared.defaultHost, shared.defaultProfile, shared.defaultSkills, shared.defaultContextSources, shared.defaultMcpServers, shared.defaultWorkspace, shared.defaultAllowUserSkills, false, shared.worktree, shared.stagingSessionId, undefined, undefined, shared.timeoutMs, shared.allowUserInput, shared.debugFlag, shared.debugDir, shared.suitesDir, shared.keepRecordings, shared.rubricsDir, { suppressEmit: true, compareArm: "b", writeSidecar: false });
1091
- const failures = [
1092
- ...prefixCompareFailures(aLabel, aResult.failures),
1093
- ...prefixCompareFailures(bLabel, bResult.failures),
1094
- ];
1095
- const compareResult = {
1096
- a: {
1097
- id: "a",
1098
- label: aLabel,
1099
- description: compareArmDescription(scenario.compare?.a),
1100
- prompt: aScenario.prompt,
1101
- trace: aResult.trace,
1102
- durationMs: aResult.durationMs,
1103
- },
1104
- b: {
1105
- id: "b",
1106
- label: bLabel,
1107
- description: compareArmDescription(scenario.compare?.b),
1108
- prompt: bScenario.prompt,
1109
- trace: bResult.trace,
1110
- durationMs: bResult.durationMs,
1111
- },
1112
- };
1109
+ const armRuns = [];
1110
+ for (const entry of resolvedArms) {
1111
+ const armScenario = applyCompareArm(scenario, entry.id);
1112
+ const label = compareArmLabel(entry.arm, entry.id);
1113
+ const result = await runAgentTestOnce(shared.cwd, shared.suiteName, armScenario, shared.defaultHost, shared.defaultProfile, shared.defaultSkills, shared.defaultContextSources, shared.defaultMcpServers, shared.defaultWorkspace, shared.defaultAllowUserSkills, false, shared.worktree, shared.stagingSessionId, undefined, undefined, shared.timeoutMs, shared.allowUserInput, shared.debugFlag, shared.debugDir, shared.suitesDir, shared.keepRecordings, shared.rubricsDir, { suppressEmit: true, compareArm: entry.id, writeSidecar: false });
1114
+ armRuns.push({ id: entry.id, label, scenario: armScenario, result });
1115
+ }
1116
+ const failures = armRuns.flatMap((arm) => prefixCompareFailures(arm.label, arm.result.failures));
1117
+ const armIds = resolvedArms.map((entry) => entry.id);
1118
+ const compareResult = buildCompareResult(armRuns.map((arm) => ({
1119
+ id: arm.id,
1120
+ label: arm.label,
1121
+ description: compareArmDescription(resolvedArms.find((entry) => entry.id === arm.id)?.arm),
1122
+ prompt: arm.scenario.prompt,
1123
+ trace: arm.result.trace,
1124
+ durationMs: arm.result.durationMs,
1125
+ })), {
1126
+ faster: resolveCompareMetricPairs(scenario.compare?.faster, armIds),
1127
+ cheaper: resolveCompareMetricPairs(scenario.compare?.cheaper, armIds),
1128
+ });
1113
1129
  if (scenario.compare) {
1114
1130
  failures.push(...assertCompareMetrics(scenario.compare, compareResult));
1115
1131
  }
1116
1132
  const deferJudgeToParent = isChildProcess();
1133
+ const compareArms = compareResultArms(compareResult);
1134
+ const firstTrace = compareArms[0]?.trace;
1117
1135
  let judgeVerdicts;
1118
1136
  if (judge &&
1119
1137
  !deferJudgeToParent &&
1120
1138
  failures.length === 0 &&
1121
- compareResult.a.trace &&
1122
- compareResult.b.trace) {
1139
+ compareArms.length > 0 &&
1140
+ compareArms.every((arm) => arm.trace)) {
1123
1141
  const criteria = collectCompareJudgeCriteria(scenario.rubric);
1124
1142
  if (criteria.length > 0) {
1125
1143
  logPhase(theme.judgePhase(criteria.length), { last: true });
1126
1144
  }
1127
1145
  const judged = await runCompareJudgeRubric(compareResult, scenario.rubric, cwd, host);
1128
1146
  failures.push(...judged.failures);
1129
- judgeVerdicts = toJudgeVerdictResults({ ...compareResult.a.trace, judgeVerdicts: judged.verdicts }, criteria, judged.verdicts);
1147
+ if (firstTrace) {
1148
+ judgeVerdicts = toJudgeVerdictResults({ ...firstTrace, judgeVerdicts: judged.verdicts }, criteria, judged.verdicts);
1149
+ }
1130
1150
  }
1131
1151
  const durationMs = Math.round(performance.now() - started);
1132
1152
  if (isChildProcess() && stagingSessionId) {
1153
+ const sidecarArms = {};
1154
+ for (const arm of armRuns) {
1155
+ sidecarArms[arm.id] = { durationMs: arm.result.durationMs };
1156
+ }
1133
1157
  await writeStagingResult(getStagingResultPath(stagingSessionId, suiteName, scenario.name), {
1134
1158
  passed: failures.length === 0,
1135
1159
  failures,
1136
1160
  durationMs,
1137
1161
  compare: {
1138
- a: { durationMs: aResult.durationMs },
1139
- b: { durationMs: bResult.durationMs },
1162
+ a: sidecarArms.a,
1163
+ b: sidecarArms.b,
1164
+ arms: sidecarArms,
1140
1165
  },
1141
1166
  });
1142
1167
  }
1143
1168
  const passed = failures.length === 0;
1144
1169
  const story = buildScenarioStory({
1145
1170
  rubric: scenario.rubric,
1146
- trace: compareResult.a.trace,
1171
+ trace: firstTrace,
1147
1172
  passed,
1148
1173
  failures,
1149
1174
  judgeVerdicts,
1150
- compare: {
1151
- ...compareStoryFields(scenario),
1152
- aTrace: compareResult.a.trace,
1153
- bTrace: compareResult.b.trace,
1154
- aDurationMs: compareResult.a.durationMs,
1155
- bDurationMs: compareResult.b.durationMs,
1156
- },
1175
+ compare: attachCompareStoryResults(compareStoryFields(scenario), compareResult),
1157
1176
  });
1158
1177
  const scenarioResult = {
1159
1178
  suite: suiteName,
@@ -1164,11 +1183,11 @@ async function runCompareAgentTestOnce(cwd, suiteName, scenario, defaultHost, de
1164
1183
  failures,
1165
1184
  durationMs,
1166
1185
  judgeVerdicts,
1167
- trace: compareResult.a.trace,
1186
+ trace: firstTrace,
1168
1187
  compare: compareResult,
1169
1188
  story,
1170
1189
  ...buildScenarioResultUsage({
1171
- agentUsage: sumUsageParts([aResult.agentUsage, bResult.agentUsage]),
1190
+ agentUsage: sumUsageParts(armRuns.map((arm) => arm.result.agentUsage)),
1172
1191
  judgeVerdicts,
1173
1192
  }),
1174
1193
  };
@@ -1184,12 +1203,13 @@ async function runCompareAgentTestOnce(cwd, suiteName, scenario, defaultHost, de
1184
1203
  scenario,
1185
1204
  host,
1186
1205
  result: scenarioResult,
1187
- trace: compareResult.a.trace,
1206
+ trace: firstTrace,
1188
1207
  timeoutMs,
1189
1208
  worktree,
1190
1209
  judge,
1191
1210
  allowUserInput,
1192
1211
  keepRecordings,
1212
+ authMode: getProcessAuthMode(),
1193
1213
  });
1194
1214
  scenarioResult.debugBundleDir = debugBundleDir;
1195
1215
  emitScenarioVerdict({
@@ -1198,7 +1218,7 @@ async function runCompareAgentTestOnce(cwd, suiteName, scenario, defaultHost, de
1198
1218
  total: scenarioTotal,
1199
1219
  name: scenario.name,
1200
1220
  durationMs,
1201
- totalTokens: totalTokensFromScenarioUsage(scenarioResult.usage, compareResult.a.trace?.usage),
1221
+ totalTokens: totalTokensFromScenarioUsage(scenarioResult.usage, firstTrace?.usage),
1202
1222
  judgeVerdicts,
1203
1223
  failures,
1204
1224
  story,
@@ -1209,45 +1229,47 @@ async function runCompareAgentTestOnce(cwd, suiteName, scenario, defaultHost, de
1209
1229
  return scenarioResult;
1210
1230
  }
1211
1231
  async function loadCompareResultFromStaging(stagingSessionId, suiteName, scenario) {
1212
- const aLabel = compareArmLabel(scenario.compare?.a, "a");
1213
- const bLabel = compareArmLabel(scenario.compare?.b, "b");
1214
- const aScenario = applyCompareArm(scenario, "a");
1215
- const bScenario = applyCompareArm(scenario, "b");
1216
- const loadArm = async (side) => {
1232
+ const resolved = resolveCompareArms(scenario.compare);
1233
+ const armIds = resolved.map((entry) => entry.id);
1234
+ const arms = [];
1235
+ for (const entry of resolved) {
1236
+ const armScenario = applyCompareArm(scenario, entry.id);
1237
+ let trace;
1217
1238
  try {
1218
- return await loadStagingTrace(getStagingTracePath(stagingSessionId, suiteName, scenario.name, side));
1239
+ trace = await loadStagingTrace(getStagingTracePath(stagingSessionId, suiteName, scenario.name, entry.id));
1219
1240
  }
1220
1241
  catch {
1221
- return undefined;
1242
+ trace = undefined;
1222
1243
  }
1223
- };
1224
- return {
1225
- a: {
1226
- id: "a",
1227
- label: aLabel,
1228
- description: compareArmDescription(scenario.compare?.a),
1229
- prompt: aScenario.prompt,
1230
- trace: await loadArm("a"),
1231
- },
1232
- b: {
1233
- id: "b",
1234
- label: bLabel,
1235
- description: compareArmDescription(scenario.compare?.b),
1236
- prompt: bScenario.prompt,
1237
- trace: await loadArm("b"),
1238
- },
1239
- };
1244
+ arms.push({
1245
+ id: entry.id,
1246
+ label: compareArmLabel(entry.arm, entry.id),
1247
+ description: compareArmDescription(entry.arm),
1248
+ prompt: armScenario.prompt,
1249
+ trace,
1250
+ });
1251
+ }
1252
+ return buildCompareResult(arms, {
1253
+ faster: resolveCompareMetricPairs(scenario.compare?.faster, armIds),
1254
+ cheaper: resolveCompareMetricPairs(scenario.compare?.cheaper, armIds),
1255
+ });
1240
1256
  }
1241
1257
  async function runCompareJudgeRubric(compare, rubric, runCwd, host) {
1242
1258
  const criteria = collectCompareJudgeCriteria(rubric);
1243
- if (criteria.length === 0 || !compare.a.trace || !compare.b.trace) {
1259
+ const arms = compareResultArms(compare).filter((arm) => arm.trace !== undefined);
1260
+ if (criteria.length === 0 || arms.length < 2) {
1244
1261
  return { failures: [], verdicts: [] };
1245
1262
  }
1246
- const result = await judgeCompareTraces({
1247
- aLabel: compare.a.label,
1248
- a: compare.a.trace,
1249
- bLabel: compare.b.label,
1250
- b: compare.b.trace,
1263
+ const pair = arms.length === 2 && arms[0] && arms[1]
1264
+ ? {
1265
+ aLabel: arms[0].label,
1266
+ a: arms[0].trace,
1267
+ bLabel: arms[1].label,
1268
+ b: arms[1].trace,
1269
+ }
1270
+ : undefined;
1271
+ const result = await judgeCompareTraces(pair ?? {
1272
+ arms: arms.map((arm) => ({ label: arm.label, trace: arm.trace })),
1251
1273
  }, criteria, { cwd: runCwd, host });
1252
1274
  if (result.skipped) {
1253
1275
  return {
@@ -1307,6 +1329,20 @@ function suiteNameFromPath(suitePath) {
1307
1329
  return basename(dirname(suitePath));
1308
1330
  }
1309
1331
  export async function runAllSuites(options) {
1332
+ const previousAuthMode = getProcessAuthMode();
1333
+ if (options.authMode !== undefined) {
1334
+ setProcessAuthMode(options.authMode);
1335
+ }
1336
+ try {
1337
+ return await runAllSuitesBody(options);
1338
+ }
1339
+ finally {
1340
+ if (options.authMode !== undefined) {
1341
+ setProcessAuthMode(previousAuthMode);
1342
+ }
1343
+ }
1344
+ }
1345
+ async function runAllSuitesBody(options) {
1310
1346
  const suitePaths = await discoverSuites(resolve(options.cwd, options.suitesDir));
1311
1347
  const filtered = options.filter
1312
1348
  ? suitePaths.filter((suitePath) => {
@@ -1344,6 +1380,7 @@ export async function runAllSuites(options) {
1344
1380
  scenarioRetries: options.scenarioRetries,
1345
1381
  rubricsDir: options.rubricsDir,
1346
1382
  adapterModules: options.adapterModules,
1383
+ authMode: options.authMode ?? getProcessAuthMode(),
1347
1384
  }));
1348
1385
  }
1349
1386
  }