niceeval 0.17.1 → 0.19.0

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 (692) hide show
  1. package/INDEX.md +5 -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 -3
  7. package/dist/adapter.cjs.map +1 -1
  8. package/dist/adapter.d.cts +26 -15
  9. package/dist/adapter.d.mts +26 -15
  10. package/dist/adapter.d.ts +26 -15
  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 +61 -0
  121. package/dist/assertions/measurements.cjs.map +1 -0
  122. package/dist/assertions/measurements.d.cts +24 -0
  123. package/dist/assertions/measurements.d.mts +24 -0
  124. package/dist/assertions/measurements.d.ts +24 -0
  125. package/dist/assertions/measurements.js +8 -0
  126. package/dist/assertions/measurements.js.map +1 -0
  127. package/dist/assertions/numeric.cjs +2 -0
  128. package/dist/assertions/numeric.cjs.map +1 -1
  129. package/dist/assertions/numeric.d.cts +1 -1
  130. package/dist/assertions/numeric.d.mts +1 -1
  131. package/dist/assertions/numeric.d.ts +1 -1
  132. package/dist/assertions/quantity.cjs +42 -0
  133. package/dist/assertions/quantity.cjs.map +1 -0
  134. package/dist/assertions/quantity.d.cts +18 -0
  135. package/dist/assertions/quantity.d.mts +18 -0
  136. package/dist/assertions/quantity.d.ts +18 -0
  137. package/dist/assertions/quantity.js +22 -0
  138. package/dist/assertions/quantity.js.map +1 -0
  139. package/dist/assertions/record/attachment.cjs +2 -0
  140. package/dist/assertions/record/attachment.cjs.map +1 -1
  141. package/dist/assertions/record/codec.cjs +5 -1
  142. package/dist/assertions/record/codec.cjs.map +1 -1
  143. package/dist/assertions/record/model.cjs.map +1 -1
  144. package/dist/assertions/record/model.d.cts +3 -1
  145. package/dist/assertions/record/model.d.mts +3 -1
  146. package/dist/assertions/record/model.d.ts +3 -1
  147. package/dist/assertions/runtime.cjs +11 -6
  148. package/dist/assertions/runtime.cjs.map +1 -1
  149. package/dist/cli/program.cjs +3 -0
  150. package/dist/cli/program.cjs.map +1 -1
  151. package/dist/context/assert-first.cjs +6 -4
  152. package/dist/context/assert-first.cjs.map +1 -1
  153. package/dist/context/assert-first.d.cts +9 -3
  154. package/dist/context/assert-first.d.mts +9 -3
  155. package/dist/context/assert-first.d.ts +9 -3
  156. package/dist/context/notes.cjs +47 -0
  157. package/dist/context/notes.cjs.map +1 -0
  158. package/dist/context/notes.d.cts +10 -0
  159. package/dist/context/notes.d.mts +10 -0
  160. package/dist/context/notes.d.ts +10 -0
  161. package/dist/context/notes.js +6 -0
  162. package/dist/context/notes.js.map +1 -0
  163. package/dist/context/send-failures.cjs +1 -7
  164. package/dist/context/send-failures.cjs.map +1 -1
  165. package/dist/context/send-failures.d.cts +2 -3
  166. package/dist/context/send-failures.d.mts +2 -3
  167. package/dist/context/send-failures.d.ts +2 -3
  168. package/dist/context/send-retry.cjs +0 -1
  169. package/dist/context/send-retry.cjs.map +1 -1
  170. package/dist/context/send-retry.d.cts +1 -2
  171. package/dist/context/send-retry.d.mts +1 -2
  172. package/dist/context/send-retry.d.ts +1 -2
  173. package/dist/context/session.cjs +10 -17
  174. package/dist/context/session.cjs.map +1 -1
  175. package/dist/context/session.d.cts +4 -10
  176. package/dist/context/session.d.mts +4 -10
  177. package/dist/context/session.d.ts +4 -10
  178. package/dist/define.cjs +89 -64
  179. package/dist/define.cjs.map +1 -1
  180. package/dist/define.d.cts +3 -3
  181. package/dist/define.d.mts +3 -3
  182. package/dist/define.d.ts +3 -3
  183. package/dist/eval/cli/contribution.cjs +1 -1
  184. package/dist/eval/cli/contribution.cjs.map +1 -1
  185. package/dist/eval/host/index.cjs +1 -1
  186. package/dist/eval/host/index.cjs.map +1 -1
  187. package/dist/eval/record/evaluation.cjs +1 -1
  188. package/dist/eval/record/evaluation.cjs.map +1 -1
  189. package/dist/eval/record/membership-provenance.d.cts +3 -3
  190. package/dist/eval/record/membership-provenance.d.mts +3 -3
  191. package/dist/eval/record/membership-provenance.d.ts +3 -3
  192. package/dist/eval/record/score.cjs +2 -2
  193. package/dist/eval/record/score.cjs.map +1 -1
  194. package/dist/eval/record/sealed-assertion.cjs +1 -1
  195. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  196. package/dist/eval/record/verdict.cjs +2 -2
  197. package/dist/eval/record/verdict.cjs.map +1 -1
  198. package/dist/expect/index.cjs +13 -1
  199. package/dist/expect/index.cjs.map +1 -1
  200. package/dist/expect/index.d.cts +5 -1
  201. package/dist/expect/index.d.mts +5 -1
  202. package/dist/expect/index.d.ts +5 -1
  203. package/dist/expect/index.js +92 -72
  204. package/dist/expect/index.mjs +92 -72
  205. package/dist/experiment/host/cli/contribution.cjs +52 -39
  206. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  207. package/dist/experiment/host/cli/contribution.d.cts +18 -4
  208. package/dist/experiment/host/cli/contribution.d.mts +18 -4
  209. package/dist/experiment/host/cli/contribution.d.ts +18 -4
  210. package/dist/experiment/host/cli/contribution.js +2 -2
  211. package/dist/experiment/host/cli/debug-protocol.cjs +2 -2
  212. package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -1
  213. package/dist/experiment/host/cli/debug-protocol.d.cts +2 -2
  214. package/dist/experiment/host/cli/debug-protocol.d.mts +2 -2
  215. package/dist/experiment/host/cli/debug-protocol.d.ts +2 -2
  216. package/dist/experiment/host/cli/output-protocol.cjs +1 -1
  217. package/dist/experiment/host/cli/output-protocol.cjs.map +1 -1
  218. package/dist/experiment/host/cli/output-protocol.d.cts +2 -2
  219. package/dist/experiment/host/cli/output-protocol.d.mts +2 -2
  220. package/dist/experiment/host/cli/output-protocol.d.ts +2 -2
  221. package/dist/experiment/host/current.cjs +2 -2
  222. package/dist/experiment/host/current.cjs.map +1 -1
  223. package/dist/experiment/host/index.cjs +1 -1
  224. package/dist/experiment/host/index.cjs.map +1 -1
  225. package/dist/experiment/host/operations.cjs +24 -23
  226. package/dist/experiment/host/operations.cjs.map +1 -1
  227. package/dist/experiment/host/runtime.cjs +11 -10
  228. package/dist/experiment/host/runtime.cjs.map +1 -1
  229. package/dist/experiment/host/runtime.d.cts +3 -3
  230. package/dist/experiment/host/runtime.d.mts +3 -3
  231. package/dist/experiment/host/runtime.d.ts +3 -3
  232. package/dist/experiment/host/teardown.cjs +4 -3
  233. package/dist/experiment/host/teardown.cjs.map +1 -1
  234. package/dist/experiment/host/teardown.d.cts +3 -3
  235. package/dist/experiment/host/teardown.d.mts +3 -3
  236. package/dist/experiment/host/teardown.d.ts +3 -3
  237. package/dist/experiment/host/types.cjs.map +1 -1
  238. package/dist/experiment/host/types.d.cts +19 -19
  239. package/dist/experiment/host/types.d.mts +19 -19
  240. package/dist/experiment/host/types.d.ts +19 -19
  241. package/dist/index.cjs +3 -19
  242. package/dist/index.cjs.map +1 -1
  243. package/dist/index.d.cts +4 -8
  244. package/dist/index.d.mts +4 -8
  245. package/dist/index.d.ts +4 -8
  246. package/dist/index.js +12 -34
  247. package/dist/index.mjs +12 -34
  248. package/dist/inspection/assertions.cjs +1 -1
  249. package/dist/inspection/assertions.cjs.map +1 -1
  250. package/dist/inspection/cli/contribution.cjs +8 -7
  251. package/dist/inspection/cli/contribution.cjs.map +1 -1
  252. package/dist/inspection/facts.cjs +4 -4
  253. package/dist/inspection/facts.cjs.map +1 -1
  254. package/dist/inspection/index.cjs +1 -5
  255. package/dist/inspection/index.cjs.map +1 -1
  256. package/dist/inspection/index.d.cts +1 -2
  257. package/dist/inspection/index.d.mts +1 -2
  258. package/dist/inspection/index.d.ts +1 -2
  259. package/dist/inspection/index.js +20 -26
  260. package/dist/inspection/lifecycle.cjs +7 -0
  261. package/dist/inspection/lifecycle.cjs.map +1 -0
  262. package/dist/inspection/lifecycle.d.cts +4 -0
  263. package/dist/inspection/lifecycle.d.mts +4 -0
  264. package/dist/inspection/lifecycle.d.ts +4 -0
  265. package/dist/inspection/lifecycle.js +6 -0
  266. package/dist/inspection/lifecycle.js.map +1 -0
  267. package/dist/inspection/notes.cjs +40 -0
  268. package/dist/inspection/notes.cjs.map +1 -0
  269. package/dist/inspection/notes.d.cts +12 -0
  270. package/dist/inspection/notes.d.mts +12 -0
  271. package/dist/inspection/notes.d.ts +12 -0
  272. package/dist/inspection/notes.js +8 -0
  273. package/dist/inspection/notes.js.map +1 -0
  274. package/dist/inspection/overview.cjs +12 -15
  275. package/dist/inspection/overview.cjs.map +1 -1
  276. package/dist/inspection/overview.d.cts +8 -6
  277. package/dist/inspection/overview.d.mts +8 -6
  278. package/dist/inspection/overview.d.ts +8 -6
  279. package/dist/inspection/planned-attempt.cjs +45 -0
  280. package/dist/inspection/planned-attempt.cjs.map +1 -0
  281. package/dist/inspection/planned-attempt.d.cts +109 -0
  282. package/dist/inspection/planned-attempt.d.mts +109 -0
  283. package/dist/inspection/planned-attempt.d.ts +109 -0
  284. package/dist/inspection/planned-attempt.js +24 -0
  285. package/dist/inspection/planned-attempt.js.map +1 -0
  286. package/dist/inspection/project-result.cjs +5 -5
  287. package/dist/inspection/project-result.cjs.map +1 -1
  288. package/dist/inspection/project-result.d.cts +58 -57
  289. package/dist/inspection/project-result.d.mts +58 -57
  290. package/dist/inspection/project-result.d.ts +58 -57
  291. package/dist/inspection/project-result.js +4 -4
  292. package/dist/inspection/project.cjs +3 -3
  293. package/dist/inspection/project.cjs.map +1 -1
  294. package/dist/inspection/protocol-values.cjs +1 -1
  295. package/dist/inspection/protocol-values.cjs.map +1 -1
  296. package/dist/inspection/protocol-values.d.cts +1 -1
  297. package/dist/inspection/protocol-values.d.mts +1 -1
  298. package/dist/inspection/protocol-values.d.ts +1 -1
  299. package/dist/inspection/protocol.cjs +8 -8
  300. package/dist/inspection/protocol.cjs.map +1 -1
  301. package/dist/inspection/protocol.d.cts +237 -219
  302. package/dist/inspection/protocol.d.mts +237 -219
  303. package/dist/inspection/protocol.d.ts +237 -219
  304. package/dist/inspection/public.cjs +1 -5
  305. package/dist/inspection/public.cjs.map +1 -1
  306. package/dist/inspection/public.d.cts +1 -2
  307. package/dist/inspection/public.d.mts +1 -2
  308. package/dist/inspection/public.d.ts +1 -2
  309. package/dist/inspection/public.js +14 -20
  310. package/dist/inspection/public.mjs +166 -129
  311. package/dist/inspection/query.cjs +1 -1
  312. package/dist/inspection/query.cjs.map +1 -1
  313. package/dist/inspection/results.cjs +61 -52
  314. package/dist/inspection/results.cjs.map +1 -1
  315. package/dist/inspection/results.d.cts +157 -140
  316. package/dist/inspection/results.d.mts +157 -140
  317. package/dist/inspection/results.d.ts +157 -140
  318. package/dist/inspection/select.cjs +33 -28
  319. package/dist/inspection/select.cjs.map +1 -1
  320. package/dist/inspection/source.cjs +1 -1
  321. package/dist/inspection/source.cjs.map +1 -1
  322. package/dist/inspection/sources.cjs +2 -2
  323. package/dist/inspection/sources.cjs.map +1 -1
  324. package/dist/inspection/trace.cjs +9 -8
  325. package/dist/inspection/trace.cjs.map +1 -1
  326. package/dist/inspection/trace.d.cts +4 -4
  327. package/dist/inspection/trace.d.mts +4 -4
  328. package/dist/inspection/trace.d.ts +4 -4
  329. package/dist/loaders/index.cjs +7 -279
  330. package/dist/loaders/index.cjs.map +1 -1
  331. package/dist/loaders/index.d.cts +2 -95
  332. package/dist/loaders/index.d.mts +2 -95
  333. package/dist/loaders/index.d.ts +2 -95
  334. package/dist/loaders/index.js +10 -12
  335. package/dist/loaders/index.mjs +10 -12
  336. package/dist/loaders/runtime.cjs +283 -0
  337. package/dist/loaders/runtime.cjs.map +1 -0
  338. package/dist/loaders/runtime.d.cts +95 -0
  339. package/dist/loaders/runtime.d.mts +95 -0
  340. package/dist/loaders/runtime.d.ts +95 -0
  341. package/dist/loaders/runtime.js +16 -0
  342. package/dist/loaders/runtime.js.map +1 -0
  343. package/dist/migrations/judge-provider.md +6 -6
  344. package/dist/{model-slots.cjs → model-roles.cjs} +26 -7
  345. package/dist/model-roles.cjs.map +1 -0
  346. package/dist/model-roles.d.cts +26 -0
  347. package/dist/model-roles.d.mts +26 -0
  348. package/dist/model-roles.d.ts +26 -0
  349. package/dist/model-roles.js +14 -0
  350. package/dist/model-roles.js.map +1 -0
  351. package/dist/o11y/adapter-usage-projection.cjs +9 -8
  352. package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
  353. package/dist/o11y/adapter-usage-projection.d.cts +23 -15
  354. package/dist/o11y/adapter-usage-projection.d.mts +23 -15
  355. package/dist/o11y/adapter-usage-projection.d.ts +23 -15
  356. package/dist/o11y/cache-read.cjs +14 -14
  357. package/dist/o11y/cache-read.cjs.map +1 -1
  358. package/dist/o11y/cache-read.d.cts +5 -5
  359. package/dist/o11y/cache-read.d.mts +5 -5
  360. package/dist/o11y/cache-read.d.ts +5 -5
  361. package/dist/o11y/derive.cjs.map +1 -1
  362. package/dist/o11y/derive.d.cts +2 -2
  363. package/dist/o11y/derive.d.mts +2 -2
  364. package/dist/o11y/derive.d.ts +2 -2
  365. package/dist/o11y/eval-usage.cjs +9 -9
  366. package/dist/o11y/eval-usage.cjs.map +1 -1
  367. package/dist/o11y/eval-usage.d.cts +7 -7
  368. package/dist/o11y/eval-usage.d.mts +7 -7
  369. package/dist/o11y/eval-usage.d.ts +7 -7
  370. package/dist/o11y/parsers/bub.cjs +57 -81
  371. package/dist/o11y/parsers/bub.cjs.map +1 -1
  372. package/dist/o11y/parsers/index.cjs.map +1 -1
  373. package/dist/o11y/parsers/index.d.cts +2 -0
  374. package/dist/o11y/parsers/index.d.mts +2 -0
  375. package/dist/o11y/parsers/index.d.ts +2 -0
  376. package/dist/o11y/parsers/opencode.cjs +129 -217
  377. package/dist/o11y/parsers/opencode.cjs.map +1 -1
  378. package/dist/o11y/parsers/opencode.d.cts +2 -5
  379. package/dist/o11y/parsers/opencode.d.mts +2 -5
  380. package/dist/o11y/parsers/opencode.d.ts +2 -5
  381. package/dist/o11y/types.cjs.map +1 -1
  382. package/dist/o11y/types.d.cts +1 -1
  383. package/dist/o11y/types.d.mts +1 -1
  384. package/dist/o11y/types.d.ts +1 -1
  385. package/dist/plugin/contracts.cjs +170 -120
  386. package/dist/plugin/contracts.cjs.map +1 -1
  387. package/dist/plugin/contracts.d.cts +102 -90
  388. package/dist/plugin/contracts.d.mts +102 -90
  389. package/dist/plugin/contracts.d.ts +102 -90
  390. package/dist/plugin/contracts.js +16 -12
  391. package/dist/plugin/index.cjs.map +1 -1
  392. package/dist/plugin/index.d.cts +1 -1
  393. package/dist/plugin/index.d.mts +1 -1
  394. package/dist/plugin/index.d.ts +1 -1
  395. package/dist/plugin/link.cjs +69 -64
  396. package/dist/plugin/link.cjs.map +1 -1
  397. package/dist/plugin/link.d.cts +5 -3
  398. package/dist/plugin/link.d.mts +5 -3
  399. package/dist/plugin/link.d.ts +5 -3
  400. package/dist/plugin/link.js +12 -8
  401. package/dist/record/codec/seal-manifest.d.cts +3 -3
  402. package/dist/record/codec/seal-manifest.d.mts +3 -3
  403. package/dist/record/codec/seal-manifest.d.ts +3 -3
  404. package/dist/record/family/attempt-note/definition.cjs +12 -0
  405. package/dist/record/family/attempt-note/definition.cjs.map +1 -0
  406. package/dist/record/family/attempt-note/definition.d.cts +6 -0
  407. package/dist/record/family/attempt-note/definition.d.mts +6 -0
  408. package/dist/record/family/attempt-note/definition.d.ts +6 -0
  409. package/dist/record/family/attempt-note/definition.js +6 -0
  410. package/dist/record/family/attempt-note/definition.js.map +1 -0
  411. package/dist/record/family/attempt-note/persistence.cjs +10 -0
  412. package/dist/record/family/attempt-note/persistence.cjs.map +1 -0
  413. package/dist/record/family/attempt-note/persistence.d.cts +6 -0
  414. package/dist/record/family/attempt-note/persistence.d.mts +6 -0
  415. package/dist/record/family/attempt-note/persistence.d.ts +6 -0
  416. package/dist/record/family/attempt-note/persistence.js +6 -0
  417. package/dist/record/family/attempt-note/persistence.js.map +1 -0
  418. package/dist/record/family/attempt-note/schema.cjs +20 -0
  419. package/dist/record/family/attempt-note/schema.cjs.map +1 -0
  420. package/dist/record/family/attempt-note/schema.d.cts +21 -0
  421. package/dist/record/family/attempt-note/schema.d.mts +21 -0
  422. package/dist/record/family/attempt-note/schema.d.ts +21 -0
  423. package/dist/record/family/attempt-note/schema.js +10 -0
  424. package/dist/record/family/attempt-note/schema.js.map +1 -0
  425. package/dist/record/family/catalog.cjs +32 -29
  426. package/dist/record/family/catalog.cjs.map +1 -1
  427. package/dist/record/family/catalog.d.cts +7 -2
  428. package/dist/record/family/catalog.d.mts +7 -2
  429. package/dist/record/family/catalog.d.ts +7 -2
  430. package/dist/record/family/current.cjs +48 -45
  431. package/dist/record/family/current.cjs.map +1 -1
  432. package/dist/record/family/current.d.cts +15 -0
  433. package/dist/record/family/current.d.mts +15 -0
  434. package/dist/record/family/current.d.ts +15 -0
  435. package/dist/record/model/index.js +66 -64
  436. package/dist/record/model/run-context.cjs +9 -3
  437. package/dist/record/model/run-context.cjs.map +1 -1
  438. package/dist/record/model/run-context.d.cts +9 -2
  439. package/dist/record/model/run-context.d.mts +9 -2
  440. package/dist/record/model/run-context.d.ts +9 -2
  441. package/dist/record/model/run-context.js +8 -6
  442. package/dist/record/model/seal-manifest.d.cts +1 -1
  443. package/dist/record/model/seal-manifest.d.mts +1 -1
  444. package/dist/record/model/seal-manifest.d.ts +1 -1
  445. package/dist/run/cli/contribution.cjs +6 -32
  446. package/dist/run/cli/contribution.cjs.map +1 -1
  447. package/dist/run/host/runtime.cjs +1 -1
  448. package/dist/run/host/runtime.cjs.map +1 -1
  449. package/dist/run/storage/sqlite.cjs +7 -7
  450. package/dist/run/storage/sqlite.cjs.map +1 -1
  451. package/dist/runner/adapter-usage.cjs +5 -3
  452. package/dist/runner/adapter-usage.cjs.map +1 -1
  453. package/dist/runner/adapter-usage.d.cts +2 -2
  454. package/dist/runner/adapter-usage.d.mts +2 -2
  455. package/dist/runner/adapter-usage.d.ts +2 -2
  456. package/dist/runner/adoption.cjs +10 -12
  457. package/dist/runner/adoption.cjs.map +1 -1
  458. package/dist/runner/attempt-notes.cjs +8 -0
  459. package/dist/runner/attempt-notes.cjs.map +1 -0
  460. package/dist/runner/attempt-notes.d.cts +4 -0
  461. package/dist/runner/attempt-notes.d.mts +4 -0
  462. package/dist/runner/attempt-notes.d.ts +4 -0
  463. package/dist/runner/attempt-notes.js +8 -0
  464. package/dist/runner/attempt-notes.js.map +1 -0
  465. package/dist/runner/attempt.cjs +61 -73
  466. package/dist/runner/attempt.cjs.map +1 -1
  467. package/dist/runner/attempt.d.cts +3 -3
  468. package/dist/runner/attempt.d.mts +3 -3
  469. package/dist/runner/attempt.d.ts +3 -3
  470. package/dist/runner/command-plan.cjs +21 -26
  471. package/dist/runner/command-plan.cjs.map +1 -1
  472. package/dist/runner/command-plan.d.cts +4 -4
  473. package/dist/runner/command-plan.d.mts +4 -4
  474. package/dist/runner/command-plan.d.ts +4 -4
  475. package/dist/runner/command-plan.js +4 -4
  476. package/dist/runner/config-identity.cjs.map +1 -1
  477. package/dist/runner/config-identity.d.cts +2 -2
  478. package/dist/runner/config-identity.d.mts +2 -2
  479. package/dist/runner/config-identity.d.ts +2 -2
  480. package/dist/runner/discover.cjs +6 -6
  481. package/dist/runner/discover.cjs.map +1 -1
  482. package/dist/runner/eval-selection.cjs +15 -1
  483. package/dist/runner/eval-selection.cjs.map +1 -1
  484. package/dist/runner/eval-selection.d.cts +4 -0
  485. package/dist/runner/eval-selection.d.mts +4 -0
  486. package/dist/runner/eval-selection.d.ts +4 -0
  487. package/dist/runner/feedback/human.cjs +1 -1
  488. package/dist/runner/feedback/human.cjs.map +1 -1
  489. package/dist/runner/feedback/json.cjs +4 -2
  490. package/dist/runner/feedback/json.cjs.map +1 -1
  491. package/dist/runner/feedback/json.d.cts +1 -1
  492. package/dist/runner/feedback/json.d.mts +1 -1
  493. package/dist/runner/feedback/json.d.ts +1 -1
  494. package/dist/runner/feedback/sink.cjs +1 -1
  495. package/dist/runner/feedback/sink.cjs.map +1 -1
  496. package/dist/runner/feedback/sink.d.cts +1 -1
  497. package/dist/runner/feedback/sink.d.mts +1 -1
  498. package/dist/runner/feedback/sink.d.ts +1 -1
  499. package/dist/runner/fingerprint.cjs +1 -1
  500. package/dist/runner/fingerprint.cjs.map +1 -1
  501. package/dist/runner/lock.cjs +1 -3
  502. package/dist/runner/lock.cjs.map +1 -1
  503. package/dist/runner/lock.d.cts +0 -2
  504. package/dist/runner/lock.d.mts +0 -2
  505. package/dist/runner/lock.d.ts +0 -2
  506. package/dist/runner/lock.js +14 -16
  507. package/dist/runner/project-target.cjs.map +1 -1
  508. package/dist/runner/project-target.d.cts +2 -2
  509. package/dist/runner/project-target.d.mts +2 -2
  510. package/dist/runner/project-target.d.ts +2 -2
  511. package/dist/runner/record/attachments.cjs +2 -2
  512. package/dist/runner/record/attachments.cjs.map +1 -1
  513. package/dist/runner/record/planning.cjs +8 -2
  514. package/dist/runner/record/planning.cjs.map +1 -1
  515. package/dist/runner/record.cjs +2 -0
  516. package/dist/runner/record.cjs.map +1 -1
  517. package/dist/runner/report.cjs +3 -3
  518. package/dist/runner/report.cjs.map +1 -1
  519. package/dist/runner/report.d.cts +1 -1
  520. package/dist/runner/report.d.mts +1 -1
  521. package/dist/runner/report.d.ts +1 -1
  522. package/dist/runner/reuse-plan.cjs +2 -2
  523. package/dist/runner/reuse-plan.cjs.map +1 -1
  524. package/dist/runner/run.cjs +10 -45
  525. package/dist/runner/run.cjs.map +1 -1
  526. package/dist/runner/sandbox-pool.cjs +1 -2
  527. package/dist/runner/sandbox-pool.cjs.map +1 -1
  528. package/dist/runner/setup-prefix-preparation.cjs +1 -1
  529. package/dist/runner/setup-prefix-preparation.cjs.map +1 -1
  530. package/dist/runner/teardown-registry.cjs +2 -2
  531. package/dist/runner/teardown-registry.cjs.map +1 -1
  532. package/dist/runner/teardown-registry.d.cts +1 -1
  533. package/dist/runner/teardown-registry.d.mts +1 -1
  534. package/dist/runner/teardown-registry.d.ts +1 -1
  535. package/dist/runner/types.cjs +4 -4
  536. package/dist/runner/types.cjs.map +1 -1
  537. package/dist/runner/types.d.cts +64 -92
  538. package/dist/runner/types.d.mts +64 -92
  539. package/dist/runner/types.d.ts +64 -92
  540. package/dist/runner/types.js +2 -2
  541. package/dist/sandbox/action.cjs +1 -1
  542. package/dist/sandbox/action.cjs.map +1 -1
  543. package/dist/sandbox/cli/contribution.cjs +17 -14
  544. package/dist/sandbox/cli/contribution.cjs.map +1 -1
  545. package/dist/sandbox/cli/contribution.d.cts +1 -1
  546. package/dist/sandbox/cli/contribution.d.mts +1 -1
  547. package/dist/sandbox/cli/contribution.d.ts +1 -1
  548. package/dist/sandbox/commands.cjs +1 -1
  549. package/dist/sandbox/commands.cjs.map +1 -1
  550. package/dist/sandbox/commands.d.cts +1 -1
  551. package/dist/sandbox/commands.d.mts +1 -1
  552. package/dist/sandbox/commands.d.ts +1 -1
  553. package/dist/sandbox/compose.cjs +2 -2
  554. package/dist/sandbox/compose.cjs.map +1 -1
  555. package/dist/sandbox/docker-profile/registry.cjs +5 -10
  556. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  557. package/dist/sandbox/docker-profile/registry.d.cts +0 -4
  558. package/dist/sandbox/docker-profile/registry.d.mts +0 -4
  559. package/dist/sandbox/docker-profile/registry.d.ts +0 -4
  560. package/dist/sandbox/docker-profile/registry.js +6 -14
  561. package/dist/sandbox/docker-profile/runtime.cjs +1 -1
  562. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  563. package/dist/sandbox/docker-profile/schema.cjs +12 -16
  564. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  565. package/dist/sandbox/docker-profile/schema.d.cts +2 -6
  566. package/dist/sandbox/docker-profile/schema.d.mts +2 -6
  567. package/dist/sandbox/docker-profile/schema.d.ts +2 -6
  568. package/dist/sandbox/docker-profile/schema.js +24 -32
  569. package/dist/sandbox/incus.cjs +2 -2
  570. package/dist/sandbox/incus.cjs.map +1 -1
  571. package/dist/sandbox/index.cjs +4 -36
  572. package/dist/sandbox/index.cjs.map +1 -1
  573. package/dist/sandbox/index.d.cts +4 -8
  574. package/dist/sandbox/index.d.mts +4 -8
  575. package/dist/sandbox/index.d.ts +4 -8
  576. package/dist/sandbox/index.js +116 -174
  577. package/dist/sandbox/index.mjs +116 -174
  578. package/dist/sandbox/layer.cjs +3 -3
  579. package/dist/sandbox/layer.cjs.map +1 -1
  580. package/dist/sandbox/link.cjs +5 -0
  581. package/dist/sandbox/link.cjs.map +1 -1
  582. package/dist/sandbox/link.d.cts +3 -0
  583. package/dist/sandbox/link.d.mts +3 -0
  584. package/dist/sandbox/link.d.ts +3 -0
  585. package/dist/sandbox/runtime.cjs +9 -4
  586. package/dist/sandbox/runtime.cjs.map +1 -1
  587. package/dist/shared/failure-class.cjs +5 -5
  588. package/dist/shared/failure-class.cjs.map +1 -1
  589. package/dist/shared/failure-class.d.cts +4 -10
  590. package/dist/shared/failure-class.d.mts +4 -10
  591. package/dist/shared/failure-class.d.ts +4 -10
  592. package/dist/shared/types.cjs.map +1 -1
  593. package/dist/shared/types.d.cts +1 -1
  594. package/dist/shared/types.d.mts +1 -1
  595. package/dist/shared/types.d.ts +1 -1
  596. package/dist/show/contribution.cjs +17 -2
  597. package/dist/show/contribution.cjs.map +1 -1
  598. package/dist/show/contribution.d.cts +14 -0
  599. package/dist/show/contribution.d.mts +14 -0
  600. package/dist/show/contribution.d.ts +14 -0
  601. package/dist/show/model.cjs +8 -5
  602. package/dist/show/model.cjs.map +1 -1
  603. package/dist/show/model.d.cts +11 -8
  604. package/dist/show/model.d.mts +11 -8
  605. package/dist/show/model.d.ts +11 -8
  606. package/dist/show/render.cjs +34 -22
  607. package/dist/show/render.cjs.map +1 -1
  608. package/dist/sources/projector.cjs +1 -1
  609. package/dist/sources/projector.cjs.map +1 -1
  610. package/dist/types.cjs +1 -1
  611. package/dist/types.cjs.map +1 -1
  612. package/dist/types.d.cts +1 -1
  613. package/dist/types.d.mts +1 -1
  614. package/dist/types.d.ts +1 -1
  615. package/dist/types.js +2 -2
  616. package/dist/view/app-dist/.vite/manifest.json +2 -2
  617. package/dist/view/app-dist/assets/{index-B3ijZRph.js → index-CxrOUvHC.js} +17 -17
  618. package/dist/view/app-dist/assets/{quality-cost-scatter-B--DfJ9s.js → quality-cost-scatter-B6Aiss7x.js} +1 -1
  619. package/dist/view/app-dist/index.html +1 -1
  620. package/dist/view/cli/contribution.cjs +1 -1
  621. package/dist/view/cli/contribution.cjs.map +1 -1
  622. package/dist/view/function-runtime.mjs +318 -121
  623. package/dist/view/http-protocol.d.cts +1 -1
  624. package/dist/view/http-protocol.d.mts +1 -1
  625. package/dist/view/http-protocol.d.ts +1 -1
  626. package/dist/view/inspection-host.cjs +2 -2
  627. package/dist/view/inspection-host.cjs.map +1 -1
  628. package/dist/view/inspection-host.d.cts +349 -331
  629. package/dist/view/inspection-host.d.mts +349 -331
  630. package/dist/view/inspection-host.d.ts +349 -331
  631. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +9 -9
  632. package/docs-site/zh/examples/integrations/claude-sdk.mdx +8 -8
  633. package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
  634. package/docs-site/zh/examples/integrations/langgraph.mdx +6 -6
  635. package/docs-site/zh/examples/integrations/pi-sdk.mdx +8 -8
  636. package/docs-site/zh/explanation/adapter.mdx +6 -6
  637. package/docs-site/zh/explanation/assert.mdx +7 -7
  638. package/docs-site/zh/explanation/drive.mdx +4 -4
  639. package/docs-site/zh/explanation/hitl.mdx +2 -2
  640. package/docs-site/zh/explanation/judge.mdx +3 -3
  641. package/docs-site/zh/index.mdx +18 -0
  642. package/docs-site/zh/introduction.mdx +4 -3
  643. package/docs-site/zh/reference/builtin-agents.mdx +46 -49
  644. package/docs-site/zh/reference/cli.mdx +16 -14
  645. package/docs-site/zh/reference/define-agent.mdx +19 -19
  646. package/docs-site/zh/reference/define-config.mdx +7 -15
  647. package/docs-site/zh/reference/define-eval.mdx +20 -14
  648. package/docs-site/zh/reference/define-experiment.mdx +18 -39
  649. package/docs-site/zh/reference/events.mdx +1 -1
  650. package/docs-site/zh/reference/expect.mdx +21 -0
  651. package/docs-site/zh/reference/official-adapters.mdx +12 -5
  652. package/docs-site/zh/troubleshooting/debugging.mdx +2 -2
  653. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +1 -1
  654. package/docs-site/zh/tutorials/agent-onboarding.mdx +2 -2
  655. package/docs-site/zh/tutorials/authoring.mdx +4 -3
  656. package/docs-site/zh/tutorials/compare-runs.mdx +1 -1
  657. package/docs-site/zh/tutorials/concurrency.mdx +8 -8
  658. package/docs-site/zh/tutorials/configuration.mdx +5 -5
  659. package/docs-site/zh/tutorials/control-run-cost.mdx +49 -9
  660. package/docs-site/zh/tutorials/eval-groups.mdx +1 -1
  661. package/docs-site/zh/tutorials/evaluation-kinds.mdx +5 -5
  662. package/docs-site/zh/tutorials/experiment-services.mdx +32 -32
  663. package/docs-site/zh/tutorials/handle-execution-failures.mdx +2 -28
  664. package/docs-site/zh/tutorials/plugins.mdx +49 -143
  665. package/docs-site/zh/tutorials/sandbox-agent.mdx +1 -1
  666. package/docs-site/zh/tutorials/sandbox-reuse.mdx +7 -7
  667. package/docs-site/zh/tutorials/upgrade-0-18.mdx +64 -0
  668. package/docs-site/zh/tutorials/upgrade-0-19.mdx +121 -0
  669. package/docs-site/zh/tutorials/upgrade-0-20.mdx +12 -0
  670. package/docs-site/zh/tutorials/verify-judge.mdx +4 -3
  671. package/docs-site/zh/tutorials/viewing-results.mdx +2 -2
  672. package/docs-site/zh/tutorials/write-experiment.mdx +1 -1
  673. package/docs-site/zh/tutorials/write-send.mdx +13 -13
  674. package/package.json +1 -1
  675. package/dist/agents/effect-runtime.cjs.map +0 -1
  676. package/dist/agents/effect-runtime.d.cts +0 -29
  677. package/dist/agents/effect-runtime.d.mts +0 -29
  678. package/dist/agents/effect-runtime.d.ts +0 -29
  679. package/dist/agents/effect-runtime.js +0 -16
  680. package/dist/agents/effect-runtime.js.map +0 -1
  681. package/dist/agents/session-slot.cjs.map +0 -1
  682. package/dist/agents/session-slot.d.cts +0 -12
  683. package/dist/agents/session-slot.d.mts +0 -12
  684. package/dist/agents/session-slot.d.ts +0 -12
  685. package/dist/agents/session-slot.js +0 -6
  686. package/dist/agents/session-slot.js.map +0 -1
  687. package/dist/model-slots.cjs.map +0 -1
  688. package/dist/model-slots.d.cts +0 -19
  689. package/dist/model-slots.d.mts +0 -19
  690. package/dist/model-slots.d.ts +0 -19
  691. package/dist/model-slots.js +0 -8
  692. package/dist/model-slots.js.map +0 -1
