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
package/dist/index.js CHANGED
@@ -7,14 +7,14 @@ const __niceevalExport1 = __niceevalCanonical["ExperimentFatalError"];
7
7
  export { __niceevalExport1 as ExperimentFatalError };
8
8
  const __niceevalExport2 = __niceevalCanonical["MigrationRequiredError"];
9
9
  export { __niceevalExport2 as MigrationRequiredError };
10
- const __niceevalExport3 = __niceevalCanonical["closeQA"];
11
- export { __niceevalExport3 as closeQA };
12
- const __niceevalExport4 = __niceevalCanonical["defineAdapter"];
13
- export { __niceevalExport4 as defineAdapter };
14
- const __niceevalExport5 = __niceevalCanonical["defineAdapterContract"];
15
- export { __niceevalExport5 as defineAdapterContract };
16
- const __niceevalExport6 = __niceevalCanonical["defineConfig"];
17
- export { __niceevalExport6 as defineConfig };
10
+ const __niceevalExport3 = __niceevalCanonical["defineAdapter"];
11
+ export { __niceevalExport3 as defineAdapter };
12
+ const __niceevalExport4 = __niceevalCanonical["defineAdapterContract"];
13
+ export { __niceevalExport4 as defineAdapterContract };
14
+ const __niceevalExport5 = __niceevalCanonical["defineConfig"];
15
+ export { __niceevalExport5 as defineConfig };
16
+ const __niceevalExport6 = __niceevalCanonical["defineContextMatch"];
17
+ export { __niceevalExport6 as defineContextMatch };
18
18
  const __niceevalExport7 = __niceevalCanonical["defineEval"];
19
19
  export { __niceevalExport7 as defineEval };
20
20
  const __niceevalExport8 = __niceevalCanonical["defineEvalGroup"];
@@ -23,26 +23,28 @@ const __niceevalExport9 = __niceevalCanonical["defineExperiment"];
23
23
  export { __niceevalExport9 as defineExperiment };
24
24
  const __niceevalExport10 = __niceevalCanonical["defineJudge"];
25
25
  export { __niceevalExport10 as defineJudge };
26
- const __niceevalExport11 = __niceevalCanonical["defineScoreEval"];
27
- export { __niceevalExport11 as defineScoreEval };
28
- const __niceevalExport12 = __niceevalCanonical["defineScoreMatch"];
29
- export { __niceevalExport12 as defineScoreMatch };
30
- const __niceevalExport13 = __niceevalCanonical["factuality"];
31
- export { __niceevalExport13 as factuality };
32
- const __niceevalExport14 = __niceevalCanonical["failureClassOf"];
33
- export { __niceevalExport14 as failureClassOf };
34
- const __niceevalExport15 = __niceevalCanonical["faithfulness"];
35
- export { __niceevalExport15 as faithfulness };
36
- const __niceevalExport16 = __niceevalCanonical["getEnv"];
37
- export { __niceevalExport16 as getEnv };
38
- const __niceevalExport17 = __niceevalCanonical["instructionFollowing"];
39
- export { __niceevalExport17 as instructionFollowing };
40
- const __niceevalExport18 = __niceevalCanonical["pairwisePreference"];
41
- export { __niceevalExport18 as pairwisePreference };
42
- const __niceevalExport19 = __niceevalCanonical["readScoreMatchAudit"];
43
- export { __niceevalExport19 as readScoreMatchAudit };
44
- const __niceevalExport20 = __niceevalCanonical["requireEnv"];
45
- export { __niceevalExport20 as requireEnv };
46
- const __niceevalExport21 = __niceevalCanonical["stripComments"];
47
- export { __niceevalExport21 as stripComments };
26
+ const __niceevalExport11 = __niceevalCanonical["defineMaterialMatch"];
27
+ export { __niceevalExport11 as defineMaterialMatch };
28
+ const __niceevalExport12 = __niceevalCanonical["defineScoreEval"];
29
+ export { __niceevalExport12 as defineScoreEval };
30
+ const __niceevalExport13 = __niceevalCanonical["defineScoreMatch"];
31
+ export { __niceevalExport13 as defineScoreMatch };
32
+ const __niceevalExport14 = __niceevalCanonical["factuality"];
33
+ export { __niceevalExport14 as factuality };
34
+ const __niceevalExport15 = __niceevalCanonical["failureClassOf"];
35
+ export { __niceevalExport15 as failureClassOf };
36
+ const __niceevalExport16 = __niceevalCanonical["faithfulness"];
37
+ export { __niceevalExport16 as faithfulness };
38
+ const __niceevalExport17 = __niceevalCanonical["getEnv"];
39
+ export { __niceevalExport17 as getEnv };
40
+ const __niceevalExport18 = __niceevalCanonical["instructionFollowing"];
41
+ export { __niceevalExport18 as instructionFollowing };
42
+ const __niceevalExport19 = __niceevalCanonical["pairwisePreference"];
43
+ export { __niceevalExport19 as pairwisePreference };
44
+ const __niceevalExport20 = __niceevalCanonical["readScoreMatchAudit"];
45
+ export { __niceevalExport20 as readScoreMatchAudit };
46
+ const __niceevalExport21 = __niceevalCanonical["requireEnv"];
47
+ export { __niceevalExport21 as requireEnv };
48
+ const __niceevalExport22 = __niceevalCanonical["stripComments"];
49
+ export { __niceevalExport22 as stripComments };
48
50
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -7,14 +7,14 @@ const __niceevalExport1 = __niceevalCanonical["ExperimentFatalError"];
7
7
  export { __niceevalExport1 as ExperimentFatalError };
8
8
  const __niceevalExport2 = __niceevalCanonical["MigrationRequiredError"];
9
9
  export { __niceevalExport2 as MigrationRequiredError };
10
- const __niceevalExport3 = __niceevalCanonical["closeQA"];
11
- export { __niceevalExport3 as closeQA };
12
- const __niceevalExport4 = __niceevalCanonical["defineAdapter"];
13
- export { __niceevalExport4 as defineAdapter };
14
- const __niceevalExport5 = __niceevalCanonical["defineAdapterContract"];
15
- export { __niceevalExport5 as defineAdapterContract };
16
- const __niceevalExport6 = __niceevalCanonical["defineConfig"];
17
- export { __niceevalExport6 as defineConfig };
10
+ const __niceevalExport3 = __niceevalCanonical["defineAdapter"];
11
+ export { __niceevalExport3 as defineAdapter };
12
+ const __niceevalExport4 = __niceevalCanonical["defineAdapterContract"];
13
+ export { __niceevalExport4 as defineAdapterContract };
14
+ const __niceevalExport5 = __niceevalCanonical["defineConfig"];
15
+ export { __niceevalExport5 as defineConfig };
16
+ const __niceevalExport6 = __niceevalCanonical["defineContextMatch"];
17
+ export { __niceevalExport6 as defineContextMatch };
18
18
  const __niceevalExport7 = __niceevalCanonical["defineEval"];
19
19
  export { __niceevalExport7 as defineEval };
20
20
  const __niceevalExport8 = __niceevalCanonical["defineEvalGroup"];
