@agentlensai/server 0.6.0 → 0.7.0

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 (36) hide show
  1. package/dist/db/benchmark-store.d.ts +74 -0
  2. package/dist/db/benchmark-store.d.ts.map +1 -0
  3. package/dist/db/benchmark-store.js +268 -0
  4. package/dist/db/benchmark-store.js.map +1 -0
  5. package/dist/db/migrate.d.ts.map +1 -1
  6. package/dist/db/migrate.js +48 -0
  7. package/dist/db/migrate.js.map +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +12 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/benchmark/engine.d.ts +24 -0
  13. package/dist/lib/benchmark/engine.d.ts.map +1 -0
  14. package/dist/lib/benchmark/engine.js +159 -0
  15. package/dist/lib/benchmark/engine.js.map +1 -0
  16. package/dist/lib/benchmark/metric-aggregator.d.ts +38 -0
  17. package/dist/lib/benchmark/metric-aggregator.d.ts.map +1 -0
  18. package/dist/lib/benchmark/metric-aggregator.js +159 -0
  19. package/dist/lib/benchmark/metric-aggregator.js.map +1 -0
  20. package/dist/lib/benchmark/statistical.d.ts +51 -0
  21. package/dist/lib/benchmark/statistical.d.ts.map +1 -0
  22. package/dist/lib/benchmark/statistical.js +381 -0
  23. package/dist/lib/benchmark/statistical.js.map +1 -0
  24. package/dist/lib/replay/builder.d.ts +28 -0
  25. package/dist/lib/replay/builder.d.ts.map +1 -0
  26. package/dist/lib/replay/builder.js +482 -0
  27. package/dist/lib/replay/builder.js.map +1 -0
  28. package/dist/routes/benchmarks.d.ts +18 -0
  29. package/dist/routes/benchmarks.d.ts.map +1 -0
  30. package/dist/routes/benchmarks.js +312 -0
  31. package/dist/routes/benchmarks.js.map +1 -0
  32. package/dist/routes/replay.d.ts +28 -0
  33. package/dist/routes/replay.d.ts.map +1 -0
  34. package/dist/routes/replay.js +140 -0
  35. package/dist/routes/replay.js.map +1 -0
  36. package/package.json +2 -2
