niceeval 0.13.2 → 0.13.3

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 (494) hide show
  1. package/dist/agents/bub.cjs +4 -4
  2. package/dist/agents/bub.cjs.map +1 -1
  3. package/dist/agents/bub.d.cts +2 -2
  4. package/dist/agents/bub.d.mts +2 -2
  5. package/dist/agents/bub.d.ts +2 -2
  6. package/dist/agents/claude-code-native.cjs +213 -0
  7. package/dist/agents/claude-code-native.cjs.map +1 -0
  8. package/dist/agents/claude-code-native.d.cts +5 -0
  9. package/dist/agents/claude-code-native.d.mts +5 -0
  10. package/dist/agents/claude-code-native.d.ts +5 -0
  11. package/dist/agents/claude-code-native.js +6 -0
  12. package/dist/agents/claude-code-native.js.map +1 -0
  13. package/dist/agents/claude-code.cjs +26 -80
  14. package/dist/agents/claude-code.cjs.map +1 -1
  15. package/dist/agents/codex-app-server.cjs +314 -0
  16. package/dist/agents/codex-app-server.cjs.map +1 -0
  17. package/dist/agents/codex-app-server.d.cts +9 -0
  18. package/dist/agents/codex-app-server.d.mts +9 -0
  19. package/dist/agents/codex-app-server.d.ts +9 -0
  20. package/dist/agents/codex-app-server.js +6 -0
  21. package/dist/agents/codex-app-server.js.map +1 -0
  22. package/dist/agents/codex.cjs +19 -68
  23. package/dist/agents/codex.cjs.map +1 -1
  24. package/dist/agents/codex.d.cts +3 -3
  25. package/dist/agents/codex.d.mts +3 -3
  26. package/dist/agents/codex.d.ts +3 -3
  27. package/dist/agents/index.cjs +3 -1
  28. package/dist/agents/index.cjs.map +1 -1
  29. package/dist/agents/index.d.cts +1 -0
  30. package/dist/agents/index.d.mts +1 -0
  31. package/dist/agents/index.d.ts +1 -0
  32. package/dist/agents/index.js +84 -82
  33. package/dist/agents/index.mjs +84 -82
  34. package/dist/agents/managed-jsonl.cjs +207 -0
  35. package/dist/agents/managed-jsonl.cjs.map +1 -0
  36. package/dist/agents/managed-jsonl.d.cts +39 -0
  37. package/dist/agents/managed-jsonl.d.mts +39 -0
  38. package/dist/agents/managed-jsonl.d.ts +39 -0
  39. package/dist/agents/managed-jsonl.js +6 -0
  40. package/dist/agents/managed-jsonl.js.map +1 -0
  41. package/dist/agents/managed-process.cjs +31 -0
  42. package/dist/agents/managed-process.cjs.map +1 -0
  43. package/dist/agents/managed-process.d.cts +3 -0
  44. package/dist/agents/managed-process.d.mts +3 -0
  45. package/dist/agents/managed-process.d.ts +3 -0
  46. package/dist/agents/managed-process.js +6 -0
  47. package/dist/agents/managed-process.js.map +1 -0
  48. package/dist/agents/omp.cjs +18 -1
  49. package/dist/agents/omp.cjs.map +1 -1
  50. package/dist/agents/sdk-streams.cjs +11 -4
  51. package/dist/agents/sdk-streams.cjs.map +1 -1
  52. package/dist/agents/types.cjs.map +1 -1
  53. package/dist/agents/types.d.cts +8 -0
  54. package/dist/agents/types.d.mts +8 -0
  55. package/dist/agents/types.d.ts +8 -0
  56. package/dist/analysis/bindings.cjs +74 -19
  57. package/dist/analysis/bindings.cjs.map +1 -1
  58. package/dist/analysis/bindings.d.cts +534 -156
  59. package/dist/analysis/bindings.d.mts +534 -156
  60. package/dist/analysis/bindings.d.ts +534 -156
  61. package/dist/analysis/domain-view.cjs.map +1 -1
  62. package/dist/analysis/domain-view.d.cts +137 -8
  63. package/dist/analysis/domain-view.d.mts +137 -8
  64. package/dist/analysis/domain-view.d.ts +137 -8
  65. package/dist/analysis/index.cjs.map +1 -1
  66. package/dist/analysis/index.d.cts +1 -1
  67. package/dist/analysis/index.d.mts +1 -1
  68. package/dist/analysis/index.d.ts +1 -1
  69. package/dist/assertions/api.cjs.map +1 -1
  70. package/dist/assertions/api.d.cts +62 -0
  71. package/dist/assertions/api.d.mts +62 -0
  72. package/dist/assertions/api.d.ts +62 -0
  73. package/dist/assertions/judge.cjs +56 -5
  74. package/dist/assertions/judge.cjs.map +1 -1
  75. package/dist/assertions/match.cjs +66 -42
  76. package/dist/assertions/match.cjs.map +1 -1
  77. package/dist/assertions/match.d.cts +13 -0
  78. package/dist/assertions/match.d.mts +13 -0
  79. package/dist/assertions/match.d.ts +13 -0
  80. package/dist/assertions/record/attachment.cjs +104 -33
  81. package/dist/assertions/record/attachment.cjs.map +1 -1
  82. package/dist/assertions/record/attachment.d.cts +294 -57
  83. package/dist/assertions/record/attachment.d.mts +294 -57
  84. package/dist/assertions/record/attachment.d.ts +294 -57
  85. package/dist/assertions/record/codec.cjs +91 -17
  86. package/dist/assertions/record/codec.cjs.map +1 -1
  87. package/dist/assertions/record/codec.d.cts +280 -52
  88. package/dist/assertions/record/codec.d.mts +280 -52
  89. package/dist/assertions/record/codec.d.ts +280 -52
  90. package/dist/assertions/record/index.js +2 -0
  91. package/dist/assertions/record/model.cjs +16 -0
  92. package/dist/assertions/record/model.cjs.map +1 -1
  93. package/dist/assertions/record/model.d.cts +120 -13
  94. package/dist/assertions/record/model.d.mts +120 -13
  95. package/dist/assertions/record/model.d.ts +120 -13
  96. package/dist/assertions/record/model.js +2 -0
  97. package/dist/assertions/record/producer.cjs +70 -50
  98. package/dist/assertions/record/producer.cjs.map +1 -1
  99. package/dist/assertions/record/producer.d.cts +8 -7
  100. package/dist/assertions/record/producer.d.mts +8 -7
  101. package/dist/assertions/record/producer.d.ts +8 -7
  102. package/dist/assertions/runtime.cjs +49 -7
  103. package/dist/assertions/runtime.cjs.map +1 -1
  104. package/dist/cli/application.cjs +40 -0
  105. package/dist/cli/application.cjs.map +1 -0
  106. package/dist/cli/application.d.cts +129 -0
  107. package/dist/cli/application.d.mts +129 -0
  108. package/dist/cli/application.d.ts +129 -0
  109. package/dist/cli/application.js +24 -0
  110. package/dist/cli/application.js.map +1 -0
  111. package/dist/cli/bootstrap.cjs +10 -4
  112. package/dist/cli/bootstrap.cjs.map +1 -1
  113. package/dist/cli/node-application.cjs +123 -0
  114. package/dist/cli/node-application.cjs.map +1 -0
  115. package/dist/cli/node-application.d.cts +14 -0
  116. package/dist/cli/node-application.d.mts +14 -0
  117. package/dist/cli/node-application.d.ts +14 -0
  118. package/dist/cli/node-application.js +26 -0
  119. package/dist/cli/node-application.js.map +1 -0
  120. package/dist/cli/program.cjs +2807 -0
  121. package/dist/cli/program.cjs.map +1 -0
  122. package/dist/cli/program.d.cts +352 -0
  123. package/dist/cli/program.d.mts +352 -0
  124. package/dist/cli/program.d.ts +352 -0
  125. package/dist/cli/program.js +36 -0
  126. package/dist/cli/program.js.map +1 -0
  127. package/dist/cli/project-configuration.cjs +134 -0
  128. package/dist/cli/project-configuration.cjs.map +1 -0
  129. package/dist/cli/project-configuration.d.cts +64 -0
  130. package/dist/cli/project-configuration.d.mts +64 -0
  131. package/dist/cli/project-configuration.d.ts +64 -0
  132. package/dist/cli/project-configuration.js +22 -0
  133. package/dist/cli/project-configuration.js.map +1 -0
  134. package/dist/cli/record.cjs +20 -4
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +3 -3
  137. package/dist/cli/record.d.mts +3 -3
  138. package/dist/cli/record.d.ts +3 -3
  139. package/dist/cli.cjs +19 -3130
  140. package/dist/cli.cjs.map +1 -1
  141. package/dist/cli.d.cts +2 -148
  142. package/dist/cli.d.mts +2 -148
  143. package/dist/cli.d.ts +2 -148
  144. package/dist/cli.js +22 -30
  145. package/dist/context/assert-first.cjs +21 -15
  146. package/dist/context/assert-first.cjs.map +1 -1
  147. package/dist/context/assert-first.d.cts +1 -0
  148. package/dist/context/assert-first.d.mts +1 -0
  149. package/dist/context/assert-first.d.ts +1 -0
  150. package/dist/context/attempt-resources.cjs +13 -0
  151. package/dist/context/attempt-resources.cjs.map +1 -0
  152. package/dist/context/attempt-resources.d.cts +3 -0
  153. package/dist/context/attempt-resources.d.mts +3 -0
  154. package/dist/context/attempt-resources.d.ts +3 -0
  155. package/dist/context/attempt-resources.js +8 -0
  156. package/dist/context/attempt-resources.js.map +1 -0
  157. package/dist/context/session.cjs +4 -3
  158. package/dist/context/session.cjs.map +1 -1
  159. package/dist/context/session.d.cts +1 -0
  160. package/dist/context/session.d.mts +1 -0
  161. package/dist/context/session.d.ts +1 -0
  162. package/dist/eval/record/verdict.cjs +3 -2
  163. package/dist/eval/record/verdict.cjs.map +1 -1
  164. package/dist/experiment/host/index.cjs +1 -6
  165. package/dist/experiment/host/index.cjs.map +1 -1
  166. package/dist/experiment/host/index.d.cts +1 -0
  167. package/dist/experiment/host/index.d.mts +1 -0
  168. package/dist/experiment/host/index.d.ts +1 -0
  169. package/dist/load-config.cjs +13 -4
  170. package/dist/load-config.cjs.map +1 -1
  171. package/dist/load-config.d.cts +4 -3
  172. package/dist/load-config.d.mts +4 -3
  173. package/dist/load-config.d.ts +4 -3
  174. package/dist/load-config.js +4 -2
  175. package/dist/o11y/parsers/codex.cjs +29 -7
  176. package/dist/o11y/parsers/codex.cjs.map +1 -1
  177. package/dist/record/codec/core.d.cts +0 -2
  178. package/dist/record/codec/core.d.mts +0 -2
  179. package/dist/record/codec/core.d.ts +0 -2
  180. package/dist/record/codec/identifiers.cjs +2 -3
  181. package/dist/record/codec/identifiers.cjs.map +1 -1
  182. package/dist/record/codec/identifiers.d.cts +1 -2
  183. package/dist/record/codec/identifiers.d.mts +1 -2
  184. package/dist/record/codec/identifiers.d.ts +1 -2
  185. package/dist/record/codec/identifiers.js +10 -12
  186. package/dist/record/codec/index.js +42 -44
  187. package/dist/record/definition/attachment.cjs +1 -0
  188. package/dist/record/definition/attachment.cjs.map +1 -1
  189. package/dist/record/definition/attachment.d.cts +14 -0
  190. package/dist/record/definition/attachment.d.mts +14 -0
  191. package/dist/record/definition/attachment.d.ts +14 -0
  192. package/dist/record/family/assertions-v1.cjs +104 -0
  193. package/dist/record/family/assertions-v1.cjs.map +1 -0
  194. package/dist/record/family/assertions-v1.d.cts +2 -0
  195. package/dist/record/family/assertions-v1.d.mts +2 -0
  196. package/dist/record/family/assertions-v1.d.ts +2 -0
  197. package/dist/record/family/assertions-v1.js +6 -0
  198. package/dist/record/family/assertions-v1.js.map +1 -0
  199. package/dist/record/family/assertions.cjs +16 -5
  200. package/dist/record/family/assertions.cjs.map +1 -1
  201. package/dist/record/family/assertions.d.cts +510 -56
  202. package/dist/record/family/assertions.d.mts +510 -56
  203. package/dist/record/family/assertions.d.ts +510 -56
  204. package/dist/record/family/assertions.js +14 -10
  205. package/dist/record/family/catalog.cjs +17 -1
  206. package/dist/record/family/catalog.cjs.map +1 -1
  207. package/dist/record/family/catalog.d.cts +1292 -104
  208. package/dist/record/family/catalog.d.mts +1292 -104
  209. package/dist/record/family/catalog.d.ts +1292 -104
  210. package/dist/record/family/catalog.js +22 -20
  211. package/dist/record/family/index.js +144 -138
  212. package/dist/record/family/observability-v1.cjs +5 -0
  213. package/dist/record/family/observability-v1.cjs.map +1 -1
  214. package/dist/record/family/observability.cjs +1 -1
  215. package/dist/record/family/observability.cjs.map +1 -1
  216. package/dist/record/host/runtime.cjs +323 -173
  217. package/dist/record/host/runtime.cjs.map +1 -1
  218. package/dist/record/host/types.cjs.map +1 -1
  219. package/dist/record/host/types.d.cts +9 -7
  220. package/dist/record/host/types.d.mts +9 -7
  221. package/dist/record/host/types.d.ts +9 -7
  222. package/dist/record/model/core.cjs.map +1 -1
  223. package/dist/record/model/core.d.cts +1 -2
  224. package/dist/record/model/core.d.mts +1 -2
  225. package/dist/record/model/core.d.ts +1 -2
  226. package/dist/record/model/definition.cjs +1 -2
  227. package/dist/record/model/definition.cjs.map +1 -1
  228. package/dist/record/model/definition.d.cts +1 -7
  229. package/dist/record/model/definition.d.mts +1 -7
  230. package/dist/record/model/definition.d.ts +1 -7
  231. package/dist/record/model/identifiers.cjs +2 -3
  232. package/dist/record/model/identifiers.cjs.map +1 -1
  233. package/dist/record/model/identifiers.d.cts +1 -3
  234. package/dist/record/model/identifiers.d.mts +1 -3
  235. package/dist/record/model/identifiers.d.ts +1 -3
  236. package/dist/record/model/identifiers.js +36 -38
  237. package/dist/record/model/index.js +60 -62
  238. package/dist/record/platform/node.cjs +17 -7
  239. package/dist/record/platform/node.cjs.map +1 -1
  240. package/dist/record/platform/services.cjs.map +1 -1
  241. package/dist/record/platform/services.d.cts +8 -3
  242. package/dist/record/platform/services.d.mts +8 -3
  243. package/dist/record/platform/services.d.ts +8 -3
  244. package/dist/record/reader/format.cjs +16 -65
  245. package/dist/record/reader/format.cjs.map +1 -1
  246. package/dist/record/reader/format.d.cts +5 -9
  247. package/dist/record/reader/format.d.mts +5 -9
  248. package/dist/record/reader/format.d.ts +5 -9
  249. package/dist/record/reader/index.js +10 -8
  250. package/dist/record/reader/runtime.cjs +63 -32
  251. package/dist/record/reader/runtime.cjs.map +1 -1
  252. package/dist/record/reader/runtime.d.cts +40 -4
  253. package/dist/record/reader/runtime.d.mts +40 -4
  254. package/dist/record/reader/runtime.d.ts +40 -4
  255. package/dist/record/reader/runtime.js +6 -4
  256. package/dist/report/assets/enhance.js +5 -5
  257. package/dist/report/assets/styles.css +190 -24
  258. package/dist/report/built-in/result-components.cjs +8 -5
  259. package/dist/report/built-in/result-components.cjs.map +1 -1
  260. package/dist/report/built-in/standard.cjs +3 -0
  261. package/dist/report/built-in/standard.cjs.map +1 -1
  262. package/dist/report/built-in/standard.d.cts +2 -0
  263. package/dist/report/built-in/standard.d.mts +2 -0
  264. package/dist/report/built-in/standard.d.ts +2 -0
  265. package/dist/report/client-dist/app.js +53 -0
  266. package/dist/report/components/attempt-detail/compute.cjs +108 -231
  267. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  268. package/dist/report/components/attempt-detail/compute.d.cts +11 -45
  269. package/dist/report/components/attempt-detail/compute.d.mts +11 -45
  270. package/dist/report/components/attempt-detail/compute.d.ts +11 -45
  271. package/dist/report/components/attempt-detail/compute.js +2 -4
  272. package/dist/report/components/attempt-detail/content.cjs +4 -4
  273. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  274. package/dist/report/components/attempt-detail/validate.cjs +47 -4
  275. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  276. package/dist/report/components/entity-lists/compute.cjs +9 -15
  277. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  278. package/dist/report/components/entity-lists/content.cjs +53 -40
  279. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  280. package/dist/report/components/entity-lists/index.cjs +1 -3
  281. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  282. package/dist/report/components/experiment-detail/compute.cjs +4 -6
  283. package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
  284. package/dist/report/components/summaries/index.cjs +5 -1
  285. package/dist/report/components/summaries/index.cjs.map +1 -1
  286. package/dist/report/definition/cell.cjs +14 -7
  287. package/dist/report/definition/cell.cjs.map +1 -1
  288. package/dist/report/definition/cell.d.cts +4 -0
  289. package/dist/report/definition/cell.d.mts +4 -0
  290. package/dist/report/definition/cell.d.ts +4 -0
  291. package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
  292. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
  293. package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
  294. package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
  295. package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
  296. package/dist/report/definition/primitives/assertion-evidence.js +6 -0
  297. package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
  298. package/dist/report/definition/primitives/conversation.cjs +7 -0
  299. package/dist/report/definition/primitives/conversation.cjs.map +1 -1
  300. package/dist/report/definition/primitives/conversation.d.cts +2 -0
  301. package/dist/report/definition/primitives/conversation.d.mts +2 -0
  302. package/dist/report/definition/primitives/conversation.d.ts +2 -0
  303. package/dist/report/definition/primitives/turn-trace.cjs +53 -3
  304. package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
  305. package/dist/report/definition/primitives.cjs +14 -1
  306. package/dist/report/definition/primitives.cjs.map +1 -1
  307. package/dist/report/definition/report.cjs +16 -8
  308. package/dist/report/definition/report.cjs.map +1 -1
  309. package/dist/report/definition/report.d.cts +6 -0
  310. package/dist/report/definition/report.d.mts +6 -0
  311. package/dist/report/definition/report.d.ts +6 -0
  312. package/dist/report/definition/table-text.cjs +12 -3
  313. package/dist/report/definition/table-text.cjs.map +1 -1
  314. package/dist/report/definition/table-text.d.cts +6 -1
  315. package/dist/report/definition/table-text.d.mts +6 -1
  316. package/dist/report/definition/table-text.d.ts +6 -1
  317. package/dist/report/execution/model.cjs +6 -14
  318. package/dist/report/execution/model.cjs.map +1 -1
  319. package/dist/report/execution/model.d.cts +5 -10
  320. package/dist/report/execution/model.d.mts +5 -10
  321. package/dist/report/execution/model.d.ts +5 -10
  322. package/dist/report/execution/model.js +6 -6
  323. package/dist/report/execution/paths.cjs +0 -11
  324. package/dist/report/execution/paths.cjs.map +1 -1
  325. package/dist/report/execution/paths.d.cts +0 -1
  326. package/dist/report/execution/paths.d.mts +0 -1
  327. package/dist/report/execution/paths.d.ts +0 -1
  328. package/dist/report/execution/paths.js +6 -8
  329. package/dist/report/host/execute.cjs +13 -22
  330. package/dist/report/host/execute.cjs.map +1 -1
  331. package/dist/report/host/execute.d.cts +1 -4
  332. package/dist/report/host/execute.d.mts +1 -4
  333. package/dist/report/host/execute.d.ts +1 -4
  334. package/dist/report/host/from-record.cjs +3 -0
  335. package/dist/report/host/from-record.cjs.map +1 -1
  336. package/dist/report/host/from-record.d.cts +4 -1
  337. package/dist/report/host/from-record.d.mts +4 -1
  338. package/dist/report/host/from-record.d.ts +4 -1
  339. package/dist/report/host/site-assets.cjs +1 -2
  340. package/dist/report/host/site-assets.cjs.map +1 -1
  341. package/dist/report/host/site-assets.d.cts +0 -1
  342. package/dist/report/host/site-assets.d.mts +0 -1
  343. package/dist/report/host/site-assets.d.ts +0 -1
  344. package/dist/report/host/site-assets.js +2 -4
  345. package/dist/report/host/static.cjs +71 -346
  346. package/dist/report/host/static.cjs.map +1 -1
  347. package/dist/report/host/static.d.cts +1 -3
  348. package/dist/report/host/static.d.mts +1 -3
  349. package/dist/report/host/static.d.ts +1 -3
  350. package/dist/report/host/static.js +2 -2
  351. package/dist/report/host/view-session.cjs.map +1 -1
  352. package/dist/report/host/view-session.d.cts +1 -1
  353. package/dist/report/host/view-session.d.mts +1 -1
  354. package/dist/report/host/view-session.d.ts +1 -1
  355. package/dist/report/model/locale.cjs +1 -1
  356. package/dist/report/model/locale.cjs.map +1 -1
  357. package/dist/report/model/locale.d.cts +1 -1
  358. package/dist/report/model/locale.d.mts +1 -1
  359. package/dist/report/model/locale.d.ts +1 -1
  360. package/dist/report/model/pricing.cjs +2 -2
  361. package/dist/report/model/pricing.cjs.map +1 -1
  362. package/dist/report/react/enhance.js +5 -5
  363. package/dist/report/react/styles.css +190 -24
  364. package/dist/runner/adoption.cjs +4 -7
  365. package/dist/runner/adoption.cjs.map +1 -1
  366. package/dist/runner/attempt-resources.cjs +60 -0
  367. package/dist/runner/attempt-resources.cjs.map +1 -0
  368. package/dist/runner/attempt-resources.d.cts +13 -0
  369. package/dist/runner/attempt-resources.d.mts +13 -0
  370. package/dist/runner/attempt-resources.d.ts +13 -0
  371. package/dist/runner/attempt-resources.js +6 -0
  372. package/dist/runner/attempt-resources.js.map +1 -0
  373. package/dist/runner/attempt.cjs +37 -3
  374. package/dist/runner/attempt.cjs.map +1 -1
  375. package/dist/runner/feedback/failure.cjs +77 -2
  376. package/dist/runner/feedback/failure.cjs.map +1 -1
  377. package/dist/runner/feedback/failure.d.cts +2 -1
  378. package/dist/runner/feedback/failure.d.mts +2 -1
  379. package/dist/runner/feedback/failure.d.ts +2 -1
  380. package/dist/runner/project-current.cjs +2 -13
  381. package/dist/runner/project-current.cjs.map +1 -1
  382. package/dist/runner/project-current.d.cts +4 -2
  383. package/dist/runner/project-current.d.mts +4 -2
  384. package/dist/runner/project-current.d.ts +4 -2
  385. package/dist/runner/reporters/braintrust.cjs +7 -7
  386. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  387. package/dist/runner/reuse-readback.cjs +3 -4
  388. package/dist/runner/reuse-readback.cjs.map +1 -1
  389. package/dist/runner/run.cjs +5 -2
  390. package/dist/runner/run.cjs.map +1 -1
  391. package/dist/sandbox/backend.cjs +32 -2
  392. package/dist/sandbox/backend.cjs.map +1 -1
  393. package/dist/sandbox/backend.d.cts +12 -1
  394. package/dist/sandbox/backend.d.mts +12 -1
  395. package/dist/sandbox/backend.d.ts +12 -1
  396. package/dist/sandbox/backend.js +28 -22
  397. package/dist/sandbox/docker.cjs +140 -0
  398. package/dist/sandbox/docker.cjs.map +1 -1
  399. package/dist/sandbox/docker.d.cts +3 -1
  400. package/dist/sandbox/docker.d.mts +3 -1
  401. package/dist/sandbox/docker.d.ts +3 -1
  402. package/dist/sandbox/e2b.cjs +42 -0
  403. package/dist/sandbox/e2b.cjs.map +1 -1
  404. package/dist/sandbox/e2b.d.cts +2 -0
  405. package/dist/sandbox/e2b.d.mts +2 -0
  406. package/dist/sandbox/e2b.d.ts +2 -0
  407. package/dist/sandbox/local.cjs +64 -0
  408. package/dist/sandbox/local.cjs.map +1 -1
  409. package/dist/sandbox/local.d.cts +3 -1
  410. package/dist/sandbox/local.d.mts +3 -1
  411. package/dist/sandbox/local.d.ts +3 -1
  412. package/dist/sandbox/managed-process.cjs +49 -0
  413. package/dist/sandbox/managed-process.cjs.map +1 -0
  414. package/dist/sandbox/managed-process.d.cts +11 -0
  415. package/dist/sandbox/managed-process.d.mts +11 -0
  416. package/dist/sandbox/managed-process.d.ts +11 -0
  417. package/dist/sandbox/managed-process.js +6 -0
  418. package/dist/sandbox/managed-process.js.map +1 -0
  419. package/dist/sandbox/types.cjs.map +1 -1
  420. package/dist/sandbox/types.d.cts +24 -0
  421. package/dist/sandbox/types.d.mts +24 -0
  422. package/dist/sandbox/types.d.ts +24 -0
  423. package/dist/sandbox/vercel.cjs +1 -0
  424. package/dist/sandbox/vercel.cjs.map +1 -1
  425. package/dist/sandbox/vercel.d.cts +1 -0
  426. package/dist/sandbox/vercel.d.mts +1 -0
  427. package/dist/sandbox/vercel.d.ts +1 -0
  428. package/dist/view/server.cjs +2 -37
  429. package/dist/view/server.cjs.map +1 -1
  430. package/dist/view/server.d.cts +0 -3
  431. package/dist/view/server.d.mts +0 -3
  432. package/dist/view/server.d.ts +0 -3
  433. package/docs-site/zh/reference/builtin-agents.mdx +7 -7
  434. package/docs-site/zh/reference/official-adapters.mdx +4 -4
  435. package/docs-site/zh/reference/report-components.mdx +2 -2
  436. package/docs-site/zh/tutorials/configuration.mdx +2 -2
  437. package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
  438. package/docs-site/zh/tutorials/publish-report.mdx +4 -4
  439. package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
  440. package/docs-site/zh/tutorials/theming.mdx +2 -2
  441. package/package.json +4 -6
  442. package/dist/record/migration/index.cjs +0 -5
  443. package/dist/record/migration/index.cjs.map +0 -1
  444. package/dist/record/migration/index.d.cts +0 -11
  445. package/dist/record/migration/index.d.mts +0 -11
  446. package/dist/record/migration/index.d.ts +0 -11
  447. package/dist/record/migration/index.js +0 -6
  448. package/dist/record/migration/index.js.map +0 -1
  449. package/dist/report/host/site-runtime.cjs +0 -92
  450. package/dist/report/host/site-runtime.cjs.map +0 -1
  451. package/dist/report/host/site-runtime.d.cts +0 -9
  452. package/dist/report/host/site-runtime.d.mts +0 -9
  453. package/dist/report/host/site-runtime.d.ts +0 -9
  454. package/dist/report/host/site-runtime.js +0 -10
  455. package/dist/report/host/site-runtime.js.map +0 -1
  456. package/dist/view/client-dist/app.css +0 -2
  457. package/dist/view/client-dist/app.js +0 -49
  458. package/dist/view/data.cjs +0 -3
  459. package/dist/view/data.cjs.map +0 -1
  460. package/dist/view/data.d.cts +0 -9
  461. package/dist/view/data.d.mts +0 -9
  462. package/dist/view/data.d.ts +0 -9
  463. package/dist/view/data.js +0 -4
  464. package/dist/view/data.js.map +0 -1
  465. package/dist/view/index.cjs +0 -24
  466. package/dist/view/index.cjs.map +0 -1
  467. package/dist/view/index.d.cts +0 -9
  468. package/dist/view/index.d.mts +0 -9
  469. package/dist/view/index.d.ts +0 -9
  470. package/dist/view/index.js +0 -28
  471. package/dist/view/index.js.map +0 -1
  472. package/dist/view/report-view-cache.cjs +0 -200
  473. package/dist/view/report-view-cache.cjs.map +0 -1
  474. package/dist/view/report-view-cache.d.cts +0 -67
  475. package/dist/view/report-view-cache.d.mts +0 -67
  476. package/dist/view/report-view-cache.d.ts +0 -67
  477. package/dist/view/report-view-cache.js +0 -8
  478. package/dist/view/report-view-cache.js.map +0 -1
  479. package/dist/view/shared/types.cjs +0 -3
  480. package/dist/view/shared/types.cjs.map +0 -1
  481. package/dist/view/shared/types.d.cts +0 -51
  482. package/dist/view/shared/types.d.mts +0 -51
  483. package/dist/view/shared/types.d.ts +0 -51
  484. package/dist/view/shared/types.js +0 -4
  485. package/dist/view/shared/types.js.map +0 -1
  486. package/dist/view/site.cjs +0 -32
  487. package/dist/view/site.cjs.map +0 -1
  488. package/dist/view/site.d.cts +0 -24
  489. package/dist/view/site.d.mts +0 -24
  490. package/dist/view/site.d.ts +0 -24
  491. package/dist/view/site.js +0 -8
  492. package/dist/view/site.js.map +0 -1
  493. package/dist/view/styles.css +0 -170
  494. package/dist/view/template.html +0 -17