@@ -23,26 +23,28 @@ const __niceevalExport9 = __niceevalCanonical["defineExperiment"];
23
23
  export { __niceevalExport9 as defineExperiment };
24
24
  const __niceevalExport10 = __niceevalCanonical["defineJudge"];
25
25
  export { __niceevalExport10 as defineJudge };
26
- const __niceevalExport11 = __niceevalCanonical["defineScoreEval"];
27
- export { __niceevalExport11 as defineScoreEval };
28
- const __niceevalExport12 = __niceevalCanonical["defineScoreMatch"];
29
- export { __niceevalExport12 as defineScoreMatch };
30
- const __niceevalExport13 = __niceevalCanonical["factuality"];
31
- export { __niceevalExport13 as factuality };
32
- const __niceevalExport14 = __niceevalCanonical["failureClassOf"];
33
- export { __niceevalExport14 as failureClassOf };
34
- const __niceevalExport15 = __niceevalCanonical["faithfulness"];
35
- export { __niceevalExport15 as faithfulness };
36
- const __niceevalExport16 = __niceevalCanonical["getEnv"];
37
- export { __niceevalExport16 as getEnv };
38
- const __niceevalExport17 = __niceevalCanonical["instructionFollowing"];
39
- export { __niceevalExport17 as instructionFollowing };
40
- const __niceevalExport18 = __niceevalCanonical["pairwisePreference"];
41
- export { __niceevalExport18 as pairwisePreference };
42
- const __niceevalExport19 = __niceevalCanonical["readScoreMatchAudit"];
43
- export { __niceevalExport19 as readScoreMatchAudit };
44
- const __niceevalExport20 = __niceevalCanonical["requireEnv"];
45
- export { __niceevalExport20 as requireEnv };
46
- const __niceevalExport21 = __niceevalCanonical["stripComments"];
47
- export { __niceevalExport21 as stripComments };
26
+ const __niceevalExport11 = __niceevalCanonical["defineMaterialMatch"];
27
+ export { __niceevalExport11 as defineMaterialMatch };
28
+ const __niceevalExport12 = __niceevalCanonical["defineScoreEval"];
29
+ export { __niceevalExport12 as defineScoreEval };
30
+ const __niceevalExport13 = __niceevalCanonical["defineScoreMatch"];
31
+ export { __niceevalExport13 as defineScoreMatch };
32
+ const __niceevalExport14 = __niceevalCanonical["factuality"];
33
+ export { __niceevalExport14 as factuality };
34
+ const __niceevalExport15 = __niceevalCanonical["failureClassOf"];
35
+ export { __niceevalExport15 as failureClassOf };
36
+ const __niceevalExport16 = __niceevalCanonical["faithfulness"];
37
+ export { __niceevalExport16 as faithfulness };
38
+ const __niceevalExport17 = __niceevalCanonical["getEnv"];
39
+ export { __niceevalExport17 as getEnv };
40
+ const __niceevalExport18 = __niceevalCanonical["instructionFollowing"];
41
+ export { __niceevalExport18 as instructionFollowing };
42
+ const __niceevalExport19 = __niceevalCanonical["pairwisePreference"];
43
+ export { __niceevalExport19 as pairwisePreference };
44
+ const __niceevalExport20 = __niceevalCanonical["readScoreMatchAudit"];
45
+ export { __niceevalExport20 as readScoreMatchAudit };
46
+ const __niceevalExport21 = __niceevalCanonical["requireEnv"];
47
+ export { __niceevalExport21 as requireEnv };
48
+ const __niceevalExport22 = __niceevalCanonical["stripComments"];
49
+ export { __niceevalExport22 as stripComments };
48
50
  //# sourceMappingURL=index.mjs.map
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InspectionArtifactError = exports.InspectionArtifactResultSchema = exports.InspectionArtifactLimitSchema = exports.InspectionArtifactOffsetSchema = exports.InspectionArtifactLimits = void 0;
4
4
  exports.projectAttemptArtifact = projectAttemptArtifact;
5
5
  exports.readInspectionArtifactBytes = readInspectionArtifactBytes;
6
+ exports.readInspectionArtifactDescriptors = readInspectionArtifactDescriptors;
6
7
  const effect_1 = require("effect");
7
8
  const attempt_locator_ts_1 = require("../attempt-locator.cjs");
8
9
  const content_ts_1 = require("../record/attachment/content.cjs");
@@ -122,76 +123,104 @@ function projectAttemptArtifact(resolved, request) {
122
123
  }));
123
124
  }
124
125
  }
126
+ /** Hydrates and verifies every sealed artifact descriptor of the exact origin Attempt. */
127
+ function hydrateArtifactDescriptors(resolved) {
128
+ if ((0, attempt_locator_ts_1.encodeAttemptLocator)(resolved.attempt.attemptId) !== resolved.locator ||
129
+ resolved.attempt.originRunId !== resolved.origin.run.runId) {
130
+ throw new Error("Artifact origin does not match the requested Attempt locator.");
131
+ }
132
+ const attachments = resolved.origin.attachments.filter(({ physical }) => physical.ownerKind === "attempt" && physical.ownerAttemptId === resolved.attempt.attemptId &&
133
+ physical.family === definition_ts_1.attemptArtifactsRecordAttachment.family);
134
+ if (attachments.length !== 1)
135
+ throw new Error("Artifact owner attachment is unavailable.");
136
+ const attachment = attachments[0];
137
+ if (attachment.physical.ownerRunId !== resolved.attempt.originRunId ||
138
+ attachment.physical.familyRevision !== persistence_ts_1.attemptArtifactsRecordAttachmentPersistence.revision ||
139
+ attachment.physical.references.length !== 0) {
140
+ throw new Error("Artifact attachment ownership or revision is invalid.");
141
+ }
142
+ const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content]));
143
+ const bound = new WeakMap();
144
+ const used = new Set();
145
+ if (byLogicalHandle.size !== attachment.physical.contents.length)
146
+ throw new Error("Duplicate artifact content handle.");
147
+ const hydrated = (0, protocol_ts_1.hydrateRecordAttachmentCurrent)(definition_ts_1.attemptArtifactsRecordAttachment, attachment.value, {
148
+ content: (token, declaration) => {
149
+ const marker = decodeMarker(token);
150
+ if (effect_1.Result.isFailure(marker))
151
+ return effect_1.Result.succeed(undefined);
152
+ const logicalHandle = marker.success["$niceeval.record.content"];
153
+ const persisted = byLogicalHandle.get(logicalHandle);
154
+ if (persisted === undefined || used.has(logicalHandle) || declaration.kind !== "bytes" ||
155
+ declaration.maximumBytes !== undefined && persisted.byteLength > declaration.maximumBytes) {
156
+ return effect_1.Result.fail({ code: "current-content-bind-failed" });
157
+ }
158
+ const handle = (0, content_ts_1.mintRecordContentHandle)("bytes");
159
+ bound.set(handle, persisted);
160
+ used.add(logicalHandle);
161
+ return effect_1.Result.succeed(handle);
162
+ },
163
+ reference: () => effect_1.Result.succeed(undefined),
164
+ });
165
+ if (effect_1.Result.isFailure(hydrated) || used.size !== attachment.physical.contents.length) {
166
+ throw new Error("Artifact content closure is invalid.");
167
+ }
168
+ return Object.freeze(hydrated.success.artifacts.map((descriptor) => {
169
+ const metadata = bound.get(descriptor.content);
170
+ if (metadata === undefined || metadata.byteLength !== descriptor.byteLength || metadata.digest !== descriptor.sha256 ||
171
+ descriptor.byteLength < 0) {
172
+ throw new Error("Artifact descriptor does not match sealed content metadata.");
173
+ }
174
+ return Object.freeze({
175
+ artifactId: descriptor.artifactId,
176
+ name: descriptor.label,
177
+ mediaType: descriptor.mediaType,
178
+ byteLength: descriptor.byteLength,
179
+ sha256: descriptor.sha256,
180
+ content: metadata,
181
+ });
182
+ }));
183
+ }
125
184
  /** Internal fixed-family closure reader. It verifies the whole sealed artifact. */
