niceeval 0.17.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (692) hide show
  1. package/INDEX.md +5 -2
  2. package/dist/adapter-usage.cjs.map +1 -1
  3. package/dist/adapter-usage.d.cts +1 -1
  4. package/dist/adapter-usage.d.mts +1 -1
  5. package/dist/adapter-usage.d.ts +1 -1
  6. package/dist/adapter.cjs +8 -3
  7. package/dist/adapter.cjs.map +1 -1
  8. package/dist/adapter.d.cts +26 -15
  9. package/dist/adapter.d.mts +26 -15
  10. package/dist/adapter.d.ts +26 -15
  11. package/dist/agents/{effect-runtime.cjs → agent-effects.cjs} +12 -18
  12. package/dist/agents/agent-effects.cjs.map +1 -0
  13. package/dist/agents/agent-effects.d.cts +23 -0
  14. package/dist/agents/agent-effects.d.mts +23 -0
  15. package/dist/agents/agent-effects.d.ts +23 -0
  16. package/dist/agents/agent-effects.js +16 -0
  17. package/dist/agents/agent-effects.js.map +1 -0
  18. package/dist/agents/ai-sdk.cjs +1 -1
  19. package/dist/agents/ai-sdk.cjs.map +1 -1
  20. package/dist/agents/bub.cjs +31 -18
  21. package/dist/agents/bub.cjs.map +1 -1
  22. package/dist/agents/bub.d.cts +9 -12
  23. package/dist/agents/bub.d.mts +9 -12
  24. package/dist/agents/bub.d.ts +9 -12
  25. package/dist/agents/claude-code-native.cjs +2 -2
  26. package/dist/agents/claude-code-native.cjs.map +1 -1
  27. package/dist/agents/claude-code.cjs +17 -11
  28. package/dist/agents/claude-code.cjs.map +1 -1
  29. package/dist/agents/claude-code.d.cts +11 -11
  30. package/dist/agents/claude-code.d.mts +11 -11
  31. package/dist/agents/claude-code.d.ts +11 -11
  32. package/dist/agents/codex-app-server.cjs +2 -2
  33. package/dist/agents/codex-app-server.cjs.map +1 -1
  34. package/dist/agents/codex.cjs +18 -12
  35. package/dist/agents/codex.cjs.map +1 -1
  36. package/dist/agents/codex.d.cts +12 -12
  37. package/dist/agents/codex.d.mts +12 -12
  38. package/dist/agents/codex.d.ts +12 -12
  39. package/dist/agents/deepseek-harness.cjs +2 -2
  40. package/dist/agents/deepseek-harness.cjs.map +1 -1
  41. package/dist/agents/hermes.cjs +3 -3
  42. package/dist/agents/hermes.cjs.map +1 -1
  43. package/dist/agents/index.cjs +3 -3
  44. package/dist/agents/index.cjs.map +1 -1
  45. package/dist/agents/index.d.cts +3 -3
  46. package/dist/agents/index.d.mts +3 -3
  47. package/dist/agents/index.d.ts +3 -3
  48. package/dist/agents/index.js +2 -2
  49. package/dist/agents/index.mjs +2 -2
  50. package/dist/agents/mcp.cjs.map +1 -1
  51. package/dist/agents/mcp.d.cts +2 -2
  52. package/dist/agents/mcp.d.mts +2 -2
  53. package/dist/agents/mcp.d.ts +2 -2
  54. package/dist/agents/omp.cjs +2 -2
  55. package/dist/agents/omp.cjs.map +1 -1
  56. package/dist/agents/openai-compat.cjs +2 -2
  57. package/dist/agents/openai-compat.cjs.map +1 -1
  58. package/dist/agents/openclaw.cjs +3 -3
  59. package/dist/agents/openclaw.cjs.map +1 -1
  60. package/dist/agents/opencode.cjs +16 -4
  61. package/dist/agents/opencode.cjs.map +1 -1
  62. package/dist/agents/plugin-extensions.cjs +71 -0
  63. package/dist/agents/plugin-extensions.cjs.map +1 -0
  64. package/dist/agents/plugin-extensions.d.cts +26 -0
  65. package/dist/agents/plugin-extensions.d.mts +26 -0
  66. package/dist/agents/plugin-extensions.d.ts +26 -0
  67. package/dist/agents/plugin-extensions.js +8 -0
  68. package/dist/agents/plugin-extensions.js.map +1 -0
  69. package/dist/agents/post-setup.cjs +14 -3
  70. package/dist/agents/post-setup.cjs.map +1 -1
  71. package/dist/agents/post-setup.d.cts +4 -2
  72. package/dist/agents/post-setup.d.mts +4 -2
  73. package/dist/agents/post-setup.d.ts +4 -2
  74. package/dist/agents/post-setup.js +8 -6
  75. package/dist/agents/sdk-streams.cjs +3 -3
  76. package/dist/agents/sdk-streams.cjs.map +1 -1
  77. package/dist/agents/{session-slot.cjs → session-key.cjs} +4 -4
  78. package/dist/agents/session-key.cjs.map +1 -0
  79. package/dist/agents/session-key.d.cts +12 -0
  80. package/dist/agents/session-key.d.mts +12 -0
  81. package/dist/agents/session-key.d.ts +12 -0
  82. package/dist/agents/session-key.js +6 -0
  83. package/dist/agents/session-key.js.map +1 -0
  84. package/dist/agents/shared.cjs +2 -2
  85. package/dist/agents/shared.cjs.map +1 -1
  86. package/dist/agents/shared.d.cts +4 -4
  87. package/dist/agents/shared.d.mts +4 -4
  88. package/dist/agents/shared.d.ts +4 -4
  89. package/dist/agents/skills.cjs.map +1 -1
  90. package/dist/agents/skills.d.cts +3 -3
  91. package/dist/agents/skills.d.mts +3 -3
  92. package/dist/agents/skills.d.ts +3 -3
  93. package/dist/agents/types.cjs.map +1 -1
  94. package/dist/agents/types.d.cts +55 -54
  95. package/dist/agents/types.d.mts +55 -54
  96. package/dist/agents/types.d.ts +55 -54
  97. package/dist/agents/ui-message-stream.cjs +4 -4
  98. package/dist/agents/ui-message-stream.cjs.map +1 -1
  99. package/dist/agents/unrecognized-events.cjs +32 -0
  100. package/dist/agents/unrecognized-events.cjs.map +1 -0
  101. package/dist/agents/unrecognized-events.d.cts +8 -0
  102. package/dist/agents/unrecognized-events.d.mts +8 -0
  103. package/dist/agents/unrecognized-events.d.ts +8 -0
  104. package/dist/agents/unrecognized-events.js +6 -0
  105. package/dist/agents/unrecognized-events.js.map +1 -0
  106. package/dist/assertions/api.cjs.map +1 -1
  107. package/dist/assertions/api.d.cts +3 -0
  108. package/dist/assertions/api.d.mts +3 -0
  109. package/dist/assertions/api.d.ts +3 -0
  110. package/dist/assertions/collection.cjs +1 -1
  111. package/dist/assertions/collection.cjs.map +1 -1
  112. package/dist/assertions/judge.cjs +1 -1
  113. package/dist/assertions/judge.cjs.map +1 -1
  114. package/dist/assertions/match.cjs +52 -21
  115. package/dist/assertions/match.cjs.map +1 -1
  116. package/dist/assertions/match.d.cts +16 -5
  117. package/dist/assertions/match.d.mts +16 -5
  118. package/dist/assertions/match.d.ts +16 -5
  119. package/dist/assertions/match.js +96 -94
  120. package/dist/assertions/measurements.cjs +61 -0
  121. package/dist/assertions/measurements.cjs.map +1 -0
  122. package/dist/assertions/measurements.d.cts +24 -0
  123. package/dist/assertions/measurements.d.mts +24 -0
  124. package/dist/assertions/measurements.d.ts +24 -0
  125. package/dist/assertions/measurements.js +8 -0
  126. package/dist/assertions/measurements.js.map +1 -0
  127. package/dist/assertions/numeric.cjs +2 -0
  128. package/dist/assertions/numeric.cjs.map +1 -1
  129. package/dist/assertions/numeric.d.cts +1 -1
  130. package/dist/assertions/numeric.d.mts +1 -1
  131. package/dist/assertions/numeric.d.ts +1 -1
  132. package/dist/assertions/quantity.cjs +42 -0
  133. package/dist/assertions/quantity.cjs.map +1 -0
  134. package/dist/assertions/quantity.d.cts +18 -0
  135. package/dist/assertions/quantity.d.mts +18 -0
  136. package/dist/assertions/quantity.d.ts +18 -0
  137. package/dist/assertions/quantity.js +22 -0
  138. package/dist/assertions/quantity.js.map +1 -0
  139. package/dist/assertions/record/attachment.cjs +2 -0
  140. package/dist/assertions/record/attachment.cjs.map +1 -1
  141. package/dist/assertions/record/codec.cjs +5 -1
  142. package/dist/assertions/record/codec.cjs.map +1 -1
  143. package/dist/assertions/record/model.cjs.map +1 -1
  144. package/dist/assertions/record/model.d.cts +3 -1
  145. package/dist/assertions/record/model.d.mts +3 -1
  146. package/dist/assertions/record/model.d.ts +3 -1
  147. package/dist/assertions/runtime.cjs +11 -6
  148. package/dist/assertions/runtime.cjs.map +1 -1
  149. package/dist/cli/program.cjs +3 -0
  150. package/dist/cli/program.cjs.map +1 -1
  151. package/dist/context/assert-first.cjs +6 -4
  152. package/dist/context/assert-first.cjs.map +1 -1
  153. package/dist/context/assert-first.d.cts +9 -3
  154. package/dist/context/assert-first.d.mts +9 -3
  155. package/dist/context/assert-first.d.ts +9 -3
  156. package/dist/context/notes.cjs +47 -0
  157. package/dist/context/notes.cjs.map +1 -0
  158. package/dist/context/notes.d.cts +10 -0
  159. package/dist/context/notes.d.mts +10 -0
  160. package/dist/context/notes.d.ts +10 -0
  161. package/dist/context/notes.js +6 -0
  162. package/dist/context/notes.js.map +1 -0
  163. package/dist/context/send-failures.cjs +1 -7
  164. package/dist/context/send-failures.cjs.map +1 -1
  165. package/dist/context/send-failures.d.cts +2 -3
  166. package/dist/context/send-failures.d.mts +2 -3
  167. package/dist/context/send-failures.d.ts +2 -3
  168. package/dist/context/send-retry.cjs +0 -1
  169. package/dist/context/send-retry.cjs.map +1 -1
  170. package/dist/context/send-retry.d.cts +1 -2
  171. package/dist/context/send-retry.d.mts +1 -2
  172. package/dist/context/send-retry.d.ts +1 -2
  173. package/dist/context/session.cjs +10 -17
  174. package/dist/context/session.cjs.map +1 -1
  175. package/dist/context/session.d.cts +4 -10
  176. package/dist/context/session.d.mts +4 -10
  177. package/dist/context/session.d.ts +4 -10
  178. package/dist/define.cjs +89 -64
  179. package/dist/define.cjs.map +1 -1
  180. package/dist/define.d.cts +3 -3
  181. package/dist/define.d.mts +3 -3
  182. package/dist/define.d.ts +3 -3
  183. package/dist/eval/cli/contribution.cjs +1 -1
  184. package/dist/eval/cli/contribution.cjs.map +1 -1
  185. package/dist/eval/host/index.cjs +1 -1
  186. package/dist/eval/host/index.cjs.map +1 -1
  187. package/dist/eval/record/evaluation.cjs +1 -1
  188. package/dist/eval/record/evaluation.cjs.map +1 -1
  189. package/dist/eval/record/membership-provenance.d.cts +3 -3
  190. package/dist/eval/record/membership-provenance.d.mts +3 -3
  191. package/dist/eval/record/membership-provenance.d.ts +3 -3
  192. package/dist/eval/record/score.cjs +2 -2
  193. package/dist/eval/record/score.cjs.map +1 -1
  194. package/dist/eval/record/sealed-assertion.cjs +1 -1
  195. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  196. package/dist/eval/record/verdict.cjs +2 -2
  197. package/dist/eval/record/verdict.cjs.map +1 -1
  198. package/dist/expect/index.cjs +13 -1
  199. package/dist/expect/index.cjs.map +1 -1
  200. package/dist/expect/index.d.cts +5 -1
  201. package/dist/expect/index.d.mts +5 -1
  202. package/dist/expect/index.d.ts +5 -1
  203. package/dist/expect/index.js +92 -72
  204. package/dist/expect/index.mjs +92 -72
  205. package/dist/experiment/host/cli/contribution.cjs +52 -39
  206. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  207. package/dist/experiment/host/cli/contribution.d.cts +18 -4
  208. package/dist/experiment/host/cli/contribution.d.mts +18 -4
  209. package/dist/experiment/host/cli/contribution.d.ts +18 -4
  210. package/dist/experiment/host/cli/contribution.js +2 -2
  211. package/dist/experiment/host/cli/debug-protocol.cjs +2 -2
  212. package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -1
  213. package/dist/experiment/host/cli/debug-protocol.d.cts +2 -2
  214. package/dist/experiment/host/cli/debug-protocol.d.mts +2 -2
  215. package/dist/experiment/host/cli/debug-protocol.d.ts +2 -2
  216. package/dist/experiment/host/cli/output-protocol.cjs +1 -1
  217. package/dist/experiment/host/cli/output-protocol.cjs.map +1 -1
  218. package/dist/experiment/host/cli/output-protocol.d.cts +2 -2
  219. package/dist/experiment/host/cli/output-protocol.d.mts +2 -2
  220. package/dist/experiment/host/cli/output-protocol.d.ts +2 -2
  221. package/dist/experiment/host/current.cjs +2 -2
  222. package/dist/experiment/host/current.cjs.map +1 -1
  223. package/dist/experiment/host/index.cjs +1 -1
  224. package/dist/experiment/host/index.cjs.map +1 -1
  225. package/dist/experiment/host/operations.cjs +24 -23
  226. package/dist/experiment/host/operations.cjs.map +1 -1
  227. package/dist/experiment/host/runtime.cjs +11 -10
  228. package/dist/experiment/host/runtime.cjs.map +1 -1
  229. package/dist/experiment/host/runtime.d.cts +3 -3
  230. package/dist/experiment/host/runtime.d.mts +3 -3
  231. package/dist/experiment/host/runtime.d.ts +3 -3
  232. package/dist/experiment/host/teardown.cjs +4 -3
  233. package/dist/experiment/host/teardown.cjs.map +1 -1
  234. package/dist/experiment/host/teardown.d.cts +3 -3
  235. package/dist/experiment/host/teardown.d.mts +3 -3
  236. package/dist/experiment/host/teardown.d.ts +3 -3
  237. package/dist/experiment/host/types.cjs.map +1 -1
  238. package/dist/experiment/host/types.d.cts +19 -19
  239. package/dist/experiment/host/types.d.mts +19 -19
  240. package/dist/experiment/host/types.d.ts +19 -19
  241. package/dist/index.cjs +3 -19
  242. package/dist/index.cjs.map +1 -1
  243. package/dist/index.d.cts +4 -8
  244. package/dist/index.d.mts +4 -8
  245. package/dist/index.d.ts +4 -8
  246. package/dist/index.js +12 -34
  247. package/dist/index.mjs +12 -34
  248. package/dist/inspection/assertions.cjs +1 -1
  249. package/dist/inspection/assertions.cjs.map +1 -1
  250. package/dist/inspection/cli/contribution.cjs +8 -7
  251. package/dist/inspection/cli/contribution.cjs.map +1 -1
  252. package/dist/inspection/facts.cjs +4 -4
  253. package/dist/inspection/facts.cjs.map +1 -1
  254. package/dist/inspection/index.cjs +1 -5
  255. package/dist/inspection/index.cjs.map +1 -1
  256. package/dist/inspection/index.d.cts +1 -2
  257. package/dist/inspection/index.d.mts +1 -2
  258. package/dist/inspection/index.d.ts +1 -2
  259. package/dist/inspection/index.js +20 -26
  260. package/dist/inspection/lifecycle.cjs +7 -0
  261. package/dist/inspection/lifecycle.cjs.map +1 -0
  262. package/dist/inspection/lifecycle.d.cts +4 -0
  263. package/dist/inspection/lifecycle.d.mts +4 -0
  264. package/dist/inspection/lifecycle.d.ts +4 -0
  265. package/dist/inspection/lifecycle.js +6 -0
  266. package/dist/inspection/lifecycle.js.map +1 -0
  267. package/dist/inspection/notes.cjs +40 -0
  268. package/dist/inspection/notes.cjs.map +1 -0
  269. package/dist/inspection/notes.d.cts +12 -0
  270. package/dist/inspection/notes.d.mts +12 -0
  271. package/dist/inspection/notes.d.ts +12 -0
  272. package/dist/inspection/notes.js +8 -0
  273. package/dist/inspection/notes.js.map +1 -0
  274. package/dist/inspection/overview.cjs +12 -15
  275. package/dist/inspection/overview.cjs.map +1 -1
  276. package/dist/inspection/overview.d.cts +8 -6
  277. package/dist/inspection/overview.d.mts +8 -6
  278. package/dist/inspection/overview.d.ts +8 -6
  279. package/dist/inspection/planned-attempt.cjs +45 -0
  280. package/dist/inspection/planned-attempt.cjs.map +1 -0
  281. package/dist/inspection/planned-attempt.d.cts +109 -0
  282. package/dist/inspection/planned-attempt.d.mts +109 -0
  283. package/dist/inspection/planned-attempt.d.ts +109 -0
  284. package/dist/inspection/planned-attempt.js +24 -0
  285. package/dist/inspection/planned-attempt.js.map +1 -0
  286. package/dist/inspection/project-result.cjs +5 -5
  287. package/dist/inspection/project-result.cjs.map +1 -1
  288. package/dist/inspection/project-result.d.cts +58 -57
  289. package/dist/inspection/project-result.d.mts +58 -57
  290. package/dist/inspection/project-result.d.ts +58 -57
  291. package/dist/inspection/project-result.js +4 -4
  292. package/dist/inspection/project.cjs +3 -3
  293. package/dist/inspection/project.cjs.map +1 -1
  294. package/dist/inspection/protocol-values.cjs +1 -1
  295. package/dist/inspection/protocol-values.cjs.map +1 -1
  296. package/dist/inspection/protocol-values.d.cts +1 -1
  297. package/dist/inspection/protocol-values.d.mts +1 -1
  298. package/dist/inspection/protocol-values.d.ts +1 -1
  299. package/dist/inspection/protocol.cjs +8 -8
  300. package/dist/inspection/protocol.cjs.map +1 -1
  301. package/dist/inspection/protocol.d.cts +237 -219
  302. package/dist/inspection/protocol.d.mts +237 -219
  303. package/dist/inspection/protocol.d.ts +237 -219
  304. package/dist/inspection/public.cjs +1 -5
  305. package/dist/inspection/public.cjs.map +1 -1
  306. package/dist/inspection/public.d.cts +1 -2
  307. package/dist/inspection/public.d.mts +1 -2
  308. package/dist/inspection/public.d.ts +1 -2
  309. package/dist/inspection/public.js +14 -20
  310. package/dist/inspection/public.mjs +166 -129
  311. package/dist/inspection/query.cjs +1 -1
  312. package/dist/inspection/query.cjs.map +1 -1
  313. package/dist/inspection/results.cjs +61 -52
  314. package/dist/inspection/results.cjs.map +1 -1
  315. package/dist/inspection/results.d.cts +157 -140
  316. package/dist/inspection/results.d.mts +157 -140
  317. package/dist/inspection/results.d.ts +157 -140
  318. package/dist/inspection/select.cjs +33 -28
  319. package/dist/inspection/select.cjs.map +1 -1
  320. package/dist/inspection/source.cjs +1 -1
  321. package/dist/inspection/source.cjs.map +1 -1
  322. package/dist/inspection/sources.cjs +2 -2
  323. package/dist/inspection/sources.cjs.map +1 -1
  324. package/dist/inspection/trace.cjs +9 -8
  325. package/dist/inspection/trace.cjs.map +1 -1
  326. package/dist/inspection/trace.d.cts +4 -4
  327. package/dist/inspection/trace.d.mts +4 -4
  328. package/dist/inspection/trace.d.ts +4 -4
  329. package/dist/loaders/index.cjs +7 -279
  330. package/dist/loaders/index.cjs.map +1 -1
  331. package/dist/loaders/index.d.cts +2 -95
  332. package/dist/loaders/index.d.mts +2 -95
  333. package/dist/loaders/index.d.ts +2 -95
  334. package/dist/loaders/index.js +10 -12
  335. package/dist/loaders/index.mjs +10 -12
  336. package/dist/loaders/runtime.cjs +283 -0
  337. package/dist/loaders/runtime.cjs.map +1 -0
  338. package/dist/loaders/runtime.d.cts +95 -0
  339. package/dist/loaders/runtime.d.mts +95 -0
  340. package/dist/loaders/runtime.d.ts +95 -0
  341. package/dist/loaders/runtime.js +16 -0
  342. package/dist/loaders/runtime.js.map +1 -0
  343. package/dist/migrations/judge-provider.md +6 -6
  344. package/dist/{model-slots.cjs → model-roles.cjs} +26 -7
  345. package/dist/model-roles.cjs.map +1 -0
  346. package/dist/model-roles.d.cts +26 -0
  347. package/dist/model-roles.d.mts +26 -0
  348. package/dist/model-roles.d.ts +26 -0
  349. package/dist/model-roles.js +14 -0
  350. package/dist/model-roles.js.map +1 -0
  351. package/dist/o11y/adapter-usage-projection.cjs +9 -8
  352. package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
  353. package/dist/o11y/adapter-usage-projection.d.cts +23 -15
  354. package/dist/o11y/adapter-usage-projection.d.mts +23 -15
  355. package/dist/o11y/adapter-usage-projection.d.ts +23 -15
  356. package/dist/o11y/cache-read.cjs +14 -14
  357. package/dist/o11y/cache-read.cjs.map +1 -1
  358. package/dist/o11y/cache-read.d.cts +5 -5
  359. package/dist/o11y/cache-read.d.mts +5 -5
  360. package/dist/o11y/cache-read.d.ts +5 -5
  361. package/dist/o11y/derive.cjs.map +1 -1
  362. package/dist/o11y/derive.d.cts +2 -2
  363. package/dist/o11y/derive.d.mts +2 -2
  364. package/dist/o11y/derive.d.ts +2 -2
  365. package/dist/o11y/eval-usage.cjs +9 -9
  366. package/dist/o11y/eval-usage.cjs.map +1 -1
  367. package/dist/o11y/eval-usage.d.cts +7 -7
  368. package/dist/o11y/eval-usage.d.mts +7 -7
  369. package/dist/o11y/eval-usage.d.ts +7 -7
  370. package/dist/o11y/parsers/bub.cjs +57 -81
  371. package/dist/o11y/parsers/bub.cjs.map +1 -1
  372. package/dist/o11y/parsers/index.cjs.map +1 -1
  373. package/dist/o11y/parsers/index.d.cts +2 -0
  374. package/dist/o11y/parsers/index.d.mts +2 -0
  375. package/dist/o11y/parsers/index.d.ts +2 -0
  376. package/dist/o11y/parsers/opencode.cjs +129 -217
  377. package/dist/o11y/parsers/opencode.cjs.map +1 -1
  378. package/dist/o11y/parsers/opencode.d.cts +2 -5
  379. package/dist/o11y/parsers/opencode.d.mts +2 -5
  380. package/dist/o11y/parsers/opencode.d.ts +2 -5
  381. package/dist/o11y/types.cjs.map +1 -1
  382. package/dist/o11y/types.d.cts +1 -1
  383. package/dist/o11y/types.d.mts +1 -1
  384. package/dist/o11y/types.d.ts +1 -1
  385. package/dist/plugin/contracts.cjs +170 -120
  386. package/dist/plugin/contracts.cjs.map +1 -1
  387. package/dist/plugin/contracts.d.cts +102 -90
  388. package/dist/plugin/contracts.d.mts +102 -90
  389. package/dist/plugin/contracts.d.ts +102 -90
  390. package/dist/plugin/contracts.js +16 -12
  391. package/dist/plugin/index.cjs.map +1 -1
  392. package/dist/plugin/index.d.cts +1 -1
  393. package/dist/plugin/index.d.mts +1 -1
  394. package/dist/plugin/index.d.ts +1 -1
  395. package/dist/plugin/link.cjs +69 -64
  396. package/dist/plugin/link.cjs.map +1 -1
  397. package/dist/plugin/link.d.cts +5 -3
  398. package/dist/plugin/link.d.mts +5 -3
  399. package/dist/plugin/link.d.ts +5 -3
  400. package/dist/plugin/link.js +12 -8
  401. package/dist/record/codec/seal-manifest.d.cts +3 -3
  402. package/dist/record/codec/seal-manifest.d.mts +3 -3
  403. package/dist/record/codec/seal-manifest.d.ts +3 -3
  404. package/dist/record/family/attempt-note/definition.cjs +12 -0
  405. package/dist/record/family/attempt-note/definition.cjs.map +1 -0
  406. package/dist/record/family/attempt-note/definition.d.cts +6 -0
  407. package/dist/record/family/attempt-note/definition.d.mts +6 -0
  408. package/dist/record/family/attempt-note/definition.d.ts +6 -0
  409. package/dist/record/family/attempt-note/definition.js +6 -0
  410. package/dist/record/family/attempt-note/definition.js.map +1 -0
  411. package/dist/record/family/attempt-note/persistence.cjs +10 -0
  412. package/dist/record/family/attempt-note/persistence.cjs.map +1 -0
  413. package/dist/record/family/attempt-note/persistence.d.cts +6 -0
  414. package/dist/record/family/attempt-note/persistence.d.mts +6 -0
  415. package/dist/record/family/attempt-note/persistence.d.ts +6 -0
  416. package/dist/record/family/attempt-note/persistence.js +6 -0
  417. package/dist/record/family/attempt-note/persistence.js.map +1 -0
  418. package/dist/record/family/attempt-note/schema.cjs +20 -0
  419. package/dist/record/family/attempt-note/schema.cjs.map +1 -0
  420. package/dist/record/family/attempt-note/schema.d.cts +21 -0
  421. package/dist/record/family/attempt-note/schema.d.mts +21 -0
  422. package/dist/record/family/attempt-note/schema.d.ts +21 -0
  423. package/dist/record/family/attempt-note/schema.js +10 -0
  424. package/dist/record/family/attempt-note/schema.js.map +1 -0
  425. package/dist/record/family/catalog.cjs +32 -29
  426. package/dist/record/family/catalog.cjs.map +1 -1
  427. package/dist/record/family/catalog.d.cts +7 -2
  428. package/dist/record/family/catalog.d.mts +7 -2
  429. package/dist/record/family/catalog.d.ts +7 -2
  430. package/dist/record/family/current.cjs +48 -45
  431. package/dist/record/family/current.cjs.map +1 -1
  432. package/dist/record/family/current.d.cts +15 -0
  433. package/dist/record/family/current.d.mts +15 -0
  434. package/dist/record/family/current.d.ts +15 -0
  435. package/dist/record/model/index.js +66 -64
  436. package/dist/record/model/run-context.cjs +9 -3
  437. package/dist/record/model/run-context.cjs.map +1 -1
  438. package/dist/record/model/run-context.d.cts +9 -2
  439. package/dist/record/model/run-context.d.mts +9 -2
  440. package/dist/record/model/run-context.d.ts +9 -2
  441. package/dist/record/model/run-context.js +8 -6
  442. package/dist/record/model/seal-manifest.d.cts +1 -1
  443. package/dist/record/model/seal-manifest.d.mts +1 -1
  444. package/dist/record/model/seal-manifest.d.ts +1 -1
  445. package/dist/run/cli/contribution.cjs +6 -32
  446. package/dist/run/cli/contribution.cjs.map +1 -1
  447. package/dist/run/host/runtime.cjs +1 -1
  448. package/dist/run/host/runtime.cjs.map +1 -1
  449. package/dist/run/storage/sqlite.cjs +7 -7
  450. package/dist/run/storage/sqlite.cjs.map +1 -1
  451. package/dist/runner/adapter-usage.cjs +5 -3
  452. package/dist/runner/adapter-usage.cjs.map +1 -1
  453. package/dist/runner/adapter-usage.d.cts +2 -2
  454. package/dist/runner/adapter-usage.d.mts +2 -2
  455. package/dist/runner/adapter-usage.d.ts +2 -2
  456. package/dist/runner/adoption.cjs +10 -12
  457. package/dist/runner/adoption.cjs.map +1 -1
  458. package/dist/runner/attempt-notes.cjs +8 -0
  459. package/dist/runner/attempt-notes.cjs.map +1 -0
  460. package/dist/runner/attempt-notes.d.cts +4 -0
  461. package/dist/runner/attempt-notes.d.mts +4 -0
  462. package/dist/runner/attempt-notes.d.ts +4 -0
  463. package/dist/runner/attempt-notes.js +8 -0
  464. package/dist/runner/attempt-notes.js.map +1 -0
  465. package/dist/runner/attempt.cjs +61 -73
  466. package/dist/runner/attempt.cjs.map +1 -1
  467. package/dist/runner/attempt.d.cts +3 -3
  468. package/dist/runner/attempt.d.mts +3 -3
  469. package/dist/runner/attempt.d.ts +3 -3
  470. package/dist/runner/command-plan.cjs +21 -26
  471. package/dist/runner/command-plan.cjs.map +1 -1
  472. package/dist/runner/command-plan.d.cts +4 -4
  473. package/dist/runner/command-plan.d.mts +4 -4
  474. package/dist/runner/command-plan.d.ts +4 -4
  475. package/dist/runner/command-plan.js +4 -4
  476. package/dist/runner/config-identity.cjs.map +1 -1
  477. package/dist/runner/config-identity.d.cts +2 -2
  478. package/dist/runner/config-identity.d.mts +2 -2
  479. package/dist/runner/config-identity.d.ts +2 -2
  480. package/dist/runner/discover.cjs +6 -6
  481. package/dist/runner/discover.cjs.map +1 -1
  482. package/dist/runner/eval-selection.cjs +15 -1
  483. package/dist/runner/eval-selection.cjs.map +1 -1
  484. package/dist/runner/eval-selection.d.cts +4 -0
  485. package/dist/runner/eval-selection.d.mts +4 -0
  486. package/dist/runner/eval-selection.d.ts +4 -0
  487. package/dist/runner/feedback/human.cjs +1 -1
  488. package/dist/runner/feedback/human.cjs.map +1 -1
  489. package/dist/runner/feedback/json.cjs +4 -2
  490. package/dist/runner/feedback/json.cjs.map +1 -1
  491. package/dist/runner/feedback/json.d.cts +1 -1
  492. package/dist/runner/feedback/json.d.mts +1 -1
  493. package/dist/runner/feedback/json.d.ts +1 -1
  494. package/dist/runner/feedback/sink.cjs +1 -1
  495. package/dist/runner/feedback/sink.cjs.map +1 -1
  496. package/dist/runner/feedback/sink.d.cts +1 -1
  497. package/dist/runner/feedback/sink.d.mts +1 -1
  498. package/dist/runner/feedback/sink.d.ts +1 -1
  499. package/dist/runner/fingerprint.cjs +1 -1
  500. package/dist/runner/fingerprint.cjs.map +1 -1
  501. package/dist/runner/lock.cjs +1 -3
  502. package/dist/runner/lock.cjs.map +1 -1
  503. package/dist/runner/lock.d.cts +0 -2
  504. package/dist/runner/lock.d.mts +0 -2
  505. package/dist/runner/lock.d.ts +0 -2
  506. package/dist/runner/lock.js +14 -16
  507. package/dist/runner/project-target.cjs.map +1 -1
  508. package/dist/runner/project-target.d.cts +2 -2
  509. package/dist/runner/project-target.d.mts +2 -2
  510. package/dist/runner/project-target.d.ts +2 -2
  511. package/dist/runner/record/attachments.cjs +2 -2
  512. package/dist/runner/record/attachments.cjs.map +1 -1
  513. package/dist/runner/record/planning.cjs +8 -2
  514. package/dist/runner/record/planning.cjs.map +1 -1
  515. package/dist/runner/record.cjs +2 -0
  516. package/dist/runner/record.cjs.map +1 -1
  517. package/dist/runner/report.cjs +3 -3
  518. package/dist/runner/report.cjs.map +1 -1
  519. package/dist/runner/report.d.cts +1 -1
  520. package/dist/runner/report.d.mts +1 -1
  521. package/dist/runner/report.d.ts +1 -1
  522. package/dist/runner/reuse-plan.cjs +2 -2
  523. package/dist/runner/reuse-plan.cjs.map +1 -1
  524. package/dist/runner/run.cjs +10 -45
  525. package/dist/runner/run.cjs.map +1 -1
  526. package/dist/runner/sandbox-pool.cjs +1 -2
  527. package/dist/runner/sandbox-pool.cjs.map +1 -1
  528. package/dist/runner/setup-prefix-preparation.cjs +1 -1
  529. package/dist/runner/setup-prefix-preparation.cjs.map +1 -1
  530. package/dist/runner/teardown-registry.cjs +2 -2
  531. package/dist/runner/teardown-registry.cjs.map +1 -1
  532. package/dist/runner/teardown-registry.d.cts +1 -1
  533. package/dist/runner/teardown-registry.d.mts +1 -1
  534. package/dist/runner/teardown-registry.d.ts +1 -1
  535. package/dist/runner/types.cjs +4 -4
  536. package/dist/runner/types.cjs.map +1 -1
  537. package/dist/runner/types.d.cts +64 -92
  538. package/dist/runner/types.d.mts +64 -92
  539. package/dist/runner/types.d.ts +64 -92
  540. package/dist/runner/types.js +2 -2
  541. package/dist/sandbox/action.cjs +1 -1
  542. package/dist/sandbox/action.cjs.map +1 -1
  543. package/dist/sandbox/cli/contribution.cjs +17 -14
  544. package/dist/sandbox/cli/contribution.cjs.map +1 -1
  545. package/dist/sandbox/cli/contribution.d.cts +1 -1
  546. package/dist/sandbox/cli/contribution.d.mts +1 -1
  547. package/dist/sandbox/cli/contribution.d.ts +1 -1
  548. package/dist/sandbox/commands.cjs +1 -1
  549. package/dist/sandbox/commands.cjs.map +1 -1
  550. package/dist/sandbox/commands.d.cts +1 -1
  551. package/dist/sandbox/commands.d.mts +1 -1
  552. package/dist/sandbox/commands.d.ts +1 -1
  553. package/dist/sandbox/compose.cjs +2 -2
  554. package/dist/sandbox/compose.cjs.map +1 -1
  555. package/dist/sandbox/docker-profile/registry.cjs +5 -10
  556. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  557. package/dist/sandbox/docker-profile/registry.d.cts +0 -4
  558. package/dist/sandbox/docker-profile/registry.d.mts +0 -4
  559. package/dist/sandbox/docker-profile/registry.d.ts +0 -4
  560. package/dist/sandbox/docker-profile/registry.js +6 -14
  561. package/dist/sandbox/docker-profile/runtime.cjs +1 -1
  562. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  563. package/dist/sandbox/docker-profile/schema.cjs +12 -16
  564. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  565. package/dist/sandbox/docker-profile/schema.d.cts +2 -6
  566. package/dist/sandbox/docker-profile/schema.d.mts +2 -6
  567. package/dist/sandbox/docker-profile/schema.d.ts +2 -6
  568. package/dist/sandbox/docker-profile/schema.js +24 -32
  569. package/dist/sandbox/incus.cjs +2 -2
  570. package/dist/sandbox/incus.cjs.map +1 -1
  571. package/dist/sandbox/index.cjs +4 -36
  572. package/dist/sandbox/index.cjs.map +1 -1
  573. package/dist/sandbox/index.d.cts +4 -8
  574. package/dist/sandbox/index.d.mts +4 -8
  575. package/dist/sandbox/index.d.ts +4 -8
  576. package/dist/sandbox/index.js +116 -174
  577. package/dist/sandbox/index.mjs +116 -174
  578. package/dist/sandbox/layer.cjs +3 -3
  579. package/dist/sandbox/layer.cjs.map +1 -1
  580. package/dist/sandbox/link.cjs +5 -0
  581. package/dist/sandbox/link.cjs.map +1 -1
  582. package/dist/sandbox/link.d.cts +3 -0
  583. package/dist/sandbox/link.d.mts +3 -0
  584. package/dist/sandbox/link.d.ts +3 -0
  585. package/dist/sandbox/runtime.cjs +9 -4
  586. package/dist/sandbox/runtime.cjs.map +1 -1
  587. package/dist/shared/failure-class.cjs +5 -5
  588. package/dist/shared/failure-class.cjs.map +1 -1
  589. package/dist/shared/failure-class.d.cts +4 -10
  590. package/dist/shared/failure-class.d.mts +4 -10
  591. package/dist/shared/failure-class.d.ts +4 -10
  592. package/dist/shared/types.cjs.map +1 -1
  593. package/dist/shared/types.d.cts +1 -1
  594. package/dist/shared/types.d.mts +1 -1
  595. package/dist/shared/types.d.ts +1 -1
  596. package/dist/show/contribution.cjs +17 -2
  597. package/dist/show/contribution.cjs.map +1 -1
  598. package/dist/show/contribution.d.cts +14 -0
  599. package/dist/show/contribution.d.mts +14 -0
  600. package/dist/show/contribution.d.ts +14 -0
  601. package/dist/show/model.cjs +8 -5
  602. package/dist/show/model.cjs.map +1 -1
  603. package/dist/show/model.d.cts +11 -8
  604. package/dist/show/model.d.mts +11 -8
  605. package/dist/show/model.d.ts +11 -8
  606. package/dist/show/render.cjs +34 -22
  607. package/dist/show/render.cjs.map +1 -1
  608. package/dist/sources/projector.cjs +1 -1
  609. package/dist/sources/projector.cjs.map +1 -1
  610. package/dist/types.cjs +1 -1
  611. package/dist/types.cjs.map +1 -1
  612. package/dist/types.d.cts +1 -1
  613. package/dist/types.d.mts +1 -1
  614. package/dist/types.d.ts +1 -1
  615. package/dist/types.js +2 -2
  616. package/dist/view/app-dist/.vite/manifest.json +2 -2
  617. package/dist/view/app-dist/assets/{index-B3ijZRph.js → index-CxrOUvHC.js} +17 -17
  618. package/dist/view/app-dist/assets/{quality-cost-scatter-B--DfJ9s.js → quality-cost-scatter-B6Aiss7x.js} +1 -1
  619. package/dist/view/app-dist/index.html +1 -1
  620. package/dist/view/cli/contribution.cjs +1 -1
  621. package/dist/view/cli/contribution.cjs.map +1 -1
  622. package/dist/view/function-runtime.mjs +318 -121
  623. package/dist/view/http-protocol.d.cts +1 -1
  624. package/dist/view/http-protocol.d.mts +1 -1
  625. package/dist/view/http-protocol.d.ts +1 -1
  626. package/dist/view/inspection-host.cjs +2 -2
  627. package/dist/view/inspection-host.cjs.map +1 -1
  628. package/dist/view/inspection-host.d.cts +349 -331
  629. package/dist/view/inspection-host.d.mts +349 -331
  630. package/dist/view/inspection-host.d.ts +349 -331
  631. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +9 -9
  632. package/docs-site/zh/examples/integrations/claude-sdk.mdx +8 -8
  633. package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
  634. package/docs-site/zh/examples/integrations/langgraph.mdx +6 -6
  635. package/docs-site/zh/examples/integrations/pi-sdk.mdx +8 -8
  636. package/docs-site/zh/explanation/adapter.mdx +6 -6
  637. package/docs-site/zh/explanation/assert.mdx +7 -7
  638. package/docs-site/zh/explanation/drive.mdx +4 -4
  639. package/docs-site/zh/explanation/hitl.mdx +2 -2
  640. package/docs-site/zh/explanation/judge.mdx +3 -3
  641. package/docs-site/zh/index.mdx +18 -0
  642. package/docs-site/zh/introduction.mdx +4 -3
  643. package/docs-site/zh/reference/builtin-agents.mdx +46 -49
  644. package/docs-site/zh/reference/cli.mdx +16 -14
  645. package/docs-site/zh/reference/define-agent.mdx +19 -19
  646. package/docs-site/zh/reference/define-config.mdx +7 -15
  647. package/docs-site/zh/reference/define-eval.mdx +20 -14
  648. package/docs-site/zh/reference/define-experiment.mdx +18 -39
  649. package/docs-site/zh/reference/events.mdx +1 -1
  650. package/docs-site/zh/reference/expect.mdx +21 -0
  651. package/docs-site/zh/reference/official-adapters.mdx +12 -5
  652. package/docs-site/zh/troubleshooting/debugging.mdx +2 -2
  653. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +1 -1
  654. package/docs-site/zh/tutorials/agent-onboarding.mdx +2 -2
  655. package/docs-site/zh/tutorials/authoring.mdx +4 -3
  656. package/docs-site/zh/tutorials/compare-runs.mdx +1 -1
  657. package/docs-site/zh/tutorials/concurrency.mdx +8 -8
  658. package/docs-site/zh/tutorials/configuration.mdx +5 -5
  659. package/docs-site/zh/tutorials/control-run-cost.mdx +49 -9
  660. package/docs-site/zh/tutorials/eval-groups.mdx +1 -1
  661. package/docs-site/zh/tutorials/evaluation-kinds.mdx +5 -5
  662. package/docs-site/zh/tutorials/experiment-services.mdx +32 -32
  663. package/docs-site/zh/tutorials/handle-execution-failures.mdx +2 -28
  664. package/docs-site/zh/tutorials/plugins.mdx +49 -143
  665. package/docs-site/zh/tutorials/sandbox-agent.mdx +1 -1
  666. package/docs-site/zh/tutorials/sandbox-reuse.mdx +7 -7
  667. package/docs-site/zh/tutorials/upgrade-0-18.mdx +64 -0
  668. package/docs-site/zh/tutorials/upgrade-0-19.mdx +121 -0
  669. package/docs-site/zh/tutorials/upgrade-0-20.mdx +12 -0
  670. package/docs-site/zh/tutorials/verify-judge.mdx +4 -3
  671. package/docs-site/zh/tutorials/viewing-results.mdx +2 -2
  672. package/docs-site/zh/tutorials/write-experiment.mdx +1 -1
  673. package/docs-site/zh/tutorials/write-send.mdx +13 -13
  674. package/package.json +1 -1
  675. package/dist/agents/effect-runtime.cjs.map +0 -1
  676. package/dist/agents/effect-runtime.d.cts +0 -29
  677. package/dist/agents/effect-runtime.d.mts +0 -29
  678. package/dist/agents/effect-runtime.d.ts +0 -29
  679. package/dist/agents/effect-runtime.js +0 -16
  680. package/dist/agents/effect-runtime.js.map +0 -1
  681. package/dist/agents/session-slot.cjs.map +0 -1
  682. package/dist/agents/session-slot.d.cts +0 -12
  683. package/dist/agents/session-slot.d.mts +0 -12
  684. package/dist/agents/session-slot.d.ts +0 -12
  685. package/dist/agents/session-slot.js +0 -6
  686. package/dist/agents/session-slot.js.map +0 -1
  687. package/dist/model-slots.cjs.map +0 -1
  688. package/dist/model-slots.d.cts +0 -19
  689. package/dist/model-slots.d.mts +0 -19
  690. package/dist/model-slots.d.ts +0 -19
  691. package/dist/model-slots.js +0 -8
  692. package/dist/model-slots.js.map +0 -1
