darwin-agents 0.6.0-alpha.1 → 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 (44) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/README.md +43 -1
  3. package/dist/src/cli/run.js +1 -1
  4. package/dist/src/cli/run.js.map +1 -1
  5. package/dist/src/evolution/alignment.d.ts +44 -0
  6. package/dist/src/evolution/alignment.d.ts.map +1 -1
  7. package/dist/src/evolution/alignment.js +124 -0
  8. package/dist/src/evolution/alignment.js.map +1 -1
  9. package/dist/src/evolution/loop.d.ts +56 -0
  10. package/dist/src/evolution/loop.d.ts.map +1 -1
  11. package/dist/src/evolution/loop.js +168 -16
  12. package/dist/src/evolution/loop.js.map +1 -1
  13. package/dist/src/evolution/multi-critic.d.ts +30 -1
  14. package/dist/src/evolution/multi-critic.d.ts.map +1 -1
  15. package/dist/src/evolution/multi-critic.js +57 -2
  16. package/dist/src/evolution/multi-critic.js.map +1 -1
  17. package/dist/src/evolution/optimizer-gepa.d.ts +47 -4
  18. package/dist/src/evolution/optimizer-gepa.d.ts.map +1 -1
  19. package/dist/src/evolution/optimizer-gepa.js +44 -5
  20. package/dist/src/evolution/optimizer-gepa.js.map +1 -1
  21. package/dist/src/evolution/pareto.d.ts +98 -3
  22. package/dist/src/evolution/pareto.d.ts.map +1 -1
  23. package/dist/src/evolution/pareto.js +193 -30
  24. package/dist/src/evolution/pareto.js.map +1 -1
  25. package/dist/src/evolution/safety.d.ts +35 -1
  26. package/dist/src/evolution/safety.d.ts.map +1 -1
  27. package/dist/src/evolution/safety.js +56 -2
  28. package/dist/src/evolution/safety.js.map +1 -1
  29. package/dist/src/evolution/sequential.d.ts +149 -0
  30. package/dist/src/evolution/sequential.d.ts.map +1 -0
  31. package/dist/src/evolution/sequential.js +239 -0
  32. package/dist/src/evolution/sequential.js.map +1 -0
  33. package/dist/src/evolution/tracker.d.ts +12 -0
  34. package/dist/src/evolution/tracker.d.ts.map +1 -1
  35. package/dist/src/evolution/tracker.js +24 -0
  36. package/dist/src/evolution/tracker.js.map +1 -1
  37. package/dist/src/index.d.ts +5 -3
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +10 -3
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/types.d.ts +84 -0
  42. package/dist/src/types.d.ts.map +1 -1
  43. package/dist/src/types.js.map +1 -1
  44. package/package.json +1 -1
@@ -43,8 +43,9 @@
43
43
  * - **paretoSelect truncation has two strategies (V0.5.1):**
44
44
  * `"scalarised"` (V0.5.0 default, weighted-sum tie-break) and
45
45
  * `"crowding"` (NSGA-II Deb 2002 density-preserving truncation).
