niceeval 0.13.1 → 0.13.2

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 (548) hide show
  1. package/INDEX.md +25 -2
  2. package/README.md +9 -10
  3. package/README.zh.md +9 -10
  4. package/dist/agents/ai-sdk.cjs.map +1 -1
  5. package/dist/agents/ai-sdk.d.cts +1 -1
  6. package/dist/agents/ai-sdk.d.mts +1 -1
  7. package/dist/agents/ai-sdk.d.ts +1 -1
  8. package/dist/agents/bub-install-spec.cjs +19 -5
  9. package/dist/agents/bub-install-spec.cjs.map +1 -1
  10. package/dist/agents/bub-install-spec.d.cts +9 -2
  11. package/dist/agents/bub-install-spec.d.mts +9 -2
  12. package/dist/agents/bub-install-spec.d.ts +9 -2
  13. package/dist/agents/bub-install-spec.js +14 -12
  14. package/dist/agents/bub.cjs +10 -6
  15. package/dist/agents/bub.cjs.map +1 -1
  16. package/dist/agents/bub.d.cts +2 -2
  17. package/dist/agents/bub.d.mts +2 -2
  18. package/dist/agents/bub.d.ts +2 -2
  19. package/dist/agents/claude-code.cjs.map +1 -1
  20. package/dist/agents/claude-code.d.cts +2 -2
  21. package/dist/agents/claude-code.d.mts +2 -2
  22. package/dist/agents/claude-code.d.ts +2 -2
  23. package/dist/agents/codex.cjs +4 -4
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/codex.d.cts +3 -3
  26. package/dist/agents/codex.d.mts +3 -3
  27. package/dist/agents/codex.d.ts +3 -3
  28. package/dist/agents/coding-cli-versions.cjs +10 -1
  29. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  30. package/dist/agents/coding-cli-versions.d.cts +8 -3
  31. package/dist/agents/coding-cli-versions.d.mts +8 -3
  32. package/dist/agents/coding-cli-versions.d.ts +8 -3
  33. package/dist/agents/coding-cli-versions.js +18 -12
  34. package/dist/agents/deepseek-harness.cjs +151 -0
  35. package/dist/agents/deepseek-harness.cjs.map +1 -0
  36. package/dist/agents/deepseek-harness.d.cts +14 -0
  37. package/dist/agents/deepseek-harness.d.mts +14 -0
  38. package/dist/agents/deepseek-harness.d.ts +14 -0
  39. package/dist/agents/deepseek-harness.js +7 -0
  40. package/dist/agents/deepseek-harness.js.map +1 -0
  41. package/dist/agents/exact-npm-plugins.cjs +28 -0
  42. package/dist/agents/exact-npm-plugins.cjs.map +1 -0
  43. package/dist/agents/exact-npm-plugins.d.cts +10 -0
  44. package/dist/agents/exact-npm-plugins.d.mts +10 -0
  45. package/dist/agents/exact-npm-plugins.d.ts +10 -0
  46. package/dist/agents/exact-npm-plugins.js +8 -0
  47. package/dist/agents/exact-npm-plugins.js.map +1 -0
  48. package/dist/agents/index.cjs +5 -1
  49. package/dist/agents/index.cjs.map +1 -1
  50. package/dist/agents/index.d.cts +4 -0
  51. package/dist/agents/index.d.mts +4 -0
  52. package/dist/agents/index.d.ts +4 -0
  53. package/dist/agents/index.js +54 -50
  54. package/dist/agents/index.mjs +54 -50
  55. package/dist/agents/omp.cjs +170 -0
  56. package/dist/agents/omp.cjs.map +1 -0
  57. package/dist/agents/omp.d.cts +14 -0
  58. package/dist/agents/omp.d.mts +14 -0
  59. package/dist/agents/omp.d.ts +14 -0
  60. package/dist/agents/omp.js +7 -0
  61. package/dist/agents/omp.js.map +1 -0
  62. package/dist/agents/openclaw.cjs +51 -2
  63. package/dist/agents/openclaw.cjs.map +1 -1
  64. package/dist/agents/openclaw.d.cts +2 -0
  65. package/dist/agents/openclaw.d.mts +2 -0
  66. package/dist/agents/openclaw.d.ts +2 -0
  67. package/dist/agents/types.cjs.map +1 -1
  68. package/dist/agents/types.d.cts +4 -4
  69. package/dist/agents/types.d.mts +4 -4
  70. package/dist/agents/types.d.ts +4 -4
  71. package/dist/agents/ui-message-stream.cjs +24 -7
  72. package/dist/agents/ui-message-stream.cjs.map +1 -1
  73. package/dist/analysis/api.cjs +28 -2
  74. package/dist/analysis/api.cjs.map +1 -1
  75. package/dist/analysis/api.d.cts +22 -1
  76. package/dist/analysis/api.d.mts +22 -1
  77. package/dist/analysis/api.d.ts +22 -1
  78. package/dist/analysis/api.js +8 -6
  79. package/dist/analysis/bindings.cjs +11 -18
  80. package/dist/analysis/bindings.cjs.map +1 -1
  81. package/dist/analysis/bindings.d.cts +177 -49
  82. package/dist/analysis/bindings.d.mts +177 -49
  83. package/dist/analysis/bindings.d.ts +177 -49
  84. package/dist/analysis/contracts.cjs +1 -0
  85. package/dist/analysis/contracts.cjs.map +1 -1
  86. package/dist/analysis/contracts.d.cts +43 -3
  87. package/dist/analysis/contracts.d.mts +43 -3
  88. package/dist/analysis/contracts.d.ts +43 -3
  89. package/dist/analysis/cost-projection.cjs +2 -1
  90. package/dist/analysis/cost-projection.cjs.map +1 -1
  91. package/dist/analysis/cost-projection.d.cts +1 -1
  92. package/dist/analysis/cost-projection.d.mts +1 -1
  93. package/dist/analysis/cost-projection.d.ts +1 -1
  94. package/dist/analysis/cost.cjs +13 -3
  95. package/dist/analysis/cost.cjs.map +1 -1
  96. package/dist/analysis/cost.d.cts +10 -3
  97. package/dist/analysis/cost.d.mts +10 -3
  98. package/dist/analysis/cost.d.ts +10 -3
  99. package/dist/analysis/experiment-groups.cjs +96 -0
  100. package/dist/analysis/experiment-groups.cjs.map +1 -0
  101. package/dist/analysis/experiment-groups.d.cts +9 -0
  102. package/dist/analysis/experiment-groups.d.mts +9 -0
  103. package/dist/analysis/experiment-groups.d.ts +9 -0
  104. package/dist/analysis/experiment-groups.js +10 -0
  105. package/dist/analysis/experiment-groups.js.map +1 -0
  106. package/dist/analysis/index.cjs +4 -1
  107. package/dist/analysis/index.cjs.map +1 -1
  108. package/dist/analysis/index.d.cts +4 -2
  109. package/dist/analysis/index.d.mts +4 -2
  110. package/dist/analysis/index.d.ts +4 -2
  111. package/dist/analysis/index.js +40 -36
  112. package/dist/analysis/index.mjs +40 -36
  113. package/dist/assertions/limits.cjs +4 -0
  114. package/dist/assertions/limits.cjs.map +1 -1
  115. package/dist/assertions/limits.d.cts +4 -0
  116. package/dist/assertions/limits.d.mts +4 -0
  117. package/dist/assertions/limits.d.ts +4 -0
  118. package/dist/assertions/match.cjs +63 -25
  119. package/dist/assertions/match.cjs.map +1 -1
  120. package/dist/assertions/match.d.cts +7 -0
  121. package/dist/assertions/match.d.mts +7 -0
  122. package/dist/assertions/match.d.ts +7 -0
  123. package/dist/assertions/record/attachment.cjs +32 -4
  124. package/dist/assertions/record/attachment.cjs.map +1 -1
  125. package/dist/assertions/record/diff.cjs +10 -4
  126. package/dist/assertions/record/diff.cjs.map +1 -1
  127. package/dist/assertions/record/producer.cjs +101 -4
  128. package/dist/assertions/record/producer.cjs.map +1 -1
  129. package/dist/assertions/record/producer.d.cts +4 -1
  130. package/dist/assertions/record/producer.d.mts +4 -1
  131. package/dist/assertions/record/producer.d.ts +4 -1
  132. package/dist/assertions/runtime.cjs +45 -5
  133. package/dist/assertions/runtime.cjs.map +1 -1
  134. package/dist/cli/record.cjs +113 -8
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +20 -1
  137. package/dist/cli/record.d.mts +20 -1
  138. package/dist/cli/record.d.ts +20 -1
  139. package/dist/cli/record.js +4 -2
  140. package/dist/cli.cjs +386 -31
  141. package/dist/cli.cjs.map +1 -1
  142. package/dist/cli.d.cts +10 -2
  143. package/dist/cli.d.mts +10 -2
  144. package/dist/cli.d.ts +10 -2
  145. package/dist/context/send-retry.cjs +4 -4
  146. package/dist/context/send-retry.cjs.map +1 -1
  147. package/dist/coordination/host/runtime.cjs +8 -30
  148. package/dist/coordination/host/runtime.cjs.map +1 -1
  149. package/dist/coordination/host/runtime.d.cts +3 -3
  150. package/dist/coordination/host/runtime.d.mts +3 -3
  151. package/dist/coordination/host/runtime.d.ts +3 -3
  152. package/dist/coordination/host/types.cjs.map +1 -1
  153. package/dist/coordination/host/types.d.cts +0 -5
  154. package/dist/coordination/host/types.d.mts +0 -5
  155. package/dist/coordination/host/types.d.ts +0 -5
  156. package/dist/coordination/platform/node.cjs +90 -9
  157. package/dist/coordination/platform/node.cjs.map +1 -1
  158. package/dist/define.cjs +25 -1
  159. package/dist/define.cjs.map +1 -1
  160. package/dist/experiment/host/index.cjs +1 -0
  161. package/dist/experiment/host/index.cjs.map +1 -1
  162. package/dist/i18n/en.cjs +26 -8
  163. package/dist/i18n/en.cjs.map +1 -1
  164. package/dist/i18n/en.d.cts +19 -6
  165. package/dist/i18n/en.d.mts +19 -6
  166. package/dist/i18n/en.d.ts +19 -6
  167. package/dist/index.cjs.map +1 -1
  168. package/dist/index.d.cts +1 -1
  169. package/dist/index.d.mts +1 -1
  170. package/dist/index.d.ts +1 -1
  171. package/dist/o11y/parsers/hermes.cjs +1 -1
  172. package/dist/o11y/parsers/hermes.cjs.map +1 -1
  173. package/dist/o11y/prices.json +1 -1
  174. package/dist/o11y/record/families.cjs +12 -3
  175. package/dist/o11y/record/families.cjs.map +1 -1
  176. package/dist/o11y/record/families.d.cts +8 -8
  177. package/dist/o11y/record/families.d.mts +8 -8
  178. package/dist/o11y/record/families.d.ts +8 -8
  179. package/dist/o11y/record/family-projectors.d.cts +66 -18
  180. package/dist/o11y/record/family-projectors.d.mts +66 -18
  181. package/dist/o11y/record/family-projectors.d.ts +66 -18
  182. package/dist/o11y/record/family-writers.d.cts +11 -3
  183. package/dist/o11y/record/family-writers.d.mts +11 -3
  184. package/dist/o11y/record/family-writers.d.ts +11 -3
  185. package/dist/o11y/record/runner-producer.cjs +14 -4
  186. package/dist/o11y/record/runner-producer.cjs.map +1 -1
  187. package/dist/record/codec/core.d.cts +2 -2
  188. package/dist/record/codec/core.d.mts +2 -2
  189. package/dist/record/codec/core.d.ts +2 -2
  190. package/dist/record/family/catalog.d.cts +44 -12
  191. package/dist/record/family/catalog.d.mts +44 -12
  192. package/dist/record/family/catalog.d.ts +44 -12
  193. package/dist/record/family/index.js +128 -124
  194. package/dist/record/family/observability-v1.cjs +35 -0
  195. package/dist/record/family/observability-v1.cjs.map +1 -0
  196. package/dist/record/family/observability-v1.d.cts +3 -0
  197. package/dist/record/family/observability-v1.d.mts +3 -0
  198. package/dist/record/family/observability-v1.d.ts +3 -0
  199. package/dist/record/family/observability-v1.js +6 -0
  200. package/dist/record/family/observability-v1.js.map +1 -0
  201. package/dist/record/family/observability.cjs +58 -9
  202. package/dist/record/family/observability.cjs.map +1 -1
  203. package/dist/record/family/observability.d.cts +1014 -15
  204. package/dist/record/family/observability.d.mts +1014 -15
  205. package/dist/record/family/observability.d.ts +1014 -15
  206. package/dist/record/family/observability.js +22 -18
  207. package/dist/record/host/runtime.cjs +600 -31
  208. package/dist/record/host/runtime.cjs.map +1 -1
  209. package/dist/record/host/types.cjs.map +1 -1
  210. package/dist/record/host/types.d.cts +33 -9
  211. package/dist/record/host/types.d.mts +33 -9
  212. package/dist/record/host/types.d.ts +33 -9
  213. package/dist/record/maintenance/runtime.cjs +1 -2
  214. package/dist/record/maintenance/runtime.cjs.map +1 -1
  215. package/dist/record/model/core.cjs.map +1 -1
  216. package/dist/record/model/core.d.cts +1 -1
  217. package/dist/record/model/core.d.mts +1 -1
  218. package/dist/record/model/core.d.ts +1 -1
  219. package/dist/record/model/definition.d.cts +6 -6
  220. package/dist/record/model/definition.d.mts +6 -6
  221. package/dist/record/model/definition.d.ts +6 -6
  222. package/dist/record/model/identifiers.cjs +1 -1
  223. package/dist/record/model/identifiers.cjs.map +1 -1
  224. package/dist/record/model/identifiers.d.cts +1 -1
  225. package/dist/record/model/identifiers.d.mts +1 -1
  226. package/dist/record/model/identifiers.d.ts +1 -1
  227. package/dist/record/platform/node.cjs +159 -23
  228. package/dist/record/platform/node.cjs.map +1 -1
  229. package/dist/record/platform/services.cjs.map +1 -1
  230. package/dist/record/platform/services.d.cts +15 -2
  231. package/dist/record/platform/services.d.mts +15 -2
  232. package/dist/record/platform/services.d.ts +15 -2
  233. package/dist/record/reader/errors.cjs +37 -1
  234. package/dist/record/reader/errors.cjs.map +1 -1
  235. package/dist/record/reader/errors.d.cts +49 -1
  236. package/dist/record/reader/errors.d.mts +49 -1
  237. package/dist/record/reader/errors.d.ts +49 -1
  238. package/dist/record/reader/errors.js +22 -12
  239. package/dist/record/reader/format.cjs +76 -17
  240. package/dist/record/reader/format.cjs.map +1 -1
  241. package/dist/record/reader/format.d.cts +11 -4
  242. package/dist/record/reader/format.d.mts +11 -4
  243. package/dist/record/reader/format.d.ts +11 -4
  244. package/dist/record/reader/format.js +2 -0
  245. package/dist/record/reader/index.js +32 -18
  246. package/dist/record/reader/runtime.cjs +64 -0
  247. package/dist/record/reader/runtime.cjs.map +1 -1
  248. package/dist/record/reader/runtime.d.cts +15 -0
  249. package/dist/record/reader/runtime.d.mts +15 -0
  250. package/dist/record/reader/runtime.d.ts +15 -0
  251. package/dist/record/reader/runtime.js +2 -0
  252. package/dist/report/assets/styles.css +53 -29
  253. package/dist/report/built-in/analysis-values.cjs +21 -13
  254. package/dist/report/built-in/analysis-values.cjs.map +1 -1
  255. package/dist/report/built-in/analysis-values.d.cts +11 -22
  256. package/dist/report/built-in/analysis-values.d.mts +11 -22
  257. package/dist/report/built-in/analysis-values.d.ts +11 -22
  258. package/dist/report/built-in/analysis-values.js +4 -6
  259. package/dist/report/built-in/index.cjs +1 -3
  260. package/dist/report/built-in/index.cjs.map +1 -1
  261. package/dist/report/built-in/index.d.cts +1 -1
  262. package/dist/report/built-in/index.d.mts +1 -1
  263. package/dist/report/built-in/index.d.ts +1 -1
  264. package/dist/report/built-in/index.js +4 -8
  265. package/dist/report/built-in/index.mjs +4 -8
  266. package/dist/report/built-in/machine.cjs +0 -2
  267. package/dist/report/built-in/machine.cjs.map +1 -1
  268. package/dist/report/built-in/machine.d.cts +0 -2
  269. package/dist/report/built-in/machine.d.mts +0 -2
  270. package/dist/report/built-in/machine.d.ts +0 -2
  271. package/dist/report/built-in/result-components.cjs +49 -51
  272. package/dist/report/built-in/result-components.cjs.map +1 -1
  273. package/dist/report/built-in/result-components.d.cts +16 -17
  274. package/dist/report/built-in/result-components.d.mts +16 -17
  275. package/dist/report/built-in/result-components.d.ts +16 -17
  276. package/dist/report/built-in/result-components.js +0 -4
  277. package/dist/report/built-in/run-membership-overview.cjs +126 -17
  278. package/dist/report/built-in/run-membership-overview.cjs.map +1 -1
  279. package/dist/report/built-in/run-membership-overview.d.cts +14 -0
  280. package/dist/report/built-in/run-membership-overview.d.mts +14 -0
  281. package/dist/report/built-in/run-membership-overview.d.ts +14 -0
  282. package/dist/report/built-in/run-membership-overview.js +4 -2
  283. package/dist/report/built-in/standard.cjs +80 -45
  284. package/dist/report/built-in/standard.cjs.map +1 -1
  285. package/dist/report/built-in/standard.d.cts +19 -41
  286. package/dist/report/built-in/standard.d.mts +19 -41
  287. package/dist/report/built-in/standard.d.ts +19 -41
  288. package/dist/report/built-in/standard.js +6 -6
  289. package/dist/report/components/attempt-detail/compute.cjs +78 -2
  290. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  291. package/dist/report/components/attempt-detail/compute.d.cts +1 -1
  292. package/dist/report/components/attempt-detail/compute.d.mts +1 -1
  293. package/dist/report/components/attempt-detail/compute.d.ts +1 -1
  294. package/dist/report/components/attempt-detail/content.cjs +1 -1
  295. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  296. package/dist/report/components/entity-lists/compute.cjs +42 -5
  297. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  298. package/dist/report/components/entity-lists/compute.d.cts +10 -8
  299. package/dist/report/components/entity-lists/compute.d.mts +10 -8
  300. package/dist/report/components/entity-lists/compute.d.ts +10 -8
  301. package/dist/report/components/entity-lists/content.cjs +31 -6
  302. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  303. package/dist/report/components/entity-lists/index.cjs +9 -4
  304. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  305. package/dist/report/components/entity-lists/index.d.cts +4 -7
  306. package/dist/report/components/entity-lists/index.d.mts +4 -7
  307. package/dist/report/components/entity-lists/index.d.ts +4 -7
  308. package/dist/report/components/summaries/compute.cjs +8 -1
  309. package/dist/report/components/summaries/compute.cjs.map +1 -1
  310. package/dist/report/components/summaries/compute.d.cts +9 -1
  311. package/dist/report/components/summaries/compute.d.mts +9 -1
  312. package/dist/report/components/summaries/compute.d.ts +9 -1
  313. package/dist/report/components/summaries/index.cjs +48 -4
  314. package/dist/report/components/summaries/index.cjs.map +1 -1
  315. package/dist/report/components/summaries/index.d.cts +7 -4
  316. package/dist/report/components/summaries/index.d.mts +7 -4
  317. package/dist/report/components/summaries/index.d.ts +7 -4
  318. package/dist/report/definition/cell.cjs +3 -0
  319. package/dist/report/definition/cell.cjs.map +1 -1
  320. package/dist/report/definition/cell.d.cts +2 -0
  321. package/dist/report/definition/cell.d.mts +2 -0
  322. package/dist/report/definition/cell.d.ts +2 -0
  323. package/dist/report/definition/primitives/chart.cjs +8 -5
  324. package/dist/report/definition/primitives/chart.cjs.map +1 -1
  325. package/dist/report/definition/primitives/points-dataset.cjs +1 -0
  326. package/dist/report/definition/primitives/points-dataset.cjs.map +1 -1
  327. package/dist/report/definition/primitives.cjs +15 -2
  328. package/dist/report/definition/primitives.cjs.map +1 -1
  329. package/dist/report/definition/report.cjs +27 -3
  330. package/dist/report/definition/report.cjs.map +1 -1
  331. package/dist/report/definition/report.d.cts +8 -0
  332. package/dist/report/definition/report.d.mts +8 -0
  333. package/dist/report/definition/report.d.ts +8 -0
  334. package/dist/report/execution/machine.cjs +30 -14
  335. package/dist/report/execution/machine.cjs.map +1 -1
  336. package/dist/report/execution/machine.d.cts +20 -10
  337. package/dist/report/execution/machine.d.mts +20 -10
  338. package/dist/report/execution/machine.d.ts +20 -10
  339. package/dist/report/execution/machine.js +6 -6
  340. package/dist/report/host/execute.cjs +25 -16
  341. package/dist/report/host/execute.cjs.map +1 -1
  342. package/dist/report/host/execute.d.cts +4 -0
  343. package/dist/report/host/execute.d.mts +4 -0
  344. package/dist/report/host/execute.d.ts +4 -0
  345. package/dist/report/host/from-record.cjs +22 -5
  346. package/dist/report/host/from-record.cjs.map +1 -1
  347. package/dist/report/host/machine.cjs +53 -11
  348. package/dist/report/host/machine.cjs.map +1 -1
  349. package/dist/report/host/site-runtime.cjs +9 -8
  350. package/dist/report/host/site-runtime.cjs.map +1 -1
  351. package/dist/report/host/site-runtime.d.cts +1 -1
  352. package/dist/report/host/site-runtime.d.mts +1 -1
  353. package/dist/report/host/site-runtime.d.ts +1 -1
  354. package/dist/report/host/static.cjs +56 -9
  355. package/dist/report/host/static.cjs.map +1 -1
  356. package/dist/report/index.cjs.map +1 -1
  357. package/dist/report/index.d.cts +1 -1
  358. package/dist/report/index.d.mts +1 -1
  359. package/dist/report/index.d.ts +1 -1
  360. package/dist/report/model/dataset.cjs +7 -2
  361. package/dist/report/model/dataset.cjs.map +1 -1
  362. package/dist/report/model/locale.cjs +2 -0
  363. package/dist/report/model/locale.cjs.map +1 -1
  364. package/dist/report/model/locale.d.cts +1 -0
  365. package/dist/report/model/locale.d.mts +1 -0
  366. package/dist/report/model/locale.d.ts +1 -0
  367. package/dist/report/model/metrics.cjs +3 -1
  368. package/dist/report/model/metrics.cjs.map +1 -1
  369. package/dist/report/model/pricing.cjs +16 -11
  370. package/dist/report/model/pricing.cjs.map +1 -1
  371. package/dist/report/react/styles.css +53 -29
  372. package/dist/runner/adoption.cjs +1 -0
  373. package/dist/runner/adoption.cjs.map +1 -1
  374. package/dist/runner/attempt.cjs +44 -5
  375. package/dist/runner/attempt.cjs.map +1 -1
  376. package/dist/runner/attempt.d.cts +13 -1
  377. package/dist/runner/attempt.d.mts +13 -1
  378. package/dist/runner/attempt.d.ts +13 -1
  379. package/dist/runner/config-identity.cjs +10 -2
  380. package/dist/runner/config-identity.cjs.map +1 -1
  381. package/dist/runner/config-identity.d.cts +4 -2
  382. package/dist/runner/config-identity.d.mts +4 -2
  383. package/dist/runner/config-identity.d.ts +4 -2
  384. package/dist/runner/feedback/human.cjs +298 -59
  385. package/dist/runner/feedback/human.cjs.map +1 -1
  386. package/dist/runner/feedback/json.cjs +14 -6
  387. package/dist/runner/feedback/json.cjs.map +1 -1
  388. package/dist/runner/feedback/json.d.cts +3 -2
  389. package/dist/runner/feedback/json.d.mts +3 -2
  390. package/dist/runner/feedback/json.d.ts +3 -2
  391. package/dist/runner/feedback/reducer.cjs +2 -0
  392. package/dist/runner/feedback/reducer.cjs.map +1 -1
  393. package/dist/runner/judge-config.cjs +1 -1
  394. package/dist/runner/judge-config.cjs.map +1 -1
  395. package/dist/runner/ledger.cjs +124 -12
  396. package/dist/runner/ledger.cjs.map +1 -1
  397. package/dist/runner/project-current.cjs +13 -5
  398. package/dist/runner/project-current.cjs.map +1 -1
  399. package/dist/runner/run.cjs +564 -256
  400. package/dist/runner/run.cjs.map +1 -1
  401. package/dist/runner/sandbox-pool.cjs +161 -30
  402. package/dist/runner/sandbox-pool.cjs.map +1 -1
  403. package/dist/runner/sandbox-pool.d.cts +34 -2
  404. package/dist/runner/sandbox-pool.d.mts +34 -2
  405. package/dist/runner/sandbox-pool.d.ts +34 -2
  406. package/dist/runner/shared-state-lease.cjs +803 -0
  407. package/dist/runner/shared-state-lease.cjs.map +1 -0
  408. package/dist/runner/shared-state-lease.d.cts +121 -0
  409. package/dist/runner/shared-state-lease.d.mts +121 -0
  410. package/dist/runner/shared-state-lease.d.ts +121 -0
  411. package/dist/runner/shared-state-lease.js +24 -0
  412. package/dist/runner/shared-state-lease.js.map +1 -0
  413. package/dist/runner/teardown-registry.cjs +97 -34
  414. package/dist/runner/teardown-registry.cjs.map +1 -1
  415. package/dist/runner/teardown-registry.d.cts +27 -1
  416. package/dist/runner/teardown-registry.d.mts +27 -1
  417. package/dist/runner/teardown-registry.d.ts +27 -1
  418. package/dist/runner/teardown-registry.js +20 -16
  419. package/dist/runner/types.cjs.map +1 -1
  420. package/dist/runner/types.d.cts +31 -5
  421. package/dist/runner/types.d.mts +31 -5
  422. package/dist/runner/types.d.ts +31 -5
  423. package/dist/sample/analysis.cjs +249 -459
  424. package/dist/sample/analysis.cjs.map +1 -1
  425. package/dist/sample/capability.cjs +138 -7
  426. package/dist/sample/capability.cjs.map +1 -1
  427. package/dist/sample/capability.d.cts +3 -1
  428. package/dist/sample/capability.d.mts +3 -1
  429. package/dist/sample/capability.d.ts +3 -1
  430. package/dist/sample/capability.js +8 -6
  431. package/dist/sandbox/docker-agent-image.cjs +5 -1
  432. package/dist/sandbox/docker-agent-image.cjs.map +1 -1
  433. package/dist/sandbox/docker-agent-image.d.cts +2 -0
  434. package/dist/sandbox/docker-agent-image.d.mts +2 -0
  435. package/dist/sandbox/docker-agent-image.d.ts +2 -0
  436. package/dist/sandbox/docker-agent-image.js +14 -10
  437. package/dist/sandbox/docker-profile/schema.cjs +283 -534
  438. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  439. package/dist/sandbox/docker-profile/schema.d.cts +10 -27
  440. package/dist/sandbox/docker-profile/schema.d.mts +10 -27
  441. package/dist/sandbox/docker-profile/schema.d.ts +10 -27
  442. package/dist/sandbox/e2b-agent-template.cjs +5 -2
  443. package/dist/sandbox/e2b-agent-template.cjs.map +1 -1
  444. package/dist/sandbox/index.cjs +4 -2
  445. package/dist/sandbox/index.cjs.map +1 -1
  446. package/dist/sandbox/index.d.cts +1 -1
  447. package/dist/sandbox/index.d.mts +1 -1
  448. package/dist/sandbox/index.d.ts +1 -1
  449. package/dist/sandbox/index.js +120 -116
  450. package/dist/sandbox/index.mjs +120 -116
  451. package/dist/sandbox/keep-registry.cjs +28 -66
  452. package/dist/sandbox/keep-registry.cjs.map +1 -1
  453. package/dist/sandbox/types.cjs.map +1 -1
  454. package/dist/sandbox/types.d.cts +1 -1
  455. package/dist/sandbox/types.d.mts +1 -1
  456. package/dist/sandbox/types.d.ts +1 -1
  457. package/dist/shared/aggregate.cjs +16 -6
  458. package/dist/shared/aggregate.cjs.map +1 -1
  459. package/dist/shared/aggregate.d.cts +12 -4
  460. package/dist/shared/aggregate.d.mts +12 -4
  461. package/dist/shared/aggregate.d.ts +12 -4
  462. package/dist/shared/turn-label.cjs +20 -2
  463. package/dist/shared/turn-label.cjs.map +1 -1
  464. package/dist/shared/turn-label.d.cts +2 -0
  465. package/dist/shared/turn-label.d.mts +2 -0
  466. package/dist/shared/turn-label.d.ts +2 -0
  467. package/dist/shared/turn-label.js +4 -2
  468. package/dist/vendor/remark/remark-gfm.cjs +7 -7
  469. package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
  470. package/dist/vendor/remark/remark-parse.cjs +12 -12
  471. package/dist/vendor/remark/remark-parse.cjs.map +1 -1
  472. package/dist/vendor/remark/remark.cjs +13 -13
  473. package/dist/vendor/remark/remark.cjs.map +1 -1
  474. package/dist/view/server.cjs +6 -0
  475. package/dist/view/server.cjs.map +1 -1
  476. package/docs-site/images/hitl-handshake-zh.svg +3 -3
  477. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  478. package/docs-site/zh/examples/coding-agent-extensions.mdx +1 -1
  479. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +4 -3
  480. package/docs-site/zh/examples/integrations/claude-sdk.mdx +3 -3
  481. package/docs-site/zh/examples/integrations/codex-sdk.mdx +5 -5
  482. package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
  483. package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
  484. package/docs-site/zh/explanation/adapter.mdx +5 -5
  485. package/docs-site/zh/explanation/assert.mdx +7 -7
  486. package/docs-site/zh/explanation/drive.mdx +4 -2
  487. package/docs-site/zh/explanation/evals.mdx +10 -8
  488. package/docs-site/zh/explanation/experiment.mdx +2 -2
  489. package/docs-site/zh/explanation/hitl.mdx +9 -9
  490. package/docs-site/zh/explanation/judge.mdx +5 -5
  491. package/docs-site/zh/explanation/overview.mdx +3 -3
  492. package/docs-site/zh/explanation/runner.mdx +1 -1
  493. package/docs-site/zh/index.mdx +3 -3
  494. package/docs-site/zh/reference/builtin-agents.mdx +13 -13
  495. package/docs-site/zh/reference/capabilities.mdx +1 -1
  496. package/docs-site/zh/reference/cli.mdx +18 -12
  497. package/docs-site/zh/reference/define-agent.mdx +130 -5
  498. package/docs-site/zh/reference/define-config.mdx +2 -2
  499. package/docs-site/zh/reference/define-eval.mdx +4 -4
  500. package/docs-site/zh/reference/events.mdx +11 -11
  501. package/docs-site/zh/reference/official-adapters.mdx +6 -6
  502. package/docs-site/zh/reference/results-data.mdx +6 -0
  503. package/docs-site/zh/troubleshooting/debugging.mdx +1 -1
  504. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +37 -5
  505. package/docs-site/zh/tutorials/accept-results.mdx +72 -0
  506. package/docs-site/zh/tutorials/agent-onboarding.mdx +6 -6
  507. package/docs-site/zh/tutorials/authoring.mdx +9 -13
  508. package/docs-site/zh/tutorials/ci-integration.mdx +6 -6
  509. package/docs-site/zh/tutorials/compare-runs.mdx +61 -0
  510. package/docs-site/zh/tutorials/concurrency.mdx +13 -12
  511. package/docs-site/zh/tutorials/configuration.mdx +4 -6
  512. package/docs-site/zh/tutorials/connect-your-agent.mdx +1 -1
  513. package/docs-site/zh/tutorials/control-run-cost.mdx +58 -0
  514. package/docs-site/zh/tutorials/criteria-files.mdx +2 -2
  515. package/docs-site/zh/tutorials/custom-reports.mdx +2 -2
  516. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +46 -0
  517. package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -43
  518. package/docs-site/zh/tutorials/eval-groups.mdx +6 -6
  519. package/docs-site/zh/tutorials/evaluation-kinds.mdx +3 -3
  520. package/docs-site/zh/tutorials/experiments.mdx +2 -3
  521. package/docs-site/zh/tutorials/handle-execution-failures.mdx +18 -10
  522. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +16 -8
  523. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +160 -0
  524. package/docs-site/zh/tutorials/plugins.mdx +14 -0
  525. package/docs-site/zh/tutorials/rerun-and-cache.mdx +4 -2
  526. package/docs-site/zh/tutorials/sandbox-agent.mdx +17 -11
  527. package/docs-site/zh/tutorials/sandbox-providers.mdx +17 -13
  528. package/docs-site/zh/tutorials/sandbox-reuse.mdx +12 -19
  529. package/docs-site/zh/tutorials/select-and-preview.mdx +65 -0
  530. package/docs-site/zh/tutorials/verify-judge.mdx +78 -0
  531. package/docs-site/zh/tutorials/viewing-results.mdx +38 -1
  532. package/docs-site/zh/tutorials/write-experiment.mdx +7 -5
  533. package/docs-site/zh/tutorials/write-send.mdx +9 -8
  534. package/package.json +9 -5
  535. package/dist/report/built-in/overview.cjs +0 -44
  536. package/dist/report/built-in/overview.cjs.map +0 -1
  537. package/dist/report/built-in/overview.d.cts +0 -6
  538. package/dist/report/built-in/overview.d.mts +0 -6
  539. package/dist/report/built-in/overview.d.ts +0 -6
  540. package/dist/report/built-in/overview.js +0 -9
  541. package/dist/report/built-in/overview.js.map +0 -1
  542. package/dist/runner/gate-lease.cjs +0 -283
  543. package/dist/runner/gate-lease.cjs.map +0 -1
  544. package/dist/runner/gate-lease.d.cts +0 -62
  545. package/dist/runner/gate-lease.d.mts +0 -62
  546. package/dist/runner/gate-lease.d.ts +0 -62
  547. package/dist/runner/gate-lease.js +0 -22
  548. package/dist/runner/gate-lease.js.map +0 -1