package/dist/adapter.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ResolvedModelSlots } from "./model-slots.js";
1
+ import { type ModelRequirements, type ResolvedModelRole } from "./model-roles.js";
2
2
  import type { AttemptSignal } from "./shared/attempt-lifecycle.js";
3
3
  export type { AttemptCancellation, AttemptSignal } from "./shared/attempt-lifecycle.js";
4
4
  import type { MatchContext } from "./assertions/context-match.js";
@@ -37,7 +37,7 @@ type AdapterAssertionsFor<Assertions extends object | undefined, Kind extends Ev
37
37
  readonly [Key in keyof Assertions]: BoundAdapterAssertionMethod<Kind, Assertions[Key]>;
38
38
  } : {};
39
39
  /** Keys owned by the neutral Eval runtime or unsafe on a merged object root. */
40
- declare const RESERVED_ADAPTER_CONTEXT_KEYS: readonly ["evaluationKind", "check", "judge", "factuality", "faithfulness", "instructionFollowing", "pairwisePreference", "closeQA", "usage", "elapsedMs", "maxTokens", "maxCost", "score", "group", "skip", "signal", "model", "reasoningEffort", "flags", "progress", "diagnostic", "log", "then", "Object", "constructor", "__defineGetter__", "__defineSetter__", "hasOwnProperty", "__lookupGetter__", "__lookupSetter__", "isPrototypeOf", "propertyIsEnumerable", "toString", "valueOf", "__proto__", "toLocaleString"];
40
+ declare const RESERVED_ADAPTER_CONTEXT_KEYS: readonly ["evaluationKind", "check", "judge", "factuality", "faithfulness", "instructionFollowing", "pairwisePreference", "closeQA", "usage", "elapsedMs", "maxTokens", "maxCost", "score", "group", "note", "skip", "signal", "model", "reasoningEffort", "flags", "progress", "diagnostic", "log", "then", "Object", "constructor", "__defineGetter__", "__defineSetter__", "hasOwnProperty", "__lookupGetter__", "__lookupSetter__", "isPrototypeOf", "propertyIsEnumerable", "toString", "valueOf", "__proto__", "toLocaleString"];
41
41
  export type ReservedAdapterContextKey = typeof RESERVED_ADAPTER_CONTEXT_KEYS[number];