126
185
  function readInspectionArtifactBytes(resolved, artifactId, maximumBytes) {
127
186
  if (effect_1.Result.isFailure(decodeRequest({ artifactId })))
128
187
  return requestInvalid("Invalid artifact ID.");
129
188
  try {
130
- if ((0, attempt_locator_ts_1.encodeAttemptLocator)(resolved.attempt.attemptId) !== resolved.locator ||
131
- resolved.attempt.originRunId !== resolved.origin.run.runId) {
132
- throw new Error("Artifact origin does not match the requested Attempt locator.");
133
- }
134
- const attachments = resolved.origin.attachments.filter(({ physical }) => physical.ownerKind === "attempt" && physical.ownerAttemptId === resolved.attempt.attemptId &&
135
- physical.family === definition_ts_1.attemptArtifactsRecordAttachment.family);
136
- if (attachments.length !== 1)
137
- throw new Error("Artifact owner attachment is unavailable.");
138
- const attachment = attachments[0];
139
- if (attachment.physical.ownerRunId !== resolved.attempt.originRunId ||
140
- attachment.physical.familyRevision !== persistence_ts_1.attemptArtifactsRecordAttachmentPersistence.revision ||
141
- attachment.physical.references.length !== 0) {
142
- throw new Error("Artifact attachment ownership or revision is invalid.");
143
- }
144
- const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content]));
145
- const bound = new WeakMap();
146
- const used = new Set();
147
- if (byLogicalHandle.size !== attachment.physical.contents.length)
148
- throw new Error("Duplicate artifact content handle.");
149
- const hydrated = (0, protocol_ts_1.hydrateRecordAttachmentCurrent)(definition_ts_1.attemptArtifactsRecordAttachment, attachment.value, {
150
- content: (token, declaration) => {
151
- const marker = decodeMarker(token);
152
- if (effect_1.Result.isFailure(marker))
153
- return effect_1.Result.succeed(undefined);
154
- const logicalHandle = marker.success["$niceeval.record.content"];
155
- const persisted = byLogicalHandle.get(logicalHandle);
156
- if (persisted === undefined || used.has(logicalHandle) || declaration.kind !== "bytes" ||
157
- declaration.maximumBytes !== undefined && persisted.byteLength > declaration.maximumBytes) {
158
- return effect_1.Result.fail({ code: "current-content-bind-failed" });
159
- }
160
- const handle = (0, content_ts_1.mintRecordContentHandle)("bytes");
161
- bound.set(handle, persisted);
162
- used.add(logicalHandle);
163
- return effect_1.Result.succeed(handle);
164
- },
165
- reference: () => effect_1.Result.succeed(undefined),
166
- });
167
- if (effect_1.Result.isFailure(hydrated) || used.size !== attachment.physical.contents.length) {
168
- throw new Error("Artifact content closure is invalid.");
169
- }
170
- for (const descriptor of hydrated.success.artifacts) {
171
- const metadata = bound.get(descriptor.content);
172
- if (metadata === undefined || metadata.byteLength !== descriptor.byteLength || metadata.digest !== descriptor.sha256) {
173
- throw new Error("Artifact descriptor does not match sealed content metadata.");
174
- }
175
- }
176
- const artifact = hydrated.success.artifacts.find((entry) => entry.artifactId === artifactId);
189
+ const artifact = hydrateArtifactDescriptors(resolved).find((entry) => entry.artifactId === artifactId);
177
190
  if (artifact === undefined)
178
191
  return effect_1.Result.succeed(undefined);
179
- const content = bound.get(artifact.content);
180
- if (content === undefined || content.byteLength !== artifact.byteLength || content.digest !== artifact.sha256 ||
181
- artifact.byteLength < 0) {
182
- throw new Error("Artifact descriptor does not match sealed content metadata.");
183
- }
184
192
  if (artifact.byteLength > maximumBytes)
185
193
  return requestInvalid("Artifact exceeds the evidence parsing budget.");
186
194
  return effect_1.Result.succeed(Object.freeze({
187
195
  artifactId,
188
- name: artifact.label,
196
+ name: artifact.name,
189
197
  mediaType: artifact.mediaType,
190
198
  byteLength: artifact.byteLength,
191
199
  sha256: artifact.sha256,
192
- bytes: readVerifiedRange(resolved.origin.source, content, 0, artifact.byteLength),
200
+ bytes: readVerifiedRange(resolved.origin.source, artifact.content, 0, artifact.byteLength),
201
+ }));
202
+ }
203
+ catch (cause) {
204
+ return effect_1.Result.fail(new InspectionArtifactError({
205
+ code: "inspection-record-integrity-failure",
206
+ reason: cause instanceof Error ? cause.message : "Artifact content validation failed.",
193
207
  }));
194
208
  }