@@ -29,7 +29,7 @@ export type InputProjection<Value> = {
29
29
  readonly state: "value";
30
30
  readonly value: Value;
31
31
  } | {
32
- readonly state: "missing" | "unsupported" | "failed";
32
+ readonly state: "missing" | "migration-required" | "unsupported" | "failed";
33
33
  readonly message: string;
34
34
  };
35
35
  /** One semantic input owns an immutable owner/family requirement and projector. */
@@ -413,15 +413,23 @@ export declare const attemptObservabilityFamily: FixedFamilyBinding<"attempt", {
413
413
  readonly commandId: string;
414
414
  })[]];
415
415
  };
416
- readonly intervals: readonly {
416
+ readonly intervals: readonly ({
417
417
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
418
418
  readonly label: string;
419
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
419
+ readonly phase: "agent.send";
420
420
  readonly startOffsetMs: number;
421
421
  readonly durationMs: number;
422
422
  readonly intervalId: string;
423
423
  readonly parentIntervalId: string | null;
424
- }[];
424
+ } | {
425
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
426
+ readonly label: string;
427
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
428
+ readonly startOffsetMs: number;
429
+ readonly durationMs: number;
430
+ readonly intervalId: string;
431
+ readonly parentIntervalId: string | null;
432
+ })[];
425
433
  };
