elasticdash-test 0.1.2 → 0.1.4

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.
@@ -1,14 +1,54 @@
1
1
  import { expect } from 'expect';
2
- export { expect };
2
+ import type { CustomStepKind } from '../trace-adapter/context.js';
3
3
  interface LLMStepConfig {
4
4
  model?: string;
5
5
  contains?: string;
6
+ promptContains?: string;
7
+ outputContains?: string;
8
+ provider?: string;
9
+ times?: number;
10
+ minTimes?: number;
11
+ maxTimes?: number;
12
+ }
13
+ interface CustomStepConfig {
14
+ kind?: CustomStepKind;
15
+ name?: string;
16
+ tag?: string;
17
+ contains?: string;
18
+ resultContains?: string;
19
+ payloadContains?: string;
20
+ metadataContains?: string;
21
+ times?: number;
22
+ minTimes?: number;
23
+ maxTimes?: number;
24
+ }
25
+ interface PromptWhereConfig {
26
+ filterContains: string;
27
+ requireContains?: string;
28
+ requireNotContains?: string;
29
+ times?: number;
30
+ minTimes?: number;
31
+ maxTimes?: number;
32
+ index?: number;
33
+ nth?: number;
34
+ }
35
+ type SupportedProvider = 'openai' | 'claude' | 'gemini' | 'grok';
36
+ interface SemanticMatchOptions {
37
+ provider?: SupportedProvider;
38
+ model?: string;
39
+ sdk?: unknown;
6
40
  }
7
41
  declare module 'expect' {
8
42
  interface Matchers<R> {
9
43
  toHaveLLMStep(config?: LLMStepConfig): R;
10
44
  toCallTool(toolName: string): R;
11
- toMatchSemanticOutput(expected: string): R;
45
+ toMatchSemanticOutput(expected: string, options?: SemanticMatchOptions): R;
46
+ toHaveCustomStep(config?: CustomStepConfig): R;
47
+ /**
48
+ * Filter prompts that contain `filterContains`, then assert additional requirements.
49
+ * Example: prompts containing "A" must also contain "B".
50
+ */
51
+ toHavePromptWhere(config: PromptWhereConfig): R;
12
52
  }
13
53
  }
14
54
  /**
@@ -16,4 +56,5 @@ declare module 'expect' {
16
56
  * Call this once on runner startup.
17
57
  */
18
58
  export declare function registerMatchers(): void;
59
+ export { expect };
19
60
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,OAAO,EAAE,MAAM,EAAE,CAAA;AAGjB,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAGD,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,QAAQ,CAAC,CAAC;QAClB,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,CAAC,CAAA;QACxC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAA;QAC/B,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAA;KAC3C;CACF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAqFvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAoC,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEnG,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,iBAAiB;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,KAAK,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEhE,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AA6MD,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,QAAQ,CAAC,CAAC;QAClB,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,CAAC,CAAA;QACxC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAA;QAC/B,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,CAAC,CAAA;QAC1E,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAA;QAC9C;;;WAGG;QACH,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,CAAA;KAChD;CACF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CA0RvC;AAGD,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -1,21 +1,201 @@
1
1
  import { expect } from 'expect';