46
- * GEPA Algorithm 2's instance-proportional coverage sampling is
47
- * still NOT implemented backlog for V0.6.
46
+ * GEPA Algorithm 2's instance-proportional coverage sampling SHIPPED in
47
+ * v0.7.0see `coverageFrontier`/`selectByCoverage`/`sampleByCoverage`
48
+ * in `pareto.ts` and the `useCoverage` path in {@link GepaOptimizer#nextGeneration}.
48
49
  * - **GEPA+Merge (system-aware crossover from two Pareto-pool
49
50
  * ancestors, paper Appendix F)** SHIPPED in V0.5.1 via
50
51
  * {@link GepaOptimizer#merge}. Paper reports ~5% lift when run on
@@ -52,8 +53,9 @@
52
53
  * - **Stronger reflection LM** SHIPPED in V0.5.1 via
53
54
  * {@link GepaOptimizerOptions.reflectionRunPrompt}. Falls back to
54
55
  * the main `runPrompt` when omitted.
55
- * - **Instance-wise coverage sampling** (paper Algorithm 2) is NOT
56
- * implemented. Backlog for V0.6.
56
+ * - **Instance-wise coverage sampling** (paper Algorithm 2) SHIPPED in
57
+ * v0.7.0 (`coverageFrontier`/`selectByCoverage`/`sampleByCoverage` in
58
+ * `pareto.ts`; opt-in via `NextGenerationOptions.useCoverage`).
57
59
  *
58
60
  * @example
59
61
  * ```ts
@@ -83,11 +85,40 @@
83
85
  * ```
84
86
  */
85
87
  import { Reflector } from "./reflector.js";
86
- import { paretoSelect, } from "./pareto.js";
88
+ import { paretoSelect, selectByCoverage, } from "./pareto.js";
87
89
  const DEFAULT_NUM_VARIANTS = 3;
88
90
  const MIN_NUM_VARIANTS = 1;
89
91
  const MAX_NUM_VARIANTS = 10;
90
92
  const DEFAULT_MAX_CARRY = 3;
93
+ /**
94
+ * v0.7.0 — Epoch-shuffled minibatch sampler (GEPA `reflection_minibatch_size`
95
+ * + epoch-shuffled batch sampler, adapted to an online loop).
96
+ *
97
+ * Returns a deterministic rotating window of `size` items, offset by `epoch`,
98
+ * wrapping around the array. Across consecutive epochs the window walks the
99
+ * whole array, so every item is eventually reflected on — without the
100
+ * persistent sampler state a true epoch shuffle needs, and without any RNG
101
+ * (the module stays pure). When `size` is non-positive or ≥ the array length,
102
+ * the full array is returned (no minibatching).
103
+ *
104
+ * @example
105
+ * epochShuffledMinibatch(['a','b','c','d','e'], 2, 0) // ['a','b']
106
+ * epochShuffledMinibatch(['a','b','c','d','e'], 2, 1) // ['c','d']
107
+ * epochShuffledMinibatch(['a','b','c','d','e'], 2, 2) // ['e','a']
108
+ */
109
+ export function epochShuffledMinibatch(items, size, epoch) {
110
+ const n = items.length;
111
+ if (n === 0)
112
+ return [];
113
+ if (!Number.isFinite(size) || size <= 0 || size >= n)
114
+ return [...items];
115
+ const e = Number.isFinite(epoch) && epoch >= 0 ? Math.floor(epoch) : 0;
116
+ const start = (e * size) % n;
117
+ const out = [];
118
+ for (let i = 0; i < size; i++)
119
+ out.push(items[(start + i) % n]);
120
+ return out;
121
+ }
91
122
  /**
92
123
  * V0.5.1 — GEPA+Merge prompt template (Paper Appendix F).
93
124
  *
@@ -203,6 +234,14 @@ export class GepaOptimizer {
203
234
  throw new TypeError("GepaOptimizer.nextGeneration: opts.objectives must contain at least one objective");
204
235
  }
205
236
  const maxCarry = opts.maxCarry ?? DEFAULT_MAX_CARRY;
237
+ // v0.7.0 — GEPA Algorithm 2 coverage selection (opt-in). Only taken when
238
+ // useCoverage is on AND every variant carries perKeyScores; otherwise we
239
+ // fall through to the metrics-based Pareto path so existing callers are
240
+ // byte-for-byte unaffected.
241
+ if (opts.useCoverage && scored.length > 0 && scored.every((v) => v.perKeyScores)) {
242
+ const coverage = scored.map((v) => v.perKeyScores);
243
+ return selectByCoverage(scored, coverage, maxCarry);
244
+ }
206
245
  // R1 V0.5.0-alpha.2 Critic Finding M2 (S1185): map metrics back to
207
246
  // indices via parallel array (NOT reference-identity on the metrics
208
247
  // object). Reference-identity worked today because paretoSelect
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer-gepa.js","sourceRoot":"","sources":["../../../src/evolution/optimizer-gepa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optimizer-gepa.js","sourceRoot":"","sources":["../../../src/evolution/optimizer-gepa.ts"],"names":[],"mappings":"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"}
@@ -79,6 +79,31 @@ export declare const DARWIN_DEFAULT_OBJECTIVES: ReadonlyArray<ParetoObjective<{
79
79
  * malformed variants poisoning the front).
80
80
  */
81
81
  export declare function dominates<T extends Record<string, unknown>>(a: T, b: T, objectives: ReadonlyArray<ParetoObjective<T>>): boolean;
82
+ /**
83
+ * True iff `a` ε-dominates `b` over the given objectives (v0.7.0).
84
+ *
85
+ * ε-dominance relaxes strict {@link dominates} with a per-objective relative
86
+ * tolerance applied SYMMETRICALLY: `a` may be worse than `b` on an objective
87
+ * by up to a fraction `epsilon` of that objective's own magnitude and still
88
+ * count as "non-regressing", AND `a` must beat `b` by more than that same band
89
+ * on at least one objective to count as a real improvement. This stops a
90
+ * genuinely better challenger from being rejected over a microscopic
91
+ * regression (e.g. "+12% quality but 0.3% slower"), while not letting a
92
+ * within-noise "gain" masquerade as domination.
93
+ *
94
+ * The tolerance is `epsilon · |bNorm|` per objective, so it is **scale-safe**
95
+ * across mixed-unit objectives (quality 0–10 vs duration in ms) — exactly
96
+ * like strict dominance, no pre-normalisation needed. At `epsilon = 0` this
97
+ * is byte-for-byte equivalent to {@link dominates} (`a < b` ⇒ false, `a > b`
98
+ * ⇒ strictly-better). Degenerate objective values (0) fall back to strict on
99
+ * that axis (zero tolerance) — fail-closed.
100
+ *
101
+ * Returns false if either side has a non-finite value for any objective
102
+ * (same defensive contract as {@link dominates}).
103
+ *
104
+ * @param epsilon Relative tolerance ≥ 0. Negative / NaN inputs clamp to 0.
105
+ */
106
+ export declare function dominatesEpsilon<T extends Record<string, unknown>>(a: T, b: T, objectives: ReadonlyArray<ParetoObjective<T>>, epsilon: number): boolean;
82
107
  /**
83
108
  * Return the subset of `variants` that are NOT dominated by any other
84
109
  * variant in the set. This is the Pareto front.
@@ -124,9 +149,11 @@ export declare function scalarise<T extends Record<string, unknown>>(variant: T,
124
149
  * critical workloads.
125
150
 
126
151
  * GEPA Algorithm 2's instance-proportional coverage sampling is the
127
- * third paper strategy and is NOT implemented in V0.5.1 — the caller-
128
- * side coverage data needed to drive it varies enough across domains
129
- * that a one-size-fits-all signature would mislead. Backlog for V0.6.
152
+ * third paper strategy. It is NOT a `paretoSelect` truncation mode
153
+ * (it needs the per-key score matrix, not aggregate metrics) it
154
+ * SHIPPED in v0.7.0 as its own pure functions {@link coverageFrontier} /
155
+ * {@link selectByCoverage} / {@link sampleByCoverage}, wired into the GEPA
156
+ * loop via `NextGenerationOptions.useCoverage`.
130
157
  */
131
158
  export type ParetoTruncationStrategy = "scalarised" | "crowding";
132
159
  export declare function paretoSelect<T extends Record<string, unknown>>(variants: ReadonlyArray<T>, objectives: ReadonlyArray<ParetoObjective<T>>, maxKeep?: number, truncationStrategy?: ParetoTruncationStrategy): T[];
@@ -162,5 +189,73 @@ export declare function paretoSelect<T extends Record<string, unknown>>(variants
162
189
  * // distances[i] = sum of per-objective normalised neighbour gaps for variant i
163
190
  * ```
164
191
  */
192
+ /**
193
+ * A "frontier key" in GEPA's instance-level Pareto search — a validation
194
+ * example id, an objective name, or an "example×objective" pair. Coverage is
195
+ * measured per key: a candidate that is best-in-class on many keys is more
196
+ * valuable (it excels on more task subsets) even if no single aggregate score
197
+ * crowns it.
198
+ */
199
+ export type FrontierKey = string;
200
+ /**
201
+ * Per-variant, per-key score matrix for coverage sampling. Outer index =
202
+ * variant; inner map = `frontierKey → score` (higher is always better — the
203
+ * caller direction-normalises before calling). Variants may carry different
204
+ * key sets; missing keys are treated as −∞ (never best on that key).
205
+ *
206
+ * NEW v0.7.0.
207
+ */
208
+ export type CoverageScores = ReadonlyArray<Readonly<Record<FrontierKey, number>>>;
209
+ /**
210
+ * GEPA Algorithm 2 — the instance-level Pareto frontier. For each frontier
211
+ * key, returns the set of variant indices that achieve the maximum score on
212
+ * that key (ties keep all winners). This is the structure GEPA's official
213
+ * `pareto` candidate selector is built on: selection probability proportional
214
+ * to the number of keys a candidate wins.
215
+ *
216
+ * Pure, deterministic. `eps` is the float-tie tolerance (a variant counts as
217
+ * a winner on a key if its score ≥ keyMax − eps). Non-finite scores never win.
218
+ *
219
+ * NEW v0.7.0 — closes the "coverage sampling = backlog for V0.6" deferral.
220
+ */
221
+ export declare function coverageFrontier(scores: CoverageScores, eps?: number): Map<FrontierKey, Set<number>>;
222
+ /**
223
+ * Coverage weight per variant = how many frontier keys it is best-in-class on
224
+ * (a key shared by K co-winners contributes 1/K to each, so the weights sum
225
+ * to the number of covered keys — fractional credit prevents a duplicate
226
+ * candidate from doubling the population's apparent coverage). Returns an
227
+ * array indexed by variant. This is the GEPA selection weight.
228
+ *
229
+ * NEW v0.7.0.
230
+ */
231
+ export declare function coverageWeights(scores: CoverageScores, eps?: number): number[];
232
+ /**
233
+ * Deterministically select up to `maxKeep` variants by coverage BREADTH —
234
+ * GEPA's diversity-preserving survivor rule. Ranks by coverage weight desc,
235
+ * tie-broken by total score sum desc, then original index (stable). Unlike
236
+ * `paretoSelect` truncation (which can keep N near-copies of the aggregate
237
+ * winner), this keeps candidates that win on DIFFERENT keys, preserving the
238
+ * spread that makes the next reflection generation productive.
239
+ *
240
+ * Pure — no RNG, so it is the test-friendly survivor selector. For the
241
+ * probabilistic GEPA candidate-to-mutate step, use {@link sampleByCoverage}.
242
+ *
243
+ * NEW v0.7.0.
244
+ */
245
+ export declare function selectByCoverage<T>(variants: ReadonlyArray<T>, scores: CoverageScores, maxKeep: number, eps?: number): T[];
246
+ /**
247
+ * GEPA Algorithm 2 candidate-selection step — pick ONE variant index, sampled
248
+ * with probability proportional to its coverage weight (candidates excelling
249
+ * on more task subsets are mutated more often). Because this module is pure,
250
+ * the randomness is INJECTED: pass an `rng` returning a float in [0,1). When
251
+ * every variant has zero coverage the choice is uniform. Returns a variant
252
+ * index (−1 only for empty input).
253
+ *
254
+ * Mirrors the official GEPA `NonDominatedSelector(rng)` contract — same shape,
255
+ * so a seeded RNG makes runs reproducible.
256
+ *
257
+ * NEW v0.7.0.
258
+ */
259
+ export declare function sampleByCoverage(scores: CoverageScores, rng: () => number, eps?: number): number;
165
260
  export declare function crowdingDistance<T extends Record<string, unknown>>(variants: ReadonlyArray<T>, objectives: ReadonlyArray<ParetoObjective<T>>): number[];
166
261
  //# sourceMappingURL=pareto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pareto.d.ts","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC,CAAC;IACb;;;OAGG;IACH,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC,eAAe,CAAC;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAKD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,OAAO,CAeT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,CAAC,EAAE,CAoBL;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,MAAM,CAUR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEjE,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAC7C,OAAO,CAAC,EAAE,MAAM,EAChB,kBAAkB,GAAE,wBAAuC,GAC1D,CAAC,EAAE,CAkBL;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,MAAM,EAAE,CAoDV"}
1
+ {"version":3,"file":"pareto.d.ts","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,58 @@ export function dominates(a, b, objectives) {
62
62
  }
63
63
  return strictlyBetterSomewhere;
64
64
  }
65
+ /**
66
+ * True iff `a` ε-dominates `b` over the given objectives (v0.7.0).
67
+ *
68
+ * ε-dominance relaxes strict {@link dominates} with a per-objective relative
69
+ * tolerance applied SYMMETRICALLY: `a` may be worse than `b` on an objective
70
+ * by up to a fraction `epsilon` of that objective's own magnitude and still
71
+ * count as "non-regressing", AND `a` must beat `b` by more than that same band
72
+ * on at least one objective to count as a real improvement. This stops a
73
+ * genuinely better challenger from being rejected over a microscopic
74
+ * regression (e.g. "+12% quality but 0.3% slower"), while not letting a
75
+ * within-noise "gain" masquerade as domination.
76
+ *
77
+ * The tolerance is `epsilon · |bNorm|` per objective, so it is **scale-safe**
78
+ * across mixed-unit objectives (quality 0–10 vs duration in ms) — exactly
79
+ * like strict dominance, no pre-normalisation needed. At `epsilon = 0` this
80
+ * is byte-for-byte equivalent to {@link dominates} (`a < b` ⇒ false, `a > b`
81
+ * ⇒ strictly-better). Degenerate objective values (0) fall back to strict on
82
+ * that axis (zero tolerance) — fail-closed.
83
+ *
84
+ * Returns false if either side has a non-finite value for any objective
85
+ * (same defensive contract as {@link dominates}).
86
+ *
87
+ * @param epsilon Relative tolerance ≥ 0. Negative / NaN inputs clamp to 0.
88
+ */
89
+ export function dominatesEpsilon(a, b, objectives, epsilon) {
90
+ if (objectives.length === 0)
91
+ return false;
92
+ const eps = Number.isFinite(epsilon) && epsilon > 0 ? epsilon : 0;
93
+ let strictlyBetterSomewhere = false;
94
+ for (const obj of objectives) {
95
+ const av = a[obj.key];
96
+ const bv = b[obj.key];
97
+ if (typeof av !== "number" || typeof bv !== "number")
98
+ return false;
99
+ if (!Number.isFinite(av) || !Number.isFinite(bv))
100
+ return false;
101
+ const aNorm = obj.direction === "maximize" ? av : -av;
102
+ const bNorm = obj.direction === "maximize" ? bv : -bv;
103
+ const tol = eps * Math.abs(bNorm);
104
+ // `a` regressed below `b` by more than the tolerance band → not dominating.
105
+ if (aNorm < bNorm - tol)
106
+ return false;
107
+ // Strictly-better must clear the SAME ε band — a within-ε "gain" is noise,
108
+ // not a real improvement. Applying the tolerance only to the regression
109
+ // side (and counting any `aNorm > bNorm` as a win) would be asymmetric:
110
+ // an infinitesimal gain could classify `a` as dominating while the loss
111
+ // side is forgiven. At ε=0 this reduces exactly to strict `aNorm > bNorm`.
112
+ if (aNorm > bNorm + tol)
113
+ strictlyBetterSomewhere = true;
114
+ }
115
+ return strictlyBetterSomewhere;
116
+ }
65
117
  /**
66
118
  * Return the subset of `variants` that are NOT dominated by any other
67
119
  * variant in the set. This is the Pareto front.
@@ -139,37 +191,148 @@ export function paretoSelect(variants, objectives, maxKeep, truncationStrategy =
139
191
  .slice(0, maxKeep);
140
192
  }
141
193
  /**
142
- * Compute the NSGA-II crowding distance for each variant in a
143
- * non-dominated front. Returns an array of the same length as
144
- * `variants`, indexed in input order.
145
- *
146
- * The classic Deb 2002 algorithm:
147
- * 1. For each objective `m`: sort the front by `m`.
148
- * 2. Boundary variants (lowest + highest `m`) get distance `+Infinity`
149
- * so they always survive truncation.
150
- * 3. Interior variants get the normalised gap between neighbours:
151
- * `(f_m(x_{i+1}) - f_m(x_{i-1})) / (f_m_max - f_m_min)`
152
- * 4. Sum across objectives.
153
- *
154
- * **Pure**, no I/O, deterministic. Safe to call from the hot path of
155
- * paretoSelect. Returns `0` for any variant whose objective is non-finite
156
- * — never returns NaN.
157
- *
158
- * NEW V0.5.1 (S1235).
159
- *
160
- * @example
161
- * ```ts
162
- * import { crowdingDistance, DARWIN_DEFAULT_OBJECTIVES } from "darwin-agents";
163
- *
164
- * const front = [
165
- * { id: "a", qualityScore: 8, sourceCount: 3, durationMs: 100, outputLength: 500 },
166
- * { id: "b", qualityScore: 9, sourceCount: 2, durationMs: 200, outputLength: 400 },
167
- * { id: "c", qualityScore: 7, sourceCount: 4, durationMs: 150, outputLength: 600 },
168
- * ];
169
- * const distances = crowdingDistance(front, DARWIN_DEFAULT_OBJECTIVES);
170
- * // distances[i] = sum of per-objective normalised neighbour gaps for variant i
171
- * ```
194
+ * GEPA Algorithm 2 — the instance-level Pareto frontier. For each frontier
195
+ * key, returns the set of variant indices that achieve the maximum score on
196
+ * that key (ties keep all winners). This is the structure GEPA's official
197
+ * `pareto` candidate selector is built on: selection probability proportional
198
+ * to the number of keys a candidate wins.
199
+ *
200
+ * Pure, deterministic. `eps` is the float-tie tolerance (a variant counts as
201
+ * a winner on a key if its score ≥ keyMax − eps). Non-finite scores never win.
202
+ *
203
+ * NEW v0.7.0 closes the "coverage sampling = backlog for V0.6" deferral.
204
+ */
205
+ export function coverageFrontier(scores, eps = 1e-9) {
206
+ const frontier = new Map();
207
+ if (scores.length === 0)
208
+ return frontier;
209
+ // Collect every key that appears on any variant.
210
+ const allKeys = new Set();
211
+ for (const variant of scores) {
212
+ for (const key of Object.keys(variant))
213
+ allKeys.add(key);
214
+ }
215
+ for (const key of allKeys) {
216
+ let max = Number.NEGATIVE_INFINITY;
217
+ for (let i = 0; i < scores.length; i++) {
218
+ const v = scores[i][key];
219
+ if (typeof v === "number" && Number.isFinite(v) && v > max)
220
+ max = v;
221
+ }
222
+ if (!Number.isFinite(max))
223
+ continue; // no finite score on this key
224
+ const winners = new Set();
225
+ for (let i = 0; i < scores.length; i++) {
226
+ const v = scores[i][key];
227
+ if (typeof v === "number" && Number.isFinite(v) && v >= max - eps) {
228
+ winners.add(i);
229
+ }
230
+ }
231
+ frontier.set(key, winners);
232
+ }
233
+ return frontier;
234
+ }
235
+ /**
236
+ * Coverage weight per variant = how many frontier keys it is best-in-class on
237
+ * (a key shared by K co-winners contributes 1/K to each, so the weights sum
238
+ * to the number of covered keys — fractional credit prevents a duplicate
239
+ * candidate from doubling the population's apparent coverage). Returns an
240
+ * array indexed by variant. This is the GEPA selection weight.
241
+ *
242
+ * NEW v0.7.0.
172
243
  */
244
+ export function coverageWeights(scores, eps = 1e-9) {
245
+ const weights = new Array(scores.length).fill(0);
246
+ const frontier = coverageFrontier(scores, eps);
247
+ for (const winners of frontier.values()) {
248
+ if (winners.size === 0)
249
+ continue;
250
+ const share = 1 / winners.size;
251
+ for (const idx of winners)
252
+ weights[idx] += share;
253
+ }
254
+ return weights;
255
+ }
256
+ /**
257
+ * Deterministically select up to `maxKeep` variants by coverage BREADTH —
258
+ * GEPA's diversity-preserving survivor rule. Ranks by coverage weight desc,
259
+ * tie-broken by total score sum desc, then original index (stable). Unlike
260
+ * `paretoSelect` truncation (which can keep N near-copies of the aggregate
261
+ * winner), this keeps candidates that win on DIFFERENT keys, preserving the
262
+ * spread that makes the next reflection generation productive.
263
+ *
264
+ * Pure — no RNG, so it is the test-friendly survivor selector. For the
265
+ * probabilistic GEPA candidate-to-mutate step, use {@link sampleByCoverage}.
266
+ *
267
+ * NEW v0.7.0.
268
+ */
269
+ export function selectByCoverage(variants, scores, maxKeep, eps = 1e-9) {
270
+ const n = variants.length;
271
+ if (n === 0)
272
+ return [];
273
+ if (typeof maxKeep !== "number" || maxKeep >= n)
274
+ return [...variants];
275
+ if (maxKeep <= 0)
276
+ return [];
277
+ const weights = coverageWeights(scores, eps);
278
+ const totals = scores.map((s) => {
279
+ let sum = 0;
280
+ for (const v of Object.values(s)) {
281
+ if (typeof v === "number" && Number.isFinite(v))
282
+ sum += v;
283
+ }
284
+ return sum;
285
+ });
286
+ return [...variants.keys()]
287
+ .sort((i, j) => {
288
+ const dw = (weights[j] ?? 0) - (weights[i] ?? 0);
289
+ if (dw !== 0)
290
+ return dw;
291
+ const dt = (totals[j] ?? 0) - (totals[i] ?? 0);
292
+ if (dt !== 0)
293
+ return dt;
294
+ return i - j; // stable
295
+ })
296
+ .slice(0, maxKeep)
297
+ .map((i) => variants[i]);
298
+ }
299
+ /**
300
+ * GEPA Algorithm 2 candidate-selection step — pick ONE variant index, sampled
301
+ * with probability proportional to its coverage weight (candidates excelling
302
+ * on more task subsets are mutated more often). Because this module is pure,
303
+ * the randomness is INJECTED: pass an `rng` returning a float in [0,1). When
304
+ * every variant has zero coverage the choice is uniform. Returns a variant
305
+ * index (−1 only for empty input).
306
+ *
307
+ * Mirrors the official GEPA `NonDominatedSelector(rng)` contract — same shape,
308
+ * so a seeded RNG makes runs reproducible.
309
+ *
310
+ * NEW v0.7.0.
311
+ */
312
+ export function sampleByCoverage(scores, rng, eps = 1e-9) {
313
+ const n = scores.length;
314
+ if (n === 0)
315
+ return -1;
316
+ if (n === 1)
317
+ return 0;
318
+ const weights = coverageWeights(scores, eps);
319
+ const total = weights.reduce((a, b) => a + b, 0);
320
+ // Draw a uniform in [0,1); clamp non-finite/out-of-range rng output.
321
+ const raw = rng();
322
+ const u = Number.isFinite(raw) ? Math.min(0.999999999, Math.max(0, raw)) : 0;
323
+ if (!(total > 0)) {
324
+ // No coverage signal anywhere → uniform pick.
325
+ return Math.min(n - 1, Math.floor(u * n));
326
+ }
327
+ let cumulative = 0;
328
+ const target = u * total;
329
+ for (let i = 0; i < n; i++) {
330
+ cumulative += weights[i] ?? 0;
331
+ if (target < cumulative)
332
+ return i;
333
+ }
334
+ return n - 1; // float-safety fallthrough
335
+ }
173
336
  export function crowdingDistance(variants, objectives) {
174
337
  const n = variants.length;
175
338
  if (n === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"pareto.js","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pareto.js","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAwCH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAKhC;IACJ,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;IAC3D,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;IAC3D,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;IAC3D,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;CAC3D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,CAAI,EACJ,CAAI,EACJ,UAA6C;IAE7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/D,+DAA+D;QAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK,GAAG,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,gDAAgD;QACjF,IAAI,KAAK,GAAG,KAAK;YAAE,uBAAuB,GAAG,IAAI,CAAC;IACpD,CAAC;IACD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,CAAI,EACJ,CAAI,EACJ,UAA6C,EAC7C,OAAe;IAEf,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,4EAA4E;QAC5E,IAAI,KAAK,GAAG,KAAK,GAAG,GAAG;YAAE,OAAO,KAAK,CAAC;QACtC,2EAA2E;QAC3E,wEAAwE;QACxE,wEAAwE;QACxE,wEAAwE;QACxE,2EAA2E;QAC3E,IAAI,KAAK,GAAG,KAAK,GAAG,GAAG;YAAE,uBAAuB,GAAG,IAAI,CAAC;IAC1D,CAAC;IACD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA0B,EAC1B,UAA6C;IAE7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,gEAAgE;QAChE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC/B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtB,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;gBACnD,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,OAAU,EACV,UAA6C;IAE7C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/B,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,KAAK,IAAI,iBAAiB,GAAG,MAAM,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAiCD,MAAM,UAAU,YAAY,CAC1B,QAA0B,EAC1B,UAA6C,EAC7C,OAAgB,EAChB,qBAA+C,YAAY;IAE3D,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO;QAAE,OAAO,KAAK,CAAC;IACzE,IAAI,kBAAkB,KAAK,UAAU,EAAE,CAAC;QACtC,qEAAqE;QACrE,kEAAkE;QAClE,8DAA8D;QAC9D,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,KAAK,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,6DAA6D;IAC7D,OAAO,CAAC,GAAG,KAAK,CAAC;SACd,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;SACnE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACvB,CAAC;AAqDD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAsB,EACtB,GAAG,GAAG,IAAI;IAEV,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEzC,iDAAiD;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;gBAAE,GAAG,GAAG,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,8BAA8B;QACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,GAAG,GAAG,IAAI;IAChE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAS,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,SAAS;QACjC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAE,IAAI,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA0B,EAC1B,MAAsB,EACtB,OAAe,EACf,GAAG,GAAG,IAAI;IAEV,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IACtE,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,GAAG,IAAI,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;SACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;IACzB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAsB,EACtB,GAAiB,EACjB,GAAG,GAAG,IAAI;IAEV,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjD,qEAAqE;IACrE,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;IAClB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACjB,8CAA8C;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,MAAM,GAAG,UAAU;YAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,2BAA2B;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAA0B,EAC1B,UAA6C;IAE7C,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,mEAAmE;QACnE,2CAA2C;QAC3C,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAErD,MAAM,SAAS,GAAa,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,mEAAmE;QACnE,mCAAmC;QACnC,MAAM,OAAO,GAAoC,EAAE,CAAC;QACpD,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACR,CAAC;YACD,+DAA+D;YAC/D,yDAAyD;YACzD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS,CAAC,0CAA0C;QAEpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;QAExB,oEAAoE;QACpE,iEAAiE;QACjE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpD,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAExD,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS,CAAC,4CAA4C;QAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,8DAA8D;YAC9D,0DAA0D;YAC1D,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,iBAAiB;gBAAE,SAAS;YACpE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAC5D,SAAS,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -7,6 +7,16 @@
7
7
  */
8
8
  import type { PromptVersionStats, SafetyThresholds, DarwinExperiment } from '../types.js';
9
9
  export type ABTestOutcome = 'a_wins' | 'b_wins' | 'continue';
10
+ /**
11
+ * v0.7.0 — Optional per-arm composite-score samples for the sequential
12
+ * confidence methods (`'msprt'` / `'hoeffding'`). When omitted, the gate
13
+ * falls back to the v0.6.0 effect-size heuristic so all existing callers are
14
+ * byte-for-byte unaffected.
15
+ */
16
+ export interface ABTestSamples {
17
+ a: ReadonlyArray<number>;
18
+ b: ReadonlyArray<number>;
19
+ }
10
20
  export interface ABTestConfidence {
11
21
  /** Effect size (Cohen's d approximation) */
12
22
  effectSize: number;
@@ -21,6 +31,13 @@ export declare class SafetyGate {
21
31
  * to proceed with evolution (prompt optimization).
22
32
  */
23
33
  canEvolve(_agentName: string, stats: PromptVersionStats): boolean;
34
+ /**
35
+ * v0.7.0 — True iff the peeking guard is configured to use a sequential
36
+ * method (mSPRT / Hoeffding), which needs the per-arm composite samples.
37
+ * The loop calls this to decide whether to load that (slightly more
38
+ * expensive) per-sample data before calling {@link evaluateABTest}.
39
+ */
40
+ usesSequentialConfidence(): boolean;
24
41
  /**
25
42
  * Check whether score B is NOT a regression beyond the allowed threshold.
26
43
  *
@@ -49,7 +66,7 @@ export declare class SafetyGate {
49
66
  * @param overrideMinRuns — Per-test minimum runs (from ABTest.minRuns).
50
67
  * Falls back to SafetyThresholds.minDataPoints if not provided.
51
68
  */
52
- evaluateABTest(compositeA: number, compositeB: number, runsA: number, runsB: number, failsA?: number, failsB?: number, overrideMinRuns?: number): ABTestOutcome;
69
+ evaluateABTest(compositeA: number, compositeB: number, runsA: number, runsB: number, failsA?: number, failsB?: number, overrideMinRuns?: number, samples?: ABTestSamples): ABTestOutcome;
53
70
  /**
54
71
  * Calculate a simple confidence metric for an A/B test result.
55
72
  * Uses effect size (difference / pooled estimate) as a proxy.
@@ -65,6 +82,23 @@ export declare class SafetyGate {
65
82
  * and at least 2×minRuns total samples before a margin win counts.
66
83
  */
67
84
  private meetsConfidence;
85
+ /**
86
+ * v0.7.0 — Dispatch the peeking-resistant confidence gate to the
87
+ * configured {@link SafetyThresholds.confidenceMethod}.
88
+ *
89
+ * - `'effect-size'` (default): the v0.6.0 heuristic ({@link meetsConfidence}).
90
+ * Byte-for-byte unchanged when no method is set.
91
+ * - `'msprt'` / `'hoeffding'`: an always-valid sequential test over the
92
+ * RAW per-arm composite samples (reliability is already handled by the
93
+ * auto-loss rule upstream, so the statistical test uses the unadjusted
94
+ * scores). The verdict must be `decisive` AND point in the SAME
95
+ * direction as the score margin — a sequential test that fires for the
96
+ * opposite arm does not confirm this margin.
97
+ *
98
+ * Falls back to the effect-size heuristic when a sequential method is set
99
+ * but no per-sample data was supplied (graceful — never throws).
100
+ */
101
+ private isConfident;
68
102
  /**
69
103
  * Compute dynamic minRuns based on observed quality score variance.
70
104
  *
@@ -1 +1 @@
1
- {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../../src/evolution/safety.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG1F,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAmB;gBAEzB,UAAU,GAAE,gBAAiC;IAIzD;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO;IAIjE;;;;;;;;;OASG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAUxD;;;OAGG;IACH,cAAc,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO;IAIpD;;;;;;;;;;;OAWG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,aAAa;IA+EhB;;;;OAIG;IACH,mBAAmB,CACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,gBAAgB;IAuBnB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAevB;;;;;;;;;;;;;;OAcG;IACH,qBAAqB,CACnB,WAAW,EAAE,gBAAgB,EAAE,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM;CAkCV"}
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../../src/evolution/safety.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI1F,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAmB;gBAEzB,UAAU,GAAE,gBAAiC;IAIzD;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO;IAIjE;;;;;OAKG;IACH,wBAAwB,IAAI,OAAO;IAQnC;;;;;;;;;OASG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAUxD;;;OAGG;IACH,cAAc,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO;IAIpD;;;;;;;;;;;OAWG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,EAClB,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,aAAa,GACtB,aAAa;IA+EhB;;;;OAIG;IACH,mBAAmB,CACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,gBAAgB;IAuBnB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAevB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,WAAW;IAuCnB;;;;;;;;;;;;;;OAcG;IACH,qBAAqB,CACnB,WAAW,EAAE,gBAAgB,EAAE,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM;CAkCV"}