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: Richtlinien auflisten
|
|
3
|
+
description: "Anzeigen welche Richtlinien aktiviert sind, ihre Parameter und benutzerdefinierte Richtlinien"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
failproofai policies
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Zeigt alle Richtlinien mit ihrem Status, konfigurierten Parametern und benutzerdefinierten Richtlinien an.
|
|
11
|
+
|
|
12
|
+
## Beispielausgabe
|
|
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
|
+
Unbekannte Schlüssel in `policyParams` werden hier markiert, damit Sie Tippfehler frühzeitig erkennen können.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Richtlinien deinstallieren
|
|
3
|
+
description: "Hook-Einträge aus den Einstellungen von Claude Code entfernen"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
failproofai policies --uninstall [policy-names...] [options]
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Entfernt failproofai-Hook-Einträge aus der `settings.json` von Claude Code.
|
|
11
|
+
|
|
12
|
+
Aliase: `failproofai p -u`
|
|
13
|
+
|
|
14
|
+
## Optionen
|
|
15
|
+
|
|
16
|
+
| Flag | Beschreibung |
|
|
17
|
+
|------|-------------|
|
|
18
|
+
| `--scope user` | Aus den globalen Einstellungen entfernen (Standard) |
|
|
19
|
+
| `--scope project` | Aus den Projekteinstellungen entfernen |
|
|
20
|
+
| `--scope local` | Aus den lokalen Einstellungen entfernen |
|
|
21
|
+
| `--scope all` | Aus allen Geltungsbereichen auf einmal entfernen |
|
|
22
|
+
| `--custom` / `-c` | Den `customPoliciesPath` aus der Konfiguration löschen |
|
|
23
|
+
| `--beta` | Nur Beta-Richtlinien aus der Konfiguration entfernen |
|
|
24
|
+
|
|
25
|
+
## Verhalten
|
|
26
|
+
|
|
27
|
+
- **Keine Richtliniennamen** – entfernt alle failproofai-Hook-Einträge aus der Einstellungsdatei
|
|
28
|
+
- **Bestimmte Namen** – deaktiviert diese Richtlinien, behält die installierten Hooks aber bei
|
|
29
|
+
|
|
30
|
+
## Beispiele
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Alle Hooks global entfernen
|
|
34
|
+
failproofai policies --uninstall
|
|
35
|
+
|
|
36
|
+
# Eine bestimmte Richtlinie deaktivieren (Hooks bleiben installiert)
|
|
37
|
+
failproofai policies --uninstall block-sudo
|
|
38
|
+
|
|
39
|
+
# Hooks aus allen Geltungsbereichen entfernen
|
|
40
|
+
failproofai policies --uninstall --scope all
|
|
41
|
+
|
|
42
|
+
# Pfad für benutzerdefinierte Richtlinien löschen
|
|
43
|
+
failproofai policies --uninstall --custom
|
|
44
|
+
```
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Konfiguration
|
|
3
|
+
description: "Konfigurationsdateiformat, Drei-Scope-System und Zusammenführungsregeln"
|
|
4
|
+
icon: gear
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
failproofai verwendet JSON-Konfigurationsdateien, um festzulegen, welche Richtlinien aktiv sind, wie sie sich verhalten und woher benutzerdefinierte Richtlinien geladen werden. Die Konfiguration ist so gestaltet, dass sie einfach mit dem Team geteilt werden kann – committen Sie sie in Ihr Repository und jeder Entwickler erhält dasselbe Sicherheitsnetz für Agenten.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Konfigurationsscopes
|
|
12
|
+
|
|
13
|
+
Es gibt drei Konfigurationsscopes, die in Prioritätsreihenfolge ausgewertet werden:
|
|
14
|
+
|
|
15
|
+
| Scope | Dateipfad | Zweck |
|
|
16
|
+
|-------|-----------|-------|
|
|
17
|
+
| **project** | `.failproofai/policies-config.json` | Repository-spezifische Einstellungen, in die Versionsverwaltung eingecheckt |
|
|
18
|
+
| **local** | `.failproofai/policies-config.local.json` | Persönliche repository-spezifische Überschreibungen, per .gitignore ausgeschlossen |
|
|
19
|
+
| **global** | `~/.failproofai/policies-config.json` | Benutzerweite Standardeinstellungen für alle Projekte |
|
|
20
|
+
|
|
21
|
+
Wenn failproofai ein Hook-Ereignis empfängt, lädt und zusammenführt es alle drei Dateien, die für das aktuelle Arbeitsverzeichnis vorhanden sind.
|
|
22
|
+
|
|
23
|
+
### Zusammenführungsregeln
|
|
24
|
+
|
|
25
|
+
**`enabledPolicies`** – die Vereinigung aller drei Scopes. Eine Richtlinie, die auf irgendeiner Ebene aktiviert ist, ist aktiv.
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
project: ["block-sudo"]
|
|
29
|
+
local: ["block-rm-rf"]
|
|
30
|
+
global: ["block-sudo", "sanitize-api-keys"]
|
|
31
|
+
|
|
32
|
+
resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"] ← deduplizierte Vereinigung
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**`policyParams`** – der erste Scope, der Parameter für eine bestimmte Richtlinie definiert, gewinnt vollständig. Es findet kein tiefes Zusammenführen von Werten innerhalb der Parameter einer Richtlinie statt.
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
project: block-sudo → { allowPatterns: ["sudo apt-get update"] }
|
|
39
|
+
global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
|
|
40
|
+
|
|
41
|
+
resolved: { allowPatterns: ["sudo apt-get update"] } ← project gewinnt, global ignoriert
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
project: (kein block-sudo-Eintrag)
|
|
46
|
+
local: (kein block-sudo-Eintrag)
|
|
47
|
+
global: block-sudo → { allowPatterns: ["sudo systemctl status"] }
|
|
48
|
+
|
|
49
|
+
resolved: { allowPatterns: ["sudo systemctl status"] } ← fällt auf global zurück
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**`customPoliciesPath`** – der erste Scope, der diesen Wert definiert, gewinnt.
|
|
53
|
+
|
|
54
|
+
**`llm`** – der erste Scope, der diesen Wert definiert, gewinnt.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Konfigurationsdateiformat
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"enabledPolicies": [
|
|
63
|
+
"block-sudo",
|
|
64
|
+
"block-rm-rf",
|
|
65
|
+
"block-push-master",
|
|
66
|
+
"sanitize-api-keys",
|
|
67
|
+
"sanitize-jwt",
|
|
68
|
+
"block-env-files",
|
|
69
|
+
"block-read-outside-cwd"
|
|
70
|
+
],
|
|
71
|
+
"policyParams": {
|
|
72
|
+
"block-sudo": {
|
|
73
|
+
"allowPatterns": ["sudo systemctl status", "sudo journalctl"]
|
|
74
|
+
},
|
|
75
|
+
"block-push-master": {
|
|
76
|
+
"protectedBranches": ["main", "release", "prod"]
|
|
77
|
+
},
|
|
78
|
+
"block-rm-rf": {
|
|
79
|
+
"allowPaths": ["/tmp"]
|
|
80
|
+
},
|
|
81
|
+
"block-read-outside-cwd": {
|
|
82
|
+
"allowPaths": ["/shared/data", "/opt/company"]
|
|
83
|
+
},
|
|
84
|
+
"sanitize-api-keys": {
|
|
85
|
+
"additionalPatterns": [
|
|
86
|
+
{ "regex": "myco_[A-Za-z0-9]{32}", "label": "MyCo API key" }
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"warn-large-file-write": {
|
|
90
|
+
"thresholdKb": 512
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"customPoliciesPath": "/home/alice/myproject/my-policies.js"
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Feldreferenz
|
|
100
|
+
|
|
101
|
+
### `enabledPolicies`
|
|
102
|
+
|
|
103
|
+
Typ: `string[]`
|
|
104
|
+
|
|
105
|
+
Liste der zu aktivierenden Richtliniennamen. Die Namen müssen exakt mit den Richtlinienbezeichnern übereinstimmen, die von `failproofai policies` angezeigt werden. Die vollständige Liste finden Sie unter [Integrierte Richtlinien](/de/built-in-policies).
|
|
106
|
+
|
|
107
|
+
Richtlinien, die nicht in `enabledPolicies` aufgeführt sind, sind inaktiv, auch wenn sie Einträge in `policyParams` haben.
|
|
108
|
+
|
|
109
|
+
### `policyParams`
|
|
110
|
+
|
|
111
|
+
Typ: `Record<string, Record<string, unknown>>`
|
|
112
|
+
|
|
113
|
+
Richtlinienspezifische Parameterüberschreibungen. Der äußere Schlüssel ist der Richtlinienname; die inneren Schlüssel sind richtlinienspezifisch. Jede Richtlinie dokumentiert ihre verfügbaren Parameter unter [Integrierte Richtlinien](/de/built-in-policies).
|
|
114
|
+
|
|
115
|
+
Wenn eine Richtlinie Parameter hat, Sie diese aber nicht angeben, werden die integrierten Standardwerte der Richtlinie verwendet. Benutzer, die `policyParams` gar nicht konfigurieren, erhalten dasselbe Verhalten wie in früheren Versionen.
|
|
116
|
+
|
|
117
|
+
Unbekannte Schlüssel innerhalb des Parameterblocks einer Richtlinie werden zum Zeitpunkt der Hook-Auslösung stillschweigend ignoriert, aber als Warnungen markiert, wenn Sie `failproofai policies` ausführen.
|
|
118
|
+
|
|
119
|
+
#### `hint` (übergreifend)
|
|
120
|
+
|
|
121
|
+
Typ: `string` (optional)
|
|
122
|
+
|
|
123
|
+
Eine Nachricht, die an die Begründung angehängt wird, wenn eine Richtlinie `deny` oder `instruct` zurückgibt. Verwenden Sie diesen Wert, um Claude handlungsrelevante Hinweise zu geben, ohne die Richtlinie selbst zu ändern.
|
|
124
|
+
|
|
125
|
+
Funktioniert mit jedem Richtlinientyp – integriert, benutzerdefiniert (`custom/`), Projektkonvention (`.failproofai-project/`) oder Benutzerkonvention (`.failproofai-user/`).
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"policyParams": {
|
|
130
|
+
"block-force-push": {
|
|
131
|
+
"hint": "Try creating a fresh branch instead."
|
|
132
|
+
},
|
|
133
|
+
"block-sudo": {
|
|
134
|
+
"allowPatterns": ["sudo apt-get"],
|
|
135
|
+
"hint": "Use apt-get directly without sudo."
|
|
136
|
+
},
|
|
137
|
+
"custom/my-policy": {
|
|
138
|
+
"hint": "Ask the user for approval first."
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Wenn `block-force-push` verweigert, sieht Claude: *„Force-Pushing ist blockiert. Versuche stattdessen, einen neuen Branch zu erstellen."*
|
|
145
|
+
|
|
146
|
+
Nicht-String-Werte und leere Zeichenketten werden stillschweigend ignoriert. Wenn `hint` nicht gesetzt ist, bleibt das Verhalten unverändert (abwärtskompatibel).
|
|
147
|
+
|
|
148
|
+
### `customPoliciesPath`
|
|
149
|
+
|
|
150
|
+
Typ: `string` (absoluter Pfad)
|
|
151
|
+
|
|
152
|
+
Pfad zu einer JavaScript-Datei mit benutzerdefinierten Hook-Richtlinien. Dieser Wert wird automatisch durch `failproofai policies --install --custom <path>` gesetzt (der Pfad wird vor der Speicherung in einen absoluten Pfad aufgelöst).
|
|
153
|
+
|
|
154
|
+
Die Datei wird bei jedem Hook-Ereignis neu geladen – es gibt kein Caching. Informationen zur Erstellung finden Sie unter [Benutzerdefinierte Richtlinien](/de/custom-policies).
|
|
155
|
+
|
|
156
|
+
### Konventionsbasierte Richtlinien (ab v0.0.2-beta.7)
|
|
157
|
+
|
|
158
|
+
Zusätzlich zum expliziten `customPoliciesPath` erkennt und lädt failproofai automatisch Richtliniendateien aus `.failproofai/policies/`-Verzeichnissen:
|
|
159
|
+
|
|
160
|
+
| Ebene | Verzeichnis | Scope |
|
|
161
|
+
|-------|-------------|-------|
|
|
162
|
+
| Projekt | `.failproofai/policies/` | Wird mit dem Team über die Versionsverwaltung geteilt |
|
|
163
|
+
| Benutzer | `~/.failproofai/policies/` | Persönlich, gilt für alle Projekte |
|
|
164
|
+
|
|
165
|
+
**Dateiabgleich:** Es werden nur Dateien geladen, die dem Muster `*policies.{js,mjs,ts}` entsprechen (z. B. `security-policies.mjs`, `workflow-policies.js`). Andere Dateien im Verzeichnis werden ignoriert.
|
|
166
|
+
|
|
167
|
+
**Keine Konfiguration erforderlich:** Konventionsrichtlinien benötigen keine Einträge in `policies-config.json`. Legen Sie die Dateien einfach im Verzeichnis ab und sie werden beim nächsten Hook-Ereignis aufgenommen.
|
|
168
|
+
|
|
169
|
+
**Vereinigtes Laden:** Sowohl das Projekt- als auch das Benutzerkonventionsverzeichnis werden durchsucht. Alle passenden Dateien aus beiden Ebenen werden geladen (im Gegensatz zu `customPoliciesPath`, das das Prinzip „erster Scope gewinnt" verwendet).
|
|
170
|
+
|
|
171
|
+
Weitere Details und Beispiele finden Sie unter [Benutzerdefinierte Richtlinien](/de/custom-policies).
|
|
172
|
+
|
|
173
|
+
### `llm`
|
|
174
|
+
|
|
175
|
+
Typ: `object` (optional)
|
|
176
|
+
|
|
177
|
+
LLM-Client-Konfiguration für Richtlinien, die KI-Aufrufe durchführen. Für die meisten Setups nicht erforderlich.
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"llm": {
|
|
182
|
+
"model": "claude-sonnet-4-6",
|
|
183
|
+
"apiKey": "sk-ant-..."
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Konfiguration über die CLI verwalten
|
|
191
|
+
|
|
192
|
+
Die Befehle `policies --install` und `policies --uninstall` schreiben in Claude Codes `settings.json` (die Hook-Einstiegspunkte), während `policies-config.json` die Datei ist, die Sie direkt verwalten. Beide sind voneinander getrennt:
|
|
193
|
+
|
|
194
|
+
- **`settings.json`** – weist Claude Code an, bei jeder Toolnutzung `failproofai --hook <event>` aufzurufen
|
|
195
|
+
- **`policies-config.json`** – teilt failproofai mit, welche Richtlinien mit welchen Parametern ausgewertet werden sollen
|
|
196
|
+
|
|
197
|
+
Sie können `policies-config.json` jederzeit direkt bearbeiten; Änderungen treten sofort beim nächsten Hook-Ereignis in Kraft, ohne dass ein Neustart erforderlich ist.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Beispiel: Konfiguration auf Projektebene mit Team-Standardwerten
|
|
202
|
+
|
|
203
|
+
Committen Sie `.failproofai/policies-config.json` in Ihr Repository:
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"enabledPolicies": [
|
|
208
|
+
"block-sudo",
|
|
209
|
+
"block-rm-rf",
|
|
210
|
+
"block-push-master",
|
|
211
|
+
"sanitize-api-keys",
|
|
212
|
+
"block-env-files"
|
|
213
|
+
],
|
|
214
|
+
"policyParams": {
|
|
215
|
+
"block-push-master": {
|
|
216
|
+
"protectedBranches": ["main", "release", "hotfix"]
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Jeder Entwickler kann dann `.failproofai/policies-config.local.json` (per .gitignore ausgeschlossen) für persönliche Überschreibungen erstellen, ohne die Teamkollegen zu beeinflussen.
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Benutzerdefinierte Richtlinien
|
|
3
|
+
description: "Schreiben Sie eigene Richtlinien in JavaScript – Konventionen durchsetzen, Drift verhindern, Fehler erkennen, externe Systeme integrieren"
|
|
4
|
+
icon: code
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Benutzerdefinierte Richtlinien ermöglichen es Ihnen, Regeln für jedes Agentenverhalten zu definieren: Projektkonventionen durchsetzen, Drift verhindern, destruktive Operationen absichern, feststeckende Agenten erkennen oder Slack, Genehmigungsworkflows und mehr integrieren. Sie verwenden dasselbe Hook-Ereignissystem und dieselben `allow`-, `deny`- und `instruct`-Entscheidungen wie eingebaute Richtlinien.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Schnellbeispiel
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
// my-policies.js
|
|
15
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
16
|
+
|
|
17
|
+
customPolicies.add({
|
|
18
|
+
name: "no-production-writes",
|
|
19
|
+
description: "Block writes to paths containing 'production'",
|
|
20
|
+
match: { events: ["PreToolUse"] },
|
|
21
|
+
fn: async (ctx) => {
|
|
22
|
+
if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
|
|
23
|
+
const path = ctx.toolInput?.file_path ?? "";
|
|
24
|
+
if (path.includes("production")) {
|
|
25
|
+
return deny("Writes to production paths are blocked");
|
|
26
|
+
}
|
|
27
|
+
return allow();
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Installation:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
failproofai policies --install --custom ./my-policies.js
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Zwei Wege zum Laden benutzerdefinierter Richtlinien
|
|
41
|
+
|
|
42
|
+
### Option 1: Konventionsbasiert (empfohlen, v0.0.2-beta.7+)
|
|
43
|
+
|
|
44
|
+
Legen Sie `*policies.{js,mjs,ts}`-Dateien in `.failproofai/policies/` ab – sie werden automatisch geladen, ohne Flags oder Konfigurationsänderungen. Das funktioniert wie Git-Hooks: Datei ablegen, fertig.
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
# Projektebene – per Git eingecheckt, mit dem Team geteilt
|
|
48
|
+
.failproofai/policies/security-policies.mjs
|
|
49
|
+
.failproofai/policies/workflow-policies.mjs
|
|
50
|
+
|
|
51
|
+
# Benutzerebene – persönlich, gilt für alle Projekte
|
|
52
|
+
~/.failproofai/policies/my-policies.mjs
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**So funktioniert es:**
|
|
56
|
+
- Sowohl Projekt- als auch Benutzerverzeichnisse werden durchsucht (Vereinigung – kein Erster-gewinnt-Prinzip pro Scope)
|
|
57
|
+
- Dateien werden innerhalb jedes Verzeichnisses alphabetisch geladen. Präfixe wie `01-`, `02-` steuern die Reihenfolge
|
|
58
|
+
- Nur Dateien, die `*policies.{js,mjs,ts}` entsprechen, werden geladen; andere Dateien werden ignoriert
|
|
59
|
+
- Jede Datei wird unabhängig geladen (fail-open pro Datei)
|
|
60
|
+
- Funktioniert zusammen mit explizitem `--custom` und eingebauten Richtlinien
|
|
61
|
+
|
|
62
|
+
<Tip>
|
|
63
|
+
Konventionsbasierte Richtlinien sind der einfachste Weg, Richtlinien im Team zu teilen. Checken Sie `.failproofai/policies/` per Git ein, und jedes Teammitglied erhält sie automatisch.
|
|
64
|
+
</Tip>
|
|
65
|
+
|
|
66
|
+
### Option 2: Expliziter Dateipfad
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Mit einer benutzerdefinierten Richtliniendatei installieren
|
|
70
|
+
failproofai policies --install --custom ./my-policies.js
|
|
71
|
+
|
|
72
|
+
# Den Richtliniendateipfad ersetzen
|
|
73
|
+
failproofai policies --install --custom ./new-policies.js
|
|
74
|
+
|
|
75
|
+
# Den benutzerdefinierten Richtlinienpfad aus der Konfiguration entfernen
|
|
76
|
+
failproofai policies --uninstall --custom
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Der aufgelöste absolute Pfad wird in `policies-config.json` als `customPoliciesPath` gespeichert. Die Datei wird bei jedem Hook-Ereignis neu geladen – es gibt kein Caching zwischen Ereignissen.
|
|
80
|
+
|
|
81
|
+
### Beide Methoden kombinieren
|
|
82
|
+
|
|
83
|
+
Konventionsbasierte Richtlinien und die explizite `--custom`-Datei können nebeneinander existieren. Ladereihenfolge:
|
|
84
|
+
|
|
85
|
+
1. Explizite `customPoliciesPath`-Datei (falls konfiguriert)
|
|
86
|
+
2. Projekt-Konventionsdateien (`{cwd}/.failproofai/policies/`, alphabetisch)
|
|
87
|
+
3. Benutzer-Konventionsdateien (`~/.failproofai/policies/`, alphabetisch)
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## API
|
|
92
|
+
|
|
93
|
+
### Import
|
|
94
|
+
|
|
95
|
+
```js
|
|
96
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### `customPolicies.add(hook)`
|
|
100
|
+
|
|
101
|
+
Registriert eine Richtlinie. Kann beliebig oft aufgerufen werden, um mehrere Richtlinien in derselben Datei zu definieren.
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
customPolicies.add({
|
|
105
|
+
name: string; // erforderlich – eindeutiger Bezeichner
|
|
106
|
+
description?: string; // wird in der `failproofai policies`-Ausgabe angezeigt
|
|
107
|
+
match?: { events?: HookEventType[] }; // nach Ereignistyp filtern; weglassen für alle Ereignisse
|
|
108
|
+
fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Entscheidungs-Hilfsfunktionen
|
|
113
|
+
|
|
114
|
+
| Funktion | Wirkung | Verwendung |
|
|
115
|
+
|----------|---------|------------|
|
|
116
|
+
| `allow()` | Operation lautlos zulassen | Die Aktion ist sicher, keine Meldung erforderlich |
|
|
117
|
+
| `deny(message)` | Operation blockieren | Der Agent soll diese Aktion nicht ausführen |
|
|
118
|
+
| `instruct(message)` | Kontext hinzufügen ohne zu blockieren | Dem Agenten zusätzlichen Kontext geben, um auf Kurs zu bleiben |
|
|
119
|
+
|
|
120
|
+
`deny(message)` – die Nachricht erscheint gegenüber Claude mit dem Präfix `"Blocked by failproofai:"`. Ein einzelnes `deny` bricht die gesamte weitere Auswertung ab.
|
|
121
|
+
|
|
122
|
+
`instruct(message)` – die Nachricht wird dem Claude-Kontext für den aktuellen Tool-Aufruf angehängt. Alle `instruct`-Nachrichten werden gesammelt und gemeinsam zugestellt.
|
|
123
|
+
|
|
124
|
+
<Tip>
|
|
125
|
+
Sie können jeder `deny`- oder `instruct`-Nachricht zusätzliche Hinweise hinzufügen, indem Sie ein `hint`-Feld in `policyParams` setzen – ohne Codeänderung. Das funktioniert auch für benutzerdefinierte (`custom/`), Projekt-Konventions- (`.failproofai-project/`) und Benutzer-Konventionsrichtlinien (`.failproofai-user/`). Siehe [Konfiguration → hint](/de/configuration#hint-cross-cutting) für Details.
|
|
126
|
+
</Tip>
|
|
127
|
+
|
|
128
|
+
### Informative allow-Nachrichten (Beta)
|
|
129
|
+
|
|
130
|
+
<Note>
|
|
131
|
+
`allow(message)` ist eine Beta-Funktion, verfügbar seit v0.0.2-beta.3. Die API kann sich in zukünftigen Releases ändern. Ältere Versionen unterstützen nur `allow()` ohne Argumente.
|
|
132
|
+
</Note>
|
|
133
|
+
|
|
134
|
+
`allow(message)` lässt die Operation zu **und** sendet eine informative Nachricht an Claude zurück. Die Nachricht wird als `additionalContext` in der stdout-Antwort des Hook-Handlers zugestellt – derselbe Mechanismus wie bei `instruct`, jedoch semantisch anders: Es handelt sich um eine Statusmeldung, nicht um eine Warnung.
|
|
135
|
+
|
|
136
|
+
| Funktion | Wirkung | Verwendung |
|
|
137
|
+
|----------|---------|------------|
|
|
138
|
+
| `allow(message)` | Zulassen und Kontext an Claude senden | Bestätigen, dass eine Prüfung bestanden wurde, oder erklären, warum eine Prüfung übersprungen wurde |
|
|
139
|
+
|
|
140
|
+
Anwendungsfälle:
|
|
141
|
+
- **Statusbestätigungen:** `allow("All CI checks passed.")` – teilt Claude mit, dass alles in Ordnung ist
|
|
142
|
+
- **Fail-open-Erklärungen:** `allow("GitHub CLI not installed, skipping CI check.")` – erklärt Claude, warum eine Prüfung übersprungen wurde, damit er den vollen Kontext hat
|
|
143
|
+
- **Mehrere Nachrichten werden gesammelt:** Wenn mehrere Richtlinien jeweils `allow(message)` zurückgeben, werden alle Nachrichten mit Zeilenumbrüchen verbunden und gemeinsam zugestellt
|
|
144
|
+
|
|
145
|
+
```js
|
|
146
|
+
customPolicies.add({
|
|
147
|
+
name: "confirm-branch-status",
|
|
148
|
+
match: { events: ["Stop"] },
|
|
149
|
+
fn: async (ctx) => {
|
|
150
|
+
const cwd = ctx.session?.cwd;
|
|
151
|
+
if (!cwd) return allow("No working directory, skipping branch check.");
|
|
152
|
+
|
|
153
|
+
// ... Branch-Status prüfen ...
|
|
154
|
+
if (allPushed) {
|
|
155
|
+
return allow("Branch is up to date with remote.");
|
|
156
|
+
}
|
|
157
|
+
return deny("Unpushed changes detected.");
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### `PolicyContext`-Felder
|
|
163
|
+
|
|
164
|
+
| Feld | Typ | Beschreibung |
|
|
165
|
+
|------|-----|--------------|
|
|
166
|
+
| `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
|
|
167
|
+
| `toolName` | `string \| undefined` | Das aufgerufene Tool (z. B. `"Bash"`, `"Write"`, `"Read"`) |
|
|
168
|
+
| `toolInput` | `Record<string, unknown> \| undefined` | Die Eingabeparameter des Tools |
|
|
169
|
+
| `payload` | `Record<string, unknown>` | Vollständige rohe Ereignis-Payload von Claude Code |
|
|
170
|
+
| `session` | `SessionMetadata \| undefined` | Sitzungskontext (siehe unten) |
|
|
171
|
+
|
|
172
|
+
### `SessionMetadata`-Felder
|
|
173
|
+
|
|
174
|
+
| Feld | Typ | Beschreibung |
|
|
175
|
+
|------|-----|--------------|
|
|
176
|
+
| `sessionId` | `string` | Claude Code-Sitzungsbezeichner |
|
|
177
|
+
| `cwd` | `string` | Arbeitsverzeichnis der Claude Code-Sitzung |
|
|
178
|
+
| `transcriptPath` | `string` | Pfad zur JSONL-Transkriptdatei der Sitzung |
|
|
179
|
+
|
|
180
|
+
### Ereignistypen
|
|
181
|
+
|
|
182
|
+
| Ereignis | Wann es ausgelöst wird | Inhalt von `toolInput` |
|
|
183
|
+
|----------|------------------------|------------------------|
|
|
184
|
+
| `PreToolUse` | Bevor Claude ein Tool ausführt | Die Eingabe des Tools (z. B. `{ command: "..." }` für Bash) |
|
|
185
|
+
| `PostToolUse` | Nachdem ein Tool abgeschlossen hat | Die Eingabe des Tools + `tool_result` (die Ausgabe) |
|
|
186
|
+
| `Notification` | Wenn Claude eine Benachrichtigung sendet | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` – Hooks müssen immer `allow()` zurückgeben, Benachrichtigungen können nicht blockiert werden |
|
|
187
|
+
| `Stop` | Wenn die Claude-Sitzung endet | Leer |
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Auswertungsreihenfolge
|
|
192
|
+
|
|
193
|
+
Richtlinien werden in dieser Reihenfolge ausgewertet:
|
|
194
|
+
|
|
195
|
+
1. Eingebaute Richtlinien (in Definitionsreihenfolge)
|
|
196
|
+
2. Explizite benutzerdefinierte Richtlinien aus `customPoliciesPath` (in `.add()`-Reihenfolge)
|
|
197
|
+
3. Konventionsrichtlinien aus dem Projekt `.failproofai/policies/` (Dateien alphabetisch, `.add()`-Reihenfolge innerhalb)
|
|
198
|
+
4. Konventionsrichtlinien aus dem Benutzerverzeichnis `~/.failproofai/policies/` (Dateien alphabetisch, `.add()`-Reihenfolge innerhalb)
|
|
199
|
+
|
|
200
|
+
<Note>
|
|
201
|
+
Das erste `deny` bricht alle nachfolgenden Richtlinien ab. Alle `instruct`-Nachrichten werden gesammelt und gemeinsam zugestellt.
|
|
202
|
+
</Note>
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Transitive Importe
|
|
207
|
+
|
|
208
|
+
Benutzerdefinierte Richtliniendateien können lokale Module über relative Pfade importieren:
|
|
209
|
+
|
|
210
|
+
```js
|
|
211
|
+
// my-policies.js
|
|
212
|
+
import { isBlockedPath } from "./utils.js";
|
|
213
|
+
import { checkApproval } from "./approval-client.js";
|
|
214
|
+
|
|
215
|
+
customPolicies.add({
|
|
216
|
+
name: "approval-gate",
|
|
217
|
+
fn: async (ctx) => {
|
|
218
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
219
|
+
const approved = await checkApproval(ctx.toolInput?.command, ctx.session?.sessionId);
|
|
220
|
+
return approved ? allow() : deny("Approval required for this command");
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Alle relativen Importe, die von der Einstiegsdatei aus erreichbar sind, werden aufgelöst. Dies wird implementiert, indem `from "failproofai"`-Importe auf den tatsächlichen dist-Pfad umgeschrieben und temporäre `.mjs`-Dateien erstellt werden, um ESM-Kompatibilität sicherzustellen.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Ereignistypfilterung
|
|
230
|
+
|
|
231
|
+
Verwenden Sie `match.events`, um einzuschränken, wann eine Richtlinie ausgelöst wird:
|
|
232
|
+
|
|
233
|
+
```js
|
|
234
|
+
customPolicies.add({
|
|
235
|
+
name: "require-summary-on-stop",
|
|
236
|
+
match: { events: ["Stop"] },
|
|
237
|
+
fn: async (ctx) => {
|
|
238
|
+
// Wird nur ausgelöst, wenn die Sitzung endet
|
|
239
|
+
// ctx.session.transcriptPath enthält das vollständige Sitzungsprotokoll
|
|
240
|
+
return allow();
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Lassen Sie `match` vollständig weg, um bei jedem Ereignistyp auszulösen.
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Fehlerbehandlung und Fehlermodi
|
|
250
|
+
|
|
251
|
+
Benutzerdefinierte Richtlinien sind **fail-open**: Fehler blockieren niemals eingebaute Richtlinien und bringen den Hook-Handler nicht zum Absturz.
|
|
252
|
+
|
|
253
|
+
| Fehler | Verhalten |
|
|
254
|
+
|--------|-----------|
|
|
255
|
+
| `customPoliciesPath` nicht gesetzt | Keine expliziten benutzerdefinierten Richtlinien werden ausgeführt; Konventionsrichtlinien und eingebaute Richtlinien laufen normal weiter |
|
|
256
|
+
| Datei nicht gefunden | Warnung wird in `~/.failproofai/hook.log` protokolliert; eingebaute Richtlinien laufen weiter |
|
|
257
|
+
| Syntax-/Importfehler (explizit) | Fehler wird in `~/.failproofai/hook.log` protokolliert; explizite benutzerdefinierte Richtlinien werden übersprungen |
|
|
258
|
+
| Syntax-/Importfehler (Konvention) | Fehler wird protokolliert; diese Datei wird übersprungen, andere Konventionsdateien werden weiterhin geladen |
|
|
259
|
+
| `fn` wirft zur Laufzeit | Fehler wird protokolliert; dieser Hook wird als `allow` behandelt; andere Hooks laufen weiter |
|
|
260
|
+
| `fn` dauert länger als 10s | Timeout wird protokolliert; als `allow` behandelt |
|
|
261
|
+
| Konventionsverzeichnis fehlt | Keine Konventionsrichtlinien werden ausgeführt; kein Fehler |
|
|
262
|
+
|
|
263
|
+
<Tip>
|
|
264
|
+
Um Fehler in benutzerdefinierten Richtlinien zu debuggen, beobachten Sie die Log-Datei:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
tail -f ~/.failproofai/hook.log
|
|
268
|
+
```
|
|
269
|
+
</Tip>
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Vollständiges Beispiel: mehrere Richtlinien
|
|
274
|
+
|
|
275
|
+
```js
|
|
276
|
+
// my-policies.js
|
|
277
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
278
|
+
|
|
279
|
+
// Verhindert, dass der Agent in das secrets/-Verzeichnis schreibt
|
|
280
|
+
customPolicies.add({
|
|
281
|
+
name: "block-secrets-dir",
|
|
282
|
+
description: "Prevent agent from writing to secrets/ directory",
|
|
283
|
+
match: { events: ["PreToolUse"] },
|
|
284
|
+
fn: async (ctx) => {
|
|
285
|
+
if (!["Write", "Edit"].includes(ctx.toolName ?? "")) return allow();
|
|
286
|
+
const path = ctx.toolInput?.file_path ?? "";
|
|
287
|
+
if (path.includes("secrets/")) return deny("Writing to secrets/ is not permitted");
|
|
288
|
+
return allow();
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// Agenten auf Kurs halten: Tests vor dem Commit prüfen
|
|
293
|
+
customPolicies.add({
|
|
294
|
+
name: "remind-test-before-commit",
|
|
295
|
+
description: "Keep the agent on track: verify tests pass before committing",
|
|
296
|
+
match: { events: ["PreToolUse"] },
|
|
297
|
+
fn: async (ctx) => {
|
|
298
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
299
|
+
const cmd = ctx.toolInput?.command ?? "";
|
|
300
|
+
if (/git\s+commit/.test(cmd)) {
|
|
301
|
+
return instruct("Verify all tests pass before committing. Run `bun test` if you haven't already.");
|
|
302
|
+
}
|
|
303
|
+
return allow();
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
// Ungeplante Abhängigkeitsänderungen während des Freeze verhindern
|
|
308
|
+
customPolicies.add({
|
|
309
|
+
name: "dependency-freeze",
|
|
310
|
+
description: "Prevent unplanned dependency changes during freeze period",
|
|
311
|
+
match: { events: ["PreToolUse"] },
|
|
312
|
+
fn: async (ctx) => {
|
|
313
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
314
|
+
const cmd = ctx.toolInput?.command ?? "";
|
|
315
|
+
const isInstall = /^(npm install|yarn add|bun add|pnpm add)\s+\S/.test(cmd);
|
|
316
|
+
if (isInstall && process.env.DEPENDENCY_FREEZE === "1") {
|
|
317
|
+
return deny("Package installs are frozen. Unset DEPENDENCY_FREEZE to allow.");
|
|
318
|
+
}
|
|
319
|
+
return allow();
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
export { customPolicies };
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Beispiele
|
|
329
|
+
|
|
330
|
+
Das Verzeichnis `examples/` enthält sofort ausführbare Richtliniendateien:
|
|
331
|
+
|
|
332
|
+
| Datei | Inhalt |
|
|
333
|
+
|-------|--------|
|
|
334
|
+
| `examples/policies-basic.js` | Fünf Starter-Richtlinien für häufige Agenten-Fehlermodi |
|
|
335
|
+
| `examples/policies-advanced/index.js` | Fortgeschrittene Muster: transitive Importe, asynchrone Aufrufe, Ausgabe-Bereinigung und Sitzungsende-Hooks |
|
|
336
|
+
| `examples/convention-policies/security-policies.mjs` | Konventionsbasierte Sicherheitsrichtlinien (blockiert .env-Schreibzugriffe, verhindert Git-History-Umschreibung) |
|
|
337
|
+
| `examples/convention-policies/workflow-policies.mjs` | Konventionsbasierte Workflow-Richtlinien (Test-Erinnerungen, Audit-Datei-Schreibzugriffe) |
|
|
338
|
+
|
|
339
|
+
### Explizite Dateibeispiele verwenden
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
failproofai policies --install --custom ./examples/policies-basic.js
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Konventionsbasierte Beispiele verwenden
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
# Auf Projektebene kopieren
|
|
349
|
+
mkdir -p .failproofai/policies
|
|
350
|
+
cp examples/convention-policies/*.mjs .failproofai/policies/
|
|
351
|
+
|
|
352
|
+
# Oder auf Benutzerebene kopieren
|
|
353
|
+
mkdir -p ~/.failproofai/policies
|
|
354
|
+
cp examples/convention-policies/*.mjs ~/.failproofai/policies/
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
Kein Installationsbefehl erforderlich – die Dateien werden beim nächsten Hook-Ereignis automatisch erkannt.
|