209
+ }
210
+ /** Descriptor-only closure reader for references that must not load bytes, such as display images. */
211
+ function readInspectionArtifactDescriptors(resolved) {
212
+ try {
213
+ const hasArtifacts = resolved.origin.attachments.some(({ physical }) => physical.ownerKind === "attempt" && physical.ownerAttemptId === resolved.attempt.attemptId &&
214
+ physical.family === definition_ts_1.attemptArtifactsRecordAttachment.family);
215
+ if (!hasArtifacts)
216
+ return effect_1.Result.succeed(new Map());
217
+ return effect_1.Result.succeed(new Map(hydrateArtifactDescriptors(resolved).map((artifact) => [artifact.artifactId, Object.freeze({
218
+ artifactId: artifact.artifactId,
219
+ mediaType: artifact.mediaType,
220
+ byteLength: artifact.byteLength,
221
+ sha256: artifact.sha256,
222
+ })])));
223
+ }
195
224
  catch (cause) {
196
225
  return effect_1.Result.fail(new InspectionArtifactError({
197
226
  code: "inspection-record-integrity-failure",
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data, Result, Schema } from \"effect\";\nimport { encodeAttemptLocator } from \"../attempt-locator.ts\";\nimport { mintRecordContentHandle } from \"../record/attachment/content.ts\";\nimport { hydrateRecordAttachmentCurrent } from \"../record/attachment/protocol.ts\";\nimport { RecordExactParseOptions } from \"../record/codec/core.ts\";\nimport { ArtifactIdSchema, Sha256DigestSchema } from \"../record/codec/identifiers.ts\";\nimport { attemptArtifactsRecordAttachment } from \"../record/family/artifacts/definition.ts\";\nimport { attemptArtifactsRecordAttachmentPersistence } from \"../record/family/artifacts/persistence.ts\";\nimport { MediaTypeSchema, NonNegativeSafeIntegerSchema, SafeTextSchema } from \"../record/family/common.ts\";\nimport type { PersistedContentMetadata } from \"../record/sqlite/types.ts\";\nimport { encodeBase64Bytes, InspectionSha256 } from \"./bytes.ts\";\nimport type { ResolvedInspectionAttempt } from \"./facts.ts\";\nimport type { InspectionFactSource } from \"./source.ts\";\nexport const InspectionArtifactLimits = Object.freeze({ defaultBytes: 64 * 1024, maximumBytes: 256 * 1024 });\nexport const InspectionArtifactOffsetSchema = NonNegativeSafeIntegerSchema;\nexport const InspectionArtifactLimitSchema = NonNegativeSafeIntegerSchema.pipe(Schema.check(Schema.makeFilter((value) => value > 0 && value <= InspectionArtifactLimits.maximumBytes)));\nconst ReadRequestSchema = Schema.Struct({\n artifactId: ArtifactIdSchema,\n offset: Schema.optional(InspectionArtifactOffsetSchema),\n limit: Schema.optional(InspectionArtifactLimitSchema),\n});\nexport type InspectionArtifactRequest = Schema.Schema.Type<typeof ReadRequestSchema>;\nexport const InspectionArtifactResultSchema = Schema.Union([\n Schema.Struct({ state: Schema.Literal(\"not-found\"), artifactId: ArtifactIdSchema }),\n Schema.Struct({\n state: Schema.Literal(\"available\"),\n artifactId: ArtifactIdSchema,\n name: Schema.toType(SafeTextSchema),\n mediaType: Schema.toType(MediaTypeSchema),\n byteLength: NonNegativeSafeIntegerSchema,\n sha256: Sha256DigestSchema,\n offset: InspectionArtifactOffsetSchema,\n base64: Schema.String.pipe(Schema.check(Schema.makeFilter((value) => value.length <= Math.ceil(InspectionArtifactLimits.maximumBytes / 3) * 4 &&\n value.length % 4 === 0 && /^[A-Za-z0-9+/]*={0,2}$/.test(value)))),\n nextOffset: Schema.NullOr(InspectionArtifactOffsetSchema),\n }),\n]);\nexport type InspectionArtifactResult = Schema.Schema.Type<typeof InspectionArtifactResultSchema>;\nexport interface InspectionArtifactBytes {\n readonly artifactId: string;\n readonly name: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly sha256: string;\n readonly bytes: Uint8Array;\n}\nexport class InspectionArtifactError extends Data.TaggedError(\"InspectionArtifactError\")<{\n readonly code: \"inspection-request-invalid\" | \"inspection-record-integrity-failure\";\n readonly reason: string;\n}> {\n}\nconst decodeRequest = Schema.decodeUnknownResult(ReadRequestSchema, RecordExactParseOptions);\nconst decodeMarker = Schema.decodeUnknownResult(Schema.Struct({ \"$niceeval.record.content\": Schema.String }), RecordExactParseOptions);\n/** Reads the exact origin's sealed bytes; only the requested range is retained in memory. */\nexport function projectAttemptArtifact(resolved: ResolvedInspectionAttempt, request: InspectionArtifactRequest): Result.Result<InspectionArtifactResult, InspectionArtifactError> {\n const decoded = decodeRequest(request);\n if (Result.isFailure(decoded))\n return requestInvalid(\"Invalid artifact ID, offset, or limit.\");\n const { artifactId, offset = 0, limit = InspectionArtifactLimits.defaultBytes } = decoded.success;\n try {\n if (encodeAttemptLocator(resolved.attempt.attemptId) !== resolved.locator ||\n resolved.attempt.originRunId !== resolved.origin.run.runId) {\n throw new Error(\"Artifact origin does not match the requested Attempt locator.\");\n }\n const attachments = resolved.origin.attachments.filter(({ physical }) => physical.ownerKind === \"attempt\" && physical.ownerAttemptId === resolved.attempt.attemptId &&\n physical.family === attemptArtifactsRecordAttachment.family);\n if (attachments.length === 0)\n return Result.succeed(Object.freeze({ state: \"not-found\", artifactId }));\n if (attachments.length !== 1)\n throw new Error(\"Artifact owner has duplicate attachments.\");\n const attachment = attachments[0]!;\n if (attachment.physical.ownerRunId !== resolved.attempt.originRunId ||\n attachment.physical.familyRevision !== attemptArtifactsRecordAttachmentPersistence.revision ||\n attachment.physical.references.length !== 0) {\n throw new Error(\"Artifact attachment ownership or revision is invalid.\");\n }\n const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content]));\n const bound = new WeakMap<object, PersistedContentMetadata>();\n const used = new Set<string>();\n if (byLogicalHandle.size !== attachment.physical.contents.length)\n throw new Error(\"Duplicate artifact content handle.\");\n const hydrated = hydrateRecordAttachmentCurrent(attemptArtifactsRecordAttachment, attachment.value, {\n content: (token, declaration) => {\n const marker = decodeMarker(token);\n if (Result.isFailure(marker))\n return Result.succeed(undefined);\n const logicalHandle = marker.success[\"$niceeval.record.content\"];\n const metadata = byLogicalHandle.get(logicalHandle);\n if (metadata === undefined || used.has(logicalHandle) || declaration.kind !== \"bytes\" ||\n declaration.maximumBytes !== undefined && metadata.byteLength > declaration.maximumBytes) {\n return Result.fail({ code: \"current-content-bind-failed\" as const });\n }\n const handle = mintRecordContentHandle(\"bytes\");\n bound.set(handle, metadata);\n used.add(logicalHandle);\n return Result.succeed(handle);\n },\n reference: () => Result.succeed(undefined),\n });\n if (Result.isFailure(hydrated) || used.size !== attachment.physical.contents.length) {\n throw new Error(\"Artifact content closure is invalid.\");\n }\n // Validate every descriptor, even when the requested ID is absent.\n for (const artifact of hydrated.success.artifacts) {\n const metadata = bound.get(artifact.content);\n if (metadata === undefined || metadata.byteLength !== artifact.byteLength || metadata.digest !== artifact.sha256) {\n throw new Error(\"Artifact descriptor does not match sealed content metadata.\");\n }\n }\n const artifact = hydrated.success.artifacts.find((item) => item.artifactId === artifactId);\n if (artifact === undefined)\n return Result.succeed(Object.freeze({ state: \"not-found\", artifactId }));\n if (offset > artifact.byteLength)\n return requestInvalid(\"Artifact offset exceeds its byte length.\");\n const bytes = readVerifiedRange(resolved.origin.source, bound.get(artifact.content)!, offset, limit);\n return Result.succeed(Object.freeze({\n state: \"available\",\n artifactId,\n name: artifact.label,\n mediaType: artifact.mediaType,\n byteLength: artifact.byteLength,\n sha256: artifact.sha256,\n offset,\n base64: encodeBase64Bytes(bytes),\n nextOffset: offset + bytes.byteLength < artifact.byteLength ? offset + bytes.byteLength : null,\n }));\n }\n catch (cause) {\n return Result.fail(new InspectionArtifactError({\n code: \"inspection-record-integrity-failure\",\n reason: cause instanceof Error ? cause.message : \"Artifact content validation failed.\",\n }));\n }\n}\n/** Internal fixed-family closure reader. It verifies the whole sealed artifact. */\nexport function readInspectionArtifactBytes(resolved: ResolvedInspectionAttempt, artifactId: string, maximumBytes: number): Result.Result<InspectionArtifactBytes | undefined, InspectionArtifactError> {\n if (Result.isFailure(decodeRequest({ artifactId })))\n return requestInvalid(\"Invalid artifact ID.\");\n try {\n if (encodeAttemptLocator(resolved.attempt.attemptId) !== resolved.locator ||\n resolved.attempt.originRunId !== resolved.origin.run.runId) {\n throw new Error(\"Artifact origin does not match the requested Attempt locator.\");\n }\n const attachments = resolved.origin.attachments.filter(({ physical }) => physical.ownerKind === \"attempt\" && physical.ownerAttemptId === resolved.attempt.attemptId &&\n physical.family === attemptArtifactsRecordAttachment.family);\n if (attachments.length !== 1)\n throw new Error(\"Artifact owner attachment is unavailable.\");\n const attachment = attachments[0]!;\n if (attachment.physical.ownerRunId !== resolved.attempt.originRunId ||\n attachment.physical.familyRevision !== attemptArtifactsRecordAttachmentPersistence.revision ||\n attachment.physical.references.length !== 0) {\n throw new Error(\"Artifact attachment ownership or revision is invalid.\");\n }\n const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content]));\n const bound = new WeakMap<object, PersistedContentMetadata>();\n const used = new Set<string>();\n if (byLogicalHandle.size !== attachment.physical.contents.length)\n throw new Error(\"Duplicate artifact content handle.\");\n const hydrated = hydrateRecordAttachmentCurrent(attemptArtifactsRecordAttachment, attachment.value, {\n content: (token, declaration) => {\n const marker = decodeMarker(token);\n if (Result.isFailure(marker))\n return Result.succeed(undefined);\n const logicalHandle = marker.success[\"$niceeval.record.content\"];\n const persisted = byLogicalHandle.get(logicalHandle);\n if (persisted === undefined || used.has(logicalHandle) || declaration.kind !== \"bytes\" ||\n declaration.maximumBytes !== undefined && persisted.byteLength > declaration.maximumBytes) {\n return Result.fail({ code: \"current-content-bind-failed\" as const });\n }\n const handle = mintRecordContentHandle(\"bytes\");\n bound.set(handle, persisted);\n used.add(logicalHandle);\n return Result.succeed(handle);\n },\n reference: () => Result.succeed(undefined),\n });\n if (Result.isFailure(hydrated) || used.size !== attachment.physical.contents.length) {\n throw new Error(\"Artifact content closure is invalid.\");\n }\n for (const descriptor of hydrated.success.artifacts) {\n const metadata = bound.get(descriptor.content);\n if (metadata === undefined || metadata.byteLength !== descriptor.byteLength || metadata.digest !== descriptor.sha256) {\n throw new Error(\"Artifact descriptor does not match sealed content metadata.\");\n }\n }\n const artifact = hydrated.success.artifacts.find((entry) => entry.artifactId === artifactId);\n if (artifact === undefined)\n return Result.succeed(undefined);\n const content = bound.get(artifact.content);\n if (content === undefined || content.byteLength !== artifact.byteLength || content.digest !== artifact.sha256 ||\n artifact.byteLength < 0) {\n throw new Error(\"Artifact descriptor does not match sealed content metadata.\");\n }\n if (artifact.byteLength > maximumBytes)\n return requestInvalid(\"Artifact exceeds the evidence parsing budget.\");\n return Result.succeed(Object.freeze({\n artifactId,\n name: artifact.label,\n mediaType: artifact.mediaType,\n byteLength: artifact.byteLength,\n sha256: artifact.sha256,\n bytes: readVerifiedRange(resolved.origin.source, content, 0, artifact.byteLength),\n }));\n }\n catch (cause) {\n return Result.fail(new InspectionArtifactError({\n code: \"inspection-record-integrity-failure\",\n reason: cause instanceof Error ? cause.message : \"Artifact content validation failed.\",\n }));\n }\n}\nfunction requestInvalid(reason: string): Result.Result<never, InspectionArtifactError> {\n return Result.fail(new InspectionArtifactError({ code: \"inspection-request-invalid\", reason }));\n}\nfunction readVerifiedRange(source: InspectionFactSource, metadata: PersistedContentMetadata, offset: number, limit: number): Uint8Array {\n const output = new Uint8Array(Math.min(limit, metadata.byteLength - offset));\n const digest = new InspectionSha256();\n let byteOffset = 0;\n let expectedOrdinal = 0;\n let afterOrdinal = -1;\n while (true) {\n // One bounded storage chunk at a time, including bytes outside the requested range.\n const page = source.readContentPage(metadata.contentId, afterOrdinal, 1);\n if (page.contentId !== metadata.contentId || page.afterOrdinal !== afterOrdinal || page.chunks.length > 1 ||\n page.chunks.length === 0 && page.nextOrdinal !== null)\n throw new Error(\"Artifact content page is invalid.\");\n for (const chunk of page.chunks) {\n if (chunk.ordinal !== expectedOrdinal || expectedOrdinal >= metadata.chunkCount ||\n byteOffset + chunk.bytes.byteLength > metadata.byteLength)\n throw new Error(\"Artifact chunk sequence is invalid.\");\n digest.update(chunk.bytes);\n const start = Math.max(offset, byteOffset);\n const end = Math.min(offset + output.byteLength, byteOffset + chunk.bytes.byteLength);\n if (end > start)\n output.set(chunk.bytes.subarray(start - byteOffset, end - byteOffset), start - offset);\n byteOffset += chunk.bytes.byteLength;\n expectedOrdinal += 1;\n }\n if (page.nextOrdinal === null)\n break;\n if (page.nextOrdinal !== expectedOrdinal - 1 || expectedOrdinal >= metadata.chunkCount) {\n throw new Error(\"Artifact content continuation is invalid.\");\n }\n afterOrdinal = page.nextOrdinal;\n }\n if (byteOffset !== metadata.byteLength || expectedOrdinal !== metadata.chunkCount || digest.digestHex() !== metadata.digest) {\n throw new Error(\"Artifact bytes do not match their sealed digest.\");\n }\n return output;\n}\n"]}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data, Result, Schema } from \"effect\";\nimport { encodeAttemptLocator } from \"../attempt-locator.ts\";\nimport { mintRecordContentHandle } from \"../record/attachment/content.ts\";\nimport { hydrateRecordAttachmentCurrent } from \"../record/attachment/protocol.ts\";\nimport { RecordExactParseOptions } from \"../record/codec/core.ts\";\nimport { ArtifactIdSchema, Sha256DigestSchema } from \"../record/codec/identifiers.ts\";\nimport { attemptArtifactsRecordAttachment } from \"../record/family/artifacts/definition.ts\";\nimport { attemptArtifactsRecordAttachmentPersistence } from \"../record/family/artifacts/persistence.ts\";\nimport { MediaTypeSchema, NonNegativeSafeIntegerSchema, SafeTextSchema } from \"../record/family/common.ts\";\nimport type { PersistedContentMetadata } from \"../record/sqlite/types.ts\";\nimport { encodeBase64Bytes, InspectionSha256 } from \"./bytes.ts\";\nimport type { ResolvedInspectionAttempt } from \"./facts.ts\";\nimport type { InspectionFactSource } from \"./source.ts\";\nexport const InspectionArtifactLimits = Object.freeze({ defaultBytes: 64 * 1024, maximumBytes: 256 * 1024 });\nexport const InspectionArtifactOffsetSchema = NonNegativeSafeIntegerSchema;\nexport const InspectionArtifactLimitSchema = NonNegativeSafeIntegerSchema.pipe(Schema.check(Schema.makeFilter((value) => value > 0 && value <= InspectionArtifactLimits.maximumBytes)));\nconst ReadRequestSchema = Schema.Struct({\n artifactId: ArtifactIdSchema,\n offset: Schema.optional(InspectionArtifactOffsetSchema),\n limit: Schema.optional(InspectionArtifactLimitSchema),\n});\nexport type InspectionArtifactRequest = Schema.Schema.Type<typeof ReadRequestSchema>;\nexport const InspectionArtifactResultSchema = Schema.Union([\n Schema.Struct({ state: Schema.Literal(\"not-found\"), artifactId: ArtifactIdSchema }),\n Schema.Struct({\n state: Schema.Literal(\"available\"),\n artifactId: ArtifactIdSchema,\n name: Schema.toType(SafeTextSchema),\n mediaType: Schema.toType(MediaTypeSchema),\n byteLength: NonNegativeSafeIntegerSchema,\n sha256: Sha256DigestSchema,\n offset: InspectionArtifactOffsetSchema,\n base64: Schema.String.pipe(Schema.check(Schema.makeFilter((value) => value.length <= Math.ceil(InspectionArtifactLimits.maximumBytes / 3) * 4 &&\n value.length % 4 === 0 && /^[A-Za-z0-9+/]*={0,2}$/.test(value)))),\n nextOffset: Schema.NullOr(InspectionArtifactOffsetSchema),\n }),\n]);\nexport type InspectionArtifactResult = Schema.Schema.Type<typeof InspectionArtifactResultSchema>;\nexport interface InspectionArtifactBytes {\n readonly artifactId: string;\n readonly name: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly sha256: string;\n readonly bytes: Uint8Array;\n}\nexport class InspectionArtifactError extends Data.TaggedError(\"InspectionArtifactError\")<{\n readonly code: \"inspection-request-invalid\" | \"inspection-record-integrity-failure\";\n readonly reason: string;\n}> {\n}\nconst decodeRequest = Schema.decodeUnknownResult(ReadRequestSchema, RecordExactParseOptions);\nconst decodeMarker = Schema.decodeUnknownResult(Schema.Struct({ \"$niceeval.record.content\": Schema.String }), RecordExactParseOptions);\n/** Reads the exact origin's sealed bytes; only the requested range is retained in memory. */\nexport function projectAttemptArtifact(resolved: ResolvedInspectionAttempt, request: InspectionArtifactRequest): Result.Result<InspectionArtifactResult, InspectionArtifactError> {\n const decoded = decodeRequest(request);\n if (Result.isFailure(decoded))\n return requestInvalid(\"Invalid artifact ID, offset, or limit.\");\n const { artifactId, offset = 0, limit = InspectionArtifactLimits.defaultBytes } = decoded.success;\n try {\n if (encodeAttemptLocator(resolved.attempt.attemptId) !== resolved.locator ||\n resolved.attempt.originRunId !== resolved.origin.run.runId) {\n throw new Error(\"Artifact origin does not match the requested Attempt locator.\");\n }\n const attachments = resolved.origin.attachments.filter(({ physical }) => physical.ownerKind === \"attempt\" && physical.ownerAttemptId === resolved.attempt.attemptId &&\n physical.family === attemptArtifactsRecordAttachment.family);\n if (attachments.length === 0)\n return Result.succeed(Object.freeze({ state: \"not-found\", artifactId }));\n if (attachments.length !== 1)\n throw new Error(\"Artifact owner has duplicate attachments.\");\n const attachment = attachments[0]!;\n if (attachment.physical.ownerRunId !== resolved.attempt.originRunId ||\n attachment.physical.familyRevision !== attemptArtifactsRecordAttachmentPersistence.revision ||\n attachment.physical.references.length !== 0) {\n throw new Error(\"Artifact attachment ownership or revision is invalid.\");\n }\n const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content]));\n const bound = new WeakMap<object, PersistedContentMetadata>();\n const used = new Set<string>();\n if (byLogicalHandle.size !== attachment.physical.contents.length)\n throw new Error(\"Duplicate artifact content handle.\");\n const hydrated = hydrateRecordAttachmentCurrent(attemptArtifactsRecordAttachment, attachment.value, {\n content: (token, declaration) => {\n const marker = decodeMarker(token);\n if (Result.isFailure(marker))\n return Result.succeed(undefined);\n const logicalHandle = marker.success[\"$niceeval.record.content\"];\n const metadata = byLogicalHandle.get(logicalHandle);\n if (metadata === undefined || used.has(logicalHandle) || declaration.kind !== \"bytes\" ||\n declaration.maximumBytes !== undefined && metadata.byteLength > declaration.maximumBytes) {\n return Result.fail({ code: \"current-content-bind-failed\" as const });\n }\n const handle = mintRecordContentHandle(\"bytes\");\n bound.set(handle, metadata);\n used.add(logicalHandle);\n return Result.succeed(handle);\n },\n reference: () => Result.succeed(undefined),\n });\n if (Result.isFailure(hydrated) || used.size !== attachment.physical.contents.length) {\n throw new Error(\"Artifact content closure is invalid.\");\n }\n // Validate every descriptor, even when the requested ID is absent.\n for (const artifact of hydrated.success.artifacts) {\n const metadata = bound.get(artifact.content);\n if (metadata === undefined || metadata.byteLength !== artifact.byteLength || metadata.digest !== artifact.sha256) {\n throw new Error(\"Artifact descriptor does not match sealed content metadata.\");\n }\n }\n const artifact = hydrated.success.artifacts.find((item) => item.artifactId === artifactId);\n if (artifact === undefined)\n return Result.succeed(Object.freeze({ state: \"not-found\", artifactId }));\n if (offset > artifact.byteLength)\n return requestInvalid(\"Artifact offset exceeds its byte length.\");\n const bytes = readVerifiedRange(resolved.origin.source, bound.get(artifact.content)!, offset, limit);\n return Result.succeed(Object.freeze({\n state: \"available\",\n artifactId,\n name: artifact.label,\n mediaType: artifact.mediaType,\n byteLength: artifact.byteLength,\n sha256: artifact.sha256,\n offset,\n base64: encodeBase64Bytes(bytes),\n nextOffset: offset + bytes.byteLength < artifact.byteLength ? offset + bytes.byteLength : null,\n }));\n }\n catch (cause) {\n return Result.fail(new InspectionArtifactError({\n code: \"inspection-record-integrity-failure\",\n reason: cause instanceof Error ? cause.message : \"Artifact content validation failed.\",\n }));\n }\n}\ninterface HydratedArtifactDescriptor {\n readonly artifactId: string;\n readonly name: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly sha256: string;\n readonly content: PersistedContentMetadata;\n}\n/** Hydrates and verifies every sealed artifact descriptor of the exact origin Attempt. */\nfunction hydrateArtifactDescriptors(resolved: ResolvedInspectionAttempt): readonly HydratedArtifactDescriptor[] {\n if (encodeAttemptLocator(resolved.attempt.attemptId) !== resolved.locator ||\n resolved.attempt.originRunId !== resolved.origin.run.runId) {\n throw new Error(\"Artifact origin does not match the requested Attempt locator.\");\n }\n const attachments = resolved.origin.attachments.filter(({ physical }) => physical.ownerKind === \"attempt\" && physical.ownerAttemptId === resolved.attempt.attemptId &&\n physical.family === attemptArtifactsRecordAttachment.family);\n if (attachments.length !== 1)\n throw new Error(\"Artifact owner attachment is unavailable.\");\n const attachment = attachments[0]!;\n if (attachment.physical.ownerRunId !== resolved.attempt.originRunId ||\n attachment.physical.familyRevision !== attemptArtifactsRecordAttachmentPersistence.revision ||\n attachment.physical.references.length !== 0) {\n throw new Error(\"Artifact attachment ownership or revision is invalid.\");\n }\n const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content]));\n const bound = new WeakMap<object, PersistedContentMetadata>();\n const used = new Set<string>();\n if (byLogicalHandle.size !== attachment.physical.contents.length)\n throw new Error(\"Duplicate artifact content handle.\");\n const hydrated = hydrateRecordAttachmentCurrent(attemptArtifactsRecordAttachment, attachment.value, {\n content: (token, declaration) => {\n const marker = decodeMarker(token);\n if (Result.isFailure(marker))\n return Result.succeed(undefined);\n const logicalHandle = marker.success[\"$niceeval.record.content\"];\n const persisted = byLogicalHandle.get(logicalHandle);\n if (persisted === undefined || used.has(logicalHandle) || declaration.kind !== \"bytes\" ||\n declaration.maximumBytes !== undefined && persisted.byteLength > declaration.maximumBytes) {\n return Result.fail({ code: \"current-content-bind-failed\" as const });\n }\n const handle = mintRecordContentHandle(\"bytes\");\n bound.set(handle, persisted);\n used.add(logicalHandle);\n return Result.succeed(handle);\n },\n reference: () => Result.succeed(undefined),\n });\n if (Result.isFailure(hydrated) || used.size !== attachment.physical.contents.length) {\n throw new Error(\"Artifact content closure is invalid.\");\n }\n return Object.freeze(hydrated.success.artifacts.map((descriptor) => {\n const metadata = bound.get(descriptor.content);\n if (metadata === undefined || metadata.byteLength !== descriptor.byteLength || metadata.digest !== descriptor.sha256 ||\n descriptor.byteLength < 0) {\n throw new Error(\"Artifact descriptor does not match sealed content metadata.\");\n }\n return Object.freeze({\n artifactId: descriptor.artifactId,\n name: descriptor.label,\n mediaType: descriptor.mediaType,\n byteLength: descriptor.byteLength,\n sha256: descriptor.sha256,\n content: metadata,\n });\n }));\n}\n/** Internal fixed-family closure reader. It verifies the whole sealed artifact. */\nexport function readInspectionArtifactBytes(resolved: ResolvedInspectionAttempt, artifactId: string, maximumBytes: number): Result.Result<InspectionArtifactBytes | undefined, InspectionArtifactError> {\n if (Result.isFailure(decodeRequest({ artifactId })))\n return requestInvalid(\"Invalid artifact ID.\");\n try {\n const artifact = hydrateArtifactDescriptors(resolved).find((entry) => entry.artifactId === artifactId);\n if (artifact === undefined)\n return Result.succeed(undefined);\n if (artifact.byteLength > maximumBytes)\n return requestInvalid(\"Artifact exceeds the evidence parsing budget.\");\n return Result.succeed(Object.freeze({\n artifactId,\n name: artifact.name,\n mediaType: artifact.mediaType,\n byteLength: artifact.byteLength,\n sha256: artifact.sha256,\n bytes: readVerifiedRange(resolved.origin.source, artifact.content, 0, artifact.byteLength),\n }));\n }\n catch (cause) {\n return Result.fail(new InspectionArtifactError({\n code: \"inspection-record-integrity-failure\",\n reason: cause instanceof Error ? cause.message : \"Artifact content validation failed.\",\n }));\n }\n}\nexport interface InspectionArtifactDescriptor {\n readonly artifactId: string;\n readonly mediaType: string;\n readonly byteLength: number;\n readonly sha256: string;\n}\n/** Descriptor-only closure reader for references that must not load bytes, such as display images. */\nexport function readInspectionArtifactDescriptors(resolved: ResolvedInspectionAttempt): Result.Result<ReadonlyMap<string, InspectionArtifactDescriptor>, InspectionArtifactError> {\n try {\n const hasArtifacts = resolved.origin.attachments.some(({ physical }) => physical.ownerKind === \"attempt\" && physical.ownerAttemptId === resolved.attempt.attemptId &&\n physical.family === attemptArtifactsRecordAttachment.family);\n if (!hasArtifacts)\n return Result.succeed(new Map());\n return Result.succeed(new Map(hydrateArtifactDescriptors(resolved).map((artifact) => [artifact.artifactId, Object.freeze({\n artifactId: artifact.artifactId,\n mediaType: artifact.mediaType,\n byteLength: artifact.byteLength,\n sha256: artifact.sha256,\n })] as const)));\n }\n catch (cause) {\n return Result.fail(new InspectionArtifactError({\n code: \"inspection-record-integrity-failure\",\n reason: cause instanceof Error ? cause.message : \"Artifact content validation failed.\",\n }));\n }\n}\nfunction requestInvalid(reason: string): Result.Result<never, InspectionArtifactError> {\n return Result.fail(new InspectionArtifactError({ code: \"inspection-request-invalid\", reason }));\n}\nfunction readVerifiedRange(source: InspectionFactSource, metadata: PersistedContentMetadata, offset: number, limit: number): Uint8Array {\n const output = new Uint8Array(Math.min(limit, metadata.byteLength - offset));\n const digest = new InspectionSha256();\n let byteOffset = 0;\n let expectedOrdinal = 0;\n let afterOrdinal = -1;\n while (true) {\n // One bounded storage chunk at a time, including bytes outside the requested range.\n const page = source.readContentPage(metadata.contentId, afterOrdinal, 1);\n if (page.contentId !== metadata.contentId || page.afterOrdinal !== afterOrdinal || page.chunks.length > 1 ||\n page.chunks.length === 0 && page.nextOrdinal !== null)\n throw new Error(\"Artifact content page is invalid.\");\n for (const chunk of page.chunks) {\n if (chunk.ordinal !== expectedOrdinal || expectedOrdinal >= metadata.chunkCount ||\n byteOffset + chunk.bytes.byteLength > metadata.byteLength)\n throw new Error(\"Artifact chunk sequence is invalid.\");\n digest.update(chunk.bytes);\n const start = Math.max(offset, byteOffset);\n const end = Math.min(offset + output.byteLength, byteOffset + chunk.bytes.byteLength);\n if (end > start)\n output.set(chunk.bytes.subarray(start - byteOffset, end - byteOffset), start - offset);\n byteOffset += chunk.bytes.byteLength;\n expectedOrdinal += 1;\n }\n if (page.nextOrdinal === null)\n break;\n if (page.nextOrdinal !== expectedOrdinal - 1 || expectedOrdinal >= metadata.chunkCount) {\n throw new Error(\"Artifact content continuation is invalid.\");\n }\n afterOrdinal = page.nextOrdinal;\n }\n if (byteOffset !== metadata.byteLength || expectedOrdinal !== metadata.chunkCount || digest.digestHex() !== metadata.digest) {\n throw new Error(\"Artifact bytes do not match their sealed digest.\");\n }\n return output;\n}\n"]}
@@ -47,4 +47,12 @@ export declare class InspectionArtifactError extends InspectionArtifactError_bas
47
47
  export declare function projectAttemptArtifact(resolved: ResolvedInspectionAttempt, request: InspectionArtifactRequest): Result.Result<InspectionArtifactResult, InspectionArtifactError>;
