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
@@ -6,7 +6,7 @@ declare const InspectionOperationError_base: new <A extends Record<string, any>
6
6
  } & Readonly<A>;
7
7
  /** Typed browser-neutral failure from one fixed Inspection operation. */
8
8
  export declare class InspectionOperationError extends InspectionOperationError_base<{
9
- readonly code: "inspection-request-invalid" | "inspection-selection-missing" | "inspection-record-integrity-failure" | "inspection-operation-failed" | "inspection-result-invalid" | "evidence-budget-exceeded" | "restart-required";
9
+ readonly code: "inspection-request-invalid" | "inspection-selection-missing" | "inspection-record-integrity-failure" | "inspection-operation-failed" | "inspection-result-invalid" | "evidence-budget-exceeded" | "restart-required" | "current-target-unavailable";
10
10
  readonly operation: InspectionOperationId;
11
11
  readonly reason: string;
12
12
  readonly identity?: {
@@ -6,7 +6,7 @@ declare const InspectionOperationError_base: new <A extends Record<string, any>
6
6
  } & Readonly<A>;
7
7
  /** Typed browser-neutral failure from one fixed Inspection operation. */
8
8
  export declare class InspectionOperationError extends InspectionOperationError_base<{
9
- readonly code: "inspection-request-invalid" | "inspection-selection-missing" | "inspection-record-integrity-failure" | "inspection-operation-failed" | "inspection-result-invalid" | "evidence-budget-exceeded" | "restart-required";
9
+ readonly code: "inspection-request-invalid" | "inspection-selection-missing" | "inspection-record-integrity-failure" | "inspection-operation-failed" | "inspection-result-invalid" | "evidence-budget-exceeded" | "restart-required" | "current-target-unavailable";
10
10
  readonly operation: InspectionOperationId;
11
11
  readonly reason: string;
12
12
  readonly identity?: {
@@ -6,7 +6,7 @@ declare const InspectionOperationError_base: new <A extends Record<string, any>
6
6
  } & Readonly<A>;
7
7
  /** Typed browser-neutral failure from one fixed Inspection operation. */
8
8
  export declare class InspectionOperationError extends InspectionOperationError_base<{
9
- readonly code: "inspection-request-invalid" | "inspection-selection-missing" | "inspection-record-integrity-failure" | "inspection-operation-failed" | "inspection-result-invalid" | "evidence-budget-exceeded" | "restart-required";
9
+ readonly code: "inspection-request-invalid" | "inspection-selection-missing" | "inspection-record-integrity-failure" | "inspection-operation-failed" | "inspection-result-invalid" | "evidence-budget-exceeded" | "restart-required" | "current-target-unavailable";
10
10
  readonly operation: InspectionOperationId;
11
11
  readonly reason: string;
12
12
  readonly identity?: {
@@ -5,6 +5,10 @@ exports.operationalInspectionSource = operationalInspectionSource;
5
5
  exports.externalInspectionSource = externalInspectionSource;
6
6
  exports.openInspectionSource = openInspectionSource;
7
7
  exports.openHostOwnedInspectionSource = openHostOwnedInspectionSource;
8
+ // @concord-file ne-eval-inspection-source
9
+ // @concord-implements docs/feature/inspection/README.md
10
+ // @concord-implements docs/feature/inspection/architecture.md
11
+ // @concord-implements docs/feature/insight/README.md
8
12
  const node_fs_1 = require("node:fs");
9
13
  const node_path_1 = require("node:path");
10
14
  const effect_1 = require("effect");
@@ -1 +1 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["source.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { Data, Effect } from \"effect\";\nimport type * as Scope from \"effect/Scope\";\nimport { RecordIntegrityFailure } from \"../record/reader/errors.ts\";\nimport { EMPTY_PUBLICATION_CUTOFF_IDENTITY } from \"../run/protocol.ts\";\nimport { openHostOwnedRecordReadSession, acquireProjectRecordReadSession, RECORD_SQLITE_VALIDATION_DEADLINE_MS, type AttemptLocatorCandidates, type CollectionItemPage, type ContentChunkPage, type PinnedRecordReadSession, type SealedRunCore, type SealedRunCutoff, type SealedRunSummaryPage, } from \"../record/sqlite/index.ts\";\nimport { startExternalRecordImport } from \"../record/sqlite/external-record-import.ts\";\nimport type { ReadableRunResource } from \"../run/storage/types.ts\";\nexport type InspectionSource = {\n readonly kind: \"project-record\";\n readonly databasePath: string;\n} | {\n readonly kind: \"external-record\";\n readonly recordPath: string;\n};\nexport class InspectionSourceError extends Data.TaggedError(\"InspectionSourceError\")<{\n readonly code: \"inspection-source-invalid\";\n readonly reason: string;\n readonly cause?: unknown;\n}> {\n}\n/** Safe Inspection identity for a Record publication that is not closed. */\nexport class InspectionIntegrityError extends Data.TaggedError(\"InspectionIntegrityError\")<{\n readonly code: \"inspection-record-integrity-failure\";\n readonly runId: string;\n}> {\n}\n/** Browser-neutral fixed reader capability backed by one pinned Record generation. */\nexport interface InspectionFactSource {\n readonly kind: InspectionSource[\"kind\"];\n readonly cutoff: () => SealedRunCutoff;\n readonly readRunResource: (runId: string) => ReadableRunResource | undefined;\n readonly readSealedRunSummaryPage: (afterRunId?: string, pageSize?: number, expectedCutoffIdentity?: string) => SealedRunSummaryPage;\n readonly findAttemptLocatorCandidates: (locator: string, maximumCandidateRuns: number) => AttemptLocatorCandidates;\n readonly readSealedRunCore: (runId: string) => SealedRunCore | undefined;\n readonly readContentPage: (contentId: string, afterOrdinal: number, pageSize: number) => ContentChunkPage;\n readonly readCollectionPage: (attachmentId: string, afterOrdinal: number, pageSize: number) => CollectionItemPage;\n}\n/** Pure source selection; opening and validation happen only inside a Scope. */\nexport function operationalInspectionSource(cwd: string): InspectionSource {\n return Object.freeze({\n kind: \"project-record\" as const,\n databasePath: resolve(cwd, \".niceeval/record.sqlite\"),\n });\n}\nexport function externalInspectionSource(cwd: string, pathname: string): InspectionSource {\n return Object.freeze({\n kind: \"external-record\" as const,\n recordPath: resolve(cwd, pathname),\n });\n}\n/**\n * Acquires exactly one pinned Record reader. Every fixed operation in the\n * returned source sees the same generation, and Scope closes the session on\n * success, typed failure, defect, or interruption.\n */\nexport function openInspectionSource(source: InspectionSource): Effect.Effect<InspectionFactSource, InspectionSourceError | InspectionIntegrityError, Scope.Scope> {\n return Effect.gen(function* () {\n let session: PinnedRecordReadSession;\n if (source.kind === \"project-record\") {\n if (!existsSync(source.databasePath))\n return emptyOperationalFacts();\n session = yield* acquireProjectRecordReadSession(dirname(source.databasePath)).pipe(Effect.mapError(sourceError));\n }\n else {\n const importDeadline = Date.now() + RECORD_SQLITE_VALIDATION_DEADLINE_MS;\n const importer = yield* Effect.acquireRelease(Effect.try({\n try: () => startExternalRecordImport(source.recordPath, importDeadline),\n catch: (cause) => sourceError(cause),\n }), (handle) => Effect.promise(() => handle.close().catch(() => undefined)));\n const generation = yield* Effect.tryPromise({\n // Declaring the AbortSignal keeps this await interruptible. Scope then\n // terminates the Worker and removes its private generation.\n try: (_signal) => importer.result,\n catch: (cause) => sourceError(cause),\n });\n session = yield* Effect.acquireRelease(Effect.try({\n try: () => openHostOwnedRecordReadSession(generation.path),\n catch: (cause) => sourceError(cause),\n }), (opened) => Effect.sync(() => opened.close()));\n }\n return sessionFacts(session, source.kind);\n });\n}\n/** Opens one already-imported private generation without accepting a public path. */\nexport function openHostOwnedInspectionSource(recordPath: string): Effect.Effect<InspectionFactSource, InspectionSourceError | InspectionIntegrityError, Scope.Scope> {\n return Effect.gen(function* () {\n const session = yield* Effect.acquireRelease(Effect.try({\n try: () => openHostOwnedRecordReadSession(recordPath),\n catch: (cause) => sourceError(cause),\n }), (opened) => Effect.sync(() => opened.close()));\n return sessionFacts(session, \"external-record\");\n });\n}\nconst EMPTY_OPERATIONAL_CUTOFF = Object.freeze({\n identity: EMPTY_PUBLICATION_CUTOFF_IDENTITY,\n runCount: 0,\n});\nfunction emptyOperationalFacts(): InspectionFactSource {\n return Object.freeze({\n kind: \"project-record\" as const,\n cutoff: () => EMPTY_OPERATIONAL_CUTOFF,\n readRunResource: () => undefined,\n readSealedRunSummaryPage: (afterRunId = \"\", _pageSize = 100, expectedCutoffIdentity?: string) => {\n if (expectedCutoffIdentity !== undefined && expectedCutoffIdentity !== EMPTY_OPERATIONAL_CUTOFF.identity) {\n throw new InspectionSourceError({\n code: \"inspection-source-invalid\",\n reason: \"The empty operational publication cutoff changed; restart pagination.\",\n });\n }\n return Object.freeze({\n cutoff: EMPTY_OPERATIONAL_CUTOFF,\n afterRunId,\n summaries: Object.freeze([]),\n nextAfterRunId: null,\n });\n },\n findAttemptLocatorCandidates: (locator: string) => Object.freeze({\n locator,\n ambiguous: false,\n candidates: Object.freeze([]),\n }),\n readSealedRunCore: () => undefined,\n readContentPage: (contentId: string, afterOrdinal: number) => Object.freeze({\n contentId,\n afterOrdinal,\n chunks: Object.freeze([]),\n nextOrdinal: null,\n }),\n readCollectionPage: (attachmentId: string, afterOrdinal: number) => Object.freeze({\n attachmentId,\n afterOrdinal,\n items: Object.freeze([]),\n nextOrdinal: null,\n }),\n });\n}\nfunction sessionFacts(session: PinnedRecordReadSession, kind: InspectionSource[\"kind\"]): InspectionFactSource {\n let observedCutoff: SealedRunCutoff | undefined;\n const remember = (page: SealedRunSummaryPage): SealedRunSummaryPage => {\n if (observedCutoff !== undefined && observedCutoff.identity !== page.cutoff.identity) {\n throw new InspectionSourceError({\n code: \"inspection-source-invalid\",\n reason: \"Pinned Record session changed its sealed cutoff.\",\n });\n }\n observedCutoff = page.cutoff;\n return page;\n };\n const readPage = (afterRunId = \"\", pageSize = 100, expectedCutoffIdentity?: string): SealedRunSummaryPage => remember(session.readSealedRunSummaryPage(afterRunId, pageSize, expectedCutoffIdentity ?? observedCutoff?.identity));\n return Object.freeze({\n kind,\n cutoff: () => observedCutoff ?? readPage(\"\", 1).cutoff,\n readRunResource: (runId: string) => session.readRunResource(runId),\n readSealedRunSummaryPage: readPage,\n findAttemptLocatorCandidates: (locator: string, maximumCandidateRuns: number) => session.findAttemptLocatorCandidates(locator, maximumCandidateRuns),\n readSealedRunCore: (runId: string) => session.readSealedRunCore(runId),\n readContentPage: (contentId: string, afterOrdinal: number, pageSize: number) => session.readContentChunkPage(contentId, afterOrdinal, pageSize),\n readCollectionPage: (attachmentId: string, afterOrdinal: number, pageSize: number) => session.readCollectionItemPage(attachmentId, afterOrdinal, pageSize),\n });\n}\nfunction sourceError(cause: unknown): InspectionSourceError | InspectionIntegrityError {\n if (cause instanceof RecordIntegrityFailure) {\n return new InspectionIntegrityError({\n code: \"inspection-record-integrity-failure\",\n runId: cause.runId,\n });\n }\n return new InspectionSourceError({\n code: \"inspection-source-invalid\",\n reason: cause instanceof Error ? cause.message : \"Record source validation failed\",\n cause,\n });\n}\n"]}
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["source.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-eval-inspection-source\n// @concord-implements docs/feature/inspection/README.md\n// @concord-implements docs/feature/inspection/architecture.md\n// @concord-implements docs/feature/insight/README.md\nimport { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { Data, Effect } from \"effect\";\nimport type * as Scope from \"effect/Scope\";\nimport { RecordIntegrityFailure } from \"../record/reader/errors.ts\";\nimport { EMPTY_PUBLICATION_CUTOFF_IDENTITY } from \"../run/protocol.ts\";\nimport { openHostOwnedRecordReadSession, acquireProjectRecordReadSession, RECORD_SQLITE_VALIDATION_DEADLINE_MS, type AttemptLocatorCandidates, type CollectionItemPage, type ContentChunkPage, type PinnedRecordReadSession, type SealedRunCore, type SealedRunCutoff, type SealedRunSummaryPage, } from \"../record/sqlite/index.ts\";\nimport { startExternalRecordImport } from \"../record/sqlite/external-record-import.ts\";\nimport type { ReadableRunResource } from \"../run/storage/types.ts\";\nexport type InspectionSource = {\n readonly kind: \"project-record\";\n readonly databasePath: string;\n} | {\n readonly kind: \"external-record\";\n readonly recordPath: string;\n};\nexport class InspectionSourceError extends Data.TaggedError(\"InspectionSourceError\")<{\n readonly code: \"inspection-source-invalid\";\n readonly reason: string;\n readonly cause?: unknown;\n}> {\n}\n/** Safe Inspection identity for a Record publication that is not closed. */\nexport class InspectionIntegrityError extends Data.TaggedError(\"InspectionIntegrityError\")<{\n readonly code: \"inspection-record-integrity-failure\";\n readonly runId: string;\n}> {\n}\n/** Browser-neutral fixed reader capability backed by one pinned Record generation. */\nexport interface InspectionFactSource {\n readonly kind: InspectionSource[\"kind\"];\n readonly cutoff: () => SealedRunCutoff;\n readonly readRunResource: (runId: string) => ReadableRunResource | undefined;\n readonly readSealedRunSummaryPage: (afterRunId?: string, pageSize?: number, expectedCutoffIdentity?: string) => SealedRunSummaryPage;\n readonly findAttemptLocatorCandidates: (locator: string, maximumCandidateRuns: number) => AttemptLocatorCandidates;\n readonly readSealedRunCore: (runId: string) => SealedRunCore | undefined;\n readonly readContentPage: (contentId: string, afterOrdinal: number, pageSize: number) => ContentChunkPage;\n readonly readCollectionPage: (attachmentId: string, afterOrdinal: number, pageSize: number) => CollectionItemPage;\n}\n/** Pure source selection; opening and validation happen only inside a Scope. */\nexport function operationalInspectionSource(cwd: string): InspectionSource {\n return Object.freeze({\n kind: \"project-record\" as const,\n databasePath: resolve(cwd, \".niceeval/record.sqlite\"),\n });\n}\nexport function externalInspectionSource(cwd: string, pathname: string): InspectionSource {\n return Object.freeze({\n kind: \"external-record\" as const,\n recordPath: resolve(cwd, pathname),\n });\n}\n/**\n * Acquires exactly one pinned Record reader. Every fixed operation in the\n * returned source sees the same generation, and Scope closes the session on\n * success, typed failure, defect, or interruption.\n */\nexport function openInspectionSource(source: InspectionSource): Effect.Effect<InspectionFactSource, InspectionSourceError | InspectionIntegrityError, Scope.Scope> {\n return Effect.gen(function* () {\n let session: PinnedRecordReadSession;\n if (source.kind === \"project-record\") {\n if (!existsSync(source.databasePath))\n return emptyOperationalFacts();\n session = yield* acquireProjectRecordReadSession(dirname(source.databasePath)).pipe(Effect.mapError(sourceError));\n }\n else {\n const importDeadline = Date.now() + RECORD_SQLITE_VALIDATION_DEADLINE_MS;\n const importer = yield* Effect.acquireRelease(Effect.try({\n try: () => startExternalRecordImport(source.recordPath, importDeadline),\n catch: (cause) => sourceError(cause),\n }), (handle) => Effect.promise(() => handle.close().catch(() => undefined)));\n const generation = yield* Effect.tryPromise({\n // Declaring the AbortSignal keeps this await interruptible. Scope then\n // terminates the Worker and removes its private generation.\n try: (_signal) => importer.result,\n catch: (cause) => sourceError(cause),\n });\n session = yield* Effect.acquireRelease(Effect.try({\n try: () => openHostOwnedRecordReadSession(generation.path),\n catch: (cause) => sourceError(cause),\n }), (opened) => Effect.sync(() => opened.close()));\n }\n return sessionFacts(session, source.kind);\n });\n}\n/** Opens one already-imported private generation without accepting a public path. */\nexport function openHostOwnedInspectionSource(recordPath: string): Effect.Effect<InspectionFactSource, InspectionSourceError | InspectionIntegrityError, Scope.Scope> {\n return Effect.gen(function* () {\n const session = yield* Effect.acquireRelease(Effect.try({\n try: () => openHostOwnedRecordReadSession(recordPath),\n catch: (cause) => sourceError(cause),\n }), (opened) => Effect.sync(() => opened.close()));\n return sessionFacts(session, \"external-record\");\n });\n}\nconst EMPTY_OPERATIONAL_CUTOFF = Object.freeze({\n identity: EMPTY_PUBLICATION_CUTOFF_IDENTITY,\n runCount: 0,\n});\nfunction emptyOperationalFacts(): InspectionFactSource {\n return Object.freeze({\n kind: \"project-record\" as const,\n cutoff: () => EMPTY_OPERATIONAL_CUTOFF,\n readRunResource: () => undefined,\n readSealedRunSummaryPage: (afterRunId = \"\", _pageSize = 100, expectedCutoffIdentity?: string) => {\n if (expectedCutoffIdentity !== undefined && expectedCutoffIdentity !== EMPTY_OPERATIONAL_CUTOFF.identity) {\n throw new InspectionSourceError({\n code: \"inspection-source-invalid\",\n reason: \"The empty operational publication cutoff changed; restart pagination.\",\n });\n }\n return Object.freeze({\n cutoff: EMPTY_OPERATIONAL_CUTOFF,\n afterRunId,\n summaries: Object.freeze([]),\n nextAfterRunId: null,\n });\n },\n findAttemptLocatorCandidates: (locator: string) => Object.freeze({\n locator,\n ambiguous: false,\n candidates: Object.freeze([]),\n }),\n readSealedRunCore: () => undefined,\n readContentPage: (contentId: string, afterOrdinal: number) => Object.freeze({\n contentId,\n afterOrdinal,\n chunks: Object.freeze([]),\n nextOrdinal: null,\n }),\n readCollectionPage: (attachmentId: string, afterOrdinal: number) => Object.freeze({\n attachmentId,\n afterOrdinal,\n items: Object.freeze([]),\n nextOrdinal: null,\n }),\n });\n}\nfunction sessionFacts(session: PinnedRecordReadSession, kind: InspectionSource[\"kind\"]): InspectionFactSource {\n let observedCutoff: SealedRunCutoff | undefined;\n const remember = (page: SealedRunSummaryPage): SealedRunSummaryPage => {\n if (observedCutoff !== undefined && observedCutoff.identity !== page.cutoff.identity) {\n throw new InspectionSourceError({\n code: \"inspection-source-invalid\",\n reason: \"Pinned Record session changed its sealed cutoff.\",\n });\n }\n observedCutoff = page.cutoff;\n return page;\n };\n const readPage = (afterRunId = \"\", pageSize = 100, expectedCutoffIdentity?: string): SealedRunSummaryPage => remember(session.readSealedRunSummaryPage(afterRunId, pageSize, expectedCutoffIdentity ?? observedCutoff?.identity));\n return Object.freeze({\n kind,\n cutoff: () => observedCutoff ?? readPage(\"\", 1).cutoff,\n readRunResource: (runId: string) => session.readRunResource(runId),\n readSealedRunSummaryPage: readPage,\n findAttemptLocatorCandidates: (locator: string, maximumCandidateRuns: number) => session.findAttemptLocatorCandidates(locator, maximumCandidateRuns),\n readSealedRunCore: (runId: string) => session.readSealedRunCore(runId),\n readContentPage: (contentId: string, afterOrdinal: number, pageSize: number) => session.readContentChunkPage(contentId, afterOrdinal, pageSize),\n readCollectionPage: (attachmentId: string, afterOrdinal: number, pageSize: number) => session.readCollectionItemPage(attachmentId, afterOrdinal, pageSize),\n });\n}\nfunction sourceError(cause: unknown): InspectionSourceError | InspectionIntegrityError {\n if (cause instanceof RecordIntegrityFailure) {\n return new InspectionIntegrityError({\n code: \"inspection-record-integrity-failure\",\n runId: cause.runId,\n });\n }\n return new InspectionSourceError({\n code: \"inspection-source-invalid\",\n reason: cause instanceof Error ? cause.message : \"Record source validation failed\",\n cause,\n });\n}\n"]}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectAttemptSources = projectAttemptSources;
4
+ // @concord-file ne-eval-inspection-sources
5
+ // @concord-implements docs/feature/inspection/README.md
6
+ // @concord-implements docs/feature/inspection/architecture.md
4
7
  const effect_1 = require("effect");
5
8
  const protocol_ts_1 = require("../record/attachment/protocol.cjs");
6
9
  const content_ts_1 = require("../record/attachment/content.cjs");
@@ -11,6 +14,8 @@ const limits_ts_1 = require("./limits.cjs");
11
14
  const SOURCE_TEXT_BYTE_LIMIT = 256 * 1024;
12
15
  const SOURCE_RESULT_HEADROOM = 1024;
13
16
  const CONTENT_PAGE_SIZE = 64;
17
+ // @concord-code ne-eval-inspection-project-sources
18
+ // @concord-implements docs/feature/inspection/architecture.md
14
19
  function projectAttemptSources(source, attachment, assertions) {
15
20
  const assertionsRead = readAssertionSites(assertions);
16
21
  let state = attachment === undefined ? "not-recorded" : "available";
@@ -1 +1 @@
1
- {"version":3,"file":"sources.js","sourceRoot":"","sources":["sources.ts"],"names":[],"mappings":"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","sourcesContent":["import { Result } from \"effect\";\nimport { hydrateRecordAttachmentCurrent, } from \"../record/attachment/protocol.ts\";\nimport { mintRecordContentHandle, type RecordContentHandle, } from \"../record/attachment/content.ts\";\nimport { NiceEvalCurrentRecordAttachments, NiceEvalRecordAttachments, } from \"../record/family/current.ts\";\nimport type { PersistedContentMetadata, SealedAttachmentMetadata, } from \"../record/sqlite/index.ts\";\nimport { closeInspectionJson, isInspectionCodecError, type InspectionJson } from \"./codec.ts\";\nimport { InspectionSha256, utf8ByteLength } from \"./bytes.ts\";\nimport type { InspectionAssertionsRead } from \"./facts.ts\";\nimport { INSPECTION_RESULT_BYTE_LIMIT } from \"./limits.ts\";\nimport type { InspectionFactSource } from \"./source.ts\";\nimport type { InspectionSourcesResult } from \"./results.ts\";\nconst SOURCE_TEXT_BYTE_LIMIT = 256 * 1024;\nconst SOURCE_RESULT_HEADROOM = 1024;\nconst CONTENT_PAGE_SIZE = 64;\nexport interface SourcesAttachmentInput {\n readonly physical: SealedAttachmentMetadata;\n readonly value: InspectionJson;\n}\ninterface HydratedSourceItem {\n readonly sourceItemId: string;\n readonly path: string;\n readonly byteLength: number;\n readonly sha256: string;\n readonly content: RecordContentHandle;\n}\ninterface BoundSourceItem {\n readonly item: HydratedSourceItem;\n readonly content: PersistedContentMetadata;\n}\ntype AttachmentReadState = \"available\" | \"not-recorded\" | \"invalid\";\ninterface AvailableAssertions {\n readonly state: \"available\";\n readonly sourceSites: Extract<InspectionAssertionsRead, {\n readonly state: \"available\";\n }>[\"value\"][\"sourceSites\"];\n}\ninterface UnavailableAssertions {\n readonly state: \"not-recorded\" | \"invalid\";\n}\ntype AssertionsRead = AvailableAssertions | UnavailableAssertions;\ntype HydratedAssertionSourceSite = AvailableAssertions[\"sourceSites\"][number];\ninterface SourcePosition {\n readonly line: number;\n readonly column: number;\n}\nexport function projectAttemptSources(source: InspectionFactSource, attachment: SourcesAttachmentInput | undefined, assertions: InspectionAssertionsRead): InspectionSourcesResult {\n const assertionsRead = readAssertionSites(assertions);\n let state: AttachmentReadState = attachment === undefined ? \"not-recorded\" : \"available\";\n let decoded: readonly BoundSourceItem[] = [];\n if (attachment !== undefined) {\n try {\n decoded = hydrateSourceItems(attachment);\n }\n catch {\n state = \"invalid\";\n }\n }\n const items: InspectionSourcesResult[\"items\"][number][] = [];\n const requestedPositions = assertionSourcePositions(assertionsRead);\n const verifiedSourcePositions = new Map<string, ReadonlySet<string>>();\n let projectedBytes = jsonByteLength(Object.freeze({\n state,\n items: Object.freeze([]),\n hasMore: decoded.length > 0,\n omittedItemCount: decoded.length,\n }));\n let acceptProjectedItems = true;\n try {\n for (const entry of state === \"available\" ? decoded : []) {\n const omitted = projectedSourceItem(entry, omittedContent(entry.content.byteLength));\n const omittedBytes = jsonByteLength(omitted) + (items.length === 0 ? 0 : 1);\n const includeItem = acceptProjectedItems &&\n projectedBytes + omittedBytes <= INSPECTION_RESULT_BYTE_LIMIT - SOURCE_RESULT_HEADROOM;\n if (!includeItem)\n acceptProjectedItems = false;\n let projected = omitted;\n const positions = requestedPositions.get(entry.item.sourceItemId) ?? Object.freeze([]);\n const verified = positions.length > 0 || includeItem && entry.content.byteLength <= SOURCE_TEXT_BYTE_LIMIT\n ? readVerifiedSource(source, entry.content, positions)\n : undefined;\n if (verified !== undefined) {\n verifiedSourcePositions.set(entry.item.sourceItemId, verified.displayablePositions);\n }\n if (verified?.text !== undefined) {\n const available = projectedSourceItem(entry, Object.freeze({\n state: \"available\" as const,\n text: verified.text,\n }));\n const availableBytes = jsonByteLength(available) + (items.length === 0 ? 0 : 1);\n if (projectedBytes + availableBytes <= INSPECTION_RESULT_BYTE_LIMIT - SOURCE_RESULT_HEADROOM) {\n projected = available;\n }\n }\n if (!includeItem)\n continue;\n const itemBytes = jsonByteLength(projected) + (items.length === 0 ? 0 : 1);\n items.push(projected);\n projectedBytes += itemBytes;\n }\n }\n catch {\n state = \"invalid\";\n decoded = Object.freeze([]);\n items.splice(0, items.length);\n verifiedSourcePositions.clear();\n }\n const sourceItems = new Map(decoded.map((entry) => [entry.item.sourceItemId, entry] as const));\n const sites = assertionsRead.state === \"available\"\n ? assertionsRead.sourceSites.map((site) => projectAssertionSourceSite(site, state, sourceItems, verifiedSourcePositions))\n : [];\n let projectedSiteCount = sites.length;\n let result = sourceResult(state, items, decoded.length, assertionResult(assertionsRead, sites, projectedSiteCount));\n while (jsonByteLength(result) > INSPECTION_RESULT_BYTE_LIMIT && items.length > 0) {\n items.pop();\n result = sourceResult(state, items, decoded.length, assertionResult(assertionsRead, sites, projectedSiteCount));\n }\n while (jsonByteLength(result) > INSPECTION_RESULT_BYTE_LIMIT && projectedSiteCount > 0) {\n projectedSiteCount -= 1;\n result = sourceResult(state, items, decoded.length, assertionResult(assertionsRead, sites, projectedSiteCount));\n }\n if (jsonByteLength(result) > INSPECTION_RESULT_BYTE_LIMIT) {\n throw new Error(\"Sources projection cannot fit its fixed result byte limit\");\n }\n return result;\n}\nfunction assertionSourcePositions(assertions: AssertionsRead): ReadonlyMap<string, readonly SourcePosition[]> {\n const output = new Map<string, SourcePosition[]>();\n if (assertions.state !== \"available\")\n return output;\n for (const site of assertions.sourceSites) {\n const sourceItemId = site.source.value.sourceItemId;\n const positions = output.get(sourceItemId) ?? [];\n positions.push(site.start, site.end);\n output.set(sourceItemId, positions);\n }\n return new Map([...output].map(([sourceItemId, positions]) => [\n sourceItemId,\n Object.freeze(positions),\n ] as const));\n}\nfunction readAssertionSites(input: InspectionAssertionsRead): AssertionsRead {\n if (input.state === \"available\") {\n return Object.freeze({\n state: \"available\" as const,\n sourceSites: input.value.sourceSites,\n });\n }\n return Object.freeze({\n state: input.state === \"not-recorded\" ? \"not-recorded\" as const : \"invalid\" as const,\n });\n}\nfunction projectAssertionSourceSite(site: HydratedAssertionSourceSite, sourceState: AttachmentReadState, sourceItems: ReadonlyMap<string, BoundSourceItem>, verifiedSourcePositions: ReadonlyMap<string, ReadonlySet<string>>): Extract<InspectionSourcesResult[\"assertions\"], {\n readonly state: \"available\";\n}>[\"sourceSites\"][number] {\n const anchor = site.source.value;\n const item = sourceState === \"available\" ? sourceItems.get(anchor.sourceItemId) : undefined;\n const source = item === undefined || item.item.sha256 !== anchor.sha256\n ? unmappedSource(\"source-snapshot-not-recorded\")\n : !positionsAreDisplayable(verifiedSourcePositions.get(anchor.sourceItemId), site.start, site.end)\n ? unmappedSource(\"position-unrepresentable\")\n : Object.freeze({\n state: \"mapped\" as const,\n sourceItemId: anchor.sourceItemId,\n sha256: anchor.sha256,\n });\n return Object.freeze({\n entryId: site.entryId,\n sourceOrder: site.sourceOrder,\n role: site.role,\n start: Object.freeze({ line: site.start.line, column: site.start.column }),\n end: Object.freeze({ line: site.end.line, column: site.end.column }),\n source,\n });\n}\nfunction assertionResult(assertions: AssertionsRead, sites: readonly Extract<InspectionSourcesResult[\"assertions\"], {\n readonly state: \"available\";\n}>[\"sourceSites\"][number][], projectedSiteCount: number): InspectionSourcesResult[\"assertions\"] {\n if (assertions.state !== \"available\") {\n return Object.freeze({\n state: assertions.state,\n sourceSites: Object.freeze([] as const),\n hasMoreSourceSites: false as const,\n omittedSourceSiteCount: 0 as const,\n });\n }\n return Object.freeze({\n state: \"available\" as const,\n sourceSites: Object.freeze(sites.slice(0, projectedSiteCount)),\n hasMoreSourceSites: projectedSiteCount < sites.length,\n omittedSourceSiteCount: sites.length - projectedSiteCount,\n });\n}\nfunction unmappedSource(reason: \"source-snapshot-not-recorded\" | \"position-unrepresentable\"): Extract<Extract<InspectionSourcesResult[\"assertions\"], {\n readonly state: \"available\";\n}>[\"sourceSites\"][number][\"source\"], {\n readonly state: \"unmapped\";\n}> {\n return Object.freeze({ state: \"unmapped\" as const, reason });\n}\nfunction positionsAreDisplayable(positions: ReadonlySet<string> | undefined, start: SourcePosition, end: SourcePosition): boolean {\n return positions?.has(positionKey(start)) === true && positions.has(positionKey(end));\n}\nfunction positionKey(position: SourcePosition): string {\n return `${position.line}:${position.column}`;\n}\nfunction hydrateSourceItems(attachment: SourcesAttachmentInput): readonly BoundSourceItem[] {\n if (attachment.physical.ownerKind !== \"run\" ||\n attachment.physical.family !== NiceEvalRecordAttachments.sources.family ||\n attachment.physical.familyRevision !== NiceEvalCurrentRecordAttachments.sources.revision) {\n throw new Error(\"Sources Attachment requires migration before Inspection\");\n }\n const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content] as const));\n const byHydratedHandle = new WeakMap<object, PersistedContentMetadata>();\n const usedLogicalHandles = new Set<string>();\n const hydrated = hydrateRecordAttachmentCurrent(NiceEvalRecordAttachments.sources, attachment.value, {\n content: (token, declaration) => {\n const logicalHandle = exactMarker(token, \"$niceeval.record.content\");\n if (logicalHandle === undefined && !hasOwnMarker(token, \"$niceeval.record.content\")) {\n return Result.succeed(undefined);\n }\n const metadata = typeof logicalHandle === \"string\"\n ? byLogicalHandle.get(logicalHandle)\n : undefined;\n if (metadata === undefined || declaration.kind !== \"text\" ||\n declaration.maximumBytes !== undefined && metadata.byteLength > declaration.maximumBytes ||\n usedLogicalHandles.has(logicalHandle as string)) {\n return Result.fail({ code: \"current-content-bind-failed\" as const });\n }\n const handle = mintRecordContentHandle(\"text\");\n byHydratedHandle.set(handle, metadata);\n usedLogicalHandles.add(logicalHandle as string);\n return Result.succeed(handle);\n },\n reference: () => Result.succeed(undefined),\n });\n if (Result.isFailure(hydrated) || usedLogicalHandles.size !== attachment.physical.contents.length) {\n throw new Error(\"Sources Attachment content closure is invalid\");\n }\n const output: BoundSourceItem[] = [];\n for (const item of hydrated.success.items as readonly HydratedSourceItem[]) {\n const metadata = byHydratedHandle.get(item.content);\n if (metadata === undefined || metadata.byteLength !== item.byteLength || metadata.digest !== item.sha256) {\n throw new Error(\"Sources Attachment item does not match its sealed Content metadata\");\n }\n output.push(Object.freeze({ item, content: metadata }));\n }\n return Object.freeze(output);\n}\nfunction readVerifiedSource(source: InspectionFactSource, metadata: PersistedContentMetadata, positions: readonly SourcePosition[]): {\n readonly text?: string;\n readonly displayablePositions: ReadonlySet<string>;\n} {\n const digest = new InspectionSha256();\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const retainText = metadata.byteLength <= SOURCE_TEXT_BYTE_LIMIT;\n const text: string[] = [];\n const positionsByLine = new Map<number, Set<number>>();\n for (const position of positions) {\n const columns = positionsByLine.get(position.line) ?? new Set<number>();\n columns.add(position.column - 1);\n positionsByLine.set(position.line, columns);\n }\n const displayablePositions = new Set<string>();\n let offset = 0;\n let afterOrdinal = -1;\n let expectedOrdinal = 0;\n let observedChunks = 0;\n let line = 1;\n let column = 0;\n const markPosition = (byte: number | undefined): void => {\n const columns = positionsByLine.get(line);\n if (columns?.has(column) !== true)\n return;\n if (byte === undefined || byte === 0x0a || (byte & 192) !== 128) {\n displayablePositions.add(`${line}:${column + 1}`);\n }\n };\n while (true) {\n const page = source.readContentPage(metadata.contentId, afterOrdinal, CONTENT_PAGE_SIZE);\n if (page.contentId !== metadata.contentId || page.afterOrdinal !== afterOrdinal ||\n page.chunks.length === 0 && page.nextOrdinal !== null) {\n throw new Error(\"Sources Content page is invalid\");\n }\n for (const chunk of page.chunks) {\n if (chunk.ordinal !== expectedOrdinal || offset + chunk.bytes.byteLength > metadata.byteLength) {\n throw new Error(\"Sources Content chunk sequence is invalid\");\n }\n digest.update(chunk.bytes);\n const decoded = decoder.decode(chunk.bytes, { stream: true });\n if (retainText)\n text.push(decoded);\n for (const byte of chunk.bytes) {\n markPosition(byte);\n if (byte === 0x0a) {\n line += 1;\n column = 0;\n }\n else {\n column += 1;\n }\n }\n offset += chunk.bytes.byteLength;\n expectedOrdinal += 1;\n observedChunks += 1;\n }\n if (page.nextOrdinal === null)\n break;\n if (page.nextOrdinal !== expectedOrdinal - 1 || observedChunks > metadata.chunkCount) {\n throw new Error(\"Sources Content continuation is invalid\");\n }\n afterOrdinal = page.nextOrdinal;\n }\n const finalText = decoder.decode();\n if (retainText)\n text.push(finalText);\n markPosition(undefined);\n if (offset !== metadata.byteLength || observedChunks !== metadata.chunkCount ||\n digest.digestHex() !== metadata.digest) {\n throw new Error(\"Sources Content does not match its sealed metadata\");\n }\n return Object.freeze({\n ...(retainText ? { text: text.join(\"\") } : {}),\n displayablePositions,\n });\n}\nfunction projectedSourceItem(entry: BoundSourceItem, content: InspectionSourcesResult[\"items\"][number][\"content\"]): InspectionSourcesResult[\"items\"][number] {\n return Object.freeze({\n sourceItemId: entry.item.sourceItemId,\n path: entry.item.path,\n byteLength: entry.item.byteLength,\n sha256: entry.item.sha256,\n content,\n });\n}\nfunction omittedContent(byteLength: number): InspectionSourcesResult[\"items\"][number][\"content\"] {\n return Object.freeze({\n state: \"omitted\" as const,\n reason: \"inspection-result-byte-limit\" as const,\n byteLength,\n byteLimit: SOURCE_TEXT_BYTE_LIMIT,\n });\n}\nfunction sourceResult(state: AttachmentReadState, items: readonly InspectionSourcesResult[\"items\"][number][], total: number, assertions: InspectionSourcesResult[\"assertions\"]): InspectionSourcesResult {\n return Object.freeze({\n state,\n items: Object.freeze([...items]),\n hasMore: items.length < total,\n omittedItemCount: total - items.length,\n assertions,\n });\n}\nfunction exactMarker(value: unknown, key: string): unknown | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return undefined;\n const keys = Reflect.ownKeys(value);\n if (keys.length !== 1 || keys[0] !== key)\n return undefined;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor !== undefined && descriptor.enumerable && \"value\" in descriptor\n ? descriptor.value\n : undefined;\n}\nfunction hasOwnMarker(value: unknown, key: string): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) &&\n Object.prototype.hasOwnProperty.call(value, key);\n}\nfunction closeJson(value: unknown): InspectionJson {\n const closed = closeInspectionJson(value);\n if (isInspectionCodecError(closed))\n throw closed;\n return closed as InspectionJson;\n}\nfunction jsonByteLength(value: unknown): number {\n return utf8ByteLength(JSON.stringify(value));\n}\n"]}
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["sources.ts"],"names":[],"mappings":";;AAkDA,sDA+EC;AAjID,2CAA2C;AAC3C,wDAAwD;AACxD,8DAA8D;AAC9D,mCAAgC;AAChC,kEAAmF;AACnF,gEAAqG;AACrG,4DAA2G;AAE3G,yCAA8F;AAC9F,yCAA8D;AAE9D,2CAA2D;AAG3D,MAAM,sBAAsB,GAAG,GAAG,GAAG,IAAI,CAAC;AAC1C,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAgC7B,mDAAmD;AACnD,8DAA8D;AAC9D,SAAgB,qBAAqB,CAAC,MAA4B,EAAE,UAA8C,EAAE,UAAoC;IACpJ,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,KAAK,GAAwB,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC;IACzF,IAAI,OAAO,GAA+B,EAAE,CAAC;IAC7C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,CAAC;YACH,KAAK,GAAG,SAAS,CAAC;QACtB,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAA+C,EAAE,CAAC;IAC7D,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAA+B,CAAC;IACvE,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9C,KAAK;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAC3B,gBAAgB,EAAE,OAAO,CAAC,MAAM;KACnC,CAAC,CAAC,CAAC;IACJ,IAAI,oBAAoB,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,WAAW,GAAG,oBAAoB;gBACpC,cAAc,GAAG,YAAY,IAAI,wCAA4B,GAAG,sBAAsB,CAAC;YAC3F,IAAI,CAAC,WAAW;gBACZ,oBAAoB,GAAG,KAAK,CAAC;YACjC,IAAI,SAAS,GAAG,OAAO,CAAC;YACxB,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,sBAAsB;gBACtG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;gBACtD,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACxF,CAAC;YACD,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;oBACvD,KAAK,EAAE,WAAoB;oBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACtB,CAAC,CAAC,CAAC;gBACJ,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChF,IAAI,cAAc,GAAG,cAAc,IAAI,wCAA4B,GAAG,sBAAsB,EAAE,CAAC;oBAC3F,SAAS,GAAG,SAAS,CAAC;gBAC1B,CAAC;YACL,CAAC;YACD,IAAI,CAAC,WAAW;gBACZ,SAAS;YACb,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,cAAc,IAAI,SAAS,CAAC;QAChC,CAAC;IACL,CAAC;IACD,MAAM,CAAC;QACH,KAAK,GAAG,SAAS,CAAC;QAClB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,KAAK,WAAW;QAC9C,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC;QACzH,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC;IACtC,IAAI,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACpH,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,wCAA4B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/E,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,wCAA4B,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;QACrF,kBAAkB,IAAI,CAAC,CAAC;QACxB,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACpH,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,wCAA4B,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AACD,SAAS,wBAAwB,CAAC,UAA0B;IACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IACnD,IAAI,UAAU,CAAC,KAAK,KAAK,WAAW;QAChC,OAAO,MAAM,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;QAC1D,YAAY;QACZ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;KAClB,CAAC,CAAC,CAAC;AACjB,CAAC;AACD,SAAS,kBAAkB,CAAC,KAA+B;IACvD,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,KAAK,EAAE,WAAoB;YAC3B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;SACvC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,cAAuB,CAAC,CAAC,CAAC,SAAkB;KACvF,CAAC,CAAC;AACP,CAAC;AACD,SAAS,0BAA0B,CAAC,IAAiC,EAAE,WAAgC,EAAE,WAAiD,EAAE,uBAAiE;IAGzN,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,MAAM,IAAI,GAAG,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QACnE,CAAC,CAAC,cAAc,CAAC,8BAA8B,CAAC;QAChD,CAAC,CAAC,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;YAC9F,CAAC,CAAC,cAAc,CAAC,0BAA0B,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBACZ,KAAK,EAAE,QAAiB;gBACxB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM;aACxB,CAAC,CAAC;IACX,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1E,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACpE,MAAM;KACT,CAAC,CAAC;AACP,CAAC;AACD,SAAS,eAAe,CAAC,UAA0B,EAAE,KAE1B,EAAE,kBAA0B;IACnD,IAAI,UAAU,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAW,CAAC;YACvC,kBAAkB,EAAE,KAAc;YAClC,sBAAsB,EAAE,CAAU;SACrC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,WAAoB;QAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAC9D,kBAAkB,EAAE,kBAAkB,GAAG,KAAK,CAAC,MAAM;QACrD,sBAAsB,EAAE,KAAK,CAAC,MAAM,GAAG,kBAAkB;KAC5D,CAAC,CAAC;AACP,CAAC;AACD,SAAS,cAAc,CAAC,MAAmE;IAKvF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAmB,EAAE,MAAM,EAAE,CAAC,CAAC;AACjE,CAAC;AACD,SAAS,uBAAuB,CAAC,SAA0C,EAAE,KAAqB,EAAE,GAAmB;IACnH,OAAO,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1F,CAAC;AACD,SAAS,WAAW,CAAC,QAAwB;IACzC,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;AACjD,CAAC;AACD,SAAS,kBAAkB,CAAC,UAAkC;IAC1D,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,KAAK,KAAK;QACvC,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,sCAAyB,CAAC,OAAO,CAAC,MAAM;QACvE,UAAU,CAAC,QAAQ,CAAC,cAAc,KAAK,6CAAgC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC3F,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAU,CAAC,CAAC,CAAC;IAC1H,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAoC,CAAC;IACzE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAA,4CAA8B,EAAC,sCAAyB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE;QACjG,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;YAC5B,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;YACrE,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,0BAA0B,CAAC,EAAE,CAAC;gBAClF,OAAO,eAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,aAAa,KAAK,QAAQ;gBAC9C,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,QAAQ,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM;gBACrD,WAAW,CAAC,YAAY,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC,YAAY;gBACxF,kBAAkB,CAAC,GAAG,CAAC,aAAuB,CAAC,EAAE,CAAC;gBAClD,OAAO,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,6BAAsC,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;YAC/C,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvC,kBAAkB,CAAC,GAAG,CAAC,aAAuB,CAAC,CAAC;YAChD,OAAO,eAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,eAAM,CAAC,OAAO,CAAC,SAAS,CAAC;KAC7C,CAAC,CAAC;IACH,IAAI,eAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAsC,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACvG,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AACD,SAAS,kBAAkB,CAAC,MAA4B,EAAE,QAAkC,EAAE,SAAoC;IAI9H,MAAM,MAAM,GAAG,IAAI,2BAAgB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,sBAAsB,CAAC;IACjE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;IACvD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,YAAY,GAAG,CAAC,IAAwB,EAAQ,EAAE;QACpD,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;YAC7B,OAAO;QACX,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9D,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACL,CAAC,CAAC;IACF,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;QACzF,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY;YAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,KAAK,eAAe,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC7F,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,UAAU;gBACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAChB,IAAI,IAAI,CAAC,CAAC;oBACV,MAAM,GAAG,CAAC,CAAC;gBACf,CAAC;qBACI,CAAC;oBACF,MAAM,IAAI,CAAC,CAAC;gBAChB,CAAC;YACL,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;YACjC,eAAe,IAAI,CAAC,CAAC;YACrB,cAAc,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YACzB,MAAM;QACV,IAAI,IAAI,CAAC,WAAW,KAAK,eAAe,GAAG,CAAC,IAAI,cAAc,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;YACnF,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QACD,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;IACpC,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IACnC,IAAI,UAAU;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,YAAY,CAAC,SAAS,CAAC,CAAC;IACxB,IAAI,MAAM,KAAK,QAAQ,CAAC,UAAU,IAAI,cAAc,KAAK,QAAQ,CAAC,UAAU;QACxE,MAAM,CAAC,SAAS,EAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,oBAAoB;KACvB,CAAC,CAAC;AACP,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAsB,EAAE,OAA4D;IAC7G,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;QACrB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;QACjC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;QACzB,OAAO;KACV,CAAC,CAAC;AACP,CAAC;AACD,SAAS,cAAc,CAAC,UAAkB;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,SAAkB;QACzB,MAAM,EAAE,8BAAuC;QAC/C,UAAU;QACV,SAAS,EAAE,sBAAsB;KACpC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,YAAY,CAAC,KAA0B,EAAE,KAA0D,EAAE,KAAa,EAAE,UAAiD;IAC1K,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,KAAK;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAChC,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK;QAC7B,gBAAgB,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM;QACtC,UAAU;KACb,CAAC,CAAC;AACP,CAAC;AACD,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnE,OAAO,SAAS,CAAC;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QACpC,OAAO,SAAS,CAAC;IACrB,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/D,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,IAAI,OAAO,IAAI,UAAU;QAC7E,CAAC,CAAC,UAAU,CAAC,KAAK;QAClB,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AACD,SAAS,YAAY,CAAC,KAAc,EAAE,GAAW;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AACD,SAAS,SAAS,CAAC,KAAc;IAC7B,MAAM,MAAM,GAAG,IAAA,8BAAmB,EAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAA,iCAAsB,EAAC,MAAM,CAAC;QAC9B,MAAM,MAAM,CAAC;IACjB,OAAO,MAAwB,CAAC;AACpC,CAAC;AACD,SAAS,cAAc,CAAC,KAAc;IAClC,OAAO,IAAA,yBAAc,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC","sourcesContent":["// @concord-file ne-eval-inspection-sources\n// @concord-implements docs/feature/inspection/README.md\n// @concord-implements docs/feature/inspection/architecture.md\nimport { Result } from \"effect\";\nimport { hydrateRecordAttachmentCurrent, } from \"../record/attachment/protocol.ts\";\nimport { mintRecordContentHandle, type RecordContentHandle, } from \"../record/attachment/content.ts\";\nimport { NiceEvalCurrentRecordAttachments, NiceEvalRecordAttachments, } from \"../record/family/current.ts\";\nimport type { PersistedContentMetadata, SealedAttachmentMetadata, } from \"../record/sqlite/index.ts\";\nimport { closeInspectionJson, isInspectionCodecError, type InspectionJson } from \"./codec.ts\";\nimport { InspectionSha256, utf8ByteLength } from \"./bytes.ts\";\nimport type { InspectionAssertionsRead } from \"./facts.ts\";\nimport { INSPECTION_RESULT_BYTE_LIMIT } from \"./limits.ts\";\nimport type { InspectionFactSource } from \"./source.ts\";\nimport type { InspectionSourcesResult } from \"./results.ts\";\nconst SOURCE_TEXT_BYTE_LIMIT = 256 * 1024;\nconst SOURCE_RESULT_HEADROOM = 1024;\nconst CONTENT_PAGE_SIZE = 64;\nexport interface SourcesAttachmentInput {\n readonly physical: SealedAttachmentMetadata;\n readonly value: InspectionJson;\n}\ninterface HydratedSourceItem {\n readonly sourceItemId: string;\n readonly path: string;\n readonly byteLength: number;\n readonly sha256: string;\n readonly content: RecordContentHandle;\n}\ninterface BoundSourceItem {\n readonly item: HydratedSourceItem;\n readonly content: PersistedContentMetadata;\n}\ntype AttachmentReadState = \"available\" | \"not-recorded\" | \"invalid\";\ninterface AvailableAssertions {\n readonly state: \"available\";\n readonly sourceSites: Extract<InspectionAssertionsRead, {\n readonly state: \"available\";\n }>[\"value\"][\"sourceSites\"];\n}\ninterface UnavailableAssertions {\n readonly state: \"not-recorded\" | \"invalid\";\n}\ntype AssertionsRead = AvailableAssertions | UnavailableAssertions;\ntype HydratedAssertionSourceSite = AvailableAssertions[\"sourceSites\"][number];\ninterface SourcePosition {\n readonly line: number;\n readonly column: number;\n}\n// @concord-code ne-eval-inspection-project-sources\n// @concord-implements docs/feature/inspection/architecture.md\nexport function projectAttemptSources(source: InspectionFactSource, attachment: SourcesAttachmentInput | undefined, assertions: InspectionAssertionsRead): InspectionSourcesResult {\n const assertionsRead = readAssertionSites(assertions);\n let state: AttachmentReadState = attachment === undefined ? \"not-recorded\" : \"available\";\n let decoded: readonly BoundSourceItem[] = [];\n if (attachment !== undefined) {\n try {\n decoded = hydrateSourceItems(attachment);\n }\n catch {\n state = \"invalid\";\n }\n }\n const items: InspectionSourcesResult[\"items\"][number][] = [];\n const requestedPositions = assertionSourcePositions(assertionsRead);\n const verifiedSourcePositions = new Map<string, ReadonlySet<string>>();\n let projectedBytes = jsonByteLength(Object.freeze({\n state,\n items: Object.freeze([]),\n hasMore: decoded.length > 0,\n omittedItemCount: decoded.length,\n }));\n let acceptProjectedItems = true;\n try {\n for (const entry of state === \"available\" ? decoded : []) {\n const omitted = projectedSourceItem(entry, omittedContent(entry.content.byteLength));\n const omittedBytes = jsonByteLength(omitted) + (items.length === 0 ? 0 : 1);\n const includeItem = acceptProjectedItems &&\n projectedBytes + omittedBytes <= INSPECTION_RESULT_BYTE_LIMIT - SOURCE_RESULT_HEADROOM;\n if (!includeItem)\n acceptProjectedItems = false;\n let projected = omitted;\n const positions = requestedPositions.get(entry.item.sourceItemId) ?? Object.freeze([]);\n const verified = positions.length > 0 || includeItem && entry.content.byteLength <= SOURCE_TEXT_BYTE_LIMIT\n ? readVerifiedSource(source, entry.content, positions)\n : undefined;\n if (verified !== undefined) {\n verifiedSourcePositions.set(entry.item.sourceItemId, verified.displayablePositions);\n }\n if (verified?.text !== undefined) {\n const available = projectedSourceItem(entry, Object.freeze({\n state: \"available\" as const,\n text: verified.text,\n }));\n const availableBytes = jsonByteLength(available) + (items.length === 0 ? 0 : 1);\n if (projectedBytes + availableBytes <= INSPECTION_RESULT_BYTE_LIMIT - SOURCE_RESULT_HEADROOM) {\n projected = available;\n }\n }\n if (!includeItem)\n continue;\n const itemBytes = jsonByteLength(projected) + (items.length === 0 ? 0 : 1);\n items.push(projected);\n projectedBytes += itemBytes;\n }\n }\n catch {\n state = \"invalid\";\n decoded = Object.freeze([]);\n items.splice(0, items.length);\n verifiedSourcePositions.clear();\n }\n const sourceItems = new Map(decoded.map((entry) => [entry.item.sourceItemId, entry] as const));\n const sites = assertionsRead.state === \"available\"\n ? assertionsRead.sourceSites.map((site) => projectAssertionSourceSite(site, state, sourceItems, verifiedSourcePositions))\n : [];\n let projectedSiteCount = sites.length;\n let result = sourceResult(state, items, decoded.length, assertionResult(assertionsRead, sites, projectedSiteCount));\n while (jsonByteLength(result) > INSPECTION_RESULT_BYTE_LIMIT && items.length > 0) {\n items.pop();\n result = sourceResult(state, items, decoded.length, assertionResult(assertionsRead, sites, projectedSiteCount));\n }\n while (jsonByteLength(result) > INSPECTION_RESULT_BYTE_LIMIT && projectedSiteCount > 0) {\n projectedSiteCount -= 1;\n result = sourceResult(state, items, decoded.length, assertionResult(assertionsRead, sites, projectedSiteCount));\n }\n if (jsonByteLength(result) > INSPECTION_RESULT_BYTE_LIMIT) {\n throw new Error(\"Sources projection cannot fit its fixed result byte limit\");\n }\n return result;\n}\nfunction assertionSourcePositions(assertions: AssertionsRead): ReadonlyMap<string, readonly SourcePosition[]> {\n const output = new Map<string, SourcePosition[]>();\n if (assertions.state !== \"available\")\n return output;\n for (const site of assertions.sourceSites) {\n const sourceItemId = site.source.value.sourceItemId;\n const positions = output.get(sourceItemId) ?? [];\n positions.push(site.start, site.end);\n output.set(sourceItemId, positions);\n }\n return new Map([...output].map(([sourceItemId, positions]) => [\n sourceItemId,\n Object.freeze(positions),\n ] as const));\n}\nfunction readAssertionSites(input: InspectionAssertionsRead): AssertionsRead {\n if (input.state === \"available\") {\n return Object.freeze({\n state: \"available\" as const,\n sourceSites: input.value.sourceSites,\n });\n }\n return Object.freeze({\n state: input.state === \"not-recorded\" ? \"not-recorded\" as const : \"invalid\" as const,\n });\n}\nfunction projectAssertionSourceSite(site: HydratedAssertionSourceSite, sourceState: AttachmentReadState, sourceItems: ReadonlyMap<string, BoundSourceItem>, verifiedSourcePositions: ReadonlyMap<string, ReadonlySet<string>>): Extract<InspectionSourcesResult[\"assertions\"], {\n readonly state: \"available\";\n}>[\"sourceSites\"][number] {\n const anchor = site.source.value;\n const item = sourceState === \"available\" ? sourceItems.get(anchor.sourceItemId) : undefined;\n const source = item === undefined || item.item.sha256 !== anchor.sha256\n ? unmappedSource(\"source-snapshot-not-recorded\")\n : !positionsAreDisplayable(verifiedSourcePositions.get(anchor.sourceItemId), site.start, site.end)\n ? unmappedSource(\"position-unrepresentable\")\n : Object.freeze({\n state: \"mapped\" as const,\n sourceItemId: anchor.sourceItemId,\n sha256: anchor.sha256,\n });\n return Object.freeze({\n entryId: site.entryId,\n sourceOrder: site.sourceOrder,\n role: site.role,\n start: Object.freeze({ line: site.start.line, column: site.start.column }),\n end: Object.freeze({ line: site.end.line, column: site.end.column }),\n source,\n });\n}\nfunction assertionResult(assertions: AssertionsRead, sites: readonly Extract<InspectionSourcesResult[\"assertions\"], {\n readonly state: \"available\";\n}>[\"sourceSites\"][number][], projectedSiteCount: number): InspectionSourcesResult[\"assertions\"] {\n if (assertions.state !== \"available\") {\n return Object.freeze({\n state: assertions.state,\n sourceSites: Object.freeze([] as const),\n hasMoreSourceSites: false as const,\n omittedSourceSiteCount: 0 as const,\n });\n }\n return Object.freeze({\n state: \"available\" as const,\n sourceSites: Object.freeze(sites.slice(0, projectedSiteCount)),\n hasMoreSourceSites: projectedSiteCount < sites.length,\n omittedSourceSiteCount: sites.length - projectedSiteCount,\n });\n}\nfunction unmappedSource(reason: \"source-snapshot-not-recorded\" | \"position-unrepresentable\"): Extract<Extract<InspectionSourcesResult[\"assertions\"], {\n readonly state: \"available\";\n}>[\"sourceSites\"][number][\"source\"], {\n readonly state: \"unmapped\";\n}> {\n return Object.freeze({ state: \"unmapped\" as const, reason });\n}\nfunction positionsAreDisplayable(positions: ReadonlySet<string> | undefined, start: SourcePosition, end: SourcePosition): boolean {\n return positions?.has(positionKey(start)) === true && positions.has(positionKey(end));\n}\nfunction positionKey(position: SourcePosition): string {\n return `${position.line}:${position.column}`;\n}\nfunction hydrateSourceItems(attachment: SourcesAttachmentInput): readonly BoundSourceItem[] {\n if (attachment.physical.ownerKind !== \"run\" ||\n attachment.physical.family !== NiceEvalRecordAttachments.sources.family ||\n attachment.physical.familyRevision !== NiceEvalCurrentRecordAttachments.sources.revision) {\n throw new Error(\"Sources Attachment requires migration before Inspection\");\n }\n const byLogicalHandle = new Map(attachment.physical.contents.map((content) => [content.logicalHandle, content] as const));\n const byHydratedHandle = new WeakMap<object, PersistedContentMetadata>();\n const usedLogicalHandles = new Set<string>();\n const hydrated = hydrateRecordAttachmentCurrent(NiceEvalRecordAttachments.sources, attachment.value, {\n content: (token, declaration) => {\n const logicalHandle = exactMarker(token, \"$niceeval.record.content\");\n if (logicalHandle === undefined && !hasOwnMarker(token, \"$niceeval.record.content\")) {\n return Result.succeed(undefined);\n }\n const metadata = typeof logicalHandle === \"string\"\n ? byLogicalHandle.get(logicalHandle)\n : undefined;\n if (metadata === undefined || declaration.kind !== \"text\" ||\n declaration.maximumBytes !== undefined && metadata.byteLength > declaration.maximumBytes ||\n usedLogicalHandles.has(logicalHandle as string)) {\n return Result.fail({ code: \"current-content-bind-failed\" as const });\n }\n const handle = mintRecordContentHandle(\"text\");\n byHydratedHandle.set(handle, metadata);\n usedLogicalHandles.add(logicalHandle as string);\n return Result.succeed(handle);\n },\n reference: () => Result.succeed(undefined),\n });\n if (Result.isFailure(hydrated) || usedLogicalHandles.size !== attachment.physical.contents.length) {\n throw new Error(\"Sources Attachment content closure is invalid\");\n }\n const output: BoundSourceItem[] = [];\n for (const item of hydrated.success.items as readonly HydratedSourceItem[]) {\n const metadata = byHydratedHandle.get(item.content);\n if (metadata === undefined || metadata.byteLength !== item.byteLength || metadata.digest !== item.sha256) {\n throw new Error(\"Sources Attachment item does not match its sealed Content metadata\");\n }\n output.push(Object.freeze({ item, content: metadata }));\n }\n return Object.freeze(output);\n}\nfunction readVerifiedSource(source: InspectionFactSource, metadata: PersistedContentMetadata, positions: readonly SourcePosition[]): {\n readonly text?: string;\n readonly displayablePositions: ReadonlySet<string>;\n} {\n const digest = new InspectionSha256();\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const retainText = metadata.byteLength <= SOURCE_TEXT_BYTE_LIMIT;\n const text: string[] = [];\n const positionsByLine = new Map<number, Set<number>>();\n for (const position of positions) {\n const columns = positionsByLine.get(position.line) ?? new Set<number>();\n columns.add(position.column - 1);\n positionsByLine.set(position.line, columns);\n }\n const displayablePositions = new Set<string>();\n let offset = 0;\n let afterOrdinal = -1;\n let expectedOrdinal = 0;\n let observedChunks = 0;\n let line = 1;\n let column = 0;\n const markPosition = (byte: number | undefined): void => {\n const columns = positionsByLine.get(line);\n if (columns?.has(column) !== true)\n return;\n if (byte === undefined || byte === 0x0a || (byte & 192) !== 128) {\n displayablePositions.add(`${line}:${column + 1}`);\n }\n };\n while (true) {\n const page = source.readContentPage(metadata.contentId, afterOrdinal, CONTENT_PAGE_SIZE);\n if (page.contentId !== metadata.contentId || page.afterOrdinal !== afterOrdinal ||\n page.chunks.length === 0 && page.nextOrdinal !== null) {\n throw new Error(\"Sources Content page is invalid\");\n }\n for (const chunk of page.chunks) {\n if (chunk.ordinal !== expectedOrdinal || offset + chunk.bytes.byteLength > metadata.byteLength) {\n throw new Error(\"Sources Content chunk sequence is invalid\");\n }\n digest.update(chunk.bytes);\n const decoded = decoder.decode(chunk.bytes, { stream: true });\n if (retainText)\n text.push(decoded);\n for (const byte of chunk.bytes) {\n markPosition(byte);\n if (byte === 0x0a) {\n line += 1;\n column = 0;\n }\n else {\n column += 1;\n }\n }\n offset += chunk.bytes.byteLength;\n expectedOrdinal += 1;\n observedChunks += 1;\n }\n if (page.nextOrdinal === null)\n break;\n if (page.nextOrdinal !== expectedOrdinal - 1 || observedChunks > metadata.chunkCount) {\n throw new Error(\"Sources Content continuation is invalid\");\n }\n afterOrdinal = page.nextOrdinal;\n }\n const finalText = decoder.decode();\n if (retainText)\n text.push(finalText);\n markPosition(undefined);\n if (offset !== metadata.byteLength || observedChunks !== metadata.chunkCount ||\n digest.digestHex() !== metadata.digest) {\n throw new Error(\"Sources Content does not match its sealed metadata\");\n }\n return Object.freeze({\n ...(retainText ? { text: text.join(\"\") } : {}),\n displayablePositions,\n });\n}\nfunction projectedSourceItem(entry: BoundSourceItem, content: InspectionSourcesResult[\"items\"][number][\"content\"]): InspectionSourcesResult[\"items\"][number] {\n return Object.freeze({\n sourceItemId: entry.item.sourceItemId,\n path: entry.item.path,\n byteLength: entry.item.byteLength,\n sha256: entry.item.sha256,\n content,\n });\n}\nfunction omittedContent(byteLength: number): InspectionSourcesResult[\"items\"][number][\"content\"] {\n return Object.freeze({\n state: \"omitted\" as const,\n reason: \"inspection-result-byte-limit\" as const,\n byteLength,\n byteLimit: SOURCE_TEXT_BYTE_LIMIT,\n });\n}\nfunction sourceResult(state: AttachmentReadState, items: readonly InspectionSourcesResult[\"items\"][number][], total: number, assertions: InspectionSourcesResult[\"assertions\"]): InspectionSourcesResult {\n return Object.freeze({\n state,\n items: Object.freeze([...items]),\n hasMore: items.length < total,\n omittedItemCount: total - items.length,\n assertions,\n });\n}\nfunction exactMarker(value: unknown, key: string): unknown | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return undefined;\n const keys = Reflect.ownKeys(value);\n if (keys.length !== 1 || keys[0] !== key)\n return undefined;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor !== undefined && descriptor.enumerable && \"value\" in descriptor\n ? descriptor.value\n : undefined;\n}\nfunction hasOwnMarker(value: unknown, key: string): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) &&\n Object.prototype.hasOwnProperty.call(value, key);\n}\nfunction closeJson(value: unknown): InspectionJson {\n const closed = closeInspectionJson(value);\n if (isInspectionCodecError(closed))\n throw closed;\n return closed as InspectionJson;\n}\nfunction jsonByteLength(value: unknown): number {\n return utf8ByteLength(JSON.stringify(value));\n}\n"]}
@@ -8,6 +8,11 @@ exports.projectAdapterUsageTokens = projectAdapterUsageTokens;
8
8
  exports.unavailableInspectionUsageTotals = unavailableInspectionUsageTotals;
9
9
  exports.combineInspectionUsageTotals = combineInspectionUsageTotals;
10
10
  exports.projectAttemptTiming = projectAttemptTiming;
11
+ // @concord-file ne-eval-inspection-trace
12
+ // @concord-implements docs/feature/inspection/README.md
13
+ // @concord-implements docs/feature/insight/README.md
14
+ const adapter_usage_projection_ts_1 = require("../o11y/adapter-usage-projection.cjs");
15
+ const judge_usage_projection_ts_1 = require("../o11y/judge-usage-projection.cjs");
11
16
  const effect_1 = require("effect");
12
17
  const content_ts_1 = require("../record/attachment/content.cjs");
13
18
  const protocol_ts_1 = require("../record/attachment/protocol.cjs");
@@ -36,6 +41,9 @@ const MAX_COMMAND_ARGUMENT_BYTES = 128;
36
41
  const MAX_COMMAND_STREAM_TEXT_BYTES = 1024;
37
42
  const MAX_DIAGNOSTIC_SUMMARY_BYTES = 256;
38
43
  const MAX_DIAGNOSTIC_CAUSE_BYTES = 128;
44
+ // @concord-code ne-eval-inspection-project-trace
45
+ // @concord-implements docs/feature/inspection/README.md
46
+ // @concord-implements docs/feature/insight/README.md
39
47
  function projectAttemptTrace(source, attachments, execution, executionFilters = {}) {
40
48
  const agentTurns = readCurrentAttachment(current_ts_1.NiceEvalCurrentRecordAttachments.agentTurns, attachments.agentTurns);
41
49
  const turnContexts = readCurrentAttachment(current_ts_1.NiceEvalCurrentRecordAttachments.turnContexts, attachments.turnContexts);
@@ -140,6 +148,7 @@ function projectAgentItemsAsExecution(source, attachment, agentTurns, state, req
140
148
  ...(request.traceId === undefined ? {} : { traceId: request.traceId }),
141
149
  ...(request.sourceId === undefined ? {} : { sourceId: request.sourceId }),
142
150
  ...(request.actorId === undefined ? {} : { actorId: request.actorId }),
151
+ ...(request.eventType === undefined ? {} : { eventType: request.eventType }),
143
152
  });
144
153
  const continuationContext = Object.freeze({
145
154
  source,
@@ -216,6 +225,8 @@ function projectAgentItemsAsExecution(source, attachment, agentTurns, state, req
216
225
  const actorId = rawItem.kind === "message" ? rawItem.role : "assistant";
217
226
  if (filters.actorId !== undefined && actorId !== filters.actorId)
218
227
  continue;
228
+ if (filters.eventType !== undefined && `agent.${rawItem.kind}` !== filters.eventType)
229
+ continue;
219
230
  totalMatching += 1;
220
231
  if (ordinal <= resumeAfter) {
221
232
  priorMatches += 1;
@@ -238,6 +249,7 @@ function projectAgentItemsAsExecution(source, attachment, agentTurns, state, req
238
249
  links: Object.freeze([]),
239
250
  evidence: Object.freeze([]),
240
251
  scopeMemberships: Object.freeze([]),
252
+ display: Object.freeze({ state: "absent" }),
241
253
  });
242
254
  if ((0, bytes_ts_1.utf8ByteLength)(JSON.stringify([...retained.map(({ event: prior }) => prior), event])) >
243
255
  schema_ts_2.ExecutionTraceRecordLimits.maximumOutlineBytes) {
@@ -254,7 +266,7 @@ function projectAgentItemsAsExecution(source, attachment, agentTurns, state, req
254
266
  return Object.freeze({
255
267
  state,
256
268
  limitations,
257
- traces: traceSelected && sourceSelected
269
+ traces: traceSelected
258
270
  ? Object.freeze([Object.freeze({
259
271
  kind: "trace-header",
260
272
  traceId,
@@ -267,7 +279,7 @@ function projectAgentItemsAsExecution(source, attachment, agentTurns, state, req
267
279
  limitations: [{ code: "legacy-source-state", message: "The Agent Turns source is partial." }],
268
280
  }),
269
281
  scopes: Object.freeze([]),
270
- eventCount: totalMatching,
282
+ eventCount: totalSourceEvents,
271
283
  })])
272
284
  : Object.freeze([]),
273
285
  events: Object.freeze(events),
@@ -716,10 +728,16 @@ function readCurrentAttachment(persistence, attachment) {
716
728
  function invalidRead(issue) {
717
729
  return Object.freeze({ state: "invalid", issues: Object.freeze([issue]) });
718
730
  }
719
- /** Revision 1 has no opaque closure and projects new facts to null without rewriting sealed bytes. */
720
- function readAdapterUsageAttachment(attachment) {
721
- if (attachment?.physical.familyRevision !== 1) {
722
- return readCurrentAttachment(current_ts_1.NiceEvalCurrentRecordAttachments.adapterUsage, attachment);
731
+ /** Historical revisions are decoded independently, then projected without rewriting sealed bytes. */
732
+ function readAdapterUsageAttachment(attachment, models) {
733
+ if (attachment?.physical.familyRevision !== 1 && attachment?.physical.familyRevision !== 2 &&
734
+ attachment?.physical.familyRevision !== 3) {
735
+ const read = readCurrentAttachment(current_ts_1.NiceEvalCurrentRecordAttachments.adapterUsage, attachment);
736
+ if (read.state === "available" && read.value.calls.some((call) => call.modelSlot !== null &&
737
+ (models === undefined || !Object.hasOwn(models, call.modelSlot)))) {
738
+ return invalidRead("source-model-slot-invalid");
739
+ }
740
+ return read;
723
741
  }
724
742
  if (attachment.physical.ownerKind !== current_ts_1.NiceEvalCurrentRecordAttachments.adapterUsage.attachment.owner ||
725
743
  attachment.physical.family !== current_ts_1.NiceEvalCurrentRecordAttachments.adapterUsage.attachment.family)
@@ -727,10 +745,29 @@ function readAdapterUsageAttachment(attachment) {
727
745
  if (attachment.physical.contents.length !== 0 || attachment.physical.references.length !== 0) {
728
746
  return invalidRead("source-closure-invalid");
729
747
  }
730
- const decoded = effect_1.Schema.decodeUnknownResult(schema_ts_1.AdapterUsageAttachmentRevision1Schema, core_ts_1.RecordExactParseOptions)(attachment.value);
731
- if (effect_1.Result.isFailure(decoded))
732
- return invalidRead("source-attachment-invalid");
733
- const projected = (0, schema_ts_1.projectAdapterUsageRevision1)(decoded.success);
748
+ let projected;
749
+ if (attachment.physical.familyRevision === 1) {
750
+ const decoded = effect_1.Schema.decodeUnknownResult(schema_ts_1.AdapterUsageAttachmentRevision1Schema, core_ts_1.RecordExactParseOptions)(attachment.value);
751
+ if (effect_1.Result.isFailure(decoded))
752
+ return invalidRead("source-attachment-invalid");
753
+ projected = (0, schema_ts_1.projectAdapterUsageRevision1)(decoded.success);
754
+ }
755
+ else if (attachment.physical.familyRevision === 2) {
756
+ const decoded = effect_1.Schema.decodeUnknownResult(schema_ts_1.AdapterUsageAttachmentRevision2Schema, core_ts_1.RecordExactParseOptions)(attachment.value);
757
+ if (effect_1.Result.isFailure(decoded))
758
+ return invalidRead("source-attachment-invalid");
759
+ projected = (0, schema_ts_1.projectAdapterUsageRevision2)(decoded.success);
760
+ }
761
+ else {
762
+ const decoded = effect_1.Schema.decodeUnknownResult(schema_ts_1.AdapterUsageAttachmentSchema, core_ts_1.RecordExactParseOptions)(attachment.value);
763
+ if (effect_1.Result.isFailure(decoded))
764
+ return invalidRead("source-attachment-invalid");
765
+ projected = decoded.success;
766
+ if (projected.calls.some((call) => call.modelSlot !== null &&
767
+ (models === undefined || !Object.hasOwn(models, call.modelSlot)))) {
768
+ return invalidRead("source-model-slot-invalid");
769
+ }
770
+ }
734
771
  if ((0, schema_ts_1.validateAdapterUsageAttachment)(projected).length > 0) {
735
772
  return invalidRead("source-attachment-invalid");
736
773
  }
@@ -1052,9 +1089,23 @@ function projectConversationItem(item, turnId, sessionId) {
1052
1089
  }));
1053
1090
  }
1054
1091
  }
1055
- function projectAttemptUsage(attachments) {
1092
+ function projectAttemptUsage(attachments, models = attachments.models) {
1093
+ const usage = projectApplicationUsage(attachments, models);
1094
+ const read = readCurrentAttachment(current_ts_1.NiceEvalCurrentRecordAttachments.judgeUsage, attachments.judgeUsage);
1095
+ const judgeUsage = read.state === "available" ? (0, judge_usage_projection_ts_1.projectJudgeUsage)(read.value)
1096
+ : read.state === "invalid" ? Object.freeze({ state: "invalid", reason: "judge-usage-source-invalid" })
1097
+ : Object.freeze({ state: "unavailable", reason: "judge-usage-not-recorded" });
1098
+ const applicationEmptyComplete = attachments.adapterUsage !== undefined &&
1099
+ usage.totals.requests.state === "available" && usage.totals.requests.value === 0 && usage.totals.costs?.totalCalls === 0;
1100
+ return Object.freeze({ ...usage, judgeUsage,
1101
+ totalCosts: (0, judge_usage_projection_ts_1.projectTotalUsageCosts)(usage.totals, judgeUsage, applicationEmptyComplete, attachments.adapterUsage === undefined || attachments.adapterUsage.physical.familyRevision === 4) });
1102
+ }
1103
+ function projectApplicationUsage(attachments, models) {
1056
1104
  if (attachments.adapterUsage !== undefined) {
1057
- const read = readAdapterUsageAttachment(attachments.adapterUsage);
1105
+ const read = readAdapterUsageAttachment(attachments.adapterUsage, models);
1106
+ const modelUsage = (0, adapter_usage_projection_ts_1.projectAdapterModelUsage)(read.state === "available" ? read.value : null, models, {
1107
+ basis: "recorded-calls", reason: read.state === "invalid" ? "source-invalid" : "usage-not-recorded",
1108
+ });
1058
1109
  const empty = {
1059
1110
  source: "adapter",
1060
1111
  coverage: "recorded-calls",
@@ -1067,34 +1118,16 @@ function projectAttemptUsage(attachments) {
1067
1118
  inputTokens: { state: "unavailable", value: null, observationCount: 0 },
1068
1119
  outputTokens: { state: "unavailable", value: null, observationCount: 0 },
1069
1120
  requests: { state: "unavailable", value: null, observationCount: 0 },
1070
- costs: effectiveCostTotals([], "partial"),
1121
+ costs: (0, adapter_usage_projection_ts_1.effectiveCostTotals)([], "partial"),
1071
1122
  }, hasMore: false, omittedObservationCount: 0,
1072
1123
  };
1073
1124
  if (read.state !== "available")
1074
1125
  return {
1075
- ...empty, state: read.state, limitations: read.state === "invalid" ? read.issues.map((issue) => ({ issue })) : [],
1126
+ ...empty, ...modelUsage,
1127
+ state: read.state, limitations: read.state === "invalid" ? read.issues.map((issue) => ({ issue })) : [],
1076
1128
  };
1077
1129
  const all = read.value.calls;
1078
- const receipts = new Map((read.value.priceReceipts ?? []).map((receipt) => [receipt.callId, receipt]));
1079
- const calls = all.map((call) => {
1080
- const receipt = receipts.get(call.callId);
1081
- const effectiveCost = call.cost !== null
1082
- ? Object.freeze({
1083
- amount: call.cost.amount,
1084
- currency: call.cost.currency,
1085
- source: call.cost.source,
1086
- state: "complete",
1087
- })
1088
- : receipt === undefined
1089
- ? null
1090
- : Object.freeze({
1091
- amount: receipt.amount,
1092
- currency: receipt.currency,
1093
- source: receipt.source,
1094
- state: receipt.state,
1095
- });
1096
- return Object.freeze({ ...call, effectiveCost });
1097
- });
1130
+ const calls = (0, adapter_usage_projection_ts_1.effectiveUsageCalls)(read.value);
1098
1131
  const numeric = (key) => {
1099
1132
  const known = all.flatMap((call) => call[key] === null ? [] : [call[key]]);
1100
1133
  const sum = known.reduce((total, value) => total + value, 0);
@@ -1113,8 +1146,10 @@ function projectAttemptUsage(attachments) {
1113
1146
  [call.inputTokens, call.cacheReadTokens, call.cacheWriteTokens].every((value) => value !== null)));
1114
1147
  const unknownCosts = calls.filter((call) => call.effectiveCost === null).length;
1115
1148
  const partialCosts = calls.filter((call) => call.effectiveCost?.state === "partial").length;
1149
+ const costs = (0, adapter_usage_projection_ts_1.effectiveCostTotals)(calls, read.value.collection.state);
1116
1150
  return {
1117
1151
  ...empty,
1152
+ ...modelUsage,
1118
1153
  state: complete ? "complete" : "partial",
1119
1154
  limitations: [
1120
1155
  ...(complete ? [] : [{ issue: "Adapter usage describes only recorded calls; some quantities or terminal outcomes are unknown, or capture is incomplete." }]),
@@ -1126,69 +1161,32 @@ function projectAttemptUsage(attachments) {
1126
1161
  totals: {
1127
1162
  ...empty.totals, inputTokens, outputTokens, inputTotalTokens: numeric("inputTotalTokens"),
1128
1163
  requests: { state: read.value.collection.state === "complete" ? "available" : "partial", value: all.length, observationCount: all.length },
1129
- costs: effectiveCostTotals(calls, read.value.collection.state),
1164
+ costs,
1130
1165
  },
1131
1166
  hasMore: all.length > 128,
1132
1167
  };
1133
1168
  }
1134
- return projectUsage(readAgentTurns(attachments.agentTurns));
1135
- }
1136
- function effectiveCostTotals(calls, collectionState) {
1137
- const known = calls.flatMap((call) => call.effectiveCost === null ? [] : [call.effectiveCost]);
1138
- const kind = (values) => {
1139
- const sources = new Set(values.map((value) => value.source.kind));
1140
- return sources.size === 0 ? null : sources.size === 1 ? [...sources][0] : "mixed";
1141
- };
1142
- const grouped = new Map();
1143
- for (const cost of known)
1144
- grouped.set(cost.currency, [...(grouped.get(cost.currency) ?? []), cost]);
1145
- const complete = collectionState === "complete" && known.length === calls.length &&
1146
- known.every((cost) => cost.state === "complete");
1169
+ const read = readAgentTurns(attachments.agentTurns);
1170
+ const usage = projectUsage(read);
1147
1171
  return Object.freeze({
1148
- state: known.length === 0 ? "unavailable" : complete ? "complete" : "partial",
1149
- source: kind(known),
1150
- values: Object.freeze([...grouped.entries()]
1151
- .sort(([left], [right]) => left.localeCompare(right))
1152
- .map(([currency, values]) => Object.freeze({
1153
- currency,
1154
- value: values.reduce((total, value) => addCanonicalDecimal(total, value.amount), "0"),
1155
- source: kind(values),
1156
- coveredCalls: values.filter((value) => value.state === "complete").length,
1157
- reportedCalls: values.filter((value) => value.source.kind === "reported").length,
1158
- estimatedCalls: values.filter((value) => value.source.kind === "estimated").length,
1159
- }))),
1160
- totalCalls: calls.length,
1172
+ ...usage,
1173
+ ...(0, adapter_usage_projection_ts_1.projectAdapterModelUsage)(null, models, {
1174
+ basis: attachments.agentTurns === undefined ? "unavailable" : "reported-sends",
1175
+ reason: read.state === "invalid" ? "source-invalid" : attachments.agentTurns === undefined
1176
+ ? "usage-not-recorded" : "physical-call-identity-not-recorded",
1177
+ }),
1161
1178
  });
1162
1179
  }
1163
- function projectAdapterUsageTokens(attachment) {
1164
- const read = readAdapterUsageAttachment(attachment);
1180
+ function projectAdapterUsageTokens(attachment, models) {
1181
+ const read = readAdapterUsageAttachment(attachment, models);
1165
1182
  if (read.state !== "available") {
1166
1183
  return Object.freeze({
1167
1184
  value: null,
1168
1185
  state: read.state === "invalid" ? "failed" : "unavailable",
1169
1186
  });
1170
1187
  }
1171
- const values = read.value.calls.flatMap((call) => {
1172
- const inputBuckets = [call.inputTokens, call.cacheReadTokens, call.cacheWriteTokens];
1173
- const knownInputBuckets = inputBuckets.filter((value) => value !== null);
1174
- const input = call.inputTotalTokens ?? (knownInputBuckets.length === 0
1175
- ? null
1176
- : knownInputBuckets.reduce((total, current) => total + current, 0));
1177
- return [input, call.outputTokens].filter((value) => value !== null);
1178
- });
1179
- const total = values.reduce((sum, current) => sum + current, 0);
1180
- if (!Number.isSafeInteger(total)) {
1181
- return Object.freeze({ value: null, state: "failed" });
1182
- }
1183
- const value = values.length === 0 ? null : total;
1184
- const complete = read.value.calls.length > 0 && read.value.collection.state === "complete" &&
1185
- read.value.calls.every((call) => call.status !== "unknown" && call.outputTokens !== null &&
1186
- (call.inputTotalTokens !== null ||
1187
- [call.inputTokens, call.cacheReadTokens, call.cacheWriteTokens].every((value) => value !== null)));
1188
- return Object.freeze({
1189
- value,
1190
- state: value === null ? "unavailable" : complete ? "available" : "partial",
1191
- });
1188
+ const material = (0, adapter_usage_projection_ts_1.adapterTokenMaterial)(read.value, "totalTokens");
1189
+ return Object.freeze({ value: material.state === "unavailable" ? null : material.value, state: material.state === "exact" ? "available" : material.state === "lower-bound" ? "partial" : material.reason === "usage-exceeds-safe-integer" ? "failed" : "unavailable" });
1192
1190
  }
1193
1191
  function projectUsage(agentTurns) {
1194
1192
  const sourceState = availability(agentTurns, USAGE_TARGETS);