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
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  title: "实验(Experiment):评谁、怎么跑"
3
3
  sidebarTitle: "实验"
4
- description: "Experiment 是可签入的运行配置:同一批评估用例对着哪个 agent、哪个模型、开哪些 flags、跑几次。评估用例与 experiment 分开的原因——晚绑定,让同一份评估用例换着对象跑。"
4
+ description: "Experiment 是可签入的运行配置:同一批评估用例对着哪个 Agent、哪个模型、开哪些 flags、跑几次。评估用例与 Experiment 分开,同一批评估用例才能换着对象跑。"
5
5
  ---
6
6
 
7
- **experiment** 对着哪个 agent、用哪个模型、开哪些 flags、跑几次。用于做 AB 测试、模型对比、feature 对比——`flags` 就是 A/B 测试里的 feature flag,一个 experiment 是一组 flag 取值。
7
+ Experiment 说明对着哪个 Agent、用哪个模型、开哪些 flags、跑几次。它用来比较模型、prompt 和功能开关:`flags` 就是 A/B 测试里的 feature flag,一个 Experiment 是一组 flag 取值。
8
8
 
9
- ## 一个 experiment 里有什么
9
+ ## 一个 Experiment 里有什么
10
10
 
11
- experiment 是 `experiments/` 下可签入的 TypeScript 文件,核心就几个字段:
11
+ Experiment 是 `experiments/` 下可签入的 TypeScript 文件,核心就几个字段:
12
12
 
13
13
  ```ts
14
14
  // experiments/concise.ts
@@ -21,27 +21,27 @@ export default defineExperiment({
21
21
  });
22
22
  ```
23
23
 
