niceeval 0.15.1-canary.76 → 0.16.1

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 (714) hide show
  1. package/INDEX.md +45 -40
  2. package/dist/adapter-execution-trace.cjs.map +1 -1
  3. package/dist/adapter-execution-trace.d.cts +26 -0
  4. package/dist/adapter-execution-trace.d.mts +26 -0
  5. package/dist/adapter-execution-trace.d.ts +26 -0
  6. package/dist/adapter-usage.cjs.map +1 -1
  7. package/dist/adapter-usage.d.cts +9 -0
  8. package/dist/adapter-usage.d.mts +9 -0
  9. package/dist/adapter-usage.d.ts +9 -0
  10. package/dist/adapter.cjs +19 -4
  11. package/dist/adapter.cjs.map +1 -1
  12. package/dist/adapter.d.cts +37 -12
  13. package/dist/adapter.d.mts +37 -12
  14. package/dist/adapter.d.ts +37 -12
  15. package/dist/agents/ai-sdk.cjs +3 -0
  16. package/dist/agents/ai-sdk.cjs.map +1 -1
  17. package/dist/agents/bub.cjs +3 -0
  18. package/dist/agents/bub.cjs.map +1 -1
  19. package/dist/agents/claude-code-native.cjs +28 -2
  20. package/dist/agents/claude-code-native.cjs.map +1 -1
  21. package/dist/agents/claude-code.cjs +3 -0
  22. package/dist/agents/claude-code.cjs.map +1 -1
  23. package/dist/agents/codex.cjs +3 -0
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/coding-cli-versions.cjs +9 -10
  26. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  27. package/dist/agents/coding-cli-versions.d.cts +1 -1
  28. package/dist/agents/coding-cli-versions.d.mts +1 -1
  29. package/dist/agents/coding-cli-versions.d.ts +1 -1
  30. package/dist/agents/deepseek-harness.cjs +3 -0
  31. package/dist/agents/deepseek-harness.cjs.map +1 -1
  32. package/dist/agents/hermes.cjs +3 -0
  33. package/dist/agents/hermes.cjs.map +1 -1
  34. package/dist/agents/index.cjs.map +1 -1
  35. package/dist/agents/index.d.cts +3 -2
  36. package/dist/agents/index.d.mts +3 -2
  37. package/dist/agents/index.d.ts +3 -2
  38. package/dist/agents/omp.cjs +3 -0
  39. package/dist/agents/omp.cjs.map +1 -1
  40. package/dist/agents/openai-compat.cjs +6 -0
  41. package/dist/agents/openai-compat.cjs.map +1 -1
  42. package/dist/agents/openclaw.cjs +3 -0
  43. package/dist/agents/openclaw.cjs.map +1 -1
  44. package/dist/agents/opencode.cjs +3 -0
  45. package/dist/agents/opencode.cjs.map +1 -1
  46. package/dist/agents/sdk-streams.cjs +9 -0
  47. package/dist/agents/sdk-streams.cjs.map +1 -1
  48. package/dist/agents/ui-message-stream.cjs +3 -0
  49. package/dist/agents/ui-message-stream.cjs.map +1 -1
  50. package/dist/assertions/api.cjs.map +1 -1
  51. package/dist/assertions/api.d.cts +27 -5
  52. package/dist/assertions/api.d.mts +27 -5
  53. package/dist/assertions/api.d.ts +27 -5
  54. package/dist/assertions/collection.cjs +6 -0
  55. package/dist/assertions/collection.cjs.map +1 -1
  56. package/dist/assertions/collection.d.cts +4 -2
  57. package/dist/assertions/collection.d.mts +4 -2
  58. package/dist/assertions/collection.d.ts +4 -2
  59. package/dist/assertions/collection.js +12 -8
  60. package/dist/assertions/context-match.cjs +70 -0
  61. package/dist/assertions/context-match.cjs.map +1 -0
  62. package/dist/assertions/context-match.d.cts +107 -0
  63. package/dist/assertions/context-match.d.mts +107 -0
  64. package/dist/assertions/context-match.d.ts +107 -0
  65. package/dist/assertions/context-match.js +12 -0
  66. package/dist/assertions/context-match.js.map +1 -0
  67. package/dist/assertions/full-content.cjs +109 -0
  68. package/dist/assertions/full-content.cjs.map +1 -0
  69. package/dist/assertions/full-content.d.cts +6 -0
  70. package/dist/assertions/full-content.d.mts +6 -0
  71. package/dist/assertions/full-content.d.ts +6 -0
  72. package/dist/assertions/full-content.js +12 -0
  73. package/dist/assertions/full-content.js.map +1 -0
  74. package/dist/assertions/judge-presets.cjs +2 -34
  75. package/dist/assertions/judge-presets.cjs.map +1 -1
  76. package/dist/assertions/judge-presets.d.cts +6 -9
  77. package/dist/assertions/judge-presets.d.mts +6 -9
  78. package/dist/assertions/judge-presets.d.ts +6 -9
  79. package/dist/assertions/judge-presets.js +8 -8
  80. package/dist/assertions/judge.cjs +107 -29
  81. package/dist/assertions/judge.cjs.map +1 -1
  82. package/dist/assertions/judge.d.cts +2 -0
  83. package/dist/assertions/judge.d.mts +2 -0
  84. package/dist/assertions/judge.d.ts +2 -0
  85. package/dist/assertions/match.cjs +244 -5
  86. package/dist/assertions/match.cjs.map +1 -1
  87. package/dist/assertions/match.d.cts +43 -3
  88. package/dist/assertions/match.d.mts +43 -3
  89. package/dist/assertions/match.d.ts +43 -3
  90. package/dist/assertions/match.js +88 -78
  91. package/dist/assertions/material.cjs +520 -0
  92. package/dist/assertions/material.cjs.map +1 -0
  93. package/dist/assertions/material.d.cts +56 -0
  94. package/dist/assertions/material.d.mts +56 -0
  95. package/dist/assertions/material.d.ts +56 -0
  96. package/dist/assertions/material.js +20 -0
  97. package/dist/assertions/material.js.map +1 -0
  98. package/dist/assertions/record/attachment.cjs +5 -2
  99. package/dist/assertions/record/attachment.cjs.map +1 -1
  100. package/dist/assertions/record/codec.cjs +2 -1
  101. package/dist/assertions/record/codec.cjs.map +1 -1
  102. package/dist/assertions/record/model.cjs.map +1 -1
  103. package/dist/assertions/record/model.d.cts +6 -1
  104. package/dist/assertions/record/model.d.mts +6 -1
  105. package/dist/assertions/record/model.d.ts +6 -1
  106. package/dist/assertions/runtime.cjs +207 -14
  107. package/dist/assertions/runtime.cjs.map +1 -1
  108. package/dist/assertions/runtime.d.cts +9 -0
  109. package/dist/assertions/runtime.d.mts +9 -0
  110. package/dist/assertions/runtime.d.ts +9 -0
  111. package/dist/assertions/runtime.js +14 -8
  112. package/dist/assertions/score-match-audit.cjs +18 -8
  113. package/dist/assertions/score-match-audit.cjs.map +1 -1
  114. package/dist/assertions/score-match-gateway.cjs +83 -25
  115. package/dist/assertions/score-match-gateway.cjs.map +1 -1
  116. package/dist/assertions/score-match-gateway.d.cts +2 -0
  117. package/dist/assertions/score-match-gateway.d.mts +2 -0
  118. package/dist/assertions/score-match-gateway.d.ts +2 -0
  119. package/dist/assertions/value-composition.test-d.cjs +77 -0
  120. package/dist/assertions/value-composition.test-d.cjs.map +1 -0
  121. package/dist/assertions/value-composition.test-d.d.cts +1 -0
  122. package/dist/assertions/value-composition.test-d.d.mts +1 -0
  123. package/dist/assertions/value-composition.test-d.d.ts +1 -0
  124. package/dist/assertions/value-composition.test-d.js +4 -0
  125. package/dist/assertions/value-composition.test-d.js.map +1 -0
  126. package/dist/context/assert-first.cjs +207 -213
  127. package/dist/context/assert-first.cjs.map +1 -1
  128. package/dist/context/assert-first.d.cts +49 -23
  129. package/dist/context/assert-first.d.mts +49 -23
  130. package/dist/context/assert-first.d.ts +49 -23
  131. package/dist/context/session.cjs +111 -9
  132. package/dist/context/session.cjs.map +1 -1
  133. package/dist/context/session.d.cts +18 -0
  134. package/dist/context/session.d.mts +18 -0
  135. package/dist/context/session.d.ts +18 -0
  136. package/dist/define.cjs +17 -1
  137. package/dist/define.cjs.map +1 -1
  138. package/dist/eval/cli/contribution.cjs +2 -0
  139. package/dist/eval/cli/contribution.cjs.map +1 -1
  140. package/dist/eval/host/index.cjs +2 -0
  141. package/dist/eval/host/index.cjs.map +1 -1
  142. package/dist/eval/record/evaluation.cjs +3 -0
  143. package/dist/eval/record/evaluation.cjs.map +1 -1
  144. package/dist/eval/record/membership-provenance.d.cts +15 -15
  145. package/dist/eval/record/membership-provenance.d.mts +15 -15
  146. package/dist/eval/record/membership-provenance.d.ts +15 -15
  147. package/dist/eval/record/score.cjs +7 -0
  148. package/dist/eval/record/score.cjs.map +1 -1
  149. package/dist/eval/record/sealed-assertion.cjs +3 -0
  150. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  151. package/dist/eval/record/verdict.cjs +7 -0
  152. package/dist/eval/record/verdict.cjs.map +1 -1
  153. package/dist/expect/index.cjs +8 -2
  154. package/dist/expect/index.cjs.map +1 -1
  155. package/dist/expect/index.d.cts +9 -4
  156. package/dist/expect/index.d.mts +9 -4
  157. package/dist/expect/index.d.ts +9 -4
  158. package/dist/expect/index.js +72 -62
  159. package/dist/expect/index.mjs +72 -62
  160. package/dist/experiment/host/cli/contribution.cjs +37 -23
  161. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  162. package/dist/experiment/host/cli/contribution.d.cts +9 -1
  163. package/dist/experiment/host/cli/contribution.d.mts +9 -1
  164. package/dist/experiment/host/cli/contribution.d.ts +9 -1
  165. package/dist/experiment/host/current.cjs +74 -0
  166. package/dist/experiment/host/current.cjs.map +1 -0
  167. package/dist/experiment/host/current.d.cts +33 -0
  168. package/dist/experiment/host/current.d.mts +33 -0
  169. package/dist/experiment/host/current.d.ts +33 -0
  170. package/dist/experiment/host/current.js +10 -0
  171. package/dist/experiment/host/current.js.map +1 -0
  172. package/dist/experiment/host/index.cjs +17 -174
  173. package/dist/experiment/host/index.cjs.map +1 -1
  174. package/dist/experiment/host/index.d.cts +8 -54
  175. package/dist/experiment/host/index.d.mts +8 -54
  176. package/dist/experiment/host/index.d.ts +8 -54
  177. package/dist/experiment/host/operations.cjs +33 -10
  178. package/dist/experiment/host/operations.cjs.map +1 -1
  179. package/dist/experiment/host/operations.d.cts +29 -1
  180. package/dist/experiment/host/operations.d.mts +29 -1
  181. package/dist/experiment/host/operations.d.ts +29 -1
  182. package/dist/experiment/host/operations.js +6 -4
  183. package/dist/experiment/host/requirements.cjs +3 -0
  184. package/dist/experiment/host/requirements.cjs.map +1 -0
  185. package/dist/experiment/host/requirements.d.cts +3 -0
  186. package/dist/experiment/host/requirements.d.mts +3 -0
  187. package/dist/experiment/host/requirements.d.ts +3 -0
  188. package/dist/experiment/host/requirements.js +4 -0
  189. package/dist/experiment/host/requirements.js.map +1 -0
  190. package/dist/experiment/host/runtime.cjs +179 -0
  191. package/dist/experiment/host/runtime.cjs.map +1 -0
  192. package/dist/experiment/host/runtime.d.cts +79 -0
  193. package/dist/experiment/host/runtime.d.mts +79 -0
  194. package/dist/experiment/host/runtime.d.ts +79 -0
  195. package/dist/experiment/host/runtime.js +6 -0
  196. package/dist/experiment/host/runtime.js.map +1 -0
  197. package/dist/experiment/host/types.cjs.map +1 -1
  198. package/dist/experiment/host/types.d.cts +17 -16
  199. package/dist/experiment/host/types.d.mts +17 -16
  200. package/dist/experiment/host/types.d.ts +17 -16
  201. package/dist/fresh-import.cjs +2 -1
  202. package/dist/fresh-import.cjs.map +1 -1
  203. package/dist/index.cjs +4 -2
  204. package/dist/index.cjs.map +1 -1
  205. package/dist/index.d.cts +12 -6
  206. package/dist/index.d.mts +12 -6
  207. package/dist/index.d.ts +12 -6
  208. package/dist/index.js +32 -30
  209. package/dist/index.mjs +32 -30
  210. package/dist/inspection/artifacts.cjs +83 -54
  211. package/dist/inspection/artifacts.cjs.map +1 -1
  212. package/dist/inspection/artifacts.d.cts +8 -0
  213. package/dist/inspection/artifacts.d.mts +8 -0
  214. package/dist/inspection/artifacts.d.ts +8 -0
  215. package/dist/inspection/artifacts.js +2 -0
  216. package/dist/inspection/assertions.cjs +4 -1
  217. package/dist/inspection/assertions.cjs.map +1 -1
  218. package/dist/inspection/cli/contribution.cjs +27 -4
  219. package/dist/inspection/cli/contribution.cjs.map +1 -1
  220. package/dist/inspection/cli/contribution.d.cts +2 -1
  221. package/dist/inspection/cli/contribution.d.mts +2 -1
  222. package/dist/inspection/cli/contribution.d.ts +2 -1
  223. package/dist/inspection/execution-traces.cjs +114 -8
  224. package/dist/inspection/execution-traces.cjs.map +1 -1
  225. package/dist/inspection/execution-traces.d.cts +38 -0
  226. package/dist/inspection/execution-traces.d.mts +38 -0
  227. package/dist/inspection/execution-traces.d.ts +38 -0
  228. package/dist/inspection/facts.cjs +12 -0
  229. package/dist/inspection/facts.cjs.map +1 -1
  230. package/dist/inspection/limits.cjs +5 -1
  231. package/dist/inspection/limits.cjs.map +1 -1
  232. package/dist/inspection/limits.d.cts +4 -0
  233. package/dist/inspection/limits.d.mts +4 -0
  234. package/dist/inspection/limits.d.ts +4 -0
  235. package/dist/inspection/limits.js +6 -2
  236. package/dist/inspection/overview.cjs +74 -33
  237. package/dist/inspection/overview.cjs.map +1 -1
  238. package/dist/inspection/overview.d.cts +19 -1
  239. package/dist/inspection/overview.d.mts +19 -1
  240. package/dist/inspection/overview.d.ts +19 -1
  241. package/dist/inspection/overview.js +4 -2
  242. package/dist/inspection/project-input.cjs +9 -0
  243. package/dist/inspection/project-input.cjs.map +1 -0
  244. package/dist/inspection/project-input.d.cts +20 -0
  245. package/dist/inspection/project-input.d.mts +20 -0
  246. package/dist/inspection/project-input.d.ts +20 -0
  247. package/dist/inspection/project-input.js +8 -0
  248. package/dist/inspection/project-input.js.map +1 -0
  249. package/dist/inspection/project-result.cjs +60 -0
  250. package/dist/inspection/project-result.cjs.map +1 -0
  251. package/dist/inspection/project-result.d.cts +1264 -0
  252. package/dist/inspection/project-result.d.mts +1264 -0
  253. package/dist/inspection/project-result.d.ts +1264 -0
  254. package/dist/inspection/project-result.js +10 -0
  255. package/dist/inspection/project-result.js.map +1 -0
  256. package/dist/inspection/project-source.cjs +109 -0
  257. package/dist/inspection/project-source.cjs.map +1 -0
  258. package/dist/inspection/project-source.d.cts +10 -0
  259. package/dist/inspection/project-source.d.mts +10 -0
  260. package/dist/inspection/project-source.d.ts +10 -0
  261. package/dist/inspection/project-source.js +6 -0
  262. package/dist/inspection/project-source.js.map +1 -0
  263. package/dist/inspection/project.cjs +100 -0
  264. package/dist/inspection/project.cjs.map +1 -0
  265. package/dist/inspection/project.d.cts +3 -0
  266. package/dist/inspection/project.d.mts +3 -0
  267. package/dist/inspection/project.d.ts +3 -0
  268. package/dist/inspection/project.js +6 -0
  269. package/dist/inspection/project.js.map +1 -0
  270. package/dist/inspection/protocol.cjs +19 -9
  271. package/dist/inspection/protocol.cjs.map +1 -1
  272. package/dist/inspection/protocol.d.cts +5506 -38189
  273. package/dist/inspection/protocol.d.mts +5506 -38189
  274. package/dist/inspection/protocol.d.ts +5506 -38189
  275. package/dist/inspection/public.mjs +896 -84
  276. package/dist/inspection/query.cjs +2 -0
  277. package/dist/inspection/query.cjs.map +1 -1
  278. package/dist/inspection/results.cjs +234 -29
  279. package/dist/inspection/results.cjs.map +1 -1
  280. package/dist/inspection/results.d.cts +870 -13
  281. package/dist/inspection/results.d.mts +870 -13
  282. package/dist/inspection/results.d.ts +870 -13
  283. package/dist/inspection/results.js +36 -34
  284. package/dist/inspection/select.cjs +126 -14
  285. package/dist/inspection/select.cjs.map +1 -1
  286. package/dist/inspection/select.d.cts +1 -1
  287. package/dist/inspection/select.d.mts +1 -1
  288. package/dist/inspection/select.d.ts +1 -1
  289. package/dist/inspection/source.cjs +4 -0
  290. package/dist/inspection/source.cjs.map +1 -1
  291. package/dist/inspection/sources.cjs +5 -0
  292. package/dist/inspection/sources.cjs.map +1 -1
  293. package/dist/inspection/trace.cjs +82 -84
  294. package/dist/inspection/trace.cjs.map +1 -1
  295. package/dist/inspection/trace.d.cts +7 -2
  296. package/dist/inspection/trace.d.mts +7 -2
  297. package/dist/inspection/trace.d.ts +7 -2
  298. package/dist/model-slots.cjs +35 -0
  299. package/dist/model-slots.cjs.map +1 -0
  300. package/dist/model-slots.d.cts +19 -0
  301. package/dist/model-slots.d.mts +19 -0
  302. package/dist/model-slots.d.ts +19 -0
  303. package/dist/model-slots.js +8 -0
  304. package/dist/model-slots.js.map +1 -0
  305. package/dist/o11y/adapter-call-price.cjs +4 -0
  306. package/dist/o11y/adapter-call-price.cjs.map +1 -1
  307. package/dist/o11y/adapter-call-price.d.cts +24 -0
  308. package/dist/o11y/adapter-call-price.d.mts +24 -0
  309. package/dist/o11y/adapter-call-price.d.ts +24 -0
  310. package/dist/o11y/adapter-call-price.js +6 -2
  311. package/dist/o11y/adapter-usage-projection.cjs +158 -0
  312. package/dist/o11y/adapter-usage-projection.cjs.map +1 -0
  313. package/dist/o11y/adapter-usage-projection.d.cts +141 -0
  314. package/dist/o11y/adapter-usage-projection.d.mts +141 -0
  315. package/dist/o11y/adapter-usage-projection.d.ts +141 -0
  316. package/dist/o11y/adapter-usage-projection.js +20 -0
  317. package/dist/o11y/adapter-usage-projection.js.map +1 -0
  318. package/dist/o11y/eval-usage.cjs +149 -0
  319. package/dist/o11y/eval-usage.cjs.map +1 -0
  320. package/dist/o11y/eval-usage.d.cts +46 -0
  321. package/dist/o11y/eval-usage.d.mts +46 -0
  322. package/dist/o11y/eval-usage.d.ts +46 -0
  323. package/dist/o11y/eval-usage.js +8 -0
  324. package/dist/o11y/eval-usage.js.map +1 -0
  325. package/dist/o11y/judge-call-price.cjs +62 -0
  326. package/dist/o11y/judge-call-price.cjs.map +1 -0
  327. package/dist/o11y/judge-call-price.d.cts +3 -0
  328. package/dist/o11y/judge-call-price.d.mts +3 -0
  329. package/dist/o11y/judge-call-price.d.ts +3 -0
  330. package/dist/o11y/judge-call-price.js +6 -0
  331. package/dist/o11y/judge-call-price.js.map +1 -0
  332. package/dist/o11y/judge-usage-projection.cjs +134 -0
  333. package/dist/o11y/judge-usage-projection.cjs.map +1 -0
  334. package/dist/o11y/judge-usage-projection.d.cts +18 -0
  335. package/dist/o11y/judge-usage-projection.d.mts +18 -0
  336. package/dist/o11y/judge-usage-projection.d.ts +18 -0
  337. package/dist/o11y/judge-usage-projection.js +20 -0
  338. package/dist/o11y/judge-usage-projection.js.map +1 -0
  339. package/dist/o11y/judge-usage-receipt.cjs +135 -0
  340. package/dist/o11y/judge-usage-receipt.cjs.map +1 -0
  341. package/dist/o11y/judge-usage-receipt.d.cts +5 -0
  342. package/dist/o11y/judge-usage-receipt.d.mts +5 -0
  343. package/dist/o11y/judge-usage-receipt.d.ts +5 -0
  344. package/dist/o11y/judge-usage-receipt.js +6 -0
  345. package/dist/o11y/judge-usage-receipt.js.map +1 -0
  346. package/dist/o11y/judge-usage.cjs +171 -0
  347. package/dist/o11y/judge-usage.cjs.map +1 -0
  348. package/dist/o11y/judge-usage.d.cts +35 -0
  349. package/dist/o11y/judge-usage.d.mts +35 -0
  350. package/dist/o11y/judge-usage.d.ts +35 -0
  351. package/dist/o11y/judge-usage.js +6 -0
  352. package/dist/o11y/judge-usage.js.map +1 -0
  353. package/dist/plugin/contracts.cjs +2 -0
  354. package/dist/plugin/contracts.cjs.map +1 -1
  355. package/dist/plugin/link.cjs +7 -0
  356. package/dist/plugin/link.cjs.map +1 -1
  357. package/dist/record/attachment/protocol.cjs +8 -6
  358. package/dist/record/attachment/protocol.cjs.map +1 -1
  359. package/dist/record/attachment/protocol.d.cts +10 -0
  360. package/dist/record/attachment/protocol.d.mts +10 -0
  361. package/dist/record/attachment/protocol.d.ts +10 -0
  362. package/dist/record/attachment/protocol.js +38 -36
  363. package/dist/record/codec/seal-manifest.d.cts +3 -3
  364. package/dist/record/codec/seal-manifest.d.mts +3 -3
  365. package/dist/record/codec/seal-manifest.d.ts +3 -3
  366. package/dist/record/family/adapter-usage/definition.d.cts +1 -0
  367. package/dist/record/family/adapter-usage/definition.d.mts +1 -0
  368. package/dist/record/family/adapter-usage/definition.d.ts +1 -0
  369. package/dist/record/family/adapter-usage/persistence.cjs +1 -1
  370. package/dist/record/family/adapter-usage/persistence.cjs.map +1 -1
  371. package/dist/record/family/adapter-usage/persistence.d.cts +2 -1
  372. package/dist/record/family/adapter-usage/persistence.d.mts +2 -1
  373. package/dist/record/family/adapter-usage/persistence.d.ts +2 -1
  374. package/dist/record/family/adapter-usage/schema.cjs +21 -2
  375. package/dist/record/family/adapter-usage/schema.cjs.map +1 -1
  376. package/dist/record/family/adapter-usage/schema.d.cts +85 -0
  377. package/dist/record/family/adapter-usage/schema.d.mts +85 -0
  378. package/dist/record/family/adapter-usage/schema.d.ts +85 -0
  379. package/dist/record/family/adapter-usage/schema.js +18 -12
  380. package/dist/record/family/catalog.cjs +31 -27
  381. package/dist/record/family/catalog.cjs.map +1 -1
  382. package/dist/record/family/catalog.d.cts +94 -3
  383. package/dist/record/family/catalog.d.mts +94 -3
  384. package/dist/record/family/catalog.d.ts +94 -3
  385. package/dist/record/family/current.cjs +45 -42
  386. package/dist/record/family/current.cjs.map +1 -1
  387. package/dist/record/family/current.d.cts +240 -1
  388. package/dist/record/family/current.d.mts +240 -1
  389. package/dist/record/family/current.d.ts +240 -1
  390. package/dist/record/family/execution-traces/definition.d.cts +26 -0
  391. package/dist/record/family/execution-traces/definition.d.mts +26 -0
  392. package/dist/record/family/execution-traces/definition.d.ts +26 -0
  393. package/dist/record/family/execution-traces/definition.js +20 -14
  394. package/dist/record/family/execution-traces/schema.cjs +57 -1
  395. package/dist/record/family/execution-traces/schema.cjs.map +1 -1
  396. package/dist/record/family/execution-traces/schema.d.cts +114 -0
  397. package/dist/record/family/execution-traces/schema.d.mts +114 -0
  398. package/dist/record/family/execution-traces/schema.d.ts +114 -0
  399. package/dist/record/family/execution-traces/schema.js +18 -12
  400. package/dist/record/family/judge-usage/definition.cjs +12 -0
  401. package/dist/record/family/judge-usage/definition.cjs.map +1 -0
  402. package/dist/record/family/judge-usage/definition.d.cts +91 -0
  403. package/dist/record/family/judge-usage/definition.d.mts +91 -0
  404. package/dist/record/family/judge-usage/definition.d.ts +91 -0
  405. package/dist/record/family/judge-usage/definition.js +6 -0
  406. package/dist/record/family/judge-usage/definition.js.map +1 -0
  407. package/dist/record/family/judge-usage/persistence.cjs +10 -0
  408. package/dist/record/family/judge-usage/persistence.cjs.map +1 -0
  409. package/dist/record/family/judge-usage/persistence.d.cts +91 -0
  410. package/dist/record/family/judge-usage/persistence.d.mts +91 -0
  411. package/dist/record/family/judge-usage/persistence.d.ts +91 -0
  412. package/dist/record/family/judge-usage/persistence.js +6 -0
  413. package/dist/record/family/judge-usage/persistence.js.map +1 -0
  414. package/dist/record/family/judge-usage/schema.cjs +307 -0
  415. package/dist/record/family/judge-usage/schema.cjs.map +1 -0
  416. package/dist/record/family/judge-usage/schema.d.cts +351 -0
  417. package/dist/record/family/judge-usage/schema.d.mts +351 -0
  418. package/dist/record/family/judge-usage/schema.d.ts +351 -0
  419. package/dist/record/family/judge-usage/schema.js +18 -0
  420. package/dist/record/family/judge-usage/schema.js.map +1 -0
  421. package/dist/record/host/sqlite-host.cjs +55 -9
  422. package/dist/record/host/sqlite-host.cjs.map +1 -1
  423. package/dist/record/host/types.cjs.map +1 -1
  424. package/dist/record/host/types.d.cts +7 -0
  425. package/dist/record/host/types.d.mts +7 -0
  426. package/dist/record/host/types.d.ts +7 -0
  427. package/dist/record/model/run-context.cjs +7 -1
  428. package/dist/record/model/run-context.cjs.map +1 -1
  429. package/dist/record/model/run-context.d.cts +4 -0
  430. package/dist/record/model/run-context.d.mts +4 -0
  431. package/dist/record/model/run-context.d.ts +4 -0
  432. package/dist/record/model/seal-manifest.d.cts +1 -1
  433. package/dist/record/model/seal-manifest.d.mts +1 -1
  434. package/dist/record/model/seal-manifest.d.ts +1 -1
  435. package/dist/record/sqlite/client.cjs +18 -5
  436. package/dist/record/sqlite/client.cjs.map +1 -1
  437. package/dist/record/sqlite/client.d.cts +1 -1
  438. package/dist/record/sqlite/client.d.mts +1 -1
  439. package/dist/record/sqlite/client.d.ts +1 -1
  440. package/dist/record/sqlite/project-state-database.cjs +29 -8
  441. package/dist/record/sqlite/project-state-database.cjs.map +1 -1
  442. package/dist/run/host/runtime.cjs +4 -0
  443. package/dist/run/host/runtime.cjs.map +1 -1
  444. package/dist/run/storage/sqlite.cjs +20 -0
  445. package/dist/run/storage/sqlite.cjs.map +1 -1
  446. package/dist/runner/adapter-execution-trace.cjs +125 -2
  447. package/dist/runner/adapter-execution-trace.cjs.map +1 -1
  448. package/dist/runner/adapter-execution-trace.d.cts +1 -1
  449. package/dist/runner/adapter-execution-trace.d.mts +1 -1
  450. package/dist/runner/adapter-execution-trace.d.ts +1 -1
  451. package/dist/runner/adapter-usage.cjs +55 -7
  452. package/dist/runner/adapter-usage.cjs.map +1 -1
  453. package/dist/runner/adapter-usage.d.cts +9 -2
  454. package/dist/runner/adapter-usage.d.mts +9 -2
  455. package/dist/runner/adapter-usage.d.ts +9 -2
  456. package/dist/runner/adoption.cjs +9 -0
  457. package/dist/runner/adoption.cjs.map +1 -1
  458. package/dist/runner/attempt-cancellation.cjs +12 -0
  459. package/dist/runner/attempt-cancellation.cjs.map +1 -0
  460. package/dist/runner/attempt-cancellation.d.cts +6 -0
  461. package/dist/runner/attempt-cancellation.d.mts +6 -0
  462. package/dist/runner/attempt-cancellation.d.ts +6 -0
  463. package/dist/runner/attempt-cancellation.js +6 -0
  464. package/dist/runner/attempt-cancellation.js.map +1 -0
  465. package/dist/runner/attempt-resources.cjs +10 -4
  466. package/dist/runner/attempt-resources.cjs.map +1 -1
  467. package/dist/runner/attempt-resources.d.cts +2 -1
  468. package/dist/runner/attempt-resources.d.mts +2 -1
  469. package/dist/runner/attempt-resources.d.ts +2 -1
  470. package/dist/runner/attempt.cjs +1177 -1139
  471. package/dist/runner/attempt.cjs.map +1 -1
  472. package/dist/runner/config-identity.cjs +20 -1
  473. package/dist/runner/config-identity.cjs.map +1 -1
  474. package/dist/runner/config-identity.d.cts +5 -0
  475. package/dist/runner/config-identity.d.mts +5 -0
  476. package/dist/runner/config-identity.d.ts +5 -0
  477. package/dist/runner/discover.cjs +14 -0
  478. package/dist/runner/discover.cjs.map +1 -1
  479. package/dist/runner/discover.d.cts +3 -0
  480. package/dist/runner/discover.d.mts +3 -0
  481. package/dist/runner/discover.d.ts +3 -0
  482. package/dist/runner/feedback/human.cjs +9 -4
  483. package/dist/runner/feedback/human.cjs.map +1 -1
  484. package/dist/runner/fingerprint.cjs +1 -0
  485. package/dist/runner/fingerprint.cjs.map +1 -1
  486. package/dist/runner/judge-usage.cjs +18 -0
  487. package/dist/runner/judge-usage.cjs.map +1 -0
  488. package/dist/runner/judge-usage.d.cts +5 -0
  489. package/dist/runner/judge-usage.d.mts +5 -0
  490. package/dist/runner/judge-usage.d.ts +5 -0
  491. package/dist/runner/judge-usage.js +8 -0
  492. package/dist/runner/judge-usage.js.map +1 -0
  493. package/dist/runner/project-target.cjs.map +1 -1
  494. package/dist/runner/project-target.d.cts +2 -0
  495. package/dist/runner/project-target.d.mts +2 -0
  496. package/dist/runner/project-target.d.ts +2 -0
  497. package/dist/runner/record/planning.cjs +1 -0
  498. package/dist/runner/record/planning.cjs.map +1 -1
  499. package/dist/runner/record.cjs +4 -0
  500. package/dist/runner/record.cjs.map +1 -1
  501. package/dist/runner/reporters/braintrust.cjs +2 -0
  502. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  503. package/dist/runner/reuse-diagnostics.cjs +9 -10
  504. package/dist/runner/reuse-diagnostics.cjs.map +1 -1
  505. package/dist/runner/reuse-diagnostics.d.cts +5 -6
  506. package/dist/runner/reuse-diagnostics.d.mts +5 -6
  507. package/dist/runner/reuse-diagnostics.d.ts +5 -6
  508. package/dist/runner/reuse-diagnostics.js +4 -4
  509. package/dist/runner/reuse-plan.cjs +100 -48
  510. package/dist/runner/reuse-plan.cjs.map +1 -1
  511. package/dist/runner/reuse-plan.d.cts +60 -3
  512. package/dist/runner/reuse-plan.d.mts +60 -3
  513. package/dist/runner/reuse-plan.d.ts +60 -3
  514. package/dist/runner/reuse-plan.js +14 -10
  515. package/dist/runner/run.cjs +8 -6
  516. package/dist/runner/run.cjs.map +1 -1
  517. package/dist/runner/session.cjs +1 -1
  518. package/dist/runner/session.cjs.map +1 -1
  519. package/dist/runner/session.d.cts +1 -1
  520. package/dist/runner/session.d.mts +1 -1
  521. package/dist/runner/session.d.ts +1 -1
  522. package/dist/runner/source-producer.cjs +3 -1
  523. package/dist/runner/source-producer.cjs.map +1 -1
  524. package/dist/runner/types.cjs.map +1 -1
  525. package/dist/runner/types.d.cts +26 -5
  526. package/dist/runner/types.d.mts +26 -5
  527. package/dist/runner/types.d.ts +26 -5
  528. package/dist/sandbox/action.cjs +3 -0
  529. package/dist/sandbox/action.cjs.map +1 -1
  530. package/dist/sandbox/commands.cjs +3 -0
  531. package/dist/sandbox/commands.cjs.map +1 -1
  532. package/dist/sandbox/compose.cjs +6 -0
  533. package/dist/sandbox/compose.cjs.map +1 -1
  534. package/dist/sandbox/docker-profile/registry.cjs +7 -0
  535. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  536. package/dist/sandbox/docker-profile/runtime.cjs +3 -0
  537. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  538. package/dist/sandbox/docker-profile/schema.cjs +7 -0
  539. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  540. package/dist/sandbox/incus.cjs +7 -0
  541. package/dist/sandbox/incus.cjs.map +1 -1
  542. package/dist/sandbox/layer.cjs +12 -0
  543. package/dist/sandbox/layer.cjs.map +1 -1
  544. package/dist/shared/adapter-cleanup.cjs +18 -0
  545. package/dist/shared/adapter-cleanup.cjs.map +1 -0
  546. package/dist/shared/adapter-cleanup.d.cts +4 -0
  547. package/dist/shared/adapter-cleanup.d.mts +4 -0
  548. package/dist/shared/adapter-cleanup.d.ts +4 -0
  549. package/dist/shared/adapter-cleanup.js +10 -0
  550. package/dist/shared/adapter-cleanup.js.map +1 -0
  551. package/dist/shared/attempt-lifecycle.cjs +3 -0
  552. package/dist/shared/attempt-lifecycle.cjs.map +1 -0
  553. package/dist/shared/attempt-lifecycle.d.cts +13 -0
  554. package/dist/shared/attempt-lifecycle.d.mts +13 -0
  555. package/dist/shared/attempt-lifecycle.d.ts +13 -0
  556. package/dist/shared/attempt-lifecycle.js +4 -0
  557. package/dist/shared/attempt-lifecycle.js.map +1 -0
  558. package/dist/show/contribution.cjs +52 -14
  559. package/dist/show/contribution.cjs.map +1 -1
  560. package/dist/show/contribution.d.cts +23 -1
  561. package/dist/show/contribution.d.mts +23 -1
  562. package/dist/show/contribution.d.ts +23 -1
  563. package/dist/show/model.cjs +8 -1
  564. package/dist/show/model.cjs.map +1 -1
  565. package/dist/show/model.d.cts +10 -1
  566. package/dist/show/model.d.mts +10 -1
  567. package/dist/show/model.d.ts +10 -1
  568. package/dist/show/render.cjs +287 -49
  569. package/dist/show/render.cjs.map +1 -1
  570. package/dist/show/render.d.cts +3 -0
  571. package/dist/show/render.d.mts +3 -0
  572. package/dist/show/render.d.ts +3 -0
  573. package/dist/sources/projector.cjs +3 -0
  574. package/dist/sources/projector.cjs.map +1 -1
  575. package/dist/types.cjs.map +1 -1
  576. package/dist/types.d.cts +1 -1
  577. package/dist/types.d.mts +1 -1
  578. package/dist/types.d.ts +1 -1
  579. package/dist/view/app-dist/.vite/manifest.json +2 -2
  580. package/dist/view/app-dist/assets/index-CmVoXbwG.js +63 -0
  581. package/dist/view/app-dist/assets/{quality-cost-scatter-CFB3wnkN.js → quality-cost-scatter-BuLISaH4.js} +1 -1
  582. package/dist/view/app-dist/index.html +1 -1
  583. package/dist/view/cli/contribution.cjs +54 -21
  584. package/dist/view/cli/contribution.cjs.map +1 -1
  585. package/dist/view/cli/contribution.d.cts +2 -1
  586. package/dist/view/cli/contribution.d.mts +2 -1
  587. package/dist/view/cli/contribution.d.ts +2 -1
  588. package/dist/view/function-runtime.mjs +13231 -11647
  589. package/dist/view/http-protocol.cjs +3 -0
  590. package/dist/view/http-protocol.cjs.map +1 -1
  591. package/dist/view/http-protocol.d.cts +8 -0
  592. package/dist/view/http-protocol.d.mts +8 -0
  593. package/dist/view/http-protocol.d.ts +8 -0
  594. package/dist/view/inspection-host.cjs +17 -1
  595. package/dist/view/inspection-host.cjs.map +1 -1
  596. package/dist/view/render.cjs +1 -0
  597. package/dist/view/render.cjs.map +1 -1
  598. package/dist/view/render.d.cts +2 -1
  599. package/dist/view/render.d.mts +2 -1
  600. package/dist/view/render.d.ts +2 -1
  601. package/dist/view/revision.cjs.map +1 -1
  602. package/dist/view/revision.d.cts +12 -0
  603. package/dist/view/revision.d.mts +12 -0
  604. package/dist/view/revision.d.ts +12 -0
  605. package/dist/view/server.cjs +10 -9
  606. package/dist/view/server.cjs.map +1 -1
  607. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  608. package/docs-site/zh/explanation/adapter.mdx +2 -2
  609. package/docs-site/zh/explanation/assert.mdx +60 -24
  610. package/docs-site/zh/explanation/drive.mdx +1 -1
  611. package/docs-site/zh/explanation/evals.mdx +31 -29
  612. package/docs-site/zh/explanation/experiment.mdx +15 -15
  613. package/docs-site/zh/explanation/judge.mdx +23 -15
  614. package/docs-site/zh/explanation/overview.mdx +44 -21
  615. package/docs-site/zh/explanation/record.mdx +28 -13
  616. package/docs-site/zh/explanation/results-flow.mdx +37 -0
  617. package/docs-site/zh/explanation/runner.mdx +27 -6
  618. package/docs-site/zh/index.mdx +22 -115
  619. package/docs-site/zh/introduction.mdx +89 -61
  620. package/docs-site/zh/reference/cli.mdx +50 -26
  621. package/docs-site/zh/reference/define-agent.mdx +37 -5
  622. package/docs-site/zh/reference/define-eval.mdx +130 -29
  623. package/docs-site/zh/reference/define-experiment.mdx +251 -0
  624. package/docs-site/zh/reference/events.mdx +34 -30
  625. package/docs-site/zh/reference/expect.mdx +77 -2
  626. package/docs-site/zh/reference/official-adapters.mdx +2 -2
  627. package/docs-site/zh/troubleshooting/debug-sandbox.mdx +43 -24
  628. package/docs-site/zh/troubleshooting/debugging.mdx +65 -42
  629. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +35 -28
  630. package/docs-site/zh/tutorials/accept-results.mdx +34 -24
  631. package/docs-site/zh/tutorials/agent-feedback-loop.mdx +74 -43
  632. package/docs-site/zh/tutorials/agent-onboarding.mdx +27 -20
  633. package/docs-site/zh/tutorials/authoring.mdx +138 -121
  634. package/docs-site/zh/tutorials/ci-integration.mdx +46 -22
  635. package/docs-site/zh/tutorials/compare-runs.mdx +40 -13
  636. package/docs-site/zh/tutorials/concurrency.mdx +66 -62
  637. package/docs-site/zh/tutorials/configuration.mdx +17 -17
  638. package/docs-site/zh/tutorials/connect-otel.mdx +48 -37
  639. package/docs-site/zh/tutorials/connect-your-agent.mdx +80 -173
  640. package/docs-site/zh/tutorials/control-run-cost.mdx +63 -12
  641. package/docs-site/zh/tutorials/criteria-files.mdx +28 -21
  642. package/docs-site/zh/tutorials/custom-application.mdx +75 -55
  643. package/docs-site/zh/tutorials/dataset-fanout.mdx +32 -22
  644. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +38 -31
  645. package/docs-site/zh/tutorials/docker-in-docker.mdx +83 -89
  646. package/docs-site/zh/tutorials/eval-groups.mdx +70 -89
  647. package/docs-site/zh/tutorials/evaluation-kinds.mdx +12 -5
  648. package/docs-site/zh/tutorials/experiment-services.mdx +243 -0
  649. package/docs-site/zh/tutorials/fixtures.mdx +42 -26
  650. package/docs-site/zh/tutorials/handle-execution-failures.mdx +41 -19
  651. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +21 -16
  652. package/docs-site/zh/tutorials/niceeval-taste-application.mdx +394 -0
  653. package/docs-site/zh/tutorials/niceeval-taste.mdx +190 -0
  654. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +51 -39
  655. package/docs-site/zh/tutorials/plugins.mdx +55 -31
  656. package/docs-site/zh/tutorials/prebuilt-sandbox.mdx +204 -0
  657. package/docs-site/zh/tutorials/quickstart.mdx +91 -47
  658. package/docs-site/zh/tutorials/reporters.mdx +45 -30
  659. package/docs-site/zh/tutorials/rerun-and-cache.mdx +39 -40
  660. package/docs-site/zh/tutorials/sandbox-agent.mdx +65 -40
  661. package/docs-site/zh/tutorials/sandbox-providers.mdx +104 -282
  662. package/docs-site/zh/tutorials/sandbox-reuse.mdx +65 -97
  663. package/docs-site/zh/tutorials/select-and-preview.mdx +25 -20
  664. package/docs-site/zh/tutorials/verify-judge.mdx +49 -26
  665. package/docs-site/zh/tutorials/viewing-results.mdx +130 -80
  666. package/docs-site/zh/tutorials/write-experiment.mdx +116 -298
  667. package/docs-site/zh/tutorials/write-send.mdx +53 -52
  668. package/node_modules/undici/docs/docs/api/Agent.md +8 -8
  669. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
  670. package/node_modules/undici/docs/docs/api/Errors.md +25 -0
  671. package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
  672. package/node_modules/undici/docs/docs/api/Pool.md +5 -6
  673. package/node_modules/undici/lib/api/readable.js +1 -2
  674. package/node_modules/undici/lib/core/request.js +23 -2
  675. package/node_modules/undici/lib/core/util.js +0 -39
  676. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
  677. package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
  678. package/node_modules/undici/lib/dispatcher/client.js +1 -1
  679. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -2
  680. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
  681. package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
  682. package/node_modules/undici/lib/dispatcher/pool.js +90 -7
  683. package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
  684. package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
  685. package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
  686. package/node_modules/undici/lib/handler/retry-handler.js +72 -13
  687. package/node_modules/undici/lib/interceptor/cache.js +4 -1
  688. package/node_modules/undici/lib/interceptor/decompress.js +236 -69
  689. package/node_modules/undici/lib/web/cache/cache.js +17 -8
  690. package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
  691. package/node_modules/undici/lib/web/cookies/index.js +19 -7
  692. package/node_modules/undici/lib/web/cookies/util.js +3 -1
  693. package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
  694. package/node_modules/undici/lib/web/fetch/body.js +22 -15
  695. package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
  696. package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
  697. package/node_modules/undici/lib/web/fetch/headers.js +34 -31
  698. package/node_modules/undici/lib/web/fetch/index.js +38 -14
  699. package/node_modules/undici/lib/web/fetch/request.js +74 -79
  700. package/node_modules/undici/lib/web/fetch/response.js +43 -44
  701. package/node_modules/undici/lib/web/fetch/util.js +7 -7
  702. package/node_modules/undici/lib/web/infra/index.js +16 -1
  703. package/node_modules/undici/lib/web/webidl/index.js +2 -14
  704. package/node_modules/undici/lib/web/websocket/events.js +43 -26
  705. package/node_modules/undici/lib/web/websocket/receiver.js +5 -0
  706. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
  707. package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
  708. package/node_modules/undici/package.json +1 -1
  709. package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
  710. package/node_modules/undici/types/interceptors.d.ts +1 -1
  711. package/node_modules/undici/types/webidl.d.ts +13 -7
  712. package/package.json +4 -4
  713. package/dist/view/app-dist/assets/index-DFzw1L97.js +0 -63
  714. package/docs-site/zh/tutorials/experiments.mdx +0 -101