@@ -7,56 +7,76 @@ const UTF8 = new TextEncoder();
7
7
  function encodedBytes(value) {
8
8
  return UTF8.encode(JSON.stringify(value)).byteLength;
9
9
  }
10
- const DIAGNOSTIC_ROOT_KEYS = Object.freeze([
11
- "code",
12
- "message",
13
- "path",
14
- "expected",
15
- "received",
16
- "reason",
17
- "locator",
18
- ]);
19
- function compactDiagnostic(diagnostic, mode) {
20
- if (mode === "minimal") {
21
- return Object.freeze({
22
- code: "diagnostic-truncated",
23
- message: "matcher diagnostic details were omitted to fit the Assertions document limit",
24
- path: Object.freeze([]),
25
- truncation: Object.freeze({
26
- code: "diagnostic-truncated",
27
- reason: "document-limit",
28
- }),
29
- });
30
- }
31
- const root = {};
32
- for (const key of DIAGNOSTIC_ROOT_KEYS) {
33
- const value = diagnostic[key];
34
- if (value !== undefined)
35
- root[key] = value;
36
- }
37
- root.truncation = Object.freeze({
38
- code: "diagnostic-truncated",
39
- reason: "document-limit",
40
- });
41
- return Object.freeze(root);
42
- }
43
- function replaceDiagnostic(result, mode) {
44
- if (result.diagnostic === undefined)
45
- return result;
46
- const diagnostic = compactDiagnostic(result.diagnostic, mode);
47
- switch (result.state) {
48
- case "matched": return Object.freeze({ ...result, diagnostic });
49
- case "mismatched": return Object.freeze({ ...result, diagnostic });
50
- case "unavailable": return Object.freeze({ ...result, diagnostic });
51
- case "errored": return Object.freeze({ ...result, diagnostic });
52
- case "not-applicable": return Object.freeze({ ...result, diagnostic });
53
- }
54
- }
55
10
  function compactEntries(entries, mode) {
56
- return Object.freeze(entries.map((entry) => Object.freeze({
57
- ...entry,
58
- result: replaceDiagnostic(entry.result, mode),
59
- })));
11
+ const childState = (value) => {
12
+ if (value.kind !== "fields")
13
+ return undefined;
14
+ const state = value.fields.find((field) => field.label === "state")?.value;
15
+ return state?.kind === "value" && typeof state.value === "string" ? state.value : undefined;
16
+ };
17
+ const compactFact = (value, decision) => {
18
+ switch (value.kind) {
19
+ case "unavailable":
20
+ case "value":
21
+ return value;
22
+ case "text":
23
+ return value.text.length <= 512
24
+ ? value
25
+ : Object.freeze({ kind: "text", text: `${value.text.slice(0, 511)}…` });
26
+ case "list":
27
+ return Object.freeze({ kind: "list", items: Object.freeze(value.items.map((item) => compactFact(item, decision))) });
28
+ case "fields":
29
+ return Object.freeze({
30
+ kind: "fields",
31
+ fields: Object.freeze(value.fields.flatMap((field) => {
32
+ if ((mode === "root" || mode === "minimal") &&
33
+ (field.label === "message" || field.label === "expected" || field.label === "received"))
34
+ return [];
35
+ if (field.label === "children" && field.value.kind === "list") {
36
+ const decisiveState = decision.result === "matched"
37
+ ? "matched"
38
+ : decision.result === "unavailable"
39
+ ? "unavailable"
40
+ : decision.result === "mismatched"
41
+ ? "matched"
42
+ : undefined;
43
+ const decisive = [];
44
+ if (decisiveState !== undefined) {
45
+ for (const item of field.value.items) {
46
+ if (childState(item) !== decisiveState)
47
+ continue;
48
+ if (decisive.length === 0)
49
+ decisive.push(item);
50
+ else if (decisive.length === 1)
51
+ decisive.push(item);
52
+ else
53
+ decisive[1] = item;
54
+ }
55
+ }
56
+ const representative = mode === "root" ? field.value.items.slice(0, 2) : [];
57
+ const retained = [...new Set([...representative, ...decisive])];
58
+ return [Object.freeze({
59
+ label: field.label,
60
+ value: Object.freeze({
61
+ kind: "list",
62
+ items: Object.freeze(retained.map((item) => compactFact(item, decision))),
63
+ }),
64
+ })];
65
+ }
66
+ return [Object.freeze({ label: field.label, value: compactFact(field.value, decision) })];
67
+ })),
68
+ });
69
+ }
70
+ };
71
+ return Object.freeze(entries.map((entry) => entry.explanationRetention.state === "retained"
72
+ ? Object.freeze({
73
+ ...entry,
74
+ explanationRetention: Object.freeze({
75
+ state: "retained",
76
+ value: compactFact(entry.explanationRetention.value, entry.decision),
77
+ }),
78
+ })
79
+ : entry));
60
80
  }
