@post-print/agent-test 1.1.8 → 2.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 (238) hide show
  1. package/README.md +18 -66
  2. package/dist/cli.d.ts +2 -64
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +26 -691
  5. package/dist/cli.js.map +1 -1
  6. package/dist/compare-scenario.d.ts +1 -1
  7. package/dist/compare-scenario.d.ts.map +1 -1
  8. package/dist/compare-scenario.js +72 -75
  9. package/dist/compare-scenario.js.map +1 -1
  10. package/dist/failures.d.ts +5 -1
  11. package/dist/failures.d.ts.map +1 -1
  12. package/dist/failures.js +1 -1
  13. package/dist/failures.js.map +1 -1
  14. package/dist/host-login.d.ts +1 -26
  15. package/dist/host-login.d.ts.map +1 -1
  16. package/dist/host-login.js +1 -92
  17. package/dist/host-login.js.map +1 -1
  18. package/dist/index.d.ts +6 -28
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -26
  21. package/dist/index.js.map +1 -1
  22. package/dist/scenario-story.d.ts.map +1 -1
  23. package/dist/scenario-story.js +57 -39
  24. package/dist/scenario-story.js.map +1 -1
  25. package/dist/sdk/cli.d.ts +3 -0
  26. package/dist/sdk/cli.d.ts.map +1 -0
  27. package/dist/sdk/cli.js +20 -0
  28. package/dist/sdk/cli.js.map +1 -0
  29. package/dist/sdk/definitions.d.ts +22 -0
  30. package/dist/sdk/definitions.d.ts.map +1 -0
  31. package/dist/sdk/definitions.js +58 -0
  32. package/dist/sdk/definitions.js.map +1 -0
  33. package/dist/sdk/expect.d.ts +31 -0
  34. package/dist/sdk/expect.d.ts.map +1 -0
  35. package/dist/sdk/expect.js +68 -0
  36. package/dist/sdk/expect.js.map +1 -0
  37. package/dist/sdk/judge.d.ts +16 -0
  38. package/dist/sdk/judge.d.ts.map +1 -0
  39. package/dist/sdk/judge.js +82 -0
  40. package/dist/sdk/judge.js.map +1 -0
  41. package/dist/sdk/metrics.d.ts +3 -0
  42. package/dist/sdk/metrics.d.ts.map +1 -0
  43. package/dist/sdk/metrics.js +24 -0
  44. package/dist/sdk/metrics.js.map +1 -0
  45. package/dist/sdk/reporter.d.ts +12 -0
  46. package/dist/sdk/reporter.d.ts.map +1 -0
  47. package/dist/sdk/reporter.js +58 -0
  48. package/dist/sdk/reporter.js.map +1 -0
  49. package/dist/sdk/runtime.d.ts +33 -0
  50. package/dist/sdk/runtime.d.ts.map +1 -0
  51. package/dist/sdk/runtime.js +188 -0
  52. package/dist/sdk/runtime.js.map +1 -0
  53. package/dist/sdk/test.d.ts +27 -0
  54. package/dist/sdk/test.d.ts.map +1 -0
  55. package/dist/sdk/test.js +92 -0
  56. package/dist/sdk/test.js.map +1 -0
  57. package/dist/sdk/types.d.ts +75 -0
  58. package/dist/sdk/types.d.ts.map +1 -0
  59. package/dist/sdk/types.js +2 -0
  60. package/dist/sdk/types.js.map +1 -0
  61. package/dist/sdk/usage.d.ts +10 -0
  62. package/dist/sdk/usage.d.ts.map +1 -0
  63. package/dist/sdk/usage.js +13 -0
  64. package/dist/sdk/usage.js.map +1 -0
  65. package/dist/sdk/viewer-results.d.ts +43 -0
  66. package/dist/sdk/viewer-results.d.ts.map +1 -0
  67. package/dist/sdk/viewer-results.js +126 -0
  68. package/dist/sdk/viewer-results.js.map +1 -0
  69. package/dist/sdk/viewer.d.ts +11 -0
  70. package/dist/sdk/viewer.d.ts.map +1 -0
  71. package/dist/sdk/viewer.js +160 -0
  72. package/dist/sdk/viewer.js.map +1 -0
  73. package/dist/sdk/workspace.d.ts +33 -0
  74. package/dist/sdk/workspace.d.ts.map +1 -0
  75. package/dist/sdk/workspace.js +100 -0
  76. package/dist/sdk/workspace.js.map +1 -0
  77. package/dist/types.d.ts +4 -40
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/viewer/catalog.d.ts +2 -8
  80. package/dist/viewer/catalog.d.ts.map +1 -1
  81. package/dist/viewer/catalog.js +23 -128
  82. package/dist/viewer/catalog.js.map +1 -1
  83. package/dist/viewer/client.d.ts.map +1 -1
  84. package/dist/viewer/client.js +12 -12
  85. package/dist/viewer/client.js.map +1 -1
  86. package/dist/viewer/run-controller.d.ts +4 -2
  87. package/dist/viewer/run-controller.d.ts.map +1 -1
  88. package/dist/viewer/run-controller.js +297 -248
  89. package/dist/viewer/run-controller.js.map +1 -1
  90. package/dist/viewer/server.d.ts +4 -3
  91. package/dist/viewer/server.d.ts.map +1 -1
  92. package/dist/viewer/server.js +149 -112
  93. package/dist/viewer/server.js.map +1 -1
  94. package/dist/viewer/styles.d.ts +2 -0
  95. package/dist/viewer/styles.d.ts.map +1 -0
  96. package/dist/viewer/styles.js +444 -0
  97. package/dist/viewer/styles.js.map +1 -0
  98. package/dist/worker-pool.d.ts +5 -1
  99. package/dist/worker-pool.d.ts.map +1 -1
  100. package/dist/worker-pool.js +1 -1
  101. package/dist/worker-pool.js.map +1 -1
  102. package/package.json +7 -7
  103. package/dist/check.d.ts +0 -38
  104. package/dist/check.d.ts.map +0 -1
  105. package/dist/check.js +0 -169
  106. package/dist/check.js.map +0 -1
  107. package/dist/command-allowlist.d.ts +0 -9
  108. package/dist/command-allowlist.d.ts.map +0 -1
  109. package/dist/command-allowlist.js +0 -29
  110. package/dist/command-allowlist.js.map +0 -1
  111. package/dist/debug-bundle.d.ts +0 -81
  112. package/dist/debug-bundle.d.ts.map +0 -1
  113. package/dist/debug-bundle.js +0 -392
  114. package/dist/debug-bundle.js.map +0 -1
  115. package/dist/discover-suites.d.ts +0 -2
  116. package/dist/discover-suites.d.ts.map +0 -1
  117. package/dist/discover-suites.js +0 -19
  118. package/dist/discover-suites.js.map +0 -1
  119. package/dist/doctor.d.ts +0 -24
  120. package/dist/doctor.d.ts.map +0 -1
  121. package/dist/doctor.js +0 -272
  122. package/dist/doctor.js.map +0 -1
  123. package/dist/expect.d.ts +0 -59
  124. package/dist/expect.d.ts.map +0 -1
  125. package/dist/expect.js +0 -518
  126. package/dist/expect.js.map +0 -1
  127. package/dist/host-log.d.ts +0 -17
  128. package/dist/host-log.d.ts.map +0 -1
  129. package/dist/host-log.js +0 -154
  130. package/dist/host-log.js.map +0 -1
  131. package/dist/hosts.d.ts +0 -22
  132. package/dist/hosts.d.ts.map +0 -1
  133. package/dist/hosts.js +0 -84
  134. package/dist/hosts.js.map +0 -1
  135. package/dist/html-report.d.ts +0 -18
  136. package/dist/html-report.d.ts.map +0 -1
  137. package/dist/html-report.js +0 -1276
  138. package/dist/html-report.js.map +0 -1
  139. package/dist/live-isolation.d.ts +0 -82
  140. package/dist/live-isolation.d.ts.map +0 -1
  141. package/dist/live-isolation.js +0 -399
  142. package/dist/live-isolation.js.map +0 -1
  143. package/dist/live-timeout.d.ts +0 -11
  144. package/dist/live-timeout.d.ts.map +0 -1
  145. package/dist/live-timeout.js +0 -29
  146. package/dist/live-timeout.js.map +0 -1
  147. package/dist/load-adapters.d.ts +0 -13
  148. package/dist/load-adapters.d.ts.map +0 -1
  149. package/dist/load-adapters.js +0 -76
  150. package/dist/load-adapters.js.map +0 -1
  151. package/dist/load-suite.d.ts +0 -22
  152. package/dist/load-suite.d.ts.map +0 -1
  153. package/dist/load-suite.js +0 -154
  154. package/dist/load-suite.js.map +0 -1
  155. package/dist/mcp-config.d.ts +0 -13
  156. package/dist/mcp-config.d.ts.map +0 -1
  157. package/dist/mcp-config.js +0 -121
  158. package/dist/mcp-config.js.map +0 -1
  159. package/dist/preflight.d.ts +0 -3
  160. package/dist/preflight.d.ts.map +0 -1
  161. package/dist/preflight.js +0 -17
  162. package/dist/preflight.js.map +0 -1
  163. package/dist/progress.d.ts +0 -24
  164. package/dist/progress.d.ts.map +0 -1
  165. package/dist/progress.js +0 -111
  166. package/dist/progress.js.map +0 -1
  167. package/dist/record-trace.d.ts +0 -64
  168. package/dist/record-trace.d.ts.map +0 -1
  169. package/dist/record-trace.js +0 -124
  170. package/dist/record-trace.js.map +0 -1
  171. package/dist/report-preview-server.d.ts +0 -2
  172. package/dist/report-preview-server.d.ts.map +0 -1
  173. package/dist/report-preview-server.js +0 -24
  174. package/dist/report-preview-server.js.map +0 -1
  175. package/dist/report-preview.d.ts +0 -35
  176. package/dist/report-preview.d.ts.map +0 -1
  177. package/dist/report-preview.js +0 -205
  178. package/dist/report-preview.js.map +0 -1
  179. package/dist/run-suite.d.ts +0 -139
  180. package/dist/run-suite.d.ts.map +0 -1
  181. package/dist/run-suite.js +0 -1669
  182. package/dist/run-suite.js.map +0 -1
  183. package/dist/scenario-finalizer.d.ts +0 -27
  184. package/dist/scenario-finalizer.d.ts.map +0 -1
  185. package/dist/scenario-finalizer.js +0 -39
  186. package/dist/scenario-finalizer.js.map +0 -1
  187. package/dist/scenario-retry.d.ts +0 -15
  188. package/dist/scenario-retry.d.ts.map +0 -1
  189. package/dist/scenario-retry.js +0 -52
  190. package/dist/scenario-retry.js.map +0 -1
  191. package/dist/scenario-seed.d.ts +0 -13
  192. package/dist/scenario-seed.d.ts.map +0 -1
  193. package/dist/scenario-seed.js +0 -72
  194. package/dist/scenario-seed.js.map +0 -1
  195. package/dist/suite-summary.d.ts +0 -16
  196. package/dist/suite-summary.d.ts.map +0 -1
  197. package/dist/suite-summary.js +0 -218
  198. package/dist/suite-summary.js.map +0 -1
  199. package/dist/theme.d.ts +0 -96
  200. package/dist/theme.d.ts.map +0 -1
  201. package/dist/theme.js +0 -446
  202. package/dist/theme.js.map +0 -1
  203. package/dist/validate-seeds.d.ts +0 -20
  204. package/dist/validate-seeds.d.ts.map +0 -1
  205. package/dist/validate-seeds.js +0 -72
  206. package/dist/validate-seeds.js.map +0 -1
  207. package/dist/validate-suite.d.ts +0 -24
  208. package/dist/validate-suite.d.ts.map +0 -1
  209. package/dist/validate-suite.js +0 -542
  210. package/dist/validate-suite.js.map +0 -1
  211. package/dist/viewer/cli.d.ts +0 -17
  212. package/dist/viewer/cli.d.ts.map +0 -1
  213. package/dist/viewer/cli.js +0 -38
  214. package/dist/viewer/cli.js.map +0 -1
  215. package/dist/viewer/compare-metrics.d.ts +0 -30
  216. package/dist/viewer/compare-metrics.d.ts.map +0 -1
  217. package/dist/viewer/compare-metrics.js +0 -101
  218. package/dist/viewer/compare-metrics.js.map +0 -1
  219. package/dist/viewer/context-files.d.ts +0 -8
  220. package/dist/viewer/context-files.d.ts.map +0 -1
  221. package/dist/viewer/context-files.js +0 -57
  222. package/dist/viewer/context-files.js.map +0 -1
  223. package/dist/viewer/emit.d.ts +0 -7
  224. package/dist/viewer/emit.d.ts.map +0 -1
  225. package/dist/viewer/emit.js +0 -25
  226. package/dist/viewer/emit.js.map +0 -1
  227. package/dist/viewer/live-runner.d.ts +0 -27
  228. package/dist/viewer/live-runner.d.ts.map +0 -1
  229. package/dist/viewer/live-runner.js +0 -166
  230. package/dist/viewer/live-runner.js.map +0 -1
  231. package/dist/viewer/session-server.d.ts +0 -2
  232. package/dist/viewer/session-server.d.ts.map +0 -1
  233. package/dist/viewer/session-server.js +0 -71
  234. package/dist/viewer/session-server.js.map +0 -1
  235. package/dist/warnings.d.ts +0 -3
  236. package/dist/warnings.d.ts.map +0 -1
  237. package/dist/warnings.js +0 -13
  238. package/dist/warnings.js.map +0 -1