@@ -4,11 +4,16 @@ import type { Agent, AgentContext, AgentSession, InputFile, InputRequest, InputR
4
4
  import { type TurnId } from "../record/family/source-receipt/model.mjs";
5
5
  import { type ObservedAttemptCut, type ObservedEvaluationSegment, type ObservedSessionSnapshot, type ObservedTurnSnapshot } from "../o11y/observed.mjs";
6
6
  import type { AgentOtelChannel, TurnSpans } from "../o11y/otlp/turn-otel.mjs";
7
+ import type { AgentUsageContribution } from "../o11y/eval-usage.mjs";
7
8
  import { type ResolvedEvidenceCoverage } from "../assertions/coverage.mjs";
8
9
  import { captureLoc, type SourceRegistry } from "../source-loc.mjs";
9
10
  import { type ConcurrencySlot } from "./send-retry.mjs";
10
11
  import type { AttemptFailureClassifier } from "../shared/failure-class.mjs";
11
12
  import type { RetryAttemptRecord, TimingActivity } from "../runner/types.mjs";
13
+ interface ObservedTurnState {
14
+ readonly outcome: "completed" | "failed" | "waiting";
15
+ readonly coverage: ResolvedEvidenceCoverage;
16
+ }
12
17
  export declare function createAgentSession(): AgentSession;
13
18
  /**
14
19
  * 一条会话线的可变状态。存取器(id/capture/get/set/take)委托给
@@ -159,6 +164,9 @@ export declare class SessionManager {
159
164
  evidenceCoverage: ResolvedEvidenceCoverage;
160
165
  /** 自动重试吸收的物理 send 失败;不混进 allEvents。 */
161
166
  readonly retryAttempts: RetryAttemptRecord[];
167
+ private readonly usageContributions;
168
+ /** A frozen call-time copy; terminal replacement never changes an earlier pending cut. */
169
+ usageContributionsSnapshot(): readonly AgentUsageContribution[];
162
170
  /** 归属到本 attempt 的 span(逐轮攒;attempt 末尾连同 sweep 的迟到 span 一起挂 trace)。 */
163
171
  readonly otelSpans: TraceSpan[];
164
172
  /** 本 attempt 各轮的 traceId(attempt 末尾按它 sweep 迟到 span)。 */
@@ -181,11 +189,18 @@ export declare class SessionManager {
181
189
  private localSourceOrder;
182
190
  private readonly nextSourceOrder;
183
191
  private readonly observedIngestion;
192
+ private observedTurnStates;
184
193
  constructor(deps: SessionDeps);
185
194
  /** Stable vector cut for every Session that has begun observation. */
186
195
  observedAttemptCut(): ObservedAttemptCut;
196
+ /** A frozen call-time cut of all sealed sends, including failed sends without a Turn. */
197
+ observedSessionSnapshots(): readonly ObservedSessionSnapshot[];
198
+ observedTurnState(snapshot: ObservedTurnSnapshot): ObservedTurnState | undefined;
199
+ /** Absorbed retry events have no sealed observed identities to include in default history. */
200
+ observedHistoryIncompleteReason(): string | undefined;
187
201
  observedEvaluationSegment(snapshot: ObservedTurnSnapshot): ObservedEvaluationSegment | undefined;
188
202
  releaseObservedEvaluationSegments(): void;
203
+ private recordObservedTurnState;
189
204
  private mintPhysicalTurnId;
190
205
  /** A ledger checkpoint failure is attempt state, not a synthetic empty diff. */
191
206
  get ledgerCaptureFailure(): LedgerCaptureFailure | undefined;
@@ -200,6 +215,8 @@ export declare class SessionManager {
200
215
  sendEffect(session: RunSession, text: string, files?: readonly InputFile[], responses?: readonly InputResponse[], loc?: ReturnType<typeof captureLoc>): Effect.Effect<Turn, unknown>;
201
216
  private sendSerializedEffect;
202
217
  private sendAgentEffect;
218
+ /** Runs at the Agent invoke boundary, after ledger and OTLP preparation, once per retry. */
219
+ private recordSendUsageEffect;
203
220
  /**
204
221
  * 经共享 OTLP 通道跑一轮:本轮的 traceparent 经 ctx.telemetry.headers 交给 adapter,
205
222
  * 返回后按 traceId / 时间窗口把本轮 span 归属进瀑布图。span 只进瀑布图,不进事件流、
@@ -211,3 +228,4 @@ export declare class SessionManager {
211
228
  private sendAgent;
212
229
  }
213
230
  export declare function lastAssistantText(events: readonly StreamEvent[]): string | undefined;
231
+ export {};
@@ -4,11 +4,16 @@ import type { Agent, AgentContext, AgentSession, InputFile, InputRequest, InputR
4
4
  import { type TurnId } from "../record/family/source-receipt/model.js";
5
5
  import { type ObservedAttemptCut, type ObservedEvaluationSegment, type ObservedSessionSnapshot, type ObservedTurnSnapshot } from "../o11y/observed.js";
6
6
  import type { AgentOtelChannel, TurnSpans } from "../o11y/otlp/turn-otel.js";
7
+ import type { AgentUsageContribution } from "../o11y/eval-usage.js";
7
8
  import { type ResolvedEvidenceCoverage } from "../assertions/coverage.js";
8
9
  import { captureLoc, type SourceRegistry } from "../source-loc.js";
9
10
  import { type ConcurrencySlot } from "./send-retry.js";
10
11
  import type { AttemptFailureClassifier } from "../shared/failure-class.js";
11
12
  import type { RetryAttemptRecord, TimingActivity } from "../runner/types.js";
13
+ interface ObservedTurnState {
14
+ readonly outcome: "completed" | "failed" | "waiting";
15
+ readonly coverage: ResolvedEvidenceCoverage;
16
+ }
12
17
  export declare function createAgentSession(): AgentSession;
13
18
  /**
14
19
  * 一条会话线的可变状态。存取器(id/capture/get/set/take)委托给
@@ -159,6 +164,9 @@ export declare class SessionManager {
159
164
  evidenceCoverage: ResolvedEvidenceCoverage;
160
165
  /** 自动重试吸收的物理 send 失败;不混进 allEvents。 */
161
166
  readonly retryAttempts: RetryAttemptRecord[];
167
+ private readonly usageContributions;
168
+ /** A frozen call-time copy; terminal replacement never changes an earlier pending cut. */
169
+ usageContributionsSnapshot(): readonly AgentUsageContribution[];
162
170
  /** 归属到本 attempt 的 span(逐轮攒;attempt 末尾连同 sweep 的迟到 span 一起挂 trace)。 */
163
171
  readonly otelSpans: TraceSpan[];
164
172
  /** 本 attempt 各轮的 traceId(attempt 末尾按它 sweep 迟到 span)。 */
@@ -181,11 +189,18 @@ export declare class SessionManager {
181
189
  private localSourceOrder;
182
190
  private readonly nextSourceOrder;
183
191
  private readonly observedIngestion;
192
+ private observedTurnStates;
184
193
  constructor(deps: SessionDeps);
185
194
  /** Stable vector cut for every Session that has begun observation. */
186
195
  observedAttemptCut(): ObservedAttemptCut;
196
+ /** A frozen call-time cut of all sealed sends, including failed sends without a Turn. */
197
+ observedSessionSnapshots(): readonly ObservedSessionSnapshot[];
198
+ observedTurnState(snapshot: ObservedTurnSnapshot): ObservedTurnState | undefined;
199
+ /** Absorbed retry events have no sealed observed identities to include in default history. */
200
+ observedHistoryIncompleteReason(): string | undefined;
187
201
  observedEvaluationSegment(snapshot: ObservedTurnSnapshot): ObservedEvaluationSegment | undefined;
188
202
  releaseObservedEvaluationSegments(): void;
203
+ private recordObservedTurnState;
189
204
  private mintPhysicalTurnId;
190
205
  /** A ledger checkpoint failure is attempt state, not a synthetic empty diff. */
191
206
  get ledgerCaptureFailure(): LedgerCaptureFailure | undefined;
@@ -200,6 +215,8 @@ export declare class SessionManager {
200
215
  sendEffect(session: RunSession, text: string, files?: readonly InputFile[], responses?: readonly InputResponse[], loc?: ReturnType<typeof captureLoc>): Effect.Effect<Turn, unknown>;
201
216
  private sendSerializedEffect;
202
217
  private sendAgentEffect;
218
+ /** Runs at the Agent invoke boundary, after ledger and OTLP preparation, once per retry. */
219
+ private recordSendUsageEffect;
203
220
  /**
204
221
  * 经共享 OTLP 通道跑一轮:本轮的 traceparent 经 ctx.telemetry.headers 交给 adapter,
205
222
  * 返回后按 traceId / 时间窗口把本轮 span 归属进瀑布图。span 只进瀑布图,不进事件流、
@@ -211,3 +228,4 @@ export declare class SessionManager {
211
228
  private sendAgent;
212
229
  }
213
230
  export declare function lastAssistantText(events: readonly StreamEvent[]): string | undefined;
231
+ export {};
package/dist/define.cjs CHANGED
@@ -12,6 +12,7 @@ exports.defineEvalForContext = defineEvalForContext;
12
12
  exports.defineExperiment = defineExperiment;
13
13
  exports.defineConfig = defineConfig;
14
14
  exports.defineSandbox = defineSandbox;
15
+ const model_slots_ts_1 = require("./model-slots.cjs");
15
16
  const adapter_flags_ts_1 = require("./adapter-flags.cjs");
16
17
  const flags_ts_1 = require("./experiment/flags.cjs");
17
18
  const judge_config_ts_1 = require("./runner/judge-config.cjs");
@@ -174,6 +175,8 @@ function defineScoreEval(def) {
174
175
  return defineEvalForContext("score", def);
175
176
  }
176
177
  /** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */
178
+ // @concord-code ne-surface-define-eval-context
179
+ // @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md
177
180
  function defineEvalForContext(kind, def, internalFields = {}) {
178
181
  const factory = kind === "pass" ? "defineEval" : "defineScoreEval";
179
182
  if (Object.hasOwn(def, "id")) {
@@ -199,6 +202,8 @@ function defineEvalForContext(kind, def, internalFields = {}) {
199
202
  definedScoreEvals.add(result);
200
203
  return result;
201
204
  }
205
+ // @concord-code ne-surface-define-experiment
206
+ // @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md
202
207
  function defineExperiment(def) {
203
208
  if (Object.hasOwn(def, "id")) {
204
209
  throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);
@@ -207,6 +212,10 @@ function defineExperiment(def) {
207
212
  throw new Error(`defineExperiment requires exactly one of agent or adapter.`);
208
213
  }
209
214
  const adapter = def.adapter ?? def.agent;
215
+ if (adapter.kind !== "custom" && def.models !== undefined) {
216
+ throw new TypeError("Experiment models is only supported by custom Adapters.");
217
+ }
218
+ const models = adapter.kind === "custom" ? (0, model_slots_ts_1.normalizeModelSlots)(def) : undefined;
210
219
  const judgeRuntime = def.judgeRuntime === undefined
211
220
  ? undefined
212
221
  : normalizeDefinitionJudge(def.judgeRuntime, "defineExperiment() judgeRuntime");
@@ -246,10 +255,15 @@ function defineExperiment(def) {
246
255
  }
247
256
  const sharedState = normalizeSharedState(def.sharedState);
248
257
  const sandboxCache = normalizeSandboxCache(def.sandboxCache, "defineExperiment");
249
- const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, ...author } = def;
258
+ const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;
250
259
  const flags = (0, flags_ts_1.decodeExperimentFlags)(def.flags === undefined ? {} : def.flags);
251
260
  return (0, types_ts_1.brandExperimentDefinition)({
252
261
  ...author,
262
+ ...(models === undefined ? {} : {
263
+ models,
264
+ model: models.default?.model ?? undefined,
265
+ reasoningEffort: models.default?.reasoningEffort ?? undefined,
266
+ }),
253
267
  adapter,
254
268
  ...(adapter.kind === "custom" ? {} : { agent: adapter }),
255
269
  flags: adapter.kind === "custom" && adapter.parseFlags !== undefined
@@ -315,6 +329,8 @@ function normalizeEvalFields(def) {
315
329
  }),
316
330
  };
317
331
  }
332
+ // @concord-code ne-surface-normalize-plugins
333
+ // @concord-implements docs/feature/plugins/library.md
318
334
  function normalizePlugins(value, label, owner) {
319
335
  if (!Array.isArray(value))
320
336
  throw new TypeError(`${label} must be an array.`);
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["define.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Adapter } from \"./adapter.ts\";\nimport { parseAdapterFlags } from \"./adapter-flags.ts\";\nimport { decodeExperimentFlags } from \"./experiment/flags.ts\";\n// 定义入口:把用户对象规格化成核心认得的形状。路径即身份 —— 这里禁止手写 id,\n// 由发现阶段从文件路径推导(见 runner/discover.ts)。\nimport type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, EvalDefinitionFields, ExperimentDefinition, ExperimentInput, SharedStateConfig, SandboxCacheConfig, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext, JsonValue, } from \"./types.ts\";\nimport { normalizeJudgeSelection } from \"./runner/judge-config.ts\";\nimport { isJudgeProvider } from \"./judge/provider.ts\";\nimport { MigrationRequiredError, captureMigrationSource } from \"./error-assistance/index.ts\";\nimport { brandEvalDefinition, brandEvalGroupDefinition, brandExperimentDefinition, isEvalDefinition, } from \"./types.ts\";\nimport { customProviderSandbox, isSandboxLayer, sandboxLayerStateOf, type CustomProviderSandboxOptions, type SandboxLayer, } from \"./sandbox/layer.ts\";\nimport { Result, Schema } from \"effect\";\nimport { assertEvidenceCoverage } from \"./assertions/coverage.ts\";\nimport { effectAgentCallback, registerAgentEffectRuntime, type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition, } from \"./agents/effect-runtime.ts\";\nimport { isPluginInstance, pluginInstanceDataOf, type PluginInstance, type PluginOwner } from \"./plugin/contracts.ts\";\n/** Recognize only the retired flat configuration, without evaluating getters. */\nfunction normalizeDefinitionJudge(value: unknown, label: string) {\n if (!isJudgeProvider(value) && typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const prototype = Object.getPrototypeOf(value);\n const legacyKeys = [\"model\", \"baseUrl\", \"apiKeyEnv\", \"timeoutMs\", \"maxOutputTokens\"];\n if ((prototype === Object.prototype || prototype === null) && Reflect.ownKeys(value).every((key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && legacyKeys.includes(key) && descriptor !== undefined && \"value\" in descriptor;\n })) {\n throw new MigrationRequiredError({ occurrences: [{\n guideId: \"judge-provider\",\n subject: label.replace(\"() \", \".\"),\n source: captureMigrationSource(),\n }] });\n }\n }\n return normalizeJudgeSelection(value, label);\n}\n// 发现期必须区分 defineScoreEval 的真正产物与运行时手写 `{ evaluationKind: \"score\" }` 的裸对象。\n// WeakSet 是模块私有来源证明;Definition 本身另有 types.ts 的私有 symbol 品牌供类型层使用。\nconst definedScoreEvals = new WeakSet<object>();\n/** Define a closed set of real Eval definitions sharing one physical Sandbox. */\nexport function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition {\n if (!Array.isArray(input.evals) || input.evals.length === 0) {\n throw new TypeError(\"defineEvalGroup evals must be a non-empty array of defineEval()/defineScoreEval() definitions.\");\n }\n input.evals.forEach((member, index) => {\n if (!isEvalDefinition(member)) {\n throw new TypeError(`defineEvalGroup evals[${index}] must be the object returned by defineEval() or defineScoreEval().`);\n }\n });\n assertSandboxLayer(input.sandbox, \"defineEvalGroup\");\n if (input.onUnavailable !== \"stop-group\" && input.onUnavailable !== \"replace-sandbox\") {\n throw new TypeError(\"defineEvalGroup onUnavailable must be \\\"stop-group\\\" or \\\"replace-sandbox\\\".\");\n }\n const [first, ...rest] = input.evals;\n return brandEvalGroupDefinition({\n evals: Object.freeze([first, ...rest]),\n onUnavailable: input.onUnavailable,\n ...(input.sandbox ? { sandbox: input.sandbox } : {}),\n ...(input.plugins === undefined ? {} : { plugins: normalizePlugins(input.plugins, \"defineEvalGroup plugins\", \"group\") }),\n });\n}\n/** @internal 仅供 discoverEvals 验证 score 题型来源。 */\nexport function isDefinedScoreEval(value: object): boolean {\n return definedScoreEvals.has(value);\n}\n/** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */\nexport function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent {\n if (!def.name)\n throw new Error(`defineSandboxAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineSandboxAgent\");\n if (def.ensure === undefined)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n const ensure = Array.isArray(def.ensure) ? def.ensure : [def.ensure];\n if (ensure.length === 0)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n if (def.sandbox !== undefined) {\n if (!isSandboxLayer(def.sandbox)) {\n throw new TypeError(\"defineSandboxAgent sandbox must be a SandboxLayer created by sandboxLayer().\");\n }\n if (sandboxLayerStateOf(def.sandbox).kind !== \"command-only\") {\n throw new TypeError(\"defineSandboxAgent sandbox must be command-only; an Agent cannot provide a Sandbox template.\");\n }\n }\n return {\n name: def.name,\n kind: \"sandbox\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n ...(def.sandbox === undefined ? {} : { sandbox: def.sandbox }),\n ensure,\n installers: def.installers ?? [],\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeSandboxAgent(def: Omit<SandboxAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalSandboxAgentDefinition): SandboxAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineSandboxAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (_sandbox, context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (_sandbox, context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send: send as InternalDirectAgentDefinition[\"send\"],\n sandboxSetup: setup,\n sandboxTeardown: teardown,\n });\n}\n/** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */\nexport function defineAgent(def: DirectAgentDef): DirectAgent {\n if (!def.name)\n throw new Error(`defineAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineAgent\");\n return {\n name: def.name,\n kind: \"direct\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeDirectAgent(def: Omit<DirectAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalDirectAgentDefinition): DirectAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send,\n directSetup: setup,\n directTeardown: teardown,\n });\n}\n/** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */\nexport function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<\"pass\", TestContext, Sandbox> {\n return defineEvalForContext(\"pass\", def);\n}\n/**\n * 计分制 eval:Fact verdict uses 与 Fact score uses 可以读取同一份证据;正常返回由 Runner\n * 自动关闭计分收集器。字段与 `defineEval` 同形,禁止提供 id,由发现期推导。\n */\nexport function defineScoreEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: ScoreEvalInput<Sandbox>): EvalDefinition<\"score\", ScoreTestContext, Sandbox> {\n return defineEvalForContext(\"score\", def);\n}\ntype EvalFactoryInput<Sandbox extends SandboxLayer | undefined> = Omit<EvalInput<Sandbox> | ScoreEvalInput<Sandbox>, \"test\"> & {\n readonly test: (...args: never[]) => ReturnType<EvalDefinition<\"pass\", unknown, Sandbox>[\"test\"]>;\n};\n/** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */\nexport function defineEvalForContext<Kind extends \"pass\" | \"score\", Context, const Sandbox extends SandboxLayer | undefined = undefined>(kind: Kind, def: EvalFactoryInput<Sandbox>, internalFields: Readonly<Record<PropertyKey, unknown>> = {}): EvalDefinition<Kind, Context, Sandbox> {\n const factory = kind === \"pass\" ? \"defineEval\" : \"defineScoreEval\";\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`${factory} does not accept id; ids are derived from file paths.`);\n }\n if (Object.hasOwn(def, \"evaluationKind\")) {\n throw new Error(`${factory} does not accept evaluationKind; it is always set to ${JSON.stringify(kind)}.`);\n }\n if (Object.hasOwn(def, \"configHash\")) {\n throw new Error(`${factory} does not accept configHash; configHash is computed during run planning.`);\n }\n if (typeof def.test !== \"function\") {\n throw new Error(`${factory} requires an async test(t) function.`);\n }\n assertSandboxLayer(def.sandbox, factory);\n const result = brandEvalDefinition({\n ...normalizeEvalFields(def),\n ...internalFields,\n evaluationKind: kind,\n test: def.test,\n });\n if (kind === \"score\")\n definedScoreEvals.add(result);\n return result as EvalDefinition<Kind, Context, Sandbox>;\n}\n/** 实验:可签入的运行配置(怎么跑这批 eval)。 */\nexport function defineExperiment<const A extends Adapter>(def: ExperimentInput<A>): ExperimentDefinition<A>;\nexport function defineExperiment(def: Omit<ExperimentInput, \"flags\"> & {\n readonly flags?: unknown;\n}): ExperimentDefinition {\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);\n }\n if ((def.agent === undefined) === (def.adapter === undefined)) {\n throw new Error(`defineExperiment requires exactly one of agent or adapter.`);\n }\n const adapter = def.adapter ?? def.agent!;\n const judgeRuntime = def.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judgeRuntime, \"defineExperiment() judgeRuntime\");\n assertSandboxLayer(def.sandbox, \"defineExperiment\");\n if (adapter.kind === \"custom\") {\n if (def.sandbox !== undefined || def.sandboxReuse === true || def.sandboxCache !== undefined) {\n throw new Error(`Custom Adapter experiments do not support sandbox, sandboxReuse, or sandboxCache.`);\n }\n if (def.budget !== undefined) {\n throw new Error(`Custom Adapter experiments do not support budget because Adapter usage is not collected.`);\n }\n }\n // setup 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.setup);\n // 传成非函数(如误把 sandbox 钩子对象塞进来)在解析时就报,不等到调度才炸。\n if (def.setup !== undefined && typeof def.setup !== \"function\") {\n throw new Error(`experiment.setup must be a function ((ctx) => void); use experiment.teardown for cleanup; to prepare the in-sandbox environment per experiment, chain .setup() hooks on the sandbox spec instead.`);\n }\n // teardown 与 setup 是同一个 Experiment lifecycle 边界。非函数值绝不能\n // 伪装成已声明的 cleanup,否则 explicit sharedState recovery 可能在没有\n // 执行补偿的情况下释放 immutable owner generation。\n if (def.teardown !== undefined && typeof def.teardown !== \"function\") {\n throw new Error(`Experiment teardown must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);\n }\n // classifyFailure 是失败分类链上的实验通道(见 runner/types.ts 的 ExperimentDef.classifyFailure):\n // 传成非函数在解析时就报,不等到某条 attempt 撞死才发现这一路声明白写。\n if (def.classifyFailure !== undefined && typeof def.classifyFailure !== \"function\") {\n throw new Error(`experiment.classifyFailure must be a function ((failure) => FailureClass | undefined); it classifies failures that surface as third-party errors and must return undefined for anything it does not recognize.`);\n }\n // labels 是报告归类坐标(进 ExperimentRunInfo.labels,不透传 ctx/t):值域 string | number,\n // 解析时即校验,布尔 / 对象 / NaN 直接报错,不等到落盘或报告分组才炸。\n if (def.labels !== undefined) {\n for (const [key, value] of Object.entries(def.labels)) {\n const ok = typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n if (!ok)\n throw new Error(`experiment.labels.${key} must be a string or a finite number; labels are report-side grouping coordinates persisted verbatim into result runs.`);\n }\n }\n const sharedState = normalizeSharedState(def.sharedState);\n const sandboxCache = normalizeSandboxCache(def.sandboxCache, \"defineExperiment\");\n const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, ...author } = def;\n const flags = decodeExperimentFlags(def.flags === undefined ? {} : def.flags);\n return brandExperimentDefinition({\n ...author,\n adapter,\n ...(adapter.kind === \"custom\" ? {} : { agent: adapter }),\n flags: adapter.kind === \"custom\" && adapter.parseFlags !== undefined\n ? parseAdapterFlags(adapter.parseFlags, flags)\n : flags,\n labels: Object.freeze({ ...(def.labels ?? {}) }),\n attempts: def.attempts ?? 1,\n earlyExit: def.earlyExit ?? false,\n evals: Array.isArray(def.evals) ? Object.freeze([...def.evals]) : (def.evals ?? \"*\"),\n sandboxReuse: def.sandboxReuse === true,\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n ...(sharedState === undefined ? {} : { sharedState }),\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n plugins: normalizePlugins(def.plugins ?? [], \"defineExperiment plugins\", \"experiment\"),\n });\n}\nfunction normalizeSandboxCache(value: unknown, factory: \"defineConfig\" | \"defineExperiment\"): SandboxCacheConfig | undefined {\n if (value === undefined)\n return undefined;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n const keys = Object.keys(value);\n const setup = Reflect.get(value, \"setup\");\n if (keys.some((key) => key !== \"setup\") ||\n (setup !== undefined && setup !== \"use\" && setup !== \"bypass\")) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n return Object.freeze(setup === undefined ? {} : { setup });\n}\nconst SharedStateKeyPattern = /^[a-z0-9][a-z0-9._/-]{0,127}$/u;\nfunction normalizeSharedState(value: unknown): SharedStateConfig | undefined {\n if (value === undefined)\n return undefined;\n const candidate = value as {\n key?: unknown;\n };\n if (typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n !Object.hasOwn(value, \"key\") ||\n Object.keys(value).length !== 1 ||\n typeof candidate.key !== \"string\" ||\n !SharedStateKeyPattern.test(candidate.key)) {\n throw new TypeError(`experiment.sharedState must be exactly { key }, where key is a stable, non-secret string matching [a-z0-9][a-z0-9._/-]{0,127}.`);\n }\n return Object.freeze({ key: candidate.key });\n}\nfunction normalizeEvalFields<const Sandbox extends SandboxLayer | undefined>(def: EvalInput<Sandbox> | ScoreEvalInput<Sandbox>): EvalDefinitionFields<Sandbox> {\n const judge = def.judge === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judge, \"defineEval() judge\");\n return {\n ...(def.description !== undefined ? { description: def.description } : {}),\n tags: Object.freeze([...(def.tags ?? [])]),\n ...(def.sandbox !== undefined ? { sandbox: def.sandbox } : {}),\n plugins: normalizePlugins(def.plugins ?? [], \"defineEval plugins\", \"eval\"),\n ...(judge !== undefined ? { judge } : {}),\n reporters: Object.freeze([...(def.reporters ?? [])]),\n ...(def.timeoutMs !== undefined ? { timeoutMs: def.timeoutMs } : {}),\n metadata: decodeJsonRecord(def.metadata ?? {}, \"Eval metadata\"),\n diff: Object.freeze({\n include: Object.freeze([...(def.diff?.include ?? [])]),\n ignore: Object.freeze([...(def.diff?.ignore ?? [])]),\n }),\n };\n}\nfunction normalizePlugins<Owner extends PluginOwner>(value: readonly PluginInstance<Owner>[], label: string, owner: Owner): readonly PluginInstance<Owner>[] {\n if (!Array.isArray(value))\n throw new TypeError(`${label} must be an array.`);\n return Object.freeze(value.map((plugin, index) => {\n if (!isPluginInstance(plugin))\n throw new TypeError(`${label}[${index}] must be created by definePlugin().`);\n if (pluginInstanceDataOf(plugin)[owner] === undefined) {\n throw new TypeError(`${label}[${index}] does not support ${owner} attachment.`);\n }\n return plugin;\n }));\n}\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\")\n return true;\n if (typeof value === \"number\")\n return Number.isFinite(value);\n if (Array.isArray(value))\n return value.every(isJsonValue);\n if (typeof value !== \"object\")\n return false;\n return Object.values(value).every(isJsonValue);\n}\nconst JsonValueSchema = Schema.declare<JsonValue>(isJsonValue);\nconst JsonRecordSchema = Schema.Record(Schema.String, JsonValueSchema);\nfunction deepFreezeJson(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n const items: JsonValue[] = value.map(deepFreezeJson);\n Object.freeze(items);\n return items;\n }\n if (value !== null && typeof value === \"object\") {\n const record: globalThis.Record<string, JsonValue> = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, deepFreezeJson(child)]));\n Object.freeze(record);\n return record;\n }\n return value;\n}\nfunction decodeJsonRecord(value: unknown, label: string): Readonly<globalThis.Record<string, JsonValue>> {\n const decoded = Schema.decodeUnknownResult(JsonRecordSchema, { errors: \"all\" })(value);\n if (Result.isFailure(decoded))\n throw new TypeError(`${label} must be JSON-compatible: ${String(decoded.failure)}`);\n return Object.freeze(Object.fromEntries(Object.entries(decoded.success).map(([key, child]) => [key, deepFreezeJson(child)])));\n}\n/**\n * `SandboxLayer` 的品牌只由 `niceeval/sandbox` 工厂写入。动态 TSX/JS 调用绕过静态类型时,\n * 不接受看似相同的裸对象,以免在 linker 阶段才得到难以定位的错误。\n */\nfunction assertSandboxLayer(value: unknown, factory: string): void {\n if (value !== undefined && !isSandboxLayer(value)) {\n throw new TypeError(`${factory} sandbox must be a SandboxLayer created by a niceeval/sandbox factory (for example dockerSandbox(), dockerComposeSandbox(), e2bSandbox(), or vercelSandbox()).`);\n }\n}\n/** 项目级配置。 */\nexport function defineConfig(config: Config): Config {\n const sandboxCache = normalizeSandboxCache(config.sandboxCache, \"defineConfig\");\n const judgeRuntime = config.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(config.judgeRuntime, \"defineConfig() judgeRuntime\");\n if (judgeRuntime !== undefined && !isJudgeProvider(judgeRuntime)) {\n throw new TypeError(\"defineConfig() judgeRuntime must be a Judge Provider created by niceeval/judge\");\n }\n return Object.freeze({\n ...config,\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n });\n}\n/**\n * 自定义沙箱 provider:`create` 直接返回一个实现 `Sandbox` 接口的实例,不需要 niceeval 内置支持\n * 这个 provider 名字。用于接入 docker/vercel/e2b 之外的运行环境(自建 VM、Modal、Fly 等)。\n */\nexport function defineSandbox(def: CustomProviderSandboxOptions): SandboxLayer<\"template-bearing\"> {\n return customProviderSandbox(def);\n}\n"]}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["define.ts"],"names":[],"mappings":";;AAwCA,0CAoBC;AAED,gDAEC;AAED,gDAiCC;AAED,4CAiBC;AAED,kCAiBC;AAED,0CAiBC;AAED,gCAEC;AAKD,0CAEC;AAOD,oDAwBC;AAKD,4CA6EC;AA4GD,oCAaC;AAKD,sCAEC;AArZD,qDAAuD;AACvD,yDAAuD;AACvD,oDAA8D;AAI9D,8DAAmE;AACnE,qDAAsD;AACtD,0DAA6F;AAC7F,yCAAyH;AACzH,iDAAuJ;AACvJ,mCAAwC;AACxC,0DAAkE;AAClE,kEAAuK;AACvK,wDAAsH;AACtH,iFAAiF;AACjF,SAAS,wBAAwB,CAAC,KAAc,EAAE,KAAa;IAC3D,IAAI,CAAC,IAAA,6BAAe,EAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClG,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;QACrF,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/F,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAChE,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,IAAI,UAAU,CAAC;QACpH,CAAC,CAAC,EAAE,CAAC;YACD,MAAM,IAAI,iCAAsB,CAAC,EAAE,WAAW,EAAE,CAAC;wBACrC,OAAO,EAAE,gBAAgB;wBACzB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;wBAClC,MAAM,EAAE,IAAA,iCAAsB,GAAE;qBACnC,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACL,CAAC;IACD,OAAO,IAAA,yCAAuB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AACD,0EAA0E;AAC1E,kEAAkE;AAClE,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAU,CAAC;AAChD,iFAAiF;AACjF,SAAgB,eAAe,CAAiD,KAA8B;IAC1G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,gGAAgG,CAAC,CAAC;IAC1H,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAClC,IAAI,CAAC,IAAA,2BAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,yBAAyB,KAAK,qEAAqE,CAAC,CAAC;QAC7H,CAAC;IACL,CAAC,CAAC,CAAC;IACH,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACrD,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY,IAAI,KAAK,CAAC,aAAa,KAAK,iBAAiB,EAAE,CAAC;QACpF,MAAM,IAAI,SAAS,CAAC,8EAA8E,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IACrC,OAAO,IAAA,mCAAwB,EAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;QACtC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,yBAAyB,EAAE,OAAO,CAAC,EAAE,CAAC;KAC3H,CAAC,CAAC;AACP,CAAC;AACD,gDAAgD;AAChD,SAAgB,kBAAkB,CAAC,KAAa;IAC5C,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AACD,kEAAkE;AAClE,SAAgB,kBAAkB,CAAC,GAAoB;IACnD,IAAI,CAAC,GAAG,CAAC,IAAI;QACT,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,IAAA,oCAAsB,EAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IACnE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QACxB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAA,yBAAc,EAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CAAC,8EAA8E,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,IAAA,8BAAmB,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC3D,MAAM,IAAI,SAAS,CAAC,8FAA8F,CAAC,CAAC;QACxH,CAAC;IACL,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,SAAS;QACf,UAAU;QACV,eAAe;QACf,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9D,MAAM;QACN,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE;QAChC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;QAC5C,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACzB,CAAC;AACN,CAAC;AACD,oFAAoF;AACpF,SAAgB,gBAAgB,CAAC,GAA0F;IACvH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,GAAG,GAAG,CAAC;IAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAC7B,GAAG,gBAAgB;QACnB,IAAI,EAAE,IAAA,uCAAmB,EAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QACpE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAA,uCAAmB,EAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SAC3E,CAAC;QACF,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,QAAQ,EAAE,IAAA,uCAAmB,EAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACjF,CAAC;KACL,CAAC,CAAC;IACH,OAAO,IAAA,8CAA0B,EAAC,KAAK,EAAE;QACrC,IAAI,EAAE,IAA6C;QACnD,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACP,CAAC;AACD,6CAA6C;AAC7C,SAAgB,WAAW,CAAC,GAAmB;IAC3C,IAAI,CAAC,GAAG,CAAC,IAAI;QACT,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,IAAA,oCAAsB,EAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAC5D,OAAO;QACH,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,eAAe;QACf,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;QAC5C,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACzB,CAAC;AACN,CAAC;AACD,oFAAoF;AACpF,SAAgB,eAAe,CAAC,GAAwF;IACpH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,GAAG,GAAG,CAAC;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC;QACtB,GAAG,gBAAgB;QACnB,IAAI,EAAE,IAAA,uCAAmB,EAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QACpE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAA,uCAAmB,EAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACjE,CAAC;QACF,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,QAAQ,EAAE,IAAA,uCAAmB,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACvE,CAAC;KACL,CAAC,CAAC;IACH,OAAO,IAAA,8CAA0B,EAAC,KAAK,EAAE;QACrC,IAAI;QACJ,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,QAAQ;KAC3B,CAAC,CAAC;AACP,CAAC;AACD,oDAAoD;AACpD,SAAgB,UAAU,CAA6D,GAAuB;IAC1G,OAAO,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AACD;;;GAGG;AACH,SAAgB,eAAe,CAA6D,GAA4B;IACpH,OAAO,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAID,oGAAoG;AACpG,+CAA+C;AAC/C,mFAAmF;AACnF,SAAgB,oBAAoB,CAAqG,IAAU,EAAE,GAA8B,EAAE,iBAAyD,EAAE;IAC5O,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,uDAAuD,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,wDAAwD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,0EAA0E,CAAC,CAAC;IAC1G,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,sCAAsC,CAAC,CAAC;IACtE,CAAC;IACD,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAA,8BAAmB,EAAC;QAC/B,GAAG,mBAAmB,CAAC,GAAG,CAAC;QAC3B,GAAG,cAAc;QACjB,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,GAAG,CAAC,IAAI;KACjB,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,OAAO;QAChB,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,MAAgD,CAAC;AAC5D,CAAC;AAGD,6CAA6C;AAC7C,mFAAmF;AACnF,SAAgB,gBAAgB,CAAC,GAEhC;IACG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAM,CAAC;IAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,oCAAmB,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,KAAK,SAAS;QAC/C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,YAAY,EAAE,iCAAiC,CAAC,CAAC;IACpF,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC3F,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;QAChH,CAAC;IACL,CAAC;IACD,uEAAuE;IACvE,4CAA4C;IAC5C,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,mMAAmM,CAAC,CAAC;IACzN,CAAC;IACD,wDAAwD;IACxD,yDAAyD;IACzD,yCAAyC;IACzC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,8KAA8K,CAAC,CAAC;IACpM,CAAC;IACD,mFAAmF;IACnF,0CAA0C;IAC1C,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,gNAAgN,CAAC,CAAC;IACtO,CAAC;IACD,2EAA2E;IAC3E,0CAA0C;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,EAAE;gBACH,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,wHAAwH,CAAC,CAAC;QAC1K,CAAC;IACL,CAAC;IACD,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACjF,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC;IACrJ,MAAM,KAAK,GAAG,IAAA,gCAAqB,EAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,IAAA,oCAAyB,EAAC;QAC7B,GAAG,MAAM;QACT,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS;YACzC,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,IAAI,SAAS;SAChE,CAAC;QACF,OAAO;QACP,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACxD,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAChE,CAAC,CAAC,IAAA,oCAAiB,EAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;YAC9C,CAAC,CAAC,KAAK;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAChD,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC;QAC3B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,KAAK;QACjC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC;QACpF,YAAY,EAAE,GAAG,CAAC,YAAY,KAAK,IAAI;QACvC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACvD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACvD,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,0BAA0B,EAAE,YAAY,CAAC;KACzF,CAAC,CAAC;AACP,CAAC;AACD,SAAS,qBAAqB,CAAC,KAAc,EAAE,OAA4C;IACvF,IAAI,KAAK,KAAK,SAAS;QACnB,OAAO,SAAS,CAAC;IACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,wEAAwE,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC;QACnC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,wEAAwE,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,CAAC;AACD,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAC/D,SAAS,oBAAoB,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,SAAS;QACnB,OAAO,SAAS,CAAC;IACrB,MAAM,SAAS,GAAG,KAEjB,CAAC;IACF,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAC/B,OAAO,SAAS,CAAC,GAAG,KAAK,QAAQ;QACjC,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CAAC,gIAAgI,CAAC,CAAC;IAC1J,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AACD,SAAS,mBAAmB,CAAiD,GAAiD;IAC1H,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS;QACjC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAChE,OAAO;QACH,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,oBAAoB,EAAE,MAAM,CAAC;QAC1E,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,eAAe,CAAC;QAC/D,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;SACvD,CAAC;KACL,CAAC;AACN,CAAC;AACD,6CAA6C;AAC7C,sDAAsD;AACtD,SAAS,gBAAgB,CAA4B,KAAuC,EAAE,KAAa,EAAE,KAAY;IACrH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,IAAA,+BAAgB,EAAC,MAAM,CAAC;YACzB,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,IAAI,KAAK,sCAAsC,CAAC,CAAC;QACjF,IAAI,IAAA,mCAAoB,EAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YACpD,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,IAAI,KAAK,sBAAsB,KAAK,cAAc,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AACD,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QACzE,OAAO,IAAI,CAAC;IAChB,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,CAAC;IACjB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,eAAe,GAAG,eAAM,CAAC,OAAO,CAAY,WAAW,CAAC,CAAC;AAC/D,MAAM,gBAAgB,GAAG,eAAM,CAAC,MAAM,CAAC,eAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AACvE,SAAS,cAAc,CAAC,KAAgB;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAgB,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAyC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnJ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAa;IACnD,MAAM,OAAO,GAAG,eAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACvF,IAAI,eAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,6BAA6B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClI,CAAC;AACD;;;GAGG;AACH,SAAS,kBAAkB,CAAC,KAAc,EAAE,OAAe;IACvD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,IAAA,yBAAc,EAAC,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,gKAAgK,CAAC,CAAC;IACpM,CAAC;AACL,CAAC;AACD,aAAa;AACb,SAAgB,YAAY,CAAC,MAAc;IACvC,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS;QAClD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC;IACnF,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,IAAA,6BAAe,EAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,GAAG,MAAM;QACT,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACvD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KAC1D,CAAC,CAAC;AACP,CAAC;AACD;;;GAGG;AACH,SAAgB,aAAa,CAAC,GAAiC;IAC3D,OAAO,IAAA,gCAAqB,EAAC,GAAG,CAAC,CAAC;AACtC,CAAC","sourcesContent":["// @concord-file ne-surface-definition-entry\n// @concord-implements docs/feature/plugins/library.md\nimport type { Adapter } from \"./adapter.ts\";\nimport { normalizeModelSlots } from \"./model-slots.ts\";\nimport { parseAdapterFlags } from \"./adapter-flags.ts\";\nimport { decodeExperimentFlags } from \"./experiment/flags.ts\";\n// 定义入口:把用户对象规格化成核心认得的形状。路径即身份 —— 这里禁止手写 id,\n// 由发现阶段从文件路径推导(见 runner/discover.ts)。\nimport type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, EvalDefinitionFields, ExperimentDefinition, ExperimentInput, SharedStateConfig, SandboxCacheConfig, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext, JsonValue, } from \"./types.ts\";\nimport { normalizeJudgeSelection } from \"./runner/judge-config.ts\";\nimport { isJudgeProvider } from \"./judge/provider.ts\";\nimport { MigrationRequiredError, captureMigrationSource } from \"./error-assistance/index.ts\";\nimport { brandEvalDefinition, brandEvalGroupDefinition, brandExperimentDefinition, isEvalDefinition, } from \"./types.ts\";\nimport { customProviderSandbox, isSandboxLayer, sandboxLayerStateOf, type CustomProviderSandboxOptions, type SandboxLayer, } from \"./sandbox/layer.ts\";\nimport { Result, Schema } from \"effect\";\nimport { assertEvidenceCoverage } from \"./assertions/coverage.ts\";\nimport { effectAgentCallback, registerAgentEffectRuntime, type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition, } from \"./agents/effect-runtime.ts\";\nimport { isPluginInstance, pluginInstanceDataOf, type PluginInstance, type PluginOwner } from \"./plugin/contracts.ts\";\n/** Recognize only the retired flat configuration, without evaluating getters. */\nfunction normalizeDefinitionJudge(value: unknown, label: string) {\n if (!isJudgeProvider(value) && typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const prototype = Object.getPrototypeOf(value);\n const legacyKeys = [\"model\", \"baseUrl\", \"apiKeyEnv\", \"timeoutMs\", \"maxOutputTokens\"];\n if ((prototype === Object.prototype || prototype === null) && Reflect.ownKeys(value).every((key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && legacyKeys.includes(key) && descriptor !== undefined && \"value\" in descriptor;\n })) {\n throw new MigrationRequiredError({ occurrences: [{\n guideId: \"judge-provider\",\n subject: label.replace(\"() \", \".\"),\n source: captureMigrationSource(),\n }] });\n }\n }\n return normalizeJudgeSelection(value, label);\n}\n// 发现期必须区分 defineScoreEval 的真正产物与运行时手写 `{ evaluationKind: \"score\" }` 的裸对象。\n// WeakSet 是模块私有来源证明;Definition 本身另有 types.ts 的私有 symbol 品牌供类型层使用。\nconst definedScoreEvals = new WeakSet<object>();\n/** Define a closed set of real Eval definitions sharing one physical Sandbox. */\nexport function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition {\n if (!Array.isArray(input.evals) || input.evals.length === 0) {\n throw new TypeError(\"defineEvalGroup evals must be a non-empty array of defineEval()/defineScoreEval() definitions.\");\n }\n input.evals.forEach((member, index) => {\n if (!isEvalDefinition(member)) {\n throw new TypeError(`defineEvalGroup evals[${index}] must be the object returned by defineEval() or defineScoreEval().`);\n }\n });\n assertSandboxLayer(input.sandbox, \"defineEvalGroup\");\n if (input.onUnavailable !== \"stop-group\" && input.onUnavailable !== \"replace-sandbox\") {\n throw new TypeError(\"defineEvalGroup onUnavailable must be \\\"stop-group\\\" or \\\"replace-sandbox\\\".\");\n }\n const [first, ...rest] = input.evals;\n return brandEvalGroupDefinition({\n evals: Object.freeze([first, ...rest]),\n onUnavailable: input.onUnavailable,\n ...(input.sandbox ? { sandbox: input.sandbox } : {}),\n ...(input.plugins === undefined ? {} : { plugins: normalizePlugins(input.plugins, \"defineEvalGroup plugins\", \"group\") }),\n });\n}\n/** @internal 仅供 discoverEvals 验证 score 题型来源。 */\nexport function isDefinedScoreEval(value: object): boolean {\n return definedScoreEvals.has(value);\n}\n/** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */\nexport function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent {\n if (!def.name)\n throw new Error(`defineSandboxAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineSandboxAgent\");\n if (def.ensure === undefined)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n const ensure = Array.isArray(def.ensure) ? def.ensure : [def.ensure];\n if (ensure.length === 0)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n if (def.sandbox !== undefined) {\n if (!isSandboxLayer(def.sandbox)) {\n throw new TypeError(\"defineSandboxAgent sandbox must be a SandboxLayer created by sandboxLayer().\");\n }\n if (sandboxLayerStateOf(def.sandbox).kind !== \"command-only\") {\n throw new TypeError(\"defineSandboxAgent sandbox must be command-only; an Agent cannot provide a Sandbox template.\");\n }\n }\n return {\n name: def.name,\n kind: \"sandbox\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n ...(def.sandbox === undefined ? {} : { sandbox: def.sandbox }),\n ensure,\n installers: def.installers ?? [],\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeSandboxAgent(def: Omit<SandboxAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalSandboxAgentDefinition): SandboxAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineSandboxAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (_sandbox, context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (_sandbox, context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send: send as InternalDirectAgentDefinition[\"send\"],\n sandboxSetup: setup,\n sandboxTeardown: teardown,\n });\n}\n/** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */\nexport function defineAgent(def: DirectAgentDef): DirectAgent {\n if (!def.name)\n throw new Error(`defineAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineAgent\");\n return {\n name: def.name,\n kind: \"direct\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeDirectAgent(def: Omit<DirectAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalDirectAgentDefinition): DirectAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send,\n directSetup: setup,\n directTeardown: teardown,\n });\n}\n/** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */\nexport function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<\"pass\", TestContext, Sandbox> {\n return defineEvalForContext(\"pass\", def);\n}\n/**\n * 计分制 eval:Fact verdict uses 与 Fact score uses 可以读取同一份证据;正常返回由 Runner\n * 自动关闭计分收集器。字段与 `defineEval` 同形,禁止提供 id,由发现期推导。\n */\nexport function defineScoreEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: ScoreEvalInput<Sandbox>): EvalDefinition<\"score\", ScoreTestContext, Sandbox> {\n return defineEvalForContext(\"score\", def);\n}\ntype EvalFactoryInput<Sandbox extends SandboxLayer | undefined> = Omit<EvalInput<Sandbox> | ScoreEvalInput<Sandbox>, \"test\"> & {\n readonly test: (...args: never[]) => ReturnType<EvalDefinition<\"pass\", unknown, Sandbox>[\"test\"]>;\n};\n/** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */\n// @concord-code ne-surface-define-eval-context\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineEvalForContext<Kind extends \"pass\" | \"score\", Context, const Sandbox extends SandboxLayer | undefined = undefined>(kind: Kind, def: EvalFactoryInput<Sandbox>, internalFields: Readonly<Record<PropertyKey, unknown>> = {}): EvalDefinition<Kind, Context, Sandbox> {\n const factory = kind === \"pass\" ? \"defineEval\" : \"defineScoreEval\";\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`${factory} does not accept id; ids are derived from file paths.`);\n }\n if (Object.hasOwn(def, \"evaluationKind\")) {\n throw new Error(`${factory} does not accept evaluationKind; it is always set to ${JSON.stringify(kind)}.`);\n }\n if (Object.hasOwn(def, \"configHash\")) {\n throw new Error(`${factory} does not accept configHash; configHash is computed during run planning.`);\n }\n if (typeof def.test !== \"function\") {\n throw new Error(`${factory} requires an async test(t) function.`);\n }\n assertSandboxLayer(def.sandbox, factory);\n const result = brandEvalDefinition({\n ...normalizeEvalFields(def),\n ...internalFields,\n evaluationKind: kind,\n test: def.test,\n });\n if (kind === \"score\")\n definedScoreEvals.add(result);\n return result as EvalDefinition<Kind, Context, Sandbox>;\n}\n/** 实验:可签入的运行配置(怎么跑这批 eval)。 */\nexport function defineExperiment<const A extends Adapter>(def: ExperimentInput<A>): ExperimentDefinition<A>;\n// @concord-code ne-surface-define-experiment\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineExperiment(def: Omit<ExperimentInput, \"flags\"> & {\n readonly flags?: unknown;\n}): ExperimentDefinition {\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);\n }\n if ((def.agent === undefined) === (def.adapter === undefined)) {\n throw new Error(`defineExperiment requires exactly one of agent or adapter.`);\n }\n const adapter = def.adapter ?? def.agent!;\n if (adapter.kind !== \"custom\" && def.models !== undefined) {\n throw new TypeError(\"Experiment models is only supported by custom Adapters.\");\n }\n const models = adapter.kind === \"custom\" ? normalizeModelSlots(def) : undefined;\n const judgeRuntime = def.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judgeRuntime, \"defineExperiment() judgeRuntime\");\n assertSandboxLayer(def.sandbox, \"defineExperiment\");\n if (adapter.kind === \"custom\") {\n if (def.sandbox !== undefined || def.sandboxReuse === true || def.sandboxCache !== undefined) {\n throw new Error(`Custom Adapter experiments do not support sandbox, sandboxReuse, or sandboxCache.`);\n }\n if (def.budget !== undefined) {\n throw new Error(`Custom Adapter experiments do not support budget because Adapter usage is not collected.`);\n }\n }\n // setup 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.setup);\n // 传成非函数(如误把 sandbox 钩子对象塞进来)在解析时就报,不等到调度才炸。\n if (def.setup !== undefined && typeof def.setup !== \"function\") {\n throw new Error(`experiment.setup must be a function ((ctx) => void); use experiment.teardown for cleanup; to prepare the in-sandbox environment per experiment, chain .setup() hooks on the sandbox spec instead.`);\n }\n // teardown 与 setup 是同一个 Experiment lifecycle 边界。非函数值绝不能\n // 伪装成已声明的 cleanup,否则 explicit sharedState recovery 可能在没有\n // 执行补偿的情况下释放 immutable owner generation。\n if (def.teardown !== undefined && typeof def.teardown !== \"function\") {\n throw new Error(`Experiment teardown must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);\n }\n // classifyFailure 是失败分类链上的实验通道(见 runner/types.ts 的 ExperimentDef.classifyFailure):\n // 传成非函数在解析时就报,不等到某条 attempt 撞死才发现这一路声明白写。\n if (def.classifyFailure !== undefined && typeof def.classifyFailure !== \"function\") {\n throw new Error(`experiment.classifyFailure must be a function ((failure) => FailureClass | undefined); it classifies failures that surface as third-party errors and must return undefined for anything it does not recognize.`);\n }\n // labels 是报告归类坐标(进 ExperimentRunInfo.labels,不透传 ctx/t):值域 string | number,\n // 解析时即校验,布尔 / 对象 / NaN 直接报错,不等到落盘或报告分组才炸。\n if (def.labels !== undefined) {\n for (const [key, value] of Object.entries(def.labels)) {\n const ok = typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n if (!ok)\n throw new Error(`experiment.labels.${key} must be a string or a finite number; labels are report-side grouping coordinates persisted verbatim into result runs.`);\n }\n }\n const sharedState = normalizeSharedState(def.sharedState);\n const sandboxCache = normalizeSandboxCache(def.sandboxCache, \"defineExperiment\");\n const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;\n const flags = decodeExperimentFlags(def.flags === undefined ? {} : def.flags);\n return brandExperimentDefinition({\n ...author,\n ...(models === undefined ? {} : {\n models,\n model: models.default?.model ?? undefined,\n reasoningEffort: models.default?.reasoningEffort ?? undefined,\n }),\n adapter,\n ...(adapter.kind === \"custom\" ? {} : { agent: adapter }),\n flags: adapter.kind === \"custom\" && adapter.parseFlags !== undefined\n ? parseAdapterFlags(adapter.parseFlags, flags)\n : flags,\n labels: Object.freeze({ ...(def.labels ?? {}) }),\n attempts: def.attempts ?? 1,\n earlyExit: def.earlyExit ?? false,\n evals: Array.isArray(def.evals) ? Object.freeze([...def.evals]) : (def.evals ?? \"*\"),\n sandboxReuse: def.sandboxReuse === true,\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n ...(sharedState === undefined ? {} : { sharedState }),\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n plugins: normalizePlugins(def.plugins ?? [], \"defineExperiment plugins\", \"experiment\"),\n });\n}\nfunction normalizeSandboxCache(value: unknown, factory: \"defineConfig\" | \"defineExperiment\"): SandboxCacheConfig | undefined {\n if (value === undefined)\n return undefined;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n const keys = Object.keys(value);\n const setup = Reflect.get(value, \"setup\");\n if (keys.some((key) => key !== \"setup\") ||\n (setup !== undefined && setup !== \"use\" && setup !== \"bypass\")) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n return Object.freeze(setup === undefined ? {} : { setup });\n}\nconst SharedStateKeyPattern = /^[a-z0-9][a-z0-9._/-]{0,127}$/u;\nfunction normalizeSharedState(value: unknown): SharedStateConfig | undefined {\n if (value === undefined)\n return undefined;\n const candidate = value as {\n key?: unknown;\n };\n if (typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n !Object.hasOwn(value, \"key\") ||\n Object.keys(value).length !== 1 ||\n typeof candidate.key !== \"string\" ||\n !SharedStateKeyPattern.test(candidate.key)) {\n throw new TypeError(`experiment.sharedState must be exactly { key }, where key is a stable, non-secret string matching [a-z0-9][a-z0-9._/-]{0,127}.`);\n }\n return Object.freeze({ key: candidate.key });\n}\nfunction normalizeEvalFields<const Sandbox extends SandboxLayer | undefined>(def: EvalInput<Sandbox> | ScoreEvalInput<Sandbox>): EvalDefinitionFields<Sandbox> {\n const judge = def.judge === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judge, \"defineEval() judge\");\n return {\n ...(def.description !== undefined ? { description: def.description } : {}),\n tags: Object.freeze([...(def.tags ?? [])]),\n ...(def.sandbox !== undefined ? { sandbox: def.sandbox } : {}),\n plugins: normalizePlugins(def.plugins ?? [], \"defineEval plugins\", \"eval\"),\n ...(judge !== undefined ? { judge } : {}),\n reporters: Object.freeze([...(def.reporters ?? [])]),\n ...(def.timeoutMs !== undefined ? { timeoutMs: def.timeoutMs } : {}),\n metadata: decodeJsonRecord(def.metadata ?? {}, \"Eval metadata\"),\n diff: Object.freeze({\n include: Object.freeze([...(def.diff?.include ?? [])]),\n ignore: Object.freeze([...(def.diff?.ignore ?? [])]),\n }),\n };\n}\n// @concord-code ne-surface-normalize-plugins\n// @concord-implements docs/feature/plugins/library.md\nfunction normalizePlugins<Owner extends PluginOwner>(value: readonly PluginInstance<Owner>[], label: string, owner: Owner): readonly PluginInstance<Owner>[] {\n if (!Array.isArray(value))\n throw new TypeError(`${label} must be an array.`);\n return Object.freeze(value.map((plugin, index) => {\n if (!isPluginInstance(plugin))\n throw new TypeError(`${label}[${index}] must be created by definePlugin().`);\n if (pluginInstanceDataOf(plugin)[owner] === undefined) {\n throw new TypeError(`${label}[${index}] does not support ${owner} attachment.`);\n }\n return plugin;\n }));\n}\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\")\n return true;\n if (typeof value === \"number\")\n return Number.isFinite(value);\n if (Array.isArray(value))\n return value.every(isJsonValue);\n if (typeof value !== \"object\")\n return false;\n return Object.values(value).every(isJsonValue);\n}\nconst JsonValueSchema = Schema.declare<JsonValue>(isJsonValue);\nconst JsonRecordSchema = Schema.Record(Schema.String, JsonValueSchema);\nfunction deepFreezeJson(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n const items: JsonValue[] = value.map(deepFreezeJson);\n Object.freeze(items);\n return items;\n }\n if (value !== null && typeof value === \"object\") {\n const record: globalThis.Record<string, JsonValue> = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, deepFreezeJson(child)]));\n Object.freeze(record);\n return record;\n }\n return value;\n}\nfunction decodeJsonRecord(value: unknown, label: string): Readonly<globalThis.Record<string, JsonValue>> {\n const decoded = Schema.decodeUnknownResult(JsonRecordSchema, { errors: \"all\" })(value);\n if (Result.isFailure(decoded))\n throw new TypeError(`${label} must be JSON-compatible: ${String(decoded.failure)}`);\n return Object.freeze(Object.fromEntries(Object.entries(decoded.success).map(([key, child]) => [key, deepFreezeJson(child)])));\n}\n/**\n * `SandboxLayer` 的品牌只由 `niceeval/sandbox` 工厂写入。动态 TSX/JS 调用绕过静态类型时,\n * 不接受看似相同的裸对象,以免在 linker 阶段才得到难以定位的错误。\n */\nfunction assertSandboxLayer(value: unknown, factory: string): void {\n if (value !== undefined && !isSandboxLayer(value)) {\n throw new TypeError(`${factory} sandbox must be a SandboxLayer created by a niceeval/sandbox factory (for example dockerSandbox(), dockerComposeSandbox(), e2bSandbox(), or vercelSandbox()).`);\n }\n}\n/** 项目级配置。 */\nexport function defineConfig(config: Config): Config {\n const sandboxCache = normalizeSandboxCache(config.sandboxCache, \"defineConfig\");\n const judgeRuntime = config.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(config.judgeRuntime, \"defineConfig() judgeRuntime\");\n if (judgeRuntime !== undefined && !isJudgeProvider(judgeRuntime)) {\n throw new TypeError(\"defineConfig() judgeRuntime must be a Judge Provider created by niceeval/judge\");\n }\n return Object.freeze({\n ...config,\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n });\n}\n/**\n * 自定义沙箱 provider:`create` 直接返回一个实现 `Sandbox` 接口的实例,不需要 niceeval 内置支持\n * 这个 provider 名字。用于接入 docker/vercel/e2b 之外的运行环境(自建 VM、Modal、Fly 等)。\n */\nexport function defineSandbox(def: CustomProviderSandboxOptions): SandboxLayer<\"template-bearing\"> {\n return customProviderSandbox(def);\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.evalCatalogCliCommand = exports.EVAL_CATALOG_OPTIONS = void 0;
4
+ // @concord-file ne-eval-cli-catalog
5
+ // @concord-implements docs/feature/eval/README.md
4
6
  const effect_1 = require("effect");
5
7
  const application_ts_1 = require("../../cli/application.cjs");
6
8
  const contribution_ts_1 = require("../../cli/contribution.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"contribution.js","sourceRoot":"","sources":["contribution.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { CliArguments, CliInvocationFacts, CliOutput, type CliOptionDefinition, } from \"../../cli/application.ts\";\nimport { CliFeatureError, type CliCommandContribution } from \"../../cli/contribution.ts\";\nimport { ProjectConfiguration } from \"../../cli/project-configuration.ts\";\nimport { evalHost } from \"../host/index.ts\";\nexport const EVAL_CATALOG_OPTIONS = Object.freeze({\n tag: Object.freeze({\n type: \"string\",\n help: Object.freeze({ summary: \"List only evals carrying this tag.\", visibility: \"public\" }),\n }),\n help: Object.freeze({\n type: \"boolean\",\n short: \"h\",\n help: Object.freeze({ summary: \"Show Eval catalog command help.\", visibility: \"public\" }),\n }),\n} satisfies Readonly<Record<string, CliOptionDefinition>>);\nconst EVAL_CATALOG_HELP = `niceeval list — list discovered Evals\n\nUsage:\n niceeval list [--tag <tag>]\n`;\nconst failure = (operation: string, cause: unknown, exitCode = 1) => new CliFeatureError({ feature: \"eval\", operation, cause, exitCode });\nfunction write(text: string): Effect.Effect<void, CliFeatureError, CliOutput> {\n return Effect.flatMap(CliOutput, (output) => output.writeStdout(text)).pipe(Effect.mapError((cause) => failure(\"write eval catalog\", cause)));\n}\nexport const evalCatalogCliCommand: CliCommandContribution<CliArguments | CliInvocationFacts | CliOutput | ProjectConfiguration, CliFeatureError> = Object.freeze({\n name: \"list\",\n summary: \"list discovered evals\",\n options: EVAL_CATALOG_OPTIONS,\n run: (argv: readonly string[]) => Effect.gen(function* () {\n const parser = yield* CliArguments;\n const parsed = yield* Effect.try({\n try: () => parser.parse(argv, EVAL_CATALOG_OPTIONS),\n catch: (cause) => failure(\"parse eval catalog command\", cause),\n });\n if (parsed.positionals.length > 0) {\n return yield* Effect.fail(failure(\"parse eval catalog command\", new Error(\"niceeval list accepts no positional arguments.\")));\n }\n if (parsed.values.help === true) {\n yield* write(EVAL_CATALOG_HELP);\n return 0;\n }\n const invocation = yield* CliInvocationFacts;\n const facts = yield* invocation.facts.pipe(Effect.mapError((cause) => failure(\"read invocation facts\", cause)));\n const configuration = yield* ProjectConfiguration;\n yield* configuration.load(facts.cwd).pipe(Effect.mapError((cause) => failure(\"load project configuration\", cause)));\n const catalog = yield* evalHost.catalog({\n cwd: facts.cwd,\n ...(typeof parsed.values.tag === \"string\" ? { tag: parsed.values.tag } : {}),\n }).pipe(Effect.mapError((cause) => failure(\"discover eval catalog\", cause)));\n yield* write(`Discovered ${catalog.entries.length} evals:\n`);\n for (const entry of catalog.entries) {\n yield* write(` ${entry.id}${entry.description ? ` — ${entry.description}` : \"\"}\\n`);\n }\n return 0;\n }),\n});\n"]}
1
+ {"version":3,"file":"contribution.js","sourceRoot":"","sources":["contribution.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-eval-cli-catalog\n// @concord-implements docs/feature/eval/README.md\nimport { Effect } from \"effect\";\nimport { CliArguments, CliInvocationFacts, CliOutput, type CliOptionDefinition, } from \"../../cli/application.ts\";\nimport { CliFeatureError, type CliCommandContribution } from \"../../cli/contribution.ts\";\nimport { ProjectConfiguration } from \"../../cli/project-configuration.ts\";\nimport { evalHost } from \"../host/index.ts\";\nexport const EVAL_CATALOG_OPTIONS = Object.freeze({\n tag: Object.freeze({\n type: \"string\",\n help: Object.freeze({ summary: \"List only evals carrying this tag.\", visibility: \"public\" }),\n }),\n help: Object.freeze({\n type: \"boolean\",\n short: \"h\",\n help: Object.freeze({ summary: \"Show Eval catalog command help.\", visibility: \"public\" }),\n }),\n} satisfies Readonly<Record<string, CliOptionDefinition>>);\nconst EVAL_CATALOG_HELP = `niceeval list — list discovered Evals\n\nUsage:\n niceeval list [--tag <tag>]\n`;\nconst failure = (operation: string, cause: unknown, exitCode = 1) => new CliFeatureError({ feature: \"eval\", operation, cause, exitCode });\nfunction write(text: string): Effect.Effect<void, CliFeatureError, CliOutput> {\n return Effect.flatMap(CliOutput, (output) => output.writeStdout(text)).pipe(Effect.mapError((cause) => failure(\"write eval catalog\", cause)));\n}\nexport const evalCatalogCliCommand: CliCommandContribution<CliArguments | CliInvocationFacts | CliOutput | ProjectConfiguration, CliFeatureError> = Object.freeze({\n name: \"list\",\n summary: \"list discovered evals\",\n options: EVAL_CATALOG_OPTIONS,\n run: (argv: readonly string[]) => Effect.gen(function* () {\n const parser = yield* CliArguments;\n const parsed = yield* Effect.try({\n try: () => parser.parse(argv, EVAL_CATALOG_OPTIONS),\n catch: (cause) => failure(\"parse eval catalog command\", cause),\n });\n if (parsed.positionals.length > 0) {\n return yield* Effect.fail(failure(\"parse eval catalog command\", new Error(\"niceeval list accepts no positional arguments.\")));\n }\n if (parsed.values.help === true) {\n yield* write(EVAL_CATALOG_HELP);\n return 0;\n }\n const invocation = yield* CliInvocationFacts;\n const facts = yield* invocation.facts.pipe(Effect.mapError((cause) => failure(\"read invocation facts\", cause)));\n const configuration = yield* ProjectConfiguration;\n yield* configuration.load(facts.cwd).pipe(Effect.mapError((cause) => failure(\"load project configuration\", cause)));\n const catalog = yield* evalHost.catalog({\n cwd: facts.cwd,\n ...(typeof parsed.values.tag === \"string\" ? { tag: parsed.values.tag } : {}),\n }).pipe(Effect.mapError((cause) => failure(\"discover eval catalog\", cause)));\n yield* write(`Discovered ${catalog.entries.length} evals:\n`);\n for (const entry of catalog.entries) {\n yield* write(` ${entry.id}${entry.description ? ` — ${entry.description}` : \"\"}\\n`);\n }\n return 0;\n }),\n});\n"]}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.evalHost = exports.EvalCatalogError = void 0;
4
+ // @concord-file ne-eval-host-catalog
5
+ // @concord-implements docs/feature/eval/README.md
4
6
  const effect_1 = require("effect");
5
7
  const discover_ts_1 = require("../../runner/discover.cjs");
6
8
  class EvalCatalogError extends effect_1.Data.TaggedError("EvalCatalogError") {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AACtC,0DAAyD;AAUzD,MAAa,gBAAiB,SAAQ,aAAI,CAAC,WAAW,CAAC,kBAAkB,CAGvE;CACD;AAJD,4CAIC;AACD,SAAS,OAAO,CAAC,KAGhB;IACG,OAAO,IAAA,2BAAa,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1E,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;aAC5B,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACvF,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,GAAG,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC;YACxF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,cAAc,EAAE,UAAU,CAAC,cAAc;SAC5C,CAAC,CAAC,CAAC;KACP,CAAC,CAAC,EAAE,eAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AACD,iGAAiG;AACpF,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC","sourcesContent":["import { Data, Effect } from \"effect\";\nimport { discoverEvals } from \"../../runner/discover.ts\";\nexport interface EvalCatalogEntry {\n readonly id: string;\n readonly description?: string;\n readonly tags: readonly string[];\n readonly evaluationKind: \"pass\" | \"score\";\n}\nexport interface EvalCatalog {\n readonly entries: readonly EvalCatalogEntry[];\n}\nexport class EvalCatalogError extends Data.TaggedError(\"EvalCatalogError\")<{\n readonly operation: \"catalog\";\n readonly cause: unknown;\n}> {\n}\nfunction catalog(input: {\n readonly cwd: string;\n readonly tag?: string;\n}): Effect.Effect<EvalCatalog, EvalCatalogError> {\n return discoverEvals(input.cwd).pipe(Effect.map((discovered) => Object.freeze({\n entries: Object.freeze(discovered\n .filter((definition) => input.tag === undefined || definition.tags?.includes(input.tag))\n .map((definition) => Object.freeze({\n id: definition.id,\n ...(definition.description === undefined ? {} : { description: definition.description }),\n tags: Object.freeze([...(definition.tags ?? [])]),\n evaluationKind: definition.evaluationKind,\n }))),\n })), Effect.mapError((cause) => new EvalCatalogError({ operation: \"catalog\", cause })));\n}\n/** Eval discovery is a closed Host operation; CLI consumers never receive Runner definitions. */\nexport const evalHost = Object.freeze({ catalog });\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,qCAAqC;AACrC,kDAAkD;AAClD,mCAAsC;AACtC,0DAAyD;AAUzD,MAAa,gBAAiB,SAAQ,aAAI,CAAC,WAAW,CAAC,kBAAkB,CAGvE;CACD;AAJD,4CAIC;AACD,SAAS,OAAO,CAAC,KAGhB;IACG,OAAO,IAAA,2BAAa,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1E,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;aAC5B,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACvF,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,GAAG,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC;YACxF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,cAAc,EAAE,UAAU,CAAC,cAAc;SAC5C,CAAC,CAAC,CAAC;KACP,CAAC,CAAC,EAAE,eAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AACD,iGAAiG;AACpF,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC","sourcesContent":["// @concord-file ne-eval-host-catalog\n// @concord-implements docs/feature/eval/README.md\nimport { Data, Effect } from \"effect\";\nimport { discoverEvals } from \"../../runner/discover.ts\";\nexport interface EvalCatalogEntry {\n readonly id: string;\n readonly description?: string;\n readonly tags: readonly string[];\n readonly evaluationKind: \"pass\" | \"score\";\n}\nexport interface EvalCatalog {\n readonly entries: readonly EvalCatalogEntry[];\n}\nexport class EvalCatalogError extends Data.TaggedError(\"EvalCatalogError\")<{\n readonly operation: \"catalog\";\n readonly cause: unknown;\n}> {\n}\nfunction catalog(input: {\n readonly cwd: string;\n readonly tag?: string;\n}): Effect.Effect<EvalCatalog, EvalCatalogError> {\n return discoverEvals(input.cwd).pipe(Effect.map((discovered) => Object.freeze({\n entries: Object.freeze(discovered\n .filter((definition) => input.tag === undefined || definition.tags?.includes(input.tag))\n .map((definition) => Object.freeze({\n id: definition.id,\n ...(definition.description === undefined ? {} : { description: definition.description }),\n tags: Object.freeze([...(definition.tags ?? [])]),\n evaluationKind: definition.evaluationKind,\n }))),\n })), Effect.mapError((cause) => new EvalCatalogError({ operation: \"catalog\", cause })));\n}\n/** Eval discovery is a closed Host operation; CLI consumers never receive Runner definitions. */\nexport const evalHost = Object.freeze({ catalog });\n"]}
@@ -6,6 +6,9 @@ exports.decodeEvaluationsPayload = decodeEvaluationsPayload;
6
6
  exports.buildEvaluationsPayload = buildEvaluationsPayload;
7
7
  exports.projectEvaluationsPayload = projectEvaluationsPayload;
8
8
  exports.projectEvaluations = projectEvaluations;
9
+ // @concord-file ne-eval-record-evaluation
10
+ // @concord-implements docs/feature/eval/README.md
11
+ // @concord-implements docs/feature/inspection/README.md
9
12
  const effect_1 = require("effect");
10
13
  const identifiers_ts_1 = require("../../record/codec/identifiers.cjs");
11
14
  const identifiers_ts_2 = require("../../record/model/identifiers.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"evaluation.js","sourceRoot":"","sources":["evaluation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Result, Schema } from \"effect\";\nimport { SlotIdSchema } from \"../../record/codec/identifiers.ts\";\nimport { compareCanonicalIdentity, type SlotId } from \"../../record/model/identifiers.ts\";\nimport { EVALUATION_KINDS } from \"../../shared/evaluation.ts\";\nimport { EvaluationRecordIdentitySchema, ExactEvaluationParseOptions, } from \"./attachment.ts\";\n/**\n * Eval-to-slot planning is transient. Core carries the immutable Slot identity\n * once a Run is created; no evaluations Attachment exists in Record v1.\n */\nexport const EvaluationKindSchema = Schema.Literals(EVALUATION_KINDS);\nexport type EvaluationKind = Schema.toType<typeof EvaluationKindSchema>[\"Type\"];\nexport type EvaluationId = Schema.toType<typeof EvaluationRecordIdentitySchema>[\"Type\"];\nexport type ExperimentId = Schema.toType<typeof EvaluationRecordIdentitySchema>[\"Type\"];\nexport const EvaluationAttemptOrdinalSchema = Schema.Number.check(Schema.isInt(), Schema.isGreaterThanOrEqualTo(0));\nexport type EvaluationAttemptOrdinal = Schema.toType<typeof EvaluationAttemptOrdinalSchema>[\"Type\"];\nexport const EvaluationSlotSchema = Schema.Struct({\n slotId: SlotIdSchema,\n attempt: EvaluationAttemptOrdinalSchema,\n});\nexport type EvaluationSlot = Schema.toType<typeof EvaluationSlotSchema>[\"Type\"];\nexport type EvaluationSlotEncoded = Schema.Codec.Encoded<typeof EvaluationSlotSchema>;\nexport const EvaluationDefinitionSchema = Schema.Struct({\n evalId: EvaluationRecordIdentitySchema,\n evaluationKind: EvaluationKindSchema,\n slots: Schema.NonEmptyArray(EvaluationSlotSchema),\n});\nexport type EvaluationDefinition = Schema.toType<typeof EvaluationDefinitionSchema>[\"Type\"];\nexport type EvaluationDefinitionEncoded = Schema.Codec.Encoded<typeof EvaluationDefinitionSchema>;\nconst EvaluationsPayloadStructuralSchema = Schema.Struct({\n experimentId: EvaluationRecordIdentitySchema,\n evaluations: Schema.Array(EvaluationDefinitionSchema),\n});\nexport type EvaluationsPayload = Schema.toType<typeof EvaluationsPayloadStructuralSchema>[\"Type\"];\nexport type EvaluationsPayloadEncoded = Schema.Codec.Encoded<typeof EvaluationsPayloadStructuralSchema>;\nexport type EvaluationsPayloadIssue = {\n readonly code: \"evaluations-eval-order-invalid\";\n readonly index: number;\n readonly evalId: EvaluationId;\n} | {\n readonly code: \"evaluations-eval-duplicate\";\n readonly evalId: EvaluationId;\n} | {\n readonly code: \"evaluations-slot-order-invalid\";\n readonly evalId: EvaluationId;\n readonly index: number;\n readonly slotId: SlotId;\n} | {\n readonly code: \"evaluations-slot-duplicate\";\n readonly slotId: SlotId;\n} | {\n readonly code: \"evaluations-attempt-duplicate\";\n readonly evalId: EvaluationId;\n readonly attempt: EvaluationAttemptOrdinal;\n};\nfunction compareEvaluationSlots(left: EvaluationSlot, right: EvaluationSlot): number {\n return left.attempt === right.attempt\n ? compareCanonicalIdentity(left.slotId, right.slotId)\n : left.attempt < right.attempt ? -1 : 1;\n}\nexport function validateEvaluationsPayload(payload: EvaluationsPayload): readonly EvaluationsPayloadIssue[] {\n const issues: EvaluationsPayloadIssue[] = [];\n const slots = new Set<string>();\n let previousEvalId: EvaluationId | undefined;\n for (const [definitionIndex, definition] of payload.evaluations.entries()) {\n if (previousEvalId !== undefined && compareCanonicalIdentity(previousEvalId, definition.evalId) >= 0) {\n issues.push(Object.freeze(previousEvalId === definition.evalId\n ? { code: \"evaluations-eval-duplicate\" as const, evalId: definition.evalId }\n : { code: \"evaluations-eval-order-invalid\" as const, index: definitionIndex, evalId: definition.evalId }));\n }\n const attempts = new Set<number>();\n let previousSlot: EvaluationSlot | undefined;\n for (const [slotIndex, slot] of definition.slots.entries()) {\n if (previousSlot !== undefined && compareEvaluationSlots(previousSlot, slot) >= 0) {\n issues.push(Object.freeze({ code: \"evaluations-slot-order-invalid\" as const, evalId: definition.evalId, index: slotIndex, slotId: slot.slotId }));\n }\n if (slots.has(slot.slotId)) {\n issues.push(Object.freeze({ code: \"evaluations-slot-duplicate\" as const, slotId: slot.slotId }));\n }\n if (attempts.has(slot.attempt)) {\n issues.push(Object.freeze({ code: \"evaluations-attempt-duplicate\" as const, evalId: definition.evalId, attempt: slot.attempt }));\n }\n slots.add(slot.slotId);\n attempts.add(slot.attempt);\n previousSlot = slot;\n }\n previousEvalId = definition.evalId;\n }\n return Object.freeze(issues);\n}\nexport const EvaluationsPayloadSchema = EvaluationsPayloadStructuralSchema.pipe(Schema.refine((payload): payload is typeof payload => validateEvaluationsPayload(payload).length === 0, {\n identifier: \"EvaluationPlan\",\n description: \"canonical transient Eval definitions and Slot mapping\",\n}));\nexport type EvaluationsPayloadBuildError = {\n readonly code: \"evaluations-payload-schema-invalid\" | \"evaluations-payload-coherence-invalid\";\n readonly issues?: readonly EvaluationsPayloadIssue[];\n};\nexport function decodeEvaluationsPayload(input: unknown): Result.Result<EvaluationsPayload, EvaluationsPayloadBuildError> {\n const decoded = Schema.decodeUnknownResult(EvaluationsPayloadSchema, ExactEvaluationParseOptions)(input);\n return Result.isFailure(decoded)\n ? Result.fail(Object.freeze({ code: \"evaluations-payload-schema-invalid\" as const }))\n : Result.succeed(decoded.success);\n}\nexport function buildEvaluationsPayload(input: EvaluationsPayload): Result.Result<EvaluationsPayload, EvaluationsPayloadBuildError> {\n const decoded = Schema.decodeUnknownResult(EvaluationsPayloadStructuralSchema, ExactEvaluationParseOptions)(input);\n if (Result.isFailure(decoded))\n return Result.fail(Object.freeze({ code: \"evaluations-payload-schema-invalid\" as const }));\n const issues = validateEvaluationsPayload(decoded.success);\n if (issues.length > 0)\n return Result.fail(Object.freeze({ code: \"evaluations-payload-coherence-invalid\" as const, issues }));\n return Result.succeed(decoded.success);\n}\nexport interface EvaluationSlotProjection extends EvaluationSlot {\n readonly evalId: EvaluationId;\n readonly evaluationKind: EvaluationKind;\n}\nexport interface EvaluationsProjection {\n readonly evaluationForSlot: (slotId: SlotId) => EvaluationSlotProjection | undefined;\n}\nexport function projectEvaluationsPayload(payload: EvaluationsPayload): EvaluationsProjection {\n const slots = new Map<string, EvaluationSlotProjection>();\n for (const evaluation of payload.evaluations) {\n for (const slot of evaluation.slots) {\n slots.set(slot.slotId, Object.freeze({ ...slot, evalId: evaluation.evalId, evaluationKind: evaluation.evaluationKind }));\n }\n }\n return Object.freeze({ evaluationForSlot: (slotId: SlotId) => slots.get(slotId) });\n}\nexport interface Evaluation {\n readonly id: EvaluationId;\n readonly kind: EvaluationKind;\n readonly slots: readonly EvaluationSlot[];\n}\nexport interface Evaluations {\n readonly experimentId: ExperimentId;\n readonly evaluations: readonly Evaluation[];\n}\nexport function projectEvaluations(payload: EvaluationsPayload): Evaluations {\n return Object.freeze({\n experimentId: payload.experimentId,\n evaluations: Object.freeze(payload.evaluations.map((evaluation) => Object.freeze({\n id: evaluation.evalId,\n kind: evaluation.evaluationKind,\n slots: Object.freeze([...evaluation.slots]),\n }))),\n });\n}\n"]}
1
+ {"version":3,"file":"evaluation.js","sourceRoot":"","sources":["evaluation.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-eval-record-evaluation\n// @concord-implements docs/feature/eval/README.md\n// @concord-implements docs/feature/inspection/README.md\nimport { Result, Schema } from \"effect\";\nimport { SlotIdSchema } from \"../../record/codec/identifiers.ts\";\nimport { compareCanonicalIdentity, type SlotId } from \"../../record/model/identifiers.ts\";\nimport { EVALUATION_KINDS } from \"../../shared/evaluation.ts\";\nimport { EvaluationRecordIdentitySchema, ExactEvaluationParseOptions, } from \"./attachment.ts\";\n/**\n * Eval-to-slot planning is transient. Core carries the immutable Slot identity\n * once a Run is created; no evaluations Attachment exists in Record v1.\n */\nexport const EvaluationKindSchema = Schema.Literals(EVALUATION_KINDS);\nexport type EvaluationKind = Schema.toType<typeof EvaluationKindSchema>[\"Type\"];\nexport type EvaluationId = Schema.toType<typeof EvaluationRecordIdentitySchema>[\"Type\"];\nexport type ExperimentId = Schema.toType<typeof EvaluationRecordIdentitySchema>[\"Type\"];\nexport const EvaluationAttemptOrdinalSchema = Schema.Number.check(Schema.isInt(), Schema.isGreaterThanOrEqualTo(0));\nexport type EvaluationAttemptOrdinal = Schema.toType<typeof EvaluationAttemptOrdinalSchema>[\"Type\"];\nexport const EvaluationSlotSchema = Schema.Struct({\n slotId: SlotIdSchema,\n attempt: EvaluationAttemptOrdinalSchema,\n});\nexport type EvaluationSlot = Schema.toType<typeof EvaluationSlotSchema>[\"Type\"];\nexport type EvaluationSlotEncoded = Schema.Codec.Encoded<typeof EvaluationSlotSchema>;\nexport const EvaluationDefinitionSchema = Schema.Struct({\n evalId: EvaluationRecordIdentitySchema,\n evaluationKind: EvaluationKindSchema,\n slots: Schema.NonEmptyArray(EvaluationSlotSchema),\n});\nexport type EvaluationDefinition = Schema.toType<typeof EvaluationDefinitionSchema>[\"Type\"];\nexport type EvaluationDefinitionEncoded = Schema.Codec.Encoded<typeof EvaluationDefinitionSchema>;\nconst EvaluationsPayloadStructuralSchema = Schema.Struct({\n experimentId: EvaluationRecordIdentitySchema,\n evaluations: Schema.Array(EvaluationDefinitionSchema),\n});\nexport type EvaluationsPayload = Schema.toType<typeof EvaluationsPayloadStructuralSchema>[\"Type\"];\nexport type EvaluationsPayloadEncoded = Schema.Codec.Encoded<typeof EvaluationsPayloadStructuralSchema>;\nexport type EvaluationsPayloadIssue = {\n readonly code: \"evaluations-eval-order-invalid\";\n readonly index: number;\n readonly evalId: EvaluationId;\n} | {\n readonly code: \"evaluations-eval-duplicate\";\n readonly evalId: EvaluationId;\n} | {\n readonly code: \"evaluations-slot-order-invalid\";\n readonly evalId: EvaluationId;\n readonly index: number;\n readonly slotId: SlotId;\n} | {\n readonly code: \"evaluations-slot-duplicate\";\n readonly slotId: SlotId;\n} | {\n readonly code: \"evaluations-attempt-duplicate\";\n readonly evalId: EvaluationId;\n readonly attempt: EvaluationAttemptOrdinal;\n};\nfunction compareEvaluationSlots(left: EvaluationSlot, right: EvaluationSlot): number {\n return left.attempt === right.attempt\n ? compareCanonicalIdentity(left.slotId, right.slotId)\n : left.attempt < right.attempt ? -1 : 1;\n}\nexport function validateEvaluationsPayload(payload: EvaluationsPayload): readonly EvaluationsPayloadIssue[] {\n const issues: EvaluationsPayloadIssue[] = [];\n const slots = new Set<string>();\n let previousEvalId: EvaluationId | undefined;\n for (const [definitionIndex, definition] of payload.evaluations.entries()) {\n if (previousEvalId !== undefined && compareCanonicalIdentity(previousEvalId, definition.evalId) >= 0) {\n issues.push(Object.freeze(previousEvalId === definition.evalId\n ? { code: \"evaluations-eval-duplicate\" as const, evalId: definition.evalId }\n : { code: \"evaluations-eval-order-invalid\" as const, index: definitionIndex, evalId: definition.evalId }));\n }\n const attempts = new Set<number>();\n let previousSlot: EvaluationSlot | undefined;\n for (const [slotIndex, slot] of definition.slots.entries()) {\n if (previousSlot !== undefined && compareEvaluationSlots(previousSlot, slot) >= 0) {\n issues.push(Object.freeze({ code: \"evaluations-slot-order-invalid\" as const, evalId: definition.evalId, index: slotIndex, slotId: slot.slotId }));\n }\n if (slots.has(slot.slotId)) {\n issues.push(Object.freeze({ code: \"evaluations-slot-duplicate\" as const, slotId: slot.slotId }));\n }\n if (attempts.has(slot.attempt)) {\n issues.push(Object.freeze({ code: \"evaluations-attempt-duplicate\" as const, evalId: definition.evalId, attempt: slot.attempt }));\n }\n slots.add(slot.slotId);\n attempts.add(slot.attempt);\n previousSlot = slot;\n }\n previousEvalId = definition.evalId;\n }\n return Object.freeze(issues);\n}\nexport const EvaluationsPayloadSchema = EvaluationsPayloadStructuralSchema.pipe(Schema.refine((payload): payload is typeof payload => validateEvaluationsPayload(payload).length === 0, {\n identifier: \"EvaluationPlan\",\n description: \"canonical transient Eval definitions and Slot mapping\",\n}));\nexport type EvaluationsPayloadBuildError = {\n readonly code: \"evaluations-payload-schema-invalid\" | \"evaluations-payload-coherence-invalid\";\n readonly issues?: readonly EvaluationsPayloadIssue[];\n};\nexport function decodeEvaluationsPayload(input: unknown): Result.Result<EvaluationsPayload, EvaluationsPayloadBuildError> {\n const decoded = Schema.decodeUnknownResult(EvaluationsPayloadSchema, ExactEvaluationParseOptions)(input);\n return Result.isFailure(decoded)\n ? Result.fail(Object.freeze({ code: \"evaluations-payload-schema-invalid\" as const }))\n : Result.succeed(decoded.success);\n}\nexport function buildEvaluationsPayload(input: EvaluationsPayload): Result.Result<EvaluationsPayload, EvaluationsPayloadBuildError> {\n const decoded = Schema.decodeUnknownResult(EvaluationsPayloadStructuralSchema, ExactEvaluationParseOptions)(input);\n if (Result.isFailure(decoded))\n return Result.fail(Object.freeze({ code: \"evaluations-payload-schema-invalid\" as const }));\n const issues = validateEvaluationsPayload(decoded.success);\n if (issues.length > 0)\n return Result.fail(Object.freeze({ code: \"evaluations-payload-coherence-invalid\" as const, issues }));\n return Result.succeed(decoded.success);\n}\nexport interface EvaluationSlotProjection extends EvaluationSlot {\n readonly evalId: EvaluationId;\n readonly evaluationKind: EvaluationKind;\n}\nexport interface EvaluationsProjection {\n readonly evaluationForSlot: (slotId: SlotId) => EvaluationSlotProjection | undefined;\n}\nexport function projectEvaluationsPayload(payload: EvaluationsPayload): EvaluationsProjection {\n const slots = new Map<string, EvaluationSlotProjection>();\n for (const evaluation of payload.evaluations) {\n for (const slot of evaluation.slots) {\n slots.set(slot.slotId, Object.freeze({ ...slot, evalId: evaluation.evalId, evaluationKind: evaluation.evaluationKind }));\n }\n }\n return Object.freeze({ evaluationForSlot: (slotId: SlotId) => slots.get(slotId) });\n}\nexport interface Evaluation {\n readonly id: EvaluationId;\n readonly kind: EvaluationKind;\n readonly slots: readonly EvaluationSlot[];\n}\nexport interface Evaluations {\n readonly experimentId: ExperimentId;\n readonly evaluations: readonly Evaluation[];\n}\nexport function projectEvaluations(payload: EvaluationsPayload): Evaluations {\n return Object.freeze({\n experimentId: payload.experimentId,\n evaluations: Object.freeze(payload.evaluations.map((evaluation) => Object.freeze({\n id: evaluation.evalId,\n kind: evaluation.evaluationKind,\n slots: Object.freeze([...evaluation.slots]),\n }))),\n });\n}\n"]}
@@ -180,23 +180,23 @@ export declare const MembershipProvenancePayloadSchema: Schema.refine<{
180
180
  readonly startedAt: import("../../record/model/identifiers.cjs").UtcMillis;
181
181
  };
182
182
  readonly comparisons: readonly {
183
- readonly attachment: "niceeval.runner-activities" | "core" | "niceeval.assertions";
183
+ readonly attachment: "core" | "niceeval.runner-activities" | "niceeval.assertions";
184
184
  readonly recordedClaim: "execution-identity" | "attempt-outcome" | "assertion-verdict" | "execution-duration";
185
- readonly sourceState: "available" | "unavailable" | "invalid" | "unsupported";
185
+ readonly sourceState: "available" | "unavailable" | "unsupported" | "invalid";
186
186
  readonly result: "match" | "mismatch" | "ineligible" | "not-comparable";
187
187
  readonly reason: string;
188
188
  }[];
189
189
  } | {
190
190
  readonly action: "accepted";
191
+ readonly attemptId: import("../../record/model/identifiers.cjs").AttemptId;
192
+ readonly slotId: SlotId;
191
193
  readonly comparisons: readonly {
192
- readonly attachment: "niceeval.runner-activities" | "core" | "niceeval.assertions";
194
+ readonly attachment: "core" | "niceeval.runner-activities" | "niceeval.assertions";
193
195
  readonly recordedClaim: "execution-identity" | "attempt-outcome" | "assertion-verdict" | "execution-duration";
194
- readonly sourceState: "available" | "unavailable" | "invalid" | "unsupported";
196
+ readonly sourceState: "available" | "unavailable" | "unsupported" | "invalid";
195
197
  readonly result: "match" | "mismatch" | "ineligible" | "not-comparable";
196
198
  readonly reason: string;
197
199
  }[];
198
- readonly attemptId: import("../../record/model/identifiers.cjs").AttemptId;
199
- readonly slotId: SlotId;
200
200
  readonly origin: {
201
201
  readonly runId: import("../../record/model/identifiers.cjs").RunId;
202
202
  readonly slotId: SlotId;
@@ -213,7 +213,7 @@ export declare const MembershipProvenancePayloadSchema: Schema.refine<{
213
213
  readonly attemptId: import("../../record/model/identifiers.cjs").AttemptId;
214
214
  readonly gap: {
215
215
  readonly reason: string;
216
- readonly scope: "target" | "experiment" | "slot";
216
+ readonly scope: "experiment" | "target" | "slot";
217
217
  readonly issues: readonly RecordIssue[];
218
218
  readonly sourceBarrier?: {
219
219
  readonly runId: import("../../record/model/identifiers.cjs").RunId;
@@ -221,9 +221,9 @@ export declare const MembershipProvenancePayloadSchema: Schema.refine<{
221
221
  } | undefined;
222
222
  };
223
223
  readonly comparisons: readonly {
224
- readonly attachment: "niceeval.runner-activities" | "core" | "niceeval.assertions";
224
+ readonly attachment: "core" | "niceeval.runner-activities" | "niceeval.assertions";
225
225
  readonly recordedClaim: "execution-identity" | "attempt-outcome" | "assertion-verdict" | "execution-duration";
226
- readonly sourceState: "available" | "unavailable" | "invalid" | "unsupported";
226
+ readonly sourceState: "available" | "unavailable" | "unsupported" | "invalid";
227
227
  readonly result: "match" | "mismatch" | "ineligible" | "not-comparable";
228
228
  readonly reason: string;
229
229
  }[];
@@ -232,7 +232,7 @@ export declare const MembershipProvenancePayloadSchema: Schema.refine<{
232
232
  readonly slotId: SlotId;
233
233
  readonly gap: {
234
234
  readonly reason: string;
235
- readonly scope: "target" | "experiment" | "slot";
235
+ readonly scope: "experiment" | "target" | "slot";
236
236
  readonly issues: readonly RecordIssue[];
237
237
  readonly sourceBarrier?: {
238
238
  readonly runId: import("../../record/model/identifiers.cjs").RunId;
@@ -240,9 +240,9 @@ export declare const MembershipProvenancePayloadSchema: Schema.refine<{
240
240
  } | undefined;
241
241
  };
242
242
  readonly comparisons: readonly {
243
- readonly attachment: "niceeval.runner-activities" | "core" | "niceeval.assertions";
243
+ readonly attachment: "core" | "niceeval.runner-activities" | "niceeval.assertions";
244
244
  readonly recordedClaim: "execution-identity" | "attempt-outcome" | "assertion-verdict" | "execution-duration";
245
- readonly sourceState: "available" | "unavailable" | "invalid" | "unsupported";
245
+ readonly sourceState: "available" | "unavailable" | "unsupported" | "invalid";
246
246
  readonly result: "match" | "mismatch" | "ineligible" | "not-comparable";
247
247
  readonly reason: string;
248
248
  }[];
@@ -251,7 +251,7 @@ export declare const MembershipProvenancePayloadSchema: Schema.refine<{
251
251
  readonly slotId: SlotId;
252
252
  readonly gap: {
253
253
  readonly reason: string;
254
- readonly scope: "target" | "experiment" | "slot";
254
+ readonly scope: "experiment" | "target" | "slot";
255
255
  readonly issues: readonly RecordIssue[];
256
256
  readonly sourceBarrier?: {
257
257
  readonly runId: import("../../record/model/identifiers.cjs").RunId;
@@ -259,9 +259,9 @@ export declare const MembershipProvenancePayloadSchema: Schema.refine<{
259
259
  } | undefined;
260
260
  };
261
261
  readonly comparisons: readonly {
262
- readonly attachment: "niceeval.runner-activities" | "core" | "niceeval.assertions";
262
+ readonly attachment: "core" | "niceeval.runner-activities" | "niceeval.assertions";
263
263
  readonly recordedClaim: "execution-identity" | "attempt-outcome" | "assertion-verdict" | "execution-duration";
264
- readonly sourceState: "available" | "unavailable" | "invalid" | "unsupported";
264
+ readonly sourceState: "available" | "unavailable" | "unsupported" | "invalid";
265
265
  readonly result: "match" | "mismatch" | "ineligible" | "not-comparable";
266
266
  readonly reason: string;
267
267
  }[];