48
48
  /** Internal fixed-family closure reader. It verifies the whole sealed artifact. */
49
49
  export declare function readInspectionArtifactBytes(resolved: ResolvedInspectionAttempt, artifactId: string, maximumBytes: number): Result.Result<InspectionArtifactBytes | undefined, InspectionArtifactError>;
50
+ export interface InspectionArtifactDescriptor {
51
+ readonly artifactId: string;
52
+ readonly mediaType: string;
53
+ readonly byteLength: number;
54
+ readonly sha256: string;
55
+ }
56
+ /** Descriptor-only closure reader for references that must not load bytes, such as display images. */
57
+ export declare function readInspectionArtifactDescriptors(resolved: ResolvedInspectionAttempt): Result.Result<ReadonlyMap<string, InspectionArtifactDescriptor>, InspectionArtifactError>;
50
58
  export {};
@@ -47,4 +47,12 @@ export declare class InspectionArtifactError extends InspectionArtifactError_bas
47
47
  export declare function projectAttemptArtifact(resolved: ResolvedInspectionAttempt, request: InspectionArtifactRequest): Result.Result<InspectionArtifactResult, InspectionArtifactError>;
48
48
  /** Internal fixed-family closure reader. It verifies the whole sealed artifact. */
49
49
  export declare function readInspectionArtifactBytes(resolved: ResolvedInspectionAttempt, artifactId: string, maximumBytes: number): Result.Result<InspectionArtifactBytes | undefined, InspectionArtifactError>;
