@hasna/testers 0.0.14 → 0.0.16

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 (93) hide show
  1. package/LICENSE +170 -21
  2. package/dashboard/dist/assets/index-CQzkimyO.css +1 -0
  3. package/dashboard/dist/assets/index-D52SWwDa.js +49 -0
  4. package/dashboard/dist/index.html +2 -2
  5. package/dist/cli/index.js +11125 -5537
  6. package/dist/db/api-checks.d.ts +28 -0
  7. package/dist/db/api-checks.d.ts.map +1 -0
  8. package/dist/db/database.d.ts.map +1 -1
  9. package/dist/db/environments.d.ts +10 -0
  10. package/dist/db/environments.d.ts.map +1 -1
  11. package/dist/db/golden-answers.d.ts +89 -0
  12. package/dist/db/golden-answers.d.ts.map +1 -0
  13. package/dist/db/personas.d.ts +17 -0
  14. package/dist/db/personas.d.ts.map +1 -0
  15. package/dist/db/projects.d.ts +3 -6
  16. package/dist/db/projects.d.ts.map +1 -1
  17. package/dist/db/results.d.ts +5 -1
  18. package/dist/db/results.d.ts.map +1 -1
  19. package/dist/db/runs.d.ts.map +1 -1
  20. package/dist/db/scenarios.d.ts +1 -0
  21. package/dist/db/scenarios.d.ts.map +1 -1
  22. package/dist/db/seed-personas.d.ts +15 -0
  23. package/dist/db/seed-personas.d.ts.map +1 -0
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +4331 -2407
  27. package/dist/lib/ai-client.d.ts +54 -1
  28. package/dist/lib/ai-client.d.ts.map +1 -1
  29. package/dist/lib/ai-profiler.d.ts +29 -0
  30. package/dist/lib/ai-profiler.d.ts.map +1 -0
  31. package/dist/lib/api-runner.d.ts +20 -0
  32. package/dist/lib/api-runner.d.ts.map +1 -0
  33. package/dist/lib/browser-bun.d.ts +153 -0
  34. package/dist/lib/browser-bun.d.ts.map +1 -0
  35. package/dist/lib/browser.d.ts +10 -1
  36. package/dist/lib/browser.d.ts.map +1 -1
  37. package/dist/lib/ci.d.ts +5 -0
  38. package/dist/lib/ci.d.ts.map +1 -1
  39. package/dist/lib/compliance-report.d.ts +33 -0
  40. package/dist/lib/compliance-report.d.ts.map +1 -0
  41. package/dist/lib/config.d.ts.map +1 -1
  42. package/dist/lib/costs.d.ts +5 -0
  43. package/dist/lib/costs.d.ts.map +1 -1
  44. package/dist/lib/eval-runner.d.ts +94 -0
  45. package/dist/lib/eval-runner.d.ts.map +1 -0
  46. package/dist/lib/failure-analyzer.d.ts +7 -0
  47. package/dist/lib/failure-analyzer.d.ts.map +1 -0
  48. package/dist/lib/failure-explainer.d.ts +17 -0
  49. package/dist/lib/failure-explainer.d.ts.map +1 -0
  50. package/dist/lib/failure-pipeline.d.ts +11 -0
  51. package/dist/lib/failure-pipeline.d.ts.map +1 -1
  52. package/dist/lib/generator.d.ts +34 -0
  53. package/dist/lib/generator.d.ts.map +1 -0
  54. package/dist/lib/golden-monitor.d.ts +28 -0
  55. package/dist/lib/golden-monitor.d.ts.map +1 -0
  56. package/dist/lib/healer.d.ts +26 -0
  57. package/dist/lib/healer.d.ts.map +1 -0
  58. package/dist/lib/health-scan.d.ts +6 -1
  59. package/dist/lib/health-scan.d.ts.map +1 -1
  60. package/dist/lib/hybrid-runner.d.ts +100 -0
  61. package/dist/lib/hybrid-runner.d.ts.map +1 -0
  62. package/dist/lib/judge.d.ts +72 -0
  63. package/dist/lib/judge.d.ts.map +1 -0
  64. package/dist/lib/openapi-import.d.ts +7 -0
  65. package/dist/lib/openapi-import.d.ts.map +1 -1
  66. package/dist/lib/persona-diff.d.ts +27 -0
  67. package/dist/lib/persona-diff.d.ts.map +1 -0
  68. package/dist/lib/pipeline-runner.d.ts +48 -0
  69. package/dist/lib/pipeline-runner.d.ts.map +1 -0
  70. package/dist/lib/reporter.d.ts +2 -0
  71. package/dist/lib/reporter.d.ts.map +1 -1
  72. package/dist/lib/runner.d.ts +13 -1
  73. package/dist/lib/runner.d.ts.map +1 -1
  74. package/dist/lib/scanners/a11y.d.ts +41 -0
  75. package/dist/lib/scanners/a11y.d.ts.map +1 -0
  76. package/dist/lib/scanners/injection.d.ts +54 -0
  77. package/dist/lib/scanners/injection.d.ts.map +1 -0
  78. package/dist/lib/scanners/pii-scanner.d.ts +19 -0
  79. package/dist/lib/scanners/pii-scanner.d.ts.map +1 -0
  80. package/dist/lib/scanners/pii.d.ts +17 -0
  81. package/dist/lib/scanners/pii.d.ts.map +1 -0
  82. package/dist/lib/screenshotter.d.ts.map +1 -1
  83. package/dist/lib/session-converter.d.ts +29 -0
  84. package/dist/lib/session-converter.d.ts.map +1 -0
  85. package/dist/lib/webhooks.d.ts +20 -1
  86. package/dist/lib/webhooks.d.ts.map +1 -1
  87. package/dist/mcp/index.js +11144 -6270
  88. package/dist/server/index.js +5388 -1671
  89. package/dist/types/index.d.ts +278 -5
  90. package/dist/types/index.d.ts.map +1 -1
  91. package/package.json +4 -4
  92. package/dashboard/dist/assets/index-FZ9gzLaz.js +0 -49
  93. package/dashboard/dist/assets/index-PT-52SEY.css +0 -1
