failproofai 1.0.7-beta.1 → 1.0.7
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 +4 -4
- package/.next/standalone/.next/required-server-files.json +1 -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 +4 -4
- 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 +6 -6
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- 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 +4 -4
- 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 +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/run/route.js +7 -8
- package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page.js +5 -7
- package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- 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 +6 -6
- 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 +14 -14
- package/.next/standalone/.next/server/app/policies/page.js +11 -13
- 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 +7 -8
- 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 +7 -7
- 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 +6 -7
- 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/app/settings/page/server-reference-manifest.json +8 -41
- package/.next/standalone/.next/server/app/settings/page.js +9 -12
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__1j-zsg5._.js → [externals]__1_bftcl._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__19_pzeq._.js → [externals]__1msfs-h._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1bf34x4._.js → [root-of-the-server]__1_r2rbg._.js} +7 -5
- package/.next/standalone/.next/server/chunks/_09dz7xv._.js +21 -21
- package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
- package/.next/standalone/.next/server/chunks/{_1q5i8mb._.js → _1c3k-8x._.js} +2 -2
- package/.next/standalone/.next/server/chunks/_1ek68ln._.js +16 -16
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +1 -1
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_0iu54mz._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3._.js +2 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-_ki57._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0yxwl6j._.js → [root-of-the-server]__0bd3mje._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cg-bgc._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cpu_mj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1mf3zp6._.js → [root-of-the-server]__0cxe_2_._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u3w0ll._.js +22 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__17d_ffl._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19d9tgz._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ctpynv._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1jiwfsj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1phc187._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_06imw3p._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1w_5l7t._.js → _0h_douw._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_214wgrp._.js → _1-i_gzc._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0bn2oo8._.js → _166t73i._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1q46vxx._.js → _1_qswah._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_1gb0ifp._.js → _1es2j7i._.js} +5 -5
- package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_18_d8l1._.js → node_modules_next_dist_0drixxt._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4._.js +10 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me65._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/pages/404.html +1 -1
- 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 +23 -56
- package/.next/standalone/.next/static/chunks/094xgi4owxaqf.js +1 -0
- package/.next/standalone/.next/static/chunks/0__8a7m868fvf.js +1 -0
- package/.next/standalone/.next/static/chunks/{12tvm75t5ffui.js → 0o6qlkgubtoex.js} +1 -1
- package/.next/standalone/.next/static/chunks/13i7-9is-vhys.js +1 -0
- package/.next/standalone/.next/static/chunks/1rz20_pz828f3.js +6 -0
- package/.next/standalone/.next/static/chunks/2k9f4tyv04809.css +1 -0
- package/.next/standalone/.next/static/chunks/{0vmd180qfntfb.js → 2klitrtzpaoe0.js} +1 -1
- package/.next/standalone/.next/static/chunks/{258668t68du6b.js → 2mdh397ghgnvv.js} +1 -1
- package/.next/standalone/.next/static/chunks/2rshywgeqsyzk.css +2 -0
- package/.next/standalone/.next/static/chunks/3pzx4chkhko9k.js +1 -0
- package/.next/standalone/.next/static/chunks/{0qrbdkv9qmvli.js → 3rh5o7e16irrm.js} +1 -1
- package/.next/standalone/.next/static/chunks/{29fql3nbnfc9q.js → 43ufqrz8qo3h-.js} +1 -1
- package/.next/standalone/SECURITY.md +53 -0
- package/.next/standalone/app/actions/pack-actions.ts +0 -12
- package/.next/standalone/app/policies/hooks-client.tsx +0 -9
- package/.next/standalone/app/settings/page.tsx +1 -20
- package/.next/standalone/app/settings/settings-client.tsx +1 -27
- package/.next/standalone/app/settings/settings.css +0 -79
- package/.next/standalone/package.json +9 -9
- package/.next/standalone/sdk/python/skill/SKILL.md +60 -14
- package/.next/standalone/sdk/python/skill/agents/openai.yaml +2 -1
- package/.next/standalone/sdk/python/skill/references/evaluator.md +255 -0
- package/.next/standalone/sdk/python/skill/references/events.md +17 -8
- package/.next/standalone/sdk/python/skill/references/frameworks.md +3 -0
- package/.next/standalone/sdk/python/skill/references/install.md +3 -0
- package/.next/standalone/sdk/python/skill/references/integration.md +6 -2
- package/.next/standalone/sdk/python/skill/references/typescript.md +568 -0
- package/.next/standalone/sdk/typescript/CHANGELOG.md +133 -0
- package/.next/standalone/sdk/typescript/LICENSE +42 -0
- package/.next/standalone/sdk/typescript/README.md +552 -0
- package/.next/standalone/sdk/typescript/eslint.config.mjs +59 -0
- package/.next/standalone/sdk/typescript/examples/research-agent.ts +197 -0
- package/.next/standalone/sdk/typescript/integration/ai.test.ts +920 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/agent.ts +337 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +261 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +16 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/surfaces.ts +605 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/tsconfig.surfaces.json +4 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/agent.ts +342 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +156 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +16 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/surfaces.ts +628 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/tsconfig.surfaces.json +4 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/agent.ts +346 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package-lock.json +156 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package.json +13 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/surfaces.ts +651 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/tsconfig.surfaces.json +4 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/agent.ts +350 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package-lock.json +153 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package.json +13 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/surfaces.ts +651 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/tsconfig.surfaces.json +4 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/agent.ts +623 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +344 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +19 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/agent-v1.ts +99 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/agent.ts +623 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package-lock.json +336 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package.json +15 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/agent.ts +96 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +441 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +19 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/index.cjs +53 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/index.mjs +55 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/package.json +18 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/agent.ts +659 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package-lock.json +635 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package.json +15 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/agent.ts +659 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package-lock.json +553 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package.json +15 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/agent.ts +877 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/mcp-server.mjs +66 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package-lock.json +6797 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package.json +24 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/agent.ts +872 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/mcp-server.mjs +66 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package-lock.json +2540 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package.json +15 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/actions.ts +18 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/ai/route.ts +42 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/edge/route.ts +29 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/langgraph/route.ts +21 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/llamaindex/route.ts +11 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/mastra/route.ts +19 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/status/route.ts +7 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/layout.tsx +9 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/page.tsx +15 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/instrumentation.ts +15 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/ai.ts +61 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/langgraph.ts +68 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/llamaindex.ts +98 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/mastra.ts +90 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/next.config.ts +52 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package-lock.json +4343 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package.json +28 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/agent.ts +51 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/deno-npm.ts +76 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package-lock.json +484 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package.json +15 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/types/agent.ts +79 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/types/package-lock.json +740 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/types/package.json +11 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/agent.ts +197 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/package-lock.json +70 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/package.json +12 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/tsconfig.json +12 -0
- package/.next/standalone/sdk/typescript/integration/global-setup.ts +29 -0
- package/.next/standalone/sdk/typescript/integration/harness.ts +451 -0
- package/.next/standalone/sdk/typescript/integration/langchain.test.ts +682 -0
- package/.next/standalone/sdk/typescript/integration/llamaindex.test.ts +709 -0
- package/.next/standalone/sdk/typescript/integration/mastra-coverage.test.ts +386 -0
- package/.next/standalone/sdk/typescript/integration/mastra.test.ts +311 -0
- package/.next/standalone/sdk/typescript/integration/nextjs.test.ts +341 -0
- package/.next/standalone/sdk/typescript/integration/runtime-parity.ts +180 -0
- package/.next/standalone/sdk/typescript/integration/runtimes.bun.test.ts +15 -0
- package/.next/standalone/sdk/typescript/integration/runtimes.core.test.ts +113 -0
- package/.next/standalone/sdk/typescript/integration/runtimes.deno.test.ts +19 -0
- package/.next/standalone/sdk/typescript/integration/types.test.ts +141 -0
- package/.next/standalone/sdk/typescript/integration/vanilla.test.ts +255 -0
- package/.next/standalone/sdk/typescript/package-lock.json +2640 -0
- package/.next/standalone/sdk/typescript/package.json +401 -0
- package/.next/standalone/sdk/typescript/scripts/finalize-build.mjs +123 -0
- package/.next/standalone/sdk/typescript/scripts/release.mjs +177 -0
- package/.next/standalone/sdk/typescript/src/clock.ts +58 -0
- package/.next/standalone/sdk/typescript/src/context.ts +214 -0
- package/.next/standalone/sdk/typescript/src/edge/adapter.ts +18 -0
- package/.next/standalone/sdk/typescript/src/edge/ai.ts +116 -0
- package/.next/standalone/sdk/typescript/src/edge/index.ts +238 -0
- package/.next/standalone/sdk/typescript/src/edge/langchain.ts +18 -0
- package/.next/standalone/sdk/typescript/src/edge/llamaindex.ts +12 -0
- package/.next/standalone/sdk/typescript/src/edge/mastra.ts +17 -0
- package/.next/standalone/sdk/typescript/src/edge/notice.ts +33 -0
- package/.next/standalone/sdk/typescript/src/environment.ts +75 -0
- package/.next/standalone/sdk/typescript/src/evaluator/authoring.ts +480 -0
- package/.next/standalone/sdk/typescript/src/evaluator/cli.ts +96 -0
- package/.next/standalone/sdk/typescript/src/evaluator/client.ts +421 -0
- package/.next/standalone/sdk/typescript/src/evaluator/expression.ts +1292 -0
- package/.next/standalone/sdk/typescript/src/evaluator/index.ts +144 -0
- package/.next/standalone/sdk/typescript/src/evaluator/protocol.ts +747 -0
- package/.next/standalone/sdk/typescript/src/evaluator/runtime.ts +930 -0
- package/.next/standalone/sdk/typescript/src/evaluator/sandbox-worker.ts +171 -0
- package/.next/standalone/sdk/typescript/src/evaluator/source-limits.ts +27 -0
- package/.next/standalone/sdk/typescript/src/evaluator/source.ts +509 -0
- package/.next/standalone/sdk/typescript/src/events.ts +879 -0
- package/.next/standalone/sdk/typescript/src/exit.ts +117 -0
- package/.next/standalone/sdk/typescript/src/index.ts +186 -0
- package/.next/standalone/sdk/typescript/src/integrations/ai.ts +1566 -0
- package/.next/standalone/sdk/typescript/src/integrations/compat.ts +322 -0
- package/.next/standalone/sdk/typescript/src/integrations/core.ts +1321 -0
- package/.next/standalone/sdk/typescript/src/integrations/index.ts +355 -0
- package/.next/standalone/sdk/typescript/src/integrations/langchain.ts +2340 -0
- package/.next/standalone/sdk/typescript/src/integrations/llamaindex.ts +2111 -0
- package/.next/standalone/sdk/typescript/src/integrations/mastra.ts +1802 -0
- package/.next/standalone/sdk/typescript/src/logger.ts +98 -0
- package/.next/standalone/sdk/typescript/src/next.ts +115 -0
- package/.next/standalone/sdk/typescript/src/node-require.ts +446 -0
- package/.next/standalone/sdk/typescript/src/redact.ts +305 -0
- package/.next/standalone/sdk/typescript/src/resolver.ts +120 -0
- package/.next/standalone/sdk/typescript/src/runtime.ts +29 -0
- package/.next/standalone/sdk/typescript/src/schema.ts +410 -0
- package/.next/standalone/sdk/typescript/src/scopes.ts +701 -0
- package/.next/standalone/sdk/typescript/src/shared.ts +33 -0
- package/.next/standalone/sdk/typescript/src/version.ts +5 -0
- package/.next/standalone/sdk/typescript/src/writer.ts +934 -0
- package/.next/standalone/sdk/typescript/test/adapters.test.ts +397 -0
- package/.next/standalone/sdk/typescript/test/ai.test.ts +1076 -0
- package/.next/standalone/sdk/typescript/test/copies.test.ts +204 -0
- package/.next/standalone/sdk/typescript/test/edge.test.ts +183 -0
- package/.next/standalone/sdk/typescript/test/evaluator-client.test.ts +234 -0
- package/.next/standalone/sdk/typescript/test/evaluator-protocol.test.ts +225 -0
- package/.next/standalone/sdk/typescript/test/events.test.ts +193 -0
- package/.next/standalone/sdk/typescript/test/expression.test.ts +181 -0
- package/.next/standalone/sdk/typescript/test/global-setup.ts +26 -0
- package/.next/standalone/sdk/typescript/test/helpers.ts +130 -0
- package/.next/standalone/sdk/typescript/test/integrations.test.ts +369 -0
- package/.next/standalone/sdk/typescript/test/langchain-copies.test.ts +204 -0
- package/.next/standalone/sdk/typescript/test/langchain.test.ts +999 -0
- package/.next/standalone/sdk/typescript/test/llamaindex.test.ts +1760 -0
- package/.next/standalone/sdk/typescript/test/mastra-coverage.test.ts +501 -0
- package/.next/standalone/sdk/typescript/test/mastra-lifecycle.test.ts +479 -0
- package/.next/standalone/sdk/typescript/test/mastra.test.ts +285 -0
- package/.next/standalone/sdk/typescript/test/next.test.ts +109 -0
- package/.next/standalone/sdk/typescript/test/packaging.test.ts +312 -0
- package/.next/standalone/sdk/typescript/test/redaction.test.ts +171 -0
- package/.next/standalone/sdk/typescript/test/runtimes.test.ts +101 -0
- package/.next/standalone/sdk/typescript/test/sandbox.test.ts +189 -0
- package/.next/standalone/sdk/typescript/test/scopes.test.ts +271 -0
- package/.next/standalone/sdk/typescript/test/setup.ts +19 -0
- package/.next/standalone/sdk/typescript/test/skill-snippets.test.ts +73 -0
- package/.next/standalone/sdk/typescript/test/spool-contract.test.ts +124 -0
- package/.next/standalone/sdk/typescript/test/tracker-bounds.test.ts +191 -0
- package/.next/standalone/sdk/typescript/test/wire-format.test.ts +214 -0
- package/.next/standalone/sdk/typescript/test/writer.test.ts +407 -0
- package/.next/standalone/sdk/typescript/tsconfig.build.json +15 -0
- package/.next/standalone/sdk/typescript/tsconfig.cjs.json +19 -0
- package/.next/standalone/sdk/typescript/tsconfig.json +28 -0
- package/.next/standalone/sdk/typescript/vitest.config.ts +33 -0
- package/.next/standalone/sdk/typescript/vitest.integration.config.ts +23 -0
- package/.next/standalone/server.js +1 -1
- package/bin/failproofai.mjs +2 -115
- package/dist/cli.mjs +6538 -13686
- package/dist/index.js +1 -19
- package/dist/worker.mjs +2085 -8012
- package/package.json +9 -9
- package/pi-extension/index.ts +0 -11
- package/scripts/build-policy-pack.mjs +2 -39
- package/src/hooks/builtin-policies.ts +3 -21
- package/src/hooks/cloud-enrollment-cli.ts +1 -1
- package/src/hooks/cloud-managed-policies.ts +0 -22
- package/src/hooks/custom-hooks-loader.ts +7 -45
- package/src/hooks/custom-hooks-registry.ts +1 -45
- package/src/hooks/first-run-gate.ts +0 -5
- package/src/hooks/fp-home.ts +0 -23
- package/src/hooks/handler.ts +6 -265
- package/src/hooks/hook-activity-store.ts +1 -105
- package/src/hooks/hook-telemetry.ts +0 -41
- package/src/hooks/loader-utils.ts +0 -6
- package/src/hooks/pack-cli.ts +17 -278
- package/src/hooks/pack-manifest.ts +7 -479
- package/src/hooks/pack-store.ts +10 -156
- package/src/hooks/policy-catalog.ts +0 -65
- package/src/hooks/policy-evaluator.ts +796 -940
- package/src/hooks/policy-registry.ts +0 -25
- package/src/hooks/policy-types.ts +0 -126
- package/src/hooks/worker-server.ts +26 -119
- package/src/index.ts +0 -6
- package/.next/standalone/.next/server/chunks/src_hooks_01frwmb._.js +0 -5
- package/.next/standalone/.next/server/chunks/src_hooks_18qtd42._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01bmjsj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__059yza8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eip4_k._.js +0 -22
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qcb0mg._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qxnccm._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_yomn._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0soxz2z._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yrsbd_._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13d-wb6._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1dinjii._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qiz0e4._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0uyu3jf._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1feuvhb._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0w6mzq5._.js +0 -151
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_095a_79._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_15t8kqj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_18k8rl0._.js +0 -12
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1fm2w5z._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1j0zy3v._.js +0 -3
- package/.next/standalone/.next/static/chunks/0cd-_8-c-m1ea.js +0 -6
- package/.next/standalone/.next/static/chunks/0uldbut9y2-e8.js +0 -1
- package/.next/standalone/.next/static/chunks/1u5zsejmgrir_.js +0 -1
- package/.next/standalone/.next/static/chunks/285spx855h_3r.css +0 -2
- package/.next/standalone/.next/static/chunks/2qv4hshejedtx.css +0 -1
- package/.next/standalone/.next/static/chunks/2vkvu9-opa_1z.js +0 -1
- package/.next/standalone/.next/static/chunks/37lhv7wa3ywt6.js +0 -1
- package/.next/standalone/app/actions/get-jev-config.ts +0 -409
- package/.next/standalone/app/actions/update-jev-config.ts +0 -420
- package/.next/standalone/app/components/jev-notices.tsx +0 -96
- package/.next/standalone/app/settings/jev-panel.tsx +0 -469
- package/src/hooks/effective-reviewers.ts +0 -79
- package/src/hooks/jev-activity.ts +0 -385
- package/src/hooks/jev-cli.ts +0 -1193
- package/src/hooks/policy-authority.ts +0 -333
- package/src/hooks/policy-reviewability.ts +0 -229
- package/src/hooks/semantic/combine.ts +0 -541
- package/src/hooks/semantic/compile.ts +0 -176
- package/src/hooks/semantic/decide.ts +0 -392
- package/src/hooks/semantic/envelope.ts +0 -1296
- package/src/hooks/semantic/evaluator.ts +0 -547
- package/src/hooks/semantic/facts.ts +0 -292
- package/src/hooks/semantic/intent.ts +0 -1190
- package/src/hooks/semantic/jev-client.ts +0 -643
- package/src/hooks/semantic/jev-config.ts +0 -594
- package/src/hooks/semantic/jev-review.ts +0 -374
- package/src/hooks/semantic/jev-stats.ts +0 -289
- package/src/hooks/semantic/jev-throttle.ts +0 -421
- package/src/hooks/semantic/pack-policies.ts +0 -251
- package/src/hooks/semantic/policies.ts +0 -596
- package/src/hooks/semantic/precondition-names.ts +0 -60
- package/src/hooks/semantic/preconditions.ts +0 -58
- package/src/hooks/semantic/redact.ts +0 -2910
- package/src/hooks/semantic/types.ts +0 -145
- package/src/hooks/semver-precedence.ts +0 -128
- /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → PgeWCHmyVbjRznv2VO7KF}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → PgeWCHmyVbjRznv2VO7KF}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → PgeWCHmyVbjRznv2VO7KF}/_ssgManifest.js +0 -0
package/src/hooks/pack-store.ts
CHANGED
|
@@ -35,17 +35,8 @@
|
|
|
35
35
|
import { createHash } from "node:crypto";
|
|
36
36
|
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
37
37
|
import { dirname, resolve } from "node:path";
|
|
38
|
-
import {
|
|
39
|
-
|
|
40
|
-
PACK_COMMIT_RE,
|
|
41
|
-
checkPackMinCliVersion,
|
|
42
|
-
packsRoot,
|
|
43
|
-
parsePackIdentity,
|
|
44
|
-
parsePackPolicy,
|
|
45
|
-
parsePackSemanticPolicy,
|
|
46
|
-
readInstalledPacks,
|
|
47
|
-
} from "./pack-manifest";
|
|
48
|
-
import type { ResolvedPack, SemanticManifestEntry } from "./pack-manifest";
|
|
38
|
+
import { PACK_COMMIT_RE, packsRoot, parsePackIdentity, parsePackPolicy, readInstalledPacks } from "./pack-manifest";
|
|
39
|
+
import type { ResolvedPack } from "./pack-manifest";
|
|
49
40
|
import type { InstalledPackRecord } from "./pack-manifest";
|
|
50
41
|
import type { PolicyCatalogEntry } from "./policy-types";
|
|
51
42
|
import type { PolicyEffect } from "./cloud-managed-policies";
|
|
@@ -95,13 +86,6 @@ export interface AddPackResult {
|
|
|
95
86
|
selection: SelectionReason;
|
|
96
87
|
/** Category slugs the pack offers, for `--category`. */
|
|
97
88
|
categories: string[];
|
|
98
|
-
/**
|
|
99
|
-
* How many Jev question sets came with it, and not a list of names: they are
|
|
100
|
-
* not selectable and not switchable, so a name here would invite a `--policy`
|
|
101
|
-
* that cannot work. A non-zero count is what stops a semantic-only install
|
|
102
|
-
* reporting "the pack is installed and enforcing nothing".
|
|
103
|
-
*/
|
|
104
|
-
semantic: number;
|
|
105
89
|
artifact: string;
|
|
106
90
|
}
|
|
107
91
|
|
|
@@ -470,10 +454,6 @@ interface FetchedPack {
|
|
|
470
454
|
id: string;
|
|
471
455
|
version: string;
|
|
472
456
|
policies: PolicyCatalogEntry[];
|
|
473
|
-
/** The pack's Jev question sets, validated. Empty when it declares none. */
|
|
474
|
-
semantic: SemanticManifestEntry[];
|
|
475
|
-
/** The minimum CLI it claims, once this one has been checked against it. */
|
|
476
|
-
minCliVersion?: string;
|
|
477
457
|
effect?: PolicyEffect;
|
|
478
458
|
/** The git commit the publisher built this from, when they had one. */
|
|
479
459
|
commit?: string;
|
|
@@ -481,66 +461,6 @@ interface FetchedPack {
|
|
|
481
461
|
artifactDigest: string;
|
|
482
462
|
}
|
|
483
463
|
|
|
484
|
-
/**
|
|
485
|
-
* The shape both fetch paths read a manifest's `semantic` array through.
|
|
486
|
-
*
|
|
487
|
-
* REFUSES what the loader would only drop, and the asymmetry is the same one
|
|
488
|
-
* `parsePackPolicy` already has on this path: nothing has been written yet, so
|
|
489
|
-
* refusing costs the user a clear error message and the publisher a fix —
|
|
490
|
-
* whereas dropping an entry here would install a pack that enforces less than
|
|
491
|
-
* the preview just showed, with the difference recorded only in a hook log. The
|
|
492
|
-
* loader drops instead because by then the pack IS installed and refusing it
|
|
493
|
-
* denies every tool call its regex policies cover.
|
|
494
|
-
*
|
|
495
|
-
* The per-pack cap is checked for the same reason. Over it, the loader keeps the
|
|
496
|
-
* first 24 in declared order and records the rest as dropped; letting that
|
|
497
|
-
* happen silently at install time means a machine quietly running a subset of
|
|
498
|
-
* what the user agreed to.
|
|
499
|
-
*
|
|
500
|
-
* The CHARACTER budget is deliberately not checked here. It lives in
|
|
501
|
-
* `semantic/pack-policies.ts`, and importing that module would pull Jev's
|
|
502
|
-
* sixteen prompts into this one — which is reachable from a Next.js server
|
|
503
|
-
* action (`app/actions/pack-actions.ts`), not just from the CLI. `failproofai
|
|
504
|
-
* publish` refuses an over-budget pack at build time, and a pack built by some
|
|
505
|
-
* other tool has its overflow dropped at resolve time with a recorded reason.
|
|
506
|
-
*/
|
|
507
|
-
function parseManifestSemantic(packId: string, value: unknown): SemanticManifestEntry[] {
|
|
508
|
-
if (value === undefined) return [];
|
|
509
|
-
if (!Array.isArray(value)) throw new Error(`pack ${packId} semantic is not an array`);
|
|
510
|
-
if (value.length > MAX_SEMANTIC_POLICIES_PER_PACK) {
|
|
511
|
-
throw new Error(
|
|
512
|
-
`pack ${packId} declares ${value.length} semantic policies, over the cap of ${MAX_SEMANTIC_POLICIES_PER_PACK}`,
|
|
513
|
-
);
|
|
514
|
-
}
|
|
515
|
-
const entries = value.map((entry, i) => parsePackSemanticPolicy(packId, entry, i));
|
|
516
|
-
const names = new Set<string>();
|
|
517
|
-
for (const entry of entries) {
|
|
518
|
-
if (names.has(entry.name)) throw new Error(`pack ${packId} declares semantic policy ${entry.name} twice`);
|
|
519
|
-
names.add(entry.name);
|
|
520
|
-
}
|
|
521
|
-
return entries;
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
/**
|
|
525
|
-
* Refuse a pack this CLI is too old to run — HERE, where the message is
|
|
526
|
-
* something the person who typed the command can act on.
|
|
527
|
-
*
|
|
528
|
-
* The loader refuses it too, and that refusal is the fail-closed one: on a
|
|
529
|
-
* machine where it lands, every tool call the pack's policies cover is denied
|
|
530
|
-
* until somebody works out why. Catching it at install turns the same fact into
|
|
531
|
-
* one line at the moment of choosing.
|
|
532
|
-
*
|
|
533
|
-
* A minimum this build cannot compare is IGNORED, exactly as the loader ignores
|
|
534
|
-
* it: a publisher's typo in a version string must not be able to stop anyone
|
|
535
|
-
* installing a pack. `failproofai publish` refuses to write one, so this is
|
|
536
|
-
* only reachable from a pack built by some other tool.
|
|
537
|
-
*/
|
|
538
|
-
function assertMinCliVersion(packId: string, declared: unknown): string | undefined {
|
|
539
|
-
const verdict = checkPackMinCliVersion(packId, declared);
|
|
540
|
-
if (verdict.kind === "too-old") throw new Error(verdict.reason);
|
|
541
|
-
return verdict.kind === "satisfied" ? verdict.declared : undefined;
|
|
542
|
-
}
|
|
543
|
-
|
|
544
464
|
/** Fetch and fully validate a pack, without writing anything. */
|
|
545
465
|
/**
|
|
546
466
|
* The short names for the pack Failproof AI publishes.
|
|
@@ -623,19 +543,6 @@ export interface PackPreview {
|
|
|
623
543
|
/** The git commit the publisher built this from, when they had one. */
|
|
624
544
|
commit?: string;
|
|
625
545
|
policies: PolicyCatalogEntry[];
|
|
626
|
-
/**
|
|
627
|
-
* The pack's Jev question sets. Shown, not selectable: a pack's `enabled`
|
|
628
|
-
* narrowing picks which of its REGEX policies register, and its semantic set
|
|
629
|
-
* replaces this build's wholesale or not at all.
|
|
630
|
-
*
|
|
631
|
-
* Carried on the preview because the preview is what somebody consents to. A
|
|
632
|
-
* pack that quietly brings sixteen new questions to the classifier — and
|
|
633
|
-
* replaces the sixteen this build shipped — is not something to discover after
|
|
634
|
-
* installing it.
|
|
635
|
-
*/
|
|
636
|
-
semantic: SemanticManifestEntry[];
|
|
637
|
-
/** The minimum CLI this pack declares, when it declares one this build can read. */
|
|
638
|
-
minCliVersion?: string;
|
|
639
546
|
/** The exact source the preview was read from, tag resolved and pinned. */
|
|
640
547
|
source: string;
|
|
641
548
|
/** True when the tag was resolved rather than typed. */
|
|
@@ -682,52 +589,22 @@ export async function fetchPackPreview(source: string): Promise<PackPreview> {
|
|
|
682
589
|
if (!raw || typeof raw !== "object") throw new Error(`${PACK_MANIFEST_ASSET} is not an object`);
|
|
683
590
|
const value = raw as {
|
|
684
591
|
id?: unknown; version?: unknown; policies?: unknown; effect?: unknown; commit?: unknown;
|
|
685
|
-
semantic?: unknown; minCliVersion?: unknown;
|
|
686
592
|
};
|
|
687
593
|
const identity = parsePackIdentity(value);
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
assertDeclaresSomething(policies, semantic);
|
|
594
|
+
if (!Array.isArray(value.policies) || value.policies.length === 0) {
|
|
595
|
+
throw new Error("pack manifest declares no policies");
|
|
596
|
+
}
|
|
692
597
|
return {
|
|
693
598
|
id: identity.id,
|
|
694
599
|
version: identity.version,
|
|
695
600
|
effect: identity.effect,
|
|
696
601
|
...(identity.commit ? { commit: identity.commit } : {}),
|
|
697
|
-
policies,
|
|
698
|
-
semantic,
|
|
699
|
-
...(minCliVersion ? { minCliVersion } : {}),
|
|
602
|
+
policies: value.policies.map((policy, i) => parsePackPolicy(identity.id, policy, i)),
|
|
700
603
|
source: formatPackSpec(spec),
|
|
701
604
|
resolvedFromLatest,
|
|
702
605
|
};
|
|
703
606
|
}
|
|
704
607
|
|
|
705
|
-
/**
|
|
706
|
-
* The regex half of a manifest. ABSENT is an empty list, not an error: a pack of
|
|
707
|
-
* Jev questions alone is a legitimate thing to publish now, and ours writes
|
|
708
|
-
* `policies: []` for one. Present and not an array is still malformed.
|
|
709
|
-
*/
|
|
710
|
-
function parseManifestPolicies(packId: string, value: unknown): PolicyCatalogEntry[] {
|
|
711
|
-
if (value === undefined) return [];
|
|
712
|
-
if (!Array.isArray(value)) throw new Error(`pack ${packId} policies is not an array`);
|
|
713
|
-
return value.map((policy, i) => parsePackPolicy(packId, policy, i));
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
/**
|
|
717
|
-
* A pack has to bring SOMETHING, and either half counts.
|
|
718
|
-
*
|
|
719
|
-
* It used to be "at least one regex policy", which made a pack of Jev questions
|
|
720
|
-
* alone impossible to install — and that is a legitimate pack: the regex floor
|
|
721
|
-
* may already be somebody else's, and the two halves version independently. This
|
|
722
|
-
* is the same widening `build()` makes to its "registered no policies" refusal,
|
|
723
|
-
* so the two ends of the lane agree on what an empty pack is.
|
|
724
|
-
*/
|
|
725
|
-
function assertDeclaresSomething(policies: PolicyCatalogEntry[], semantic: SemanticManifestEntry[]): void {
|
|
726
|
-
if (policies.length === 0 && semantic.length === 0) {
|
|
727
|
-
throw new Error("pack manifest declares no policies");
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
|
-
|
|
731
608
|
/**
|
|
732
609
|
* The record this install is really an update OF — matched by id, or failing
|
|
733
610
|
* that by artifact digest.
|
|
@@ -770,26 +647,20 @@ async function fetchPack(spec: PinnedPackSpec): Promise<FetchedPack> {
|
|
|
770
647
|
if (!parsed || typeof parsed !== "object") throw new Error(`${PACK_MANIFEST_ASSET} is not an object`);
|
|
771
648
|
const raw = parsed as {
|
|
772
649
|
id?: unknown; version?: unknown; policies?: unknown; effect?: unknown; commit?: unknown;
|
|
773
|
-
semantic?: unknown; minCliVersion?: unknown;
|
|
774
650
|
};
|
|
775
651
|
const identity = parsePackIdentity(raw);
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
const minCliVersion = assertMinCliVersion(identity.id, raw.minCliVersion);
|
|
652
|
+
if (!Array.isArray(raw.policies) || raw.policies.length === 0) {
|
|
653
|
+
throw new Error("pack manifest declares no policies");
|
|
654
|
+
}
|
|
780
655
|
// Validated with the SAME rules the loader applies, so a pack that could never
|
|
781
656
|
// load is refused here — while nothing has been written — rather than
|
|
782
657
|
// installing cleanly and failing silently on the next tool call.
|
|
783
|
-
const policies =
|
|
784
|
-
const semantic = parseManifestSemantic(identity.id, raw.semantic);
|
|
785
|
-
assertDeclaresSomething(policies, semantic);
|
|
658
|
+
const policies = raw.policies.map((p, i) => parsePackPolicy(identity.id, p, i));
|
|
786
659
|
|
|
787
660
|
return {
|
|
788
661
|
id: identity.id,
|
|
789
662
|
version: identity.version,
|
|
790
663
|
policies,
|
|
791
|
-
semantic,
|
|
792
|
-
...(minCliVersion ? { minCliVersion } : {}),
|
|
793
664
|
...(raw.effect !== undefined ? { effect: identity.effect } : {}),
|
|
794
665
|
...(identity.commit ? { commit: identity.commit } : {}),
|
|
795
666
|
artifact,
|
|
@@ -1060,22 +931,6 @@ export async function addPack(
|
|
|
1060
931
|
entry: artifactRel,
|
|
1061
932
|
sha256: fetched.artifactDigest,
|
|
1062
933
|
policies: fetched.policies,
|
|
1063
|
-
// Both halves of the manifest reach the record, because `installed.json` is
|
|
1064
|
-
// the only thing enforcement reads. Left off, a pack's Jev questions were
|
|
1065
|
-
// fetched, verified, shown in the preview and then dropped on the floor: the
|
|
1066
|
-
// resolver found no `semantic` on any installed pack, kept this build's
|
|
1067
|
-
// compiled set, and every pack policy naming one of the pack's own checks in
|
|
1068
|
-
// `reviewedBy` registered as hard. Nothing failed, and the half the user
|
|
1069
|
-
// installed did nothing.
|
|
1070
|
-
//
|
|
1071
|
-
// Omitted when empty for the same reason the manifest omits it: an empty
|
|
1072
|
-
// array reads as "this pack declares semantic entries", and the replacement
|
|
1073
|
-
// rule would then have it replace the compiled-in set with nothing.
|
|
1074
|
-
...(fetched.semantic.length > 0 ? { semantic: fetched.semantic } : {}),
|
|
1075
|
-
// Recorded so the READER re-checks it. This CLI has already satisfied it or
|
|
1076
|
-
// refused the install, but the record outlives this CLI: a downgrade, or a
|
|
1077
|
-
// machine restored from another's home directory, has to meet it again.
|
|
1078
|
-
...(fetched.minCliVersion ? { minCliVersion: fetched.minCliVersion } : {}),
|
|
1079
934
|
// Provenance, carried through from the manifest so `policies` and the
|
|
1080
935
|
// dashboard can say which source produced what is installed. NOT part of
|
|
1081
936
|
// verification — `sha256` above is the pin, and this is a label beside it.
|
|
@@ -1123,7 +978,6 @@ export async function addPack(
|
|
|
1123
978
|
available,
|
|
1124
979
|
selection: reason,
|
|
1125
980
|
categories: [...new Set(fetched.policies.map((p) => slugifyCategory(p.category)))],
|
|
1126
|
-
semantic: fetched.semantic.length,
|
|
1127
981
|
artifact: artifactAbs,
|
|
1128
982
|
};
|
|
1129
983
|
}
|
|
@@ -25,12 +25,6 @@
|
|
|
25
25
|
* - **Absent optionals stay absent.** `beta`, `alwaysOn` and `params` are read
|
|
26
26
|
* with `in` and `undefined` checks; default-filling them changes behaviour and
|
|
27
27
|
* fails existing tests.
|
|
28
|
-
* - **Every entry states its `authority`,** even though absent already means
|
|
29
|
-
* `hard`: whether Jev may clear a builtin's verdict is a decision to make per
|
|
30
|
-
* policy, not a default to inherit. `reviewable` only where a semantic policy
|
|
31
|
-
* genuinely covers the same concern, named in `reviewedBy`. The table and the
|
|
32
|
-
* reasoning are in `docs/policies/authority.mdx`; `alwaysOn` is hard whatever
|
|
33
|
-
* it says here.
|
|
34
28
|
*
|
|
35
29
|
* `params.default` values are handed to policies BY REFERENCE, so this must stay
|
|
36
30
|
* one module-level const — never a factory minting fresh defaults per call.
|
|
@@ -44,7 +38,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
44
38
|
displayTitle: "Redacted JWT tokens from tool output",
|
|
45
39
|
impact: "Stops the agent from echoing auth tokens it saw in command output.",
|
|
46
40
|
match: { events: ["PostToolUse"] },
|
|
47
|
-
authority: "hard",
|
|
48
41
|
defaultEnabled: true,
|
|
49
42
|
category: "Sanitize",
|
|
50
43
|
},
|
|
@@ -54,7 +47,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
54
47
|
displayTitle: "Redacted API keys from tool output",
|
|
55
48
|
impact: "Catches OpenAI / Anthropic / GitHub / AWS / Stripe / Google keys before the model sees them.",
|
|
56
49
|
match: { events: ["PostToolUse"] },
|
|
57
|
-
authority: "hard",
|
|
58
50
|
defaultEnabled: true,
|
|
59
51
|
category: "Sanitize",
|
|
60
52
|
params: {
|
|
@@ -71,7 +63,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
71
63
|
displayTitle: "Redacted database connection strings from tool output",
|
|
72
64
|
impact: "Strips embedded DB credentials before they reach the model context.",
|
|
73
65
|
match: { events: ["PostToolUse"] },
|
|
74
|
-
authority: "hard",
|
|
75
66
|
defaultEnabled: true,
|
|
76
67
|
category: "Sanitize",
|
|
77
68
|
},
|
|
@@ -81,7 +72,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
81
72
|
displayTitle: "Redacted PEM private keys from tool output",
|
|
82
73
|
impact: "Prevents private key bodies from being echoed into chat context.",
|
|
83
74
|
match: { events: ["PostToolUse"] },
|
|
84
|
-
authority: "hard",
|
|
85
75
|
defaultEnabled: true,
|
|
86
76
|
category: "Sanitize",
|
|
87
77
|
},
|
|
@@ -91,7 +81,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
91
81
|
impact: "Strips Authorization: Bearer values before they hit the model.",
|
|
92
82
|
description: "Stop Claude from reading Authorization Bearer tokens in tool responses",
|
|
93
83
|
match: { events: ["PostToolUse"] },
|
|
94
|
-
authority: "hard",
|
|
95
84
|
defaultEnabled: true,
|
|
96
85
|
category: "Sanitize",
|
|
97
86
|
},
|
|
@@ -101,8 +90,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
101
90
|
impact: "Env vars often contain secrets; blocking `env` / `printenv` keeps them out of the model context.",
|
|
102
91
|
description: "Prevent commands that read environment variables",
|
|
103
92
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
104
|
-
authority: "reviewable",
|
|
105
|
-
reviewedBy: ["env-secrets-dump", "secret-exposure"],
|
|
106
93
|
defaultEnabled: true,
|
|
107
94
|
category: "Environment",
|
|
108
95
|
},
|
|
@@ -112,8 +99,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
112
99
|
impact: "`.env` files routinely contain API keys and DB credentials.",
|
|
113
100
|
description: "Block reading/writing .env files",
|
|
114
101
|
match: { events: ["PreToolUse"] },
|
|
115
|
-
authority: "reviewable",
|
|
116
|
-
reviewedBy: ["secret-exposure"],
|
|
117
102
|
defaultEnabled: true,
|
|
118
103
|
category: "Environment",
|
|
119
104
|
},
|
|
@@ -123,8 +108,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
123
108
|
impact: "Stops the agent from peeking at neighboring repos or your home directory.",
|
|
124
109
|
description: "Block file reads outside the session working directory",
|
|
125
110
|
match: { events: ["PreToolUse"], toolNames: ["Read", "Glob", "Grep", "Bash"] },
|
|
126
|
-
authority: "reviewable",
|
|
127
|
-
reviewedBy: ["read-outside-workspace"],
|
|
128
111
|
defaultEnabled: false,
|
|
129
112
|
category: "Environment",
|
|
130
113
|
params: {
|
|
@@ -143,7 +126,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
143
126
|
// PermissionRequest is Codex's escalation-approval event; fire the same
|
|
144
127
|
// sudo guard there so Codex sandbox bypasses are blocked too.
|
|
145
128
|
match: { events: ["PreToolUse", "PermissionRequest"], toolNames: ["Bash"] },
|
|
146
|
-
authority: "hard",
|
|
147
129
|
defaultEnabled: true,
|
|
148
130
|
category: "Dangerous Commands",
|
|
149
131
|
params: {
|
|
@@ -160,7 +142,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
160
142
|
impact: "`curl ... | sh` runs unverified remote code on your machine.",
|
|
161
143
|
description: "Block piping downloads to shell",
|
|
162
144
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
163
|
-
authority: "hard",
|
|
164
145
|
defaultEnabled: true,
|
|
165
146
|
category: "Dangerous Commands",
|
|
166
147
|
},
|
|
@@ -170,7 +151,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
170
151
|
impact: "Catches catastrophic `rm -rf /` and Windows equivalents.",
|
|
171
152
|
description: "Prevent catastrophic deletions",
|
|
172
153
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
173
|
-
authority: "hard",
|
|
174
154
|
defaultEnabled: false,
|
|
175
155
|
category: "Dangerous Commands",
|
|
176
156
|
params: {
|
|
@@ -200,7 +180,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
200
180
|
},
|
|
201
181
|
defaultEnabled: true,
|
|
202
182
|
alwaysOn: true,
|
|
203
|
-
authority: "hard",
|
|
204
183
|
category: "Dangerous Commands",
|
|
205
184
|
},
|
|
206
185
|
{
|
|
@@ -209,7 +188,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
209
188
|
impact: "kubectl can change live cluster state — gated unless allow-listed.",
|
|
210
189
|
description: "Block kubectl commands (Kubernetes cluster mutations)",
|
|
211
190
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
212
|
-
authority: "hard",
|
|
213
191
|
defaultEnabled: false,
|
|
214
192
|
category: "Infra Commands",
|
|
215
193
|
params: {
|
|
@@ -226,7 +204,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
226
204
|
impact: "Terraform mutates real infrastructure — gated unless allow-listed.",
|
|
227
205
|
description: "Block terraform and tofu (OpenTofu) commands",
|
|
228
206
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
229
|
-
authority: "hard",
|
|
230
207
|
defaultEnabled: false,
|
|
231
208
|
category: "Infra Commands",
|
|
232
209
|
params: {
|
|
@@ -243,7 +220,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
243
220
|
impact: "AWS CLI can spend money or break prod — gated.",
|
|
244
221
|
description: "Block aws CLI commands",
|
|
245
222
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
246
|
-
authority: "hard",
|
|
247
223
|
defaultEnabled: false,
|
|
248
224
|
category: "Infra Commands",
|
|
249
225
|
params: {
|
|
@@ -260,7 +236,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
260
236
|
impact: "gcloud can spend money or break prod — gated.",
|
|
261
237
|
description: "Block gcloud (Google Cloud) CLI commands",
|
|
262
238
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
263
|
-
authority: "hard",
|
|
264
239
|
defaultEnabled: false,
|
|
265
240
|
category: "Infra Commands",
|
|
266
241
|
params: {
|
|
@@ -277,7 +252,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
277
252
|
impact: "az can spend money or break prod — gated.",
|
|
278
253
|
description: "Block az (Azure) CLI commands",
|
|
279
254
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
280
|
-
authority: "hard",
|
|
281
255
|
defaultEnabled: false,
|
|
282
256
|
category: "Infra Commands",
|
|
283
257
|
params: {
|
|
@@ -294,7 +268,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
294
268
|
impact: "Helm releases mutate cluster state — gated.",
|
|
295
269
|
description: "Block helm commands",
|
|
296
270
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
297
|
-
authority: "hard",
|
|
298
271
|
defaultEnabled: false,
|
|
299
272
|
category: "Infra Commands",
|
|
300
273
|
params: {
|
|
@@ -311,7 +284,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
311
284
|
impact: "Catches `gh workflow run`, `gh pr merge`, `gh secret set`, etc.",
|
|
312
285
|
description: "Block gh CLI pipeline-trigger subcommands (workflow run, run rerun/cancel, pr merge, release create/delete, cache delete, secret set/delete)",
|
|
313
286
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
314
|
-
authority: "hard",
|
|
315
287
|
defaultEnabled: false,
|
|
316
288
|
category: "Infra Commands",
|
|
317
289
|
params: {
|
|
@@ -328,7 +300,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
328
300
|
impact: "Stops the agent from creating `.pem`, `id_rsa`, `credentials.json`, etc.",
|
|
329
301
|
description: "Block writing secret key files",
|
|
330
302
|
match: { events: ["PreToolUse"], toolNames: ["Write"] },
|
|
331
|
-
authority: "hard",
|
|
332
303
|
defaultEnabled: false,
|
|
333
304
|
category: "Dangerous Commands",
|
|
334
305
|
params: {
|
|
@@ -345,7 +316,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
345
316
|
impact: "Direct pushes to a protected branch bypass review.",
|
|
346
317
|
description: "Block pushing to main/master",
|
|
347
318
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
348
|
-
authority: "hard",
|
|
349
319
|
defaultEnabled: true,
|
|
350
320
|
category: "Git",
|
|
351
321
|
params: {
|
|
@@ -362,7 +332,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
362
332
|
impact: "Force-pushes rewrite history and can clobber teammates' work.",
|
|
363
333
|
description: "Prevent force-pushing to any branch",
|
|
364
334
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
365
|
-
authority: "hard",
|
|
366
335
|
defaultEnabled: false,
|
|
367
336
|
category: "Git",
|
|
368
337
|
},
|
|
@@ -372,21 +341,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
372
341
|
impact: "Work should land via PR — direct commits skip review.",
|
|
373
342
|
description: "Block git commits and merges on main/master branch",
|
|
374
343
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
375
|
-
// Hard, although `commit-on-protected-branch` covers exactly this concern.
|
|
376
|
-
// That check is `mode: "instruct"`, and an instruct-mode reviewer can never
|
|
377
|
-
// answer deny — so the conjunction had one reachable outcome, cleared, and
|
|
378
|
-
// marking this reviewable did not hand the decision to Jev. It switched the
|
|
379
|
-
// policy off on every machine that configured Jev, while the mark said
|
|
380
|
-
// otherwise.
|
|
381
|
-
//
|
|
382
|
-
// The test that matters is not "can the reviewer keep this block" but "is
|
|
383
|
-
// there anything left that can deny". `block-read-outside-cwd` also has only
|
|
384
|
-
// an instruct reviewer and stays reviewable, because when it clears,
|
|
385
|
-
// `secret-exposure` and `credential-exfiltration` are still asked about the
|
|
386
|
-
// same read and still deny on their own through the most-severe merge. Here
|
|
387
|
-
// nothing else covers committing on a protected branch, so a clear leaves
|
|
388
|
-
// the concern unenforced by anything.
|
|
389
|
-
authority: "hard",
|
|
390
344
|
defaultEnabled: false,
|
|
391
345
|
category: "Git",
|
|
392
346
|
params: {
|
|
@@ -403,8 +357,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
403
357
|
impact: "Amending after a push rewrites history that others may have pulled.",
|
|
404
358
|
description: "Warns before amending git commits, which rewrites history",
|
|
405
359
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
406
|
-
authority: "reviewable",
|
|
407
|
-
reviewedBy: ["git-history-rewrite"],
|
|
408
360
|
defaultEnabled: false,
|
|
409
361
|
category: "Git",
|
|
410
362
|
},
|
|
@@ -414,7 +366,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
414
366
|
impact: "Stash deletions are permanent and silent.",
|
|
415
367
|
description: "Warns before permanently deleting stashed changes",
|
|
416
368
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
417
|
-
authority: "hard",
|
|
418
369
|
defaultEnabled: false,
|
|
419
370
|
category: "Git",
|
|
420
371
|
},
|
|
@@ -424,7 +375,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
424
375
|
impact: "Wide stages routinely catch generated files or secrets you didn't intend to commit.",
|
|
425
376
|
description: "Warns before staging all working tree files with git add -A / . / --all",
|
|
426
377
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
427
|
-
authority: "hard",
|
|
428
378
|
defaultEnabled: false,
|
|
429
379
|
category: "Git",
|
|
430
380
|
},
|
|
@@ -434,8 +384,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
434
384
|
impact: "Easy way to wipe a table by accident.",
|
|
435
385
|
description: "Warn before executing destructive SQL (DROP/TRUNCATE/DELETE without WHERE) via database clients",
|
|
436
386
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
437
|
-
authority: "reviewable",
|
|
438
|
-
reviewedBy: ["database-destruction"],
|
|
439
387
|
defaultEnabled: false,
|
|
440
388
|
category: "Database",
|
|
441
389
|
},
|
|
@@ -445,7 +393,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
445
393
|
impact: "ALTER TABLE operations can lock tables and break readers.",
|
|
446
394
|
description: "Warns before SQL schema changes (ALTER TABLE with column or rename operations)",
|
|
447
395
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
448
|
-
authority: "hard",
|
|
449
396
|
defaultEnabled: false,
|
|
450
397
|
category: "Database",
|
|
451
398
|
},
|
|
@@ -455,7 +402,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
455
402
|
impact: "Publishes are irreversible — `npm publish` / `cargo publish` shouldn't happen without intent.",
|
|
456
403
|
description: "Warn before publishing packages to public registries (npm, PyPI, crates.io, RubyGems, etc.)",
|
|
457
404
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
458
|
-
authority: "hard",
|
|
459
405
|
defaultEnabled: false,
|
|
460
406
|
category: "Packages & System",
|
|
461
407
|
},
|
|
@@ -465,8 +411,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
465
411
|
impact: "`npm i -g`, `cargo install`, `pip --user` pollute your machine outside the project.",
|
|
466
412
|
description: "Warns before installing packages globally (npm -g, cargo install, etc.)",
|
|
467
413
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
468
|
-
authority: "reviewable",
|
|
469
|
-
reviewedBy: ["system-modification"],
|
|
470
414
|
defaultEnabled: false,
|
|
471
415
|
category: "Packages & System",
|
|
472
416
|
},
|
|
@@ -476,7 +420,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
476
420
|
impact: "Mixing package managers creates lockfile churn for your team.",
|
|
477
421
|
description: "Blocks non-preferred package managers and tells Claude to use an allowed one (e.g., uv instead of pip)",
|
|
478
422
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
479
|
-
authority: "hard",
|
|
480
423
|
defaultEnabled: false,
|
|
481
424
|
category: "Packages & System",
|
|
482
425
|
params: {
|
|
@@ -498,7 +441,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
498
441
|
impact: "Catches accidentally large file writes (logs, binaries, model dumps).",
|
|
499
442
|
description: "Warn before writing files larger than 1MB (configurable via thresholdKb param)",
|
|
500
443
|
match: { events: ["PreToolUse"], toolNames: ["Write"] },
|
|
501
|
-
authority: "hard",
|
|
502
444
|
defaultEnabled: false,
|
|
503
445
|
category: "Packages & System",
|
|
504
446
|
params: {
|
|
@@ -515,7 +457,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
515
457
|
impact: "Catches `nohup` / `&` / `screen` / `tmux` / `disown` patterns that the agent often forgets to clean up.",
|
|
516
458
|
description: "Warns before starting detached or background processes",
|
|
517
459
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
518
|
-
authority: "hard",
|
|
519
460
|
defaultEnabled: false,
|
|
520
461
|
category: "Packages & System",
|
|
521
462
|
},
|
|
@@ -525,7 +466,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
525
466
|
impact: "Usually a sign of a stuck loop burning tokens.",
|
|
526
467
|
description: "Warn when the same tool is called 3+ times with identical parameters",
|
|
527
468
|
match: { events: ["PreToolUse"] },
|
|
528
|
-
authority: "hard",
|
|
529
469
|
defaultEnabled: false,
|
|
530
470
|
category: "AI Behavior",
|
|
531
471
|
},
|
|
@@ -535,7 +475,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
535
475
|
impact: "Work not in a commit is invisible to teammates and easy to lose.",
|
|
536
476
|
description: "Require all changes to be committed before Claude stops",
|
|
537
477
|
match: { events: ["Stop"] },
|
|
538
|
-
authority: "hard",
|
|
539
478
|
defaultEnabled: false,
|
|
540
479
|
category: "Workflow",
|
|
541
480
|
},
|
|
@@ -545,7 +484,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
545
484
|
impact: "Local-only commits won't trigger CI or be reviewable.",
|
|
546
485
|
description: "Require all commits to be pushed to remote before Claude stops",
|
|
547
486
|
match: { events: ["Stop"] },
|
|
548
|
-
authority: "hard",
|
|
549
487
|
defaultEnabled: false,
|
|
550
488
|
category: "Workflow",
|
|
551
489
|
params: {
|
|
@@ -567,7 +505,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
567
505
|
impact: "Branches without PRs don't get reviewed.",
|
|
568
506
|
description: "Require a pull request to exist for the current branch before Claude stops",
|
|
569
507
|
match: { events: ["Stop"] },
|
|
570
|
-
authority: "hard",
|
|
571
508
|
defaultEnabled: false,
|
|
572
509
|
category: "Workflow",
|
|
573
510
|
params: {
|
|
@@ -584,7 +521,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
584
521
|
impact: "Conflicting branches can't merge — surface them early.",
|
|
585
522
|
description: "Require the current branch to merge cleanly with the base branch before Claude stops",
|
|
586
523
|
match: { events: ["Stop"] },
|
|
587
|
-
authority: "hard",
|
|
588
524
|
defaultEnabled: false,
|
|
589
525
|
category: "Workflow",
|
|
590
526
|
params: {
|
|
@@ -601,7 +537,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
601
537
|
impact: "Failing CI blocks deploy.",
|
|
602
538
|
description: "Require CI checks to pass on the current HEAD commit before Claude stops (ignores stale runs on prior commits)",
|
|
603
539
|
match: { events: ["Stop"] },
|
|
604
|
-
authority: "hard",
|
|
605
540
|
defaultEnabled: false,
|
|
606
541
|
category: "Workflow",
|
|
607
542
|
},
|