failproofai 1.0.1 → 1.0.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) 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 +6 -6
  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 +2 -2
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  16. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  20. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/standalone/.next/server/app/api/audit/invite/route.js +3 -2
  24. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/audit/run/route.js +5 -4
  26. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/auth/login-request/route.js +2 -2
  29. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js +4 -3
  31. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/auth/logout/route.js +4 -4
  33. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/auth/status/route.js +4 -4
  35. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  38. package/.next/standalone/.next/server/app/audit/page.js +2 -2
  39. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/index.html +1 -1
  42. package/.next/standalone/.next/server/app/index.rsc +15 -15
  43. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  44. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  45. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  46. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  47. package/.next/standalone/.next/server/app/page.js +2 -2
  48. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +66 -22
  51. package/.next/standalone/.next/server/app/policies/page.js +5 -4
  52. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  55. package/.next/standalone/.next/server/app/project/[name]/page.js +2 -2
  56. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  59. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  60. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +2 -2
  61. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  64. package/.next/standalone/.next/server/app/projects/page.js +2 -2
  65. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +4 -4
  68. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  69. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/chunks/{[externals]__1qzqcio._.js → [externals]__0e32-7c._.js} +1 -1
  72. package/.next/standalone/.next/server/chunks/[externals]__1s462yl._.js +3 -0
  73. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01eqny5._.js +3 -0
  74. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_0xu5z._.js +1 -1
  75. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1p8poxd._.js → [root-of-the-server]__0igxt32._.js} +2 -2
  76. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0neqlu-._.js +3 -0
  77. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +3 -0
  78. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t9oqnn._.js +3 -0
  79. package/.next/standalone/.next/server/chunks/_0bs-v8p._.js +3 -0
  80. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +3 -0
  81. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +3 -0
  82. package/.next/standalone/.next/server/chunks/_185gyk9._.js +3 -0
  83. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +5 -6
  84. package/.next/standalone/.next/server/chunks/lib_telemetry-id_ts_1k8gj9o._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_09d5c79._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_04op_ou._.js} +1 -1
  86. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_1d2g73o._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_0dr20uz._.js} +1 -1
  87. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  88. package/.next/standalone/.next/server/chunks/src_hooks_0xbw3bu._.js +12 -0
  89. package/.next/standalone/.next/server/chunks/src_hooks_fp-home_ts_09kv0bn._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +4 -0
  91. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +4 -0
  92. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +4 -0
  93. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0spkm68._.js → [root-of-the-server]__07gm3zl._.js} +21 -20
  94. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +4 -0
  95. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +4 -0
  96. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0oa1lav._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +4 -0
  98. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s740oi._.js +6 -0
  99. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__07tbbf3._.js → [root-of-the-server]__0zig5sv._.js} +2 -2
  100. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__192nhvh._.js +5 -0
  101. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +4 -0
  102. package/.next/standalone/.next/server/chunks/ssr/{_0lvyuv4._.js → _00e9tnf._.js} +2 -2
  103. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  104. package/.next/standalone/.next/server/chunks/ssr/{_0u5zauv._.js → _12l4a_k._.js} +1 -1
  105. package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +13 -13
  108. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
  110. package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +1 -1
  111. package/.next/standalone/.next/server/chunks/ssr/src_hooks_08o7bqo._.js +10 -0
  112. package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
  113. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
  114. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  115. package/.next/standalone/.next/server/middleware.js +1 -1
  116. package/.next/standalone/.next/server/pages/404.html +1 -1
  117. package/.next/standalone/.next/server/pages/500.html +1 -1
  118. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/server-reference-manifest.json +71 -27
  120. package/.next/standalone/.next/static/chunks/{37fcpc36x9gpe.js → 0eqky-7n7dgdm.js} +1 -1
  121. package/.next/standalone/.next/static/chunks/{1ide1wl2f7zi1.js → 0sa9v5mhc8861.js} +13 -13
  122. package/.next/standalone/.next/static/chunks/1mfzsja6ftim5.css +2 -0
  123. package/.next/standalone/.next/static/chunks/{3k7mxbp9hiom0.js → 1nuqytbta44af.js} +1 -1
  124. package/.next/standalone/.next/static/chunks/1sl2xmn9inx3y.js +6 -0
  125. package/.next/standalone/.next/static/chunks/{2_2lhuojq2xop.js → 2aawsjld9ied_.js} +1 -1
  126. package/.next/standalone/.next/static/chunks/2gn7ut4svofm2.js +1 -0
  127. package/.next/standalone/.next/static/chunks/{31s1smp-g7gks.js → 2hs7ycvsav7v2.js} +1 -1
  128. package/.next/standalone/.next/static/chunks/{0k5050ezjvv49.js → 2i2yt3hzjredm.js} +1 -1
  129. package/.next/standalone/.next/static/chunks/{3c808qrfcq0im.js → 35xg6retpe6rp.js} +1 -1
  130. package/.next/standalone/.next/static/chunks/{2zpp1we2jv6tb.js → 3y54nw0i7dsjl.js} +1 -1
  131. package/.next/standalone/SECURITY.md +5 -4
  132. package/.next/standalone/app/actions/get-hooks-config.ts +108 -17
  133. package/.next/standalone/app/actions/pack-actions.ts +153 -0
  134. package/.next/standalone/app/audit/_components/run-progress.tsx +1 -1
  135. package/.next/standalone/app/audit/_components/share-templates.ts +13 -13
  136. package/.next/standalone/app/policies/hooks-client.tsx +320 -14
  137. package/.next/standalone/components/navbar.tsx +2 -28
  138. package/.next/standalone/components/reach-developers.tsx +8 -1
  139. package/.next/standalone/docs-old/agenteye/python-sdk-skill.mdx +1 -1
  140. package/.next/standalone/docs-old/agenteye/python-sdk.mdx +59 -35
  141. package/.next/standalone/docs-old/i18n/README.ar.md +1 -0
  142. package/.next/standalone/docs-old/i18n/README.de.md +1 -0
  143. package/.next/standalone/docs-old/i18n/README.es.md +1 -0
  144. package/.next/standalone/docs-old/i18n/README.fr.md +1 -0
  145. package/.next/standalone/docs-old/i18n/README.he.md +1 -0
  146. package/.next/standalone/docs-old/i18n/README.hi.md +1 -0
  147. package/.next/standalone/docs-old/i18n/README.it.md +1 -0
  148. package/.next/standalone/docs-old/i18n/README.ja.md +1 -0
  149. package/.next/standalone/docs-old/i18n/README.ko.md +1 -0
  150. package/.next/standalone/docs-old/i18n/README.pt-br.md +1 -0
  151. package/.next/standalone/docs-old/i18n/README.ru.md +1 -0
  152. package/.next/standalone/docs-old/i18n/README.tr.md +1 -0
  153. package/.next/standalone/docs-old/i18n/README.vi.md +1 -0
  154. package/.next/standalone/docs-old/i18n/README.zh.md +1 -0
  155. package/.next/standalone/fp-cloud-cli/CHANGELOG.md +431 -0
  156. package/.next/standalone/fp-cloud-cli/LICENSE +42 -0
  157. package/.next/standalone/fp-cloud-cli/MANIFEST.in +10 -0
  158. package/.next/standalone/fp-cloud-cli/README.md +259 -0
  159. package/.next/standalone/fp-cloud-cli/fp_cli/__init__.py +10 -0
  160. package/.next/standalone/fp-cloud-cli/fp_cli/__main__.py +4 -0
  161. package/.next/standalone/fp-cloud-cli/fp_cli/_click_compat.py +64 -0
  162. package/.next/standalone/fp-cloud-cli/fp_cli/_context.py +332 -0
  163. package/.next/standalone/fp-cloud-cli/fp_cli/_version.py +1 -0
  164. package/.next/standalone/fp-cloud-cli/fp_cli/analytics.py +432 -0
  165. package/.next/standalone/fp-cloud-cli/fp_cli/analytics_config.py +77 -0
  166. package/.next/standalone/fp-cloud-cli/fp_cli/analytics_registry.py +83 -0
  167. package/.next/standalone/fp-cloud-cli/fp_cli/app.py +492 -0
  168. package/.next/standalone/fp-cloud-cli/fp_cli/auth.py +160 -0
  169. package/.next/standalone/fp-cloud-cli/fp_cli/client.py +1694 -0
  170. package/.next/standalone/fp-cloud-cli/fp_cli/commands/__init__.py +0 -0
  171. package/.next/standalone/fp-cloud-cli/fp_cli/commands/_write.py +214 -0
  172. package/.next/standalone/fp-cloud-cli/fp_cli/commands/agent_cmds.py +407 -0
  173. package/.next/standalone/fp-cloud-cli/fp_cli/commands/alerts_cmds.py +445 -0
  174. package/.next/standalone/fp-cloud-cli/fp_cli/commands/audits_cmds.py +1054 -0
  175. package/.next/standalone/fp-cloud-cli/fp_cli/commands/auth_cmds.py +512 -0
  176. package/.next/standalone/fp-cloud-cli/fp_cli/commands/errors_cmds.py +190 -0
  177. package/.next/standalone/fp-cloud-cli/fp_cli/commands/evals_cmds.py +161 -0
  178. package/.next/standalone/fp-cloud-cli/fp_cli/commands/events_cmds.py +159 -0
  179. package/.next/standalone/fp-cloud-cli/fp_cli/commands/fleet_cmds.py +416 -0
  180. package/.next/standalone/fp-cloud-cli/fp_cli/commands/guardrails_cmds.py +148 -0
  181. package/.next/standalone/fp-cloud-cli/fp_cli/commands/incidents_cmds.py +472 -0
  182. package/.next/standalone/fp-cloud-cli/fp_cli/commands/keys_cmds.py +407 -0
  183. package/.next/standalone/fp-cloud-cli/fp_cli/commands/list_cmds.py +63 -0
  184. package/.next/standalone/fp-cloud-cli/fp_cli/commands/orgs_cmds.py +319 -0
  185. package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +499 -0
  186. package/.next/standalone/fp-cloud-cli/fp_cli/commands/queries_cmds.py +378 -0
  187. package/.next/standalone/fp-cloud-cli/fp_cli/commands/sessions_cmds.py +151 -0
  188. package/.next/standalone/fp-cloud-cli/fp_cli/commands/settings_cmds.py +150 -0
  189. package/.next/standalone/fp-cloud-cli/fp_cli/commands/usage_cmds.py +35 -0
  190. package/.next/standalone/fp-cloud-cli/fp_cli/commands/users_cmds.py +404 -0
  191. package/.next/standalone/fp-cloud-cli/fp_cli/config.py +330 -0
  192. package/.next/standalone/fp-cloud-cli/fp_cli/dates.py +78 -0
  193. package/.next/standalone/fp-cloud-cli/fp_cli/enforcement.py +345 -0
  194. package/.next/standalone/fp-cloud-cli/fp_cli/errors.py +98 -0
  195. package/.next/standalone/fp-cloud-cli/fp_cli/models.py +891 -0
  196. package/.next/standalone/fp-cloud-cli/fp_cli/orgs.py +30 -0
  197. package/.next/standalone/fp-cloud-cli/fp_cli/output.py +6593 -0
  198. package/.next/standalone/fp-cloud-cli/fp_cli/permissions.py +208 -0
  199. package/.next/standalone/fp-cloud-cli/fp_cli/policy_check.py +290 -0
  200. package/.next/standalone/fp-cloud-cli/fp_cli/py.typed +0 -0
  201. package/.next/standalone/fp-cloud-cli/fp_cli/select.py +322 -0
  202. package/.next/standalone/fp-cloud-cli/fp_cli/theme.py +53 -0
  203. package/.next/standalone/fp-cloud-cli/pyproject.toml +106 -0
  204. package/.next/standalone/fp-cloud-cli/skill/SKILL.md +302 -0
  205. package/.next/standalone/fp-cloud-cli/skill/agents/openai.yaml +8 -0
  206. package/.next/standalone/fp-cloud-cli/skill/references/commands.md +254 -0
  207. package/.next/standalone/fp-cloud-cli/tests/__init__.py +0 -0
  208. package/.next/standalone/fp-cloud-cli/tests/conftest.py +92 -0
  209. package/.next/standalone/fp-cloud-cli/tests/test_alerting.py +644 -0
  210. package/.next/standalone/fp-cloud-cli/tests/test_analytics.py +385 -0
  211. package/.next/standalone/fp-cloud-cli/tests/test_audits.py +950 -0
  212. package/.next/standalone/fp-cloud-cli/tests/test_auth.py +98 -0
  213. package/.next/standalone/fp-cloud-cli/tests/test_auth_mode.py +272 -0
  214. package/.next/standalone/fp-cloud-cli/tests/test_click_compat.py +118 -0
  215. package/.next/standalone/fp-cloud-cli/tests/test_client.py +299 -0
  216. package/.next/standalone/fp-cloud-cli/tests/test_commands.py +814 -0
  217. package/.next/standalone/fp-cloud-cli/tests/test_config.py +99 -0
  218. package/.next/standalone/fp-cloud-cli/tests/test_dashboards_agent.py +340 -0
  219. package/.next/standalone/fp-cloud-cli/tests/test_dates.py +76 -0
  220. package/.next/standalone/fp-cloud-cli/tests/test_enforcement_logic.py +481 -0
  221. package/.next/standalone/fp-cloud-cli/tests/test_facets.py +170 -0
  222. package/.next/standalone/fp-cloud-cli/tests/test_failproofai_home.py +722 -0
  223. package/.next/standalone/fp-cloud-cli/tests/test_fp_home_contract.py +198 -0
  224. package/.next/standalone/fp-cloud-cli/tests/test_hardening.py +186 -0
  225. package/.next/standalone/fp-cloud-cli/tests/test_help_table_coverage.py +127 -0
  226. package/.next/standalone/fp-cloud-cli/tests/test_keys_queries.py +496 -0
  227. package/.next/standalone/fp-cloud-cli/tests/test_list.py +59 -0
  228. package/.next/standalone/fp-cloud-cli/tests/test_multivalue.py +183 -0
  229. package/.next/standalone/fp-cloud-cli/tests/test_no_customer_identifiers.py +168 -0
  230. package/.next/standalone/fp-cloud-cli/tests/test_operator.py +492 -0
  231. package/.next/standalone/fp-cloud-cli/tests/test_orgs.py +692 -0
  232. package/.next/standalone/fp-cloud-cli/tests/test_output.py +1732 -0
  233. package/.next/standalone/fp-cloud-cli/tests/test_policy_check.py +191 -0
  234. package/.next/standalone/fp-cloud-cli/tests/test_readme_matches_reality.py +125 -0
  235. package/.next/standalone/fp-cloud-cli/tests/test_review_fixes.py +161 -0
  236. package/.next/standalone/fp-cloud-cli/tests/test_telemetry_completeness.py +90 -0
  237. package/.next/standalone/fp-cloud-cli/tests/test_usage.py +115 -0
  238. package/.next/standalone/fp-cloud-cli/tests/test_v1_origin_diagnostic.py +70 -0
  239. package/.next/standalone/fp-cloud-cli/tests/test_v1_routing.py +214 -0
  240. package/.next/standalone/fp-cloud-cli/tests/test_whoami.py +104 -0
  241. package/.next/standalone/fp-cloud-cli/uv.lock +552 -0
  242. package/.next/standalone/package.json +29 -22
  243. package/.next/standalone/sdk/python/CHANGELOG.md +70 -0
  244. package/.next/standalone/sdk/python/LICENSE +42 -0
  245. package/.next/standalone/sdk/python/MANIFEST.in +21 -0
  246. package/.next/standalone/sdk/python/README.md +466 -0
  247. package/.next/standalone/sdk/python/docs/README.md +249 -0
  248. package/.next/standalone/sdk/python/docs/_shared/README.md +43 -0
  249. package/.next/standalone/sdk/python/docs/_shared/__init__.py +195 -0
  250. package/.next/standalone/sdk/python/docs/crewai/README.md +328 -0
  251. package/.next/standalone/sdk/python/docs/crewai/examples/quickstart.py +61 -0
  252. package/.next/standalone/sdk/python/docs/crewai/examples/research_crew.py +92 -0
  253. package/.next/standalone/sdk/python/docs/langgraph/README.md +481 -0
  254. package/.next/standalone/sdk/python/docs/langgraph/examples/quickstart.py +51 -0
  255. package/.next/standalone/sdk/python/docs/langgraph/examples/research_agent.py +86 -0
  256. package/.next/standalone/sdk/python/docs/langgraph/examples/supervisor_handoff.py +83 -0
  257. package/.next/standalone/sdk/python/docs/llama_index/README.md +332 -0
  258. package/.next/standalone/sdk/python/docs/llama_index/examples/quickstart.py +62 -0
  259. package/.next/standalone/sdk/python/docs/llama_index/examples/research_agent.py +93 -0
  260. package/.next/standalone/sdk/python/docs/manual/README.md +491 -0
  261. package/.next/standalone/sdk/python/docs/manual/examples/quickstart.py +57 -0
  262. package/.next/standalone/sdk/python/docs/manual/examples/research_agent.py +133 -0
  263. package/.next/standalone/sdk/python/docs/pydantic_ai/README.md +323 -0
  264. package/.next/standalone/sdk/python/docs/pydantic_ai/examples/quickstart.py +48 -0
  265. package/.next/standalone/sdk/python/docs/pydantic_ai/examples/research_agent.py +94 -0
  266. package/.next/standalone/sdk/python/failproofai_sdk/__init__.py +131 -0
  267. package/.next/standalone/sdk/python/failproofai_sdk/_context.py +218 -0
  268. package/.next/standalone/sdk/python/failproofai_sdk/_environment.py +78 -0
  269. package/.next/standalone/sdk/python/failproofai_sdk/_events.py +752 -0
  270. package/.next/standalone/sdk/python/failproofai_sdk/_resolver.py +118 -0
  271. package/.next/standalone/sdk/python/failproofai_sdk/_runtime.py +21 -0
  272. package/.next/standalone/sdk/python/failproofai_sdk/_schema.py +317 -0
  273. package/.next/standalone/sdk/python/failproofai_sdk/_scopes.py +422 -0
  274. package/.next/standalone/sdk/python/failproofai_sdk/_version.py +1 -0
  275. package/.next/standalone/sdk/python/failproofai_sdk/_writer.py +750 -0
  276. package/.next/standalone/sdk/python/failproofai_sdk/integrations/__init__.py +274 -0
  277. package/.next/standalone/sdk/python/failproofai_sdk/integrations/_compat.py +247 -0
  278. package/.next/standalone/sdk/python/failproofai_sdk/integrations/_core.py +1076 -0
  279. package/.next/standalone/sdk/python/failproofai_sdk/integrations/crewai.py +1669 -0
  280. package/.next/standalone/sdk/python/failproofai_sdk/integrations/langchain.py +2151 -0
  281. package/.next/standalone/sdk/python/failproofai_sdk/integrations/llama_index.py +1588 -0
  282. package/.next/standalone/sdk/python/failproofai_sdk/integrations/pydantic_ai.py +977 -0
  283. package/.next/standalone/sdk/python/failproofai_sdk/py.typed +0 -0
  284. package/.next/standalone/sdk/python/pyproject.toml +92 -0
  285. package/.next/standalone/sdk/python/skill/SKILL.md +399 -0
  286. package/.next/standalone/sdk/python/skill/agents/openai.yaml +8 -0
  287. package/.next/standalone/sdk/python/skill/references/events.md +234 -0
  288. package/.next/standalone/sdk/python/skill/references/frameworks.md +314 -0
  289. package/.next/standalone/sdk/python/skill/references/install.md +100 -0
  290. package/.next/standalone/sdk/python/skill/references/integration.md +352 -0
  291. package/.next/standalone/sdk/python/tests/__init__.py +0 -0
  292. package/.next/standalone/sdk/python/tests/conftest.py +169 -0
  293. package/.next/standalone/sdk/python/tests/integrations/__init__.py +6 -0
  294. package/.next/standalone/sdk/python/tests/integrations/test_crewai.py +1299 -0
  295. package/.next/standalone/sdk/python/tests/integrations/test_langchain.py +2338 -0
  296. package/.next/standalone/sdk/python/tests/integrations/test_llama_index.py +1576 -0
  297. package/.next/standalone/sdk/python/tests/integrations/test_pydantic_ai.py +1102 -0
  298. package/.next/standalone/sdk/python/tests/test_context.py +410 -0
  299. package/.next/standalone/sdk/python/tests/test_docs.py +411 -0
  300. package/.next/standalone/sdk/python/tests/test_durability.py +1352 -0
  301. package/.next/standalone/sdk/python/tests/test_encoding.py +571 -0
  302. package/.next/standalone/sdk/python/tests/test_integrations.py +1127 -0
  303. package/.next/standalone/sdk/python/tests/test_no_customer_identifiers.py +214 -0
  304. package/.next/standalone/sdk/python/tests/test_packaging.py +185 -0
  305. package/.next/standalone/sdk/python/tests/test_resolver_umbrella.py +178 -0
  306. package/.next/standalone/sdk/python/tests/test_scopes.py +487 -0
  307. package/.next/standalone/sdk/python/tests/test_sdk.py +923 -0
  308. package/.next/standalone/sdk/python/tests/test_server_contract.py +650 -0
  309. package/.next/standalone/sdk/python/tests/test_site_docs.py +371 -0
  310. package/.next/standalone/sdk/python/tests/test_skill_snippets.py +165 -0
  311. package/.next/standalone/sdk/python/tests/test_spool_contract.py +287 -0
  312. package/.next/standalone/sdk/python/tests/test_spool_creation.py +360 -0
  313. package/.next/standalone/sdk/python/tests/test_wire_format.py +279 -0
  314. package/.next/standalone/sdk/python/tests/test_zero_dependencies.py +378 -0
  315. package/.next/standalone/sdk/python/uv.lock +6005 -0
  316. package/.next/standalone/server.js +1 -1
  317. package/README.md +77 -21
  318. package/bin/failproofai.mjs +145 -11
  319. package/dist/cli.mjs +4482 -2205
  320. package/dist/index.js +5 -5
  321. package/dist/worker.mjs +2399 -1978
  322. package/package.json +29 -22
  323. package/policy-pack/SHA256SUMS +2 -0
  324. package/policy-pack/failproofai-pack.json +732 -0
  325. package/policy-pack/failproofai-pack.mjs +2017 -0
  326. package/scripts/build-policy-pack.mjs +121 -0
  327. package/scripts/changelog-section.py +77 -0
  328. package/scripts/prune-standalone.mjs +3 -0
  329. package/scripts/python-version.py +232 -0
  330. package/scripts/translate-docs/cli.ts +21 -0
  331. package/scripts/translate-docs/mintlify-nav.ts +85 -13
  332. package/scripts/translate-docs/translator.ts +66 -11
  333. package/src/audit/cache.ts +40 -3
  334. package/src/audit/cli.ts +1 -1
  335. package/src/audit/index.ts +1 -1
  336. package/src/audit/replay.ts +89 -3
  337. package/src/audit/report.ts +5 -5
  338. package/src/audit/schedule-cli.ts +49 -53
  339. package/src/hooks/builtin-policies.ts +217 -579
  340. package/src/hooks/cloud-enrollment-cli.ts +66 -27
  341. package/src/hooks/cloud-managed-policies.ts +6 -1
  342. package/src/hooks/configure-wizard.ts +1 -1
  343. package/src/hooks/custom-hooks-loader.ts +89 -6
  344. package/src/hooks/fp-home.ts +92 -4
  345. package/src/hooks/fp-reset.ts +26 -2
  346. package/src/hooks/handler.ts +181 -11
  347. package/src/hooks/harness-cli.ts +79 -25
  348. package/src/hooks/hook-activity-store.ts +13 -3
  349. package/src/hooks/install-prompt.ts +25 -3
  350. package/src/hooks/manager.ts +418 -172
  351. package/src/hooks/migrations.ts +2 -2
  352. package/src/hooks/pack-cli.ts +505 -0
  353. package/src/hooks/pack-failclosed.ts +189 -0
  354. package/src/hooks/pack-manifest.ts +344 -0
  355. package/src/hooks/pack-store.ts +930 -0
  356. package/src/hooks/policy-catalog.ts +535 -0
  357. package/src/hooks/policy-evaluator.ts +24 -16
  358. package/src/hooks/policy-presets.ts +4 -2
  359. package/src/hooks/policy-registry.ts +8 -2
  360. package/src/hooks/policy-types.ts +26 -0
  361. package/src/hooks/session-pause-cli.ts +33 -9
  362. package/src/hooks/tui.ts +570 -0
  363. package/src/hooks/types.ts +15 -1
  364. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_usx0j._.js +0 -3
  365. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_zk340._.js +0 -3
  366. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0agdw2a._.js +0 -3
  367. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d1u_na._.js +0 -3
  368. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oy4kxb._.js +0 -3
  369. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zf034w._.js +0 -3
  370. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tvn4wf._.js +0 -3
  371. package/.next/standalone/.next/server/chunks/_0lxbzdq._.js +0 -3
  372. package/.next/standalone/.next/server/chunks/_1ger0a2._.js +0 -3
  373. package/.next/standalone/.next/server/chunks/_1zuiiy3._.js +0 -3
  374. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_1iiwm5e._.js +0 -3
  375. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kc8_v5._.js +0 -4
  376. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kgy9da._.js +0 -4
  377. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0mhqk5a._.js +0 -4
  378. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pltpn8._.js +0 -4
  379. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qkcyf-._.js +0 -4
  380. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w0x_ok._.js +0 -4
  381. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1_dfocn._.js +0 -4
  382. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1bfex62._.js +0 -5
  383. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1kzapg5._.js +0 -6
  384. package/.next/standalone/.next/static/chunks/36fw6yk1s6x_f.js +0 -1
  385. package/.next/standalone/.next/static/chunks/3tzq0260n17ae.js +0 -6
  386. package/.next/standalone/.next/static/chunks/3wq9x0c-7ld5d.css +0 -2
  387. /package/.next/standalone/.next/static/{ZklXxyA5ygsWSQz2u_zii → nwbyWT06Ud0XdXOrVJyvS}/_buildManifest.js +0 -0
  388. /package/.next/standalone/.next/static/{ZklXxyA5ygsWSQz2u_zii → nwbyWT06Ud0XdXOrVJyvS}/_clientMiddlewareManifest.js +0 -0
  389. /package/.next/standalone/.next/static/{ZklXxyA5ygsWSQz2u_zii → nwbyWT06Ud0XdXOrVJyvS}/_ssgManifest.js +0 -0
