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,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 控制台
|
|
3
|
+
description: "监控 Agent 会话、查看工具调用并管理策略"
|
|
4
|
+
icon: chart-line
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
failproofai 控制台是一个本地 Web 应用,用于监控 AI Agent 会话和管理策略。随时查看 Agent 在后台执行了哪些操作。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 启动控制台
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
failproofai
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
访问地址:`http://localhost:8020`。
|
|
18
|
+
|
|
19
|
+
控制台直接从文件系统读取数据——包括 Claude Code 项目文件夹和 failproofai 配置文件。所有数据均不会上传至远程服务。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 页面说明
|
|
24
|
+
|
|
25
|
+
### 项目
|
|
26
|
+
|
|
27
|
+
列出本机上所有已发现的 Claude Code 项目。项目从 `~/.claude/projects/`(或 `CLAUDE_PROJECTS_PATH` 环境变量指定的路径)中自动发现。
|
|
28
|
+
|
|
29
|
+
每个项目展示以下信息:
|
|
30
|
+
- 项目名称(从文件夹路径派生)
|
|
31
|
+
- 会话数量
|
|
32
|
+
- 最近一次会话活动的日期
|
|
33
|
+
|
|
34
|
+
点击项目可查看其下所有会话。
|
|
35
|
+
|
|
36
|
+
### 会话
|
|
37
|
+
|
|
38
|
+
列出某个项目下的所有会话。每个会话展示:
|
|
39
|
+
- 会话 ID
|
|
40
|
+
- 开始和结束时间戳
|
|
41
|
+
- 工具调用次数
|
|
42
|
+
- Hook 活动次数(触发的策略数量)
|
|
43
|
+
|
|
44
|
+
可使用日期范围筛选器和会话 ID 搜索来缩小列表范围。会话列表支持分页。
|
|
45
|
+
|
|
46
|
+
点击会话可打开会话查看器。
|
|
47
|
+
|
|
48
|
+
### 会话查看器
|
|
49
|
+
|
|
50
|
+
会话查看器回答了自主 Agent 最核心的问题:Agent 做了什么,是否按预期执行?它以时间线形式展示会话中发生的所有事件:
|
|
51
|
+
|
|
52
|
+
- **消息** — Claude 的文本回复和用户提示
|
|
53
|
+
- **工具调用** — Claude 调用的每个工具,包含其输入和输出
|
|
54
|
+
- **策略活动** — 针对每次工具调用,显示哪些策略触发以及返回了什么决策
|
|
55
|
+
|
|
56
|
+
顶部统计栏显示会话时长、工具调用总次数,以及 Hook 决策汇总(allow / deny / instruct 的数量统计)。
|
|
57
|
+
|
|
58
|
+
可通过下载按钮将会话导出为 ZIP 或 JSONL 文件。
|
|
59
|
+
|
|
60
|
+
### 策略
|
|
61
|
+
|
|
62
|
+
包含两个选项卡,用于管理策略和查看活动记录。
|
|
63
|
+
|
|
64
|
+
<Tabs>
|
|
65
|
+
<Tab title="策略选项卡">
|
|
66
|
+
- 单击即可启用或禁用某条策略(写入 `~/.failproofai/policies-config.json`)
|
|
67
|
+
- 展开策略以配置其参数(适用于支持 `policyParams` 的策略)
|
|
68
|
+
- 为指定作用域安装或移除 Hook
|
|
69
|
+
- 设置自定义策略文件路径
|
|
70
|
+
</Tab>
|
|
71
|
+
<Tab title="活动选项卡">
|
|
72
|
+
- 跨所有会话的所有 Hook 事件完整分页历史记录
|
|
73
|
+
- 可按策略名称、会话 ID、工具名称或决策进行搜索
|
|
74
|
+
- 每行显示:时间戳、策略名称、决策、工具名称、会话 ID,以及 deny/instruct 决策的原因
|
|
75
|
+
</Tab>
|
|
76
|
+
</Tabs>
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 自动刷新
|
|
81
|
+
|
|
82
|
+
控制台顶部导航栏提供自动刷新开关。启用后,当前页面将定期刷新,实时显示新增的会话和策略活动。这对于监控长时间运行的自主 Agent 会话尤为重要。
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 禁用页面
|
|
87
|
+
|
|
88
|
+
如果只需要控制台的部分功能,可将 `FAILPROOFAI_DISABLE_PAGES` 设置为以逗号分隔的页面名称列表:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
FAILPROOFAI_DISABLE_PAGES=policies failproofai
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
有效值:`policies`、`projects`。
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 主题
|
|
99
|
+
|
|
100
|
+
控制台支持亮色和暗色模式,可通过导航栏中的按钮切换。偏好设置存储在浏览器的本地存储中。
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 配置项目路径
|
|
105
|
+
|
|
106
|
+
默认情况下,控制台从标准的 Claude Code 项目目录读取数据。如需自定义设置,可覆盖该路径:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
CLAUDE_PROJECTS_PATH=/custom/path/to/projects failproofai
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 从非 localhost 主机访问
|
|
115
|
+
|
|
116
|
+
在**开发模式**(`npm run dev`)下运行控制台,并通过非 `localhost` 的主机名访问时——例如自定义域名、远程 IP 或隧道 URL——可能会看到如下警告:
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
⚠ Blocked cross-origin request to Next.js dev resource /_next/webpack-hmr from "dashboard.example.com".
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
这是 Next.js 阻止跨域访问其 HMR(热模块重载)WebSocket 的行为,该功能仅在开发模式下存在。如需允许特定主机访问,请使用 `--allowed-origins` 参数:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npm run dev -- --allowed-origins dashboard.example.com
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
如需允许多个主机或 IP,以逗号分隔传入:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
npm run dev -- --allowed-origins dashboard.example.com,192.168.1.5
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
也可以通过设置 `FAILPROOFAI_ALLOWED_DEV_ORIGINS` 环境变量来实现:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
FAILPROOFAI_ALLOWED_DEV_ORIGINS=dashboard.example.com npm run dev
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
<Note>
|
|
141
|
+
此设置仅适用于开发模式。运行 `failproofai`(生产模式)时,不存在 HMR WebSocket,也不存在跨域开发资源问题。
|
|
142
|
+
</Note>
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 示例
|
|
3
|
+
description: "如何为 Claude Code 和 Agents SDK 设置 Hook"
|
|
4
|
+
icon: book-open
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
适用于常见场景的即用型示例,每个示例均说明安装方式及预期效果。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 为 Claude Code 设置 Hook
|
|
12
|
+
|
|
13
|
+
Failproof AI 通过 [hooks 系统](https://docs.anthropic.com/en/docs/claude-code/hooks)与 Claude Code 集成。运行 `failproofai policies --install` 后,它会在 Claude Code 的 `settings.json` 中注册 Hook 命令,这些命令将在每次工具调用时触发。
|
|
14
|
+
|
|
15
|
+
<Steps>
|
|
16
|
+
<Step title="安装 failproofai">
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g failproofai
|
|
19
|
+
```
|
|
20
|
+
</Step>
|
|
21
|
+
<Step title="启用所有内置策略">
|
|
22
|
+
```bash
|
|
23
|
+
failproofai policies --install
|
|
24
|
+
```
|
|
25
|
+
</Step>
|
|
26
|
+
<Step title="验证 Hook 已注册">
|
|
27
|
+
```bash
|
|
28
|
+
cat ~/.claude/settings.json | grep failproofai
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
你应该能看到 `PreToolUse`、`PostToolUse`、`Notification` 和 `Stop` 事件对应的 Hook 条目。
|
|
32
|
+
</Step>
|
|
33
|
+
<Step title="运行 Claude Code">
|
|
34
|
+
```bash
|
|
35
|
+
claude
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
策略现在会在每次工具调用时自动执行。可以尝试让 Claude 运行 `sudo rm -rf /`,该命令将被拦截。
|
|
39
|
+
</Step>
|
|
40
|
+
</Steps>
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 为 Agents SDK 设置 Hook
|
|
45
|
+
|
|
46
|
+
如果你正在使用 [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk) 开发,同样可以通过编程方式使用相同的 Hook 系统。
|
|
47
|
+
|
|
48
|
+
<Steps>
|
|
49
|
+
<Step title="在项目中安装 failproofai">
|
|
50
|
+
```bash
|
|
51
|
+
npm install failproofai
|
|
52
|
+
```
|
|
53
|
+
</Step>
|
|
54
|
+
<Step title="在 Agent 中配置 Hook">
|
|
55
|
+
在创建 Agent 进程时传入 Hook 命令。Hook 的触发方式与 Claude Code 中相同——通过 stdin/stdout JSON 进行通信:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
failproofai --hook PreToolUse # 在每次工具调用前触发
|
|
59
|
+
failproofai --hook PostToolUse # 在每次工具调用后触发
|
|
60
|
+
```
|
|
61
|
+
</Step>
|
|
62
|
+
<Step title="为 Agent 编写自定义策略">
|
|
63
|
+
```javascript
|
|
64
|
+
import { customPolicies, allow, deny } from "failproofai";
|
|
65
|
+
|
|
66
|
+
customPolicies.add({
|
|
67
|
+
name: "limit-to-project-dir",
|
|
68
|
+
description: "Keep the agent inside the project directory",
|
|
69
|
+
match: { events: ["PreToolUse"] },
|
|
70
|
+
fn: async (ctx) => {
|
|
71
|
+
const path = String(ctx.toolInput?.file_path ?? "");
|
|
72
|
+
if (path.startsWith("/") && !path.startsWith(ctx.session?.cwd ?? "")) {
|
|
73
|
+
return deny("Agent is restricted to the project directory");
|
|
74
|
+
}
|
|
75
|
+
return allow();
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
</Step>
|
|
80
|
+
<Step title="安装自定义策略">
|
|
81
|
+
```bash
|
|
82
|
+
failproofai policies --install --custom ./my-agent-policies.js
|
|
83
|
+
```
|
|
84
|
+
</Step>
|
|
85
|
+
</Steps>
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 拦截破坏性命令
|
|
90
|
+
|
|
91
|
+
最常见的配置——防止 Agent 执行不可逆的破坏性操作。
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
各策略说明:
|
|
98
|
+
- `block-sudo` - 拦截所有 `sudo` 命令
|
|
99
|
+
- `block-rm-rf` - 拦截递归删除文件的操作
|
|
100
|
+
- `block-force-push` - 拦截 `git push --force`
|
|
101
|
+
- `block-curl-pipe-sh` - 拦截将远程脚本通过管道传入 Shell 执行的操作
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 防止密钥泄露
|
|
106
|
+
|
|
107
|
+
阻止 Agent 在工具输出中查看或泄露凭证信息。
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
这些策略在 `PostToolUse` 时触发——工具执行完毕后,在 Agent 获取输出之前对其进行脱敏处理。
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 在 Agent 需要关注时发送 Slack 提醒
|
|
118
|
+
|
|
119
|
+
使用 Notification Hook 将空闲提醒转发至 Slack。
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
import { customPolicies, allow, instruct } from "failproofai";
|
|
123
|
+
|
|
124
|
+
customPolicies.add({
|
|
125
|
+
name: "slack-on-idle",
|
|
126
|
+
description: "Alert Slack when the agent is waiting for input",
|
|
127
|
+
match: { events: ["Notification"] },
|
|
128
|
+
fn: async (ctx) => {
|
|
129
|
+
const webhookUrl = process.env.SLACK_WEBHOOK_URL;
|
|
130
|
+
if (!webhookUrl) return allow();
|
|
131
|
+
|
|
132
|
+
const message = String(ctx.payload?.message ?? "Agent is waiting");
|
|
133
|
+
const project = ctx.session?.cwd ?? "unknown";
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
await fetch(webhookUrl, {
|
|
137
|
+
method: "POST",
|
|
138
|
+
headers: { "Content-Type": "application/json" },
|
|
139
|
+
body: JSON.stringify({
|
|
140
|
+
text: `*${message}*\nProject: \`${project}\``,
|
|
141
|
+
}),
|
|
142
|
+
signal: AbortSignal.timeout(5000),
|
|
143
|
+
});
|
|
144
|
+
} catch {
|
|
145
|
+
// never block the agent if Slack is unreachable
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return allow();
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
安装方式:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 将 Agent 限制在指定分支
|
|
162
|
+
|
|
163
|
+
防止 Agent 切换分支或向受保护分支推送代码。
|
|
164
|
+
|
|
165
|
+
```javascript
|
|
166
|
+
import { customPolicies, allow, deny } from "failproofai";
|
|
167
|
+
|
|
168
|
+
customPolicies.add({
|
|
169
|
+
name: "stay-on-branch",
|
|
170
|
+
description: "Prevent the agent from checking out other branches",
|
|
171
|
+
match: { events: ["PreToolUse"] },
|
|
172
|
+
fn: async (ctx) => {
|
|
173
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
174
|
+
const cmd = String(ctx.toolInput?.command ?? "");
|
|
175
|
+
if (/git\s+checkout\s+(?!-b)/.test(cmd)) {
|
|
176
|
+
return deny("Stay on the current branch. Create a new branch with -b if needed.");
|
|
177
|
+
}
|
|
178
|
+
return allow();
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 提交前要求运行测试
|
|
186
|
+
|
|
187
|
+
提醒 Agent 在提交代码前先运行测试。
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
import { customPolicies, allow, instruct } from "failproofai";
|
|
191
|
+
|
|
192
|
+
customPolicies.add({
|
|
193
|
+
name: "test-before-commit",
|
|
194
|
+
description: "Remind the agent to run tests before committing",
|
|
195
|
+
match: { events: ["PreToolUse"] },
|
|
196
|
+
fn: async (ctx) => {
|
|
197
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
198
|
+
const cmd = String(ctx.toolInput?.command ?? "");
|
|
199
|
+
if (/git\s+commit/.test(cmd)) {
|
|
200
|
+
return instruct("Run tests before committing. Use `npm test` or `bun test` first.");
|
|
201
|
+
}
|
|
202
|
+
return allow();
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 锁定生产环境仓库
|
|
210
|
+
|
|
211
|
+
在项目中提交配置文件,让团队所有成员共享统一的策略。
|
|
212
|
+
|
|
213
|
+
在仓库中创建 `.failproofai/policies-config.json`:
|
|
214
|
+
|
|
215
|
+
```json
|
|
216
|
+
{
|
|
217
|
+
"enabledPolicies": [
|
|
218
|
+
"block-sudo",
|
|
219
|
+
"block-rm-rf",
|
|
220
|
+
"block-force-push",
|
|
221
|
+
"block-push-master",
|
|
222
|
+
"block-env-files",
|
|
223
|
+
"sanitize-api-keys",
|
|
224
|
+
"sanitize-jwt"
|
|
225
|
+
],
|
|
226
|
+
"policyParams": {
|
|
227
|
+
"block-push-master": {
|
|
228
|
+
"protectedBranches": ["main", "release", "production"]
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
然后提交该文件:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
git add .failproofai/policies-config.json
|
|
238
|
+
git commit -m "Add failproofai team policies"
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
所有已安装 failproofai 的团队成员都将自动应用这些规则。
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 更多示例
|
|
246
|
+
|
|
247
|
+
仓库中的 [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) 目录包含以下内容:
|
|
248
|
+
|
|
249
|
+
| 文件 | 内容说明 |
|
|
250
|
+
|------|---------------|
|
|
251
|
+
| `policies-basic.js` | 基础策略——拦截生产环境写入、强制推送、管道脚本执行 |
|
|
252
|
+
| `policies-notification.js` | 针对空闲通知和会话结束的 Slack 提醒 |
|
|
253
|
+
| `policies-advanced/index.js` | 传递式导入、异步 Hook、PostToolUse 输出脱敏、Stop 事件处理 |
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "适用于 Agent"
|
|
3
|
+
description: "一条命令即可将 Failproof AI 知识添加到你的编程 Agent 中。支持 Claude Code、Cursor、Windsurf 等。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
一条命令即可将完整的 Failproof AI 参考文档添加到你的编程 Agent 中。支持 Claude Code、Cursor、Windsurf 以及任何其他支持技能(skills)的 Agent。
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npx skills add https://docs.befailproof.ai
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`npx skills` 会自动检测你已安装的 Agent,并以每个 Agent 对应的正确格式添加该技能。
|
|
13
|
+
|
|
14
|
+
## 技能涵盖的内容
|
|
15
|
+
|
|
16
|
+
| 领域 | 包含内容 |
|
|
17
|
+
|------|----------------|
|
|
18
|
+
| 策略(Policies) | 内置策略名称、事件类型、参数、启用/禁用 |
|
|
19
|
+
| 自定义策略 | `customPolicies.add()`、匹配过滤器、`allow`/`deny`/`instruct` API |
|
|
20
|
+
| 上下文对象 | `ctx.eventType`、`ctx.toolName`、`ctx.toolInput`、`ctx.session` |
|
|
21
|
+
| 配置 | `policies-config.json` 结构、作用域合并、`policyParams` |
|
|
22
|
+
| CLI | `failproofai policies --install`、`--uninstall`、`--custom`、作用域 |
|
|
23
|
+
| 控制台 | 会话查看器、策略活动、环境变量 |
|
|
24
|
+
| 架构 | Hook 处理器流程、退出码、stdin/stdout 约定 |
|
|
25
|
+
|
|
26
|
+
## 技能内容是否完整?
|
|
27
|
+
|
|
28
|
+
Mintlify 会从导航中所有页面生成 `llms.txt`。Failproof AI 文档覆盖了完整的 API——每一条策略、选项和示例均已收录。如果你发现有遗漏,源文件位于 `https://docs.befailproof.ai/llms-full.txt`。
|
|
29
|
+
|
|
30
|
+
如需针对性的上下文内容,可直接链接到特定页面:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 仅获取自定义策略 API
|
|
34
|
+
npx skills add https://docs.befailproof.ai/custom-policies
|
|
35
|
+
|
|
36
|
+
# 仅获取内置策略
|
|
37
|
+
npx skills add https://docs.befailproof.ai/built-in-policies
|
|
38
|
+
```
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 快速入门
|
|
3
|
+
description: "安装 failproofai,启用策略,让你的 Agent 稳定运行"
|
|
4
|
+
icon: rocket
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 系统要求
|
|
8
|
+
|
|
9
|
+
- **Node.js** >= 20.9.0
|
|
10
|
+
- **Bun** >= 1.3.0(可选 - 仅从源码构建时需要)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
<CodeGroup>
|
|
17
|
+
|
|
18
|
+
```bash npm
|
|
19
|
+
npm install -g failproofai
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```bash bun
|
|
23
|
+
bun add -g failproofai
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
</CodeGroup>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 快速开始
|
|
31
|
+
|
|
32
|
+
<Steps>
|
|
33
|
+
<Step title="启用策略">
|
|
34
|
+
策略是在每次 Agent 工具调用前后执行的规则,能够在破坏性命令、密钥泄露及其他故障模式造成损害之前将其拦截。
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
failproofai policies --install
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
此命令会将 hook 条目写入 Claude Code 的 `settings.json`。你也可以针对单个项目安装,或选择特定策略:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
failproofai policies --install --scope project
|
|
44
|
+
failproofai policies --install block-sudo block-rm-rf sanitize-api-keys
|
|
45
|
+
```
|
|
46
|
+
</Step>
|
|
47
|
+
<Step title="验证">
|
|
48
|
+
```bash
|
|
49
|
+
failproofai policies
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
显示所有策略、是否已启用以及已配置的参数。
|
|
53
|
+
</Step>
|
|
54
|
+
<Step title="启动仪表板">
|
|
55
|
+
```bash
|
|
56
|
+
failproofai
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
在 `http://localhost:8020` 打开本地仪表板,你可以在此浏览会话、查看工具调用详情并管理策略。
|
|
60
|
+
</Step>
|
|
61
|
+
<Step title="运行你的 Agent">
|
|
62
|
+
像往常一样启动 Claude Code。如果 Agent 尝试执行高风险操作,failproofai 会自动拦截。让它在无人值守的情况下运行,之后在仪表板中查看执行记录。
|
|
63
|
+
</Step>
|
|
64
|
+
</Steps>
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 策略的工作原理
|
|
69
|
+
|
|
70
|
+
每当 Agent 运行工具时,Claude Code 会将 failproofai 作为子进程调用:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
Claude Code → failproofai --hook PreToolUse → reads stdin JSON
|
|
74
|
+
evaluates policies
|
|
75
|
+
writes decision to stdout
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
每个策略返回以下三种决策之一:
|
|
79
|
+
|
|
80
|
+
- **allow** - Agent 正常继续执行
|
|
81
|
+
- **deny** - 操作被阻止,并告知 Agent 原因
|
|
82
|
+
- **instruct** - 向 Agent 的提示词中追加额外上下文
|
|
83
|
+
|
|
84
|
+
<Note>
|
|
85
|
+
策略在你的本地进程中运行,不会向任何远程服务发送数据。
|
|
86
|
+
</Note>
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 数据存储
|
|
91
|
+
|
|
92
|
+
所有配置和日志均保存在本地:
|
|
93
|
+
|
|
94
|
+
| 路径 | 存储内容 |
|
|
95
|
+
|------|----------------|
|
|
96
|
+
| `~/.failproofai/policies-config.json` | 全局策略配置 |
|
|
97
|
+
| `~/.failproofai/hook-activity.jsonl` | Hook 执行历史记录 |
|
|
98
|
+
| `~/.failproofai/hook.log` | 自定义 hook 错误的调试日志 |
|
|
99
|
+
| `.failproofai/policies-config.json` | 项目级配置(可提交至版本库) |
|
|
100
|
+
| `.failproofai/policies-config.local.json` | 个人覆盖配置(已被 gitignore) |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 卸载
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
failproofai policies --uninstall
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
从 `~/.claude/settings.json` 中移除 hook 条目,`~/.failproofai/` 中的配置文件将保留。
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 下一步
|
|
115
|
+
|
|
116
|
+
<CardGroup cols={2}>
|
|
117
|
+
|
|
118
|
+
<Card title="配置" icon="gear" href="/zh/configuration">
|
|
119
|
+
作用域与配置文件格式
|
|
120
|
+
</Card>
|
|
121
|
+
|
|
122
|
+
<Card title="内置策略" icon="shield" href="/zh/built-in-policies">
|
|
123
|
+
全部 26 个策略及其参数说明
|
|
124
|
+
</Card>
|
|
125
|
+
|
|
126
|
+
<Card title="自定义策略" icon="code" href="/zh/custom-policies">
|
|
127
|
+
用 JavaScript 编写你自己的策略
|
|
128
|
+
</Card>
|
|
129
|
+
|
|
130
|
+
<Card title="Agent 监控" icon="chart-line" href="/zh/dashboard">
|
|
131
|
+
监控会话并查看策略活动记录
|
|
132
|
+
</Card>
|
|
133
|
+
|
|
134
|
+
</CardGroup>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Failproof AI
|
|
3
|
+
description: "管理钩子与策略,让你的 AI 智能体保持可靠并自主运行"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
[](https://www.npmjs.com/package/failproofai)
|
|
7
|
+
|
|
8
|
+
为 **Claude Code** 和 **Agents SDK** 提供钩子与策略,让你的 AI 智能体保持可靠并自主运行。
|
|
9
|
+
|
|
10
|
+
AI 智能体的失败方式往往是可预测的:执行破坏性命令、泄露密钥、偏离任务、陷入循环,或直接推送到主分支。一旦无人看管,小问题就会接连爆发。
|
|
11
|
+
|
|
12
|
+
Failproof AI 通过**策略**来解决这些问题——这些规则会钩入每一次智能体工具调用,能够**检测故障**、**缓解故障**(拦截、指令纠正、脱敏处理),并在需要关注时**提醒你**。本地仪表板让你事后随时查看所有详情。
|
|
13
|
+
|
|
14
|
+
一切均在本地运行,数据不会离开你的机器。
|
|
15
|
+
|
|
16
|
+
## 开始使用
|
|
17
|
+
|
|
18
|
+
<CardGroup cols={2}>
|
|
19
|
+
|
|
20
|
+
<Card title="26 条内置策略" icon="shield" href="/zh/built-in-policies">
|
|
21
|
+
开箱即用:拦截破坏性命令、防止密钥泄露、将智能体限制在项目边界内,以及更多功能。
|
|
22
|
+
</Card>
|
|
23
|
+
|
|
24
|
+
<Card title="自定义策略" icon="code" href="/zh/custom-policies">
|
|
25
|
+
使用简洁的 allow / deny / instruct API,用 JavaScript 编写你自己的规则。
|
|
26
|
+
</Card>
|
|
27
|
+
|
|
28
|
+
<Card title="智能体监控" icon="chart-line" href="/zh/dashboard">
|
|
29
|
+
查看智能体在你离开期间做了什么。浏览会话、检查工具调用、查看策略触发记录。
|
|
30
|
+
</Card>
|
|
31
|
+
|
|
32
|
+
<Card title="轻松配置" icon="gear" href="/zh/configuration">
|
|
33
|
+
无需编写代码即可调整任意策略。按项目或全局设置白名单、受保护分支或阈值。
|
|
34
|
+
</Card>
|
|
35
|
+
|
|
36
|
+
</CardGroup>
|
|
37
|
+
|
|
38
|
+
## 快速上手
|
|
39
|
+
|
|
40
|
+
<CodeGroup>
|
|
41
|
+
|
|
42
|
+
```bash npm
|
|
43
|
+
npm install -g failproofai
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```bash bun
|
|
47
|
+
bun add -g failproofai
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
</CodeGroup>
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
failproofai policies --install # enable policies
|
|
54
|
+
failproofai # launch the dashboard
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
完整的操作流程请参阅[入门指南](/zh/getting-started)。
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 包别名
|
|
3
|
+
description: "已注册的防拼写错误别名及其工作原理"
|
|
4
|
+
icon: copy
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 官方包
|
|
8
|
+
|
|
9
|
+
npm 的正式包名为 **`failproofai`**:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g failproofai
|
|
13
|
+
# or
|
|
14
|
+
bun add -g failproofai
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 为什么我们持有这些别名
|
|
20
|
+
|
|
21
|
+
供应链攻击中,拼写抢注(typosquatting)是一种常见手段——恶意攻击者注册一个与热门包名仅有一个按键之差的包名,不知情的用户在安装时一旦输错,便会运行攻击者控制的代码,并获得完整的系统访问权限。这正是 Failproof AI 所要防范的威胁。
|
|
22
|
+
|
|
23
|
+
为消除这一攻击面,**我们在 npm 上抢先注册了 `failproofai` 的所有常见拼写错误和格式变体**。这些包名均无法被第三方注册。每个别名都是一个轻量代理,安装后会自动委托给真正的 `failproofai` 包。
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 已注册的别名
|
|
28
|
+
|
|
29
|
+
**格式变体** —— "failproof ai" 的不同写法:
|
|
30
|
+
|
|
31
|
+
| 包名 | 状态 |
|
|
32
|
+
|---------|--------|
|
|
33
|
+
| `failproof` | ✅ 已发布 |
|
|
34
|
+
| `failproof-ai` | ⏳ 等待 npm 审核 |
|
|
35
|
+
| `fail-proof-ai` | ⏳ 等待 npm 审核 |
|
|
36
|
+
| `failproof_ai` | ⏳ 等待 npm 审核 |
|
|
37
|
+
| `fail_proof_ai` | ⏳ 等待 npm 审核 |
|
|
38
|
+
| `fail-proofai` | ⏳ 等待 npm 审核 |
|
|
39
|
+
|
|
40
|
+
**`failprof*` 拼写错误** —— "proof" 中缺少一个 `o`:
|
|
41
|
+
|
|
42
|
+
| 包名 | 状态 |
|
|
43
|
+
|---------|--------|
|
|
44
|
+
| `failprof` | ✅ 已发布 |
|
|
45
|
+
| `failprof-ai` | ✅ 已发布 |
|
|
46
|
+
| `failprofai` | ⏳ 等待 npm 审核 |
|
|
47
|
+
| `fail-prof-ai` | ⏳ 等待 npm 审核 |
|
|
48
|
+
| `failprof_ai` | ⏳ 等待 npm 审核 |
|
|
49
|
+
|
|
50
|
+
**`faliproof*` 拼写错误** —— `a` 和 `i` 互换位置:
|
|
51
|
+
|
|
52
|
+
| 包名 | 状态 |
|
|
53
|
+
|---------|--------|
|
|
54
|
+
| `faliproof` | ✅ 已发布 |
|
|
55
|
+
| `faliproof-ai` | ✅ 已发布 |
|
|
56
|
+
| `faliproofai` | ⏳ 等待 npm 审核 |
|
|
57
|
+
|
|
58
|
+
> **为什么显示"等待审核"?** npm 的防滥用政策会拦截那些在去除标点符号并经过相似度检测后与已有包名规范化为同一字符串的新包名。我们已联系 npm 支持团队,申请以防抢注为由保留这些名称,获批后将正式激活。
|
|
59
|
+
|
|
60
|
+
您可以通过以下命令验证任意已发布的别名均归我们所有:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm info failproof
|
|
64
|
+
# Look for: "ExosphereHost Inc." in the maintainers field
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 别名的工作原理
|
|
70
|
+
|
|
71
|
+
每个别名包的工作方式如下:
|
|
72
|
+
|
|
73
|
+
1. 将 `failproofai` 列为依赖项——安装时会运行真正的包(包括其 `postinstall` 钩子配置)
|
|
74
|
+
2. 暴露一个与自身同名的可执行文件(例如 `failprof-ai`),将所有参数代理转发给 `failproofai` 二进制文件
|
|
75
|
+
|
|
76
|
+
代理逻辑仅为两行 Node 脚本,没有任何业务逻辑、网络请求,也不会收集 `failproofai` 本身行为之外的任何数据。
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 如果您发现我们遗漏的包名
|
|
81
|
+
|
|
82
|
+
请在 [exospherehost/failproofai](https://github.com/exospherehost/failproofai/issues) 提交 issue,我们会及时注册。
|