426
434
  readonly diagnostics: {
427
435
  readonly collection: {
@@ -862,15 +870,23 @@ export declare const attemptObservabilityFamily: FixedFamilyBinding<"attempt", {
862
870
  readonly commandId: string;
863
871
  })[]];
864
872
  };
865
- readonly intervals: readonly {
873
+ readonly intervals: readonly ({
866
874
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
867
875
  readonly label: string;
868
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
876
+ readonly phase: "agent.send";
869
877
  readonly startOffsetMs: number;
870
878
  readonly durationMs: number;
871
879
  readonly intervalId: string;
872
880
  readonly parentIntervalId: string | null;
873
- }[];
881
+ } | {
882
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
883
+ readonly label: string;
884
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
885
+ readonly startOffsetMs: number;
886
+ readonly durationMs: number;
887
+ readonly intervalId: string;
888
+ readonly parentIntervalId: string | null;
889
+ })[];
874
890
  };
875
891
  readonly diagnostics: {
876
892
  readonly collection: {
@@ -1417,15 +1433,23 @@ export declare const publishedAnalysisInputBindings: Readonly<{
1417
1433
  readonly commandId: string;
1418
1434
  })[]];
1419
1435
  };
1420
- readonly intervals: readonly {
1436
+ readonly intervals: readonly ({
1421
1437
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
1422
1438
  readonly label: string;
1423
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
1439
+ readonly phase: "agent.send";
1424
1440
  readonly startOffsetMs: number;
1425
1441
  readonly durationMs: number;
1426
1442
  readonly intervalId: string;
1427
1443
  readonly parentIntervalId: string | null;
1428
- }[];
1444
+ } | {
1445
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
1446
+ readonly label: string;
1447
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
1448
+ readonly startOffsetMs: number;
1449
+ readonly durationMs: number;
1450
+ readonly intervalId: string;
1451
+ readonly parentIntervalId: string | null;
1452
+ })[];
1429
1453
  };
