niceeval 0.18.0 → 0.19.1-canary.101

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 (679) hide show
  1. package/INDEX.md +4 -2
  2. package/dist/adapter-usage.cjs.map +1 -1
  3. package/dist/adapter-usage.d.cts +1 -1
  4. package/dist/adapter-usage.d.mts +1 -1
  5. package/dist/adapter-usage.d.ts +1 -1
  6. package/dist/adapter.cjs +8 -7
  7. package/dist/adapter.cjs.map +1 -1
  8. package/dist/adapter.d.cts +21 -21
  9. package/dist/adapter.d.mts +21 -21
  10. package/dist/adapter.d.ts +21 -21
  11. package/dist/agents/{effect-runtime.cjs → agent-effects.cjs} +12 -18
  12. package/dist/agents/agent-effects.cjs.map +1 -0
  13. package/dist/agents/agent-effects.d.cts +23 -0
  14. package/dist/agents/agent-effects.d.mts +23 -0
  15. package/dist/agents/agent-effects.d.ts +23 -0
  16. package/dist/agents/agent-effects.js +16 -0
  17. package/dist/agents/agent-effects.js.map +1 -0
  18. package/dist/agents/ai-sdk.cjs +1 -1
  19. package/dist/agents/ai-sdk.cjs.map +1 -1
  20. package/dist/agents/bub.cjs +31 -18
  21. package/dist/agents/bub.cjs.map +1 -1
  22. package/dist/agents/bub.d.cts +9 -12
  23. package/dist/agents/bub.d.mts +9 -12
  24. package/dist/agents/bub.d.ts +9 -12
  25. package/dist/agents/claude-code-native.cjs +2 -2
  26. package/dist/agents/claude-code-native.cjs.map +1 -1
  27. package/dist/agents/claude-code.cjs +17 -11
  28. package/dist/agents/claude-code.cjs.map +1 -1
  29. package/dist/agents/claude-code.d.cts +11 -11
  30. package/dist/agents/claude-code.d.mts +11 -11
  31. package/dist/agents/claude-code.d.ts +11 -11
  32. package/dist/agents/codex-app-server.cjs +2 -2
  33. package/dist/agents/codex-app-server.cjs.map +1 -1
  34. package/dist/agents/codex.cjs +18 -12
  35. package/dist/agents/codex.cjs.map +1 -1
  36. package/dist/agents/codex.d.cts +12 -12
  37. package/dist/agents/codex.d.mts +12 -12
  38. package/dist/agents/codex.d.ts +12 -12
  39. package/dist/agents/deepseek-harness.cjs +2 -2
  40. package/dist/agents/deepseek-harness.cjs.map +1 -1
  41. package/dist/agents/hermes.cjs +3 -3
  42. package/dist/agents/hermes.cjs.map +1 -1
  43. package/dist/agents/index.cjs +3 -3
  44. package/dist/agents/index.cjs.map +1 -1
  45. package/dist/agents/index.d.cts +3 -3
  46. package/dist/agents/index.d.mts +3 -3
  47. package/dist/agents/index.d.ts +3 -3
  48. package/dist/agents/index.js +2 -2
  49. package/dist/agents/index.mjs +2 -2
  50. package/dist/agents/mcp.cjs.map +1 -1
  51. package/dist/agents/mcp.d.cts +2 -2
  52. package/dist/agents/mcp.d.mts +2 -2
  53. package/dist/agents/mcp.d.ts +2 -2
  54. package/dist/agents/omp.cjs +2 -2
  55. package/dist/agents/omp.cjs.map +1 -1
  56. package/dist/agents/openai-compat.cjs +2 -2
  57. package/dist/agents/openai-compat.cjs.map +1 -1
  58. package/dist/agents/openclaw.cjs +3 -3
  59. package/dist/agents/openclaw.cjs.map +1 -1
  60. package/dist/agents/opencode.cjs +16 -4
  61. package/dist/agents/opencode.cjs.map +1 -1
  62. package/dist/agents/plugin-extensions.cjs +71 -0
  63. package/dist/agents/plugin-extensions.cjs.map +1 -0
  64. package/dist/agents/plugin-extensions.d.cts +26 -0
  65. package/dist/agents/plugin-extensions.d.mts +26 -0
  66. package/dist/agents/plugin-extensions.d.ts +26 -0
  67. package/dist/agents/plugin-extensions.js +8 -0
  68. package/dist/agents/plugin-extensions.js.map +1 -0
  69. package/dist/agents/post-setup.cjs +14 -3
  70. package/dist/agents/post-setup.cjs.map +1 -1
  71. package/dist/agents/post-setup.d.cts +4 -2
  72. package/dist/agents/post-setup.d.mts +4 -2
  73. package/dist/agents/post-setup.d.ts +4 -2
  74. package/dist/agents/post-setup.js +8 -6
  75. package/dist/agents/sdk-streams.cjs +3 -3
  76. package/dist/agents/sdk-streams.cjs.map +1 -1
  77. package/dist/agents/{session-slot.cjs → session-key.cjs} +4 -4
  78. package/dist/agents/session-key.cjs.map +1 -0
  79. package/dist/agents/session-key.d.cts +12 -0
  80. package/dist/agents/session-key.d.mts +12 -0
  81. package/dist/agents/session-key.d.ts +12 -0
  82. package/dist/agents/session-key.js +6 -0
  83. package/dist/agents/session-key.js.map +1 -0
  84. package/dist/agents/shared.cjs +2 -2
  85. package/dist/agents/shared.cjs.map +1 -1
  86. package/dist/agents/shared.d.cts +4 -4
  87. package/dist/agents/shared.d.mts +4 -4
  88. package/dist/agents/shared.d.ts +4 -4
  89. package/dist/agents/skills.cjs.map +1 -1
  90. package/dist/agents/skills.d.cts +3 -3
  91. package/dist/agents/skills.d.mts +3 -3
  92. package/dist/agents/skills.d.ts +3 -3
  93. package/dist/agents/types.cjs.map +1 -1
  94. package/dist/agents/types.d.cts +55 -54
  95. package/dist/agents/types.d.mts +55 -54
  96. package/dist/agents/types.d.ts +55 -54
  97. package/dist/agents/ui-message-stream.cjs +4 -4
  98. package/dist/agents/ui-message-stream.cjs.map +1 -1
  99. package/dist/agents/unrecognized-events.cjs +32 -0
  100. package/dist/agents/unrecognized-events.cjs.map +1 -0
  101. package/dist/agents/unrecognized-events.d.cts +8 -0
  102. package/dist/agents/unrecognized-events.d.mts +8 -0
  103. package/dist/agents/unrecognized-events.d.ts +8 -0
  104. package/dist/agents/unrecognized-events.js +6 -0
  105. package/dist/agents/unrecognized-events.js.map +1 -0
  106. package/dist/assertions/api.cjs.map +1 -1
  107. package/dist/assertions/api.d.cts +3 -0
  108. package/dist/assertions/api.d.mts +3 -0
  109. package/dist/assertions/api.d.ts +3 -0
  110. package/dist/assertions/collection.cjs +1 -1
  111. package/dist/assertions/collection.cjs.map +1 -1
  112. package/dist/assertions/judge.cjs +1 -1
  113. package/dist/assertions/judge.cjs.map +1 -1
  114. package/dist/assertions/match.cjs +52 -21
  115. package/dist/assertions/match.cjs.map +1 -1
  116. package/dist/assertions/match.d.cts +16 -5
  117. package/dist/assertions/match.d.mts +16 -5
  118. package/dist/assertions/match.d.ts +16 -5
  119. package/dist/assertions/match.js +96 -94
  120. package/dist/assertions/measurements.cjs +22 -6
  121. package/dist/assertions/measurements.cjs.map +1 -1
  122. package/dist/assertions/measurements.d.cts +8 -1
  123. package/dist/assertions/measurements.d.mts +8 -1
  124. package/dist/assertions/measurements.d.ts +8 -1
  125. package/dist/assertions/numeric.cjs +2 -0
  126. package/dist/assertions/numeric.cjs.map +1 -1
  127. package/dist/assertions/numeric.d.cts +1 -1
  128. package/dist/assertions/numeric.d.mts +1 -1
  129. package/dist/assertions/numeric.d.ts +1 -1
  130. package/dist/assertions/quantity.cjs +42 -0
  131. package/dist/assertions/quantity.cjs.map +1 -0
  132. package/dist/assertions/quantity.d.cts +18 -0
  133. package/dist/assertions/quantity.d.mts +18 -0
  134. package/dist/assertions/quantity.d.ts +18 -0
  135. package/dist/assertions/quantity.js +22 -0
  136. package/dist/assertions/quantity.js.map +1 -0
  137. package/dist/assertions/record/attachment.cjs +2 -0
  138. package/dist/assertions/record/attachment.cjs.map +1 -1
  139. package/dist/assertions/record/codec.cjs +5 -1
  140. package/dist/assertions/record/codec.cjs.map +1 -1
  141. package/dist/assertions/record/model.cjs.map +1 -1
  142. package/dist/assertions/record/model.d.cts +3 -1
  143. package/dist/assertions/record/model.d.mts +3 -1
  144. package/dist/assertions/record/model.d.ts +3 -1
  145. package/dist/assertions/runtime.cjs +11 -6
  146. package/dist/assertions/runtime.cjs.map +1 -1
  147. package/dist/cli/program.cjs +3 -0
  148. package/dist/cli/program.cjs.map +1 -1
  149. package/dist/context/assert-first.cjs +6 -4
  150. package/dist/context/assert-first.cjs.map +1 -1
  151. package/dist/context/assert-first.d.cts +9 -3
  152. package/dist/context/assert-first.d.mts +9 -3
  153. package/dist/context/assert-first.d.ts +9 -3
  154. package/dist/context/notes.cjs +47 -0
  155. package/dist/context/notes.cjs.map +1 -0
  156. package/dist/context/notes.d.cts +10 -0
  157. package/dist/context/notes.d.mts +10 -0
  158. package/dist/context/notes.d.ts +10 -0
  159. package/dist/context/notes.js +6 -0
  160. package/dist/context/notes.js.map +1 -0
  161. package/dist/context/send-failures.cjs +1 -7
  162. package/dist/context/send-failures.cjs.map +1 -1
  163. package/dist/context/send-failures.d.cts +2 -3
  164. package/dist/context/send-failures.d.mts +2 -3
  165. package/dist/context/send-failures.d.ts +2 -3
  166. package/dist/context/send-retry.cjs +0 -1
  167. package/dist/context/send-retry.cjs.map +1 -1
  168. package/dist/context/send-retry.d.cts +1 -2
  169. package/dist/context/send-retry.d.mts +1 -2
  170. package/dist/context/send-retry.d.ts +1 -2
  171. package/dist/context/session.cjs +10 -17
  172. package/dist/context/session.cjs.map +1 -1
  173. package/dist/context/session.d.cts +4 -10
  174. package/dist/context/session.d.mts +4 -10
  175. package/dist/context/session.d.ts +4 -10
  176. package/dist/define.cjs +88 -65
  177. package/dist/define.cjs.map +1 -1
  178. package/dist/define.d.cts +3 -3
  179. package/dist/define.d.mts +3 -3
  180. package/dist/define.d.ts +3 -3
  181. package/dist/eval/cli/contribution.cjs +1 -1
  182. package/dist/eval/cli/contribution.cjs.map +1 -1
  183. package/dist/eval/host/index.cjs +1 -1
  184. package/dist/eval/host/index.cjs.map +1 -1
  185. package/dist/eval/record/evaluation.cjs +1 -1
  186. package/dist/eval/record/evaluation.cjs.map +1 -1
  187. package/dist/eval/record/membership-provenance.d.cts +3 -3
  188. package/dist/eval/record/membership-provenance.d.mts +3 -3
  189. package/dist/eval/record/membership-provenance.d.ts +3 -3
  190. package/dist/eval/record/score.cjs +2 -2
  191. package/dist/eval/record/score.cjs.map +1 -1
  192. package/dist/eval/record/sealed-assertion.cjs +1 -1
  193. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  194. package/dist/eval/record/verdict.cjs +2 -2
  195. package/dist/eval/record/verdict.cjs.map +1 -1
  196. package/dist/expect/index.cjs +10 -1
  197. package/dist/expect/index.cjs.map +1 -1
  198. package/dist/expect/index.d.cts +3 -1
  199. package/dist/expect/index.d.mts +3 -1
  200. package/dist/expect/index.d.ts +3 -1
  201. package/dist/expect/index.js +92 -76
  202. package/dist/expect/index.mjs +92 -76
  203. package/dist/experiment/host/cli/contribution.cjs +52 -39
  204. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  205. package/dist/experiment/host/cli/contribution.d.cts +18 -4
  206. package/dist/experiment/host/cli/contribution.d.mts +18 -4
  207. package/dist/experiment/host/cli/contribution.d.ts +18 -4
  208. package/dist/experiment/host/cli/contribution.js +2 -2
  209. package/dist/experiment/host/cli/debug-protocol.cjs +2 -2
  210. package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -1
  211. package/dist/experiment/host/cli/debug-protocol.d.cts +2 -2
  212. package/dist/experiment/host/cli/debug-protocol.d.mts +2 -2
  213. package/dist/experiment/host/cli/debug-protocol.d.ts +2 -2
  214. package/dist/experiment/host/cli/output-protocol.cjs +1 -1
  215. package/dist/experiment/host/cli/output-protocol.cjs.map +1 -1
  216. package/dist/experiment/host/cli/output-protocol.d.cts +2 -2
  217. package/dist/experiment/host/cli/output-protocol.d.mts +2 -2
  218. package/dist/experiment/host/cli/output-protocol.d.ts +2 -2
  219. package/dist/experiment/host/current.cjs +2 -2
  220. package/dist/experiment/host/current.cjs.map +1 -1
  221. package/dist/experiment/host/index.cjs +1 -1
  222. package/dist/experiment/host/index.cjs.map +1 -1
  223. package/dist/experiment/host/operations.cjs +21 -22
  224. package/dist/experiment/host/operations.cjs.map +1 -1
  225. package/dist/experiment/host/runtime.cjs +8 -9
  226. package/dist/experiment/host/runtime.cjs.map +1 -1
  227. package/dist/experiment/host/runtime.d.cts +3 -3
  228. package/dist/experiment/host/runtime.d.mts +3 -3
  229. package/dist/experiment/host/runtime.d.ts +3 -3
  230. package/dist/experiment/host/teardown.cjs +3 -3
  231. package/dist/experiment/host/teardown.cjs.map +1 -1
  232. package/dist/experiment/host/teardown.d.cts +3 -3
  233. package/dist/experiment/host/teardown.d.mts +3 -3
  234. package/dist/experiment/host/teardown.d.ts +3 -3
  235. package/dist/experiment/host/types.cjs.map +1 -1
  236. package/dist/experiment/host/types.d.cts +19 -19
  237. package/dist/experiment/host/types.d.mts +19 -19
  238. package/dist/experiment/host/types.d.ts +19 -19
  239. package/dist/index.cjs +3 -3
  240. package/dist/index.cjs.map +1 -1
  241. package/dist/index.d.cts +3 -3
  242. package/dist/index.d.mts +3 -3
  243. package/dist/index.d.ts +3 -3
  244. package/dist/index.js +2 -2
  245. package/dist/index.mjs +2 -2
  246. package/dist/inspection/assertions.cjs +1 -1
  247. package/dist/inspection/assertions.cjs.map +1 -1
  248. package/dist/inspection/cli/contribution.cjs +8 -7
  249. package/dist/inspection/cli/contribution.cjs.map +1 -1
  250. package/dist/inspection/facts.cjs +4 -4
  251. package/dist/inspection/facts.cjs.map +1 -1
  252. package/dist/inspection/index.cjs +1 -5
  253. package/dist/inspection/index.cjs.map +1 -1
  254. package/dist/inspection/index.d.cts +1 -2
  255. package/dist/inspection/index.d.mts +1 -2
  256. package/dist/inspection/index.d.ts +1 -2
  257. package/dist/inspection/index.js +20 -26
  258. package/dist/inspection/lifecycle.cjs +7 -0
  259. package/dist/inspection/lifecycle.cjs.map +1 -0
  260. package/dist/inspection/lifecycle.d.cts +4 -0
  261. package/dist/inspection/lifecycle.d.mts +4 -0
  262. package/dist/inspection/lifecycle.d.ts +4 -0
  263. package/dist/inspection/lifecycle.js +6 -0
  264. package/dist/inspection/lifecycle.js.map +1 -0
  265. package/dist/inspection/notes.cjs +40 -0
  266. package/dist/inspection/notes.cjs.map +1 -0
  267. package/dist/inspection/notes.d.cts +12 -0
  268. package/dist/inspection/notes.d.mts +12 -0
  269. package/dist/inspection/notes.d.ts +12 -0
  270. package/dist/inspection/notes.js +8 -0
  271. package/dist/inspection/notes.js.map +1 -0
  272. package/dist/inspection/overview.cjs +12 -15
  273. package/dist/inspection/overview.cjs.map +1 -1
  274. package/dist/inspection/overview.d.cts +8 -6
  275. package/dist/inspection/overview.d.mts +8 -6
  276. package/dist/inspection/overview.d.ts +8 -6
  277. package/dist/inspection/planned-attempt.cjs +45 -0
  278. package/dist/inspection/planned-attempt.cjs.map +1 -0
  279. package/dist/inspection/planned-attempt.d.cts +109 -0
  280. package/dist/inspection/planned-attempt.d.mts +109 -0
  281. package/dist/inspection/planned-attempt.d.ts +109 -0
  282. package/dist/inspection/planned-attempt.js +24 -0
  283. package/dist/inspection/planned-attempt.js.map +1 -0
  284. package/dist/inspection/project-result.cjs +5 -5
  285. package/dist/inspection/project-result.cjs.map +1 -1
  286. package/dist/inspection/project-result.d.cts +58 -57
  287. package/dist/inspection/project-result.d.mts +58 -57
  288. package/dist/inspection/project-result.d.ts +58 -57
  289. package/dist/inspection/project-result.js +4 -4
  290. package/dist/inspection/project.cjs +3 -3
  291. package/dist/inspection/project.cjs.map +1 -1
  292. package/dist/inspection/protocol-values.cjs +1 -1
  293. package/dist/inspection/protocol-values.cjs.map +1 -1
  294. package/dist/inspection/protocol-values.d.cts +1 -1
  295. package/dist/inspection/protocol-values.d.mts +1 -1
  296. package/dist/inspection/protocol-values.d.ts +1 -1
  297. package/dist/inspection/protocol.cjs +8 -8
  298. package/dist/inspection/protocol.cjs.map +1 -1
  299. package/dist/inspection/protocol.d.cts +237 -219
  300. package/dist/inspection/protocol.d.mts +237 -219
  301. package/dist/inspection/protocol.d.ts +237 -219
  302. package/dist/inspection/public.cjs +1 -5
  303. package/dist/inspection/public.cjs.map +1 -1
  304. package/dist/inspection/public.d.cts +1 -2
  305. package/dist/inspection/public.d.mts +1 -2
  306. package/dist/inspection/public.d.ts +1 -2
  307. package/dist/inspection/public.js +14 -20
  308. package/dist/inspection/public.mjs +166 -129
  309. package/dist/inspection/query.cjs +1 -1
  310. package/dist/inspection/query.cjs.map +1 -1
  311. package/dist/inspection/results.cjs +61 -52
  312. package/dist/inspection/results.cjs.map +1 -1
  313. package/dist/inspection/results.d.cts +157 -140
  314. package/dist/inspection/results.d.mts +157 -140
  315. package/dist/inspection/results.d.ts +157 -140
  316. package/dist/inspection/select.cjs +33 -28
  317. package/dist/inspection/select.cjs.map +1 -1
  318. package/dist/inspection/source.cjs +1 -1
  319. package/dist/inspection/source.cjs.map +1 -1
  320. package/dist/inspection/sources.cjs +2 -2
  321. package/dist/inspection/sources.cjs.map +1 -1
  322. package/dist/inspection/trace.cjs +9 -8
  323. package/dist/inspection/trace.cjs.map +1 -1
  324. package/dist/inspection/trace.d.cts +4 -4
  325. package/dist/inspection/trace.d.mts +4 -4
  326. package/dist/inspection/trace.d.ts +4 -4
  327. package/dist/loaders/index.cjs +7 -279
  328. package/dist/loaders/index.cjs.map +1 -1
  329. package/dist/loaders/index.d.cts +2 -95
  330. package/dist/loaders/index.d.mts +2 -95
  331. package/dist/loaders/index.d.ts +2 -95
  332. package/dist/loaders/index.js +10 -12
  333. package/dist/loaders/index.mjs +10 -12
  334. package/dist/loaders/runtime.cjs +283 -0
  335. package/dist/loaders/runtime.cjs.map +1 -0
  336. package/dist/loaders/runtime.d.cts +95 -0
  337. package/dist/loaders/runtime.d.mts +95 -0
  338. package/dist/loaders/runtime.d.ts +95 -0
  339. package/dist/loaders/runtime.js +16 -0
  340. package/dist/loaders/runtime.js.map +1 -0
  341. package/dist/migrations/judge-provider.md +6 -6
  342. package/dist/{model-slots.cjs → model-roles.cjs} +12 -12
  343. package/dist/{model-slots.cjs.map → model-roles.cjs.map} +1 -1
  344. package/dist/{model-slots.d.cts → model-roles.d.cts} +10 -10
  345. package/dist/{model-slots.d.mts → model-roles.d.mts} +10 -10
  346. package/dist/{model-slots.d.ts → model-roles.d.ts} +10 -10
  347. package/dist/model-roles.js +14 -0
  348. package/dist/model-roles.js.map +1 -0
  349. package/dist/o11y/adapter-usage-projection.cjs +9 -8
  350. package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
  351. package/dist/o11y/adapter-usage-projection.d.cts +23 -15
  352. package/dist/o11y/adapter-usage-projection.d.mts +23 -15
  353. package/dist/o11y/adapter-usage-projection.d.ts +23 -15
  354. package/dist/o11y/cache-read.cjs +14 -14
  355. package/dist/o11y/cache-read.cjs.map +1 -1
  356. package/dist/o11y/cache-read.d.cts +5 -5
  357. package/dist/o11y/cache-read.d.mts +5 -5
  358. package/dist/o11y/cache-read.d.ts +5 -5
  359. package/dist/o11y/derive.cjs.map +1 -1
  360. package/dist/o11y/derive.d.cts +2 -2
  361. package/dist/o11y/derive.d.mts +2 -2
  362. package/dist/o11y/derive.d.ts +2 -2
  363. package/dist/o11y/eval-usage.cjs +9 -9
  364. package/dist/o11y/eval-usage.cjs.map +1 -1
  365. package/dist/o11y/eval-usage.d.cts +7 -7
  366. package/dist/o11y/eval-usage.d.mts +7 -7
  367. package/dist/o11y/eval-usage.d.ts +7 -7
  368. package/dist/o11y/parsers/bub.cjs +57 -81
  369. package/dist/o11y/parsers/bub.cjs.map +1 -1
  370. package/dist/o11y/parsers/index.cjs.map +1 -1
  371. package/dist/o11y/parsers/index.d.cts +2 -0
  372. package/dist/o11y/parsers/index.d.mts +2 -0
  373. package/dist/o11y/parsers/index.d.ts +2 -0
  374. package/dist/o11y/parsers/opencode.cjs +129 -217
  375. package/dist/o11y/parsers/opencode.cjs.map +1 -1
  376. package/dist/o11y/parsers/opencode.d.cts +2 -5
  377. package/dist/o11y/parsers/opencode.d.mts +2 -5
  378. package/dist/o11y/parsers/opencode.d.ts +2 -5
  379. package/dist/o11y/types.cjs.map +1 -1
  380. package/dist/o11y/types.d.cts +1 -1
  381. package/dist/o11y/types.d.mts +1 -1
  382. package/dist/o11y/types.d.ts +1 -1
  383. package/dist/plugin/contracts.cjs +170 -120
  384. package/dist/plugin/contracts.cjs.map +1 -1
  385. package/dist/plugin/contracts.d.cts +102 -90
  386. package/dist/plugin/contracts.d.mts +102 -90
  387. package/dist/plugin/contracts.d.ts +102 -90
  388. package/dist/plugin/contracts.js +16 -12
  389. package/dist/plugin/index.cjs.map +1 -1
  390. package/dist/plugin/index.d.cts +1 -1
  391. package/dist/plugin/index.d.mts +1 -1
  392. package/dist/plugin/index.d.ts +1 -1
  393. package/dist/plugin/link.cjs +69 -64
  394. package/dist/plugin/link.cjs.map +1 -1
  395. package/dist/plugin/link.d.cts +5 -3
  396. package/dist/plugin/link.d.mts +5 -3
  397. package/dist/plugin/link.d.ts +5 -3
  398. package/dist/plugin/link.js +12 -8
  399. package/dist/record/codec/seal-manifest.d.cts +3 -3
  400. package/dist/record/codec/seal-manifest.d.mts +3 -3
  401. package/dist/record/codec/seal-manifest.d.ts +3 -3
  402. package/dist/record/family/attempt-note/definition.cjs +12 -0
  403. package/dist/record/family/attempt-note/definition.cjs.map +1 -0
  404. package/dist/record/family/attempt-note/definition.d.cts +6 -0
  405. package/dist/record/family/attempt-note/definition.d.mts +6 -0
  406. package/dist/record/family/attempt-note/definition.d.ts +6 -0
  407. package/dist/record/family/attempt-note/definition.js +6 -0
  408. package/dist/record/family/attempt-note/definition.js.map +1 -0
  409. package/dist/record/family/attempt-note/persistence.cjs +10 -0
  410. package/dist/record/family/attempt-note/persistence.cjs.map +1 -0
  411. package/dist/record/family/attempt-note/persistence.d.cts +6 -0
  412. package/dist/record/family/attempt-note/persistence.d.mts +6 -0
  413. package/dist/record/family/attempt-note/persistence.d.ts +6 -0
  414. package/dist/record/family/attempt-note/persistence.js +6 -0
  415. package/dist/record/family/attempt-note/persistence.js.map +1 -0
  416. package/dist/record/family/attempt-note/schema.cjs +20 -0
  417. package/dist/record/family/attempt-note/schema.cjs.map +1 -0
  418. package/dist/record/family/attempt-note/schema.d.cts +21 -0
  419. package/dist/record/family/attempt-note/schema.d.mts +21 -0
  420. package/dist/record/family/attempt-note/schema.d.ts +21 -0
  421. package/dist/record/family/attempt-note/schema.js +10 -0
  422. package/dist/record/family/attempt-note/schema.js.map +1 -0
  423. package/dist/record/family/catalog.cjs +32 -29
  424. package/dist/record/family/catalog.cjs.map +1 -1
  425. package/dist/record/family/catalog.d.cts +7 -2
  426. package/dist/record/family/catalog.d.mts +7 -2
  427. package/dist/record/family/catalog.d.ts +7 -2
  428. package/dist/record/family/current.cjs +48 -45
  429. package/dist/record/family/current.cjs.map +1 -1
  430. package/dist/record/family/current.d.cts +15 -0
  431. package/dist/record/family/current.d.mts +15 -0
  432. package/dist/record/family/current.d.ts +15 -0
  433. package/dist/record/model/index.js +66 -64
  434. package/dist/record/model/run-context.cjs +9 -3
  435. package/dist/record/model/run-context.cjs.map +1 -1
  436. package/dist/record/model/run-context.d.cts +9 -2
  437. package/dist/record/model/run-context.d.mts +9 -2
  438. package/dist/record/model/run-context.d.ts +9 -2
  439. package/dist/record/model/run-context.js +8 -6
  440. package/dist/record/model/seal-manifest.d.cts +1 -1
  441. package/dist/record/model/seal-manifest.d.mts +1 -1
  442. package/dist/record/model/seal-manifest.d.ts +1 -1
  443. package/dist/run/cli/contribution.cjs +6 -32
  444. package/dist/run/cli/contribution.cjs.map +1 -1
  445. package/dist/run/host/runtime.cjs +1 -1
  446. package/dist/run/host/runtime.cjs.map +1 -1
  447. package/dist/run/storage/sqlite.cjs +7 -7
  448. package/dist/run/storage/sqlite.cjs.map +1 -1
  449. package/dist/runner/adapter-usage.cjs +5 -3
  450. package/dist/runner/adapter-usage.cjs.map +1 -1
  451. package/dist/runner/adapter-usage.d.cts +2 -2
  452. package/dist/runner/adapter-usage.d.mts +2 -2
  453. package/dist/runner/adapter-usage.d.ts +2 -2
  454. package/dist/runner/adoption.cjs +9 -12
  455. package/dist/runner/adoption.cjs.map +1 -1
  456. package/dist/runner/attempt-notes.cjs +8 -0
  457. package/dist/runner/attempt-notes.cjs.map +1 -0
  458. package/dist/runner/attempt-notes.d.cts +4 -0
  459. package/dist/runner/attempt-notes.d.mts +4 -0
  460. package/dist/runner/attempt-notes.d.ts +4 -0
  461. package/dist/runner/attempt-notes.js +8 -0
  462. package/dist/runner/attempt-notes.js.map +1 -0
  463. package/dist/runner/attempt.cjs +61 -73
  464. package/dist/runner/attempt.cjs.map +1 -1
  465. package/dist/runner/attempt.d.cts +3 -3
  466. package/dist/runner/attempt.d.mts +3 -3
  467. package/dist/runner/attempt.d.ts +3 -3
  468. package/dist/runner/command-plan.cjs +21 -26
  469. package/dist/runner/command-plan.cjs.map +1 -1
  470. package/dist/runner/command-plan.d.cts +4 -4
  471. package/dist/runner/command-plan.d.mts +4 -4
  472. package/dist/runner/command-plan.d.ts +4 -4
  473. package/dist/runner/command-plan.js +4 -4
  474. package/dist/runner/config-identity.cjs.map +1 -1
  475. package/dist/runner/config-identity.d.cts +2 -2
  476. package/dist/runner/config-identity.d.mts +2 -2
  477. package/dist/runner/config-identity.d.ts +2 -2
  478. package/dist/runner/discover.cjs +6 -6
  479. package/dist/runner/discover.cjs.map +1 -1
  480. package/dist/runner/eval-selection.cjs +2 -2
  481. package/dist/runner/eval-selection.cjs.map +1 -1
  482. package/dist/runner/eval-selection.d.cts +2 -2
  483. package/dist/runner/eval-selection.d.mts +2 -2
  484. package/dist/runner/eval-selection.d.ts +2 -2
  485. package/dist/runner/feedback/human.cjs +1 -1
  486. package/dist/runner/feedback/human.cjs.map +1 -1
  487. package/dist/runner/feedback/json.cjs +4 -2
  488. package/dist/runner/feedback/json.cjs.map +1 -1
  489. package/dist/runner/feedback/json.d.cts +1 -1
  490. package/dist/runner/feedback/json.d.mts +1 -1
  491. package/dist/runner/feedback/json.d.ts +1 -1
  492. package/dist/runner/feedback/sink.cjs +1 -1
  493. package/dist/runner/feedback/sink.cjs.map +1 -1
  494. package/dist/runner/feedback/sink.d.cts +1 -1
  495. package/dist/runner/feedback/sink.d.mts +1 -1
  496. package/dist/runner/feedback/sink.d.ts +1 -1
  497. package/dist/runner/fingerprint.cjs +1 -1
  498. package/dist/runner/fingerprint.cjs.map +1 -1
  499. package/dist/runner/project-target.cjs.map +1 -1
  500. package/dist/runner/project-target.d.cts +2 -2
  501. package/dist/runner/project-target.d.mts +2 -2
  502. package/dist/runner/project-target.d.ts +2 -2
  503. package/dist/runner/record/attachments.cjs +2 -2
  504. package/dist/runner/record/attachments.cjs.map +1 -1
  505. package/dist/runner/record/planning.cjs +8 -2
  506. package/dist/runner/record/planning.cjs.map +1 -1
  507. package/dist/runner/record.cjs +2 -0
  508. package/dist/runner/record.cjs.map +1 -1
  509. package/dist/runner/report.cjs +3 -3
  510. package/dist/runner/report.cjs.map +1 -1
  511. package/dist/runner/report.d.cts +1 -1
  512. package/dist/runner/report.d.mts +1 -1
  513. package/dist/runner/report.d.ts +1 -1
  514. package/dist/runner/reuse-plan.cjs +2 -2
  515. package/dist/runner/reuse-plan.cjs.map +1 -1
  516. package/dist/runner/run.cjs +10 -45
  517. package/dist/runner/run.cjs.map +1 -1
  518. package/dist/runner/sandbox-pool.cjs +1 -2
  519. package/dist/runner/sandbox-pool.cjs.map +1 -1
  520. package/dist/runner/setup-prefix-preparation.cjs +1 -1
  521. package/dist/runner/setup-prefix-preparation.cjs.map +1 -1
  522. package/dist/runner/teardown-registry.cjs +2 -2
  523. package/dist/runner/teardown-registry.cjs.map +1 -1
  524. package/dist/runner/teardown-registry.d.cts +1 -1
  525. package/dist/runner/teardown-registry.d.mts +1 -1
  526. package/dist/runner/teardown-registry.d.ts +1 -1
  527. package/dist/runner/types.cjs +4 -4
  528. package/dist/runner/types.cjs.map +1 -1
  529. package/dist/runner/types.d.cts +64 -93
  530. package/dist/runner/types.d.mts +64 -93
  531. package/dist/runner/types.d.ts +64 -93
  532. package/dist/runner/types.js +2 -2
  533. package/dist/sandbox/action.cjs +1 -1
  534. package/dist/sandbox/action.cjs.map +1 -1
  535. package/dist/sandbox/cli/contribution.cjs +17 -14
  536. package/dist/sandbox/cli/contribution.cjs.map +1 -1
  537. package/dist/sandbox/cli/contribution.d.cts +1 -1
  538. package/dist/sandbox/cli/contribution.d.mts +1 -1
  539. package/dist/sandbox/cli/contribution.d.ts +1 -1
  540. package/dist/sandbox/commands.cjs +1 -1
  541. package/dist/sandbox/commands.cjs.map +1 -1
  542. package/dist/sandbox/commands.d.cts +1 -1
  543. package/dist/sandbox/commands.d.mts +1 -1
  544. package/dist/sandbox/commands.d.ts +1 -1
  545. package/dist/sandbox/compose.cjs +2 -2
  546. package/dist/sandbox/compose.cjs.map +1 -1
  547. package/dist/sandbox/docker-profile/registry.cjs +5 -9
  548. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  549. package/dist/sandbox/docker-profile/registry.d.cts +0 -3
  550. package/dist/sandbox/docker-profile/registry.d.mts +0 -3
  551. package/dist/sandbox/docker-profile/registry.d.ts +0 -3
  552. package/dist/sandbox/docker-profile/registry.js +6 -12
  553. package/dist/sandbox/docker-profile/runtime.cjs +1 -1
  554. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  555. package/dist/sandbox/docker-profile/schema.cjs +12 -16
  556. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  557. package/dist/sandbox/docker-profile/schema.d.cts +2 -6
  558. package/dist/sandbox/docker-profile/schema.d.mts +2 -6
  559. package/dist/sandbox/docker-profile/schema.d.ts +2 -6
  560. package/dist/sandbox/docker-profile/schema.js +24 -32
  561. package/dist/sandbox/incus.cjs +2 -2
  562. package/dist/sandbox/incus.cjs.map +1 -1
  563. package/dist/sandbox/index.cjs +4 -35
  564. package/dist/sandbox/index.cjs.map +1 -1
  565. package/dist/sandbox/index.d.cts +4 -8
  566. package/dist/sandbox/index.d.mts +4 -8
  567. package/dist/sandbox/index.d.ts +4 -8
  568. package/dist/sandbox/index.js +116 -172
  569. package/dist/sandbox/index.mjs +116 -172
  570. package/dist/sandbox/layer.cjs +3 -3
  571. package/dist/sandbox/layer.cjs.map +1 -1
  572. package/dist/sandbox/link.cjs +5 -0
  573. package/dist/sandbox/link.cjs.map +1 -1
  574. package/dist/sandbox/link.d.cts +3 -0
  575. package/dist/sandbox/link.d.mts +3 -0
  576. package/dist/sandbox/link.d.ts +3 -0
  577. package/dist/sandbox/runtime.cjs +9 -4
  578. package/dist/sandbox/runtime.cjs.map +1 -1
  579. package/dist/shared/failure-class.cjs +5 -5
  580. package/dist/shared/failure-class.cjs.map +1 -1
  581. package/dist/shared/failure-class.d.cts +4 -10
  582. package/dist/shared/failure-class.d.mts +4 -10
  583. package/dist/shared/failure-class.d.ts +4 -10
  584. package/dist/shared/types.cjs.map +1 -1
  585. package/dist/shared/types.d.cts +1 -1
  586. package/dist/shared/types.d.mts +1 -1
  587. package/dist/shared/types.d.ts +1 -1
  588. package/dist/show/contribution.cjs +17 -2
  589. package/dist/show/contribution.cjs.map +1 -1
  590. package/dist/show/contribution.d.cts +14 -0
  591. package/dist/show/contribution.d.mts +14 -0
  592. package/dist/show/contribution.d.ts +14 -0
  593. package/dist/show/model.cjs +8 -5
  594. package/dist/show/model.cjs.map +1 -1
  595. package/dist/show/model.d.cts +11 -8
  596. package/dist/show/model.d.mts +11 -8
  597. package/dist/show/model.d.ts +11 -8
  598. package/dist/show/render.cjs +34 -22
  599. package/dist/show/render.cjs.map +1 -1
  600. package/dist/sources/projector.cjs +1 -1
  601. package/dist/sources/projector.cjs.map +1 -1
  602. package/dist/types.cjs +1 -1
  603. package/dist/types.cjs.map +1 -1
  604. package/dist/types.d.cts +1 -1
  605. package/dist/types.d.mts +1 -1
  606. package/dist/types.d.ts +1 -1
  607. package/dist/types.js +2 -2
  608. package/dist/view/app-dist/.vite/manifest.json +2 -2
  609. package/dist/view/app-dist/assets/{index-B3ijZRph.js → index-CxrOUvHC.js} +17 -17
  610. package/dist/view/app-dist/assets/{quality-cost-scatter-B--DfJ9s.js → quality-cost-scatter-B6Aiss7x.js} +1 -1
  611. package/dist/view/app-dist/index.html +1 -1
  612. package/dist/view/cli/contribution.cjs +1 -1
  613. package/dist/view/cli/contribution.cjs.map +1 -1
  614. package/dist/view/function-runtime.mjs +318 -121
  615. package/dist/view/http-protocol.d.cts +1 -1
  616. package/dist/view/http-protocol.d.mts +1 -1
  617. package/dist/view/http-protocol.d.ts +1 -1
  618. package/dist/view/inspection-host.cjs +2 -2
  619. package/dist/view/inspection-host.cjs.map +1 -1
  620. package/dist/view/inspection-host.d.cts +349 -331
  621. package/dist/view/inspection-host.d.mts +349 -331
  622. package/dist/view/inspection-host.d.ts +349 -331
  623. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +6 -6
  624. package/docs-site/zh/examples/integrations/claude-sdk.mdx +5 -5
  625. package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
  626. package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
  627. package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
  628. package/docs-site/zh/explanation/adapter.mdx +6 -6
  629. package/docs-site/zh/explanation/assert.mdx +7 -7
  630. package/docs-site/zh/explanation/drive.mdx +4 -4
  631. package/docs-site/zh/explanation/hitl.mdx +2 -2
  632. package/docs-site/zh/explanation/judge.mdx +2 -2
  633. package/docs-site/zh/introduction.mdx +2 -2
  634. package/docs-site/zh/reference/builtin-agents.mdx +46 -49
  635. package/docs-site/zh/reference/cli.mdx +16 -14
  636. package/docs-site/zh/reference/define-agent.mdx +19 -19
  637. package/docs-site/zh/reference/define-config.mdx +7 -15
  638. package/docs-site/zh/reference/define-eval.mdx +20 -14
  639. package/docs-site/zh/reference/define-experiment.mdx +18 -39
  640. package/docs-site/zh/reference/events.mdx +1 -1
  641. package/docs-site/zh/reference/expect.mdx +21 -0
  642. package/docs-site/zh/reference/official-adapters.mdx +12 -5
  643. package/docs-site/zh/troubleshooting/debugging.mdx +2 -2
  644. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +1 -1
  645. package/docs-site/zh/tutorials/agent-onboarding.mdx +2 -2
  646. package/docs-site/zh/tutorials/authoring.mdx +2 -2
  647. package/docs-site/zh/tutorials/compare-runs.mdx +1 -1
  648. package/docs-site/zh/tutorials/concurrency.mdx +8 -8
  649. package/docs-site/zh/tutorials/configuration.mdx +5 -5
  650. package/docs-site/zh/tutorials/control-run-cost.mdx +19 -19
  651. package/docs-site/zh/tutorials/eval-groups.mdx +1 -1
  652. package/docs-site/zh/tutorials/evaluation-kinds.mdx +5 -5
  653. package/docs-site/zh/tutorials/experiment-services.mdx +32 -32
  654. package/docs-site/zh/tutorials/handle-execution-failures.mdx +2 -28
  655. package/docs-site/zh/tutorials/plugins.mdx +49 -143
  656. package/docs-site/zh/tutorials/sandbox-agent.mdx +1 -1
  657. package/docs-site/zh/tutorials/sandbox-reuse.mdx +7 -7
  658. package/docs-site/zh/tutorials/upgrade-0-18.mdx +1 -1
  659. package/docs-site/zh/tutorials/upgrade-0-19.mdx +121 -0
  660. package/docs-site/zh/tutorials/upgrade-0-20.mdx +12 -0
  661. package/docs-site/zh/tutorials/verify-judge.mdx +2 -2
  662. package/docs-site/zh/tutorials/viewing-results.mdx +2 -2
  663. package/docs-site/zh/tutorials/write-experiment.mdx +1 -1
  664. package/docs-site/zh/tutorials/write-send.mdx +13 -13
  665. package/package.json +1 -1
  666. package/dist/agents/effect-runtime.cjs.map +0 -1
  667. package/dist/agents/effect-runtime.d.cts +0 -29
  668. package/dist/agents/effect-runtime.d.mts +0 -29
  669. package/dist/agents/effect-runtime.d.ts +0 -29
  670. package/dist/agents/effect-runtime.js +0 -16
  671. package/dist/agents/effect-runtime.js.map +0 -1
  672. package/dist/agents/session-slot.cjs.map +0 -1
  673. package/dist/agents/session-slot.d.cts +0 -12
  674. package/dist/agents/session-slot.d.mts +0 -12
  675. package/dist/agents/session-slot.d.ts +0 -12
  676. package/dist/agents/session-slot.js +0 -6
  677. package/dist/agents/session-slot.js.map +0 -1
  678. package/dist/model-slots.js +0 -14
  679. package/dist/model-slots.js.map +0 -1