61
81
  function invalidDocument(message) {
62
82
  return Object.freeze({ code: "assertions-document-invalid", message });
@@ -137,7 +157,7 @@ function createAssertionsDocumentBuilder(input) {
137
157
  if (documentBytes > maximumBytes) {
138
158
  return effect_1.Either.left(invalidDocument(`Assertions could not be saved after diagnostic compaction because entry framing is ` +
139
159
  `${documentBytes} bytes; ${maximumBytes} bytes remain after source sites within the ` +
140
- `${codec_ts_1.MAX_ASSERTION_DOCUMENT_BYTES}-byte limit. Large subject and evidence snapshots are already ` +
160
+ `${codec_ts_1.MAX_ASSERTION_DOCUMENT_BYTES}-byte limit. Large source and evidence snapshots are already ` +
141
161
  "stored as blobs; reduce assertion count or matcher/display identity and retry."));
142
162
  }
143
163
  const encoded = effect_1.Schema.encodeUnknownEither(input.documentSchema, codec_ts_1.AssertionsExactParseOptions)(document);
@@ -1 +1 @@
1
- {"version":3,"file":"producer.js","sourceRoot":"","sources":["producer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Either, ParseResult, Schema } from \"effect\";\nimport { AssertionEntryIdSchema, AssertionsExactParseOptions, MAX_ASSERTION_DOCUMENT_BYTES, isAssertionsRawDataGraph, } from \"./codec.ts\";\nimport type { BoundedJsonObject, BoundedJsonValue, AssertionDisplay, AssertionEntryId, AssertionEntry, AssertionLimitation, AssertionMaterial, AssertionCoverage, AssertionsDocument, SealedAssertionResult, WritableCriterionEnvelope, } from \"./model.ts\";\nexport interface AssertionEntryInput<BlobRef> {\n readonly display: AssertionDisplay;\n readonly criterion: WritableCriterionEnvelope;\n readonly subject: AssertionMaterial<BlobRef>;\n readonly evidence: readonly AssertionMaterial<BlobRef>[];\n readonly coverage: AssertionCoverage;\n readonly limitations: readonly AssertionLimitation[];\n readonly result: SealedAssertionResult;\n}\nexport interface AssertionsEntryIdSource {\n /** Must return a fresh `ae_[a-z0-9]{20}` candidate for this Attachment. */\n readonly next: () => string;\n}\nexport type AssertionsProducerError = {\n readonly code: \"assertion-entry-id-invalid\";\n readonly entryId: string;\n} | {\n readonly code: \"assertion-entry-id-duplicate\";\n readonly entryId: string;\n} | {\n readonly code: \"assertions-document-sealed\";\n} | {\n readonly code: \"assertions-document-invalid\";\n readonly message: string;\n};\nconst UTF8 = new TextEncoder();\nfunction encodedBytes(value: unknown): number {\n return UTF8.encode(JSON.stringify(value)).byteLength;\n}\nconst DIAGNOSTIC_ROOT_KEYS = Object.freeze([\n \"code\",\n \"message\",\n \"path\",\n \"expected\",\n \"received\",\n \"reason\",\n \"locator\",\n] as const);\nfunction compactDiagnostic(diagnostic: BoundedJsonObject, mode: \"root\" | \"minimal\"): BoundedJsonObject {\n if (mode === \"minimal\") {\n return Object.freeze({\n code: \"diagnostic-truncated\",\n message: \"matcher diagnostic details were omitted to fit the Assertions document limit\",\n path: Object.freeze([]),\n truncation: Object.freeze({\n code: \"diagnostic-truncated\",\n reason: \"document-limit\",\n }),\n });\n }\n const root: globalThis.Record<string, BoundedJsonValue> = {};\n for (const key of DIAGNOSTIC_ROOT_KEYS) {\n const value = diagnostic[key];\n if (value !== undefined)\n root[key] = value;\n }\n root.truncation = Object.freeze({\n code: \"diagnostic-truncated\",\n reason: \"document-limit\",\n });\n return Object.freeze(root);\n}\nfunction replaceDiagnostic(result: SealedAssertionResult, mode: \"root\" | \"minimal\"): SealedAssertionResult {\n if (result.diagnostic === undefined)\n return result;\n const diagnostic = compactDiagnostic(result.diagnostic, mode);\n switch (result.state) {\n case \"matched\": return Object.freeze({ ...result, diagnostic });\n case \"mismatched\": return Object.freeze({ ...result, diagnostic });\n case \"unavailable\": return Object.freeze({ ...result, diagnostic });\n case \"errored\": return Object.freeze({ ...result, diagnostic });\n case \"not-applicable\": return Object.freeze({ ...result, diagnostic });\n }\n}\nfunction compactEntries<BlobRef>(entries: readonly AssertionEntry<BlobRef>[], mode: \"root\" | \"minimal\"): readonly AssertionEntry<BlobRef>[] {\n return Object.freeze(entries.map((entry) => Object.freeze({\n ...entry,\n result: replaceDiagnostic(entry.result, mode),\n })));\n}\nfunction invalidDocument(message: string): AssertionsProducerError {\n return Object.freeze({ code: \"assertions-document-invalid\" as const, message });\n}\nfunction firstSchemaIssue(error: ParseResult.ParseError): string | undefined {\n try {\n const issue = ParseResult.ArrayFormatter.formatErrorSync(error)[0];\n if (issue === undefined)\n return undefined;\n const path = issue.path.length === 0 ? \"document\" : issue.path.map(String).join(\".\");\n const expected = issue.message.split(\", actual \", 1)[0] ?? issue.message;\n const message = expected.length <= 512\n ? expected\n : `${expected.slice(0, 511)}…`;\n return `${path}: ${message}`;\n }\n catch {\n return undefined;\n }\n}\nexport interface AssertionsDocumentBuilder<BlobRef> {\n /** Appends exactly one completed Assertion in declaration/display order. */\n readonly append: (entry: AssertionEntryInput<BlobRef>) => Either.Either<AssertionEntryId, AssertionsProducerError>;\n /**\n * Checks the writer-only exact document schema once and prevents subsequent\n * appends. Repeated calls return the same sealed document without running\n * an evaluator or minting another entry ID.\n */\n readonly seal: (input?: {\n readonly maximumBytes?: number;\n }) => Either.Either<AssertionsDocument<BlobRef>, AssertionsProducerError>;\n}\n/**\n * Assertion producers own normalization and ID allocation. This builder owns\n * neither Record paths nor blob streams: the later Attachment adapter supplies\n * Record's local builder, so an entry cannot borrow another Attachment's ref.\n */\nexport function createAssertionsDocumentBuilder<BlobRef, Encoded>(input: {\n readonly documentSchema: Schema.Schema<AssertionsDocument<BlobRef>, Encoded>;\n readonly entryIds: AssertionsEntryIdSource;\n}): AssertionsDocumentBuilder<BlobRef> {\n const entryIds = new Set<string>();\n const entries: AssertionEntry<BlobRef>[] = [];\n let sealed: AssertionsDocument<BlobRef> | undefined;\n const builder: AssertionsDocumentBuilder<BlobRef> = {\n append(entry: AssertionEntryInput<BlobRef>): Either.Either<AssertionEntryId, AssertionsProducerError> {\n if (sealed !== undefined) {\n return Either.left({ code: \"assertions-document-sealed\" });\n }\n const entryIdText = input.entryIds.next();\n const entryId = Schema.decodeUnknownEither(AssertionEntryIdSchema, AssertionsExactParseOptions)(entryIdText);\n if (Either.isLeft(entryId)) {\n return Either.left({\n code: \"assertion-entry-id-invalid\",\n entryId: entryIdText,\n });\n }\n if (entryIds.has(entryId.right)) {\n return Either.left({\n code: \"assertion-entry-id-duplicate\",\n entryId: entryIdText,\n });\n }\n entryIds.add(entryId.right);\n entries.push(Object.freeze({ entryId: entryId.right, ...entry }));\n return Either.right(entryId.right);\n },\n seal(sealInput: {\n readonly maximumBytes?: number;\n } = {}): Either.Either<AssertionsDocument<BlobRef>, AssertionsProducerError> {\n if (sealed !== undefined) {\n return Either.right(sealed);\n }\n const maximumBytes = sealInput.maximumBytes ?? MAX_ASSERTION_DOCUMENT_BYTES;\n if (!Number.isSafeInteger(maximumBytes) || maximumBytes <= 0 || maximumBytes > MAX_ASSERTION_DOCUMENT_BYTES) {\n return Either.left(invalidDocument(`Assertions framing has no positive entry budget within the ${MAX_ASSERTION_DOCUMENT_BYTES}-byte limit. ` +\n \"Reduce assertion source sites or assertion count and retry.\"));\n }\n let document: AssertionsDocument<BlobRef> = Object.freeze({\n entries: Object.freeze([...entries]),\n });\n if (!isAssertionsRawDataGraph(document)) {\n return Either.left(invalidDocument(\"Assertions could not be saved because an entry contains a cyclic or non-JSON value. \" +\n \"Upgrade NiceEval and retry; if this persists, report assertions-document-invalid.\"));\n }\n let documentBytes = encodedBytes(document);\n if (documentBytes > maximumBytes) {\n document = Object.freeze({ entries: compactEntries(document.entries, \"root\") });\n documentBytes = encodedBytes(document);\n }\n if (documentBytes > maximumBytes) {\n document = Object.freeze({ entries: compactEntries(document.entries, \"minimal\") });\n documentBytes = encodedBytes(document);\n }\n if (documentBytes > maximumBytes) {\n return Either.left(invalidDocument(`Assertions could not be saved after diagnostic compaction because entry framing is ` +\n `${documentBytes} bytes; ${maximumBytes} bytes remain after source sites within the ` +\n `${MAX_ASSERTION_DOCUMENT_BYTES}-byte limit. Large subject and evidence snapshots are already ` +\n \"stored as blobs; reduce assertion count or matcher/display identity and retry.\"));\n }\n const encoded = Schema.encodeUnknownEither(input.documentSchema, AssertionsExactParseOptions)(document);\n if (Either.isLeft(encoded)) {\n const issue = firstSchemaIssue(encoded.left);\n return Either.left(invalidDocument(`Assertions could not be saved${issue === undefined ? \"\" : ` because ${issue}`}. ` +\n \"Upgrade NiceEval and retry; if this persists, report assertions-document-invalid.\"));\n }\n sealed = document;\n return Either.right(document);\n },\n };\n return Object.freeze(builder);\n}\n"]}
1
+ {"version":3,"file":"producer.js","sourceRoot":"","sources":["producer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Either, ParseResult, Schema } from \"effect\";\nimport { AssertionEntryIdSchema, AssertionsExactParseOptions, MAX_ASSERTION_DOCUMENT_BYTES, isAssertionsRawDataGraph, } from \"./codec.ts\";\nimport type { AssertionDisplay, AssertionEntryId, AssertionEntry, AssertionCriterionRecord, AssertionMaterials, AssertionEvaluation, AssertionDecision, AssertionDecisionPolicy, AssertionFactValue, ScoreContribution, ExplanationRetention, AssertionsDocument, WritableCriterionEnvelope, } from \"./model.ts\";\nexport interface AssertionEntryInput<BlobRef> {\n readonly display: AssertionDisplay;\n readonly criterion: AssertionCriterionRecord;\n readonly materials: AssertionMaterials<BlobRef>;\n readonly evaluation: AssertionEvaluation;\n readonly decision: AssertionDecision;\n readonly policy: AssertionDecisionPolicy;\n readonly contribution: ScoreContribution;\n readonly explanationRetention: ExplanationRetention;\n}\nexport interface AssertionsEntryIdSource {\n /** Must return a fresh `ae_[a-z0-9]{20}` candidate for this Attachment. */\n readonly next: () => string;\n}\nexport type AssertionsProducerError = {\n readonly code: \"assertion-entry-id-invalid\";\n readonly entryId: string;\n} | {\n readonly code: \"assertion-entry-id-duplicate\";\n readonly entryId: string;\n} | {\n readonly code: \"assertions-document-sealed\";\n} | {\n readonly code: \"assertions-document-invalid\";\n readonly message: string;\n};\nconst UTF8 = new TextEncoder();\nfunction encodedBytes(value: unknown): number {\n return UTF8.encode(JSON.stringify(value)).byteLength;\n}\nfunction compactEntries<BlobRef>(entries: readonly AssertionEntry<BlobRef>[], mode: \"root\" | \"minimal\"): readonly AssertionEntry<BlobRef>[] {\n const childState = (value: AssertionFactValue): string | undefined => {\n if (value.kind !== \"fields\")\n return undefined;\n const state = value.fields.find((field) => field.label === \"state\")?.value;\n return state?.kind === \"value\" && typeof state.value === \"string\" ? state.value : undefined;\n };\n const compactFact = (value: AssertionFactValue, decision: AssertionEntry<BlobRef>[\"decision\"]): AssertionFactValue => {\n switch (value.kind) {\n case \"unavailable\":\n case \"value\":\n return value;\n case \"text\":\n return value.text.length <= 512\n ? value\n : Object.freeze({ kind: \"text\", text: `${value.text.slice(0, 511)}…` });\n case \"list\":\n return Object.freeze({ kind: \"list\", items: Object.freeze(value.items.map((item) => compactFact(item, decision))) });\n case \"fields\":\n return Object.freeze({\n kind: \"fields\",\n fields: Object.freeze(value.fields.flatMap((field) => {\n if ((mode === \"root\" || mode === \"minimal\") &&\n (field.label === \"message\" || field.label === \"expected\" || field.label === \"received\"))\n return [];\n if (field.label === \"children\" && field.value.kind === \"list\") {\n const decisiveState = decision.result === \"matched\"\n ? \"matched\"\n : decision.result === \"unavailable\"\n ? \"unavailable\"\n : decision.result === \"mismatched\"\n ? \"matched\"\n : undefined;\n const decisive: AssertionFactValue[] = [];\n if (decisiveState !== undefined) {\n for (const item of field.value.items) {\n if (childState(item) !== decisiveState)\n continue;\n if (decisive.length === 0)\n decisive.push(item);\n else if (decisive.length === 1)\n decisive.push(item);\n else\n decisive[1] = item;\n }\n }\n const representative = mode === \"root\" ? field.value.items.slice(0, 2) : [];\n const retained = [...new Set([...representative, ...decisive])];\n return [Object.freeze({\n label: field.label,\n value: Object.freeze({\n kind: \"list\" as const,\n items: Object.freeze(retained.map((item) => compactFact(item, decision))),\n }),\n })];\n }\n return [Object.freeze({ label: field.label, value: compactFact(field.value, decision) })];\n })),\n });\n }\n };\n return Object.freeze(entries.map((entry) => entry.explanationRetention.state === \"retained\"\n ? Object.freeze({\n ...entry,\n explanationRetention: Object.freeze({\n state: \"retained\" as const,\n value: compactFact(entry.explanationRetention.value, entry.decision),\n }),\n })\n : entry));\n}\nfunction invalidDocument(message: string): AssertionsProducerError {\n return Object.freeze({ code: \"assertions-document-invalid\" as const, message });\n}\nfunction firstSchemaIssue(error: ParseResult.ParseError): string | undefined {\n try {\n const issue = ParseResult.ArrayFormatter.formatErrorSync(error)[0];\n if (issue === undefined)\n return undefined;\n const path = issue.path.length === 0 ? \"document\" : issue.path.map(String).join(\".\");\n const expected = issue.message.split(\", actual \", 1)[0] ?? issue.message;\n const message = expected.length <= 512\n ? expected\n : `${expected.slice(0, 511)}…`;\n return `${path}: ${message}`;\n }\n catch {\n return undefined;\n }\n}\nexport interface AssertionsDocumentBuilder<BlobRef> {\n /** Appends exactly one completed Assertion in declaration/display order. */\n readonly append: (entry: AssertionEntryInput<BlobRef>) => Either.Either<AssertionEntryId, AssertionsProducerError>;\n /**\n * Checks the writer-only exact document schema once and prevents subsequent\n * appends. Repeated calls return the same sealed document without running\n * an evaluator or minting another entry ID.\n */\n readonly seal: (input?: {\n readonly maximumBytes?: number;\n }) => Either.Either<AssertionsDocument<BlobRef>, AssertionsProducerError>;\n}\n/**\n * Assertion producers own normalization and ID allocation. This builder owns\n * neither Record paths nor blob streams: the later Attachment adapter supplies\n * Record's local builder, so an entry cannot borrow another Attachment's ref.\n */\nexport function createAssertionsDocumentBuilder<BlobRef, Encoded>(input: {\n readonly documentSchema: Schema.Schema<AssertionsDocument<BlobRef>, Encoded>;\n readonly entryIds: AssertionsEntryIdSource;\n}): AssertionsDocumentBuilder<BlobRef> {\n const entryIds = new Set<string>();\n const entries: AssertionEntry<BlobRef>[] = [];\n let sealed: AssertionsDocument<BlobRef> | undefined;\n const builder: AssertionsDocumentBuilder<BlobRef> = {\n append(entry: AssertionEntryInput<BlobRef>): Either.Either<AssertionEntryId, AssertionsProducerError> {\n if (sealed !== undefined) {\n return Either.left({ code: \"assertions-document-sealed\" });\n }\n const entryIdText = input.entryIds.next();\n const entryId = Schema.decodeUnknownEither(AssertionEntryIdSchema, AssertionsExactParseOptions)(entryIdText);\n if (Either.isLeft(entryId)) {\n return Either.left({\n code: \"assertion-entry-id-invalid\",\n entryId: entryIdText,\n });\n }\n if (entryIds.has(entryId.right)) {\n return Either.left({\n code: \"assertion-entry-id-duplicate\",\n entryId: entryIdText,\n });\n }\n entryIds.add(entryId.right);\n entries.push(Object.freeze({ entryId: entryId.right, ...entry }));\n return Either.right(entryId.right);\n },\n seal(sealInput: {\n readonly maximumBytes?: number;\n } = {}): Either.Either<AssertionsDocument<BlobRef>, AssertionsProducerError> {\n if (sealed !== undefined) {\n return Either.right(sealed);\n }\n const maximumBytes = sealInput.maximumBytes ?? MAX_ASSERTION_DOCUMENT_BYTES;\n if (!Number.isSafeInteger(maximumBytes) || maximumBytes <= 0 || maximumBytes > MAX_ASSERTION_DOCUMENT_BYTES) {\n return Either.left(invalidDocument(`Assertions framing has no positive entry budget within the ${MAX_ASSERTION_DOCUMENT_BYTES}-byte limit. ` +\n \"Reduce assertion source sites or assertion count and retry.\"));\n }\n let document: AssertionsDocument<BlobRef> = Object.freeze({\n entries: Object.freeze([...entries]),\n });\n if (!isAssertionsRawDataGraph(document)) {\n return Either.left(invalidDocument(\"Assertions could not be saved because an entry contains a cyclic or non-JSON value. \" +\n \"Upgrade NiceEval and retry; if this persists, report assertions-document-invalid.\"));\n }\n let documentBytes = encodedBytes(document);\n if (documentBytes > maximumBytes) {\n document = Object.freeze({ entries: compactEntries(document.entries, \"root\") });\n documentBytes = encodedBytes(document);\n }\n if (documentBytes > maximumBytes) {\n document = Object.freeze({ entries: compactEntries(document.entries, \"minimal\") });\n documentBytes = encodedBytes(document);\n }\n if (documentBytes > maximumBytes) {\n return Either.left(invalidDocument(`Assertions could not be saved after diagnostic compaction because entry framing is ` +\n `${documentBytes} bytes; ${maximumBytes} bytes remain after source sites within the ` +\n `${MAX_ASSERTION_DOCUMENT_BYTES}-byte limit. Large source and evidence snapshots are already ` +\n \"stored as blobs; reduce assertion count or matcher/display identity and retry.\"));\n }\n const encoded = Schema.encodeUnknownEither(input.documentSchema, AssertionsExactParseOptions)(document);\n if (Either.isLeft(encoded)) {\n const issue = firstSchemaIssue(encoded.left);\n return Either.left(invalidDocument(`Assertions could not be saved${issue === undefined ? \"\" : ` because ${issue}`}. ` +\n \"Upgrade NiceEval and retry; if this persists, report assertions-document-invalid.\"));\n }\n sealed = document;\n return Either.right(document);\n },\n };\n return Object.freeze(builder);\n}\n"]}
@@ -1,13 +1,14 @@
1
1
  import { Either, Schema } from "effect";
2
- import type { AssertionDisplay, AssertionEntryId, AssertionLimitation, AssertionMaterial, AssertionCoverage, AssertionsDocument, SealedAssertionResult, WritableCriterionEnvelope } from "./model.cjs";
2
+ import type { AssertionDisplay, AssertionEntryId, AssertionCriterionRecord, AssertionMaterials, AssertionEvaluation, AssertionDecision, AssertionDecisionPolicy, ScoreContribution, ExplanationRetention, AssertionsDocument } from "./model.cjs";
3
3
  export interface AssertionEntryInput<BlobRef> {
4
4
  readonly display: AssertionDisplay;
5
- readonly criterion: WritableCriterionEnvelope;
6
- readonly subject: AssertionMaterial<BlobRef>;
7
- readonly evidence: readonly AssertionMaterial<BlobRef>[];
8
- readonly coverage: AssertionCoverage;
9
- readonly limitations: readonly AssertionLimitation[];
10
- readonly result: SealedAssertionResult;
5
+ readonly criterion: AssertionCriterionRecord;
6
+ readonly materials: AssertionMaterials<BlobRef>;
7
+ readonly evaluation: AssertionEvaluation;
8
+ readonly decision: AssertionDecision;
9
+ readonly policy: AssertionDecisionPolicy;
10
+ readonly contribution: ScoreContribution;
11
+ readonly explanationRetention: ExplanationRetention;
11
12
  }
12
13
  export interface AssertionsEntryIdSource {
13
14
  /** Must return a fresh `ae_[a-z0-9]{20}` candidate for this Attachment. */
@@ -1,13 +1,14 @@
1
1
  import { Either, Schema } from "effect";
2
- import type { AssertionDisplay, AssertionEntryId, AssertionLimitation, AssertionMaterial, AssertionCoverage, AssertionsDocument, SealedAssertionResult, WritableCriterionEnvelope } from "./model.mjs";
2
+ import type { AssertionDisplay, AssertionEntryId, AssertionCriterionRecord, AssertionMaterials, AssertionEvaluation, AssertionDecision, AssertionDecisionPolicy, ScoreContribution, ExplanationRetention, AssertionsDocument } from "./model.mjs";
3
3
  export interface AssertionEntryInput<BlobRef> {
4
4
  readonly display: AssertionDisplay;
5
- readonly criterion: WritableCriterionEnvelope;
6
- readonly subject: AssertionMaterial<BlobRef>;
7
- readonly evidence: readonly AssertionMaterial<BlobRef>[];
8
- readonly coverage: AssertionCoverage;
9
- readonly limitations: readonly AssertionLimitation[];
10
- readonly result: SealedAssertionResult;
5
+ readonly criterion: AssertionCriterionRecord;
6
+ readonly materials: AssertionMaterials<BlobRef>;
7
+ readonly evaluation: AssertionEvaluation;
8
+ readonly decision: AssertionDecision;
9
+ readonly policy: AssertionDecisionPolicy;
10
+ readonly contribution: ScoreContribution;
11
+ readonly explanationRetention: ExplanationRetention;
11
12
  }
12
13
  export interface AssertionsEntryIdSource {
13
14
  /** Must return a fresh `ae_[a-z0-9]{20}` candidate for this Attachment. */
@@ -1,13 +1,14 @@
1
1
  import { Either, Schema } from "effect";
2
- import type { AssertionDisplay, AssertionEntryId, AssertionLimitation, AssertionMaterial, AssertionCoverage, AssertionsDocument, SealedAssertionResult, WritableCriterionEnvelope } from "./model.js";
2
+ import type { AssertionDisplay, AssertionEntryId, AssertionCriterionRecord, AssertionMaterials, AssertionEvaluation, AssertionDecision, AssertionDecisionPolicy, ScoreContribution, ExplanationRetention, AssertionsDocument } from "./model.js";
3
3
  export interface AssertionEntryInput<BlobRef> {
4
4
  readonly display: AssertionDisplay;
5
- readonly criterion: WritableCriterionEnvelope;
6
- readonly subject: AssertionMaterial<BlobRef>;
7
- readonly evidence: readonly AssertionMaterial<BlobRef>[];
8
- readonly coverage: AssertionCoverage;
9
- readonly limitations: readonly AssertionLimitation[];
10
- readonly result: SealedAssertionResult;
5
+ readonly criterion: AssertionCriterionRecord;
6
+ readonly materials: AssertionMaterials<BlobRef>;
7
+ readonly evaluation: AssertionEvaluation;
8
+ readonly decision: AssertionDecision;
9
+ readonly policy: AssertionDecisionPolicy;
10
+ readonly contribution: ScoreContribution;
11
+ readonly explanationRetention: ExplanationRetention;
11
12
  }
12
13
  export interface AssertionsEntryIdSource {
13
14
  /** Must return a fresh `ae_[a-z0-9]{20}` candidate for this Attachment. */
@@ -540,7 +540,7 @@ class AssertionsRuntimeImplementation {
540
540
  if (managed.kind === "boolean") {
541
541
  const entry = this.createEntry({
542
542
  kind: "boolean",
543
- criterion: Object.freeze({ kind: "value-match", subject: "explicit-value" }),
543
+ criterion: Object.freeze({ kind: "value-match", subject: "explicit-value", matcher: Object.freeze({ state: "declared", name: managed.name }) }),
544
544
  subject: captured.material,
545
545
  evidence: Object.freeze([]),
546
546
  coverage: captured.coverage,
@@ -551,7 +551,7 @@ class AssertionsRuntimeImplementation {
551
551
  }
552
552
  const entry = this.createEntry({
553
553
  kind: "measurement",
554
- criterion: Object.freeze({ kind: "value-match", subject: "explicit-value" }),
554
+ criterion: Object.freeze({ kind: "value-match", subject: "explicit-value", matcher: Object.freeze({ state: "declared", name: managed.name }) }),
555
555
  subject: captured.material,
556
556
  evidence: Object.freeze([]),
557
557
  coverage: captured.coverage,
@@ -879,17 +879,20 @@ class AssertionsRuntimeImplementation {
879
879
  state: "matched",
880
880
  value: evaluation.value,
881
881
  ...(evaluation.diagnostic === undefined ? {} : { diagnostic: evaluation.diagnostic }),
882
+ ...(evaluation.receipt === undefined ? {} : { receipt: evaluation.receipt }),
882
883
  });
883
884
  case "mismatched":
884
885
  return Object.freeze({
885
886
  state: "mismatched",
886
887
  ...(evaluation.diagnostic === undefined ? {} : { diagnostic: evaluation.diagnostic }),
888
+ ...(evaluation.receipt === undefined ? {} : { receipt: evaluation.receipt }),
887
889
  });
888
890
  case "unavailable":
889
891
  return Object.freeze({
890
892
  state: "unavailable",
891
893
  reason: evaluation.reason,
892
894
  ...(evaluation.diagnostic === undefined ? {} : { diagnostic: evaluation.diagnostic }),
895
+ ...(evaluation.receipt === undefined ? {} : { receipt: evaluation.receipt }),
893
896
  });
894
897
  case "not-applicable":
895
898
  return Object.freeze({
@@ -902,13 +905,21 @@ class AssertionsRuntimeImplementation {
902
905
  switch (evaluation.state) {
903
906
  case "measured":
904
907
  assertUnitInterval(evaluation.value, "measurement Assertion result");
905
- return Object.freeze({ state: "measured", value: evaluation.value });
908
+ return Object.freeze({
909
+ state: "measured",
910
+ value: evaluation.value,
911
+ ...(evaluation.detail === undefined ? {} : { explanation: evaluation.detail }),
912
+ });
906
913
  case "unavailable":
907
- return Object.freeze({ state: "unavailable", reason: evaluation.reason });
914
+ return Object.freeze({
915
+ state: "unavailable",
916
+ reason: evaluation.reason,
917
+ ...(evaluation.detail === undefined ? {} : { explanation: evaluation.detail }),
918
+ });
908
919
  case "not-applicable":
909
- return Object.freeze({ state: "not-applicable" });
920
+ return Object.freeze({ state: "not-applicable", ...(evaluation.detail === undefined ? {} : { explanation: evaluation.detail }) });
910
921
  case "errored":
911
- return Object.freeze({ state: "errored" });
922
+ return Object.freeze({ state: "errored", ...(evaluation.detail === undefined ? {} : { explanation: evaluation.detail }) });
912
923
  }
913
924
  }
914
925
  /** Evaluates an entry at most once even when multiple Effect fibers await it. */
@@ -1014,6 +1025,28 @@ class AssertionsRuntimeImplementation {
1014
1025
  coverage: material.coverage,
1015
1026
  limitations: material.limitations,
1016
1027
  result: this.resultFor(entry, settlement),
1028
+ policy: Object.freeze({
1029
+ requirement: entry.optionalConfigured ? "optional" : "required",
1030
+ condition: entry.kind === "measurement" && entry.threshold !== undefined
1031
+ ? Object.freeze({ kind: "at-least", threshold: entry.threshold })
1032
+ : entry.kind === "boolean"
1033
+ ? Object.freeze({ kind: "boolean", expected: true })
1034
+ : Object.freeze({ kind: "record-only" }),
1035
+ }),
1036
+ observed: entry.kind === "boolean"
1037
+ ? Object.freeze({
1038
+ kind: "boolean",
1039
+ outcome: settlement.state === "measured" || settlement.state === "interrupted"
1040
+ ? "errored"
1041
+ : settlement.state,
1042
+ })
1043
+ : entry.kind === "measurement"
1044
+ ? settlement.state === "measured"
1045
+ ? Object.freeze({ kind: "measurement", state: "available", value: settlement.value })
1046
+ : Object.freeze({ kind: "measurement", state: "unavailable" })
1047
+ : settlement.state === "measured"
1048
+ ? Object.freeze({ kind: "direct-score", state: "available", value: settlement.value })
1049
+ : Object.freeze({ kind: "direct-score", state: "unavailable" }),
1017
1050
  });
1018
1051
  }
1019
1052
  materialFor(entry, settlement) {
@@ -1035,8 +1068,9 @@ class AssertionsRuntimeImplementation {
1035
1068
  });
1036
1069
  }
1037
1070
  resultFor(entry, settlement) {
1038
- const capturedDiagnostic = captureMatchDiagnostic(settlement.diagnostic);
1071
+ const capturedDiagnostic = settlement.explanation ?? captureMatchDiagnostic(settlement.diagnostic);
1039
1072
  const diagnostic = capturedDiagnostic === undefined ? {} : { diagnostic: capturedDiagnostic };
1073
+ const receipt = settlement.receipt === undefined ? {} : { receipt: settlement.receipt };
1040
1074
  switch (settlement.state) {
1041
1075
  case "matched":
1042
1076
  return Object.freeze({
@@ -1044,6 +1078,7 @@ class AssertionsRuntimeImplementation {
1044
1078
  gate: this.gateForMatched(entry),
1045
1079
  score: this.availableScoreFor(entry, 1),
1046
1080
  ...diagnostic,
1081
+ ...receipt,
1047
1082
  });
1048
1083
  case "mismatched":
1049
1084
  return Object.freeze({
@@ -1052,6 +1087,7 @@ class AssertionsRuntimeImplementation {
1052
1087
  gate: this.gateForMismatched(entry),
1053
1088
  score: this.availableScoreFor(entry, 0),
1054
1089
  ...diagnostic,
1090
+ ...receipt,
1055
1091
  });
1056
1092
  case "measured": {
1057
1093
  const matched = entry.threshold === undefined || settlement.value >= entry.threshold;
@@ -1061,6 +1097,7 @@ class AssertionsRuntimeImplementation {
1061
1097
  gate: this.gateForMatched(entry),
1062
1098
  score: this.availableScoreFor(entry, settlement.value),
1063
1099
  ...diagnostic,
1100
+ ...receipt,
1064
1101
  })
1065
1102
  : Object.freeze({
1066
1103
  state: "mismatched",
@@ -1068,6 +1105,7 @@ class AssertionsRuntimeImplementation {
1068
1105
  gate: this.gateForMismatched(entry),
1069
1106
  score: this.availableScoreFor(entry, settlement.value),
1070
1107
  ...diagnostic,
1108
+ ...receipt,
1071
1109
  });
1072
1110
  }
1073
1111
  case "unavailable":
@@ -1077,6 +1115,7 @@ class AssertionsRuntimeImplementation {
1077
1115
  gate: this.gateForUnavailable(entry),
1078
1116
  score: this.incompleteScoreFor(entry, "source-unavailable"),
1079
1117
  ...diagnostic,
1118
+ ...receipt,
1080
1119
  });
1081
1120
  case "not-applicable":
1082
1121
  return Object.freeze({
@@ -1085,6 +1124,7 @@ class AssertionsRuntimeImplementation {
1085
1124
  gate: this.gateForNotApplicable(entry),
1086
1125
  score: this.incompleteScoreFor(entry, "not-applicable"),
1087
1126
  ...diagnostic,
1127
+ ...receipt,
1088
1128
  });
1089
1129
  case "errored":
1090
1130
  return Object.freeze({
@@ -1093,6 +1133,7 @@ class AssertionsRuntimeImplementation {
1093
1133
  gate: this.gateForUnavailable(entry),
1094
1134
  score: this.incompleteScoreFor(entry, "evaluation-errored"),
1095
1135
  ...diagnostic,
1136
+ ...receipt,
1096
1137
  });
1097
1138
  case "interrupted":
1098
1139
  return Object.freeze({
@@ -1101,6 +1142,7 @@ class AssertionsRuntimeImplementation {
1101
1142
  gate: this.gateForUnavailable(entry),
1102
1143
  score: this.incompleteScoreFor(entry, "evaluation-errored"),
1103
1144
  ...diagnostic,
1145
+ ...receipt,
1104
1146
  });
1105
1147
  }
1106
1148
  }