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,747 @@
1
+ /**
2
+ * Dependency-free wire models for the outbound Evaluator v2 protocol.
3
+ *
4
+ * Every `fromWire` is a VALIDATOR, not a cast. The server is the other side of
5
+ * a network boundary: a field that arrives as a number where a string was
6
+ * promised, or an enum value this SDK has never heard of, has to fail here with
7
+ * a message naming the field — not three frames later as an undefined property
8
+ * on an object nobody can explain.
9
+ */
10
+
11
+ export const PROTOCOL_VERSION = "2";
12
+ export const TRANSCRIPT_SCHEMA_VERSION = "2";
13
+ export const RESULT_SCHEMA_VERSION = "2";
14
+
15
+ export const REGISTER_PATH = "/v1/evaluator/workers/register";
16
+ export const CLAIM_PATH = "/v1/evaluator/assignments/claim";
17
+ export const TRANSCRIPT_PATH = "/v1/evaluator/assignments/{assignment_id}/transcript";
18
+ export const DEFINITIONS_PATH = "/v1/evaluator/assignments/{assignment_id}/definitions";
19
+ export const PLAN_PATH = "/v1/evaluator/assignments/{assignment_id}/plan";
20
+ export const HEARTBEAT_PATH = "/v1/evaluator/runs/heartbeat";
21
+ export const RESULT_PATH = "/v1/evaluator/runs/{evaluation_run_id}/result";
22
+ export const WORKER_ID_HEADER = "X-FailproofAI-Worker-Id";
23
+ export const LEASE_GENERATION_HEADER = "X-FailproofAI-Lease-Generation";
24
+
25
+ export const HEARTBEAT_INTERVAL_SECONDS = 30;
26
+ export const LEASE_DURATION_SECONDS = 120;
27
+ /**
28
+ * Fallback poll cadence if the register response omits `poll_interval_seconds`.
29
+ * The worker prefers the server-advertised value; claims are normal short
30
+ * polls, never long-polls, so this only bounds idle latency, not connection
31
+ * lifetime.
32
+ */
33
+ export const DEFAULT_POLL_INTERVAL_SECONDS = 10;
34
+ export const MAX_ATTEMPTS = 5;
35
+
36
+ export const MAX_CATALOG_DEFINITIONS = 100;
37
+ export const MAX_CLAIM_CAPACITY = 32;
38
+ export const MAX_TRANSCRIPT_BYTES = 25 * 1024 * 1024;
39
+ export const MAX_RESULTS_PER_RUN = 25;
40
+ export const MAX_EVAL_KEY_BYTES = 128;
41
+ export const MAX_DISPLAY_NAME_BYTES = 128;
42
+ export const MAX_VERSION_BYTES = 128;
43
+ export const MAX_WORKER_ID_BYTES = 128;
44
+ export const MAX_LABEL_BYTES = 64;
45
+ export const MAX_LABELS_PER_RESULT = 20;
46
+ export const MAX_SUMMARY_BYTES = 4 * 1024;
47
+ export const MAX_REASONING_BYTES = 16 * 1024;
48
+ export const MAX_UNIT_BYTES = 64;
49
+ export const MAX_DISPLAY_VALUE_BYTES = 256;
50
+ export const MAX_DESCRIPTION_BYTES = 1_000;
51
+ export const MAX_ERROR_CODE_BYTES = 64;
52
+ export const MAX_ERROR_MESSAGE_BYTES = 4 * 1024;
53
+
54
+ export const ERROR_SPECS: Readonly<Record<string, { httpStatus: number; retryable: boolean }>> = {
55
+ invalid_credentials: { httpStatus: 401, retryable: false },
56
+ instance_disabled: { httpStatus: 403, retryable: false },
57
+ insufficient_permissions: { httpStatus: 403, retryable: false },
58
+ assignment_not_found: { httpStatus: 404, retryable: false },
59
+ run_not_found: { httpStatus: 404, retryable: false },
60
+ catalog_mismatch: { httpStatus: 409, retryable: false },
61
+ lease_lost: { httpStatus: 409, retryable: false },
62
+ plan_conflict: { httpStatus: 409, retryable: false },
63
+ submission_conflict: { httpStatus: 409, retryable: false },
64
+ retry_budget_exhausted: { httpStatus: 409, retryable: false },
65
+ transcript_too_large: { httpStatus: 413, retryable: false },
66
+ invalid_request: { httpStatus: 422, retryable: false },
67
+ invalid_catalog: { httpStatus: 422, retryable: false },
68
+ incomplete_plan: { httpStatus: 422, retryable: false },
69
+ unsupported_protocol_version: { httpStatus: 426, retryable: false },
70
+ internal_error: { httpStatus: 500, retryable: true },
71
+ };
72
+
73
+ /** A local or remote evaluator protocol contract violation. */
74
+ export class ProtocolError extends Error {
75
+ constructor(message: string) {
76
+ super(message);
77
+ this.name = "ProtocolError";
78
+ }
79
+ }
80
+
81
+ export class UnsupportedProtocolVersion extends ProtocolError {
82
+ readonly received: string;
83
+ constructor(received: string) {
84
+ super(
85
+ `unsupported evaluator protocol version ${JSON.stringify(received)}; ` +
86
+ `supported major version is ${PROTOCOL_VERSION}`,
87
+ );
88
+ this.name = "UnsupportedProtocolVersion";
89
+ this.received = received;
90
+ }
91
+ }
92
+
93
+ export function validateProtocolVersion(version: string): void {
94
+ if (version !== PROTOCOL_VERSION) throw new UnsupportedProtocolVersion(version);
95
+ }
96
+
97
+ export const EvaluatorKind = { MANAGED: "managed", CUSTOMER: "customer" } as const;
98
+ export type EvaluatorKind = (typeof EvaluatorKind)[keyof typeof EvaluatorKind];
99
+
100
+ export const ResultKind = { SCORE: "score", METRIC: "metric", ASSERTION: "assertion" } as const;
101
+ export type ResultKind = (typeof ResultKind)[keyof typeof ResultKind];
102
+
103
+ export const ExecutionMode = { LOCAL: "local", SANDBOX: "sandbox" } as const;
104
+ export type ExecutionMode = (typeof ExecutionMode)[keyof typeof ExecutionMode];
105
+
106
+ /**
107
+ * The wire value for a server-authored definition is `"python"` — the name the
108
+ * protocol was minted with, when the only worker was the Python SDK. It means
109
+ * "the server authored this source and the worker must sandbox it", which this
110
+ * SDK does in a `worker_threads` sandbox rather than a forked interpreter. The
111
+ * wire string cannot change without a protocol bump, so the constant carries
112
+ * the honest local name and this map carries the wire one.
113
+ */
114
+ const EXECUTION_MODE_WIRE: Record<string, ExecutionMode> = {
115
+ local: ExecutionMode.LOCAL,
116
+ python: ExecutionMode.SANDBOX,
117
+ sandbox: ExecutionMode.SANDBOX,
118
+ };
119
+ const EXECUTION_MODE_TO_WIRE: Record<ExecutionMode, string> = {
120
+ local: "local",
121
+ sandbox: "python",
122
+ };
123
+
124
+ export const TerminalRunStatus = {
125
+ SUCCEEDED: "succeeded",
126
+ FAILED: "failed",
127
+ TIMED_OUT: "timed_out",
128
+ CANCELLED: "cancelled",
129
+ } as const;
130
+ export type TerminalRunStatus = (typeof TerminalRunStatus)[keyof typeof TerminalRunStatus];
131
+
132
+ export type WireObject = Record<string, unknown>;
133
+
134
+ // ---------------------------------------------------------------------------
135
+ // Readers
136
+ // ---------------------------------------------------------------------------
137
+
138
+ function str(data: WireObject, key: string): string {
139
+ const value = data[key];
140
+ if (typeof value !== "string") throw new ProtocolError(`${key} must be a string`);
141
+ return value;
142
+ }
143
+
144
+ function int(data: WireObject, key: string): number {
145
+ const value = data[key];
146
+ if (typeof value !== "number" || !Number.isInteger(value)) {
147
+ throw new ProtocolError(`${key} must be an integer`);
148
+ }
149
+ return value;
150
+ }
151
+
152
+ function positiveInt(data: WireObject, key: string): number {
153
+ const value = int(data, key);
154
+ if (value <= 0) throw new ProtocolError(`${key} must be greater than zero`);
155
+ return value;
156
+ }
157
+
158
+ function nonNegativeInt(data: WireObject, key: string): number {
159
+ const value = int(data, key);
160
+ if (value < 0) throw new ProtocolError(`${key} must not be negative`);
161
+ return value;
162
+ }
163
+
164
+ function optionalString(data: WireObject, key: string): string | null {
165
+ const value = data[key];
166
+ if (value === undefined || value === null) return null;
167
+ if (typeof value !== "string") throw new ProtocolError(`${key} must be a string or null`);
168
+ return value;
169
+ }
170
+
171
+ function list(data: WireObject, key: string): unknown[] {
172
+ const value = data[key];
173
+ if (!Array.isArray(value)) throw new ProtocolError(`${key} must be an array`);
174
+ return value;
175
+ }
176
+
177
+ function object(value: unknown, fieldName: string): WireObject {
178
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
179
+ throw new ProtocolError(`${fieldName} must be an object`);
180
+ }
181
+ return value as WireObject;
182
+ }
183
+
184
+ function objectList(data: WireObject, key: string): WireObject[] {
185
+ return list(data, key).map((value, index) => object(value, `${key}[${index}]`));
186
+ }
187
+
188
+ function stringList(data: WireObject, key: string): string[] {
189
+ const values = list(data, key);
190
+ values.forEach((value, index) => {
191
+ if (typeof value !== "string") throw new ProtocolError(`${key}[${index}] must be a string`);
192
+ });
193
+ return values as string[];
194
+ }
195
+
196
+ function enumValue<T extends string>(
197
+ allowed: readonly T[],
198
+ data: WireObject,
199
+ key: string,
200
+ ): T {
201
+ const value = str(data, key);
202
+ if (!(allowed as readonly string[]).includes(value)) {
203
+ throw new ProtocolError(
204
+ `${key} must be one of ${allowed.map((item) => JSON.stringify(item)).join(", ")}`,
205
+ );
206
+ }
207
+ return value as T;
208
+ }
209
+
210
+ function executionMode(data: WireObject, key: string): ExecutionMode {
211
+ // Required explicitly. Coercing a missing or unknown value to `local`
212
+ // silently runs a server-authored definition down the customer-local path
213
+ // (or vice-versa); a malformed wire value is a protocol error, not a default.
214
+ const raw = str(data, key);
215
+ const mode = EXECUTION_MODE_WIRE[raw];
216
+ if (mode === undefined) {
217
+ throw new ProtocolError(
218
+ `${key} must be one of ${Object.keys(EXECUTION_MODE_WIRE)
219
+ .map((item) => JSON.stringify(item))
220
+ .join(", ")}`,
221
+ );
222
+ }
223
+ return mode;
224
+ }
225
+
226
+ function optionalPositiveNumber(data: WireObject, key: string): number | null {
227
+ const value = data[key];
228
+ if (value === undefined || value === null) return null;
229
+ if (typeof value !== "number") throw new ProtocolError(`${key} must be a number or null`);
230
+ if (!Number.isFinite(value) || value <= 0) {
231
+ throw new ProtocolError(`${key} must be finite and greater than zero`);
232
+ }
233
+ return value;
234
+ }
235
+
236
+ function boolean_(data: WireObject, key: string, fallback?: boolean): boolean {
237
+ const value = data[key];
238
+ if (value === undefined && fallback !== undefined) return fallback;
239
+ if (typeof value !== "boolean") throw new ProtocolError(`${key} must be a boolean`);
240
+ return value;
241
+ }
242
+
243
+ // ---------------------------------------------------------------------------
244
+ // Models
245
+ // ---------------------------------------------------------------------------
246
+
247
+ export interface CatalogDefinition {
248
+ evalKey: string;
249
+ displayName: string;
250
+ evalVersion: string;
251
+ resultKind: ResultKind;
252
+ labels: readonly string[];
253
+ }
254
+
255
+ export function catalogDefinitionToWire(value: CatalogDefinition): WireObject {
256
+ return {
257
+ eval_key: value.evalKey,
258
+ display_name: value.displayName,
259
+ eval_version: value.evalVersion,
260
+ result_kind: value.resultKind,
261
+ labels: [...value.labels],
262
+ };
263
+ }
264
+
265
+ export function catalogDefinitionFromWire(data: WireObject): CatalogDefinition {
266
+ return {
267
+ evalKey: str(data, "eval_key"),
268
+ displayName: str(data, "display_name"),
269
+ evalVersion: str(data, "eval_version"),
270
+ resultKind: enumValue(Object.values(ResultKind), data, "result_kind"),
271
+ labels: stringList(data, "labels"),
272
+ };
273
+ }
274
+
275
+ export interface RegisterRequest {
276
+ workerId: string;
277
+ sdkVersion: string;
278
+ catalogRevision: string;
279
+ maxConcurrency: number;
280
+ definitions: readonly CatalogDefinition[];
281
+ }
282
+
283
+ export function registerRequestToWire(value: RegisterRequest): WireObject {
284
+ return {
285
+ protocol_version: PROTOCOL_VERSION,
286
+ worker_id: value.workerId,
287
+ sdk_version: value.sdkVersion,
288
+ catalog_revision: value.catalogRevision,
289
+ max_concurrency: value.maxConcurrency,
290
+ definitions: value.definitions.map(catalogDefinitionToWire),
291
+ };
292
+ }
293
+
294
+ export interface RegisterResponse {
295
+ evaluatorInstanceId: string;
296
+ evaluatorKind: EvaluatorKind;
297
+ heartbeatIntervalSeconds: number;
298
+ leaseDurationSeconds: number;
299
+ pollIntervalSeconds: number;
300
+ claimLimit: number;
301
+ disabledDefinitions: readonly string[];
302
+ }
303
+
304
+ export function registerResponseFromWire(data: WireObject): RegisterResponse {
305
+ validateProtocolVersion(str(data, "protocol_version"));
306
+ return {
307
+ evaluatorInstanceId: str(data, "evaluator_instance_id"),
308
+ evaluatorKind: enumValue(Object.values(EvaluatorKind), data, "evaluator_kind"),
309
+ heartbeatIntervalSeconds: int(data, "heartbeat_interval_seconds"),
310
+ leaseDurationSeconds: int(data, "lease_duration_seconds"),
311
+ pollIntervalSeconds: int(data, "poll_interval_seconds"),
312
+ claimLimit: int(data, "claim_limit"),
313
+ disabledDefinitions: stringList(data, "disabled_definitions"),
314
+ };
315
+ }
316
+
317
+ export interface ClaimRequest {
318
+ workerId: string;
319
+ catalogRevision: string;
320
+ capacity: number;
321
+ }
322
+
323
+ export function claimRequestToWire(value: ClaimRequest): WireObject {
324
+ return {
325
+ protocol_version: PROTOCOL_VERSION,
326
+ worker_id: value.workerId,
327
+ catalog_revision: value.catalogRevision,
328
+ capacity: value.capacity,
329
+ };
330
+ }
331
+
332
+ export interface Assignment {
333
+ assignmentId: string;
334
+ leaseGeneration: number;
335
+ leaseExpiresAt: string;
336
+ sessionId: string;
337
+ sessionRevisionId: string;
338
+ agentId: string;
339
+ environment: string;
340
+ triggerReason: string;
341
+ eventCount: number;
342
+ transcriptUrl: string;
343
+ definitionsUrl: string;
344
+ }
345
+
346
+ export function assignmentFromWire(data: WireObject): Assignment {
347
+ return {
348
+ assignmentId: str(data, "assignment_id"),
349
+ leaseGeneration: positiveInt(data, "lease_generation"),
350
+ leaseExpiresAt: str(data, "lease_expires_at"),
351
+ sessionId: str(data, "session_id"),
352
+ sessionRevisionId: str(data, "session_revision_id"),
353
+ agentId: str(data, "agent_id"),
354
+ environment: str(data, "environment"),
355
+ triggerReason: str(data, "trigger_reason"),
356
+ eventCount: nonNegativeInt(data, "event_count"),
357
+ transcriptUrl: str(data, "transcript_url"),
358
+ definitionsUrl: typeof data.definitions_url === "string" ? data.definitions_url : "",
359
+ };
360
+ }
361
+
362
+ export interface AssignmentDefinition {
363
+ evalKey: string;
364
+ displayName: string;
365
+ evalVersion: string;
366
+ resultKind: ResultKind;
367
+ labels: readonly string[];
368
+ executionMode: ExecutionMode;
369
+ conditionSource: string | null;
370
+ sourceChecksum: string | null;
371
+ timeoutSeconds: number | null;
372
+ }
373
+
374
+ export function assignmentDefinitionFromWire(data: WireObject): AssignmentDefinition {
375
+ return {
376
+ evalKey: str(data, "eval_key"),
377
+ displayName: str(data, "display_name"),
378
+ evalVersion: str(data, "eval_version"),
379
+ resultKind: enumValue(Object.values(ResultKind), data, "result_kind"),
380
+ labels: stringList(data, "labels"),
381
+ executionMode: executionMode(data, "execution_mode"),
382
+ conditionSource: optionalString(data, "condition_source"),
383
+ sourceChecksum: optionalString(data, "source_checksum"),
384
+ timeoutSeconds: optionalPositiveNumber(data, "timeout_seconds"),
385
+ };
386
+ }
387
+
388
+ export interface DefinitionsResponse {
389
+ assignmentId: string;
390
+ catalogRevision: string;
391
+ definitions: readonly AssignmentDefinition[];
392
+ }
393
+
394
+ export function definitionsResponseFromWire(data: WireObject): DefinitionsResponse {
395
+ validateProtocolVersion(str(data, "protocol_version"));
396
+ return {
397
+ assignmentId: str(data, "assignment_id"),
398
+ catalogRevision: str(data, "catalog_revision"),
399
+ definitions: objectList(data, "definitions").map(assignmentDefinitionFromWire),
400
+ };
401
+ }
402
+
403
+ export interface ClaimResponse {
404
+ assignments: readonly Assignment[];
405
+ }
406
+
407
+ export function claimResponseFromWire(data: WireObject): ClaimResponse {
408
+ validateProtocolVersion(str(data, "protocol_version"));
409
+ return { assignments: objectList(data, "assignments").map(assignmentFromWire) };
410
+ }
411
+
412
+ export interface TranscriptEvent {
413
+ id: string;
414
+ ts: string;
415
+ eventType: string;
416
+ payload: Readonly<WireObject>;
417
+ }
418
+
419
+ export function transcriptEventFromWire(data: WireObject): TranscriptEvent {
420
+ return {
421
+ id: str(data, "id"),
422
+ ts: str(data, "ts"),
423
+ eventType: str(data, "event_type"),
424
+ payload: object(data.payload, "payload"),
425
+ };
426
+ }
427
+
428
+ export interface SessionTranscript {
429
+ assignmentId: string;
430
+ sessionId: string;
431
+ sessionRevisionId: string;
432
+ agentId: string;
433
+ environment: string;
434
+ startedAt: string;
435
+ endedAt: string;
436
+ eventCount: number;
437
+ events: readonly TranscriptEvent[];
438
+ schemaVersion: string;
439
+ eventsOfType(eventType: string): readonly TranscriptEvent[];
440
+ count(eventType: string): number;
441
+ toWire(): WireObject;
442
+ }
443
+
444
+ function makeTranscript(fields: Omit<SessionTranscript, "eventsOfType" | "count" | "toWire">): SessionTranscript {
445
+ return {
446
+ ...fields,
447
+ eventsOfType(eventType: string) {
448
+ return fields.events.filter((event) => event.eventType === eventType);
449
+ },
450
+ count(eventType: string) {
451
+ return fields.events.reduce((total, event) => total + (event.eventType === eventType ? 1 : 0), 0);
452
+ },
453
+ toWire(): WireObject {
454
+ return {
455
+ schema_version: fields.schemaVersion,
456
+ assignment_id: fields.assignmentId,
457
+ session_id: fields.sessionId,
458
+ session_revision_id: fields.sessionRevisionId,
459
+ agent_id: fields.agentId,
460
+ environment: fields.environment,
461
+ started_at: fields.startedAt,
462
+ ended_at: fields.endedAt,
463
+ event_count: fields.eventCount,
464
+ events: fields.events.map((event) => ({
465
+ id: event.id,
466
+ ts: event.ts,
467
+ event_type: event.eventType,
468
+ payload: event.payload,
469
+ })),
470
+ };
471
+ },
472
+ };
473
+ }
474
+
475
+ export function sessionTranscriptFromWire(data: WireObject): SessionTranscript {
476
+ const version = str(data, "schema_version");
477
+ if (version !== TRANSCRIPT_SCHEMA_VERSION) {
478
+ throw new ProtocolError(`unsupported transcript schema version ${JSON.stringify(version)}`);
479
+ }
480
+ const events = objectList(data, "events").map(transcriptEventFromWire);
481
+ const eventCount = nonNegativeInt(data, "event_count");
482
+ if (eventCount !== events.length) {
483
+ throw new ProtocolError(
484
+ `event_count is ${eventCount}, but transcript contains ${events.length} events`,
485
+ );
486
+ }
487
+ return makeTranscript({
488
+ assignmentId: str(data, "assignment_id"),
489
+ sessionId: str(data, "session_id"),
490
+ sessionRevisionId: str(data, "session_revision_id"),
491
+ agentId: str(data, "agent_id"),
492
+ environment: str(data, "environment"),
493
+ startedAt: str(data, "started_at"),
494
+ endedAt: str(data, "ended_at"),
495
+ eventCount,
496
+ events,
497
+ schemaVersion: version,
498
+ });
499
+ }
500
+
501
+ /** Rebuild a transcript from `toWire()` — used across the sandbox boundary. */
502
+ export function sessionTranscriptFromWireLoose(data: WireObject): SessionTranscript {
503
+ return sessionTranscriptFromWire(data);
504
+ }
505
+
506
+ export interface EvalSelection {
507
+ evalKey: string;
508
+ evalVersion: string;
509
+ }
510
+
511
+ export interface SkippedEval {
512
+ evalKey: string;
513
+ evalVersion: string;
514
+ reasonCode: string;
515
+ }
516
+
517
+ export interface PlanRequest {
518
+ workerId: string;
519
+ leaseGeneration: number;
520
+ selected: readonly EvalSelection[];
521
+ skipped: readonly SkippedEval[];
522
+ }
523
+
524
+ export function planRequestToWire(value: PlanRequest): WireObject {
525
+ return {
526
+ protocol_version: PROTOCOL_VERSION,
527
+ worker_id: value.workerId,
528
+ lease_generation: value.leaseGeneration,
529
+ selected: value.selected.map((item) => ({
530
+ eval_key: item.evalKey,
531
+ eval_version: item.evalVersion,
532
+ })),
533
+ skipped: value.skipped.map((item) => ({
534
+ eval_key: item.evalKey,
535
+ eval_version: item.evalVersion,
536
+ reason_code: item.reasonCode,
537
+ })),
538
+ };
539
+ }
540
+
541
+ export interface PlannedRun {
542
+ evaluationRunId: string;
543
+ evalKey: string;
544
+ evalVersion: string;
545
+ executionMode: ExecutionMode;
546
+ evaluatorSource: string | null;
547
+ sourceChecksum: string | null;
548
+ timeoutSeconds: number | null;
549
+ }
550
+
551
+ export function plannedRunFromWire(data: WireObject): PlannedRun {
552
+ return {
553
+ evaluationRunId: str(data, "evaluation_run_id"),
554
+ evalKey: str(data, "eval_key"),
555
+ evalVersion: str(data, "eval_version"),
556
+ executionMode: executionMode(data, "execution_mode"),
557
+ evaluatorSource: optionalString(data, "evaluator_source"),
558
+ sourceChecksum: optionalString(data, "source_checksum"),
559
+ timeoutSeconds: optionalPositiveNumber(data, "timeout_seconds"),
560
+ };
561
+ }
562
+
563
+ export interface PlanResponse {
564
+ assignmentId: string;
565
+ assignmentStatus: string;
566
+ runs: readonly PlannedRun[];
567
+ idempotentReplay: boolean;
568
+ }
569
+
570
+ export function planResponseFromWire(data: WireObject): PlanResponse {
571
+ validateProtocolVersion(str(data, "protocol_version"));
572
+ return {
573
+ assignmentId: str(data, "assignment_id"),
574
+ assignmentStatus: str(data, "assignment_status"),
575
+ runs: objectList(data, "runs").map(plannedRunFromWire),
576
+ idempotentReplay: boolean_(data, "idempotent_replay", false),
577
+ };
578
+ }
579
+
580
+ export interface HeartbeatRun {
581
+ evaluationRunId: string;
582
+ state: string;
583
+ progress?: number | null;
584
+ }
585
+
586
+ export interface HeartbeatRequest {
587
+ workerId: string;
588
+ leaseGeneration: number;
589
+ runs: readonly HeartbeatRun[];
590
+ }
591
+
592
+ export function heartbeatRequestToWire(value: HeartbeatRequest): WireObject {
593
+ return {
594
+ protocol_version: PROTOCOL_VERSION,
595
+ worker_id: value.workerId,
596
+ lease_generation: value.leaseGeneration,
597
+ runs: value.runs.map((run) => ({
598
+ evaluation_run_id: run.evaluationRunId,
599
+ state: run.state,
600
+ ...(run.progress === undefined || run.progress === null ? {} : { progress: run.progress }),
601
+ })),
602
+ };
603
+ }
604
+
605
+ export interface HeartbeatResponse {
606
+ leaseExpiresAt: string;
607
+ acceptedRunIds: readonly string[];
608
+ }
609
+
610
+ export function heartbeatResponseFromWire(data: WireObject): HeartbeatResponse {
611
+ validateProtocolVersion(str(data, "protocol_version"));
612
+ return {
613
+ leaseExpiresAt: str(data, "lease_expires_at"),
614
+ acceptedRunIds: stringList(data, "accepted_run_ids"),
615
+ };
616
+ }
617
+
618
+ export interface ResultItem {
619
+ resultKey: string;
620
+ resultKind: ResultKind;
621
+ numericValue?: number | null;
622
+ boolValue?: boolean | null;
623
+ textValue?: string | null;
624
+ unit?: string;
625
+ displayValue?: string | null;
626
+ description?: string | null;
627
+ reasoning?: string | null;
628
+ labels?: readonly string[];
629
+ }
630
+
631
+ export function resultItemToWire(value: ResultItem): WireObject {
632
+ return {
633
+ result_key: value.resultKey,
634
+ result_kind: value.resultKind,
635
+ numeric_value: value.numericValue ?? null,
636
+ bool_value: value.boolValue ?? null,
637
+ text_value: value.textValue ?? null,
638
+ unit: value.unit ?? "",
639
+ display_value: value.displayValue ?? null,
640
+ description: value.description ?? null,
641
+ reasoning: value.reasoning ?? null,
642
+ labels: [...(value.labels ?? [])],
643
+ };
644
+ }
645
+
646
+ export function resultItemFromWire(data: WireObject): ResultItem {
647
+ const numeric = data.numeric_value;
648
+ if (numeric !== undefined && numeric !== null) {
649
+ if (typeof numeric !== "number") throw new ProtocolError("numeric_value must be a number or null");
650
+ if (!Number.isFinite(numeric)) throw new ProtocolError("numeric_value must be finite");
651
+ }
652
+ const boolean = data.bool_value;
653
+ if (boolean !== undefined && boolean !== null && typeof boolean !== "boolean") {
654
+ throw new ProtocolError("bool_value must be a boolean or null");
655
+ }
656
+ return {
657
+ resultKey: str(data, "result_key"),
658
+ resultKind: enumValue(Object.values(ResultKind), data, "result_kind"),
659
+ numericValue: (numeric) ?? null,
660
+ boolValue: (boolean) ?? null,
661
+ textValue: optionalString(data, "text_value"),
662
+ unit: str(data, "unit"),
663
+ displayValue: optionalString(data, "display_value"),
664
+ description: optionalString(data, "description"),
665
+ reasoning: optionalString(data, "reasoning"),
666
+ labels: stringList(data, "labels"),
667
+ };
668
+ }
669
+
670
+ export interface ResultRequest {
671
+ submissionId: string;
672
+ workerId: string;
673
+ leaseGeneration: number;
674
+ status: TerminalRunStatus;
675
+ startedAt: string;
676
+ finishedAt: string;
677
+ durationMs: number;
678
+ summary: string | null;
679
+ results: readonly ResultItem[];
680
+ errorCode: string | null;
681
+ errorMessage: string | null;
682
+ }
683
+
684
+ export function resultRequestToWire(value: ResultRequest): WireObject {
685
+ return {
686
+ protocol_version: PROTOCOL_VERSION,
687
+ result_schema_version: RESULT_SCHEMA_VERSION,
688
+ submission_id: value.submissionId,
689
+ worker_id: value.workerId,
690
+ lease_generation: value.leaseGeneration,
691
+ status: value.status,
692
+ started_at: value.startedAt,
693
+ finished_at: value.finishedAt,
694
+ duration_ms: value.durationMs,
695
+ summary: value.summary,
696
+ results: value.results.map(resultItemToWire),
697
+ error_code: value.errorCode,
698
+ error_message: value.errorMessage,
699
+ };
700
+ }
701
+
702
+ export interface ResultResponse {
703
+ evaluationRunId: string;
704
+ submissionId: string;
705
+ status: string;
706
+ idempotentReplay: boolean;
707
+ resultCount: number;
708
+ resultChecksum: string;
709
+ }
710
+
711
+ export function resultResponseFromWire(data: WireObject): ResultResponse {
712
+ validateProtocolVersion(str(data, "protocol_version"));
713
+ return {
714
+ evaluationRunId: str(data, "evaluation_run_id"),
715
+ submissionId: str(data, "submission_id"),
716
+ status: str(data, "status"),
717
+ idempotentReplay: boolean_(data, "idempotent_replay"),
718
+ resultCount: nonNegativeInt(data, "result_count"),
719
+ resultChecksum: str(data, "result_checksum"),
720
+ };
721
+ }
722
+
723
+ export interface RemoteError {
724
+ code: string;
725
+ message: string;
726
+ retryable: boolean;
727
+ requestId: string;
728
+ }
729
+
730
+ export interface ErrorResponse {
731
+ error: RemoteError;
732
+ }
733
+
734
+ export function errorResponseFromWire(data: WireObject): ErrorResponse {
735
+ validateProtocolVersion(str(data, "protocol_version"));
736
+ const error = object(data.error, "error");
737
+ return {
738
+ error: {
739
+ code: str(error, "code"),
740
+ message: str(error, "message"),
741
+ retryable: boolean_(error, "retryable"),
742
+ requestId: str(error, "request_id"),
743
+ },
744
+ };
745
+ }
746
+
747
+ export { EXECUTION_MODE_TO_WIRE };