50
+ export interface InspectionArtifactDescriptor {
51
+ readonly artifactId: string;
52
+ readonly mediaType: string;
53
+ readonly byteLength: number;
54
+ readonly sha256: string;
55
+ }
56
+ /** Descriptor-only closure reader for references that must not load bytes, such as display images. */
57
+ export declare function readInspectionArtifactDescriptors(resolved: ResolvedInspectionAttempt): Result.Result<ReadonlyMap<string, InspectionArtifactDescriptor>, InspectionArtifactError>;
50
58
  export {};
@@ -47,4 +47,12 @@ export declare class InspectionArtifactError extends InspectionArtifactError_bas
47
47
  export declare function projectAttemptArtifact(resolved: ResolvedInspectionAttempt, request: InspectionArtifactRequest): Result.Result<InspectionArtifactResult, InspectionArtifactError>;
48
48
  /** Internal fixed-family closure reader. It verifies the whole sealed artifact. */
49
49
  export declare function readInspectionArtifactBytes(resolved: ResolvedInspectionAttempt, artifactId: string, maximumBytes: number): Result.Result<InspectionArtifactBytes | undefined, InspectionArtifactError>;
50
+ export interface InspectionArtifactDescriptor {
51
+ readonly artifactId: string;
52
+ readonly mediaType: string;
53
+ readonly byteLength: number;
54
+ readonly sha256: string;
55
+ }
56
+ /** Descriptor-only closure reader for references that must not load bytes, such as display images. */
57
+ export declare function readInspectionArtifactDescriptors(resolved: ResolvedInspectionAttempt): Result.Result<ReadonlyMap<string, InspectionArtifactDescriptor>, InspectionArtifactError>;
50
58
  export {};