1430
1454
  readonly diagnostics: {
1431
1455
  readonly collection: {
@@ -1866,15 +1890,23 @@ export declare const publishedAnalysisInputBindings: Readonly<{
1866
1890
  readonly commandId: string;
1867
1891
  })[]];
1868
1892
  };
1869
- readonly intervals: readonly {
1893
+ readonly intervals: readonly ({
1870
1894
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
1871
1895
  readonly label: string;
1872
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
1896
+ readonly phase: "agent.send";
1873
1897
  readonly startOffsetMs: number;
1874
1898
  readonly durationMs: number;
1875
1899
  readonly intervalId: string;
1876
1900
  readonly parentIntervalId: string | null;
1877
- }[];
1901
+ } | {
1902
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
1903
+ readonly label: string;
1904
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
1905
+ readonly startOffsetMs: number;
1906
+ readonly durationMs: number;
1907
+ readonly intervalId: string;
1908
+ readonly parentIntervalId: string | null;
1909
+ })[];
1878
1910
  };
1879
1911
  readonly diagnostics: {
1880
1912
  readonly collection: {
@@ -2330,15 +2362,23 @@ export declare const publishedAnalysisInputBindings: Readonly<{
2330
2362
  readonly commandId: string;
2331
2363
  })[]];
2332
2364
  };
2333
- readonly intervals: readonly {
2365
+ readonly intervals: readonly ({
2334
2366
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
2335
2367
  readonly label: string;
2336
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
2368
+ readonly phase: "agent.send";
2337
2369
  readonly startOffsetMs: number;
2338
2370
  readonly durationMs: number;
2339
2371
  readonly intervalId: string;
2340
2372
  readonly parentIntervalId: string | null;
2341
- }[];
2373
+ } | {
2374
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
2375
+ readonly label: string;
2376
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
2377
+ readonly startOffsetMs: number;
2378
+ readonly durationMs: number;
2379
+ readonly intervalId: string;
2380
+ readonly parentIntervalId: string | null;
2381
+ })[];
2342
2382
  };
2343
2383
  readonly diagnostics: {
2344
2384
  readonly collection: {
@@ -2779,15 +2819,23 @@ export declare const publishedAnalysisInputBindings: Readonly<{
2779
2819
  readonly commandId: string;
2780
2820
  })[]];
2781
2821
  };
2782
- readonly intervals: readonly {
2822
+ readonly intervals: readonly ({
2783
2823
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
2784
2824
  readonly label: string;
2785
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
2825
+ readonly phase: "agent.send";
2786
2826
  readonly startOffsetMs: number;
2787
2827
  readonly durationMs: number;
2788
2828
  readonly intervalId: string;
2789
2829
  readonly parentIntervalId: string | null;
2790
- }[];
2830
+ } | {
2831
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
2832
+ readonly label: string;
2833
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
2834
+ readonly startOffsetMs: number;
2835
+ readonly durationMs: number;
2836
+ readonly intervalId: string;
2837
+ readonly parentIntervalId: string | null;
2838
+ })[];
2791
2839
  };
2792
2840
  readonly diagnostics: {
2793
2841
  readonly collection: {
@@ -3237,15 +3285,23 @@ export declare const publishedAnalysisInputBindings: Readonly<{
3237
3285
  readonly commandId: string;
3238
3286
  })[]];
3239
3287
  };
3240
- readonly intervals: readonly {
3288
+ readonly intervals: readonly ({
3241
3289
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
3242
3290
  readonly label: string;
3243
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
3291
+ readonly phase: "agent.send";
3244
3292
  readonly startOffsetMs: number;
3245
3293
  readonly durationMs: number;
3246
3294
  readonly intervalId: string;
3247
3295
  readonly parentIntervalId: string | null;
3248
- }[];
3296
+ } | {
3297
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
3298
+ readonly label: string;
3299
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
3300
+ readonly startOffsetMs: number;
3301
+ readonly durationMs: number;
3302
+ readonly intervalId: string;
3303
+ readonly parentIntervalId: string | null;
3304
+ })[];
3249
3305
  };
3250
3306
  readonly diagnostics: {
3251
3307
  readonly collection: {
@@ -3686,15 +3742,23 @@ export declare const publishedAnalysisInputBindings: Readonly<{
3686
3742
  readonly commandId: string;
3687
3743
  })[]];
3688
3744
  };
