niceeval 0.18.0 → 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 (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
package/dist/define.cjs CHANGED
@@ -12,7 +12,7 @@ exports.defineEvalForContext = defineEvalForContext;
12
12
  exports.defineExperiment = defineExperiment;
13
13
  exports.defineConfig = defineConfig;
14
14
  exports.defineSandbox = defineSandbox;
15
- const model_slots_ts_1 = require("./model-slots.cjs");
15
+ const model_roles_ts_1 = require("./model-roles.cjs");
16
16
  const adapter_flags_ts_1 = require("./adapter-flags.cjs");
17
17
  const flags_ts_1 = require("./experiment/flags.cjs");
18
18
  const judge_config_ts_1 = require("./runner/judge-config.cjs");
@@ -22,7 +22,7 @@ const types_ts_1 = require("./types.cjs");
22
22
  const layer_ts_1 = require("./sandbox/layer.cjs");
23
23
  const effect_1 = require("effect");
24
24
  const coverage_ts_1 = require("./assertions/coverage.cjs");
25
- const effect_runtime_ts_1 = require("./agents/effect-runtime.cjs");
25
+ const agent_effects_ts_1 = require("./agents/agent-effects.cjs");
26
26
  const contracts_ts_1 = require("./plugin/contracts.cjs");
27
27
  /** Recognize only the retired flat configuration, without evaluating getters. */
28
28
  function normalizeDefinitionJudge(value, label) {
@@ -71,8 +71,15 @@ function defineEvalGroup(input) {
71
71
  function isDefinedScoreEval(value) {
72
72
  return definedScoreEvals.has(value);
73
73
  }
74
+ function assertAuthorLifecycleNames(def, owner) {
75
+ for (const [previous, current] of [["setup", "before"], ["teardown", "after"]]) {
76
+ if (Object.hasOwn(def, previous))
77
+ throw new TypeError(`${owner}.${previous} is no longer supported; use ${current}.`);
78
+ }
79
+ }
74
80
  /** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */
75
81
  function defineSandboxAgent(def) {
82
+ assertAuthorLifecycleNames(def, "Agent");
76
83
  if (!def.name)
77
84
  throw new Error(`defineSandboxAgent requires name.`);
78
85
  (0, coverage_ts_1.assertEvidenceCoverage)(def.evidenceCoverage, "defineSandboxAgent");
@@ -89,7 +96,7 @@ function defineSandboxAgent(def) {
89
96
  throw new TypeError("defineSandboxAgent sandbox must be command-only; an Agent cannot provide a Sandbox template.");
90
97
  }
91
98
  }
92
- return {
99
+ const agent = {
93
100
  name: def.name,
94
101
  kind: "sandbox",
95
102
  defineEval,
@@ -98,69 +105,80 @@ function defineSandboxAgent(def) {
98
105
  ...(def.sandbox === undefined ? {} : { sandbox: def.sandbox }),
99
106
  ensure,
100
107
  installers: def.installers ?? [],
101
- setup: def.setup,
108
+ before: def.before,
102
109
  tracing: def.tracing,
103
110
  spanMapper: def.spanMapper,
104
111
  send: def.send,
105
112
  classifySendFailure: def.classifySendFailure,
106
- teardown: def.teardown,
113
+ after: def.after,
107
114
  };
115
+ return (0, agent_effects_ts_1.attachAgentEffects)(agent, {
116
+ send: (input, context) => (0, agent_effects_ts_1.authorCallbackEffect)(() => def.send(input, context)),
117
+ before: def.before === undefined ? undefined : (sandbox, context) => (0, agent_effects_ts_1.authorCallbackEffect)(() => def.before(sandbox, context)),
118
+ after: def.after === undefined ? undefined : (sandbox, context) => (0, agent_effects_ts_1.authorCallbackEffect)(() => def.after(sandbox, { ...context, sandbox })),
119
+ });
108
120
  }
109
121
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
110
122
  function makeSandboxAgent(def) {
111
- const { send, setup, teardown, ...publicDefinition } = def;
123
+ const { send, before, after, ...publicDefinition } = def;
112
124
  const agent = defineSandboxAgent({
113
125
  ...publicDefinition,
114
- send: (0, effect_runtime_ts_1.effectAgentCallback)(send, (_input, context) => context.signal),
115
- ...(setup === undefined ? {} : {
116
- setup: (0, effect_runtime_ts_1.effectAgentCallback)(setup, (_sandbox, context) => context.signal),
126
+ send: (0, agent_effects_ts_1.effectAgentCallback)(send, (_input, context) => context.signal),
127
+ ...(before === undefined ? {} : {
128
+ before: (0, agent_effects_ts_1.effectAgentCallback)(before, (_sandbox, context) => context.signal),
117
129
  }),
118
- ...(teardown === undefined ? {} : {
119
- teardown: (0, effect_runtime_ts_1.effectAgentCallback)(teardown, (_sandbox, context) => context.signal),
130
+ ...(after === undefined ? {} : {
131
+ after: (0, agent_effects_ts_1.effectAgentCallback)(after, (_sandbox, context) => context.signal),
120
132
  }),
121
133
  });
122
- return (0, effect_runtime_ts_1.registerAgentEffectRuntime)(agent, {
123
- send: send,
124
- sandboxSetup: setup,
125
- sandboxTeardown: teardown,
134
+ return (0, agent_effects_ts_1.attachAgentEffects)(agent, {
135
+ send,
136
+ before,
137
+ after,
126
138
  });
127
139
  }
128
140
  /** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */
129
141
  function defineAgent(def) {
142
+ assertAuthorLifecycleNames(def, "Agent");
130
143
  if (!def.name)
131
144
  throw new Error(`defineAgent requires name.`);
132
145
  (0, coverage_ts_1.assertEvidenceCoverage)(def.evidenceCoverage, "defineAgent");
133
- return {
146
+ const agent = {
134
147
  name: def.name,
135
148
  kind: "direct",
136
149
  defineEval,
137
150
  defineScoreEval,
138
151
  evidenceCoverage: def.evidenceCoverage,
139
- setup: def.setup,
152
+ before: def.before,
140
153
  tracing: def.tracing,
141
154
  spanMapper: def.spanMapper,
142
155
  send: def.send,
143
156
  classifySendFailure: def.classifySendFailure,
144
- teardown: def.teardown,
157
+ after: def.after,
145
158
  };
159
+ return (0, agent_effects_ts_1.attachAgentEffects)(agent, {
160
+ send: (input, context) => (0, agent_effects_ts_1.authorCallbackEffect)(() => def.send(input, context)),
161
+ before: def.before === undefined ? undefined : (_sandbox, context) => (0, agent_effects_ts_1.authorCallbackEffect)(() => def.before(context)),
162
+ after: def.after === undefined ? undefined : (_sandbox, context) => (0, agent_effects_ts_1.authorCallbackEffect)(() => def.after(context)),
163
+ });
146
164
  }
147
165
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
148
166
  function makeDirectAgent(def) {
149
- const { send, setup, teardown, ...publicDefinition } = def;
167
+ const { send, before, after, ...publicDefinition } = def;
150
168
  const agent = defineAgent({
151
169
  ...publicDefinition,
152
- send: (0, effect_runtime_ts_1.effectAgentCallback)(send, (_input, context) => context.signal),
153
- ...(setup === undefined ? {} : {
154
- setup: (0, effect_runtime_ts_1.effectAgentCallback)(setup, (context) => context.signal),
170
+ send: (0, agent_effects_ts_1.effectAgentCallback)(send, (_input, context) => context.signal),
171
+ ...(before === undefined ? {} : {
172
+ before: (0, agent_effects_ts_1.effectAgentCallback)(before, (context) => context.signal),
155
173
  }),
156
- ...(teardown === undefined ? {} : {
157
- teardown: (0, effect_runtime_ts_1.effectAgentCallback)(teardown, (context) => context.signal),
174
+ ...(after === undefined ? {} : {
175
+ after: (0, agent_effects_ts_1.effectAgentCallback)(after, (context) => context.signal),
158
176
  }),
159
177
  });
160
- return (0, effect_runtime_ts_1.registerAgentEffectRuntime)(agent, {
178
+ return (0, agent_effects_ts_1.attachAgentEffects)(agent, {
161
179
  send,
162
- directSetup: setup,
163
- directTeardown: teardown,
180
+ before: before === undefined ? undefined : (_sandbox, context) => before(context),
181
+ after: after === undefined ? undefined : (_sandbox, context) => after(context),
164
182
  });
165
183
  }
166
184
  /** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */
@@ -175,7 +193,7 @@ function defineScoreEval(def) {
175
193
  return defineEvalForContext("score", def);
176
194
  }
177
195
  /** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */
178
- // @concord-code ne-surface-define-eval-context
196
+ // @concord-code
179
197
  // @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md
180
198
  function defineEvalForContext(kind, def, internalFields = {}) {
181
199
  const factory = kind === "pass" ? "defineEval" : "defineScoreEval";
@@ -202,25 +220,28 @@ function defineEvalForContext(kind, def, internalFields = {}) {
202
220
  definedScoreEvals.add(result);
203
221
  return result;
204
222
  }
205
- // @concord-code ne-surface-define-experiment
223
+ // @concord-code
206
224
  // @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md
207
225
  function defineExperiment(def) {
226
+ rejectRemovedField(def, "judgeRuntime", "Use judge.");
227
+ rejectRemovedField(def, "classifyFailure", "Use built-in failure classification or ExperimentFatalError / EvalFatalError.");
228
+ rejectRemovedField(def, "agent", "Use adapter to select the tested Agent or Adapter.");
208
229
  if (Object.hasOwn(def, "id")) {
209
230
  throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);
210
231
  }
211
- if ((def.agent === undefined) === (def.adapter === undefined)) {
212
- throw new Error(`defineExperiment requires exactly one of agent or adapter.`);
232
+ if (def.adapter === undefined) {
233
+ throw new Error(`defineExperiment requires adapter.`);
213
234
  }
214
- const adapter = def.adapter ?? def.agent;
235
+ const adapter = def.adapter;
215
236
  if (adapter.kind !== "custom" && def.models !== undefined) {
216
237
  throw new TypeError("Experiment models is only supported by custom Adapters.");
217
238
  }
218
- const models = adapter.kind === "custom" ? (0, model_slots_ts_1.normalizeModelSlots)(def) : undefined;
239
+ const models = adapter.kind === "custom" ? (0, model_roles_ts_1.normalizeModelRoles)(def) : undefined;
219
240
  if (adapter.kind === "custom")
220
- (0, model_slots_ts_1.assertRequiredModelSlots)(adapter.requiredModelSlots, models, `Adapter "${adapter.name}"`);
221
- const judgeRuntime = def.judgeRuntime === undefined
241
+ (0, model_roles_ts_1.assertRequiredModelRoles)(adapter.requiredModelRoles, models, `Adapter "${adapter.name}"`);
242
+ const judge = def.judge === undefined
222
243
  ? undefined
223
- : normalizeDefinitionJudge(def.judgeRuntime, "defineExperiment() judgeRuntime");
244
+ : normalizeDefinitionJudge(def.judge, "defineExperiment() judge");
224
245
  assertSandboxLayer(def.sandbox, "defineExperiment");
225
246
  if (adapter.kind === "custom") {
226
247
  if (def.sandbox !== undefined || def.sandboxReuse === true || def.sandboxCache !== undefined) {
@@ -230,21 +251,17 @@ function defineExperiment(def) {
230
251
  throw new Error(`Custom Adapter experiments do not support budget because Adapter usage is not collected.`);
231
252
  }
232
253
  }
233
- // setup 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.setup);
254
+ assertAuthorLifecycleNames(def, "Experiment");
255
+ // before 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.before);
234
256
  // 传成非函数(如误把 sandbox 钩子对象塞进来)在解析时就报,不等到调度才炸。
235
- if (def.setup !== undefined && typeof def.setup !== "function") {
236
- throw new Error(`experiment.setup must be a function ((ctx) => void); use experiment.teardown for cleanup; to prepare the in-sandbox environment per experiment, chain .setup() hooks on the sandbox spec instead.`);
257
+ if (def.before !== undefined && typeof def.before !== "function") {
258
+ throw new Error(`experiment.before must be a function ((ctx) => void); use experiment.after for cleanup; to prepare the in-sandbox environment per experiment, chain .before() hooks on the sandbox spec instead.`);
237
259
  }
238
260
  // teardown 与 setup 是同一个 Experiment lifecycle 边界。非函数值绝不能
239
261
  // 伪装成已声明的 cleanup,否则 explicit sharedState recovery 可能在没有
240
262
  // 执行补偿的情况下释放 immutable owner generation。
241
- if (def.teardown !== undefined && typeof def.teardown !== "function") {
242
- throw new Error(`Experiment teardown must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);
243
- }
244
- // classifyFailure 是失败分类链上的实验通道(见 runner/types.ts 的 ExperimentDef.classifyFailure):
245
- // 传成非函数在解析时就报,不等到某条 attempt 撞死才发现这一路声明白写。
246
- if (def.classifyFailure !== undefined && typeof def.classifyFailure !== "function") {
247
- throw new Error(`experiment.classifyFailure must be a function ((failure) => FailureClass | undefined); it classifies failures that surface as third-party errors and must return undefined for anything it does not recognize.`);
263
+ if (def.after !== undefined && typeof def.after !== "function") {
264
+ throw new Error(`Experiment after must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);
248
265
  }
249
266
  // labels 是报告归类坐标(进 ExperimentRunInfo.labels,不透传 ctx/t):值域 string | number,
250
267
  // 解析时即校验,布尔 / 对象 / NaN 直接报错,不等到落盘或报告分组才炸。
@@ -257,7 +274,7 @@ function defineExperiment(def) {
257
274
  }
258
275
  const sharedState = normalizeSharedState(def.sharedState);
259
276
  const sandboxCache = normalizeSandboxCache(def.sandboxCache, "defineExperiment");
260
- const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;
277
+ const { id: _derivedId, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;
261
278
  const flags = (0, flags_ts_1.decodeExperimentFlags)(def.flags === undefined ? {} : def.flags);
262
279
  return (0, types_ts_1.brandExperimentDefinition)({
263
280
  ...author,
@@ -267,7 +284,6 @@ function defineExperiment(def) {
267
284
  reasoningEffort: models.default?.reasoningEffort ?? undefined,
268
285
  }),
269
286
  adapter,
270
- ...(adapter.kind === "custom" ? {} : { agent: adapter }),
271
287
  flags: adapter.kind === "custom" && adapter.parseFlags !== undefined
272
288
  ? (0, adapter_flags_ts_1.parseAdapterFlags)(adapter.parseFlags, flags)
273
289
  : flags,
@@ -276,7 +292,7 @@ function defineExperiment(def) {
276
292
  earlyExit: def.earlyExit ?? false,
277
293
  evals: Array.isArray(def.evals) ? Object.freeze([...def.evals]) : (def.evals ?? "*"),
278
294
  sandboxReuse: def.sandboxReuse === true,
279
- ...(judgeRuntime === undefined ? {} : { judgeRuntime }),
295
+ ...(judge === undefined ? {} : { judge }),
280
296
  ...(sharedState === undefined ? {} : { sharedState }),
281
297
  ...(sandboxCache === undefined ? {} : { sandboxCache }),
282
298
  plugins: normalizePlugins(def.plugins ?? [], "defineExperiment plugins", "experiment"),
@@ -286,15 +302,17 @@ function normalizeSandboxCache(value, factory) {
286
302
  if (value === undefined)
287
303
  return undefined;
288
304
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
289
- throw new TypeError(`${factory} sandboxCache must be an object with optional setup "use" or "bypass".`);
305
+ throw new TypeError(`${factory} sandboxCache must be an object with optional before "use" or "bypass".`);
290
306
  }
307
+ if (Object.hasOwn(value, "setup"))
308
+ throw new TypeError(`${factory} sandboxCache.setup is no longer supported. Use sandboxCache.before.`);
291
309
  const keys = Object.keys(value);
292
- const setup = Reflect.get(value, "setup");
293
- if (keys.some((key) => key !== "setup") ||
294
- (setup !== undefined && setup !== "use" && setup !== "bypass")) {
295
- throw new TypeError(`${factory} sandboxCache must be an object with optional setup "use" or "bypass".`);
310
+ const before = Reflect.get(value, "before");
311
+ if (keys.some((key) => key !== "before") ||
312
+ (before !== undefined && before !== "use" && before !== "bypass")) {
313
+ throw new TypeError(`${factory} sandboxCache must be an object with optional before "use" or "bypass".`);
296
314
  }
297
- return Object.freeze(setup === undefined ? {} : { setup });
315
+ return Object.freeze(before === undefined ? {} : { before });
298
316
  }
299
317
  const SharedStateKeyPattern = /^[a-z0-9][a-z0-9._/-]{0,127}$/u;
300
318
  function normalizeSharedState(value) {
@@ -313,6 +331,7 @@ function normalizeSharedState(value) {
313
331
  return Object.freeze({ key: candidate.key });
314
332
  }
315
333
  function normalizeEvalFields(def) {
334
+ rejectRemovedField(def, "reporters", "Use Config.reporters for project-level reporting.");
316
335
  const judge = def.judge === undefined
317
336
  ? undefined
318
337
  : normalizeDefinitionJudge(def.judge, "defineEval() judge");
@@ -322,7 +341,6 @@ function normalizeEvalFields(def) {
322
341
  ...(def.sandbox !== undefined ? { sandbox: def.sandbox } : {}),
323
342
  plugins: normalizePlugins(def.plugins ?? [], "defineEval plugins", "eval"),
324
343
  ...(judge !== undefined ? { judge } : {}),
325
- reporters: Object.freeze([...(def.reporters ?? [])]),
326
344
  ...(def.timeoutMs !== undefined ? { timeoutMs: def.timeoutMs } : {}),
327
345
  metadata: decodeJsonRecord(def.metadata ?? {}, "Eval metadata"),
328
346
  diff: Object.freeze({
@@ -331,7 +349,7 @@ function normalizeEvalFields(def) {
331
349
  }),
332
350
  };
333
351
  }
334
- // @concord-code ne-surface-normalize-plugins
352
+ // @concord-code
335
353
  // @concord-implements docs/feature/plugins/library.md
336
354
  function normalizePlugins(value, label, owner) {
337
355
  if (!Array.isArray(value))
@@ -339,9 +357,7 @@ function normalizePlugins(value, label, owner) {
339
357
  return Object.freeze(value.map((plugin, index) => {
340
358
  if (!(0, contracts_ts_1.isPluginInstance)(plugin))
341
359
  throw new TypeError(`${label}[${index}] must be created by definePlugin().`);
342
- if ((0, contracts_ts_1.pluginInstanceDataOf)(plugin)[owner] === undefined) {
343
- throw new TypeError(`${label}[${index}] does not support ${owner} attachment.`);
344
- }
360
+ (0, contracts_ts_1.assertPluginOwner)(plugin, owner, `${label}[${index}]`);
345
361
  return plugin;
346
362
  }));
347
363
  }
@@ -388,17 +404,20 @@ function assertSandboxLayer(value, factory) {
388
404
  }
389
405
  /** 项目级配置。 */
390
406
  function defineConfig(config) {
407
+ rejectRemovedField(config, "judgeRuntime", "Use judgeProvider.");
408
+ rejectRemovedField(config, "maxSetupPrefixConcurrency", "Use maxBeforeCacheConcurrency.");
409
+ rejectRemovedField(config, "workspace", "Use the project directory as the working directory.");
391
410
  const sandboxCache = normalizeSandboxCache(config.sandboxCache, "defineConfig");
392
- const judgeRuntime = config.judgeRuntime === undefined
411
+ const judgeProvider = config.judgeProvider === undefined
393
412
  ? undefined
394
- : normalizeDefinitionJudge(config.judgeRuntime, "defineConfig() judgeRuntime");
395
- if (judgeRuntime !== undefined && !(0, provider_ts_1.isJudgeProvider)(judgeRuntime)) {
396
- throw new TypeError("defineConfig() judgeRuntime must be a Judge Provider created by niceeval/judge");
413
+ : normalizeDefinitionJudge(config.judgeProvider, "defineConfig() judgeProvider");
414
+ if (judgeProvider !== undefined && !(0, provider_ts_1.isJudgeProvider)(judgeProvider)) {
415
+ throw new TypeError("defineConfig() judgeProvider must be a Judge Provider created by niceeval/judge");
397
416
  }
398
417
  return Object.freeze({
399
418
  ...config,
400
419
  ...(sandboxCache === undefined ? {} : { sandboxCache }),
401
- ...(judgeRuntime === undefined ? {} : { judgeRuntime }),
420
+ ...(judgeProvider === undefined ? {} : { judgeProvider }),
402
421
  });
403
422
  }
404
423
  /**
@@ -408,4 +427,8 @@ function defineConfig(config) {
408
427
  function defineSandbox(def) {
409
428
  return (0, layer_ts_1.customProviderSandbox)(def);
410
429
  }
430
+ function rejectRemovedField(value, field, replacement) {
431
+ if (Object.hasOwn(value, field))
432
+ throw new TypeError(`${field} is no longer supported. ${replacement}`);
433
+ }
411
434
  //# sourceMappingURL=define.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["define.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-surface-definition-entry\n// @concord-implements docs/feature/plugins/library.md\nimport type { Adapter } from \"./adapter.ts\";\nimport { assertRequiredModelSlots, normalizeModelSlots } from \"./model-slots.ts\";\nimport { parseAdapterFlags } from \"./adapter-flags.ts\";\nimport { decodeExperimentFlags } from \"./experiment/flags.ts\";\n// 定义入口:把用户对象规格化成核心认得的形状。路径即身份 —— 这里禁止手写 id,\n// 由发现阶段从文件路径推导(见 runner/discover.ts)。\nimport type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, EvalDefinitionFields, ExperimentDefinition, ExperimentInput, SharedStateConfig, SandboxCacheConfig, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext, JsonValue, } from \"./types.ts\";\nimport { normalizeJudgeSelection } from \"./runner/judge-config.ts\";\nimport { isJudgeProvider } from \"./judge/provider.ts\";\nimport { MigrationRequiredError, captureMigrationSource } from \"./error-assistance/index.ts\";\nimport { brandEvalDefinition, brandEvalGroupDefinition, brandExperimentDefinition, isEvalDefinition, } from \"./types.ts\";\nimport { customProviderSandbox, isSandboxLayer, sandboxLayerStateOf, type CustomProviderSandboxOptions, type SandboxLayer, } from \"./sandbox/layer.ts\";\nimport { Result, Schema } from \"effect\";\nimport { assertEvidenceCoverage } from \"./assertions/coverage.ts\";\nimport { effectAgentCallback, registerAgentEffectRuntime, type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition, } from \"./agents/effect-runtime.ts\";\nimport { isPluginInstance, pluginInstanceDataOf, type PluginInstance, type PluginOwner } from \"./plugin/contracts.ts\";\n/** Recognize only the retired flat configuration, without evaluating getters. */\nfunction normalizeDefinitionJudge(value: unknown, label: string) {\n if (!isJudgeProvider(value) && typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const prototype = Object.getPrototypeOf(value);\n const legacyKeys = [\"model\", \"baseUrl\", \"apiKeyEnv\", \"timeoutMs\", \"maxOutputTokens\"];\n if ((prototype === Object.prototype || prototype === null) && Reflect.ownKeys(value).every((key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && legacyKeys.includes(key) && descriptor !== undefined && \"value\" in descriptor;\n })) {\n throw new MigrationRequiredError({ occurrences: [{\n guideId: \"judge-provider\",\n subject: label.replace(\"() \", \".\"),\n source: captureMigrationSource(),\n }] });\n }\n }\n return normalizeJudgeSelection(value, label);\n}\n// 发现期必须区分 defineScoreEval 的真正产物与运行时手写 `{ evaluationKind: \"score\" }` 的裸对象。\n// WeakSet 是模块私有来源证明;Definition 本身另有 types.ts 的私有 symbol 品牌供类型层使用。\nconst definedScoreEvals = new WeakSet<object>();\n/** Define a closed set of real Eval definitions sharing one physical Sandbox. */\nexport function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition {\n if (!Array.isArray(input.evals) || input.evals.length === 0) {\n throw new TypeError(\"defineEvalGroup evals must be a non-empty array of defineEval()/defineScoreEval() definitions.\");\n }\n input.evals.forEach((member, index) => {\n if (!isEvalDefinition(member)) {\n throw new TypeError(`defineEvalGroup evals[${index}] must be the object returned by defineEval() or defineScoreEval().`);\n }\n });\n assertSandboxLayer(input.sandbox, \"defineEvalGroup\");\n if (input.onUnavailable !== \"stop-group\" && input.onUnavailable !== \"replace-sandbox\") {\n throw new TypeError(\"defineEvalGroup onUnavailable must be \\\"stop-group\\\" or \\\"replace-sandbox\\\".\");\n }\n const [first, ...rest] = input.evals;\n return brandEvalGroupDefinition({\n evals: Object.freeze([first, ...rest]),\n onUnavailable: input.onUnavailable,\n ...(input.sandbox ? { sandbox: input.sandbox } : {}),\n ...(input.plugins === undefined ? {} : { plugins: normalizePlugins(input.plugins, \"defineEvalGroup plugins\", \"group\") }),\n });\n}\n/** @internal 仅供 discoverEvals 验证 score 题型来源。 */\nexport function isDefinedScoreEval(value: object): boolean {\n return definedScoreEvals.has(value);\n}\n/** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */\nexport function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent {\n if (!def.name)\n throw new Error(`defineSandboxAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineSandboxAgent\");\n if (def.ensure === undefined)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n const ensure = Array.isArray(def.ensure) ? def.ensure : [def.ensure];\n if (ensure.length === 0)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n if (def.sandbox !== undefined) {\n if (!isSandboxLayer(def.sandbox)) {\n throw new TypeError(\"defineSandboxAgent sandbox must be a SandboxLayer created by sandboxLayer().\");\n }\n if (sandboxLayerStateOf(def.sandbox).kind !== \"command-only\") {\n throw new TypeError(\"defineSandboxAgent sandbox must be command-only; an Agent cannot provide a Sandbox template.\");\n }\n }\n return {\n name: def.name,\n kind: \"sandbox\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n ...(def.sandbox === undefined ? {} : { sandbox: def.sandbox }),\n ensure,\n installers: def.installers ?? [],\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeSandboxAgent(def: Omit<SandboxAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalSandboxAgentDefinition): SandboxAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineSandboxAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (_sandbox, context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (_sandbox, context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send: send as InternalDirectAgentDefinition[\"send\"],\n sandboxSetup: setup,\n sandboxTeardown: teardown,\n });\n}\n/** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */\nexport function defineAgent(def: DirectAgentDef): DirectAgent {\n if (!def.name)\n throw new Error(`defineAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineAgent\");\n return {\n name: def.name,\n kind: \"direct\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n setup: def.setup,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n teardown: def.teardown,\n };\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeDirectAgent(def: Omit<DirectAgentDef, \"send\" | \"setup\" | \"teardown\"> & InternalDirectAgentDefinition): DirectAgent {\n const { send, setup, teardown, ...publicDefinition } = def;\n const agent = defineAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(setup === undefined ? {} : {\n setup: effectAgentCallback(setup, (context) => context.signal),\n }),\n ...(teardown === undefined ? {} : {\n teardown: effectAgentCallback(teardown, (context) => context.signal),\n }),\n });\n return registerAgentEffectRuntime(agent, {\n send,\n directSetup: setup,\n directTeardown: teardown,\n });\n}\n/** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */\nexport function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<\"pass\", TestContext, Sandbox> {\n return defineEvalForContext(\"pass\", def);\n}\n/**\n * 计分制 eval:Fact verdict uses 与 Fact score uses 可以读取同一份证据;正常返回由 Runner\n * 自动关闭计分收集器。字段与 `defineEval` 同形,禁止提供 id,由发现期推导。\n */\nexport function defineScoreEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: ScoreEvalInput<Sandbox>): EvalDefinition<\"score\", ScoreTestContext, Sandbox> {\n return defineEvalForContext(\"score\", def);\n}\ntype EvalFactoryInput<Sandbox extends SandboxLayer | undefined> = Omit<EvalInput<Sandbox> | ScoreEvalInput<Sandbox>, \"test\"> & {\n readonly test: (...args: never[]) => ReturnType<EvalDefinition<\"pass\", unknown, Sandbox>[\"test\"]>;\n};\n/** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */\n// @concord-code ne-surface-define-eval-context\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineEvalForContext<Kind extends \"pass\" | \"score\", Context, const Sandbox extends SandboxLayer | undefined = undefined>(kind: Kind, def: EvalFactoryInput<Sandbox>, internalFields: Readonly<Record<PropertyKey, unknown>> = {}): EvalDefinition<Kind, Context, Sandbox> {\n const factory = kind === \"pass\" ? \"defineEval\" : \"defineScoreEval\";\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`${factory} does not accept id; ids are derived from file paths.`);\n }\n if (Object.hasOwn(def, \"evaluationKind\")) {\n throw new Error(`${factory} does not accept evaluationKind; it is always set to ${JSON.stringify(kind)}.`);\n }\n if (Object.hasOwn(def, \"configHash\")) {\n throw new Error(`${factory} does not accept configHash; configHash is computed during run planning.`);\n }\n if (typeof def.test !== \"function\") {\n throw new Error(`${factory} requires an async test(t) function.`);\n }\n assertSandboxLayer(def.sandbox, factory);\n const result = brandEvalDefinition({\n ...normalizeEvalFields(def),\n ...internalFields,\n evaluationKind: kind,\n test: def.test,\n });\n if (kind === \"score\")\n definedScoreEvals.add(result);\n return result as EvalDefinition<Kind, Context, Sandbox>;\n}\n/** 实验:可签入的运行配置(怎么跑这批 eval)。 */\nexport function defineExperiment<const A extends Adapter>(def: ExperimentInput<A>): ExperimentDefinition<A>;\n// @concord-code ne-surface-define-experiment\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineExperiment(def: Omit<ExperimentInput, \"flags\"> & {\n readonly flags?: unknown;\n}): ExperimentDefinition {\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);\n }\n if ((def.agent === undefined) === (def.adapter === undefined)) {\n throw new Error(`defineExperiment requires exactly one of agent or adapter.`);\n }\n const adapter = def.adapter ?? def.agent!;\n if (adapter.kind !== \"custom\" && def.models !== undefined) {\n throw new TypeError(\"Experiment models is only supported by custom Adapters.\");\n }\n const models = adapter.kind === \"custom\" ? normalizeModelSlots(def) : undefined;\n if (adapter.kind === \"custom\")\n assertRequiredModelSlots(adapter.requiredModelSlots, models, `Adapter \"${adapter.name}\"`);\n const judgeRuntime = def.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judgeRuntime, \"defineExperiment() judgeRuntime\");\n assertSandboxLayer(def.sandbox, \"defineExperiment\");\n if (adapter.kind === \"custom\") {\n if (def.sandbox !== undefined || def.sandboxReuse === true || def.sandboxCache !== undefined) {\n throw new Error(`Custom Adapter experiments do not support sandbox, sandboxReuse, or sandboxCache.`);\n }\n if (def.budget !== undefined) {\n throw new Error(`Custom Adapter experiments do not support budget because Adapter usage is not collected.`);\n }\n }\n // setup 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.setup);\n // 传成非函数(如误把 sandbox 钩子对象塞进来)在解析时就报,不等到调度才炸。\n if (def.setup !== undefined && typeof def.setup !== \"function\") {\n throw new Error(`experiment.setup must be a function ((ctx) => void); use experiment.teardown for cleanup; to prepare the in-sandbox environment per experiment, chain .setup() hooks on the sandbox spec instead.`);\n }\n // teardown 与 setup 是同一个 Experiment lifecycle 边界。非函数值绝不能\n // 伪装成已声明的 cleanup,否则 explicit sharedState recovery 可能在没有\n // 执行补偿的情况下释放 immutable owner generation。\n if (def.teardown !== undefined && typeof def.teardown !== \"function\") {\n throw new Error(`Experiment teardown must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);\n }\n // classifyFailure 是失败分类链上的实验通道(见 runner/types.ts 的 ExperimentDef.classifyFailure):\n // 传成非函数在解析时就报,不等到某条 attempt 撞死才发现这一路声明白写。\n if (def.classifyFailure !== undefined && typeof def.classifyFailure !== \"function\") {\n throw new Error(`experiment.classifyFailure must be a function ((failure) => FailureClass | undefined); it classifies failures that surface as third-party errors and must return undefined for anything it does not recognize.`);\n }\n // labels 是报告归类坐标(进 ExperimentRunInfo.labels,不透传 ctx/t):值域 string | number,\n // 解析时即校验,布尔 / 对象 / NaN 直接报错,不等到落盘或报告分组才炸。\n if (def.labels !== undefined) {\n for (const [key, value] of Object.entries(def.labels)) {\n const ok = typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n if (!ok)\n throw new Error(`experiment.labels.${key} must be a string or a finite number; labels are report-side grouping coordinates persisted verbatim into result runs.`);\n }\n }\n const sharedState = normalizeSharedState(def.sharedState);\n const sandboxCache = normalizeSandboxCache(def.sandboxCache, \"defineExperiment\");\n const { id: _derivedId, agent: _agent, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;\n const flags = decodeExperimentFlags(def.flags === undefined ? {} : def.flags);\n return brandExperimentDefinition({\n ...author,\n ...(models === undefined ? {} : {\n models,\n model: models.default?.model ?? undefined,\n reasoningEffort: models.default?.reasoningEffort ?? undefined,\n }),\n adapter,\n ...(adapter.kind === \"custom\" ? {} : { agent: adapter }),\n flags: adapter.kind === \"custom\" && adapter.parseFlags !== undefined\n ? parseAdapterFlags(adapter.parseFlags, flags)\n : flags,\n labels: Object.freeze({ ...(def.labels ?? {}) }),\n attempts: def.attempts ?? 1,\n earlyExit: def.earlyExit ?? false,\n evals: Array.isArray(def.evals) ? Object.freeze([...def.evals]) : (def.evals ?? \"*\"),\n sandboxReuse: def.sandboxReuse === true,\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n ...(sharedState === undefined ? {} : { sharedState }),\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n plugins: normalizePlugins(def.plugins ?? [], \"defineExperiment plugins\", \"experiment\"),\n });\n}\nfunction normalizeSandboxCache(value: unknown, factory: \"defineConfig\" | \"defineExperiment\"): SandboxCacheConfig | undefined {\n if (value === undefined)\n return undefined;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n const keys = Object.keys(value);\n const setup = Reflect.get(value, \"setup\");\n if (keys.some((key) => key !== \"setup\") ||\n (setup !== undefined && setup !== \"use\" && setup !== \"bypass\")) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional setup \"use\" or \"bypass\".`);\n }\n return Object.freeze(setup === undefined ? {} : { setup });\n}\nconst SharedStateKeyPattern = /^[a-z0-9][a-z0-9._/-]{0,127}$/u;\nfunction normalizeSharedState(value: unknown): SharedStateConfig | undefined {\n if (value === undefined)\n return undefined;\n const candidate = value as {\n key?: unknown;\n };\n if (typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n !Object.hasOwn(value, \"key\") ||\n Object.keys(value).length !== 1 ||\n typeof candidate.key !== \"string\" ||\n !SharedStateKeyPattern.test(candidate.key)) {\n throw new TypeError(`experiment.sharedState must be exactly { key }, where key is a stable, non-secret string matching [a-z0-9][a-z0-9._/-]{0,127}.`);\n }\n return Object.freeze({ key: candidate.key });\n}\nfunction normalizeEvalFields<const Sandbox extends SandboxLayer | undefined>(def: EvalInput<Sandbox> | ScoreEvalInput<Sandbox>): EvalDefinitionFields<Sandbox> {\n const judge = def.judge === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judge, \"defineEval() judge\");\n return {\n ...(def.description !== undefined ? { description: def.description } : {}),\n tags: Object.freeze([...(def.tags ?? [])]),\n ...(def.sandbox !== undefined ? { sandbox: def.sandbox } : {}),\n plugins: normalizePlugins(def.plugins ?? [], \"defineEval plugins\", \"eval\"),\n ...(judge !== undefined ? { judge } : {}),\n reporters: Object.freeze([...(def.reporters ?? [])]),\n ...(def.timeoutMs !== undefined ? { timeoutMs: def.timeoutMs } : {}),\n metadata: decodeJsonRecord(def.metadata ?? {}, \"Eval metadata\"),\n diff: Object.freeze({\n include: Object.freeze([...(def.diff?.include ?? [])]),\n ignore: Object.freeze([...(def.diff?.ignore ?? [])]),\n }),\n };\n}\n// @concord-code ne-surface-normalize-plugins\n// @concord-implements docs/feature/plugins/library.md\nfunction normalizePlugins<Owner extends PluginOwner>(value: readonly PluginInstance<Owner>[], label: string, owner: Owner): readonly PluginInstance<Owner>[] {\n if (!Array.isArray(value))\n throw new TypeError(`${label} must be an array.`);\n return Object.freeze(value.map((plugin, index) => {\n if (!isPluginInstance(plugin))\n throw new TypeError(`${label}[${index}] must be created by definePlugin().`);\n if (pluginInstanceDataOf(plugin)[owner] === undefined) {\n throw new TypeError(`${label}[${index}] does not support ${owner} attachment.`);\n }\n return plugin;\n }));\n}\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\")\n return true;\n if (typeof value === \"number\")\n return Number.isFinite(value);\n if (Array.isArray(value))\n return value.every(isJsonValue);\n if (typeof value !== \"object\")\n return false;\n return Object.values(value).every(isJsonValue);\n}\nconst JsonValueSchema = Schema.declare<JsonValue>(isJsonValue);\nconst JsonRecordSchema = Schema.Record(Schema.String, JsonValueSchema);\nfunction deepFreezeJson(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n const items: JsonValue[] = value.map(deepFreezeJson);\n Object.freeze(items);\n return items;\n }\n if (value !== null && typeof value === \"object\") {\n const record: globalThis.Record<string, JsonValue> = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, deepFreezeJson(child)]));\n Object.freeze(record);\n return record;\n }\n return value;\n}\nfunction decodeJsonRecord(value: unknown, label: string): Readonly<globalThis.Record<string, JsonValue>> {\n const decoded = Schema.decodeUnknownResult(JsonRecordSchema, { errors: \"all\" })(value);\n if (Result.isFailure(decoded))\n throw new TypeError(`${label} must be JSON-compatible: ${String(decoded.failure)}`);\n return Object.freeze(Object.fromEntries(Object.entries(decoded.success).map(([key, child]) => [key, deepFreezeJson(child)])));\n}\n/**\n * `SandboxLayer` 的品牌只由 `niceeval/sandbox` 工厂写入。动态 TSX/JS 调用绕过静态类型时,\n * 不接受看似相同的裸对象,以免在 linker 阶段才得到难以定位的错误。\n */\nfunction assertSandboxLayer(value: unknown, factory: string): void {\n if (value !== undefined && !isSandboxLayer(value)) {\n throw new TypeError(`${factory} sandbox must be a SandboxLayer created by a niceeval/sandbox factory (for example dockerSandbox(), dockerComposeSandbox(), e2bSandbox(), or vercelSandbox()).`);\n }\n}\n/** 项目级配置。 */\nexport function defineConfig(config: Config): Config {\n const sandboxCache = normalizeSandboxCache(config.sandboxCache, \"defineConfig\");\n const judgeRuntime = config.judgeRuntime === undefined\n ? undefined\n : normalizeDefinitionJudge(config.judgeRuntime, \"defineConfig() judgeRuntime\");\n if (judgeRuntime !== undefined && !isJudgeProvider(judgeRuntime)) {\n throw new TypeError(\"defineConfig() judgeRuntime must be a Judge Provider created by niceeval/judge\");\n }\n return Object.freeze({\n ...config,\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n ...(judgeRuntime === undefined ? {} : { judgeRuntime }),\n });\n}\n/**\n * 自定义沙箱 provider:`create` 直接返回一个实现 `Sandbox` 接口的实例,不需要 niceeval 内置支持\n * 这个 provider 名字。用于接入 docker/vercel/e2b 之外的运行环境(自建 VM、Modal、Fly 等)。\n */\nexport function defineSandbox(def: CustomProviderSandboxOptions): SandboxLayer<\"template-bearing\"> {\n return customProviderSandbox(def);\n}\n"]}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["define.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file\n// @concord-implements docs/feature/plugins/library.md\nimport type { Adapter } from \"./adapter.ts\";\nimport { assertRequiredModelRoles, normalizeModelRoles } from \"./model-roles.ts\";\nimport { parseAdapterFlags } from \"./adapter-flags.ts\";\nimport { decodeExperimentFlags } from \"./experiment/flags.ts\";\n// 定义入口:把用户对象规格化成核心认得的形状。路径即身份 —— 这里禁止手写 id,\n// 由发现阶段从文件路径推导(见 runner/discover.ts)。\nimport type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, EvalDefinitionFields, ExperimentDefinition, ExperimentInput, SharedStateConfig, SandboxCacheConfig, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext, JsonValue, } from \"./types.ts\";\nimport { normalizeJudgeSelection } from \"./runner/judge-config.ts\";\nimport { isJudgeProvider } from \"./judge/provider.ts\";\nimport { MigrationRequiredError, captureMigrationSource } from \"./error-assistance/index.ts\";\nimport { brandEvalDefinition, brandEvalGroupDefinition, brandExperimentDefinition, isEvalDefinition, } from \"./types.ts\";\nimport { customProviderSandbox, isSandboxLayer, sandboxLayerStateOf, type CustomProviderSandboxOptions, type SandboxLayer, } from \"./sandbox/layer.ts\";\nimport { Result, Schema } from \"effect\";\nimport { assertEvidenceCoverage } from \"./assertions/coverage.ts\";\nimport { effectAgentCallback, attachAgentEffects, authorCallbackEffect, type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition, } from \"./agents/agent-effects.ts\";\nimport { isPluginInstance, assertPluginOwner, type PluginInstance, type PluginOwner } from \"./plugin/contracts.ts\";\n/** Recognize only the retired flat configuration, without evaluating getters. */\nfunction normalizeDefinitionJudge(value: unknown, label: string) {\n if (!isJudgeProvider(value) && typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const prototype = Object.getPrototypeOf(value);\n const legacyKeys = [\"model\", \"baseUrl\", \"apiKeyEnv\", \"timeoutMs\", \"maxOutputTokens\"];\n if ((prototype === Object.prototype || prototype === null) && Reflect.ownKeys(value).every((key) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && legacyKeys.includes(key) && descriptor !== undefined && \"value\" in descriptor;\n })) {\n throw new MigrationRequiredError({ occurrences: [{\n guideId: \"judge-provider\",\n subject: label.replace(\"() \", \".\"),\n source: captureMigrationSource(),\n }] });\n }\n }\n return normalizeJudgeSelection(value, label);\n}\n// 发现期必须区分 defineScoreEval 的真正产物与运行时手写 `{ evaluationKind: \"score\" }` 的裸对象。\n// WeakSet 是模块私有来源证明;Definition 本身另有 types.ts 的私有 symbol 品牌供类型层使用。\nconst definedScoreEvals = new WeakSet<object>();\n/** Define a closed set of real Eval definitions sharing one physical Sandbox. */\nexport function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition {\n if (!Array.isArray(input.evals) || input.evals.length === 0) {\n throw new TypeError(\"defineEvalGroup evals must be a non-empty array of defineEval()/defineScoreEval() definitions.\");\n }\n input.evals.forEach((member, index) => {\n if (!isEvalDefinition(member)) {\n throw new TypeError(`defineEvalGroup evals[${index}] must be the object returned by defineEval() or defineScoreEval().`);\n }\n });\n assertSandboxLayer(input.sandbox, \"defineEvalGroup\");\n if (input.onUnavailable !== \"stop-group\" && input.onUnavailable !== \"replace-sandbox\") {\n throw new TypeError(\"defineEvalGroup onUnavailable must be \\\"stop-group\\\" or \\\"replace-sandbox\\\".\");\n }\n const [first, ...rest] = input.evals;\n return brandEvalGroupDefinition({\n evals: Object.freeze([first, ...rest]),\n onUnavailable: input.onUnavailable,\n ...(input.sandbox ? { sandbox: input.sandbox } : {}),\n ...(input.plugins === undefined ? {} : { plugins: normalizePlugins(input.plugins, \"defineEvalGroup plugins\", \"group\") }),\n });\n}\n/** @internal 仅供 discoverEvals 验证 score 题型来源。 */\nexport function isDefinedScoreEval(value: object): boolean {\n return definedScoreEvals.has(value);\n}\nfunction assertAuthorLifecycleNames(def: object, owner: string): void {\n for (const [previous, current] of [[\"setup\", \"before\"], [\"teardown\", \"after\"]] as const) {\n if (Object.hasOwn(def, previous))\n throw new TypeError(`${owner}.${previous} is no longer supported; use ${current}.`);\n }\n}\n/** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */\nexport function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent {\n assertAuthorLifecycleNames(def, \"Agent\");\n if (!def.name)\n throw new Error(`defineSandboxAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineSandboxAgent\");\n if (def.ensure === undefined)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n const ensure = Array.isArray(def.ensure) ? def.ensure : [def.ensure];\n if (ensure.length === 0)\n throw new Error(`defineSandboxAgent requires an ensure declaration.`);\n if (def.sandbox !== undefined) {\n if (!isSandboxLayer(def.sandbox)) {\n throw new TypeError(\"defineSandboxAgent sandbox must be a SandboxLayer created by sandboxLayer().\");\n }\n if (sandboxLayerStateOf(def.sandbox).kind !== \"command-only\") {\n throw new TypeError(\"defineSandboxAgent sandbox must be command-only; an Agent cannot provide a Sandbox template.\");\n }\n }\n const agent: SandboxAgent = {\n name: def.name,\n kind: \"sandbox\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n ...(def.sandbox === undefined ? {} : { sandbox: def.sandbox }),\n ensure,\n installers: def.installers ?? [],\n before: def.before,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n after: def.after,\n };\n return attachAgentEffects(agent, {\n send: (input, context) => authorCallbackEffect(() => def.send(input, context)),\n before: def.before === undefined ? undefined : (sandbox, context) => authorCallbackEffect(() => def.before!(sandbox, context)),\n after: def.after === undefined ? undefined : (sandbox, context) => authorCallbackEffect(() => def.after!(sandbox, { ...context, sandbox })),\n });\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeSandboxAgent(def: Omit<SandboxAgentDef, \"send\" | \"before\" | \"after\"> & InternalSandboxAgentDefinition): SandboxAgent {\n const { send, before, after, ...publicDefinition } = def;\n const agent = defineSandboxAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(before === undefined ? {} : {\n before: effectAgentCallback(before, (_sandbox, context) => context.signal),\n }),\n ...(after === undefined ? {} : {\n after: effectAgentCallback(after, (_sandbox, context) => context.signal),\n }),\n });\n return attachAgentEffects(agent, {\n send,\n before,\n after,\n });\n}\n/** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */\nexport function defineAgent(def: DirectAgentDef): DirectAgent {\n assertAuthorLifecycleNames(def, \"Agent\");\n if (!def.name)\n throw new Error(`defineAgent requires name.`);\n assertEvidenceCoverage(def.evidenceCoverage, \"defineAgent\");\n const agent: DirectAgent = {\n name: def.name,\n kind: \"direct\",\n defineEval,\n defineScoreEval,\n evidenceCoverage: def.evidenceCoverage,\n before: def.before,\n tracing: def.tracing,\n spanMapper: def.spanMapper,\n send: def.send,\n classifySendFailure: def.classifySendFailure,\n after: def.after,\n };\n return attachAgentEffects(agent, {\n send: (input, context) => authorCallbackEffect(() => def.send(input, context)),\n before: def.before === undefined ? undefined : (_sandbox, context) => authorCallbackEffect(() => def.before!(context)),\n after: def.after === undefined ? undefined : (_sandbox, context) => authorCallbackEffect(() => def.after!(context)),\n });\n}\n/** @internal Creates a Promise facade while retaining a built-in Effect runtime. */\nexport function makeDirectAgent(def: Omit<DirectAgentDef, \"send\" | \"before\" | \"after\"> & InternalDirectAgentDefinition): DirectAgent {\n const { send, before, after, ...publicDefinition } = def;\n const agent = defineAgent({\n ...publicDefinition,\n send: effectAgentCallback(send, (_input, context) => context.signal),\n ...(before === undefined ? {} : {\n before: effectAgentCallback(before, (context) => context.signal),\n }),\n ...(after === undefined ? {} : {\n after: effectAgentCallback(after, (context) => context.signal),\n }),\n });\n return attachAgentEffects(agent, {\n send,\n before: before === undefined ? undefined : (_sandbox, context) => before(context),\n after: after === undefined ? undefined : (_sandbox, context) => after(context),\n });\n}\n/** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */\nexport function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<\"pass\", TestContext, Sandbox> {\n return defineEvalForContext(\"pass\", def);\n}\n/**\n * 计分制 eval:Fact verdict uses 与 Fact score uses 可以读取同一份证据;正常返回由 Runner\n * 自动关闭计分收集器。字段与 `defineEval` 同形,禁止提供 id,由发现期推导。\n */\nexport function defineScoreEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: ScoreEvalInput<Sandbox>): EvalDefinition<\"score\", ScoreTestContext, Sandbox> {\n return defineEvalForContext(\"score\", def);\n}\ntype EvalFactoryInput<Sandbox extends SandboxLayer | undefined> = Omit<EvalInput<Sandbox> | ScoreEvalInput<Sandbox>, \"test\"> & {\n readonly test: (...args: never[]) => ReturnType<EvalDefinition<\"pass\", unknown, Sandbox>[\"test\"]>;\n};\n/** @internal Shared normalization and provenance path for root and Adapter-bound Eval factories. */\n// @concord-code\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineEvalForContext<Kind extends \"pass\" | \"score\", Context, const Sandbox extends SandboxLayer | undefined = undefined>(kind: Kind, def: EvalFactoryInput<Sandbox>, internalFields: Readonly<Record<PropertyKey, unknown>> = {}): EvalDefinition<Kind, Context, Sandbox> {\n const factory = kind === \"pass\" ? \"defineEval\" : \"defineScoreEval\";\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`${factory} does not accept id; ids are derived from file paths.`);\n }\n if (Object.hasOwn(def, \"evaluationKind\")) {\n throw new Error(`${factory} does not accept evaluationKind; it is always set to ${JSON.stringify(kind)}.`);\n }\n if (Object.hasOwn(def, \"configHash\")) {\n throw new Error(`${factory} does not accept configHash; configHash is computed during run planning.`);\n }\n if (typeof def.test !== \"function\") {\n throw new Error(`${factory} requires an async test(t) function.`);\n }\n assertSandboxLayer(def.sandbox, factory);\n const result = brandEvalDefinition({\n ...normalizeEvalFields(def),\n ...internalFields,\n evaluationKind: kind,\n test: def.test,\n });\n if (kind === \"score\")\n definedScoreEvals.add(result);\n return result as EvalDefinition<Kind, Context, Sandbox>;\n}\n/** 实验:可签入的运行配置(怎么跑这批 eval)。 */\nexport function defineExperiment<const A extends Adapter>(def: ExperimentInput<A>): ExperimentDefinition<A>;\n// @concord-code\n// @concord-implements docs/feature/compile-time-contracts/use-case/three-levels.md\nexport function defineExperiment(def: Omit<ExperimentInput, \"flags\"> & {\n readonly flags?: unknown;\n}): ExperimentDefinition {\n rejectRemovedField(def, \"judgeRuntime\", \"Use judge.\");\n rejectRemovedField(def, \"classifyFailure\", \"Use built-in failure classification or ExperimentFatalError / EvalFatalError.\");\n rejectRemovedField(def, \"agent\", \"Use adapter to select the tested Agent or Adapter.\");\n if (Object.hasOwn(def, \"id\")) {\n throw new Error(`defineExperiment does not accept id; ids are derived from file paths.`);\n }\n if (def.adapter === undefined) {\n throw new Error(`defineExperiment requires adapter.`);\n }\n const adapter = def.adapter;\n if (adapter.kind !== \"custom\" && def.models !== undefined) {\n throw new TypeError(\"Experiment models is only supported by custom Adapters.\");\n }\n const models = adapter.kind === \"custom\" ? normalizeModelRoles(def) : undefined;\n if (adapter.kind === \"custom\")\n assertRequiredModelRoles(adapter.requiredModelRoles, models, `Adapter \"${adapter.name}\"`);\n const judge = def.judge === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judge, \"defineExperiment() judge\");\n assertSandboxLayer(def.sandbox, \"defineExperiment\");\n if (adapter.kind === \"custom\") {\n if (def.sandbox !== undefined || def.sandboxReuse === true || def.sandboxCache !== undefined) {\n throw new Error(`Custom Adapter experiments do not support sandbox, sandboxReuse, or sandboxCache.`);\n }\n if (def.budget !== undefined) {\n throw new Error(`Custom Adapter experiments do not support budget because Adapter usage is not collected.`);\n }\n }\n assertAuthorLifecycleNames(def, \"Experiment\");\n // before 是实验级生命周期钩子(整场一次,宿主机侧,见 runner/types.ts 的 ExperimentDef.before);\n // 传成非函数(如误把 sandbox 钩子对象塞进来)在解析时就报,不等到调度才炸。\n if (def.before !== undefined && typeof def.before !== \"function\") {\n throw new Error(`experiment.before must be a function ((ctx) => void); use experiment.after for cleanup; to prepare the in-sandbox environment per experiment, chain .before() hooks on the sandbox spec instead.`);\n }\n // teardown 与 setup 是同一个 Experiment lifecycle 边界。非函数值绝不能\n // 伪装成已声明的 cleanup,否则 explicit sharedState recovery 可能在没有\n // 执行补偿的情况下释放 immutable owner generation。\n if (def.after !== undefined && typeof def.after !== \"function\") {\n throw new Error(`Experiment after must be a function ((ctx) => void); use a function-valued paired lifecycle hook so normal cleanup and explicit sharedState recovery can both execute it.`);\n }\n // labels 是报告归类坐标(进 ExperimentRunInfo.labels,不透传 ctx/t):值域 string | number,\n // 解析时即校验,布尔 / 对象 / NaN 直接报错,不等到落盘或报告分组才炸。\n if (def.labels !== undefined) {\n for (const [key, value] of Object.entries(def.labels)) {\n const ok = typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n if (!ok)\n throw new Error(`experiment.labels.${key} must be a string or a finite number; labels are report-side grouping coordinates persisted verbatim into result runs.`);\n }\n }\n const sharedState = normalizeSharedState(def.sharedState);\n const sandboxCache = normalizeSandboxCache(def.sandboxCache, \"defineExperiment\");\n const { id: _derivedId, adapter: _adapter, sharedState: _sharedState, sandboxCache: _sandboxCache, models: _models, ...author } = def;\n const flags = decodeExperimentFlags(def.flags === undefined ? {} : def.flags);\n return brandExperimentDefinition({\n ...author,\n ...(models === undefined ? {} : {\n models,\n model: models.default?.model ?? undefined,\n reasoningEffort: models.default?.reasoningEffort ?? undefined,\n }),\n adapter,\n flags: adapter.kind === \"custom\" && adapter.parseFlags !== undefined\n ? parseAdapterFlags(adapter.parseFlags, flags)\n : flags,\n labels: Object.freeze({ ...(def.labels ?? {}) }),\n attempts: def.attempts ?? 1,\n earlyExit: def.earlyExit ?? false,\n evals: Array.isArray(def.evals) ? Object.freeze([...def.evals]) : (def.evals ?? \"*\"),\n sandboxReuse: def.sandboxReuse === true,\n ...(judge === undefined ? {} : { judge }),\n ...(sharedState === undefined ? {} : { sharedState }),\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n plugins: normalizePlugins(def.plugins ?? [], \"defineExperiment plugins\", \"experiment\"),\n });\n}\nfunction normalizeSandboxCache(value: unknown, factory: \"defineConfig\" | \"defineExperiment\"): SandboxCacheConfig | undefined {\n if (value === undefined)\n return undefined;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional before \"use\" or \"bypass\".`);\n }\n if (Object.hasOwn(value, \"setup\"))\n throw new TypeError(`${factory} sandboxCache.setup is no longer supported. Use sandboxCache.before.`);\n const keys = Object.keys(value);\n const before = Reflect.get(value, \"before\");\n if (keys.some((key) => key !== \"before\") ||\n (before !== undefined && before !== \"use\" && before !== \"bypass\")) {\n throw new TypeError(`${factory} sandboxCache must be an object with optional before \"use\" or \"bypass\".`);\n }\n return Object.freeze(before === undefined ? {} : { before });\n}\nconst SharedStateKeyPattern = /^[a-z0-9][a-z0-9._/-]{0,127}$/u;\nfunction normalizeSharedState(value: unknown): SharedStateConfig | undefined {\n if (value === undefined)\n return undefined;\n const candidate = value as {\n key?: unknown;\n };\n if (typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n !Object.hasOwn(value, \"key\") ||\n Object.keys(value).length !== 1 ||\n typeof candidate.key !== \"string\" ||\n !SharedStateKeyPattern.test(candidate.key)) {\n throw new TypeError(`experiment.sharedState must be exactly { key }, where key is a stable, non-secret string matching [a-z0-9][a-z0-9._/-]{0,127}.`);\n }\n return Object.freeze({ key: candidate.key });\n}\nfunction normalizeEvalFields<const Sandbox extends SandboxLayer | undefined>(def: EvalInput<Sandbox> | ScoreEvalInput<Sandbox>): EvalDefinitionFields<Sandbox> {\n rejectRemovedField(def, \"reporters\", \"Use Config.reporters for project-level reporting.\");\n const judge = def.judge === undefined\n ? undefined\n : normalizeDefinitionJudge(def.judge, \"defineEval() judge\");\n return {\n ...(def.description !== undefined ? { description: def.description } : {}),\n tags: Object.freeze([...(def.tags ?? [])]),\n ...(def.sandbox !== undefined ? { sandbox: def.sandbox } : {}),\n plugins: normalizePlugins(def.plugins ?? [], \"defineEval plugins\", \"eval\"),\n ...(judge !== undefined ? { judge } : {}),\n ...(def.timeoutMs !== undefined ? { timeoutMs: def.timeoutMs } : {}),\n metadata: decodeJsonRecord(def.metadata ?? {}, \"Eval metadata\"),\n diff: Object.freeze({\n include: Object.freeze([...(def.diff?.include ?? [])]),\n ignore: Object.freeze([...(def.diff?.ignore ?? [])]),\n }),\n };\n}\n// @concord-code\n// @concord-implements docs/feature/plugins/library.md\nfunction normalizePlugins<Owner extends PluginOwner>(value: readonly PluginInstance<Owner>[], label: string, owner: Owner): readonly PluginInstance<Owner>[] {\n if (!Array.isArray(value))\n throw new TypeError(`${label} must be an array.`);\n return Object.freeze(value.map((plugin, index) => {\n if (!isPluginInstance(plugin))\n throw new TypeError(`${label}[${index}] must be created by definePlugin().`);\n assertPluginOwner(plugin, owner, `${label}[${index}]`);\n return plugin;\n }));\n}\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\")\n return true;\n if (typeof value === \"number\")\n return Number.isFinite(value);\n if (Array.isArray(value))\n return value.every(isJsonValue);\n if (typeof value !== \"object\")\n return false;\n return Object.values(value).every(isJsonValue);\n}\nconst JsonValueSchema = Schema.declare<JsonValue>(isJsonValue);\nconst JsonRecordSchema = Schema.Record(Schema.String, JsonValueSchema);\nfunction deepFreezeJson(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n const items: JsonValue[] = value.map(deepFreezeJson);\n Object.freeze(items);\n return items;\n }\n if (value !== null && typeof value === \"object\") {\n const record: globalThis.Record<string, JsonValue> = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, deepFreezeJson(child)]));\n Object.freeze(record);\n return record;\n }\n return value;\n}\nfunction decodeJsonRecord(value: unknown, label: string): Readonly<globalThis.Record<string, JsonValue>> {\n const decoded = Schema.decodeUnknownResult(JsonRecordSchema, { errors: \"all\" })(value);\n if (Result.isFailure(decoded))\n throw new TypeError(`${label} must be JSON-compatible: ${String(decoded.failure)}`);\n return Object.freeze(Object.fromEntries(Object.entries(decoded.success).map(([key, child]) => [key, deepFreezeJson(child)])));\n}\n/**\n * `SandboxLayer` 的品牌只由 `niceeval/sandbox` 工厂写入。动态 TSX/JS 调用绕过静态类型时,\n * 不接受看似相同的裸对象,以免在 linker 阶段才得到难以定位的错误。\n */\nfunction assertSandboxLayer(value: unknown, factory: string): void {\n if (value !== undefined && !isSandboxLayer(value)) {\n throw new TypeError(`${factory} sandbox must be a SandboxLayer created by a niceeval/sandbox factory (for example dockerSandbox(), dockerComposeSandbox(), e2bSandbox(), or vercelSandbox()).`);\n }\n}\n/** 项目级配置。 */\nexport function defineConfig(config: Config): Config {\n rejectRemovedField(config, \"judgeRuntime\", \"Use judgeProvider.\");\n rejectRemovedField(config, \"maxSetupPrefixConcurrency\", \"Use maxBeforeCacheConcurrency.\");\n rejectRemovedField(config, \"workspace\", \"Use the project directory as the working directory.\");\n const sandboxCache = normalizeSandboxCache(config.sandboxCache, \"defineConfig\");\n const judgeProvider = config.judgeProvider === undefined\n ? undefined\n : normalizeDefinitionJudge(config.judgeProvider, \"defineConfig() judgeProvider\");\n if (judgeProvider !== undefined && !isJudgeProvider(judgeProvider)) {\n throw new TypeError(\"defineConfig() judgeProvider must be a Judge Provider created by niceeval/judge\");\n }\n return Object.freeze({\n ...config,\n ...(sandboxCache === undefined ? {} : { sandboxCache }),\n ...(judgeProvider === undefined ? {} : { judgeProvider }),\n });\n}\n/**\n * 自定义沙箱 provider:`create` 直接返回一个实现 `Sandbox` 接口的实例,不需要 niceeval 内置支持\n * 这个 provider 名字。用于接入 docker/vercel/e2b 之外的运行环境(自建 VM、Modal、Fly 等)。\n */\nexport function defineSandbox(def: CustomProviderSandboxOptions): SandboxLayer<\"template-bearing\"> {\n return customProviderSandbox(def);\n}\nfunction rejectRemovedField(value: object, field: string, replacement: string): void {\n if (Object.hasOwn(value, field))\n throw new TypeError(`${field} is no longer supported. ${replacement}`);\n}\n"]}
package/dist/define.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Adapter } from "./adapter.cjs";
2
2
  import type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, ExperimentDefinition, ExperimentInput, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext } from "./types.cjs";
3
3
  import { type CustomProviderSandboxOptions, type SandboxLayer } from "./sandbox/layer.cjs";
4
- import { type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition } from "./agents/effect-runtime.cjs";
4
+ import { type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition } from "./agents/agent-effects.cjs";
5
5
  /** Define a closed set of real Eval definitions sharing one physical Sandbox. */
6
6
  export declare function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition;
7
7
  /** @internal 仅供 discoverEvals 验证 score 题型来源。 */
@@ -9,11 +9,11 @@ export declare function isDefinedScoreEval(value: object): boolean;
9
9
  /** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */
10
10
  export declare function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent;
11
11
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
12
- export declare function makeSandboxAgent(def: Omit<SandboxAgentDef, "send" | "setup" | "teardown"> & InternalSandboxAgentDefinition): SandboxAgent;
12
+ export declare function makeSandboxAgent(def: Omit<SandboxAgentDef, "send" | "before" | "after"> & InternalSandboxAgentDefinition): SandboxAgent;
13
13
  /** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */
14
14
  export declare function defineAgent(def: DirectAgentDef): DirectAgent;
15
15
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
16
- export declare function makeDirectAgent(def: Omit<DirectAgentDef, "send" | "setup" | "teardown"> & InternalDirectAgentDefinition): DirectAgent;
16
+ export declare function makeDirectAgent(def: Omit<DirectAgentDef, "send" | "before" | "after"> & InternalDirectAgentDefinition): DirectAgent;
17
17
  /** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */
18
18
  export declare function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<"pass", TestContext, Sandbox>;
19
19
  /**
package/dist/define.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Adapter } from "./adapter.mjs";
2
2
  import type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, ExperimentDefinition, ExperimentInput, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext } from "./types.mjs";
3
3
  import { type CustomProviderSandboxOptions, type SandboxLayer } from "./sandbox/layer.mjs";
4
- import { type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition } from "./agents/effect-runtime.mjs";
4
+ import { type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition } from "./agents/agent-effects.mjs";
5
5
  /** Define a closed set of real Eval definitions sharing one physical Sandbox. */
6
6
  export declare function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition;
7
7
  /** @internal 仅供 discoverEvals 验证 score 题型来源。 */
@@ -9,11 +9,11 @@ export declare function isDefinedScoreEval(value: object): boolean;
9
9
  /** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */
10
10
  export declare function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent;
11
11
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
12
- export declare function makeSandboxAgent(def: Omit<SandboxAgentDef, "send" | "setup" | "teardown"> & InternalSandboxAgentDefinition): SandboxAgent;
12
+ export declare function makeSandboxAgent(def: Omit<SandboxAgentDef, "send" | "before" | "after"> & InternalSandboxAgentDefinition): SandboxAgent;
13
13
  /** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */
14
14
  export declare function defineAgent(def: DirectAgentDef): DirectAgent;
15
15
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
16
- export declare function makeDirectAgent(def: Omit<DirectAgentDef, "send" | "setup" | "teardown"> & InternalDirectAgentDefinition): DirectAgent;
16
+ export declare function makeDirectAgent(def: Omit<DirectAgentDef, "send" | "before" | "after"> & InternalDirectAgentDefinition): DirectAgent;
17
17
  /** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */
18
18
  export declare function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<"pass", TestContext, Sandbox>;
19
19
  /**
package/dist/define.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Adapter } from "./adapter.js";
2
2
  import type { DirectAgent, DirectAgentDef, Config, EvalInput, EvalGroupDefinition, EvalGroupInput, EvalDefinition, ExperimentDefinition, ExperimentInput, SandboxAgent, SandboxAgentDef, ScoreEvalInput, ScoreTestContext, TestContext } from "./types.js";
3
3
  import { type CustomProviderSandboxOptions, type SandboxLayer } from "./sandbox/layer.js";
4
- import { type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition } from "./agents/effect-runtime.js";
4
+ import { type InternalDirectAgentDefinition, type InternalSandboxAgentDefinition } from "./agents/agent-effects.js";
5
5
  /** Define a closed set of real Eval definitions sharing one physical Sandbox. */
6
6
  export declare function defineEvalGroup<const Sandbox extends SandboxLayer | undefined>(input: EvalGroupInput<Sandbox>): EvalGroupDefinition;
7
7
  /** @internal 仅供 discoverEvals 验证 score 题型来源。 */
@@ -9,11 +9,11 @@ export declare function isDefinedScoreEval(value: object): boolean;
9
9
  /** 沙箱型 agent:在沙箱里 spawn 一个 coding agent 的 CLI,跑完读回 transcript。 */
10
10
  export declare function defineSandboxAgent(def: SandboxAgentDef): SandboxAgent;
11
11
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
12
- export declare function makeSandboxAgent(def: Omit<SandboxAgentDef, "send" | "setup" | "teardown"> & InternalSandboxAgentDefinition): SandboxAgent;
12
+ export declare function makeSandboxAgent(def: Omit<SandboxAgentDef, "send" | "before" | "after"> & InternalSandboxAgentDefinition): SandboxAgent;
13
13
  /** Direct Agent:在 send 里直接驱动函数、SDK 或服务端点。 */
14
14
  export declare function defineAgent(def: DirectAgentDef): DirectAgent;
15
15
  /** @internal Creates a Promise facade while retaining a built-in Effect runtime. */
16
- export declare function makeDirectAgent(def: Omit<DirectAgentDef, "send" | "setup" | "teardown"> & InternalDirectAgentDefinition): DirectAgent;
16
+ export declare function makeDirectAgent(def: Omit<DirectAgentDef, "send" | "before" | "after"> & InternalDirectAgentDefinition): DirectAgent;
17
17
  /** 会话型 eval(通过制:一个 eval 折叠成一分)。禁止提供 id —— 从路径推导。 */
18
18
  export declare function defineEval<const Sandbox extends SandboxLayer | undefined = undefined>(def: EvalInput<Sandbox>): EvalDefinition<"pass", TestContext, Sandbox>;
19
19
  /**