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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +6 -6
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js +2 -2
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/audit/invite/route.js +3 -2
- package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/run/route.js +5 -4
- package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js +4 -3
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js +4 -4
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route.js +4 -4
- package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page.js +2 -2
- package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js +2 -2
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +66 -22
- package/.next/standalone/.next/server/app/policies/page.js +5 -4
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js +2 -2
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js +2 -2
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +4 -4
- package/.next/standalone/.next/server/app/settings/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__1qzqcio._.js → [externals]__0e32-7c._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[externals]__1s462yl._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__01eqny5._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_0xu5z._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1p8poxd._.js → [root-of-the-server]__0igxt32._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0neqlu-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t9oqnn._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0bs-v8p._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0tovk6q._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0trp3yc._.js +3 -0
- package/.next/standalone/.next/server/chunks/_185gyk9._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1ek68ln._.js +5 -6
- package/.next/standalone/.next/server/chunks/lib_telemetry-id_ts_1k8gj9o._.js +3 -0
- 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
- 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
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_0xbw3bu._.js +12 -0
- package/.next/standalone/.next/server/chunks/src_hooks_fp-home_ts_09kv0bn._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0spkm68._.js → [root-of-the-server]__07gm3zl._.js} +21 -20
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0oa1lav._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s740oi._.js +6 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__07tbbf3._.js → [root-of-the-server]__0zig5sv._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__192nhvh._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0lvyuv4._.js → _00e9tnf._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0u5zauv._.js → _12l4a_k._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +13 -13
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_08o7bqo._.js +10 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware.js +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +71 -27
- package/.next/standalone/.next/static/chunks/{37fcpc36x9gpe.js → 0eqky-7n7dgdm.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1ide1wl2f7zi1.js → 0sa9v5mhc8861.js} +13 -13
- package/.next/standalone/.next/static/chunks/1mfzsja6ftim5.css +2 -0
- package/.next/standalone/.next/static/chunks/{3k7mxbp9hiom0.js → 1nuqytbta44af.js} +1 -1
- package/.next/standalone/.next/static/chunks/1sl2xmn9inx3y.js +6 -0
- package/.next/standalone/.next/static/chunks/{2_2lhuojq2xop.js → 2aawsjld9ied_.js} +1 -1
- package/.next/standalone/.next/static/chunks/2gn7ut4svofm2.js +1 -0
- package/.next/standalone/.next/static/chunks/{31s1smp-g7gks.js → 2hs7ycvsav7v2.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0k5050ezjvv49.js → 2i2yt3hzjredm.js} +1 -1
- package/.next/standalone/.next/static/chunks/{3c808qrfcq0im.js → 35xg6retpe6rp.js} +1 -1
- package/.next/standalone/.next/static/chunks/{2zpp1we2jv6tb.js → 3y54nw0i7dsjl.js} +1 -1
- package/.next/standalone/SECURITY.md +5 -4
- package/.next/standalone/app/actions/get-hooks-config.ts +108 -17
- package/.next/standalone/app/actions/pack-actions.ts +153 -0
- package/.next/standalone/app/audit/_components/run-progress.tsx +1 -1
- package/.next/standalone/app/audit/_components/share-templates.ts +13 -13
- package/.next/standalone/app/policies/hooks-client.tsx +320 -14
- package/.next/standalone/components/navbar.tsx +2 -28
- package/.next/standalone/components/reach-developers.tsx +8 -1
- package/.next/standalone/docs-old/agenteye/python-sdk-skill.mdx +1 -1
- package/.next/standalone/docs-old/agenteye/python-sdk.mdx +59 -35
- package/.next/standalone/docs-old/i18n/README.ar.md +1 -0
- package/.next/standalone/docs-old/i18n/README.de.md +1 -0
- package/.next/standalone/docs-old/i18n/README.es.md +1 -0
- package/.next/standalone/docs-old/i18n/README.fr.md +1 -0
- package/.next/standalone/docs-old/i18n/README.he.md +1 -0
- package/.next/standalone/docs-old/i18n/README.hi.md +1 -0
- package/.next/standalone/docs-old/i18n/README.it.md +1 -0
- package/.next/standalone/docs-old/i18n/README.ja.md +1 -0
- package/.next/standalone/docs-old/i18n/README.ko.md +1 -0
- package/.next/standalone/docs-old/i18n/README.pt-br.md +1 -0
- package/.next/standalone/docs-old/i18n/README.ru.md +1 -0
- package/.next/standalone/docs-old/i18n/README.tr.md +1 -0
- package/.next/standalone/docs-old/i18n/README.vi.md +1 -0
- package/.next/standalone/docs-old/i18n/README.zh.md +1 -0
- package/.next/standalone/fp-cloud-cli/CHANGELOG.md +431 -0
- package/.next/standalone/fp-cloud-cli/LICENSE +42 -0
- package/.next/standalone/fp-cloud-cli/MANIFEST.in +10 -0
- package/.next/standalone/fp-cloud-cli/README.md +259 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/__init__.py +10 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/__main__.py +4 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/_click_compat.py +64 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/_context.py +332 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/_version.py +1 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/analytics.py +432 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/analytics_config.py +77 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/analytics_registry.py +83 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/app.py +492 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/auth.py +160 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/client.py +1694 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/__init__.py +0 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/_write.py +214 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/agent_cmds.py +407 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/alerts_cmds.py +445 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/audits_cmds.py +1054 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/auth_cmds.py +512 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/errors_cmds.py +190 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/evals_cmds.py +161 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/events_cmds.py +159 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/fleet_cmds.py +416 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/guardrails_cmds.py +148 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/incidents_cmds.py +472 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/keys_cmds.py +407 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/list_cmds.py +63 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/orgs_cmds.py +319 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +499 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/queries_cmds.py +378 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/sessions_cmds.py +151 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/settings_cmds.py +150 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/usage_cmds.py +35 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/users_cmds.py +404 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/config.py +330 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/dates.py +78 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/enforcement.py +345 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/errors.py +98 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/models.py +891 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/orgs.py +30 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/output.py +6593 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/permissions.py +208 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/policy_check.py +290 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/py.typed +0 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/select.py +322 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/theme.py +53 -0
- package/.next/standalone/fp-cloud-cli/pyproject.toml +106 -0
- package/.next/standalone/fp-cloud-cli/skill/SKILL.md +302 -0
- package/.next/standalone/fp-cloud-cli/skill/agents/openai.yaml +8 -0
- package/.next/standalone/fp-cloud-cli/skill/references/commands.md +254 -0
- package/.next/standalone/fp-cloud-cli/tests/__init__.py +0 -0
- package/.next/standalone/fp-cloud-cli/tests/conftest.py +92 -0
- package/.next/standalone/fp-cloud-cli/tests/test_alerting.py +644 -0
- package/.next/standalone/fp-cloud-cli/tests/test_analytics.py +385 -0
- package/.next/standalone/fp-cloud-cli/tests/test_audits.py +950 -0
- package/.next/standalone/fp-cloud-cli/tests/test_auth.py +98 -0
- package/.next/standalone/fp-cloud-cli/tests/test_auth_mode.py +272 -0
- package/.next/standalone/fp-cloud-cli/tests/test_click_compat.py +118 -0
- package/.next/standalone/fp-cloud-cli/tests/test_client.py +299 -0
- package/.next/standalone/fp-cloud-cli/tests/test_commands.py +814 -0
- package/.next/standalone/fp-cloud-cli/tests/test_config.py +99 -0
- package/.next/standalone/fp-cloud-cli/tests/test_dashboards_agent.py +340 -0
- package/.next/standalone/fp-cloud-cli/tests/test_dates.py +76 -0
- package/.next/standalone/fp-cloud-cli/tests/test_enforcement_logic.py +481 -0
- package/.next/standalone/fp-cloud-cli/tests/test_facets.py +170 -0
- package/.next/standalone/fp-cloud-cli/tests/test_failproofai_home.py +722 -0
- package/.next/standalone/fp-cloud-cli/tests/test_fp_home_contract.py +198 -0
- package/.next/standalone/fp-cloud-cli/tests/test_hardening.py +186 -0
- package/.next/standalone/fp-cloud-cli/tests/test_help_table_coverage.py +127 -0
- package/.next/standalone/fp-cloud-cli/tests/test_keys_queries.py +496 -0
- package/.next/standalone/fp-cloud-cli/tests/test_list.py +59 -0
- package/.next/standalone/fp-cloud-cli/tests/test_multivalue.py +183 -0
- package/.next/standalone/fp-cloud-cli/tests/test_no_customer_identifiers.py +168 -0
- package/.next/standalone/fp-cloud-cli/tests/test_operator.py +492 -0
- package/.next/standalone/fp-cloud-cli/tests/test_orgs.py +692 -0
- package/.next/standalone/fp-cloud-cli/tests/test_output.py +1732 -0
- package/.next/standalone/fp-cloud-cli/tests/test_policy_check.py +191 -0
- package/.next/standalone/fp-cloud-cli/tests/test_readme_matches_reality.py +125 -0
- package/.next/standalone/fp-cloud-cli/tests/test_review_fixes.py +161 -0
- package/.next/standalone/fp-cloud-cli/tests/test_telemetry_completeness.py +90 -0
- package/.next/standalone/fp-cloud-cli/tests/test_usage.py +115 -0
- package/.next/standalone/fp-cloud-cli/tests/test_v1_origin_diagnostic.py +70 -0
- package/.next/standalone/fp-cloud-cli/tests/test_v1_routing.py +214 -0
- package/.next/standalone/fp-cloud-cli/tests/test_whoami.py +104 -0
- package/.next/standalone/fp-cloud-cli/uv.lock +552 -0
- package/.next/standalone/package.json +29 -22
- package/.next/standalone/sdk/python/CHANGELOG.md +70 -0
- package/.next/standalone/sdk/python/LICENSE +42 -0
- package/.next/standalone/sdk/python/MANIFEST.in +21 -0
- package/.next/standalone/sdk/python/README.md +466 -0
- package/.next/standalone/sdk/python/docs/README.md +249 -0
- package/.next/standalone/sdk/python/docs/_shared/README.md +43 -0
- package/.next/standalone/sdk/python/docs/_shared/__init__.py +195 -0
- package/.next/standalone/sdk/python/docs/crewai/README.md +328 -0
- package/.next/standalone/sdk/python/docs/crewai/examples/quickstart.py +61 -0
- package/.next/standalone/sdk/python/docs/crewai/examples/research_crew.py +92 -0
- package/.next/standalone/sdk/python/docs/langgraph/README.md +481 -0
- package/.next/standalone/sdk/python/docs/langgraph/examples/quickstart.py +51 -0
- package/.next/standalone/sdk/python/docs/langgraph/examples/research_agent.py +86 -0
- package/.next/standalone/sdk/python/docs/langgraph/examples/supervisor_handoff.py +83 -0
- package/.next/standalone/sdk/python/docs/llama_index/README.md +332 -0
- package/.next/standalone/sdk/python/docs/llama_index/examples/quickstart.py +62 -0
- package/.next/standalone/sdk/python/docs/llama_index/examples/research_agent.py +93 -0
- package/.next/standalone/sdk/python/docs/manual/README.md +491 -0
- package/.next/standalone/sdk/python/docs/manual/examples/quickstart.py +57 -0
- package/.next/standalone/sdk/python/docs/manual/examples/research_agent.py +133 -0
- package/.next/standalone/sdk/python/docs/pydantic_ai/README.md +323 -0
- package/.next/standalone/sdk/python/docs/pydantic_ai/examples/quickstart.py +48 -0
- package/.next/standalone/sdk/python/docs/pydantic_ai/examples/research_agent.py +94 -0
- package/.next/standalone/sdk/python/failproofai_sdk/__init__.py +131 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_context.py +218 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_environment.py +78 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_events.py +752 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_resolver.py +118 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_runtime.py +21 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_schema.py +317 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_scopes.py +422 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_version.py +1 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_writer.py +750 -0
- package/.next/standalone/sdk/python/failproofai_sdk/integrations/__init__.py +274 -0
- package/.next/standalone/sdk/python/failproofai_sdk/integrations/_compat.py +247 -0
- package/.next/standalone/sdk/python/failproofai_sdk/integrations/_core.py +1076 -0
- package/.next/standalone/sdk/python/failproofai_sdk/integrations/crewai.py +1669 -0
- package/.next/standalone/sdk/python/failproofai_sdk/integrations/langchain.py +2151 -0
- package/.next/standalone/sdk/python/failproofai_sdk/integrations/llama_index.py +1588 -0
- package/.next/standalone/sdk/python/failproofai_sdk/integrations/pydantic_ai.py +977 -0
- package/.next/standalone/sdk/python/failproofai_sdk/py.typed +0 -0
- package/.next/standalone/sdk/python/pyproject.toml +92 -0
- package/.next/standalone/sdk/python/skill/SKILL.md +399 -0
- package/.next/standalone/sdk/python/skill/agents/openai.yaml +8 -0
- package/.next/standalone/sdk/python/skill/references/events.md +234 -0
- package/.next/standalone/sdk/python/skill/references/frameworks.md +314 -0
- package/.next/standalone/sdk/python/skill/references/install.md +100 -0
- package/.next/standalone/sdk/python/skill/references/integration.md +352 -0
- package/.next/standalone/sdk/python/tests/__init__.py +0 -0
- package/.next/standalone/sdk/python/tests/conftest.py +169 -0
- package/.next/standalone/sdk/python/tests/integrations/__init__.py +6 -0
- package/.next/standalone/sdk/python/tests/integrations/test_crewai.py +1299 -0
- package/.next/standalone/sdk/python/tests/integrations/test_langchain.py +2338 -0
- package/.next/standalone/sdk/python/tests/integrations/test_llama_index.py +1576 -0
- package/.next/standalone/sdk/python/tests/integrations/test_pydantic_ai.py +1102 -0
- package/.next/standalone/sdk/python/tests/test_context.py +410 -0
- package/.next/standalone/sdk/python/tests/test_docs.py +411 -0
- package/.next/standalone/sdk/python/tests/test_durability.py +1352 -0
- package/.next/standalone/sdk/python/tests/test_encoding.py +571 -0
- package/.next/standalone/sdk/python/tests/test_integrations.py +1127 -0
- package/.next/standalone/sdk/python/tests/test_no_customer_identifiers.py +214 -0
- package/.next/standalone/sdk/python/tests/test_packaging.py +185 -0
- package/.next/standalone/sdk/python/tests/test_resolver_umbrella.py +178 -0
- package/.next/standalone/sdk/python/tests/test_scopes.py +487 -0
- package/.next/standalone/sdk/python/tests/test_sdk.py +923 -0
- package/.next/standalone/sdk/python/tests/test_server_contract.py +650 -0
- package/.next/standalone/sdk/python/tests/test_site_docs.py +371 -0
- package/.next/standalone/sdk/python/tests/test_skill_snippets.py +165 -0
- package/.next/standalone/sdk/python/tests/test_spool_contract.py +287 -0
- package/.next/standalone/sdk/python/tests/test_spool_creation.py +360 -0
- package/.next/standalone/sdk/python/tests/test_wire_format.py +279 -0
- package/.next/standalone/sdk/python/tests/test_zero_dependencies.py +378 -0
- package/.next/standalone/sdk/python/uv.lock +6005 -0
- package/.next/standalone/server.js +1 -1
- package/README.md +77 -21
- package/bin/failproofai.mjs +145 -11
- package/dist/cli.mjs +4482 -2205
- package/dist/index.js +5 -5
- package/dist/worker.mjs +2399 -1978
- package/package.json +29 -22
- package/policy-pack/SHA256SUMS +2 -0
- package/policy-pack/failproofai-pack.json +732 -0
- package/policy-pack/failproofai-pack.mjs +2017 -0
- package/scripts/build-policy-pack.mjs +121 -0
- package/scripts/changelog-section.py +77 -0
- package/scripts/prune-standalone.mjs +3 -0
- package/scripts/python-version.py +232 -0
- package/scripts/translate-docs/cli.ts +21 -0
- package/scripts/translate-docs/mintlify-nav.ts +85 -13
- package/scripts/translate-docs/translator.ts +66 -11
- package/src/audit/cache.ts +40 -3
- package/src/audit/cli.ts +1 -1
- package/src/audit/index.ts +1 -1
- package/src/audit/replay.ts +89 -3
- package/src/audit/report.ts +5 -5
- package/src/audit/schedule-cli.ts +49 -53
- package/src/hooks/builtin-policies.ts +217 -579
- package/src/hooks/cloud-enrollment-cli.ts +66 -27
- package/src/hooks/cloud-managed-policies.ts +6 -1
- package/src/hooks/configure-wizard.ts +1 -1
- package/src/hooks/custom-hooks-loader.ts +89 -6
- package/src/hooks/fp-home.ts +92 -4
- package/src/hooks/fp-reset.ts +26 -2
- package/src/hooks/handler.ts +181 -11
- package/src/hooks/harness-cli.ts +79 -25
- package/src/hooks/hook-activity-store.ts +13 -3
- package/src/hooks/install-prompt.ts +25 -3
- package/src/hooks/manager.ts +418 -172
- package/src/hooks/migrations.ts +2 -2
- package/src/hooks/pack-cli.ts +505 -0
- package/src/hooks/pack-failclosed.ts +189 -0
- package/src/hooks/pack-manifest.ts +344 -0
- package/src/hooks/pack-store.ts +930 -0
- package/src/hooks/policy-catalog.ts +535 -0
- package/src/hooks/policy-evaluator.ts +24 -16
- package/src/hooks/policy-presets.ts +4 -2
- package/src/hooks/policy-registry.ts +8 -2
- package/src/hooks/policy-types.ts +26 -0
- package/src/hooks/session-pause-cli.ts +33 -9
- package/src/hooks/tui.ts +570 -0
- package/src/hooks/types.ts +15 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_usx0j._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_zk340._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0agdw2a._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d1u_na._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oy4kxb._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zf034w._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tvn4wf._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0lxbzdq._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1ger0a2._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1zuiiy3._.js +0 -3
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_1iiwm5e._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kc8_v5._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kgy9da._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0mhqk5a._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pltpn8._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qkcyf-._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w0x_ok._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1_dfocn._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1bfex62._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1kzapg5._.js +0 -6
- package/.next/standalone/.next/static/chunks/36fw6yk1s6x_f.js +0 -1
- package/.next/standalone/.next/static/chunks/3tzq0260n17ae.js +0 -6
- package/.next/standalone/.next/static/chunks/3wq9x0c-7ld5d.css +0 -2
- /package/.next/standalone/.next/static/{ZklXxyA5ygsWSQz2u_zii → nwbyWT06Ud0XdXOrVJyvS}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{ZklXxyA5ygsWSQz2u_zii → nwbyWT06Ud0XdXOrVJyvS}/_clientMiddlewareManifest.js +0 -0
- /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
|
+
)
|