@tangle-network/agent-eval 0.100.1 → 0.101.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 (43) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/adapters/http.d.ts +1 -1
  3. package/dist/adapters/langchain.d.ts +1 -1
  4. package/dist/adapters/otel.d.ts +1 -1
  5. package/dist/campaign/index.d.ts +58 -8
  6. package/dist/campaign/index.js +207 -34
  7. package/dist/campaign/index.js.map +1 -1
  8. package/dist/chunk-63MBSQTX.js +350 -0
  9. package/dist/chunk-63MBSQTX.js.map +1 -0
  10. package/dist/{chunk-G7IB3GJ5.js → chunk-CHIFZIQD.js} +3 -3
  11. package/dist/{chunk-VWQ6PO5O.js → chunk-GUII3E73.js} +54 -1
  12. package/dist/{chunk-VWQ6PO5O.js.map → chunk-GUII3E73.js.map} +1 -1
  13. package/dist/{chunk-2KTBHICD.js → chunk-NK77GPUH.js} +3 -3
  14. package/dist/chunk-NK77GPUH.js.map +1 -0
  15. package/dist/{chunk-QZYXA7ZO.js → chunk-X5OUZB4T.js} +2 -2
  16. package/dist/{chunk-HRGTA6U5.js → chunk-XIOQHCHU.js} +256 -32
  17. package/dist/chunk-XIOQHCHU.js.map +1 -0
  18. package/dist/contract/index.d.ts +6 -6
  19. package/dist/contract/index.js +7 -7
  20. package/dist/{gepa-BRgNnmGZ.d.ts → gepa-CEy1AIWp.d.ts} +36 -2
  21. package/dist/hosted/index.d.ts +1 -1
  22. package/dist/index.d.ts +102 -7
  23. package/dist/index.js +99 -154
  24. package/dist/index.js.map +1 -1
  25. package/dist/multishot/index.d.ts +1 -1
  26. package/dist/openapi.json +1 -1
  27. package/dist/{pre-registration-DB8oDqZJ.d.ts → pre-registration-BjGZf9YA.d.ts} +1 -1
  28. package/dist/product-benchmark/index.d.ts +144 -0
  29. package/dist/product-benchmark/index.js +23 -0
  30. package/dist/{provenance-B0SZw1z2.d.ts → provenance-DdfmVfqR.d.ts} +2 -2
  31. package/dist/rl.d.ts +1 -1
  32. package/dist/{run-campaign-OWCFOEQG.js → run-campaign-HG4WTSDH.js} +4 -2
  33. package/dist/run-campaign-HG4WTSDH.js.map +1 -0
  34. package/dist/{types-Cv1bo4_a.d.ts → types-fWqEJm7h.d.ts} +3 -0
  35. package/docs/concepts.md +1 -0
  36. package/docs/eval-fixtures.md +115 -0
  37. package/docs/feature-guide.md +4 -0
  38. package/package.json +6 -1
  39. package/dist/chunk-2KTBHICD.js.map +0 -1
  40. package/dist/chunk-HRGTA6U5.js.map +0 -1
  41. /package/dist/{chunk-G7IB3GJ5.js.map → chunk-CHIFZIQD.js.map} +0 -0
  42. /package/dist/{chunk-QZYXA7ZO.js.map → chunk-X5OUZB4T.js.map} +0 -0
  43. /package/dist/{run-campaign-OWCFOEQG.js.map → product-benchmark/index.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { J as JudgeScore } from '../types-Cv1bo4_a.js';
1
+ import { J as JudgeScore } from '../types-fWqEJm7h.js';
2
2
  import { AgentProfile } from '@tangle-network/agent-interface';
3
3
  import { M as MatrixResult } from '../types-BUxNaJ8c.js';
4
4
  import '../run-record-DEwidcqn.js';
package/dist/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "@tangle-network/agent-eval — wire protocol",
5
- "version": "0.100.1",
5
+ "version": "0.101.0",
6
6
  "description": "HTTP and stdio RPC interface to agent-eval. The TypeScript runtime is the source of truth; this spec is the contract that cross-language clients (Python, Rust, Go) generate from.\n\nWire-protocol version: 1.0.0. Bumps on breaking changes to request/response schemas.",
7
7
  "contact": {
8
8
  "name": "Tangle Network",
@@ -1,7 +1,7 @@
1
1
  import { A as AgentEvalError } from './errors-CzMUYo7b.js';
2
2
  import { R as RunRecord } from './run-record-DEwidcqn.js';
3
3
  import { C as ChatClient } from './types-BEzCBMQD.js';
4
- import { c as JudgeDimension, S as Scenario, a as JudgeConfig } from './types-Cv1bo4_a.js';
4
+ import { c as JudgeDimension, S as Scenario, a as JudgeConfig } from './types-fWqEJm7h.js';
5
5
  import { TCloud } from '@tangle-network/tcloud';
6
6
  import { D as DefaultVerdict } from './verdict-C9MlYujm.js';
7
7
 
@@ -0,0 +1,144 @@
1
+ declare const productBenchmarkSplits: readonly ["practice", "dev", "holdout", "safety", "sentinel"];
2
+ type ProductBenchmarkSplit = (typeof productBenchmarkSplits)[number];
3
+ interface ProductBenchmarkRepoRef {
4
+ readonly url: string;
5
+ readonly commit: string;
6
+ readonly branch: string;
7
+ }
8
+ interface ProductBenchmarkSubstrateVersions {
9
+ readonly agentEval: string;
10
+ readonly agentRuntime: string;
11
+ readonly agentInterface: string;
12
+ readonly sandbox: string;
13
+ readonly agentBench?: string;
14
+ }
15
+ interface ProductBenchmarkProfileRef {
16
+ readonly id: string;
17
+ readonly profileHash: string;
18
+ readonly agentProfilePath: string;
19
+ }
20
+ interface ProductBenchmarkArm {
21
+ readonly id: string;
22
+ readonly profileId: string;
23
+ readonly mutableSurfaces: readonly string[];
24
+ readonly policyAxes: Record<string, unknown>;
25
+ }
26
+ interface ProductBenchmarkScenario {
27
+ readonly id: string;
28
+ readonly split: ProductBenchmarkSplit;
29
+ readonly tags: readonly string[];
30
+ readonly sourceAllowedForSynthesis: boolean;
31
+ }
32
+ interface ProductBenchmarkBudgets {
33
+ readonly maxUsd: number;
34
+ readonly maxCells: number;
35
+ readonly maxWallMs: number;
36
+ }
37
+ interface ProductBenchmarkManifest {
38
+ readonly schemaVersion: 1;
39
+ readonly projectId: string;
40
+ readonly benchmarkId: string;
41
+ readonly repo: ProductBenchmarkRepoRef;
42
+ readonly substrate: ProductBenchmarkSubstrateVersions;
43
+ readonly profiles: readonly ProductBenchmarkProfileRef[];
44
+ readonly arms: readonly ProductBenchmarkArm[];
45
+ readonly scenarios: readonly ProductBenchmarkScenario[];
46
+ readonly budgets: ProductBenchmarkBudgets;
47
+ readonly expectedArtifactDir: string;
48
+ }
49
+ interface AgentProfileRuntimeReceipt {
50
+ readonly model: string;
51
+ readonly harness: string;
52
+ readonly backend: string;
53
+ readonly reasoningEffort?: string;
54
+ }
55
+ type RuntimeResolution = AgentProfileRuntimeReceipt;
56
+ interface ProductBenchmarkRecord {
57
+ readonly schemaVersion: 1;
58
+ readonly projectId: string;
59
+ readonly benchmarkId: string;
60
+ readonly runId: string;
61
+ readonly scenarioId: string;
62
+ readonly split: ProductBenchmarkSplit;
63
+ readonly armId: string;
64
+ readonly rep: number;
65
+ readonly agentProfile: {
66
+ readonly id: string;
67
+ readonly hash: string;
68
+ readonly path: string;
69
+ readonly declared: RuntimeResolution;
70
+ readonly resolved: RuntimeResolution;
71
+ };
72
+ readonly model: {
73
+ readonly provider: string;
74
+ readonly id: string;
75
+ };
76
+ readonly backend: {
77
+ readonly kind: string;
78
+ readonly version: string;
79
+ };
80
+ readonly outcome: {
81
+ readonly pass: boolean;
82
+ readonly score: number;
83
+ readonly dimensions: Record<string, number>;
84
+ readonly failureMode: string | null;
85
+ };
86
+ readonly usage: {
87
+ readonly inputTokens: number;
88
+ readonly outputTokens: number;
89
+ readonly costUsd: number;
90
+ readonly wallMs: number;
91
+ readonly toolCalls: number;
92
+ };
93
+ readonly integrity: {
94
+ readonly realBackend: boolean;
95
+ readonly rawCapture: boolean;
96
+ readonly traceCapture: boolean;
97
+ readonly noStubRows: boolean;
98
+ readonly priced: boolean;
99
+ readonly profileMaterialized: boolean;
100
+ };
101
+ readonly artifacts: {
102
+ readonly records: string;
103
+ readonly traces: string;
104
+ readonly raws: string;
105
+ readonly scores: string;
106
+ readonly workspace: string;
107
+ };
108
+ }
109
+ interface ProductBenchmarkRunInput {
110
+ readonly manifestPath: string;
111
+ readonly recordsPath: string;
112
+ readonly artifactRoot?: string;
113
+ readonly checkArtifacts?: boolean;
114
+ }
115
+ interface ProductBenchmarkValidationReport {
116
+ readonly manifestPath: string;
117
+ readonly recordsPath: string;
118
+ readonly records: number;
119
+ readonly projects: readonly string[];
120
+ readonly benchmarks: readonly string[];
121
+ readonly arms: readonly string[];
122
+ readonly scenarios: readonly string[];
123
+ readonly passed: number;
124
+ readonly failed: number;
125
+ readonly inputTokens: number;
126
+ readonly outputTokens: number;
127
+ readonly costUsd: number;
128
+ readonly wallMs: number;
129
+ readonly integrityFailures: readonly string[];
130
+ readonly missingArtifacts: readonly string[];
131
+ }
132
+ interface ProductBenchmarkArtifactPaths {
133
+ readonly manifestPath: string;
134
+ readonly recordsPath: string;
135
+ }
136
+ declare function validateProductBenchmarkManifest(value: unknown): ProductBenchmarkManifest;
137
+ declare function validateProductBenchmarkRecord(value: unknown): ProductBenchmarkRecord;
138
+ declare function productBenchmarkIntegrityFailures(record: ProductBenchmarkRecord): string[];
139
+ declare function readProductBenchmarkRecords(path: string): ProductBenchmarkRecord[];
140
+ declare function readProductBenchmarkManifest(path: string): ProductBenchmarkManifest;
141
+ declare function validateProductBenchmarkRun(input: ProductBenchmarkRunInput): ProductBenchmarkValidationReport;
142
+ declare function findProductBenchmarkArtifacts(runDir: string): ProductBenchmarkArtifactPaths | null;
143
+
144
+ export { type AgentProfileRuntimeReceipt, type ProductBenchmarkArm, type ProductBenchmarkArtifactPaths, type ProductBenchmarkBudgets, type ProductBenchmarkManifest, type ProductBenchmarkProfileRef, type ProductBenchmarkRecord, type ProductBenchmarkRepoRef, type ProductBenchmarkRunInput, type ProductBenchmarkScenario, type ProductBenchmarkSplit, type ProductBenchmarkSubstrateVersions, type ProductBenchmarkValidationReport, type RuntimeResolution, findProductBenchmarkArtifacts, productBenchmarkIntegrityFailures, productBenchmarkSplits, readProductBenchmarkManifest, readProductBenchmarkRecords, validateProductBenchmarkManifest, validateProductBenchmarkRecord, validateProductBenchmarkRun };
@@ -0,0 +1,23 @@
1
+ import {
2
+ findProductBenchmarkArtifacts,
3
+ productBenchmarkIntegrityFailures,
4
+ productBenchmarkSplits,
5
+ readProductBenchmarkManifest,
6
+ readProductBenchmarkRecords,
7
+ validateProductBenchmarkManifest,
8
+ validateProductBenchmarkRecord,
9
+ validateProductBenchmarkRun
10
+ } from "../chunk-63MBSQTX.js";
11
+ import "../chunk-3BFEG2F6.js";
12
+ import "../chunk-PZ5AY32C.js";
13
+ export {
14
+ findProductBenchmarkArtifacts,
15
+ productBenchmarkIntegrityFailures,
16
+ productBenchmarkSplits,
17
+ readProductBenchmarkManifest,
18
+ readProductBenchmarkRecords,
19
+ validateProductBenchmarkManifest,
20
+ validateProductBenchmarkRecord,
21
+ validateProductBenchmarkRun
22
+ };
23
+ //# sourceMappingURL=index.js.map
@@ -1,9 +1,9 @@
1
- import { S as Scenario, g as Gate, G as GateResult, h as GateContext, C as CampaignResult, i as Mutator, f as SurfaceProposer, M as MutableSurface, j as GateDecision } from './types-Cv1bo4_a.js';
1
+ import { S as Scenario, g as Gate, G as GateResult, h as GateContext, C as CampaignResult, i as Mutator, f as SurfaceProposer, M as MutableSurface, j as GateDecision } from './types-fWqEJm7h.js';
2
2
  import { R as RedTeamCase } from './red-team-BWdoyleI.js';
3
3
  import { R as RunRecord } from './run-record-DEwidcqn.js';
4
4
  import { D as Direction } from './pareto-E-pembql.js';
5
5
  import { a as PairedBootstrapResult } from './statistics-xP-cWc5k.js';
6
- import { R as RunCampaignOptions, C as CampaignStorage } from './gepa-BRgNnmGZ.js';
6
+ import { R as RunCampaignOptions, C as CampaignStorage } from './gepa-CEy1AIWp.js';
7
7
  import { HostedClient, TraceSpanEvent } from './hosted/index.js';
8
8
 
9
9
  /**
package/dist/rl.d.ts CHANGED
@@ -10,7 +10,7 @@ import { R as Researcher, F as FailureMode, S as SteeringChange, E as Experiment
10
10
  export { r as runEvalCampaign } from './researcher-Ba2y1Foi.js';
11
11
  import { a as VerificationReport } from './multi-layer-verifier-DUZXrPDA.js';
12
12
  import { I as InterimReleaseConfidence } from './sequential-5iSVfzl2.js';
13
- import { C as CampaignResult } from './types-Cv1bo4_a.js';
13
+ import { C as CampaignResult } from './types-fWqEJm7h.js';
14
14
  import '@tangle-network/agent-interface';
15
15
  import './errors-CzMUYo7b.js';
16
16
  import './schema-m0gsnbt3.js';
@@ -1,10 +1,12 @@
1
1
  import {
2
+ planCampaignRun,
2
3
  runCampaign
3
- } from "./chunk-HRGTA6U5.js";
4
+ } from "./chunk-XIOQHCHU.js";
4
5
  import "./chunk-HRGUJTER.js";
5
6
  import "./chunk-3BFEG2F6.js";
6
7
  import "./chunk-PZ5AY32C.js";
7
8
  export {
9
+ planCampaignRun,
8
10
  runCampaign
9
11
  };
10
- //# sourceMappingURL=run-campaign-OWCFOEQG.js.map
12
+ //# sourceMappingURL=run-campaign-HG4WTSDH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -432,6 +432,9 @@ interface LabeledScenarioStore {
432
432
  }>;
433
433
  }
434
434
  interface CampaignCellResult<TArtifact> {
435
+ /** Manifest that produced this cell. Resumability refuses to reuse a cell
436
+ * whose manifest differs from the current run. */
437
+ manifestHash?: string;
435
438
  cellId: string;
436
439
  scenarioId: string;
437
440
  rep: number;
package/docs/concepts.md CHANGED
@@ -18,6 +18,7 @@ can; drop to the raw functions when you need lower-level control.
18
18
  |---|---|---|---|
19
19
  | **`defineAgentEval()`** | You have scenarios, an agent, a judge, and a baseline surface, and you want one object you can score or improve. | scenarios, agent, judge, baseline surface | `{ evaluate(), improve() }` where `evaluate()` returns a campaign result and `improve()` returns a decision packet |
20
20
  | **`selfImprove()`** | You have a closed loop — scenarios, judge, agent in hand, and you want the substrate to propose better candidates + gate them. | scenarios, agent, judge, baseline surface | `SelfImproveResult.insight: InsightReport` + ship/hold verdict + winner surface |
21
+ | **`loadEvalFixtureScenarios()`** | You want agents to add evals as folders with `PROMPT.md`, checks, and starter files. | `evals/<name>/PROMPT.md + EVAL.ts + package.json` | `Scenario[]` that runs through `runCampaign`; pair with `planEvalFixtureRun()` before spending tokens |
21
22
  | **`analyzeRuns()`** | You have observed runs (production traces, an approve/reject corpus, a CSV gold set) and want the same rigor packet without invoking an agent. | `RunRecord[]` + optional flags | `InsightReport` |
22
23
  | **Intake adapters** (`fromFeedbackTable`, `fromOtelSpans`) | Your data isn't already in `RunRecord` shape — it's in Obsidian, Sheets, an OTel collector, etc. | source-specific input | `RunRecord[]` ready to pipe into `analyzeRuns()` |
23
24
 
@@ -0,0 +1,115 @@
1
+ # Eval Fixtures
2
+
3
+ Use eval fixtures when you want the easiest coding-agent eval shape:
4
+
5
+ ```text
6
+ evals/
7
+ fix-login/
8
+ PROMPT.md
9
+ EVAL.ts
10
+ package.json
11
+ src/...
12
+ ```
13
+
14
+ This copies the best Vercel-style DX without adding a second runner. Fixtures
15
+ become `Scenario` rows, `planEvalFixtureRun()` tells you what is cached vs what
16
+ will run, and `runCampaign()` remains the only execution primitive.
17
+
18
+ ## When To Use It
19
+
20
+ Use fixtures when:
21
+
22
+ - a human or agent should add a new eval by creating one folder
23
+ - the prompt, starter files, and validation file should fingerprint together
24
+ - you want a dry run before spending model tokens
25
+ - a runtime or sandbox dispatch already knows how to run one scenario
26
+
27
+ Do not use fixtures to bypass campaign scoring, held-out gates, traces, or
28
+ backend checks. The fixture folder is input data; the dispatch still owns agent
29
+ execution.
30
+
31
+ ## API
32
+
33
+ ```ts
34
+ import {
35
+ discoverEvalFixtures,
36
+ loadEvalFixtureScenarios,
37
+ planEvalFixtureRun,
38
+ runCampaign,
39
+ } from '@tangle-network/agent-eval/campaign'
40
+ ```
41
+
42
+ | Export | Use |
43
+ | --- | --- |
44
+ | `discoverEvalFixtures(evalsDir)` | Return nested fixture names containing exact-case `PROMPT.md`. |
45
+ | `loadEvalFixture(evalsDir, name)` | Load one fixture, validate `EVAL.ts`/`EVAL.tsx` and `package.json`, compute a file fingerprint. |
46
+ | `loadEvalFixtureScenarios(evalsDir)` | Convert fixtures into `Scenario` rows for `runCampaign`. |
47
+ | `planEvalFixtureRun(opts)` | Preview cached vs runnable fixture cells without invoking the agent. |
48
+ | `planCampaignRun(opts)` | Same preview for any campaign scenario set. |
49
+
50
+ `validation: 'vitest'` is the default and requires `PROMPT.md`,
51
+ `EVAL.ts` or `EVAL.tsx`, and `package.json` with `"type": "module"`.
52
+ Use `validation: 'none'` for prompt-only corpora.
53
+
54
+ ## Minimal Flow
55
+
56
+ ```ts
57
+ const scenarios = loadEvalFixtureScenarios('evals', {
58
+ fingerprintConfig: {
59
+ model: 'claude-sonnet-4-6@2026-06-01',
60
+ tools: ['shell', 'edit'],
61
+ },
62
+ })
63
+
64
+ const plan = planEvalFixtureRun({
65
+ evalsDir: 'evals',
66
+ runDir: '.agent-eval/runs/coding',
67
+ dispatchRef: 'codex/sandbox/v1',
68
+ fingerprintConfig: {
69
+ model: 'claude-sonnet-4-6@2026-06-01',
70
+ tools: ['shell', 'edit'],
71
+ },
72
+ })
73
+
74
+ if (plan.cellsToRun > 0) {
75
+ await runCampaign({
76
+ scenarios,
77
+ dispatch,
78
+ dispatchRef: 'codex/sandbox/v1',
79
+ judges,
80
+ runDir: '.agent-eval/runs/coding',
81
+ expectUsage: 'assert',
82
+ })
83
+ }
84
+ ```
85
+
86
+ `dispatchRef` is part of the campaign manifest. Change it when the dispatch's
87
+ real behavior changes: model, tool set, sandbox profile, prompt wrapper, or
88
+ runtime strategy. That keeps resume caches honest.
89
+
90
+ ## What Agents Should Extend
91
+
92
+ Agents should add capability in this order:
93
+
94
+ 1. Add a fixture folder under `evals/<name>/`.
95
+ 2. Put the user task in `PROMPT.md`.
96
+ 3. Put deterministic checks in `EVAL.ts` when the task has a code artifact.
97
+ 4. Add starter files beside it.
98
+ 5. Update the dispatch that maps `EvalFixtureScenario` to the real runtime or
99
+ sandbox run.
100
+ 6. Add or tune judges only after deterministic checks exist.
101
+ 7. Run `planEvalFixtureRun()` before `runCampaign()` and report the counts.
102
+
103
+ Do not add a parallel cache. `runCampaign` stores `manifestHash` on each cached
104
+ cell and refuses stale reuse.
105
+
106
+ ## Example
107
+
108
+ Run the offline quickstart:
109
+
110
+ ```sh
111
+ pnpm tsx examples/eval-fixtures-quickstart/index.ts
112
+ ```
113
+
114
+ The example prints the plan before and after a run so you can see the cache
115
+ transition from `2 to run / 0 cached` to `0 to run / 2 cached`.
@@ -31,6 +31,7 @@ trying, and whether a change made them better or worse.
31
31
  | “Should the agent keep trying?” | `runAgentControlLoop` | Budgeted `observe -> validate -> decide -> act` runtime. |
32
32
  | “The agent should propose, verify, review, and revise.” | `runProposeReviewAsControlLoop` | Reusable preset over the generic control loop. |
33
33
  | “Human feedback should become reusable eval data.” | `FeedbackTrajectory` | Captures approvals, rejections, edits, choices, metrics, and policy blocks. |
34
+ | “I want Vercel-style eval folders agents can add quickly.” | `loadEvalFixtureScenarios`, `planEvalFixtureRun`, `runCampaign` | Folder-per-eval DX with campaign scoring and cache-safe dry runs. |
34
35
  | “Can this action run, or does it need approval?” | `evaluateActionPolicy` | Generic preflight for side effects, budgets, and required evidence. |
35
36
  | “I need train/dev/test/holdout examples.” | `Dataset` plus feedback trajectory conversion | Stable splits and contamination control. |
36
37
  | “Which prompt or signature wins?” | `runImprovementLoop`, steering optimizers | Runs variants on scenarios and compares scores. |
@@ -156,6 +157,7 @@ Store as `FeedbackTrajectory`, then derive:
156
157
  | Feedback data | `FeedbackTrajectory`, stores, converters | Human/environment labels | Domain adapters live in downstream repos. |
157
158
  | Action policy | `evaluateActionPolicy` | Approval/budget preflight | Blocks or labels actions before `act()`. |
158
159
  | Datasets | `Dataset`, holdout tools, canaries | Train/dev/test/holdout corpora | Keeps optimization honest. |
160
+ | Eval fixtures | `discoverEvalFixtures`, `loadEvalFixtureScenarios`, `planEvalFixtureRun` | Coding-agent eval folders | Vercel-style input shape; still executes through `runCampaign`. |
159
161
  | Optimization | `runImprovementLoop`, steering optimizers | Prompt/signature comparison | Use held-out gates before promotion. |
160
162
  | Evolution | prompt/code mutators, sandbox pool, telemetry | Autoresearch and mutation loops | Use budgets and lineage; do not run unbounded. |
161
163
  | Telemetry | `TraceStore`, OTLP, file sinks | Audit and replay | Treat traces as evidence, not just logs. |
@@ -201,6 +203,8 @@ Downstream integrations provide domain state, policy, tools, and storage.
201
203
 
202
204
  - `examples/same-sandbox-harness`: one workdir for install/build/test plus
203
205
  evidence inspection.
206
+ - `examples/eval-fixtures-quickstart`: Vercel-style fixture folders with a
207
+ dry-run plan and campaign cache reuse.
204
208
  - `examples/multi-shot-optimization`: full-trajectory optimization with a
205
209
  holdout gate.
206
210
  - `examples/benchmarks`: benchmark adapter contracts and reference wrappers.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-eval",
3
- "version": "0.100.1",
3
+ "version": "0.101.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": {
@@ -114,6 +114,11 @@
114
114
  "import": "./dist/perf/index.js",
115
115
  "default": "./dist/perf/index.js"
116
116
  },
117
+ "./product-benchmark": {
118
+ "types": "./dist/product-benchmark/index.d.ts",
119
+ "import": "./dist/product-benchmark/index.js",
120
+ "default": "./dist/product-benchmark/index.js"
121
+ },
117
122
  "./multishot": {
118
123
  "types": "./dist/multishot/index.d.ts",
119
124
  "import": "./dist/multishot/index.js",