@post-print/agent-test 2.3.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +4 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/sdk/baselines.d.ts +7 -0
  10. package/dist/sdk/baselines.d.ts.map +1 -0
  11. package/dist/sdk/baselines.js +40 -0
  12. package/dist/sdk/baselines.js.map +1 -0
  13. package/dist/sdk/claims.d.ts +65 -0
  14. package/dist/sdk/claims.d.ts.map +1 -0
  15. package/dist/sdk/claims.js +156 -0
  16. package/dist/sdk/claims.js.map +1 -0
  17. package/dist/sdk/cli.d.ts +2 -0
  18. package/dist/sdk/cli.d.ts.map +1 -1
  19. package/dist/sdk/cli.js +26 -1
  20. package/dist/sdk/cli.js.map +1 -1
  21. package/dist/sdk/definitions.d.ts.map +1 -1
  22. package/dist/sdk/definitions.js +1 -1
  23. package/dist/sdk/definitions.js.map +1 -1
  24. package/dist/sdk/environment-observation.d.ts +38 -0
  25. package/dist/sdk/environment-observation.d.ts.map +1 -0
  26. package/dist/sdk/environment-observation.js +108 -0
  27. package/dist/sdk/environment-observation.js.map +1 -0
  28. package/dist/sdk/execution-reporter.d.ts.map +1 -1
  29. package/dist/sdk/execution-reporter.js +6 -0
  30. package/dist/sdk/execution-reporter.js.map +1 -1
  31. package/dist/sdk/execution-runner.d.ts +5 -0
  32. package/dist/sdk/execution-runner.d.ts.map +1 -1
  33. package/dist/sdk/execution-runner.js +43 -7
  34. package/dist/sdk/execution-runner.js.map +1 -1
  35. package/dist/sdk/execution-store.d.ts +12 -0
  36. package/dist/sdk/execution-store.d.ts.map +1 -1
  37. package/dist/sdk/execution-store.js +23 -1
  38. package/dist/sdk/execution-store.js.map +1 -1
  39. package/dist/sdk/expect.d.ts +15 -1
  40. package/dist/sdk/expect.d.ts.map +1 -1
  41. package/dist/sdk/expect.js +38 -3
  42. package/dist/sdk/expect.js.map +1 -1
  43. package/dist/sdk/failure.d.ts +1 -1
  44. package/dist/sdk/failure.d.ts.map +1 -1
  45. package/dist/sdk/failure.js +4 -4
  46. package/dist/sdk/failure.js.map +1 -1
  47. package/dist/sdk/judge.d.ts.map +1 -1
  48. package/dist/sdk/judge.js +11 -7
  49. package/dist/sdk/judge.js.map +1 -1
  50. package/dist/sdk/operation-ledger.d.ts +25 -0
  51. package/dist/sdk/operation-ledger.d.ts.map +1 -0
  52. package/dist/sdk/operation-ledger.js +72 -0
  53. package/dist/sdk/operation-ledger.js.map +1 -0
  54. package/dist/sdk/pass-rate.d.ts +57 -0
  55. package/dist/sdk/pass-rate.d.ts.map +1 -0
  56. package/dist/sdk/pass-rate.js +113 -0
  57. package/dist/sdk/pass-rate.js.map +1 -0
  58. package/dist/sdk/run-record.d.ts +76 -0
  59. package/dist/sdk/run-record.d.ts.map +1 -0
  60. package/dist/sdk/run-record.js +152 -0
  61. package/dist/sdk/run-record.js.map +1 -0
  62. package/dist/sdk/runtime.d.ts +11 -0
  63. package/dist/sdk/runtime.d.ts.map +1 -1
  64. package/dist/sdk/runtime.js +56 -14
  65. package/dist/sdk/runtime.js.map +1 -1
  66. package/dist/sdk/sampling.d.ts +23 -0
  67. package/dist/sdk/sampling.d.ts.map +1 -0
  68. package/dist/sdk/sampling.js +55 -0
  69. package/dist/sdk/sampling.js.map +1 -0
  70. package/dist/sdk/test.d.ts +7 -2
  71. package/dist/sdk/test.d.ts.map +1 -1
  72. package/dist/sdk/test.js +32 -3
  73. package/dist/sdk/test.js.map +1 -1
  74. package/dist/sdk/types.d.ts +14 -0
  75. package/dist/sdk/types.d.ts.map +1 -1
  76. package/dist/sdk/verdict.d.ts +43 -0
  77. package/dist/sdk/verdict.d.ts.map +1 -0
  78. package/dist/sdk/verdict.js +195 -0
  79. package/dist/sdk/verdict.js.map +1 -0
  80. package/dist/viewer/client-entry.js +24 -24
  81. package/dist/viewer/presentation.d.ts +4 -0
  82. package/dist/viewer/presentation.d.ts.map +1 -1
  83. package/dist/viewer/presentation.js +17 -0
  84. package/dist/viewer/presentation.js.map +1 -1
  85. package/dist/viewer/run-inbox.d.ts.map +1 -1
  86. package/dist/viewer/run-inbox.js +7 -0
  87. package/dist/viewer/run-inbox.js.map +1 -1
  88. package/dist/viewer/v2-client.d.ts.map +1 -1
  89. package/dist/viewer/v2-client.js +13 -2
  90. package/dist/viewer/v2-client.js.map +1 -1
  91. package/dist/viewer/viewer-queries.d.ts +2 -0
  92. package/dist/viewer/viewer-queries.d.ts.map +1 -1
  93. package/dist/viewer/viewer-queries.js.map +1 -1
  94. package/package.json +2 -2
