@lanefoundry/gatelane-engine 0.0.0-canary-b3f6165

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 (54) hide show
  1. package/LICENSE +190 -0
  2. package/dist/attack.d.ts +53 -0
  3. package/dist/attack.d.ts.map +1 -0
  4. package/dist/attack.js +75 -0
  5. package/dist/attack.js.map +1 -0
  6. package/dist/audit.d.ts +56 -0
  7. package/dist/audit.d.ts.map +1 -0
  8. package/dist/audit.js +115 -0
  9. package/dist/audit.js.map +1 -0
  10. package/dist/compare.d.ts +45 -0
  11. package/dist/compare.d.ts.map +1 -0
  12. package/dist/compare.js +118 -0
  13. package/dist/compare.js.map +1 -0
  14. package/dist/evaluate.d.ts +40 -0
  15. package/dist/evaluate.d.ts.map +1 -0
  16. package/dist/evaluate.js +87 -0
  17. package/dist/evaluate.js.map +1 -0
  18. package/dist/index.d.ts +19 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +19 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/judge.d.ts +68 -0
  23. package/dist/judge.d.ts.map +1 -0
  24. package/dist/judge.js +102 -0
  25. package/dist/judge.js.map +1 -0
  26. package/dist/llm.d.ts +158 -0
  27. package/dist/llm.d.ts.map +1 -0
  28. package/dist/llm.js +540 -0
  29. package/dist/llm.js.map +1 -0
  30. package/dist/otel-export.d.ts +36 -0
  31. package/dist/otel-export.d.ts.map +1 -0
  32. package/dist/otel-export.js +162 -0
  33. package/dist/otel-export.js.map +1 -0
  34. package/dist/replay.d.ts +51 -0
  35. package/dist/replay.d.ts.map +1 -0
  36. package/dist/replay.js +260 -0
  37. package/dist/replay.js.map +1 -0
  38. package/dist/runner.d.ts +46 -0
  39. package/dist/runner.d.ts.map +1 -0
  40. package/dist/runner.js +250 -0
  41. package/dist/runner.js.map +1 -0
  42. package/dist/scan.d.ts +172 -0
  43. package/dist/scan.d.ts.map +1 -0
  44. package/dist/scan.js +260 -0
  45. package/dist/scan.js.map +1 -0
  46. package/dist/sign.d.ts +20 -0
  47. package/dist/sign.d.ts.map +1 -0
  48. package/dist/sign.js +64 -0
  49. package/dist/sign.js.map +1 -0
  50. package/dist/tracing.d.ts +20 -0
  51. package/dist/tracing.d.ts.map +1 -0
  52. package/dist/tracing.js +65 -0
  53. package/dist/tracing.js.map +1 -0
  54. package/package.json +91 -0