@@ -144,7 +144,7 @@ readonly signal: AbortSignal;
144
144
  #### `models`
145
145
 
146
146
  ```ts
147
- readonly models: Readonly<Record<Slots, ResolvedModelSlot>>;
147
+ readonly models: Readonly<Record<Roles, ResolvedModelRole>>;
148
148
  ```
149
149
 
150
150
  Frozen application model selections for this Attempt.
@@ -152,7 +152,7 @@ Frozen application model selections for this Attempt.
152
152
  #### `recordUsage`
153
153
 
154
154
  ```ts
155
- recordUsage(input: Omit<import("./adapter-usage.ts").AdapterUsageInput, "modelSlot"> & { readonly modelSlot?: Slots | null }): void;
155
+ recordUsage(input: Omit<import("./adapter-usage.ts").AdapterUsageInput, "modelRole"> & { readonly modelRole?: Roles | null }): void;
156
156
  ```
157
157
 
158
158
  #### `sealUsage`
@@ -284,10 +284,10 @@ evidenceCoverage: EvidenceCoverage;
284
284
 
285
285
  该 Adapter 的常态证据覆盖声明;完整采集可用 `completeEvidenceCoverage`。
286
286
 
287
- #### `setup`
287
+ #### `before`
288
288
 
289
289
  ```ts
290
- setup?: DirectAgentSetup;
290
+ before?: DirectAgentBefore;
291
291
  ```
