failproofai 1.0.7-beta.1 → 1.0.7-beta.2

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 (324) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  12. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  18. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
  20. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  30. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/index.html +1 -1
  33. package/.next/standalone/.next/server/app/index.rsc +15 -15
  34. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  35. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  36. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  38. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  41. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  44. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  47. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  48. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  51. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +7 -7
  54. package/.next/standalone/.next/server/app/settings/page.js +2 -2
  55. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l3yhx4._.js +2 -2
  58. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
  59. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  60. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  61. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +1 -1
  62. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  63. package/.next/standalone/.next/server/chunks/src_hooks_18qtd42._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +2 -2
  65. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +2 -2
  66. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0yxwl6j._.js → [root-of-the-server]__0l44ual._.js} +2 -2
  67. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +2 -2
  68. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +2 -2
  69. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_yomn._.js +2 -2
  70. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +2 -2
  71. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +2 -2
  72. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +2 -2
  73. package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +1 -1
  74. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  75. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +1 -1
  76. package/.next/standalone/.next/server/chunks/ssr/{_214wgrp._.js → _1mel6y1._.js} +2 -2
  77. package/.next/standalone/.next/server/chunks/ssr/{_0bn2oo8._.js → _1v-jvrv._.js} +1 -1
  78. package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
  79. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +2 -2
  80. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +1 -1
  81. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  82. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  83. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +1 -1
  84. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +1 -1
  85. package/.next/standalone/.next/server/chunks/ssr/src_hooks_15t8kqj._.js +1 -1
  86. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1fm2w5z._.js +1 -1
  87. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1j0zy3v._.js +1 -1
  88. package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
  89. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  90. package/.next/standalone/.next/server/pages/404.html +1 -1
  91. package/.next/standalone/.next/server/pages/500.html +1 -1
  92. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/server-reference-manifest.json +22 -22
  94. package/.next/standalone/.next/static/chunks/043j99m8ykg__.css +2 -0
  95. package/.next/standalone/.next/static/chunks/0fqd7m_u81mi5.js +1 -0
  96. package/.next/standalone/.next/static/chunks/129ag2bw93bdh.js +1 -0
  97. package/.next/standalone/.next/static/chunks/{29fql3nbnfc9q.js → 1qd741hzlmjbo.js} +1 -1
  98. package/.next/standalone/.next/static/chunks/{0vmd180qfntfb.js → 2_pltstd8-xgs.js} +1 -1
  99. package/.next/standalone/.next/static/chunks/{1u5zsejmgrir_.js → 2c8j9l6j_b1ci.js} +1 -1
  100. package/.next/standalone/.next/static/chunks/3-k569wzcli8q.js +1 -0
  101. package/.next/standalone/.next/static/chunks/{258668t68du6b.js → 3brze37td_wnc.js} +1 -1
  102. package/.next/standalone/.next/static/chunks/3otmypm6j_xfo.js +6 -0
  103. package/.next/standalone/.next/static/chunks/{12tvm75t5ffui.js → 3ugmd_7dyn0id.js} +1 -1
  104. package/.next/standalone/.next/static/chunks/3yxro_r2_o9ad.js +69 -0
  105. package/.next/standalone/PROBE-FOLLOWUP.md +186 -0
  106. package/.next/standalone/app/actions/get-jev-config.ts +38 -23
  107. package/.next/standalone/app/actions/update-jev-config.ts +1 -1
  108. package/.next/standalone/app/settings/jev-panel.tsx +33 -29
  109. package/.next/standalone/package.json +10 -10
  110. package/.next/standalone/sdk/python/skill/SKILL.md +60 -14
  111. package/.next/standalone/sdk/python/skill/agents/openai.yaml +2 -1
  112. package/.next/standalone/sdk/python/skill/references/evaluator.md +255 -0
  113. package/.next/standalone/sdk/python/skill/references/events.md +17 -8
  114. package/.next/standalone/sdk/python/skill/references/frameworks.md +3 -0
  115. package/.next/standalone/sdk/python/skill/references/install.md +3 -0
  116. package/.next/standalone/sdk/python/skill/references/integration.md +6 -2
  117. package/.next/standalone/sdk/python/skill/references/typescript.md +568 -0
  118. package/.next/standalone/sdk/typescript/CHANGELOG.md +119 -0
  119. package/.next/standalone/sdk/typescript/LICENSE +42 -0
  120. package/.next/standalone/sdk/typescript/README.md +552 -0
  121. package/.next/standalone/sdk/typescript/eslint.config.mjs +59 -0
  122. package/.next/standalone/sdk/typescript/examples/research-agent.ts +197 -0
  123. package/.next/standalone/sdk/typescript/integration/ai.test.ts +920 -0
  124. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/agent.ts +337 -0
  125. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +281 -0
  126. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +13 -0
  127. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/surfaces.ts +605 -0
  128. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/tsconfig.json +12 -0
  129. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/tsconfig.surfaces.json +4 -0
  130. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/agent.ts +342 -0
  131. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +168 -0
  132. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +13 -0
  133. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/surfaces.ts +628 -0
  134. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/tsconfig.json +12 -0
  135. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/tsconfig.surfaces.json +4 -0
  136. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/agent.ts +346 -0
  137. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package-lock.json +156 -0
  138. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package.json +13 -0
  139. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/surfaces.ts +651 -0
  140. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/tsconfig.json +12 -0
  141. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/tsconfig.surfaces.json +4 -0
  142. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/agent.ts +350 -0
  143. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package-lock.json +153 -0
  144. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package.json +13 -0
  145. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/surfaces.ts +651 -0
  146. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/tsconfig.json +12 -0
  147. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/tsconfig.surfaces.json +4 -0
  148. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/agent.ts +623 -0
  149. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +463 -0
  150. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +15 -0
  151. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/tsconfig.json +12 -0
  152. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/agent-v1.ts +99 -0
  153. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/agent.ts +623 -0
  154. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package-lock.json +336 -0
  155. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package.json +15 -0
  156. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/tsconfig.json +12 -0
  157. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/agent.ts +96 -0
  158. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +579 -0
  159. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +15 -0
  160. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/tsconfig.json +12 -0
  161. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/index.cjs +53 -0
  162. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/index.mjs +55 -0
  163. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/package.json +18 -0
  164. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/agent.ts +659 -0
  165. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package-lock.json +635 -0
  166. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package.json +15 -0
  167. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/tsconfig.json +12 -0
  168. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/agent.ts +659 -0
  169. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package-lock.json +553 -0
  170. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package.json +15 -0
  171. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/tsconfig.json +12 -0
  172. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/agent.ts +877 -0
  173. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/mcp-server.mjs +66 -0
  174. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package-lock.json +6417 -0
  175. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package.json +15 -0
  176. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/tsconfig.json +12 -0
  177. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/agent.ts +872 -0
  178. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/mcp-server.mjs +66 -0
  179. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package-lock.json +2540 -0
  180. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package.json +15 -0
  181. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/tsconfig.json +12 -0
  182. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/actions.ts +18 -0
  183. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/ai/route.ts +42 -0
  184. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/edge/route.ts +29 -0
  185. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/langgraph/route.ts +21 -0
  186. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/llamaindex/route.ts +11 -0
  187. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/mastra/route.ts +19 -0
  188. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/status/route.ts +7 -0
  189. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/layout.tsx +9 -0
  190. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/page.tsx +15 -0
  191. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/instrumentation.ts +15 -0
  192. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/ai.ts +61 -0
  193. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/langgraph.ts +68 -0
  194. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/llamaindex.ts +98 -0
  195. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/mastra.ts +90 -0
  196. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/next.config.ts +52 -0
  197. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package-lock.json +4343 -0
  198. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package.json +28 -0
  199. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/agent.ts +51 -0
  200. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/deno-npm.ts +76 -0
  201. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package-lock.json +484 -0
  202. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package.json +15 -0
  203. package/.next/standalone/sdk/typescript/integration/fixtures/types/agent.ts +79 -0
  204. package/.next/standalone/sdk/typescript/integration/fixtures/types/package-lock.json +740 -0
  205. package/.next/standalone/sdk/typescript/integration/fixtures/types/package.json +11 -0
  206. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/agent.ts +197 -0
  207. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/package-lock.json +70 -0
  208. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/package.json +12 -0
  209. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/tsconfig.json +12 -0
  210. package/.next/standalone/sdk/typescript/integration/global-setup.ts +29 -0
  211. package/.next/standalone/sdk/typescript/integration/harness.ts +451 -0
  212. package/.next/standalone/sdk/typescript/integration/langchain.test.ts +682 -0
  213. package/.next/standalone/sdk/typescript/integration/llamaindex.test.ts +709 -0
  214. package/.next/standalone/sdk/typescript/integration/mastra-coverage.test.ts +386 -0
  215. package/.next/standalone/sdk/typescript/integration/mastra.test.ts +311 -0
  216. package/.next/standalone/sdk/typescript/integration/nextjs.test.ts +341 -0
  217. package/.next/standalone/sdk/typescript/integration/runtime-parity.ts +180 -0
  218. package/.next/standalone/sdk/typescript/integration/runtimes.bun.test.ts +15 -0
  219. package/.next/standalone/sdk/typescript/integration/runtimes.core.test.ts +113 -0
  220. package/.next/standalone/sdk/typescript/integration/runtimes.deno.test.ts +19 -0
  221. package/.next/standalone/sdk/typescript/integration/types.test.ts +141 -0
  222. package/.next/standalone/sdk/typescript/integration/vanilla.test.ts +255 -0
  223. package/.next/standalone/sdk/typescript/package-lock.json +2640 -0
  224. package/.next/standalone/sdk/typescript/package.json +401 -0
  225. package/.next/standalone/sdk/typescript/scripts/finalize-build.mjs +123 -0
  226. package/.next/standalone/sdk/typescript/scripts/release.mjs +177 -0
  227. package/.next/standalone/sdk/typescript/src/clock.ts +58 -0
  228. package/.next/standalone/sdk/typescript/src/context.ts +214 -0
  229. package/.next/standalone/sdk/typescript/src/edge/adapter.ts +18 -0
  230. package/.next/standalone/sdk/typescript/src/edge/ai.ts +116 -0
  231. package/.next/standalone/sdk/typescript/src/edge/index.ts +238 -0
  232. package/.next/standalone/sdk/typescript/src/edge/langchain.ts +18 -0
  233. package/.next/standalone/sdk/typescript/src/edge/llamaindex.ts +12 -0
  234. package/.next/standalone/sdk/typescript/src/edge/mastra.ts +17 -0
  235. package/.next/standalone/sdk/typescript/src/edge/notice.ts +33 -0
  236. package/.next/standalone/sdk/typescript/src/environment.ts +75 -0
  237. package/.next/standalone/sdk/typescript/src/evaluator/authoring.ts +480 -0
  238. package/.next/standalone/sdk/typescript/src/evaluator/cli.ts +96 -0
  239. package/.next/standalone/sdk/typescript/src/evaluator/client.ts +421 -0
  240. package/.next/standalone/sdk/typescript/src/evaluator/expression.ts +1292 -0
  241. package/.next/standalone/sdk/typescript/src/evaluator/index.ts +144 -0
  242. package/.next/standalone/sdk/typescript/src/evaluator/protocol.ts +747 -0
  243. package/.next/standalone/sdk/typescript/src/evaluator/runtime.ts +930 -0
  244. package/.next/standalone/sdk/typescript/src/evaluator/sandbox-worker.ts +171 -0
  245. package/.next/standalone/sdk/typescript/src/evaluator/source-limits.ts +27 -0
  246. package/.next/standalone/sdk/typescript/src/evaluator/source.ts +509 -0
  247. package/.next/standalone/sdk/typescript/src/events.ts +879 -0
  248. package/.next/standalone/sdk/typescript/src/exit.ts +117 -0
  249. package/.next/standalone/sdk/typescript/src/index.ts +186 -0
  250. package/.next/standalone/sdk/typescript/src/integrations/ai.ts +1566 -0
  251. package/.next/standalone/sdk/typescript/src/integrations/compat.ts +322 -0
  252. package/.next/standalone/sdk/typescript/src/integrations/core.ts +1321 -0
  253. package/.next/standalone/sdk/typescript/src/integrations/index.ts +355 -0
  254. package/.next/standalone/sdk/typescript/src/integrations/langchain.ts +2340 -0
  255. package/.next/standalone/sdk/typescript/src/integrations/llamaindex.ts +2111 -0
  256. package/.next/standalone/sdk/typescript/src/integrations/mastra.ts +1802 -0
  257. package/.next/standalone/sdk/typescript/src/logger.ts +98 -0
  258. package/.next/standalone/sdk/typescript/src/next.ts +115 -0
  259. package/.next/standalone/sdk/typescript/src/node-require.ts +446 -0
  260. package/.next/standalone/sdk/typescript/src/redact.ts +305 -0
  261. package/.next/standalone/sdk/typescript/src/resolver.ts +120 -0
  262. package/.next/standalone/sdk/typescript/src/runtime.ts +29 -0
  263. package/.next/standalone/sdk/typescript/src/schema.ts +410 -0
  264. package/.next/standalone/sdk/typescript/src/scopes.ts +701 -0
  265. package/.next/standalone/sdk/typescript/src/shared.ts +33 -0
  266. package/.next/standalone/sdk/typescript/src/version.ts +5 -0
  267. package/.next/standalone/sdk/typescript/src/writer.ts +934 -0
  268. package/.next/standalone/sdk/typescript/test/adapters.test.ts +397 -0
  269. package/.next/standalone/sdk/typescript/test/ai.test.ts +1076 -0
  270. package/.next/standalone/sdk/typescript/test/copies.test.ts +204 -0
  271. package/.next/standalone/sdk/typescript/test/edge.test.ts +183 -0
  272. package/.next/standalone/sdk/typescript/test/evaluator-client.test.ts +234 -0
  273. package/.next/standalone/sdk/typescript/test/evaluator-protocol.test.ts +225 -0
  274. package/.next/standalone/sdk/typescript/test/events.test.ts +193 -0
  275. package/.next/standalone/sdk/typescript/test/expression.test.ts +181 -0
  276. package/.next/standalone/sdk/typescript/test/global-setup.ts +26 -0
  277. package/.next/standalone/sdk/typescript/test/helpers.ts +130 -0
  278. package/.next/standalone/sdk/typescript/test/integrations.test.ts +369 -0
  279. package/.next/standalone/sdk/typescript/test/langchain-copies.test.ts +204 -0
  280. package/.next/standalone/sdk/typescript/test/langchain.test.ts +999 -0
  281. package/.next/standalone/sdk/typescript/test/llamaindex.test.ts +1760 -0
  282. package/.next/standalone/sdk/typescript/test/mastra-coverage.test.ts +501 -0
  283. package/.next/standalone/sdk/typescript/test/mastra-lifecycle.test.ts +479 -0
  284. package/.next/standalone/sdk/typescript/test/mastra.test.ts +285 -0
  285. package/.next/standalone/sdk/typescript/test/next.test.ts +109 -0
  286. package/.next/standalone/sdk/typescript/test/packaging.test.ts +312 -0
  287. package/.next/standalone/sdk/typescript/test/redaction.test.ts +171 -0
  288. package/.next/standalone/sdk/typescript/test/runtimes.test.ts +101 -0
  289. package/.next/standalone/sdk/typescript/test/sandbox.test.ts +189 -0
  290. package/.next/standalone/sdk/typescript/test/scopes.test.ts +271 -0
  291. package/.next/standalone/sdk/typescript/test/setup.ts +19 -0
  292. package/.next/standalone/sdk/typescript/test/skill-snippets.test.ts +73 -0
  293. package/.next/standalone/sdk/typescript/test/spool-contract.test.ts +124 -0
  294. package/.next/standalone/sdk/typescript/test/tracker-bounds.test.ts +191 -0
  295. package/.next/standalone/sdk/typescript/test/wire-format.test.ts +214 -0
  296. package/.next/standalone/sdk/typescript/test/writer.test.ts +407 -0
  297. package/.next/standalone/sdk/typescript/tsconfig.build.json +15 -0
  298. package/.next/standalone/sdk/typescript/tsconfig.cjs.json +19 -0
  299. package/.next/standalone/sdk/typescript/tsconfig.json +28 -0
  300. package/.next/standalone/sdk/typescript/vitest.config.ts +33 -0
  301. package/.next/standalone/sdk/typescript/vitest.integration.config.ts +23 -0
  302. package/.next/standalone/server.js +1 -1
  303. package/README.md +2 -2
  304. package/dist/cli.mjs +208 -27
  305. package/dist/worker.mjs +120 -14
  306. package/package.json +10 -10
  307. package/scripts/build-policy-pack.mjs +14 -0
  308. package/src/audit/features.ts +3 -2
  309. package/src/hooks/builtin-policies.ts +156 -5
  310. package/src/hooks/jev-cli.ts +57 -1
  311. package/src/hooks/manager.ts +1 -1
  312. package/src/hooks/pack-cli.ts +150 -18
  313. package/src/hooks/pack-store.ts +1 -1
  314. package/src/hooks/policy-catalog.ts +148 -9
  315. package/src/hooks/types.ts +1 -1
  316. package/.next/standalone/.next/static/chunks/0cd-_8-c-m1ea.js +0 -6
  317. package/.next/standalone/.next/static/chunks/0qrbdkv9qmvli.js +0 -69
  318. package/.next/standalone/.next/static/chunks/0uldbut9y2-e8.js +0 -1
  319. package/.next/standalone/.next/static/chunks/285spx855h_3r.css +0 -2
  320. package/.next/standalone/.next/static/chunks/2vkvu9-opa_1z.js +0 -1
  321. package/.next/standalone/.next/static/chunks/37lhv7wa3ywt6.js +0 -1
  322. /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → gbEOjBgZAxF2UIUwZVHNu}/_buildManifest.js +0 -0
  323. /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → gbEOjBgZAxF2UIUwZVHNu}/_clientMiddlewareManifest.js +0 -0
  324. /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → gbEOjBgZAxF2UIUwZVHNu}/_ssgManifest.js +0 -0