2
- // Export our patched expect so users can import it and get the correct type and runtime matchers
3
- export { expect };
2
+ /**
3
+ * Type guard: returns true only if `value` looks like a TraceHandle.
4
+ * Used to produce a clear error message when a non-trace value (e.g. a plain
5
+ * string) is passed to a trace-aware matcher.
6
+ */
7
+ function isTraceHandle(value) {
8
+ return (value !== null &&
9
+ typeof value === 'object' &&
10
+ typeof value.getLLMSteps === 'function' &&
11
+ typeof value.getToolCalls === 'function');
12
+ }
13
+ // Helper: Call an LLM (configurable provider/model/sdk) to judge semantic match
14
+ async function llmJudgeSemanticMatch(traceOutput, expected, options = {}) {
15
+ const provider = options.provider ?? 'openai';
16
+ const sdk = options.sdk;
17
+ const prompt = `
18
+ You are an expert test judge. Given the following AI trace output and an expected semantic result, answer "YES" if the trace output semantically matches the expectation, otherwise answer "NO".
19
+
20
+ Trace Output:
21
+ ${traceOutput}
22
+
23
+ Expected:
24
+ ${expected}
25
+
26
+ Answer only "YES" or "NO".
27
+ `.trim();
28
+ switch (provider) {
29
+ case 'openai': {
30
+ const resolvedModel = options.model ?? 'gpt-4.1';
31
+ if (sdk && sdk.chat?.completions?.create) {
32
+ const resp = await sdk.chat.completions.create({
33
+ model: resolvedModel,
34
+ messages: [
35
+ { role: 'system', content: 'You are an expert test judge.' },
36
+ { role: 'user', content: prompt },
37
+ ],
38
+ max_tokens: 8,
39
+ temperature: 0,
40
+ });
41
+ const content = resp?.choices?.[0]?.message?.content?.trim().toUpperCase() || '';
42
+ return content.startsWith('YES');
43
+ }
44
+ const apiKey = process.env.OPENAI_API_KEY;
45
+ if (!apiKey)
46
+ throw new Error('OPENAI_API_KEY is not set in environment.');
47
+ const response = await fetch('https://api.openai.com/v1/chat/completions', {
48
+ method: 'POST',
49
+ headers: {
50
+ Authorization: `Bearer ${apiKey}`,
51
+ 'Content-Type': 'application/json',
52
+ },
53
+ body: JSON.stringify({
54
+ model: resolvedModel,
55
+ messages: [
56
+ { role: 'system', content: 'You are an expert test judge.' },
57
+ { role: 'user', content: prompt },
58
+ ],
59
+ max_tokens: 8,
60
+ temperature: 0,
61
+ }),
62
+ });
63
+ if (!response.ok) {
64
+ throw new Error(`OpenAI API error: ${response.status} ${response.statusText}`);
65
+ }
66
+ const data = await response.json();
67
+ const content = data.choices?.[0]?.message?.content?.trim().toUpperCase() || '';
68
+ return content.startsWith('YES');
69
+ }
70
+ case 'claude': {
71
+ const resolvedModel = options.model ?? 'claude-3-opus-20240229';
72
+ if (sdk && sdk.messages?.create) {
73
+ const resp = await sdk.messages.create({
74
+ model: resolvedModel,
75
+ max_tokens: 32,
76
+ temperature: 0,
77
+ messages: [{ role: 'user', content: prompt }],
78
+ });
79
+ const content = resp?.content?.[0]?.text?.trim().toUpperCase() || '';
80
+ return content.startsWith('YES');
81
+ }
82
+ const apiKey = process.env.ANTHROPIC_API_KEY;
83
+ if (!apiKey)
84
+ throw new Error('ANTHROPIC_API_KEY is not set in environment.');
85
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
86
+ method: 'POST',
87
+ headers: {
88
+ 'x-api-key': apiKey,
89
+ 'anthropic-version': '2023-06-01',
90
+ 'content-type': 'application/json',
91
+ },
92
+ body: JSON.stringify({
93
+ model: resolvedModel,
94
+ max_tokens: 32,
95
+ temperature: 0,
96
+ messages: [{ role: 'user', content: prompt }],
97
+ }),
98
+ });
99
+ if (!response.ok) {
100
+ throw new Error(`Claude API error: ${response.status} ${response.statusText}`);
101
+ }
102
+ const data = await response.json();
103
+ const content = data?.content?.[0]?.text?.trim().toUpperCase() || '';
104
+ return content.startsWith('YES');
105
+ }
106
+ case 'gemini': {
107
+ const resolvedModel = options.model ?? 'gemini-1.5-pro';
108
+ if (sdk && sdk.models?.generateContent) {
109
+ const resp = await sdk.models.generateContent({
110
+ model: resolvedModel,
111
+ contents: [{ role: 'user', parts: [{ text: prompt }] }],
112
+ generationConfig: { temperature: 0, maxOutputTokens: 8 },
113
+ });
114
+ const content = resp?.response?.candidates?.[0]?.content?.parts?.[0]?.text?.trim().toUpperCase() || '';
115
+ return content.startsWith('YES');
116
+ }
117
+ const apiKey = process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY;
118
+ if (!apiKey)
119
+ throw new Error('GEMINI_API_KEY (or GOOGLE_API_KEY) is not set in environment.');
120
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${resolvedModel}:generateContent?key=${apiKey}`, {
121
+ method: 'POST',
122
+ headers: { 'Content-Type': 'application/json' },
123
+ body: JSON.stringify({
124
+ contents: [{ role: 'user', parts: [{ text: prompt }] }],
125
+ generationConfig: { temperature: 0, maxOutputTokens: 8 },
126
+ }),
127
+ });
128
+ if (!response.ok) {
129
+ throw new Error(`Gemini API error: ${response.status} ${response.statusText}`);
130
+ }
131
+ const data = await response.json();
132
+ const content = data?.candidates?.[0]?.content?.parts?.[0]?.text?.trim().toUpperCase() || '';
133
+ return content.startsWith('YES');
134
+ }
135
+ case 'grok': {
136
+ const resolvedModel = options.model ?? 'grok-beta';
137
+ if (sdk && sdk.chat?.completions?.create) {
138
+ const resp = await sdk.chat.completions.create({
139
+ model: resolvedModel,
140
+ messages: [
141
+ { role: 'system', content: 'You are an expert test judge.' },
142
+ { role: 'user', content: prompt },
143
+ ],
144
+ max_tokens: 8,
145
+ temperature: 0,
146
+ });
147
+ const content = resp?.choices?.[0]?.message?.content?.trim().toUpperCase() || '';
148
+ return content.startsWith('YES');
149
+ }
150
+ const apiKey = process.env.GROK_API_KEY;
151
+ if (!apiKey)
152
+ throw new Error('GROK_API_KEY is not set in environment.');
153
+ const response = await fetch('https://api.x.ai/v1/chat/completions', {
154
+ method: 'POST',
155
+ headers: {
156
+ Authorization: `Bearer ${apiKey}`,
157
+ 'Content-Type': 'application/json',
158
+ },
159
+ body: JSON.stringify({
160
+ model: resolvedModel,
161
+ messages: [
162
+ { role: 'system', content: 'You are an expert test judge.' },
163
+ { role: 'user', content: prompt },
164
+ ],
165
+ max_tokens: 8,
166
+ temperature: 0,
167
+ }),
168
+ });
169
+ if (!response.ok) {
170
+ throw new Error(`Grok API error: ${response.status} ${response.statusText}`);
171
+ }
172
+ const data = await response.json();
173
+ const content = data.choices?.[0]?.message?.content?.trim().toUpperCase() || '';
174
+ return content.startsWith('YES');
175
+ }
176
+ default:
177
+ throw new Error(`Unsupported provider: ${provider}`);
178
+ }
179
+ }
4
180
  /**
5
181
  * Register all AI-specific custom matchers onto the `expect` instance.
6
182
  * Call this once on runner startup.
7
183
  */
8
184
  export function registerMatchers() {
9
185
  expect.extend({
10
- /**
11
- * Assert the trace contains at least one LLM step matching the config.
12
- * Usage: expect(trace).toHaveLLMStep({ model: "gpt-4", contains: "order confirmed" })
13
- */
14
186
  toHaveLLMStep(trace, config = {}) {
187
+ if (!isTraceHandle(trace)) {
188
+ return {
189
+ pass: false,
190
+ message: () => `Expected a TraceHandle (ctx.trace) but received ${typeof trace}.\nUse: expect(ctx.trace).toHaveLLMStep(...)`,
191
+ };
192
+ }
15
193
  const steps = trace.getLLMSteps();
16
194
  const matching = steps.filter((step) => {
17
195
  if (config.model && step.model !== config.model)
18
196
  return false;
197
+ if (config.provider && step.provider !== config.provider)
198
+ return false;
19
199
  if (config.contains) {
20
200
  const haystack = [step.completion, step.prompt, step.contains]
21
201
  .filter(Boolean)
@@ -24,9 +204,31 @@ export function registerMatchers() {
24
204
  if (!haystack.includes(config.contains.toLowerCase()))
25
205
  return false;
26
206
  }
207
+ if (config.promptContains) {
208
+ const promptHaystack = (step.prompt ?? '').toLowerCase();
209
+ if (!promptHaystack.includes(config.promptContains.toLowerCase()))
210
+ return false;
211
+ }
212
+ if (config.outputContains) {
213
+ const outputHaystack = (step.completion ?? '').toLowerCase();
214
+ if (!outputHaystack.includes(config.outputContains.toLowerCase()))
215
+ return false;
216
+ }
27
217
  return true;
28
218
  });
29
- const pass = matching.length > 0;
219
+ const count = matching.length;
220
+ let pass;
221
+ if (config.times !== undefined) {
222
+ pass = count === config.times;
223
+ }
224
+ else if (config.minTimes !== undefined || config.maxTimes !== undefined) {
225
+ const min = config.minTimes ?? 0;
226
+ const max = config.maxTimes ?? Infinity;
227
+ pass = count >= min && count <= max;
228
+ }
229
+ else {
230
+ pass = count > 0;
231
+ }
30
232
  return {
31
233
  pass,
32
234
  message: () => {
@@ -35,16 +237,18 @@ export function registerMatchers() {
35
237
  }
36
238
  const stepSummary = steps.length === 0
37
239
  ? 'no LLM steps were recorded'
38
- : `recorded steps: ${JSON.stringify(steps)}`;
240
+ : `${count} matching step(s) found; recorded steps: ${JSON.stringify(steps)}`;
39
241
  return `Expected trace to have LLM step matching ${JSON.stringify(config)}, but ${stepSummary}`;
40
242
  },
41
243
  };
42
244
  },
43
- /**
44
- * Assert the trace contains a tool call with the given name.
45
- * Usage: expect(trace).toCallTool("chargeCard")
46
- */
47
245
  toCallTool(trace, toolName) {
246
+ if (!isTraceHandle(trace)) {
247
+ return {
248
+ pass: false,
249
+ message: () => `Expected a TraceHandle (ctx.trace) but received ${typeof trace}.\nUse: expect(ctx.trace).toCallTool(...)`,
250
+ };
251
+ }
48
252
  const calls = trace.getToolCalls();
49
253
  const pass = calls.some((c) => c.name === toolName);
50
254
  return {
@@ -59,29 +263,198 @@ export function registerMatchers() {
59
263
  },
60
264
  };
61
265
  },
62
- /**
63
- * Assert the trace output semantically matches an expected string.
64
- * For MP: simple substring/case-insensitive match.
65
- * Later: can swap in embedding-based similarity.
66
- * Usage: expect(trace).toMatchSemanticOutput("order confirmed")
67
- */
68
- toMatchSemanticOutput(trace, expected) {
266
+ async toMatchSemanticOutput(trace, expected, options) {
267
+ if (!isTraceHandle(trace)) {
268
+ return {
269
+ pass: false,
270
+ message: () => `Expected a TraceHandle (ctx.trace) but received ${typeof trace}.\nUse: expect(ctx.trace).toMatchSemanticOutput(...)`,
271
+ };
272
+ }
69
273
  const steps = trace.getLLMSteps();
70
274
  const fullOutput = steps
71
275
  .map((s) => [s.completion, s.contains].filter(Boolean).join(' '))
72
276
  .join(' ')
73
- .toLowerCase();
74
- const pass = fullOutput.includes(expected.toLowerCase());
277
+ .trim();
278
+ try {
279
+ const pass = await llmJudgeSemanticMatch(fullOutput, expected, options);
280
+ return {
281
+ pass,
282
+ message: () => {
283
+ if (pass) {
284
+ return `Expected trace output NOT to semantically match "${expected}" (LLM judged YES)`;
285
+ }
286
+ return `Expected trace output to semantically match "${expected}", but LLM judged NO. Trace output: "${fullOutput || '(empty)'}"`;
287
+ },
288
+ };
289
+ }
290
+ catch (err) {
291
+ return {
292
+ pass: false,
293
+ message: () => `LLM semantic match failed: ${err.message}`,
294
+ };
295
+ }
296
+ },
297
+ toHaveCustomStep(trace, config = {}) {
298
+ if (!isTraceHandle(trace) || typeof trace.getCustomSteps !== 'function') {
299
+ return {
300
+ pass: false,
301
+ message: () => `Expected a TraceHandle (ctx.trace with getCustomSteps) but received ${typeof trace}.\nUse: expect(ctx.trace).toHaveCustomStep(...)`,
302
+ };
303
+ }
304
+ const steps = trace.getCustomSteps();
305
+ const matchString = (val) => {
306
+ if (val === undefined || val === null)
307
+ return '';
308
+ if (typeof val === 'string')
309
+ return val;
310
+ try {
311
+ return JSON.stringify(val);
312
+ }
313
+ catch {
314
+ return String(val);
315
+ }
316
+ };
317
+ const matching = steps.filter((step) => {
318
+ if (config.kind && step.kind !== config.kind)
319
+ return false;
320
+ if (config.name && step.name !== config.name)
321
+ return false;
322
+ if (config.tag && !(step.tags || []).includes(config.tag))
323
+ return false;
324
+ const payloadStr = matchString(step.payload).toLowerCase();
325
+ const resultStr = matchString(step.result).toLowerCase();
326
+ const metaStr = matchString(step.metadata).toLowerCase();
327
+ const combined = [payloadStr, resultStr, metaStr].filter(Boolean).join(' ');
328
+ if (config.contains && !combined.includes(config.contains.toLowerCase()))
329
+ return false;
330
+ if (config.payloadContains && !payloadStr.includes(config.payloadContains.toLowerCase()))
331
+ return false;
332
+ if (config.resultContains && !resultStr.includes(config.resultContains.toLowerCase()))
333
+ return false;
334
+ if (config.metadataContains && !metaStr.includes(config.metadataContains.toLowerCase()))
335
+ return false;
336
+ return true;
337
+ });
338
+ const count = matching.length;
339
+ let pass;
340
+ if (config.times !== undefined) {
341
+ pass = count === config.times;
342
+ }
343
+ else if (config.minTimes !== undefined || config.maxTimes !== undefined) {
344
+ const min = config.minTimes ?? 0;
345
+ const max = config.maxTimes ?? Infinity;
346
+ pass = count >= min && count <= max;
347
+ }
348
+ else {
349
+ pass = count > 0;
350
+ }
351
+ return {
352
+ pass,
353
+ message: () => {
354
+ if (pass) {
355
+ return `Expected trace NOT to have custom step matching ${JSON.stringify(config)}`;
356
+ }
357
+ const stepSummary = steps.length === 0
358
+ ? 'no custom steps were recorded'
359
+ : `${count} matching step(s) found; recorded custom steps: ${JSON.stringify(steps)}`;
360
+ return `Expected trace to have custom step matching ${JSON.stringify(config)}, but ${stepSummary}`;
361
+ },
362
+ };
363
+ },
364
+ toHavePromptWhere(trace, config) {
365
+ if (!isTraceHandle(trace)) {
366
+ return {
367
+ pass: false,
368
+ message: () => `Expected a TraceHandle (ctx.trace) but received ${typeof trace}.\nUse: expect(ctx.trace).toHavePromptWhere(...)`,
369
+ };
370
+ }
371
+ if (!config || !config.filterContains) {
372
+ return {
373
+ pass: false,
374
+ message: () => 'toHavePromptWhere requires filterContains',
375
+ };
376
+ }
377
+ const filterNeedle = config.filterContains.toLowerCase();
378
+ const requireNeedle = config.requireContains?.toLowerCase();
379
+ const forbidNeedle = config.requireNotContains?.toLowerCase();
380
+ const prompts = trace.getLLMSteps().map((s) => s.prompt ?? '');
381
+ const filtered = prompts.filter((p) => p.toLowerCase().includes(filterNeedle));
382
+ // Optional positional check (index or nth)
383
+ const targetIdx = config.index ?? (config.nth !== undefined ? config.nth - 1 : undefined);
384
+ let checked = [];
385
+ let count = 0;
386
+ let pass = true;
387
+ if (targetIdx !== undefined) {
388
+ if (targetIdx < 0 || targetIdx >= filtered.length) {
389
+ return {
390
+ pass: false,
391
+ message: () => `Filtered prompts length ${filtered.length}, but index/nth points to ${targetIdx}. Config: ${JSON.stringify(config)}`,
392
+ };
393
+ }
394
+ const p = filtered[targetIdx];
395
+ const lower = p.toLowerCase();
396
+ const okRequire = requireNeedle ? lower.includes(requireNeedle) : true;
397
+ const okForbid = forbidNeedle ? !lower.includes(forbidNeedle) : true;
398
+ pass = okRequire && okForbid;
399
+ checked = okRequire && okForbid ? [p] : [];
400
+ count = checked.length;
401
+ }
402
+ else {
403
+ checked = filtered.filter((p) => {
404
+ const lower = p.toLowerCase();
405
+ if (requireNeedle && !lower.includes(requireNeedle))
406
+ return false;
407
+ if (forbidNeedle && lower.includes(forbidNeedle))
408
+ return false;
409
+ return true;
410
+ });
411
+ count = checked.length;
412
+ if (config.times !== undefined) {
413
+ pass = count === config.times;
414
+ }
415
+ else {
416
+ const min = config.minTimes ?? 0;
417
+ const max = config.maxTimes ?? Infinity;
418
+ pass = count >= min && count <= max;
419
+ }
420
+ // Also ensure that if requireContains is set, no filtered prompt violates it
421
+ if (requireNeedle) {
422
+ const violating = filtered.filter((p) => !p.toLowerCase().includes(requireNeedle));
423
+ if (violating.length > 0)
424
+ pass = false;
425
+ }
426
+ if (forbidNeedle) {
427
+ const violating = filtered.filter((p) => p.toLowerCase().includes(forbidNeedle));
428
+ if (violating.length > 0)
429
+ pass = false;
430
+ }
431
+ }
75
432
  return {
76
433
  pass,
77
434
  message: () => {
78
435
  if (pass) {
79
- return `Expected trace output NOT to semantically match "${expected}"`;
436
+ return `Expected prompts NOT to satisfy filter/require combo: ${JSON.stringify(config)}`;
437
+ }
438
+ const base = [`Expected prompts filtered by "${config.filterContains}" to satisfy requirements`];
439
+ if (config.requireContains)
440
+ base.push(`requireContains: "${config.requireContains}"`);
441
+ if (config.requireNotContains)
442
+ base.push(`requireNotContains: "${config.requireNotContains}"`);
443
+ if (targetIdx !== undefined) {
444
+ base.push(`checked index: ${targetIdx}`, `filtered count: ${filtered.length}`);
80
445
  }
81
- return `Expected trace output to semantically match "${expected}", but got: "${fullOutput || '(empty)'}"`;
446
+ else {
447
+ base.push(`filtered count: ${filtered.length}, passing count: ${checked.length}`);
448
+ base.push(config.times !== undefined
449
+ ? `expected exactly ${config.times}`
450
+ : `expected between ${config.minTimes ?? 0} and ${config.maxTimes ?? Infinity}`);
451
+ }
452
+ return base.filter(Boolean).join('; ');
82
453
  },
83
454
  };
84
455
  },
85
456
  });
86
457
  }
458
+ // Export our patched expect so users can import it and get the correct type and runtime matchers
459
+ export { expect };
87
460
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/matchers/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/matchers/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAE7D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,UAAU,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CASlG"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAI7D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,UAAU,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CASlG"}
package/dist/runner.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { clearRegistry, getRegistry } from './core/registry.js';
2
- import { startTraceSession } from './trace-adapter/context.js';
2
+ import { startTraceSession, setCurrentTrace } from './trace-adapter/context.js';
3
+ import { pathToFileURL } from 'node:url';
4
+ import path from 'node:path';
3
5
  export async function runFiles(files, options = {}) {
4
6
  const fileResults = [];
5
7
  for (const file of files) {
@@ -13,7 +15,14 @@ async function runFile(file, options) {
13
15
  // 1. Clear the global registry before loading the file
14
16
  clearRegistry();
15
17
  // 2. Dynamically import the test file (triggers aiTest() registrations)
16
- await import(file);
18
+ const resolvedPath = file.startsWith('file://')
19
+ ? file
20
+ : pathToFileURL(path.resolve(file)).href;
21
+ if (resolvedPath.endsWith('.ts')) {
22
+ await import('tsx/esm');
23
+ await import('tsx/cjs');
24
+ }
25
+ await import(resolvedPath);
17
26
  const registry = getRegistry();
18
27
  const results = [];
19
28
  // 3. Run beforeAll hooks
@@ -23,12 +32,14 @@ async function runFile(file, options) {
23
32
  // 4. Execute each test sequentially
24
33
  for (const entry of registry.tests) {
25
34
  const { context, finalise } = startTraceSession();
35
+ setCurrentTrace(context.trace);
26
36
  if (hooks.onTestStart) {
27
37
  await hooks.onTestStart(entry.name);
28
38
  }
29
39
  const startTime = Date.now();
30
40
  let passed = false;
31
41
  let error;
42
+ setCurrentTrace(context.trace);
32
43
  try {
33
44
  await entry.fn(context);
34
45
  passed = true;
@@ -36,6 +47,9 @@ async function runFile(file, options) {
36
47
  catch (err) {
37
48
  error = err instanceof Error ? err : new Error(String(err));
38
49
  }
50
+ finally {
51
+ setCurrentTrace(undefined);
52
+ }
39
53
  const durationMs = Date.now() - startTime;
40
54
  if (hooks.onTestFinish) {
41
55
  await hooks.onTestFinish(entry.name, passed, durationMs);
@@ -44,6 +58,7 @@ async function runFile(file, options) {
44
58
  await hooks.onTraceComplete(entry.name, context.trace);
45
59
  }
46
60
  finalise();
61
+ setCurrentTrace(undefined);
47
62
  results.push({ name: entry.name, passed, durationMs, error });
48
63
  }
49
64
  // 5. Run afterAll hooks
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAmB9D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAe,EAAE,UAAyB,EAAE;IACzE,MAAM,WAAW,GAAiB,EAAE,CAAA;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3C,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,OAAsB;IACzD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,CAAA;IAE9B,uDAAuD;IACvD,aAAa,EAAE,CAAA;IAEf,wEAAwE;IACxE,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;IAElB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,OAAO,GAAiB,EAAE,CAAA;IAEhC,yBAAyB;IACzB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC3C,MAAM,IAAI,EAAE,CAAA;IACd,CAAC;IAED,oCAAoC;IACpC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAA;QAEjD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,KAAwB,CAAA;QAE5B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;YACvB,MAAM,GAAG,IAAI,CAAA;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;QAEzC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QAC1D,CAAC;QAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACxD,CAAC;QAED,QAAQ,EAAE,CAAA;QAEV,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED,wBAAwB;IACxB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,IAAI,EAAE,CAAA;IACd,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAC1B,CAAC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}