@@ -0,0 +1,381 @@
1
+ /**
2
+ * StatisticalComparator (Story 3.3)
3
+ *
4
+ * Hypothesis testing for benchmark variant comparisons.
5
+ * Implements Welch's t-test and chi-squared test with numerical p-value computation.
6
+ */
7
+ // ─── Metric Classification ────────────────────────────────
8
+ /** Continuous metrics → Welch's t-test */
9
+ const CONTINUOUS_METRICS = new Set([
10
+ 'avg_cost',
11
+ 'avg_latency',
12
+ 'avg_tokens',
13
+ 'avg_duration',
14
+ 'health_score',
15
+ ]);
16
+ /** Proportion metrics → chi-squared test */
17
+ const PROPORTION_METRICS = new Set([
18
+ 'error_rate',
19
+ 'completion_rate',
20
+ 'tool_success_rate',
21
+ ]);
22
+ /**
23
+ * Lower-is-better metrics. For these, a *lower* mean in variant B means B is "better".
24
+ * For higher-is-better metrics, a *higher* mean in B means B is better.
25
+ */
26
+ const LOWER_IS_BETTER = new Set([
27
+ 'avg_cost',
28
+ 'avg_latency',
29
+ 'error_rate',
30
+ 'avg_duration',
31
+ ]);
32
+ // ─── Numerical Approximations ──────────────────────────────
33
+ /**
34
+ * Error function approximation (Abramowitz and Stegun, formula 7.1.26).
35
+ * Maximum error: 1.5×10⁻⁷.
36
+ */
37
+ function erf(x) {
38
+ const sign = x >= 0 ? 1 : -1;
39
+ const a = Math.abs(x);
40
+ const p = 0.3275911;
41
+ const a1 = 0.254829592;
42
+ const a2 = -0.284496736;
43
+ const a3 = 1.421413741;
44
+ const a4 = -1.453152027;
45
+ const a5 = 1.061405429;
46
+ const t = 1.0 / (1.0 + p * a);
47
+ const t2 = t * t;
48
+ const t3 = t2 * t;
49
+ const t4 = t3 * t;
50
+ const t5 = t4 * t;
51
+ const y = 1.0 - (a1 * t + a2 * t2 + a3 * t3 + a4 * t4 + a5 * t5) * Math.exp(-a * a);
52
+ return sign * y;
53
+ }
54
+ /**
55
+ * Standard normal CDF using error function.
56
+ */
57
+ function normalCDF(x) {
58
+ return 0.5 * (1.0 + erf(x / Math.SQRT2));
59
+ }
60
+ /**
61
+ * Log-gamma function using Stirling's approximation (Lanczos).
62
+ */
63
+ function logGamma(x) {
64
+ const g = 7;
65
+ const c = [
66
+ 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313,
67
+ -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6,
68
+ 1.5056327351493116e-7,
69
+ ];
70
+ if (x < 0.5) {
71
+ return Math.log(Math.PI / Math.sin(Math.PI * x)) - logGamma(1 - x);
72
+ }
73
+ x -= 1;
74
+ let a = c[0];
75
+ const t = x + g + 0.5;
76
+ for (let i = 1; i < g + 2; i++) {
77
+ a += c[i] / (x + i);
78
+ }
79
+ return 0.5 * Math.log(2 * Math.PI) + (x + 0.5) * Math.log(t) - t + Math.log(a);
80
+ }
81
+ /**
82
+ * Regularized incomplete beta function I_x(a, b) using continued fraction.
83
+ * Used for computing t-distribution CDF.
84
+ */
85
+ function regularizedBeta(x, a, b) {
86
+ if (x <= 0)
87
+ return 0;
88
+ if (x >= 1)
89
+ return 1;
90
+ // Use symmetry relation if needed for better convergence
91
+ if (x > (a + 1) / (a + b + 2)) {
92
+ return 1 - regularizedBeta(1 - x, b, a);
93
+ }
94
+ const lnBeta = logGamma(a) + logGamma(b) - logGamma(a + b);
95
+ const front = Math.exp(Math.log(x) * a + Math.log(1 - x) * b - lnBeta) / a;
96
+ // Lentz's continued fraction
97
+ const maxIter = 200;
98
+ const eps = 1e-14;
99
+ let f = 1;
100
+ let c = 1;
101
+ let d = 1 - (a + b) * x / (a + 1);
102
+ if (Math.abs(d) < 1e-30)
103
+ d = 1e-30;
104
+ d = 1 / d;
105
+ f = d;
106
+ for (let m = 1; m <= maxIter; m++) {
107
+ // Even step
108
+ let num = m * (b - m) * x / ((a + 2 * m - 1) * (a + 2 * m));
109
+ d = 1 + num * d;
110
+ if (Math.abs(d) < 1e-30)
111
+ d = 1e-30;
112
+ c = 1 + num / c;
113
+ if (Math.abs(c) < 1e-30)
114
+ c = 1e-30;
115
+ d = 1 / d;
116
+ f *= c * d;
117
+ // Odd step
118
+ num = -(a + m) * (a + b + m) * x / ((a + 2 * m) * (a + 2 * m + 1));
119
+ d = 1 + num * d;
120
+ if (Math.abs(d) < 1e-30)
121
+ d = 1e-30;
122
+ c = 1 + num / c;
123
+ if (Math.abs(c) < 1e-30)
124
+ c = 1e-30;
125
+ d = 1 / d;
126
+ const delta = c * d;
127
+ f *= delta;
128
+ if (Math.abs(delta - 1) < eps)
129
+ break;
130
+ }
131
+ return front * f;
132
+ }
133
+ /**
134
+ * Student's t-distribution CDF using the regularized incomplete beta function.
135
+ */
136
+ function tCDF(t, df) {
137
+ const x = df / (df + t * t);
138
+ const prob = 0.5 * regularizedBeta(x, df / 2, 0.5);
139
+ return t >= 0 ? 1 - prob : prob;
140
+ }
141
+ /**
142
+ * Two-tailed p-value from t-statistic and degrees of freedom.
143
+ */
144
+ function twoTailedPValue(t, df) {
145
+ return 2 * (1 - tCDF(Math.abs(t), df));
146
+ }
147
+ /**
148
+ * Chi-squared CDF for 1 degree of freedom using error function.
149
+ * P(X ≤ x) for X ~ χ²(1) = P(Z² ≤ x) = erf(√(x/2))
150
+ */
151
+ function chiSquaredCDF1(x) {
152
+ if (x <= 0)
153
+ return 0;
154
+ return erf(Math.sqrt(x / 2));
155
+ }
156
+ /**
157
+ * t critical value for 95% CI (two-tailed).
158
+ * Approximation for large df; uses normal for df > 200.
159
+ */
160
+ function tCritical95(df) {
161
+ if (df > 200)
162
+ return 1.96;
163
+ // Newton-Raphson or use a simple lookup for common values
164
+ // Use an approximation: t ≈ z * (1 + (z² + 1) / (4 * df))
165
+ // where z = 1.96 for 95% CI
166
+ const z = 1.96;
167
+ if (df <= 1)
168
+ return 12.706;
169
+ if (df <= 2)
170
+ return 4.303;
171
+ if (df <= 3)
172
+ return 3.182;
173
+ if (df <= 4)
174
+ return 2.776;
175
+ if (df <= 5)
176
+ return 2.571;
177
+ // Cornish-Fisher approximation
178
+ return z + (z * z * z + z) / (4 * df);
179
+ }
180
+ // ─── StatisticalComparator ─────────────────────────────────
181
+ export class StatisticalComparator {
182
+ /**
183
+ * Welch's t-test for comparing two sets of continuous metric statistics.
184
+ */
185
+ welchTTest(statsA, statsB) {
186
+ // Edge case: insufficient samples
187
+ if (statsA.count < 2 || statsB.count < 2) {
188
+ const diff = statsB.mean - statsA.mean;
189
+ return {
190
+ tStatistic: 0,
191
+ degreesOfFreedom: 0,
192
+ pValue: 1,
193
+ confidenceInterval: { lower: diff, upper: diff },
194
+ cohenD: 0,
195
+ };
196
+ }
197
+ const nA = statsA.count;
198
+ const nB = statsB.count;
199
+ const varA = statsA.stddev * statsA.stddev;
200
+ const varB = statsB.stddev * statsB.stddev;
201
+ const seA = varA / nA;
202
+ const seB = varB / nB;
203
+ const seDiff = Math.sqrt(seA + seB);
204
+ // Edge case: zero variance in both groups
205
+ if (seDiff === 0) {
206
+ const diff = statsB.mean - statsA.mean;
207
+ return {
208
+ tStatistic: diff === 0 ? 0 : Infinity,
209
+ degreesOfFreedom: nA + nB - 2,
210
+ pValue: diff === 0 ? 1 : 0,
211
+ confidenceInterval: { lower: diff, upper: diff },
212
+ cohenD: 0,
213
+ };
214
+ }
215
+ // t-statistic
216
+ const t = (statsA.mean - statsB.mean) / seDiff;
217
+ // Welch-Satterthwaite degrees of freedom
218
+ const num = (seA + seB) ** 2;
219
+ const denom = (seA * seA) / (nA - 1) + (seB * seB) / (nB - 1);
220
+ const df = num / denom;
221
+ // p-value (two-tailed)
222
+ const pValue = twoTailedPValue(t, df);
223
+ // 95% CI for difference of means
224
+ const diffMeans = statsB.mean - statsA.mean;
225
+ const tCrit = tCritical95(df);
226
+ const marginOfError = tCrit * seDiff;
227
+ // Cohen's d — pooled standard deviation
228
+ const pooledVar = ((nA - 1) * varA + (nB - 1) * varB) / (nA + nB - 2);
229
+ const pooledSD = Math.sqrt(pooledVar);
230
+ const cohenD = pooledSD > 0 ? Math.abs(statsA.mean - statsB.mean) / pooledSD : 0;
231
+ return {
232
+ tStatistic: t,
233
+ degreesOfFreedom: df,
234
+ pValue: Math.min(1, Math.max(0, pValue)),
235
+ confidenceInterval: {
236
+ lower: diffMeans - marginOfError,
237
+ upper: diffMeans + marginOfError,
238
+ },
239
+ cohenD,
240
+ };
241
+ }
242
+ /**
243
+ * Chi-squared test with Yates' continuity correction for comparing two proportions.
244
+ */
245
+ chiSquaredTest(successesA, totalA, successesB, totalB) {
246
+ const failuresA = totalA - successesA;
247
+ const failuresB = totalB - successesB;
248
+ const n = totalA + totalB;
249
+ // Edge case: empty samples
250
+ if (n === 0 || totalA === 0 || totalB === 0) {
251
+ return { chiSquared: 0, pValue: 1, phi: 0 };
252
+ }
253
+ // Expected counts
254
+ const totalSuccess = successesA + successesB;
255
+ const totalFailure = failuresA + failuresB;
256
+ // Edge case: no variation (all successes or all failures)
257
+ if (totalSuccess === 0 || totalFailure === 0) {
258
+ return { chiSquared: 0, pValue: 1, phi: 0 };
259
+ }
260
+ const eA1 = (totalA * totalSuccess) / n;
261
+ const eA0 = (totalA * totalFailure) / n;
262
+ const eB1 = (totalB * totalSuccess) / n;
263
+ const eB0 = (totalB * totalFailure) / n;
264
+ // Chi-squared with Yates' correction
265
+ const yates = (observed, expected) => {
266
+ const diff = Math.abs(observed - expected) - 0.5;
267
+ return diff > 0 ? (diff * diff) / expected : 0;
268
+ };
269
+ const chiSq = yates(successesA, eA1) + yates(failuresA, eA0) +
270
+ yates(successesB, eB1) + yates(failuresB, eB0);
271
+ // p-value using chi-squared CDF with 1 df
272
+ const pValue = 1 - chiSquaredCDF1(chiSq);
273
+ // Phi coefficient
274
+ const phi = Math.sqrt(chiSq / n);
275
+ return {
276
+ chiSquared: chiSq,
277
+ pValue: Math.min(1, Math.max(0, pValue)),
278
+ phi,
279
+ };
280
+ }
281
+ /**
282
+ * Compare two variants on a single metric. Selects appropriate test.
283
+ */
284
+ compare(variantA, variantB, metric) {
285
+ const statsA = variantA.metrics[metric];
286
+ const statsB = variantB.metrics[metric];
287
+ if (!statsA || !statsB) {
288
+ throw new Error(`Metric ${metric} not found in one or both variants`);
289
+ }
290
+ const lowerIsBetter = LOWER_IS_BETTER.has(metric);
291
+ if (PROPORTION_METRICS.has(metric)) {
292
+ return this.compareProportions(variantA, variantB, metric, statsA, statsB, lowerIsBetter);
293
+ }
294
+ return this.compareContinuous(variantA, variantB, metric, statsA, statsB, lowerIsBetter);
295
+ }
296
+ compareContinuous(variantA, variantB, metric, statsA, statsB, lowerIsBetter) {
297
+ const result = this.welchTTest(statsA, statsB);
298
+ const diff = statsB.mean - statsA.mean;
299
+ const percentDiff = statsA.mean !== 0 ? (diff / statsA.mean) * 100 : 0;
300
+ // Determine winner based on metric direction
301
+ let winner;
302
+ if (result.pValue < 0.05) {
303
+ if (lowerIsBetter) {
304
+ winner = statsA.mean < statsB.mean ? variantA.id : variantB.id;
305
+ }
306
+ else {
307
+ winner = statsA.mean > statsB.mean ? variantA.id : variantB.id;
308
+ }
309
+ }
310
+ return {
311
+ metric,
312
+ variantA: { id: variantA.id, name: variantA.name, stats: statsA },
313
+ variantB: { id: variantB.id, name: variantB.name, stats: statsB },
314
+ absoluteDiff: diff,
315
+ percentDiff,
316
+ testType: 'welch_t',
317
+ testStatistic: result.tStatistic,
318
+ pValue: result.pValue,
319
+ confidenceInterval: result.confidenceInterval,
320
+ effectSize: result.cohenD,
321
+ significant: result.pValue < 0.05,
322
+ winner,
323
+ confidence: this.confidenceStars(result.pValue),
324
+ };
325
+ }
326
+ compareProportions(variantA, variantB, metric, statsA, statsB, lowerIsBetter) {
327
+ // For proportions, mean represents the rate, count is total observations
328
+ // Successes = mean * count (since mean = successes / total)
329
+ const successesA = Math.round(statsA.mean * statsA.count);
330
+ const successesB = Math.round(statsB.mean * statsB.count);
331
+ const result = this.chiSquaredTest(successesA, statsA.count, successesB, statsB.count);
332
+ const diff = statsB.mean - statsA.mean;
333
+ const percentDiff = statsA.mean !== 0 ? (diff / statsA.mean) * 100 : 0;
334
+ // For chi-squared we also compute a CI on the difference of proportions
335
+ const pA = statsA.count > 0 ? successesA / statsA.count : 0;
336
+ const pB = statsB.count > 0 ? successesB / statsB.count : 0;
337
+ const sePropDiff = Math.sqrt((pA * (1 - pA)) / Math.max(statsA.count, 1) +
338
+ (pB * (1 - pB)) / Math.max(statsB.count, 1));
339
+ const marginOfError = 1.96 * sePropDiff;
340
+ let winner;
341
+ if (result.pValue < 0.05) {
342
+ if (lowerIsBetter) {
343
+ winner = statsA.mean < statsB.mean ? variantA.id : variantB.id;
344
+ }
345
+ else {
346
+ winner = statsA.mean > statsB.mean ? variantA.id : variantB.id;
347
+ }
348
+ }
349
+ return {
350
+ metric,
351
+ variantA: { id: variantA.id, name: variantA.name, stats: statsA },
352
+ variantB: { id: variantB.id, name: variantB.name, stats: statsB },
353
+ absoluteDiff: diff,
354
+ percentDiff,
355
+ testType: 'chi_squared',
356
+ testStatistic: result.chiSquared,
357
+ pValue: result.pValue,
358
+ confidenceInterval: {
359
+ lower: diff - marginOfError,
360
+ upper: diff + marginOfError,
361
+ },
362
+ effectSize: result.phi,
363
+ significant: result.pValue < 0.05,
364
+ winner,
365
+ confidence: this.confidenceStars(result.pValue),
366
+ };
367
+ }
368
+ /**
369
+ * Confidence star rating based on p-value.
370
+ */
371
+ confidenceStars(pValue) {
372
+ if (pValue < 0.01)
373
+ return '★★★';
374
+ if (pValue < 0.05)
375
+ return '★★';
376
+ if (pValue < 0.1)
377
+ return '★';
378
+ return '—';
379
+ }
380
+ }
381
+ //# sourceMappingURL=statistical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistical.js","sourceRoot":"","sources":["../../../src/lib/benchmark/statistical.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,6DAA6D;AAE7D,0CAA0C;AAC1C,MAAM,kBAAkB,GAAyB,IAAI,GAAG,CAAC;IACvD,UAAU;IACV,aAAa;IACb,YAAY;IACZ,cAAc;IACd,cAAc;CACf,CAAC,CAAC;AAEH,4CAA4C;AAC5C,MAAM,kBAAkB,GAAyB,IAAI,GAAG,CAAC;IACvD,YAAY;IACZ,iBAAiB;IACjB,mBAAmB;CACpB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,eAAe,GAAyB,IAAI,GAAG,CAAC;IACpD,UAAU;IACV,aAAa;IACb,YAAY;IACZ,cAAc;CACf,CAAC,CAAC;AAoBH,8DAA8D;AAE9D;;;GAGG;AACH,SAAS,GAAG,CAAC,CAAS;IACpB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEtB,MAAM,CAAC,GAAG,SAAS,CAAC;IACpB,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC;IACxB,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC;IACxB,MAAM,EAAE,GAAG,WAAW,CAAC;IAEvB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAElB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,OAAO,IAAI,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,CAAS;IACzB,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG;QACR,mBAAmB,EAAE,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB;QAC/E,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,CAAC,mBAAmB,EAAE,qBAAqB;QACpF,qBAAqB;KACtB,CAAC;IAEF,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,CAAC,IAAI,CAAC,CAAC;IACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACd,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACtD,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAErB,yDAAyD;IACzD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAE3E,6BAA6B;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC;IACpB,MAAM,GAAG,GAAG,KAAK,CAAC;IAElB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;QAAE,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACV,CAAC,GAAG,CAAC,CAAC;IAEN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,YAAY;QACZ,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;YAAE,CAAC,GAAG,KAAK,CAAC;QACnC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;YAAE,CAAC,GAAG,KAAK,CAAC;QACnC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACV,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEX,WAAW;QACX,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;YAAE,CAAC,GAAG,KAAK,CAAC;QACnC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;YAAE,CAAC,GAAG,KAAK,CAAC;QACnC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,IAAI,KAAK,CAAC;QAEX,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG;YAAE,MAAM;IACvC,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,IAAI,CAAC,CAAS,EAAE,EAAU;IACjC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,GAAG,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,CAAS,EAAE,EAAU;IAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,EAAU;IAC7B,IAAI,EAAE,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1B,0DAA0D;IAC1D,0DAA0D;IAC1D,4BAA4B;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,8DAA8D;AAE9D,MAAM,OAAO,qBAAqB;IAChC;;OAEG;IACH,UAAU,CAAC,MAAmB,EAAE,MAAmB;QACjD,kCAAkC;QAClC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACvC,OAAO;gBACL,UAAU,EAAE,CAAC;gBACb,gBAAgB,EAAE,CAAC;gBACnB,MAAM,EAAE,CAAC;gBACT,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;gBAChD,MAAM,EAAE,CAAC;aACV,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAEpC,0CAA0C;QAC1C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACvC,OAAO;gBACL,UAAU,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACrC,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC7B,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;gBAChD,MAAM,EAAE,CAAC;aACV,CAAC;QACJ,CAAC;QAED,cAAc;QACd,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAE/C,yCAAyC;QACzC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;QAEvB,uBAAuB;QACvB,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEtC,iCAAiC;QACjC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;QAErC,wCAAwC;QACxC,MAAM,SAAS,GACb,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjF,OAAO;YACL,UAAU,EAAE,CAAC;YACb,gBAAgB,EAAE,EAAE;YACpB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxC,kBAAkB,EAAE;gBAClB,KAAK,EAAE,SAAS,GAAG,aAAa;gBAChC,KAAK,EAAE,SAAS,GAAG,aAAa;aACjC;YACD,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc,CACZ,UAAkB,EAClB,MAAc,EACd,UAAkB,EAClB,MAAc;QAEd,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;QACtC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;QAE1B,2BAA2B;QAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;QAC7C,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;QAE3C,0DAA0D;QAC1D,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAExC,qCAAqC;QACrC,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAU,EAAE;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;YACjD,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;YAC9C,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE7D,0CAA0C;QAC1C,MAAM,MAAM,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAEzC,kBAAkB;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAEjC,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxC,GAAG;SACJ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO,CACL,QAA4E,EAC5E,QAA4E,EAC5E,MAAuB;QAEvB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,oCAAoC,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3F,CAAC;IAEO,iBAAiB,CACvB,QAAsC,EACtC,QAAsC,EACtC,MAAuB,EACvB,MAAmB,EACnB,MAAmB,EACnB,aAAsB;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,6CAA6C;QAC7C,IAAI,MAA0B,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACzB,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM;YACN,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;YACjE,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;YACjE,YAAY,EAAE,IAAI;YAClB,WAAW;YACX,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,MAAM,CAAC,UAAU;YAChC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;YACjC,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;SAChD,CAAC;IACJ,CAAC;IAEO,kBAAkB,CACxB,QAAsC,EACtC,QAAsC,EACtC,MAAuB,EACvB,MAAmB,EACnB,MAAmB,EACnB,aAAsB;QAEtB,yEAAyE;QACzE,4DAA4D;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,wEAAwE;QACxE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3C,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAC5C,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,GAAG,UAAU,CAAC;QAExC,IAAI,MAA0B,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACzB,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM;YACN,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;YACjE,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;YACjE,YAAY,EAAE,IAAI;YAClB,WAAW;YACX,QAAQ,EAAE,aAAa;YACvB,aAAa,EAAE,MAAM,CAAC,UAAU;YAChC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,kBAAkB,EAAE;gBAClB,KAAK,EAAE,IAAI,GAAG,aAAa;gBAC3B,KAAK,EAAE,IAAI,GAAG,aAAa;aAC5B;YACD,UAAU,EAAE,MAAM,CAAC,GAAG;YACtB,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;YACjC,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;SAChD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAc;QAC5B,IAAI,MAAM,GAAG,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,MAAM,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,MAAM,GAAG,GAAG;YAAE,OAAO,GAAG,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * ReplayBuilder — Core Replay Logic (Stories 2.1, 2.4)
3
+ *
4
+ * Constructs a ReplayState from raw events for a given session.
5
+ * Handles event pairing, cumulative context tracking, pagination,
6
+ * filtering, and redaction of sensitive LLM content.
7
+ */
8
+ import type { IEventStore, EventType, ReplayState } from '@agentlensai/core';
9
+ export interface ReplayBuildOptions {
10
+ /** Skip N steps (default 0) */
11
+ offset?: number;
12
+ /** Max steps to return (default 1000) */
13
+ limit?: number;
14
+ /** Only include these event types */
15
+ eventTypes?: EventType[];
16
+ /** If false, skip cumulative context computation (default true) */
17
+ includeContext?: boolean;
18
+ }
19
+ export declare class ReplayBuilder {
20
+ private readonly store;
21
+ constructor(store: IEventStore);
22
+ /**
23
+ * Build a ReplayState for the given session.
24
+ * Returns null when the session does not exist.
25
+ */
26
+ build(sessionId: string, options?: ReplayBuildOptions): Promise<ReplayState | null>;
27
+ }
28
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/lib/replay/builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,WAAW,EAEX,SAAS,EAGT,WAAW,EAWZ,MAAM,mBAAmB,CAAC;AAK3B,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAID,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,WAAW;IAE/C;;;OAGG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;CA2G/B"}