@@ -12,6 +12,9 @@ interface ToolContext {
12
12
  runId: string;
13
13
  scenarioSlug: string;
14
14
  stepNumber: number;
15
+ a11y?: boolean | {
16
+ level?: "A" | "AA" | "AAA";
17
+ };
15
18
  }
16
19
  interface ScreenshotResult {
17
20
  filePath: string;
@@ -40,7 +43,7 @@ export type StepEventHandler = (event: {
40
43
  stepNumber: number;
41
44
  }) => void;
42
45
  interface AgentLoopOptions {
43
- client: Anthropic;
46
+ client: Anthropic | OpenAICompatConfig;
44
47
  page: Page;
45
48
  scenario: Scenario;
46
49
  screenshotter: Screenshotter;
@@ -48,6 +51,19 @@ interface AgentLoopOptions {
48
51
  runId: string;
49
52
  maxTurns?: number;
50
53
  onStep?: StepEventHandler;
54
+ persona?: {
55
+ name: string;
56
+ role: string;
57
+ description: string;
58
+ instructions: string;
59
+ traits: string[];
60
+ goals: string[];
61
+ behaviors?: string[];
62
+ painPoints?: string[];
63
+ } | null;
64
+ a11y?: boolean | {
65
+ level?: "A" | "AA" | "AAA";
66
+ };
51
67
  }
52
68
  interface AgentLoopResult {
53
69
  status: "passed" | "failed" | "error";
@@ -72,10 +88,47 @@ interface AgentLoopResult {
72
88
  * a final result or the turn limit is reached.
73
89
  */
74
90
  export declare function runAgentLoop(options: AgentLoopOptions): Promise<AgentLoopResult>;
91
+ /**
92
+ * Detects the AI provider from a model name.
93
+ * - "gpt-*" or "o1-*" / "o3-*" → openai
94
+ * - "gemini-*" → google
95
+ * - everything else → anthropic (default)
96
+ */
97
+ export declare function detectProvider(model: string): "anthropic" | "openai" | "google" | "cerebras";
75
98
  /**
76
99
  * Creates an Anthropic client instance. Uses the provided API key,
77
100
  * or falls back to the ANTHROPIC_API_KEY environment variable.
78
101
  */
79
102
  export declare function createClient(apiKey?: string): Anthropic;
103
+ /**
104
+ * Calls an OpenAI-compatible chat completions endpoint and returns a
105
+ * response shaped like an Anthropic message (content blocks).
106
+ */
107
+ export declare function callOpenAICompatible(options: {
108
+ baseUrl: string;
109
+ apiKey: string;
110
+ model: string;
111
+ system: string;
112
+ messages: Anthropic.MessageParam[];
113
+ tools: Anthropic.Tool[];
114
+ maxTokens?: number;
115
+ }): Promise<{
116
+ content: Anthropic.ContentBlock[];
117
+ stop_reason: string;
118
+ usage: {
119
+ input_tokens: number;
120
+ output_tokens: number;
121
+ };
122
+ }>;
123
+ /**
124
+ * Creates the right client/config for a given model. Returns either an Anthropic
125
+ * client or a config object for the OpenAI-compatible path.
126
+ */
127
+ export type OpenAICompatConfig = {
128
+ provider: "openai" | "google" | "cerebras";
129
+ baseUrl: string;
130
+ apiKey: string;
131
+ };
132
+ export declare function createClientForModel(model: string, apiKey?: string): Anthropic | OpenAICompatConfig;
80
133
  export {};
81
134
  //# sourceMappingURL=ai-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/lib/ai-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/lib/ai-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * LLM latency and cost profiling for AI endpoints.
3
+ *
4
+ * Detects AI endpoints by URL path patterns or response body fields,
5
+ * measures time-to-first-token for streaming responses, extracts token
6
+ * counts from response bodies/headers, and estimates cost using a
7
+ * built-in pricing table.
8
+ */
9
+ export interface LLMProfile {
10
+ endpoint: string;
11
+ ttftMs: number | null;
12
+ totalMs: number;
13
+ statusCode: number;
14
+ inputTokens: number | null;
15
+ outputTokens: number | null;
16
+ estimatedCostCents: number | null;
17
+ model: string | null;
18
+ provider: string | null;
19
+ }
20
+ export declare const MODEL_PRICING: Record<string, [number, number]>;
21
+ export declare function isAIEndpoint(url: string, responseBody?: string): boolean;
22
+ export interface ProfileAIEndpointOptions {
23
+ method?: string;
24
+ headers?: Record<string, string>;
25
+ body?: string;
26
+ timeoutMs?: number;
27
+ }
28
+ export declare function profileAIEndpoint(url: string, options?: ProfileAIEndpointOptions): Promise<LLMProfile>;
29
+ //# sourceMappingURL=ai-profiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-profiler.d.ts","sourceRoot":"","sources":["../../src/lib/ai-profiler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAKD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAO1D,CAAC;AAqBF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CA4BxE;AA+GD,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,UAAU,CAAC,CAkGrB"}
@@ -0,0 +1,20 @@
1
+ import type { ApiCheck, ApiCheckResult, ApiCheckFilter } from "../types/index.js";
2
+ export interface RunApiCheckOptions {
3
+ runId?: string;
4
+ baseUrl?: string;
5
+ }
6
+ export declare function runApiCheck(check: ApiCheck, options?: RunApiCheckOptions): Promise<ApiCheckResult>;
7
+ export declare function runApiChecks(checks: ApiCheck[], options?: RunApiCheckOptions & {
8
+ parallel?: number;
9
+ }): Promise<ApiCheckResult[]>;
10
+ export declare function runApiChecksByFilter(filter: ApiCheckFilter & {
11
+ baseUrl: string;
12
+ parallel?: number;
13
+ runId?: string;
14
+ }): Promise<{
15
+ results: ApiCheckResult[];
16
+ passed: number;
17
+ failed: number;
18
+ errors: number;
19
+ }>;
20
+ //# sourceMappingURL=api-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-runner.d.ts","sourceRoot":"","sources":["../../src/lib/api-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOlF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAuIzB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,cAAc,EAAE,CAAC,CAa3B;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAUxF"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Bun.WebView engine for open-testers — native zero-dep browser using WKWebView (macOS)
3
+ * or Chrome CDP (Windows/Linux). Available in Bun canary; stable in ~v1.4.0.
4
+ *
5
+ * ~11x faster and ~9x less memory than Playwright/Chrome.
6
+ * Playwright-compatible API so it slots into the existing runner with no changes.
7
+ *
8
+ * Limitations vs Playwright: no fullPage screenshots, no multi-tab, no file upload,
9
+ * no network interception, no PDF generation.
10
+ *
11
+ * Usage: import { isBunWebViewAvailable, BunWebViewSession } from './browser-bun.js'
12
+ */
13
+ export declare function isBunWebViewAvailable(): boolean;
14
+ interface NativeBunWebView {
15
+ navigate(url: string): Promise<void>;
16
+ evaluate(expr: string): Promise<unknown>;
17
+ screenshot(): Promise<Uint8Array>;
18
+ click(selector: string, opts?: {
19
+ button?: "left" | "right" | "middle";
20
+ }): Promise<void>;
21
+ type(text: string): Promise<void>;
22
+ press(key: string, opts?: {
23
+ modifiers?: string[];
24
+ }): Promise<void>;
25
+ scroll(dx: number, dy: number): Promise<void>;
26
+ scrollTo(selector: string, opts?: unknown): Promise<void>;
27
+ resize(width: number, height: number): Promise<void>;
28
+ goBack(): Promise<void>;
29
+ goForward(): Promise<void>;
30
+ reload(): Promise<void>;
31
+ close(): Promise<void>;
32
+ url: string;
33
+ title: string;
34
+ loading: boolean;
35
+ onNavigated: ((url: string) => void) | null;
36
+ onNavigationFailed: ((error: Error) => void) | null;
37
+ [Symbol.asyncDispose]: () => Promise<void>;
38
+ }
39
+ export interface BunWebViewOptions {
40
+ width?: number;
41
+ height?: number;
42
+ profile?: string;
43
+ headless?: boolean;
44
+ userAgent?: string;
45
+ onConsole?: (type: string, ...args: unknown[]) => void;
46
+ }
47
+ export declare class BunWebViewSession {
48
+ private view;
49
+ private _sessionId?;
50
+ private _eventListeners;
51
+ constructor(opts?: BunWebViewOptions);
52
+ goto(url: string, opts?: {
53
+ waitUntil?: string;
54
+ timeout?: number;
55
+ }): Promise<void>;
56
+ goBack(): Promise<void>;
57
+ goForward(): Promise<void>;
58
+ reload(): Promise<void>;
59
+ evaluate<T = unknown>(fnOrExpr: string | ((...args: unknown[]) => unknown), ...args: unknown[]): Promise<T>;
60
+ screenshot(opts?: {
61
+ path?: string;
62
+ type?: string;
63
+ fullPage?: boolean;
64
+ quality?: number;
65
+ }): Promise<Buffer>;
66
+ click(selector: string, opts?: {
67
+ button?: "left" | "right" | "middle";
68
+ timeout?: number;
69
+ }): Promise<void>;
70
+ type(selector: string, text: string, opts?: {
71
+ delay?: number;
72
+ }): Promise<void>;
73
+ fill(selector: string, value: string): Promise<void>;
74
+ press(key: string, opts?: {
75
+ modifiers?: string[];
76
+ }): Promise<void>;
77
+ scroll(direction: string, amount: number): Promise<void>;
78
+ scrollIntoView(selector: string): Promise<void>;
79
+ hover(selector: string): Promise<void>;
80
+ resize(width: number, height: number): Promise<void>;
81
+ $(selector: string): Promise<{
82
+ textContent(): Promise<string | null>;
83
+ } | null>;
84
+ $$(selector: string): Promise<Array<{
85
+ textContent(): Promise<string | null>;
86
+ }>>;
87
+ inputValue(selector: string): Promise<string>;
88
+ isChecked(selector: string): Promise<boolean>;
89
+ isVisible(selector: string): Promise<boolean>;
90
+ isEnabled(selector: string): Promise<boolean>;
91
+ selectOption(selector: string, value: string): Promise<string[]>;
92
+ check(selector: string): Promise<void>;
93
+ uncheck(selector: string): Promise<void>;
94
+ setInputFiles(selector: string, files: string | string[]): Promise<void>;
95
+ getByRole(role: string, opts?: {
96
+ name?: string | RegExp;
97
+ }): any;
98
+ getByText(text: string, opts?: {
99
+ exact?: boolean;
100
+ }): any;
101
+ locator(selector: string): any;
102
+ url(): string;
103
+ title(): Promise<string>;
104
+ viewportSize(): {
105
+ width: number;
106
+ height: number;
107
+ } | null;
108
+ waitForLoadState(state?: string, opts?: {
109
+ timeout?: number;
110
+ }): Promise<void>;
111
+ waitForURL(pattern: string | RegExp, opts?: {
112
+ timeout?: number;
113
+ }): Promise<void>;
114
+ waitForSelector(selector: string, opts?: {
115
+ state?: string;
116
+ timeout?: number;
117
+ }): Promise<void>;
118
+ setContent(html: string): Promise<void>;
119
+ content(): Promise<string>;
120
+ addInitScript(script: string | (() => void)): Promise<void>;
121
+ keyboard: {
122
+ press: (key: string) => Promise<void>;
123
+ };
124
+ context(): {
125
+ close: () => Promise<void>;
126
+ newPage: () => Promise<never>;
127
+ cookies: () => Promise<never[]>;
128
+ addCookies: (_: unknown) => Promise<void>;
129
+ clearCookies: () => Promise<void>;
130
+ newCDPSession: () => Promise<never>;
131
+ route: (_pattern: unknown, _handler: unknown) => Promise<never>;
132
+ unrouteAll: () => Promise<void>;
133
+ pages: () => never[];
134
+ addInitScript: (script: string) => Promise<void>;
135
+ };
136
+ on(event: string, handler: (...args: unknown[]) => void): this;
137
+ off(event: string, handler: (...args: unknown[]) => void): this;
138
+ private _emit;
139
+ pdf(_opts?: unknown): Promise<Buffer>;
140
+ coverage: {
141
+ startJSCoverage: () => Promise<void>;
142
+ stopJSCoverage: () => Promise<never[]>;
143
+ startCSSCoverage: () => Promise<void>;
144
+ stopCSSCoverage: () => Promise<never[]>;
145
+ };
146
+ setSessionId(id: string): void;
147
+ getSessionId(): string | undefined;
148
+ getNativeView(): NativeBunWebView;
149
+ close(): Promise<void>;
150
+ [Symbol.asyncDispose](): Promise<void>;
151
+ }
152
+ export {};
153
+ //# sourceMappingURL=browser-bun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-bun.d.ts","sourceRoot":"","sources":["../../src/lib/browser-bun.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type Browser, type Page } from "playwright";
2
- export type BrowserEngine = "playwright" | "lightpanda";
2
+ export type BrowserEngine = "playwright" | "lightpanda" | "bun";
3
3
  interface ViewportSize {
4
4
  width: number;
5
5
  height: number;
@@ -62,6 +62,15 @@ export declare class BrowserPool {
62
62
  */
63
63
  closeAll(): Promise<void>;
64
64
  }
65
+ /**
66
+ * A simple factory that launches the appropriate browser engine.
67
+ * Use this as the single entry-point when you want engine-agnostic launch logic.
68
+ */
69
+ export interface BrowserConfig {
70
+ headless: boolean;
71
+ viewport?: ViewportSize;
72
+ }
73
+ export declare function launchBrowserEngine(engine: BrowserEngine, config: BrowserConfig): Promise<Browser>;
65
74
  /**
66
75
  * Installs Chromium for Playwright using bunx.
67
76
  */
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/lib/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAI/D,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AAExD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B7E;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,GACjD,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1F;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAGrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,CAAA;KAAE;IAQnF;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAqC1D;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAShC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1E"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/lib/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAI/D,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,KAAK,CAAC;AAEhE,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CA8C7E;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,GACjD,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB1F;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAGrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,CAAA;KAAE;IAQnF;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAqC1D;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAShC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1E"}
package/dist/lib/ci.d.ts CHANGED
@@ -1,2 +1,7 @@
1
+ import type { Run, Result } from "../types/index.js";
1
2
  export declare function generateGitHubActionsWorkflow(): string;
3
+ export declare function postGitHubComment(run: Run, results: Result[], options?: {
4
+ prNumber?: number;
5
+ dashboardUrl?: string;
6
+ }): Promise<boolean>;
2
7
  //# sourceMappingURL=ci.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/lib/ci.ts"],"names":[],"mappings":"AAAA,wBAAgB,6BAA6B,IAAI,MAAM,CA4BtD"}
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/lib/ci.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,6BAA6B,IAAI,MAAM,CA6BtD;AA+BD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAAC,OAAO,CAAC,CAuClB"}
@@ -0,0 +1,33 @@
1
+ export interface ComplianceReport {
2
+ generatedAt: string;
3
+ periodStart: string;
4
+ periodEnd: string;
5
+ projectId?: string;
6
+ riskManagement: {
7
+ totalRunsInPeriod: number;
8
+ averagePassRate: number;
9
+ criticalFailures: number;
10
+ };
11
+ safetyChecks: {
12
+ injectionProbesRun: number;
13
+ injectionVulnsFound: number;
14
+ piiLeaksDetected: number;
15
+ goldenAnswerDriftEvents: number;
16
+ };
17
+ qualityMetrics: {
18
+ evalScenariosRun: number;
19
+ averageEvalScore: number;
20
+ a11yViolationsCritical: number;
21
+ flakyScenarioCount: number;
22
+ };
23
+ attestation: {
24
+ timestamp: string;
25
+ sha256: string;
26
+ };
27
+ }
28
+ export declare function generateComplianceReport(options: {
29
+ projectId?: string;
30
+ days?: number;
31
+ format: "json" | "markdown";
32
+ }): Promise<string>;
33
+ //# sourceMappingURL=compliance-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-report.d.ts","sourceRoot":"","sources":["../../src/lib/compliance-report.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE;QACd,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF,YAAY,EAAE;QACZ,kBAAkB,EAAE,MAAM,CAAC;QAC3B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;QACzB,uBAAuB,EAAE,MAAM,CAAC;KACjC,CAAC;IAEF,cAAc,EAAE;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAEF,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAqND,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;AAMpE;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAgBhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,aAAa,CA6C1C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKrD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;AAMpE;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAiBhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,aAAa,CAiD1C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKrD"}
@@ -27,6 +27,11 @@ export declare function getCostSummary(options?: {
27
27
  projectId?: string;
28
28
  period?: "day" | "week" | "month" | "all";
29
29
  }): CostSummary;
30
+ /**
31
+ * Estimate the total cost in cents for running a batch of scenarios.
32
+ * scenarioCount × costPerScenario × samples
33
+ */
34
+ export declare function estimateRunCostCents(scenarioCount: number, model: string, samples?: number): number;
30
35
  export interface ScenarioCostRow {
31
36
  scenarioId: string;
32
37
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"costs.d.ts","sourceRoot":"","sources":["../../src/lib/costs.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,UAAU,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzG,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AA0CD,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;CAC3C,GAAG,WAAW,CAyFd;AAID,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;CAC3C,GAAG,eAAe,EAAE,CAoCpB;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAyB7F;AAED,wBAAgB,WAAW,CAAC,kBAAkB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CA+B9F;AAcD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAyChE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAS3D"}
1
+ {"version":3,"file":"costs.d.ts","sourceRoot":"","sources":["../../src/lib/costs.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,UAAU,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzG,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AA0CD,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;CAC3C,GAAG,WAAW,CAyFd;AAgDD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,MAAM,CAG9F;AAID,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;CAC3C,GAAG,eAAe,EAAE,CAoCpB;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAyB7F;AAED,wBAAgB,WAAW,CAAC,kBAAkB,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CA+B9F;AAcD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAyChE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAS3D"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Eval scenario runner — hits AI endpoints and scores outputs using the judge engine.
3
+ *
4
+ * Eval scenarios store their config in scenario.metadata as EvalScenarioConfig.
5
+ * Each test case runs against the endpoint and is scored by one or more rubrics.
6
+ * Results are stored in the standard results table with per-case scores in metadata.
7
+ */
8
+ import type { Scenario, Result } from "../types/index.js";
9
+ import type { JudgeRubric, JudgeResult } from "./judge.js";
10
+ export interface EvalTestCase {
11
+ input: string;
12
+ context?: string;
13
+ rubrics: JudgeRubric[];
14
+ }
15
+ export interface EvalScenarioConfig {
16
+ endpoint: string;
17
+ method?: string;
18
+ headers?: Record<string, string>;
19
+ inputField?: string;
20
+ outputField?: string;
21
+ testCases: EvalTestCase[];
22
+ judgeModel?: string;
23
+ judgeProvider?: string;
24
+ baseUrl?: string;
25
+ }
26
+ export interface EvalCaseResult {
27
+ input: string;
28
+ output: string | null;
29
+ rubricResults: Array<{
30
+ rubricType: string;
31
+ pass: boolean;
32
+ score: number;
33
+ reason: string;
34
+ }>;
35
+ passed: boolean;
36
+ score: number;
37
+ error?: string;
38
+ }
39
+ export interface EvalRunResult {
40
+ passed: boolean;
41
+ totalCases: number;
42
+ passedCases: number;
43
+ avgScore: number;
44
+ caseResults: EvalCaseResult[];
45
+ tokensUsed: number;
46
+ durationMs: number;
47
+ }
48
+ export declare function runEvalScenario(scenario: Scenario, options: {
49
+ runId: string;
50
+ baseUrl: string;
51
+ }): Promise<Result>;
52
+ export interface RagTestCase {
53
+ question: string;
54
+ sourceDocs: string[];
55
+ expectedFacts?: string[];
56
+ forbiddenClaims?: string[];
57
+ }
58
+ export interface RagEvalConfig extends EvalScenarioConfig {
59
+ ragTestCases: RagTestCase[];
60
+ }
61
+ export interface RagCaseResult {
62
+ question: string;
63
+ output: string | null;
64
+ faithfulnessScore: number;
65
+ faithfulnessPass: boolean;
66
+ factualCompletenessScore: number;
67
+ factualCompletenessPass: boolean;
68
+ forbiddenClaimViolations: string[];
69
+ passed: boolean;
70
+ error?: string;
71
+ judgeResults: JudgeResult[];
72
+ }
73
+ export interface RagEvalResult {
74
+ passed: boolean;
75
+ totalCases: number;
76
+ passedCases: number;
77
+ avgFaithfulnessScore: number;
78
+ avgFactualCompletenessScore: number;
79
+ totalForbiddenViolations: number;
80
+ caseResults: RagCaseResult[];
81
+ tokensUsed: number;
82
+ durationMs: number;
83
+ }
84
+ export declare function runRagEval(scenario: Scenario, options: {
85
+ runId: string;
86
+ baseUrl: string;
87
+ }): Promise<Result>;
88
+ export declare function runPipelineScenario(scenario: Scenario, options: {
89
+ runId: string;
90
+ baseUrl: string;
91
+ }): Promise<Result>;
92
+ export { runPipeline } from "./pipeline-runner.js";
93
+ export type { PipelineConfig, PipelineStep, PipelineRunResult, PipelineStepResult } from "./pipeline-runner.js";
94
+ //# sourceMappingURL=eval-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-runner.d.ts","sourceRoot":"","sources":["../../src/lib/eval-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { FailureAnalysis } from "../types/index.js";
2
+ /**
3
+ * Deterministic (no LLM) failure analysis from error message and reasoning text.
4
+ * Returns null if both inputs are null/empty.
5
+ */
6
+ export declare function analyzeFailure(error: string | null, reasoning: string | null): FailureAnalysis | null;
7
+ //# sourceMappingURL=failure-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/failure-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,GAAG,IAAI,CA0IrG"}
@@ -0,0 +1,17 @@
1
+ import type { FailureAnalysis } from "../types/index.js";
2
+ export interface FailureExplanation {
3
+ resultId: string;
4
+ type: FailureAnalysis["type"];
5
+ summary: string;
6
+ likelyCause: string;
7
+ suggestedFix: string;
8
+ affectedElement?: string;
9
+ confidence: number;
10
+ raw: {
11
+ error: string | null;
12
+ reasoning: string | null;
13
+ failureAnalysis: FailureAnalysis | null;
14
+ };
15
+ }
16
+ export declare function explainFailure(resultId: string): FailureExplanation;
17
+ //# sourceMappingURL=failure-explainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-explainer.d.ts","sourceRoot":"","sources":["../../src/lib/failure-explainer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;KACzC,CAAC;CACH;AAmDD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAqDnE"}
@@ -17,4 +17,15 @@ export declare function createFailureTasks(run: Run, failedResults: Result[], sc
17
17
  * No-op if either env var is missing.
18
18
  */
19
19
  export declare function notifyFailureToConversations(run: Run, failedResults: Result[], scenarios: Scenario[]): Promise<void>;
20
+ /**
21
+ * Post a run completion summary to a conversations space.
22
+ * Called for ALL run completions (passed and failed).
23
+ * Controlled by:
24
+ * TESTERS_CONVERSATIONS_URL — base URL of the conversations service
25
+ * TESTERS_CONVERSATIONS_SPACE — space name/slug to post to
26
+ * No-op if either env var is missing.
27
+ */
28
+ export declare function notifyRunToConversations(run: Run, results: Result[], options?: {
29
+ spaceId?: string;
30
+ }): Promise<void>;
20
31
  //# sourceMappingURL=failure-pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"failure-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/failure-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAK/D;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyE/C;AAID;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAwCf"}
1
+ {"version":3,"file":"failure-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/failure-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAK/D;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyE/C;AAID;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAID;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Synthetic scenario generator.
3
+ *
4
+ * Crawls a web app using a real browser, discovers interactive surfaces
5
+ * (forms, buttons, nav, pages), and uses the configured AI provider to
6
+ * synthesize test scenarios covering happy paths, edge cases, and error states.
7
+ *
8
+ * Provider-agnostic: uses createClientForModel / callOpenAICompatible
9
+ * from ai-client.ts — works with Claude, GPT-4o, Gemini.
10
+ */
11
+ import type { CreateScenarioInput } from "../types/index.js";
12
+ export interface GeneratorOptions {
13
+ url: string;
14
+ persona?: string;
15
+ maxScenarios?: number;
16
+ maxPages?: number;
17
+ focus?: string;
18
+ model?: string;
19
+ headed?: boolean;
20
+ projectId?: string;
21
+ save?: boolean;
22
+ }
23
+ export interface GeneratedScenario extends CreateScenarioInput {
24
+ generatedFrom?: string;
25
+ }
26
+ export interface GeneratorResult {
27
+ scenarios: GeneratedScenario[];
28
+ pagesDiscovered: number;
29
+ tokensUsed: number;
30
+ provider: string;
31
+ model: string;
32
+ }
33
+ export declare function generateScenarios(options: GeneratorOptions): Promise<GeneratorResult>;
34
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/lib/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAoB,MAAM,mBAAmB,CAAC;AAI/E,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AA6KD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoD3F"}