3689
- readonly intervals: readonly {
3745
+ readonly intervals: readonly ({
3690
3746
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
3691
3747
  readonly label: string;
3692
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
3748
+ readonly phase: "agent.send";
3693
3749
  readonly startOffsetMs: number;
3694
3750
  readonly durationMs: number;
3695
3751
  readonly intervalId: string;
3696
3752
  readonly parentIntervalId: string | null;
3697
- }[];
3753
+ } | {
3754
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
3755
+ readonly label: string;
3756
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
3757
+ readonly startOffsetMs: number;
3758
+ readonly durationMs: number;
3759
+ readonly intervalId: string;
3760
+ readonly parentIntervalId: string | null;
3761
+ })[];
3698
3762
  };
3699
3763
  readonly diagnostics: {
3700
3764
  readonly collection: {
@@ -4248,15 +4312,23 @@ export declare const attemptObservabilityDomainBinding: Readonly<{
4248
4312
  readonly commandId: string;
4249
4313
  })[]];
4250
4314
  };
4251
- readonly intervals: readonly {
4315
+ readonly intervals: readonly ({
4252
4316
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
4253
4317
  readonly label: string;
4254
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
4318
+ readonly phase: "agent.send";
4255
4319
  readonly startOffsetMs: number;
4256
4320
  readonly durationMs: number;
4257
4321
  readonly intervalId: string;
4258
4322
  readonly parentIntervalId: string | null;
4259
- }[];
4323
+ } | {
4324
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
4325
+ readonly label: string;
4326
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
4327
+ readonly startOffsetMs: number;
4328
+ readonly durationMs: number;
4329
+ readonly intervalId: string;
4330
+ readonly parentIntervalId: string | null;
4331
+ })[];
4260
4332
  };
4261
4333
  readonly diagnostics: {
4262
4334
  readonly collection: {
@@ -4697,15 +4769,23 @@ export declare const attemptObservabilityDomainBinding: Readonly<{
4697
4769
  readonly commandId: string;
4698
4770
  })[]];
4699
4771
  };
4700
- readonly intervals: readonly {
4772
+ readonly intervals: readonly ({
4701
4773
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
4702
4774
  readonly label: string;
4703
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
4775
+ readonly phase: "agent.send";
4704
4776
  readonly startOffsetMs: number;
4705
4777
  readonly durationMs: number;
4706
4778
  readonly intervalId: string;
4707
4779
  readonly parentIntervalId: string | null;
4708
- }[];
4780
+ } | {
4781
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
4782
+ readonly label: string;
4783
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
4784
+ readonly startOffsetMs: number;
4785
+ readonly durationMs: number;
4786
+ readonly intervalId: string;
4787
+ readonly parentIntervalId: string | null;
4788
+ })[];
4709
4789
  };
4710
4790
  readonly diagnostics: {
4711
4791
  readonly collection: {
@@ -5498,15 +5578,23 @@ export declare const sandboxHistoryDomainBinding: Readonly<{
5498
5578
  readonly commandId: string;
5499
5579
  })[]];
5500
5580
  };
5501
- readonly intervals: readonly {
5581
+ readonly intervals: readonly ({
5502
5582
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
5503
5583
  readonly label: string;
5504
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
5584
+ readonly phase: "agent.send";
5505
5585
  readonly startOffsetMs: number;
5506
5586
  readonly durationMs: number;
5507
5587
  readonly intervalId: string;
5508
5588
  readonly parentIntervalId: string | null;
5509
- }[];
5589
+ } | {
5590
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
5591
+ readonly label: string;
5592
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
5593
+ readonly startOffsetMs: number;
5594
+ readonly durationMs: number;
5595
+ readonly intervalId: string;
5596
+ readonly parentIntervalId: string | null;
5597
+ })[];
5510
5598
  };
5511
5599
  readonly diagnostics: {
5512
5600
  readonly collection: {
@@ -5947,15 +6035,23 @@ export declare const sandboxHistoryDomainBinding: Readonly<{
5947
6035
  readonly commandId: string;
5948
6036
  })[]];
5949
6037
  };
5950
- readonly intervals: readonly {
6038
+ readonly intervals: readonly ({
5951
6039
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
5952
6040
  readonly label: string;
5953
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
6041
+ readonly phase: "agent.send";
5954
6042
  readonly startOffsetMs: number;
5955
6043
  readonly durationMs: number;
5956
6044
  readonly intervalId: string;
5957
6045
  readonly parentIntervalId: string | null;
5958
- }[];
6046
+ } | {
6047
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
6048
+ readonly label: string;
6049
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
6050
+ readonly startOffsetMs: number;
6051
+ readonly durationMs: number;
6052
+ readonly intervalId: string;
6053
+ readonly parentIntervalId: string | null;
6054
+ })[];
5959
6055
  };
5960
6056
  readonly diagnostics: {
5961
6057
  readonly collection: {
@@ -6508,15 +6604,23 @@ export declare const builtinDomainViewBindings: Readonly<{
6508
6604
  readonly commandId: string;
6509
6605
  })[]];
6510
6606
  };
6511
- readonly intervals: readonly {
6607
+ readonly intervals: readonly ({
6512
6608
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
6513
6609
  readonly label: string;
6514
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
6610
+ readonly phase: "agent.send";
6515
6611
  readonly startOffsetMs: number;
6516
6612
  readonly durationMs: number;
6517
6613
  readonly intervalId: string;
6518
6614
  readonly parentIntervalId: string | null;
6519
- }[];
6615
+ } | {
6616
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
6617
+ readonly label: string;
6618
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
6619
+ readonly startOffsetMs: number;
6620
+ readonly durationMs: number;
6621
+ readonly intervalId: string;
6622
+ readonly parentIntervalId: string | null;
6623
+ })[];
6520
6624
  };
6521
6625
  readonly diagnostics: {
6522
6626
  readonly collection: {
@@ -6957,15 +7061,23 @@ export declare const builtinDomainViewBindings: Readonly<{
6957
7061
  readonly commandId: string;
6958
7062
  })[]];
6959
7063
  };
6960
- readonly intervals: readonly {
7064
+ readonly intervals: readonly ({
6961
7065
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
6962
7066
  readonly label: string;
6963
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
7067
+ readonly phase: "agent.send";
6964
7068
  readonly startOffsetMs: number;
6965
7069
  readonly durationMs: number;
6966
7070
  readonly intervalId: string;
6967
7071
  readonly parentIntervalId: string | null;
6968
- }[];
7072
+ } | {
7073
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
7074
+ readonly label: string;
7075
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
7076
+ readonly startOffsetMs: number;
7077
+ readonly durationMs: number;
7078
+ readonly intervalId: string;
7079
+ readonly parentIntervalId: string | null;
7080
+ })[];
6969
7081
  };
6970
7082
  readonly diagnostics: {
6971
7083
  readonly collection: {
@@ -7758,15 +7870,23 @@ export declare const builtinDomainViewBindings: Readonly<{
7758
7870
  readonly commandId: string;
7759
7871
  })[]];
7760
7872
  };
7761
- readonly intervals: readonly {
7873
+ readonly intervals: readonly ({
7762
7874
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
7763
7875
  readonly label: string;
7764
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
7876
+ readonly phase: "agent.send";
7765
7877
  readonly startOffsetMs: number;
7766
7878
  readonly durationMs: number;
7767
7879
  readonly intervalId: string;
7768
7880
  readonly parentIntervalId: string | null;
7769
- }[];
7881
+ } | {
7882
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
7883
+ readonly label: string;
7884
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
7885
+ readonly startOffsetMs: number;
7886
+ readonly durationMs: number;
7887
+ readonly intervalId: string;
7888
+ readonly parentIntervalId: string | null;
7889
+ })[];
7770
7890
  };
7771
7891
  readonly diagnostics: {
7772
7892
  readonly collection: {
@@ -8207,15 +8327,23 @@ export declare const builtinDomainViewBindings: Readonly<{
8207
8327
  readonly commandId: string;
8208
8328
  })[]];
8209
8329
  };
8210
- readonly intervals: readonly {
8330
+ readonly intervals: readonly ({
8211
8331
  readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
8212
8332
  readonly label: string;
8213
- readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "agent.send" | "assertion.evaluate" | "verdict.fold";
8333
+ readonly phase: "agent.send";
8214
8334
  readonly startOffsetMs: number;
8215
8335
  readonly durationMs: number;
8216
8336
  readonly intervalId: string;
8217
8337
  readonly parentIntervalId: string | null;
8218
- }[];
8338
+ } | {
8339
+ readonly outcome: "completed" | "cancelled" | "interrupted" | "failed" | "unknown";
8340
+ readonly label: string;
8341
+ readonly phase: "agent.ensure" | "sandbox.prepare" | "eval.run" | "sandbox.command" | "attempt.setup" | "attempt.teardown" | "assertion.evaluate" | "verdict.fold";
8342
+ readonly startOffsetMs: number;
8343
+ readonly durationMs: number;
8344
+ readonly intervalId: string;
8345
+ readonly parentIntervalId: string | null;
8346
+ })[];
8219
8347
  };