@@ -15,4 +15,6 @@ const __niceevalExport5 = __niceevalCanonical["projectAttemptArtifact"];
15
15
  export { __niceevalExport5 as projectAttemptArtifact };
16
16
  const __niceevalExport6 = __niceevalCanonical["readInspectionArtifactBytes"];
17
17
  export { __niceevalExport6 as readInspectionArtifactBytes };
18
+ const __niceevalExport7 = __niceevalCanonical["readInspectionArtifactDescriptors"];
19
+ export { __niceevalExport7 as readInspectionArtifactDescriptors };
18
20
  //# sourceMappingURL=artifacts.js.map
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectAttemptAssertionIndex = projectAttemptAssertionIndex;
4
4
  exports.projectAttemptAssertionDetail = projectAttemptAssertionDetail;
5
5
  exports.projectAttemptAssertionImage = projectAttemptAssertionImage;
6
+ // @concord-file ne-eval-inspection-assertion-projection
7
+ // @concord-implements docs/feature/inspection/README.md
8
+ // @concord-implements docs/feature/assertions/README.md
6
9
  const effect_1 = require("effect");
7
10
  const content_ts_1 = require("../record/attachment/content.cjs");
8
11
  const derive_ts_1 = require("../o11y/derive.cjs");
@@ -58,7 +61,7 @@ function projectAttemptAssertionDetail(source, input, agentTurns, entryId) {
58
61
  check: projectCheck(entry),
59
62
  matcher: projectMatcher(entry, agentTurns),
60
63
  }));
61
- if (jsonByteLength(result) > limits_ts_1.INSPECTION_RESULT_BYTE_LIMIT) {
64
+ if (jsonByteLength(result) > limits_ts_1.INSPECTION_ASSERTION_DETAIL_BYTE_LIMIT) {
62
65
  throw new Error("Assertion detail exceeds its fixed result byte limit");
63
66
  }
64
67
  return decodeAssertionDetail(result);