@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.
- package/LICENSE +170 -21
- package/dashboard/dist/assets/index-CQzkimyO.css +1 -0
- package/dashboard/dist/assets/index-D52SWwDa.js +49 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/cli/index.js +11125 -5537
- package/dist/db/api-checks.d.ts +28 -0
- package/dist/db/api-checks.d.ts.map +1 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/environments.d.ts +10 -0
- package/dist/db/environments.d.ts.map +1 -1
- package/dist/db/golden-answers.d.ts +89 -0
- package/dist/db/golden-answers.d.ts.map +1 -0
- package/dist/db/personas.d.ts +17 -0
- package/dist/db/personas.d.ts.map +1 -0
- package/dist/db/projects.d.ts +3 -6
- package/dist/db/projects.d.ts.map +1 -1
- package/dist/db/results.d.ts +5 -1
- package/dist/db/results.d.ts.map +1 -1
- package/dist/db/runs.d.ts.map +1 -1
- package/dist/db/scenarios.d.ts +1 -0
- package/dist/db/scenarios.d.ts.map +1 -1
- package/dist/db/seed-personas.d.ts +15 -0
- package/dist/db/seed-personas.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4331 -2407
- package/dist/lib/ai-client.d.ts +54 -1
- package/dist/lib/ai-client.d.ts.map +1 -1
- package/dist/lib/ai-profiler.d.ts +29 -0
- package/dist/lib/ai-profiler.d.ts.map +1 -0
- package/dist/lib/api-runner.d.ts +20 -0
- package/dist/lib/api-runner.d.ts.map +1 -0
- package/dist/lib/browser-bun.d.ts +153 -0
- package/dist/lib/browser-bun.d.ts.map +1 -0
- package/dist/lib/browser.d.ts +10 -1
- package/dist/lib/browser.d.ts.map +1 -1
- package/dist/lib/ci.d.ts +5 -0
- package/dist/lib/ci.d.ts.map +1 -1
- package/dist/lib/compliance-report.d.ts +33 -0
- package/dist/lib/compliance-report.d.ts.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/costs.d.ts +5 -0
- package/dist/lib/costs.d.ts.map +1 -1
- package/dist/lib/eval-runner.d.ts +94 -0
- package/dist/lib/eval-runner.d.ts.map +1 -0
- package/dist/lib/failure-analyzer.d.ts +7 -0
- package/dist/lib/failure-analyzer.d.ts.map +1 -0
- package/dist/lib/failure-explainer.d.ts +17 -0
- package/dist/lib/failure-explainer.d.ts.map +1 -0
- package/dist/lib/failure-pipeline.d.ts +11 -0
- package/dist/lib/failure-pipeline.d.ts.map +1 -1
- package/dist/lib/generator.d.ts +34 -0
- package/dist/lib/generator.d.ts.map +1 -0
- package/dist/lib/golden-monitor.d.ts +28 -0
- package/dist/lib/golden-monitor.d.ts.map +1 -0
- package/dist/lib/healer.d.ts +26 -0
- package/dist/lib/healer.d.ts.map +1 -0
- package/dist/lib/health-scan.d.ts +6 -1
- package/dist/lib/health-scan.d.ts.map +1 -1
- package/dist/lib/hybrid-runner.d.ts +100 -0
- package/dist/lib/hybrid-runner.d.ts.map +1 -0
- package/dist/lib/judge.d.ts +72 -0
- package/dist/lib/judge.d.ts.map +1 -0
- package/dist/lib/openapi-import.d.ts +7 -0
- package/dist/lib/openapi-import.d.ts.map +1 -1
- package/dist/lib/persona-diff.d.ts +27 -0
- package/dist/lib/persona-diff.d.ts.map +1 -0
- package/dist/lib/pipeline-runner.d.ts +48 -0
- package/dist/lib/pipeline-runner.d.ts.map +1 -0
- package/dist/lib/reporter.d.ts +2 -0
- package/dist/lib/reporter.d.ts.map +1 -1
- package/dist/lib/runner.d.ts +13 -1
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/scanners/a11y.d.ts +41 -0
- package/dist/lib/scanners/a11y.d.ts.map +1 -0
- package/dist/lib/scanners/injection.d.ts +54 -0
- package/dist/lib/scanners/injection.d.ts.map +1 -0
- package/dist/lib/scanners/pii-scanner.d.ts +19 -0
- package/dist/lib/scanners/pii-scanner.d.ts.map +1 -0
- package/dist/lib/scanners/pii.d.ts +17 -0
- package/dist/lib/scanners/pii.d.ts.map +1 -0
- package/dist/lib/screenshotter.d.ts.map +1 -1
- package/dist/lib/session-converter.d.ts +29 -0
- package/dist/lib/session-converter.d.ts.map +1 -0
- package/dist/lib/webhooks.d.ts +20 -1
- package/dist/lib/webhooks.d.ts.map +1 -1
- package/dist/mcp/index.js +11144 -6270
- package/dist/server/index.js +5388 -1671
- package/dist/types/index.d.ts +278 -5
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +4 -4
- package/dashboard/dist/assets/index-FZ9gzLaz.js +0 -49
- package/dashboard/dist/assets/index-PT-52SEY.css +0 -1
package/dist/lib/ai-client.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAKzD;AAID,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,IAAI,EAyTzC,CAAC;AAIF,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/lib/ai-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAKzD;AAID,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,IAAI,EAyTzC,CAAC;AAIF,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,KAAK,CAAA;KAAE,CAAC;CACjD;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,mBAAmB,CAAC,CA8S9B;AAID,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE;IACrC,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,KAAK,IAAI,CAAC;AAEX,UAAU,gBAAgB;IACxB,MAAM,EAAE,SAAS,GAAG,kBAAkB,CAAC;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,GAAG,IAAI,CAAC;IACT,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,KAAK,CAAA;KAAE,CAAC;CACjD;AAED,UAAU,eAAe;IACvB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAqO1B;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAM5F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAQvD;AAiCD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;IACnC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CA8D9H;AAED;;;GAGG;AAIH,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAkBnG"}
|
|
@@ -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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"}
|
package/dist/lib/browser.d.ts
CHANGED
|
@@ -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;
|
|
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
|
package/dist/lib/ci.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/lib/ci.ts"],"names":[],"mappings":"AAAA,wBAAgB,6BAA6B,IAAI,MAAM,
|
|
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"}
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/lib/costs.d.ts
CHANGED
|
@@ -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;
|
package/dist/lib/costs.d.ts.map
CHANGED
|
@@ -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"}
|