failproofai 0.0.2 → 0.0.3
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/.claude/settings.json +316 -0
- package/.next/standalone/.failproofai/policies/workflow-policies.mjs +62 -0
- package/.next/standalone/.failproofai/policies-config.json +39 -0
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +3 -1
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
- 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.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 +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
- 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.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 +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +17 -17
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +17 -17
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +16 -16
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- 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/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
- 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/build-manifest.json +2 -2
- 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.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/build-manifest.json +2 -2
- 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.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/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- 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/chunks/[root-of-the-server]__0g72weg._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kjo7d_._.js +1 -1
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_05pz9._._.js +1 -1
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__12kr5~_._.js → [root-of-the-server]__03kiqd5._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qo8503._.js → [root-of-the-server]__0bo8s~-._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +9 -9
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a_7sdg.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ef3uwk.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0j79~gv.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pbja1x.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0r6o0i2.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11y81~_.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12or2kf.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- 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 +9 -9
- package/.next/standalone/.next/static/chunks/{0x-625~1vx1lu.js → 02t9.s735hqyq.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ov60i6md~37t.js → 03oepxbqx6o8~.js} +2 -2
- package/.next/standalone/.next/static/chunks/{031pa5~qfzt~_.js → 09e7drilkf1sn.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0y~0creqvl5wx.js → 0cwft44dh9bww.js} +1 -1
- package/.next/standalone/.next/static/chunks/{06og.7e9nkpjh.js → 0e2uz2g026ckb.js} +1 -1
- package/.next/standalone/.next/static/chunks/0gu_a.a80ritd.css +1 -0
- package/.next/standalone/.next/static/chunks/{15wf7x-e.8ia3.js → 0h5kbvg~.xf.v.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0_4y_t03jn2nq.js → 0od..umlku4bb.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0cvffh-pbsv5u.js → 0xbwzy4dl87-0.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0c_ljlxa._4lc.js → 18cl6wups7ouq.js} +2 -2
- package/.next/standalone/.next/static/chunks/{turbopack-0uc5y~g6h.n7-.js → turbopack-0r26pc8h0y_-e.js} +1 -1
- package/.next/standalone/CHANGELOG.md +103 -0
- package/.next/standalone/CLAUDE.md +28 -0
- package/.next/standalone/Dockerfile.docs +12 -0
- package/.next/standalone/README.md +95 -49
- package/.next/standalone/app/components/session-hooks-panel.tsx +14 -1
- package/.next/standalone/app/policies/hooks-client.tsx +14 -1
- package/.next/standalone/bin/failproofai.mjs +5 -0
- package/.next/standalone/bun.lock +76 -63
- package/.next/standalone/components/navbar.tsx +5 -0
- package/.next/standalone/dist/cli.mjs +539 -90
- package/.next/standalone/dist/index.js +2 -2
- package/.next/standalone/docs/ar/architecture.mdx +333 -0
- package/.next/standalone/docs/ar/built-in-policies.mdx +566 -0
- package/.next/standalone/docs/ar/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/ar/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/ar/cli/hook.mdx +31 -0
- package/.next/standalone/docs/ar/cli/install-policies.mdx +49 -0
- package/.next/standalone/docs/ar/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/ar/cli/remove-policies.mdx +45 -0
- package/.next/standalone/docs/ar/cli/version.mdx +13 -0
- package/.next/standalone/docs/ar/configuration.mdx +223 -0
- package/.next/standalone/docs/ar/custom-policies.mdx +359 -0
- package/.next/standalone/docs/ar/dashboard.mdx +142 -0
- package/.next/standalone/docs/ar/examples.mdx +254 -0
- package/.next/standalone/docs/ar/for-agents.mdx +39 -0
- package/.next/standalone/docs/ar/getting-started.mdx +134 -0
- package/.next/standalone/docs/ar/introduction.mdx +58 -0
- package/.next/standalone/docs/ar/package-aliases.mdx +82 -0
- package/.next/standalone/docs/ar/testing.mdx +261 -0
- package/.next/standalone/docs/{architecture.md → architecture.mdx} +40 -23
- package/.next/standalone/docs/{built-in-policies.md → built-in-policies.mdx} +151 -13
- package/.next/standalone/docs/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/cli/hook.mdx +30 -0
- package/.next/standalone/docs/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/cli/version.mdx +12 -0
- package/.next/standalone/docs/{configuration.md → configuration.mdx} +62 -16
- package/.next/standalone/docs/custom-policies.mdx +357 -0
- package/.next/standalone/docs/{dashboard.md → dashboard.mdx} +26 -29
- package/.next/standalone/docs/de/architecture.mdx +332 -0
- package/.next/standalone/docs/de/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/de/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/de/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/de/cli/hook.mdx +30 -0
- package/.next/standalone/docs/de/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/de/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/de/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/de/cli/version.mdx +12 -0
- package/.next/standalone/docs/de/configuration.mdx +222 -0
- package/.next/standalone/docs/de/custom-policies.mdx +357 -0
- package/.next/standalone/docs/de/dashboard.mdx +142 -0
- package/.next/standalone/docs/de/examples.mdx +253 -0
- package/.next/standalone/docs/de/for-agents.mdx +38 -0
- package/.next/standalone/docs/de/getting-started.mdx +134 -0
- package/.next/standalone/docs/de/introduction.mdx +57 -0
- package/.next/standalone/docs/de/package-aliases.mdx +82 -0
- package/.next/standalone/docs/de/testing.mdx +260 -0
- package/.next/standalone/docs/docs.json +938 -24
- package/.next/standalone/docs/es/architecture.mdx +332 -0
- package/.next/standalone/docs/es/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/es/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/es/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/es/cli/hook.mdx +30 -0
- package/.next/standalone/docs/es/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/es/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/es/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/es/cli/version.mdx +12 -0
- package/.next/standalone/docs/es/configuration.mdx +222 -0
- package/.next/standalone/docs/es/custom-policies.mdx +357 -0
- package/.next/standalone/docs/es/dashboard.mdx +142 -0
- package/.next/standalone/docs/es/examples.mdx +253 -0
- package/.next/standalone/docs/es/for-agents.mdx +38 -0
- package/.next/standalone/docs/es/getting-started.mdx +134 -0
- package/.next/standalone/docs/es/introduction.mdx +57 -0
- package/.next/standalone/docs/es/package-aliases.mdx +82 -0
- package/.next/standalone/docs/es/testing.mdx +260 -0
- package/.next/standalone/docs/examples.mdx +253 -0
- package/.next/standalone/docs/for-agents.mdx +38 -0
- package/.next/standalone/docs/fr/architecture.mdx +332 -0
- package/.next/standalone/docs/fr/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/fr/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/fr/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/fr/cli/hook.mdx +30 -0
- package/.next/standalone/docs/fr/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/fr/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/fr/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/fr/cli/version.mdx +12 -0
- package/.next/standalone/docs/fr/configuration.mdx +222 -0
- package/.next/standalone/docs/fr/custom-policies.mdx +357 -0
- package/.next/standalone/docs/fr/dashboard.mdx +142 -0
- package/.next/standalone/docs/fr/examples.mdx +253 -0
- package/.next/standalone/docs/fr/for-agents.mdx +38 -0
- package/.next/standalone/docs/fr/getting-started.mdx +134 -0
- package/.next/standalone/docs/fr/introduction.mdx +57 -0
- package/.next/standalone/docs/fr/package-aliases.mdx +82 -0
- package/.next/standalone/docs/fr/testing.mdx +260 -0
- package/.next/standalone/docs/getting-started.mdx +134 -0
- package/.next/standalone/docs/he/architecture.mdx +333 -0
- package/.next/standalone/docs/he/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/he/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/he/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/he/cli/hook.mdx +30 -0
- package/.next/standalone/docs/he/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/he/cli/list-policies.mdx +32 -0
- package/.next/standalone/docs/he/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/he/cli/version.mdx +12 -0
- package/.next/standalone/docs/he/configuration.mdx +222 -0
- package/.next/standalone/docs/he/custom-policies.mdx +357 -0
- package/.next/standalone/docs/he/dashboard.mdx +142 -0
- package/.next/standalone/docs/he/examples.mdx +253 -0
- package/.next/standalone/docs/he/for-agents.mdx +38 -0
- package/.next/standalone/docs/he/getting-started.mdx +135 -0
- package/.next/standalone/docs/he/introduction.mdx +57 -0
- package/.next/standalone/docs/he/package-aliases.mdx +82 -0
- package/.next/standalone/docs/he/testing.mdx +260 -0
- package/.next/standalone/docs/hi/architecture.mdx +334 -0
- package/.next/standalone/docs/hi/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/hi/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/hi/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/hi/cli/hook.mdx +30 -0
- package/.next/standalone/docs/hi/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/hi/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/hi/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/hi/cli/version.mdx +12 -0
- package/.next/standalone/docs/hi/configuration.mdx +222 -0
- package/.next/standalone/docs/hi/custom-policies.mdx +357 -0
- package/.next/standalone/docs/hi/dashboard.mdx +142 -0
- package/.next/standalone/docs/hi/examples.mdx +255 -0
- package/.next/standalone/docs/hi/for-agents.mdx +38 -0
- package/.next/standalone/docs/hi/getting-started.mdx +134 -0
- package/.next/standalone/docs/hi/introduction.mdx +57 -0
- package/.next/standalone/docs/hi/package-aliases.mdx +82 -0
- package/.next/standalone/docs/hi/testing.mdx +260 -0
- package/.next/standalone/docs/i18n/README.ar.md +312 -0
- package/.next/standalone/docs/i18n/README.de.md +307 -0
- package/.next/standalone/docs/i18n/README.es.md +307 -0
- package/.next/standalone/docs/i18n/README.fr.md +307 -0
- package/.next/standalone/docs/i18n/README.he.md +312 -0
- package/.next/standalone/docs/i18n/README.hi.md +307 -0
- package/.next/standalone/docs/i18n/README.it.md +307 -0
- package/.next/standalone/docs/i18n/README.ja.md +307 -0
- package/.next/standalone/docs/i18n/README.ko.md +307 -0
- package/.next/standalone/docs/i18n/README.pt-br.md +307 -0
- package/.next/standalone/docs/i18n/README.ru.md +308 -0
- package/.next/standalone/docs/i18n/README.tr.md +308 -0
- package/.next/standalone/docs/i18n/README.vi.md +308 -0
- package/.next/standalone/docs/i18n/README.zh.md +307 -0
- package/.next/standalone/docs/introduction.mdx +57 -0
- package/.next/standalone/docs/it/architecture.mdx +333 -0
- package/.next/standalone/docs/it/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/it/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/it/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/it/cli/hook.mdx +30 -0
- package/.next/standalone/docs/it/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/it/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/it/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/it/cli/version.mdx +12 -0
- package/.next/standalone/docs/it/configuration.mdx +223 -0
- package/.next/standalone/docs/it/custom-policies.mdx +358 -0
- package/.next/standalone/docs/it/dashboard.mdx +142 -0
- package/.next/standalone/docs/it/examples.mdx +253 -0
- package/.next/standalone/docs/it/for-agents.mdx +38 -0
- package/.next/standalone/docs/it/getting-started.mdx +134 -0
- package/.next/standalone/docs/it/introduction.mdx +57 -0
- package/.next/standalone/docs/it/package-aliases.mdx +82 -0
- package/.next/standalone/docs/it/testing.mdx +260 -0
- package/.next/standalone/docs/ja/architecture.mdx +332 -0
- package/.next/standalone/docs/ja/built-in-policies.mdx +562 -0
- package/.next/standalone/docs/ja/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/ja/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/ja/cli/hook.mdx +30 -0
- package/.next/standalone/docs/ja/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/ja/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/ja/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/ja/cli/version.mdx +12 -0
- package/.next/standalone/docs/ja/configuration.mdx +222 -0
- package/.next/standalone/docs/ja/custom-policies.mdx +357 -0
- package/.next/standalone/docs/ja/dashboard.mdx +142 -0
- package/.next/standalone/docs/ja/examples.mdx +253 -0
- package/.next/standalone/docs/ja/for-agents.mdx +38 -0
- package/.next/standalone/docs/ja/getting-started.mdx +134 -0
- package/.next/standalone/docs/ja/introduction.mdx +57 -0
- package/.next/standalone/docs/ja/package-aliases.mdx +82 -0
- package/.next/standalone/docs/ja/testing.mdx +260 -0
- package/.next/standalone/docs/ko/architecture.mdx +332 -0
- package/.next/standalone/docs/ko/built-in-policies.mdx +562 -0
- package/.next/standalone/docs/ko/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/ko/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/ko/cli/hook.mdx +30 -0
- package/.next/standalone/docs/ko/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/ko/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/ko/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/ko/cli/version.mdx +12 -0
- package/.next/standalone/docs/ko/configuration.mdx +222 -0
- package/.next/standalone/docs/ko/custom-policies.mdx +357 -0
- package/.next/standalone/docs/ko/dashboard.mdx +142 -0
- package/.next/standalone/docs/ko/examples.mdx +253 -0
- package/.next/standalone/docs/ko/for-agents.mdx +38 -0
- package/.next/standalone/docs/ko/getting-started.mdx +134 -0
- package/.next/standalone/docs/ko/introduction.mdx +57 -0
- package/.next/standalone/docs/ko/package-aliases.mdx +82 -0
- package/.next/standalone/docs/ko/testing.mdx +260 -0
- package/.next/standalone/docs/logo/dark.svg +21 -0
- package/.next/standalone/docs/logo/light.svg +21 -0
- package/.next/standalone/docs/{package-aliases.md → package-aliases.mdx} +5 -5
- package/.next/standalone/docs/pt-br/architecture.mdx +332 -0
- package/.next/standalone/docs/pt-br/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/pt-br/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/pt-br/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/pt-br/cli/hook.mdx +30 -0
- package/.next/standalone/docs/pt-br/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/pt-br/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/pt-br/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/pt-br/cli/version.mdx +12 -0
- package/.next/standalone/docs/pt-br/configuration.mdx +222 -0
- package/.next/standalone/docs/pt-br/custom-policies.mdx +357 -0
- package/.next/standalone/docs/pt-br/dashboard.mdx +142 -0
- package/.next/standalone/docs/pt-br/examples.mdx +253 -0
- package/.next/standalone/docs/pt-br/for-agents.mdx +38 -0
- package/.next/standalone/docs/pt-br/getting-started.mdx +134 -0
- package/.next/standalone/docs/pt-br/introduction.mdx +57 -0
- package/.next/standalone/docs/pt-br/package-aliases.mdx +82 -0
- package/.next/standalone/docs/pt-br/testing.mdx +260 -0
- package/.next/standalone/docs/ru/architecture.mdx +334 -0
- package/.next/standalone/docs/ru/built-in-policies.mdx +562 -0
- package/.next/standalone/docs/ru/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/ru/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/ru/cli/hook.mdx +30 -0
- package/.next/standalone/docs/ru/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/ru/cli/list-policies.mdx +32 -0
- package/.next/standalone/docs/ru/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/ru/cli/version.mdx +12 -0
- package/.next/standalone/docs/ru/configuration.mdx +223 -0
- package/.next/standalone/docs/ru/custom-policies.mdx +357 -0
- package/.next/standalone/docs/ru/dashboard.mdx +142 -0
- package/.next/standalone/docs/ru/examples.mdx +254 -0
- package/.next/standalone/docs/ru/for-agents.mdx +38 -0
- package/.next/standalone/docs/ru/getting-started.mdx +134 -0
- package/.next/standalone/docs/ru/introduction.mdx +57 -0
- package/.next/standalone/docs/ru/package-aliases.mdx +82 -0
- package/.next/standalone/docs/ru/testing.mdx +260 -0
- package/.next/standalone/docs/{testing.md → testing.mdx} +11 -11
- package/.next/standalone/docs/tr/architecture.mdx +333 -0
- package/.next/standalone/docs/tr/built-in-policies.mdx +562 -0
- package/.next/standalone/docs/tr/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/tr/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/tr/cli/hook.mdx +30 -0
- package/.next/standalone/docs/tr/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/tr/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/tr/cli/remove-policies.mdx +45 -0
- package/.next/standalone/docs/tr/cli/version.mdx +12 -0
- package/.next/standalone/docs/tr/configuration.mdx +223 -0
- package/.next/standalone/docs/tr/custom-policies.mdx +357 -0
- package/.next/standalone/docs/tr/dashboard.mdx +142 -0
- package/.next/standalone/docs/tr/examples.mdx +253 -0
- package/.next/standalone/docs/tr/for-agents.mdx +38 -0
- package/.next/standalone/docs/tr/getting-started.mdx +134 -0
- package/.next/standalone/docs/tr/introduction.mdx +57 -0
- package/.next/standalone/docs/tr/package-aliases.mdx +82 -0
- package/.next/standalone/docs/tr/testing.mdx +260 -0
- package/.next/standalone/docs/vi/architecture.mdx +333 -0
- package/.next/standalone/docs/vi/built-in-policies.mdx +564 -0
- package/.next/standalone/docs/vi/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/vi/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/vi/cli/hook.mdx +30 -0
- package/.next/standalone/docs/vi/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/vi/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/vi/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/vi/cli/version.mdx +13 -0
- package/.next/standalone/docs/vi/configuration.mdx +222 -0
- package/.next/standalone/docs/vi/custom-policies.mdx +357 -0
- package/.next/standalone/docs/vi/dashboard.mdx +142 -0
- package/.next/standalone/docs/vi/examples.mdx +253 -0
- package/.next/standalone/docs/vi/for-agents.mdx +38 -0
- package/.next/standalone/docs/vi/getting-started.mdx +134 -0
- package/.next/standalone/docs/vi/introduction.mdx +57 -0
- package/.next/standalone/docs/vi/package-aliases.mdx +82 -0
- package/.next/standalone/docs/vi/testing.mdx +260 -0
- package/.next/standalone/docs/zh/architecture.mdx +332 -0
- package/.next/standalone/docs/zh/built-in-policies.mdx +562 -0
- package/.next/standalone/docs/zh/cli/dashboard.mdx +28 -0
- package/.next/standalone/docs/zh/cli/environment-variables.mdx +34 -0
- package/.next/standalone/docs/zh/cli/hook.mdx +30 -0
- package/.next/standalone/docs/zh/cli/install-policies.mdx +48 -0
- package/.next/standalone/docs/zh/cli/list-policies.mdx +31 -0
- package/.next/standalone/docs/zh/cli/remove-policies.mdx +44 -0
- package/.next/standalone/docs/zh/cli/version.mdx +12 -0
- package/.next/standalone/docs/zh/configuration.mdx +222 -0
- package/.next/standalone/docs/zh/custom-policies.mdx +357 -0
- package/.next/standalone/docs/zh/dashboard.mdx +142 -0
- package/.next/standalone/docs/zh/examples.mdx +253 -0
- package/.next/standalone/docs/zh/for-agents.mdx +38 -0
- package/.next/standalone/docs/zh/getting-started.mdx +134 -0
- package/.next/standalone/docs/zh/introduction.mdx +57 -0
- package/.next/standalone/docs/zh/package-aliases.mdx +82 -0
- package/.next/standalone/docs/zh/testing.mdx +260 -0
- package/.next/standalone/examples/convention-policies/security-policies.mjs +40 -0
- package/.next/standalone/examples/convention-policies/workflow-policies.mjs +41 -0
- package/.next/standalone/next.config.ts +5 -3
- package/.next/standalone/node_modules/@next/env/package.json +1 -1
- package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/jsonwebtoken/index.js +2 -2
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +7 -2
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/render.js +20 -19
- package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/.next/standalone/node_modules/next/package.json +15 -15
- package/.next/standalone/node_modules/react/cjs/react.development.js +1 -1
- package/.next/standalone/node_modules/react/cjs/react.production.js +1 -1
- package/.next/standalone/node_modules/react/package.json +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/package.json +2 -2
- package/.next/standalone/package.json +13 -10
- package/.next/standalone/scripts/translate-docs/cache.ts +62 -0
- package/.next/standalone/scripts/translate-docs/cli.ts +357 -0
- package/.next/standalone/scripts/translate-docs/config.ts +248 -0
- package/.next/standalone/scripts/translate-docs/mdx-translator.ts +153 -0
- package/.next/standalone/scripts/translate-docs/mintlify-nav.ts +107 -0
- package/.next/standalone/scripts/translate-docs/readme-translator.ts +154 -0
- package/.next/standalone/scripts/translate-docs/translator.ts +68 -0
- package/.next/standalone/scripts/translate-docs/types.ts +43 -0
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/skills-lock.json +10 -0
- package/.next/standalone/src/hooks/builtin-policies.ts +405 -25
- package/.next/standalone/src/hooks/custom-hooks-loader.ts +165 -21
- package/.next/standalone/src/hooks/handler.ts +33 -6
- package/.next/standalone/src/hooks/hook-activity-store.ts +6 -1
- package/.next/standalone/src/hooks/hooks-config.ts +47 -2
- package/.next/standalone/src/hooks/llm-client.ts +2 -2
- package/.next/standalone/src/hooks/loader-utils.ts +4 -4
- package/.next/standalone/src/hooks/manager.ts +67 -16
- package/.next/standalone/src/hooks/policy-evaluator.ts +58 -19
- package/.next/standalone/src/hooks/policy-helpers.ts +2 -2
- package/.next/standalone/vitest.config.e2e.mts +3 -0
- package/.next/standalone/vitest.config.mts +3 -0
- package/README.md +95 -49
- package/bin/failproofai.mjs +5 -0
- package/dist/cli.mjs +539 -90
- package/dist/index.js +2 -2
- package/package.json +13 -10
- package/scripts/translate-docs/cache.ts +62 -0
- package/scripts/translate-docs/cli.ts +357 -0
- package/scripts/translate-docs/config.ts +248 -0
- package/scripts/translate-docs/mdx-translator.ts +153 -0
- package/scripts/translate-docs/mintlify-nav.ts +107 -0
- package/scripts/translate-docs/readme-translator.ts +154 -0
- package/scripts/translate-docs/translator.ts +68 -0
- package/scripts/translate-docs/types.ts +43 -0
- package/src/hooks/builtin-policies.ts +405 -25
- package/src/hooks/custom-hooks-loader.ts +165 -21
- package/src/hooks/handler.ts +33 -6
- package/src/hooks/hook-activity-store.ts +6 -1
- package/src/hooks/hooks-config.ts +47 -2
- package/src/hooks/llm-client.ts +2 -2
- package/src/hooks/loader-utils.ts +4 -4
- package/src/hooks/manager.ts +67 -16
- package/src/hooks/policy-evaluator.ts +58 -19
- package/src/hooks/policy-helpers.ts +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02nt~6d._.js +0 -3
- package/.next/standalone/.next/static/chunks/15jpradyu_531.css +0 -1
- package/.next/standalone/docs/cli-reference.md +0 -175
- package/.next/standalone/docs/custom-hooks.md +0 -261
- package/.next/standalone/docs/getting-started.md +0 -128
- package/.next/standalone/docs/introduction.md +0 -47
- /package/.next/standalone/.next/static/{WS-OQSqL1Lp1w_obXfjvl → En9eEShUkUjgeYbY9v6Gy}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{WS-OQSqL1Lp1w_obXfjvl → En9eEShUkUjgeYbY9v6Gy}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{WS-OQSqL1Lp1w_obXfjvl → En9eEShUkUjgeYbY9v6Gy}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Elenca policies
|
|
3
|
+
description: "Visualizza quali policy sono abilitate, i loro parametri e le policy personalizzate"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
failproofai policies
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Mostra tutte le policy con il loro stato, i parametri configurati e le policy personalizzate.
|
|
11
|
+
|
|
12
|
+
## Output di esempio
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
Failproof AI Hook Policies (user)
|
|
16
|
+
|
|
17
|
+
Status Name Description
|
|
18
|
+
────── ──────────────────────────────────────────────────────────────
|
|
19
|
+
✓ block-sudo Block sudo commands
|
|
20
|
+
allowPatterns: ["sudo systemctl status"]
|
|
21
|
+
✓ block-rm-rf Block recursive deletions
|
|
22
|
+
✗ block-curl-pipe-sh Block curl|bash patterns
|
|
23
|
+
✓ sanitize-api-keys Redact API keys from output
|
|
24
|
+
additionalPatterns: [{ regex: "MY_TOKEN_...", label: "..." }]
|
|
25
|
+
|
|
26
|
+
── Custom Policies (/home/alice/myproject/my-policies.js) ──────────────
|
|
27
|
+
✓ require-jira-ticket Block commits without ticket
|
|
28
|
+
✓ approval-gate Approval gate for destructive ops
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Le chiavi sconosciute in `policyParams` vengono segnalate qui in modo che tu possa rilevare gli errori di battitura in anticipo.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Disinstallare le policies
|
|
3
|
+
description: "Rimuovere le voci hook dalle impostazioni di Claude Code"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
failproofai policies --uninstall [policy-names...] [options]
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Rimuove le voci hook di failproofai dal file `settings.json` di Claude Code.
|
|
11
|
+
|
|
12
|
+
Alias: `failproofai p -u`
|
|
13
|
+
|
|
14
|
+
## Opzioni
|
|
15
|
+
|
|
16
|
+
| Flag | Descrizione |
|
|
17
|
+
|------|-------------|
|
|
18
|
+
| `--scope user` | Rimuove dalle impostazioni globali (predefinito) |
|
|
19
|
+
| `--scope project` | Rimuove dalle impostazioni del progetto |
|
|
20
|
+
| `--scope local` | Rimuove dalle impostazioni locali |
|
|
21
|
+
| `--scope all` | Rimuove da tutti gli ambiti contemporaneamente |
|
|
22
|
+
| `--custom` / `-c` | Cancella il percorso `customPoliciesPath` dalla configurazione |
|
|
23
|
+
| `--beta` | Rimuove solo le policy beta dalla configurazione |
|
|
24
|
+
|
|
25
|
+
## Comportamento
|
|
26
|
+
|
|
27
|
+
- **Nessun nome di policy** - rimuove tutte le voci hook di failproofai dal file di impostazioni
|
|
28
|
+
- **Nomi specifici** - disabilita quelle policy ma mantiene gli hook installati
|
|
29
|
+
|
|
30
|
+
## Esempi
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Rimuove tutti gli hook globalmente
|
|
34
|
+
failproofai policies --uninstall
|
|
35
|
+
|
|
36
|
+
# Disabilita una policy specifica (mantiene gli hook installati)
|
|
37
|
+
failproofai policies --uninstall block-sudo
|
|
38
|
+
|
|
39
|
+
# Rimuove gli hook da ogni ambito
|
|
40
|
+
failproofai policies --uninstall --scope all
|
|
41
|
+
|
|
42
|
+
# Cancella il percorso delle policy personalizzate
|
|
43
|
+
failproofai policies --uninstall --custom
|
|
44
|
+
```
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
---
|
|
3
|
+
title: Configurazione
|
|
4
|
+
description: "Formato del file di configurazione, sistema a tre scope e regole di merge"
|
|
5
|
+
icon: gear
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
failproofai utilizza file di configurazione JSON per controllare quali policy sono attive, come si comportano e da dove vengono caricate le policy personalizzate. La configurazione è progettata per essere facilmente condivisibile con il tuo team - committila nel tuo repository e ogni sviluppatore avrà la stessa rete di sicurezza per gli agenti.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Scope di configurazione
|
|
13
|
+
|
|
14
|
+
Esistono tre scope di configurazione, valutati in ordine di priorità:
|
|
15
|
+
|
|
16
|
+
| Scope | Percorso del file | Scopo |
|
|
17
|
+
|-------|------------------|-------|
|
|
18
|
+
| **project** | `.failproofai/policies-config.json` | Impostazioni per-repository, committate nel controllo di versione |
|
|
19
|
+
| **local** | `.failproofai/policies-config.local.json` | Override personali per-repository, gitignored |
|
|
20
|
+
| **global** | `~/.failproofai/policies-config.json` | Impostazioni predefinite a livello di utente su tutti i progetti |
|
|
21
|
+
|
|
22
|
+
Quando failproofai riceve un evento hook, carica e unisce tutti e tre i file che esistono per la directory di lavoro corrente.
|
|
23
|
+
|
|
24
|
+
### Regole di merge
|
|
25
|
+
|
|
26
|
+
**`enabledPolicies`** - l'unione di tutti e tre gli scope. Una policy abilitata a qualsiasi livello è attiva.
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
project: ["block-sudo"]
|
|
30
|
+
local: ["block-rm-rf"]
|
|
31
|
+
global: ["block-sudo", "sanitize-api-keys"]
|
|
32
|
+
|
|
33
|
+
resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"] ← unione deduplicated
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**`policyParams`** - il primo scope che definisce i parametri per una determinata policy vince completamente. Non c'è alcun deep merging dei valori all'interno dei parametri di una policy.
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
project: block-sudo → { allowPatterns: ["sudo apt-get update"] }
|
|
40
|
+
global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
|
|
41
|
+
|
|
42
|
+
resolved: { allowPatterns: ["sudo apt-get update"] } ← project vince, global ignorato
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
project: (no block-sudo entry)
|
|
47
|
+
local: (no block-sudo entry)
|
|
48
|
+
global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
|
|
49
|
+
|
|
50
|
+
resolved: { allowPatterns: ["sudo systemctl status"] } ← ricade a global
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**`customPoliciesPath`** - il primo scope che lo definisce vince.
|
|
54
|
+
|
|
55
|
+
**`llm`** - il primo scope che lo definisce vince.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Formato del file di configurazione
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"enabledPolicies": [
|
|
64
|
+
"block-sudo",
|
|
65
|
+
"block-rm-rf",
|
|
66
|
+
"block-push-master",
|
|
67
|
+
"sanitize-api-keys",
|
|
68
|
+
"sanitize-jwt",
|
|
69
|
+
"block-env-files",
|
|
70
|
+
"block-read-outside-cwd"
|
|
71
|
+
],
|
|
72
|
+
"policyParams": {
|
|
73
|
+
"block-sudo": {
|
|
74
|
+
"allowPatterns": ["sudo systemctl status", "sudo journalctl"]
|
|
75
|
+
},
|
|
76
|
+
"block-push-master": {
|
|
77
|
+
"protectedBranches": ["main", "release", "prod"]
|
|
78
|
+
},
|
|
79
|
+
"block-rm-rf": {
|
|
80
|
+
"allowPaths": ["/tmp"]
|
|
81
|
+
},
|
|
82
|
+
"block-read-outside-cwd": {
|
|
83
|
+
"allowPaths": ["/shared/data", "/opt/company"]
|
|
84
|
+
},
|
|
85
|
+
"sanitize-api-keys": {
|
|
86
|
+
"additionalPatterns": [
|
|
87
|
+
{ "regex": "myco_[A-Za-z0-9]{32}", "label": "MyCo API key" }
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"warn-large-file-write": {
|
|
91
|
+
"thresholdKb": 512
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"customPoliciesPath": "/home/alice/myproject/my-policies.js"
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Riferimento dei campi
|
|
101
|
+
|
|
102
|
+
### `enabledPolicies`
|
|
103
|
+
|
|
104
|
+
Type: `string[]`
|
|
105
|
+
|
|
106
|
+
Elenco dei nomi delle policy da abilitare. I nomi devono corrispondere esattamente agli identificatori delle policy mostrati da `failproofai policies`. Vedi [Built-in Policies](/it/built-in-policies) per l'elenco completo.
|
|
107
|
+
|
|
108
|
+
Le policy non in `enabledPolicies` sono inattive, anche se hanno voci in `policyParams`.
|
|
109
|
+
|
|
110
|
+
### `policyParams`
|
|
111
|
+
|
|
112
|
+
Type: `Record<string, Record<string, unknown>>`
|
|
113
|
+
|
|
114
|
+
Override dei parametri per-policy. La chiave esterna è il nome della policy; le chiavi interne sono specifiche della policy. Ogni policy documenta i suoi parametri disponibili in [Built-in Policies](/it/built-in-policies).
|
|
115
|
+
|
|
116
|
+
Se una policy ha parametri ma non li specifichi, vengono utilizzati i valori predefiniti integrati della policy. Gli utenti che non configurano affatto `policyParams` ottengono un comportamento identico alle versioni precedenti.
|
|
117
|
+
|
|
118
|
+
Le chiavi sconosciute all'interno del blocco parametri di una policy vengono silenziosamente ignorate al momento dell'attivazione dell'hook ma segnalate come avvisi quando esegui `failproofai policies`.
|
|
119
|
+
|
|
120
|
+
#### `hint` (cross-cutting)
|
|
121
|
+
|
|
122
|
+
Type: `string` (optional)
|
|
123
|
+
|
|
124
|
+
Un messaggio aggiunto al motivo quando una policy restituisce `deny` o `instruct`. Usalo per dare a Claude una guida praticabile senza modificare la policy stessa.
|
|
125
|
+
|
|
126
|
+
Funziona con qualsiasi tipo di policy — integrata, personalizzata (`custom/`), convenzione di progetto (`.failproofai-project/`), o convenzione utente (`.failproofai-user/`).
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"policyParams": {
|
|
131
|
+
"block-force-push": {
|
|
132
|
+
"hint": "Try creating a fresh branch instead."
|
|
133
|
+
},
|
|
134
|
+
"block-sudo": {
|
|
135
|
+
"allowPatterns": ["sudo apt-get"],
|
|
136
|
+
"hint": "Use apt-get directly without sudo."
|
|
137
|
+
},
|
|
138
|
+
"custom/my-policy": {
|
|
139
|
+
"hint": "Ask the user for approval first."
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Quando `block-force-push` nega, Claude vede: *"Force-pushing is blocked. Try creating a fresh branch instead."*
|
|
146
|
+
|
|
147
|
+
I valori non stringa e le stringhe vuote vengono silenziosamente ignorate. Se `hint` non è impostato, il comportamento non cambia (retrocompatibile).
|
|
148
|
+
|
|
149
|
+
### `customPoliciesPath`
|
|
150
|
+
|
|
151
|
+
Type: `string` (absolute path)
|
|
152
|
+
|
|
153
|
+
Percorso a un file JavaScript contenente policy hook personalizzate. Viene impostato automaticamente da `failproofai policies --install --custom <path>` (il percorso viene risolto a assoluto prima di essere archiviato).
|
|
154
|
+
|
|
155
|
+
Il file viene caricato nuovo su ogni evento hook - non c'è caching. Vedi [Custom Policies](/it/custom-policies) per i dettagli di authoring.
|
|
156
|
+
|
|
157
|
+
### Policy basate su convenzione (v0.0.2-beta.7+)
|
|
158
|
+
|
|
159
|
+
Oltre al `customPoliciesPath` esplicito, failproofai scopre e carica automaticamente i file di policy dalle directory `.failproofai/policies/`:
|
|
160
|
+
|
|
161
|
+
| Livello | Directory | Scope |
|
|
162
|
+
|---------|-----------|-------|
|
|
163
|
+
| Project | `.failproofai/policies/` | Condiviso con il team via controllo di versione |
|
|
164
|
+
| User | `~/.failproofai/policies/` | Personale, si applica a tutti i progetti |
|
|
165
|
+
|
|
166
|
+
**File matching:** Solo i file corrispondenti a `*policies.{js,mjs,ts}` vengono caricati (ad es. `security-policies.mjs`, `workflow-policies.js`). Gli altri file nella directory vengono ignorati.
|
|
167
|
+
|
|
168
|
+
**Nessuna configurazione necessaria:** Le policy di convenzione non richiedono voci in `policies-config.json`. Basta eliminare i file nella directory e verranno raccolti al prossimo evento hook.
|
|
169
|
+
|
|
170
|
+
**Union loading:** Entrambe le directory di convenzione di progetto e utente vengono scansionate. Tutti i file corrispondenti da entrambi i livelli vengono caricati (a differenza di `customPoliciesPath` che utilizza first-scope-wins).
|
|
171
|
+
|
|
172
|
+
Vedi [Custom Policies](/it/custom-policies) per ulteriori dettagli ed esempi.
|
|
173
|
+
|
|
174
|
+
### `llm`
|
|
175
|
+
|
|
176
|
+
Type: `object` (optional)
|
|
177
|
+
|
|
178
|
+
Configurazione del client LLM per le policy che effettuano chiamate AI. Non richiesto per la maggior parte delle configurazioni.
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"llm": {
|
|
183
|
+
"model": "claude-sonnet-4-6",
|
|
184
|
+
"apiKey": "sk-ant-..."
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Gestione della configurazione da CLI
|
|
192
|
+
|
|
193
|
+
I comandi `policies --install` e `policies --uninstall` scrivono nel `settings.json` di Claude Code (i punti di ingresso dell'hook), mentre `policies-config.json` è il file che gestisci direttamente. I due sono separati:
|
|
194
|
+
|
|
195
|
+
- **`settings.json`** - dice a Claude Code di chiamare `failproofai --hook <event>` su ogni tool use
|
|
196
|
+
- **`policies-config.json`** - dice a failproofai quali policy valutare e con quali parametri
|
|
197
|
+
|
|
198
|
+
Puoi modificare `policies-config.json` direttamente in qualsiasi momento; le modifiche hanno effetto immediatamente al prossimo evento hook senza necessità di riavvio.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Esempio: config a livello di progetto con impostazioni predefinite del team
|
|
203
|
+
|
|
204
|
+
Committa `.failproofai/policies-config.json` nel tuo repo:
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"enabledPolicies": [
|
|
209
|
+
"block-sudo",
|
|
210
|
+
"block-rm-rf",
|
|
211
|
+
"block-push-master",
|
|
212
|
+
"sanitize-api-keys",
|
|
213
|
+
"block-env-files"
|
|
214
|
+
],
|
|
215
|
+
"policyParams": {
|
|
216
|
+
"block-push-master": {
|
|
217
|
+
"protectedBranches": ["main", "release", "hotfix"]
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Ogni sviluppatore può quindi creare `.failproofai/policies-config.local.json` (gitignored) per override personali senza influenzare i compagni di squadra.
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
---
|
|
2
|
+
---
|
|
3
|
+
title: Criteri Personalizzati
|
|
4
|
+
description: "Scrivi i tuoi criteri in JavaScript - applica convenzioni, previeni deviazioni, rilevai guasti, integra con sistemi esterni"
|
|
5
|
+
icon: code
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
I criteri personalizzati ti permettono di scrivere regole per qualsiasi comportamento dell'agente: applica convenzioni di progetto, previeni deviazioni, blocca operazioni distruttive, rileva agenti bloccati, o integra con Slack, flussi di approvazione e altro. Usano lo stesso sistema di eventi hook e le decisioni `allow`, `deny`, `instruct` dei criteri integrati.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Esempio rapido
|
|
13
|
+
|
|
14
|
+
```js
|
|
15
|
+
// my-policies.js
|
|
16
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
17
|
+
|
|
18
|
+
customPolicies.add({
|
|
19
|
+
name: "no-production-writes",
|
|
20
|
+
description: "Block writes to paths containing 'production'",
|
|
21
|
+
match: { events: ["PreToolUse"] },
|
|
22
|
+
fn: async (ctx) => {
|
|
23
|
+
if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
|
|
24
|
+
const path = ctx.toolInput?.file_path ?? "";
|
|
25
|
+
if (path.includes("production")) {
|
|
26
|
+
return deny("Writes to production paths are blocked");
|
|
27
|
+
}
|
|
28
|
+
return allow();
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Installalo:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
failproofai policies --install --custom ./my-policies.js
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Due modi per caricare criteri personalizzati
|
|
42
|
+
|
|
43
|
+
### Opzione 1: Basata su convenzione (consigliato, v0.0.2-beta.7+)
|
|
44
|
+
|
|
45
|
+
Inserisci i file `*policies.{js,mjs,ts}` in `.failproofai/policies/` e vengono caricati automaticamente — nessun flag o modifica di configurazione necessaria. Funziona come i git hook: inserisci un file e funziona.
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
# Livello di progetto — incluso in git, condiviso con il team
|
|
49
|
+
.failproofai/policies/security-policies.mjs
|
|
50
|
+
.failproofai/policies/workflow-policies.mjs
|
|
51
|
+
|
|
52
|
+
# Livello utente — personale, si applica a tutti i progetti
|
|
53
|
+
~/.failproofai/policies/my-policies.mjs
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Come funziona:**
|
|
57
|
+
- Entrambe le directory di progetto e utente vengono scansionate (unione — non primo ambito vince)
|
|
58
|
+
- I file vengono caricati alfabeticamente all'interno di ogni directory. Aggiungi il prefisso `01-`, `02-` per controllare l'ordine
|
|
59
|
+
- Solo i file che corrispondono a `*policies.{js,mjs,ts}` vengono caricati; gli altri file vengono ignorati
|
|
60
|
+
- Ogni file viene caricato indipendentemente (fail-open per file)
|
|
61
|
+
- Funziona insieme ai criteri espliciti `--custom` e integrati
|
|
62
|
+
|
|
63
|
+
<Tip>
|
|
64
|
+
I criteri di convenzione sono il modo più semplice per condividere criteri tra un team. Includi `.failproofai/policies/` in git e ogni membro del team li otterrà automaticamente.
|
|
65
|
+
</Tip>
|
|
66
|
+
|
|
67
|
+
### Opzione 2: Percorso file esplicito
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Installa con un file di criteri personalizzati
|
|
71
|
+
failproofai policies --install --custom ./my-policies.js
|
|
72
|
+
|
|
73
|
+
# Sostituisci il percorso del file di criteri
|
|
74
|
+
failproofai policies --install --custom ./new-policies.js
|
|
75
|
+
|
|
76
|
+
# Rimuovi il percorso dei criteri personalizzati dalla configurazione
|
|
77
|
+
failproofai policies --uninstall --custom
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Il percorso assoluto risolto viene memorizzato in `policies-config.json` come `customPoliciesPath`. Il file viene caricato di nuovo ad ogni evento hook - non c'è caching tra gli eventi.
|
|
81
|
+
|
|
82
|
+
### Usare entrambi insieme
|
|
83
|
+
|
|
84
|
+
I criteri di convenzione e il file esplicito `--custom` possono coesistere. Ordine di caricamento:
|
|
85
|
+
|
|
86
|
+
1. File `customPoliciesPath` esplicito (se configurato)
|
|
87
|
+
2. File di convenzione di progetto (`{cwd}/.failproofai/policies/`, alfabetici)
|
|
88
|
+
3. File di convenzione utente (`~/.failproofai/policies/`, alfabetici)
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## API
|
|
93
|
+
|
|
94
|
+
### Importazione
|
|
95
|
+
|
|
96
|
+
```js
|
|
97
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### `customPolicies.add(hook)`
|
|
101
|
+
|
|
102
|
+
Registra un criterio. Chiama questo tutte le volte che necessario per più criteri nello stesso file.
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
customPolicies.add({
|
|
106
|
+
name: string; // obbligatorio - identificatore univoco
|
|
107
|
+
description?: string; // mostrato nell'output di `failproofai policies`
|
|
108
|
+
match?: { events?: HookEventType[] }; // filtra per tipo di evento; ometti per corrispondere a tutti
|
|
109
|
+
fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Helper di decisione
|
|
114
|
+
|
|
115
|
+
| Funzione | Effetto | Usa quando |
|
|
116
|
+
|----------|--------|----------|
|
|
117
|
+
| `allow()` | Consenti l'operazione silenziosamente | L'azione è sicura, nessun messaggio necessario |
|
|
118
|
+
| `deny(message)` | Blocca l'operazione | L'agente non dovrebbe compiere questa azione |
|
|
119
|
+
| `instruct(message)` | Aggiungi contesto senza bloccare | Dai all'agente contesto aggiuntivo per rimanere in traccia |
|
|
120
|
+
|
|
121
|
+
`deny(message)` - il messaggio viene visualizzato a Claude con prefisso `"Blocked by failproofai:"`. Un singolo `deny` fa corto circuito di tutta la valutazione ulteriore.
|
|
122
|
+
|
|
123
|
+
`instruct(message)` - il messaggio viene aggiunto al contesto di Claude per la chiamata dello strumento corrente. Tutti i messaggi `instruct` vengono accumulati e consegnati insieme.
|
|
124
|
+
|
|
125
|
+
<Tip>
|
|
126
|
+
Puoi aggiungere guidance extra a qualsiasi messaggio `deny` o `instruct` aggiungendo un campo `hint` in `policyParams` — nessuna modifica di codice necessaria. Questo funziona per i criteri personalizzati (`custom/`), di convenzione di progetto (`.failproofai-project/`), e di convenzione utente (`.failproofai-user/`) anche. Vedi [Configurazione → hint](/it/configuration#hint-cross-cutting) per i dettagli.
|
|
127
|
+
</Tip>
|
|
128
|
+
|
|
129
|
+
### Messaggi di allow informativi (beta)
|
|
130
|
+
|
|
131
|
+
<Note>
|
|
132
|
+
`allow(message)` è una funzione beta disponibile da v0.0.2-beta.3. L'API potrebbe cambiare nelle versioni future. Le versioni precedenti supportano solo `allow()` senza argomenti.
|
|
133
|
+
</Note>
|
|
134
|
+
|
|
135
|
+
`allow(message)` consente l'operazione **e** invia un messaggio informativo indietro a Claude. Il messaggio viene consegnato come `additionalContext` nella risposta stdout del gestore dell'evento hook — lo stesso meccanismo usato da `instruct`, ma semanticamente diverso: è un aggiornamento di stato, non un avviso.
|
|
136
|
+
|
|
137
|
+
| Funzione | Effetto | Usa quando |
|
|
138
|
+
|----------|--------|----------|
|
|
139
|
+
| `allow(message)` | Consenti e invia contesto a Claude | Conferma che un controllo è passato, o spiega perché un controllo è stato saltato |
|
|
140
|
+
|
|
141
|
+
Casi d'uso:
|
|
142
|
+
- **Conferme di stato:** `allow("All CI checks passed.")` — dice a Claude che tutto è verde
|
|
143
|
+
- **Spiegazioni fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — dice a Claude perché un controllo è stato saltato così ha il contesto completo
|
|
144
|
+
- **Più messaggi si accumulano:** se più criteri ciascuno restituisce `allow(message)`, tutti i messaggi sono uniti con newline e consegnati insieme
|
|
145
|
+
|
|
146
|
+
```js
|
|
147
|
+
customPolicies.add({
|
|
148
|
+
name: "confirm-branch-status",
|
|
149
|
+
match: { events: ["Stop"] },
|
|
150
|
+
fn: async (ctx) => {
|
|
151
|
+
const cwd = ctx.session?.cwd;
|
|
152
|
+
if (!cwd) return allow("No working directory, skipping branch check.");
|
|
153
|
+
|
|
154
|
+
// ... check branch status ...
|
|
155
|
+
if (allPushed) {
|
|
156
|
+
return allow("Branch is up to date with remote.");
|
|
157
|
+
}
|
|
158
|
+
return deny("Unpushed changes detected.");
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Campi `PolicyContext`
|
|
164
|
+
|
|
165
|
+
| Campo | Tipo | Descrizione |
|
|
166
|
+
|-------|------|-------------|
|
|
167
|
+
| `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
|
|
168
|
+
| `toolName` | `string \| undefined` | Lo strumento che viene chiamato (es. `"Bash"`, `"Write"`, `"Read"`) |
|
|
169
|
+
| `toolInput` | `Record<string, unknown> \| undefined` | I parametri di input dello strumento |
|
|
170
|
+
| `payload` | `Record<string, unknown>` | Payload di evento grezzo completo da Claude Code |
|
|
171
|
+
| `session` | `SessionMetadata \| undefined` | Contesto di sessione (vedi sotto) |
|
|
172
|
+
|
|
173
|
+
### Campi `SessionMetadata`
|
|
174
|
+
|
|
175
|
+
| Campo | Tipo | Descrizione |
|
|
176
|
+
|-------|------|-------------|
|
|
177
|
+
| `sessionId` | `string` | Identificatore di sessione Claude Code |
|
|
178
|
+
| `cwd` | `string` | Directory di lavoro della sessione Claude Code |
|
|
179
|
+
| `transcriptPath` | `string` | Percorso al file transcript JSONL della sessione |
|
|
180
|
+
|
|
181
|
+
### Tipi di evento
|
|
182
|
+
|
|
183
|
+
| Evento | Quando si attiva | Contenuti `toolInput` |
|
|
184
|
+
|-------|--------------|----------------------|
|
|
185
|
+
| `PreToolUse` | Prima che Claude esegua uno strumento | L'input dello strumento (es. `{ command: "..." }` per Bash) |
|
|
186
|
+
| `PostToolUse` | Dopo che uno strumento si completa | L'input dello strumento + `tool_result` (l'output) |
|
|
187
|
+
| `Notification` | Quando Claude invia una notifica | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - i hook devono sempre restituire `allow()`, non possono bloccare le notifiche |
|
|
188
|
+
| `Stop` | Quando la sessione Claude termina | Vuoto |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Ordine di valutazione
|
|
193
|
+
|
|
194
|
+
I criteri vengono valutati in questo ordine:
|
|
195
|
+
|
|
196
|
+
1. Criteri integrati (in ordine di definizione)
|
|
197
|
+
2. Criteri personalizzati espliciti da `customPoliciesPath` (in ordine `.add()`)
|
|
198
|
+
3. Criteri di convenzione da `.failproofai/policies/` di progetto (file alfabetici, ordine `.add()` interno)
|
|
199
|
+
4. Criteri di convenzione da `~/.failproofai/policies/` utente (file alfabetici, ordine `.add()` interno)
|
|
200
|
+
|
|
201
|
+
<Note>
|
|
202
|
+
Il primo `deny` fa corto circuito di tutti i criteri successivi. Tutti i messaggi `instruct` vengono accumulati e consegnati insieme.
|
|
203
|
+
</Note>
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Importazioni transitive
|
|
208
|
+
|
|
209
|
+
I file di criteri personalizzati possono importare moduli locali usando percorsi relativi:
|
|
210
|
+
|
|
211
|
+
```js
|
|
212
|
+
// my-policies.js
|
|
213
|
+
import { isBlockedPath } from "./utils.js";
|
|
214
|
+
import { checkApproval } from "./approval-client.js";
|
|
215
|
+
|
|
216
|
+
customPolicies.add({
|
|
217
|
+
name: "approval-gate",
|
|
218
|
+
fn: async (ctx) => {
|
|
219
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
220
|
+
const approved = await checkApproval(ctx.toolInput?.command, ctx.session?.sessionId);
|
|
221
|
+
return approved ? allow() : deny("Approval required for this command");
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Tutte le importazioni relative raggiungibili dal file di entry vengono risolte. Questo viene implementato riscrivendo le importazioni `from "failproofai"` al percorso dist effettivo e creando file `.mjs` temporanei per assicurare la compatibilità ESM.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Filtraggio del tipo di evento
|
|
231
|
+
|
|
232
|
+
Usa `match.events` per limitare quando un criterio si attiva:
|
|
233
|
+
|
|
234
|
+
```js
|
|
235
|
+
customPolicies.add({
|
|
236
|
+
name: "require-summary-on-stop",
|
|
237
|
+
match: { events: ["Stop"] },
|
|
238
|
+
fn: async (ctx) => {
|
|
239
|
+
// Si attiva solo quando la sessione termina
|
|
240
|
+
// ctx.session.transcriptPath contiene il log di sessione completo
|
|
241
|
+
return allow();
|
|
242
|
+
},
|
|
243
|
+
});
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Ometti `match` interamente per attivarsi su ogni tipo di evento.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Gestione degli errori e modalità di errore
|
|
251
|
+
|
|
252
|
+
I criteri personalizzati sono **fail-open**: gli errori non bloccano mai i criteri integrati o causano crash del gestore dell'hook.
|
|
253
|
+
|
|
254
|
+
| Errore | Comportamento |
|
|
255
|
+
|---------|----------|
|
|
256
|
+
| `customPoliciesPath` non impostato | Nessun criterio personalizzato esplicito viene eseguito; i criteri di convenzione e integrati continuano normalmente |
|
|
257
|
+
| File non trovato | Avviso registrato su `~/.failproofai/hook.log`; i criteri integrati continuano |
|
|
258
|
+
| Errore di sintassi/importazione (esplicito) | Errore registrato su `~/.failproofai/hook.log`; criteri personalizzati espliciti saltati |
|
|
259
|
+
| Errore di sintassi/importazione (convenzione) | Errore registrato; quel file saltato, altri file di convenzione ancora caricati |
|
|
260
|
+
| `fn` lancia al runtime | Errore registrato; quel hook trattato come `allow`; altri hook continuano |
|
|
261
|
+
| `fn` impiega più di 10s | Timeout registrato; trattato come `allow` |
|
|
262
|
+
| Directory di convenzione mancante | Nessun criterio di convenzione viene eseguito; nessun errore |
|
|
263
|
+
|
|
264
|
+
<Tip>
|
|
265
|
+
Per eseguire il debug degli errori di criteri personalizzati, guarda il file di log:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
tail -f ~/.failproofai/hook.log
|
|
269
|
+
```
|
|
270
|
+
</Tip>
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Esempio completo: più criteri
|
|
275
|
+
|
|
276
|
+
```js
|
|
277
|
+
// my-policies.js
|
|
278
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
279
|
+
|
|
280
|
+
// Evita che l'agente scriva nella directory secrets/
|
|
281
|
+
customPolicies.add({
|
|
282
|
+
name: "block-secrets-dir",
|
|
283
|
+
description: "Prevent agent from writing to secrets/ directory",
|
|
284
|
+
match: { events: ["PreToolUse"] },
|
|
285
|
+
fn: async (ctx) => {
|
|
286
|
+
if (!["Write", "Edit"].includes(ctx.toolName ?? "")) return allow();
|
|
287
|
+
const path = ctx.toolInput?.file_path ?? "";
|
|
288
|
+
if (path.includes("secrets/")) return deny("Writing to secrets/ is not permitted");
|
|
289
|
+
return allow();
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
// Tieni l'agente in traccia: verifica i test prima di committare
|
|
294
|
+
customPolicies.add({
|
|
295
|
+
name: "remind-test-before-commit",
|
|
296
|
+
description: "Keep the agent on track: verify tests pass before committing",
|
|
297
|
+
match: { events: ["PreToolUse"] },
|
|
298
|
+
fn: async (ctx) => {
|
|
299
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
300
|
+
const cmd = ctx.toolInput?.command ?? "";
|
|
301
|
+
if (/git\s+commit/.test(cmd)) {
|
|
302
|
+
return instruct("Verify all tests pass before committing. Run `bun test` if you haven't already.");
|
|
303
|
+
}
|
|
304
|
+
return allow();
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// Previeni modifiche non pianificate alle dipendenze durante il freeze
|
|
309
|
+
customPolicies.add({
|
|
310
|
+
name: "dependency-freeze",
|
|
311
|
+
description: "Prevent unplanned dependency changes during freeze period",
|
|
312
|
+
match: { events: ["PreToolUse"] },
|
|
313
|
+
fn: async (ctx) => {
|
|
314
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
315
|
+
const cmd = ctx.toolInput?.command ?? "";
|
|
316
|
+
const isInstall = /^(npm install|yarn add|bun add|pnpm add)\s+\S/.test(cmd);
|
|
317
|
+
if (isInstall && process.env.DEPENDENCY_FREEZE === "1") {
|
|
318
|
+
return deny("Package installs are frozen. Unset DEPENDENCY_FREEZE to allow.");
|
|
319
|
+
}
|
|
320
|
+
return allow();
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
export { customPolicies };
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Esempi
|
|
330
|
+
|
|
331
|
+
La directory `examples/` contiene file di criteri pronti all'uso:
|
|
332
|
+
|
|
333
|
+
| File | Contenuti |
|
|
334
|
+
|------|----------|
|
|
335
|
+
| `examples/policies-basic.js` | Cinque criteri iniziali che coprono modalità di errore comuni dell'agente |
|
|
336
|
+
| `examples/policies-advanced/index.js` | Schemi avanzati: importazioni transitive, chiamate asincrone, scrubbing di output, e hook di fine sessione |
|
|
337
|
+
| `examples/convention-policies/security-policies.mjs` | Criteri di sicurezza basati su convenzione (blocca scritture .env, previeni riscrittura della cronologia git) |
|
|
338
|
+
| `examples/convention-policies/workflow-policies.mjs` | Criteri di flusso di lavoro basati su convenzione (promemoria di test, file di scrittura di audit) |
|
|
339
|
+
|
|
340
|
+
### Uso di esempi di file espliciti
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
failproofai policies --install --custom ./examples/policies-basic.js
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### Uso di esempi basati su convenzione
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
# Copia a livello di progetto
|
|
350
|
+
mkdir -p .failproofai/policies
|
|
351
|
+
cp examples/convention-policies/*.mjs .failproofai/policies/
|
|
352
|
+
|
|
353
|
+
# Oppure copia a livello di utente
|
|
354
|
+
mkdir -p ~/.failproofai/policies
|
|
355
|
+
cp examples/convention-policies/*.mjs ~/.failproofai/policies/
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Nessun comando di installazione necessario — i file vengono prelevati automaticamente al prossimo evento hook.
|