@tangle-network/agent-eval 0.120.1 → 0.120.2

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 (171) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +1 -1
  3. package/dist/analyst/index.d.ts +0 -3111
  4. package/dist/analyst/index.js +0 -403
  5. package/dist/analyst/index.js.map +0 -1
  6. package/dist/authenticity/index.d.ts +0 -161
  7. package/dist/authenticity/index.js +0 -215
  8. package/dist/authenticity/index.js.map +0 -1
  9. package/dist/belief-state/index.d.ts +0 -1301
  10. package/dist/belief-state/index.js +0 -2152
  11. package/dist/belief-state/index.js.map +0 -1
  12. package/dist/benchmarks/index.d.ts +0 -974
  13. package/dist/benchmarks/index.js +0 -60
  14. package/dist/benchmarks/index.js.map +0 -1
  15. package/dist/builder-eval/index.d.ts +0 -695
  16. package/dist/builder-eval/index.js +0 -366
  17. package/dist/builder-eval/index.js.map +0 -1
  18. package/dist/campaign/index.d.ts +0 -7454
  19. package/dist/campaign/index.js +0 -272
  20. package/dist/campaign/index.js.map +0 -1
  21. package/dist/chunk-32BZXMSO.js +0 -3878
  22. package/dist/chunk-32BZXMSO.js.map +0 -1
  23. package/dist/chunk-3A246TSA.js +0 -998
  24. package/dist/chunk-3A246TSA.js.map +0 -1
  25. package/dist/chunk-3RF76KTD.js +0 -84
  26. package/dist/chunk-3RF76KTD.js.map +0 -1
  27. package/dist/chunk-3YYRZDON.js +0 -45
  28. package/dist/chunk-3YYRZDON.js.map +0 -1
  29. package/dist/chunk-4I2E3LLO.js +0 -1030
  30. package/dist/chunk-4I2E3LLO.js.map +0 -1
  31. package/dist/chunk-ARU2PZFM.js +0 -312
  32. package/dist/chunk-ARU2PZFM.js.map +0 -1
  33. package/dist/chunk-BOD4O7OF.js +0 -40
  34. package/dist/chunk-BOD4O7OF.js.map +0 -1
  35. package/dist/chunk-DPZAEKA6.js +0 -880
  36. package/dist/chunk-DPZAEKA6.js.map +0 -1
  37. package/dist/chunk-DTJ6QUQB.js +0 -131
  38. package/dist/chunk-DTJ6QUQB.js.map +0 -1
  39. package/dist/chunk-GGE4NNQT.js +0 -65
  40. package/dist/chunk-GGE4NNQT.js.map +0 -1
  41. package/dist/chunk-H5UD2323.js +0 -286
  42. package/dist/chunk-H5UD2323.js.map +0 -1
  43. package/dist/chunk-HHWE3POT.js +0 -94
  44. package/dist/chunk-HHWE3POT.js.map +0 -1
  45. package/dist/chunk-HKUCJ437.js +0 -787
  46. package/dist/chunk-HKUCJ437.js.map +0 -1
  47. package/dist/chunk-JHCHEVET.js +0 -274
  48. package/dist/chunk-JHCHEVET.js.map +0 -1
  49. package/dist/chunk-JHOJHHU7.js +0 -867
  50. package/dist/chunk-JHOJHHU7.js.map +0 -1
  51. package/dist/chunk-JM2SKQMS.js +0 -750
  52. package/dist/chunk-JM2SKQMS.js.map +0 -1
  53. package/dist/chunk-JN2FCO5W.js +0 -7958
  54. package/dist/chunk-JN2FCO5W.js.map +0 -1
  55. package/dist/chunk-K4DBDHLK.js +0 -158
  56. package/dist/chunk-K4DBDHLK.js.map +0 -1
  57. package/dist/chunk-K6N6XJJX.js +0 -306
  58. package/dist/chunk-K6N6XJJX.js.map +0 -1
  59. package/dist/chunk-MA6HLL3S.js +0 -65
  60. package/dist/chunk-MA6HLL3S.js.map +0 -1
  61. package/dist/chunk-MAZ26DC7.js +0 -99
  62. package/dist/chunk-MAZ26DC7.js.map +0 -1
  63. package/dist/chunk-MOXWMGPC.js +0 -577
  64. package/dist/chunk-MOXWMGPC.js.map +0 -1
  65. package/dist/chunk-NJC7U437.js +0 -626
  66. package/dist/chunk-NJC7U437.js.map +0 -1
  67. package/dist/chunk-NPCTHQIO.js +0 -91
  68. package/dist/chunk-NPCTHQIO.js.map +0 -1
  69. package/dist/chunk-ONWEPEDO.js +0 -57
  70. package/dist/chunk-ONWEPEDO.js.map +0 -1
  71. package/dist/chunk-OYZAPX5G.js +0 -1526
  72. package/dist/chunk-OYZAPX5G.js.map +0 -1
  73. package/dist/chunk-PC4UYEBM.js +0 -166
  74. package/dist/chunk-PC4UYEBM.js.map +0 -1
  75. package/dist/chunk-PICTDURQ.js +0 -766
  76. package/dist/chunk-PICTDURQ.js.map +0 -1
  77. package/dist/chunk-PJQFMIOX.js +0 -1182
  78. package/dist/chunk-PJQFMIOX.js.map +0 -1
  79. package/dist/chunk-PXD6ZFNY.js +0 -1107
  80. package/dist/chunk-PXD6ZFNY.js.map +0 -1
  81. package/dist/chunk-PXE2VKMX.js +0 -140
  82. package/dist/chunk-PXE2VKMX.js.map +0 -1
  83. package/dist/chunk-PZ5AY32C.js +0 -10
  84. package/dist/chunk-PZ5AY32C.js.map +0 -1
  85. package/dist/chunk-QBRSJK47.js +0 -622
  86. package/dist/chunk-QBRSJK47.js.map +0 -1
  87. package/dist/chunk-QWMPPZ3X.js +0 -550
  88. package/dist/chunk-QWMPPZ3X.js.map +0 -1
  89. package/dist/chunk-S3UZOQ5Y.js +0 -328
  90. package/dist/chunk-S3UZOQ5Y.js.map +0 -1
  91. package/dist/chunk-S5TT5R3L.js +0 -2668
  92. package/dist/chunk-S5TT5R3L.js.map +0 -1
  93. package/dist/chunk-T4SQEITX.js +0 -95
  94. package/dist/chunk-T4SQEITX.js.map +0 -1
  95. package/dist/chunk-TT4KNT67.js +0 -124
  96. package/dist/chunk-TT4KNT67.js.map +0 -1
  97. package/dist/chunk-U5CHZ5M3.js +0 -357
  98. package/dist/chunk-U5CHZ5M3.js.map +0 -1
  99. package/dist/chunk-ULOKLHIQ.js +0 -1937
  100. package/dist/chunk-ULOKLHIQ.js.map +0 -1
  101. package/dist/chunk-VI2UW6B6.js +0 -162
  102. package/dist/chunk-VI2UW6B6.js.map +0 -1
  103. package/dist/chunk-VQMK5FMP.js +0 -247
  104. package/dist/chunk-VQMK5FMP.js.map +0 -1
  105. package/dist/chunk-VSMTAMNK.js +0 -53
  106. package/dist/chunk-VSMTAMNK.js.map +0 -1
  107. package/dist/chunk-VZSRQ272.js +0 -149
  108. package/dist/chunk-VZSRQ272.js.map +0 -1
  109. package/dist/chunk-WW2A73HW.js +0 -159
  110. package/dist/chunk-WW2A73HW.js.map +0 -1
  111. package/dist/chunk-X4UCIOTZ.js +0 -136
  112. package/dist/chunk-X4UCIOTZ.js.map +0 -1
  113. package/dist/chunk-XDIRG3TO.js +0 -1266
  114. package/dist/chunk-XDIRG3TO.js.map +0 -1
  115. package/dist/chunk-XJYR7XFV.js +0 -317
  116. package/dist/chunk-XJYR7XFV.js.map +0 -1
  117. package/dist/chunk-ZET2UAYW.js +0 -89
  118. package/dist/chunk-ZET2UAYW.js.map +0 -1
  119. package/dist/chunk-ZZUXHH3R.js +0 -99
  120. package/dist/chunk-ZZUXHH3R.js.map +0 -1
  121. package/dist/cli.d.ts +0 -1
  122. package/dist/cli.js +0 -112
  123. package/dist/cli.js.map +0 -1
  124. package/dist/contract/index.d.ts +0 -4972
  125. package/dist/contract/index.js +0 -1654
  126. package/dist/contract/index.js.map +0 -1
  127. package/dist/control.d.ts +0 -1013
  128. package/dist/control.js +0 -34
  129. package/dist/control.js.map +0 -1
  130. package/dist/fuzz.d.ts +0 -759
  131. package/dist/fuzz.js +0 -714
  132. package/dist/fuzz.js.map +0 -1
  133. package/dist/hosted/index.d.ts +0 -730
  134. package/dist/hosted/index.js +0 -14
  135. package/dist/hosted/index.js.map +0 -1
  136. package/dist/index.d.ts +0 -16780
  137. package/dist/index.js +0 -12168
  138. package/dist/index.js.map +0 -1
  139. package/dist/matrix/index.d.ts +0 -155
  140. package/dist/matrix/index.js +0 -8
  141. package/dist/matrix/index.js.map +0 -1
  142. package/dist/meta-eval/index.d.ts +0 -1030
  143. package/dist/meta-eval/index.js +0 -417
  144. package/dist/meta-eval/index.js.map +0 -1
  145. package/dist/multishot/index.d.ts +0 -579
  146. package/dist/multishot/index.js +0 -589
  147. package/dist/multishot/index.js.map +0 -1
  148. package/dist/openapi.json +0 -992
  149. package/dist/pipelines/index.d.ts +0 -567
  150. package/dist/pipelines/index.js +0 -515
  151. package/dist/pipelines/index.js.map +0 -1
  152. package/dist/reporting.d.ts +0 -1277
  153. package/dist/reporting.js +0 -48
  154. package/dist/reporting.js.map +0 -1
  155. package/dist/rl.d.ts +0 -4092
  156. package/dist/rl.js +0 -1724
  157. package/dist/rl.js.map +0 -1
  158. package/dist/run-campaign-HNFPJET4.js +0 -14
  159. package/dist/run-campaign-HNFPJET4.js.map +0 -1
  160. package/dist/storyboard/index.d.ts +0 -279
  161. package/dist/storyboard/index.js +0 -767
  162. package/dist/storyboard/index.js.map +0 -1
  163. package/dist/trace-attributes.d.ts +0 -52
  164. package/dist/trace-attributes.js +0 -62
  165. package/dist/trace-attributes.js.map +0 -1
  166. package/dist/traces.d.ts +0 -2343
  167. package/dist/traces.js +0 -249
  168. package/dist/traces.js.map +0 -1
  169. package/dist/wire/index.d.ts +0 -1252
  170. package/dist/wire/index.js +0 -81
  171. package/dist/wire/index.js.map +0 -1
