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
@@ -1 +1 @@
1
- {"version":3,"file":"judge.js","sourceRoot":"","sources":["judge.ts"],"names":[],"mappings":"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","sourcesContent":["// Native LLM-as-Judge evaluator. The Assert-first path keeps provider I/O,\n// timeout, retry, and interruption inside the owning Effect.\nimport { ClosedQA, Factuality, Summary } from \"autoevals\";\nimport { Clock, Effect, Random } from \"effect\";\nimport OpenAI from \"openai\";\nimport { summaryText } from \"./display.ts\";\nimport type { MeasurementAssertionEvaluation } from \"./api.ts\";\nimport type { JudgeMaterial, ResolvedJudgeConfig } from \"./types.ts\";\nimport { getEnv } from \"../util.ts\";\nconst JUDGE_MAX_ATTEMPTS = 3;\nconst JUDGE_RETRY_BASE_DELAY_MS = 1000;\nconst PROBE_TIMEOUT_MS = 20000;\nconst PROBE_MAX_ATTEMPTS = 2;\nexport type JudgeRecipe = \"closedQA\" | \"factuality\" | \"summarizes\";\ntype AutoevalResult = {\n score?: number | null;\n metadata?: Record<string, unknown>;\n};\ntype JudgeMeasurementResult = {\n readonly state: \"measured\";\n readonly value: number;\n readonly evidence?: string;\n readonly explanation?: string;\n} | {\n readonly state: \"unavailable\";\n readonly reason: \"source-unavailable\";\n readonly detail: string;\n readonly evidence?: string;\n} | {\n readonly state: \"errored\";\n readonly code: string;\n readonly message: string;\n};\nfunction errorSummary(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return message.replace(/\\s+/g, \" \").slice(0, 300);\n}\nfunction objectField(value: unknown, key: string): unknown {\n if (typeof value !== \"object\" || value === null)\n return undefined;\n try {\n return Reflect.get(value, key);\n }\n catch {\n return undefined;\n }\n}\nfunction judgeStatus(error: unknown): number | undefined {\n let current: unknown = error;\n for (let depth = 0; current !== undefined && depth < 5; depth++) {\n const status = objectField(current, \"status\");\n if (typeof status === \"number\" && Number.isInteger(status))\n return status;\n const nested = objectField(current, \"error\");\n const nestedStatus = objectField(nested, \"status\");\n if (typeof nestedStatus === \"number\" && Number.isInteger(nestedStatus))\n return nestedStatus;\n current = objectField(current, \"cause\");\n }\n return undefined;\n}\nfunction judgeCode(error: unknown): string | undefined {\n let current: unknown = error;\n for (let depth = 0; current !== undefined && depth < 5; depth++) {\n const code = objectField(current, \"code\");\n if (typeof code === \"string\" && code !== \"\")\n return code;\n const nestedCode = objectField(objectField(current, \"error\"), \"code\");\n if (typeof nestedCode === \"string\" && nestedCode !== \"\")\n return nestedCode;\n current = objectField(current, \"cause\");\n }\n return undefined;\n}\nfunction headerValue(headers: unknown, name: string): string | undefined {\n if (headers instanceof Headers)\n return headers.get(name) ?? undefined;\n if (typeof headers !== \"object\" || headers === null)\n return undefined;\n const lower = name.toLowerCase();\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === lower && typeof value === \"string\")\n return value;\n }\n return undefined;\n}\nfunction retryAfterMs(headers: unknown, nowMs: number): number | undefined {\n const raw = headerValue(headers, \"retry-after\")?.trim();\n if (!raw)\n return undefined;\n const seconds = Number(raw);\n if (Number.isFinite(seconds) && seconds >= 0)\n return Math.round(seconds * 1000);\n const timestamp = Date.parse(raw);\n return Number.isFinite(timestamp) ? Math.max(0, timestamp - nowMs) : undefined;\n}\nfunction isTransientJudgeStatus(status: number | undefined): boolean {\n return status === 408 || status === 429 || (status !== undefined && status >= 500 && status <= 599);\n}\nfunction isConnectionFailure(error: unknown): boolean {\n let current: unknown = error;\n for (let depth = 0; current !== undefined && depth < 5; depth++) {\n const name = objectField(current, \"name\");\n const code = objectField(current, \"code\");\n if (name === \"APIUserAbortError\")\n return false;\n if (name === \"APIConnectionError\" || name === \"APIConnectionTimeoutError\")\n return true;\n if (typeof code === \"string\" && /^(?:ECONN|ENOTFOUND|EAI_AGAIN|ENETUNREACH|EHOSTUNREACH|ETIMEDOUT|ERR_TLS)/i.test(code))\n return true;\n if (/fetch failed|socket hang up|connection (?:reset|closed|refused)|network error|other side closed|timed? out|timeout|\\b(?:ECONNRESET|ECONNREFUSED|ENOTFOUND|EAI_AGAIN|ETIMEDOUT)\\b/i.test(errorSummary(current))) {\n return true;\n }\n current = objectField(current, \"cause\");\n }\n return false;\n}\nfunction isTransportFailure(error: unknown): boolean {\n return judgeStatus(error) !== undefined || isConnectionFailure(error);\n}\nfunction isTransientJudgeFailure(error: unknown): boolean {\n const status = judgeStatus(error);\n return isTransientJudgeStatus(status) || (status === undefined && isConnectionFailure(error));\n}\ninterface JudgeProviderFailure {\n readonly _tag: \"JudgeProviderFailure\";\n readonly error: unknown;\n}\ninterface JudgeProbeTimeout {\n readonly _tag: \"JudgeProbeTimeout\";\n}\ntype JudgeProbeFailure = JudgeProviderFailure | JudgeProbeTimeout;\n/**\n * An author-facing AbortSignal is external to this fiber. It must interrupt\n * the owning Effect instead of being reclassified as a Judge result.\n */\nfunction interruptWhenAborted(signal: AbortSignal): Effect.Effect<never> {\n return Effect.async<never>((resume) => {\n let completed = false;\n const interrupted = () => {\n if (completed)\n return;\n completed = true;\n resume(Effect.interrupt);\n };\n signal.addEventListener(\"abort\", interrupted, { once: true });\n // Register first, then inspect state so an abort cannot fall between the\n // initial check and listener installation.\n if (signal.aborted)\n interrupted();\n return Effect.sync(() => {\n completed = true;\n signal.removeEventListener(\"abort\", interrupted);\n });\n });\n}\nfunction interruptibleByCaller<A, E, R>(effect: Effect.Effect<A, E, R>, signal: AbortSignal | undefined): Effect.Effect<A, E, R> {\n if (signal === undefined)\n return effect;\n return Effect.suspend(() => signal.aborted\n ? Effect.interrupt\n : Effect.raceFirst(effect, interruptWhenAborted(signal)));\n}\nfunction formatSeconds(ms: number): string {\n const seconds = ms / 1000;\n return `${Number.isInteger(seconds) ? seconds : seconds.toFixed(1)}s`;\n}\nfunction judgeFailureEvidence(error: unknown, model: string, attempts: number, retried: boolean): string {\n const parts = [`model=${model}`];\n const status = judgeStatus(error);\n const code = judgeCode(error);\n if (status !== undefined)\n parts.push(`HTTP ${status}`);\n if (code !== undefined)\n parts.push(`code=${code}`);\n parts.push(errorSummary(error));\n parts.push(retried ? `retry=yes · attempts=${attempts}` : \"retry=no\");\n if (attempts >= JUDGE_MAX_ATTEMPTS)\n parts.push(\"retries exhausted\");\n return parts.join(\" · \");\n}\nfunction judgeClient(apiKey: string, baseURL: string, signal?: AbortSignal): OpenAI {\n return new OpenAI({\n apiKey,\n baseURL,\n maxRetries: 0,\n fetch: signal\n ? (input, init) => fetch(input, {\n ...init,\n signal: init?.signal ? AbortSignal.any([signal, init.signal]) : signal,\n })\n : undefined,\n });\n}\ntype AutoevalOpenAIClient = NonNullable<Parameters<typeof ClosedQA>[0][\"client\"]>;\nfunction bridgeAutoevalClient(client: OpenAI): {\n readonly client: AutoevalOpenAIClient;\n} {\n // @ts-expect-error autoevals and this package resolve equivalent OpenAI SDKs through distinct peer contexts.\n return { client };\n}\nexport function freezeJudgeMaterial(material: JudgeMaterial): JudgeMaterial {\n if (typeof material !== \"object\" || material === null || typeof material.input !== \"string\" || typeof material.output !== \"string\") {\n throw new TypeError(\"t.judge requires material { input: string, output: string }\");\n }\n return Object.freeze({ input: material.input, output: material.output });\n}\nfunction evidenceFor(material: JudgeMaterial): string {\n return JSON.stringify({ input: summaryText(material.input), output: summaryText(material.output) });\n}\nfunction missingConfiguration(resolved: ResolvedJudgeConfig): JudgeMeasurementResult | undefined {\n if (!resolved.model)\n return unavailable(\"judge-model-unresolved\");\n if (!getEnv(resolved.apiKeyEnv))\n return unavailable(`judge-key-unresolved (${resolved.apiKeyEnv} unset)`);\n return undefined;\n}\nconst retryProbe = Symbol(\"retry-judge-probe\");\nfunction probeAttempt(judge: ResolvedJudgeConfig, apiKey: string, endpoint: string, attempt: number, callerSignal: AbortSignal | undefined): Effect.Effect<string | undefined | typeof retryProbe, JudgeProbeFailure> {\n const probe = Effect.gen(function* () {\n const response = yield* Effect.tryPromise({\n try: async (effectSignal) => {\n // This is the probe's sole Promise adapter boundary. The Effect fiber\n // owns provider cancellation; caller aborts interrupt that fiber first.\n const response = await fetch(`${endpoint}/chat/completions`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", Authorization: `Bearer ${apiKey}` },\n body: JSON.stringify({ model: judge.model, messages: [{ role: \"user\", content: \"Reply with the single word: ok\" }] }),\n signal: effectSignal,\n });\n return {\n response,\n body: response.ok ? \"\" : await response.text().catch(() => \"\"),\n };\n },\n catch: (error): JudgeProviderFailure => ({ _tag: \"JudgeProviderFailure\", error }),\n });\n if (response.response.ok)\n return undefined;\n if (isTransientJudgeStatus(response.response.status) && attempt < PROBE_MAX_ATTEMPTS) {\n const delay = retryAfterMs(response.response.headers, yield* Clock.currentTimeMillis);\n if (delay !== undefined)\n yield* Effect.sleep(delay);\n return retryProbe;\n }\n return `Judge precheck failed for ${endpoint} (${judge.model}): HTTP ${response.response.status} ${response.body.slice(0, 300)}`;\n }).pipe(Effect.timeoutFail({\n duration: PROBE_TIMEOUT_MS,\n onTimeout: (): JudgeProbeTimeout => ({ _tag: \"JudgeProbeTimeout\" }),\n }));\n return interruptibleByCaller(probe, callerSignal);\n}\nfunction probeFailureMessage(failure: JudgeProbeFailure, judge: ResolvedJudgeConfig, endpoint: string): string {\n if (failure._tag === \"JudgeProbeTimeout\") {\n return `Judge precheck timed out for ${endpoint} (${judge.model}) after ${PROBE_TIMEOUT_MS / 1000}s`;\n }\n return `Judge precheck failed for ${endpoint} (${judge.model}): ${errorSummary(failure.error)}`;\n}\n/**\n * A precheck only tests a configured, credentialed endpoint. Missing model or\n * key remains a normal zero-network unavailable Assertion when an author consumes it.\n */\nexport function probeJudgeEffect(judge: ResolvedJudgeConfig, signal?: AbortSignal): Effect.Effect<string | undefined> {\n return Effect.suspend(() => {\n const apiKey = getEnv(judge.apiKeyEnv);\n if (!judge.model || !apiKey)\n return Effect.succeed(undefined);\n const endpoint = judge.baseUrl.replace(/\\/$/, \"\");\n const probe = (attempt: number): Effect.Effect<string | undefined> => probeAttempt(judge, apiKey, endpoint, attempt, signal).pipe(Effect.flatMap((result) => result === retryProbe\n ? probe(attempt + 1)\n : Effect.succeed(result)), Effect.catchAll((failure) => attempt === PROBE_MAX_ATTEMPTS\n ? Effect.succeed(probeFailureMessage(failure, judge, endpoint))\n : probe(attempt + 1)));\n return probe(1);\n });\n}\nfunction unavailableForCall(model: string, timeoutMs: number, attempts: number, retried: boolean): JudgeMeasurementResult {\n return unavailable(\"judge-call-failed\", `model=${model} · timed out after ${formatSeconds(timeoutMs)} · retry=${retried ? \"yes\" : \"no\"} · attempts=${attempts}`);\n}\nfunction unavailable(detail: string, evidence?: string): JudgeMeasurementResult {\n return {\n state: \"unavailable\",\n reason: \"source-unavailable\",\n detail,\n ...(evidence === undefined ? {} : { evidence }),\n };\n}\nfunction evaluatorError(code: string, message: string): JudgeMeasurementResult {\n return { state: \"errored\", code, message };\n}\n/** Throws synchronously at the author callsite when the Eval did not opt in. */\nexport function assertJudgeCapability(judge: ResolvedJudgeConfig | undefined): asserts judge is ResolvedJudgeConfig {\n if (judge === undefined) {\n throw new Error(\"Judge Assertion requires defineEval({ judge: true }) or defineScoreEval({ judge: true })\");\n }\n}\nexport interface JudgeRecipeExecution {\n readonly judge: ResolvedJudgeConfig;\n readonly recipe: JudgeRecipe;\n readonly reference: string;\n readonly material: JudgeMaterial;\n readonly signal?: AbortSignal;\n readonly random?: () => number;\n}\nfunction evaluateAutoeval(input: JudgeRecipeExecution, material: JudgeMaterial, apiKey: string, model: string): Effect.Effect<AutoevalResult, JudgeProviderFailure> {\n const provider = Effect.tryPromise({\n try: (effectSignal) => {\n const client = bridgeAutoevalClient(judgeClient(apiKey, input.judge.baseUrl, effectSignal));\n return Promise.resolve(input.recipe === \"closedQA\"\n ? ClosedQA({ input: material.input, output: material.output, criteria: input.reference, model, ...client })\n : input.recipe === \"factuality\"\n ? Factuality({ input: material.input, output: material.output, expected: input.reference, model, ...client })\n : Summary({ input: material.input, output: material.output, expected: input.reference, model, ...client }));\n },\n catch: (error): JudgeProviderFailure => ({ _tag: \"JudgeProviderFailure\", error }),\n });\n return provider;\n}\nfunction judgeSleep(delayMs: number): Effect.Effect<void> {\n return Effect.sleep(delayMs);\n}\n/**\n * The real Judge invocation. Provider I/O is adapted once, then retry,\n * timeout, interruption, and delay remain inside the owning Effect.\n */\nfunction evaluateJudgeRecipe(input: JudgeRecipeExecution): Effect.Effect<JudgeMeasurementResult> {\n const evaluation = Effect.suspend(() => {\n const { judge: resolved } = input;\n const frozenMaterial = freezeJudgeMaterial(input.material);\n const missing = missingConfiguration(resolved);\n if (missing !== undefined)\n return Effect.succeed(missing);\n const model = resolved.model!;\n const apiKey = getEnv(resolved.apiKeyEnv)!;\n let attempts = 0;\n let retried = false;\n const evaluate = (attempt: number): Effect.Effect<JudgeMeasurementResult> => Effect.sync(() => {\n attempts = attempt + 1;\n }).pipe(Effect.zipRight(evaluateAutoeval(input, frozenMaterial, apiKey, model).pipe(Effect.flatMap((result): Effect.Effect<JudgeMeasurementResult> => {\n if (typeof result.score !== \"number\" || !Number.isFinite(result.score) || result.score < 0 || result.score > 1) {\n return Effect.succeed(evaluatorError(\"judge-invalid-response\", \"Judge returned no finite score in [0, 1]\"));\n }\n const rationale = result.metadata?.rationale;\n return Effect.succeed({\n state: \"measured\" as const,\n value: result.score,\n evidence: evidenceFor(frozenMaterial),\n ...(typeof rationale === \"string\" && rationale.trim() !== \"\" ? { explanation: summaryText(rationale) } : {}),\n });\n }), Effect.catchAll((failure: JudgeProviderFailure): Effect.Effect<JudgeMeasurementResult> => Effect.gen(function* () {\n const error = failure.error;\n if (!isTransportFailure(error))\n return evaluatorError(\"judge-evaluator-error\", errorSummary(error));\n if (!isTransientJudgeFailure(error) || attempt + 1 >= JUDGE_MAX_ATTEMPTS) {\n return unavailable(\"judge-call-failed\", judgeFailureEvidence(error, model, attempts, retried));\n }\n const retryAfter = retryAfterMs(objectField(error, \"headers\"), yield* Clock.currentTimeMillis);\n const delay = retryAfter ?? (input.random ? input.random() : yield* Random.next) * JUDGE_RETRY_BASE_DELAY_MS * 2 ** attempt;\n retried = true;\n yield* judgeSleep(delay);\n return yield* evaluate(attempt + 1);\n })))));\n return evaluate(0).pipe(Effect.timeoutTo({\n duration: resolved.timeoutMs,\n onSuccess: (evaluation) => evaluation,\n onTimeout: () => unavailableForCall(model, resolved.timeoutMs, attempts, retried),\n }));\n });\n return interruptibleByCaller(evaluation, input.signal);\n}\n/** Assert-first bridge: one provider Promise adaptation in the Attempt Effect. */\nexport function evaluateJudgeMeasurement(input: JudgeRecipeExecution): Effect.Effect<MeasurementAssertionEvaluation, never, never> {\n return evaluateJudgeRecipe(input);\n}\n"]}
1
+ {"version":3,"file":"judge.js","sourceRoot":"","sources":["judge.ts"],"names":[],"mappings":";;;;;AA2MA,kDAKC;AAqDD,4CAaC;AAgBD,sDAIC;AA0FD,4DA0CC;AA1aD,2EAA2E;AAC3E,6DAA6D;AAC7D,yCAA0D;AAC1D,mCAA+C;AAC/C,oDAA4B;AAC5B,6CAA2C;AAG3C,wCAAoC;AACpC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAuB7B,SAAS,YAAY,CAAC,KAAc;IAChC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AACD,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAC3C,OAAO,SAAS,CAAC;IACrB,IAAI,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AACD,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACtD,OAAO,MAAM,CAAC;QAClB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;YAClE,OAAO,YAAY,CAAC;QACxB,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,SAAS,CAAC,KAAc;IAC7B,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE;YACvC,OAAO,IAAI,CAAC;QAChB,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,EAAE;YACnD,OAAO,UAAU,CAAC;QACtB,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,WAAW,CAAC,OAAgB,EAAE,IAAY;IAC/C,IAAI,OAAO,YAAY,OAAO;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAC/C,OAAO,SAAS,CAAC;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YACxD,OAAO,KAAK,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,YAAY,CAAC,OAAgB,EAAE,KAAa;IACjD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,GAAG;QACJ,OAAO,SAAS,CAAC;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnF,CAAC;AACD,SAAS,sBAAsB,CAAC,MAA0B;IACtD,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;AACxG,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAc;IACvC,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,IAAI,KAAK,mBAAmB;YAC5B,OAAO,KAAK,CAAC;QACjB,IAAI,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,2BAA2B;YACrE,OAAO,IAAI,CAAC;QAChB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,4EAA4E,CAAC,IAAI,CAAC,IAAI,CAAC;YACnH,OAAO,IAAI,CAAC;QAChB,IAAI,mLAAmL,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAClN,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAc;IACtC,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AACD,SAAS,uBAAuB,CAAC,KAAc;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AAClG,CAAC;AASD;;;GAGG;AACH,SAAS,oBAAoB,CAAC,MAAmB;IAC7C,OAAO,eAAM,CAAC,KAAK,CAAQ,CAAC,MAAM,EAAE,EAAE;QAClC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,WAAW,GAAG,GAAG,EAAE;YACrB,IAAI,SAAS;gBACT,OAAO;YACX,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,CAAC,eAAM,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,yEAAyE;QACzE,2CAA2C;QAC3C,IAAI,MAAM,CAAC,OAAO;YACd,WAAW,EAAE,CAAC;QAClB,OAAO,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACpB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,qBAAqB,CAAU,MAA8B,EAAE,MAA+B;IACnG,IAAI,MAAM,KAAK,SAAS;QACpB,OAAO,MAAM,CAAC;IAClB,OAAO,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO;QACtC,CAAC,CAAC,eAAM,CAAC,SAAS;QAClB,CAAC,CAAC,eAAM,CAAC,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AACD,SAAS,aAAa,CAAC,EAAU;IAC7B,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1E,CAAC;AACD,SAAS,oBAAoB,CAAC,KAAc,EAAE,KAAa,EAAE,QAAgB,EAAE,OAAgB;IAC3F,MAAM,KAAK,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS;QACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,QAAQ,IAAI,kBAAkB;QAC9B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AACD,SAAS,WAAW,CAAC,MAAc,EAAE,OAAe,EAAE,MAAoB;IACtE,OAAO,IAAI,gBAAM,CAAC;QACd,MAAM;QACN,OAAO;QACP,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,MAAM;YACT,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC5B,GAAG,IAAI;gBACP,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;aACzE,CAAC;YACF,CAAC,CAAC,SAAS;KAClB,CAAC,CAAC;AACP,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IAGxC,6GAA6G;IAC7G,OAAO,EAAE,MAAM,EAAE,CAAC;AACtB,CAAC;AACD,SAAgB,mBAAmB,CAAC,QAAuB;IACvD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjI,MAAM,IAAI,SAAS,CAAC,6DAA6D,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7E,CAAC;AACD,SAAS,oBAAoB,CAAC,QAA6B;IACvD,IAAI,CAAC,QAAQ,CAAC,KAAK;QACf,OAAO,WAAW,CAAC,wBAAwB,CAAC,CAAC;IACjD,IAAI,CAAC,IAAA,gBAAM,EAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,OAAO,WAAW,CAAC,yBAAyB,QAAQ,CAAC,SAAS,SAAS,CAAC,CAAC;IAC7E,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC/C,SAAS,YAAY,CAAC,KAA0B,EAAE,MAAc,EAAE,QAAgB,EAAE,OAAe,EAAE,YAAqC;IACtI,MAAM,KAAK,GAAG,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;YACtC,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;gBACxB,sEAAsE;gBACtE,wEAAwE;gBACxE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,mBAAmB,EAAE;oBACzD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;oBAClF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,EAAE,CAAC;oBACrH,MAAM,EAAE,YAAY;iBACvB,CAAC,CAAC;gBACH,OAAO;oBACH,QAAQ;oBACR,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;iBACjE,CAAC;YACN,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAwB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;SACpF,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACpB,OAAO,SAAS,CAAC;QACrB,IAAI,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,kBAAkB,EAAE,CAAC;YACnF,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,cAAK,CAAC,iBAAiB,CAAC,CAAC;YACtF,IAAI,KAAK,KAAK,SAAS;gBACnB,KAAK,CAAC,CAAC,eAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,OAAO,6BAA6B,QAAQ,KAAK,KAAK,CAAC,KAAK,WAAW,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACrI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,WAAW,CAAC;QACvB,QAAQ,EAAE,gBAAgB;QAC1B,SAAS,EAAE,GAAsB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;KACtE,CAAC,CAAC,CAAC;IACJ,OAAO,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC;AACD,SAAS,mBAAmB,CAAC,OAA0B,EAAE,KAA0B,EAAE,QAAgB;IACjG,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACvC,OAAO,gCAAgC,QAAQ,KAAK,KAAK,CAAC,KAAK,WAAW,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACzG,CAAC;IACD,OAAO,6BAA6B,QAAQ,KAAK,KAAK,CAAC,KAAK,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AACpG,CAAC;AACD;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAA0B,EAAE,MAAoB;IAC7E,OAAO,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,IAAA,gBAAM,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM;YACvB,OAAO,eAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,CAAC,OAAe,EAAqC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU;YAC9K,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,eAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,eAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,kBAAkB;YACtF,CAAC,CAAC,eAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC/D,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAa,EAAE,SAAiB,EAAE,QAAgB,EAAE,OAAgB;IAC5F,OAAO,WAAW,CAAC,mBAAmB,EAAE,SAAS,KAAK,sBAAsB,aAAa,CAAC,SAAS,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,eAAe,QAAQ,EAAE,CAAC,CAAC;AACrK,CAAC;AACD,SAAS,WAAW,CAAC,MAAc,EAAE,QAAiB;IAClD,OAAO;QACH,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,oBAAoB;QAC5B,MAAM;QACN,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;KAClD,CAAC;AACN,CAAC;AACD,SAAS,cAAc,CAAC,IAAY,EAAE,OAAe;IACjD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/C,CAAC;AACD,gFAAgF;AAChF,SAAgB,qBAAqB,CAAC,KAAsC;IACxE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;IAChH,CAAC;AACL,CAAC;AASD,SAAS,gBAAgB,CAAC,KAA2B,EAAE,QAAuB,EAAE,MAAc,EAAE,KAAa;IACzG,MAAM,QAAQ,GAAG,eAAM,CAAC,UAAU,CAAC;QAC/B,GAAG,EAAE,CAAC,YAAY,EAAE,EAAE;YAClB,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5F,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU;gBAC9C,CAAC,CAAC,IAAA,oBAAQ,EAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC3G,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY;oBAC3B,CAAC,CAAC,IAAA,sBAAU,EAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;oBAC7G,CAAC,CAAC,IAAA,mBAAO,EAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QACxH,CAAC;QACD,KAAK,EAAE,CAAC,KAAK,EAAwB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;KACpF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AACpB,CAAC;AACD,SAAS,UAAU,CAAC,OAAe;IAC/B,OAAO,eAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AACD;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAA2B;IACpD,MAAM,UAAU,GAAG,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAClC,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,OAAO,KAAK,SAAS;YACrB,OAAO,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAA,gBAAM,EAAC,QAAQ,CAAC,SAAS,CAAE,CAAC;QAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAyC,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1F,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAyC,EAAE;YACjJ,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC7G,OAAO,eAAM,CAAC,OAAO,CAAC,cAAc,CAAC,wBAAwB,EAAE,0CAA0C,CAAC,CAAC,CAAC;YAChH,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC7C,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACnD,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC/C,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;YACrD,OAAO,eAAM,CAAC,OAAO,CAAC;gBAClB,KAAK,EAAE,UAAmB;gBAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE;oBACtE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAA,wBAAW,EAAC,gBAAgB,CAAC,EAAE;oBAC7C,CAAC,CAAC,EAAE,CAAC;gBACT,GAAG,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAA,wBAAW,EAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5G,GAAG,CAAC,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAA,wBAAW,EAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtH,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;oBAChC,CAAC,CAAC;wBACE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB;6BACrC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;6BACZ,MAAM,CAAC,CAAC,QAAQ,EAAsB,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;6BAChG,GAAG,CAAC,wBAAW,CAAC,CAAC;qBACzB;oBACD,CAAC,CAAC,EAAE,CAAC;aACZ,CAAC,CAAC;QACP,CAAC,CAAC,EAAE,eAAM,CAAC,QAAQ,CAAC,CAAC,OAA6B,EAAyC,EAAE,CAAC,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9G,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAC1B,OAAO,cAAc,CAAC,uBAAuB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC;gBACvE,OAAO,WAAW,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACnG,CAAC;YACD,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,cAAK,CAAC,iBAAiB,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAG,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,yBAAyB,GAAG,CAAC,IAAI,OAAO,CAAC;YAC5H,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,SAAS,CAAC;YACrC,QAAQ,EAAE,QAAQ,CAAC,SAAS;YAC5B,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU;YACrC,SAAS,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;SACpF,CAAC,CAAC,CAAC;IACR,CAAC,CAAC,CAAC;IACH,OAAO,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AACD,kFAAkF;AAClF,SAAgB,wBAAwB,CAAC,KAA2B;IAChE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAkC,EAAE;QACzF,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,UAAU;gBACX,OAAO,MAAM,CAAC,MAAM,CAAC;oBACjB,KAAK,EAAE,UAAmB;oBAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;wBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,SAAS;4BACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;4BACjE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACnE,SAAS,EAAE,MAAM,CAAC,WAAW,KAAK,SAAS;4BACvC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;4BACjE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;wBACtE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS;4BAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;4BACjE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;wBACjE,SAAS,EAAE,MAAM,CAAC,SAAS,KAAK,SAAS;4BACrC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;4BACjE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;qBACvE,CAAC;iBACL,CAAC,CAAC;YACP,KAAK,aAAa;gBACd,OAAO,MAAM,CAAC,MAAM,CAAC;oBACjB,KAAK,EAAE,aAAsB;oBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;wBAClB,aAAa,EAAE,MAAM,CAAC,MAAM;wBAC5B,eAAe,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;wBACnG,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;wBAC1E,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;wBACzE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;wBACvE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;qBAC7E,CAAC;iBACL,CAAC,CAAC;YACP,KAAK,SAAS;gBACV,OAAO,MAAM,CAAC,MAAM,CAAC;oBACjB,KAAK,EAAE,SAAkB;oBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;iBACxE,CAAC,CAAC;QACX,CAAC;IACL,CAAC,CAAC,CAAC,CAAC;AACR,CAAC","sourcesContent":["// Native LLM-as-Judge evaluator. The Assert-first path keeps provider I/O,\n// timeout, retry, and interruption inside the owning Effect.\nimport { ClosedQA, Factuality, Summary } from \"autoevals\";\nimport { Clock, Effect, Random } from \"effect\";\nimport OpenAI from \"openai\";\nimport { summaryText } from \"./display.ts\";\nimport type { MeasurementAssertionEvaluation } from \"./api.ts\";\nimport type { JudgeMaterial, ResolvedJudgeConfig } from \"./types.ts\";\nimport { getEnv } from \"../util.ts\";\nconst JUDGE_MAX_ATTEMPTS = 3;\nconst JUDGE_RETRY_BASE_DELAY_MS = 1000;\nconst PROBE_TIMEOUT_MS = 20000;\nconst PROBE_MAX_ATTEMPTS = 2;\nexport type JudgeRecipe = \"closedQA\" | \"factuality\" | \"summarizes\";\ntype AutoevalResult = {\n score?: number | null;\n metadata?: Record<string, unknown>;\n};\ntype JudgeMeasurementResult = {\n readonly state: \"measured\";\n readonly value: number;\n readonly evidence?: string;\n readonly explanation?: string;\n readonly detail?: string;\n readonly citations?: readonly string[];\n} | {\n readonly state: \"unavailable\";\n readonly reason: \"source-unavailable\";\n readonly detail: string;\n readonly evidence?: string;\n} | {\n readonly state: \"errored\";\n readonly code: string;\n readonly message: string;\n};\nfunction errorSummary(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return message.replace(/\\s+/g, \" \").slice(0, 300);\n}\nfunction objectField(value: unknown, key: string): unknown {\n if (typeof value !== \"object\" || value === null)\n return undefined;\n try {\n return Reflect.get(value, key);\n }\n catch {\n return undefined;\n }\n}\nfunction judgeStatus(error: unknown): number | undefined {\n let current: unknown = error;\n for (let depth = 0; current !== undefined && depth < 5; depth++) {\n const status = objectField(current, \"status\");\n if (typeof status === \"number\" && Number.isInteger(status))\n return status;\n const nested = objectField(current, \"error\");\n const nestedStatus = objectField(nested, \"status\");\n if (typeof nestedStatus === \"number\" && Number.isInteger(nestedStatus))\n return nestedStatus;\n current = objectField(current, \"cause\");\n }\n return undefined;\n}\nfunction judgeCode(error: unknown): string | undefined {\n let current: unknown = error;\n for (let depth = 0; current !== undefined && depth < 5; depth++) {\n const code = objectField(current, \"code\");\n if (typeof code === \"string\" && code !== \"\")\n return code;\n const nestedCode = objectField(objectField(current, \"error\"), \"code\");\n if (typeof nestedCode === \"string\" && nestedCode !== \"\")\n return nestedCode;\n current = objectField(current, \"cause\");\n }\n return undefined;\n}\nfunction headerValue(headers: unknown, name: string): string | undefined {\n if (headers instanceof Headers)\n return headers.get(name) ?? undefined;\n if (typeof headers !== \"object\" || headers === null)\n return undefined;\n const lower = name.toLowerCase();\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === lower && typeof value === \"string\")\n return value;\n }\n return undefined;\n}\nfunction retryAfterMs(headers: unknown, nowMs: number): number | undefined {\n const raw = headerValue(headers, \"retry-after\")?.trim();\n if (!raw)\n return undefined;\n const seconds = Number(raw);\n if (Number.isFinite(seconds) && seconds >= 0)\n return Math.round(seconds * 1000);\n const timestamp = Date.parse(raw);\n return Number.isFinite(timestamp) ? Math.max(0, timestamp - nowMs) : undefined;\n}\nfunction isTransientJudgeStatus(status: number | undefined): boolean {\n return status === 408 || status === 429 || (status !== undefined && status >= 500 && status <= 599);\n}\nfunction isConnectionFailure(error: unknown): boolean {\n let current: unknown = error;\n for (let depth = 0; current !== undefined && depth < 5; depth++) {\n const name = objectField(current, \"name\");\n const code = objectField(current, \"code\");\n if (name === \"APIUserAbortError\")\n return false;\n if (name === \"APIConnectionError\" || name === \"APIConnectionTimeoutError\")\n return true;\n if (typeof code === \"string\" && /^(?:ECONN|ENOTFOUND|EAI_AGAIN|ENETUNREACH|EHOSTUNREACH|ETIMEDOUT|ERR_TLS)/i.test(code))\n return true;\n if (/fetch failed|socket hang up|connection (?:reset|closed|refused)|network error|other side closed|timed? out|timeout|\\b(?:ECONNRESET|ECONNREFUSED|ENOTFOUND|EAI_AGAIN|ETIMEDOUT)\\b/i.test(errorSummary(current))) {\n return true;\n }\n current = objectField(current, \"cause\");\n }\n return false;\n}\nfunction isTransportFailure(error: unknown): boolean {\n return judgeStatus(error) !== undefined || isConnectionFailure(error);\n}\nfunction isTransientJudgeFailure(error: unknown): boolean {\n const status = judgeStatus(error);\n return isTransientJudgeStatus(status) || (status === undefined && isConnectionFailure(error));\n}\ninterface JudgeProviderFailure {\n readonly _tag: \"JudgeProviderFailure\";\n readonly error: unknown;\n}\ninterface JudgeProbeTimeout {\n readonly _tag: \"JudgeProbeTimeout\";\n}\ntype JudgeProbeFailure = JudgeProviderFailure | JudgeProbeTimeout;\n/**\n * An author-facing AbortSignal is external to this fiber. It must interrupt\n * the owning Effect instead of being reclassified as a Judge result.\n */\nfunction interruptWhenAborted(signal: AbortSignal): Effect.Effect<never> {\n return Effect.async<never>((resume) => {\n let completed = false;\n const interrupted = () => {\n if (completed)\n return;\n completed = true;\n resume(Effect.interrupt);\n };\n signal.addEventListener(\"abort\", interrupted, { once: true });\n // Register first, then inspect state so an abort cannot fall between the\n // initial check and listener installation.\n if (signal.aborted)\n interrupted();\n return Effect.sync(() => {\n completed = true;\n signal.removeEventListener(\"abort\", interrupted);\n });\n });\n}\nfunction interruptibleByCaller<A, E, R>(effect: Effect.Effect<A, E, R>, signal: AbortSignal | undefined): Effect.Effect<A, E, R> {\n if (signal === undefined)\n return effect;\n return Effect.suspend(() => signal.aborted\n ? Effect.interrupt\n : Effect.raceFirst(effect, interruptWhenAborted(signal)));\n}\nfunction formatSeconds(ms: number): string {\n const seconds = ms / 1000;\n return `${Number.isInteger(seconds) ? seconds : seconds.toFixed(1)}s`;\n}\nfunction judgeFailureEvidence(error: unknown, model: string, attempts: number, retried: boolean): string {\n const parts = [`model=${model}`];\n const status = judgeStatus(error);\n const code = judgeCode(error);\n if (status !== undefined)\n parts.push(`HTTP ${status}`);\n if (code !== undefined)\n parts.push(`code=${code}`);\n parts.push(errorSummary(error));\n parts.push(retried ? `retry=yes · attempts=${attempts}` : \"retry=no\");\n if (attempts >= JUDGE_MAX_ATTEMPTS)\n parts.push(\"retries exhausted\");\n return parts.join(\" · \");\n}\nfunction judgeClient(apiKey: string, baseURL: string, signal?: AbortSignal): OpenAI {\n return new OpenAI({\n apiKey,\n baseURL,\n maxRetries: 0,\n fetch: signal\n ? (input, init) => fetch(input, {\n ...init,\n signal: init?.signal ? AbortSignal.any([signal, init.signal]) : signal,\n })\n : undefined,\n });\n}\ntype AutoevalOpenAIClient = NonNullable<Parameters<typeof ClosedQA>[0][\"client\"]>;\nfunction bridgeAutoevalClient(client: OpenAI): {\n readonly client: AutoevalOpenAIClient;\n} {\n // @ts-expect-error autoevals and this package resolve equivalent OpenAI SDKs through distinct peer contexts.\n return { client };\n}\nexport function freezeJudgeMaterial(material: JudgeMaterial): JudgeMaterial {\n if (typeof material !== \"object\" || material === null || typeof material.input !== \"string\" || typeof material.output !== \"string\") {\n throw new TypeError(\"t.judge requires material { input: string, output: string }\");\n }\n return Object.freeze({ input: material.input, output: material.output });\n}\nfunction missingConfiguration(resolved: ResolvedJudgeConfig): JudgeMeasurementResult | undefined {\n if (!resolved.model)\n return unavailable(\"judge-model-unresolved\");\n if (!getEnv(resolved.apiKeyEnv))\n return unavailable(`judge-key-unresolved (${resolved.apiKeyEnv} unset)`);\n return undefined;\n}\nconst retryProbe = Symbol(\"retry-judge-probe\");\nfunction probeAttempt(judge: ResolvedJudgeConfig, apiKey: string, endpoint: string, attempt: number, callerSignal: AbortSignal | undefined): Effect.Effect<string | undefined | typeof retryProbe, JudgeProbeFailure> {\n const probe = Effect.gen(function* () {\n const response = yield* Effect.tryPromise({\n try: async (effectSignal) => {\n // This is the probe's sole Promise adapter boundary. The Effect fiber\n // owns provider cancellation; caller aborts interrupt that fiber first.\n const response = await fetch(`${endpoint}/chat/completions`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", Authorization: `Bearer ${apiKey}` },\n body: JSON.stringify({ model: judge.model, messages: [{ role: \"user\", content: \"Reply with the single word: ok\" }] }),\n signal: effectSignal,\n });\n return {\n response,\n body: response.ok ? \"\" : await response.text().catch(() => \"\"),\n };\n },\n catch: (error): JudgeProviderFailure => ({ _tag: \"JudgeProviderFailure\", error }),\n });\n if (response.response.ok)\n return undefined;\n if (isTransientJudgeStatus(response.response.status) && attempt < PROBE_MAX_ATTEMPTS) {\n const delay = retryAfterMs(response.response.headers, yield* Clock.currentTimeMillis);\n if (delay !== undefined)\n yield* Effect.sleep(delay);\n return retryProbe;\n }\n return `Judge precheck failed for ${endpoint} (${judge.model}): HTTP ${response.response.status} ${response.body.slice(0, 300)}`;\n }).pipe(Effect.timeoutFail({\n duration: PROBE_TIMEOUT_MS,\n onTimeout: (): JudgeProbeTimeout => ({ _tag: \"JudgeProbeTimeout\" }),\n }));\n return interruptibleByCaller(probe, callerSignal);\n}\nfunction probeFailureMessage(failure: JudgeProbeFailure, judge: ResolvedJudgeConfig, endpoint: string): string {\n if (failure._tag === \"JudgeProbeTimeout\") {\n return `Judge precheck timed out for ${endpoint} (${judge.model}) after ${PROBE_TIMEOUT_MS / 1000}s`;\n }\n return `Judge precheck failed for ${endpoint} (${judge.model}): ${errorSummary(failure.error)}`;\n}\n/**\n * A precheck only tests a configured, credentialed endpoint. Missing model or\n * key remains a normal zero-network unavailable Assertion when an author consumes it.\n */\nexport function probeJudgeEffect(judge: ResolvedJudgeConfig, signal?: AbortSignal): Effect.Effect<string | undefined> {\n return Effect.suspend(() => {\n const apiKey = getEnv(judge.apiKeyEnv);\n if (!judge.model || !apiKey)\n return Effect.succeed(undefined);\n const endpoint = judge.baseUrl.replace(/\\/$/, \"\");\n const probe = (attempt: number): Effect.Effect<string | undefined> => probeAttempt(judge, apiKey, endpoint, attempt, signal).pipe(Effect.flatMap((result) => result === retryProbe\n ? probe(attempt + 1)\n : Effect.succeed(result)), Effect.catchAll((failure) => attempt === PROBE_MAX_ATTEMPTS\n ? Effect.succeed(probeFailureMessage(failure, judge, endpoint))\n : probe(attempt + 1)));\n return probe(1);\n });\n}\nfunction unavailableForCall(model: string, timeoutMs: number, attempts: number, retried: boolean): JudgeMeasurementResult {\n return unavailable(\"judge-call-failed\", `model=${model} · timed out after ${formatSeconds(timeoutMs)} · retry=${retried ? \"yes\" : \"no\"} · attempts=${attempts}`);\n}\nfunction unavailable(detail: string, evidence?: string): JudgeMeasurementResult {\n return {\n state: \"unavailable\",\n reason: \"source-unavailable\",\n detail,\n ...(evidence === undefined ? {} : { evidence }),\n };\n}\nfunction evaluatorError(code: string, message: string): JudgeMeasurementResult {\n return { state: \"errored\", code, message };\n}\n/** Throws synchronously at the author callsite when the Eval did not opt in. */\nexport function assertJudgeCapability(judge: ResolvedJudgeConfig | undefined): asserts judge is ResolvedJudgeConfig {\n if (judge === undefined) {\n throw new Error(\"Judge Assertion requires defineEval({ judge: true }) or defineScoreEval({ judge: true })\");\n }\n}\nexport interface JudgeRecipeExecution {\n readonly judge: ResolvedJudgeConfig;\n readonly recipe: JudgeRecipe;\n readonly reference: string;\n readonly material: JudgeMaterial;\n readonly signal?: AbortSignal;\n readonly random?: () => number;\n}\nfunction evaluateAutoeval(input: JudgeRecipeExecution, material: JudgeMaterial, apiKey: string, model: string): Effect.Effect<AutoevalResult, JudgeProviderFailure> {\n const provider = Effect.tryPromise({\n try: (effectSignal) => {\n const client = bridgeAutoevalClient(judgeClient(apiKey, input.judge.baseUrl, effectSignal));\n return Promise.resolve(input.recipe === \"closedQA\"\n ? ClosedQA({ input: material.input, output: material.output, criteria: input.reference, model, ...client })\n : input.recipe === \"factuality\"\n ? Factuality({ input: material.input, output: material.output, expected: input.reference, model, ...client })\n : Summary({ input: material.input, output: material.output, expected: input.reference, model, ...client }));\n },\n catch: (error): JudgeProviderFailure => ({ _tag: \"JudgeProviderFailure\", error }),\n });\n return provider;\n}\nfunction judgeSleep(delayMs: number): Effect.Effect<void> {\n return Effect.sleep(delayMs);\n}\n/**\n * The real Judge invocation. Provider I/O is adapted once, then retry,\n * timeout, interruption, and delay remain inside the owning Effect.\n */\nfunction evaluateJudgeRecipe(input: JudgeRecipeExecution): Effect.Effect<JudgeMeasurementResult> {\n const evaluation = Effect.suspend(() => {\n const { judge: resolved } = input;\n const frozenMaterial = freezeJudgeMaterial(input.material);\n const missing = missingConfiguration(resolved);\n if (missing !== undefined)\n return Effect.succeed(missing);\n const model = resolved.model!;\n const apiKey = getEnv(resolved.apiKeyEnv)!;\n let attempts = 0;\n let retried = false;\n const evaluate = (attempt: number): Effect.Effect<JudgeMeasurementResult> => Effect.sync(() => {\n attempts = attempt + 1;\n }).pipe(Effect.zipRight(evaluateAutoeval(input, frozenMaterial, apiKey, model).pipe(Effect.flatMap((result): Effect.Effect<JudgeMeasurementResult> => {\n if (typeof result.score !== \"number\" || !Number.isFinite(result.score) || result.score < 0 || result.score > 1) {\n return Effect.succeed(evaluatorError(\"judge-invalid-response\", \"Judge returned no finite score in [0, 1]\"));\n }\n const rationale = result.metadata?.rationale;\n const returnedEvidence = result.metadata?.evidence;\n const returnedDetail = result.metadata?.detail;\n const returnedCitations = result.metadata?.citations;\n return Effect.succeed({\n state: \"measured\" as const,\n value: result.score,\n ...(typeof returnedEvidence === \"string\" && returnedEvidence.trim() !== \"\"\n ? { evidence: summaryText(returnedEvidence) }\n : {}),\n ...(typeof rationale === \"string\" && rationale.trim() !== \"\" ? { explanation: summaryText(rationale) } : {}),\n ...(typeof returnedDetail === \"string\" && returnedDetail.trim() !== \"\" ? { detail: summaryText(returnedDetail) } : {}),\n ...(Array.isArray(returnedCitations)\n ? {\n citations: Object.freeze(returnedCitations\n .slice(0, 16)\n .filter((citation): citation is string => typeof citation === \"string\" && citation.trim() !== \"\")\n .map(summaryText)),\n }\n : {}),\n });\n }), Effect.catchAll((failure: JudgeProviderFailure): Effect.Effect<JudgeMeasurementResult> => Effect.gen(function* () {\n const error = failure.error;\n if (!isTransportFailure(error))\n return evaluatorError(\"judge-evaluator-error\", errorSummary(error));\n if (!isTransientJudgeFailure(error) || attempt + 1 >= JUDGE_MAX_ATTEMPTS) {\n return unavailable(\"judge-call-failed\", judgeFailureEvidence(error, model, attempts, retried));\n }\n const retryAfter = retryAfterMs(objectField(error, \"headers\"), yield* Clock.currentTimeMillis);\n const delay = retryAfter ?? (input.random ? input.random() : yield* Random.next) * JUDGE_RETRY_BASE_DELAY_MS * 2 ** attempt;\n retried = true;\n yield* judgeSleep(delay);\n return yield* evaluate(attempt + 1);\n })))));\n return evaluate(0).pipe(Effect.timeoutTo({\n duration: resolved.timeoutMs,\n onSuccess: (evaluation) => evaluation,\n onTimeout: () => unavailableForCall(model, resolved.timeoutMs, attempts, retried),\n }));\n });\n return interruptibleByCaller(evaluation, input.signal);\n}\n/** Assert-first bridge: one provider Promise adaptation in the Attempt Effect. */\nexport function evaluateJudgeMeasurement(input: JudgeRecipeExecution): Effect.Effect<MeasurementAssertionEvaluation, never, never> {\n return evaluateJudgeRecipe(input).pipe(Effect.map((result): MeasurementAssertionEvaluation => {\n switch (result.state) {\n case \"measured\":\n return Object.freeze({\n state: \"measured\" as const,\n value: result.value,\n detail: Object.freeze({\n evidence: result.evidence === undefined\n ? Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" })\n : Object.freeze({ state: \"available\", value: result.evidence }),\n rationale: result.explanation === undefined\n ? Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" })\n : Object.freeze({ state: \"available\", value: result.explanation }),\n detail: result.detail === undefined\n ? Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" })\n : Object.freeze({ state: \"available\", value: result.detail }),\n citations: result.citations === undefined\n ? Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" })\n : Object.freeze({ state: \"available\", value: result.citations }),\n }),\n });\n case \"unavailable\":\n return Object.freeze({\n state: \"unavailable\" as const,\n reason: result.reason,\n detail: Object.freeze({\n failureDetail: result.detail,\n failureEvidence: result.evidence ?? Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" }),\n rationale: Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" }),\n evidence: Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" }),\n detail: Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" }),\n citations: Object.freeze({ state: \"unavailable\", reason: \"not-recorded\" }),\n }),\n });\n case \"errored\":\n return Object.freeze({\n state: \"errored\" as const,\n detail: Object.freeze({ code: result.code, message: result.message }),\n });\n }\n }));\n}\n"]}
@@ -1085,6 +1085,9 @@ function assertManagedEventMatch(value, label = "match") {
1085
1085
  async function evaluateToolMatchCollection(match, occurrences, options) {
1086
1086
  const sampledCandidates = [];
1087
1087
  let matchCount = 0;
1088
+ let mismatchCount = 0;
1089
+ let unavailableCount = 0;
1090
+ let examined = 0;
1088
1091
  let firstMatch;
1089
1092
  let firstUnavailable;
1090
1093
  let exactOverage;
@@ -1094,6 +1097,7 @@ async function evaluateToolMatchCollection(match, occurrences, options) {
1094
1097
  candidate: occurrence,
1095
1098
  result: await evaluateBooleanMatch(match, occurrence),
1096
1099
  });
1100
+ examined += 1;
1097
1101
  if (sampledCandidates.length < limits_ts_1.assertionRuntimeLimits.collectionDiagnosticCandidates) {
1098
1102
  sampledCandidates.push(candidate);
1099
1103
  }
@@ -1102,16 +1106,36 @@ async function evaluateToolMatchCollection(match, occurrences, options) {
1102
1106
  firstMatch ??= candidate;
1103
1107
  if (options.quantifier.kind === "exact" && matchCount === options.quantifier.count + 1) {
1104
1108
  exactOverage = candidate;
1109
+ break;
1105
1110
  }
1111
+ if (options.quantifier.kind === "absent")
1112
+ break;
1113
+ if (options.quantifier.kind === "at-least" && matchCount === options.quantifier.count)
1114
+ break;
1106
1115
  }
1107
1116
  else if (candidate.result.state === "unavailable") {
1117
+ unavailableCount += 1;
1108
1118
  firstUnavailable ??= candidate;
1109
1119
  }
1120
+ else {
1121
+ mismatchCount += 1;
1122
+ }
1110
1123
  }
1111
1124
  const unavailableReason = firstUnavailable?.result.state === "unavailable"
1112
1125
  ? firstUnavailable.result.reason
1113
1126
  : options.coverageReason;
1114
1127
  const incomplete = unavailableReason !== undefined;
1128
+ const exhaustive = options.coverageReason === undefined && examined === occurrences.length;
1129
+ const receipt = (decisive) => Object.freeze({
1130
+ examined,
1131
+ matched: matchCount,
1132
+ mismatched: mismatchCount,
1133
+ unavailable: unavailableCount,
1134
+ knownTotal: occurrences.length,
1135
+ complete: options.coverageReason === undefined,
1136
+ exhaustive,
1137
+ decisive,
1138
+ });
1115
1139
  const received = `${matchCount} definite match${matchCount === 1 ? "" : "es"}`;
1116
1140
  const candidateLocator = (candidate) => candidate === undefined ? undefined : { kind: "tool-occurrence", id: candidate.candidate.id };
1117
1141
  const diagnosticSample = (...decisive) => {
@@ -1138,65 +1162,65 @@ async function evaluateToolMatchCollection(match, occurrences, options) {
1138
1162
  if (options.quantifier.kind === "absent") {
1139
1163
  const first = firstMatch;
1140
1164
  if (first !== undefined) {
1141
- return mismatched(diagnostic("tool-absence-mismatch", `notCalledTool(${match.name}) observed a matching tool`, {
1142
- expected: `no ${match.name}`,
1143
- received,
1144
- locator: candidateLocator(first),
1145
- ...diagnosticSample(first),
1146
- }));
1165
+ return Object.freeze({ ...mismatched(diagnostic("tool-absence-mismatch", `notCalledTool(${match.name}) observed a matching tool`, {
1166
+ expected: `no ${match.name}`,
1167
+ received,
1168
+ locator: candidateLocator(first),
1169
+ ...diagnosticSample(first),
1170
+ })), receipt: receipt(true) });
1147
1171
  }
1148
1172
  if (incomplete) {
1149
- return unavailable(unavailableReason, diagnostic("tool-absence-unavailable", `notCalledTool(${match.name}) cannot prove absence`, {
1173
+ return Object.freeze({ ...unavailable(unavailableReason, diagnostic("tool-absence-unavailable", `notCalledTool(${match.name}) cannot prove absence`, {
1174
+ expected: `no ${match.name}`,
1175
+ received,
1176
+ reason: unavailableReason,
1177
+ ...diagnosticSample(firstUnavailable),
1178
+ })), receipt: receipt(false) });
1179
+ }
1180
+ return Object.freeze({ ...matched(undefined, diagnostic("tool-absence-match", `notCalledTool(${match.name}) observed no matching tool`, {
1150
1181
  expected: `no ${match.name}`,
1151
1182
  received,
1152
- reason: unavailableReason,
1153
- ...diagnosticSample(firstUnavailable),
1154
- }));
1155
- }
1156
- return matched(undefined, diagnostic("tool-absence-match", `notCalledTool(${match.name}) observed no matching tool`, {
1157
- expected: `no ${match.name}`,
1158
- received,
1159
- ...diagnosticSample(),
1160
- }));
1183
+ ...diagnosticSample(),
1184
+ })), receipt: receipt(true) });
1161
1185
  }
1162
1186
  const { kind, count } = options.quantifier;
1163
1187
  const expected = kind === "exact" ? `exactly ${count} × ${match.name}` : `at least ${count} × ${match.name}`;
1164
1188
  if (kind === "exact" && matchCount > count) {
1165
1189
  const overage = exactOverage;
1166
- return mismatched(diagnostic("tool-count-exceeded", `calledTool(${match.name}) exceeded its exact count`, {
1167
- expected,
1168
- received,
1169
- locator: candidateLocator(overage),
1170
- ...diagnosticSample(overage),
1171
- }));
1190
+ return Object.freeze({ ...mismatched(diagnostic("tool-count-exceeded", `calledTool(${match.name}) exceeded its exact count`, {
1191
+ expected,
1192
+ received,
1193
+ locator: candidateLocator(overage),
1194
+ ...diagnosticSample(overage),
1195
+ })), receipt: receipt(true) });
1172
1196
  }
1173
1197
  if (kind === "at-least" && matchCount >= count) {
1174
- return matched(firstMatch?.candidate, diagnostic("tool-count-match", `calledTool(${match.name}) satisfied its lower bound`, {
1175
- expected,
1176
- received,
1177
- ...diagnosticSample(firstMatch),
1178
- }));
1198
+ return Object.freeze({ ...matched(firstMatch?.candidate, diagnostic("tool-count-match", `calledTool(${match.name}) satisfied its lower bound`, {
1199
+ expected,
1200
+ received,
1201
+ ...diagnosticSample(firstMatch),
1202
+ })), receipt: receipt(true) });
1179
1203
  }
1180
1204
  if (kind === "exact" && matchCount === count && !incomplete) {
1181
- return matched(firstMatch?.candidate, diagnostic("tool-count-match", `calledTool(${match.name}) satisfied its exact count`, {
1182
- expected,
1183
- received,
1184
- ...diagnosticSample(firstMatch),
1185
- }));
1205
+ return Object.freeze({ ...matched(firstMatch?.candidate, diagnostic("tool-count-match", `calledTool(${match.name}) satisfied its exact count`, {
1206
+ expected,
1207
+ received,
1208
+ ...diagnosticSample(firstMatch),
1209
+ })), receipt: receipt(true) });
1186
1210
  }
1187
1211
  if (incomplete) {
1188
- return unavailable(unavailableReason, diagnostic("tool-count-unavailable", `calledTool(${match.name}) cannot decide its count`, {
1212
+ return Object.freeze({ ...unavailable(unavailableReason, diagnostic("tool-count-unavailable", `calledTool(${match.name}) cannot decide its count`, {
1213
+ expected,
1214
+ received,
1215
+ reason: unavailableReason,
1216
+ ...diagnosticSample(firstUnavailable),
1217
+ })), receipt: receipt(false) });
1218
+ }
1219
+ return Object.freeze({ ...mismatched(diagnostic("tool-count-mismatch", `calledTool(${match.name}) did not satisfy its count`, {
1189
1220
  expected,
1190
1221
  received,
1191
- reason: unavailableReason,
1192
- ...diagnosticSample(firstUnavailable),
1193
- }));
1194
- }
1195
- return mismatched(diagnostic("tool-count-mismatch", `calledTool(${match.name}) did not satisfy its count`, {
1196
- expected,
1197
- received,
1198
- ...diagnosticSample(),
1199
- }));
1222
+ ...diagnosticSample(),
1223
+ })), receipt: receipt(true) });
1200
1224
  }
1201
1225
  function commandResult(occurrence, executable, argsStart, excludes) {
1202
1226
  const projection = occurrence.command;