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
@@ -0,0 +1,91 @@
1
+ export declare const judgeUsageRecordAttachmentPersistence: import("../../attachment/protocol.mjs").RecordAttachmentPersistence<import("../../attachment/protocol.mjs").RecordAttachmentDefinition<"attempt", "niceeval.judge-usage", import("effect/Schema").Struct<{
2
+ readonly collection: import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
3
+ readonly state: import("effect/Schema").Literal<"complete">;
4
+ readonly limitations: import("effect/Schema").Tuple<readonly []>;
5
+ }>, import("effect/Schema").Struct<{
6
+ readonly state: import("effect/Schema").Literal<"partial">;
7
+ readonly limitations: import("effect/Schema").NonEmptyArray<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
8
+ readonly code: import("effect/Schema").Literals<readonly ["capture-failed", "capture-interrupted"]>;
9
+ readonly stage: import("effect/Schema").String;
10
+ }>, import("effect/Schema").Struct<{
11
+ readonly code: import("effect/Schema").Literals<readonly ["collection-cap-reached", "unsupported-input"]>;
12
+ readonly omittedAtLeast: import("effect/Schema").Number;
13
+ }>]>>;
14
+ }>]>;
15
+ readonly calls: import("effect/Schema").$Array<import("effect/Schema").Struct<{
16
+ readonly callId: import("effect/Schema").String;
17
+ readonly entryIndex: import("effect/Schema").Number;
18
+ readonly entryId: import("effect/Schema").Codec<import("../../../index.mjs").AssertionEntryId, string, never, never>;
19
+ readonly logicalOrdinal: import("effect/Schema").Number;
20
+ readonly transmissionOrdinal: import("effect/Schema").Number;
21
+ readonly operation: import("effect/Schema").Literals<readonly ["score", "classify", "extract", "batchClassify"]>;
22
+ readonly requestModel: import("effect/Schema").String;
23
+ readonly transportProvider: import("effect/Schema").Literals<readonly ["openai", "vercel", "openrouter", "typesafe"]>;
24
+ readonly provider: import("effect/Schema").NullOr<import("effect/Schema").String>;
25
+ readonly model: import("effect/Schema").NullOr<import("effect/Schema").String>;
26
+ readonly status: import("effect/Schema").Literals<readonly ["succeeded", "failed", "cancelled", "unknown"]>;
27
+ readonly httpStatus: import("effect/Schema").NullOr<import("effect/Schema").Number>;
28
+ readonly inputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
29
+ readonly inputTotalTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
30
+ readonly outputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
31
+ readonly cacheReadTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
32
+ readonly cacheWriteTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
33
+ readonly cost: import("effect/Schema").NullOr<import("effect/Schema").Struct<{
34
+ readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>;
35
+ readonly currency: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CurrencyCode, string, never, never>;
36
+ readonly source: import("effect/Schema").Struct<{
37
+ readonly kind: import("effect/Schema").Literal<"reported">;
38
+ readonly id: import("effect/Schema").String;
39
+ }>;
40
+ }>>;
41
+ readonly receipt: import("effect/Schema").Struct<{
42
+ readonly state: import("effect/Schema").Literals<readonly ["available", "unavailable"]>;
43
+ readonly reason: import("effect/Schema").NullOr<import("effect/Schema").Literals<readonly ["response-unavailable", "cancelled", "response-too-large", "invalid-json", "usage-not-reported", "invalid-usage", "response-model-too-large"]>>;
44
+ readonly responseDigest: import("effect/Schema").NullOr<import("effect/Schema").String>;
45
+ readonly fields: import("effect/Schema").$Array<import("effect/Schema").Struct<{
46
+ readonly path: import("effect/Schema").Literals<readonly ["model", "provider", "usage.completion_tokens", "usage.cost", "usage.input_tokens", "usage.output_tokens", "usage.prompt_tokens", "usage.prompt_tokens_details.cache_write_tokens", "usage.prompt_tokens_details.cached_tokens", "usage.total_tokens"]>;
47
+ readonly value: import("effect/Schema").Union<readonly [import("effect/Schema").String, import("effect/Schema").Number, import("effect/Schema").Null]>;
48
+ }>>;
49
+ }>;
50
+ }>>;
51
+ readonly priceReceipts: import("effect/Schema").$Array<import("effect/Schema").Struct<{
52
+ readonly kind: import("effect/Schema").Literal<"judge-call-price-estimate">;
53
+ readonly callId: import("effect/Schema").String;
54
+ readonly state: import("effect/Schema").Literals<readonly ["complete", "partial"]>;
55
+ readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>;
56
+ readonly currency: import("effect/Schema").Literal<"USD">;
57
+ readonly source: import("effect/Schema").Struct<{
58
+ readonly kind: import("effect/Schema").Literal<"estimated">;
59
+ readonly id: import("effect/Schema").String;
60
+ }>;
61
+ readonly pricing: import("effect/Schema").Struct<{
62
+ readonly basis: import("effect/Schema").Literal<"catalog-reference">;
63
+ readonly currency: import("effect/Schema").Literal<"USD">;
64
+ readonly source: import("effect/Schema").Struct<{
65
+ readonly kind: import("effect/Schema").Literal<"configured-profile">;
66
+ readonly id: import("effect/Schema").String;
67
+ readonly asOf: import("effect/Schema").NullOr<import("effect/Schema").Number>;
68
+ readonly profileDigest: import("effect/Schema").String;
69
+ }>;
70
+ readonly requestModel: import("effect/Schema").String;
71
+ readonly selector: import("effect/Schema").String;
72
+ readonly match: import("effect/Schema").Literals<readonly ["exact", "provider-wildcard"]>;
73
+ readonly ratesPerMTok: import("effect/Schema").Struct<{
74
+ readonly input: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
75
+ readonly output: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
76
+ readonly cacheRead: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
77
+ readonly cacheWrite: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
78
+ }>;
79
+ }>;
80
+ readonly charges: import("effect/Schema").NonEmptyArray<import("effect/Schema").Struct<{
81
+ readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
82
+ readonly tokens: import("effect/Schema").Number;
83
+ readonly ratePerMTok: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>>;
84
+ readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.mjs").CanonicalDecimal, string, never, never>;
85
+ }>>;
86
+ readonly missing: import("effect/Schema").$Array<import("effect/Schema").Struct<{
87
+ readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
88
+ readonly reason: import("effect/Schema").Literals<readonly ["tokens-unknown", "rate-unknown"]>;
89
+ }>>;
90
+ }>>;
91
+ }>>, 1>;
@@ -0,0 +1,91 @@
1
+ export declare const judgeUsageRecordAttachmentPersistence: import("../../attachment/protocol.js").RecordAttachmentPersistence<import("../../attachment/protocol.js").RecordAttachmentDefinition<"attempt", "niceeval.judge-usage", import("effect/Schema").Struct<{
2
+ readonly collection: import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
3
+ readonly state: import("effect/Schema").Literal<"complete">;
4
+ readonly limitations: import("effect/Schema").Tuple<readonly []>;
5
+ }>, import("effect/Schema").Struct<{
6
+ readonly state: import("effect/Schema").Literal<"partial">;
7
+ readonly limitations: import("effect/Schema").NonEmptyArray<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
8
+ readonly code: import("effect/Schema").Literals<readonly ["capture-failed", "capture-interrupted"]>;
9
+ readonly stage: import("effect/Schema").String;
10
+ }>, import("effect/Schema").Struct<{
11
+ readonly code: import("effect/Schema").Literals<readonly ["collection-cap-reached", "unsupported-input"]>;
12
+ readonly omittedAtLeast: import("effect/Schema").Number;
13
+ }>]>>;
14
+ }>]>;
15
+ readonly calls: import("effect/Schema").$Array<import("effect/Schema").Struct<{
16
+ readonly callId: import("effect/Schema").String;
17
+ readonly entryIndex: import("effect/Schema").Number;
18
+ readonly entryId: import("effect/Schema").Codec<import("../../../index.js").AssertionEntryId, string, never, never>;
19
+ readonly logicalOrdinal: import("effect/Schema").Number;
20
+ readonly transmissionOrdinal: import("effect/Schema").Number;
21
+ readonly operation: import("effect/Schema").Literals<readonly ["score", "classify", "extract", "batchClassify"]>;
22
+ readonly requestModel: import("effect/Schema").String;
23
+ readonly transportProvider: import("effect/Schema").Literals<readonly ["openai", "vercel", "openrouter", "typesafe"]>;
24
+ readonly provider: import("effect/Schema").NullOr<import("effect/Schema").String>;
25
+ readonly model: import("effect/Schema").NullOr<import("effect/Schema").String>;
26
+ readonly status: import("effect/Schema").Literals<readonly ["succeeded", "failed", "cancelled", "unknown"]>;
27
+ readonly httpStatus: import("effect/Schema").NullOr<import("effect/Schema").Number>;
28
+ readonly inputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
29
+ readonly inputTotalTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
30
+ readonly outputTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
31
+ readonly cacheReadTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
32
+ readonly cacheWriteTokens: import("effect/Schema").NullOr<import("effect/Schema").Number>;
33
+ readonly cost: import("effect/Schema").NullOr<import("effect/Schema").Struct<{
34
+ readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>;
35
+ readonly currency: import("effect/Schema").Codec<import("../source-receipt/model.js").CurrencyCode, string, never, never>;
36
+ readonly source: import("effect/Schema").Struct<{
37
+ readonly kind: import("effect/Schema").Literal<"reported">;
38
+ readonly id: import("effect/Schema").String;
39
+ }>;
40
+ }>>;
41
+ readonly receipt: import("effect/Schema").Struct<{
42
+ readonly state: import("effect/Schema").Literals<readonly ["available", "unavailable"]>;
43
+ readonly reason: import("effect/Schema").NullOr<import("effect/Schema").Literals<readonly ["response-unavailable", "cancelled", "response-too-large", "invalid-json", "usage-not-reported", "invalid-usage", "response-model-too-large"]>>;
44
+ readonly responseDigest: import("effect/Schema").NullOr<import("effect/Schema").String>;
45
+ readonly fields: import("effect/Schema").$Array<import("effect/Schema").Struct<{
46
+ readonly path: import("effect/Schema").Literals<readonly ["model", "provider", "usage.completion_tokens", "usage.cost", "usage.input_tokens", "usage.output_tokens", "usage.prompt_tokens", "usage.prompt_tokens_details.cache_write_tokens", "usage.prompt_tokens_details.cached_tokens", "usage.total_tokens"]>;
47
+ readonly value: import("effect/Schema").Union<readonly [import("effect/Schema").String, import("effect/Schema").Number, import("effect/Schema").Null]>;
48
+ }>>;
49
+ }>;
50
+ }>>;
51
+ readonly priceReceipts: import("effect/Schema").$Array<import("effect/Schema").Struct<{
52
+ readonly kind: import("effect/Schema").Literal<"judge-call-price-estimate">;
53
+ readonly callId: import("effect/Schema").String;
54
+ readonly state: import("effect/Schema").Literals<readonly ["complete", "partial"]>;
55
+ readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>;
56
+ readonly currency: import("effect/Schema").Literal<"USD">;
57
+ readonly source: import("effect/Schema").Struct<{
58
+ readonly kind: import("effect/Schema").Literal<"estimated">;
59
+ readonly id: import("effect/Schema").String;
60
+ }>;
61
+ readonly pricing: import("effect/Schema").Struct<{
62
+ readonly basis: import("effect/Schema").Literal<"catalog-reference">;
63
+ readonly currency: import("effect/Schema").Literal<"USD">;
64
+ readonly source: import("effect/Schema").Struct<{
65
+ readonly kind: import("effect/Schema").Literal<"configured-profile">;
66
+ readonly id: import("effect/Schema").String;
67
+ readonly asOf: import("effect/Schema").NullOr<import("effect/Schema").Number>;
68
+ readonly profileDigest: import("effect/Schema").String;
69
+ }>;
70
+ readonly requestModel: import("effect/Schema").String;
71
+ readonly selector: import("effect/Schema").String;
72
+ readonly match: import("effect/Schema").Literals<readonly ["exact", "provider-wildcard"]>;
73
+ readonly ratesPerMTok: import("effect/Schema").Struct<{
74
+ readonly input: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
75
+ readonly output: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
76
+ readonly cacheRead: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
77
+ readonly cacheWrite: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
78
+ }>;
79
+ }>;
80
+ readonly charges: import("effect/Schema").NonEmptyArray<import("effect/Schema").Struct<{
81
+ readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
82
+ readonly tokens: import("effect/Schema").Number;
83
+ readonly ratePerMTok: import("effect/Schema").NullOr<import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>>;
84
+ readonly amount: import("effect/Schema").Codec<import("../source-receipt/model.js").CanonicalDecimal, string, never, never>;
85
+ }>>;
86
+ readonly missing: import("effect/Schema").$Array<import("effect/Schema").Struct<{
87
+ readonly bucket: import("effect/Schema").Literals<readonly ["input", "output", "cache-read", "cache-write"]>;
88
+ readonly reason: import("effect/Schema").Literals<readonly ["tokens-unknown", "rate-unknown"]>;
89
+ }>>;
90
+ }>>;
91
+ }>>, 1>;
@@ -0,0 +1,6 @@
1
+ import { createRequire as __niceevalCreateRequire } from "node:module";
2
+ const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
+ const __niceevalCanonical = __niceevalRequire("./persistence.cjs");
4
+ const __niceevalExport0 = __niceevalCanonical["judgeUsageRecordAttachmentPersistence"];
5
+ export { __niceevalExport0 as judgeUsageRecordAttachmentPersistence };
6
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sources":[],"names":[],"mappings":""}
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JudgeUsageAttachmentSchema = exports.JudgePriceReceiptSchema = exports.JudgeUsageCallSchema = exports.JudgeUsageReceiptPaths = exports.JudgeUsageModelSchema = exports.JudgeUsageLimits = void 0;
4
+ exports.validateJudgeUsageAttachment = validateJudgeUsageAttachment;
5
+ const effect_1 = require("effect");
6
+ const codec_ts_1 = require("../../../assertions/record/codec.cjs");
7
+ const index_ts_1 = require("../../attachment/index.cjs");
8
+ const common_ts_1 = require("../common.cjs");
9
+ const codec_ts_2 = require("../source-receipt/codec.cjs");
10
+ const pricing_ts_1 = require("../adapter-usage/pricing.cjs");
11
+ exports.JudgeUsageLimits = Object.freeze({
12
+ maximumCalls: 4000,
13
+ maximumModelBytes: 8192,
14
+ maximumReceiptBytes: 32768,
15
+ maximumReceiptFields: 24,
16
+ });
17
+ const encoder = new TextEncoder();
18
+ function boundedIdentity(maximumBytes) {
19
+ return effect_1.Schema.String.check(effect_1.Schema.makeFilter((value) => value.trim().length > 0 && !/[\ud800-\udfff]/u.test(value) &&
20
+ encoder.encode(value).byteLength <= maximumBytes && !/[\u0000-\u001f\u007f]/u.test(value)));
21
+ }
22
+ const Identity = boundedIdentity(256);
23
+ /** @internal Used to validate observations before retaining their response fields. */
24
+ exports.JudgeUsageModelSchema = boundedIdentity(exports.JudgeUsageLimits.maximumModelBytes);
25
+ const Digest = effect_1.Schema.String.check(effect_1.Schema.isPattern(/^sha256:[0-9a-f]{64}$/u));
26
+ const Tokens = effect_1.Schema.NullOr(common_ts_1.NonNegativeSafeIntegerSchema);
27
+ const NullableRate = effect_1.Schema.NullOr(codec_ts_2.CanonicalDecimalSchema);
28
+ /** Only these protocol facts may enter durable receipts; business text is excluded. */
29
+ exports.JudgeUsageReceiptPaths = Object.freeze([
30
+ "model",
31
+ "provider",
32
+ "usage.completion_tokens",
33
+ "usage.cost",
34
+ "usage.input_tokens",
35
+ "usage.output_tokens",
36
+ "usage.prompt_tokens",
37
+ "usage.prompt_tokens_details.cache_write_tokens",
38
+ "usage.prompt_tokens_details.cached_tokens",
39
+ "usage.total_tokens",
40
+ ]);
41
+ const ReceiptFieldSchema = effect_1.Schema.Struct({
42
+ path: effect_1.Schema.Literals(exports.JudgeUsageReceiptPaths),
43
+ value: effect_1.Schema.Union([effect_1.Schema.String.check(effect_1.Schema.makeFilter((value) => !/[\ud800-\udfff]/u.test(value) && encoder.encode(value).byteLength <= exports.JudgeUsageLimits.maximumModelBytes &&
44
+ !/[\u0000-\u001f\u007f]/u.test(value))), common_ts_1.FiniteNonNegativeNumberSchema.check(effect_1.Schema.makeFilter((value) => !Object.is(value, -0))), effect_1.Schema.Null]),
45
+ });
46
+ const ReceiptSchema = effect_1.Schema.Struct({
47
+ state: effect_1.Schema.Literals(["available", "unavailable"]),
48
+ reason: effect_1.Schema.NullOr(effect_1.Schema.Literals([
49
+ "response-unavailable", "cancelled", "response-too-large", "invalid-json",
50
+ "usage-not-reported", "invalid-usage", "response-model-too-large",
51
+ ])),
52
+ responseDigest: effect_1.Schema.NullOr(Digest),
53
+ fields: effect_1.Schema.Array(ReceiptFieldSchema),
54
+ }).check(effect_1.Schema.makeFilter((receipt) => {
55
+ if (receipt.fields.length > exports.JudgeUsageLimits.maximumReceiptFields ||
56
+ encoder.encode(JSON.stringify(receipt)).byteLength > exports.JudgeUsageLimits.maximumReceiptBytes ||
57
+ receipt.fields.some((field, index) => index > 0 && receipt.fields[index - 1].path >= field.path))
58
+ return false;
59
+ if (receipt.state === "available") {
60
+ return receipt.fields.some((field) => field.value !== null) && receipt.responseDigest !== null &&
61
+ (receipt.reason === null || receipt.reason === "invalid-usage" ||
62
+ receipt.reason === "usage-not-reported" || receipt.reason === "response-model-too-large");
63
+ }
64
+ return receipt.fields.length === 0 && receipt.reason !== null &&
65
+ (receipt.reason === "invalid-json" || receipt.reason === "invalid-usage" ||
66
+ receipt.reason === "usage-not-reported" || receipt.reason === "response-model-too-large"
67
+ ? receipt.responseDigest !== null : receipt.responseDigest === null);
68
+ }));
69
+ const CallShapeSchema = effect_1.Schema.Struct({
70
+ callId: Identity,
71
+ entryIndex: common_ts_1.NonNegativeSafeIntegerSchema,
72
+ entryId: codec_ts_1.AssertionEntryIdSchema,
73
+ logicalOrdinal: common_ts_1.PositiveSafeIntegerSchema,
74
+ transmissionOrdinal: common_ts_1.PositiveSafeIntegerSchema,
75
+ operation: effect_1.Schema.Literals(["score", "classify", "extract", "batchClassify"]),
76
+ requestModel: exports.JudgeUsageModelSchema,
77
+ transportProvider: effect_1.Schema.Literals(["openai", "vercel", "openrouter", "typesafe"]),
78
+ provider: effect_1.Schema.NullOr(Identity),
79
+ model: effect_1.Schema.NullOr(exports.JudgeUsageModelSchema),
80
+ status: effect_1.Schema.Literals(["succeeded", "failed", "cancelled", "unknown"]),
81
+ httpStatus: effect_1.Schema.NullOr(common_ts_1.NonNegativeSafeIntegerSchema.check(effect_1.Schema.makeFilter((value) => value >= 100 && value <= 599))),
82
+ inputTokens: Tokens,
83
+ inputTotalTokens: Tokens,
84
+ outputTokens: Tokens,
85
+ cacheReadTokens: Tokens,
86
+ cacheWriteTokens: Tokens,
87
+ cost: effect_1.Schema.NullOr(effect_1.Schema.Struct({
88
+ amount: codec_ts_2.CanonicalDecimalSchema,
89
+ currency: codec_ts_2.CurrencyCodeSchema,
90
+ source: effect_1.Schema.Struct({ kind: effect_1.Schema.Literal("reported"), id: Identity }),
91
+ })),
92
+ receipt: ReceiptSchema,
93
+ });
94
+ exports.JudgeUsageCallSchema = CallShapeSchema.check(effect_1.Schema.makeFilter((call) => validCall(call)));
95
+ const PriceReceiptShapeSchema = effect_1.Schema.Struct({
96
+ kind: effect_1.Schema.Literal("judge-call-price-estimate"),
97
+ callId: Identity,
98
+ state: effect_1.Schema.Literals(["complete", "partial"]),
99
+ amount: codec_ts_2.CanonicalDecimalSchema,
100
+ currency: effect_1.Schema.Literal("USD"),
101
+ source: effect_1.Schema.Struct({ kind: effect_1.Schema.Literal("estimated"), id: Identity }),
102
+ pricing: effect_1.Schema.Struct({
103
+ basis: effect_1.Schema.Literal("catalog-reference"),
104
+ currency: effect_1.Schema.Literal("USD"),
105
+ source: effect_1.Schema.Struct({
106
+ kind: effect_1.Schema.Literal("configured-profile"), id: Identity,
107
+ asOf: effect_1.Schema.NullOr(common_ts_1.PositiveSafeIntegerSchema), profileDigest: Digest,
108
+ }),
109
+ requestModel: exports.JudgeUsageModelSchema,
110
+ selector: exports.JudgeUsageModelSchema,
111
+ match: effect_1.Schema.Literals(["exact", "provider-wildcard"]),
112
+ ratesPerMTok: effect_1.Schema.Struct({ input: NullableRate, output: NullableRate, cacheRead: NullableRate, cacheWrite: NullableRate }),
113
+ }),
114
+ charges: effect_1.Schema.NonEmptyArray(effect_1.Schema.Struct({
115
+ bucket: effect_1.Schema.Literals(pricing_ts_1.AdapterCallPriceBuckets), tokens: common_ts_1.NonNegativeSafeIntegerSchema,
116
+ ratePerMTok: NullableRate, amount: codec_ts_2.CanonicalDecimalSchema,
117
+ })),
118
+ missing: effect_1.Schema.Array(effect_1.Schema.Struct({
119
+ bucket: effect_1.Schema.Literals(pricing_ts_1.AdapterCallPriceBuckets), reason: effect_1.Schema.Literals(["tokens-unknown", "rate-unknown"]),
120
+ })),
121
+ });
122
+ exports.JudgePriceReceiptSchema = PriceReceiptShapeSchema.check(effect_1.Schema.makeFilter((receipt) => validPriceReceipt(receipt)));
123
+ const AttachmentSchema = effect_1.Schema.Struct({
124
+ collection: common_ts_1.CollectionStateSchema,
125
+ calls: effect_1.Schema.Array(exports.JudgeUsageCallSchema),
126
+ priceReceipts: effect_1.Schema.Array(exports.JudgePriceReceiptSchema),
127
+ });
128
+ exports.JudgeUsageAttachmentSchema = AttachmentSchema.check(effect_1.Schema.makeFilter((value) => validateJudgeUsageAttachment(value).length === 0));
129
+ function validCall(call) {
130
+ if (call.callId !== `judge:${call.entryIndex}:${call.logicalOrdinal}:${call.transmissionOrdinal}`)
131
+ return false;
132
+ const buckets = [call.inputTokens, call.cacheReadTokens, call.cacheWriteTokens];
133
+ const known = buckets.filter((value) => value !== null);
134
+ const sum = known.reduce((total, value) => total + value, 0);
135
+ if (!Number.isSafeInteger(sum) || call.inputTotalTokens !== null &&
136
+ (sum > call.inputTotalTokens || known.length === 3 && sum !== call.inputTotalTokens))
137
+ return false;
138
+ if (call.inputTotalTokens !== null && call.outputTokens !== null &&
139
+ !Number.isSafeInteger(call.inputTotalTokens + call.outputTokens))
140
+ return false;
141
+ const fields = new Map(call.receipt.fields.map((field) => [field.path, field.value]));
142
+ for (const field of call.receipt.fields) {
143
+ if (field.value === null)
144
+ continue;
145
+ if (field.path === "model") {
146
+ if (typeof field.value !== "string" || !effect_1.Schema.is(exports.JudgeUsageModelSchema)(field.value))
147
+ return false;
148
+ }
149
+ else if (field.path === "provider") {
150
+ if (call.transportProvider !== "openrouter" || typeof field.value !== "string" || !effect_1.Schema.is(Identity)(field.value))
151
+ return false;
152
+ }
153
+ else if (field.path === "usage.cost") {
154
+ const amount = typeof field.value === "number" ? (0, pricing_ts_1.canonicalDecimalFromNumber)(field.value) : field.value;
155
+ if (call.transportProvider !== "openrouter" || amount === undefined || !effect_1.Schema.is(codec_ts_2.CanonicalDecimalSchema)(amount))
156
+ return false;
157
+ }
158
+ else if (typeof field.value !== "number" || !effect_1.Schema.is(common_ts_1.NonNegativeSafeIntegerSchema)(field.value) ||
159
+ (call.transportProvider === "typesafe"
160
+ ? !["usage.input_tokens", "usage.output_tokens", "usage.total_tokens"].includes(field.path)
161
+ : ["usage.input_tokens", "usage.output_tokens"].includes(field.path)) ||
162
+ field.path === "usage.prompt_tokens_details.cache_write_tokens" && call.transportProvider !== "openrouter")
163
+ return false;
164
+ }
165
+ if ((fields.get("model") ?? null) !== call.model || (fields.get("provider") ?? null) !== call.provider)
166
+ return false;
167
+ const inputPath = call.transportProvider === "typesafe" ? "usage.input_tokens" : "usage.prompt_tokens";
168
+ const outputPath = call.transportProvider === "typesafe" ? "usage.output_tokens" : "usage.completion_tokens";
169
+ if (call.inputTotalTokens !== null && fields.get(inputPath) !== call.inputTotalTokens ||
170
+ call.outputTokens !== null && fields.get(outputPath) !== call.outputTokens)
171
+ return false;
172
+ if (call.receipt.reason !== "invalid-usage" &&
173
+ (typeof fields.get(inputPath) === "number" && call.inputTotalTokens === null ||
174
+ typeof fields.get(outputPath) === "number" && call.outputTokens === null ||
175
+ typeof fields.get("usage.prompt_tokens_details.cached_tokens") === "number" && call.cacheReadTokens === null ||
176
+ typeof fields.get("usage.prompt_tokens_details.cache_write_tokens") === "number" && call.cacheWriteTokens === null))
177
+ return false;
178
+ const total = fields.get("usage.total_tokens");
179
+ if (typeof total === "number" &&
180
+ (call.inputTotalTokens !== null && call.inputTotalTokens > total ||
181
+ call.outputTokens !== null && call.outputTokens > total ||
182
+ call.inputTotalTokens !== null && call.outputTokens !== null && call.inputTotalTokens + call.outputTokens !== total))
183
+ return false;
184
+ if (call.transportProvider === "typesafe" && buckets.some((value) => value !== null))
185
+ return false;
186
+ if (call.transportProvider !== "typesafe" && call.inputTotalTokens === 0 && buckets.some((value) => value !== 0))
187
+ return false;
188
+ if (call.cacheReadTokens !== null && fields.get("usage.prompt_tokens_details.cached_tokens") !== call.cacheReadTokens &&
189
+ !(call.inputTotalTokens === 0 && call.cacheReadTokens === 0 && !fields.has("usage.prompt_tokens_details.cached_tokens")))
190
+ return false;
191
+ if (call.cacheWriteTokens !== null && fields.get("usage.prompt_tokens_details.cache_write_tokens") !== call.cacheWriteTokens &&
192
+ !(call.inputTotalTokens === 0 && call.cacheWriteTokens === 0 && !fields.has("usage.prompt_tokens_details.cache_write_tokens")))
193
+ return false;
194
+ if (call.inputTokens !== null && (call.inputTotalTokens === null || call.cacheReadTokens === null || call.cacheWriteTokens === null ||
195
+ call.inputTokens !== call.inputTotalTokens - call.cacheReadTokens - call.cacheWriteTokens))
196
+ return false;
197
+ if (call.inputTotalTokens !== null && call.cacheReadTokens !== null && call.cacheWriteTokens !== null && call.inputTokens === null)
198
+ return false;
199
+ const rawCost = fields.get("usage.cost");
200
+ if (rawCost !== undefined && rawCost !== null && call.cost === null)
201
+ return false;
202
+ if (call.cost !== null) {
203
+ const raw = rawCost;
204
+ const amount = typeof raw === "number" ? (0, pricing_ts_1.canonicalDecimalFromNumber)(raw) : raw;
205
+ if (call.transportProvider !== "openrouter" || call.cost.currency !== "USD" ||
206
+ call.cost.source.id !== "openrouter.usage.cost" || call.cost.amount !== amount)
207
+ return false;
208
+ }
209
+ return true;
210
+ }
211
+ function validPriceReceipt(receipt) {
212
+ const profile = receipt.pricing;
213
+ const expectedSelector = profile.match === "exact" ? profile.requestModel
214
+ : profile.requestModel.includes("/") ? `${profile.requestModel.slice(0, profile.requestModel.indexOf("/"))}/*` : undefined;
215
+ if (profile.selector !== expectedSelector || receipt.source.id !== profile.source.id ||
216
+ profile.source.profileDigest !== (0, pricing_ts_1.adapterCallPricingProfileDigest)({
217
+ basis: profile.basis, currency: profile.currency,
218
+ source: { kind: profile.source.kind, id: profile.source.id, asOf: profile.source.asOf },
219
+ requestModel: profile.requestModel, selector: profile.selector, match: profile.match,
220
+ ratesPerMTok: { input: profile.ratesPerMTok.input, output: profile.ratesPerMTok.output,
221
+ cacheRead: profile.ratesPerMTok.cacheRead, cacheWrite: profile.ratesPerMTok.cacheWrite },
222
+ }))
223
+ return false;
224
+ const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));
225
+ const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));
226
+ if (charges.size !== receipt.charges.length || missing.size !== receipt.missing.length ||
227
+ pricing_ts_1.AdapterCallPriceBuckets.some((bucket) => Number(charges.has(bucket)) + Number(missing.has(bucket)) !== 1))
228
+ return false;
229
+ for (const charge of receipt.charges) {
230
+ const rate = bucketRate(profile.ratesPerMTok, charge.bucket);
231
+ if (charge.ratePerMTok !== rate || charge.tokens > 0 && rate === null ||
232
+ charge.amount !== (rate === null ? "0" : (0, pricing_ts_1.multiplyCanonicalDecimalPerMillion)(rate, charge.tokens)))
233
+ return false;
234
+ }
235
+ return receipt.state === (missing.size === 0 ? "complete" : "partial") &&
236
+ receipt.amount === (0, pricing_ts_1.addCanonicalDecimals)(receipt.charges.map((charge) => charge.amount));
237
+ }
238
+ function bucketRate(rates, bucket) {
239
+ switch (bucket) {
240
+ case "input": return rates.input;
241
+ case "output": return rates.output;
242
+ case "cache-read": return rates.cacheRead;
243
+ case "cache-write": return rates.cacheWrite;
244
+ }
245
+ }
246
+ function bucketTokens(call, bucket) {
247
+ switch (bucket) {
248
+ case "input": return call.inputTokens;
249
+ case "output": return call.outputTokens;
250
+ case "cache-read": return call.cacheReadTokens;
251
+ case "cache-write": return call.cacheWriteTokens;
252
+ }
253
+ }
254
+ function validateJudgeUsageAttachment(value) {
255
+ const issue = (path) => [(0, index_ts_1.recordAttachmentIssue)("record-attachment-schema-invalid", path)];
256
+ if (value.calls.length > exports.JudgeUsageLimits.maximumCalls)
257
+ return issue(["calls"]);
258
+ const calls = new Map();
259
+ const entries = new Map();
260
+ const entryIds = new Map();
261
+ const transmissions = new Map();
262
+ for (const call of value.calls) {
263
+ if (!validCall(call) || calls.has(call.callId) ||
264
+ entries.has(call.entryIndex) && entries.get(call.entryIndex) !== call.entryId ||
265
+ entryIds.has(call.entryId) && entryIds.get(call.entryId) !== call.entryIndex)
266
+ return issue(["calls", "callId"]);
267
+ calls.set(call.callId, call);
268
+ entries.set(call.entryIndex, call.entryId);
269
+ entryIds.set(call.entryId, call.entryIndex);
270
+ const key = `${call.entryIndex}:${call.logicalOrdinal}`;
271
+ let logical = transmissions.get(key);
272
+ if (logical === undefined) {
273
+ logical = { operation: call.operation, model: call.requestModel, provider: call.transportProvider, ordinals: new Set() };
274
+ transmissions.set(key, logical);
275
+ }
276
+ if (logical.operation !== call.operation || logical.model !== call.requestModel || logical.provider !== call.transportProvider)
277
+ return issue(["calls", "logicalOrdinal"]);
278
+ logical.ordinals.add(call.transmissionOrdinal);
279
+ }
280
+ for (const logical of transmissions.values()) {
281
+ for (let ordinal = 1; ordinal <= logical.ordinals.size; ordinal++) {
282
+ if (!logical.ordinals.has(ordinal))
283
+ return issue(["calls", "transmissionOrdinal"]);
284
+ }
285
+ }
286
+ const seen = new Set();
287
+ for (const receipt of value.priceReceipts) {
288
+ const call = calls.get(receipt.callId);
289
+ if (call === undefined || seen.has(receipt.callId) || call.cost !== null ||
290
+ receipt.pricing.requestModel !== call.requestModel || !validPriceReceipt(receipt))
291
+ return issue(["priceReceipts", "callId"]);
292
+ seen.add(receipt.callId);
293
+ const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));
294
+ const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));
295
+ for (const bucket of pricing_ts_1.AdapterCallPriceBuckets) {
296
+ const tokens = bucketTokens(call, bucket);
297
+ const rate = bucketRate(receipt.pricing.ratesPerMTok, bucket);
298
+ const charge = charges.get(bucket);
299
+ if (tokens === null ? charge !== undefined || missing.get(bucket)?.reason !== "tokens-unknown"
300
+ : tokens === 0 || rate !== null ? charge?.tokens !== tokens
301
+ : charge !== undefined || missing.get(bucket)?.reason !== "rate-unknown")
302
+ return issue(["priceReceipts", "charges"]);
303
+ }
304
+ }
305
+ return [];
306
+ }
307
+ //# sourceMappingURL=schema.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { Schema } from \"effect\";\nimport { AssertionEntryIdSchema } from \"../../../assertions/record/codec.ts\";\nimport { recordAttachmentIssue, type RecordAttachmentIssue } from \"../../attachment/index.ts\";\nimport { CollectionStateSchema, FiniteNonNegativeNumberSchema, NonNegativeSafeIntegerSchema, PositiveSafeIntegerSchema } from \"../common.ts\";\nimport { CanonicalDecimalSchema, CurrencyCodeSchema } from \"../source-receipt/codec.ts\";\nimport { AdapterCallPriceBuckets, adapterCallPricingProfileDigest, addCanonicalDecimals, canonicalDecimalFromNumber, multiplyCanonicalDecimalPerMillion, } from \"../adapter-usage/pricing.ts\";\nexport const JudgeUsageLimits = Object.freeze({\n maximumCalls: 4000,\n maximumModelBytes: 8192,\n maximumReceiptBytes: 32768,\n maximumReceiptFields: 24,\n});\nconst encoder = new TextEncoder();\nfunction boundedIdentity(maximumBytes: number) {\n return Schema.String.check(Schema.makeFilter((value) => value.trim().length > 0 && !/[\\ud800-\\udfff]/u.test(value) &&\n encoder.encode(value).byteLength <= maximumBytes && !/[\\u0000-\\u001f\\u007f]/u.test(value)));\n}\nconst Identity = boundedIdentity(256);\n/** @internal Used to validate observations before retaining their response fields. */\nexport const JudgeUsageModelSchema = boundedIdentity(JudgeUsageLimits.maximumModelBytes);\nconst Digest = Schema.String.check(Schema.isPattern(/^sha256:[0-9a-f]{64}$/u));\nconst Tokens = Schema.NullOr(NonNegativeSafeIntegerSchema);\nconst NullableRate = Schema.NullOr(CanonicalDecimalSchema);\n/** Only these protocol facts may enter durable receipts; business text is excluded. */\nexport const JudgeUsageReceiptPaths = Object.freeze([\n \"model\",\n \"provider\",\n \"usage.completion_tokens\",\n \"usage.cost\",\n \"usage.input_tokens\",\n \"usage.output_tokens\",\n \"usage.prompt_tokens\",\n \"usage.prompt_tokens_details.cache_write_tokens\",\n \"usage.prompt_tokens_details.cached_tokens\",\n \"usage.total_tokens\",\n] as const);\nconst ReceiptFieldSchema = Schema.Struct({\n path: Schema.Literals(JudgeUsageReceiptPaths),\n value: Schema.Union([Schema.String.check(Schema.makeFilter((value) => !/[\\ud800-\\udfff]/u.test(value) && encoder.encode(value).byteLength <= JudgeUsageLimits.maximumModelBytes &&\n !/[\\u0000-\\u001f\\u007f]/u.test(value))), FiniteNonNegativeNumberSchema.check(Schema.makeFilter((value) => !Object.is(value, -0))), Schema.Null]),\n});\nconst ReceiptSchema = Schema.Struct({\n state: Schema.Literals([\"available\", \"unavailable\"]),\n reason: Schema.NullOr(Schema.Literals([\n \"response-unavailable\", \"cancelled\", \"response-too-large\", \"invalid-json\",\n \"usage-not-reported\", \"invalid-usage\", \"response-model-too-large\",\n ])),\n responseDigest: Schema.NullOr(Digest),\n fields: Schema.Array(ReceiptFieldSchema),\n}).check(Schema.makeFilter((receipt) => {\n if (receipt.fields.length > JudgeUsageLimits.maximumReceiptFields ||\n encoder.encode(JSON.stringify(receipt)).byteLength > JudgeUsageLimits.maximumReceiptBytes ||\n receipt.fields.some((field, index) => index > 0 && receipt.fields[index - 1]!.path >= field.path))\n return false;\n if (receipt.state === \"available\") {\n return receipt.fields.some((field) => field.value !== null) && receipt.responseDigest !== null &&\n (receipt.reason === null || receipt.reason === \"invalid-usage\" ||\n receipt.reason === \"usage-not-reported\" || receipt.reason === \"response-model-too-large\");\n }\n return receipt.fields.length === 0 && receipt.reason !== null &&\n (receipt.reason === \"invalid-json\" || receipt.reason === \"invalid-usage\" ||\n receipt.reason === \"usage-not-reported\" || receipt.reason === \"response-model-too-large\"\n ? receipt.responseDigest !== null : receipt.responseDigest === null);\n}));\nconst CallShapeSchema = Schema.Struct({\n callId: Identity,\n entryIndex: NonNegativeSafeIntegerSchema,\n entryId: AssertionEntryIdSchema,\n logicalOrdinal: PositiveSafeIntegerSchema,\n transmissionOrdinal: PositiveSafeIntegerSchema,\n operation: Schema.Literals([\"score\", \"classify\", \"extract\", \"batchClassify\"]),\n requestModel: JudgeUsageModelSchema,\n transportProvider: Schema.Literals([\"openai\", \"vercel\", \"openrouter\", \"typesafe\"]),\n provider: Schema.NullOr(Identity),\n model: Schema.NullOr(JudgeUsageModelSchema),\n status: Schema.Literals([\"succeeded\", \"failed\", \"cancelled\", \"unknown\"]),\n httpStatus: Schema.NullOr(NonNegativeSafeIntegerSchema.check(Schema.makeFilter((value) => value >= 100 && value <= 599))),\n inputTokens: Tokens,\n inputTotalTokens: Tokens,\n outputTokens: Tokens,\n cacheReadTokens: Tokens,\n cacheWriteTokens: Tokens,\n cost: Schema.NullOr(Schema.Struct({\n amount: CanonicalDecimalSchema,\n currency: CurrencyCodeSchema,\n source: Schema.Struct({ kind: Schema.Literal(\"reported\"), id: Identity }),\n })),\n receipt: ReceiptSchema,\n});\nexport type JudgeUsageCall = Schema.Schema.Type<typeof CallShapeSchema>;\nexport const JudgeUsageCallSchema = CallShapeSchema.check(Schema.makeFilter((call) => validCall(call)));\nconst PriceReceiptShapeSchema = Schema.Struct({\n kind: Schema.Literal(\"judge-call-price-estimate\"),\n callId: Identity,\n state: Schema.Literals([\"complete\", \"partial\"]),\n amount: CanonicalDecimalSchema,\n currency: Schema.Literal(\"USD\"),\n source: Schema.Struct({ kind: Schema.Literal(\"estimated\"), id: Identity }),\n pricing: Schema.Struct({\n basis: Schema.Literal(\"catalog-reference\"),\n currency: Schema.Literal(\"USD\"),\n source: Schema.Struct({\n kind: Schema.Literal(\"configured-profile\"), id: Identity,\n asOf: Schema.NullOr(PositiveSafeIntegerSchema), profileDigest: Digest,\n }),\n requestModel: JudgeUsageModelSchema,\n selector: JudgeUsageModelSchema,\n match: Schema.Literals([\"exact\", \"provider-wildcard\"]),\n ratesPerMTok: Schema.Struct({ input: NullableRate, output: NullableRate, cacheRead: NullableRate, cacheWrite: NullableRate }),\n }),\n charges: Schema.NonEmptyArray(Schema.Struct({\n bucket: Schema.Literals(AdapterCallPriceBuckets), tokens: NonNegativeSafeIntegerSchema,\n ratePerMTok: NullableRate, amount: CanonicalDecimalSchema,\n })),\n missing: Schema.Array(Schema.Struct({\n bucket: Schema.Literals(AdapterCallPriceBuckets), reason: Schema.Literals([\"tokens-unknown\", \"rate-unknown\"]),\n })),\n});\nexport type JudgePriceReceipt = Schema.Schema.Type<typeof PriceReceiptShapeSchema>;\nexport const JudgePriceReceiptSchema = PriceReceiptShapeSchema.check(Schema.makeFilter((receipt) => validPriceReceipt(receipt)));\nconst AttachmentSchema = Schema.Struct({\n collection: CollectionStateSchema,\n calls: Schema.Array(JudgeUsageCallSchema),\n priceReceipts: Schema.Array(JudgePriceReceiptSchema),\n});\nexport type JudgeUsageAttachment = Schema.Schema.Type<typeof AttachmentSchema>;\nexport const JudgeUsageAttachmentSchema = AttachmentSchema.check(Schema.makeFilter((value) => validateJudgeUsageAttachment(value).length === 0));\nfunction validCall(call: JudgeUsageCall): boolean {\n if (call.callId !== `judge:${call.entryIndex}:${call.logicalOrdinal}:${call.transmissionOrdinal}`)\n return false;\n const buckets = [call.inputTokens, call.cacheReadTokens, call.cacheWriteTokens];\n const known = buckets.filter((value): value is number => value !== null);\n const sum = known.reduce((total, value) => total + value, 0);\n if (!Number.isSafeInteger(sum) || call.inputTotalTokens !== null &&\n (sum > call.inputTotalTokens || known.length === 3 && sum !== call.inputTotalTokens))\n return false;\n if (call.inputTotalTokens !== null && call.outputTokens !== null &&\n !Number.isSafeInteger(call.inputTotalTokens + call.outputTokens))\n return false;\n const fields = new Map(call.receipt.fields.map((field) => [field.path, field.value]));\n for (const field of call.receipt.fields) {\n if (field.value === null)\n continue;\n if (field.path === \"model\") {\n if (typeof field.value !== \"string\" || !Schema.is(JudgeUsageModelSchema)(field.value))\n return false;\n }\n else if (field.path === \"provider\") {\n if (call.transportProvider !== \"openrouter\" || typeof field.value !== \"string\" || !Schema.is(Identity)(field.value))\n return false;\n }\n else if (field.path === \"usage.cost\") {\n const amount = typeof field.value === \"number\" ? canonicalDecimalFromNumber(field.value) : field.value;\n if (call.transportProvider !== \"openrouter\" || amount === undefined || !Schema.is(CanonicalDecimalSchema)(amount))\n return false;\n }\n else if (typeof field.value !== \"number\" || !Schema.is(NonNegativeSafeIntegerSchema)(field.value) ||\n (call.transportProvider === \"typesafe\"\n ? ![\"usage.input_tokens\", \"usage.output_tokens\", \"usage.total_tokens\"].includes(field.path)\n : [\"usage.input_tokens\", \"usage.output_tokens\"].includes(field.path)) ||\n field.path === \"usage.prompt_tokens_details.cache_write_tokens\" && call.transportProvider !== \"openrouter\")\n return false;\n }\n if ((fields.get(\"model\") ?? null) !== call.model || (fields.get(\"provider\") ?? null) !== call.provider)\n return false;\n const inputPath = call.transportProvider === \"typesafe\" ? \"usage.input_tokens\" : \"usage.prompt_tokens\";\n const outputPath = call.transportProvider === \"typesafe\" ? \"usage.output_tokens\" : \"usage.completion_tokens\";\n if (call.inputTotalTokens !== null && fields.get(inputPath) !== call.inputTotalTokens ||\n call.outputTokens !== null && fields.get(outputPath) !== call.outputTokens)\n return false;\n if (call.receipt.reason !== \"invalid-usage\" &&\n (typeof fields.get(inputPath) === \"number\" && call.inputTotalTokens === null ||\n typeof fields.get(outputPath) === \"number\" && call.outputTokens === null ||\n typeof fields.get(\"usage.prompt_tokens_details.cached_tokens\") === \"number\" && call.cacheReadTokens === null ||\n typeof fields.get(\"usage.prompt_tokens_details.cache_write_tokens\") === \"number\" && call.cacheWriteTokens === null))\n return false;\n const total = fields.get(\"usage.total_tokens\");\n if (typeof total === \"number\" &&\n (call.inputTotalTokens !== null && call.inputTotalTokens > total ||\n call.outputTokens !== null && call.outputTokens > total ||\n call.inputTotalTokens !== null && call.outputTokens !== null && call.inputTotalTokens + call.outputTokens !== total))\n return false;\n if (call.transportProvider === \"typesafe\" && buckets.some((value) => value !== null))\n return false;\n if (call.transportProvider !== \"typesafe\" && call.inputTotalTokens === 0 && buckets.some((value) => value !== 0))\n return false;\n if (call.cacheReadTokens !== null && fields.get(\"usage.prompt_tokens_details.cached_tokens\") !== call.cacheReadTokens &&\n !(call.inputTotalTokens === 0 && call.cacheReadTokens === 0 && !fields.has(\"usage.prompt_tokens_details.cached_tokens\")))\n return false;\n if (call.cacheWriteTokens !== null && fields.get(\"usage.prompt_tokens_details.cache_write_tokens\") !== call.cacheWriteTokens &&\n !(call.inputTotalTokens === 0 && call.cacheWriteTokens === 0 && !fields.has(\"usage.prompt_tokens_details.cache_write_tokens\")))\n return false;\n if (call.inputTokens !== null && (call.inputTotalTokens === null || call.cacheReadTokens === null || call.cacheWriteTokens === null ||\n call.inputTokens !== call.inputTotalTokens - call.cacheReadTokens - call.cacheWriteTokens))\n return false;\n if (call.inputTotalTokens !== null && call.cacheReadTokens !== null && call.cacheWriteTokens !== null && call.inputTokens === null)\n return false;\n const rawCost = fields.get(\"usage.cost\");\n if (rawCost !== undefined && rawCost !== null && call.cost === null)\n return false;\n if (call.cost !== null) {\n const raw = rawCost;\n const amount = typeof raw === \"number\" ? canonicalDecimalFromNumber(raw) : raw;\n if (call.transportProvider !== \"openrouter\" || call.cost.currency !== \"USD\" ||\n call.cost.source.id !== \"openrouter.usage.cost\" || call.cost.amount !== amount)\n return false;\n }\n return true;\n}\nfunction validPriceReceipt(receipt: JudgePriceReceipt): boolean {\n const profile = receipt.pricing;\n const expectedSelector = profile.match === \"exact\" ? profile.requestModel\n : profile.requestModel.includes(\"/\") ? `${profile.requestModel.slice(0, profile.requestModel.indexOf(\"/\"))}/*` : undefined;\n if (profile.selector !== expectedSelector || receipt.source.id !== profile.source.id ||\n profile.source.profileDigest !== adapterCallPricingProfileDigest({\n basis: profile.basis, currency: profile.currency,\n source: { kind: profile.source.kind, id: profile.source.id, asOf: profile.source.asOf },\n requestModel: profile.requestModel, selector: profile.selector, match: profile.match,\n ratesPerMTok: { input: profile.ratesPerMTok.input, output: profile.ratesPerMTok.output,\n cacheRead: profile.ratesPerMTok.cacheRead, cacheWrite: profile.ratesPerMTok.cacheWrite },\n }))\n return false;\n const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));\n const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));\n if (charges.size !== receipt.charges.length || missing.size !== receipt.missing.length ||\n AdapterCallPriceBuckets.some((bucket) => Number(charges.has(bucket)) + Number(missing.has(bucket)) !== 1))\n return false;\n for (const charge of receipt.charges) {\n const rate = bucketRate(profile.ratesPerMTok, charge.bucket);\n if (charge.ratePerMTok !== rate || charge.tokens > 0 && rate === null ||\n charge.amount !== (rate === null ? \"0\" : multiplyCanonicalDecimalPerMillion(rate, charge.tokens)))\n return false;\n }\n return receipt.state === (missing.size === 0 ? \"complete\" : \"partial\") &&\n receipt.amount === addCanonicalDecimals(receipt.charges.map((charge) => charge.amount));\n}\nfunction bucketRate(rates: JudgePriceReceipt[\"pricing\"][\"ratesPerMTok\"], bucket: (typeof AdapterCallPriceBuckets)[number]): string | null {\n switch (bucket) {\n case \"input\": return rates.input;\n case \"output\": return rates.output;\n case \"cache-read\": return rates.cacheRead;\n case \"cache-write\": return rates.cacheWrite;\n }\n}\nfunction bucketTokens(call: JudgeUsageCall, bucket: (typeof AdapterCallPriceBuckets)[number]): number | null {\n switch (bucket) {\n case \"input\": return call.inputTokens;\n case \"output\": return call.outputTokens;\n case \"cache-read\": return call.cacheReadTokens;\n case \"cache-write\": return call.cacheWriteTokens;\n }\n}\nexport function validateJudgeUsageAttachment(value: JudgeUsageAttachment): readonly RecordAttachmentIssue[] {\n const issue = (path: string[]) => [recordAttachmentIssue(\"record-attachment-schema-invalid\", path)];\n if (value.calls.length > JudgeUsageLimits.maximumCalls)\n return issue([\"calls\"]);\n const calls = new Map<string, JudgeUsageCall>();\n const entries = new Map<number, string>();\n const entryIds = new Map<string, number>();\n const transmissions = new Map<string, {\n readonly operation: JudgeUsageCall[\"operation\"];\n readonly model: string;\n readonly provider: string;\n readonly ordinals: Set<number>;\n }>();\n for (const call of value.calls) {\n if (!validCall(call) || calls.has(call.callId) ||\n entries.has(call.entryIndex) && entries.get(call.entryIndex) !== call.entryId ||\n entryIds.has(call.entryId) && entryIds.get(call.entryId) !== call.entryIndex)\n return issue([\"calls\", \"callId\"]);\n calls.set(call.callId, call);\n entries.set(call.entryIndex, call.entryId);\n entryIds.set(call.entryId, call.entryIndex);\n const key = `${call.entryIndex}:${call.logicalOrdinal}`;\n let logical = transmissions.get(key);\n if (logical === undefined) {\n logical = { operation: call.operation, model: call.requestModel, provider: call.transportProvider, ordinals: new Set() };\n transmissions.set(key, logical);\n }\n if (logical.operation !== call.operation || logical.model !== call.requestModel || logical.provider !== call.transportProvider)\n return issue([\"calls\", \"logicalOrdinal\"]);\n logical.ordinals.add(call.transmissionOrdinal);\n }\n for (const logical of transmissions.values()) {\n for (let ordinal = 1; ordinal <= logical.ordinals.size; ordinal++) {\n if (!logical.ordinals.has(ordinal))\n return issue([\"calls\", \"transmissionOrdinal\"]);\n }\n }\n const seen = new Set<string>();\n for (const receipt of value.priceReceipts) {\n const call = calls.get(receipt.callId);\n if (call === undefined || seen.has(receipt.callId) || call.cost !== null ||\n receipt.pricing.requestModel !== call.requestModel || !validPriceReceipt(receipt))\n return issue([\"priceReceipts\", \"callId\"]);\n seen.add(receipt.callId);\n const charges = new Map(receipt.charges.map((charge) => [charge.bucket, charge]));\n const missing = new Map(receipt.missing.map((entry) => [entry.bucket, entry]));\n for (const bucket of AdapterCallPriceBuckets) {\n const tokens = bucketTokens(call, bucket);\n const rate = bucketRate(receipt.pricing.ratesPerMTok, bucket);\n const charge = charges.get(bucket);\n if (tokens === null ? charge !== undefined || missing.get(bucket)?.reason !== \"tokens-unknown\"\n : tokens === 0 || rate !== null ? charge?.tokens !== tokens\n : charge !== undefined || missing.get(bucket)?.reason !== \"rate-unknown\")\n return issue([\"priceReceipts\", \"charges\"]);\n }\n }\n return [];\n}\n"]}