@tangle-network/agent-eval 0.198.1 → 0.199.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 (40) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -0
  3. package/dist/adapters/http.d.ts +1 -1
  4. package/dist/analyst/index.d.ts +1 -1
  5. package/dist/analyst/index.js +1 -1
  6. package/dist/{benchmark-command-DKQuLrrD.js → benchmark-command-CoBwYvau.js} +2 -2
  7. package/dist/{benchmark-command-DKQuLrrD.js.map → benchmark-command-CoBwYvau.js.map} +1 -1
  8. package/dist/benchmarks/index.d.ts +2 -2
  9. package/dist/benchmarks/index.js +2 -2
  10. package/dist/campaign/index.d.ts +2 -2
  11. package/dist/campaign/index.js +3 -3
  12. package/dist/{campaign-DRdKwxm-.js → campaign-BIqhoN9r.js} +4 -4
  13. package/dist/{campaign-DRdKwxm-.js.map → campaign-BIqhoN9r.js.map} +1 -1
  14. package/dist/cli.js +1 -1
  15. package/dist/contract/index.d.ts +4 -4
  16. package/dist/contract/index.js +3 -3
  17. package/dist/{define-agent-eval-DkfcqaCF.js → define-agent-eval-BRCLti7N.js} +2 -2
  18. package/dist/{define-agent-eval-DkfcqaCF.js.map → define-agent-eval-BRCLti7N.js.map} +1 -1
  19. package/dist/{define-agent-eval-9JYoCkDI.d.ts → define-agent-eval-Bgwt5ZcC.d.ts} +3 -3
  20. package/dist/{define-agent-eval-9JYoCkDI.d.ts.map → define-agent-eval-Bgwt5ZcC.d.ts.map} +1 -1
  21. package/dist/{index-DzQ6T34s.d.ts → index-J8BB_NYv.d.ts} +3 -3
  22. package/dist/{index-DzQ6T34s.d.ts.map → index-J8BB_NYv.d.ts.map} +1 -1
  23. package/dist/{index-BXJHJ_jE.d.ts → index-OuIM7sJz.d.ts} +2 -2
  24. package/dist/{index-BXJHJ_jE.d.ts.map → index-OuIM7sJz.d.ts.map} +1 -1
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.js +3 -3
  27. package/dist/{llm-judge-3ncNcWNT.js → llm-judge-GSlZ0eG8.js} +31 -22
  28. package/dist/llm-judge-GSlZ0eG8.js.map +1 -0
  29. package/dist/openapi.json +1 -1
  30. package/dist/{produced-state-qIhqN3V5.js → produced-state-D2ff-Dyo.js} +2 -2
  31. package/dist/{produced-state-qIhqN3V5.js.map → produced-state-D2ff-Dyo.js.map} +1 -1
  32. package/dist/search/index.d.ts +1 -1
  33. package/dist/{search-kernel-TLoiMMcq.d.ts → search-kernel-DA2-mS4N.d.ts} +10 -7
  34. package/dist/{search-kernel-TLoiMMcq.d.ts.map → search-kernel-DA2-mS4N.d.ts.map} +1 -1
  35. package/dist/{skillopt-optimization-method-BL_j6mX8.js → skillopt-optimization-method-DDt77V-N.js} +2 -2
  36. package/dist/{skillopt-optimization-method-BL_j6mX8.js.map → skillopt-optimization-method-DDt77V-N.js.map} +1 -1
  37. package/docs/public-api.md +136 -70
  38. package/docs/search-ledger.md +59 -1
  39. package/package.json +1 -1
  40. package/dist/llm-judge-3ncNcWNT.js.map +0 -1
@@ -147,6 +147,62 @@ No lens imputes a value below the design's honesty thresholds: an unknown cost o
147
147
  Every sample a lens summarizes is staged by `estimateNode`'s own `searchEstimateMethod`: `none` below 2 (no mean; one observation is no estimate), `insufficient` below 6 (a mean, no interval), `descriptive` below 20 and `bootstrap` from 20, each interval naming its method and n.
148
148
  Every order a lens reports, such as a cluster id, sorts by UTF-16 code unit, so a fixed ledger gives the same JSON on every host.
149
149
 