package/README.md CHANGED
@@ -25,7 +25,7 @@ test("answers correctly", async ({ coder, grounding }) => {
25
25
 
26
26
  Set default `agent`, `judge`, and `workspace` directly in `defineConfig`. Harness definitions select providers, models, and auth. Factories only declare resources; each test receives its own executable handles. Every run starts fresh; use `run.continue` for the same task. Compare with ordinary JavaScript and `expect`. Use `expect(actual, "Readable criterion")` to give a derived viewer criterion a concise label, or declare explicit test criteria when they should override derived assertions. Pass `describe(name, { description }, define)` to state a suite's shared intent once, and keep each test's `description` for what that case adds.
27
27
 
28
- Use assertions for anything code can decide, `runCommand` to verify the final workspace yourself, and a judge only for semantic questions. Judge input is explicitly selected JSON data. Output is schema-validated and typed. The runner records artifacts and usage, handles cancellation, and owns cleanup. Built-in timeouts are recorded as terminal infrastructure failures, including the configured deadline and partial trace. A new recorded run also recovers dead-owner summaries without requiring viewer navigation. Global skills default to false. A run or judge that names a path outside its workspace fails with `WorkspaceEscapeError`; see [isolation](../../docs/isolation.md#isolation-boundary). No browser is required for CLI execution.
28
+ Use assertions for anything code can decide, `runCommand` to verify the final workspace yourself, and a judge only for semantic questions. Judge input is explicitly selected JSON data. Output is schema-validated and typed. The runner records artifacts and usage, handles cancellation, and owns cleanup. Built-in timeouts are recorded as terminal infrastructure failures, including the configured deadline and partial trace; auth failures, missing binaries, host crashes, and incomplete capture are also infrastructure failures, and a test with no completed agent operation fails unless it declares `noAgent: true`. A new recorded run also recovers dead-owner summaries without requiring viewer navigation. Global skills default to false. A run or judge that names a path outside its workspace fails with `WorkspaceEscapeError`; see [isolation](../../docs/isolation.md#isolation-boundary). No browser is required for CLI execution.
29
29
 
30
30
  See [the SDK guide](../../docs/sdk-v2.md), [tour](../../agent-suites/tour/tour.spec.ts), and [getting started](../../docs/getting-started.md). The old `test.use`, `compare`, `defineJudge`, and run-owned judge API are removed.
31
31
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAQA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAQA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB5D"}
package/dist/cli.js CHANGED
@@ -3,12 +3,14 @@ import { fileURLToPath } from "node:url";
3
3
  import { parseArgs } from "node:util";
4
4
  import { isCliMain } from "./cli-entry.js";
5
5
  import { runHostLogin } from "./host-login.js";
6
- import { runSdkCli } from "./sdk/cli.js";
6
+ import { runBaselineCli, runSdkCli } from "./sdk/cli.js";
7
7
  import { runSdkViewerCli } from "./sdk/viewer.js";
8
8
  export async function runCli(args) {
9
9
  const [command, ...rest] = args;
10
10
  if (command === "test")
11
11
  return runSdkCli(rest);
12
+ if (command === "baseline")
13
+ return runBaselineCli(rest);
12
14
  if (command === "viewer")
13
15
  return runSdkViewerCli(rest);
14
16
  if (command === "login") {
@@ -19,7 +21,7 @@ export async function runCli(args) {
19
21
  return runHostLogin(values.host);
20
22
  }
21
23
  if (!command || command === "--help" || command === "-h") {
22
- console.log("agent-test test [Playwright options]\nagent-test viewer [--config path] [--port number]\nagent-test login [--host cursor|openai|claude]\n\nConfigure agents in agent-test.config.ts. JSON suites and legacy scoring flags were removed.");
24
+ console.log("agent-test test [Playwright options]\nagent-test baseline [--config path]\nagent-test viewer [--config path] [--port number]\nagent-test login [--host cursor|openai|claude]\n\nConfigure agents in agent-test.config.ts. JSON suites and legacy scoring flags were removed.");
23
25
  return 0;
24
26
  }
25
27
  throw new Error(`Unsupported command: ${command}. Use agent-test test with a TypeScript suite. Run agent-test --help for commands.`);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IAC1C,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YAC5B,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;SACxD,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CACV,yOAAyO,CACzO,CAAC;QACF,OAAO,CAAC,CAAC;IACV,CAAC;IACD,MAAM,IAAI,KAAK,CACd,wBAAwB,OAAO,oFAAoF,CACnH,CAAC;AACH,CAAC;AACD,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IAC1C,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YAC5B,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;SACxD,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CACV,8QAA8Q,CAC9Q,CAAC;QACF,OAAO,CAAC,CAAC;IACV,CAAC;IACD,MAAM,IAAI,KAAK,CACd,wBAAwB,OAAO,oFAAoF,CACnH,CAAC;AACH,CAAC;AACD,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,14 @@
1
+ export type { TestInfo } from "@playwright/test";
1
2
  export { WorkspaceEscapeError } from "@post-print/agent-harness";
2
3
  export { z } from "zod";
4
+ export type { EnvironmentObservation, ObserveEnvironment } from "./sdk/environment-observation.js";
3
5
  export { expect } from "./sdk/expect.js";
4
6
  export { statistics } from "./sdk/metrics.js";
7
+ export { expectWorkspaceEscape, type WorkspaceEscapeOutcome } from "./sdk/operation-ledger.js";
8
+ export { differenceInterval, exactInterval, lowerBound, samplingPlan } from "./sdk/pass-rate.js";
5
9
  export { type ExecutionProgress, reportProgress } from "./sdk/progress.js";
6
10
  export { type CommandResult, type RunCommandOptions, runCommand } from "./sdk/run-command.js";
11
+ export { ConditionsUnknownError, type OfferedTool, type RunExposure, type RunRecord, recordHostCalibration, } from "./sdk/run-record.js";
7
12
  export { type AgentTestConfig, defineConfig, describe, type SuiteDetails, type SuiteTest, } from "./sdk/test.js";
8
13
  export type { AgentFixture, AgentSettings, Evaluation, JsonValue, JudgeFixture, JudgeSettings, Run, RunOptions, RunUsage, Statistics, WorkspaceSetup, } from "./sdk/types.js";
9
14
  export type { Workspace } from "./sdk/workspace.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EACN,KAAK,eAAe,EACpB,YAAY,EACZ,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,GAAG,EACH,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,KAAK,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EACN,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,qBAAqB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,eAAe,EACpB,YAAY,EACZ,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,GAAG,EACH,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -2,7 +2,10 @@ export { WorkspaceEscapeError } from "@post-print/agent-harness";
2
2
  export { z } from "zod";
3
3
  export { expect } from "./sdk/expect.js";
4
4
  export { statistics } from "./sdk/metrics.js";
5
+ export { expectWorkspaceEscape } from "./sdk/operation-ledger.js";
6
+ export { differenceInterval, exactInterval, lowerBound, samplingPlan } from "./sdk/pass-rate.js";
5
7
  export { reportProgress } from "./sdk/progress.js";
6
8
  export { runCommand } from "./sdk/run-command.js";
9
+ export { ConditionsUnknownError, recordHostCalibration, } from "./sdk/run-record.js";
7
10
  export { defineConfig, describe, } from "./sdk/test.js";
8
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAA0B,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAA8C,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAEN,YAAY,EACZ,QAAQ,GAGR,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAA+B,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAA0B,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAA8C,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EACN,sBAAsB,EAItB,qBAAqB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEN,YAAY,EACZ,QAAQ,GAGR,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { BaselineRecord, ClaimResult } from "./claims.js";
2
+ /** Committed, because the execution store keeps only the newest fifty runs. */
3
+ export declare function baselineDirectory(config: string): string;
4
+ export declare function readBaselines(config: string): Promise<Record<string, BaselineRecord>>;
5
+ /** Saves each single-arm claim with a verdict. Returns the claims it saved. */
6
+ export declare function saveBaselines(config: string, claims: ClaimResult[]): Promise<string[]>;
7
+ //# sourceMappingURL=baselines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baselines.d.ts","sourceRoot":"","sources":["../../src/sdk/baselines.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAID,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAS3F;AACD,+EAA+E;AAC/E,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqB5F"}
@@ -0,0 +1,40 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
4
+ /** Committed, because the execution store keeps only the newest fifty runs. */
5
+ export function baselineDirectory(config) {
6
+ return join(dirname(config), "agent-test-baselines");
7
+ }
8
+ function baselineFile(claim) {
9
+ return `${createHash("sha256").update(claim).digest("hex").slice(0, 16)}.json`;
10
+ }
11
+ export async function readBaselines(config) {
12
+ const directory = baselineDirectory(config);
13
+ const names = await readdir(directory).catch(() => []);
14
+ const records = await Promise.all(names
15
+ .filter((name) => name.endsWith(".json"))
16
+ .map(async (name) => JSON.parse(await readFile(join(directory, name), "utf8"))));
17
+ return Object.fromEntries(records.map((record) => [record.claim, record]));
18
+ }
19
+ /** Saves each single-arm claim with a verdict. Returns the claims it saved. */
20
+ export async function saveBaselines(config, claims) {
21
+ const directory = baselineDirectory(config);
22
+ await mkdir(directory, { recursive: true });
23
+ const saved = [];
24
+ for (const claim of claims) {
25
+ const [arm] = claim.arms;
26
+ if (!arm || claim.arms.length !== 1 || !arm.total || !claim.fingerprint)
27
+ continue;
28
+ const record = {
29
+ claim: claim.claim,
30
+ fingerprint: claim.fingerprint,
31
+ passed: arm.passed,
32
+ total: arm.total,
33
+ at: new Date().toISOString(),
34
+ };
35
+ await writeFile(join(directory, baselineFile(claim.claim)), `${JSON.stringify(record, null, 2)}\n`);
36
+ saved.push(claim.claim);
37
+ }
38
+ return saved;
39
+ }
40
+ //# sourceMappingURL=baselines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baselines.js","sourceRoot":"","sources":["../../src/sdk/baselines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACtD,CAAC;AACD,SAAS,YAAY,CAAC,KAAa;IAClC,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;AAChF,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IACjD,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,KAAK;SACH,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACxC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAChF,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,CAAE,OAA4B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AACD,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,MAAqB;IACxE,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,SAAS;QAClF,MAAM,MAAM,GAAmB;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC5B,CAAC;QACF,MAAM,SAAS,CACd,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAC1C,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACtC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { type RateDifference, type RateInterval } from "./pass-rate.js";
2
+ /** What differs between the arms of a comparison on purpose. Anything else refuses the comparison. */
3
+ export type ComparisonSubject = "prompt" | "skills" | "workspace" | "tools" | "model";
4
+ export interface SampleAnnotation {
5
+ title: string;
6
+ variant?: string;
7
+ flagAt?: number;
8
+ n: number;
9
+ subject?: ComparisonSubject;
10
+ }
11
+ export type SampleOutcome = "passed" | "failed" | "no_verdict" | "not_run";
12
+ export interface ClaimSample {
13
+ claim: string;
14
+ sample?: SampleAnnotation;
15
+ outcome: SampleOutcome;
16
+ record?: Record<string, unknown>;
17
+ }
18
+ export interface ClaimArm {
19
+ variant?: string;
20
+ passed: number;
21
+ failed: number;
22
+ noVerdict: number;
23
+ /** Runs with a verdict: passed plus failed. */
24
+ total: number;
25
+ interval: RateInterval;
26
+ lowerBound: number;
27
+ }
28
+ export interface BaselineRecord {
29
+ claim: string;
30
+ fingerprint: string;
31
+ passed: number;
32
+ total: number;
33
+ at: string;
34
+ }
35
+ export type BaselineComparison = {
36
+ status: "none";
37
+ } | {
38
+ status: "new_conditions";
39
+ } | {
40
+ status: "same_conditions";
41
+ regressed: boolean;
42
+ passed: number;
43
+ total: number;
44
+ };
45
+ export interface ClaimResult {
46
+ claim: string;
47
+ arms: ClaimArm[];
48
+ /** The test asked to be sampled, rather than being repeated from the command line. */
49
+ declared: boolean;
50
+ flagAt?: number;
51
+ /** The plan's decision: flagged, clear of the flag, or only measured. */
52
+ decision: "flagged" | "clear" | "measured" | "no_verdict";
53
+ fingerprint?: string;
54
+ comparison?: RateDifference & {
55
+ first: string;
56
+ second: string;
57
+ };
58
+ comparisonRefused?: string;
59
+ baseline: BaselineComparison;
60
+ }
61
+ /** A claim is every run of one test: declared samples, or repeats of the same title. */
62
+ export declare function buildClaims(samples: ClaimSample[], baselines?: Record<string, BaselineRecord>): ClaimResult[];
63
+ /** Plain lines for a person: a rate, its uncertainty, and what may be concluded. */
64
+ export declare function claimLines(claim: ClaimResult): string[];
65
+ //# sourceMappingURL=claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../src/sdk/claims.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AACtF,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AACD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;AAC3E,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AACD,MAAM,WAAW,QAAQ;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACX;AACD,MAAM,MAAM,kBAAkB,GAC3B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAC5B;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACpF,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,sFAAsF;IACtF,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,cAAc,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;CAC7B;AAgHD,wFAAwF;AACxF,wBAAgB,WAAW,CAC1B,OAAO,EAAE,WAAW,EAAE,EACtB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,GAC5C,WAAW,EAAE,CAKf;AAwBD,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAcvD"}
@@ -0,0 +1,156 @@
1
+ import { differenceInterval, exactInterval, lowerBound, regressedFrom, } from "./pass-rate.js";
2
+ const SHARED_CONDITIONS = ["host", "binaryVersion", "confinement", "network"];
3
+ const SUBJECT_CONDITIONS = {
4
+ requestedModel: "model",
5
+ observedModel: "model",
6
+ "hashes.prompt": "prompt",
7
+ "hashes.skills": "skills",
8
+ "hashes.initialSnapshot": "workspace",
9
+ };
10
+ function recordField(record, field) {
11
+ return field
12
+ .split(".")
13
+ .reduce((value, key) => value?.[key], record);
14
+ }
15
+ function fieldsFor(subject) {
16
+ const free = Object.entries(SUBJECT_CONDITIONS)
17
+ .filter(([, owner]) => owner !== subject)
18
+ .map(([field]) => field);
19
+ return [...SHARED_CONDITIONS, "hashes.suite", ...free];
20
+ }
21
+ function fingerprintOf(samples) {
22
+ const records = samples.flatMap(({ record }) => (record ? [record] : []));
23
+ const first = records[0];
24
+ if (!first)
25
+ return undefined;
26
+ return JSON.stringify(fieldsFor().map((field) => recordField(first, field)));
27
+ }
28
+ function armOf(variant, samples) {
29
+ const count = (outcome) => samples.filter((s) => s.outcome === outcome).length;
30
+ const passed = count("passed");
31
+ const failed = count("failed");
32
+ const total = passed + failed;
33
+ return {
34
+ variant,
35
+ passed,
36
+ failed,
37
+ noVerdict: count("no_verdict"),
38
+ total,
39
+ interval: exactInterval(passed, total),
40
+ lowerBound: lowerBound(passed, total),
41
+ };
42
+ }
43
+ /** Names the first condition that differs when it should not, so a comparison can be refused. */
44
+ function comparisonConflict(samples, subject) {
45
+ const records = samples.flatMap(({ record }) => (record ? [record] : []));
46
+ const first = records[0];
47
+ if (!first)
48
+ return "no run recorded its conditions";
49
+ for (const field of fieldsFor(subject)) {
50
+ const expected = JSON.stringify(recordField(first, field));
51
+ if (records.some((record) => JSON.stringify(recordField(record, field)) !== expected))
52
+ return `${field} differs between runs`;
53
+ }
54
+ return undefined;
55
+ }
56
+ function decisionOf(arms, flagAt) {
57
+ if (arms.every(({ total }) => total === 0))
58
+ return "no_verdict";
59
+ if (flagAt === undefined)
60
+ return "measured";
61
+ return arms.some(({ failed }) => failed >= flagAt) ? "flagged" : "clear";
62
+ }
63
+ function compared(arms, samples, subject) {
64
+ const [first, second] = arms;
65
+ if (arms.length !== 2 || !first || !second)
66
+ return {};
67
+ const conflict = comparisonConflict(samples, subject);
68
+ if (conflict)
69
+ return { comparisonRefused: conflict };
70
+ return {
71
+ comparison: {
72
+ ...differenceInterval(first, second),
73
+ first: first.variant ?? "first",
74
+ second: second.variant ?? "second",
75
+ },
76
+ };
77
+ }
78
+ function baselineComparison(arms, fingerprint, baseline) {
79
+ const [arm] = arms;
80
+ if (!baseline || !arm || arms.length !== 1)
81
+ return { status: "none" };
82
+ if (baseline.fingerprint !== fingerprint)
83
+ return { status: "new_conditions" };
84
+ return {
85
+ status: "same_conditions",
86
+ regressed: regressedFrom(baseline, arm),
87
+ passed: baseline.passed,
88
+ total: baseline.total,
89
+ };
90
+ }
91
+ function claimOf(claim, samples, baselines) {
92
+ const annotation = samples.find(({ sample }) => sample)?.sample;
93
+ const variants = [...new Set(samples.map(({ sample }) => sample?.variant))];
94
+ const arms = variants.map((variant) => armOf(variant, samples.filter(({ sample }) => sample?.variant === variant)));
95
+ const fingerprint = fingerprintOf(samples);
96
+ return {
97
+ claim,
98
+ arms,
99
+ declared: annotation !== undefined,
100
+ flagAt: annotation?.flagAt,
101
+ decision: decisionOf(arms, annotation?.flagAt),
102
+ fingerprint,
103
+ ...compared(arms, samples, annotation?.subject),
104
+ baseline: baselineComparison(arms, fingerprint, baselines[claim]),
105
+ };
106
+ }
107
+ /** A claim is every run of one test: declared samples, or repeats of the same title. */
108
+ export function buildClaims(samples, baselines = {}) {
109
+ const grouped = new Map();
110
+ for (const sample of samples)
111
+ grouped.set(sample.claim, [...(grouped.get(sample.claim) ?? []), sample]);
112
+ return [...grouped].map(([claim, group]) => claimOf(claim, group, baselines));
113
+ }
114
+ function percent(value) {
115
+ return `${Math.round(value * 100)}%`;
116
+ }
117
+ function armLine(arm) {
118
+ const label = arm.variant ? `${arm.variant}: ` : "";
119
+ const unknown = arm.noVerdict ? `, ${arm.noVerdict} with no verdict` : "";
120
+ return `${label}${arm.passed} of ${arm.total} (95% interval ${percent(arm.interval.low)} to ${percent(arm.interval.high)})${unknown}`;
121
+ }
122
+ function comparisonLine(claim) {
123
+ if (claim.comparisonRefused)
124
+ return [`not compared: ${claim.comparisonRefused}`];
125
+ if (!claim.comparison)
126
+ return [];
127
+ const { first, second, difference, low, high, distinguishable } = claim.comparison;
128
+ const reading = distinguishable ? "a real difference" : "no difference shown at this sample size";
129
+ return [
130
+ `${first} minus ${second}: ${percent(difference)} (95% interval ${percent(low)} to ${percent(high)}), ${reading}`,
131
+ ];
132
+ }
133
+ function baselineLine({ baseline }) {
134
+ if (baseline.status === "new_conditions")
135
+ return ["conditions changed, so no baseline applies"];
136
+ if (baseline.status !== "same_conditions")
137
+ return [];
138
+ const against = `baseline ${baseline.passed} of ${baseline.total}`;
139
+ return [baseline.regressed ? `regressed from ${against}` : `consistent with ${against}`];
140
+ }
141
+ /** Plain lines for a person: a rate, its uncertainty, and what may be concluded. */
142
+ export function claimLines(claim) {
143
+ const decision = claim.decision === "flagged"
144
+ ? [`flagged at ${claim.flagAt} failures`]
145
+ : claim.decision === "clear"
146
+ ? [`clear of the flag at ${claim.flagAt} failures`]
147
+ : [];
148
+ return [
149
+ claim.claim,
150
+ ...claim.arms.map(armLine),
151
+ ...comparisonLine(claim),
152
+ ...baselineLine(claim),
153
+ ...decision,
154
+ ];
155
+ }
156
+ //# sourceMappingURL=claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/sdk/claims.ts"],"names":[],"mappings":"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"}
package/dist/sdk/cli.d.ts CHANGED
@@ -10,4 +10,6 @@ export declare function viewerHint(input: {
10
10
  interactive: boolean;
11
11
  ci: boolean;
12
12
  }): string[];
13
+ /** Saves the newest run's sampled claims as the baselines later runs compare against. */
14
+ export declare function runBaselineCli(args: string[]): Promise<number>;
13
15
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAwCpD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB/D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,OAAO,CAAC;CACZ,GAAG,MAAM,EAAE,CAaX"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA+CpD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC/D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,OAAO,CAAC;CACZ,GAAG,MAAM,EAAE,CAaX;AAED,yFAAyF;AACzF,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CASpE"}
package/dist/sdk/cli.js CHANGED
@@ -1,6 +1,16 @@
1
1
  import { relative, resolve } from "node:path";
2
+ import { baselineDirectory, saveBaselines } from "./baselines.js";
3
+ import { claimLines } from "./claims.js";
2
4
  import { startRecordedExecution } from "./execution-runner.js";
5
+ import { executionHistoryRoot, listExecutionHistory } from "./execution-store.js";
6
+ import { verdictSentence } from "./verdict.js";
3
7
  export { playwrightCli } from "./playwright-cli.js";
8
+ async function saveLatestBaselines(config) {
9
+ const root = executionHistoryRoot(config);
10
+ const summaries = await listExecutionHistory(root);
11
+ const latest = summaries.find((summary) => summary.verdict?.claims.length);
12
+ return latest?.verdict ? saveBaselines(config, latest.verdict.claims) : [];
13
+ }
4
14
  function runnerArgument(args, index) {
5
15
  const value = args[index] ?? "";
6
16
  if (value === "--config" || value === "-c")
@@ -36,9 +46,12 @@ function runnerArguments(args) {
36
46
  return { config, reporter, passThrough };
37
47
  }
38
48
  export async function runSdkCli(args) {
39
- const { config, reporter: requestedReporter, passThrough } = runnerArguments(args);
49
+ const { config, reporter: requestedReporter, passThrough: parsed } = runnerArguments(args);
50
+ const measureRepeats = parsed.includes("--measure");
51
+ const passThrough = parsed.filter((argument) => argument !== "--measure");
40
52
  const execution = await startRecordedExecution({
41
53
  config,
54
+ measureRepeats,
42
55
  args: passThrough,
43
56
  reporter: requestedReporter,
44
57
  onOutput: (line) => process.stdout.write(`${line}\n`),
@@ -47,6 +60,9 @@ export async function runSdkCli(args) {
47
60
  process.once("SIGINT", cancel);
48
61
  try {
49
62
  const code = await execution.completed;
63
+ const result = await execution.verdict;
64
+ if (!passThrough.includes("--list"))
65
+ process.stdout.write(`${[verdictSentence(result), ...result.claims.flatMap(claimLines)].join("\n")}\n`);
50
66
  if (!passThrough.includes("--list"))
51
67
  for (const line of viewerHint({
52
68
  config,
@@ -77,4 +93,13 @@ export function viewerHint(input) {
77
93
  lines.push("Agent: ask the user whether to open the results viewer; start it only if they agree.");
78
94
  return lines;
79
95
  }
96
+ /** Saves the newest run's sampled claims as the baselines later runs compare against. */
97
+ export async function runBaselineCli(args) {
98
+ const { config } = runnerArguments(args);
99
+ const saved = await saveLatestBaselines(config);
100
+ process.stdout.write(saved.length
101
+ ? `Saved ${saved.length} baselines to ${relative(process.cwd(), baselineDirectory(config))}. Commit them.\n`
102
+ : "The newest run has no sampled claims to save.\n");
103
+ return 0;
104
+ }
80
105
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,SAAS,cAAc,CAAC,IAAc,EAAE,KAAa;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI;QACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,sBAAsB,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;IAC9F,IAAI,KAAK,KAAK,YAAY;QACzB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;IAChF,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QAClC,OAAO;YACN,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM;YAClD,IAAI,EAAE,KAAK,GAAG,CAAC;SACf,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;AACjD,CAAC;AACD,SAAS,eAAe,CAAC,IAAc;IACtC,IAAI,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC7C,IAAI,QAAQ,GAAG,MAAM,CAAC;IACtB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAI,CAAC;QAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;QACtB,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,QAAQ;gBACZ,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM;YACP,KAAK,UAAU;gBACd,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC1B,MAAM;YACP,KAAK,MAAM;gBACV,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC7C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC;QAC9C,MAAM;QACN,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;KACrD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC;gBAC7B,MAAM;gBACN,WAAW,EAAE,SAAS,CAAC,EAAE;gBACzB,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;gBAC1C,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;aAC7B,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACb,CAAC;YAAS,CAAC;QACV,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAK1B;IACA,IAAI,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GACZ,UAAU,KAAK,sBAAsB;QACpC,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,8BAA8B,UAAU,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK,CAAC,WAAW;QACrB,KAAK,CAAC,IAAI,CACT,sFAAsF,CACtF,CAAC;IACH,OAAO,KAAK,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;CAC9C;AACD,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;IAC7D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CACpC;AACD,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;AACrD,eAAO,MAAM,SAAS;IACrB,KAAK,cAAa,aAAa,KAAQ,aAAa;IACpD,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,YAAY,aAAa,CAAC,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,CAAC;CAO1E,CAAC;AAkBF,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,aAAa,CAWtF;AACD,wBAAgB,eAAe,CAC9B,YAAY,EAAE,eAAe,GAAG,SAAS,EACzC,QAAQ,EAAE,aAAa,GACrB,eAAe,CAYjB;AACD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,QASxE"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;CAC9C;AACD,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;IAC7D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CACpC;AACD,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;AACrD,eAAO,MAAM,SAAS;IACrB,KAAK,cAAa,aAAa,KAAQ,aAAa;IACpD,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,YAAY,aAAa,CAAC,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,CAAC;CAO1E,CAAC;AAkBF,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,aAAa,CAWtF;AACD,wBAAgB,eAAe,CAC9B,YAAY,EAAE,eAAe,GAAG,SAAS,EACzC,QAAQ,EAAE,aAAa,GACrB,eAAe,CAkBjB;AACD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,QASxE"}
@@ -40,7 +40,7 @@ export function configuredAgent(defaultAgent, settings) {
40
40
  const selected = settings.agent ?? defaultAgent;
41
41
  if (!selected)
42
42
  throw new Error("Configure an agent definition for this resource");
43
- const { agent: _agent, description: _description, workspace: _workspace, ...options } = settings;
43
+ const { agent: _agent, description: _description, workspace: _workspace, observeEnvironment: _observeEnvironment, ...options } = settings;
44
44
  const configured = {
45
45
  ...selected,
46
46
  options: mergeSettings(selected.options, options),
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface ObserveEnvironment {
2
+ /** Workspace-relative paths to summarize, including ones snapshots exclude such as node_modules. */
3
+ paths?: string[];
4
+ }
5
+ export interface PathManifest {
6
+ exists: boolean;
7
+ files: number;
8
+ bytes: number;
9
+ truncated?: boolean;
10
+ }
11
+ export interface EnvironmentObservation {
12
+ /** False when `ps` or `lsof` could not be run, so absence below proves nothing. */
13
+ processesKnown: boolean;
14
+ /** Processes started during the run that are still alive and tied to the workspace. */
15
+ processes: {
16
+ pid: number;
17
+ command: string;
18
+ }[];
19
+ /** Ports these processes are listening on. */
20
+ listeningPorts: {
21
+ port: number;
22
+ pid: number;
23
+ command: string;
24
+ }[];
25
+ paths: Record<string, PathManifest>;
26
+ }
27
+ export interface EnvironmentBaseline {
28
+ pids: Set<number>;
29
+ }
30
+ export declare function captureEnvironmentBaseline(): Promise<EnvironmentBaseline>;
31
+ export declare function observeEnvironment(input: {
32
+ baseline: EnvironmentBaseline;
33
+ workspace: string;
34
+ observe: ObserveEnvironment;
35
+ }): Promise<EnvironmentObservation>;
36
+ /** A test that observed a survivor has its evidence; the process must not outlive the test. */
37
+ export declare function stopSurvivors(pids: readonly number[]): void;
38
+ //# sourceMappingURL=environment-observation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-observation.d.ts","sourceRoot":"","sources":["../../src/sdk/environment-observation.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,kBAAkB;IAClC,oGAAoG;IACpG,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,WAAW,sBAAsB;IACtC,mFAAmF;IACnF,cAAc,EAAE,OAAO,CAAC;IACxB,uFAAuF;IACvF,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,8CAA8C;IAC9C,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACpC;AACD,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AAiBD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAE/E;AA+DD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;CAC5B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAqBlC;AACD,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAQ3D"}