package/dist/runner.js ADDED
@@ -0,0 +1,250 @@
1
+ import { shaOfCandidateRef } from '@lanefoundry/gatelane-sdk';
2
+ import { DEFAULT_POLICY } from '@lanefoundry/gatelane-sdk';
3
+ import { parseProviderModel } from './llm.js';
4
+ import { replay } from './replay.js';
5
+ import { LLMJudge } from './judge.js';
6
+ import { compare } from './compare.js';
7
+ import { signReport } from './sign.js';
8
+ import { evaluate } from './evaluate.js';
9
+ import { createAndAppendAuditEntry } from './audit.js';
10
+ import { initTracing, withGateSpan } from './tracing.js';
11
+ export function createRunner(opts) {
12
+ // Initialize tracing
13
+ initTracing(opts.tracing_service_name ?? 'gatelane-engine');
14
+ const messages_from_item = opts.messages_from_item ??
15
+ ((item) => {
16
+ if (Array.isArray(item.input)) {
17
+ return item.input
18
+ .filter((m) => typeof m === 'object' && m !== null && 'role' in m && 'content' in m)
19
+ .map((m) => ({ role: m.role, content: m.content }));
20
+ }
21
+ return [{ role: 'user', content: String(item.input ?? '') }];
22
+ });
23
+ return async function runGate(args) {
24
+ const policy = args.policy ?? DEFAULT_POLICY;
25
+ const baseline = args.baseline;
26
+ const runId = crypto.randomUUID();
27
+ const reportId = crypto.randomUUID();
28
+ const scorerCodeSha = await shaOfCandidateRef(`gatelane-engine:scorer:v0.0.1-dev`);
29
+ const candidates = args.candidates.map((ref) => {
30
+ const { model } = parseProviderModel(ref, 'mock');
31
+ return { ref, model, messages_from_item };
32
+ });
33
+ // Stage 1: Replay
34
+ const replayArgs = {
35
+ dataset: args.dataset,
36
+ candidates,
37
+ caller: opts.caller,
38
+ ...(opts.seed !== undefined ? { seed: opts.seed } : {}),
39
+ ...(opts.measureDeterminism !== undefined ? { measureDeterminism: opts.measureDeterminism } : {}),
40
+ };
41
+ const replayResult = await withGateSpan('replay', runId, async (span) => {
42
+ const result = await replay(replayArgs);
43
+ span.setAttribute('replay.items', args.dataset.items?.length ?? 0);
44
+ span.setAttribute('replay.candidates', candidates.length);
45
+ span.setAttribute('replay.determinism_score', result.determinism_score);
46
+ span.setAttribute('replay.total_cost_usd', result.total_cost_usd);
47
+ span.setAttribute('replay.total_latency_ms', result.total_latency_ms);
48
+ return result;
49
+ });
50
+ // Warn if most replay rows returned empty content
51
+ const totalRows = replayResult.rows.length;
52
+ const emptyRows = replayResult.rows.filter((r) => !r.response.content).length;
53
+ if (totalRows > 0 && emptyRows > totalRows / 2) {
54
+ process.stderr.write(` ⚠ ${emptyRows}/${totalRows} replay rows returned empty content — check provider/model configuration\n`);
55
+ }
56
+ // Audit: replay
57
+ if (opts.audit_db) {
58
+ await createAndAppendAuditEntry(runId, 'replay', {
59
+ candidates: candidates.map(c => c.ref),
60
+ items_count: args.dataset.items?.length ?? 0,
61
+ determinism_score: replayResult.determinism_score,
62
+ total_cost_usd: replayResult.total_cost_usd,
63
+ total_latency_ms: replayResult.total_latency_ms,
64
+ }, opts.signing_key, opts.audit_db);
65
+ }
66
+ // Stage 2: Judge (parallel with concurrency limit)
67
+ const concurrency = opts.concurrency ?? 5;
68
+ const verdicts = [];
69
+ await withGateSpan('judge', runId, async (span) => {
70
+ const tasks = [];
71
+ for (const cand of candidates) {
72
+ for (const judgeRef of args.judges) {
73
+ const judgeCaller = opts.judge_callers?.[judgeRef] ?? opts.caller;
74
+ const { model: judgeModel } = parseProviderModel(judgeRef, 'mock');
75
+ const judge = new LLMJudge({ name: judgeRef, model: judgeModel, caller: judgeCaller });
76
+ const candRows = replayResult.rows.filter((r) => r.candidate_ref === cand.ref);
77
+ for (const row of candRows) {
78
+ const itemId = row.item_id;
79
+ const itemInput = args.dataset.items?.find((it) => (it.id ?? '<anonymous>') === itemId)?.input;
80
+ tasks.push(() => judge.judge({
81
+ candidate_ref: cand.ref,
82
+ item_id: itemId,
83
+ item_input: itemInput ?? null,
84
+ candidate_output: row.response.content,
85
+ }));
86
+ }
87
+ }
88
+ }
89
+ // Run with concurrency limiter
90
+ const executing = new Set();
91
+ for (const task of tasks) {
92
+ const p = task().then((v) => { verdicts.push(v); });
93
+ executing.add(p);
94
+ p.finally(() => executing.delete(p));
95
+ if (executing.size >= concurrency) {
96
+ await Promise.race(executing);
97
+ }
98
+ }
99
+ await Promise.all(executing);
100
+ span.setAttribute('judge.verdicts_count', verdicts.length);
101
+ span.setAttribute('judge.judges', args.judges.join(','));
102
+ span.setAttribute('judge.candidates', args.candidates.join(','));
103
+ });
104
+ // Audit: judge
105
+ if (opts.audit_db) {
106
+ await createAndAppendAuditEntry(runId, 'judge', {
107
+ verdicts: verdicts.map(v => ({
108
+ candidate_ref: v.candidate_ref,
109
+ judge_ref: v.judge_ref,
110
+ item_id: v.item_id,
111
+ outcome: v.outcome,
112
+ score: v.score,
113
+ cost_usd: v.cost_usd,
114
+ latency_ms: v.latency_ms,
115
+ })),
116
+ }, opts.signing_key, opts.audit_db);
117
+ }
118
+ // Stage 3: Compare
119
+ const { perCandidate, judgeMatrix } = await withGateSpan('compare', runId, async (span) => {
120
+ const result = compare({
121
+ replay: replayResult,
122
+ verdicts,
123
+ ...(baseline !== undefined ? { baseline_ref: baseline } : {}),
124
+ });
125
+ span.setAttribute('compare.candidates', Object.keys(result.perCandidate).join(','));
126
+ span.setAttribute('compare.consensus_winners', result.judgeMatrix.consensus_winners.join(','));
127
+ return result;
128
+ });
129
+ // Audit: compare
130
+ if (opts.audit_db) {
131
+ await createAndAppendAuditEntry(runId, 'compare', {
132
+ per_candidate: Object.fromEntries(Object.entries(perCandidate).map(([ref, m]) => [
133
+ ref,
134
+ {
135
+ mean_score: m.mean_score,
136
+ pass_rate: m.pass_rate,
137
+ n_items: m.n_items,
138
+ total_cost_usd: m.total_cost_usd,
139
+ mean_latency_ms: m.mean_latency_ms,
140
+ aggregate_delta: m.aggregate_delta,
141
+ cost_delta: m.cost_delta,
142
+ latency_delta: m.latency_delta,
143
+ },
144
+ ])),
145
+ judge_matrix: {
146
+ candidates: judgeMatrix.candidates,
147
+ judges: judgeMatrix.judges,
148
+ winners_by_judge: judgeMatrix.winners_by_judge,
149
+ consensus_winners: judgeMatrix.consensus_winners,
150
+ },
151
+ }, opts.signing_key, opts.audit_db);
152
+ }
153
+ const candidate_shas = {};
154
+ for (const ref of args.candidates)
155
+ candidate_shas[ref] = await shaOfCandidateRef(ref);
156
+ const judge_shas = {};
157
+ for (const j of args.judges)
158
+ judge_shas[j] = await shaOfCandidateRef(j);
159
+ const candidate_metrics = {};
160
+ for (const [ref, m] of Object.entries(perCandidate)) {
161
+ candidate_metrics[ref] = {
162
+ aggregate_delta: m.aggregate_delta,
163
+ cost_delta: m.cost_delta,
164
+ latency_delta: m.latency_delta,
165
+ };
166
+ }
167
+ const baseline_metrics = {};
168
+ if (baseline !== undefined) {
169
+ const b = perCandidate[baseline];
170
+ if (b !== undefined) {
171
+ baseline_metrics.primary_score = b.mean_score;
172
+ baseline_metrics.cost = b.total_cost_usd;
173
+ baseline_metrics.latency = b.mean_latency_ms;
174
+ }
175
+ }
176
+ const baseReport = {
177
+ id: reportId,
178
+ gate_run_id: runId,
179
+ dataset_content_hash: args.dataset.content_hash,
180
+ dataset_version: args.dataset.version,
181
+ candidate_shas,
182
+ judge_shas,
183
+ scorer_code_sha: scorerCodeSha,
184
+ baseline_metrics,
185
+ candidate_metrics,
186
+ judge_matrix: judgeMatrix,
187
+ policy,
188
+ ...(args.approver !== undefined ? { approver: args.approver } : {}),
189
+ timestamp: new Date().toISOString(),
190
+ signature: 'pending',
191
+ };
192
+ // Stage 4: Sign
193
+ const signature = await withGateSpan('sign', runId, async (span) => {
194
+ const sig = await signReport(baseReport, opts.signing_key);
195
+ span.setAttribute('sign.report_id', reportId);
196
+ span.setAttribute('sign.signature_length', sig.length);
197
+ return sig;
198
+ });
199
+ const signed = { ...baseReport, signature };
200
+ // Audit: sign
201
+ if (opts.audit_db) {
202
+ await createAndAppendAuditEntry(runId, 'sign', {
203
+ report_id: reportId,
204
+ gate_run_id: runId,
205
+ signature_length: signature.length,
206
+ }, opts.signing_key, opts.audit_db);
207
+ }
208
+ // Stage 5: Evaluate
209
+ const { decision } = await withGateSpan('evaluate', runId, async (span) => {
210
+ const result = evaluate({
211
+ candidates: args.candidates,
212
+ perCandidate,
213
+ judgeMatrix,
214
+ policy,
215
+ ...(args.approver !== undefined ? { approver: args.approver } : {}),
216
+ });
217
+ span.setAttribute('evaluate.action', result.decision.action);
218
+ span.setAttribute('evaluate.winner', result.decision.action === 'pass' ? result.decision.winner : '');
219
+ span.setAttribute('evaluate.reason', result.decision.reason);
220
+ return result;
221
+ });
222
+ // Audit: gate decision
223
+ if (opts.audit_db) {
224
+ await createAndAppendAuditEntry(runId, 'gate_decision', {
225
+ decision: decision.action,
226
+ winner: decision.action === 'pass' ? decision.winner : undefined,
227
+ reason: decision.reason,
228
+ }, opts.signing_key, opts.audit_db);
229
+ }
230
+ return {
231
+ report: signed,
232
+ decision,
233
+ replay_rows: replayResult.rows.map((r) => ({
234
+ item_id: r.item_id,
235
+ candidate_ref: r.candidate_ref,
236
+ response: {
237
+ content: r.response.content,
238
+ cost_usd: r.response.cost_usd,
239
+ latency_ms: r.response.latency_ms,
240
+ tokens_in: r.response.tokens_in,
241
+ tokens_out: r.response.tokens_out,
242
+ finish_reason: r.response.finish_reason,
243
+ },
244
+ })),
245
+ verdicts,
246
+ candidate_metrics: perCandidate,
247
+ };
248
+ };
249
+ }
250
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/dist/scan.d.ts ADDED
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Security scan: attack report + patch-verify cycle.
3
+ * Built on top of the gate's replay + judge + compare primitives.
4
+ */
5
+ import { type LLMCaller } from './llm.js';
6
+ import type { ReplayResult } from './replay.js';
7
+ import type { JudgeVerdict } from './judge.js';
8
+ import { type EvaluateResult } from './evaluate.js';
9
+ import type { PromotionReport, PromotionDecision, PromotionPolicy } from '@lanefoundry/gatelane-sdk/promotion';
10
+ import type { FrozenDataset } from '@lanefoundry/gatelane-sdk/dataset';
11
+ import type { InjectionCategory, InjectionPayload } from './attack.js';
12
+ /** Per-verdict detail enriched with attack taxonomy. */
13
+ export type AttackVerdict = JudgeVerdict & {
14
+ /** Attack category from payload registry. */
15
+ category: InjectionCategory;
16
+ /** OWASP Agentic Top 10 mapping from payload registry. */
17
+ mapped_asi: InjectionPayload['mapped_asi'];
18
+ };
19
+ /** Per-candidate summary of attack outcomes. */
20
+ export type CandidateAttackSummary = {
21
+ /** Candidate ref (e.g., 'model:gpt-4o'). */
22
+ candidate_ref: string;
23
+ /** Total items evaluated. */
24
+ total: number;
25
+ /** Items where candidate survived (judge verdict = pass). */
26
+ survived: number;
27
+ /** Items where candidate was compromised (judge verdict = fail). */
28
+ failed: number;
29
+ /** Fraction survived. */
30
+ survival_rate: number;
31
+ /** Breakdown by attack category. */
32
+ by_category: Record<InjectionCategory, {
33
+ survived: number;
34
+ failed: number;
35
+ total: number;
36
+ }>;
37
+ /** Specific failing attacks (vulnerabilities). */
38
+ vulnerabilities: AttackVerdict[];
39
+ };
40
+ /** Per-ASI gap summary. */
41
+ export type ASIGapSummary = {
42
+ asi: string;
43
+ /** Total items mapped to this ASI. */
44
+ total: number;
45
+ /** Items where candidate failed this ASI. */
46
+ failed: number;
47
+ /** Failed fraction. */
48
+ fail_rate: number;
49
+ };
50
+ /** Complete attack report. */
51
+ export type AttackReport = {
52
+ /** FrozenDataset content hash. */
53
+ dataset_content_hash: string;
54
+ /** FrozenDataset version. */
55
+ dataset_version: string;
56
+ /** Timestamp of report generation. */
57
+ generated_at: string;
58
+ /** Per-candidate summaries. */
59
+ candidates: CandidateAttackSummary[];
60
+ /** Per-ASI vulnerability gaps across all candidates. */
61
+ by_asi: ASIGapSummary[];
62
+ /** Candidates evaluated. */
63
+ candidate_refs: string[];
64
+ /** Judges used. */
65
+ judges: string[];
66
+ };
67
+ /** Options for running a security scan. */
68
+ export type RunScanArgs = {
69
+ /** Dataset to attack (e.g., from freezeInjectionDataset()). */
70
+ dataset: FrozenDataset;
71
+ /** Candidate refs to evaluate. */
72
+ candidates: ReadonlyArray<string>;
73
+ /** Judge refs. */
74
+ judges: ReadonlyArray<string>;
75
+ /** LLM caller for candidates. */
76
+ caller: LLMCaller;
77
+ /** Per-judge callers (optional; falls back to caller). */
78
+ judge_callers?: Record<string, LLMCaller>;
79
+ /** Master seed for deterministic replay. */
80
+ seed?: number;
81
+ /** Promotion policy for gate decision. */
82
+ policy?: PromotionPolicy;
83
+ /** Optional baseline candidate ref. */
84
+ baseline?: string;
85
+ /** Optional approver (when policy.approval_required). */
86
+ approver?: string;
87
+ /** Optional signing key — if provided, returns signed PromotionReport. */
88
+ signing_key?: string;
89
+ };
90
+ /** Result of running a security scan. */
91
+ export type RunScanResult = {
92
+ /** Attack report with vulnerability details. */
93
+ attackReport: AttackReport;
94
+ /** Gate result (promote/rollback/hold + signed report if signing_key provided). */
95
+ gateResult: {
96
+ report: PromotionReport;
97
+ decision: PromotionDecision;
98
+ evaluate: EvaluateResult;
99
+ } | null;
100
+ };
101
+ /** Result of patch verification. */
102
+ export type PatchVerdict = {
103
+ /** True if patch resolves all baseline failures without regressions. */
104
+ holds: boolean;
105
+ /** Attack item ids that baseline failed and patched now passes. */
106
+ resolved: string[];
107
+ /** Attack item ids that baseline passed but patched fails (regressions). */
108
+ regressed: string[];
109
+ /** Attack item ids baseline failed and patched still fails. */
110
+ stillVulnerable: string[];
111
+ /** Baseline candidate ref. */
112
+ baselineCandidate: string;
113
+ /** Patched candidate ref. */
114
+ patchedCandidate: string;
115
+ /** Baseline attack report. */
116
+ before: AttackReport;
117
+ /** Patched attack report. */
118
+ after: AttackReport;
119
+ };
120
+ /**
121
+ * Enrich raw JudgeVerdicts with attack taxonomy (category + ASI).
122
+ * Uses INJECTION_META from attack.ts to look up by item_id.
123
+ */
124
+ export declare function enrichVerdicts(verdicts: JudgeVerdict[], _dataset: FrozenDataset): AttackVerdict[];
125
+ /**
126
+ * Build an AttackReport from enriched verdicts and the dataset.
127
+ */
128
+ export declare function buildAttackReport(args: {
129
+ verdicts: AttackVerdict[];
130
+ dataset: FrozenDataset;
131
+ candidate_refs: ReadonlyArray<string>;
132
+ judges: ReadonlyArray<string>;
133
+ }): AttackReport;
134
+ /**
135
+ * Collect judge verdicts for a replay result.
136
+ * Extracted from runner logic so both runner and scan path share it.
137
+ */
138
+ export declare function collectVerdicts(args: {
139
+ replayResult: ReplayResult;
140
+ dataset: FrozenDataset;
141
+ candidates: ReadonlyArray<{
142
+ ref: string;
143
+ model: string;
144
+ }>;
145
+ judges: ReadonlyArray<string>;
146
+ caller: LLMCaller;
147
+ judge_callers?: Record<string, LLMCaller>;
148
+ }): Promise<JudgeVerdict[]>;
149
+ /**
150
+ * Resolve candidate refs to { ref, model } objects for replay.
151
+ * Mirrors runner logic: 'model:foo' → model 'foo', others → full ref.
152
+ */
153
+ export declare function resolveCandidates(refs: ReadonlyArray<string>): ReadonlyArray<{
154
+ ref: string;
155
+ model: string;
156
+ }>;
157
+ /**
158
+ * Run a full security scan: replay + judge + compare + sign + evaluate + attack report.
159
+ * Returns both the attack report and the gate decision.
160
+ */
161
+ export declare function runScanGate(args: RunScanArgs): Promise<RunScanResult>;
162
+ /**
163
+ * Verify that a patch holds against the same scan dataset.
164
+ * Compares baseline candidate failures vs patched candidate outcomes.
165
+ */
166
+ export declare function verifyPatchHolds(args: {
167
+ before: AttackReport;
168
+ after: AttackReport;
169
+ baselineCandidate: string;
170
+ patchedCandidate: string;
171
+ }): PatchVerdict;
172
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}