package/dist/expect.js DELETED
@@ -1,518 +0,0 @@
1
- import { collapseTraceWhitespace, handsOnTierBeforeTools, inferReviewDepthFromText, inferRoutingFromText, routingBlockBeforeTools, } from "@post-print/agent-harness";
2
- import { disallowedShellSegments } from "./command-allowlist.js";
3
- import { assertionFailure } from "./failures.js";
4
- const REVIEW_DEPTH_PATTERNS = {
5
- quick: /\*\*Depth:\*\*\s*quick\b|\bReview\s·\s*[^·]+\s·\s*Quick\b/i,
6
- standard: /\*\*Depth:\*\*\s*standard\b|\bReview\s·\s*[^·]+\s·\s*Standard\b/i,
7
- thorough: /\*\*Depth:\*\*\s*thorough\b|\bReview\s·\s*[^·]+\s·\s*Thorough\b/i,
8
- full: /\*\*Depth:\*\*\s*full\b|\bReview\s·\s*[^·]+\s·\s*Full\b/i,
9
- };
10
- const ROUTING_HEADING_PATTERN = /(?:^|\n)#+\s*Routing\b/m;
11
- const ROUTING_BOLD_PATTERN = /\*\*Routing\*\*/;
12
- function snippet(text, max = 200) {
13
- const trimmed = text.replace(/\s+/g, " ").trim();
14
- if (trimmed.length <= max) {
15
- return trimmed;
16
- }
17
- return `${trimmed.slice(0, max)}…`;
18
- }
19
- function lineContaining(haystack, needle) {
20
- const lowerNeedle = needle.toLowerCase();
21
- for (const line of haystack.split("\n")) {
22
- if (line.toLowerCase().includes(lowerNeedle)) {
23
- return snippet(line.trim(), 240);
24
- }
25
- }
26
- return undefined;
27
- }
28
- function nearestMissLine(haystack, expected) {
29
- const words = expected
30
- .toLowerCase()
31
- .split(/\s+/)
32
- .filter(Boolean)
33
- .sort((a, b) => b.length - a.length);
34
- for (const word of words) {
35
- const hit = lineContaining(haystack, word);
36
- if (hit) {
37
- return hit;
38
- }
39
- }
40
- return undefined;
41
- }
42
- function beforeToolsSnippet(trace) {
43
- if (trace.assistantTextBeforeTools?.trim()) {
44
- return snippet(trace.assistantTextBeforeTools);
45
- }
46
- const first = trace.messages.find((m) => m.role === "assistant");
47
- return first?.content ? snippet(first.content) : undefined;
48
- }
49
- export class TraceAssertion {
50
- trace;
51
- failures = [];
52
- constructor(trace, _options = {}) {
53
- this.trace = trace;
54
- }
55
- get ok() {
56
- return this.failures.length === 0;
57
- }
58
- get errors() {
59
- return [...this.failures];
60
- }
61
- messageText() {
62
- return this.trace.messages.map((m) => m.content).join("");
63
- }
64
- /** Assistant reply text only. Tool results, commands, and artifacts do not count. */
65
- replyHaystack() {
66
- return this.trace.messages
67
- .filter((message) => message.role === "assistant")
68
- .map((message) => message.content)
69
- .join("\n");
70
- }
71
- assertionHaystack() {
72
- return [
73
- this.messageText(),
74
- this.trace.prBody ?? "",
75
- this.trace.gitDiff ?? "",
76
- ...this.trace.shellCommands,
77
- ...Object.values(this.trace.artifacts),
78
- ...this.trace.toolCalls.flatMap((call) => [
79
- call.name,
80
- JSON.stringify(call.args ?? {}),
81
- call.result ?? "",
82
- ]),
83
- ].join("\n");
84
- }
85
- /** mustNot ignores tool results so a required Read of a source file does not fail. */
86
- mustNotHaystack() {
87
- return [
88
- this.messageText(),
89
- this.trace.prBody ?? "",
90
- this.trace.gitDiff ?? "",
91
- ...this.trace.shellCommands,
92
- ...Object.values(this.trace.artifacts),
93
- ...this.trace.toolCalls.flatMap((call) => [call.name, JSON.stringify(call.args ?? {})]),
94
- ].join("\n");
95
- }
96
- patternHaystack() {
97
- return collapseTraceWhitespace(this.assertionHaystack());
98
- }
99
- push(matcher, message, evidence) {
100
- this.failures.push(assertionFailure(matcher, message, "rubric_miss", evidence));
101
- }
102
- toHaveTier(tier) {
103
- if (!tier) {
104
- return this;
105
- }
106
- const actual = this.trace.routing?.tier;
107
- if (actual !== tier) {
108
- const routing = this.trace.routing ? JSON.stringify(this.trace.routing) : "undefined";
109
- const before = beforeToolsSnippet(this.trace);
110
- this.push("toHaveTier", `expected tier ${tier}, got ${actual ?? "undefined"}`, before ? `routing=${routing}; beforeTools=${before}` : `routing=${routing}`);
111
- }
112
- return this;
113
- }
114
- /** Hands-on chat: tier from structured routing or one-line announce in transcript. */
115
- toHaveHandsOnTier(tier) {
116
- if (!tier) {
117
- return this;
118
- }
119
- const haystack = this.assertionHaystack();
120
- const actual = this.trace.routing?.tier ?? inferRoutingFromText(haystack)?.tier;
121
- if (actual !== tier) {
122
- const routing = this.trace.routing ? JSON.stringify(this.trace.routing) : "undefined";
123
- const before = beforeToolsSnippet(this.trace);
124
- this.push("toHaveHandsOnTier", `expected hands-on tier ${tier}, got ${actual ?? "undefined"}`, before ? `routing=${routing}; beforeTools=${before}` : `routing=${routing}`);
125
- }
126
- return this;
127
- }
128
- toHaveReviewDepth(depth) {
129
- if (!depth) {
130
- return this;
131
- }
132
- const haystack = this.patternHaystack();
133
- const pattern = REVIEW_DEPTH_PATTERNS[depth];
134
- const inferred = inferReviewDepthFromText(haystack);
135
- if (!pattern.test(haystack) && inferred !== depth) {
136
- this.push("toHaveReviewDepth", `expected review depth ${depth}, not found in trace output`, beforeToolsSnippet(this.trace));
137
- }
138
- return this;
139
- }
140
- toHaveRunCommand(fragment) {
141
- const hit = this.trace.shellCommands.some((cmd) => cmd.includes(fragment));
142
- if (!hit) {
143
- const listed = this.trace.shellCommands.slice(0, 10);
144
- const more = this.trace.shellCommands.length > 10
145
- ? ` (+${this.trace.shellCommands.length - 10} more)`
146
- : "";
147
- this.push("toHaveRunCommand", `expected shell command containing "${fragment}"`, listed.length > 0
148
- ? `shellCommands=[${listed.map((c) => JSON.stringify(c)).join(", ")}]${more}`
149
- : "shellCommands=[]");
150
- }
151
- return this;
152
- }
153
- toHaveRunCommandSuccessfully(fragment) {
154
- const matches = this.trace.toolCalls.filter((call) => {
155
- const args = call.args;
156
- if (!args)
157
- return false;
158
- return [args.command, args.cmd, args.script, args.input].some((value) => typeof value === "string" && value.includes(fragment));
159
- });
160
- if (matches.some((call) => call.succeeded === true || call.exitCode === 0))
161
- return this;
162
- const status = matches.map((call) => ({
163
- command: call.args?.command ?? call.args?.cmd ?? call.args?.script ?? call.args?.input,
164
- succeeded: call.succeeded,
165
- exitCode: call.exitCode,
166
- }));
167
- this.push("toHaveRunCommandSuccessfully", matches.length === 0
168
- ? `expected a successful shell command containing "${fragment}", but no matching structured tool call was captured`
169
- : matches.some((call) => call.succeeded === false || call.exitCode !== undefined)
170
- ? `shell command containing "${fragment}" did not succeed`
171
- : `shell command containing "${fragment}" did not report execution status`, `executions=${JSON.stringify(status)}`);
172
- return this;
173
- }
174
- /** When set, every shell statement must match one allowlist fragment. */
175
- toHaveAllowedCommands(allowlist) {
176
- if (allowlist === undefined) {
177
- return this;
178
- }
179
- for (const command of this.trace.shellCommands) {
180
- const bad = disallowedShellSegments(command, allowlist);
181
- if (bad.length === 0) {
182
- continue;
183
- }
184
- const shown = allowlist.length === 0 ? command : (bad[0] ?? command);
185
- this.push("toHaveAllowedCommands", `forbidden command "${shown}" is not on the allowlist`, `command=${JSON.stringify(command)}`);
186
- }
187
- return this;
188
- }
189
- /**
190
- * Assert a tool was called. Spec is a name substring, or `name:fragment`
191
- * where fragment must appear in JSON args or the tool result.
192
- */
193
- toHaveCalledTool(spec) {
194
- if (!toolSpecMatches(this.trace.toolCalls, spec)) {
195
- this.push("toHaveCalledTool", `expected tool call matching "${spec}"`);
196
- }
197
- return this;
198
- }
199
- toHaveCalledToolsInOrder(specs) {
200
- let nextCall = 0;
201
- for (const spec of specs) {
202
- let matched = false;
203
- while (nextCall < this.trace.toolCalls.length) {
204
- const call = this.trace.toolCalls[nextCall++];
205
- if (call && toolSpecMatches([call], spec)) {
206
- matched = true;
207
- break;
208
- }
209
- }
210
- if (!matched) {
211
- this.push("toHaveCalledToolsInOrder", `expected tool call matching "${spec}" after the prior required call`);
212
- break;
213
- }
214
- }
215
- return this;
216
- }
217
- toHaveNotCalledTool(spec) {
218
- if (toolSpecMatches(this.trace.toolCalls, spec)) {
219
- this.push("toHaveNotCalledTool", `forbidden tool call matching "${spec}"`);
220
- }
221
- return this;
222
- }
223
- /** Substring must appear in Read-family args or a Shell/Bash path access. */
224
- toHaveReadPath(fragment) {
225
- if (!readToolArgsContain(this.trace.toolCalls, fragment) &&
226
- !shellAccessedPath(this.trace, fragment)) {
227
- this.push("toHaveReadPath", `expected Read or Shell access containing "${fragment}"`, readToolArgsEvidence(this.trace.toolCalls));
228
- }
229
- return this;
230
- }
231
- /**
232
- * Forbidden path fragment must not appear in a *successful* Read-family tool
233
- * call. Miss / ENOENT attempts do not fail — null-arm forage seals delete
234
- * answer keys, and agents often probe the path after seeing it in suite JSON.
235
- */
236
- toHaveNotReadPath(fragment) {
237
- if (successfulReadToolArgsContain(this.trace.toolCalls, fragment)) {
238
- this.push("toHaveNotReadPath", `forbidden successful Read of path containing "${fragment}"`, readToolArgsEvidence(this.trace.toolCalls));
239
- }
240
- return this;
241
- }
242
- toIncludeRoutingBlock() {
243
- const haystack = this.assertionHaystack();
244
- const collapsed = collapseTraceWhitespace(haystack);
245
- if (!haystack.includes("## Routing") &&
246
- !ROUTING_HEADING_PATTERN.test(haystack) &&
247
- !ROUTING_BOLD_PATTERN.test(collapsed)) {
248
- this.push("toIncludeRoutingBlock", "expected trace to include ## Routing section", beforeToolsSnippet(this.trace));
249
- }
250
- return this;
251
- }
252
- /** Hands-off PR: ## Routing must appear before the first tool call. */
253
- toHaveRoutingBlockBeforeTools() {
254
- if (!routingBlockBeforeTools(this.trace)) {
255
- this.push("toHaveRoutingBlockBeforeTools", "expected ## Routing block in assistant output before the first tool call (agent-routing.md hands-off)", beforeToolsSnippet(this.trace));
256
- }
257
- return this;
258
- }
259
- /** Hands-on chat: tier announce must appear before the first tool call. */
260
- toHaveHandsOnTierBeforeTools(tier) {
261
- if (!tier) {
262
- return this;
263
- }
264
- if (!handsOnTierBeforeTools(this.trace, tier)) {
265
- this.push("toHaveHandsOnTierBeforeTools", `expected hands-on tier ${tier} announced before the first tool call`, beforeToolsSnippet(this.trace));
266
- }
267
- return this;
268
- }
269
- toHaveInvokedSkill(skillName) {
270
- if (this.skillWasInvoked(skillName)) {
271
- return this;
272
- }
273
- const invoked = this.trace.skillsInvoked ?? [];
274
- this.push("toHaveInvokedSkill", `expected agent to read ${skillName} skill (SKILL.md); live judge scores whether it followed the skill`, `skillsInvoked=[${invoked.join(", ")}]`);
275
- return this;
276
- }
277
- skillWasInvoked(skillName) {
278
- const normalized = skillName.toLowerCase();
279
- const invoked = this.trace.skillsInvoked ?? [];
280
- if (invoked.some((name) => name.toLowerCase() === normalized)) {
281
- return true;
282
- }
283
- return skillPathMentioned(this.patternHaystack(), normalized);
284
- }
285
- /** Which full-mode fallback pattern matched (for mustNotInvokeSkill evidence). */
286
- skillMatchHint(skillName) {
287
- const normalized = skillName.toLowerCase();
288
- const invoked = this.trace.skillsInvoked ?? [];
289
- if (invoked.some((name) => name.toLowerCase() === normalized)) {
290
- return `skillsInvoked includes ${skillName}`;
291
- }
292
- const haystack = this.patternHaystack();
293
- if (skillPathMentioned(haystack, normalized)) {
294
- return "matched SKILL.md path in transcript";
295
- }
296
- return `skillsInvoked=[${invoked.join(", ")}]`;
297
- }
298
- toHaveNotInvokedSkill(skillName) {
299
- if (!this.skillWasInvoked(skillName)) {
300
- return this;
301
- }
302
- this.push("toHaveNotInvokedSkill", `expected agent not to invoke ${skillName} skill`, this.skillMatchHint(skillName));
303
- return this;
304
- }
305
- mustInclude(text) {
306
- const haystack = this.replyHaystack();
307
- if (!haystack.toLowerCase().includes(text.toLowerCase())) {
308
- const near = nearestMissLine(haystack, text);
309
- this.push("mustInclude", `expected text not found: "${text}"`, near ? `nearest: ${near}` : undefined);
310
- }
311
- return this;
312
- }
313
- mustNotInclude(text) {
314
- const haystack = this.mustNotHaystack();
315
- if (containsForbiddenPhrase(haystack, text)) {
316
- this.push("mustNotInclude", `forbidden text present: "${text}"`, lineContaining(haystack, text));
317
- }
318
- return this;
319
- }
320
- }
321
- function skillPathMentioned(haystack, skillName) {
322
- const roots = [".agents", ".cursor", ".codex", ".claude"];
323
- const lower = haystack.toLowerCase();
324
- return roots.some((root) => lower.includes(`${root}/skills/${skillName}/skill.md`) ||
325
- lower.includes(`${root}/skills/${skillName}/references/`));
326
- }
327
- function containsForbiddenPhrase(haystack, phrase) {
328
- const lowerPhrase = phrase.toLowerCase();
329
- if (lowerPhrase.includes(" ")) {
330
- const escaped = lowerPhrase.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/\s+/g, "\\s+");
331
- return new RegExp(`(?:^|\\W)${escaped}(?:\\W|$)`, "i").test(haystack);
332
- }
333
- const pattern = new RegExp(`\\b${lowerPhrase.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i");
334
- return pattern.test(haystack);
335
- }
336
- function parseToolSpec(spec) {
337
- const separator = spec.indexOf(":");
338
- if (separator === -1) {
339
- return { name: spec };
340
- }
341
- return {
342
- name: spec.slice(0, separator),
343
- argFragment: spec.slice(separator + 1),
344
- };
345
- }
346
- /** Hosts disagree on write-tool names (Cursor `edit` / `Write`). */
347
- function toolNameNeedles(name) {
348
- const lower = name.toLowerCase();
349
- if (lower === "write" || lower === "edit") {
350
- return ["write", "edit"];
351
- }
352
- return [lower];
353
- }
354
- function toolSpecMatches(toolCalls, spec) {
355
- const { name, argFragment } = parseToolSpec(spec);
356
- const nameNeedles = toolNameNeedles(name);
357
- return toolCalls.some((call) => {
358
- const callName = call.name.toLowerCase();
359
- const argsText = JSON.stringify(call.args ?? {}).toLowerCase();
360
- const resultText = String(call.result ?? "").toLowerCase();
361
- const identity = `${callName} ${argsText}`;
362
- if (!nameNeedles.some((needle) => identity.includes(needle))) {
363
- return false;
364
- }
365
- if (argFragment === undefined || argFragment.length === 0) {
366
- return true;
367
- }
368
- const needle = argFragment.toLowerCase();
369
- return argsText.includes(needle) || resultText.includes(needle);
370
- });
371
- }
372
- function isReadToolName(name) {
373
- return name.toLowerCase().includes("read");
374
- }
375
- function isShellToolName(name) {
376
- const lower = name.toLowerCase();
377
- return lower.includes("shell") || lower === "bash";
378
- }
379
- function shellAccessedPath(trace, fragment) {
380
- const needle = fragment.toLowerCase();
381
- if (trace.shellCommands.some((command) => command.toLowerCase().includes(needle))) {
382
- return true;
383
- }
384
- return trace.toolCalls.some((call) => {
385
- if (!isShellToolName(call.name)) {
386
- return false;
387
- }
388
- const args = JSON.stringify(call.args ?? {}).toLowerCase();
389
- if (args.includes(needle))
390
- return true;
391
- // Recursive content searches need not name each file in their arguments.
392
- // Require successful, line-numbered content; a file listing or a citation
393
- // in another document is not evidence that the target file was read.
394
- const command = String(call.args?.command ?? call.args?.cmd ?? "");
395
- if (!/\brg\s/.test(command) || call.succeeded !== true || typeof call.result !== "string")
396
- return false;
397
- return call.result.split("\n").some((line) => {
398
- const match = /^(.+?):\d+:(.+)$/.exec(line);
399
- return Boolean(match?.[1]?.toLowerCase().includes(needle));
400
- });
401
- });
402
- }
403
- function readToolCalls(toolCalls) {
404
- return toolCalls.filter((call) => isReadToolName(call.name));
405
- }
406
- function readToolArgsContain(toolCalls, fragment) {
407
- const needle = fragment.toLowerCase();
408
- return readToolCalls(toolCalls).some((call) => JSON.stringify(call.args ?? {})
409
- .toLowerCase()
410
- .includes(needle));
411
- }
412
- /** True when the tool result looks like a successful Read with body content. */
413
- function readToolCallReturnedContent(call) {
414
- const result = call.result;
415
- if (result == null || result === "") {
416
- return false;
417
- }
418
- try {
419
- const parsed = typeof result === "string" ? JSON.parse(result) : result;
420
- if (parsed && typeof parsed === "object") {
421
- const status = String(parsed.status ?? "").toLowerCase();
422
- if (status === "error" || status === "failed") {
423
- return false;
424
- }
425
- if (status === "success") {
426
- const value = parsed.value;
427
- if (value && typeof value === "object" && "content" in value) {
428
- const content = value.content;
429
- return typeof content === "string" ? content.length > 0 : content != null;
430
- }
431
- return true;
432
- }
433
- }
434
- }
435
- catch {
436
- // Non-JSON result with a body counts as content.
437
- return String(result).trim().length > 0;
438
- }
439
- return String(result).trim().length > 0;
440
- }
441
- function successfulReadToolArgsContain(toolCalls, fragment) {
442
- const needle = fragment.toLowerCase();
443
- return readToolCalls(toolCalls).some((call) => {
444
- const argsText = JSON.stringify(call.args ?? {}).toLowerCase();
445
- if (!argsText.includes(needle)) {
446
- return false;
447
- }
448
- return readToolCallReturnedContent(call);
449
- });
450
- }
451
- function readToolArgsEvidence(toolCalls) {
452
- const reads = readToolCalls(toolCalls);
453
- if (reads.length === 0) {
454
- return "Read toolCalls=[]";
455
- }
456
- const listed = reads.slice(0, 8).map((call) => {
457
- const args = JSON.stringify(call.args ?? {});
458
- return `${call.name}:${args.length > 120 ? `${args.slice(0, 120)}…` : args}`;
459
- });
460
- const more = reads.length > 8 ? ` (+${reads.length - 8} more)` : "";
461
- return `Read toolCalls=[${listed.join("; ")}]${more}`;
462
- }
463
- export function expectTrace(trace, options) {
464
- return new TraceAssertion(trace, options);
465
- }
466
- export function assertRubric(trace, rubric, options) {
467
- const assertion = expectTrace(trace, options);
468
- if (rubric.tier) {
469
- if (rubric.handsOnRouting) {
470
- assertion.toHaveHandsOnTier(rubric.tier);
471
- assertion.toHaveHandsOnTierBeforeTools(rubric.tier);
472
- }
473
- else {
474
- assertion.toHaveTier(rubric.tier);
475
- }
476
- }
477
- if (rubric.reviewDepth) {
478
- assertion.toHaveReviewDepth(rubric.reviewDepth);
479
- }
480
- if (rubric.routingBlock) {
481
- assertion.toIncludeRoutingBlock();
482
- assertion.toHaveRoutingBlockBeforeTools();
483
- }
484
- for (const skill of rubric.mustInvokeSkill ?? []) {
485
- assertion.toHaveInvokedSkill(skill);
486
- }
487
- for (const skill of rubric.mustNotInvokeSkill ?? []) {
488
- assertion.toHaveNotInvokedSkill(skill);
489
- }
490
- for (const cmd of rubric.mustRun ?? []) {
491
- assertion.toHaveRunCommand(cmd);
492
- }
493
- for (const cmd of rubric.mustRunSuccessfully ?? []) {
494
- assertion.toHaveRunCommandSuccessfully(cmd);
495
- }
496
- assertion.toHaveAllowedCommands(rubric.allowedCommands);
497
- for (const tool of rubric.mustCallTool ?? []) {
498
- assertion.toHaveCalledTool(tool);
499
- }
500
- assertion.toHaveCalledToolsInOrder(rubric.mustCallToolsInOrder ?? []);
501
- for (const tool of rubric.mustNotCallTool ?? []) {
502
- assertion.toHaveNotCalledTool(tool);
503
- }
504
- for (const pathFragment of rubric.mustReadPath ?? []) {
505
- assertion.toHaveReadPath(pathFragment);
506
- }
507
- for (const pathFragment of rubric.mustNotReadPath ?? []) {
508
- assertion.toHaveNotReadPath(pathFragment);
509
- }
510
- for (const required of rubric.must ?? []) {
511
- assertion.mustInclude(required);
512
- }
513
- for (const forbidden of rubric.mustNot ?? []) {
514
- assertion.mustNotInclude(forbidden);
515
- }
516
- return assertion.errors;
517
- }
518
- //# sourceMappingURL=expect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expect.js","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- export type HostLogLevel = "debug" | "info" | "warn" | "error";
2
- export interface ParsedHostLog {
3
- time?: string;
4
- level: HostLogLevel;
5
- service: string;
6
- message: string;
7
- meta: Record<string, string>;
8
- }
9
- /** Parse a Cursor/host SDK log line. Returns undefined for agent-test output. */
10
- export declare function parseHostLogLine(line: string): ParsedHostLog | undefined;
11
- export declare function hostLogsVerbose(): boolean;
12
- /** INFO/DEBUG stay hidden unless debug/verbose. WARN/ERROR always print. */
13
- export declare function shouldPrintHostLog(level: HostLogLevel): boolean;
14
- export declare function formatHostLogLine(parsed: ParsedHostLog): string;
15
- /** Rewrite or drop host SDK logs on stdout/stderr. Safe to call more than once. */
16
- export declare function installHostLogFilter(): void;
17
- //# sourceMappingURL=host-log.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-log.d.ts","sourceRoot":"","sources":["../src/host-log.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAiDD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAiBxE;AAqCD,wBAAgB,eAAe,IAAI,OAAO,CAOzC;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAK/D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE/D;AAgDD,mFAAmF;AACnF,wBAAgB,oBAAoB,IAAI,IAAI,CAO3C"}