@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.
- package/README.md +3 -2
- package/dist/cli.d.ts +3 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15 -3
- package/dist/cli.js.map +1 -1
- package/dist/compare-scenario.d.ts +37 -15
- package/dist/compare-scenario.d.ts.map +1 -1
- package/dist/compare-scenario.js +236 -65
- package/dist/compare-scenario.js.map +1 -1
- package/dist/debug-bundle.d.ts +1 -0
- package/dist/debug-bundle.d.ts.map +1 -1
- package/dist/debug-bundle.js +4 -1
- package/dist/debug-bundle.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +15 -13
- package/dist/doctor.js.map +1 -1
- package/dist/html-report.d.ts.map +1 -1
- package/dist/html-report.js +135 -37
- package/dist/html-report.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/live-isolation.d.ts +3 -1
- package/dist/live-isolation.d.ts.map +1 -1
- package/dist/live-isolation.js +3 -0
- package/dist/live-isolation.js.map +1 -1
- package/dist/record-trace.d.ts +5 -4
- package/dist/record-trace.d.ts.map +1 -1
- package/dist/record-trace.js.map +1 -1
- package/dist/run-suite.d.ts +8 -3
- package/dist/run-suite.d.ts.map +1 -1
- package/dist/run-suite.js +132 -95
- package/dist/run-suite.js.map +1 -1
- package/dist/scenario-story.d.ts +15 -22
- package/dist/scenario-story.d.ts.map +1 -1
- package/dist/scenario-story.js +310 -61
- package/dist/scenario-story.js.map +1 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +90 -14
- package/dist/theme.js.map +1 -1
- package/dist/types.d.ts +60 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/validate-suite.d.ts.map +1 -1
- package/dist/validate-suite.js +100 -34
- package/dist/validate-suite.js.map +1 -1
- package/package.json +2 -2
package/dist/record-trace.d.ts
CHANGED
|
@@ -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?:
|
|
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
|
|
33
|
-
b
|
|
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?:
|
|
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,
|
|
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"}
|
package/dist/record-trace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-trace.js","sourceRoot":"","sources":["../src/record-trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAIxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD,IAAI,uBAA2C,CAAC;AAEhD,2FAA2F;AAC3F,MAAM,UAAU,0BAA0B,CAAC,IAAwB;IAClE,uBAAuB,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,0BAA0B;IACzC,OAAO,uBAAuB,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,MAAM,IAAI,GACT,IAAI;SACF,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC;IAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB;IACjC,IAAI,uBAAuB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IAC1D,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,uBAAuB,CAAC,YAAoB;IACpD,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAClC,gBAAwB,EACxB,SAAiB,EACjB,YAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"record-trace.js","sourceRoot":"","sources":["../src/record-trace.ts"],"names":[],"mappings":"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"}
|
package/dist/run-suite.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
package/dist/run-suite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-suite.d.ts","sourceRoot":"","sources":["../src/run-suite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,SAAS,EAET,cAAc,EAGd,eAAe,EAEf,MAAM,2BAA2B,CAAC;
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
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
|
|
475
|
+
scenarioTrace = compareResultArms(compareResult)[0]?.trace ?? scenarioTrace;
|
|
471
476
|
}
|
|
472
477
|
if (failures.length === 0 && options.judge !== false) {
|
|
473
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
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
|
-
|
|
1122
|
-
|
|
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
|
-
|
|
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:
|
|
1139
|
-
b:
|
|
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:
|
|
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:
|
|
1186
|
+
trace: firstTrace,
|
|
1168
1187
|
compare: compareResult,
|
|
1169
1188
|
story,
|
|
1170
1189
|
...buildScenarioResultUsage({
|
|
1171
|
-
agentUsage: sumUsageParts(
|
|
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:
|
|
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,
|
|
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
|
|
1213
|
-
const
|
|
1214
|
-
const
|
|
1215
|
-
const
|
|
1216
|
-
|
|
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
|
-
|
|
1239
|
+
trace = await loadStagingTrace(getStagingTracePath(stagingSessionId, suiteName, scenario.name, entry.id));
|
|
1219
1240
|
}
|
|
1220
1241
|
catch {
|
|
1221
|
-
|
|
1242
|
+
trace = undefined;
|
|
1222
1243
|
}
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
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
|
-
|
|
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
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
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
|
}
|