@@ -106,7 +106,7 @@ export default defineExperiment({
106
106
  | `codex` | `CODEX_API_KEY` |
107
107
  | `bub` | `BUB_API_KEY`、`BUB_API_BASE` |
108
108
 
109
- 这些是各 Agent 官方的变量名。CI 里只保存一组共享凭据时,在 Experiment 里用 `apiKey`、`baseUrl` 或 `apiBase` 显式传入。这不会改变 Adapter 默认读取的变量名。
109
+ 这些是各 Agent 官方的变量名。CI 里只保存一组共享凭据时,在 Experiment 里用 `apiKey`、`baseUrl` 显式传入。这不会改变 Adapter 默认读取的变量名。
110
110
 
111
111
  ## 一个 Attempt 依次做什么
112
112
 
@@ -79,7 +79,7 @@ export default defineExperiment({
79
79
  });
80
80
  ```
81
81
 
82
- NiceEval 在 Experiment `setup` 和创建 Sandbox 之前取得这个 key 的租约,等 Sandbox 清理、Provider 收尾和 Experiment `teardown` 全部完成后才释放。另一个终端里用同一个 key 的运行会排队等待,不会提前创建 Sandbox。拿到租约后,它照自己的计划继续跑,不读取或沿用对方的结果。
82
+ NiceEval 在 Experiment `before` 和创建 Sandbox 之前取得这个 key 的租约,等 Sandbox 清理、Provider 收尾和 Experiment `after` 全部完成后才释放。另一个终端里用同一个 key 的运行会排队等待,不会提前创建 Sandbox。拿到租约后,它照自己的计划继续跑,不读取或沿用对方的结果。
83
83
 
84
84
  key 也是结果配置的一部分。换一个 key 就是换一份状态,旧结果不会混进来。租约只保护外部 checkpoint,和结果文件无关;不用 `sharedState` 的运行照样可以并发写入结果。不同机器或不同 working copy 之间仍需要外部分布式锁。
85
85
 
@@ -89,12 +89,12 @@ key 也是结果配置的一部分。换一个 key 就是换一份状态,旧
89
89
  |---|---|
90
90
  | Sandbox 创建 / 停止 | 每个 Sandbox 一次 |
91
91
  | Sandbox `.before()` / `.after()` 准备步骤与已登记的清理 | 每个真正要跑的 Attempt 一次 |
92
- | Agent 级 `setup` / `teardown` | 每个 Attempt 一次 |
93
- | 评估用例的 `setup` / `teardown`、`test(t)` | 每个 Attempt 一次 |
92
+ | Agent 级 `before` / `after` | 每个 Attempt 一次 |
93
+ | 评估用例的 `before` / `after`、`test(t)` | 每个 Attempt 一次 |
94
94
 
95
95
  <SandboxLanes />
96
96
 
97
- 每个 Attempt 结束后,NiceEval 对 `workdir` 执行 `git reset --hard` 和 `git clean`,恢复到起始状态,再开始下一个。这一步只管 `workdir`,`/opt`、`$HOME`、`/tmp`、全局安装、包缓存和后台进程都不会消失。它们要么由评估用例的 `teardown` 自己清理,要么是你有意留给下一道题用的状态。
97
+ 每个 Attempt 结束后,NiceEval 对 `workdir` 执行 `git reset --hard` 和 `git clean`,恢复到起始状态,再开始下一个。这一步只管 `workdir`,`/opt`、`$HOME`、`/tmp`、全局安装、包缓存和后台进程都不会消失。它们要么由评估用例的 `after` 自己清理,要么是你有意留给下一道题用的状态。
98
98
 
99
99
  大型的持久构建产物或缓存不能放任增长。给它定一个容量上限和提前告警的阈值:正常的大小和命中情况用 `facts` 记录,接近风险阈值时用 `diagnostic` 告警,同时准备好清理、轮换或换掉这台 Sandbox 的办法。
100
100
 
@@ -102,8 +102,8 @@ key 也是结果配置的一部分。换一个 key 就是换一份状态,旧
102
102
 
103
103
  - **所有实验都要的重依赖**(Agent CLI、语言运行时):烘进 Provider 的 image / template / snapshot,或写成最低频的 `.before()` 准备步骤。
104
104
  - **整批评估共用的准备**(装工具链、clone 公共仓库、预热构建缓存):写成低频的 `.before()` 准备步骤。在 Docker 上,没变的准备步骤下次运行可以直接沿用。这些步骤仍然每个 Attempt 都要经过一次,你不能要求它在整台 Sandbox 上只跑一次。
105
- - **只有这道题要的素材**(它自己的仓库、数据、依赖):放进评估用例自己的 `setup` 或 `test(t)`。每道题重置后都会再跑一遍,所以必须是重复执行也正确的代码。
106
- - **起了后台进程、占了端口**:由评估用例的 `teardown` 自己清理,重置 `workdir` 不会杀进程。
105
+ - **只有这道题要的素材**(它自己的仓库、数据、依赖):放进评估用例自己的 `before` 或 `test(t)`。每道题重置后都会再跑一遍,所以必须是重复执行也正确的代码。
106
+ - **起了后台进程、占了端口**:由评估用例的 `after` 自己清理,重置 `workdir` 不会杀进程。
107
107
 
108
108
  每道题各自 clone 仓库时,整个 Experiment 用同一个固定名字的临时目录,例如 `.niceeval-task-clone`,并把它加进 `diff.ignore`。clone 前只运行 `rm -rf .niceeval-task-clone`,清掉上一道题的残留。绝不要删除 `workdir` 根目录的 `.git`:题间重置依赖它,而且它会一直留着。
109
109
 
@@ -131,7 +131,7 @@ npm install # 按 package.json/lockfile 装齐,本身就可以重复
131
131
 
132
132
  两件事仍归你:
133
133
 
134
- - **`postSetup` 脚本必须可以重复执行**。它每个 Attempt 都会在留下来的 `$HOME` 上再跑一遍。往全局配置登记 hook 的脚本,跑多少遍都要得到同一份配置。开复用前,先拿两三道题在一条 Sandbox 泳道上跑一轮,从第二道题开始才能看出问题。
134
+ - **`before` 脚本必须可以重复执行**。它每个 Attempt 都会在留下来的 `$HOME` 上再跑一遍。往全局配置登记 hook 的脚本,跑多少遍都要得到同一份配置。开复用前,先拿两三道题在一条 Sandbox 泳道上跑一轮,从第二道题开始才能看出问题。
135
135
  - **插件数据放在哪**。插件安装目录每个 Attempt 都会被重装覆盖。要留到下一道题的数据,只能写在安装目录之外。留下的数据会不会影响下一道题,是你的实验设计要回答的问题。
136
136
 
137
137
  重新安装不省钱:插件安装每个 Attempt 都要付一次。复用省下的是 Sandbox 创建;没变的 `.before()` 准备步骤在 Docker 上还能沿用。marketplace 拉取太慢时,用 `sparse` 只拉插件路径,或者把插件烘进 template,并从 `plugins` 里去掉声明。代价是安装清单里不再记录插件和它解析到的版本。
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: "升级到 0.18"
3
+ description: "共享模型用途、原生数值材料与公开入口调整"
4
+ ---
5
+
6
+ 0.18 保留 0.17 的 `t.usage.cacheRead.rate()` 与按用途查询方式,并增加可复用的用途类型声明。
7
+ 在评估项目中升级依赖:
8
+
9
+ ```sh
10
+ pnpm add niceeval@^0.18.0
11
+ ```
12
+
13
+ ## 共享模型用途
14
+
15
+ 用 `defineModelRoles` 提取声明,实验的 `models` 与 Adapter 绑定评估的 `requires.models` 引用它。
16
+ 给 `defineAdapter` 同样添加 `requires.models` 后,`ctx.models` 与 `ctx.recordUsage` 的用途键也会被收窄。
17
+ 完整示例见[按用途检查缓存读取率](/zh/tutorials/control-run-cost#让模型用途名称参与类型检查)。
18
+
19
+ 0.18 继续接受省略 `requires` 的 0.17 写法,按调用时校验名称。
20
+ 根入口的 `defineEval`、`defineScoreEval` 属于 Agent 路径;共享声明只扩展 Adapter 绑定工厂。
21
+ 用途要求不会绑定具体实验或固定模型值。
22
+
23
+ ## 调整重复的导入入口
24
+
25
+ | 原来的入口 | 0.18 写法 |
26
+ | --- | --- |
27
+ | 根入口的 `defineJudge`、`defineScoreMatch`、`defineMaterialMatch`、`defineContextMatch` | 从 `niceeval/expect` 导入 |
28
+ | 根入口的 `factuality`、`faithfulness`、`instructionFollowing`、`pairwisePreference` | 从 `niceeval/expect` 导入 |
29
+ | 根入口的 `readScoreMatchAudit` | 从 `niceeval/inspection` 导入 |
30
+ | `niceeval/sandbox` 的 `resolveDockerProfileAlias` | 使用同入口的 `resolveDockerProfile` |
31
+ | 根入口的 `requireEnv`、`getEnv`、`stripComments` | 取消公开导出,由项目自行提供需要的工具 |
32
+
33
+ 例如,自定义评分判据改为:
34
+
35
+ ```ts
36
+ import { defineScoreEval } from "niceeval";
37
+ import { defineScoreMatch } from "niceeval/expect";
38
+ ```
39
+
40
+ 判据的执行语义不变,原有根类型导出与错误类保留。
41
+ 环境工具原先将空字符串当作缺失;改用 `process.env` 时请明确保留还是改变这一行为。
42
+ 文本 matcher 的 `stripComments` 选项仍可使用,不受同名通用函数移除影响。
43
+
44
+ ## 替换项目数值工具
45
+
46
+ ```ts
47
+ import { atMost, isTrue, measured, quantile } from "niceeval/expect";
48
+
49
+ // value 为 null 时保留原因,不会把缺失转换成 0。
50
+ t.check(measured(durationMs, { unavailable: "record-incomplete" }), atMost(3000)).gate();
51
+
52
+ // 默认 linear;也可显式选择 nearest-rank。
53
+ t.check(quantile(intervalsMs, 0.5), atMost(1200)).gate();
54
+ t.check(quantile(intervalsMs, 0.9, { method: "nearest-rank" }), atMost(3000)).gate();
55
+
56
+ // fraction 直接作为评分材料;无样本继续显示不可判定。
57
+ t.score(measured(successRate, { unavailable: "no-samples" }), { weight: 1 });
58
+ t.check(completed, isTrue()).gate();
59
+ ```
60
+
61
+ `quantile` 返回值的 `statistics` 包含 `sampleCount`、`probability` 与 `method`。
62
+ 空集合返回 `no-samples`,非有限样本返回 `non-finite-sample`;非法概率或算法参数直接报错。
63
+ `measured` 对非有限数值返回 `non-finite-number`。
64
+ `fraction` 必须位于 `[0, 1]`,`t.score` 不会替作者截断越界值。
@@ -0,0 +1,121 @@
1
+ ---
2
+ title: "升级到 0.19"
3
+ description: "替换模型用途名称,迁移撤销的作者配置。"
4
+ ---
5
+
6
+ 模型用途统一称为 **role**,请一起替换以下名称:
7
+
8
+ | 旧名 | 0.19 |
9
+ | --- | --- |
10
+ | `defineModelSlots` | `defineModelRoles` |
11
+ | `ModelSlotSelection` | `ModelRoleSelection` |
12
+ | `recordUsage({ modelSlot })` | `recordUsage({ modelRole })` |
13
+ | `cacheRead.modelSlots` | `cacheRead.roles` |
14
+ | 分组字段 `modelSlot` | 分组字段 `modelRole` |
15
+ | `slot-has-no-calls` | `role-has-no-calls` |
16
+
17
+ `models`、`requires.models`、`ctx.models` 和 `t.usage.cacheRead.rate(role?)` 的行为不变。消费 `show --json`、Query 与 View 数据的代码也要同步替换字段。旧 API 名称不保留转发别名。
18
+
19
+ ## 替换撤销字段
20
+
21
+ | 撤销项 | 替代方式 |
22
+ | --- | --- |
23
+ | `Config.workspace` | 从项目目录运行 |
24
+ | `Eval.reporters` | `Config.reporters` |
25
+ | `Experiment.classifyFailure` | 内建分类、`ExperimentFatalError` 或 `EvalFatalError` |
26
+ | `run show <run-id>` | `show --run <run-id>` |
27
+
28
+ 撤销字段在定义加载时立即报错,显式写成 `undefined` 也会被拒绝。Codex 与 Claude Code 原生插件仍属于 Adapter 配置。Config reporters、Eval 的 `diff` 与 `metadata`、构建与准备并发控制,以及 Agent/Adapter 实现继续保留。
29
+
30
+ 已有结果保持可读。持久化用量和 config identity 编码不变,不使用撤销字段的实验可以继续 carry 已有结果。
31
+
32
+ ## Experiment 使用 adapter
33
+
34
+ 将 `defineExperiment({ agent: target })` 改为 `defineExperiment({ adapter: target })`。
35
+ `defineAgent` 与 `defineSandboxAgent` 的返回值可直接用作 `adapter`,无需包装。
36
+ 定义中仍出现 `agent` 时会报错,显式写成 `undefined` 也会被拒绝。
37
+
38
+ 单模型的 `model` / `reasoningEffort` 简写保留,归一为 `default` role;多用途配置继续使用 `models`。
39
+ 两种写法不能混用。仅将 `agent` 改成 `adapter` 不改变配置身份,已有结果可以继续 carry。
40
+
41
+ ## t.note
42
+
43
+ 用 `t.note(label, value)` 保存只供审阅的数据,不增加 Assertion,也不影响 Verdict、score 或 coverage。
44
+ 值可以是 JSON 或带单位的 Quantity;`null` 显示为 unavailable。
45
+
46
+ ```ts
47
+ import { ms } from "niceeval/expect";
48
+
49
+ t.note("出手频率", result.activity);
50
+ t.note("首个决策延迟", ms(result.firstDecisionMs));
51
+ ```
52
+
53
+ 同一 Attempt 的 label 必须唯一,最多 64 项,每项 JSON 不超过 64 KiB;违规时抛出 `TypeError`。
54
+ `show @<locator>` 与 View 在 Assertions 后显示 Notes,JSON 与 Query 的 Attempt 结果新增 `notes`。
55
+ `show --exp <experiment-id>` 按 label 和单位聚合数值 Note,列出 count、min、median、p90、max。
56
+ 历史结果没有 Note 时返回空列表。
57
+
58
+ ## 数值单位
59
+
60
+ 在把数值交给 NiceEval 的边界,使用 `niceeval/expect` 的 `ms`、`seconds`、`tokens`、`usd`、`ratio`、`count` 或 `bytes` 包装。构造函数返回冻结的 `Quantity`,通过 `.value` 和 `.unit` 读取;先做数值运算,再包装单位。非有限输入抛出 `RangeError`,`ratio` 还会拒绝 `[0, 1]` 以外的数值。
61
+
62
+ ```ts
63
+ import { atLeast, atMost, measured, ms, ratio } from "niceeval/expect";
64
+
65
+ const latency = measured(ms(512), { unavailable: "没有延迟观测" });
66
+ t.check(latency, atMost(ms(600)));
67
+ t.check(t.usage.cacheRead.rate(), atLeast(ratio(0.6)));
68
+ ```
69
+
70
+ `measured` 和 `quantile` 保留单位。`atLeast`、`atMost`、`greaterThan`、`lessThan` 与包含两端的 `between` 要求材料和阈值使用相同单位;跨单位或未包装的阈值不能通过类型检查。绕过类型时,不兼容比较形成 unavailable。`cacheRead.rate()` 现在要求 `ratio(...)` 阈值。无单位材料继续使用普通 number 阈值,旧 Record 未提供单位时仍视为无单位。Show 与 View 按 `512 ms`、`61.2%`、`$0.031` 等形式显示。
71
+
72
+ ## Planned attempt
73
+
74
+ Run 的计划执行位置现在称为 Planned attempt;已发布的执行事实仍称为 Attempt。
75
+ `query` 使用 `niceeval.query/v2`,`/inspection` decoder 不再接受 v1。
76
+ 将 `slotId`、`expectedSlots` 和 `originSlotId` 分别替换为 `plannedAttemptId`、`plannedAttempts` 和 `originPlannedAttemptId`。
77
+ Run 和当前结果的 `slots` 集合改为 `plannedAttempts`。Show 完整度统计显示 Planned / Recorded / Missing attempts。
78
+ 已有 Record 无需重写;持久字段在查询投影边界转换。
79
+
80
+ Adapter 的 `createSessionSlot` / `SessionSlot` 改为 `createSessionKey` / `SessionKey`;
81
+ 并发等待文案改为 `waiting for capacity`。
82
+
83
+ ## 命名收敛
84
+
85
+ 旧名字不再提供别名;定义和 CLI 解析会提示替代名字。
86
+
87
+ | 0.18 | 0.19 |
88
+ | --- | --- |
89
+ | `maxSetupPrefixConcurrency`、`--max-setup-prefix-concurrency` | `maxBeforeCacheConcurrency`、`--max-before-cache-concurrency` |
90
+ | `sandboxCache.setup`、`SandboxSetupCache`、`--sandbox-setup-cache` | `sandboxCache.before`、`SandboxBeforeCache`、`--sandbox-before-cache` |
91
+ | summary `setupPrefixes`、debug `setupPrefixPlan` | `beforeCaches`、`beforeCachePlan` |
92
+ | `bubAgent({ apiBase })` | `bubAgent({ baseUrl })` |
93
+ | `t.o11y`、`O11ySummary` | `t.observability`、`ObservabilitySummary` |
94
+ | `turn.message` | `turn.reply` |
95
+ | `Experiment.judgeRuntime`、`Config.judgeRuntime` | `Experiment.judge`、`Config.judgeProvider` |
96
+ | `niceeval session list/show` | `niceeval invocation list/show` |
97
+ | `niceeval sandbox --record` | `niceeval sandbox --record-root` |
98
+
99
+ 准备缓存现在称为 before cache,身份类型称为 `BeforeCacheKey`。timing 和 diagnostic 的生命周期名称使用 `*.before`、`*.after`。缓存目录、缓存键与 Record 编码保持原样,读取时映射名称,已有缓存与结果无需重写。
100
+
101
+ Docker profile 解码和定义只保留 `decodeDockerExecutionProfile`、`defineDockerExecutionProfile`。
102
+ 索引和查找只保留 `indexDockerProfiles`、`resolveDockerProfile`。
103
+ 版本常量只保留 `DOCKER_EXECUTION_PROFILE_SCHEMA_VERSION`。删除这些实现的其它别名。
104
+
105
+ `/sandbox` 不再导出身份计算、Compose 编译、内部构建调度、capture normalization 与 profile 策略常量。
106
+ `/loaders` 不再导出 `captureLoadedFiles`。
107
+ `/inspection` 不再导出 `canonicalInspectionJson`、`canonicalJsonValue`、`closeInspectionJson`。
108
+ 这些内部能力没有替代作者 API。
109
+
110
+ ## Plugin
111
+
112
+ `definePlugin({ name, identity, ... })` 直接返回实例;`definePlugin((options) => ({ name, identity, ... }))` 返回单参数工厂。
113
+ 用 `plugins: [condition]` 和数组展开组合。用 `key` 区分同名实例,把行为版本写进 `identity`。
114
+ 生命周期字段改成 `experiment`、`group`、`attempt`、`sandbox`,各自接受 `{ before, after }`;`agent` 提供内建 Agent 扩展。
115
+ 详见 [Plugin](/zh/tutorials/plugins)。
116
+
117
+ ## 生命周期 before / after
118
+
119
+ Experiment、`defineAgent` 与 `defineSandboxAgent` 使用 `before` / `after`。内建 Agent factory 也使用这两个字段。
120
+ CLI 的手动收尾改用 `exp <selector> --after`;`experimentHost.after()`、`hasBefore`、`hasAfter` 与 `after-required` 使用同一命名。
121
+ 安装报告使用 `AgentInstallationManifest`、`reportInstallation` 与 `agentInstallation`;附件文件名保持不变。
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: "升级到 0.20"
3
+ description: "更新配置与固定版本协议。"
4
+ ---
5
+
6
+ ## Bub 与 OpenCode 固定协议
7
+
8
+ `bubAgent({ version })` 只接受 `"0.5.1"`。删除旧版本设置,或改用该固定版本;自定义 `otelPlugin` 需要支持对应 tape 协议。
9
+ Bub 的旧顶层 `type` 事件和 OpenCode 的字段 fallback 不再解析为行为证据。OpenCode 的协议基线为 `1.18.5`。
10
+
11
+ 未知事件汇总为每条 Attempt 的一条 `agent-event-unrecognized` warning。运行 `niceeval show @locator` 查看类型与次数,并核对实际 CLI 版本。
12
+ 已落盘的标准事件不需要迁移。
@@ -17,7 +17,7 @@ import { defineConfig } from "niceeval";
17
17
  import { OpenAIProvider } from "niceeval/judge";
18
18
 
19
19
  export default defineConfig({
20
- judgeRuntime: OpenAIProvider({
20
+ judgeProvider: OpenAIProvider({
21
21
  model: "judge-model",
22
22
  baseUrl: "https://gateway.example.com/v1",
23
23
  apiKeyEnv: "JUDGE_GATEWAY_KEY",
@@ -68,7 +68,8 @@ export default defineEval({
68
68
 
69
69
  ```ts
70
70
  import { readFile } from "node:fs/promises";
71
- import { defineEval, defineJudge } from "niceeval";
71
+ import { defineEval } from "niceeval";
72
+ import { defineJudge } from "niceeval/expect";
72
73
  import { judgeImage } from "niceeval/judge";
73
74
 
74
75
  const actionQuality = defineJudge({
@@ -119,7 +120,7 @@ pnpm exec niceeval show @<attempt-locator>
119
120
 
120
121
  | 看到的结果 | 原因 | 先查什么 |
121
122
  |---|---|---|
122
- | `unavailable`,原因 `judge-provider-unresolved` | 没有配置 Provider,没有发请求 | `niceeval.config.ts` 的 `judgeRuntime` |
123
+ | `unavailable`,原因 `judge-provider-unresolved` | 没有配置 Provider,没有发请求 | `niceeval.config.ts` 的 `judgeProvider` |
123
124
  | `unavailable`,原因 `judge-key-unresolved` | 读不到 key,没有发请求 | `apiKeyEnv` 写的变量名是否已设置 |
124
125
  | `unavailable` | 请求发不出去或超时 | 网络、`baseUrl`、`timeoutMs` |
125
126
  | `errored` | 端点返回 HTTP 400、协议不兼容,或返回内容不符合要求的格式 | `baseUrl` 是否指向兼容网关、`model` 名是否正确 |
@@ -154,7 +154,7 @@ pnpm exec niceeval view --run <run-id>
154
154
  ```sh
155
155
  pnpm --silent exec niceeval query run --request - <<'JSON'
156
156
  {
157
- "protocol": "niceeval.query/v1",
157
+ "protocol": "niceeval.query/v2",
158
158
  "operation": { "kind": "attempt.get", "locator": "@1K1P0VJAPVJ12" }
159
159
  }
160
160
  JSON
@@ -165,7 +165,7 @@ JSON
165
165
  ```sh
166
166
  pnpm --silent exec niceeval query run --request - <<'JSON'
167
167
  {
168
- "protocol": "niceeval.query/v1",
168
+ "protocol": "niceeval.query/v2",
169
169
  "operation": {
170
170
  "kind": "attempt.assertion.detail",
171
171
  "locator": "@1K1P0VJAPVJ12",
@@ -211,7 +211,7 @@ export default defineExperiment({
211
211
  });
212
212
  ```
213
213
 
214
- Adapter 从 `ctx.models` 读取这份配置交给应用,每次请求模型时在 `ctx.recordUsage` 里写上对应的 `modelSlot`。这样用量和费用能按用途分开统计;没被调用的角色不会产生费用。
214
+ Adapter 从 `ctx.models` 读取这份配置交给应用,每次请求模型时在 `ctx.recordUsage` 里写上对应的 `modelRole`。这样用量和费用能按用途分开统计;没被调用的角色不会产生费用。
215
215
 
216
216
  `models` 不能和 `model`、`reasoningEffort` 同时写。Agent 类的 Adapter 只用单个 `model`。
217
217
 
@@ -89,25 +89,25 @@ if (!res.requestId) {
89
89
 
90
90
  怎么续接取决于应用接口:
91
91
 
92
- - **客户端每轮发完整历史**(服务端不记状态,Chat Completions 形是典型):用 `createSessionSlot<TMsg[]>()` 声明一份 Adapter 私有的会话状态,再用 `ctx.session.get(...)` / `ctx.session.set(...)` 存取历史消息。
92
+ - **客户端每轮发完整历史**(服务端不记状态,Chat Completions 形是典型):用 `createSessionKey<TMsg[]>()` 声明一份 Adapter 私有的会话状态,再用 `ctx.session.get(...)` / `ctx.session.set(...)` 存取历史消息。
93
93
  - **服务端记历史**(接口收一个会话 id,例如 Responses 形的 `previous_response_id`、各 SDK 的原生 session / thread):用 `ctx.session.id` 读取,用 `ctx.session.capture(id)` 写回。
94
94
 
95
95
  本教程的接口是前一种:
96
96
 
97
97
  ```ts
98
98
  // agents/chat-app.ts
99
- import { completeEvidenceCoverage, createSessionSlot, defineAgent } from "niceeval/adapter";
99
+ import { completeEvidenceCoverage, createSessionKey, defineAgent } from "niceeval/adapter";
100
100
 
101
101
  const BASE_URL = "http://localhost:8080";
102
102
 
103
103
  interface Msg { role: "user" | "assistant"; content: string | null }
104
- const historySlot = createSessionSlot<Msg[]>("chat-app/history");
104
+ const historyKey = createSessionKey<Msg[]>("chat-app/history");
105
105
 
106
106
  export default defineAgent({
107
107
  name: "chat-app",
108
108
  evidenceCoverage: completeEvidenceCoverage,
109
109
  async send(input, ctx) {
110
- const history = ctx.session.get(historySlot) ?? []; // ← 新会话线上还没有历史
110
+ const history = ctx.session.get(historyKey) ?? []; // ← 新会话线上还没有历史
111
111
  const messages = [...history, { role: "user" as const, content: input.text }];
112
112
 
113
113
  const res = await fetch(`${BASE_URL}/v1/chat/completions`, {
@@ -116,7 +116,7 @@ export default defineAgent({
116
116
  }).then((r) => r.json());
117
117
 
118
118
  const reply = res.choices[0].message;
119
- ctx.session.set(historySlot, [...messages, reply]); // ← 写回。同一条线的下一轮 get() 自动带上
119
+ ctx.session.set(historyKey, [...messages, reply]); // ← 写回。同一条线的下一轮 get() 自动带上
120
120
 
121
121
  return {
122
122
  status: "completed",
@@ -126,7 +126,7 @@ export default defineAgent({
126
126
  });
127
127
  ```
128
128
 
129
- 这里不需要“第一轮”分支。新会话线上 `ctx.session.get(historySlot)` 返回 `undefined`,`?? []` 把它变成空历史,第一轮自然就是空历史加一条新消息。也不需要在 `defineAgent` 上声明额外能力:用了 `ctx.session`,多轮就能续上;不用,每轮各是一场新对话。
129
+ 这里不需要“第一轮”分支。新会话线上 `ctx.session.get(historyKey)` 返回 `undefined`,`?? []` 把它变成空历史,第一轮自然就是空历史加一条新消息。也不需要在 `defineAgent` 上声明额外能力:用了 `ctx.session`,多轮就能续上;不用,每轮各是一场新对话。
130
130
 
131
131
  应用接口收会话 id 时,历史留在服务端,Adapter 只记住 id。`send` 里只改两处:
132
132
 
@@ -240,7 +240,7 @@ type StreamEvent =
240
240
 
241
241
  | 你返回的事件 | 能写的断言 |
242
242
  |---|---|
243
- | `message` | `t.reply`、`t.check(turn.message, includes(...))` / `pattern(...)`、Judge 的对话材料 |
243
+ | `message` | `t.reply`、`t.check(turn.reply, includes(...))` / `pattern(...)`、Judge 的对话材料 |
244
244
  | tool `operation.started` / `operation.finished`(靠 `operationId` 配对) | `turn.calledTool()` / `turn.toolOrder()` / `turn.maxToolCalls()` / `turn.noFailedActions()`… |
245
245
  | `input.requested`(配合 status `"waiting"`) | `t.check(turn.status, equals("waiting"))`、`t.requireInputRequest()`、`t.respond()`(第五步) |
246
246
  | `thinking` / `compaction` / `error` | 报告与诊断;也可把原始 `events` 交给普通 `check(events, match)` |
@@ -256,20 +256,20 @@ Chat Completions 响应**不保证列出全过程**。应用可能在服务端
256
256
  - **等待的那一轮**:返回 `status: "waiting"`,并为每个待回答的问题返回一条带稳定 `id` 的 `input.requested` 事件。`t.check(turn.status, equals("waiting"))` 和 `t.requireInputRequest()` 读的就是它,回答也靠这个 `id` 对上问题。
257
257
  - **回答的那一轮**:评估用例里的 `t.respond(...)` 到 Adapter 这边是**又一次普通的 `send`**,还在同一条会话线上,拿到同一份状态。回答随 `input.responses` 到达,每条带 `requestId`,以及 `optionId` 或 `text`(形态见[不同回答的入参](/zh/explanation/adapter#不同回答的入参))。Adapter 先把回答交给应用,再接着取结果。被拒绝的工具调用,`operation.finished` 的 `status` 写 `"rejected"`,不写 `"failed"`。拒绝是人的决定,不是工具故障,`noFailedActions()` 不会把它算成失败。
258
258
 
259
- 等待时还没读完的东西,例如一条读到一半的 SSE 流,也存在 `ctx.session` 上。Adapter 用 `createSessionSlot<Pending>()` 声明一份私有状态,等待时 `ctx.session.set(...)` 存进去,回答轮开头 `ctx.session.take(...)` 取回。取出后它就被清掉,只能取一次。
259
+ 等待时还没读完的东西,例如一条读到一半的 SSE 流,也存在 `ctx.session` 上。Adapter 用 `createSessionKey<Pending>()` 声明一份私有状态,等待时 `ctx.session.set(...)` 存进去,回答轮开头 `ctx.session.take(...)` 取回。取出后它就被清掉,只能取一次。
260
260
 
261
261
  HITL 几乎总发生在流式接口上,应用停在流的中间。所以这一步的示例换成一个用 SSE 透传原生事件的应用,它同时用上前面几步的全部内容(完整可跑版本见 [tier1 示例](https://github.com/CorrectRoadH/niceeval/tree/main/examples/zh/tier1)):
262
262
 
263
263
  ```ts
264
264
  // agents/my-app.ts
265
- import { completeEvidenceCoverage, createSessionSlot, defineAgent, sseJsonFrames, createPiAgentEventStream, driveFrameStream } from "niceeval/adapter";
265
+ import { completeEvidenceCoverage, createSessionKey, defineAgent, sseJsonFrames, createPiAgentEventStream, driveFrameStream } from "niceeval/adapter";
266
266
  import type { AgentContext, PiAgentStream, SseFrameCursor } from "niceeval/adapter";
267
267
  import type { Turn, TurnInput } from "niceeval";
268
268
 
269
269
  const BASE_URL = "http://localhost:5299"; // 应用自己的端口,eval 不代管进程
270
270
 
271
271
  interface Pending { cursor: SseFrameCursor<Frame>; stream: PiAgentStream; callId: string }
272
- const pendingSlot = createSessionSlot<Pending>("my-app/pending");
272
+ const pendingKey = createSessionKey<Pending>("my-app/pending");
273
273
 
274
274
  function readStream(cursor: SseFrameCursor<Frame>, ctx: AgentContext, stream: PiAgentStream): Promise<Turn> {
275
275
  return driveFrameStream(cursor, stream, ctx, (frame) => {
@@ -278,7 +278,7 @@ function readStream(cursor: SseFrameCursor<Frame>, ctx: AgentContext, stream: Pi
278
278
  return;
279
279
  }
280
280
  if (frame.type === "approval_request") { // ← 本步:应用停下等审批,存下现场
281
- ctx.session.set(pendingSlot, { cursor, stream, callId: frame.toolCallId });
281
+ ctx.session.set(pendingKey, { cursor, stream, callId: frame.toolCallId });
282
282
  return { pause: { id: frame.toolCallId, action: frame.toolName,
283
283
  options: [{ id: "approve" }, { id: "deny" }] } };
284
284
  // driveFrameStream 收到 pause:补一条 input.requested、status 置 "waiting"、停止读流
@@ -291,7 +291,7 @@ export default defineAgent({
291
291
  name: "my-app",
292
292
  evidenceCoverage: completeEvidenceCoverage,
293
293
  async send(input: TurnInput, ctx: AgentContext): Promise<Turn> {
294
- const held = ctx.session.take(pendingSlot);
294
+ const held = ctx.session.take(pendingKey);
295
295
  if (held) { // ← t.respond("approve"):普通 send,先交裁决
296
296
  const approved = input.responses?.[0]?.optionId === "approve"; // 多请求并停时按 requestId 对位
297
297
  if (!approved) held.stream.markRejected(held.callId);
@@ -314,7 +314,7 @@ export default defineAgent({
314
314
  });
315
315
  ```
316
316
 
317
- 不需要 HITL 的接口,删掉和等待相关的三处(`Pending`、`pendingSlot`、开头的 `take` 分支),其余不变。等待、回答、继续执行的完整流程见 [HITL](/zh/explanation/hitl)。
317
+ 不需要 HITL 的接口,删掉和等待相关的三处(`Pending`、`pendingKey`、开头的 `take` 分支),其余不变。等待、回答、继续执行的完整流程见 [HITL](/zh/explanation/hitl)。
318
318
 
319
319
  **这一步支持**:`t.check(turn.status, equals("waiting"))`、`t.requireInputRequest()`、`t.respond()` / `t.respondAll()`。被拒绝的调用可以用 `calledTool(toolMatch(..., { status: "rejected" }))` 精确断言。`t.requireInputRequest()` 找不到请求时,先查等待的那一轮是否同时返回了 `status: "waiting"` 和 `input.requested` 事件。
320
320
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "niceeval",
3
- "version": "0.17.1",
3
+ "version": "0.19.0",
4
4
  "description": "Agent-native eval tool — eval agents, services, functions, and coding-agent fixtures",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-runtime.js","sourceRoot":"","sources":["effect-runtime.ts"],"names":[],"mappings":";;AAaA,kDAEC;AACD,gEAGC;AAED,oDAUC;AACD,0CAEC;AACD,4CAKC;AACD,kDAKC;AA9CD,mCAAgC;AAWhC,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA6B,CAAC;AAC1D,wFAAwF;AACxF,SAAgB,mBAAmB,CAAyC,MAA+D,EAAE,MAAkD;IAC3L,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,eAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC;AACD,SAAgB,0BAA0B,CAA0B,KAAgB,EAAE,OAA2B;IAC7G,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,wGAAwG;AACxG,SAAgB,oBAAoB,CAAQ,QAAsC;IAC9E,OAAO,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACvB,MAAM,MAAM,GAAY,QAAQ,EAAE,CAAC;QACnC,IAAI,eAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,OAAO,MAA8C,CAAC;QAC1D,OAAO,eAAM,CAAC,UAAU,CAAC;YACrB,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAe,CAAC;YAC3C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SAC1B,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAgB,eAAe,CAAC,KAAY,EAAE,KAAgB,EAAE,OAAyB;IACrF,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AACD,SAAgB,gBAAgB,CAAC,KAAY,EAAE,OAAgB,EAAE,OAAgD;IAC7G,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;QAC3B,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,OAAO,EAAE,OAAmC,CAAC;QACvE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AACD,SAAgB,mBAAmB,CAAC,KAAY,EAAE,OAAgB,EAAE,OAAqB;IACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;QAC3B,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QAC9C,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Agent, AgentContext, AgentSendContext, SandboxAgentSetupContext, SandboxAgentSendContext, Turn, TurnInput, } from \"./types.ts\";\nimport type { Sandbox } from \"../sandbox/types.ts\";\nexport type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;\nexport interface AgentEffectRuntime {\n readonly send: AgentSendEffect;\n readonly sandboxSetup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;\n readonly directSetup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;\n readonly sandboxTeardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;\n readonly directTeardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;\n}\nconst runtimes = new WeakMap<Agent, AgentEffectRuntime>();\n/** Promise facade for built-in adapters; Runner uses the registered Effect directly. */\nexport function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value> {\n return (...args) => Effect.runPromise(effect(...args), { signal: signal(...args) });\n}\nexport function registerAgentEffectRuntime<AgentType extends Agent>(agent: AgentType, runtime: AgentEffectRuntime): AgentType {\n runtimes.set(agent, runtime);\n return agent;\n}\n/** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */\nexport function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never> {\n return Effect.suspend(() => {\n const result: unknown = callback();\n if (Effect.isEffect(result))\n return result as Effect.Effect<Value, unknown, never>;\n return Effect.tryPromise({\n try: () => Promise.resolve(result as Value),\n catch: (cause) => cause,\n });\n });\n}\nexport function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined {\n return runtimes.get(agent)?.send(input, context);\n}\nexport function agentSetupEffect(agent: Agent, sandbox: Sandbox, context: SandboxAgentSetupContext | AgentContext): Effect.Effect<void, unknown, never> | undefined {\n const runtime = runtimes.get(agent);\n return agent.kind === \"sandbox\"\n ? runtime?.sandboxSetup?.(sandbox, context as SandboxAgentSetupContext)\n : runtime?.directSetup?.(context);\n}\nexport function agentTeardownEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined {\n const runtime = runtimes.get(agent);\n return agent.kind === \"sandbox\"\n ? runtime?.sandboxTeardown?.(sandbox, context)\n : runtime?.directTeardown?.(context);\n}\nexport type InternalSandboxAgentDefinition = {\n readonly send: (input: TurnInput, context: SandboxAgentSendContext) => Effect.Effect<Turn, unknown, never>;\n readonly setup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;\n readonly teardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;\n};\nexport type InternalDirectAgentDefinition = {\n readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;\n readonly setup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;\n readonly teardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;\n};\n"]}
@@ -1,29 +0,0 @@
1
- import { Effect } from "effect";
2
- import type { Agent, AgentContext, AgentSendContext, SandboxAgentSetupContext, SandboxAgentSendContext, Turn, TurnInput } from "./types.cjs";
3
- import type { Sandbox } from "../sandbox/types.cjs";
4
- export type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
5
- export interface AgentEffectRuntime {
6
- readonly send: AgentSendEffect;
7
- readonly sandboxSetup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;
8
- readonly directSetup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
9
- readonly sandboxTeardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
10
- readonly directTeardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
11
- }
12
- /** Promise facade for built-in adapters; Runner uses the registered Effect directly. */
13
- export declare function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value>;
14
- export declare function registerAgentEffectRuntime<AgentType extends Agent>(agent: AgentType, runtime: AgentEffectRuntime): AgentType;
15
- /** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */
16
- export declare function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never>;
17
- export declare function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined;
18
- export declare function agentSetupEffect(agent: Agent, sandbox: Sandbox, context: SandboxAgentSetupContext | AgentContext): Effect.Effect<void, unknown, never> | undefined;
19
- export declare function agentTeardownEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined;
20
- export type InternalSandboxAgentDefinition = {
21
- readonly send: (input: TurnInput, context: SandboxAgentSendContext) => Effect.Effect<Turn, unknown, never>;
22
- readonly setup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;
23
- readonly teardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
24
- };
25
- export type InternalDirectAgentDefinition = {
26
- readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
27
- readonly setup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
28
- readonly teardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
29
- };
@@ -1,29 +0,0 @@
1
- import { Effect } from "effect";
2
- import type { Agent, AgentContext, AgentSendContext, SandboxAgentSetupContext, SandboxAgentSendContext, Turn, TurnInput } from "./types.mjs";
3
- import type { Sandbox } from "../sandbox/types.mjs";
4
- export type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
5
- export interface AgentEffectRuntime {
6
- readonly send: AgentSendEffect;
7
- readonly sandboxSetup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;
8
- readonly directSetup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
9
- readonly sandboxTeardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
10
- readonly directTeardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
11
- }
12
- /** Promise facade for built-in adapters; Runner uses the registered Effect directly. */
13
- export declare function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value>;
14
- export declare function registerAgentEffectRuntime<AgentType extends Agent>(agent: AgentType, runtime: AgentEffectRuntime): AgentType;
15
- /** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */
16
- export declare function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never>;
17
- export declare function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined;
18
- export declare function agentSetupEffect(agent: Agent, sandbox: Sandbox, context: SandboxAgentSetupContext | AgentContext): Effect.Effect<void, unknown, never> | undefined;
19
- export declare function agentTeardownEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined;
20
- export type InternalSandboxAgentDefinition = {
21
- readonly send: (input: TurnInput, context: SandboxAgentSendContext) => Effect.Effect<Turn, unknown, never>;
22
- readonly setup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;
23
- readonly teardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
24
- };
25
- export type InternalDirectAgentDefinition = {
26
- readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
27
- readonly setup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
28
- readonly teardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
29
- };
@@ -1,29 +0,0 @@
1
- import { Effect } from "effect";
2
- import type { Agent, AgentContext, AgentSendContext, SandboxAgentSetupContext, SandboxAgentSendContext, Turn, TurnInput } from "./types.js";
3
- import type { Sandbox } from "../sandbox/types.js";
4
- export type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
5
- export interface AgentEffectRuntime {
6
- readonly send: AgentSendEffect;
7
- readonly sandboxSetup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;
8
- readonly directSetup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
9
- readonly sandboxTeardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
10
- readonly directTeardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
11
- }
12
- /** Promise facade for built-in adapters; Runner uses the registered Effect directly. */
13
- export declare function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value>;
14
- export declare function registerAgentEffectRuntime<AgentType extends Agent>(agent: AgentType, runtime: AgentEffectRuntime): AgentType;
15
- /** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */
16
- export declare function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never>;
17
- export declare function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined;
18
- export declare function agentSetupEffect(agent: Agent, sandbox: Sandbox, context: SandboxAgentSetupContext | AgentContext): Effect.Effect<void, unknown, never> | undefined;
19
- export declare function agentTeardownEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined;
20
- export type InternalSandboxAgentDefinition = {
21
- readonly send: (input: TurnInput, context: SandboxAgentSendContext) => Effect.Effect<Turn, unknown, never>;
22
- readonly setup?: (sandbox: Sandbox, context: SandboxAgentSetupContext) => Effect.Effect<void, unknown, never>;
23
- readonly teardown?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
24
- };
25
- export type InternalDirectAgentDefinition = {
26
- readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
27
- readonly setup?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
28
- readonly teardown?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
29
- };
@@ -1,16 +0,0 @@
1
- import { createRequire as __niceevalCreateRequire } from "node:module";
2
- const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
- const __niceevalCanonical = __niceevalRequire("./effect-runtime.cjs");
4
- const __niceevalExport0 = __niceevalCanonical["agentSendEffect"];
5
- export { __niceevalExport0 as agentSendEffect };
6
- const __niceevalExport1 = __niceevalCanonical["agentSetupEffect"];
7
- export { __niceevalExport1 as agentSetupEffect };
8
- const __niceevalExport2 = __niceevalCanonical["agentTeardownEffect"];
9
- export { __niceevalExport2 as agentTeardownEffect };
10
- const __niceevalExport3 = __niceevalCanonical["authorCallbackEffect"];
11
- export { __niceevalExport3 as authorCallbackEffect };
12
- const __niceevalExport4 = __niceevalCanonical["effectAgentCallback"];
13
- export { __niceevalExport4 as effectAgentCallback };
14
- const __niceevalExport5 = __niceevalCanonical["registerAgentEffectRuntime"];
15
- export { __niceevalExport5 as registerAgentEffectRuntime };
16
- //# sourceMappingURL=effect-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-runtime.js","sources":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-slot.js","sourceRoot":"","sources":["session-slot.ts"],"names":[],"mappings":";;AAUA,8CAEC;AAHD,0CAA0C;AAC1C,SAAgB,iBAAiB,CAAI,IAAY;IAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAoB,CAAC;AACnD,CAAC","sourcesContent":["declare const sessionSlotValue: unique symbol;\n/**\n * Adapter 私有的会话状态槽。运行时只用 `key` 的 symbol 身份寻址;\n * 非导出品牌让 `T` 在编译期保持不变,不同值类型的 slot 不能互换。\n */\nexport interface SessionSlot<T> {\n readonly key: symbol;\n readonly [sessionSlotValue]: (value: T) => T;\n}\n/** 创建一个按 symbol 身份隔离的 Adapter 私有会话状态槽。 */\nexport function createSessionSlot<T>(name: string): SessionSlot<T> {\n return { key: Symbol(name) } as SessionSlot<T>;\n}\n"]}
@@ -1,12 +0,0 @@
1
- declare const sessionSlotValue: unique symbol;
2
- /**
3
- * Adapter 私有的会话状态槽。运行时只用 `key` 的 symbol 身份寻址;
4
- * 非导出品牌让 `T` 在编译期保持不变,不同值类型的 slot 不能互换。
5
- */
6
- export interface SessionSlot<T> {
7
- readonly key: symbol;
8
- readonly [sessionSlotValue]: (value: T) => T;
9
- }
10
- /** 创建一个按 symbol 身份隔离的 Adapter 私有会话状态槽。 */
11
- export declare function createSessionSlot<T>(name: string): SessionSlot<T>;
12
- export {};
@@ -1,12 +0,0 @@
1
- declare const sessionSlotValue: unique symbol;
2
- /**
3
- * Adapter 私有的会话状态槽。运行时只用 `key` 的 symbol 身份寻址;
4
- * 非导出品牌让 `T` 在编译期保持不变,不同值类型的 slot 不能互换。
5
- */
6
- export interface SessionSlot<T> {
7
- readonly key: symbol;
8
- readonly [sessionSlotValue]: (value: T) => T;
9
- }
10
- /** 创建一个按 symbol 身份隔离的 Adapter 私有会话状态槽。 */
11
- export declare function createSessionSlot<T>(name: string): SessionSlot<T>;
12
- export {};
@@ -1,12 +0,0 @@
1
- declare const sessionSlotValue: unique symbol;
2
- /**
3
- * Adapter 私有的会话状态槽。运行时只用 `key` 的 symbol 身份寻址;
4
- * 非导出品牌让 `T` 在编译期保持不变,不同值类型的 slot 不能互换。
5
- */
6
- export interface SessionSlot<T> {
7
- readonly key: symbol;
8
- readonly [sessionSlotValue]: (value: T) => T;
9
- }
10
- /** 创建一个按 symbol 身份隔离的 Adapter 私有会话状态槽。 */
11
- export declare function createSessionSlot<T>(name: string): SessionSlot<T>;
12
- export {};
@@ -1,6 +0,0 @@
1
- import { createRequire as __niceevalCreateRequire } from "node:module";
2
- const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
- const __niceevalCanonical = __niceevalRequire("./session-slot.cjs");
4
- const __niceevalExport0 = __niceevalCanonical["createSessionSlot"];
5
- export { __niceevalExport0 as createSessionSlot };
6
- //# sourceMappingURL=session-slot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-slot.js","sources":[],"names":[],"mappings":""}