@hasna/testers 0.0.13 → 0.0.15
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/dashboard/dist/assets/index-BSYf1bIR.css +1 -0
- package/dashboard/dist/assets/index-Bdn52878.js +49 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7957 -2772
- 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 +9 -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 +3 -0
- package/dist/db/results.d.ts.map +1 -1
- package/dist/db/runs.d.ts.map +1 -1
- package/dist/db/scan-issues.d.ts +29 -0
- package/dist/db/scan-issues.d.ts.map +1 -0
- package/dist/index.js +2371 -1202
- package/dist/lib/ai-client.d.ts +55 -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.d.ts +9 -0
- 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/eval-runner.d.ts +94 -0
- package/dist/lib/eval-runner.d.ts.map +1 -0
- 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 +27 -0
- package/dist/lib/health-scan.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/runner.d.ts +8 -0
- 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/console.d.ts +12 -0
- package/dist/lib/scanners/console.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/links.d.ts +12 -0
- package/dist/lib/scanners/links.d.ts.map +1 -0
- package/dist/lib/scanners/network.d.ts +15 -0
- package/dist/lib/scanners/network.d.ts.map +1 -0
- package/dist/lib/scanners/performance.d.ts +19 -0
- package/dist/lib/scanners/performance.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/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.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8103 -4598
- package/dist/server/index.js +7867 -5055
- package/dist/types/index.d.ts +271 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- 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,11 @@ export type StepEventHandler = (event: {
|
|
|
40
43
|
stepNumber: number;
|
|
41
44
|
}) => void;
|
|
42
45
|
interface AgentLoopOptions {
|
|
43
|
-
client: Anthropic
|
|
46
|
+
client: Anthropic | {
|
|
47
|
+
provider: "openai" | "google";
|
|
48
|
+
baseUrl: string;
|
|
49
|
+
apiKey: string;
|
|
50
|
+
};
|
|
44
51
|
page: Page;
|
|
45
52
|
scenario: Scenario;
|
|
46
53
|
screenshotter: Screenshotter;
|
|
@@ -48,6 +55,17 @@ interface AgentLoopOptions {
|
|
|
48
55
|
runId: string;
|
|
49
56
|
maxTurns?: number;
|
|
50
57
|
onStep?: StepEventHandler;
|
|
58
|
+
persona?: {
|
|
59
|
+
name: string;
|
|
60
|
+
role: string;
|
|
61
|
+
description: string;
|
|
62
|
+
instructions: string;
|
|
63
|
+
traits: string[];
|
|
64
|
+
goals: string[];
|
|
65
|
+
} | null;
|
|
66
|
+
a11y?: boolean | {
|
|
67
|
+
level?: "A" | "AA" | "AAA";
|
|
68
|
+
};
|
|
51
69
|
}
|
|
52
70
|
interface AgentLoopResult {
|
|
53
71
|
status: "passed" | "failed" | "error";
|
|
@@ -72,10 +90,46 @@ interface AgentLoopResult {
|
|
|
72
90
|
* a final result or the turn limit is reached.
|
|
73
91
|
*/
|
|
74
92
|
export declare function runAgentLoop(options: AgentLoopOptions): Promise<AgentLoopResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Detects the AI provider from a model name.
|
|
95
|
+
* - "gpt-*" or "o1-*" / "o3-*" → openai
|
|
96
|
+
* - "gemini-*" → google
|
|
97
|
+
* - everything else → anthropic (default)
|
|
98
|
+
*/
|
|
99
|
+
export declare function detectProvider(model: string): "anthropic" | "openai" | "google";
|
|
75
100
|
/**
|
|
76
101
|
* Creates an Anthropic client instance. Uses the provided API key,
|
|
77
102
|
* or falls back to the ANTHROPIC_API_KEY environment variable.
|
|
78
103
|
*/
|
|
79
104
|
export declare function createClient(apiKey?: string): Anthropic;
|
|
105
|
+
/**
|
|
106
|
+
* Calls an OpenAI-compatible chat completions endpoint and returns a
|
|
107
|
+
* response shaped like an Anthropic message (content blocks).
|
|
108
|
+
*/
|
|
109
|
+
export declare function callOpenAICompatible(options: {
|
|
110
|
+
baseUrl: string;
|
|
111
|
+
apiKey: string;
|
|
112
|
+
model: string;
|
|
113
|
+
system: string;
|
|
114
|
+
messages: Anthropic.MessageParam[];
|
|
115
|
+
tools: Anthropic.Tool[];
|
|
116
|
+
maxTokens?: number;
|
|
117
|
+
}): Promise<{
|
|
118
|
+
content: Anthropic.ContentBlock[];
|
|
119
|
+
stop_reason: string;
|
|
120
|
+
usage: {
|
|
121
|
+
input_tokens: number;
|
|
122
|
+
output_tokens: number;
|
|
123
|
+
};
|
|
124
|
+
}>;
|
|
125
|
+
/**
|
|
126
|
+
* Creates the right client/config for a given model. Returns either an Anthropic
|
|
127
|
+
* client or a config object for the OpenAI-compatible path.
|
|
128
|
+
*/
|
|
129
|
+
export declare function createClientForModel(model: string, apiKey?: string): Anthropic | {
|
|
130
|
+
provider: "openai" | "google";
|
|
131
|
+
baseUrl: string;
|
|
132
|
+
apiKey: string;
|
|
133
|
+
};
|
|
80
134
|
export {};
|
|
81
135
|
//# 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":"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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"}
|
package/dist/lib/browser.d.ts
CHANGED
|
@@ -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,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;;;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,CAalB;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,CAgD1C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKrD"}
|
|
@@ -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,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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { GoldenAnswer, GoldenCheckResult } from "../db/golden-answers.js";
|
|
2
|
+
export interface GoldenMonitorOptions {
|
|
3
|
+
projectId?: string;
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
judgeModel?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface GoldenMonitorResult {
|
|
8
|
+
checked: number;
|
|
9
|
+
passed: number;
|
|
10
|
+
drifted: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Hit golden.endpoint, score the response vs golden_answer using the judge,
|
|
14
|
+
* detect drift (score drop > 0.15 vs 7-day average), and save the result.
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkGoldenAnswer(golden: GoldenAnswer, options: {
|
|
17
|
+
baseUrl: string;
|
|
18
|
+
judgeModel?: string;
|
|
19
|
+
}): Promise<GoldenCheckResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Run all enabled golden answer checks for a project (or all if no projectId).
|
|
22
|
+
*/
|
|
23
|
+
export declare function runGoldenMonitor(options: {
|
|
24
|
+
projectId?: string;
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
judgeModel?: string;
|
|
27
|
+
}): Promise<GoldenMonitorResult>;
|
|
28
|
+
//# sourceMappingURL=golden-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"golden-monitor.d.ts","sourceRoot":"","sources":["../../src/lib/golden-monitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAS/E,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAID;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,iBAAiB,CAAC,CAwE5B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,mBAAmB,CAAC,CA2B9B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-healing selector repair.
|
|
3
|
+
*
|
|
4
|
+
* When a browser tool fails because a CSS selector can't be found,
|
|
5
|
+
* healer.ts takes a screenshot of the current page, sends it along with
|
|
6
|
+
* the original intent to the configured AI model, and asks it to identify
|
|
7
|
+
* the new correct selector.
|
|
8
|
+
*
|
|
9
|
+
* Provider-agnostic: uses the same multi-provider stack as judge.ts.
|
|
10
|
+
* Config: enabled via selfHeal: true in ~/.testers/config.json
|
|
11
|
+
*/
|
|
12
|
+
import type { Page } from "playwright";
|
|
13
|
+
export interface HealRequest {
|
|
14
|
+
page: Page;
|
|
15
|
+
failedSelector: string;
|
|
16
|
+
intent: string;
|
|
17
|
+
model?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface HealResult {
|
|
20
|
+
newSelector: string | null;
|
|
21
|
+
confidence: number;
|
|
22
|
+
reasoning: string;
|
|
23
|
+
healed: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function healSelector(request: HealRequest): Promise<HealResult>;
|
|
26
|
+
//# sourceMappingURL=healer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healer.d.ts","sourceRoot":"","sources":["../../src/lib/healer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAmBD,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6G5E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ScanResult } from "../types/index.js";
|
|
2
|
+
export interface HealthScanOptions {
|
|
3
|
+
url: string;
|
|
4
|
+
pages?: string[];
|
|
5
|
+
projectId?: string;
|
|
6
|
+
headed?: boolean;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
scanners?: ("console" | "network" | "links" | "performance" | "injection" | "pii")[];
|
|
9
|
+
injectionEndpoint?: string;
|
|
10
|
+
injectionInputField?: string;
|
|
11
|
+
maxPages?: number;
|
|
12
|
+
piiEndpoint?: string;
|
|
13
|
+
piiSeedPii?: string[];
|
|
14
|
+
piiInputField?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface HealthScanSummary {
|
|
17
|
+
url: string;
|
|
18
|
+
scannedAt: string;
|
|
19
|
+
durationMs: number;
|
|
20
|
+
totalIssues: number;
|
|
21
|
+
newIssues: number;
|
|
22
|
+
regressedIssues: number;
|
|
23
|
+
existingIssues: number;
|
|
24
|
+
results: ScanResult[];
|
|
25
|
+
}
|
|
26
|
+
export declare function runHealthScan(options: HealthScanOptions): Promise<HealthScanSummary>;
|
|
27
|
+
//# sourceMappingURL=health-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-scan.d.ts","sourceRoot":"","sources":["../../src/lib/health-scan.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAC;AAI/D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;IACrF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAID,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8E1F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-provider AI judge engine.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates (input, output) pairs against structured rubrics using either
|
|
5
|
+
* deterministic checks (no LLM cost) or an LLM-as-judge (any provider).
|
|
6
|
+
*
|
|
7
|
+
* Provider resolution order:
|
|
8
|
+
* 1. config.model (explicit) → detectProvider()
|
|
9
|
+
* 2. ANTHROPIC_API_KEY env
|
|
10
|
+
* 3. OPENAI_API_KEY env
|
|
11
|
+
* 4. GOOGLE_API_KEY env
|
|
12
|
+
*/
|
|
13
|
+
export type JudgeProvider = "anthropic" | "openai" | "google" | "auto";
|
|
14
|
+
export interface JudgeConfig {
|
|
15
|
+
model?: string;
|
|
16
|
+
provider?: JudgeProvider;
|
|
17
|
+
apiKey?: string;
|
|
18
|
+
temperature?: number;
|
|
19
|
+
}
|
|
20
|
+
export type JudgeRubric = {
|
|
21
|
+
type: "contains";
|
|
22
|
+
value: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: "not_contains";
|
|
25
|
+
value: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: "regex";
|
|
28
|
+
pattern: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: "llm";
|
|
31
|
+
prompt: string;
|
|
32
|
+
threshold?: number;
|
|
33
|
+
} | {
|
|
34
|
+
type: "factual";
|
|
35
|
+
facts: string[];
|
|
36
|
+
} | {
|
|
37
|
+
type: "no_pii";
|
|
38
|
+
patterns?: string[];
|
|
39
|
+
} | {
|
|
40
|
+
type: "coherent";
|
|
41
|
+
} | {
|
|
42
|
+
type: "faithful";
|
|
43
|
+
sourceDocs: string[];
|
|
44
|
+
} | {
|
|
45
|
+
type: "safe";
|
|
46
|
+
};
|
|
47
|
+
export interface JudgeInput {
|
|
48
|
+
input: string;
|
|
49
|
+
output: string;
|
|
50
|
+
context?: string;
|
|
51
|
+
rubric: JudgeRubric;
|
|
52
|
+
}
|
|
53
|
+
export interface JudgeResult {
|
|
54
|
+
pass: boolean;
|
|
55
|
+
score: number;
|
|
56
|
+
reason: string;
|
|
57
|
+
rubricType: string;
|
|
58
|
+
tokensUsed: number;
|
|
59
|
+
provider: string;
|
|
60
|
+
model: string;
|
|
61
|
+
durationMs: number;
|
|
62
|
+
}
|
|
63
|
+
export declare function judge(input: JudgeInput, config?: JudgeConfig): Promise<JudgeResult>;
|
|
64
|
+
export interface BatchJudgeResult {
|
|
65
|
+
results: JudgeResult[];
|
|
66
|
+
passCount: number;
|
|
67
|
+
failCount: number;
|
|
68
|
+
avgScore: number;
|
|
69
|
+
totalTokensUsed: number;
|
|
70
|
+
}
|
|
71
|
+
export declare function judgeAll(inputs: JudgeInput[], config?: JudgeConfig): Promise<BatchJudgeResult>;
|
|
72
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/lib/judge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAmID,wBAAsB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAwCzF;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMpG"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import type { CreateScenarioInput } from "../types/index.js";
|
|
2
2
|
import { createScenario } from "../db/scenarios.js";
|
|
3
|
+
import { createApiCheck } from "../db/api-checks.js";
|
|
4
|
+
import type { CreateApiCheckInput } from "../types/index.js";
|
|
3
5
|
export declare function parseOpenAPISpec(filePathOrUrl: string): CreateScenarioInput[];
|
|
4
6
|
export declare function importFromOpenAPI(filePathOrUrl: string, projectId?: string): {
|
|
5
7
|
imported: number;
|
|
6
8
|
scenarios: ReturnType<typeof createScenario>[];
|
|
7
9
|
};
|
|
10
|
+
export declare function parseOpenAPISpecAsChecks(filePathOrUrl: string): CreateApiCheckInput[];
|
|
11
|
+
export declare function importApiChecksFromOpenAPI(filePathOrUrl: string, projectId?: string): {
|
|
12
|
+
imported: number;
|
|
13
|
+
checks: ReturnType<typeof createApiCheck>[];
|
|
14
|
+
};
|
|
8
15
|
//# sourceMappingURL=openapi-import.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-import.d.ts","sourceRoot":"","sources":["../../src/lib/openapi-import.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"openapi-import.d.ts","sourceRoot":"","sources":["../../src/lib/openapi-import.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAgC,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA0C7D,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAwE7E;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,EAAE,CAAA;CAAE,CAMtE;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAuCrF;AAED,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,EAAE,CAAA;CAAE,CAInE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Result } from "../types/index.js";
|
|
2
|
+
export interface PersonaDivergence {
|
|
3
|
+
scenarioId: string;
|
|
4
|
+
scenarioName: string;
|
|
5
|
+
personas: Array<{
|
|
6
|
+
personaId: string | null;
|
|
7
|
+
personaName: string | null;
|
|
8
|
+
status: string;
|
|
9
|
+
reasoning: string | null;
|
|
10
|
+
}>;
|
|
11
|
+
divergenceScore: number;
|
|
12
|
+
hasDivergence: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Diff results across personas for the same scenarios.
|
|
16
|
+
* Groups results by scenarioId, then compares status across persona variants.
|
|
17
|
+
* divergenceScore = (distinct statuses - 1) / (persona count - 1)
|
|
18
|
+
*/
|
|
19
|
+
export declare function diffPersonaResults(results: Result[], scenarios: Array<{
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}>): PersonaDivergence[];
|
|
23
|
+
/**
|
|
24
|
+
* Format divergence results for terminal display.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatDivergenceTerminal(divergences: PersonaDivergence[]): string;
|
|
27
|
+
//# sourceMappingURL=persona-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-diff.d.ts","sourceRoot":"","sources":["../../src/lib/persona-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC,CAAC;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,iBAAiB,EAAE,CA+CrB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAgCjF"}
|