24
- - `agent`:评谁。放的是已经配置好的实例——被测系统的 URL、鉴权传给 Adapter 工厂,不进 experiment 的其它字段。
25
- - `model` / `flags`:由 Adapter 消费的实验条件。`flags` 只接受扁平的字符串、有限数字或布尔值。[NiceEval](https://niceeval.com/) 不解释具体策略;普通 Adapter 声明 `parseFlags` 时先同步校验和规范化,再经 `ctx` 递给 Adapter,由 Adapter 随请求转发、应用按需切换——这正是 [Tier](/zh/explanation/tier) 里模型对比(Tier 1)和 feature A/B(Tier 3)的通道。
26
- - `attempts`、`budget`、并发、`sandbox` 等运行参数:怎么跑、跑多少。完整字段见[写实验](/zh/tutorials/write-experiment)。
24
+ - `agent`:评谁。这里放已经配置好的 Adapter 实例。被测系统的地址和鉴权在创建实例时传给 Adapter,不写进 Experiment 的其它字段。
25
+ - `model` / `flags`:交给 Adapter 的实验条件。`flags` 只接受扁平的字符串、有限数字或布尔值,NiceEval 不解释它们的含义。Adapter 声明了 `parseFlags` 时,先校验和规范化,再经 `ctx` 交给 Adapter;Adapter 随请求转发,应用按值切换行为。模型对比(Tier 1)和功能 A/B(Tier 3)都走这条路,见[接入等级](/zh/explanation/tier)。
26
+ - `attempts`、`budget`、并发、`sandbox` 等运行参数:怎么跑、跑多少。完整字段见[编写实验](/zh/tutorials/write-experiment#常用字段)。
27
27
 
28
28
  Experiment 还有一对实验级 Hook `setup` / `teardown`:整个实验只跑一次,在你自己的机器上执行,用来起停所有 Attempt 共享的服务(比如一条到内网服务的隧道、一个实验专用的 mock server)。
29
29
 
30
- `setup` 在本实验第一个 Attempt 派发前执行。`teardown` 在全部 Attempt 收尾后执行(中断也执行),当且仅当 `setup` 的时点已经走到才触发。
30
+ `setup` 在这个实验的第一个 Attempt 开始前执行。`teardown` 在全部 Attempt 结束后执行,运行被中断时也会执行;但只有 `setup` 已经执行过,`teardown` 才会执行。
31
31
 
32
- 要按实验在 Sandbox 里准备环境,把 action 挂在 `sandbox` 字段的 `.before()` 链上。稳定 action 会按指纹形成可复用准备前缀;动态回调可以用 `context.onCleanup()` 登记收尾。写法见[写实验 · 启动 Experiment 共享服务](/zh/tutorials/write-experiment#启动-experiment-共享服务)与[Sandbox · 按顺序准备 Sandbox](/zh/tutorials/sandbox-providers#按顺序准备-sandbox)。
32
+ 要在 Sandbox 里为整个实验准备环境,把准备步骤挂在 `sandbox` 字段的 `.before()` 上。内容不变的步骤下次可以直接沿用;动态回调可以用 `context.onCleanup()` 登记收尾。写法见[启动实验共享服务](/zh/tutorials/experiment-services)与[Sandbox · 按顺序准备 Sandbox](/zh/tutorials/sandbox-providers#按顺序准备-sandbox)。
33
33
 
34
- 同一实验里的评估用例需要不同预制环境时,把对应的 template-bearing `sandbox` layer 直接放在各评估用例上,并让 Experiment 不再提供 template。重复 layer 用普通 TypeScript 辅助函数复用;这里没有 environment profile registry。同一个 Experiment 仍能覆盖全部评估用例,因为 link planning 会逐条把评估用例 layer 与 Experiment layer 配对。写法见[写实验 · 让不同评估用例使用不同预制环境](/zh/tutorials/write-experiment#让不同评估用例使用不同预制环境)。
34
+ 同一个实验里,不同评估用例需要不同的预制环境时,把指定预制环境的 `sandbox` 配置写在各评估用例上,Experiment 就不再指定。重复的配置用普通的 TypeScript 函数复用,不需要额外注册。同一个 Experiment 仍然能覆盖全部评估用例,NiceEval 会逐条把评估用例的配置和 Experiment 的配置合在一起。写法见[编写实验 · 不同评估用例需要不同环境](/zh/tutorials/write-experiment#不同评估用例需要不同环境)。
35
35
 
36
36
  ## 矩阵对比
37
37
 
38
- 要比较的每个变体写一个 experiment 文件:两个模型就是两个文件,只差 `model` 一行。prompt A/B 就是只差一个参数。同一批评估用例在多个 experiment 下各跑一遍,固定 Inspection operation 在同一 `PublicationCutoff` 中比较已发布 Attempt;每个 Experiment 保留自己的评估用例集合与分母,不伪造共同交集。适合比什么、结果怎么读,见[实验矩阵](/zh/tutorials/experiments)。
38
+ 要比较的每个变体写一个 Experiment 文件:两个模型就是两个文件,只差 `model` 一行。prompt A/B 就是只差一个参数。同一批评估用例在多个 Experiment 下各跑一遍,再比较同一时刻已发布的结果。每个 Experiment 按自己跑的评估用例计算分母,不会硬凑一个共同的交集。适合比什么、结果怎么读,见[编写实验](/zh/tutorials/write-experiment#比较两个模型)。
39
39
 
40
- 只用于报告归类、不会改变 Attempt 里发生什么的值写进 `labels`。它们是 Run 的不可变配置上下文,不会透传给 Adapter 或评估用例。改变 `labels` 后再次运行会建立带新标注的 Run,并可按当次 policy 引用既有 Attempt;历史 Run 保留当时的 `labels`。
40
+ 只用于报告归类、不影响运行过程的值写进 `labels`。它们记在 Run 上,不会传给 Adapter 或评估用例。改了 `labels` 再运行,会建立一个带新标注的 Run,没受影响的旧结果照常沿用;历史 Run 保留当时的 `labels`。
41
41
 
42
42
  ## 相关阅读
43
43
 
44
- - [写实验](/zh/tutorials/write-experiment) — `defineExperiment` 的完整字段:attempts、预算、并发与 sandbox。
45
- - [实验矩阵](/zh/tutorials/experiments) — 跨 agent / model / flags 的对比怎么组织、怎么读结果。
46
- - [评估](/zh/explanation/evals) — 另一半:评估用例是什么、生命周期与 verdict。
44
+ - [编写实验](/zh/tutorials/write-experiment) — 比较模型和 prompt、读对比结果,以及常用字段。
45
+ - [启动实验共享服务](/zh/tutorials/experiment-services) — `setup` / `teardown` 的写法与时序。
46
+ - [评估](/zh/explanation/evals) — 另一半:评估用例是什么、生命周期与判定。
47
47
  - [Tier](/zh/explanation/tier) — `model` / `flags` 各在哪一档生效。
@@ -12,7 +12,7 @@ Judge 用独立裁判模型评估事实一致性、摘要忠实度和说明质
12
12
  在模块顶层写出标准。`rubric` 说明评价维度,`anchors` 给连续质量量尺提供可校准的落点:
13
13
 
14
14
  ```ts
15
- import { closeQA, defineJudge } from "niceeval";
15
+ import { defineJudge } from "niceeval";
16
16
 
17
17
  const explainsRisk = defineJudge({
18
18
  name: "explains-risk",
@@ -51,29 +51,36 @@ export default defineEval({
51
51
 
52
52
  需要观察图片内容时,在材料中放入 `judgeImage({ body, mediaType })`。它冻结 PNG 或 JPEG 字节,不创建另一个裁判,也不发起额外请求。图片和文字经同一次 Judge 调用发送,并保存在同一条断言的证据中。接线步骤见 [附加图片材料](/zh/tutorials/verify-judge#附加图片材料)。
53
53
 
54
- `t.judge(material, explainsRisk)` 与 `t.check(material, explainsRisk)` 都登记一条测量 Assertion。它们会共享材料快照、预算、求值、审计、封口和 handle;没有 Match 允许列表。
54
+ `t.judge(material, explainsRisk)` 与 `t.check(material, explainsRisk)` 都登记一条测量 Assertion。它们会共享材料快照、预算、求值、审计、结果保存和 handle;没有 Match 允许列表。
55
55
 
56
56
  ## 直接使用现成 Judge
57
57
 
58
58
  root `t`、Session 与 Turn 都提供现成方法,并返回 Assertions 的 `MeasurementAssertionHandle<Kind>`。例如:
59
59
 
60
60
  ```ts
61
- const answer = await t.send("根据材料回答问题。");
62
-
63
- answer.closeQA({
64
- input: "根据材料回答问题。",
65
- output: answer.message,
66
- context: "材料只说明产品在周五发布。",
67
- }).gate(0.8).label("只依据材料回答");
68
-
69
- // 与上一条调用等价的 factory 形式:
70
- answer.check(
71
- { input: "根据材料回答问题。", output: answer.message, context: "材料只说明产品在周五发布。" },
72
- closeQA(),
61
+ import { eventMatch } from "niceeval/expect";
62
+ const answer = await t.send("列出风险与回滚步骤。");
63
+ answer.closeQA("这轮是否说明风险和可执行的回滚步骤?")
64
+ .gate(0.8).label("回滚说明");
65
+
66
+ // 特殊检查可以显式选择全部助手发言。
67
+ answer.closeQA(
68
+ eventMatch("message", { role: "assistant" }),
69
+ "全部发言是否清楚说明风险?",
73
70
  ).gate(0.8);
74
71
  ```
75
72
 
76
- 可直接调用的方法是 `factuality(material, options?)`、`faithfulness(material, options?)`、`instructionFollowing(material, options?)`、`pairwisePreference(material, options?)` 和 `closeQA(material, options?)`。它们只 factory 后交给当前接收者的 `check`,不会多登记 Assertion。
73
+ `closeQA(selector, question, options?)` 将全部命中材料保序交给一次 Judge。问题是只依据材料回答的验收问题,不是预设答案。
74
+ Agent 的 `closeQA(question, options?)` 默认使用该 Turn、Session 或 Attempt 的完整正式历史,包含消息与工具事实。它不会只挑最后一句或成功操作。
75
+ 显式 EventMatch 选择三类事件视图;工具输入和回执问答使用 ToolMatch,或自定义 MaterialMatch。
76
+
77
+ 这些写法都组合评分 Match 并交给同一个 `check`。`usedNoTools()` 等应用断言则封装固定判据,不接受另一个 Match。
78
+ 满足条件为1,条件不成立为0,证据不足为 `unavailable`。完整空集为0且不调用模型;材料缺失或超限不能补零或截断后评分。
79
+
80
+ Adapter 通过 `create` 提供应用 ctx,`defineMaterialMatch` 的同步 reader 在断言登记时读取当前只读 ctx。
81
+ selector 的 predicate 只判断单项;`and` 约束同一项。普通存在性用 `t.check(selector).gate()`,整组问答用 `t.closeQA(selector, question).gate(0.8)`。
82
+
83
+ `factuality`、`faithfulness`、`instructionFollowing` 与 `pairwisePreference` 接收显式材料,构造 Match 后交给同一 `check`。
77
84
 
78
85
  ## 配置裁判 Provider
79
86
 
@@ -99,6 +106,7 @@ export default defineConfig({
99
106
  | `OpenAIProvider` | OpenAI 或显式兼容网关 | `OPENAI_API_KEY` |
100
107
  | `VercelProvider` | Vercel AI Gateway | `AI_GATEWAY_API_KEY` |
101
108
  | `OpenRouterProvider` | OpenRouter | `OPENROUTER_API_KEY` |
109
+
102
110
  | `TypesafeProvider` | TypeSafe System One | `TYPESAFE_API_KEY` |
103
111
 
104
112
  四个工厂都从 `niceeval/judge` 导出。Vercel 工厂表示 AI Gateway,不表示 Vercel Sandbox 或通用 AI SDK model object。
@@ -1,37 +1,60 @@
1
1
  ---
2
- title: "NiceEval 的运行后数据流"
3
- sidebarTitle: "架构概览"
4
- description: "理解 Record、固定 Inspection operation、Query、Show 和 View 的职责边界。"
2
+ title: "NiceEval 的整体模型:一次评估由哪些部分组成"
3
+ sidebarTitle: "整体模型"
4
+ description: "评估用例、Experiment、Adapter、Sandbox、Runner 和 Record 各管什么,它们怎样连成一次运行,以及为什么同一条评估要跑多次。"
5
5
  ---
6
6
 
7
- NiceEval 将运行后的数据分成三层。Record 保存 Run 与已发布 Attempt 的运行事实。Inspection operation 关闭读取语义。三个 consumer 各自交付结果。
7
+ 一次评估回答一个问题:被测对象在这个配置下,能不能把这件事做对。NiceEval 把这个问题拆成几个部分,每部分只管一件事。
8
8
 
9
9
  ```text
10
- published Run and Attempt facts
11
- ↓
12
- fixed Inspection operations
13
- ↓
14
- machine Query | terminal Show | browser View
10
+ 评估用例(什么算做对) Experiment(对着谁、怎么跑)
11
+ \ /
12
+ \ /
13
+ Runner(调度 Attempt、打分)
14
+ │
15
+ Adapter(连接被测对象)
16
+ │
17
+ 被测对象(直连,或在 Sandbox 里运行)
18
+ │
19
+ Record(保存每个 Attempt 的结果)
20
+ │
21
+ show(终端) · view(浏览器) · query(JSON)
15
22
  ```
16
23
 
17
- ## Record 保存事实
24
+ ## 评估用例:什么算做对
18
25
 
19
- 每个项目只有一个 canonical `.niceeval/record.sqlite`。Runner 创建 Run 时冻结预期 slot;每个 Attempt 在自己的原子发布事务完成后立即成为可读事实,即使 origin Run 仍是 `active`。已发布 Attempt 和终态 Run 都不可修改。
26
+ 评估用例写在 `evals/*.eval.ts` 里,说明发什么、检查什么。它不写对着哪个 Agent、用哪个模型跑,所以同一条评估用例可以换着被测对象跑。
20
27
 
21
- 一次 Invocation 完整收尾并通过 portable gate 后,canonical 文件本身即可复制或归档。`query` 和 `show` 的 `--record <file>` 会完整校验外部副本后只读打开。
28
+ 检查分两类。确定的事实用确定的规则检查,例如调用了哪个工具、测试有没有通过。开放式的质量交给 Judge,也就是裁判模型,由它按你写的标准打分。见[评估用例](/zh/explanation/evals)和 [Judge](/zh/explanation/judge)。
22
29
 
23
- ## Inspection 关闭读取语义
30
+ ## Experiment:对着谁、怎么跑
24
31
 
25
- Inspection operation 在返回前决定 source、selector、sealed cutoff、数据缺口、issues、Evidence 和比较方式。它返回可编码 plain data,不把 reader、数据库连接或文件路径交给调用者。
32
+ Experiment 写在 `experiments/` 里,说明用哪个 Adapter、哪个模型、开哪些 flags、每条评估跑几次。要比较两个模型,就写两份只差 `model` 的 Experiment,对着同一批评估用例各跑一遍。见 [Experiment](/zh/explanation/experiment)。
26
33
 
27
- 固定 catalog 提供 Run、Attempt、trace、diff、sources、artifacts 和 Run comparison。新的读取需求通过新 operation 或穷尽 union 扩展表达,不通过临时 SQL、JSON path 或公式实现。
34
+ ## Adapter 和 Sandbox:怎样连上被测对象
28
35
 
29
- ## 三个独立 Consumer
36
+ Adapter 是你写的连接代码。它把评估用例里的动作发给被测对象,再把返回翻译成 NiceEval 能读的事件,例如回复、工具调用和用量。接入可以从只实现 `send` 开始,需要时再加 OTel 或 flags,见 [Adapter](/zh/explanation/adapter) 和[接入等级](/zh/explanation/tier)。
30
37
 
31
- - `niceeval query` 是 machine Query,面向 AI、脚本和 CI。它输出 `niceeval.query/v1` JSON document。
32
- - `niceeval show` 是 terminal Show,面向人在终端快速审阅和下钻。
33
- - `niceeval view` 是 browser View,面向人在受保护的 loopback 浏览器使用固定第一方 Insight。
38
+ Coding Agent 要在真实文件系统里改代码、跑命令,NiceEval 先创建一个隔离的 Sandbox,再在里面启动 Agent。直连的 Web Agent 和业务应用不需要 Sandbox。
34
39
 
35
- 三个 consumer 共享同一个固定 Inspection result。它们各自负责 JSON protocol、终端文字布局或浏览器界面,不共享 formatter、路由、组件、主题或呈现 schema,也不重选成员或重算业务结果。
40
+ ## Runner 和 Attempt:为什么同一条评估要跑多次
36
41
 
37
- 继续阅读 [CLI](/zh/reference/cli) 了解完整命令,或阅读 [Record](/zh/explanation/record) 了解外部文件的校验边界。
42
+ LLM 的输出不确定,同一个问题这次答对,下次可能答错。只跑一次,说明不了改动是否真的有效。所以 Experiment 用 `attempts` 指定每条评估用例跑几次,每一次叫一个 Attempt。
43
+
44
+ Runner 按 Experiment 选出评估用例,展开成一批 Attempt,按并发限制调度执行。每个 Attempt 得到一个判定:`passed`、`failed`、`errored` 或 `skipped`。一批 Attempt 汇总起来,就是这条评估在这个配置下的通过率。计分制评估累计分数而不是读通过率,见[通过制与计分制](/zh/tutorials/evaluation-kinds)。
45
+
46
+ `failed` 和 `errored` 要分开看。`failed` 是被测对象正常回复了,但没做对。`errored` 是没能拿到可信的结果,例如服务没启动或凭据失效,它说明的是环境问题,不是被测对象的能力。
47
+
48
+ ## Record:结果留下来,供对比和追查
49
+
50
+ 每个 Attempt 跑完,结果连同对话、工具调用、文件改动、耗时和花费,一起保存在项目的 `.niceeval/record.sqlite`,这就是 Record。
51
+
52
+ 结果留下来有两个用处。一是追查:回到某一次失败,看被测对象实际做了什么。二是沿用:再次运行时,没受改动影响的结果直接沿用,只重跑受影响的部分,见[重跑与沿用](/zh/tutorials/rerun-and-cache)。
53
+
54
+ 读结果有三个入口:`show` 在终端逐层查看,你和 Coding Agent 都用它排查;`view` 在浏览器里翻对话和耗时;`query` 输出 JSON,给脚本和 CI 读取。三处读到的结论一致,见[运行结果的数据流](/zh/explanation/results-flow)。
55
+
56
+ ## 接下来
57
+
58
+ - 第一次使用:读[快速开始](/zh/tutorials/quickstart)。
59
+ - 想了解某个部分:按上面每节末尾的链接继续读。
60
+ - 想查字段和命令:去 [Reference](/zh/reference/define-eval)。
@@ -1,31 +1,46 @@
1
1
  ---
2
2
  title: "Record"
3
3
  sidebarTitle: "Record"
4
- description: "了解 canonical SQLite Record 的写入、携带与读取边界。"
4
+ description: "了解项目结果文件 .niceeval/record.sqlite 保存什么、怎样复制给别人,以及读取时会校验什么。"
5
5
  ---
6
6
 
7
- Record 是项目唯一的持久事实集。canonical SQLite 文件位于 `.niceeval/record.sqlite`。
7
+ 你想把一次运行的结果交给同事复核,或者归档一份基线留着以后对比。NiceEval 的所有运行结果都在一个文件里:项目里的 `.niceeval/record.sqlite`,这就是 Record。
8
8
 
9
- Run create、运行中的聚合、已发布 Attempt、Attachment、Content、协调状态和 Invocation Session 都是同一份 ProjectDatabase 的 rows。
9
+ ## Record 里有什么
10
10
 
11
- Run 创建后立即可发现。Attempt 完成原子发布后,就能在固定 `PublicationCutoff` 中被读取;Run 不必先收口。
11
+ Run、运行中的汇总、已发布的 Attempt,以及它们的附件和内容,都保存在这个文件里。缓存、凭据和用户级服务状态不在里面。
12
12
 
13
- Inspection、`query`、`show` 和 `view` 都遵守这条边界。发布后的 Attempt closure 不可修改。缓存、凭据和 OS-user Service state 不属于 Record。
13
+ Run 一创建就能被查到。Attempt 跑完并发布后,就能被读取,不必等所在的 Run 结束。已发布的 Attempt 不会再被修改。`query`、`show` 和 `view` 都只读已发布的结果。
14
14
 
15
- ## 携带 Record
15
+ ## 把结果交给别人
16
+
17
+ 运行完整结束后,直接复制这个文件:
16
18
 
17
19
  ```sh
18
20
  cp .niceeval/record.sqlite ./baseline.record.sqlite
19
- niceeval query explain --record ./baseline.record.sqlite --request request.json
20
- niceeval show --record ./baseline.record.sqlite
21
21
  ```
22
22
 
23
- canonical 文件本身即可复制或归档。不要复制 WAL、checkpoint 或 staging 文件,也不要在复制后修改 SQLite 内容。
23
+ 只复制 `record.sqlite` 本身。不要复制旁边的 WAL、checkpoint 或 staging 文件,复制后也不要修改里面的 SQLite 内容。
24
+
25
+ 拿到别人的文件后,用 `--record` 指向它:
26
+
27
+ ```sh
28
+ pnpm exec niceeval show --record ./baseline.record.sqlite
29
+ pnpm --silent exec niceeval query explain --record ./baseline.record.sqlite --request request.json
30
+ ```
31
+
32
+ `view` 只读当前项目的 `.niceeval/record.sqlite`,不接受 `--record`。
33
+
34
+ ## 读取外部文件前会先校验
35
+
36
+ `query` 和 `show` 把 `--record` 指定的文件当作不可信输入。只有格式版本完全匹配、SQLite 完整性检查通过、内部数据一致时,命令才会读取。校验不通过时,命令直接报错,不会迁移、修补或只读一部分。
37
+
38
+ 文件被拒绝时,先确认它是运行结束后复制的完整单文件,复制期间没有别的进程在写。具体错误和下一步见[排查失败的评估结果](/zh/troubleshooting/debugging#无法打开结果)。
24
39
 
25
- `query` 与 `show` 把 `--record` 指定的文件当 hostile input。只有精确 current schema、SQLite integrity 和领域不变量全部成立时才读取;命令不会迁移、修补或部分读取。Record 仍可能包含敏感业务内容;分享者负责权限、脱敏和保留策略。
40
+ Record 可能包含敏感的业务内容,例如对话原文和文件改动。分享前由你负责权限、脱敏和保留期限。
26
41
 
27
- ## 读取边界
42
+ ## Record 不负责什么
28
43
 
29
- Record 不负责统计、比较或页面。固定 Inspection operation 在一个 `PublicationCutoff` 读取已发布事实,再把闭合结果交给 `query`、`show` 或第一方 `view`。读取路径不能把数据库、reader、Content handle 或 SQL 能力交给外部代码。
44
+ Record 只保存结果,不做统计、比较或页面。NiceEval 内置的固定查询读取已发布的结果,再把完整的查询结果交给 `query`、`show` 或 `view`。外部代码拿不到数据库连接、读取对象或 SQL 能力。
30
45
 
31
- 查看 [CLI](/zh/reference/cli) 选择读取方式。
46
+ 选择哪种查看方式见 [CLI](/zh/reference/cli)。
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: "NiceEval 的运行后数据流"
3
+ sidebarTitle: "运行结果的数据流"
4
+ description: "理解运行结果保存在哪里,以及 query、show 和 view 三个查看入口各管什么。"
5
+ ---
6
+
7
+ 一次运行结束后,你可能在终端看结果,也可能在浏览器里翻对话,或者让 CI 脚本读 JSON。三种方式看到的是同一份结果,只是排版不同。这一页说明结果保存在哪里、怎样被读出来,以及三个查看入口各管什么。
8
+
9
+ ```text
10
+ 项目里的 .niceeval/record.sqlite(已发布的 Run 和 Attempt)
11
+ ↓
12
+ NiceEval 内置的固定查询
13
+ ↓
14
+ query(JSON) | show(终端) | view(浏览器)
15
+ ```
16
+
17
+ ## 结果保存在一个文件里
18
+
19
+ 每个项目的运行结果都保存在 `.niceeval/record.sqlite`,这就是 Record。`niceeval exp` 开始时创建 Run,并记下这次计划要跑的所有 Attempt。每个 Attempt 跑完就单独发布,马上可以读到,不必等整个 Run 结束。已发布的 Attempt 和已结束的 Run 都不会再被修改。
20
+
21
+ 运行完整结束后,这个文件本身就可以复制或归档。要读别人交给你的副本时,给 `query` 或 `show` 加 `--record <file>`;NiceEval 会先完整校验这个文件,再只读打开。
22
+
23
+ ## 读取规则由 NiceEval 固定
24
+
25
+ 读取结果时,选哪些 Run、读到哪个时刻为止、哪些结果缺失、有哪些问题、用什么证据、怎样比较,都由 NiceEval 内置的固定查询决定。查询返回的是普通数据,不会把数据库连接、文件路径或读取对象交给调用者。
26
+
27
+ 内置查询覆盖 Run、Attempt、trace、diff、sources、artifacts 和 Run 之间的比较。你不能用临时 SQL、JSON path 或公式自定义读取方式。
28
+
29
+ ## 三个查看入口
30
+
31
+ - `niceeval show` 在终端里先看总览,再逐层查看某个 Attempt 的对话、耗时和改动。你和 Coding Agent 都用它排查问题。
32
+ - `niceeval query` 输出结构化 JSON,给脚本和 CI 读取,Agent 需要精确字段时也用它。
33
+ - `niceeval view` 给人在浏览器用,打开只监听本机地址、受访问保护的 Insight 界面。
34
+
35
+ 三个入口读到的是同一份查询结果。它们只负责各自的排版:JSON、终端文字或浏览器页面。它们不会各自挑选结果,也不会重新计算通过率或分数,所以同一个 Run 在三处看到的结论一致。
36
+
37
+ 完整命令见 [CLI](/zh/reference/cli)。结果文件怎样复制和校验,见 [Record](/zh/explanation/record)。
@@ -1,13 +1,34 @@
1
1
  ---
2
- title: "运行、封口与读取"
2
+ title: "运行怎样产出可读的结果"
3
3
  sidebarTitle: "运行器"
4
- description: "了解 Runner 如何发布 Run,以及读取路径为什么只看已封口事实。"
4
+ description: "了解 Runner 怎样创建 Run、逐个发布 Attempt,以及查看命令为什么只读已发布的结果。"
5
5
  ---
6
6
 
7
- Runner 为选中的 Experiment 创建 Run,并在创建事务中冻结 `runId`、`invocationId` 与全部 expected slots。每个 Attempt 完成自己的 closure 后独立原子发布;已发布 Attempt 即使其 Run 仍为 `active`,也能被读取、比较、沿用或显式采用。尚未发布的聚合和晚到写入不对读取面可见。
7
+ 你启动 `niceeval exp` 后,还没等它跑完就想看已经出来的结果,或者想知道运行中途被打断时哪些结果还算数。这一页说明 Runner 怎样把一次运行变成可以查看的结果。
8
8
 
9
- 命令结束后的 receipt 给出 `createdRunIds` 与 `publicationCutoff`。把它们作为稳定的运行边界:人用 `niceeval view --run <run-id>` 审阅,AI、脚本和 CI 先从 `niceeval query discover` 获取可用 operation,再运行对应 request。
9
+ ## Run 在开始时就定下要跑什么
10
10
 
11
- View 在一个固定 `PublicationCutoff` 中读取事实。新 publication 出现后,页面提示用户刷新;用户确认后才切换到新的 cutoff。
11
+ Runner 为每个选中的 Experiment 创建一个 Run。创建时,它记下 `runId`、这次运行的 `invocationId`,以及这次计划要跑的所有 Attempt。之后这份计划不会再变,所以通过率的分母在开始时就确定了。
12
12
 
13
- Runner 不把数据库、执行工作目录或未封口记录交给读取路径。运行后查看的 selector、缺口、Evidence 与 comparison 由固定 Inspection operation 决定。
13
+ ## 每个 Attempt 跑完就单独发布
14
+
15
+ 一个 Attempt 跑完、结果全部写好后,会单独发布。发布后它马上可以被查看、比较、在下次运行中沿用,或用 `niceeval accept` 明确采用,即使所在的 Run 仍是 `active`。
16
+
17
+ 还没发布的 Attempt、尚未算完的汇总,以及晚到的写入,都不会出现在任何查看命令里。所以你在运行中途看到的每条结果都是完整的,不会读到写了一半的数据。
18
+
19
+ ## 运行结束时拿到这次的 Run ID
20
+
21
+ `niceeval exp` 结束时,终端的 `NEXT` 面板会列出这次新建的 Run,并给出两条查看命令:
22
+
23
+ ```sh
24
+ pnpm exec niceeval show --run <run-id>
25
+ pnpm exec niceeval view --run <run-id>
26
+ ```
27
+
28
+ 加 `--json` 时,最后一行是这次运行的 receipt,里面的 `createdRunIds` 列出新建的 Run,`publicationCutoff` 标记这次运行结束时已发布到哪里。`publicationCutoff` 不要解析,原样传给后续命令。脚本和 CI 先运行 `niceeval query discover` 找到可用的查询,再发送完整 request。
29
+
30
+ ## 浏览器页面不会自己跳到新结果
31
+
32
+ `niceeval view` 打开时,固定读取当时已发布的结果。之后又有新的 Attempt 发布时,页面会提示刷新;你确认后,页面才切换到最新结果。这样你在对比数据时,页面不会中途变化。
33
+
34
+ Runner 不会把数据库、执行时的工作目录或尚未发布的记录交给查看命令。查看时选哪些结果、缺了什么、用什么证据、怎样比较,都由 NiceEval 内置的固定查询决定,见[运行结果的数据流](/zh/explanation/results-flow)。
@@ -1,135 +1,46 @@
1
1
  ---
2
2
  title: "NiceEval"
3
3
  sidebarTitle: "首页"
4
- description: "NiceEval 是框架无关的 Agent-Native 评估框架与 Harness,为你的 AI 应用构建评估提供完整的闭环。"
4
+ description: "像写单元测试一样写评估,像做实验一样比较 Agent。用 TypeScript 断言工具调用、回复、代码改动和业务结果,在本地反复运行并追查每一次失败。"
5
5
  ---
6
6
 
7
- import { SandboxMode } from '/snippets/diagram-sandbox-mode.jsx';
8
- import { DirectMode } from '/snippets/diagram-direct-mode.jsx';
9
-
10
7
  <div align="center">
11
8
 
12
9
  # NiceEval
13
10
 
14
- **为你的 AI 应用打造的 Agent-Native 评估框架与 Harness**
11
+ **像写单元测试一样写评估,像做实验一样比较 Agent**
15
12
 
16
13
  </div>
17
14
 
18
- [NiceEval](https://niceeval.com/) 是一个受 [eve](https://eve.dev) 启发的 Agent-Native 评估框架与 Harness:`defineEval` 负责写清楚测什么,Harness 负责连接被测对象、运行、评分并生成报告。两者合在一起,就是从编写评估用例到查看结果、优化 Agent 的完整闭环。它首先追求良好的开发体验:一个项目可以在 10 分钟左右接入,评估用例文件足够直观,结果也足够容易读。
15
+ 你改了 prompt、换了模型、给 Coding Agent 写了一个新 Skill,或者调了 LLM 游戏里的 NPC,想知道它到底有没有变好。NiceEval 让你用 TypeScript 写下“什么算做对”,然后反复运行、打分、比较,并回到每一次失败去看 Agent 实际做了什么。
19
16
 
20
- 它也框架无关、足够通用:可以用来评估给 Claude Code / Codex 写的 Coding Agent 插件、Hook 和 Skill,也可以评估你自己的 AI Agent 应用。无论你的应用基于 AI SDK、LangGraph、Pi,还是自研 Agent loop,都可以通过 Adapter 接入。
17
+ 所有运行都在你自己的机器和 CI 里完成,不需要注册账号。
21
18
 
22
- Run 会持续发布已完成的 Attempt 到项目内唯一的 Record。你可以用 `niceeval show` 快速审阅,用 `query` 交给自动化,并在 `niceeval view` 中查看同一批事实的详情、通过率、成本和延迟。
19
+ ## 从这里开始
23
20
 
24
21
  <CardGroup cols={3}>
25
- <Card title="Agent Framework 接入" icon="code-branch" href="/zh/examples">
26
- 对照 AI SDK、Claude SDK、Codex SDK、pi-agent-core 和 LangGraph 的可运行接入项目。
22
+ <Card title="NiceEval 是什么" icon="book-open" href="/zh/introduction">
23
+ 适合评什么、一条评估用例长什么样、和其它工具有什么不同。
27
24
  </Card>
28
- <Card title="Coding Agent 扩展" icon="wand-magic-sparkles" href="/zh/examples/coding-agent-extensions">
29
- 用真实 Workspace 和对照实验衡量 Skill、提示词与 Plugin Benchmark 的实际收益。
25
+ <Card title="快速开始" icon="play" href="/zh/tutorials/quickstart">
26
+ 十分钟左右跑通第一条评估用例,并看到结果。
30
27
  </Card>
31
- <Card title="自写 Adapter" icon="globe" href="/zh/examples/ai-agent-application">
32
- 查看一个覆盖工具、图片、多轮、模型对比和 OTel 的完整 AI Agent 项目。
28
+ <Card title="可运行示例" icon="grid-2" href="/zh/examples">
29
+ AI SDK、Claude SDK、Codex SDK、Pi、LangGraph 的完整接入项目。
33
30
  </Card>
34
31
  </CardGroup>
35
32
 
36
- ## 架构
37
-
38
- [NiceEval](https://niceeval.com/) 支持两种接入方式,取决于被测系统是否需要隔离工作区。
39
-
40
- ### 模式一:Sandbox
41
-
42
- 跑 Codex、Claude Code 等需要 Sandbox 的 coding agent:
43
-
44
- <SandboxMode />
45
-
46
- ### 模式二:直连
47
-
48
- 直接连接你自己的 AI Agent:
49
-
50
- <DirectMode />
51
-
52
- - **NiceEval runner** 负责发现评估用例、调度运行、打分并发布 Run 与 Attempt 事实。
53
- - **Agent 适配器** 是开放边界:你决定如何调用被测系统,以及如何把输出映射成标准事件流。
54
- - **Sandbox** 负责文件系统隔离:需要真实 workspace 的 coding agent 使用 Docker 或云端 Sandbox。自有 Web Agent 可以直连,无需 Docker。
55
-
56
- ## 核心概念一览
57
-
58
- | 概念 | 一句话 |
59
- |---|---|
60
- | [评估用例](/zh/explanation/evals) | 一个测试用例:写在 `evals/*.eval.ts` 里,描述测什么。 |
61
- | [Experiment](/zh/explanation/experiment) | 可签入的运行配置:决定连哪个 Adapter、什么 model、什么 flags。 |
62
- | [Adapter](/zh/explanation/adapter) | 连接被测系统的适配层:实现一个 `send`,把返回翻译成标准事件流。 |
63
- | [Sandbox](/zh/tutorials/sandbox-providers) | 需要隔离工作区的 coding agent 才用得到。直连 Web Agent 不需要。 |
64
- | [Tier](/zh/explanation/tier) | 接入 Adapter 的三档投入:Tier 1 只接 send,Tier 2 加 OTel 换调用瀑布图,Tier 3 侵入改造做 feature A/B。 |
65
-
66
- 完整术语表见[架构概览](/zh/explanation/overview)。
67
-
68
- ## 示例
69
-
70
- 跑一条评估用例需要两个文件:评估用例本身(测什么)和 experiment(跑哪个 agent)。CLI 不接受单独的评估用例 id——`niceeval exp <experiment> <eval 前缀>` 里的 experiment 才决定「连哪个被测对象」。下面是一个直连 Web Agent 的真实场景(完整项目见仓库 `examples/zh/ai-sdk/`),验证 agent 遇到实时天气问题时会调用工具、并基于工具结果作答,而不是凭空编造:
71
-
72
- ```ts
73
- // evals/weather-tool.eval.ts
74
- import { defineEval, defineJudge } from "niceeval";
75
- import { includes } from "niceeval/expect";
76
-
77
- const groundedWeatherAnswer = defineJudge({
78
- name: "grounded-weather-answer",
79
- rubric: "根据 question 评价 answer 是否给出具体天气信息,而不是拒绝或含糊作答。",
80
- });
81
-
82
- export default defineEval({
83
- judge: groundedWeatherAnswer,
84
- description: "测试 agent 在实时天气问题中正确调用工具并基于结果作答的能力",
85
-
86
- async test(t) {
87
- const turn = await t.send("北京今天天气怎么样?");
88
- turn.succeeded().label("Turn 成功");
89
-
90
- await t.group("调用 get_weather 且回答天气", () => {
91
- t.calledTool("get_weather").label("调用天气工具");
92
- t.check(turn.message, includes("天气")).label("说明天气");
93
- });
94
-
95
- t.judge({ question: turn.input, answer: turn.message }, groundedWeatherAnswer).gate(0.7)
96
- .label("回答有依据");
97
- },
98
- });
99
- ```
100
-
101
- ```ts
102
- // experiments/local.ts
103
- import { defineExperiment } from "niceeval";
104
- import { webAgent } from "./adapter"; // 你自己写的 Adapter,接被测 Web Agent
105
-
106
- export default defineExperiment({
107
- agent: webAgent({ baseUrl: "http://127.0.0.1:5188" }),
108
- model: "gpt-5.4",
109
- });
110
- ```
111
-
112
- ```sh
113
- npx niceeval exp local weather-tool
114
- pnpm exec niceeval query discover # 让 AI、脚本或 CI 发现固定 JSON operation
115
- pnpm exec niceeval view # 在网页中审阅结果
116
- ```
117
-
118
- 如果被测对象是需要隔离工作区的 coding agent(Codex、Claude Code 插件/Skill),评估用例里改用 `t.sandbox.uploadDirectory()` 铺工作区。检查文件变化用 `t.sandbox.fileChanged()` 等归因断言。`t.sandbox.runCommand()` 跑测试。参考独立仓库 [coding-agent-skill](https://github.com/CorrectRoadH/coding-agent-skill)。
119
-
120
- ## 快速开始
121
-
122
- 先从[快速开始](/zh/tutorials/quickstart)完成第一次运行。接入现有应用时,按[接入你的 Agent](/zh/tutorials/connect-your-agent)选择 Adapter 和 Experiment。
33
+ ## 按你要评的对象
123
34
 
124
35
  <CardGroup cols={3}>
125
- <Card title="浏览所有可运行示例" icon="grid-2" href="/zh/examples">
126
- 按被测对象选择接入前后源码和完整项目。
36
+ <Card title="你自己的 AI Agent" icon="globe" href="/zh/tutorials/connect-your-agent">
37
+ 写一个 Adapter 连上 Agent 接口,断言回复、工具调用和结构化输出。
127
38
  </Card>
128
- <Card title="评估 Coding Agent 扩展" icon="wand-magic-sparkles" href="/zh/examples/coding-agent-extensions">
129
- 复用真实 Workspace、Baseline 和多 Arm 实验设计。
39
+ <Card title="Coding Agent 和它的扩展" icon="wand-magic-sparkles" href="/zh/examples/coding-agent-extensions">
40
+ 在 Sandbox 里给 Agent 一个真实仓库,用对照实验衡量 Skill 和 Plugin 的效果。
130
41
  </Card>
131
- <Card title="自写 Adapter" icon="globe" href="/zh/examples/ai-agent-application">
132
- 查看自定义 HTTP 协议和事件映射的完整项目。
42
+ <Card title="任何 AI 应用,比如 LLM 游戏" icon="gamepad" href="/zh/tutorials/custom-application">
43
+ 把发帖、回复、NPC 行动这类业务操作原样交给评估用例,检查结构化结果和世界状态。
133
44
  </Card>
134
45
  </CardGroup>
135
46
 
@@ -137,16 +48,12 @@ pnpm exec niceeval view # 在网页中审阅结果
137
48
 
138
49
  <AccordionGroup>
139
50
  <Accordion title="需要注册账号吗?">
140
- 不需要。跑评估用例和 `niceeval view` 审阅结果都在本地完成。只有被测对象本身需要隔离工作区时,才会用到 Docker 或 E2B 这类 Sandbox Provider。
51
+ 不需要。运行评估和查看结果都在本地完成。只有被测对象需要隔离环境时,才会用到 Docker 或 E2B 这类 Sandbox Provider。
141
52
  </Accordion>
142
- <Accordion title="我的 Agent 不是用 TypeScript / JavaScript 写的,能接吗?">
143
- 能。Adapter 只是对着应用本来暴露的接口(HTTP、gRPC、WebSocket 都行)收发。应用本身用什么语言写、部署在哪里,[NiceEval](https://niceeval.com/) 不关心,见 [Adapter](/zh/explanation/adapter)。
53
+ <Accordion title="我的 Agent 不是用 TypeScript 写的,能接吗?">
54
+ 能。评估用例和 Adapter 用 TypeScript 写,被测应用可以是任何语言。Adapter 只是通过 HTTP、gRPC 或 WebSocket 请求应用已有的接口,见 [Adapter](/zh/explanation/adapter)。
144
55
  </Accordion>
145
56
  <Accordion title="能接到 CI 里吗?">
146
- 能,见 [CI 集成](/zh/tutorials/ci-integration)。
57
+ 能。在 CI 里运行同一条 `niceeval exp` 命令,退出码反映评估是否通过,见 [CI 集成](/zh/tutorials/ci-integration)。
147
58
  </Accordion>
148
59
  </AccordionGroup>
149
-
150
- <Tip>
151
- 想先走最小路径,读 [快速开始](/zh/tutorials/quickstart)。想理解边界,读 [架构概览](/zh/explanation/overview)。
152
- </Tip>