292
292
 
293
293
  每个 attempt 一次。Direct Agent 不接收 Sandbox;常用于建立连接、鉴权等一次性准备。
@@ -324,13 +324,13 @@ classifySendFailure?: SendFailureClassifier;
324
324
 
325
325
  可选 send 执行失败分类器:见 `Agent.classifySendFailure`。
326
326
 
327
- #### `teardown`
327
+ #### `after`
328
328
 
329
329
  ```ts
330
- teardown?: DirectAgentTeardown;
330
+ after?: DirectAgentAfter;
331
331
  ```
332
332
 
333
- 运行结束前的清理,当且仅当本 attempt 走到过 `setup` 时点才执行(`setup` 抛错不豁免),
333
+ 运行结束前的清理,当且仅当本 attempt 走到过 `before` 时点才执行(`before` 抛错不豁免),
334
334
  在 finally 里跑一次。
335
335
 
336
336
  ### `SandboxAgentDef`
@@ -376,10 +376,10 @@ installers?: readonly AgentInstaller[];
376
376
  配对安装层;省略表示这个 adapter 只提供 probe 协议,未命中时 Runner 在
377
377
  `agent.ensure` 点名缺失的精确 identity。工厂会把省略规范化成空数组。
378
378
 
379
- #### `setup`
379
+ #### `before`
380
380
 