8220
8348
  readonly diagnostics: {
8221
8349
  readonly collection: {
@@ -5,6 +5,7 @@ exports.makeClosedRows = makeClosedRows;
5
5
  exports.isClosedRows = isClosedRows;
6
6
  exports.closedRowsMetadata = closedRowsMetadata;
7
7
  exports.sampleCapabilityTypeId = Symbol("niceeval.analysis.Sample");
8
+ const experimentComparisonScopeTypeId = Symbol("niceeval.analysis.ExperimentComparisonScope");
8
9
  const closedRowsTypeId = Symbol("niceeval.analysis.ClosedRows");
9
10
  const closedRowsBrands = new WeakSet();
10
11
  const closedRowsMetadataByValue = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["contracts.ts"],"names":[],"mappings":";;;AA+QA,wCAqBC;AAED,oCAIC;AAED,gDAEC;AAjIY,QAAA,sBAAsB,GAAkB,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAiFxF,MAAM,gBAAgB,GAAkB,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAO/E,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAU,CAAC;AAC/C,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAA8B,CAAC;AAQ5E,sEAAsE;AACtE,SAAgB,cAAc,CAAM,KAKnC;IACG,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAA+B,CAAC;IAC3D,MAAM,QAAQ,GAAuB,MAAM,CAAC,MAAM,CAAC;QAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC7E,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC1B,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;QACtD,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;QACxD,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;QACpD,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;KACnD,CAAC,CAAC;IACH,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AACD,+EAA+E;AAC/E,SAAgB,YAAY,CAAC,KAAc;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;WACpB,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;WAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,IAAI,CAAC;AACzD,CAAC;AACD,8EAA8E;AAC9E,SAAgB,kBAAkB,CAAC,KAAc;IAC7C,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC","sourcesContent":["import type { MembershipAction } from \"../record/model/core.ts\";\nimport type { AttemptId, EvalId, ExecutionIdentityDigest, ExperimentId, RunId, SlotId, UtcMillis, } from \"../record/model/identifiers.ts\";\nimport type { AttemptLocator } from \"../attempt-locator.ts\";\nexport type { AttemptId, EvalId, ExecutionIdentityDigest, ExperimentId, RunId, SlotId, UtcMillis, };\n/** JSON is the only wire shape accepted by the Sample snapshot codec. */\nexport type JsonValue = null | boolean | number | string | readonly JsonValue[] | {\n readonly [key: string]: JsonValue;\n};\n/** Stable identity for one Sample capability and its portable snapshot. */\nexport interface SampleIdentity {\n readonly kind: \"analysis-sample\";\n readonly id: string;\n}\n/**\n * A public identity for evidence from one immutable Attempt. It deliberately\n * carries a locator rather than Record's nominal selected-reference capability\n * or an AttemptId that could be used as an ad-hoc storage lookup.\n */\nexport interface AttemptEvidenceIdentity {\n readonly kind: \"attempt\";\n readonly locator: AttemptLocator;\n readonly originRunId: RunId;\n}\nexport type AnalysisSelectionProblem = {\n readonly code: \"incomplete-run\";\n readonly runId: RunId;\n} | {\n readonly code: \"record-core-invalid\";\n readonly runId: RunId;\n} | {\n readonly code: \"selection-run-missing\";\n readonly runId: RunId;\n} | {\n readonly code: \"selection-run-unreadable\";\n readonly runId: RunId;\n};\n/**\n * One current target Slot identity. `project-current` keeps only Sample\n * members whose experiment/eval/attempt ordinal aligns, then whose digest\n * still narrows that aligned identity.\n */\nexport interface AnalysisCurrentSlotIdentity {\n readonly experimentId: ExperimentId;\n readonly evalId: EvalId;\n /** Logical attempt identity; never inferred from expectedSlots array order. */\n readonly attemptOrdinal: number;\n /** Narrows an already aligned logical identity; it is not the alignment key. */\n readonly executionIdentityDigest: ExecutionIdentityDigest;\n}\n/** Exact occurrence retained after project-current logical alignment. */\nexport interface AnalysisSlotOccurrenceIdentity {\n readonly runId: RunId;\n readonly slotId: SlotId;\n}\n/** Host-issued selection used by Application, CLI, and Report from-record. */\nexport type AnalysisSelectionRequest = {\n readonly policy: \"explicit-runs\";\n readonly runIds: readonly RunId[];\n} | {\n readonly policy: \"project-current\";\n readonly experimentIds?: readonly ExperimentId[];\n readonly currentSlots: readonly AnalysisCurrentSlotIdentity[];\n};\n/**\n * The exact selection audit retained by a closed SampleSnapshot. `runIds` are\n * the explicit request; `selectedRunIds` are recomputed from the current,\n * non-excluded Sample frame after every monotonic narrowing.\n */\nexport type AnalysisSelectionSummary = {\n readonly policy: \"explicit-runs\";\n readonly runIds: readonly RunId[];\n readonly selectedRunIds: readonly RunId[];\n readonly problems: readonly AnalysisSelectionProblem[];\n} | {\n readonly policy: \"project-current\";\n readonly experimentIds: readonly ExperimentId[] | \"all\";\n readonly selectedRunIds: readonly RunId[];\n readonly problems: readonly AnalysisSelectionProblem[];\n};\nexport interface AnalysisRun {\n readonly runId: RunId;\n readonly experimentId: ExperimentId;\n /**\n * The safe, immutable portion of the selected Run's Core context. A later\n * Core read can be unavailable after selection, in which case no context is\n * invented for that Run.\n */\n readonly context: AnalysisRunContext | null;\n readonly startedAt: UtcMillis;\n readonly completedAt: UtcMillis;\n readonly expectedSlots: readonly SlotId[];\n}\n/**\n * Display- and grouping-safe Run configuration retained by a Sample. It has\n * no Record capability and is recursively JSON-only.\n */\nexport interface AnalysisRunContext {\n readonly execution: AnalysisRunExecution;\n readonly labels: Readonly<Record<string, string>>;\n}\nexport interface AnalysisRunExecution {\n readonly agentId: string;\n readonly model: string | null;\n readonly reasoningEffort: string | null;\n readonly flags: Readonly<Record<string, JsonValue>>;\n}\nexport interface AnalysisSlotRef {\n /** Occurrence identity is always the exact selected Run/Slot pair. */\n readonly runId: RunId;\n readonly slotId: SlotId;\n /** Derived from the associated selected AnalysisRun, never a Record Slot field. */\n readonly experimentId: ExperimentId;\n /** Logical alignment is experiment + eval + durable attempt ordinal. */\n readonly evalId: EvalId;\n readonly attemptOrdinal: number;\n /** This remains an identity-narrowing value, never a logical alignment key. */\n readonly executionIdentityDigest: ExecutionIdentityDigest;\n}\n/** A Member with an exact origin Attempt. */\nexport interface IncludedAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"included\";\n /** Core provenance is not inferred from whether the Attempt is local. */\n readonly action: \"executed\" | \"carried\" | \"accepted\";\n readonly relation: \"origin\" | \"reference\";\n readonly attempt: AttemptEvidenceIdentity;\n}\n/**\n * An expected Slot without an Attempt. `null` means no Member document was\n * recorded; the two actions retain a recorded null Member without suggesting\n * that it is pending work.\n */\nexport interface NotRecordedAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"not-recorded\";\n readonly action: \"not-dispatched\" | \"interrupted\" | null;\n readonly attempt: null;\n}\n/** Core could be read far enough to identify the frame but not its member. */\nexport interface CoreInvalidAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"core-invalid\";\n readonly action: MembershipAction | null;\n readonly attempt: null;\n readonly issues: readonly AnalysisIssue[];\n}\nexport type ActiveAnalysisSlot = IncludedAnalysisSlot | NotRecordedAnalysisSlot | CoreInvalidAnalysisSlot;\n/** A monotonic Sample narrowing preserves the previous, non-nested state. */\nexport interface ExcludedAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"excluded\";\n readonly base: ActiveAnalysisSlot;\n /** Present when `project-current` dropped this Slot for identity mismatch. */\n readonly reason?: \"identity-mismatch\";\n}\nexport type AnalysisSlot = ActiveAnalysisSlot | ExcludedAnalysisSlot;\nexport interface SampleCoverage {\n readonly frameTotal: number;\n readonly selected: number;\n readonly included: number;\n readonly notRecorded: number;\n readonly coreInvalid: number;\n readonly excluded: number;\n}\n/**\n * The closed, portable representation of a Record selection. It contains\n * only selection identity, Core-derived Run/Slot denominator facts, and\n * selection problems. Decoding it can never reopen a Record.\n */\nexport interface SampleSnapshot {\n readonly version: 1;\n readonly identity: SampleIdentity;\n readonly selection: AnalysisSelectionSummary;\n readonly runs: readonly AnalysisRun[];\n readonly slots: readonly AnalysisSlot[];\n readonly coverage: SampleCoverage;\n}\nexport const sampleCapabilityTypeId: unique symbol = Symbol(\"niceeval.analysis.Sample\");\n/** A Host-issued, Scope-bound lazy Record-reading capability. */\nexport interface Sample {\n readonly kind: \"analysis-sample\";\n readonly snapshot: SampleSnapshot;\n readonly [sampleCapabilityTypeId]: true;\n}\nexport interface SampleSelector {\n readonly runIds?: readonly RunId[];\n readonly slotIds?: readonly SlotId[];\n}\nexport interface SampleClosedError {\n readonly code: \"analysis-sample-closed\";\n readonly sample: SampleIdentity;\n}\nexport interface SampleSnapshotCodecError {\n readonly code: \"sample-snapshot-invalid\";\n readonly path: readonly string[];\n readonly reason: string;\n}\nexport interface AnalysisRequestError {\n readonly code: \"analysis-request-invalid\";\n readonly reason: string;\n}\nexport type AnalysisInputIssueCode = \"missing\" | \"unsupported\" | \"producer-incompatible\" | \"input-invalid\" | \"reduction-failed\" | \"relation-unmatched\";\nexport interface EvidenceIdentity {\n readonly kind: \"attempt\";\n readonly locator: AttemptLocator;\n}\nexport interface EvidenceRef {\n readonly identity: EvidenceIdentity;\n}\nexport interface AnalysisIssue {\n readonly code: AnalysisInputIssueCode;\n readonly message: string;\n readonly refs: readonly EvidenceRef[];\n}\nexport interface ProducerIdentity {\n readonly id: string;\n}\n/** Internal result of a published AnalysisInput read. It never reaches Report. */\nexport type SampleInputObservation<Value> = {\n readonly state: \"value\";\n readonly value: Value;\n readonly refs: readonly EvidenceRef[];\n readonly producer?: ProducerIdentity;\n} | {\n readonly state: \"missing\" | \"unsupported\" | \"failed\";\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n readonly producer?: ProducerIdentity;\n};\nexport type MetricState = \"available\" | \"partial\"\n/** A specialized closed metric may have no reportable value at all. */\n | \"unavailable\" | \"empty\" | \"unsupported\" | \"failed\";\nexport type MetricBasis = \"attempt\" | \"eval\" | \"run\" | \"pair\" | \"slot\";\nexport type MeasureFormat = string | {\n readonly kind: string;\n readonly options?: JsonValue;\n};\n/** A closed Measure cell: never a selected Record handle or reader callback. */\nexport interface MetricValue<Value = number> {\n readonly value: Value | null;\n readonly state: MetricState;\n readonly samples: number;\n readonly total: number;\n readonly basis: MetricBasis;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n readonly unit?: string;\n readonly format?: MeasureFormat;\n readonly better?: \"higher\" | \"lower\" | \"neutral\";\n readonly bounds?: {\n readonly min?: number;\n readonly max?: number;\n };\n}\nexport interface ClosedRowsIdentity {\n readonly kind: \"closed-rows\";\n readonly id: string;\n}\nconst closedRowsTypeId: unique symbol = Symbol(\"niceeval.analysis.ClosedRows\");\n/** @internal Metadata is retained out-of-band so an ordinary array cannot forge it. */\nexport interface ClosedRowsMetadata {\n readonly identity: ClosedRowsIdentity;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}\nconst closedRowsBrands = new WeakSet<object>();\nconst closedRowsMetadataByValue = new WeakMap<object, ClosedRowsMetadata>();\n/** A branded, frozen array produced only by Analysis query execution. */\nexport interface ClosedRows<Row> extends ReadonlyArray<Readonly<Row>> {\n readonly [closedRowsTypeId]: true;\n readonly identity: ClosedRowsIdentity;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}\n/** @internal Keeps the brand unforgeable to normal public callers. */\nexport function makeClosedRows<Row>(input: {\n readonly rows: readonly Readonly<Row>[];\n readonly identity: ClosedRowsIdentity;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}): ClosedRows<Row> {\n const rows = [...input.rows] as unknown as ClosedRows<Row>;\n const metadata: ClosedRowsMetadata = Object.freeze({\n identity: Object.freeze({ kind: input.identity.kind, id: input.identity.id }),\n issues: Object.freeze([...input.issues]),\n refs: Object.freeze([...input.refs]),\n });\n Object.defineProperties(rows, {\n [closedRowsTypeId]: { value: true, enumerable: false },\n identity: { value: metadata.identity, enumerable: true },\n issues: { value: metadata.issues, enumerable: true },\n refs: { value: metadata.refs, enumerable: true },\n });\n closedRowsBrands.add(rows);\n closedRowsMetadataByValue.set(rows, metadata);\n return Object.freeze(rows);\n}\n/** @internal Checks actual Analysis issuance, rather than structural shape. */\nexport function isClosedRows(value: unknown): value is ClosedRows<unknown> {\n return Array.isArray(value)\n && closedRowsBrands.has(value)\n && Reflect.get(value, closedRowsTypeId) === true;\n}\n/** @internal Returns immutable metadata registered at Analysis close time. */\nexport function closedRowsMetadata(value: unknown): ClosedRowsMetadata | undefined {\n return isClosedRows(value) ? closedRowsMetadataByValue.get(value) : undefined;\n}\nexport interface PopulationIdentity {\n readonly kind: \"population\";\n readonly id: string;\n}\n/** The common, entirely closed base of every published DomainView. */\nexport interface DomainView {\n readonly kind: \"domain-view\";\n readonly identity: {\n readonly kind: \"domain-view\";\n readonly id: string;\n };\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}\n"]}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["contracts.ts"],"names":[],"mappings":";;;AAuTA,wCAqBC;AAED,oCAIC;AAED,gDAEC;AAzKY,QAAA,sBAAsB,GAAkB,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAoCxF,MAAM,+BAA+B,GAAkB,MAAM,CAAC,6CAA6C,CAAC,CAAC;AAqF7G,MAAM,gBAAgB,GAAkB,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAO/E,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAU,CAAC;AAC/C,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAA8B,CAAC;AAQ5E,sEAAsE;AACtE,SAAgB,cAAc,CAAM,KAKnC;IACG,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAA+B,CAAC;IAC3D,MAAM,QAAQ,GAAuB,MAAM,CAAC,MAAM,CAAC;QAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC7E,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC1B,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;QACtD,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;QACxD,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;QACpD,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;KACnD,CAAC,CAAC;IACH,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AACD,+EAA+E;AAC/E,SAAgB,YAAY,CAAC,KAAc;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;WACpB,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;WAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,IAAI,CAAC;AACzD,CAAC;AACD,8EAA8E;AAC9E,SAAgB,kBAAkB,CAAC,KAAc;IAC7C,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC","sourcesContent":["import type { MembershipAction } from \"../record/model/core.ts\";\nimport type { AttemptId, EvalId, ExecutionIdentityDigest, ExperimentId, RunId, SlotId, UtcMillis, } from \"../record/model/identifiers.ts\";\nimport type { AttemptLocator } from \"../attempt-locator.ts\";\nexport type { AttemptId, EvalId, ExecutionIdentityDigest, ExperimentId, RunId, SlotId, UtcMillis, };\n/** JSON is the only wire shape accepted by the Sample snapshot codec. */\nexport type JsonValue = null | boolean | number | string | readonly JsonValue[] | {\n readonly [key: string]: JsonValue;\n};\n/** Stable identity for one Sample capability and its portable snapshot. */\nexport interface SampleIdentity {\n readonly kind: \"analysis-sample\";\n readonly id: string;\n}\n/**\n * A public identity for evidence from one immutable Attempt. It deliberately\n * carries a locator rather than Record's nominal selected-reference capability\n * or an AttemptId that could be used as an ad-hoc storage lookup.\n */\nexport interface AttemptEvidenceIdentity {\n readonly kind: \"attempt\";\n readonly locator: AttemptLocator;\n readonly originRunId: RunId;\n}\nexport type AnalysisSelectionProblem = {\n readonly code: \"incomplete-run\";\n readonly runId: RunId;\n} | {\n readonly code: \"record-core-invalid\";\n readonly runId: RunId;\n} | {\n readonly code: \"selection-run-missing\";\n readonly runId: RunId;\n} | {\n readonly code: \"selection-run-unreadable\";\n readonly runId: RunId;\n};\n/**\n * One current target Slot identity. `project-current` keeps only Sample\n * members whose experiment/eval/attempt ordinal aligns, then whose digest\n * still narrows that aligned identity.\n */\nexport interface AnalysisCurrentSlotIdentity {\n readonly experimentId: ExperimentId;\n readonly evalId: EvalId;\n /** Logical attempt identity; never inferred from expectedSlots array order. */\n readonly attemptOrdinal: number;\n /** Narrows an already aligned logical identity; it is not the alignment key. */\n readonly executionIdentityDigest: ExecutionIdentityDigest;\n}\n/** Exact occurrence retained after project-current logical alignment. */\nexport interface AnalysisSlotOccurrenceIdentity {\n readonly runId: RunId;\n readonly slotId: SlotId;\n}\n/** Host-issued selection used by Application, CLI, and Report from-record. */\nexport type AnalysisSelectionRequest = {\n readonly policy: \"explicit-runs\";\n readonly runIds: readonly RunId[];\n} | {\n readonly policy: \"project-current\";\n readonly experimentIds?: readonly ExperimentId[];\n readonly currentSlots: readonly AnalysisCurrentSlotIdentity[];\n};\n/**\n * The exact selection audit retained by a closed SampleSnapshot. `runIds` are\n * the explicit request; `selectedRunIds` are recomputed from the current,\n * non-excluded Sample frame after every monotonic narrowing.\n */\nexport type AnalysisSelectionSummary = {\n readonly policy: \"explicit-runs\";\n readonly runIds: readonly RunId[];\n readonly selectedRunIds: readonly RunId[];\n readonly problems: readonly AnalysisSelectionProblem[];\n} | {\n readonly policy: \"project-current\";\n readonly experimentIds: readonly ExperimentId[] | \"all\";\n readonly selectedRunIds: readonly RunId[];\n readonly problems: readonly AnalysisSelectionProblem[];\n};\nexport interface AnalysisRun {\n readonly runId: RunId;\n readonly experimentId: ExperimentId;\n /**\n * The safe, immutable portion of the selected Run's Core context. A later\n * Core read can be unavailable after selection, in which case no context is\n * invented for that Run.\n */\n readonly context: AnalysisRunContext | null;\n readonly startedAt: UtcMillis;\n readonly completedAt: UtcMillis;\n readonly expectedSlots: readonly SlotId[];\n}\n/**\n * Display- and grouping-safe Run configuration retained by a Sample. It has\n * no Record capability and is recursively JSON-only.\n */\nexport interface AnalysisRunContext {\n readonly execution: AnalysisRunExecution;\n readonly labels: Readonly<Record<string, string>>;\n}\nexport interface AnalysisRunExecution {\n readonly agentId: string;\n readonly model: string | null;\n readonly reasoningEffort: string | null;\n readonly flags: Readonly<Record<string, JsonValue>>;\n}\nexport interface AnalysisSlotRef {\n /** Occurrence identity is always the exact selected Run/Slot pair. */\n readonly runId: RunId;\n readonly slotId: SlotId;\n /** Derived from the associated selected AnalysisRun, never a Record Slot field. */\n readonly experimentId: ExperimentId;\n /** Logical alignment is experiment + eval + durable attempt ordinal. */\n readonly evalId: EvalId;\n readonly attemptOrdinal: number;\n /** This remains an identity-narrowing value, never a logical alignment key. */\n readonly executionIdentityDigest: ExecutionIdentityDigest;\n}\n/** A Member with an exact origin Attempt. */\nexport interface IncludedAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"included\";\n /** Core provenance is not inferred from whether the Attempt is local. */\n readonly action: \"executed\" | \"carried\" | \"accepted\";\n readonly relation: \"origin\" | \"reference\";\n readonly attempt: AttemptEvidenceIdentity;\n}\n/**\n * An expected Slot without an Attempt. `null` means no Member document was\n * recorded; the two actions retain a recorded null Member without suggesting\n * that it is pending work.\n */\nexport interface NotRecordedAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"not-recorded\";\n readonly action: \"not-dispatched\" | \"interrupted\" | null;\n readonly attempt: null;\n}\n/** Core could be read far enough to identify the frame but not its member. */\nexport interface CoreInvalidAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"core-invalid\";\n readonly action: MembershipAction | null;\n readonly attempt: null;\n readonly issues: readonly AnalysisIssue[];\n}\nexport type ActiveAnalysisSlot = IncludedAnalysisSlot | NotRecordedAnalysisSlot | CoreInvalidAnalysisSlot;\n/** A monotonic Sample narrowing preserves the previous, non-nested state. */\nexport interface ExcludedAnalysisSlot extends AnalysisSlotRef {\n readonly state: \"excluded\";\n readonly base: ActiveAnalysisSlot;\n /** Present when `project-current` dropped this Slot for identity mismatch. */\n readonly reason?: \"identity-mismatch\";\n}\nexport type AnalysisSlot = ActiveAnalysisSlot | ExcludedAnalysisSlot;\nexport interface SampleCoverage {\n readonly frameTotal: number;\n readonly selected: number;\n readonly included: number;\n readonly notRecorded: number;\n readonly coreInvalid: number;\n readonly excluded: number;\n}\n/**\n * The closed, portable representation of a Record selection. It contains\n * only selection identity, Core-derived Run/Slot denominator facts, and\n * selection problems. Decoding it can never reopen a Record.\n */\nexport interface SampleSnapshot {\n readonly version: 1;\n readonly identity: SampleIdentity;\n readonly selection: AnalysisSelectionSummary;\n readonly runs: readonly AnalysisRun[];\n readonly slots: readonly AnalysisSlot[];\n readonly coverage: SampleCoverage;\n}\nexport const sampleCapabilityTypeId: unique symbol = Symbol(\"niceeval.analysis.Sample\");\n/** A Host-issued, Scope-bound lazy Record-reading capability. */\nexport interface Sample {\n readonly kind: \"analysis-sample\";\n readonly snapshot: SampleSnapshot;\n readonly [sampleCapabilityTypeId]: true;\n}\nexport type ExperimentGroupIdentity = {\n readonly kind: \"named\";\n readonly groupId: string;\n readonly key: `named/${string}`;\n} | {\n readonly kind: \"singleton\";\n readonly experimentId: ExperimentId;\n readonly key: `singleton/${string}`;\n};\nexport type NonComparableReason = \"eval-population-mismatch\";\nexport interface NonComparableIssue {\n readonly reason: NonComparableReason;\n readonly members: readonly ExperimentId[];\n readonly actual: readonly {\n readonly member: ExperimentId;\n readonly population: JsonValue | null;\n readonly basis: JsonValue | null;\n }[];\n readonly refs: readonly EvidenceRef[];\n readonly params: Readonly<Record<string, JsonValue>>;\n}\nexport type ExperimentComparisonState = {\n readonly state: \"comparable\";\n readonly members: readonly ExperimentId[];\n} | {\n readonly state: \"non-comparable\";\n readonly members: readonly ExperimentId[];\n readonly issues: readonly NonComparableIssue[];\n};\nconst experimentComparisonScopeTypeId: unique symbol = Symbol(\"niceeval.analysis.ExperimentComparisonScope\");\n/** Analysis-issued comparison capability; the backing Sample remains private. */\nexport interface ExperimentComparisonScope {\n readonly group: ExperimentGroupIdentity;\n readonly comparison: ExperimentComparisonState;\n readonly [experimentComparisonScopeTypeId]: true;\n}\nexport interface AnalysisComparisonGroupMismatchError {\n readonly code: \"analysis-comparison-group-mismatch\";\n readonly groups: readonly ExperimentGroupIdentity[];\n}\nexport interface SampleSelector {\n readonly runIds?: readonly RunId[];\n readonly slotIds?: readonly SlotId[];\n}\nexport interface SampleClosedError {\n readonly code: \"analysis-sample-closed\";\n readonly sample: SampleIdentity;\n}\nexport interface SampleSnapshotCodecError {\n readonly code: \"sample-snapshot-invalid\";\n readonly path: readonly string[];\n readonly reason: string;\n}\nexport interface AnalysisRequestError {\n readonly code: \"analysis-request-invalid\";\n readonly reason: string;\n}\nexport type AnalysisInputIssueCode = \"missing\" | \"migration-required\" | \"unsupported\" | \"producer-incompatible\" | \"input-invalid\" | \"reduction-failed\" | \"relation-unmatched\";\nexport interface EvidenceIdentity {\n readonly kind: \"attempt\";\n readonly locator: AttemptLocator;\n}\nexport interface EvidenceRef {\n readonly identity: EvidenceIdentity;\n}\nexport interface AnalysisIssue {\n readonly code: AnalysisInputIssueCode;\n readonly message: string;\n readonly refs: readonly EvidenceRef[];\n}\nexport interface ProducerIdentity {\n readonly id: string;\n}\n/** Internal result of a published AnalysisInput read. It never reaches Report. */\nexport type SampleInputObservation<Value> = {\n readonly state: \"value\";\n readonly value: Value;\n readonly refs: readonly EvidenceRef[];\n readonly producer?: ProducerIdentity;\n} | {\n readonly state: \"missing\" | \"migration-required\" | \"unsupported\" | \"failed\";\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n readonly producer?: ProducerIdentity;\n};\nexport type MetricState = \"available\" | \"partial\"\n/** A specialized closed metric may have no reportable value at all. */\n | \"unavailable\" | \"empty\" | \"migration-required\" | \"unsupported\" | \"failed\";\nexport type MetricBasis = \"attempt\" | \"eval\" | \"run\" | \"pair\" | \"slot\";\nexport type MeasureFormat = string | {\n readonly kind: string;\n readonly options?: JsonValue;\n};\n/** A closed Measure cell: never a selected Record handle or reader callback. */\nexport interface MetricValue<Value = number> {\n readonly value: Value | null;\n readonly state: MetricState;\n readonly samples: number;\n readonly total: number;\n readonly basis: MetricBasis;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n readonly unit?: string;\n readonly format?: MeasureFormat;\n readonly better?: \"higher\" | \"lower\" | \"neutral\";\n readonly bounds?: {\n readonly min?: number;\n readonly max?: number;\n };\n}\nexport interface ClosedRowsIdentity {\n readonly kind: \"closed-rows\";\n readonly id: string;\n}\nconst closedRowsTypeId: unique symbol = Symbol(\"niceeval.analysis.ClosedRows\");\n/** @internal Metadata is retained out-of-band so an ordinary array cannot forge it. */\nexport interface ClosedRowsMetadata {\n readonly identity: ClosedRowsIdentity;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}\nconst closedRowsBrands = new WeakSet<object>();\nconst closedRowsMetadataByValue = new WeakMap<object, ClosedRowsMetadata>();\n/** A branded, frozen array produced only by Analysis query execution. */\nexport interface ClosedRows<Row> extends ReadonlyArray<Readonly<Row>> {\n readonly [closedRowsTypeId]: true;\n readonly identity: ClosedRowsIdentity;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}\n/** @internal Keeps the brand unforgeable to normal public callers. */\nexport function makeClosedRows<Row>(input: {\n readonly rows: readonly Readonly<Row>[];\n readonly identity: ClosedRowsIdentity;\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}): ClosedRows<Row> {\n const rows = [...input.rows] as unknown as ClosedRows<Row>;\n const metadata: ClosedRowsMetadata = Object.freeze({\n identity: Object.freeze({ kind: input.identity.kind, id: input.identity.id }),\n issues: Object.freeze([...input.issues]),\n refs: Object.freeze([...input.refs]),\n });\n Object.defineProperties(rows, {\n [closedRowsTypeId]: { value: true, enumerable: false },\n identity: { value: metadata.identity, enumerable: true },\n issues: { value: metadata.issues, enumerable: true },\n refs: { value: metadata.refs, enumerable: true },\n });\n closedRowsBrands.add(rows);\n closedRowsMetadataByValue.set(rows, metadata);\n return Object.freeze(rows);\n}\n/** @internal Checks actual Analysis issuance, rather than structural shape. */\nexport function isClosedRows(value: unknown): value is ClosedRows<unknown> {\n return Array.isArray(value)\n && closedRowsBrands.has(value)\n && Reflect.get(value, closedRowsTypeId) === true;\n}\n/** @internal Returns immutable metadata registered at Analysis close time. */\nexport function closedRowsMetadata(value: unknown): ClosedRowsMetadata | undefined {\n return isClosedRows(value) ? closedRowsMetadataByValue.get(value) : undefined;\n}\nexport interface PopulationIdentity {\n readonly kind: \"population\";\n readonly id: string;\n}\n/** The common, entirely closed base of every published DomainView. */\nexport interface DomainView {\n readonly kind: \"domain-view\";\n readonly identity: {\n readonly kind: \"domain-view\";\n readonly id: string;\n };\n readonly issues: readonly AnalysisIssue[];\n readonly refs: readonly EvidenceRef[];\n}\n"]}
