failproofai 0.0.6-beta.3 → 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]__0kyh86x._.js → [root-of-the-server]__0om-5pe._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__096k.db._.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/{01pmw1-asbek~.js → 02dqjyv6_9mhq.js} +2 -2
- package/.next/standalone/.next/static/chunks/{051m32nx~n5yr.js → 070orfsl6.xal.js} +1 -1
- package/.next/standalone/.next/static/chunks/0mir9jdxn35~s.css +1 -0
- package/.next/standalone/.next/static/chunks/{0mazj-p-~2kc6.js → 0o547jv-k_k35.js} +1 -1
- package/.next/standalone/.next/static/chunks/0pk2h2.mjxy.m.js +6 -0
- package/.next/standalone/.next/static/chunks/{0l-mu4okl-cj1.js → 0rcwkbh24w38b.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0-dm_9a6nsc2l.js → 140xx_tfr~lm_.js} +1 -1
- package/.next/standalone/.next/static/chunks/{156zca6aewyr-.js → 169_e4dq~1~b6.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0a-yctdwn368y.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/dist/cli.mjs +2 -2
- package/package.json +2 -2
- package/scripts/prune-standalone.mjs +128 -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/.next/static/chunks/0qakntsrpc~1j.js +0 -6
- package/.next/standalone/AGENTS.md +0 -80
- package/.next/standalone/CHANGELOG.md +0 -158
- 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 -439
- package/.next/standalone/bun.lock +0 -1119
- package/.next/standalone/components.json +0 -23
- package/.next/standalone/dist/cli.mjs +0 -4696
- 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 -575
- 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 -572
- 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 -572
- 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 -570
- 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/auth/login.ts +0 -104
- package/.next/standalone/src/auth/logout.ts +0 -50
- package/.next/standalone/src/auth/token-store.ts +0 -64
- package/.next/standalone/src/cli-error.ts +0 -18
- package/.next/standalone/src/hooks/builtin-policies.ts +0 -1615
- 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 -222
- 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/src/relay/daemon.ts +0 -362
- package/.next/standalone/src/relay/pid.ts +0 -76
- package/.next/standalone/src/relay/queue.ts +0 -225
- 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/{r-wX0MuAfCjbhJm3phQc8 → wOkJXoch1UmRAmyIuKZWc}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{r-wX0MuAfCjbhJm3phQc8 → wOkJXoch1UmRAmyIuKZWc}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{r-wX0MuAfCjbhJm3phQc8 → wOkJXoch1UmRAmyIuKZWc}/_ssgManifest.js +0 -0
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loads user-authored policy files with ESM import rewriting.
|
|
3
|
-
* Supports transitive local imports and `import { ... } from 'failproofai'`.
|
|
4
|
-
*
|
|
5
|
-
* Two loading modes:
|
|
6
|
-
* 1. Explicit: a single file via `customPoliciesPath` in policies-config.json
|
|
7
|
-
* 2. Convention: auto-discovered *policies.{js,mjs,ts} files from
|
|
8
|
-
* .failproofai/policies/ at project and user level (git-hooks style)
|
|
9
|
-
*
|
|
10
|
-
* Fail-open: any error (file not found, syntax error, import failure) is logged
|
|
11
|
-
* and results in an empty hook list for that file. Builtins continue normally.
|
|
12
|
-
*/
|
|
13
|
-
import { resolve, isAbsolute, basename } from "node:path";
|
|
14
|
-
import { existsSync, readdirSync } from "node:fs";
|
|
15
|
-
import { pathToFileURL } from "node:url";
|
|
16
|
-
import { homedir } from "node:os";
|
|
17
|
-
import { hookLogWarn, hookLogError, hookLogInfo } from "./hook-logger";
|
|
18
|
-
import { getCustomHooks, clearCustomHooks } from "./custom-hooks-registry";
|
|
19
|
-
import { findDistIndex, rewriteFileTree, TMP_SUFFIX, cleanupTmpFiles } from "./loader-utils";
|
|
20
|
-
import type { CustomHook } from "./policy-types";
|
|
21
|
-
|
|
22
|
-
const LOADING_KEY = "__FAILPROOFAI_LOADING_HOOKS__";
|
|
23
|
-
|
|
24
|
-
/** Regex matching convention policy filenames: *policies.{js,mjs,ts} */
|
|
25
|
-
const CONVENTION_FILE_RE = /policies\.(js|mjs|ts)$/;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Scan a directory for convention policy files (*policies.{js,mjs,ts}).
|
|
29
|
-
* Returns sorted absolute paths. Returns [] if the directory doesn't exist.
|
|
30
|
-
*/
|
|
31
|
-
export function discoverPolicyFiles(dir: string): string[] {
|
|
32
|
-
if (!existsSync(dir)) return [];
|
|
33
|
-
try {
|
|
34
|
-
const entries = readdirSync(dir, { withFileTypes: true });
|
|
35
|
-
return entries
|
|
36
|
-
.filter((e) => e.isFile() && CONVENTION_FILE_RE.test(e.name))
|
|
37
|
-
.sort((a, b) => a.name.localeCompare(b.name))
|
|
38
|
-
.map((e) => resolve(dir, e.name));
|
|
39
|
-
} catch {
|
|
40
|
-
return [];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Load a single policy file into the globalThis custom hooks registry.
|
|
46
|
-
* Does NOT clear the registry — caller is responsible for that.
|
|
47
|
-
*/
|
|
48
|
-
async function loadSingleFile(absPath: string, opts?: { strict?: boolean }): Promise<void> {
|
|
49
|
-
const g = globalThis as Record<string, unknown>;
|
|
50
|
-
g[LOADING_KEY] = true;
|
|
51
|
-
|
|
52
|
-
let tmpFiles: string[] = [];
|
|
53
|
-
try {
|
|
54
|
-
const distIndex = await findDistIndex();
|
|
55
|
-
const distUrl = distIndex ? pathToFileURL(distIndex).href : null;
|
|
56
|
-
|
|
57
|
-
tmpFiles = await rewriteFileTree(absPath, distUrl, distIndex);
|
|
58
|
-
|
|
59
|
-
const entryTmp = absPath + TMP_SUFFIX;
|
|
60
|
-
const fileUrl = pathToFileURL(entryTmp).href;
|
|
61
|
-
await import(/* webpackIgnore: true */ fileUrl);
|
|
62
|
-
} catch (err) {
|
|
63
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
64
|
-
if (opts?.strict) throw new Error(`Failed to load custom hooks from ${absPath}: ${msg}`);
|
|
65
|
-
hookLogError(`failed to load custom hooks from ${absPath}: ${msg}`);
|
|
66
|
-
} finally {
|
|
67
|
-
g[LOADING_KEY] = false;
|
|
68
|
-
await cleanupTmpFiles(tmpFiles);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Load a single explicit custom hooks file (legacy API).
|
|
74
|
-
* Clears the registry, loads the file, returns registered hooks.
|
|
75
|
-
*/
|
|
76
|
-
export async function loadCustomHooks(
|
|
77
|
-
customPoliciesPath: string | undefined,
|
|
78
|
-
opts?: { strict?: boolean; sessionCwd?: string },
|
|
79
|
-
): Promise<CustomHook[]> {
|
|
80
|
-
if (!customPoliciesPath) return [];
|
|
81
|
-
|
|
82
|
-
const absPath = isAbsolute(customPoliciesPath)
|
|
83
|
-
? customPoliciesPath
|
|
84
|
-
: resolve(opts?.sessionCwd ?? process.cwd(), customPoliciesPath);
|
|
85
|
-
|
|
86
|
-
if (!existsSync(absPath)) {
|
|
87
|
-
if (opts?.strict) throw new Error(`Custom hooks file not found: ${absPath}`);
|
|
88
|
-
hookLogWarn(`customPoliciesPath not found: ${absPath}`);
|
|
89
|
-
return [];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
clearCustomHooks();
|
|
93
|
-
await loadSingleFile(absPath, opts);
|
|
94
|
-
return getCustomHooks();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/** Source metadata for a loaded convention policy file. */
|
|
98
|
-
export interface ConventionSource {
|
|
99
|
-
scope: "project" | "user";
|
|
100
|
-
file: string;
|
|
101
|
-
hookNames: string[];
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/** Result of loadAllCustomHooks with source metadata. */
|
|
105
|
-
export interface LoadAllResult {
|
|
106
|
-
hooks: CustomHook[];
|
|
107
|
-
conventionSources: ConventionSource[];
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Load ALL custom hooks: explicit customPoliciesPath + convention-discovered files.
|
|
112
|
-
*
|
|
113
|
-
* Load order:
|
|
114
|
-
* 1. Explicit customPoliciesPath (if configured)
|
|
115
|
-
* 2. Project convention: {cwd}/.failproofai/policies/*policies.{js,mjs,ts} (alphabetical)
|
|
116
|
-
* 3. User convention: ~/.failproofai/policies/*policies.{js,mjs,ts} (alphabetical)
|
|
117
|
-
*
|
|
118
|
-
* Each file is loaded independently (fail-open per file).
|
|
119
|
-
* Convention hooks are tagged with __conventionScope so the handler can build scoped prefixes.
|
|
120
|
-
*/
|
|
121
|
-
export async function loadAllCustomHooks(
|
|
122
|
-
customPoliciesPath: string | undefined,
|
|
123
|
-
opts?: { sessionCwd?: string },
|
|
124
|
-
): Promise<LoadAllResult> {
|
|
125
|
-
clearCustomHooks();
|
|
126
|
-
|
|
127
|
-
const conventionSources: ConventionSource[] = [];
|
|
128
|
-
|
|
129
|
-
// 1. Explicit customPoliciesPath (existing behavior)
|
|
130
|
-
if (customPoliciesPath) {
|
|
131
|
-
const absPath = isAbsolute(customPoliciesPath)
|
|
132
|
-
? customPoliciesPath
|
|
133
|
-
: resolve(opts?.sessionCwd ?? process.cwd(), customPoliciesPath);
|
|
134
|
-
if (existsSync(absPath)) {
|
|
135
|
-
await loadSingleFile(absPath);
|
|
136
|
-
} else {
|
|
137
|
-
hookLogWarn(`customPoliciesPath not found: ${absPath}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const hooksBeforeConvention = getCustomHooks().length;
|
|
142
|
-
|
|
143
|
-
// 2. Project convention: {cwd}/.failproofai/policies/*policies.{js,mjs,ts}
|
|
144
|
-
const projectDir = resolve(opts?.sessionCwd ?? process.cwd(), ".failproofai", "policies");
|
|
145
|
-
const projectFiles = discoverPolicyFiles(projectDir);
|
|
146
|
-
for (const file of projectFiles) {
|
|
147
|
-
const hooksBefore = getCustomHooks().length;
|
|
148
|
-
await loadSingleFile(file);
|
|
149
|
-
const newHooks = getCustomHooks().slice(hooksBefore);
|
|
150
|
-
if (newHooks.length > 0) {
|
|
151
|
-
conventionSources.push({
|
|
152
|
-
scope: "project",
|
|
153
|
-
file: basename(file),
|
|
154
|
-
hookNames: newHooks.map((h) => h.name),
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// 3. User convention: ~/.failproofai/policies/*policies.{js,mjs,ts}
|
|
160
|
-
const userDir = resolve(homedir(), ".failproofai", "policies");
|
|
161
|
-
const userFiles = discoverPolicyFiles(userDir);
|
|
162
|
-
for (const file of userFiles) {
|
|
163
|
-
const hooksBefore = getCustomHooks().length;
|
|
164
|
-
await loadSingleFile(file);
|
|
165
|
-
const newHooks = getCustomHooks().slice(hooksBefore);
|
|
166
|
-
if (newHooks.length > 0) {
|
|
167
|
-
conventionSources.push({
|
|
168
|
-
scope: "user",
|
|
169
|
-
file: basename(file),
|
|
170
|
-
hookNames: newHooks.map((h) => h.name),
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const allHooks = getCustomHooks();
|
|
176
|
-
const conventionCount = allHooks.length - hooksBeforeConvention;
|
|
177
|
-
|
|
178
|
-
if (projectFiles.length > 0 || userFiles.length > 0) {
|
|
179
|
-
hookLogInfo(
|
|
180
|
-
`convention policies: ${projectFiles.length} project file(s), ${userFiles.length} user file(s), ${conventionCount} hook(s)`,
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Tag convention hooks with their scope so the handler can build scoped prefixes.
|
|
185
|
-
// Build a name→scope map from conventionSources, then tag by object reference
|
|
186
|
-
// to avoid mis-tagging an explicit custom hook that shares the same name.
|
|
187
|
-
const hookNameToScope = new Map<string, string>();
|
|
188
|
-
for (const source of conventionSources) {
|
|
189
|
-
for (const name of source.hookNames) {
|
|
190
|
-
hookNameToScope.set(name, source.scope);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
const conventionHookRefs = new Set<CustomHook>();
|
|
194
|
-
for (const hook of allHooks.slice(hooksBeforeConvention)) {
|
|
195
|
-
conventionHookRefs.add(hook);
|
|
196
|
-
}
|
|
197
|
-
for (const hook of allHooks) {
|
|
198
|
-
if (conventionHookRefs.has(hook)) {
|
|
199
|
-
(hook as CustomHook & { __conventionScope?: string }).__conventionScope =
|
|
200
|
-
hookNameToScope.get(hook.name) ?? "project";
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return { hooks: allHooks, conventionSources };
|
|
205
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GlobalThis-backed registry for custom hooks.
|
|
3
|
-
* Shared via globalThis so that the user's hook file (which imports customPolicies
|
|
4
|
-
* from 'failproofai') and the hook handler (which reads from this file) share the
|
|
5
|
-
* same in-process state when running within the same Node.js process.
|
|
6
|
-
*/
|
|
7
|
-
import type { CustomHook } from "./policy-types";
|
|
8
|
-
|
|
9
|
-
const REGISTRY_KEY = "__failproofai_custom_hooks__";
|
|
10
|
-
|
|
11
|
-
function getRegistry(): CustomHook[] {
|
|
12
|
-
const g = globalThis as Record<string, unknown>;
|
|
13
|
-
if (!Array.isArray(g[REGISTRY_KEY])) g[REGISTRY_KEY] = [];
|
|
14
|
-
return g[REGISTRY_KEY] as CustomHook[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const customPolicies = {
|
|
18
|
-
add(hook: CustomHook): void {
|
|
19
|
-
getRegistry().push(hook);
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export function getCustomHooks(): CustomHook[] {
|
|
24
|
-
return getRegistry();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function clearCustomHooks(): void {
|
|
28
|
-
const g = globalThis as Record<string, unknown>;
|
|
29
|
-
g[REGISTRY_KEY] = [];
|
|
30
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook event handler — invoked when Claude Code triggers a hook.
|
|
3
|
-
*
|
|
4
|
-
* Reads the JSON payload from stdin, loads enabled policies from
|
|
5
|
-
* ~/.failproofai/policies-config.json, evaluates matching policies, persists
|
|
6
|
-
* activity to disk, and returns the appropriate exit code + stdout response.
|
|
7
|
-
*/
|
|
8
|
-
import type { HookEventType, SessionMetadata } from "./types";
|
|
9
|
-
import type { PolicyFunction, PolicyResult } from "./policy-types";
|
|
10
|
-
import { readMergedHooksConfig } from "./hooks-config";
|
|
11
|
-
import { registerBuiltinPolicies } from "./builtin-policies";
|
|
12
|
-
import { evaluatePolicies } from "./policy-evaluator";
|
|
13
|
-
import { clearPolicies, registerPolicy } from "./policy-registry";
|
|
14
|
-
import { loadAllCustomHooks } from "./custom-hooks-loader";
|
|
15
|
-
import type { CustomHook } from "./policy-types";
|
|
16
|
-
import { persistHookActivity } from "./hook-activity-store";
|
|
17
|
-
import { trackHookEvent } from "./hook-telemetry";
|
|
18
|
-
import { getInstanceId } from "../../lib/telemetry-id";
|
|
19
|
-
import { hookLogInfo, hookLogWarn } from "./hook-logger";
|
|
20
|
-
|
|
21
|
-
export async function handleHookEvent(eventType: string): Promise<number> {
|
|
22
|
-
const startTime = performance.now();
|
|
23
|
-
|
|
24
|
-
// Read stdin payload (Claude passes JSON)
|
|
25
|
-
const MAX_STDIN_BYTES = 1_048_576; // 1 MB
|
|
26
|
-
let payload = "";
|
|
27
|
-
try {
|
|
28
|
-
payload = await new Promise<string>((resolve, reject) => {
|
|
29
|
-
const chunks: string[] = [];
|
|
30
|
-
let totalBytes = 0;
|
|
31
|
-
process.stdin.setEncoding("utf8");
|
|
32
|
-
process.stdin.on("data", (chunk: string) => {
|
|
33
|
-
totalBytes += Buffer.byteLength(chunk);
|
|
34
|
-
if (totalBytes > MAX_STDIN_BYTES) {
|
|
35
|
-
hookLogWarn(`stdin payload exceeds 1 MB for ${eventType}, discarding`);
|
|
36
|
-
process.stdin.destroy();
|
|
37
|
-
resolve("");
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
chunks.push(chunk);
|
|
41
|
-
});
|
|
42
|
-
process.stdin.on("end", () => resolve(chunks.join("")));
|
|
43
|
-
process.stdin.on("error", reject);
|
|
44
|
-
// If stdin is already closed or not piped, resolve immediately
|
|
45
|
-
if (process.stdin.readableEnded) resolve("");
|
|
46
|
-
});
|
|
47
|
-
} catch {
|
|
48
|
-
hookLogWarn(`stdin read failed for ${eventType}`);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
let parsed: Record<string, unknown> = {};
|
|
52
|
-
if (payload) {
|
|
53
|
-
try {
|
|
54
|
-
parsed = JSON.parse(payload) as Record<string, unknown>;
|
|
55
|
-
} catch {
|
|
56
|
-
hookLogWarn(`payload parse failed for ${eventType} (${payload.length} bytes)`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Extract session metadata from payload
|
|
61
|
-
const session: SessionMetadata = {
|
|
62
|
-
sessionId: parsed.session_id as string | undefined,
|
|
63
|
-
transcriptPath: parsed.transcript_path as string | undefined,
|
|
64
|
-
cwd: parsed.cwd as string | undefined,
|
|
65
|
-
permissionMode: parsed.permission_mode as string | undefined,
|
|
66
|
-
hookEventName: parsed.hook_event_name as string | undefined,
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
// Load enabled policies (merge across project/local/global scopes)
|
|
70
|
-
const config = readMergedHooksConfig(session.cwd);
|
|
71
|
-
clearPolicies();
|
|
72
|
-
registerBuiltinPolicies(config.enabledPolicies);
|
|
73
|
-
|
|
74
|
-
// Load and register custom hooks (layer 2, after builtins)
|
|
75
|
-
const loadResult = await loadAllCustomHooks(config.customPoliciesPath, { sessionCwd: session.cwd });
|
|
76
|
-
const customHooksList = loadResult.hooks;
|
|
77
|
-
const conventionHookNames = new Set(loadResult.conventionSources.flatMap((s) => s.hookNames));
|
|
78
|
-
|
|
79
|
-
for (const hook of customHooksList) {
|
|
80
|
-
const hookName = hook.name;
|
|
81
|
-
const conventionScope = (hook as CustomHook & { __conventionScope?: string }).__conventionScope;
|
|
82
|
-
const isConvention = !!conventionScope;
|
|
83
|
-
const prefix = isConvention ? `.failproofai-${conventionScope}` : "custom";
|
|
84
|
-
const fn: PolicyFunction = async (ctx): Promise<PolicyResult> => {
|
|
85
|
-
try {
|
|
86
|
-
const result = await Promise.race([
|
|
87
|
-
hook.fn(ctx),
|
|
88
|
-
new Promise<PolicyResult>((_, reject) =>
|
|
89
|
-
setTimeout(() => reject(new Error("timeout")), 10_000),
|
|
90
|
-
),
|
|
91
|
-
]);
|
|
92
|
-
return result;
|
|
93
|
-
} catch (err) {
|
|
94
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
95
|
-
const isTimeout = msg === "timeout";
|
|
96
|
-
hookLogWarn(`${prefix} hook "${hookName}" failed: ${msg}`);
|
|
97
|
-
void trackHookEvent(getInstanceId(), "custom_hook_error", {
|
|
98
|
-
hook_name: hookName,
|
|
99
|
-
error_type: isTimeout ? "timeout" : "exception",
|
|
100
|
-
event_type: eventType,
|
|
101
|
-
is_convention_policy: isConvention,
|
|
102
|
-
convention_scope: conventionScope ?? null,
|
|
103
|
-
});
|
|
104
|
-
return { decision: "allow" };
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
registerPolicy(
|
|
108
|
-
`${prefix}/${hookName}`,
|
|
109
|
-
hook.description ?? "",
|
|
110
|
-
fn,
|
|
111
|
-
hook.match ?? {},
|
|
112
|
-
-1, // Custom hooks run after builtins (priority 0)
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Fire telemetry once per invocation for custom hook loads
|
|
117
|
-
if (customHooksList.length > 0) {
|
|
118
|
-
void trackHookEvent(getInstanceId(), "custom_hooks_loaded", {
|
|
119
|
-
custom_hooks_count: customHooksList.length,
|
|
120
|
-
custom_hook_names: customHooksList.map((h) => h.name),
|
|
121
|
-
event_types_covered: [...new Set(customHooksList.flatMap((h) => h.match?.events ?? []))],
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// Fire telemetry for convention-based policy discovery
|
|
126
|
-
if (loadResult.conventionSources.length > 0) {
|
|
127
|
-
void trackHookEvent(getInstanceId(), "convention_policies_loaded", {
|
|
128
|
-
event_type: eventType,
|
|
129
|
-
project_file_count: loadResult.conventionSources.filter((s) => s.scope === "project").length,
|
|
130
|
-
user_file_count: loadResult.conventionSources.filter((s) => s.scope === "user").length,
|
|
131
|
-
convention_hook_count: conventionHookNames.size,
|
|
132
|
-
convention_hook_names: [...conventionHookNames],
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
hookLogInfo(`event=${eventType} policies=${config.enabledPolicies.length} custom=${customHooksList.length} convention=${conventionHookNames.size}`);
|
|
137
|
-
|
|
138
|
-
// Evaluate policies
|
|
139
|
-
const result = await evaluatePolicies(eventType as HookEventType, parsed, session, config);
|
|
140
|
-
const durationMs = Math.round(performance.now() - startTime);
|
|
141
|
-
hookLogInfo(`result=${result.decision} policy=${result.policyName ?? "none"} duration=${durationMs}ms`);
|
|
142
|
-
|
|
143
|
-
if (result.stdout) {
|
|
144
|
-
process.stdout.write(result.stdout);
|
|
145
|
-
}
|
|
146
|
-
if (result.stderr) {
|
|
147
|
-
process.stderr.write(result.stderr);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Persist activity to disk (visible in /policies activity tab)
|
|
151
|
-
const activityEntry = {
|
|
152
|
-
timestamp: Date.now(),
|
|
153
|
-
eventType,
|
|
154
|
-
toolName: (parsed.tool_name as string) ?? null,
|
|
155
|
-
policyName: result.policyName,
|
|
156
|
-
policyNames: result.policyNames,
|
|
157
|
-
decision: result.decision,
|
|
158
|
-
reason: result.reason,
|
|
159
|
-
durationMs,
|
|
160
|
-
sessionId: session.sessionId,
|
|
161
|
-
transcriptPath: session.transcriptPath,
|
|
162
|
-
cwd: session.cwd,
|
|
163
|
-
permissionMode: session.permissionMode,
|
|
164
|
-
hookEventName: session.hookEventName,
|
|
165
|
-
};
|
|
166
|
-
try {
|
|
167
|
-
persistHookActivity(activityEntry);
|
|
168
|
-
} catch {
|
|
169
|
-
hookLogWarn("activity persistence failed");
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// Enqueue for server relay — fire-and-forget, never blocks hook.
|
|
173
|
-
// queue.ts is a no-op if the user is not logged in (no auth.json), and
|
|
174
|
-
// sanitizes the entry before persisting (drops toolInput/transcriptPath,
|
|
175
|
-
// hashes cwd, redacts known secret patterns in `reason`).
|
|
176
|
-
try {
|
|
177
|
-
const { appendToServerQueue } = await import("../relay/queue");
|
|
178
|
-
appendToServerQueue(activityEntry);
|
|
179
|
-
} catch {
|
|
180
|
-
// Server queue is best-effort; fail-open
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Lazy-start relay daemon if user is logged in — ~1ms when already running
|
|
184
|
-
try {
|
|
185
|
-
const { ensureRelayRunning } = await import("../relay/daemon");
|
|
186
|
-
ensureRelayRunning();
|
|
187
|
-
} catch {
|
|
188
|
-
// Relay is best-effort; hook must succeed regardless
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Fire PostHog telemetry for decisions that affect Claude's behavior
|
|
192
|
-
if (result.decision === "deny" || result.decision === "instruct") {
|
|
193
|
-
try {
|
|
194
|
-
const isCustomHook = result.policyName?.startsWith("custom/") ?? false;
|
|
195
|
-
const isConventionPolicy = result.policyName?.startsWith(".failproofai-") ?? false;
|
|
196
|
-
const conventionScope = isConventionPolicy
|
|
197
|
-
? result.policyName!.match(/^\.failproofai-(project|user)\//)?.[1] ?? null
|
|
198
|
-
: null;
|
|
199
|
-
const hasCustomParams =
|
|
200
|
-
!isCustomHook && !isConventionPolicy && !!(result.policyName && config.policyParams?.[result.policyName]);
|
|
201
|
-
const paramKeysOverridden = hasCustomParams
|
|
202
|
-
? Object.keys(config.policyParams![result.policyName!])
|
|
203
|
-
: [];
|
|
204
|
-
const distinctId = getInstanceId();
|
|
205
|
-
await trackHookEvent(distinctId, "hook_policy_triggered", {
|
|
206
|
-
event_type: eventType,
|
|
207
|
-
tool_name: (parsed.tool_name as string) ?? null,
|
|
208
|
-
policy_name: result.policyName,
|
|
209
|
-
decision: result.decision,
|
|
210
|
-
is_custom_hook: isCustomHook,
|
|
211
|
-
is_convention_policy: isConventionPolicy,
|
|
212
|
-
convention_scope: conventionScope,
|
|
213
|
-
has_custom_params: hasCustomParams,
|
|
214
|
-
param_keys_overridden: paramKeysOverridden,
|
|
215
|
-
});
|
|
216
|
-
} catch {
|
|
217
|
-
// Telemetry is best-effort — never block the hook
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return result.exitCode;
|
|
222
|
-
}
|