381
381
  ```ts
382
- setup?: AgentSetup;
382
+ before?: AgentBefore;
383
383
  ```
384
384
 
385
385
  每条 Attempt 一次(不是每轮 send 一次):写 config.toml / 鉴权配置(model/base/auth 等
@@ -392,7 +392,7 @@ setup?: AgentSetup;
392
392
  tracing?: AgentTracing;
393
393
  ```
394
394
 
395
- OTLP 导出配置:Sandbox 里怎么让 CLI 把 trace 发到 endpoint(env / 配置文件),从 setup 拆出。
395
+ OTLP 导出配置:Sandbox 里怎么让 CLI 把 trace 发到 endpoint(env / 配置文件),从 before 拆出。
396
396
 
397
397
  #### `spanMapper`
398
398
 
@@ -418,13 +418,13 @@ classifySendFailure?: SendFailureClassifier;
418
418
 
419
419
  可选 send 执行失败分类器:见 `Agent.classifySendFailure`。
420
420
 
421
- #### `teardown`
421
+ #### `after`
422
422
 
423
423
  ```ts
424
- teardown?: AgentTeardown;
424
+ after?: AgentAfter;
425
425
  ```
426
426
 
427
- Sandbox 销毁前的清理,当且仅当本 attempt 走到过 `setup` 时点才执行(`setup` 抛错不豁免),
427
+ Sandbox 销毁前的清理,当且仅当本 attempt 走到过 `before` 时点才执行(`before` 抛错不豁免),
428
428
  在 finally 里跑一次。
429
429
 
430
430
  ### `AgentContext`
@@ -446,7 +446,7 @@ readonly signal: AbortSignal;
446
446
  readonly model?: string;
447
447
  ```
448
448
 
449
- 本次 attempt 用的模型名,透传自 experiment 的 `model` 字段。sandbox 型 agent 通常在 setup 里用它写配置,direct 型通常在 send 里用它选模型。
449
+ 本次 attempt 用的模型名,透传自 experiment 的 `model` 字段。sandbox 型 agent 通常在 before 里用它写配置,direct 型通常在 send 里用它选模型。
450
450
 
451
451
  #### `reasoningEffort`
452
452
 
@@ -535,7 +535,7 @@ progress(update: ProgressUpdate): void;
535
535
 
536
536
  作用域反馈:报告此刻正在做什么(turn / tool / 安装进度)。短命状态——Human profile
537
537
  更新 active 行,`agent`/`ci` 不逐条打印,也不进最终结果;不要每个 token/delta 都调用。
538
- runner 按当前回调所处的生命周期阶段(agent.setup / agent.run / agent.teardown)归因,
538
+ runner 按当前回调所处的生命周期阶段(agent.before / agent.run / agent.after)归因,
539
539
  调用方不能冒充其它阶段(见 docs/feature/experiments/library.md)。
540
540
 
541
541
  #### `diagnostic`
@@ -559,12 +559,12 @@ log(msg: string): void;
559
559
 
560
560
  {/* GENERATED:END agent-def */}
561
561
 
562
- `ctx.session`(`AgentSession`)是一条会话线的状态槽:同一条会话线的每次 `send` 拿到同一个 `ctx.session`,新会话线(评估用例第一轮 / `t.newSession()` 之后)拿到一个全新的。存取器:
562
+ `ctx.session`(`AgentSession`)是一条会话线的状态键:同一条会话线的每次 `send` 拿到同一个 `ctx.session`,新会话线(评估用例第一轮 / `t.newSession()` 之后)拿到一个全新的。存取器:
563
563
 
564
564
  - `id?: string` / `capture(id): void` —— 会话续接·服务端记历史时用:`id` 是本线记过的会话 id(新线是 `undefined`),`capture` 记回传的 id(只在还没记过时落地)。
565
- - `createSessionSlot<T>(name)` —— 在 Adapter 模块作用域创建一个 typed slot。slot 按 symbol 身份隔离。
566
- - `get(slot)` / `set(slot, value)` —— 存取客户端历史或 Adapter 私有状态。
567
- - `take(slot)` —— 读取并删除 HITL 停轮现场,一次消费。
565
+ - `createSessionKey<T>(name)` —— 在 Adapter 模块作用域创建一个 typed key。key 按 symbol 身份隔离。
566
+ - `get(key)` / `set(key, value)` —— 存取客户端历史或 Adapter 私有状态。
567
+ - `take(key)` —— 读取并删除 HITL 停轮现场,一次消费。
568
568
 
569
569
  完整契约见[Adapter 概念](/zh/explanation/adapter#上下文:agentcontext)。
570
570
 
@@ -11,7 +11,7 @@ import { defineConfig } from "niceeval";
11
11
  import { OpenAIProvider } from "niceeval/judge";
12
12
 
13
13
  export default defineConfig({
14
- judgeRuntime: OpenAIProvider({ model: "gpt-5.4-mini", maxOutputTokens: 512 }),
14
+ judgeProvider: OpenAIProvider({ model: "gpt-5.4-mini", maxOutputTokens: 512 }),
15
15
  maxConcurrency: 4,
16
16
  timeoutMs: 300_000,
17
17
  });
@@ -33,18 +33,10 @@ name?: LocalizedText;
33
33
  项目名,显示在 `niceeval view` 顶部 hero(`<h1>`),省略则回退到通用标题。
34
34
  可传字符串,或按 locale 提供多语言(如 `{ en: "...", "zh-CN": "..." }`),随 view 语言切换。
35
35
 
36
- #### `workspace`
36
+ #### `judgeProvider`
37
37
 
38
38
  ```ts
39
- workspace?: string;
40
- ```
41
-
42
- 上传进 Sandbox 的工作区根目录,省略则用项目根;评估用例的 sandbox 视图从这里起步。
43
-
44
- #### `judgeRuntime`
45
-
46
- ```ts
47
- judgeRuntime?: JudgeProvider;
39
+ judgeProvider?: JudgeProvider;
48
40
  ```
49
41
 
50
42
  项目级默认 Judge Provider;Eval 与 Experiment 可替换模型或整个 Provider。
@@ -55,7 +47,7 @@ judgeRuntime?: JudgeProvider;
55
47
  reporters?: Reporter[];
56
48
  ```
57
49
 
58
- 项目级默认 reporter 列表(如落盘 / 上传结果);EvalDef.reporters 会与它合并。
50
+ 项目级默认 reporter 列表(如落盘 / 上传结果)。
59
51
 
60
52
  #### `maxConcurrency`
61
53
 
@@ -73,10 +65,10 @@ maxBuildConcurrency?: number;
73
65
 
74
66
  Run 级 Sandbox 镜像准备并发;与 attempt 并发独立,省略时安全默认 2。
75
67
 
76
- #### `maxSetupPrefixConcurrency`
68
+ #### `maxBeforeCacheConcurrency`
77
69
 
78
70
  ```ts
79
- maxSetupPrefixConcurrency?: number;
71
+ maxBeforeCacheConcurrency?: number;
80
72
  ```
81
73
 
82
74
  Run 级 PreparedArtifact 前缀 DAG 准备并发;与 build / attempt 并发独立。
@@ -87,7 +79,7 @@ Run 级 PreparedArtifact 前缀 DAG 准备并发;与 build / attempt 并发独
87
79
  sandboxCache?: SandboxCacheConfig;
88
80
  ```
89
81
 
90
- 项目级 SetupPrefix cache 默认;Experiment 与显式 CLI flag 可覆盖。
82
+ 项目级 before cache 默认;Experiment 与显式 CLI flag 可覆盖。
91
83
 
92
84
  #### `timeoutMs`
93
85
 
@@ -71,14 +71,6 @@ judge?: JudgeSelection;
71
71
 
72
72
  模型字符串只替换项目 Judge Provider 的模型;Provider 实例整体替换。Experiment 设置优先。
73
73
 
74
- #### `reporters`
75
-
76
- ```ts
77
- reporters?: Reporter[];
78
- ```
79
-
80
- 覆盖 / 追加项目级 Config.reporters,只对这一条评估用例生效。
81
-
82
74
  #### `timeoutMs`
83
75
 
84
76
  ```ts
@@ -116,6 +108,12 @@ test(t: TestContext): EvalTestReturn;
116
108
 
117
109
  ## Test context: `t`
118
110
 
111
+ `t.note(label, value)` 记录供结果审阅使用的 JSON 值或 Quantity,例如 `t.note("延迟", ms(512))`。
112
+ 它不登记 Assertion,不影响 Verdict、score 或 coverage。`null` 显示为 unavailable。
113
+ 同一 Attempt 的 label 必须唯一,最多 64 项,每项 JSON 不超过 64 KiB;违规时抛出 `TypeError`。
114
+ `show @<locator>` 和 View 在 Assertions 后展示 Notes;JSON 与 Query 的 Attempt 结果包含 `notes`。
115
+ `show --exp <experiment-id>` 按 label 和单位聚合数值,展示 count、min、median、p90、max。
116
+
119
117
  `t`(`TestContext`)是评估用例作者在 `test(t)` 里拿到的上下文。每调用一次检查方法,就登记一条断言。
120
118
 
121
119
  - `t.check(subject, match)` 用匹配条件检查你显式传入的值。
@@ -138,6 +136,14 @@ root、Session 和 Turn 上的 `judge` 都要求显式传入材料。官方提
138
136
 
139
137
  {/* 本区块由 pnpm run repo docs reference 从源码注释生成,勿手改;要改文案,改对应源码的 TSDoc/JSDoc(映射见 packages/repo-tools/src/docs/reference-compiler.ts) */}
140
138
 
139
+ #### `note`
140
+
141
+ ```ts
142
+ note: AssertFirstCoreTestContext<Kind>["note"];
143
+ ```
144
+
145
+ 保存 JSON 值或 Quantity 供结果展示,不登记 Assertion,也不影响 Verdict、score 或 coverage。
146
+
141
147
  #### `evaluationKind`
142
148
 
143
149
  ```ts
@@ -285,10 +291,10 @@ readonly toolCalls: ManagedToolCalls<"attempt">;
285
291
  readonly sandbox: Sandbox<Kind>;
286
292
  ```
287
293
 
288
- #### `o11y`
294
+ #### `observability`
289
295
 
290
296
  ```ts
291
- readonly o11y: import("../o11y/types.ts").O11ySummary;
297
+ readonly observability: import("../o11y/types.ts").ObservabilitySummary;
292
298
  ```
293
299
 
294
300
  #### `usage`
@@ -382,14 +388,14 @@ const factualSummary = defineJudge({
382
388
  });
383
389
 
384
390
  const turn = await t.send("总结需求。");
385
- t.judge({ source: expected, summary: turn.message }, factualSummary)
391
+ t.judge({ source: expected, summary: turn.reply }, factualSummary)
386
392
  .gate(0.8)
387
393
  .label("事实一致");
388
394
  ```
389
395
 
390
396
  Judge 材料可以是大小有上限的 JSON 值,也可以是 `judgeImage()` 生成的图片,登记时就会保存一份快照。
391
397
 
392
- Judge 用哪个模型按顺序决定:先取项目配置的 `judgeRuntime`,再应用评估用例的 `judge`,最后应用 Experiment 的 `judgeRuntime`。后一层给的是完整 Provider 时,会整体替换服务和执行配置;只给模型字符串时,只换掉已选 Provider 的模型。评估用例的 `judge` 只决定这道题用哪个模型或 Provider,不限制能用哪些匹配条件。
398
+ Judge 用哪个模型按顺序决定:先取项目配置的 `judgeProvider`,再应用评估用例的 `judge`,最后应用 Experiment 的 `judge`。后一层给的是完整 Provider 时,会整体替换服务和执行配置;只给模型字符串时,只换掉已选 Provider 的模型。评估用例的 `judge` 只决定这道题用哪个模型或 Provider,不限制能用哪些匹配条件。
393
399
 
394
400
  通过制和计分制都可以调用 `.gate(minimum)`。计分制还可以调用 `.score(n)`,gate 失败时仍保留这一项的得分。
395
401
 
@@ -516,10 +522,10 @@ readonly eventOccurrences: ManagedEventOccurrences<"turn">;
516
522
  readonly status: "completed" | "failed" | "waiting";
517
523
  ```
518
524
 
519
- #### `message`
525
+ #### `reply`
520
526
 
521
527
  ```ts
522
- readonly message: string;
528
+ readonly reply: string;
523
529
  ```
524
530
 
525
531
  #### `data`
@@ -25,10 +25,10 @@ export default defineExperiment({
25
25
  #### `models`
26
26
 
27
27
  ```ts
28
- models?: Readonly<Record<string, ModelSlotSelection>>;
28
+ models?: Readonly<Record<string, ModelRoleSelection>>;
29
29
  ```
30
30
 
31
- 为自定义 Adapter 的各个具名模型槽选择模型;不能与单模型简写同时使用。
31
+ 为自定义 Adapter 的各个模型用途选择模型;不能与单模型简写同时使用。
32
32
 
33
33
  #### `description`
34
34
 
@@ -38,14 +38,6 @@ description?: string;
38
38
 
39
39
  一句话描述,展示在 view / CLI 里;纯说明,不影响调度或打分。
40
40
 
41
- #### `agent`
42
-
43
- ```ts
44
- agent?: Agent;
45
- ```
46
-
47
- 对话 Adapter 的简写;`agent` 与 `adapter` 必须且只能提供一个。
48
-
49
41
  #### `adapter`
50
42
 
51
43
  ```ts
@@ -70,10 +62,10 @@ reasoningEffort?: string;
70
62
 
71
63
  模型推理努力程度(如 "low"/"medium"/"high",取值由具体模型/adapter 决定);省略=用 agent 原生默认。经 ctx.reasoningEffort 透给 adapter 与 eval。
72
64
 
73
- #### `judgeRuntime`
65
+ #### `judge`
74
66
 
75
67
  ```ts
76
- judgeRuntime?: JudgeSelection;
68
+ judge?: JudgeSelection;
77
69
  ```
78
70
 
79
71
  本实验的 Judge 执行配置。只覆盖 model / endpoint / credential selector / 调用预算,
@@ -180,8 +172,8 @@ sharedState?: SharedStateConfig;
180
172
  ```
181
173
 
182
174
  声明本 Experiment 需要独占的共享外部状态。相同 key 的 Invocation 在同一项目
183
- Coordination 域内从 Experiment/Sandbox setup 前一直互斥到 Sandbox teardown、
184
- provider finalizer 与 Experiment teardown 全部完成;等待者不会先创建 Sandbox,
175
+ Coordination 域内从 Experiment/Sandbox before 前一直互斥到 Sandbox after、
176
+ provider finalizer 与 Experiment after 全部完成;等待者不会先创建 Sandbox,
185
177
  取得租约后继续自己的 plan。它不是状态存储、事务或跨机器锁。
186
178
 
187
179
  #### `budget`
@@ -205,47 +197,34 @@ maxConcurrency?: number;
205
197
  仍按全局并发(CLI / env / config / 沙箱默认)跑。用于串行化有共享状态的实验
206
198
  (如跨 eval 累积记忆:`maxConcurrency: 1` 保证 attempt 按 eval 顺序一个个跑),
207
199
  或给撞 provider 限额的实验单独降速。名额与 attempt 同生命周期:从沙箱创建前一直握到
208
- teardown 与沙箱销毁完成才归还,中途任何等待(含 turn 重试退避)都不松手——
200
+ after 与沙箱销毁完成才归还,中途任何等待(含 turn 重试退避)都不松手——
209
201
  `maxConcurrency: 1` 因此是严格的临界区,不会被同实验的下一个 attempt 提前闯入。
210
202
  它不跨 Invocation;跨 Invocation 的共享外部状态请声明 `sharedState`。
211
203
 
212
- #### `classifyFailure`
213
-
214
- ```ts
215
- classifyFailure?: AttemptFailureClassifier;
216
- ```
217
-
218
- 本实验的失败分类器:识别以第三方错误形态浮出的自家共享基建死因(对自家隧道 host 的拒连
219
- 一类),返回 `undefined` 表示「不认识,交给后续链路」。本实验任意 per-attempt 阶段的失败
220
- 都会问到它;send 失败链上它排在 adapter 的 `classifySendFailure` 之前——按自家坐标过滤的
221
- 特异性高于协议通用形状,两者同时认领时空间轴才赢得下来。分类器要快、纯、不抛错(抛错按
222
- `undefined` 回落并被吞掉);只声明决策轴与 `reason` 词,重试与落闸策略归执行体。
223
- 见 docs/feature/error-classification/library.md「实验 / eval 作者:声明死因的波及范围」。
224
-
225
- #### `setup`
204
+ #### `before`
226
205
 
227
206
  ```ts
228
- setup?: ExperimentHook;
207
+ before?: ExperimentHook;
229
208
  ```
230
209
 
231
- 实验级生命周期钩子对的 setup 侧:整场至多一次、宿主机侧,管「每实验一份、所有 attempt
210
+ 实验级生命周期钩子对的 before 侧:整场至多一次、宿主机侧,管「每实验一份、所有 attempt
232
211
  共享」的宿主机资源(隧道、mock server、license 租约)。本实验第一个通过派发许可的
233
212
  attempt 触发(memoized,并发 attempt 等同一个结果;全部结果被 carry 携入时不执行)。
234
- setup 不返回值;产物写模块级变量,`teardown` 与同文件 agent / sandbox 钩子从闭包读,
235
- runner 不做值的中介。setup 抛错 → 本实验所有 Attempt 形成 `errored` Verdict
236
- (code `"experiment-setup-failed"`、phase `"experiment.setup"`),同批其它实验不受影响。
213
+ before 不返回值;产物写模块级变量,`after` 与同文件 agent / sandbox 钩子从闭包读,
214
+ runner 不做值的中介。before 抛错 → 本实验所有 Attempt 形成 `errored` Verdict
215
+ (code `"experiment-setup-failed"`、phase `"experiment.before"`),同批其它实验不受影响。
237
216
  函数体不进 fingerprint,改了钩子逻辑用 `--rerun all` 明确全部重跑。
238
217
  见 docs/feature/experiments/architecture.md「实验级生命周期」。
239
218
 
240
- #### `teardown`
219
+ #### `after`
241
220
 
242
221
  ```ts
243
- teardown?: ExperimentHook;
222
+ after?: ExperimentHook;
244
223
  ```
245
224
 
246
- 实验级生命周期钩子对的 teardown 侧:本实验全部 attempt 收尾后执行(运行被中断也执行),
247
- 当且仅当 setup 时点走到过——setup 抛错不豁免(半初始化现场同样要扫尾,teardown 对可能
248
- 未赋值的闭包变量做防御),未声明 setup 不影响触发;一个 attempt 都不派发则跳过。
225
+ 实验级生命周期钩子对的 after 侧:本实验全部 attempt 收尾后执行(运行被中断也执行),
226
+ 当且仅当 before 时点走到过——before 抛错不豁免(半初始化现场同样要扫尾,after 对可能
227
+ 未赋值的闭包变量做防御),未声明 before 不影响触发;一个 attempt 都不派发则跳过。
249
228
  抛错或超 30s 清理上限只记运行级 diagnostic(`experiment-teardown-failed`),不改判定。
250
229
 
251
230
  {/* GENERATED:END experiment-fields */}
@@ -199,7 +199,7 @@ token 用量或 OTel span 反推得到)。与顶层 `estimatedCostUSD`(价目表
199
199
 
200
200
  | 事件 | 说什么 | 消费它的断言 / API |
201
201
  |---|---|---|
202
- | `message` | agent(或用户)说了一段话 | `turn.message`、`turn.event(eventMatch("message", ...))`、Judge 的材料 |
202
+ | `message` | agent(或用户)说了一段话 | `turn.reply`、`turn.event(eventMatch("message", ...))`、Judge 的材料 |
203
203
  | `operation.started`(`kind: "tool"`) | 发起一次工具调用 | `turn.calledTool(...)`、`turn.toolOrder(...)`、`turn.event(...)` |
204
204
  | `operation.finished`(`kind: "tool"`) | 该次工具调用的结果 | 带状态条件的 `ToolMatch` |
205
205
  | `operation.started`(`kind: "subagent"`) | 委派一个子 agent | 保留在原始事件和报告里;没有子 agent 专用断言 |
@@ -24,6 +24,27 @@ const config = await t.check(rawConfig, pattern(/runtime/)).orStop();
24
24
  | `await handle.orStop()` | 同一 handle 的 async barrier;mismatch 或 below 时停止当前 continuation |
25
25
  | `handle.score(n)` / `t.score(n)` | 在计分制评估中让该项贡献分数,或直接登记 contribution |
26
26
 
27
+ ## 数值单位
28
+
29
+ 先用普通数值计算,再用 `ms`、`seconds`、`tokens`、`usd`、`ratio`、`count` 或 `bytes` 包装结果。它们返回冻结的 `Quantity<U>`,通过 `.value` 读取数值,通过 `.unit` 读取单位。Quantity 不参与算术,也不自动换算单位。
30
+
31
+ 所有构造函数只接受有限数;`ratio(n)` 还要求 `0 ≤ n ≤ 1`,否则抛出 `RangeError`。
32
+
33
+ ```ts
34
+ import { atMost, between, measured, ms, quantile, ratio } from "niceeval/expect";
35
+
36
+ const latency = measured(ms(512), { unavailable: "missing" });
37
+ t.check(latency, atMost(ms(600)));
38
+ t.check(quantile([ms(100), ms(200)], 0.9), between(ms(100), ms(200)));
39
+ t.check(t.usage.cacheRead.rate(), atMost(ratio(0.9)));
40
+ ```
41
+
42
+ `measured` 接受 `number | null` 或 `Quantity<U> | null`;`quantile` 接受普通数值数组或单位一致的 Quantity 数组,并保留单位。混合单位、混合普通数值与 Quantity 的数组会抛出 `TypeError`。空数组和缺失观测保留 unavailable,不补零。
43
+
44
+ `atLeast`、`atMost`、`greaterThan`、`lessThan` 的阈值必须与观测单位相同。`between(minimum, maximum)` 检查含端点的区间,两端也必须同单位且按大小排列。普通数值只接受普通数值阈值。
45
+
46
+ TypeScript 拒绝跨单位调用。JavaScript 绕过类型时,该检查返回 unavailable 并说明单位不符。`show` 和 `view` 按单位显示,例如 `512 ms`、`61.2%`、`$0.031`。
47
+
27
48
  ## Matchers
28
49
 
29
50
  下面每个 matcher 的签名和说明从 `niceeval/expect` 的源码生成,和当前实现保持同步。
@@ -23,7 +23,7 @@ description: "NiceEval 内置的 Sandbox 和非 Sandbox 适配器分别是什么
23
23
  Adapter 从本地读取后上传文件,原样替换 Sandbox 中原本为空的用户级 `~/.claude/settings.json`。不继承宿主机配置,也不 deep merge 或重新序列化。`model` 和 `env` 归 Experiment 和 Adapter 管,出现在文件里会在 `setup` 阶段报错并点名冲突键。
24
24
 
25
25
  Secret 走环境变量,别写进配置文件。
26
- - **安装后脚本**:`postSetup: SandboxCommand[]`,在写 settings、挂 MCP、装 Skill 与 Plugin 全部完成后,按数组顺序在 Sandbox 里跑 command。典型用途是运行插件自带的 setup 脚本(比如它要往全局配置里登记 hook)——这类脚本必须等安装文件就位才能跑。与它成对的收尾是 `preTeardown: SandboxCommand[]`:按逆序、在 agent 自己的 teardown 步骤之前执行,当且仅当 `postSetup` 的时点已经走到才触发。Command 抛错算基础设施错误(Attempt 记 errored),不算 agent 答题失败。
26
+ - **安装后脚本**:`before: SandboxCommand[]`,在写 settings、挂 MCP、装 Skill 与 Plugin 全部完成后,按数组顺序在 Sandbox 里跑 command。典型用途是运行插件自带的 setup 脚本(比如它要往全局配置里登记 hook)——这类脚本必须等安装文件就位才能跑。与它成对的收尾是 `after: SandboxCommand[]`:按逆序、在 agent 自己的 teardown 步骤之前执行,当且仅当 `before` 的时点已经走到才触发。Command 抛错算基础设施错误(Attempt 记 errored),不算 agent 答题失败。
27
27
  - **tracing**:claude CLI 的 beta 原生遥测(`CLAUDE_CODE_ENHANCED_TELEMETRY_BETA`),span 只有结构和计时,细节见 [OTel 接入](/zh/tutorials/connect-otel)。
28
28
 
29
29
  例如,用 `configs/claude-code/no-web.json` 关闭内置联网检索:
@@ -79,7 +79,7 @@ export default defineExperiment({
79
79
  Adapter 从本地读取后上传文件,原样替换 Sandbox 中原本为空的用户级 `~/.codex/config.toml`。不继承宿主机配置,也不拼接、deep merge 或解析后重写。`model`、`model_provider`、`model_providers`、`model_reasoning_effort`、`mcp_servers`、`otel` 归 Experiment 和 Adapter 管,出现在文件里会在 `setup` 阶段报错并点名冲突键。
80
80
 
81
81
  Secret 走环境变量,别写进配置文件。
82
- - **安装后脚本**:`postSetup: SandboxCommand[]`,语义与 claude-code 相同:全部安装步骤完成后按序在 Sandbox 里跑 command,适合运行插件自带的 setup 脚本。成对的 `preTeardown: SandboxCommand[]` 按逆序在 agent teardown 之前收尾,当且仅当 `postSetup` 的时点已经走到才触发。脚本往 codex 全局配置登记的 hook 不需要交互式信任确认——运行时 `codex exec` 已绕过 hook 信任门槛,hook 直接生效。
82
+ - **安装后脚本**:`before: SandboxCommand[]`,语义与 claude-code 相同:全部安装步骤完成后按序在 Sandbox 里跑 command,适合运行插件自带的 setup 脚本。成对的 `after: SandboxCommand[]` 按逆序在 agent teardown 之前收尾,当且仅当 `before` 的时点已经走到才触发。脚本往 codex 全局配置登记的 hook 不需要交互式信任确认——运行时 `codex exec` 已绕过 hook 信任门槛,hook 直接生效。
83
83
  - **tracing**:内置,通过 `config.toml` 的 `[otel.trace_exporter.otlp-http]` 段配置,协议 `http/json`。
84
84
 
85
85
  例如,用 `configs/codex/no-web.toml` 关闭内置联网检索:
@@ -120,12 +120,14 @@ export default defineExperiment({
120
120
 
121
121
  ### bub
122
122
 
123
- - **鉴权**:`BUB_API_KEY` + `BUB_API_BASE`(OpenAI 兼容代理),工厂参数 `apiKey` / `apiBase` 可覆盖。
123
+ Bub 固定使用 `0.5.1`。省略 `version` 或填写 `"0.5.1"`;其它值在定义期报错。自定义 `otelPlugin` 必须支持该版本的 tape 协议。
124
+
125
+ - **鉴权**:`BUB_API_KEY` + `BUB_API_BASE`(OpenAI 兼容代理),工厂参数 `apiKey` / `baseUrl` 可覆盖。
124
126
  - **装 Skill**:`skills: SkillSpec[]`,与另外两个 Adapter 同一个类型。装进 `.agents/skills/<name>/`,发现指引写进 AGENTS.md。
125
127
  - **装插件**:`pythonPlugins: PythonPluginSpec[]`(`{ package }`:PyPI 包、版本约束或 git URL),`setup` 阶段进 `uv tool install … --with <package>`。这个类型只属于 bub。package 集合进安装 checkpoint key,插件不同的两个变体不会复用同一份安装缓存。
126
128
  - **预制 Bub**:NiceEval 的 E2B 配方会把 Bub、OTel 插件和 Python 插件集合算成安装指纹。Adapter 只复用指纹完全一致的环境。仅在 PATH 里放一个 `bub` 不足以证明兼容。构建入口见 [预制 Sandbox 环境 · 从官方基线继续构建](/zh/tutorials/prebuilt-sandbox#从官方基线继续构建)。
127
129
  - bub 没有 `mcpServers`——MCP 只属于支持它的 Adapter,Config 上压根没有这个字段。
128
- - **安装后脚本**:`postSetup: SandboxCommand[]`,语义与另外两个 Adapter 相同:全部安装步骤完成后按序在 Sandbox 里跑 command。成对的 `preTeardown: SandboxCommand[]` 按逆序在 agent teardown 之前收尾,当且仅当 `postSetup` 的时点已经走到才触发。
130
+ - **安装后脚本**:`before: SandboxCommand[]`,语义与另外两个 Adapter 相同:全部安装步骤完成后按序在 Sandbox 里跑 command。成对的 `after: SandboxCommand[]` 按逆序在 agent teardown 之前收尾,当且仅当 `before` 的时点已经走到才触发。
129
131
  - **安装方式**:走 `uv tool install`(PyPI 包,不是 npm 包),首次安装会建 checkpoint 缓存加速后续 Sandbox。
130
132
  - **tracing**:内置,通过环境变量注入,协议 `http/protobuf`。
131
133
 
@@ -155,7 +157,7 @@ export default defineExperiment({
155
157
  | 原生 Plugin | ✅ `plugins: ClaudeCodePluginSpec[]` | ✅ `plugins: CodexPluginSpec[]` | ❌ |
156
158
  | 官方配置文件 | ✅ `settingsFile`(完整 settings.json) | ✅ `configFile`(完整 config.toml) | ❌ |
157
159
  | Python Plugin | ❌ | ❌ | ✅ `pythonPlugins: PythonPluginSpec[]` |
158
- | 安装后脚本 | ✅ `postSetup` / `preTeardown` | ✅ `postSetup` / `preTeardown` | ✅ `postSetup` / `preTeardown` |
160
+ | 安装后脚本 | ✅ `before` / `after` | ✅ `before` / `after` | ✅ `before` / `after` |
159
161
  | tracing | ✅(beta,仅结构与计时) | ✅ | ✅ |
160
162
  | 安装方式 | npm 全局包(需镜像自带 Node) | 自带运行时的原生包(解压即用,镜像无需 Node) | `uv tool install`(PyPI) |
161
163
 
@@ -195,3 +197,8 @@ export default defineExperiment({
195
197
  - [内置 Agent 能力参考](/zh/reference/builtin-agents) — 每个适配器逐能力盘点、非 Sandbox 适配器的完整代码示例。
196
198
  - [OTel 接入](/zh/tutorials/connect-otel) — 把 span 发给 [NiceEval](https://niceeval.com/),换 `niceeval view` 的调用瀑布图。
197
199
  - [Adapter 参考](/zh/reference/define-agent) — `defineAgent` / `defineSandboxAgent` 完整参数。
200
+
201
+ ## Bub 与 OpenCode 的事件协议
202
+
203
+ Bub 解析固定版本的 tape JSONL,OpenCode 解析 `1.18.5` 的 JSONL 与完整 session export。未知事件不进入 `Turn.events`。
204
+ 每条 Attempt 在收尾时生成一条 `agent-event-unrecognized` warning,列出未知事件类型和次数。运行 `niceeval show @locator` 查看诊断;该轮事件和动作证据会标为 partial。
@@ -70,7 +70,7 @@ query discover
70
70
  | 找不到项目的结果文件 | 确认在项目目录里运行,并检查 `.niceeval/record.sqlite` 是否存在。 |
71
71
  | `--record` 指定的文件被拒绝 | 确认它是运行结束后复制的完整单文件,复制期间没有别的进程在写。不要删除还没合并的 WAL 文件。外部文件会经过完整性和数据一致性校验。 |
72
72
  | 不支持的格式版本或数据库无效 | 保留原文件,核实写入它的 NiceEval 版本。支持的历史格式会自动升级;未知格式或损坏的数据不会被修补,也不会只读一部分。 |
73
- | Run 仍为 `active`,但原进程已经终止 | 先用 `pnpm exec niceeval run show <run-id>` 核对,再运行 `pnpm exec niceeval run recover <run-id> --yes`。 |
73
+ | Run 仍为 `active`,但原进程已经终止 | 先用 `pnpm exec niceeval show --run <run-id>` 核对,再运行 `pnpm exec niceeval run recover <run-id> --yes`。 |
74
74
 
75
75
  已发布的结果不能手动修改。需要不同的结果时,重新运行创建新的 Run。`niceeval run recover` 只会结束能证明原进程已经终止的 Run,已经发布的 Attempt 都会保留。完整步骤见[运行被强杀后恢复](/zh/troubleshooting/recover-after-kill)。
76
76
 
@@ -78,7 +78,7 @@ query discover
78
78
 
79
79
  这里的格式版本是结果文件内部的标识,和 NiceEval 的 npm 包版本无关。不要通过修改数据库里的版本字段尝试升级。
80
80
 
81
- `show`、`query`、`run list`、`run show` 与 `view` 可以直接读取 0.15、0.16、0.17 格式的历史结果文件。读取时 NiceEval 在私有副本里自动升级,原文件、Run、Attempt 和引用都保持不变,不需要先运行评估。
81
+ `show`、`query`、`run list`、`show --run` 与 `view` 可以直接读取 0.15、0.16、0.17 格式的历史结果文件。读取时 NiceEval 在私有副本里自动升级,原文件、Run、Attempt 和引用都保持不变,不需要先运行评估。
82
82
 
83
83
  用 `--record` 读取时,文件必须是已经交付的完整单文件,读取期间不能被其它进程修改。文件还带着未合并的 WAL、仍有运行在写,或无法确认写入进程是否已经结束时,命令会拒绝读取。不要删除旁边的文件来绕过检查。
84
84
 
@@ -14,7 +14,7 @@ description: "进程被 kill -9、CI 超时或断电中断后,保留已经跑
14
14
 
15
15
  ```bash
16
16
  pnpm exec niceeval run list --invocation <invocation-id>
17
- pnpm exec niceeval run show <run-id>
17
+ pnpm exec niceeval show --run <run-id>
18
18
  pnpm exec niceeval show --run <run-id>
19
19
  ```
20
20
 
@@ -49,7 +49,7 @@ import { defineConfig } from "niceeval";
49
49
  import { OpenAIProvider } from "niceeval/judge";
50
50
 
51
51
  export default defineConfig({
52
- judgeRuntime: OpenAIProvider({
52
+ judgeProvider: OpenAIProvider({
53
53
  model: "gpt-5.4-mini", // 必填:没有内置默认模型
54
54
  // 使用 OpenAI 兼容网关时显式加下列两项:
55
55
  // baseUrl: "https://api.deepseek.com/v1",
@@ -65,7 +65,7 @@ export default defineConfig({
65
65
  - **配错不会假装通过。** 读不到模型或 key、请求超时时,Judge 断言记为 `unavailable` 并带上原因;网关拒绝请求、返回格式不对时记为 `errored`。结果里不会把拿不到的分数显示成不通过或零分。
66
66
  - **配完先验一次。** 用 `defineJudge` 声明 rubric 和 anchors,再调用 `t.judge(material, definition).gate(0.8)`。跑完后用 `pnpm exec niceeval show --run <run-id>` 查看分数,步骤见[配置并验证 Judge](/zh/tutorials/verify-judge)。
67
67
  - **没有用户在场(自治接入)时不要直接跳过 Judge**:先看环境里是否已有与所选 Provider 对应的 key。有就验证;没有时先写精确 Match,并在收尾说明 Judge 没有配置。
68
- - Judge 模型要**与被测 Agent 分离**,避免同一个模型给自己的输出打分。执行配置从 Experiment 和项目配置的 `judgeRuntime` 求值;定义与材料见 [Judge](/zh/explanation/judge)。
68
+ - Judge 模型要**与被测 Agent 分离**,避免同一个模型给自己的输出打分。执行配置从 Experiment 和项目配置的 `judgeProvider` 求值;定义与材料见 [Judge](/zh/explanation/judge)。
69
69
 
70
70
  ## 第 3 步:写 Adapter、Experiment 和评估用例
71
71
 
@@ -68,7 +68,7 @@ t.calledTool("get_weather").label("调用了天气工具");
68
68
 
69
69
  | 属性 | 内容 |
70
70
  |---|---|
71
- | `turn.message` | 助手的文本回复 |
71
+ | `turn.reply` | 助手的文本回复 |
72
72
  | `turn.toolCalls` | 这一轮的工具调用 |
73
73
  | `turn.data` | 结构化输出 |
74
74
  | `turn.status` | `"completed"`、`"failed"` 或 `"waiting"` |
@@ -111,7 +111,7 @@ const grounded = defineJudge({
111
111
  export default defineEval({
112
112
  async test(t) {
113
113
  const turn = await t.send("北京今天天气怎么样?");
114
- t.judge({ question: turn.input, answer: turn.message }, grounded).gate(0.7).label("回答有依据");
114
+ t.judge({ question: turn.input, answer: turn.reply }, grounded).gate(0.7).label("回答有依据");
115
115
  },
116
116
  });
117
117
  ```
@@ -23,7 +23,7 @@ View 会同时打开两个 Run,你可以逐题对照通过与否、分数、
23
23
  ```sh
24
24
  pnpm --silent exec niceeval query run --request - <<'JSON'
25
25
  {
26
- "protocol": "niceeval.query/v1",
26
+ "protocol": "niceeval.query/v2",
27
27
  "operation": {
28
28
  "kind": "runs.compare",
29
29
  "mode": "paired",
@@ -80,23 +80,23 @@ pnpm exec niceeval exp compare --max-concurrency 19
80
80
 
81
81
  ## 名额怎么分
82
82
 
83
- 下面是一批混跑:全局 3 个并发位,`fast` 是普通实验,`slow` 声明了 `maxConcurrency: 1`。
83
+ 下面是一批混跑:全局 3 个并发名额,`fast` 是普通实验,`slow` 声明了 `maxConcurrency: 1`。
84
84
 
85
85
  <Schedule
86
86
  title="全局 3 位 · slow 实验自己限 1"
87
87
  hint="竖线是时间,悬停暂停"
88
88
  lanes={[
89
- { label: "并发位 1", bars: [
89
+ { label: "并发名额 1", bars: [
90
90
  { text: "slow · a1", from: 1, to: 5, tone: "serial" },
91
91
  { text: "slow · a2", from: 5, to: 9, tone: "serial" },
92
92
  { text: "slow · a3", from: 9, to: 13, tone: "serial" },
93
93
  ] },
94
- { label: "并发位 2", bars: [
94
+ { label: "并发名额 2", bars: [
95
95
  { text: "fast · a1", from: 1, to: 4 },
96
96
  { text: "fast · a3", from: 4, to: 8 },
97
97
  { text: "fast · a5", from: 8, to: 13 },
98
98
  ] },
99
- { label: "并发位 3", bars: [
99
+ { label: "并发名额 3", bars: [
100
100
  { text: "fast · a2", from: 1, to: 3 },
101
101
  { text: "fast · a4", from: 3, to: 7 },
102
102
  { text: "fast · a6", from: 7, to: 13 },
@@ -108,7 +108,7 @@ pnpm exec niceeval exp compare --max-concurrency 19
108
108
  legend={[
109
109
  { text: "普通实验,抢空出来的位" },
110
110
  { tone: "serial", text: "声明了 maxConcurrency: 1,永远只占一条" },
111
- { tone: "backoff", text: "退避重试,让出并发位但仍计 running" },
111
+ { tone: "backoff", text: "退避重试,让出并发名额但仍计 running" },
112
112
  ]}
113
113
  />
114
114
 
@@ -118,9 +118,9 @@ pnpm exec niceeval exp compare --max-concurrency 19
118
118
  - **名额优先给还要跑最多轮的实验。** 快慢实验放在一条命令里跑是安全的,不需要手工分批,也不需要给快任务预留名额。快的任务会自动补上空位。
119
119
  - **退避重试中的 Attempt 让出全局位,但不让出实验自己的位。** 所以撞上限流时,live 面板的 `running` 会超过上限,超出的数量正好是正在退避的数量。任一时刻真正在执行的仍然不超过上限,这不是并发失效。
120
120
 
121
- 等待实验级 `setup`(起隧道、起共享服务)的 Attempt 不占并发位,计数里显示为 `queued`。所以隧道启动慢时,面板长时间显示 “0 running、N queued”,问题在 `setup`,不在并发配置。
121
+ 等待实验级 `setup`(起隧道、起共享服务)的 Attempt 不占并发名额,计数里显示为 `queued`。所以隧道启动慢时,面板长时间显示 “0 running、N queued”,问题在 `setup`,不在并发配置。
122
122
 
123
- 等待 Docker profile 容量的 Attempt 也显示为 `queued`,排队原因是 `provider-capacity`。它不会显示 `creating sandbox`,也不占普通并发位。profile 有空余后,它重新拿到并发位,分到资源才进入 `running`。同批用其它 Provider 的 Attempt 可以继续启动,不会被排在前面的 Docker 任务卡住。
123
+ 等待 Docker profile 容量的 Attempt 也显示为 `queued`,排队原因是 `provider-capacity`。它不会显示 `creating sandbox`,也不占普通并发名额。profile 有空余后,它重新拿到并发名额,分到资源才进入 `running`。同批用其它 Provider 的 Attempt 可以继续启动,不会被排在前面的 Docker 任务卡住。
124
124
 
125
125
  ## 在 live 面板确认并发生效
126
126
 
@@ -178,7 +178,7 @@ const fixtures = new WeakMap<Sandbox, { repoUrl: string; destroy(): Promise<void
178
178
 
179
179
  ## 让相关评估按组复用 Sandbox
180
180
 
181
- 只有几组评估需要共享环境时,用 `defineEvalGroup()` 列出同组成员。每个组同一时刻只跑一个 Attempt,最多复用一台 Sandbox;不同组和没分组的评估用例继续用剩下的并发位。你不需要把整个 Experiment 设成 `maxConcurrency: 1`。
181
+ 只有几组评估需要共享环境时,用 `defineEvalGroup()` 列出同组成员。每个组同一时刻只跑一个 Attempt,最多复用一台 Sandbox;不同组和没分组的评估用例继续用剩下的并发名额。你不需要把整个 Experiment 设成 `maxConcurrency: 1`。
182
182
 
183
183
  `evals` 数组只列成员,不决定顺序。组内按评估用例 ID 排序执行;`attempts > 1` 时,同一道题的几次 Attempt 连续跑完再轮到下一道。完整目录、Experiment 写法和 `--dry` 检查见[用评估组复用 Sandbox](/zh/tutorials/eval-groups)。
184
184