150
+ ### All eight lenses, one page
151
+
152
+ `src/search/lenses/` holds eight lenses total; the table below is every one of them, the signal a `SearchPolicy` can read from it, and the one-line methodology it motivates (search-tree-design §12).
153
+ Five of the eight feed a shipped consumer today: four (`operatorYield`, `landscape`, `skillManifold`, `metaSearch`) into a `SearchPolicy` or allocator, one (`editCredit`) into agent-runtime SkillOpt rather than a `SearchPolicy`. `tree`, `front` and `taskMatrix` expose their signal to `agent-eval search show`, Intelligence, discovery lab and VerticalBench with no built-in policy consumer yet — the design names their intended use, and the Wiring column says which are still only that.
154
+
155
+ | Lens | `search show` flag | Signal | Motivates | Wiring |
156
+ |---|---|---|---|---|
157
+ | `tree` | `--tree` | `tree.nodeCount` | the base page every other lens sits beside | none (base view) |
158
+ | `operatorYield` | `--operator-yield` | `operatorYield.weights` | operator choice as a bandit | **wired** — `incumbentWithOperatorBandit` draws its expansion operator from this once an operator has 6 measured outcomes |
159
+ | `front` | `--front` | `front.membership` | multi-objective selection: which nodes earn their cost, on score vs. known spend | not wired — a view signal today (Intelligence's frontier, cost-per-solved reporting) |
160
+ | `taskMatrix` | `--task-matrix` | `taskMatrix.specialistGain` | ship a portfolio and route by task family; conditional skills | not wired — no `SearchPolicy` reads it yet (recorded open issue on PR #866) |
161
+ | `editCredit` | `--edit-credit` | `reusableHunks` | extract reusable edits as inline skills; stop re-proposing dead ones | **wired to SkillOpt, not a `SearchPolicy`** — `data.skillCandidates` feeds agent-runtime `improve({ surface: 'skills' })` directly (PR #868) |
162
+ | `landscape` | `--landscape` | `plateau` | draft fresh from the root when the climb has plateaued | **wired, opt-in** — `draftOnPlateau(base)` wraps any policy (e.g. `draftOnPlateau(aide())`); off by default, no quality gain detected in simulation yet (PR #869) |
163
+ | `skillManifold` | `--skill-manifold` | `nextUnit` | adaptive testing: measure the cell that best separates the leaders next | **wired, opt-in** — `asha({ extend: nextUnitExtension(skillCalibration(lens)) })`; off by default, saved ~9 of ~600 cells per search with no quality loss in simulation (PR #869) |
164
+ | `metaSearch` | `--meta` | `metaSearch.bestPolicyConfiguration` | tune the climber itself: an outer search whose cells are inner searches, ranked by held-out lift per known dollar | **wired** — `runNestedSearch` scores each outer cell with this signal (PR #867) |
165
+
166
+ Every lens is a pure function of `SearchStateView` — no clock, no `Math.random`, no record type but the ledger's own (`editCredit` also reads content blobs, and the caller verifies them against their digest).
167
+ `agent-eval search show <ledger>` takes any combination of the first seven flags in one call; `--meta` takes one or more ledger paths in place of a single lens flag, because a meta-search score compares searches, not nodes within one.
168
+
169
+ **Verified on a real ledger** (`scripts/import-vb-climb.ts` import of `climb-gen1-20260924T151217Z`, a real VerticalBench GEPA climb — 2 nodes, 4 settled cells, every cell's cost unknown because the GEPA callback path meters per batch, not per cell):
170
+
171
+ ```
172
+ $ agent-eval search show search-ledger.jsonl --tree --operator-yield --front --task-matrix --edit-credit --landscape --skill-manifold
173
+
174
+ tree: 2 nodes, 2 edges
175
+ seed → node_8b6e8e11c5a430aa900f210c8e5162d7 (rejected) $0.00 known + at least $0.00 over 2 unknown-cost cells
176
+ improve → node_9d74773e7ecfd982307a8285845e7fad (selected) $0.00 known + at least $0.00 over 2 unknown-cost cells
177
+
178
+ operator yield (selection split):
179
+ improve: 1 proposals → 1 node (selected=1); yield: no measured children; 1 excluded
180
+ seed: 1 proposals → 1 node (rejected=1); yield: no measured children; 1 excluded
181
+
182
+ front (selection split, axes: score, costPerCellUsd): 0 of 2 node(s) on the frontier, 2 excluded (one-unit 2)
183
+
184
+ task matrix (selection split, maximize): 2 node(s) × 1 unit(s), 1 node cluster(s), 1 unit cluster(s)
185
+ cluster base-pay-usdc-checkout.selection.1 [...]: specialist gain insufficient (1 of 6 units)
186
+
187
+ edit credit — 10 genes from 1 of 1 lineage edges, 1 measurable steps (selection split, maximize)
188
+ signal reusableHunks = null (insufficient: no gene has 6 selection units on clean steps (10 genes, 1 measurable steps))
189
+
190
+ Landscape (selection split, ...): placed 2 of 2 nodes by landmark MDS on 2 landmarks
191
+ plateau: insufficient: 0 of 6 accepted nodes (screened, no dodged unit, 6 or more units shared with the root)
192
+
193
+ Skill manifold (selection split, loadings fitted here)
194
+ intrinsic dimension: insufficient (0 nodes and 0 units qualify; a manifold needs 3 nodes and 6 units)
195
+
196
+ $ agent-eval search show climb-141516Z/search-ledger.jsonl climb-151217Z/search-ledger.jsonl --meta
197
+
198
+ meta-search: 2 searches (0 contained, 0 derived) in 1 objective, 2 configurations
199
+ metaSearch.bestPolicyConfiguration: unknown — no configuration of vb/coder · score (maximize) has a known lift per dollar: 2 unscored searches and 0 with only a spend floor
200
+ ```
201
+
202
+ Every signal reports honestly rather than guessing: at 2 nodes and 1 shared unit, this real climb is below every lens's `insufficient`/`none` threshold, so `operatorYield`, `front`, `taskMatrix`, `editCredit`, `landscape` and `skillManifold` all say so instead of printing a number.
203
+ The two `--wired` behaviors above (`incumbentWithOperatorBandit`, `draftOnPlateau`, `nextUnitExtension`) fall back to their base policy's own behavior on exactly this "insufficient" case — the same code path a synthetic ledger with real signal values exercises, proved in each lens's own PR.
204
+
205
+
150
206
  | Lens | Reports | Signal |
151
207
  |---|---|---|
152
208
  | `tree(state)` | a tidy tree of nodes and edges — the base view every other lens sits beside; a node with unknown-cost cells shows its known spend, its proven floor and how many cells are unknown, never a total | `tree.nodeCount` (drives no policy) |
@@ -255,7 +311,9 @@ The ports:
255
311
  The kernel refuses an expansion without a parent or with a parent whose screen has not finished; an invalid node is never screened, so it is never a parent.
256
312
  Every built-in policy keeps the same leader: a node leads when it dodged no unit (no cell ran and ended unscored), scored every unit the leader scored, and beats the leader's mean on them.
257
313
  A node measured on fewer units than the leader, such as one an allocator has only screened, cannot take the lead on less evidence.
258
- `incumbent({ patience })` is the hill climb: it expands the leader once every earlier child is screened.
314
+ A leader with no scored unit, such as a root whose every cell ended unscored, holds no evidence, and the first node that dodged no unit takes the lead from it.
315
+ `incumbent({ patience, minImprovement })` is the hill climb: it expands the leader once every earlier child is screened.
316
+ With `minImprovement`, a node takes the lead only when its mean beats the leader's by more than that margin, in the metric's units.
259
317
  `crowdedFrontierParent({ seed })` draws the parent from the Pareto frontier by a seeded crowded tournament.
260
318
  `aide({ drafts, debugProbability, maxDebugDepth, stallAfter })` (defaults 5, 0.5, 3, 4) is AIDE's policy with three changes for noisy scores.
261
319
  It drafts whole alternatives from the root until `drafts` nodes were drafted.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-eval",
3
- "version": "0.198.1",
3
+ "version": "0.199.0",
4
4
  "description": "Evaluate and improve AI agents from runs, traces, judges, and feedback. Compare candidates, cluster failures, measure lift, and gate releases.",
5
5
  "homepage": "https://github.com/tangle-network/agent-eval#readme",
6
6
  "repository": {