@@ -1,366 +0,0 @@
1
- import {
2
- SandboxHarness,
3
- runTestGradedScenario
4
- } from "../chunk-K6N6XJJX.js";
5
- import {
6
- pearsonR,
7
- spearmanR
8
- } from "../chunk-PJQFMIOX.js";
9
- import {
10
- judgeSpans
11
- } from "../chunk-ZET2UAYW.js";
12
- import {
13
- TraceEmitter
14
- } from "../chunk-VQMK5FMP.js";
15
- import "../chunk-MA6HLL3S.js";
16
- import "../chunk-ONWEPEDO.js";
17
- import "../chunk-PZ5AY32C.js";
18
-
19
- // src/builder-eval/builder-session.ts
20
- var BuilderSession = class {
21
- store;
22
- builderEmitter;
23
- projectId;
24
- chatId;
25
- builderRunId;
26
- lastBuildRunId;
27
- defaultDriver;
28
- constructor(store, init, driver) {
29
- this.store = store;
30
- this.projectId = init.projectId;
31
- this.chatId = init.chatId ?? cryptoId();
32
- this.defaultDriver = driver;
33
- this.builderEmitter = new TraceEmitter(store);
34
- }
35
- /** Start the builder (L0) run for this chat. Returns the runId. */
36
- async startChat(scenarioId = `${this.projectId}/chat`) {
37
- await this.builderEmitter.startRun({
38
- scenarioId,
39
- projectId: this.projectId,
40
- chatId: this.chatId,
41
- layer: "builder"
42
- });
43
- this.builderRunId = this.builderEmitter.runId;
44
- return this.builderRunId;
45
- }
46
- /** The emitter for builder-level spans (edits, LLM calls, tool invocations). */
47
- get emitter() {
48
- if (!this.builderRunId) throw new Error("BuilderSession.emitter: call startChat() first");
49
- return this.builderEmitter;
50
- }
51
- /**
52
- * Ship the project's generated app: run the sandbox harness as a child
53
- * Run (`layer='app-build'`). Returns the build result + runId.
54
- */
55
- async ship(options) {
56
- if (!this.builderRunId) throw new Error("BuilderSession.ship: call startChat() first");
57
- const buildEmitter = new TraceEmitter(this.store);
58
- await buildEmitter.startRun({
59
- scenarioId: options.scenarioId ?? `${this.projectId}/build`,
60
- projectId: this.projectId,
61
- chatId: this.chatId,
62
- parentRunId: this.builderRunId,
63
- layer: "app-build"
64
- });
65
- const harness = new SandboxHarness(options.driver ?? this.defaultDriver);
66
- const result = await harness.run(options.harness, buildEmitter);
67
- await buildEmitter.endRun({
68
- pass: result.passed,
69
- score: result.score,
70
- failureClass: result.passed ? "success" : "sandbox_failure"
71
- });
72
- this.lastBuildRunId = buildEmitter.runId;
73
- return { runId: buildEmitter.runId, result };
74
- }
75
- /**
76
- * Run a domain scenario against the just-built app as a grandchild Run
77
- * (`layer='app-runtime'`). The `ship` call must precede this so the
78
- * parent is set correctly; if no build exists yet the session attaches
79
- * directly to the builder run (useful for prototypes).
80
- */
81
- async runAppScenario(options) {
82
- const parentRunId = this.lastBuildRunId ?? this.builderRunId;
83
- if (!parentRunId)
84
- throw new Error("BuilderSession.runAppScenario: call startChat() + ship() first");
85
- const { scenario, driver } = options;
86
- const result = await runTestGradedScenario(scenario, this.store, {
87
- driver: driver ?? this.defaultDriver,
88
- provenance: { codeSha: void 0, promptSha: void 0, modelFingerprint: void 0 }
89
- });
90
- await this.store.updateRun(result.runId, {
91
- parentRunId,
92
- projectId: this.projectId,
93
- chatId: this.chatId,
94
- layer: "app-runtime"
95
- });
96
- return result;
97
- }
98
- /** Record an end-of-chat meta score (judge verdict on whether the builder
99
- * served the user's intent). Accepts a numeric score + optional rationale. */
100
- async recordMetaScore(score, rationale) {
101
- if (!this.builderRunId)
102
- throw new Error("BuilderSession.recordMetaScore: call startChat() first");
103
- await this.builderEmitter.recordJudge({
104
- judgeId: "builder-meta",
105
- targetSpanId: this.builderRunId,
106
- // attach to the builder run itself
107
- dimension: "user_intent_satisfaction",
108
- score,
109
- rationale,
110
- name: "builder-meta"
111
- });
112
- }
113
- /** Close the builder Run with a final outcome. */
114
- async endChat(outcome) {
115
- await this.builderEmitter.endRun({
116
- pass: outcome.pass,
117
- score: outcome.score,
118
- notes: outcome.notes
119
- });
120
- }
121
- /**
122
- * Inline app-runtime run — for cases where the "scenario" isn't a
123
- * SWE-bench-style test suite but a live agent interaction (LLM chat,
124
- * domain flow). Returns an emitter bound to a fresh Run in the
125
- * `app-runtime` layer; caller emits spans inside and calls
126
- * `.endRun()` with the final verdict.
127
- */
128
- async startAppRuntime(scenarioId) {
129
- const parentRunId = this.lastBuildRunId ?? this.builderRunId;
130
- if (!parentRunId)
131
- throw new Error(
132
- "BuilderSession.startAppRuntime: call startChat() + (optionally) ship() first"
133
- );
134
- const emitter = new TraceEmitter(this.store);
135
- await emitter.startRun({
136
- scenarioId,
137
- projectId: this.projectId,
138
- chatId: this.chatId,
139
- parentRunId,
140
- layer: "app-runtime"
141
- });
142
- return emitter;
143
- }
144
- /**
145
- * Lightweight "ship marker" — record an app-build Run with a caller-
146
- * provided verdict. Use when there isn't a sandbox harness to run but
147
- * you still want to mark the build state at publish time.
148
- */
149
- async recordShipMarker(args) {
150
- if (!this.builderRunId)
151
- throw new Error("BuilderSession.recordShipMarker: call startChat() first");
152
- const emitter = new TraceEmitter(this.store);
153
- await emitter.startRun({
154
- scenarioId: args.scenarioId ?? `${this.projectId}/ship`,
155
- projectId: this.projectId,
156
- chatId: this.chatId,
157
- parentRunId: this.builderRunId,
158
- layer: "app-build"
159
- });
160
- await emitter.endRun({
161
- pass: args.pass,
162
- score: args.score,
163
- failureClass: args.pass ? "success" : "sandbox_failure",
164
- notes: args.notes
165
- });
166
- this.lastBuildRunId = emitter.runId;
167
- return emitter.runId;
168
- }
169
- get lastBuildRunIdValue() {
170
- return this.lastBuildRunId;
171
- }
172
- get builderRunIdValue() {
173
- return this.builderRunId;
174
- }
175
- };
176
- async function resumeBuilderSession(store, projectId) {
177
- const runs = await store.listRuns({ projectId });
178
- const chatRuns = runs.filter((r) => r.layer === "builder").sort((a, b) => b.startedAt - a.startedAt);
179
- const buildRuns = runs.filter((r) => r.layer === "app-build").sort((a, b) => b.startedAt - a.startedAt);
180
- const appRuntimeRuns = runs.filter((r) => r.layer === "app-runtime").sort((a, b) => b.startedAt - a.startedAt);
181
- return {
182
- projectId,
183
- chatRuns,
184
- lastBuilderRun: chatRuns[0],
185
- lastBuildRun: buildRuns[0],
186
- lastAppRuntimeRuns: appRuntimeRuns
187
- };
188
- }
189
- function cryptoId() {
190
- if (typeof globalThis.crypto?.randomUUID === "function") return globalThis.crypto.randomUUID();
191
- return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
192
- }
193
-
194
- // src/builder-eval/correlation.ts
195
- function correlateLayers(reports) {
196
- const completeProjects = reports.filter((r) => r.complete).length;
197
- return {
198
- metaVsBuild: pairwise(
199
- reports,
200
- (r) => r.metaScore,
201
- (r) => r.buildScore
202
- ),
203
- metaVsRuntime: pairwise(
204
- reports,
205
- (r) => r.metaScore,
206
- (r) => r.runtimeScore
207
- ),
208
- buildVsRuntime: pairwise(
209
- reports,
210
- (r) => r.buildScore,
211
- (r) => r.runtimeScore
212
- ),
213
- completeProjects
214
- };
215
- }
216
- function pairwise(reports, a, b) {
217
- const xs = [];
218
- const ys = [];
219
- for (const r of reports) {
220
- const x = a(r);
221
- const y = b(r);
222
- if (x !== null && y !== null && Number.isFinite(x) && Number.isFinite(y)) {
223
- xs.push(x);
224
- ys.push(y);
225
- }
226
- }
227
- if (xs.length < 2) return void 0;
228
- return {
229
- n: xs.length,
230
- pearson: pearsonR(xs, ys),
231
- spearman: spearmanR(xs, ys)
232
- };
233
- }
234
-
235
- // src/builder-eval/project-registry.ts
236
- var ProjectRegistry = class {
237
- constructor(store) {
238
- this.store = store;
239
- }
240
- store;
241
- async listProjects() {
242
- const runs = await this.store.listRuns();
243
- const byProject = /* @__PURE__ */ new Map();
244
- for (const r of runs) {
245
- if (!r.projectId) continue;
246
- const arr = byProject.get(r.projectId) ?? [];
247
- arr.push(r);
248
- byProject.set(r.projectId, arr);
249
- }
250
- const summaries = [];
251
- for (const [projectId, projectRuns] of byProject) {
252
- const sorted = projectRuns.slice().sort((a, b) => b.startedAt - a.startedAt);
253
- const chats = projectRuns.filter((r) => r.layer === "builder");
254
- const builds = projectRuns.filter((r) => r.layer === "app-build");
255
- const runtimes = projectRuns.filter((r) => r.layer === "app-runtime");
256
- const latest = sorted[0];
257
- if (!latest) continue;
258
- summaries.push({
259
- projectId,
260
- chatCount: chats.length,
261
- buildCount: builds.length,
262
- appRuntimeCount: runtimes.length,
263
- lastActivityAt: latest.startedAt,
264
- latestChatId: chats[0]?.chatId,
265
- latestOutcome: latest.outcome ? { pass: latest.outcome.pass ?? false, score: latest.outcome.score } : void 0
266
- });
267
- }
268
- return summaries.sort((a, b) => b.lastActivityAt - a.lastActivityAt);
269
- }
270
- async projectTimeline(projectId) {
271
- const runs = await this.store.listRuns({ projectId });
272
- const ordered = runs.slice().sort((a, b) => a.startedAt - b.startedAt);
273
- return ordered.map((run) => ({
274
- run,
275
- layerBucket: run.layer === "builder" ? "chat" : run.layer === "app-build" ? "build" : run.layer === "app-runtime" ? "runtime" : "other"
276
- }));
277
- }
278
- async projectChats(projectId) {
279
- const builderRuns = (await this.store.listRuns({ projectId, layer: "builder" })).sort(
280
- (a, b) => b.startedAt - a.startedAt
281
- );
282
- const childrenFor = async (runId) => this.store.listRuns({ parentRunId: runId });
283
- const out = [];
284
- for (const run of builderRuns) {
285
- const spans = await this.store.spans({ runId: run.runId });
286
- const children = await childrenFor(run.runId);
287
- const build = children.find((c) => c.layer === "app-build");
288
- const runtime = [];
289
- if (build) {
290
- const grands = await childrenFor(build.runId);
291
- for (const g of grands) if (g.layer === "app-runtime") runtime.push(g.runId);
292
- }
293
- for (const c of children) if (c.layer === "app-runtime") runtime.push(c.runId);
294
- out.push({
295
- chatId: run.chatId ?? run.runId,
296
- projectId,
297
- builderRunId: run.runId,
298
- startedAt: run.startedAt,
299
- endedAt: run.endedAt,
300
- status: run.status,
301
- outcome: run.outcome,
302
- llmTurns: spans.filter((s) => s.kind === "llm").length,
303
- toolCalls: spans.filter((s) => s.kind === "tool").length,
304
- buildRunId: build?.runId,
305
- appRuntimeRunIds: runtime
306
- });
307
- }
308
- return out;
309
- }
310
- };
311
-
312
- // src/builder-eval/three-layer-eval.ts
313
- async function scoreProject(store, projectId) {
314
- const allRuns = await store.listRuns({ projectId });
315
- const builder = latestByLayer(allRuns, "builder");
316
- const build = latestByLayer(allRuns, "app-build");
317
- const runtime = allRuns.filter((r) => r.layer === "app-runtime");
318
- const metaScore = builder ? await extractMetaScore(store, builder.runId) : null;
319
- const buildScore = build?.outcome?.score ?? null;
320
- const runtimeScores = runtime.map((r) => r.outcome?.score).filter((s) => typeof s === "number");
321
- const runtimeScore = runtimeScores.length > 0 ? runtimeScores.reduce((a, b) => a + b, 0) / runtimeScores.length : null;
322
- const runtimePassed = runtime.filter((r) => r.outcome?.pass === true).length;
323
- const runtimePassRate = runtime.length > 0 ? runtimePassed / runtime.length : null;
324
- const kind = runtime.length === 0 ? "scaffold-only" : "full";
325
- const complete = kind === "scaffold-only" ? metaScore !== null && buildScore !== null : metaScore !== null && buildScore !== null && runtimeScore !== null;
326
- return {
327
- projectId,
328
- kind,
329
- builderRunId: builder?.runId,
330
- metaScore,
331
- buildRunId: build?.runId,
332
- buildScore,
333
- appRuntimeRunIds: runtime.map((r) => r.runId),
334
- runtimeScore,
335
- runtimePassRate,
336
- complete
337
- };
338
- }
339
- async function scoreAllProjects(store) {
340
- const runs = await store.listRuns();
341
- const projectIds = [...new Set(runs.map((r) => r.projectId).filter((p) => !!p))];
342
- return Promise.all(projectIds.map((p) => scoreProject(store, p)));
343
- }
344
- function latestByLayer(runs, layer) {
345
- const filtered = runs.filter((r) => r.layer === layer).sort((a, b) => b.startedAt - a.startedAt);
346
- return filtered[0];
347
- }
348
- async function extractMetaScore(store, builderRunId) {
349
- const js = await judgeSpans(store, builderRunId);
350
- const meta = js.find(
351
- (s) => s.judgeId === "builder-meta" && s.dimension === "user_intent_satisfaction"
352
- );
353
- if (!meta) return null;
354
- if (meta.score >= 0 && meta.score <= 1) return meta.score;
355
- if (meta.score >= 0 && meta.score <= 10) return meta.score / 10;
356
- return null;
357
- }
358
- export {
359
- BuilderSession,
360
- ProjectRegistry,
361
- correlateLayers,
362
- resumeBuilderSession,
363
- scoreAllProjects,
364
- scoreProject
365
- };
366
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/builder-eval/builder-session.ts","../../src/builder-eval/correlation.ts","../../src/builder-eval/project-registry.ts","../../src/builder-eval/three-layer-eval.ts"],"sourcesContent":["/**\n * BuilderSession — ties a builder-of-builders workflow together.\n *\n * Models agent-builder's shape: Project → Chat → Edit → Ship → App →\n * AppAgent. Each layer is a Run (linked via parentRunId). The\n * framework-enforced invariants:\n *\n * - One Project → many Chats; chatId scopes runs within a project.\n * - One Chat = one builder Run with `layer='builder'`.\n * - One Ship = one child Run with `layer='app-build'` + SandboxHarness.\n * - One AppScenario = one grandchild Run with `layer='app-runtime'`.\n *\n * Consumers obtain a BuilderSession, call `startChat`, drive the\n * builder agent (emitting spans), and call `ship` / `runAppScenario`\n * as the workflow progresses. The session reconstructs itself from\n * trace data via `resume(store, projectId)`.\n */\n\nimport type { HarnessConfig, SandboxDriver, SandboxHarnessResult } from '../sandbox-harness'\nimport { SandboxHarness } from '../sandbox-harness'\nimport type { TestGradedRunResult, TestGradedScenario } from '../test-graded-scenario'\nimport { runTestGradedScenario } from '../test-graded-scenario'\nimport { TraceEmitter } from '../trace/emitter'\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport interface BuilderSessionInit {\n projectId: string\n chatId?: string\n /** Free-form: user's task description, project name, etc. Stored on the builder Run. */\n tags?: Record<string, string>\n}\n\nexport interface ShipOptions {\n harness: HarnessConfig\n driver?: SandboxDriver\n /** scenarioId of this app-build run. Defaults to `${projectId}/build`. */\n scenarioId?: string\n}\n\nexport interface RunAppScenarioOptions {\n scenario: TestGradedScenario\n /** Harness driver override; defaults to the one the session was created with. */\n driver?: SandboxDriver\n}\n\nexport class BuilderSession {\n private store: TraceStore\n private builderEmitter: TraceEmitter\n readonly projectId: string\n readonly chatId: string\n private builderRunId?: string\n private lastBuildRunId?: string\n private defaultDriver?: SandboxDriver\n\n constructor(store: TraceStore, init: BuilderSessionInit, driver?: SandboxDriver) {\n this.store = store\n this.projectId = init.projectId\n this.chatId = init.chatId ?? cryptoId()\n this.defaultDriver = driver\n this.builderEmitter = new TraceEmitter(store)\n }\n\n /** Start the builder (L0) run for this chat. Returns the runId. */\n async startChat(scenarioId = `${this.projectId}/chat`): Promise<string> {\n await this.builderEmitter.startRun({\n scenarioId,\n projectId: this.projectId,\n chatId: this.chatId,\n layer: 'builder',\n })\n this.builderRunId = this.builderEmitter.runId\n return this.builderRunId\n }\n\n /** The emitter for builder-level spans (edits, LLM calls, tool invocations). */\n get emitter(): TraceEmitter {\n if (!this.builderRunId) throw new Error('BuilderSession.emitter: call startChat() first')\n return this.builderEmitter\n }\n\n /**\n * Ship the project's generated app: run the sandbox harness as a child\n * Run (`layer='app-build'`). Returns the build result + runId.\n */\n async ship(options: ShipOptions): Promise<{ runId: string; result: SandboxHarnessResult }> {\n if (!this.builderRunId) throw new Error('BuilderSession.ship: call startChat() first')\n const buildEmitter = new TraceEmitter(this.store)\n await buildEmitter.startRun({\n scenarioId: options.scenarioId ?? `${this.projectId}/build`,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId: this.builderRunId,\n layer: 'app-build',\n })\n const harness = new SandboxHarness(options.driver ?? this.defaultDriver)\n const result = await harness.run(options.harness, buildEmitter)\n await buildEmitter.endRun({\n pass: result.passed,\n score: result.score,\n failureClass: result.passed ? 'success' : 'sandbox_failure',\n })\n this.lastBuildRunId = buildEmitter.runId\n return { runId: buildEmitter.runId, result }\n }\n\n /**\n * Run a domain scenario against the just-built app as a grandchild Run\n * (`layer='app-runtime'`). The `ship` call must precede this so the\n * parent is set correctly; if no build exists yet the session attaches\n * directly to the builder run (useful for prototypes).\n */\n async runAppScenario(options: RunAppScenarioOptions): Promise<TestGradedRunResult> {\n const parentRunId = this.lastBuildRunId ?? this.builderRunId\n if (!parentRunId)\n throw new Error('BuilderSession.runAppScenario: call startChat() + ship() first')\n const { scenario, driver } = options\n const result = await runTestGradedScenario(scenario, this.store, {\n driver: driver ?? this.defaultDriver,\n provenance: { codeSha: undefined, promptSha: undefined, modelFingerprint: undefined },\n })\n // Attach to the parent chain by updating the stored Run in place.\n await this.store.updateRun(result.runId, {\n parentRunId,\n projectId: this.projectId,\n chatId: this.chatId,\n layer: 'app-runtime',\n })\n return result\n }\n\n /** Record an end-of-chat meta score (judge verdict on whether the builder\n * served the user's intent). Accepts a numeric score + optional rationale. */\n async recordMetaScore(score: number, rationale?: string): Promise<void> {\n if (!this.builderRunId)\n throw new Error('BuilderSession.recordMetaScore: call startChat() first')\n await this.builderEmitter.recordJudge({\n judgeId: 'builder-meta',\n targetSpanId: this.builderRunId, // attach to the builder run itself\n dimension: 'user_intent_satisfaction',\n score,\n rationale,\n name: 'builder-meta',\n })\n }\n\n /** Close the builder Run with a final outcome. */\n async endChat(outcome: { pass: boolean; score?: number; notes?: string }): Promise<void> {\n await this.builderEmitter.endRun({\n pass: outcome.pass,\n score: outcome.score,\n notes: outcome.notes,\n })\n }\n\n /**\n * Inline app-runtime run — for cases where the \"scenario\" isn't a\n * SWE-bench-style test suite but a live agent interaction (LLM chat,\n * domain flow). Returns an emitter bound to a fresh Run in the\n * `app-runtime` layer; caller emits spans inside and calls\n * `.endRun()` with the final verdict.\n */\n async startAppRuntime(scenarioId: string): Promise<TraceEmitter> {\n const parentRunId = this.lastBuildRunId ?? this.builderRunId\n if (!parentRunId)\n throw new Error(\n 'BuilderSession.startAppRuntime: call startChat() + (optionally) ship() first',\n )\n const emitter = new TraceEmitter(this.store)\n await emitter.startRun({\n scenarioId,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId,\n layer: 'app-runtime',\n })\n return emitter\n }\n\n /**\n * Lightweight \"ship marker\" — record an app-build Run with a caller-\n * provided verdict. Use when there isn't a sandbox harness to run but\n * you still want to mark the build state at publish time.\n */\n async recordShipMarker(args: {\n pass: boolean\n score: number\n scenarioId?: string\n notes?: string\n }): Promise<string> {\n if (!this.builderRunId)\n throw new Error('BuilderSession.recordShipMarker: call startChat() first')\n const emitter = new TraceEmitter(this.store)\n await emitter.startRun({\n scenarioId: args.scenarioId ?? `${this.projectId}/ship`,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId: this.builderRunId,\n layer: 'app-build',\n })\n await emitter.endRun({\n pass: args.pass,\n score: args.score,\n failureClass: args.pass ? 'success' : 'sandbox_failure',\n notes: args.notes,\n })\n this.lastBuildRunId = emitter.runId\n return emitter.runId\n }\n\n get lastBuildRunIdValue(): string | undefined {\n return this.lastBuildRunId\n }\n get builderRunIdValue(): string | undefined {\n return this.builderRunId\n }\n}\n\n/**\n * Reconstruct the most recent BuilderSession state for a given project —\n * returns { builderRunId, lastBuildRunId, chatRuns }. For chat-first UIs\n * this is how a resumed session finds its place in the edit history.\n */\nexport async function resumeBuilderSession(\n store: TraceStore,\n projectId: string,\n): Promise<{\n projectId: string\n chatRuns: Run[]\n lastBuilderRun?: Run\n lastBuildRun?: Run\n lastAppRuntimeRuns: Run[]\n}> {\n const runs = await store.listRuns({ projectId })\n const chatRuns = runs\n .filter((r) => r.layer === 'builder')\n .sort((a, b) => b.startedAt - a.startedAt)\n const buildRuns = runs\n .filter((r) => r.layer === 'app-build')\n .sort((a, b) => b.startedAt - a.startedAt)\n const appRuntimeRuns = runs\n .filter((r) => r.layer === 'app-runtime')\n .sort((a, b) => b.startedAt - a.startedAt)\n return {\n projectId,\n chatRuns,\n lastBuilderRun: chatRuns[0],\n lastBuildRun: buildRuns[0],\n lastAppRuntimeRuns: appRuntimeRuns,\n }\n}\n\nfunction cryptoId(): string {\n if (typeof globalThis.crypto?.randomUUID === 'function') return globalThis.crypto.randomUUID()\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`\n}\n","/**\n * Meta-eval correlation — the highest-leverage signal in the framework.\n *\n * Given a corpus of three-layer project reports, compute how well each\n * pair of layers correlates. The question we care about most:\n *\n * Does `metaScore` (what the builder thinks it did) predict\n * `runtimeScore` (what the user actually gets)?\n *\n * If r < ~0.4, the builder's self-scoring is broken — it's optimizing\n * for something other than real-world success. If r > 0.7, meta_score\n * is a usable proxy and can drive CI gates cheaply.\n *\n * Non-parametric rank correlation (Spearman) is also reported because\n * meta scores are often ordinal-ish.\n */\n\nimport { pearsonR, spearmanR } from '../statistics'\nimport type { ThreeLayerProjectReport } from './three-layer-eval'\n\nexport interface LayerCorrelation {\n n: number\n pearson: number\n spearman: number\n}\n\nexport interface CorrelationReport {\n /** Pairs present in the corpus (layers with ≥ 2 matched data points). */\n metaVsBuild?: LayerCorrelation\n metaVsRuntime?: LayerCorrelation\n buildVsRuntime?: LayerCorrelation\n /** Number of complete projects (all 3 scores present). */\n completeProjects: number\n}\n\nexport function correlateLayers(reports: ThreeLayerProjectReport[]): CorrelationReport {\n const completeProjects = reports.filter((r) => r.complete).length\n return {\n metaVsBuild: pairwise(\n reports,\n (r) => r.metaScore,\n (r) => r.buildScore,\n ),\n metaVsRuntime: pairwise(\n reports,\n (r) => r.metaScore,\n (r) => r.runtimeScore,\n ),\n buildVsRuntime: pairwise(\n reports,\n (r) => r.buildScore,\n (r) => r.runtimeScore,\n ),\n completeProjects,\n }\n}\n\nfunction pairwise(\n reports: ThreeLayerProjectReport[],\n a: (r: ThreeLayerProjectReport) => number | null,\n b: (r: ThreeLayerProjectReport) => number | null,\n): LayerCorrelation | undefined {\n const xs: number[] = []\n const ys: number[] = []\n for (const r of reports) {\n const x = a(r)\n const y = b(r)\n if (x !== null && y !== null && Number.isFinite(x) && Number.isFinite(y)) {\n xs.push(x)\n ys.push(y)\n }\n }\n if (xs.length < 2) return undefined\n return {\n n: xs.length,\n pearson: pearsonR(xs, ys),\n spearman: spearmanR(xs, ys),\n }\n}\n","/**\n * ProjectRegistry — project-level aggregation over the trace corpus.\n *\n * Thin reader over TraceStore that answers the questions a chat-first,\n * resumable UI needs:\n * - listProjects() → project IDs with latest activity\n * - projectTimeline(id) → chats + builds + runtime runs, chronological\n * - projectChats(id) → chat-level summaries (turn count, outcome)\n *\n * All queries are pure reads; no state duplication.\n */\n\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport interface ProjectSummary {\n projectId: string\n chatCount: number\n buildCount: number\n appRuntimeCount: number\n lastActivityAt: number\n latestChatId?: string\n latestOutcome?: { pass: boolean; score?: number }\n}\n\nexport interface ChatSummary {\n chatId: string\n projectId: string\n builderRunId: string\n startedAt: number\n endedAt?: number\n status: Run['status']\n outcome?: Run['outcome']\n /** Counts of spans emitted during the chat. */\n llmTurns?: number\n toolCalls?: number\n buildRunId?: string\n appRuntimeRunIds: string[]\n}\n\nexport interface ProjectTimelineEntry {\n run: Run\n layerBucket: 'chat' | 'build' | 'runtime' | 'other'\n}\n\nexport class ProjectRegistry {\n constructor(private store: TraceStore) {}\n\n async listProjects(): Promise<ProjectSummary[]> {\n const runs = await this.store.listRuns()\n const byProject = new Map<string, Run[]>()\n for (const r of runs) {\n if (!r.projectId) continue\n const arr = byProject.get(r.projectId) ?? []\n arr.push(r)\n byProject.set(r.projectId, arr)\n }\n const summaries: ProjectSummary[] = []\n for (const [projectId, projectRuns] of byProject) {\n const sorted = projectRuns.slice().sort((a, b) => b.startedAt - a.startedAt)\n const chats = projectRuns.filter((r) => r.layer === 'builder')\n const builds = projectRuns.filter((r) => r.layer === 'app-build')\n const runtimes = projectRuns.filter((r) => r.layer === 'app-runtime')\n const latest = sorted[0]\n if (!latest) continue\n summaries.push({\n projectId,\n chatCount: chats.length,\n buildCount: builds.length,\n appRuntimeCount: runtimes.length,\n lastActivityAt: latest.startedAt,\n latestChatId: chats[0]?.chatId,\n latestOutcome: latest.outcome\n ? { pass: latest.outcome.pass ?? false, score: latest.outcome.score }\n : undefined,\n })\n }\n return summaries.sort((a, b) => b.lastActivityAt - a.lastActivityAt)\n }\n\n async projectTimeline(projectId: string): Promise<ProjectTimelineEntry[]> {\n const runs = await this.store.listRuns({ projectId })\n const ordered = runs.slice().sort((a, b) => a.startedAt - b.startedAt)\n return ordered.map((run) => ({\n run,\n layerBucket:\n run.layer === 'builder'\n ? 'chat'\n : run.layer === 'app-build'\n ? 'build'\n : run.layer === 'app-runtime'\n ? 'runtime'\n : 'other',\n }))\n }\n\n async projectChats(projectId: string): Promise<ChatSummary[]> {\n const builderRuns = (await this.store.listRuns({ projectId, layer: 'builder' })).sort(\n (a, b) => b.startedAt - a.startedAt,\n )\n const childrenFor = async (runId: string) => this.store.listRuns({ parentRunId: runId })\n const out: ChatSummary[] = []\n for (const run of builderRuns) {\n const spans = await this.store.spans({ runId: run.runId })\n const children = await childrenFor(run.runId)\n const build = children.find((c) => c.layer === 'app-build')\n const runtime: string[] = []\n // Runtime runs can be grandchildren (attached to the build) or siblings\n // when shipped skipped.\n if (build) {\n const grands = await childrenFor(build.runId)\n for (const g of grands) if (g.layer === 'app-runtime') runtime.push(g.runId)\n }\n for (const c of children) if (c.layer === 'app-runtime') runtime.push(c.runId)\n out.push({\n chatId: run.chatId ?? run.runId,\n projectId,\n builderRunId: run.runId,\n startedAt: run.startedAt,\n endedAt: run.endedAt,\n status: run.status,\n outcome: run.outcome,\n llmTurns: spans.filter((s) => s.kind === 'llm').length,\n toolCalls: spans.filter((s) => s.kind === 'tool').length,\n buildRunId: build?.runId,\n appRuntimeRunIds: runtime,\n })\n }\n return out\n }\n}\n","/**\n * Three-layer evaluation — the canonical scoring breakdown for\n * builder-of-builders workflows.\n *\n * meta_score: did the builder understand + satisfy user intent?\n * (judge verdict attached to the builder run)\n * build_score: did the generated scaffold build + pass its own tests?\n * (outcome.score on the app-build child run)\n * runtime_score: did the generated agent pass its domain scenarios?\n * (mean outcome.score over app-runtime grandchild runs)\n *\n * Returns a structured report per project. The cross-layer correlation\n * is the highest-leverage signal the framework computes — if\n * meta_score doesn't predict runtime_score, the builder's self-scoring\n * is broken.\n *\n * Scaffold-only mode: when a project has no `app-runtime` runs (e.g. a\n * scaffold-builder eval that grades compose + build without driving a\n * runtime scenario), `kind` is `'scaffold-only'` and `complete` measures\n * meta + build only. Consumers can tell the two apart without having to\n * interpret null-runtime as either \"not yet computed\" or \"N/A for this\n * project shape\".\n */\n\nimport { judgeSpans } from '../trace/query'\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport type ProjectKind = 'full' | 'scaffold-only'\n\nexport interface ThreeLayerProjectReport {\n projectId: string\n /**\n * `'full'` when the project has at least one `app-runtime` run;\n * `'scaffold-only'` when it only has meta + build layers. Lets\n * downstream consumers treat a null runtime score as expected\n * (scaffold-only) vs. missing (full, pipeline broke).\n */\n kind: ProjectKind\n builderRunId?: string\n /** Judge-verdict score on the builder run (0..1 after normalization). */\n metaScore: number | null\n buildRunId?: string\n /** 0..1 from the sandbox harness (testsPassed / testsTotal). */\n buildScore: number | null\n appRuntimeRunIds: string[]\n /** Mean of outcome.score over app-runtime runs, 0..1. Always null in scaffold-only mode. */\n runtimeScore: number | null\n runtimePassRate: number | null\n /**\n * Layer-aware completeness:\n * - `kind='full'`: all three layers scored\n * - `kind='scaffold-only'`: meta + build scored (runtime not applicable)\n */\n complete: boolean\n}\n\nexport async function scoreProject(\n store: TraceStore,\n projectId: string,\n): Promise<ThreeLayerProjectReport> {\n const allRuns = await store.listRuns({ projectId })\n const builder = latestByLayer(allRuns, 'builder')\n const build = latestByLayer(allRuns, 'app-build')\n const runtime = allRuns.filter((r) => r.layer === 'app-runtime')\n\n const metaScore = builder ? await extractMetaScore(store, builder.runId) : null\n const buildScore = build?.outcome?.score ?? null\n const runtimeScores = runtime\n .map((r) => r.outcome?.score)\n .filter((s): s is number => typeof s === 'number')\n const runtimeScore =\n runtimeScores.length > 0\n ? runtimeScores.reduce((a, b) => a + b, 0) / runtimeScores.length\n : null\n const runtimePassed = runtime.filter((r) => r.outcome?.pass === true).length\n const runtimePassRate = runtime.length > 0 ? runtimePassed / runtime.length : null\n\n const kind: ProjectKind = runtime.length === 0 ? 'scaffold-only' : 'full'\n const complete =\n kind === 'scaffold-only'\n ? metaScore !== null && buildScore !== null\n : metaScore !== null && buildScore !== null && runtimeScore !== null\n\n return {\n projectId,\n kind,\n builderRunId: builder?.runId,\n metaScore,\n buildRunId: build?.runId,\n buildScore,\n appRuntimeRunIds: runtime.map((r) => r.runId),\n runtimeScore,\n runtimePassRate,\n complete,\n }\n}\n\n/** Aggregate scoring across every project in a corpus. */\nexport async function scoreAllProjects(store: TraceStore): Promise<ThreeLayerProjectReport[]> {\n const runs = await store.listRuns()\n const projectIds = [...new Set(runs.map((r) => r.projectId).filter((p): p is string => !!p))]\n return Promise.all(projectIds.map((p) => scoreProject(store, p)))\n}\n\nfunction latestByLayer(runs: Run[], layer: Run['layer']): Run | undefined {\n const filtered = runs.filter((r) => r.layer === layer).sort((a, b) => b.startedAt - a.startedAt)\n return filtered[0]\n}\n\nasync function extractMetaScore(store: TraceStore, builderRunId: string): Promise<number | null> {\n const js = await judgeSpans(store, builderRunId)\n const meta = js.find(\n (s) => s.judgeId === 'builder-meta' && s.dimension === 'user_intent_satisfaction',\n )\n if (!meta) return null\n // Normalize score to 0..1. Accept 0-1 natively; 0-10 scale is also common.\n if (meta.score >= 0 && meta.score <= 1) return meta.score\n if (meta.score >= 0 && meta.score <= 10) return meta.score / 10\n return null\n}\n"],"mappings":"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","names":[]}