failproofai 0.0.6-beta.2 → 0.0.6-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +7 -1
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.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/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/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/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/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/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/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 +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]__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]__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]__0i5kvry._.js → [root-of-the-server]__0om-5pe._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__05akje6._.js → [root-of-the-server]__111.vxi._.js} +2 -2
- 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_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- 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/{05j1px0r8yzh6.js → 02dqjyv6_9mhq.js} +2 -2
- package/.next/standalone/.next/static/chunks/{14cl9poem30dq.js → 070orfsl6.xal.js} +1 -1
- package/.next/standalone/.next/static/chunks/0mir9jdxn35~s.css +1 -0
- package/.next/standalone/.next/static/chunks/{00j0rr7rh8ef8.js → 0o547jv-k_k35.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ijk_kek9_wyx.js → 0pk2h2.mjxy.m.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0xpl.oscrakvx.js → 0rcwkbh24w38b.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1052sguyd-.ka.js → 140xx_tfr~lm_.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0npb~873.wvg3.js → 169_e4dq~1~b6.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0badv41uxa56..js → 17ne4p.1sw1jy.js} +1 -1
- package/.next/standalone/next.config.ts +6 -0
- package/.next/standalone/package.json +2 -2
- package/.next/standalone/server.js +1 -1
- package/bin/failproofai.mjs +91 -4
- package/dist/cli.mjs +1155 -54
- package/package.json +2 -2
- package/scripts/prune-standalone.mjs +128 -0
- package/src/auth/login.ts +104 -0
- package/src/auth/logout.ts +50 -0
- package/src/auth/token-store.ts +64 -0
- package/src/hooks/builtin-policies.ts +22 -20
- package/src/hooks/handler.ts +35 -15
- package/src/relay/daemon.ts +362 -0
- package/src/relay/pid.ts +76 -0
- package/src/relay/queue.ts +225 -0
- package/.next/standalone/.claude/settings.json +0 -316
- package/.next/standalone/.failproofai/policies/review-policies.mjs +0 -113
- package/.next/standalone/.failproofai/policies/workflow-policies.mjs +0 -63
- package/.next/standalone/.failproofai/policies-config.json +0 -39
- package/.next/standalone/.next/static/chunks/0gu_a.a80ritd.css +0 -1
- package/.next/standalone/AGENTS.md +0 -80
- package/.next/standalone/CHANGELOG.md +0 -151
- package/.next/standalone/CLAUDE.md +0 -165
- package/.next/standalone/CONTRIBUTING.md +0 -76
- package/.next/standalone/Dockerfile.docs +0 -12
- package/.next/standalone/LICENSE +0 -42
- package/.next/standalone/README.md +0 -301
- package/.next/standalone/bin/failproofai.mjs +0 -352
- package/.next/standalone/bun.lock +0 -1119
- package/.next/standalone/components.json +0 -23
- package/.next/standalone/dist/cli.mjs +0 -3595
- package/.next/standalone/dist/index.js +0 -80
- package/.next/standalone/docs/ar/architecture.mdx +0 -334
- package/.next/standalone/docs/ar/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/ar/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/ar/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/ar/cli/hook.mdx +0 -31
- package/.next/standalone/docs/ar/cli/install-policies.mdx +0 -48
- package/.next/standalone/docs/ar/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/ar/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/ar/cli/version.mdx +0 -13
- package/.next/standalone/docs/ar/configuration.mdx +0 -223
- package/.next/standalone/docs/ar/custom-policies.mdx +0 -354
- package/.next/standalone/docs/ar/dashboard.mdx +0 -142
- package/.next/standalone/docs/ar/examples.mdx +0 -307
- package/.next/standalone/docs/ar/for-agents.mdx +0 -39
- package/.next/standalone/docs/ar/getting-started.mdx +0 -187
- package/.next/standalone/docs/ar/introduction.mdx +0 -58
- package/.next/standalone/docs/ar/package-aliases.mdx +0 -82
- package/.next/standalone/docs/ar/testing.mdx +0 -261
- package/.next/standalone/docs/architecture.mdx +0 -332
- package/.next/standalone/docs/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/cli/hook.mdx +0 -30
- package/.next/standalone/docs/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/cli/version.mdx +0 -12
- package/.next/standalone/docs/configuration.mdx +0 -222
- package/.next/standalone/docs/custom-policies.mdx +0 -353
- package/.next/standalone/docs/dashboard.mdx +0 -142
- package/.next/standalone/docs/de/architecture.mdx +0 -332
- package/.next/standalone/docs/de/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/de/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/de/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/de/cli/hook.mdx +0 -30
- package/.next/standalone/docs/de/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/de/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/de/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/de/cli/version.mdx +0 -12
- package/.next/standalone/docs/de/configuration.mdx +0 -222
- package/.next/standalone/docs/de/custom-policies.mdx +0 -353
- package/.next/standalone/docs/de/dashboard.mdx +0 -142
- package/.next/standalone/docs/de/examples.mdx +0 -307
- package/.next/standalone/docs/de/for-agents.mdx +0 -38
- package/.next/standalone/docs/de/getting-started.mdx +0 -186
- package/.next/standalone/docs/de/introduction.mdx +0 -57
- package/.next/standalone/docs/de/package-aliases.mdx +0 -82
- package/.next/standalone/docs/de/testing.mdx +0 -260
- package/.next/standalone/docs/docs.json +0 -1002
- package/.next/standalone/docs/es/architecture.mdx +0 -332
- package/.next/standalone/docs/es/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/es/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/es/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/es/cli/hook.mdx +0 -30
- package/.next/standalone/docs/es/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/es/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/es/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/es/cli/version.mdx +0 -12
- package/.next/standalone/docs/es/configuration.mdx +0 -222
- package/.next/standalone/docs/es/custom-policies.mdx +0 -353
- package/.next/standalone/docs/es/dashboard.mdx +0 -142
- package/.next/standalone/docs/es/examples.mdx +0 -307
- package/.next/standalone/docs/es/for-agents.mdx +0 -38
- package/.next/standalone/docs/es/getting-started.mdx +0 -186
- package/.next/standalone/docs/es/introduction.mdx +0 -57
- package/.next/standalone/docs/es/package-aliases.mdx +0 -82
- package/.next/standalone/docs/es/testing.mdx +0 -260
- package/.next/standalone/docs/examples.mdx +0 -307
- package/.next/standalone/docs/favicon.ico +0 -0
- package/.next/standalone/docs/for-agents.mdx +0 -38
- package/.next/standalone/docs/fr/architecture.mdx +0 -332
- package/.next/standalone/docs/fr/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/fr/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/fr/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/fr/cli/hook.mdx +0 -30
- package/.next/standalone/docs/fr/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/fr/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/fr/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/fr/cli/version.mdx +0 -12
- package/.next/standalone/docs/fr/configuration.mdx +0 -222
- package/.next/standalone/docs/fr/custom-policies.mdx +0 -353
- package/.next/standalone/docs/fr/dashboard.mdx +0 -142
- package/.next/standalone/docs/fr/examples.mdx +0 -307
- package/.next/standalone/docs/fr/for-agents.mdx +0 -38
- package/.next/standalone/docs/fr/getting-started.mdx +0 -186
- package/.next/standalone/docs/fr/introduction.mdx +0 -57
- package/.next/standalone/docs/fr/package-aliases.mdx +0 -82
- package/.next/standalone/docs/fr/testing.mdx +0 -260
- package/.next/standalone/docs/getting-started.mdx +0 -186
- package/.next/standalone/docs/he/architecture.mdx +0 -333
- package/.next/standalone/docs/he/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/he/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/he/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/he/cli/hook.mdx +0 -30
- package/.next/standalone/docs/he/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/he/cli/list-policies.mdx +0 -32
- package/.next/standalone/docs/he/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/he/cli/version.mdx +0 -12
- package/.next/standalone/docs/he/configuration.mdx +0 -223
- package/.next/standalone/docs/he/custom-policies.mdx +0 -353
- package/.next/standalone/docs/he/dashboard.mdx +0 -142
- package/.next/standalone/docs/he/examples.mdx +0 -307
- package/.next/standalone/docs/he/for-agents.mdx +0 -38
- package/.next/standalone/docs/he/getting-started.mdx +0 -186
- package/.next/standalone/docs/he/introduction.mdx +0 -57
- package/.next/standalone/docs/he/package-aliases.mdx +0 -82
- package/.next/standalone/docs/he/testing.mdx +0 -260
- package/.next/standalone/docs/hi/architecture.mdx +0 -334
- package/.next/standalone/docs/hi/built-in-policies.mdx +0 -576
- package/.next/standalone/docs/hi/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/hi/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/hi/cli/hook.mdx +0 -30
- package/.next/standalone/docs/hi/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/hi/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/hi/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/hi/cli/version.mdx +0 -12
- package/.next/standalone/docs/hi/configuration.mdx +0 -222
- package/.next/standalone/docs/hi/custom-policies.mdx +0 -354
- package/.next/standalone/docs/hi/dashboard.mdx +0 -142
- package/.next/standalone/docs/hi/examples.mdx +0 -309
- package/.next/standalone/docs/hi/for-agents.mdx +0 -38
- package/.next/standalone/docs/hi/getting-started.mdx +0 -187
- package/.next/standalone/docs/hi/introduction.mdx +0 -57
- package/.next/standalone/docs/hi/package-aliases.mdx +0 -82
- package/.next/standalone/docs/hi/testing.mdx +0 -260
- package/.next/standalone/docs/i18n/README.ar.md +0 -312
- package/.next/standalone/docs/i18n/README.de.md +0 -307
- package/.next/standalone/docs/i18n/README.es.md +0 -307
- package/.next/standalone/docs/i18n/README.fr.md +0 -307
- package/.next/standalone/docs/i18n/README.he.md +0 -312
- package/.next/standalone/docs/i18n/README.hi.md +0 -307
- package/.next/standalone/docs/i18n/README.it.md +0 -307
- package/.next/standalone/docs/i18n/README.ja.md +0 -307
- package/.next/standalone/docs/i18n/README.ko.md +0 -307
- package/.next/standalone/docs/i18n/README.pt-br.md +0 -307
- package/.next/standalone/docs/i18n/README.ru.md +0 -308
- package/.next/standalone/docs/i18n/README.tr.md +0 -307
- package/.next/standalone/docs/i18n/README.vi.md +0 -307
- package/.next/standalone/docs/i18n/README.zh.md +0 -307
- package/.next/standalone/docs/introduction.mdx +0 -57
- package/.next/standalone/docs/it/architecture.mdx +0 -334
- package/.next/standalone/docs/it/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/it/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/it/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/it/cli/hook.mdx +0 -30
- package/.next/standalone/docs/it/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/it/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/it/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/it/cli/version.mdx +0 -12
- package/.next/standalone/docs/it/configuration.mdx +0 -222
- package/.next/standalone/docs/it/custom-policies.mdx +0 -353
- package/.next/standalone/docs/it/dashboard.mdx +0 -142
- package/.next/standalone/docs/it/examples.mdx +0 -307
- package/.next/standalone/docs/it/for-agents.mdx +0 -38
- package/.next/standalone/docs/it/getting-started.mdx +0 -186
- package/.next/standalone/docs/it/introduction.mdx +0 -57
- package/.next/standalone/docs/it/package-aliases.mdx +0 -82
- package/.next/standalone/docs/it/testing.mdx +0 -260
- package/.next/standalone/docs/ja/architecture.mdx +0 -332
- package/.next/standalone/docs/ja/built-in-policies.mdx +0 -572
- package/.next/standalone/docs/ja/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/ja/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/ja/cli/hook.mdx +0 -30
- package/.next/standalone/docs/ja/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/ja/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/ja/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/ja/cli/version.mdx +0 -12
- package/.next/standalone/docs/ja/configuration.mdx +0 -222
- package/.next/standalone/docs/ja/custom-policies.mdx +0 -353
- package/.next/standalone/docs/ja/dashboard.mdx +0 -142
- package/.next/standalone/docs/ja/examples.mdx +0 -307
- package/.next/standalone/docs/ja/for-agents.mdx +0 -38
- package/.next/standalone/docs/ja/getting-started.mdx +0 -186
- package/.next/standalone/docs/ja/introduction.mdx +0 -57
- package/.next/standalone/docs/ja/package-aliases.mdx +0 -82
- package/.next/standalone/docs/ja/testing.mdx +0 -260
- package/.next/standalone/docs/ko/architecture.mdx +0 -332
- package/.next/standalone/docs/ko/built-in-policies.mdx +0 -572
- package/.next/standalone/docs/ko/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/ko/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/ko/cli/hook.mdx +0 -30
- package/.next/standalone/docs/ko/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/ko/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/ko/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/ko/cli/version.mdx +0 -12
- package/.next/standalone/docs/ko/configuration.mdx +0 -222
- package/.next/standalone/docs/ko/custom-policies.mdx +0 -353
- package/.next/standalone/docs/ko/dashboard.mdx +0 -142
- package/.next/standalone/docs/ko/examples.mdx +0 -307
- package/.next/standalone/docs/ko/for-agents.mdx +0 -38
- package/.next/standalone/docs/ko/getting-started.mdx +0 -186
- package/.next/standalone/docs/ko/introduction.mdx +0 -57
- package/.next/standalone/docs/ko/package-aliases.mdx +0 -82
- package/.next/standalone/docs/ko/testing.mdx +0 -260
- package/.next/standalone/docs/logo/dark.svg +0 -21
- package/.next/standalone/docs/logo/exosphere-dark.png +0 -0
- package/.next/standalone/docs/logo/exosphere-light.png +0 -0
- package/.next/standalone/docs/logo/light.svg +0 -21
- package/.next/standalone/docs/package-aliases.mdx +0 -82
- package/.next/standalone/docs/pt-br/architecture.mdx +0 -332
- package/.next/standalone/docs/pt-br/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/pt-br/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/pt-br/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/pt-br/cli/hook.mdx +0 -30
- package/.next/standalone/docs/pt-br/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/pt-br/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/pt-br/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/pt-br/cli/version.mdx +0 -12
- package/.next/standalone/docs/pt-br/configuration.mdx +0 -222
- package/.next/standalone/docs/pt-br/custom-policies.mdx +0 -353
- package/.next/standalone/docs/pt-br/dashboard.mdx +0 -142
- package/.next/standalone/docs/pt-br/examples.mdx +0 -307
- package/.next/standalone/docs/pt-br/for-agents.mdx +0 -38
- package/.next/standalone/docs/pt-br/getting-started.mdx +0 -186
- package/.next/standalone/docs/pt-br/introduction.mdx +0 -57
- package/.next/standalone/docs/pt-br/package-aliases.mdx +0 -82
- package/.next/standalone/docs/pt-br/testing.mdx +0 -260
- package/.next/standalone/docs/ru/architecture.mdx +0 -333
- package/.next/standalone/docs/ru/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/ru/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/ru/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/ru/cli/hook.mdx +0 -30
- package/.next/standalone/docs/ru/cli/install-policies.mdx +0 -48
- package/.next/standalone/docs/ru/cli/list-policies.mdx +0 -32
- package/.next/standalone/docs/ru/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/ru/cli/version.mdx +0 -12
- package/.next/standalone/docs/ru/configuration.mdx +0 -222
- package/.next/standalone/docs/ru/custom-policies.mdx +0 -354
- package/.next/standalone/docs/ru/dashboard.mdx +0 -142
- package/.next/standalone/docs/ru/examples.mdx +0 -309
- package/.next/standalone/docs/ru/for-agents.mdx +0 -38
- package/.next/standalone/docs/ru/getting-started.mdx +0 -186
- package/.next/standalone/docs/ru/introduction.mdx +0 -57
- package/.next/standalone/docs/ru/package-aliases.mdx +0 -82
- package/.next/standalone/docs/ru/testing.mdx +0 -260
- package/.next/standalone/docs/testing.mdx +0 -260
- package/.next/standalone/docs/tr/architecture.mdx +0 -333
- package/.next/standalone/docs/tr/built-in-policies.mdx +0 -574
- package/.next/standalone/docs/tr/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/tr/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/tr/cli/hook.mdx +0 -30
- package/.next/standalone/docs/tr/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/tr/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/tr/cli/remove-policies.mdx +0 -44
- package/.next/standalone/docs/tr/cli/version.mdx +0 -12
- package/.next/standalone/docs/tr/configuration.mdx +0 -222
- package/.next/standalone/docs/tr/custom-policies.mdx +0 -353
- package/.next/standalone/docs/tr/dashboard.mdx +0 -142
- package/.next/standalone/docs/tr/examples.mdx +0 -308
- package/.next/standalone/docs/tr/for-agents.mdx +0 -38
- package/.next/standalone/docs/tr/getting-started.mdx +0 -186
- package/.next/standalone/docs/tr/introduction.mdx +0 -57
- package/.next/standalone/docs/tr/package-aliases.mdx +0 -82
- package/.next/standalone/docs/tr/testing.mdx +0 -260
- package/.next/standalone/docs/vi/architecture.mdx +0 -334
- package/.next/standalone/docs/vi/built-in-policies.mdx +0 -575
- package/.next/standalone/docs/vi/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/vi/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/vi/cli/hook.mdx +0 -30
- package/.next/standalone/docs/vi/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/vi/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/vi/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/vi/cli/version.mdx +0 -13
- package/.next/standalone/docs/vi/configuration.mdx +0 -222
- package/.next/standalone/docs/vi/custom-policies.mdx +0 -353
- package/.next/standalone/docs/vi/dashboard.mdx +0 -142
- package/.next/standalone/docs/vi/examples.mdx +0 -308
- package/.next/standalone/docs/vi/for-agents.mdx +0 -38
- package/.next/standalone/docs/vi/getting-started.mdx +0 -186
- package/.next/standalone/docs/vi/introduction.mdx +0 -57
- package/.next/standalone/docs/vi/package-aliases.mdx +0 -82
- package/.next/standalone/docs/vi/testing.mdx +0 -260
- package/.next/standalone/docs/zh/architecture.mdx +0 -332
- package/.next/standalone/docs/zh/built-in-policies.mdx +0 -572
- package/.next/standalone/docs/zh/cli/dashboard.mdx +0 -28
- package/.next/standalone/docs/zh/cli/environment-variables.mdx +0 -34
- package/.next/standalone/docs/zh/cli/hook.mdx +0 -30
- package/.next/standalone/docs/zh/cli/install-policies.mdx +0 -47
- package/.next/standalone/docs/zh/cli/list-policies.mdx +0 -31
- package/.next/standalone/docs/zh/cli/remove-policies.mdx +0 -43
- package/.next/standalone/docs/zh/cli/version.mdx +0 -12
- package/.next/standalone/docs/zh/configuration.mdx +0 -222
- package/.next/standalone/docs/zh/custom-policies.mdx +0 -353
- package/.next/standalone/docs/zh/dashboard.mdx +0 -142
- package/.next/standalone/docs/zh/examples.mdx +0 -307
- package/.next/standalone/docs/zh/for-agents.mdx +0 -38
- package/.next/standalone/docs/zh/getting-started.mdx +0 -186
- package/.next/standalone/docs/zh/introduction.mdx +0 -57
- package/.next/standalone/docs/zh/package-aliases.mdx +0 -82
- package/.next/standalone/docs/zh/testing.mdx +0 -260
- package/.next/standalone/eslint.config.mjs +0 -15
- package/.next/standalone/examples/convention-policies/security-policies.mjs +0 -40
- package/.next/standalone/examples/convention-policies/workflow-policies.mjs +0 -41
- package/.next/standalone/examples/policies-advanced/index.js +0 -103
- package/.next/standalone/examples/policies-advanced/utils.js +0 -35
- package/.next/standalone/examples/policies-basic.js +0 -77
- package/.next/standalone/examples/policies-notification.js +0 -104
- package/.next/standalone/node_modules/@img/colour/color.cjs +0 -1594
- package/.next/standalone/node_modules/@img/colour/index.cjs +0 -1
- package/.next/standalone/node_modules/@img/colour/package.json +0 -45
- package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +0 -46
- package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +0 -221
- package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
- package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
- package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/versions.json +0 -30
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
- package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
- package/.next/standalone/node_modules/@img/sharp-linux-x64/package.json +0 -46
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
- package/.next/standalone/node_modules/detect-libc/lib/detect-libc.js +0 -313
- package/.next/standalone/node_modules/detect-libc/lib/elf.js +0 -39
- package/.next/standalone/node_modules/detect-libc/lib/filesystem.js +0 -51
- package/.next/standalone/node_modules/detect-libc/lib/process.js +0 -24
- package/.next/standalone/node_modules/detect-libc/package.json +0 -44
- package/.next/standalone/node_modules/sharp/lib/channel.js +0 -177
- package/.next/standalone/node_modules/sharp/lib/colour.js +0 -195
- package/.next/standalone/node_modules/sharp/lib/composite.js +0 -212
- package/.next/standalone/node_modules/sharp/lib/constructor.js +0 -499
- package/.next/standalone/node_modules/sharp/lib/index.js +0 -16
- package/.next/standalone/node_modules/sharp/lib/input.js +0 -809
- package/.next/standalone/node_modules/sharp/lib/is.js +0 -143
- package/.next/standalone/node_modules/sharp/lib/libvips.js +0 -207
- package/.next/standalone/node_modules/sharp/lib/operation.js +0 -1016
- package/.next/standalone/node_modules/sharp/lib/output.js +0 -1666
- package/.next/standalone/node_modules/sharp/lib/resize.js +0 -595
- package/.next/standalone/node_modules/sharp/lib/sharp.js +0 -121
- package/.next/standalone/node_modules/sharp/lib/utility.js +0 -291
- package/.next/standalone/node_modules/sharp/node_modules/semver/classes/comparator.js +0 -143
- package/.next/standalone/node_modules/sharp/node_modules/semver/classes/range.js +0 -557
- package/.next/standalone/node_modules/sharp/node_modules/semver/classes/semver.js +0 -333
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/cmp.js +0 -54
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/coerce.js +0 -62
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/compare.js +0 -7
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/eq.js +0 -5
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gt.js +0 -5
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gte.js +0 -5
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lt.js +0 -5
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lte.js +0 -5
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/neq.js +0 -5
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/parse.js +0 -18
- package/.next/standalone/node_modules/sharp/node_modules/semver/functions/satisfies.js +0 -12
- package/.next/standalone/node_modules/sharp/node_modules/semver/internal/constants.js +0 -37
- package/.next/standalone/node_modules/sharp/node_modules/semver/internal/debug.js +0 -11
- package/.next/standalone/node_modules/sharp/node_modules/semver/internal/identifiers.js +0 -29
- package/.next/standalone/node_modules/sharp/node_modules/semver/internal/lrucache.js +0 -42
- package/.next/standalone/node_modules/sharp/node_modules/semver/internal/parse-options.js +0 -17
- package/.next/standalone/node_modules/sharp/node_modules/semver/internal/re.js +0 -223
- package/.next/standalone/node_modules/sharp/node_modules/semver/package.json +0 -78
- package/.next/standalone/node_modules/sharp/package.json +0 -202
- package/.next/standalone/scripts/alias-proxy.js +0 -18
- package/.next/standalone/scripts/dev.ts +0 -3
- package/.next/standalone/scripts/install-telemetry.mjs +0 -108
- package/.next/standalone/scripts/launch.ts +0 -83
- package/.next/standalone/scripts/parse-script-args.ts +0 -87
- package/.next/standalone/scripts/postinstall.mjs +0 -121
- package/.next/standalone/scripts/preuninstall.mjs +0 -131
- package/.next/standalone/scripts/publish-aliases.mjs +0 -87
- package/.next/standalone/scripts/start.ts +0 -3
- package/.next/standalone/scripts/sync-hook-events-prompt.md +0 -60
- package/.next/standalone/scripts/translate-docs/cache.ts +0 -62
- package/.next/standalone/scripts/translate-docs/cli.ts +0 -357
- package/.next/standalone/scripts/translate-docs/config.ts +0 -248
- package/.next/standalone/scripts/translate-docs/mdx-translator.ts +0 -153
- package/.next/standalone/scripts/translate-docs/mintlify-nav.ts +0 -107
- package/.next/standalone/scripts/translate-docs/readme-translator.ts +0 -154
- package/.next/standalone/scripts/translate-docs/translator.ts +0 -68
- package/.next/standalone/scripts/translate-docs/types.ts +0 -43
- package/.next/standalone/src/cli-error.ts +0 -18
- package/.next/standalone/src/hooks/builtin-policies.ts +0 -1613
- package/.next/standalone/src/hooks/custom-hooks-loader.ts +0 -205
- package/.next/standalone/src/hooks/custom-hooks-registry.ts +0 -30
- package/.next/standalone/src/hooks/handler.ts +0 -202
- package/.next/standalone/src/hooks/hook-activity-store.ts +0 -349
- package/.next/standalone/src/hooks/hook-logger.ts +0 -133
- package/.next/standalone/src/hooks/hook-telemetry.ts +0 -43
- package/.next/standalone/src/hooks/hooks-config.ts +0 -166
- package/.next/standalone/src/hooks/install-prompt.ts +0 -357
- package/.next/standalone/src/hooks/llm-client.ts +0 -90
- package/.next/standalone/src/hooks/loader-utils.ts +0 -178
- package/.next/standalone/src/hooks/manager.ts +0 -692
- package/.next/standalone/src/hooks/policy-evaluator.ts +0 -224
- package/.next/standalone/src/hooks/policy-helpers.ts +0 -16
- package/.next/standalone/src/hooks/policy-registry.ts +0 -90
- package/.next/standalone/src/hooks/policy-types.ts +0 -77
- package/.next/standalone/src/hooks/types.ts +0 -63
- package/.next/standalone/src/index.ts +0 -19
- package/.next/standalone/src/posthog-key.ts +0 -5
- package/.next/standalone/tailwind.config.ts +0 -11
- package/.next/standalone/tsconfig.json +0 -42
- package/.next/standalone/vitest.config.e2e.mts +0 -24
- package/.next/standalone/vitest.config.mts +0 -23
- /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_ssgManifest.js +0 -0
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
---
|
|
3
|
-
title: Пользовательские политики
|
|
4
|
-
description: "Напишите собственные политики на JavaScript - обеспечьте соблюдение соглашений, предотвратите дрейф, выявляйте сбои, интегрируйтесь с внешними системами"
|
|
5
|
-
icon: code
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Пользовательские политики позволяют писать правила для любого поведения агента: обеспечивать соблюдение соглашений проекта, предотвращать дрейф, блокировать деструктивные операции, выявлять зависшие агенты или интегрироваться со Slack, рабочими процессами одобрения и многим другим. Они используют ту же систему событий hook и решения `allow`, `deny`, `instruct`, что и встроенные политики.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Быстрый пример
|
|
13
|
-
|
|
14
|
-
```js
|
|
15
|
-
// my-policies.js
|
|
16
|
-
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
17
|
-
|
|
18
|
-
customPolicies.add({
|
|
19
|
-
name: "no-production-writes",
|
|
20
|
-
description: "Block writes to paths containing 'production'",
|
|
21
|
-
match: { events: ["PreToolUse"] },
|
|
22
|
-
fn: async (ctx) => {
|
|
23
|
-
if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
|
|
24
|
-
const path = ctx.toolInput?.file_path ?? "";
|
|
25
|
-
if (path.includes("production")) {
|
|
26
|
-
return deny("Writes to production paths are blocked");
|
|
27
|
-
}
|
|
28
|
-
return allow();
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Установите её:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
failproofai policies --install --custom ./my-policies.js
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Два способа загрузки пользовательских политик
|
|
42
|
-
|
|
43
|
-
### Вариант 1: На основе соглашения (рекомендуется)
|
|
44
|
-
|
|
45
|
-
Разместите файлы `*policies.{js,mjs,ts}` в `.failproofai/policies/` и они будут загружены автоматически — без флагов или изменений конфигурации. Это работает как git hooks: положите файл, и он просто работает.
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
# На уровне проекта — добавляется в git, совместно используется командой
|
|
49
|
-
.failproofai/policies/security-policies.mjs
|
|
50
|
-
.failproofai/policies/workflow-policies.mjs
|
|
51
|
-
|
|
52
|
-
# На уровне пользователя — личные, применяются ко всем проектам
|
|
53
|
-
~/.failproofai/policies/my-policies.mjs
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**Как это работает:**
|
|
57
|
-
- Оба каталога (проекта и пользователя) сканируются (объединение — не первый найденный)
|
|
58
|
-
- Файлы загружаются в алфавитном порядке в каждом каталоге. Добавьте префикс `01-`, `02-` для управления порядком
|
|
59
|
-
- Загружаются только файлы, соответствующие `*policies.{js,mjs,ts}`; остальные файлы игнорируются
|
|
60
|
-
- Каждый файл загружается независимо (fail-open для каждого файла)
|
|
61
|
-
- Работает рядом с явными `--custom` и встроенными политиками
|
|
62
|
-
|
|
63
|
-
<Tip>
|
|
64
|
-
Политики на основе соглашения — самый простой способ установить стандарт качества для вашей организации. Добавьте `.failproofai/policies/` в git, и каждый участник команды получит одни и те же правила автоматически — не требуется настройка для каждого разработчика. По мере того как ваша команда обнаруживает новые режимы сбоев, добавьте политику и отправьте её. Со временем эти политики становятся живым стандартом качества, который улучшается с каждым вкладом.
|
|
65
|
-
</Tip>
|
|
66
|
-
|
|
67
|
-
### Вариант 2: Явный путь к файлу
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# Установка с пользовательским файлом политик
|
|
71
|
-
failproofai policies --install --custom ./my-policies.js
|
|
72
|
-
|
|
73
|
-
# Замена пути к файлу политик
|
|
74
|
-
failproofai policies --install --custom ./new-policies.js
|
|
75
|
-
|
|
76
|
-
# Удаление пути к пользовательским политикам из конфигурации
|
|
77
|
-
failproofai policies --uninstall --custom
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
Разрешённый абсолютный путь сохраняется в `policies-config.json` как `customPoliciesPath`. Файл загружается заново при каждом событии hook — кеширования между событиями нет.
|
|
81
|
-
|
|
82
|
-
### Использование обоих способов вместе
|
|
83
|
-
|
|
84
|
-
Политики на основе соглашения и явный файл `--custom` могут сосуществовать. Порядок загрузки:
|
|
85
|
-
|
|
86
|
-
1. Файл с явным `customPoliciesPath` (если настроен)
|
|
87
|
-
2. Файлы соглашения проекта (`{cwd}/.failproofai/policies/`, в алфавитном порядке)
|
|
88
|
-
3. Файлы соглашения пользователя (`~/.failproofai/policies/`, в алфавитном порядке)
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## API
|
|
93
|
-
|
|
94
|
-
### Импорт
|
|
95
|
-
|
|
96
|
-
```js
|
|
97
|
-
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### `customPolicies.add(hook)`
|
|
101
|
-
|
|
102
|
-
Регистрирует политику. Вызывайте столько раз, сколько нужно для нескольких политик в одном файле.
|
|
103
|
-
|
|
104
|
-
```ts
|
|
105
|
-
customPolicies.add({
|
|
106
|
-
name: string; // обязателен - уникальный идентификатор
|
|
107
|
-
description?: string; // показывается в выводе `failproofai policies`
|
|
108
|
-
match?: { events?: HookEventType[] }; // фильтр по типу события; опустите для соответствия всем
|
|
109
|
-
fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
|
|
110
|
-
});
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Вспомогательные функции принятия решений
|
|
114
|
-
|
|
115
|
-
| Функция | Эффект | Когда использовать |
|
|
116
|
-
|---------|--------|-------------------|
|
|
117
|
-
| `allow()` | Разрешить операцию молча | Действие безопасно, сообщение не требуется |
|
|
118
|
-
| `deny(message)` | Блокировать операцию | Агент не должен выполнять это действие |
|
|
119
|
-
| `instruct(message)` | Добавить контекст без блокировки | Дать агенту дополнительный контекст для остановки на пути |
|
|
120
|
-
|
|
121
|
-
`deny(message)` - сообщение появляется Claude с префиксом `"Blocked by failproofai:"`. Один `deny` прерывает всю дальнейшую оценку.
|
|
122
|
-
|
|
123
|
-
`instruct(message)` - сообщение добавляется в контекст Claude для текущего вызова инструмента. Все сообщения `instruct` накапливаются и доставляются вместе.
|
|
124
|
-
|
|
125
|
-
<Tip>
|
|
126
|
-
Вы можете добавить дополнительное руководство к любому сообщению `deny` или `instruct`, добавив поле `hint` в `policyParams` — без изменения кода. Это работает для пользовательских (`custom/`), проектных соглашений (`.failproofai-project/`) и пользовательских соглашений (`.failproofai-user/`) политик. Смотрите [Configuration → hint](/ru/configuration#hint-cross-cutting) для деталей.
|
|
127
|
-
</Tip>
|
|
128
|
-
|
|
129
|
-
### Информационные сообщения allow
|
|
130
|
-
|
|
131
|
-
`allow(message)` разрешает операцию **и** отправляет информационное сообщение обратно Claude. Сообщение доставляется как `additionalContext` в ответе stdout обработчика hook — тот же механизм, используемый `instruct`, но семантически отличающийся: это обновление статуса, а не предупреждение.
|
|
132
|
-
|
|
133
|
-
| Функция | Эффект | Когда использовать |
|
|
134
|
-
|---------|--------|-------------------|
|
|
135
|
-
| `allow(message)` | Разрешить и отправить контекст Claude | Подтвердить прохождение проверки или объяснить, почему проверка была пропущена |
|
|
136
|
-
|
|
137
|
-
Примеры использования:
|
|
138
|
-
- **Подтверждения статуса:** `allow("All CI checks passed.")` — сообщает Claude, что всё хорошо
|
|
139
|
-
- **Fail-open объяснения:** `allow("GitHub CLI not installed, skipping CI check.")` — сообщает Claude, почему проверка была пропущена, чтобы у него был полный контекст
|
|
140
|
-
- **Несколько сообщений накапливаются:** если несколько политик каждая возвращает `allow(message)`, все сообщения объединяются с новыми строками и доставляются вместе
|
|
141
|
-
|
|
142
|
-
```js
|
|
143
|
-
customPolicies.add({
|
|
144
|
-
name: "confirm-branch-status",
|
|
145
|
-
match: { events: ["Stop"] },
|
|
146
|
-
fn: async (ctx) => {
|
|
147
|
-
const cwd = ctx.session?.cwd;
|
|
148
|
-
if (!cwd) return allow("No working directory, skipping branch check.");
|
|
149
|
-
|
|
150
|
-
// ... check branch status ...
|
|
151
|
-
if (allPushed) {
|
|
152
|
-
return allow("Branch is up to date with remote.");
|
|
153
|
-
}
|
|
154
|
-
return deny("Unpushed changes detected.");
|
|
155
|
-
},
|
|
156
|
-
});
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Поля `PolicyContext`
|
|
160
|
-
|
|
161
|
-
| Поле | Тип | Описание |
|
|
162
|
-
|------|-----|---------|
|
|
163
|
-
| `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
|
|
164
|
-
| `toolName` | `string \| undefined` | Вызываемый инструмент (например `"Bash"`, `"Write"`, `"Read"`) |
|
|
165
|
-
| `toolInput` | `Record<string, unknown> \| undefined` | Входные параметры инструмента |
|
|
166
|
-
| `payload` | `Record<string, unknown>` | Полная необработанная полезная нагрузка события из Claude Code |
|
|
167
|
-
| `session` | `SessionMetadata \| undefined` | Контекст сессии (см. ниже) |
|
|
168
|
-
|
|
169
|
-
### Поля `SessionMetadata`
|
|
170
|
-
|
|
171
|
-
| Поле | Тип | Описание |
|
|
172
|
-
|------|-----|---------|
|
|
173
|
-
| `sessionId` | `string` | Идентификатор сессии Claude Code |
|
|
174
|
-
| `cwd` | `string` | Рабочий каталог сессии Claude Code |
|
|
175
|
-
| `transcriptPath` | `string` | Путь к файлу транскрипта JSONL сессии |
|
|
176
|
-
|
|
177
|
-
### Типы событий
|
|
178
|
-
|
|
179
|
-
| Событие | Когда срабатывает | Содержимое `toolInput` |
|
|
180
|
-
|--------|------------------|----------------------|
|
|
181
|
-
| `PreToolUse` | Перед запуском инструмента Claude | Входные данные инструмента (например `{ command: "..." }` для Bash) |
|
|
182
|
-
| `PostToolUse` | После завершения инструмента | Входные данные инструмента + `tool_result` (выход) |
|
|
183
|
-
| `Notification` | Когда Claude отправляет уведомление | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - hooks должны всегда возвращать `allow()`, они не могут блокировать уведомления |
|
|
184
|
-
| `Stop` | Когда сессия Claude заканчивается | Пусто |
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## Порядок оценки
|
|
189
|
-
|
|
190
|
-
Политики оцениваются в этом порядке:
|
|
191
|
-
|
|
192
|
-
1. Встроенные политики (в порядке определения)
|
|
193
|
-
2. Явные пользовательские политики из `customPoliciesPath` (в порядке `.add()`)
|
|
194
|
-
3. Политики соглашения из проекта `.failproofai/policies/` (файлы в алфавитном порядке, `.add()` порядок внутри)
|
|
195
|
-
4. Политики соглашения из пользователя `~/.failproofai/policies/` (файлы в алфавитном порядке, `.add()` порядок внутри)
|
|
196
|
-
|
|
197
|
-
<Note>
|
|
198
|
-
Первый `deny` прерывает все последующие политики. Все сообщения `instruct` накапливаются и доставляются вместе.
|
|
199
|
-
</Note>
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## Транзитивные импорты
|
|
204
|
-
|
|
205
|
-
Файлы пользовательских политик могут импортировать локальные модули, используя относительные пути:
|
|
206
|
-
|
|
207
|
-
```js
|
|
208
|
-
// my-policies.js
|
|
209
|
-
import { isBlockedPath } from "./utils.js";
|
|
210
|
-
import { checkApproval } from "./approval-client.js";
|
|
211
|
-
|
|
212
|
-
customPolicies.add({
|
|
213
|
-
name: "approval-gate",
|
|
214
|
-
fn: async (ctx) => {
|
|
215
|
-
if (ctx.toolName !== "Bash") return allow();
|
|
216
|
-
const approved = await checkApproval(ctx.toolInput?.command, ctx.session?.sessionId);
|
|
217
|
-
return approved ? allow() : deny("Approval required for this command");
|
|
218
|
-
},
|
|
219
|
-
});
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
Все относительные импорты, доступные из файла входа, разрешаются. Это реализуется путём переписывания импортов `from "failproofai"` на фактический путь dist и создания временных файлов `.mjs` для обеспечения совместимости ESM.
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## Фильтрация по типу события
|
|
227
|
-
|
|
228
|
-
Используйте `match.events` для ограничения, когда срабатывает политика:
|
|
229
|
-
|
|
230
|
-
```js
|
|
231
|
-
customPolicies.add({
|
|
232
|
-
name: "require-summary-on-stop",
|
|
233
|
-
match: { events: ["Stop"] },
|
|
234
|
-
fn: async (ctx) => {
|
|
235
|
-
// Срабатывает только при завершении сессии
|
|
236
|
-
// ctx.session.transcriptPath содержит полный журнал сессии
|
|
237
|
-
return allow();
|
|
238
|
-
},
|
|
239
|
-
});
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
Опустите `match` полностью, чтобы срабатывать при каждом типе события.
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## Обработка ошибок и режимы сбоя
|
|
247
|
-
|
|
248
|
-
Пользовательские политики — **fail-open**: ошибки никогда не блокируют встроенные политики и не приводят к краху обработчика hook.
|
|
249
|
-
|
|
250
|
-
| Сбой | Поведение |
|
|
251
|
-
|------|-----------|
|
|
252
|
-
| `customPoliciesPath` не установлен | Явные пользовательские политики не запускаются; встроенные и политики соглашения продолжают работать нормально |
|
|
253
|
-
| Файл не найден | Предупреждение записывается в `~/.failproofai/hook.log`; встроенные продолжают работать |
|
|
254
|
-
| Синтаксическая/ошибка импорта (явная) | Ошибка записывается в `~/.failproofai/hook.log`; явные пользовательские политики пропускаются |
|
|
255
|
-
| Синтаксическая/ошибка импорта (соглашение) | Ошибка записывается; этот файл пропускается, остальные файлы соглашения всё ещё загружаются |
|
|
256
|
-
| `fn` выбрасывает исключение во время выполнения | Ошибка записывается; этот hook рассматривается как `allow`; остальные hooks продолжают работу |
|
|
257
|
-
| `fn` работает дольше 10 сек | Тайм-аут записывается; рассматривается как `allow` |
|
|
258
|
-
| Каталог соглашения отсутствует | Политики соглашения не запускаются; нет ошибки |
|
|
259
|
-
|
|
260
|
-
<Tip>
|
|
261
|
-
Для отладки ошибок пользовательских политик смотрите файл журнала:
|
|
262
|
-
|
|
263
|
-
```bash
|
|
264
|
-
tail -f ~/.failproofai/hook.log
|
|
265
|
-
```
|
|
266
|
-
</Tip>
|
|
267
|
-
|
|
268
|
-
---
|
|
269
|
-
|
|
270
|
-
## Полный пример: несколько политик
|
|
271
|
-
|
|
272
|
-
```js
|
|
273
|
-
// my-policies.js
|
|
274
|
-
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
275
|
-
|
|
276
|
-
// Запретить агенту писать в каталог secrets/
|
|
277
|
-
customPolicies.add({
|
|
278
|
-
name: "block-secrets-dir",
|
|
279
|
-
description: "Prevent agent from writing to secrets/ directory",
|
|
280
|
-
match: { events: ["PreToolUse"] },
|
|
281
|
-
fn: async (ctx) => {
|
|
282
|
-
if (!["Write", "Edit"].includes(ctx.toolName ?? "")) return allow();
|
|
283
|
-
const path = ctx.toolInput?.file_path ?? "";
|
|
284
|
-
if (path.includes("secrets/")) return deny("Writing to secrets/ is not permitted");
|
|
285
|
-
return allow();
|
|
286
|
-
},
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
// Держать агента на пути: проверить тесты перед коммитом
|
|
290
|
-
customPolicies.add({
|
|
291
|
-
name: "remind-test-before-commit",
|
|
292
|
-
description: "Keep the agent on track: verify tests pass before committing",
|
|
293
|
-
match: { events: ["PreToolUse"] },
|
|
294
|
-
fn: async (ctx) => {
|
|
295
|
-
if (ctx.toolName !== "Bash") return allow();
|
|
296
|
-
const cmd = ctx.toolInput?.command ?? "";
|
|
297
|
-
if (/git\s+commit/.test(cmd)) {
|
|
298
|
-
return instruct("Verify all tests pass before committing. Run `bun test` if you haven't already.");
|
|
299
|
-
}
|
|
300
|
-
return allow();
|
|
301
|
-
},
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
// Запретить незапланированные изменения зависимостей во время freeze
|
|
305
|
-
customPolicies.add({
|
|
306
|
-
name: "dependency-freeze",
|
|
307
|
-
description: "Prevent unplanned dependency changes during freeze period",
|
|
308
|
-
match: { events: ["PreToolUse"] },
|
|
309
|
-
fn: async (ctx) => {
|
|
310
|
-
if (ctx.toolName !== "Bash") return allow();
|
|
311
|
-
const cmd = ctx.toolInput?.command ?? "";
|
|
312
|
-
const isInstall = /^(npm install|yarn add|bun add|pnpm add)\s+\S/.test(cmd);
|
|
313
|
-
if (isInstall && process.env.DEPENDENCY_FREEZE === "1") {
|
|
314
|
-
return deny("Package installs are frozen. Unset DEPENDENCY_FREEZE to allow.");
|
|
315
|
-
}
|
|
316
|
-
return allow();
|
|
317
|
-
},
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
export { customPolicies };
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
## Примеры
|
|
326
|
-
|
|
327
|
-
Каталог `examples/` содержит готовые к запуску файлы политик:
|
|
328
|
-
|
|
329
|
-
| Файл | Содержимое |
|
|
330
|
-
|------|-----------|
|
|
331
|
-
| `examples/policies-basic.js` | Пять начальных политик, охватывающих распространённые режимы сбоев агента |
|
|
332
|
-
| `examples/policies-advanced/index.js` | Продвинутые паттерны: транзитивные импорты, асинхронные вызовы, очистка выходных данных и hooks конца сессии |
|
|
333
|
-
| `examples/convention-policies/security-policies.mjs` | Политики безопасности на основе соглашения (блокировка записей .env, предотвращение переписывания истории git) |
|
|
334
|
-
| `examples/convention-policies/workflow-policies.mjs` | Политики рабочего процесса на основе соглашения (напоминания о тестах, аудит записей файлов) |
|
|
335
|
-
|
|
336
|
-
### Использование примеров с явным файлом
|
|
337
|
-
|
|
338
|
-
```bash
|
|
339
|
-
failproofai policies --install --custom ./examples/policies-basic.js
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
### Использование примеров на основе соглашения
|
|
343
|
-
|
|
344
|
-
```bash
|
|
345
|
-
# Копировать на уровень проекта
|
|
346
|
-
mkdir -p .failproofai/policies
|
|
347
|
-
cp examples/convention-policies/*.mjs .failproofai/policies/
|
|
348
|
-
|
|
349
|
-
# Или копировать на уровень пользователя
|
|
350
|
-
mkdir -p ~/.failproofai/policies
|
|
351
|
-
cp examples/convention-policies/*.mjs ~/.failproofai/policies/
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
Команда установки не требуется — файлы будут подхвачены автоматически при следующем событии hook.
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Панель управления
|
|
3
|
-
description: "Мониторинг сеансов агентов, проверка вызовов инструментов и управление политиками"
|
|
4
|
-
icon: chart-line
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Панель управления failproofai — это локальное веб-приложение для мониторинга сеансов вашего AI-агента и управления политиками. Посмотрите, что делали ваши агенты, пока вас не было рядом.
|
|
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
|
-
- Количество срабатываний хуков (политик, которые были применены)
|
|
43
|
-
|
|
44
|
-
Используйте фильтр диапазона дат и поиск по ID сеанса, чтобы сузить список. Сеансы разбиты на страницы.
|
|
45
|
-
|
|
46
|
-
Нажмите на сеанс, чтобы открыть просмотр сеанса.
|
|
47
|
-
|
|
48
|
-
### Просмотр сеанса
|
|
49
|
-
|
|
50
|
-
Просмотр сеанса отвечает на ключевой вопрос для автономных агентов: что делал агент и оставался ли он на правильном пути? Он показывает временную шкалу всего, что произошло в сеансе:
|
|
51
|
-
|
|
52
|
-
- **Сообщения** — текстовые ответы Claude и подсказки пользователя
|
|
53
|
-
- **Вызовы инструментов** — каждый инструмент, который вызвал Claude, с его входными и выходными данными
|
|
54
|
-
- **Активность политик** — для каждого вызова инструмента показывает, какие политики сработали и какое решение они вернули
|
|
55
|
-
|
|
56
|
-
Панель статистики в верхней части показывает длительность сеанса, общее количество вызовов инструментов и сводку решений хуков (количество разрешений / отказов / инструкций).
|
|
57
|
-
|
|
58
|
-
Вы можете экспортировать сеанс в файл ZIP или JSONL с помощью кнопки загрузки.
|
|
59
|
-
|
|
60
|
-
### Политики
|
|
61
|
-
|
|
62
|
-
Страница с двумя вкладками для управления политиками и проверки активности.
|
|
63
|
-
|
|
64
|
-
<Tabs>
|
|
65
|
-
<Tab title="Вкладка политик">
|
|
66
|
-
- Включайте или отключайте отдельные политики одним нажатием (записывает в `~/.failproofai/policies-config.json`)
|
|
67
|
-
- Разверните политику, чтобы настроить её параметры (для политик, поддерживающих `policyParams`)
|
|
68
|
-
- Устанавливайте или удаляйте хуки для определенной области
|
|
69
|
-
- Установите пользовательский путь файла политик
|
|
70
|
-
</Tab>
|
|
71
|
-
<Tab title="Вкладка активности">
|
|
72
|
-
- Полная история со страничной навигацией всех срабатываний хуков на всех сеансах
|
|
73
|
-
- Поиск по имени политики, ID сеанса, имени инструмента или решению
|
|
74
|
-
- Каждая строка показывает: временную метку, имя политики, решение, имя инструмента, ID сеанса и причину отказа/инструкций
|
|
75
|
-
</Tab>
|
|
76
|
-
</Tabs>
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## Автоматическое обновление
|
|
81
|
-
|
|
82
|
-
Панель управления имеет переключатель автоматического обновления в верхней навигации. При включении текущая страница периодически обновляется, отображая новые сеансы и активность политик по мере их появления. Это важно при мониторинге долгих сеансов автономных агентов.
|
|
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 блокирует кроссисточниковый доступ к своему WebSocket HMR (горячей перезагрузки модулей), которая является функцией только для разработки. Чтобы разрешить ваш хост, используйте флаг `--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` (производственный режим) нет WebSocket HMR и нет проблем с кроссисточниковыми ресурсами разработки.
|
|
142
|
-
</Note>
|