@@ -0,0 +1,479 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+
3
+ import { setLogger } from "../src/logger.js";
4
+ import * as core from "../src/integrations/core.js";
5
+ import { _internals, adapter, wrapTool } from "../src/integrations/mastra.js";
6
+ import { session } from "../src/scopes.js";
7
+ import { flushed, useSpool } from "./helpers.js";
8
+ import type { Spool } from "./helpers.js";
9
+
10
+ /**
11
+ * The Mastra adapter's lifecycle: what `uninstrument()` stops, and what it
12
+ * leaves behind.
13
+ *
14
+ * `instrument()` hands Mastra objects that outlive it — a model behind a
15
+ * proxy, tools behind wrappers, a stream the caller is still reading — so
16
+ * restoring the prototypes is not enough on its own. These run the adapter
17
+ * against a hand-written stand-in for `@mastra/core` (the module loader is the
18
+ * only thing mocked), so each case controls exactly when a model step or a
19
+ * stream ends relative to the teardown. `integration/mastra.test.ts` proves
20
+ * the same against real releases.
21
+ */
22
+
23
+ const modules = vi.hoisted(() => ({ agent: [] as unknown[], workflows: [] as unknown[] }));
24
+
25
+ vi.mock("../src/integrations/compat.js", async (importOriginal) => {
26
+ const actual = await importOriginal<typeof import("../src/integrations/compat.js")>();
27
+ return {
28
+ ...actual,
29
+ requireModuleCopies: async (specifier: string): Promise<unknown[]> =>
30
+ specifier.endsWith("/agent") ? modules.agent : modules.workflows,
31
+ };
32
+ });
33
+
34
+ // ---------------------------------------------------------------------------
35
+ // A stand-in for @mastra/core: the four prototype methods the adapter patches,
36
+ // driven the way Mastra drives them.
37
+ // ---------------------------------------------------------------------------
38
+
39
+ type Part = Record<string, unknown>;
40
+
41
+ /** A released-on-demand barrier, so a test decides when a stream moves on. */
42
+ function barrier(): { wait: Promise<void>; open: () => void } {
43
+ let open!: () => void;
44
+ const wait = new Promise<void>((resolve) => (open = resolve));
45
+ return { wait, open };
46
+ }
47
+
48
+ class FakeModel {
49
+ modelId = "fake-model";
50
+ provider = "fake";
51
+ fail = false;
52
+ /** When set, a stream stops after its first part until this opens. */
53
+ gate: Promise<void> | null = null;
54
+
55
+ async doGenerate(): Promise<unknown> {
56
+ if (this.fail) throw new Error("model exploded");
57
+ return {
58
+ content: [{ type: "text", text: "sunny" }],
59
+ finishReason: "stop",
60
+ usage: { inputTokens: 3, outputTokens: 4 },
61
+ };
62
+ }
63
+
64
+ async doStream(): Promise<unknown> {
65
+ const parts: Part[] = [
66
+ { type: "response-metadata", modelId: "fake-model" },
67
+ { type: "text-delta", delta: "sunny" },
68
+ { type: "finish", finishReason: "stop", usage: { inputTokens: 5, outputTokens: 6 } },
69
+ ];
70
+ const gate = this.gate;
71
+ let index = 0;
72
+ return {
73
+ stream: new ReadableStream<Part>({
74
+ async pull(controller) {
75
+ if (index === 1 && gate) await gate;
76
+ if (index >= parts.length) {
77
+ controller.close();
78
+ return;
79
+ }
80
+ controller.enqueue(parts[index++]!);
81
+ },
82
+ }),
83
+ };
84
+ }
85
+ }
86
+
87
+ interface Resolved {
88
+ model: FakeModel;
89
+ tools: Record<string, { execute: (input: unknown, options: unknown) => Promise<unknown> }>;
90
+ }
91
+
92
+ interface StreamOptions {
93
+ onFinish?: (result: unknown) => unknown;
94
+ onError?: (error: unknown) => unknown;
95
+ onAbort?: (event: unknown) => unknown;
96
+ }
97
+
98
+ class FakeAgent {
99
+ name = "fake-agent";
100
+ model = new FakeModel();
101
+ toolFails = false;
102
+ /** What the last run resolved — held on to, the way a reused agent does. */
103
+ resolved: Resolved | null = null;
104
+ /**
105
+ * What the next run resolves to, when a test decides. Fields rather than
106
+ * instance methods: an own `convertTools` would shadow the patched
107
+ * prototype method, and the adapter would never see the run.
108
+ */
109
+ nextModel: FakeModel | null = null;
110
+ nextTools: (() => Resolved["tools"]) | null = null;
111
+
112
+ resolveModelConfig(): FakeModel {
113
+ return this.nextModel ?? this.model;
114
+ }
115
+
116
+ convertTools(): Resolved["tools"] {
117
+ if (this.nextTools) return this.nextTools();
118
+ return {
119
+ weather: {
120
+ execute: async (input: unknown) => {
121
+ if (this.toolFails) throw new Error("tool exploded");
122
+ return { ...(input as object), forecast: "sunny" };
123
+ },
124
+ },
125
+ };
126
+ }
127
+
128
+ private async resolve(): Promise<Resolved> {
129
+ const model = await this.resolveModelConfig();
130
+ const tools = await this.convertTools();
131
+ this.resolved = { model, tools };
132
+ return this.resolved;
133
+ }
134
+
135
+ async generate(prompt: string): Promise<unknown> {
136
+ const { model, tools } = await this.resolve();
137
+ await model.doGenerate();
138
+ try {
139
+ await tools.weather!.execute({ city: prompt }, { toolCallId: "call_1" });
140
+ } catch {
141
+ // Mastra hands a tool's failure to the model and carries on.
142
+ }
143
+ await model.doGenerate();
144
+ return { text: "sunny", finishReason: "stop" };
145
+ }
146
+
147
+ /**
148
+ * One streamed step. The returned reader is the step's own stream; the
149
+ * caller ends the run with `finish()` / `abort()`, the way Mastra calls
150
+ * `onFinish` / `onAbort` once the caller has consumed or cancelled it.
151
+ */
152
+ async stream(
153
+ _prompt: string,
154
+ options: StreamOptions = {},
155
+ ): Promise<{ reader: ReadableStreamDefaultReader<Part>; finish: () => void; abort: () => Promise<void> }> {
156
+ const { model } = await this.resolve();
157
+ const { stream } = (await model.doStream()) as { stream: ReadableStream<Part> };
158
+ const reader = stream.getReader();
159
+ return {
160
+ reader,
161
+ finish: () => void options.onFinish?.({ finishReason: "stop" }),
162
+ abort: async () => {
163
+ await reader.cancel("caller went away");
164
+ options.onAbort?.({});
165
+ },
166
+ };
167
+ }
168
+ }
169
+
170
+ class FakeEngine {
171
+ /** When set, a step called `wait` parks here until it opens. */
172
+ static gate: { entered: () => void; wait: Promise<void> } | null = null;
173
+
174
+ async executeStep(params: { step: { id: string }; executionContext: { runId: string } }): Promise<unknown> {
175
+ if (params.step.id === "wait" && FakeEngine.gate) {
176
+ FakeEngine.gate.entered();
177
+ await FakeEngine.gate.wait;
178
+ }
179
+ if (params.step.id === "explode") throw new Error("step threw");
180
+ return { result: { status: params.step.id === "fail" ? "failed" : "success", output: { ok: true }, error: "step failed" } };
181
+ }
182
+ }
183
+
184
+ class FakeRun {
185
+ workflowId = "fake-flow";
186
+ constructor(
187
+ public runId: string,
188
+ private steps: string[],
189
+ ) {}
190
+
191
+ async _start(): Promise<unknown> {
192
+ const engine = new FakeEngine();
193
+ let status = "success";
194
+ for (const id of this.steps) {
195
+ const out = (await engine.executeStep({ step: { id }, executionContext: { runId: this.runId } })) as {
196
+ result: { status: string };
197
+ };
198
+ if (out.result.status === "failed") status = "failed";
199
+ }
200
+ return { status };
201
+ }
202
+ }
203
+
204
+ async function readAll(reader: ReadableStreamDefaultReader<Part>): Promise<Part[]> {
205
+ const parts: Part[] = [];
206
+ for (;;) {
207
+ const chunk = await reader.read();
208
+ if (chunk.done) return parts;
209
+ parts.push(chunk.value);
210
+ }
211
+ }
212
+
213
+ /** Resolve once the adapter's observed stream is parked on the gate. */
214
+ const settle = (): Promise<void> => new Promise((resolve) => setTimeout(resolve, 10));
215
+
216
+ // ---------------------------------------------------------------------------
217
+
218
+ let spool: Spool;
219
+
220
+ beforeEach(() => {
221
+ spool = useSpool();
222
+ core.resetFailures();
223
+ modules.agent = [{ Agent: FakeAgent }];
224
+ modules.workflows = [{ Run: FakeRun, DefaultExecutionEngine: FakeEngine }];
225
+ });
226
+ afterEach(async () => {
227
+ adapter.uninstall();
228
+ await spool.cleanup();
229
+ setLogger(null);
230
+ });
231
+
232
+ const types = (events: Array<Record<string, unknown>>): string[] => events.map((e) => String(e.type));
233
+
234
+ describe("uninstrument()", () => {
235
+ it("turns the model proxy and tool wrappers a run already built into pass-throughs", async () => {
236
+ await adapter.install({});
237
+ const agent = new FakeAgent();
238
+ await session({ sessionId: "s1" }, () => agent.generate("Paris"));
239
+ const recorded = (await flushed(spool)).length;
240
+ expect(recorded).toBe(8);
241
+
242
+ adapter.uninstall();
243
+ expect(_internals.isEnabled()).toBe(false);
244
+
245
+ // What the agent held on to from its instrumented run, used afterwards —
246
+ // inside a scope, so a stray event would have a session to land in.
247
+ const { model, tools } = agent.resolved!;
248
+ await session({ sessionId: "s1" }, async () => {
249
+ await expect(model.doGenerate()).resolves.toMatchObject({ finishReason: "stop" });
250
+ await expect(tools.weather!.execute({ city: "Rome" }, { toolCallId: "call_9" })).resolves.toEqual({
251
+ city: "Rome",
252
+ forecast: "sunny",
253
+ });
254
+ const { stream } = (await model.doStream()) as { stream: ReadableStream<Part> };
255
+ expect(await readAll(stream.getReader())).toHaveLength(3);
256
+ await agent.generate("Oslo");
257
+ });
258
+ expect((await flushed(spool)).length).toBe(recorded);
259
+ });
260
+
261
+ it("closes a stream in flight as cancelled and records nothing after it", async () => {
262
+ await adapter.install({});
263
+ const agent = new FakeAgent();
264
+ const gate = barrier();
265
+ agent.model.gate = gate.wait;
266
+
267
+ await session({ sessionId: "s1" }, async () => {
268
+ const run = await agent.stream("Paris", {});
269
+ const first = await run.reader.read();
270
+ expect(first.value).toMatchObject({ type: "response-metadata" });
271
+ await settle();
272
+
273
+ adapter.uninstall();
274
+ const atTeardown = await flushed(spool);
275
+ expect(types(atTeardown)).toEqual(["agent_start", "model_request", "model_response", "agent_end"]);
276
+ const response = atTeardown[2]!;
277
+ expect(response.stop_reason).toBe("incomplete");
278
+ expect(response.fw_incomplete).toBe(true);
279
+ expect(atTeardown[3]!.outcome).toBe("cancelled");
280
+
281
+ // The stream is the caller's: it still delivers everything.
282
+ gate.open();
283
+ expect(await readAll(run.reader)).toHaveLength(2);
284
+ run.finish();
285
+ });
286
+ expect(types(await flushed(spool))).toEqual(["agent_start", "model_request", "model_response", "agent_end"]);
287
+ expect(_internals.openSpans()).toEqual({ models: 0, tools: 0, steps: 0, workflowRuns: 0, agents: 0 });
288
+ });
289
+
290
+ it("closes an open tool call as incomplete", async () => {
291
+ await adapter.install({});
292
+ const gate = barrier();
293
+ const entered = barrier();
294
+ const agent = new FakeAgent();
295
+ agent.nextTools = () => ({
296
+ weather: {
297
+ execute: async () => {
298
+ entered.open();
299
+ await gate.wait;
300
+ return { forecast: "sunny" };
301
+ },
302
+ },
303
+ });
304
+ const pending = session({ sessionId: "s1" }, () => agent.generate("Paris"));
305
+ await entered.wait;
306
+ adapter.uninstall();
307
+ gate.open();
308
+ await pending;
309
+
310
+ const events = await flushed(spool);
311
+ expect(types(events)).toEqual(["agent_start", "model_request", "model_response", "tool_use", "tool_result", "agent_end"]);
312
+ expect(events[4]!.fw_incomplete).toBe(true);
313
+ expect(events[4]!.tool_call_id).toBe("call_1");
314
+ expect(events[5]!.outcome).toBe("cancelled");
315
+ });
316
+
317
+ it("closes an open workflow step as cancelled, and the run with it", async () => {
318
+ await adapter.install({});
319
+ const gate = barrier();
320
+ const entered = barrier();
321
+ FakeEngine.gate = { entered: entered.open, wait: gate.wait };
322
+ try {
323
+ const pending = new FakeRun("r1", ["a", "wait", "b"])._start();
324
+ await entered.wait;
325
+ adapter.uninstall();
326
+ gate.open();
327
+ await pending;
328
+ } finally {
329
+ FakeEngine.gate = null;
330
+ }
331
+ const events = await flushed(spool);
332
+ expect(types(events)).toEqual([
333
+ "agent_start",
334
+ "hook_triggered",
335
+ "hook_completed",
336
+ "hook_triggered",
337
+ "hook_completed",
338
+ "agent_end",
339
+ ]);
340
+ expect(events[4]).toMatchObject({ hook_name: "wait", outcome: "cancelled", fw_incomplete: true });
341
+ expect(events[5]!.outcome).toBe("cancelled");
342
+ expect(_internals.openSpans()).toEqual({ models: 0, tools: 0, steps: 0, workflowRuns: 0, agents: 0 });
343
+ });
344
+
345
+ it("re-instruments cleanly: one recording, and the old run's objects stay silent", async () => {
346
+ await adapter.install({});
347
+ const old = new FakeAgent();
348
+ await session({ sessionId: "s0" }, () => old.generate("Paris"));
349
+ adapter.uninstall();
350
+ await adapter.install({});
351
+ expect(_internals.isEnabled()).toBe(true);
352
+
353
+ const before = (await flushed(spool)).length;
354
+ await session({ sessionId: "s1" }, async () => {
355
+ await new FakeAgent().generate("Rome");
356
+ // The first installation's proxy and wrapper, reused under the second.
357
+ await old.resolved!.model.doGenerate();
358
+ await old.resolved!.tools.weather!.execute({ city: "Oslo" }, { toolCallId: "call_2" });
359
+ });
360
+ const after = (await flushed(spool)).slice(before);
361
+ expect(types(after)).toEqual([
362
+ "agent_start",
363
+ "model_request",
364
+ "model_response",
365
+ "tool_use",
366
+ "tool_result",
367
+ "model_request",
368
+ "model_response",
369
+ "agent_end",
370
+ ]);
371
+ expect(new Set(after.map((e) => e.session_id))).toEqual(new Set(["s1"]));
372
+ });
373
+
374
+ it("re-wraps a model an agent resolved under an earlier installation", async () => {
375
+ // A reused agent can hand the patched resolveModelConfig the proxy it
376
+ // cached last time; that proxy belongs to a dead installation and would
377
+ // pass everything through.
378
+ await adapter.install({});
379
+ const agent = new FakeAgent();
380
+ await session({ sessionId: "s0" }, () => agent.generate("Paris"));
381
+ adapter.uninstall();
382
+ await adapter.install({});
383
+ const cached = agent.resolved!;
384
+ agent.nextModel = cached.model;
385
+ agent.nextTools = () => cached.tools;
386
+
387
+ const before = (await flushed(spool)).length;
388
+ await session({ sessionId: "s1" }, () => agent.generate("Rome"));
389
+ const after = (await flushed(spool)).slice(before);
390
+ // Attributed to THIS run's agent, not to whatever scope happens to be open.
391
+ expect(new Set(after.map((e) => e.agent_id))).toEqual(new Set(["fake-agent"]));
392
+ expect(types(after)).toEqual([
393
+ "agent_start",
394
+ "model_request",
395
+ "model_response",
396
+ "tool_use",
397
+ "tool_result",
398
+ "model_request",
399
+ "model_response",
400
+ "agent_end",
401
+ ]);
402
+ });
403
+
404
+ it("honours instrument()'s options even when wrapTool() recorded first", async () => {
405
+ const tool = wrapTool({ id: "early", execute: async () => "ok" });
406
+ await tool.execute();
407
+ await adapter.install({ captureLimit: 16 });
408
+ await new FakeAgent().generate("x".repeat(500));
409
+ const start = (await flushed(spool)).find((e) => e.type === "agent_start" && e.agent_id === "fake-agent")!;
410
+ expect(String(start.goal).length).toBeLessThan(100);
411
+ });
412
+
413
+ it("leaves a hand-wrapped tool working on its own", async () => {
414
+ await adapter.install({});
415
+ adapter.uninstall();
416
+ const tool = wrapTool({ id: "solo", execute: async () => "ok" });
417
+ await expect(tool.execute()).resolves.toBe("ok");
418
+ expect(types(await flushed(spool))).toEqual(["agent_start", "tool_use", "tool_result", "agent_end"]);
419
+ });
420
+ });
421
+
422
+ describe("bookkeeping", () => {
423
+ const empty = { models: 0, tools: 0, steps: 0, workflowRuns: 0, agents: 0 };
424
+
425
+ it("forgets every model and tool call once the run ends — success, model failure, tool failure", async () => {
426
+ await adapter.install({});
427
+ await new FakeAgent().generate("Paris");
428
+ expect(_internals.openSpans()).toEqual(empty);
429
+
430
+ const failing = new FakeAgent();
431
+ failing.model.fail = true;
432
+ await expect(failing.generate("Paris")).rejects.toThrow("model exploded");
433
+ expect(_internals.openSpans()).toEqual(empty);
434
+
435
+ const broken = new FakeAgent();
436
+ broken.toolFails = true;
437
+ await broken.generate("Paris");
438
+ expect(_internals.openSpans()).toEqual(empty);
439
+ });
440
+
441
+ it("forgets a streamed step whether it is consumed or cancelled", async () => {
442
+ await adapter.install({});
443
+ const consumed = await new FakeAgent().stream("Paris", {});
444
+ await readAll(consumed.reader);
445
+ consumed.finish();
446
+ expect(_internals.openSpans()).toEqual(empty);
447
+
448
+ const agent = new FakeAgent();
449
+ const cancelled = await agent.stream("Paris", {});
450
+ await cancelled.abort();
451
+ expect(_internals.openSpans()).toEqual(empty);
452
+ const events = await flushed(spool);
453
+ expect(events.at(-1)).toMatchObject({ type: "agent_end", outcome: "cancelled" });
454
+ });
455
+
456
+ it("holds a never-consumed stream open only until uninstrument(), which closes it", async () => {
457
+ await adapter.install({});
458
+ await new FakeAgent().stream("Paris", {});
459
+ expect(_internals.openSpans()).toEqual({ ...empty, models: 1, agents: 1 });
460
+ adapter.uninstall();
461
+ expect(_internals.openSpans()).toEqual(empty);
462
+ const events = await flushed(spool);
463
+ expect(types(events)).toEqual(["agent_start", "model_request", "model_response", "agent_end"]);
464
+ expect(events[3]!.outcome).toBe("cancelled");
465
+ });
466
+
467
+ it("forgets a workflow run and its steps however the run ends", async () => {
468
+ await adapter.install({});
469
+ await new FakeRun("r1", ["a", "b"])._start();
470
+ expect(_internals.openSpans()).toEqual(empty);
471
+ await new FakeRun("r2", ["a", "fail"])._start();
472
+ expect(_internals.openSpans()).toEqual(empty);
473
+ await expect(new FakeRun("r3", ["explode"])._start()).rejects.toThrow("step threw");
474
+ expect(_internals.openSpans()).toEqual(empty);
475
+
476
+ const events = await flushed(spool);
477
+ expect(events.filter((e) => e.type === "agent_end").map((e) => e.outcome)).toEqual(["success", "failed", "failed"]);
478
+ });
479
+ });