42
42
  type InvalidContextBranch<Context> = Context extends unknown ? Context extends object ? Context extends readonly unknown[] ? Context : Context extends (...args: readonly never[]) => unknown ? Context : string extends keyof Context ? Context : Extract<keyof Context, ReservedAdapterContextKey> extends never ? never : Context : Context : never;
43
43
  type AdapterContextValidation<Context> = unknown extends Context ? unknown : [InvalidContextBranch<Context>] extends [never] ? unknown : {
@@ -62,10 +62,12 @@ export interface AdapterCleanupContext {
62
62
  /** 独立于执行信号;整个 Adapter 清理窗口截止时中止。 */
63
63
  readonly signal: AbortSignal;
64
64
  }
65
- export interface AdapterCreateContext<Flags = ExperimentFlags> {
65
+ export interface AdapterCreateContext<Flags = ExperimentFlags, Roles extends string = string> {
66
66
  /** Frozen application model selections for this Attempt. */
67
- readonly models: ResolvedModelSlots;
68
- recordUsage(input: import("./adapter-usage.js").AdapterUsageInput): void;
67
+ readonly models: Readonly<Record<Roles, ResolvedModelRole>>;
68
+ recordUsage(input: Omit<import("./adapter-usage.js").AdapterUsageInput, "modelRole"> & {
69
+ readonly modelRole?: Roles | null;
70
+ }): void;
69
71
  /** Close application usage admission and declare whether the recorded collection is complete. */
70
72
  sealUsage(input: import("./adapter-usage.js").AdapterUsageSeal): void;
71
73
  attach(input: import("./adapter-attachments.js").AdapterAttachmentInput): Promise<import("./adapter-attachments.js").AdapterAttachmentReceipt>;
@@ -126,11 +128,17 @@ type AdapterScoreEvalFields = Omit<ScoreEvalInput<undefined>, "test" | "sandbox"
126
128
  readonly sandbox?: never;
127
129
  readonly diff?: never;
128
130
  };
129
- export type AdapterEvalInput<Context extends object, Assertions extends object | undefined = undefined, Flags extends AdapterFlagsParser = undefined> = AdapterEvalFields & {
130
- test(t: EvalContext<"pass", AdapterFlagsOutput<Flags>, Context> & Readonly<Context> & AdapterAssertionsFor<Assertions, "pass">): void | Promise<void>;
131
+ export type AdapterEvalInput<Context extends object, Assertions extends object | undefined = undefined, Flags extends AdapterFlagsParser = undefined, Roles extends string = string> = AdapterEvalFields & {
132
+ readonly requires?: ModelRequirements<Roles>;
133
+ test(t: Omit<EvalContext<"pass", AdapterFlagsOutput<Flags>, Context>, "usage"> & {
134
+ readonly usage: EvalUsage<NoInfer<Roles>>;
135
+ } & Readonly<Context> & AdapterAssertionsFor<Assertions, "pass">): void | Promise<void>;
131
136
  };
132
- export type AdapterScoreEvalInput<Context extends object, Assertions extends object | undefined = undefined, Flags extends AdapterFlagsParser = undefined> = AdapterScoreEvalFields & {
133
- test(t: EvalContext<"score", AdapterFlagsOutput<Flags>, Context> & Readonly<Context> & AdapterAssertionsFor<Assertions, "score">): void | Promise<void>;
137
+ export type AdapterScoreEvalInput<Context extends object, Assertions extends object | undefined = undefined, Flags extends AdapterFlagsParser = undefined, Roles extends string = string> = AdapterScoreEvalFields & {
138
+ readonly requires?: ModelRequirements<Roles>;
139
+ test(t: Omit<EvalContext<"score", AdapterFlagsOutput<Flags>, Context>, "usage"> & {
140
+ readonly usage: EvalUsage<NoInfer<Roles>>;
141
+ } & Readonly<Context> & AdapterAssertionsFor<Assertions, "score">): void | Promise<void>;
134
142
  };
135
143
  interface AdapterContractToken<Context extends object, Assertions extends object | undefined, Flags extends AdapterFlagsParser = undefined> {
136
144
  readonly name: string;
@@ -152,13 +160,14 @@ export interface AdapterRuntimeEvalDefinition<Kind extends EvaluationKind> exten
152
160
  export interface AdapterDefinition<Context extends object, Assertions extends object | undefined = undefined, Flags extends AdapterFlagsParser = undefined> {
153
161
  readonly name: string;
154
162
  readonly parseFlags: Flags;
155
- defineEval(input: AdapterEvalInput<Context, Assertions, Flags>): AdapterEvalDefinition<"pass", Context, Assertions, Flags>;
156
- defineScoreEval(input: AdapterScoreEvalInput<Context, Assertions, Flags>): AdapterEvalDefinition<"score", Context, Assertions, Flags>;
163
+ defineEval<const Roles extends string = string>(input: AdapterEvalInput<Context, Assertions, Flags, Roles>): AdapterEvalDefinition<"pass", Context, Assertions, Flags>;
164
+ defineScoreEval<const Roles extends string = string>(input: AdapterScoreEvalInput<Context, Assertions, Flags, Roles>): AdapterEvalDefinition<"score", Context, Assertions, Flags>;
157
165
  }
158
166
  /** Existential runtime view used by Experiment without erasing a concrete context to `any`. */
159
167
  export interface AdapterRuntimeDefinition {
160
168
  readonly parseFlags?: Exclude<AdapterFlagsParser, undefined>;
161
169
  readonly kind: "custom";
170
+ readonly requiredModelRoles?: readonly string[];
162
171
  readonly name: string;
163
172
  readonly contract: string;
164
173
  readonly behaviorRevision: string | null;
@@ -195,21 +204,23 @@ export interface AdapterContract<Context extends object, Assertions extends obje
195
204
  }
196
205
  export type Adapter = import("./agents/types.js").Agent | AdapterRuntimeDefinition;
197
206
  /** Defines one Adapter implementation with an automatically private contract. */
198
- export declare function defineAdapter<Context extends object, Flags extends AdapterFlagsParser = undefined>(input: {
207
+ export declare function defineAdapter<Context extends object, Flags extends AdapterFlagsParser = undefined, const Roles extends string = string>(input: {
199
208
  readonly name: string;
209
+ readonly requires?: ModelRequirements<Roles>;
200
210
  readonly behaviorRevision?: string;
201
211
  /** Adapter 总清理预算,默认 30000 ms;允许整数 1–300000。 */
202
212
  readonly cleanupTimeoutMs?: number;
203
- readonly create: AdapterFactory<Context, Flags>;
213
+ readonly create: (context: AdapterCreateContext<AdapterFlagsOutput<Flags>, NoInfer<Roles>>) => (Context & ThisType<Context>) | Promise<Context & ThisType<Context>>;
204
214
  readonly parseFlags?: Flags;
205
215
  readonly assertions?: undefined;
206
216
  } & AdapterContextValidation<NoInfer<Context>> & AdapterFlagsParserValidation<NoInfer<Flags>>): AdapterImplementation<Context, undefined, Flags>;
207
- export declare function defineAdapter<Context extends object, Assertions extends object, Flags extends AdapterFlagsParser = undefined>(input: {
217
+ export declare function defineAdapter<Context extends object, Assertions extends object, Flags extends AdapterFlagsParser = undefined, const Roles extends string = string>(input: {
208
218
  readonly name: string;
219
+ readonly requires?: ModelRequirements<Roles>;
209
220
  readonly behaviorRevision?: string;
210
221
  /** Adapter 总清理预算,默认 30000 ms;允许整数 1–300000。 */
211
222
  readonly cleanupTimeoutMs?: number;
212
- readonly create: AdapterFactory<Context, Flags>;
223
+ readonly create: (context: AdapterCreateContext<AdapterFlagsOutput<Flags>, NoInfer<Roles>>) => (Context & ThisType<Context>) | Promise<Context & ThisType<Context>>;
213
224
  readonly parseFlags?: Flags;
214
225
  /** Attempt-local Assertion sugar, assembled once after create() succeeds. */
215
226
  readonly assertions: AdapterAssertionsFactory<Context, Assertions>;
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.effectAgentCallback = effectAgentCallback;
4
- exports.registerAgentEffectRuntime = registerAgentEffectRuntime;
4
+ exports.attachAgentEffects = attachAgentEffects;
5
5
  exports.authorCallbackEffect = authorCallbackEffect;
6
6
  exports.agentSendEffect = agentSendEffect;
7
- exports.agentSetupEffect = agentSetupEffect;
8
- exports.agentTeardownEffect = agentTeardownEffect;
7
+ exports.agentBeforeEffect = agentBeforeEffect;
8
+ exports.agentAfterEffect = agentAfterEffect;
9
9
  const effect_1 = require("effect");
10
- const runtimes = new WeakMap();
10
+ const effects = new WeakMap();
11
11
  /** Promise facade for built-in adapters; Runner uses the registered Effect directly. */
12
12
  function effectAgentCallback(effect, signal) {
13
13
  return (...args) => effect_1.Effect.runPromise(effect(...args), { signal: signal(...args) });
14
14
  }
15
- function registerAgentEffectRuntime(agent, runtime) {
16
- runtimes.set(agent, runtime);
15
+ function attachAgentEffects(agent, value) {
16
+ effects.set(agent, value);
17
17
  return agent;
18
18
  }
19
19
  /** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */
@@ -29,18 +29,12 @@ function authorCallbackEffect(callback) {
29
29
  });
30
30
  }
31
31
  function agentSendEffect(agent, input, context) {
32
- return runtimes.get(agent)?.send(input, context);
32
+ return effects.get(agent)?.send(input, context);
33
33
  }
34
- function agentSetupEffect(agent, sandbox, context) {
35
- const runtime = runtimes.get(agent);
36
- return agent.kind === "sandbox"
37
- ? runtime?.sandboxSetup?.(sandbox, context)
38
- : runtime?.directSetup?.(context);
34
+ function agentBeforeEffect(agent, sandbox, context) {
35
+ return effects.get(agent)?.before?.(sandbox, context);
39
36
  }
40
- function agentTeardownEffect(agent, sandbox, context) {
41
- const runtime = runtimes.get(agent);
42
- return agent.kind === "sandbox"
43
- ? runtime?.sandboxTeardown?.(sandbox, context)
44
- : runtime?.directTeardown?.(context);
37
+ function agentAfterEffect(agent, sandbox, context) {
38
+ return effects.get(agent)?.after?.(sandbox, context);
45
39
  }
46
- //# sourceMappingURL=effect-runtime.cjs.map
40
+ //# sourceMappingURL=agent-effects.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-effects.js","sourceRoot":"","sources":["agent-effects.ts"],"names":[],"mappings":";;AAWA,kDAEC;AACD,gDAGC;AAED,oDAUC;AACD,0CAEC;AACD,8CAEC;AACD,4CAEC;AAtCD,mCAAgC;AAShC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAuB,CAAC;AACnD,wFAAwF;AACxF,SAAgB,mBAAmB,CAAyC,MAA+D,EAAE,MAAkD;IAC3L,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,eAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC;AACD,SAAgB,kBAAkB,CAA0B,KAAgB,EAAE,KAAmB;IAC7F,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,wGAAwG;AACxG,SAAgB,oBAAoB,CAAQ,QAAsC;IAC9E,OAAO,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACvB,MAAM,MAAM,GAAY,QAAQ,EAAE,CAAC;QACnC,IAAI,eAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,OAAO,MAA8C,CAAC;QAC1D,OAAO,eAAM,CAAC,UAAU,CAAC;YACrB,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAe,CAAC;YAC3C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SAC1B,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAgB,eAAe,CAAC,KAAY,EAAE,KAAgB,EAAE,OAAyB;IACrF,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AACD,SAAgB,iBAAiB,CAAC,KAAY,EAAE,OAAgB,EAAE,OAA2B;IACzF,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC;AACD,SAAgB,gBAAgB,CAAC,KAAY,EAAE,OAAgB,EAAE,OAAqB;IAClF,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Agent, AgentContext, AgentSendContext, AgentBeforeContext, Turn, TurnInput, } from \"./types.ts\";\nimport type { Sandbox } from \"../sandbox/types.ts\";\nexport type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;\nexport interface AgentEffects {\n readonly send: AgentSendEffect;\n readonly before?: (sandbox: Sandbox, context: AgentBeforeContext) => Effect.Effect<void, unknown, never>;\n readonly after?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;\n}\nconst effects = new WeakMap<Agent, AgentEffects>();\n/** Promise facade for built-in adapters; Runner uses the registered Effect directly. */\nexport function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value> {\n return (...args) => Effect.runPromise(effect(...args), { signal: signal(...args) });\n}\nexport function attachAgentEffects<AgentType extends Agent>(agent: AgentType, value: AgentEffects): AgentType {\n effects.set(agent, value);\n return agent;\n}\n/** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */\nexport function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never> {\n return Effect.suspend(() => {\n const result: unknown = callback();\n if (Effect.isEffect(result))\n return result as Effect.Effect<Value, unknown, never>;\n return Effect.tryPromise({\n try: () => Promise.resolve(result as Value),\n catch: (cause) => cause,\n });\n });\n}\nexport function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined {\n return effects.get(agent)?.send(input, context);\n}\nexport function agentBeforeEffect(agent: Agent, sandbox: Sandbox, context: AgentBeforeContext): Effect.Effect<void, unknown, never> | undefined {\n return effects.get(agent)?.before?.(sandbox, context);\n}\nexport function agentAfterEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined {\n return effects.get(agent)?.after?.(sandbox, context);\n}\nexport type InternalSandboxAgentDefinition = AgentEffects;\nexport type InternalDirectAgentDefinition = {\n readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;\n readonly before?: (context: AgentContext) => Effect.Effect<void, unknown, never>;\n readonly after?: (context: AgentContext) => Effect.Effect<void, unknown, never>;\n};\n"]}
@@ -0,0 +1,23 @@
1
+ import { Effect } from "effect";
2
+ import type { Agent, AgentContext, AgentSendContext, AgentBeforeContext, Turn, TurnInput } from "./types.cjs";
3
+ import type { Sandbox } from "../sandbox/types.cjs";
4
+ export type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
5
+ export interface AgentEffects {
6
+ readonly send: AgentSendEffect;
7
+ readonly before?: (sandbox: Sandbox, context: AgentBeforeContext) => Effect.Effect<void, unknown, never>;
8
+ readonly after?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
9
+ }
10
+ /** Promise facade for built-in adapters; Runner uses the registered Effect directly. */
11
+ export declare function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value>;
12
+ export declare function attachAgentEffects<AgentType extends Agent>(agent: AgentType, value: AgentEffects): AgentType;
13
+ /** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */
14
+ export declare function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never>;
15
+ export declare function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined;
16
+ export declare function agentBeforeEffect(agent: Agent, sandbox: Sandbox, context: AgentBeforeContext): Effect.Effect<void, unknown, never> | undefined;
17
+ export declare function agentAfterEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined;
18
+ export type InternalSandboxAgentDefinition = AgentEffects;
19
+ export type InternalDirectAgentDefinition = {
20
+ readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
21
+ readonly before?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
22
+ readonly after?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
23
+ };
@@ -0,0 +1,23 @@
1
+ import { Effect } from "effect";
2
+ import type { Agent, AgentContext, AgentSendContext, AgentBeforeContext, Turn, TurnInput } from "./types.mjs";
3
+ import type { Sandbox } from "../sandbox/types.mjs";
4
+ export type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
5
+ export interface AgentEffects {
6
+ readonly send: AgentSendEffect;
7
+ readonly before?: (sandbox: Sandbox, context: AgentBeforeContext) => Effect.Effect<void, unknown, never>;
8
+ readonly after?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
9
+ }
10
+ /** Promise facade for built-in adapters; Runner uses the registered Effect directly. */
11
+ export declare function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value>;
12
+ export declare function attachAgentEffects<AgentType extends Agent>(agent: AgentType, value: AgentEffects): AgentType;
13
+ /** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */
14
+ export declare function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never>;
15
+ export declare function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined;
16
+ export declare function agentBeforeEffect(agent: Agent, sandbox: Sandbox, context: AgentBeforeContext): Effect.Effect<void, unknown, never> | undefined;
17
+ export declare function agentAfterEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined;
18
+ export type InternalSandboxAgentDefinition = AgentEffects;
19
+ export type InternalDirectAgentDefinition = {
20
+ readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
21
+ readonly before?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
22
+ readonly after?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
23
+ };
@@ -0,0 +1,23 @@
1
+ import { Effect } from "effect";
2
+ import type { Agent, AgentContext, AgentSendContext, AgentBeforeContext, Turn, TurnInput } from "./types.js";
3
+ import type { Sandbox } from "../sandbox/types.js";
4
+ export type AgentSendEffect = (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
5
+ export interface AgentEffects {
6
+ readonly send: AgentSendEffect;
7
+ readonly before?: (sandbox: Sandbox, context: AgentBeforeContext) => Effect.Effect<void, unknown, never>;
8
+ readonly after?: (sandbox: Sandbox, context: AgentContext) => Effect.Effect<void, unknown, never>;
9
+ }
10
+ /** Promise facade for built-in adapters; Runner uses the registered Effect directly. */
11
+ export declare function effectAgentCallback<Args extends readonly unknown[], Value>(effect: (...args: Args) => Effect.Effect<Value, unknown, never>, signal: (...args: Args) => AbortSignal | undefined): (...args: Args) => Promise<Value>;
12
+ export declare function attachAgentEffects<AgentType extends Agent>(agent: AgentType, value: AgentEffects): AgentType;
13
+ /** Adapts the public Promise callback once; legacy Effect values remain an untyped runtime fallback. */
14
+ export declare function authorCallbackEffect<Value>(callback: () => Promise<Value> | Value): Effect.Effect<Value, unknown, never>;
15
+ export declare function agentSendEffect(agent: Agent, input: TurnInput, context: AgentSendContext): Effect.Effect<Turn, unknown, never> | undefined;
16
+ export declare function agentBeforeEffect(agent: Agent, sandbox: Sandbox, context: AgentBeforeContext): Effect.Effect<void, unknown, never> | undefined;
17
+ export declare function agentAfterEffect(agent: Agent, sandbox: Sandbox, context: AgentContext): Effect.Effect<void, unknown, never> | undefined;
18
+ export type InternalSandboxAgentDefinition = AgentEffects;
19
+ export type InternalDirectAgentDefinition = {
20
+ readonly send: (input: TurnInput, context: AgentSendContext) => Effect.Effect<Turn, unknown, never>;
21
+ readonly before?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
22
+ readonly after?: (context: AgentContext) => Effect.Effect<void, unknown, never>;
23
+ };
@@ -0,0 +1,16 @@
1
+ import { createRequire as __niceevalCreateRequire } from "node:module";
2
+ const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
+ const __niceevalCanonical = __niceevalRequire("./agent-effects.cjs");
4
+ const __niceevalExport0 = __niceevalCanonical["agentAfterEffect"];
5
+ export { __niceevalExport0 as agentAfterEffect };
6
+ const __niceevalExport1 = __niceevalCanonical["agentBeforeEffect"];
7
+ export { __niceevalExport1 as agentBeforeEffect };
8
+ const __niceevalExport2 = __niceevalCanonical["agentSendEffect"];
9
+ export { __niceevalExport2 as agentSendEffect };
10
+ const __niceevalExport3 = __niceevalCanonical["attachAgentEffects"];
11
+ export { __niceevalExport3 as attachAgentEffects };
12
+ const __niceevalExport4 = __niceevalCanonical["authorCallbackEffect"];
13
+ export { __niceevalExport4 as authorCallbackEffect };
14
+ const __niceevalExport5 = __niceevalCanonical["effectAgentCallback"];
15
+ export { __niceevalExport5 as effectAgentCallback };
16
+ //# sourceMappingURL=agent-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-effects.js","sources":[],"names":[],"mappings":""}
@@ -291,7 +291,7 @@ function num(value) {
291
291
  * });
292
292
  * ```
293
293
  */
294
- // @concord-code ne-adapter-ai-sdk-agent
294
+ // @concord-code
295
295
  // @concord-implements docs/feature/adapters/README.md
296
296
  // @concord-implements docs/feature/adapters/sdk/ai-sdk/README.md
297
297
  function aiSdkAgent(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.js","sourceRoot":"","sources":["ai-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExperimentFlags } from \"../shared/types.ts\";\n// AI SDK(Vercel `ai` 包)结果 → 标准事件流的共享转换器(采集通道 0:进程内直构)。\n//\n// 结构化 typing,不依赖 `ai` 包:niceeval 只认识 generateText / streamText 完整结果的\n// 【形状子集】。字段名跨 AI SDK 大版本漂移(v4 args/result/promptTokens、v5+ input/output/\n// inputTokens、v7 inputTokenDetails)在这里统一兜住,adapter 作者不必各自写防御代码,也不必\n// 像手工 recorder 那样包住每个工具的 execute —— AI SDK 的 steps 里本来就有带 toolCallId 的\n// 完整调用记录。\n//\n// v7 的 tool approval(工具带 `needsApproval`)也在这里兜:\n// · `tool-approval-request` part → `input.requested` 事件 + 整轮 `status: \"waiting\"`,\n// 直接满足 HITL 契约的「waiting + input.requested」两条义务(resume 仍归 adapter 管);\n// · 批准 / 拒绝后的 resume 结果里,执行结果只出现在 `responseMessages` 的 tool 消息中\n// (不在 steps 里),这里挖出来补成 `operation.finished` —— 拒绝(execution-denied)映射成\n// `status: \"rejected\"`,喂 `calledTool(..., { status: \"rejected\" })` 与 `noFailedActions()`。\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { Effect } from \"effect\";\nimport { makeDirectAgent } from \"../define.ts\";\nimport { makeSendFailure } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause } from \"../shared/external-cause.ts\";\nimport { normalizeJsonValue } from \"../shared/json-value.ts\";\nimport { normalizeToolName as normalizeShared } from \"../o11y/tool-names.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport type { Agent, InputRequest, InputResponse, JsonValue, StreamEvent, ToolName, Usage } from \"../types.ts\";\n// ───────────────────────── AI SDK 结果的形状子集 ─────────────────────────\n/** 一次工具调用(v5+ 用 `input`,v4 用 `args`;两者都认)。 */\nexport interface AiSdkToolCallLike {\n toolCallId: string;\n toolName: string;\n input?: unknown;\n args?: unknown;\n}\n/** 一次工具结果(v5+ 用 `output`,v4 用 `result`)。 */\nexport interface AiSdkToolResultLike {\n toolCallId: string;\n toolName?: string;\n output?: unknown;\n result?: unknown;\n}\n/**\n * step.content 的一个 part(v5+)。带类型序:同一 step 里 reasoning / text / tool-call /\n * tool-result / tool-error / tool-approval-request 按真实发生顺序排 —— 有它就优先用它,时序保真。\n */\nexport interface AiSdkContentPartLike {\n type: string;\n text?: unknown;\n toolCallId?: unknown;\n toolName?: unknown;\n input?: unknown;\n args?: unknown;\n output?: unknown;\n result?: unknown;\n error?: unknown;\n /** v7 tool approval:`tool-approval-request` part 的请求 id 与被拦下的调用。 */\n approvalId?: unknown;\n isAutomatic?: unknown;\n toolCall?: {\n toolCallId?: unknown;\n toolName?: unknown;\n input?: unknown;\n args?: unknown;\n };\n}\n/** 一个 step = 一次模型调用(工具循环里的一圈)。 */\nexport interface AiSdkStepLike {\n content?: readonly AiSdkContentPartLike[];\n text?: string;\n reasoningText?: string;\n toolCalls?: readonly AiSdkToolCallLike[];\n toolResults?: readonly AiSdkToolResultLike[];\n}\nexport interface AiSdkUsageLike {\n inputTokens?: number;\n outputTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n cachedInputTokens?: number;\n /** LanguageModelUsage(v5+)对推理模型(o-series 等)带回的思考 token,已计入 outputTokens。 */\n reasoningTokens?: number;\n /** v7:cache 细分挪进了 inputTokenDetails。 */\n inputTokenDetails?: {\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n };\n}\n/** result.responseMessages 的一条(只认 tool 消息里的 tool-result part,其余略过)。 */\nexport interface AiSdkResponseMessageLike {\n role?: unknown;\n content?: unknown;\n}\n/** generateText / streamText 完整结果的形状子集。没有 steps 的老结果退回顶层字段。 */\nexport interface AiSdkResultLike {\n text?: string;\n steps?: readonly AiSdkStepLike[];\n /** v7:跨全部 step 聚合的 content parts(approval 请求也在里面)。 */\n content?: readonly AiSdkContentPartLike[];\n toolCalls?: readonly AiSdkToolCallLike[];\n toolResults?: readonly AiSdkToolResultLike[];\n /** v5/v6 聚合全部 step 的用量;优先于 usage(v6 的 usage 只是最后一个 step,v7 起也是聚合)。 */\n totalUsage?: AiSdkUsageLike;\n usage?: AiSdkUsageLike;\n /**\n * 本次调用新产生的消息(v7)。tool approval 批准 / 拒绝后,被拦工具的执行结果只出现在\n * 这里的 tool 消息里(不进 steps),turnFromAiSdk 从中补齐 `operation.finished`。\n */\n responseMessages?: readonly AiSdkResponseMessageLike[];\n}\n/** turnFromAiSdk 的返回:铺进 `Turn` 即可(data 仍归调用方 —— 结构化输出是应用自己的语义)。 */\nexport interface AiSdkTurn {\n events: StreamEvent[];\n usage?: Usage;\n /** 有待人批准的工具调用(非 automatic 的 tool-approval-request)→ \"waiting\",否则 \"completed\"。 */\n status: \"completed\" | \"waiting\";\n /** 通用 AI SDK tool call 没有原生 command 分类时,随有工具调用的 Turn 降级 actions。 */\n evidenceCoverage?: {\n readonly actions: {\n readonly status: \"partial\";\n readonly reason: string;\n };\n };\n}\n// ───────────────────────── 转换 ─────────────────────────\n/**\n * AI SDK 结果 → `{ events, usage, status }`,直接铺进 `Turn` 返回:\n *\n * ```typescript\n * const result = await generateText({ model, tools, prompt: input.text });\n * return { ...turnFromAiSdk(result), data: result.text };\n * ```\n *\n * `callId` 用 AI SDK 原生的 `toolCallId`(显式配对,不合成);工具名保留原名进 `name`,\n * canonical 名进 `tool`(认不出的域内工具落 \"unknown\",`calledTool(\"get_weather\")`\n * 仍按原名匹配)。工具执行失败(v5+ 的 `tool-error` part)映射成 `status: \"failed\"` 的\n * `operation.finished`,喂 `noFailedActions()`。\n *\n * v7 tool approval:`needsApproval` 工具被拦下时返回 `status: \"waiting\"` + 每个待批准\n * 调用一条 `input.requested`(`id` = approvalId、`action` = 工具原名、`options` =\n * approve / deny)。resume(把 `tool-approval-response` 塞回 messages 再跑一次)后的结果\n * 再交给 turnFromAiSdk,会从 `responseMessages` 里补出执行 / 拒绝的 `operation.finished`。\n */\nexport function turnFromAiSdk(result: AiSdkResultLike): AiSdkTurn {\n const stepEvents: StreamEvent[] = [];\n const steps: readonly AiSdkStepLike[] = result.steps && result.steps.length > 0\n ? result.steps\n : [{ text: result.text, toolCalls: result.toolCalls, toolResults: result.toolResults }];\n const seen = { called: new Set<string>(), resolved: new Set<string>() };\n for (const step of steps) {\n if (Array.isArray(step.content) && step.content.length > 0) {\n pushContentParts(stepEvents, step.content, seen);\n }\n else {\n pushStepFields(stepEvents, step, seen);\n }\n }\n // approval resume 时被拦工具的执行结果只在 responseMessages 里;补出的 operation.finished\n // 排在本轮 step 事件之前 —— 时间上它确实先于模型看到结果后的新输出。\n const minedEvents = mineResponseMessages(result.responseMessages, seen.resolved);\n const events = [...minedEvents, ...stepEvents];\n const waiting = events.some((e) => e.type === \"input.requested\");\n const evidenceCoverage = unclassifiedToolActionsCoverage(events);\n return {\n events,\n usage: readUsage(result, steps.length),\n status: waiting ? \"waiting\" : \"completed\",\n ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }),\n };\n}\ninterface SeenCallIds {\n called: Set<string>;\n resolved: Set<string>;\n}\n/** v5+ 路径:content parts 自带真实顺序,逐个翻译。 */\nfunction pushContentParts(events: StreamEvent[], parts: readonly AiSdkContentPartLike[], seen: SeenCallIds): void {\n for (const part of parts) {\n switch (part.type) {\n case \"text\": {\n const text = str(part.text);\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n break;\n }\n case \"reasoning\": {\n const text = str(part.text);\n if (text)\n events.push({ type: \"thinking\", text });\n break;\n }\n case \"tool-call\": {\n pushCalled(events, seen, {\n toolCallId: str(part.toolCallId) ?? \"unknown\",\n toolName: str(part.toolName) ?? \"unknown\",\n input: part.input ?? part.args,\n });\n break;\n }\n case \"tool-result\": {\n const callId = str(part.toolCallId) ?? \"unknown\";\n seen.resolved.add(callId);\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: asJson(part.output ?? part.result),\n status: \"completed\",\n });\n break;\n }\n case \"tool-error\": {\n const callId = str(part.toolCallId) ?? \"unknown\";\n seen.resolved.add(callId);\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: { error: part.error instanceof Error ? part.error.message : String(part.error) },\n status: \"failed\",\n });\n break;\n }\n case \"tool-approval-request\": {\n // 同一 step 里通常已有配对的 tool-call part(去重);没有时从 toolCall 字段补。\n const call = part.toolCall;\n if (call) {\n pushCalled(events, seen, {\n toolCallId: str(call.toolCallId) ?? \"unknown\",\n toolName: str(call.toolName) ?? \"unknown\",\n input: call.input ?? call.args,\n });\n }\n if (part.isAutomatic === true)\n break; // SDK 自动裁决,不用等人\n const request: InputRequest = {\n id: str(part.approvalId),\n action: call ? str(call.toolName) : undefined,\n input: call ? asJson(call.input ?? call.args) : undefined,\n options: [{ id: \"approve\" }, { id: \"deny\" }],\n };\n events.push({ type: \"input.requested\", request });\n break;\n }\n default:\n break; // source / file 等其余 part 类型对断言无意义,丢弃\n }\n }\n}\n/** 退路(v4 / 无 content parts):toolCalls + toolResults + text,顺序按「调用 → 结果 → 文本」近似。 */\nfunction pushStepFields(events: StreamEvent[], step: AiSdkStepLike, seen: SeenCallIds): void {\n if (step.reasoningText)\n events.push({ type: \"thinking\", text: step.reasoningText });\n for (const call of step.toolCalls ?? []) {\n pushCalled(events, seen, { toolCallId: call.toolCallId, toolName: call.toolName, input: call.input ?? call.args });\n }\n for (const res of step.toolResults ?? []) {\n seen.resolved.add(res.toolCallId);\n events.push({\n type: \"operation.finished\",\n operationId: res.toolCallId,\n kind: \"tool\",\n output: asJson(res.output ?? res.result),\n status: \"completed\",\n });\n }\n if (step.text?.trim())\n events.push({ type: \"message\", role: \"assistant\", text: step.text });\n}\n/** 同一原生 tool call ID 只发一条 operation.started(tool-call part 与 approval-request 会重)。 */\nfunction pushCalled(events: StreamEvent[], seen: SeenCallIds, call: {\n toolCallId: string;\n toolName: string;\n input: unknown;\n}): void {\n if (seen.called.has(call.toolCallId))\n return;\n seen.called.add(call.toolCallId);\n events.push({\n type: \"operation.started\",\n operationId: call.toolCallId,\n operation: {\n kind: \"tool\",\n name: call.toolName,\n input: asJson(call.input),\n tool: normalizeToolName(call.toolName),\n },\n });\n}\n/**\n * 从 responseMessages 的 tool 消息里挖 steps 没有的 tool-result(v7 approval resume 的\n * 执行结果只在这里)。output 是 ToolResultOutput 包装({ type: \"json\" | \"text\" |\n * \"execution-denied\" | \"error-text\" | … }),按类型解包;`execution-denied` → \"rejected\"。\n */\nfunction mineResponseMessages(messages: readonly AiSdkResponseMessageLike[] | undefined, resolved: ReadonlySet<string>): StreamEvent[] {\n const events: StreamEvent[] = [];\n for (const msg of messages ?? []) {\n if (msg.role !== \"tool\" || !Array.isArray(msg.content))\n continue;\n for (const part of msg.content as AiSdkContentPartLike[]) {\n if (part.type !== \"tool-result\")\n continue;\n const callId = str(part.toolCallId);\n if (!callId || resolved.has(callId))\n continue;\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", ...unwrapToolOutput(part.output) });\n }\n }\n return events;\n}\nfunction unwrapToolOutput(output: unknown): {\n output?: JsonValue;\n status: \"completed\" | \"failed\" | \"rejected\";\n} {\n if (output && typeof output === \"object\" && !Array.isArray(output)) {\n const wrapped = output as {\n type?: unknown;\n value?: unknown;\n reason?: unknown;\n };\n switch (wrapped.type) {\n case \"json\":\n case \"text\":\n case \"content\":\n return { output: asJson(wrapped.value), status: \"completed\" };\n case \"execution-denied\":\n return {\n output: str(wrapped.reason) ? { reason: str(wrapped.reason)! } : undefined,\n status: \"rejected\",\n };\n case \"error-text\":\n case \"error-json\":\n return { output: { error: asJson(wrapped.value) }, status: \"failed\" };\n default:\n break;\n }\n }\n return { output: asJson(output), status: \"completed\" };\n}\n/** totalUsage(v5/v6 的全 steps 聚合)优先;v7 的 usage 本身就是聚合;requests = step 数。 */\nfunction readUsage(result: AiSdkResultLike, stepCount: number): Usage | undefined {\n const u = result.totalUsage ?? result.usage;\n if (!u)\n return undefined;\n const rawInput = num(u.inputTokens) ?? num(u.promptTokens) ?? 0;\n const outputTokens = num(u.outputTokens) ?? num(u.completionTokens) ?? 0;\n if (rawInput === 0 && outputTokens === 0)\n return undefined;\n const cacheRead = num(u.cachedInputTokens) ?? num(u.inputTokenDetails?.cacheReadTokens) ?? 0;\n const cacheCreation = num(u.inputTokenDetails?.cacheWriteTokens) ?? 0;\n // AI SDK 的 inputTokens 是含缓存明细的输入总量,落互斥桶前扣掉在场的明细\n // (docs/feature/adapters/sdk/ai-sdk/cost.md)\n const inputTokens = Math.max(0, rawInput - cacheRead - cacheCreation);\n const usage: Usage = { inputTokens, outputTokens, requests: Math.max(stepCount, 1) };\n if (cacheRead)\n usage.cacheReadTokens = cacheRead;\n if (cacheCreation)\n usage.cacheCreationTokens = cacheCreation;\n const reasoning = num(u.reasoningTokens);\n if (reasoning)\n usage.reasoningTokens = reasoning;\n return usage;\n}\n/** AI SDK 应用的工具多为域内自定义名(get_weather…),canonical 落 \"unknown\" 即可;仅认通用别名基表。 */\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name);\n}\n/** 工具入参 / 出参来自可替换的 AI SDK 版本;在边界立即清洗成领域 JsonValue。 */\nfunction asJson(value: unknown): JsonValue {\n return normalizeJsonValue(value);\n}\nfunction str(value: unknown): string | undefined {\n return typeof value === \"string\" && value ? value : undefined;\n}\nfunction num(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n// ───────────────────────── 内建 agent 工厂 ─────────────────────────\n/**\n * `generate` 收到的上下文。`messages` 是本会话的完整 ModelMessage 历史(含本轮的用户消息 /\n * approval 裁决),直接透传给 generateText / streamText 即可;泛型 `M` 由调用方钉成自己\n * AI SDK 版本的 `ModelMessage`,niceeval 不引 `ai` 包。\n */\nexport interface AiSdkGenerateContext<M = JsonValue, Integration extends object = object> {\n readonly messages: M[];\n /** 实验钉的 model(ctx.model);省略 → 用应用自己的默认。 */\n readonly model?: string;\n /** 实验钉的推理努力程度(ctx.reasoningEffort);省略 → 用应用自己的默认。应用自己决定怎么塞进 providerOptions(如 OpenAI 的 reasoningEffort)。 */\n readonly reasoningEffort?: string;\n readonly signal: AbortSignal;\n readonly flags: ExperimentFlags;\n /**\n * 配了 `tracing`(如 `aiSdkOtel()`)才有:直接放进 generateText / streamText 的\n * `telemetry` 选项。OTel provider、per-attempt 端点绑定和轮末 flush 都由工厂做,\n * 应用侧原样透传即可。\n */\n readonly telemetry?: AiSdkTelemetrySettings<Integration>;\n}\n/**\n * generateText / streamText 的 `telemetry` 选项的形状子集。integrations 的元素是\n * `@ai-sdk/otel` 的集成实例。`Integration` 由 tracing 实现携带,niceeval 不引\n * 用户版本的 `ai` 包,也不在中间层抹成 `any`。\n */\nexport interface AiSdkTelemetrySettings<Integration extends object = object> {\n readonly integrations: readonly Integration[];\n}\n/** tracing 管线为某一轮建好的遥测件(`AiSdkTracing.telemetryForEndpoint` 的返回值)。 */\nexport interface AiSdkTurnTelemetry<Integration extends object = object> {\n /** 直接放进 generateText / streamText 的 `telemetry` 选项。 */\n settings: AiSdkTelemetrySettings<Integration>;\n /** 每轮结束后由工厂调用:轮次归属靠时间窗口,span 必须立刻送到,不能等 batch。 */\n flush(): Promise<void>;\n}\n/**\n * `aiSdkAgent` 的 tracing 管线契约。内置实现是 `niceeval/adapter/otel` 的 `aiSdkOtel()`——\n * 独立子路径导出,OTel 三件套是可选 peer 依赖,只有 import 那个入口的项目才需要安装;\n * 这里只放形状,`niceeval/adapter` 本身零 OTel 依赖。\n */\nexport interface AiSdkTracing<Integration extends object = object> {\n /** 为本轮的 OTLP 接收端点建(或复用)一条导出管线。每个 attempt 端点不同,按端点缓存。 */\n telemetryForEndpoint(endpoint: string): AiSdkTurnTelemetry<Integration>;\n}\nexport interface AiSdkAgentOptions<M = JsonValue, Integration extends object = object> {\n /** agent 名(报告 / 结果聚合的身份)。默认 \"ai-sdk\"。 */\n name?: string;\n /**\n * 开 OTel 管线(拿 `niceeval view` 的瀑布图):传 `niceeval/adapter/otel` 的\n * `aiSdkOtel()`。设了运行器就为这个 agent 开 per-attempt OTLP 接收器,工厂每轮用\n * 管线建好绑定接收端点的集成,经 `generate` 的 ctx.telemetry 交给应用,原样透传给\n * generateText / streamText 的 `telemetry` 选项即可。省略则整个 OTel 管线不开,\n * `generate` 拿到的 `telemetry` 恒为 undefined,应用侧零开销。\n *\n * ```typescript\n * import { aiSdkOtel } from \"niceeval/adapter/otel\";\n * aiSdkAgent({ tracing: aiSdkOtel(), generate });\n * ```\n */\n tracing?: AiSdkTracing<Integration>;\n /**\n * 每轮一召:拿会话历史跑一次 generateText / streamText(await 完整结果)并原样返回。\n * model / tools / system prompt / stopWhen 都在这里配 —— 那是应用的事,工厂不掺和。\n */\n generate(ctx: AiSdkGenerateContext<M, Integration>): Promise<AiSdkResultLike>;\n /** 本轮的结构化输出(Turn.data,供 `t.check(turn.data, match)` 使用)。省略则 data 为 undefined。 */\n data?(result: AiSdkResultLike, turn: AiSdkTurn): JsonValue;\n}\n/**\n * 内建的 AI SDK 进程内 agent 工厂:把「一个 generateText 调用」变成完整的 niceeval agent。\n * 应用只写 `generate`(怎么召模型),协议侧的活全部由工厂承担:\n *\n * · 多轮会话:ctx.session.id 未记录时开新会话线并 capture 回写,同一 id 续接同一份\n * messages 历史;\n * · 事件流:结果经 {@link turnFromAiSdk} 直构(toolCallId 配对、时序保真、usage);\n * · HITL:`needsApproval` 工具停轮 → `waiting` + `input.requested`;下一轮输入按行翻译成\n * tool-approval-response(以 approve / yes / 同意 / 批准 开头 = 批准,其余一律拒绝)塞回\n * messages 再召 `generate`,SDK 才会执行(或跳过)被拦的工具;\n * · 失败兜底:`generate` 抛错或结果完全为空 → `status: \"failed\"` + error 事件;\n * · tracing:传 `tracing: aiSdkOtel()`(来自 `niceeval/adapter/otel`)后,工厂替应用\n * 做完 OTel 管线——为每轮建好绑定 niceeval 接收端点的 `@ai-sdk/otel` 集成(经\n * ctx.telemetry 交给 generate,原样透传给 generateText 的 `telemetry` 即可)并在轮末\n * flush;`aiSdkOtel({ backendUrl })` 可选双发到你自己的观测后端。应用侧零埋点代码。\n *\n * ```typescript\n * import { aiSdkAgent } from \"niceeval/adapter\";\n * import { generateText, isStepCount, type ModelMessage } from \"ai\";\n *\n * export const assistant = aiSdkAgent<ModelMessage>({\n * name: \"my-assistant\",\n * generate: ({ messages, model, signal }) =>\n * generateText({ model: resolveModel(model), system: SYSTEM_PROMPT,\n * tools, stopWhen: isStepCount(5), messages, abortSignal: signal }),\n * data: (result) => ({ reply: result.text }),\n * });\n * ```\n */\n// @concord-code ne-adapter-ai-sdk-agent\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/ai-sdk/README.md\nexport function aiSdkAgent<M = JsonValue, Integration extends object = object>(options: AiSdkAgentOptions<M, Integration>): Agent {\n interface SessionState {\n messages: M[];\n /** 上一轮停下的 tool approval:下一轮输入按行翻译成裁决。 */\n pendingApprovals: string[];\n }\n const sessions = new Map<string, SessionState>();\n return makeDirectAgent({\n name: options.name ?? \"ai-sdk\",\n // 官方 SDK 完整 steps/output:全通道 complete(见 adapters/architecture/evidence.md)。\n evidenceCoverage: completeEvidenceCoverage,\n // tracing 开了才让运行器为这个 agent 起 OTLP 接收器(ctx.telemetry 才会出现);\n // AgentTracing 的其余字段(env/configure/scope)这里都用不上,空对象即可。\n tracing: options.tracing ? {} : undefined,\n send: (input, ctx) => Effect.tryPromise({\n try: async () => {\n // 会话续接:ctx.session.id 未记录时开新会话并 capture 回写;否则按 id 续接同一份历史。\n const id = ctx.session.id ?? `ai-sdk-${randomUUID()}`;\n ctx.session.capture(id);\n let state = sessions.get(id);\n if (!state) {\n state = { messages: [], pendingApprovals: [] };\n sessions.set(id, state);\n }\n if (state.pendingApprovals.length > 0) {\n // HITL:t.respond 的回答到 adapter 就是一次普通的带 responses 的 send,按\n // requestId(= approvalId)对位取裁决;没答到的请求直接报错,不从文本猜。\n const content = state.pendingApprovals.map((approvalId) => ({\n type: \"tool-approval-response\" as const,\n approvalId,\n approved: approvalDecision(input.responses, approvalId),\n }));\n state.pendingApprovals = [];\n state.messages.push({ role: \"tool\", content } as M);\n }\n else {\n state.messages.push(userMessage(input.text, input.files) as M);\n }\n // tracing 管线由调用方显式传入(niceeval/adapter/otel 的 aiSdkOtel()),工厂只管\n // 每轮把 per-attempt 端点交给它、轮末 flush。\n const otel = ctx.telemetry && options.tracing ? options.tracing.telemetryForEndpoint(ctx.telemetry.endpoint) : undefined;\n let result: AiSdkResultLike;\n try {\n result = await options.generate({\n messages: state.messages,\n model: ctx.model,\n reasoningEffort: ctx.reasoningEffort,\n signal: ctx.signal,\n flags: ctx.flags,\n telemetry: otel?.settings,\n });\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw makeSendFailure({ acceptance: \"unknown\", message, cause: normalizeExternalCause(error) });\n }\n finally {\n // 轮次归属靠时间窗口:本轮 span 必须在 send 返回前送到接收器,不能等 batch。\n await otel?.flush();\n }\n // resume 的另一半义务:本次调用新产生的消息(含 approval 执行结果)进历史。\n state.messages.push(...((result.responseMessages ?? []) as M[]));\n state.pendingApprovals = collectPendingApprovals(result);\n const turn = turnFromAiSdk(result);\n // 上游偶尔退化返回完全空的结果;当正常回复会把故障伪装成通过,按失败处理。\n if (turn.events.length === 0) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: \"AI SDK returned an empty result (no text, no tool calls)\",\n });\n }\n return { ...turn, data: options.data?.(result, turn) };\n },\n catch: (cause) => cause,\n }),\n });\n}\n/** 裁决词法(t.respond 的自由文本回答):approve / yes / 同意 / 批准 开头 = 批准,其余一律拒绝。 */\nfunction isApproved(line: string): boolean {\n return /^(approve|yes|同意|批准)/i.test(line);\n}\n/** 按 requestId(= approvalId)从 input.responses 对位取裁决;optionId 优先,自由文本走 isApproved。 */\nfunction approvalDecision(responses: readonly InputResponse[] | undefined, requestId: string): boolean {\n const matched = responses?.find((r) => r.requestId === requestId);\n if (!matched) {\n throw new Error(`No response for pending approval \"${requestId}\". Answer approval requests with t.respond(...).`);\n }\n if (matched.optionId !== undefined)\n return matched.optionId === \"approve\";\n return isApproved(matched.text?.trim() ?? \"\");\n}\n/** 待人批准的 approval 请求 id(非 automatic)。steps 优先,退回 v7 顶层聚合 content。 */\nfunction collectPendingApprovals(result: AiSdkResultLike): string[] {\n const parts: AiSdkContentPartLike[] = [];\n if (result.steps?.length) {\n for (const step of result.steps)\n if (Array.isArray(step.content))\n parts.push(...step.content);\n }\n else if (Array.isArray(result.content)) {\n parts.push(...result.content);\n }\n const ids: string[] = [];\n for (const part of parts) {\n if (part.type !== \"tool-approval-request\" || part.isAutomatic === true)\n continue;\n const approvalId = str(part.approvalId);\n if (approvalId)\n ids.push(approvalId);\n }\n return ids;\n}\n/**\n * t.sendFile 带来的文件(base64)转成 AI SDK 的多模态用户消息;纯文本就是纯文本。\n * 用 `file` part(v7 推荐;`image` part 已废弃),mediaType 原样透传,图片之外的附件也能走。\n */\nfunction userMessage(text: string, files: readonly {\n mimeType: string;\n dataBase64: string;\n}[] | undefined): unknown {\n if (!files || files.length === 0)\n return { role: \"user\", content: text };\n return {\n role: \"user\",\n content: [\n { type: \"text\", text: text || \"请描述这个附件。\" },\n ...files.map((f) => ({ type: \"file\", mediaType: f.mimeType, data: f.dataBase64 })),\n ],\n };\n}\n"]}
1
+ {"version":3,"file":"ai-sdk.js","sourceRoot":"","sources":["ai-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExperimentFlags } from \"../shared/types.ts\";\n// AI SDK(Vercel `ai` 包)结果 → 标准事件流的共享转换器(采集通道 0:进程内直构)。\n//\n// 结构化 typing,不依赖 `ai` 包:niceeval 只认识 generateText / streamText 完整结果的\n// 【形状子集】。字段名跨 AI SDK 大版本漂移(v4 args/result/promptTokens、v5+ input/output/\n// inputTokens、v7 inputTokenDetails)在这里统一兜住,adapter 作者不必各自写防御代码,也不必\n// 像手工 recorder 那样包住每个工具的 execute —— AI SDK 的 steps 里本来就有带 toolCallId 的\n// 完整调用记录。\n//\n// v7 的 tool approval(工具带 `needsApproval`)也在这里兜:\n// · `tool-approval-request` part → `input.requested` 事件 + 整轮 `status: \"waiting\"`,\n// 直接满足 HITL 契约的「waiting + input.requested」两条义务(resume 仍归 adapter 管);\n// · 批准 / 拒绝后的 resume 结果里,执行结果只出现在 `responseMessages` 的 tool 消息中\n// (不在 steps 里),这里挖出来补成 `operation.finished` —— 拒绝(execution-denied)映射成\n// `status: \"rejected\"`,喂 `calledTool(..., { status: \"rejected\" })` 与 `noFailedActions()`。\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { Effect } from \"effect\";\nimport { makeDirectAgent } from \"../define.ts\";\nimport { makeSendFailure } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause } from \"../shared/external-cause.ts\";\nimport { normalizeJsonValue } from \"../shared/json-value.ts\";\nimport { normalizeToolName as normalizeShared } from \"../o11y/tool-names.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport type { Agent, InputRequest, InputResponse, JsonValue, StreamEvent, ToolName, Usage } from \"../types.ts\";\n// ───────────────────────── AI SDK 结果的形状子集 ─────────────────────────\n/** 一次工具调用(v5+ 用 `input`,v4 用 `args`;两者都认)。 */\nexport interface AiSdkToolCallLike {\n toolCallId: string;\n toolName: string;\n input?: unknown;\n args?: unknown;\n}\n/** 一次工具结果(v5+ 用 `output`,v4 用 `result`)。 */\nexport interface AiSdkToolResultLike {\n toolCallId: string;\n toolName?: string;\n output?: unknown;\n result?: unknown;\n}\n/**\n * step.content 的一个 part(v5+)。带类型序:同一 step 里 reasoning / text / tool-call /\n * tool-result / tool-error / tool-approval-request 按真实发生顺序排 —— 有它就优先用它,时序保真。\n */\nexport interface AiSdkContentPartLike {\n type: string;\n text?: unknown;\n toolCallId?: unknown;\n toolName?: unknown;\n input?: unknown;\n args?: unknown;\n output?: unknown;\n result?: unknown;\n error?: unknown;\n /** v7 tool approval:`tool-approval-request` part 的请求 id 与被拦下的调用。 */\n approvalId?: unknown;\n isAutomatic?: unknown;\n toolCall?: {\n toolCallId?: unknown;\n toolName?: unknown;\n input?: unknown;\n args?: unknown;\n };\n}\n/** 一个 step = 一次模型调用(工具循环里的一圈)。 */\nexport interface AiSdkStepLike {\n content?: readonly AiSdkContentPartLike[];\n text?: string;\n reasoningText?: string;\n toolCalls?: readonly AiSdkToolCallLike[];\n toolResults?: readonly AiSdkToolResultLike[];\n}\nexport interface AiSdkUsageLike {\n inputTokens?: number;\n outputTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n cachedInputTokens?: number;\n /** LanguageModelUsage(v5+)对推理模型(o-series 等)带回的思考 token,已计入 outputTokens。 */\n reasoningTokens?: number;\n /** v7:cache 细分挪进了 inputTokenDetails。 */\n inputTokenDetails?: {\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n };\n}\n/** result.responseMessages 的一条(只认 tool 消息里的 tool-result part,其余略过)。 */\nexport interface AiSdkResponseMessageLike {\n role?: unknown;\n content?: unknown;\n}\n/** generateText / streamText 完整结果的形状子集。没有 steps 的老结果退回顶层字段。 */\nexport interface AiSdkResultLike {\n text?: string;\n steps?: readonly AiSdkStepLike[];\n /** v7:跨全部 step 聚合的 content parts(approval 请求也在里面)。 */\n content?: readonly AiSdkContentPartLike[];\n toolCalls?: readonly AiSdkToolCallLike[];\n toolResults?: readonly AiSdkToolResultLike[];\n /** v5/v6 聚合全部 step 的用量;优先于 usage(v6 的 usage 只是最后一个 step,v7 起也是聚合)。 */\n totalUsage?: AiSdkUsageLike;\n usage?: AiSdkUsageLike;\n /**\n * 本次调用新产生的消息(v7)。tool approval 批准 / 拒绝后,被拦工具的执行结果只出现在\n * 这里的 tool 消息里(不进 steps),turnFromAiSdk 从中补齐 `operation.finished`。\n */\n responseMessages?: readonly AiSdkResponseMessageLike[];\n}\n/** turnFromAiSdk 的返回:铺进 `Turn` 即可(data 仍归调用方 —— 结构化输出是应用自己的语义)。 */\nexport interface AiSdkTurn {\n events: StreamEvent[];\n usage?: Usage;\n /** 有待人批准的工具调用(非 automatic 的 tool-approval-request)→ \"waiting\",否则 \"completed\"。 */\n status: \"completed\" | \"waiting\";\n /** 通用 AI SDK tool call 没有原生 command 分类时,随有工具调用的 Turn 降级 actions。 */\n evidenceCoverage?: {\n readonly actions: {\n readonly status: \"partial\";\n readonly reason: string;\n };\n };\n}\n// ───────────────────────── 转换 ─────────────────────────\n/**\n * AI SDK 结果 → `{ events, usage, status }`,直接铺进 `Turn` 返回:\n *\n * ```typescript\n * const result = await generateText({ model, tools, prompt: input.text });\n * return { ...turnFromAiSdk(result), data: result.text };\n * ```\n *\n * `callId` 用 AI SDK 原生的 `toolCallId`(显式配对,不合成);工具名保留原名进 `name`,\n * canonical 名进 `tool`(认不出的域内工具落 \"unknown\",`calledTool(\"get_weather\")`\n * 仍按原名匹配)。工具执行失败(v5+ 的 `tool-error` part)映射成 `status: \"failed\"` 的\n * `operation.finished`,喂 `noFailedActions()`。\n *\n * v7 tool approval:`needsApproval` 工具被拦下时返回 `status: \"waiting\"` + 每个待批准\n * 调用一条 `input.requested`(`id` = approvalId、`action` = 工具原名、`options` =\n * approve / deny)。resume(把 `tool-approval-response` 塞回 messages 再跑一次)后的结果\n * 再交给 turnFromAiSdk,会从 `responseMessages` 里补出执行 / 拒绝的 `operation.finished`。\n */\nexport function turnFromAiSdk(result: AiSdkResultLike): AiSdkTurn {\n const stepEvents: StreamEvent[] = [];\n const steps: readonly AiSdkStepLike[] = result.steps && result.steps.length > 0\n ? result.steps\n : [{ text: result.text, toolCalls: result.toolCalls, toolResults: result.toolResults }];\n const seen = { called: new Set<string>(), resolved: new Set<string>() };\n for (const step of steps) {\n if (Array.isArray(step.content) && step.content.length > 0) {\n pushContentParts(stepEvents, step.content, seen);\n }\n else {\n pushStepFields(stepEvents, step, seen);\n }\n }\n // approval resume 时被拦工具的执行结果只在 responseMessages 里;补出的 operation.finished\n // 排在本轮 step 事件之前 —— 时间上它确实先于模型看到结果后的新输出。\n const minedEvents = mineResponseMessages(result.responseMessages, seen.resolved);\n const events = [...minedEvents, ...stepEvents];\n const waiting = events.some((e) => e.type === \"input.requested\");\n const evidenceCoverage = unclassifiedToolActionsCoverage(events);\n return {\n events,\n usage: readUsage(result, steps.length),\n status: waiting ? \"waiting\" : \"completed\",\n ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }),\n };\n}\ninterface SeenCallIds {\n called: Set<string>;\n resolved: Set<string>;\n}\n/** v5+ 路径:content parts 自带真实顺序,逐个翻译。 */\nfunction pushContentParts(events: StreamEvent[], parts: readonly AiSdkContentPartLike[], seen: SeenCallIds): void {\n for (const part of parts) {\n switch (part.type) {\n case \"text\": {\n const text = str(part.text);\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n break;\n }\n case \"reasoning\": {\n const text = str(part.text);\n if (text)\n events.push({ type: \"thinking\", text });\n break;\n }\n case \"tool-call\": {\n pushCalled(events, seen, {\n toolCallId: str(part.toolCallId) ?? \"unknown\",\n toolName: str(part.toolName) ?? \"unknown\",\n input: part.input ?? part.args,\n });\n break;\n }\n case \"tool-result\": {\n const callId = str(part.toolCallId) ?? \"unknown\";\n seen.resolved.add(callId);\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: asJson(part.output ?? part.result),\n status: \"completed\",\n });\n break;\n }\n case \"tool-error\": {\n const callId = str(part.toolCallId) ?? \"unknown\";\n seen.resolved.add(callId);\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: { error: part.error instanceof Error ? part.error.message : String(part.error) },\n status: \"failed\",\n });\n break;\n }\n case \"tool-approval-request\": {\n // 同一 step 里通常已有配对的 tool-call part(去重);没有时从 toolCall 字段补。\n const call = part.toolCall;\n if (call) {\n pushCalled(events, seen, {\n toolCallId: str(call.toolCallId) ?? \"unknown\",\n toolName: str(call.toolName) ?? \"unknown\",\n input: call.input ?? call.args,\n });\n }\n if (part.isAutomatic === true)\n break; // SDK 自动裁决,不用等人\n const request: InputRequest = {\n id: str(part.approvalId),\n action: call ? str(call.toolName) : undefined,\n input: call ? asJson(call.input ?? call.args) : undefined,\n options: [{ id: \"approve\" }, { id: \"deny\" }],\n };\n events.push({ type: \"input.requested\", request });\n break;\n }\n default:\n break; // source / file 等其余 part 类型对断言无意义,丢弃\n }\n }\n}\n/** 退路(v4 / 无 content parts):toolCalls + toolResults + text,顺序按「调用 → 结果 → 文本」近似。 */\nfunction pushStepFields(events: StreamEvent[], step: AiSdkStepLike, seen: SeenCallIds): void {\n if (step.reasoningText)\n events.push({ type: \"thinking\", text: step.reasoningText });\n for (const call of step.toolCalls ?? []) {\n pushCalled(events, seen, { toolCallId: call.toolCallId, toolName: call.toolName, input: call.input ?? call.args });\n }\n for (const res of step.toolResults ?? []) {\n seen.resolved.add(res.toolCallId);\n events.push({\n type: \"operation.finished\",\n operationId: res.toolCallId,\n kind: \"tool\",\n output: asJson(res.output ?? res.result),\n status: \"completed\",\n });\n }\n if (step.text?.trim())\n events.push({ type: \"message\", role: \"assistant\", text: step.text });\n}\n/** 同一原生 tool call ID 只发一条 operation.started(tool-call part 与 approval-request 会重)。 */\nfunction pushCalled(events: StreamEvent[], seen: SeenCallIds, call: {\n toolCallId: string;\n toolName: string;\n input: unknown;\n}): void {\n if (seen.called.has(call.toolCallId))\n return;\n seen.called.add(call.toolCallId);\n events.push({\n type: \"operation.started\",\n operationId: call.toolCallId,\n operation: {\n kind: \"tool\",\n name: call.toolName,\n input: asJson(call.input),\n tool: normalizeToolName(call.toolName),\n },\n });\n}\n/**\n * 从 responseMessages 的 tool 消息里挖 steps 没有的 tool-result(v7 approval resume 的\n * 执行结果只在这里)。output 是 ToolResultOutput 包装({ type: \"json\" | \"text\" |\n * \"execution-denied\" | \"error-text\" | … }),按类型解包;`execution-denied` → \"rejected\"。\n */\nfunction mineResponseMessages(messages: readonly AiSdkResponseMessageLike[] | undefined, resolved: ReadonlySet<string>): StreamEvent[] {\n const events: StreamEvent[] = [];\n for (const msg of messages ?? []) {\n if (msg.role !== \"tool\" || !Array.isArray(msg.content))\n continue;\n for (const part of msg.content as AiSdkContentPartLike[]) {\n if (part.type !== \"tool-result\")\n continue;\n const callId = str(part.toolCallId);\n if (!callId || resolved.has(callId))\n continue;\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", ...unwrapToolOutput(part.output) });\n }\n }\n return events;\n}\nfunction unwrapToolOutput(output: unknown): {\n output?: JsonValue;\n status: \"completed\" | \"failed\" | \"rejected\";\n} {\n if (output && typeof output === \"object\" && !Array.isArray(output)) {\n const wrapped = output as {\n type?: unknown;\n value?: unknown;\n reason?: unknown;\n };\n switch (wrapped.type) {\n case \"json\":\n case \"text\":\n case \"content\":\n return { output: asJson(wrapped.value), status: \"completed\" };\n case \"execution-denied\":\n return {\n output: str(wrapped.reason) ? { reason: str(wrapped.reason)! } : undefined,\n status: \"rejected\",\n };\n case \"error-text\":\n case \"error-json\":\n return { output: { error: asJson(wrapped.value) }, status: \"failed\" };\n default:\n break;\n }\n }\n return { output: asJson(output), status: \"completed\" };\n}\n/** totalUsage(v5/v6 的全 steps 聚合)优先;v7 的 usage 本身就是聚合;requests = step 数。 */\nfunction readUsage(result: AiSdkResultLike, stepCount: number): Usage | undefined {\n const u = result.totalUsage ?? result.usage;\n if (!u)\n return undefined;\n const rawInput = num(u.inputTokens) ?? num(u.promptTokens) ?? 0;\n const outputTokens = num(u.outputTokens) ?? num(u.completionTokens) ?? 0;\n if (rawInput === 0 && outputTokens === 0)\n return undefined;\n const cacheRead = num(u.cachedInputTokens) ?? num(u.inputTokenDetails?.cacheReadTokens) ?? 0;\n const cacheCreation = num(u.inputTokenDetails?.cacheWriteTokens) ?? 0;\n // AI SDK 的 inputTokens 是含缓存明细的输入总量,落互斥桶前扣掉在场的明细\n // (docs/feature/adapters/sdk/ai-sdk/cost.md)\n const inputTokens = Math.max(0, rawInput - cacheRead - cacheCreation);\n const usage: Usage = { inputTokens, outputTokens, requests: Math.max(stepCount, 1) };\n if (cacheRead)\n usage.cacheReadTokens = cacheRead;\n if (cacheCreation)\n usage.cacheCreationTokens = cacheCreation;\n const reasoning = num(u.reasoningTokens);\n if (reasoning)\n usage.reasoningTokens = reasoning;\n return usage;\n}\n/** AI SDK 应用的工具多为域内自定义名(get_weather…),canonical 落 \"unknown\" 即可;仅认通用别名基表。 */\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name);\n}\n/** 工具入参 / 出参来自可替换的 AI SDK 版本;在边界立即清洗成领域 JsonValue。 */\nfunction asJson(value: unknown): JsonValue {\n return normalizeJsonValue(value);\n}\nfunction str(value: unknown): string | undefined {\n return typeof value === \"string\" && value ? value : undefined;\n}\nfunction num(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n// ───────────────────────── 内建 agent 工厂 ─────────────────────────\n/**\n * `generate` 收到的上下文。`messages` 是本会话的完整 ModelMessage 历史(含本轮的用户消息 /\n * approval 裁决),直接透传给 generateText / streamText 即可;泛型 `M` 由调用方钉成自己\n * AI SDK 版本的 `ModelMessage`,niceeval 不引 `ai` 包。\n */\nexport interface AiSdkGenerateContext<M = JsonValue, Integration extends object = object> {\n readonly messages: M[];\n /** 实验钉的 model(ctx.model);省略 → 用应用自己的默认。 */\n readonly model?: string;\n /** 实验钉的推理努力程度(ctx.reasoningEffort);省略 → 用应用自己的默认。应用自己决定怎么塞进 providerOptions(如 OpenAI 的 reasoningEffort)。 */\n readonly reasoningEffort?: string;\n readonly signal: AbortSignal;\n readonly flags: ExperimentFlags;\n /**\n * 配了 `tracing`(如 `aiSdkOtel()`)才有:直接放进 generateText / streamText 的\n * `telemetry` 选项。OTel provider、per-attempt 端点绑定和轮末 flush 都由工厂做,\n * 应用侧原样透传即可。\n */\n readonly telemetry?: AiSdkTelemetrySettings<Integration>;\n}\n/**\n * generateText / streamText 的 `telemetry` 选项的形状子集。integrations 的元素是\n * `@ai-sdk/otel` 的集成实例。`Integration` 由 tracing 实现携带,niceeval 不引\n * 用户版本的 `ai` 包,也不在中间层抹成 `any`。\n */\nexport interface AiSdkTelemetrySettings<Integration extends object = object> {\n readonly integrations: readonly Integration[];\n}\n/** tracing 管线为某一轮建好的遥测件(`AiSdkTracing.telemetryForEndpoint` 的返回值)。 */\nexport interface AiSdkTurnTelemetry<Integration extends object = object> {\n /** 直接放进 generateText / streamText 的 `telemetry` 选项。 */\n settings: AiSdkTelemetrySettings<Integration>;\n /** 每轮结束后由工厂调用:轮次归属靠时间窗口,span 必须立刻送到,不能等 batch。 */\n flush(): Promise<void>;\n}\n/**\n * `aiSdkAgent` 的 tracing 管线契约。内置实现是 `niceeval/adapter/otel` 的 `aiSdkOtel()`——\n * 独立子路径导出,OTel 三件套是可选 peer 依赖,只有 import 那个入口的项目才需要安装;\n * 这里只放形状,`niceeval/adapter` 本身零 OTel 依赖。\n */\nexport interface AiSdkTracing<Integration extends object = object> {\n /** 为本轮的 OTLP 接收端点建(或复用)一条导出管线。每个 attempt 端点不同,按端点缓存。 */\n telemetryForEndpoint(endpoint: string): AiSdkTurnTelemetry<Integration>;\n}\nexport interface AiSdkAgentOptions<M = JsonValue, Integration extends object = object> {\n /** agent 名(报告 / 结果聚合的身份)。默认 \"ai-sdk\"。 */\n name?: string;\n /**\n * 开 OTel 管线(拿 `niceeval view` 的瀑布图):传 `niceeval/adapter/otel` 的\n * `aiSdkOtel()`。设了运行器就为这个 agent 开 per-attempt OTLP 接收器,工厂每轮用\n * 管线建好绑定接收端点的集成,经 `generate` 的 ctx.telemetry 交给应用,原样透传给\n * generateText / streamText 的 `telemetry` 选项即可。省略则整个 OTel 管线不开,\n * `generate` 拿到的 `telemetry` 恒为 undefined,应用侧零开销。\n *\n * ```typescript\n * import { aiSdkOtel } from \"niceeval/adapter/otel\";\n * aiSdkAgent({ tracing: aiSdkOtel(), generate });\n * ```\n */\n tracing?: AiSdkTracing<Integration>;\n /**\n * 每轮一召:拿会话历史跑一次 generateText / streamText(await 完整结果)并原样返回。\n * model / tools / system prompt / stopWhen 都在这里配 —— 那是应用的事,工厂不掺和。\n */\n generate(ctx: AiSdkGenerateContext<M, Integration>): Promise<AiSdkResultLike>;\n /** 本轮的结构化输出(Turn.data,供 `t.check(turn.data, match)` 使用)。省略则 data 为 undefined。 */\n data?(result: AiSdkResultLike, turn: AiSdkTurn): JsonValue;\n}\n/**\n * 内建的 AI SDK 进程内 agent 工厂:把「一个 generateText 调用」变成完整的 niceeval agent。\n * 应用只写 `generate`(怎么召模型),协议侧的活全部由工厂承担:\n *\n * · 多轮会话:ctx.session.id 未记录时开新会话线并 capture 回写,同一 id 续接同一份\n * messages 历史;\n * · 事件流:结果经 {@link turnFromAiSdk} 直构(toolCallId 配对、时序保真、usage);\n * · HITL:`needsApproval` 工具停轮 → `waiting` + `input.requested`;下一轮输入按行翻译成\n * tool-approval-response(以 approve / yes / 同意 / 批准 开头 = 批准,其余一律拒绝)塞回\n * messages 再召 `generate`,SDK 才会执行(或跳过)被拦的工具;\n * · 失败兜底:`generate` 抛错或结果完全为空 → `status: \"failed\"` + error 事件;\n * · tracing:传 `tracing: aiSdkOtel()`(来自 `niceeval/adapter/otel`)后,工厂替应用\n * 做完 OTel 管线——为每轮建好绑定 niceeval 接收端点的 `@ai-sdk/otel` 集成(经\n * ctx.telemetry 交给 generate,原样透传给 generateText 的 `telemetry` 即可)并在轮末\n * flush;`aiSdkOtel({ backendUrl })` 可选双发到你自己的观测后端。应用侧零埋点代码。\n *\n * ```typescript\n * import { aiSdkAgent } from \"niceeval/adapter\";\n * import { generateText, isStepCount, type ModelMessage } from \"ai\";\n *\n * export const assistant = aiSdkAgent<ModelMessage>({\n * name: \"my-assistant\",\n * generate: ({ messages, model, signal }) =>\n * generateText({ model: resolveModel(model), system: SYSTEM_PROMPT,\n * tools, stopWhen: isStepCount(5), messages, abortSignal: signal }),\n * data: (result) => ({ reply: result.text }),\n * });\n * ```\n */\n// @concord-code\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/ai-sdk/README.md\nexport function aiSdkAgent<M = JsonValue, Integration extends object = object>(options: AiSdkAgentOptions<M, Integration>): Agent {\n interface SessionState {\n messages: M[];\n /** 上一轮停下的 tool approval:下一轮输入按行翻译成裁决。 */\n pendingApprovals: string[];\n }\n const sessions = new Map<string, SessionState>();\n return makeDirectAgent({\n name: options.name ?? \"ai-sdk\",\n // 官方 SDK 完整 steps/output:全通道 complete(见 adapters/architecture/evidence.md)。\n evidenceCoverage: completeEvidenceCoverage,\n // tracing 开了才让运行器为这个 agent 起 OTLP 接收器(ctx.telemetry 才会出现);\n // AgentTracing 的其余字段(env/configure/scope)这里都用不上,空对象即可。\n tracing: options.tracing ? {} : undefined,\n send: (input, ctx) => Effect.tryPromise({\n try: async () => {\n // 会话续接:ctx.session.id 未记录时开新会话并 capture 回写;否则按 id 续接同一份历史。\n const id = ctx.session.id ?? `ai-sdk-${randomUUID()}`;\n ctx.session.capture(id);\n let state = sessions.get(id);\n if (!state) {\n state = { messages: [], pendingApprovals: [] };\n sessions.set(id, state);\n }\n if (state.pendingApprovals.length > 0) {\n // HITL:t.respond 的回答到 adapter 就是一次普通的带 responses 的 send,按\n // requestId(= approvalId)对位取裁决;没答到的请求直接报错,不从文本猜。\n const content = state.pendingApprovals.map((approvalId) => ({\n type: \"tool-approval-response\" as const,\n approvalId,\n approved: approvalDecision(input.responses, approvalId),\n }));\n state.pendingApprovals = [];\n state.messages.push({ role: \"tool\", content } as M);\n }\n else {\n state.messages.push(userMessage(input.text, input.files) as M);\n }\n // tracing 管线由调用方显式传入(niceeval/adapter/otel 的 aiSdkOtel()),工厂只管\n // 每轮把 per-attempt 端点交给它、轮末 flush。\n const otel = ctx.telemetry && options.tracing ? options.tracing.telemetryForEndpoint(ctx.telemetry.endpoint) : undefined;\n let result: AiSdkResultLike;\n try {\n result = await options.generate({\n messages: state.messages,\n model: ctx.model,\n reasoningEffort: ctx.reasoningEffort,\n signal: ctx.signal,\n flags: ctx.flags,\n telemetry: otel?.settings,\n });\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw makeSendFailure({ acceptance: \"unknown\", message, cause: normalizeExternalCause(error) });\n }\n finally {\n // 轮次归属靠时间窗口:本轮 span 必须在 send 返回前送到接收器,不能等 batch。\n await otel?.flush();\n }\n // resume 的另一半义务:本次调用新产生的消息(含 approval 执行结果)进历史。\n state.messages.push(...((result.responseMessages ?? []) as M[]));\n state.pendingApprovals = collectPendingApprovals(result);\n const turn = turnFromAiSdk(result);\n // 上游偶尔退化返回完全空的结果;当正常回复会把故障伪装成通过,按失败处理。\n if (turn.events.length === 0) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: \"AI SDK returned an empty result (no text, no tool calls)\",\n });\n }\n return { ...turn, data: options.data?.(result, turn) };\n },\n catch: (cause) => cause,\n }),\n });\n}\n/** 裁决词法(t.respond 的自由文本回答):approve / yes / 同意 / 批准 开头 = 批准,其余一律拒绝。 */\nfunction isApproved(line: string): boolean {\n return /^(approve|yes|同意|批准)/i.test(line);\n}\n/** 按 requestId(= approvalId)从 input.responses 对位取裁决;optionId 优先,自由文本走 isApproved。 */\nfunction approvalDecision(responses: readonly InputResponse[] | undefined, requestId: string): boolean {\n const matched = responses?.find((r) => r.requestId === requestId);\n if (!matched) {\n throw new Error(`No response for pending approval \"${requestId}\". Answer approval requests with t.respond(...).`);\n }\n if (matched.optionId !== undefined)\n return matched.optionId === \"approve\";\n return isApproved(matched.text?.trim() ?? \"\");\n}\n/** 待人批准的 approval 请求 id(非 automatic)。steps 优先,退回 v7 顶层聚合 content。 */\nfunction collectPendingApprovals(result: AiSdkResultLike): string[] {\n const parts: AiSdkContentPartLike[] = [];\n if (result.steps?.length) {\n for (const step of result.steps)\n if (Array.isArray(step.content))\n parts.push(...step.content);\n }\n else if (Array.isArray(result.content)) {\n parts.push(...result.content);\n }\n const ids: string[] = [];\n for (const part of parts) {\n if (part.type !== \"tool-approval-request\" || part.isAutomatic === true)\n continue;\n const approvalId = str(part.approvalId);\n if (approvalId)\n ids.push(approvalId);\n }\n return ids;\n}\n/**\n * t.sendFile 带来的文件(base64)转成 AI SDK 的多模态用户消息;纯文本就是纯文本。\n * 用 `file` part(v7 推荐;`image` part 已废弃),mediaType 原样透传,图片之外的附件也能走。\n */\nfunction userMessage(text: string, files: readonly {\n mimeType: string;\n dataBase64: string;\n}[] | undefined): unknown {\n if (!files || files.length === 0)\n return { role: \"user\", content: text };\n return {\n role: \"user\",\n content: [\n { type: \"text\", text: text || \"请描述这个附件。\" },\n ...files.map((f) => ({ type: \"file\", mediaType: f.mimeType, data: f.dataBase64 })),\n ],\n };\n}\n"]}