@@ -178,6 +178,46 @@ export interface Sample {
178
178
  readonly snapshot: SampleSnapshot;
179
179
  readonly [sampleCapabilityTypeId]: true;
180
180
  }
181
+ export type ExperimentGroupIdentity = {
182
+ readonly kind: "named";
183
+ readonly groupId: string;
184
+ readonly key: `named/${string}`;
185
+ } | {
186
+ readonly kind: "singleton";
187
+ readonly experimentId: ExperimentId;
188
+ readonly key: `singleton/${string}`;
189
+ };
190
+ export type NonComparableReason = "eval-population-mismatch";
191
+ export interface NonComparableIssue {
192
+ readonly reason: NonComparableReason;
193
+ readonly members: readonly ExperimentId[];
194
+ readonly actual: readonly {
195
+ readonly member: ExperimentId;
196
+ readonly population: JsonValue | null;
197
+ readonly basis: JsonValue | null;
198
+ }[];
199
+ readonly refs: readonly EvidenceRef[];
200
+ readonly params: Readonly<Record<string, JsonValue>>;
201
+ }
202
+ export type ExperimentComparisonState = {
203
+ readonly state: "comparable";
204
+ readonly members: readonly ExperimentId[];
205
+ } | {
206
+ readonly state: "non-comparable";
207
+ readonly members: readonly ExperimentId[];
208
+ readonly issues: readonly NonComparableIssue[];
209
+ };
210
+ declare const experimentComparisonScopeTypeId: unique symbol;
211
+ /** Analysis-issued comparison capability; the backing Sample remains private. */
212
+ export interface ExperimentComparisonScope {
213
+ readonly group: ExperimentGroupIdentity;
214
+ readonly comparison: ExperimentComparisonState;
215
+ readonly [experimentComparisonScopeTypeId]: true;
216
+ }
217
+ export interface AnalysisComparisonGroupMismatchError {
218
+ readonly code: "analysis-comparison-group-mismatch";
219
+ readonly groups: readonly ExperimentGroupIdentity[];
220
+ }
181
221
  export interface SampleSelector {
182
222
  readonly runIds?: readonly RunId[];
183
223
  readonly slotIds?: readonly SlotId[];
@@ -195,7 +235,7 @@ export interface AnalysisRequestError {
195
235
  readonly code: "analysis-request-invalid";
196
236
  readonly reason: string;
197
237
  }
198
- export type AnalysisInputIssueCode = "missing" | "unsupported" | "producer-incompatible" | "input-invalid" | "reduction-failed" | "relation-unmatched";
238
+ export type AnalysisInputIssueCode = "missing" | "migration-required" | "unsupported" | "producer-incompatible" | "input-invalid" | "reduction-failed" | "relation-unmatched";
199
239
  export interface EvidenceIdentity {
200
240
  readonly kind: "attempt";
201
241
  readonly locator: AttemptLocator;
@@ -218,14 +258,14 @@ export type SampleInputObservation<Value> = {
218
258
  readonly refs: readonly EvidenceRef[];
219
259
  readonly producer?: ProducerIdentity;
220
260
  } | {
221
- readonly state: "missing" | "unsupported" | "failed";
261
+ readonly state: "missing" | "migration-required" | "unsupported" | "failed";
222
262
  readonly issues: readonly AnalysisIssue[];
223
263
  readonly refs: readonly EvidenceRef[];
224
264
  readonly producer?: ProducerIdentity;
225
265
  };
226
266
  export type MetricState = "available" | "partial"
227
267
  /** A specialized closed metric may have no reportable value at all. */
228
- | "unavailable" | "empty" | "unsupported" | "failed";
268
+ | "unavailable" | "empty" | "migration-required" | "unsupported" | "failed";
229
269
  export type MetricBasis = "attempt" | "eval" | "run" | "pair" | "slot";
230
270
  export type MeasureFormat = string | {
231
271
  readonly kind: string;