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
|
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
9
9
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
10
10
|
|
|
11
11
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
12
|
-
const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"1.0.
|
|
12
|
+
const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"1.0.2-beta.0"},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"instrumentationClientInject":[],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/failproofai/failproofai","enablePrerenderSourceMaps":true,"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":true,"coldCacheBadge":false,"devValidationWorker":true,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"dynamicOnHover":false,"useOffline":false,"varyParams":true,"optimisticRouting":true,"instrumentationClientRouterTransitionEvents":false,"prefetchInlining":{"maxSize":2048,"maxBundleSize":10240},"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptOperationCache":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"devMemoryThresholdRestart":true,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"requestInsights":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"useTypeScriptCli":true,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":true,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"serverComponentsHmrCancellation":false,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":true,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","turbopackMemoryEvictionMode":"auto","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"useCacheTimeout":54,"instantInsights":{"validationLevel":"warning"},"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","outputFileTracingExcludes":{"*":["node_modules/@img/**","node_modules/sharp/**"]},"turbopack":{"root":"/home/runner/work/failproofai/failproofai"},"repoRoot":"/home/runner/work/failproofai/failproofai","distDirRoot":".next"}
|
|
13
13
|
|
|
14
14
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
15
15
|
|
package/README.md
CHANGED
|
@@ -2,18 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
<img src="https://d2wq11aau0arks.cloudfront.net/failproof/fa_updated_full.svg" alt="failproof ai" width="220" />
|
|
4
4
|
|
|
5
|
+
<a href="https://trendshift.io/repositories/69722?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-69722" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/69722/daily?language=TypeScript" alt="FailproofAI%2Ffailproofai | Trendshift" width="250" height="55"/></a>
|
|
6
|
+
|
|
5
7
|
[](https://www.npmjs.com/package/failproofai)
|
|
6
8
|
[](https://github.com/failproofai/failproofai/actions)
|
|
7
9
|
[](https://github.com/failproofai/failproofai/actions/workflows/osv-scanner.yml)
|
|
8
10
|
[](https://discord.befailproof.ai/)
|
|
11
|
+
[](https://www.reddit.com/r/failproofai/)
|
|
9
12
|
[](https://docs.befailproof.ai/)
|
|
10
13
|
[](./LICENSE)
|
|
11
14
|
|
|
12
|
-
**Translations:** [简体中文](./docs
|
|
15
|
+
**Translations:** [简体中文](./docs/i18n/README.zh.md) · [日本語](./docs/i18n/README.ja.md) · [한국어](./docs/i18n/README.ko.md) · [Español](./docs/i18n/README.es.md) · [Português](./docs/i18n/README.pt-br.md) · [Deutsch](./docs/i18n/README.de.md) · [Français](./docs/i18n/README.fr.md) · [Русский](./docs/i18n/README.ru.md) · [हिन्दी](./docs/i18n/README.hi.md) · [Türkçe](./docs/i18n/README.tr.md) · [Tiếng Việt](./docs/i18n/README.vi.md) · [Italiano](./docs/i18n/README.it.md) · [العربية](./docs/i18n/README.ar.md) · [עברית](./docs/i18n/README.he.md)
|
|
13
16
|
|
|
14
|
-
**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
**Observability and enforcement for every harness your agents run in.**
|
|
18
|
+
Wherever your agents run, we see it — and we can say no. Failproof hooks 12 agent
|
|
19
|
+
harnesses — coding CLIs like Claude Code and Codex, chat gateways like Hermes,
|
|
20
|
+
self-hosted assistants like OpenClaw — capturing every run and blocking dangerous
|
|
21
|
+
tool calls before they execute. 39 built-in policies. Zero latency. Runs locally.
|
|
17
22
|
|
|
18
23
|
</div>
|
|
19
24
|
|
|
@@ -23,7 +28,15 @@ before they become incidents. Zero latency. Runs locally.
|
|
|
23
28
|
|
|
24
29
|
---
|
|
25
30
|
|
|
26
|
-
## Supported
|
|
31
|
+
## Supported harnesses
|
|
32
|
+
|
|
33
|
+
Twelve harnesses in two classes — ten coding CLIs, and two chat and assistant
|
|
34
|
+
gateways (Hermes, OpenClaw). Same events, same policies, same session history,
|
|
35
|
+
whichever one your agent runs in.
|
|
36
|
+
|
|
37
|
+
Agents that run in none of them report through the [Python SDK](https://docs.befailproof.ai/reference/custom-agents),
|
|
38
|
+
which gives you tracing, sessions and audits. Enforcement there needs a hook in
|
|
39
|
+
your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map it.
|
|
27
40
|
|
|
28
41
|
<!-- A 6-column table instead of inline <img> runs: table columns never re-wrap,
|
|
29
42
|
so the grid stays 2×6 at any window width (scrolling on very narrow screens
|
|
@@ -127,7 +140,7 @@ failproofai policies --install # or just run `failproofai` and accept the firs
|
|
|
127
140
|
failproofai
|
|
128
141
|
```
|
|
129
142
|
|
|
130
|
-
|
|
143
|
+
39 built-in policies activate immediately. Dashboard at `localhost:8020`. Disable the first-run prompt with `FAILPROOFAI_NO_FIRST_RUN=1`.
|
|
131
144
|
|
|
132
145
|
---
|
|
133
146
|
|
|
@@ -135,13 +148,19 @@ failproofai
|
|
|
135
148
|
|
|
136
149
|
| Policy | What it blocks |
|
|
137
150
|
|---|---|
|
|
138
|
-
| `
|
|
139
|
-
| `block-
|
|
140
|
-
| `
|
|
151
|
+
| `sanitize-api-keys` | API keys leaking into the agent's context |
|
|
152
|
+
| `block-env-files` | Reads of `.env` and other secret files |
|
|
153
|
+
| `warn-repeated-tool-calls` | The agent looping on the same call |
|
|
154
|
+
| `block-sudo` | Privilege escalation |
|
|
155
|
+
| `warn-destructive-sql` | `DROP`, `TRUNCATE`, unbounded `DELETE` |
|
|
156
|
+
| `block-terraform` / `block-kubectl` | Unreviewed changes to live infrastructure |
|
|
141
157
|
| `block-rm-rf` | Recursive file deletion |
|
|
142
|
-
| `
|
|
158
|
+
| `block-force-push` / `block-push-master` | `git push --force`, direct pushes to `main` |
|
|
159
|
+
|
|
160
|
+
The first five apply to any agent that can call a tool. The last three are the
|
|
161
|
+
developer favourites — coding CLIs are the harness class we cover deepest.
|
|
143
162
|
|
|
144
|
-
→ [All
|
|
163
|
+
→ [All 39 built-in policies](https://docs.befailproof.ai/policies/builtin)
|
|
145
164
|
|
|
146
165
|
---
|
|
147
166
|
|
|
@@ -176,24 +195,61 @@ Three decisions available to every policy:
|
|
|
176
195
|
|
|
177
196
|
---
|
|
178
197
|
|
|
179
|
-
##
|
|
198
|
+
## Observability
|
|
199
|
+
|
|
200
|
+
Enforcement is one half. The other half is seeing what the agent actually did.
|
|
201
|
+
|
|
202
|
+
Run `failproofai` with no arguments and it serves a dashboard on `localhost:8020`
|
|
203
|
+
reading the run history already on your machine — no account, no signup, nothing
|
|
204
|
+
leaving the box. You get the session list, the sequence of model calls, tool calls
|
|
205
|
+
and hook decisions inside each run, what was blocked and what the policy told the
|
|
206
|
+
agent, and an offline audit (`failproofai audit`) that scans your history for risky
|
|
207
|
+
patterns and suggests policies to stop them.
|
|
208
|
+
|
|
209
|
+
→ [Local dashboard](https://docs.befailproof.ai/reference/local-dashboard) ·
|
|
210
|
+
[Read a trace](https://docs.befailproof.ai/sessions/read-a-trace) ·
|
|
211
|
+
[Local audit](https://docs.befailproof.ai/audits/local-audit)
|
|
180
212
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
213
|
+
**Failproof AI Observability** is the hosted side of the same data model, for teams
|
|
214
|
+
running agents across a fleet: every run from every harness in one place, an
|
|
215
|
+
execution graph with parallel sub-agents on their own lanes, p50/p95/p99 latency
|
|
216
|
+
for models, tools and hooks, per-model cost and context-window tracking, error
|
|
217
|
+
tracking, SQL over your own traces with shareable dashboards, evaluations scored by
|
|
218
|
+
your own service, scheduled audits that turn recurring failures into evidence-backed
|
|
219
|
+
findings, and alerts routed to Slack, email or a signed webhook. Self-hosting in your
|
|
220
|
+
own cluster is available on the Enterprise plan.
|
|
221
|
+
|
|
222
|
+
→ [Sessions](https://docs.befailproof.ai/sessions/overview) ·
|
|
223
|
+
[Audits](https://docs.befailproof.ai/audits/overview) ·
|
|
224
|
+
[Book a demo](https://befailproof.ai/get-a-demo)
|
|
184
225
|
|
|
185
226
|
---
|
|
186
227
|
|
|
187
228
|
## Documentation
|
|
188
229
|
|
|
189
|
-
| | |
|
|
230
|
+
| Start | |
|
|
231
|
+
|---|---|
|
|
232
|
+
| [Quickstart](https://docs.befailproof.ai/start/quickstart) | Install, connect a harness, see the first run |
|
|
233
|
+
| [Concepts](https://docs.befailproof.ai/start/concepts) | How the hook system works |
|
|
234
|
+
| [Supported harnesses](https://docs.befailproof.ai/reference/harnesses) | All 12, and what each one can enforce |
|
|
235
|
+
|
|
236
|
+
| Observe | |
|
|
190
237
|
|---|---|
|
|
191
|
-
| [
|
|
192
|
-
| [
|
|
193
|
-
| [
|
|
238
|
+
| [Sessions](https://docs.befailproof.ai/sessions/overview) | Follow a run: models, tools, errors, latency |
|
|
239
|
+
| [Read a trace](https://docs.befailproof.ai/sessions/read-a-trace) | What the execution graph is telling you |
|
|
240
|
+
| [Audits](https://docs.befailproof.ai/audits/overview) | Find failure patterns across many sessions |
|
|
241
|
+
| [Local dashboard](https://docs.befailproof.ai/reference/local-dashboard) | `localhost:8020`, no account needed |
|
|
242
|
+
|
|
243
|
+
| Enforce | |
|
|
244
|
+
|---|---|
|
|
245
|
+
| [Built-in policies](https://docs.befailproof.ai/policies/builtin) | All 39 policies with parameters |
|
|
246
|
+
| [Custom policies](https://docs.befailproof.ai/policies/custom) | Write your own |
|
|
194
247
|
| [Configuration](https://docs.befailproof.ai/policies/local-configuration) | Config scopes and merge rules |
|
|
195
|
-
|
|
196
|
-
|
|
|
248
|
+
|
|
249
|
+
| Instrument your own agent | |
|
|
250
|
+
|---|---|
|
|
251
|
+
| [Python SDK](https://docs.befailproof.ai/reference/custom-agents) | Report runs from an agent with no harness |
|
|
252
|
+
| [Policy SDK](https://docs.befailproof.ai/reference/policy-sdk) | `allow` / `deny` / `instruct` reference |
|
|
197
253
|
|
|
198
254
|
---
|
|
199
255
|
|
package/bin/failproofai.mjs
CHANGED
|
@@ -271,7 +271,7 @@ if (hookIdx >= 0) {
|
|
|
271
271
|
*/
|
|
272
272
|
async function runCli() {
|
|
273
273
|
// --help / -h (only when not inside a subcommand that handles its own --help)
|
|
274
|
-
const SUBCOMMANDS = ["policies", "policy", "audit", "config", "uninstall", "backfill", "flush", "harness"];
|
|
274
|
+
const SUBCOMMANDS = ["policies", "policy", "audit", "config", "uninstall", "backfill", "flush", "harness", "pack"];
|
|
275
275
|
if ((args.includes("--help") || args.includes("-h")) && !SUBCOMMANDS.includes(args[0])) {
|
|
276
276
|
const extraArgs = args.filter((a) => a !== "--help" && a !== "-h");
|
|
277
277
|
if (extraArgs.length > 0) {
|
|
@@ -319,6 +319,21 @@ COMMANDS
|
|
|
319
319
|
|
|
320
320
|
policies --help, -h Show this help for the policies command
|
|
321
321
|
|
|
322
|
+
pack add core Install the Failproof AI policies — from this
|
|
323
|
+
package, so it needs no network.
|
|
324
|
+
--policy <a,b> takes only those, --category
|
|
325
|
+
<x,y> takes whole categories, --all takes it all
|
|
326
|
+
pack list Show installed policy packs
|
|
327
|
+
pack list <source> Show what a pack CONTAINS before installing it.
|
|
328
|
+
Reads only its manifest — the code is never
|
|
329
|
+
downloaded, so looking is never running
|
|
330
|
+
pack add <source> Install someone else's pack from a GitHub release.
|
|
331
|
+
<source> is acme/pack, acme/pack@v1.2.0, or a
|
|
332
|
+
release URL; no tag takes the newest and pins it
|
|
333
|
+
pack remove <publisher/name> Deactivate an installed pack
|
|
334
|
+
pack build <entry.mjs> Turn your own policy file into the three assets
|
|
335
|
+
a GitHub release needs, so others can install it
|
|
336
|
+
pack --help, -h Show this help for the pack command
|
|
322
337
|
harness list Show extra capture paths per agent CLI
|
|
323
338
|
harness add-path <h> <path> Also capture sessions from <path> for harness
|
|
324
339
|
<h>. Accepts \`<label>=<path>\`; the label
|
|
@@ -400,6 +415,10 @@ EXAMPLES
|
|
|
400
415
|
failproofai policies --uninstall --cli opencode
|
|
401
416
|
failproofai policies --uninstall --cli pi
|
|
402
417
|
failproofai policies --uninstall --custom
|
|
418
|
+
failproofai pack add core
|
|
419
|
+
failproofai pack add core --category git,database
|
|
420
|
+
failproofai pack list acme/support-agent
|
|
421
|
+
failproofai pack build ./my-policies.mjs --id acme/support --version 1.0.0
|
|
403
422
|
failproofai backfill --since 6m
|
|
404
423
|
failproofai backfill --dry-run
|
|
405
424
|
failproofai flush --wait
|
|
@@ -409,6 +428,7 @@ LINKS
|
|
|
409
428
|
⭐ Star us: https://github.com/failproofai/failproofai
|
|
410
429
|
📖 Docs: https://docs.befailproof.ai/introduction
|
|
411
430
|
💬 Discord: https://discord.befailproof.ai/
|
|
431
|
+
👽 Reddit: https://www.reddit.com/r/failproofai/
|
|
412
432
|
`.trimStart());
|
|
413
433
|
process.exit(0);
|
|
414
434
|
}
|
|
@@ -697,6 +717,88 @@ OPTIONS
|
|
|
697
717
|
// nothing else — no root, no daemon call — so it works on a machine whose
|
|
698
718
|
// daemon is stopped, which is when someone is most likely to be fixing what
|
|
699
719
|
// it captures.
|
|
720
|
+
// pack list | add | remove
|
|
721
|
+
//
|
|
722
|
+
// Policies that did not ship compiled into this build. Fetches over the
|
|
723
|
+
// network, so it is a CLI command only and is never reachable from the hook
|
|
724
|
+
// path.
|
|
725
|
+
if (args[0] === "pack") {
|
|
726
|
+
const subArgs = args.slice(1);
|
|
727
|
+
if (subArgs.includes("--help") || subArgs.includes("-h")) {
|
|
728
|
+
console.log(`
|
|
729
|
+
failproofai pack — install policy packs published as GitHub releases
|
|
730
|
+
|
|
731
|
+
Usage:
|
|
732
|
+
failproofai pack add core the Failproof AI policies
|
|
733
|
+
failproofai pack add core --policy <a,b> just these
|
|
734
|
+
failproofai pack add core --category <x,y> whole categories
|
|
735
|
+
failproofai pack add core --all everything in it
|
|
736
|
+
failproofai pack list packs installed here
|
|
737
|
+
failproofai pack list <source> what a pack out there contains
|
|
738
|
+
failproofai pack add <source> [--policy <a,b>] [--category <x,y>] [--all]
|
|
739
|
+
failproofai pack remove <publisher/name>
|
|
740
|
+
failproofai pack build <entry.mjs> --id <publisher/name> --version <v>
|
|
741
|
+
|
|
742
|
+
A pack is one entry artifact plus a manifest, verified against the release's
|
|
743
|
+
SHA256SUMS at install time. The digest is recorded, and re-verified before every
|
|
744
|
+
import — so a pack cannot change under this machine after you installed it.
|
|
745
|
+
|
|
746
|
+
<source> is core for the Failproof AI policies, or any of these:
|
|
747
|
+
acme/support-agent newest release, pinned to its exact tag
|
|
748
|
+
acme/support-agent@v2.1.0 that release
|
|
749
|
+
github:acme/support-agent@v2.1.0 same, explicit
|
|
750
|
+
https://github.com/acme/support-agent/releases/tag/v2.1.0
|
|
751
|
+
|
|
752
|
+
Naming no tag installs the newest release AND pins it, so what gets recorded
|
|
753
|
+
always names one version — running the same command later can install something
|
|
754
|
+
different, and it will tell you the tag it chose.
|
|
755
|
+
|
|
756
|
+
By default you get the pack's OWN defaults — the policies its author marked
|
|
757
|
+
safe to switch on unattended — not everything it contains. Take more, or less:
|
|
758
|
+
|
|
759
|
+
--category x,y Take whole categories (see: failproofai pack list)
|
|
760
|
+
--only a,b Take exactly these policies
|
|
761
|
+
--all Take everything the pack contains
|
|
762
|
+
|
|
763
|
+
Re-adding at a newer version keeps whatever you chose rather than switching the
|
|
764
|
+
rest back on.
|
|
765
|
+
|
|
766
|
+
Examples:
|
|
767
|
+
failproofai pack add FailproofAI/policies
|
|
768
|
+
failproofai pack add core --category sanitize,git
|
|
769
|
+
failproofai pack add github:acme/support-agent@v2.1.0 --only block-refunds
|
|
770
|
+
failproofai pack remove acme/support-agent
|
|
771
|
+
|
|
772
|
+
Publishing: pack build writes failproofai-pack.json, failproofai-pack.mjs and
|
|
773
|
+
SHA256SUMS. Attach all three to a GitHub release; anyone then runs
|
|
774
|
+
failproofai pack add <owner>/<repo>
|
|
775
|
+
|
|
776
|
+
Offline: FAILPROOFAI_NO_DOWNLOAD=1 refuses to fetch, while packs already
|
|
777
|
+
installed keep enforcing. FAILPROOFAI_PACK_BASE_URL points the whole thing at a
|
|
778
|
+
mirror instead of github.com.
|
|
779
|
+
`.trimStart());
|
|
780
|
+
process.exit(0);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
lastSubcommand = "pack";
|
|
784
|
+
const { runPackCommand } = await import("../src/hooks/pack-cli");
|
|
785
|
+
const result = await runPackCommand(subArgs);
|
|
786
|
+
for (const line of result.lines) {
|
|
787
|
+
if (result.exitCode === 0) console.log(line);
|
|
788
|
+
else console.error(line);
|
|
789
|
+
}
|
|
790
|
+
await track("cli_pack", {
|
|
791
|
+
ok: result.exitCode === 0,
|
|
792
|
+
// The subcommand only — never the pack id, source or policy names. A pack
|
|
793
|
+
// source is a value the user typed, and a third-party pack name is a
|
|
794
|
+
// publisher-controlled string; we send shape, never value.
|
|
795
|
+
sub: ["list", "add", "remove"].includes(subArgs[0]) ? subArgs[0] : "unknown",
|
|
796
|
+
});
|
|
797
|
+
lastSubcommand = null;
|
|
798
|
+
await exitAfterFlush(result.exitCode);
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
|
|
700
802
|
if (args[0] === "harness") {
|
|
701
803
|
const subArgs = args.slice(1);
|
|
702
804
|
if (subArgs.length === 0 || subArgs.includes("--help") || subArgs.includes("-h")) {
|
|
@@ -1176,6 +1278,10 @@ EXAMPLES
|
|
|
1176
1278
|
failproofai policies --uninstall --cli pi
|
|
1177
1279
|
failproofai policies -u
|
|
1178
1280
|
failproofai policies --uninstall --custom
|
|
1281
|
+
failproofai pack add core
|
|
1282
|
+
failproofai pack add core --category git,database
|
|
1283
|
+
failproofai pack list acme/support-agent
|
|
1284
|
+
failproofai pack build ./my-policies.mjs --id acme/support --version 1.0.0
|
|
1179
1285
|
`.trimStart());
|
|
1180
1286
|
process.exit(0);
|
|
1181
1287
|
}
|
|
@@ -1709,16 +1815,44 @@ PAUSING ENFORCEMENT (one session, always time-boxed)
|
|
|
1709
1815
|
// `--status` answers "what is this machine's state?", which is both
|
|
1710
1816
|
// halves: whether enforcement is paused AND whether cloud is connected.
|
|
1711
1817
|
if (wantsStatus) {
|
|
1712
|
-
const {
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1818
|
+
const { connectionStatusReport, versionStatusLines } = await import(
|
|
1819
|
+
"../src/hooks/cloud-enrollment-cli"
|
|
1820
|
+
);
|
|
1821
|
+
const { optsFor, printBlock, rows, stack, title, warning } = await import(
|
|
1822
|
+
"../src/hooks/tui"
|
|
1823
|
+
);
|
|
1824
|
+
const opts = optsFor(process.stdout);
|
|
1825
|
+
const report = connectionStatusReport();
|
|
1826
|
+
// The version line was written to be "the only place a user can find out
|
|
1827
|
+
// which daemon they are running" and then never called from anywhere. It
|
|
1828
|
+
// is the right thing for the heading to carry, and it retires a heading
|
|
1829
|
+
// that would otherwise have said the word "status" back to someone who
|
|
1830
|
+
// just typed it.
|
|
1831
|
+
printBlock(
|
|
1832
|
+
process.stdout,
|
|
1833
|
+
stack(
|
|
1834
|
+
title("failproofai config", versionStatusLines()[0], opts),
|
|
1835
|
+
// ONE rows() call over both blocks, so the connection facts and the
|
|
1836
|
+
// enforcement state share a label column. Rendered separately they
|
|
1837
|
+
// computed one column each and the window read as two commands'
|
|
1838
|
+
// output stacked up.
|
|
1839
|
+
//
|
|
1840
|
+
// Always printed, including where reports can never work: "why am I
|
|
1841
|
+
// not getting them?" is the question --status exists to answer, and
|
|
1842
|
+
// an omitted line answers it with silence.
|
|
1843
|
+
rows([...report.rows, ...(result.rows ?? [])], opts),
|
|
1844
|
+
report.warnings.length > 0 ? warning(report.warnings, opts) : null,
|
|
1845
|
+
// The trailer is not rows — it is the note and the resume command.
|
|
1846
|
+
// Rendering only `rows` dropped the one line that tells a paused
|
|
1847
|
+
// user how to get unpaused.
|
|
1848
|
+
result.rows ? (result.trailer ?? null) : result.lines,
|
|
1849
|
+
),
|
|
1850
|
+
);
|
|
1851
|
+
} else {
|
|
1852
|
+
for (const line of result.lines) {
|
|
1853
|
+
if (result.exitCode === 0) console.log(line);
|
|
1854
|
+
else console.error(line);
|
|
1855
|
+
}
|
|
1722
1856
|
}
|
|
1723
1857
|
await track("cli_pause_invoked", {
|
|
1724
1858
|
action: pauseIdx >= 0 ? "pause" : wantsResume ? "resume" : "status",
|