@@ -0,0 +1,118 @@
1
+ import os
2
+ from pathlib import Path
3
+
4
+ _base_dir: Path | None = None
5
+
6
+
7
+ def get_base_dir() -> Path:
8
+ """Where this SDK writes its event spool.
9
+
10
+ Resolution order, most explicit first:
11
+
12
+ 1. ``set_base_dir()`` — a caller said so outright
13
+ 2. ``~/.failproofai/custom-agents`` — always
14
+
15
+ There is no environment variable that redirects the spool off the umbrella,
16
+ and that is the point. ``FAILPROOFAI_HOME`` (honoured by
17
+ ``failproofai_custom_agents_dir()`` below) MOVES the umbrella; it cannot
18
+ take you outside it, because the ``custom-agents`` segment is appended
19
+ unconditionally. Wherever the home is, the spool is inside it.
20
+
21
+ ## Why ``$AGENTEYE_HOME`` no longer resolves here
22
+
23
+ It used to sit at step 2 and win over the default, which made it possible to
24
+ aim this SDK at ``~/.agenteye`` — or anywhere else — from the environment.
25
+ That is a redirect with no confirmation and no error: batches land in a
26
+ directory, something may or may not read it, and an unread spool is
27
+ indistinguishable from an idle one. A variable named for a product this
28
+ package no longer belongs to is a poor thing to have that power, and an
29
+ operator who exports it for the OTHER component that reads it (the older
30
+ ``agenteye-collector``, which resolves ``$AGENTEYE_HOME`` or ``~/.agenteye``
31
+ and nothing else) moved this SDK's spool as a side effect they never asked
32
+ for.
33
+
34
+ So it is gone from resolution. The variable itself still exists and still
35
+ means something — just not here.
36
+
37
+ ## Nothing is stranded by this
38
+
39
+ ``failproofaid``, the daemon this SDK ships beside, watches BOTH
40
+ ``~/.failproofai/custom-agents/events`` AND ``~/.agenteye/events``, and
41
+ keeps doing so (``crates/fpai-collect/src/config.rs``, ``spool_dirs``). An
42
+ SDK old enough to write only the legacy root is still collected. Batches
43
+ already sitting there still drain. What changed is only that THIS version
44
+ has no way to be pointed at that root by accident — it writes to the
45
+ umbrella, and the daemon reads both.
46
+
47
+ ## The one case that needs a deliberate choice
48
+
49
+ A host running the older ``agenteye-collector`` and nothing else. That
50
+ collector never learned the umbrella, so it does not watch where this SDK
51
+ now writes. Setting ``AGENTEYE_HOME`` no longer bridges that gap from this
52
+ side; the supported bridges are, in order of preference:
53
+
54
+ * run ``failproofaid`` instead — it watches both roots, so nothing is
55
+ configured at all; or
56
+ * point the collector AT the SDK by setting its own
57
+ ``AGENTEYE_HOME=~/.failproofai/custom-agents``, which makes it watch
58
+ ``~/.failproofai/custom-agents/events``; or
59
+ * ``set_base_dir("~/.agenteye")`` in the application, which is explicit,
60
+ visible at the call site, and cannot happen by inheriting somebody
61
+ else's environment.
62
+
63
+ ``test_spool_contract.py`` reads the Rust and the TypeScript that define
64
+ these roots and fails if either drifts from what this module resolves.
65
+ """
66
+ if _base_dir is not None:
67
+ return _base_dir
68
+
69
+ return failproofai_custom_agents_dir()
70
+
71
+
72
+ def failproofai_custom_agents_dir() -> Path:
73
+ """``~/.failproofai/custom-agents``, honouring ``$FAILPROOFAI_HOME``.
74
+
75
+ Mirrors ``customAgentsDir()`` in ``src/hooks/fp-home.ts`` and
76
+ ``custom_agents_events_dir()`` in ``crates/fpai-collect/src/config.rs``. The
77
+ three must agree; a divergence would mean this SDK writes somewhere the
78
+ daemon never reads.
79
+
80
+ All three live in THIS repository, so the agreement is checkable rather than
81
+ hoped for — ``tests/test_spool_contract.py`` reads the Rust and the
82
+ TypeScript and fails if either drifts.
83
+
84
+ Returns a path unconditionally and never checks whether it exists. The
85
+ caller creates it: ``_writer._write_batch`` already does
86
+ ``mkdir(parents=True, exist_ok=True)`` on the directory it is about to write
87
+ into. An existence check here is what made the old opt-in dead — a spool
88
+ root that must pre-exist can never be the place a first batch is written.
89
+ """
90
+ fp_home = os.environ.get("FAILPROOFAI_HOME")
91
+ base = Path(fp_home) if fp_home else Path.home() / ".failproofai"
92
+ return base / "custom-agents"
93
+
94
+
95
+ def legacy_agenteye_dir() -> Path:
96
+ """``~/.agenteye`` — the root this SDK wrote to before the default moved.
97
+
98
+ Not part of resolution any more, and no environment variable can put it
99
+ back — see ``get_base_dir``. Kept as a named constant because the migration
100
+ notes and the tests still refer to it, and because ``failproofaid`` goes on
101
+ watching ``~/.agenteye/events`` for SDKs old enough to write there. Spelling
102
+ it in four places is how the two sides drift apart.
103
+ """
104
+ return Path.home() / ".agenteye"
105
+
106
+
107
+ def set_base_dir(path: "str | Path | None") -> None:
108
+ global _base_dir
109
+ # `expanduser`, because the migration bridge this module itself prescribes —
110
+ # `configure(base_dir="~/.agenteye")`, listed in `get_base_dir`'s docstring
111
+ # and in README.md as the explicit, visible-at-the-call-site option — is a
112
+ # RELATIVE path whose first segment is the literal character `~`. Without
113
+ # this, `_write_batch`'s `mkdir(parents=True)` cheerfully created a `~`
114
+ # directory under the process's cwd and spooled into it: nothing on the
115
+ # machine watches that path, so 100% of the telemetry was lost, which is the
116
+ # precise "an unread spool is indistinguishable from an idle one" failure
117
+ # the prose above it is written to prevent.
118
+ _base_dir = Path(path).expanduser() if path is not None else None
@@ -0,0 +1,21 @@
1
+ """The process-wide writer and event namespace.
2
+
3
+ These used to be constructed in `failproofai_sdk/__init__.py`. They live in a
4
+ leaf module now so that `_scopes` and the framework adapters can reach the
5
+ namespace without importing the `failproofai_sdk` package itself, which would be
6
+ a circular import.
7
+
8
+ Constructing `EventWriter` starts a daemon thread and registers the module-level
9
+ atexit flush, and that still happens at `import failproofai_sdk` time —
10
+ `__init__.py` imports this module, so the timing is unchanged.
11
+
12
+ Reach the namespace as `_runtime.event`, an attribute lookup at call time rather
13
+ than a `from ... import event` binding, so a test can swap in a recording
14
+ namespace and the scopes pick it up.
15
+ """
16
+
17
+ from failproofai_sdk._events import EventNamespace
18
+ from failproofai_sdk._writer import EventWriter
19
+
20
+ writer = EventWriter()
21
+ event = EventNamespace(writer)
@@ -0,0 +1,317 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Any
3
+
4
+ from failproofai_sdk._environment import get_environment
5
+
6
+
7
+ def _build(base: dict, specifics: list[tuple[str, Any]], extra: dict) -> dict:
8
+ """Build ordered event dict, omitting None values, then merge extra fields."""
9
+ result = {**base}
10
+ result["environment"] = get_environment()
11
+ for k, v in specifics:
12
+ if v is not None:
13
+ result[k] = v
14
+ result.update(extra)
15
+ return result
16
+
17
+
18
+ @dataclass(kw_only=True)
19
+ class ToolUseEvent:
20
+ timestamp: str
21
+ session_id: str
22
+ agent_id: str
23
+ tool_name: str
24
+ tool_call_id: str
25
+ input: dict | None = None
26
+ extra_fields: dict = field(default_factory=dict)
27
+
28
+ def to_dict(self) -> dict:
29
+ return _build(
30
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "tool_use",
31
+ "tool_name": self.tool_name, "tool_call_id": self.tool_call_id},
32
+ [("input", self.input)],
33
+ self.extra_fields,
34
+ )
35
+
36
+
37
+ @dataclass(kw_only=True)
38
+ class ToolResultEvent:
39
+ timestamp: str
40
+ session_id: str
41
+ agent_id: str
42
+ tool_name: str
43
+ tool_call_id: str
44
+ output: Any | None = None
45
+ error: str | None = None
46
+ duration_ms: float | None = None
47
+ extra_fields: dict = field(default_factory=dict)
48
+
49
+ def to_dict(self) -> dict:
50
+ return _build(
51
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "tool_result",
52
+ "tool_name": self.tool_name, "tool_call_id": self.tool_call_id},
53
+ [("output", self.output), ("error", self.error), ("duration_ms", self.duration_ms)],
54
+ self.extra_fields,
55
+ )
56
+
57
+
58
+ @dataclass(kw_only=True)
59
+ class ModelRequestEvent:
60
+ timestamp: str
61
+ session_id: str
62
+ agent_id: str
63
+ model: str | None = None
64
+ messages: list[dict] | None = None
65
+ system: Any | None = None
66
+ tools: list[dict] | None = None
67
+ #: Pairs this request with its response. Appended LAST in `_build`'s ordered
68
+ #: list so an event that omits it serialises byte-for-byte as before —
69
+ #: `test_wire_format.py` freezes those bytes, and the dedup key hashes them.
70
+ request_id: str | None = None
71
+ extra_fields: dict = field(default_factory=dict)
72
+
73
+ def to_dict(self) -> dict:
74
+ return _build(
75
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "model_request"},
76
+ [("model", self.model), ("messages", self.messages),
77
+ ("system", self.system), ("tools", self.tools),
78
+ ("request_id", self.request_id)],
79
+ self.extra_fields,
80
+ )
81
+
82
+
83
+ @dataclass(kw_only=True)
84
+ class ModelResponseEvent:
85
+ timestamp: str
86
+ session_id: str
87
+ agent_id: str
88
+ model: str | None = None
89
+ stop_reason: str | None = None
90
+ input_tokens: int | None = None
91
+ output_tokens: int | None = None
92
+ content: Any | None = None
93
+ role: str | None = None
94
+ #: The `request_id` of the `model_request` this answers. See above.
95
+ request_id: str | None = None
96
+ extra_fields: dict = field(default_factory=dict)
97
+
98
+ def to_dict(self) -> dict:
99
+ return _build(
100
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "model_response"},
101
+ [("model", self.model), ("stop_reason", self.stop_reason),
102
+ ("input_tokens", self.input_tokens), ("output_tokens", self.output_tokens),
103
+ ("content", self.content), ("role", self.role),
104
+ ("request_id", self.request_id)],
105
+ self.extra_fields,
106
+ )
107
+
108
+
109
+ @dataclass(kw_only=True)
110
+ class AgentStartEvent:
111
+ timestamp: str
112
+ session_id: str
113
+ agent_id: str
114
+ goal: str | None = None
115
+ parent_id: str | None = None
116
+ extra_fields: dict = field(default_factory=dict)
117
+
118
+ def to_dict(self) -> dict:
119
+ return _build(
120
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "agent_start"},
121
+ [("goal", self.goal), ("parent_id", self.parent_id)],
122
+ self.extra_fields,
123
+ )
124
+
125
+
126
+ @dataclass(kw_only=True)
127
+ class AgentEndEvent:
128
+ timestamp: str
129
+ session_id: str
130
+ agent_id: str
131
+ outcome: str | None = None
132
+ summary: str | None = None
133
+ extra_fields: dict = field(default_factory=dict)
134
+
135
+ def to_dict(self) -> dict:
136
+ return _build(
137
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "agent_end"},
138
+ [("outcome", self.outcome), ("summary", self.summary)],
139
+ self.extra_fields,
140
+ )
141
+
142
+
143
+ @dataclass(kw_only=True)
144
+ class AgentPauseEvent:
145
+ timestamp: str
146
+ session_id: str
147
+ agent_id: str
148
+ pause_id: str
149
+ reason: str | None = None
150
+ user_id: str | None = None
151
+ extra_fields: dict = field(default_factory=dict)
152
+
153
+ def to_dict(self) -> dict:
154
+ return _build(
155
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id,
156
+ "type": "agent_pause", "pause_id": self.pause_id},
157
+ [("reason", self.reason), ("user_id", self.user_id)],
158
+ self.extra_fields,
159
+ )
160
+
161
+
162
+ @dataclass(kw_only=True)
163
+ class AgentResumeEvent:
164
+ timestamp: str
165
+ session_id: str
166
+ agent_id: str
167
+ pause_id: str
168
+ duration_ms: float | None = None
169
+ reason: str | None = None
170
+ user_id: str | None = None
171
+ extra_fields: dict = field(default_factory=dict)
172
+
173
+ def to_dict(self) -> dict:
174
+ return _build(
175
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id,
176
+ "type": "agent_resume", "pause_id": self.pause_id},
177
+ [("duration_ms", self.duration_ms), ("reason", self.reason), ("user_id", self.user_id)],
178
+ self.extra_fields,
179
+ )
180
+
181
+
182
+ @dataclass(kw_only=True)
183
+ class HookTriggeredEvent:
184
+ timestamp: str
185
+ session_id: str
186
+ agent_id: str
187
+ hook_name: str
188
+ hook_id: str
189
+ trigger_event: str | None = None
190
+ input: Any | None = None
191
+ extra_fields: dict = field(default_factory=dict)
192
+
193
+ def to_dict(self) -> dict:
194
+ return _build(
195
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "hook_triggered",
196
+ "hook_name": self.hook_name, "hook_id": self.hook_id},
197
+ [("trigger_event", self.trigger_event), ("input", self.input)],
198
+ self.extra_fields,
199
+ )
200
+
201
+
202
+ @dataclass(kw_only=True)
203
+ class HookCompletedEvent:
204
+ timestamp: str
205
+ session_id: str
206
+ agent_id: str
207
+ hook_name: str
208
+ hook_id: str
209
+ outcome: str | None = None
210
+ output: Any | None = None
211
+ error: str | None = None
212
+ duration_ms: float | None = None
213
+ extra_fields: dict = field(default_factory=dict)
214
+
215
+ def to_dict(self) -> dict:
216
+ return _build(
217
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "hook_completed",
218
+ "hook_name": self.hook_name, "hook_id": self.hook_id},
219
+ [("outcome", self.outcome), ("output", self.output),
220
+ ("error", self.error), ("duration_ms", self.duration_ms)],
221
+ self.extra_fields,
222
+ )
223
+
224
+
225
+ @dataclass(kw_only=True)
226
+ class ErrorEvent:
227
+ timestamp: str
228
+ session_id: str
229
+ agent_id: str
230
+ error_type: str
231
+ message: str
232
+ traceback: str | None = None
233
+ extra_fields: dict = field(default_factory=dict)
234
+
235
+ def to_dict(self) -> dict:
236
+ return _build(
237
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id, "type": "error",
238
+ "error_type": self.error_type, "message": self.message},
239
+ [("traceback", self.traceback)],
240
+ self.extra_fields,
241
+ )
242
+
243
+
244
+ @dataclass(kw_only=True)
245
+ class HumanWaitEvent:
246
+ timestamp: str
247
+ session_id: str
248
+ agent_id: str
249
+ input_id: str
250
+ prompt: str | None = None
251
+ options: list[str] | None = None
252
+ reason: str | None = None
253
+ extra_fields: dict = field(default_factory=dict)
254
+
255
+ def to_dict(self) -> dict:
256
+ return _build(
257
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id,
258
+ "type": "human_wait", "input_id": self.input_id},
259
+ [("prompt", self.prompt), ("options", self.options), ("reason", self.reason)],
260
+ self.extra_fields,
261
+ )
262
+
263
+
264
+ @dataclass(kw_only=True)
265
+ class HumanInputEvent:
266
+ timestamp: str
267
+ session_id: str
268
+ agent_id: str
269
+ input_id: str
270
+ response: str | None = None
271
+ duration_ms: float | None = None
272
+ extra_fields: dict = field(default_factory=dict)
273
+
274
+ def to_dict(self) -> dict:
275
+ return _build(
276
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id,
277
+ "type": "human_input", "input_id": self.input_id},
278
+ [("response", self.response), ("duration_ms", self.duration_ms)],
279
+ self.extra_fields,
280
+ )
281
+
282
+
283
+ @dataclass(kw_only=True)
284
+ class HumanPauseEvent:
285
+ timestamp: str
286
+ session_id: str
287
+ agent_id: str
288
+ reason: str | None = None
289
+ user_id: str | None = None
290
+ extra_fields: dict = field(default_factory=dict)
291
+
292
+ def to_dict(self) -> dict:
293
+ return _build(
294
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id,
295
+ "type": "human_pause"},
296
+ [("reason", self.reason), ("user_id", self.user_id)],
297
+ self.extra_fields,
298
+ )
299
+
300
+
301
+ @dataclass(kw_only=True)
302
+ class HumanInterruptEvent:
303
+ timestamp: str
304
+ session_id: str
305
+ agent_id: str
306
+ reason: str | None = None
307
+ user_id: str | None = None
308
+ at_step: str | None = None
309
+ extra_fields: dict = field(default_factory=dict)
310
+
311
+ def to_dict(self) -> dict:
312
+ return _build(
313
+ {"timestamp": self.timestamp, "session_id": self.session_id, "agent_id": self.agent_id,
314
+ "type": "human_interrupt"},
315
+ [("reason", self.reason), ("user_id", self.user_id), ("at_step", self.at_step)],
316
+ self.extra_fields,
317
+ )