failproofai 1.0.7 → 1.0.8
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 +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 +8 -7
- 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 +9 -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 -10
- 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 +8 -7
- 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 +6 -6
- 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 +7 -6
- 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 +52 -8
- package/.next/standalone/.next/server/app/settings/page.js +12 -7
- 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]__1msfs-h._.js → [externals]__19_pzeq._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__1_bftcl._.js → [externals]__20kzpkf._.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]__1ttrwnd._.js +22 -0
- 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/_1ek68ln._.js +16 -16
- package/.next/standalone/.next/server/chunks/{_1c3k-8x._.js → _1q5i8mb._.js} +2 -2
- package/.next/standalone/.next/server/chunks/lib_16xa545._.js +3 -0
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_1aveq0u._.js +5 -0
- package/.next/standalone/.next/server/chunks/src_hooks_1eem5a7._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3._.js +4 -2
- package/.next/standalone/.next/server/chunks/ssr/[externals]__0ohnuzs._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01bmjsj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__02npjtd._.js → [root-of-the-server]__056wjo4._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__059yza8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06pflha._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eip4_k._.js +22 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0p-5p8u._.js → [root-of-the-server]__0n0xg95._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qcb0mg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__013jr2b._.js → [root-of-the-server]__0rwtwpm._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yrsbd_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0da85px._.js → [root-of-the-server]__11mayhe._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12e7nhs._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13d-wb6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13t1zkw._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15578wp._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19evfi8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1dinjii._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m_svbe._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0cxe_2_._.js → [root-of-the-server]__1mf3zp6._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ftmoxc._.js → [root-of-the-server]__1pprgri._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1p2otjt._.js → [root-of-the-server]__1q4p5b8._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qiz0e4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_166t73i._.js → _0-vcssj._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0uyu3jf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_13kfn90._.js +23 -0
- package/.next/standalone/.next/server/chunks/ssr/{_1es2j7i._.js → _1gb0ifp._.js} +5 -5
- package/.next/standalone/.next/server/chunks/ssr/{_1_qswah._.js → _1q46vxx._.js} +2 -2
- 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 +13 -13
- package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +3 -0
- 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_02tf1h4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_0drixxt._.js → node_modules_next_dist_0w6mzq5._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_18_d8l1._.js +151 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_0-q0umm._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_06kzv9d._.js +12 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_0g194sy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4._.js +4 -2
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1kx9e0d._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_effective-reviewers_ts_1h4wtvo._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589g._.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/chunks/ssr/src_hooks_semantic_pack-policies_ts_0gh_bu_._.js +3 -0
- 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 +67 -23
- package/.next/standalone/.next/static/chunks/06dnzbolj00mc.js +6 -0
- package/.next/standalone/.next/static/chunks/0bhidk90e-07f.css +2 -0
- package/.next/standalone/.next/static/chunks/{2mdh397ghgnvv.js → 0m-9d6yn9hx4j.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0__8a7m868fvf.js → 0wbjy0zo-m7is.js} +1 -1
- package/.next/standalone/.next/static/chunks/16f3fa-lx38hk.js +1 -0
- package/.next/standalone/.next/static/chunks/{0o6qlkgubtoex.js → 21uv-uusw329x.js} +1 -1
- package/.next/standalone/.next/static/chunks/2g2tki08kdhie.js +1 -0
- package/.next/standalone/.next/static/chunks/2qdpj67x6ifk_.js +69 -0
- package/.next/standalone/.next/static/chunks/2qv4hshejedtx.css +1 -0
- package/.next/standalone/.next/static/chunks/3-nbtkhg9y-1j.js +1 -0
- package/.next/standalone/.next/static/chunks/355km0ihuqo1p.js +1 -0
- package/.next/standalone/.next/static/chunks/{13i7-9is-vhys.js → 3c3qbmosdjl6w.js} +1 -1
- package/.next/standalone/PROBE-FOLLOWUP.md +186 -0
- package/.next/standalone/app/actions/get-jev-config.ts +604 -0
- package/.next/standalone/app/actions/pack-actions.ts +12 -0
- package/.next/standalone/app/actions/update-jev-config.ts +569 -0
- package/.next/standalone/app/components/jev-notices.tsx +96 -0
- package/.next/standalone/app/policies/hooks-client.tsx +14 -3
- package/.next/standalone/app/settings/jev-panel.tsx +630 -0
- package/.next/standalone/app/settings/page.tsx +20 -1
- package/.next/standalone/app/settings/settings-client.tsx +27 -1
- package/.next/standalone/app/settings/settings.css +79 -0
- package/.next/standalone/fp-cloud-cli/CHANGELOG.md +22 -4
- package/.next/standalone/fp-cloud-cli/fp_cli/client.py +14 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/keys_cmds.py +17 -3
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +3 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/permissions.py +22 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/policy_check.py +169 -0
- package/.next/standalone/fp-cloud-cli/skill/references/commands.md +1 -1
- package/.next/standalone/fp-cloud-cli/tests/test_keys_queries.py +65 -0
- package/.next/standalone/fp-cloud-cli/tests/test_policy_check.py +61 -0
- package/.next/standalone/package.json +10 -10
- package/.next/standalone/sdk/python/CHANGELOG.md +7 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_version.py +1 -1
- package/.next/standalone/sdk/typescript/CHANGELOG.md +18 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package-lock.json +0 -274
- package/.next/standalone/sdk/typescript/scripts/release.mjs +30 -0
- package/.next/standalone/server.js +1 -1
- package/README.md +3 -2
- package/bin/failproofai.mjs +148 -4
- package/dist/cli.mjs +18599 -9478
- package/dist/index.js +19 -1
- package/dist/worker.mjs +10500 -3773
- package/package.json +10 -10
- package/pi-extension/index.ts +11 -0
- package/scripts/build-policy-pack.mjs +53 -2
- package/src/audit/features.ts +3 -2
- package/src/hooks/builtin-policies.ts +195 -8
- package/src/hooks/cloud-connection.ts +190 -1
- package/src/hooks/cloud-enrollment-cli.ts +57 -8
- package/src/hooks/cloud-introspect.ts +6 -0
- package/src/hooks/cloud-managed-policies.ts +22 -0
- package/src/hooks/configure-wizard.ts +26 -6
- package/src/hooks/custom-hooks-loader.ts +98 -10
- package/src/hooks/custom-hooks-registry.ts +45 -1
- package/src/hooks/effective-reviewers.ts +243 -0
- package/src/hooks/first-run-gate.ts +5 -0
- package/src/hooks/flush-cli.ts +35 -8
- package/src/hooks/fp-config.ts +266 -1
- package/src/hooks/fp-home.ts +23 -0
- package/src/hooks/fp-reset.ts +22 -4
- package/src/hooks/handler.ts +303 -7
- package/src/hooks/hook-activity-store.ts +118 -6
- package/src/hooks/hook-telemetry.ts +41 -0
- package/src/hooks/jev-activity.ts +385 -0
- package/src/hooks/jev-cli.ts +2172 -0
- package/src/hooks/jev-cloud-connection.ts +392 -0
- package/src/hooks/loader-utils.ts +6 -0
- package/src/hooks/manager.ts +45 -7
- package/src/hooks/pack-cli.ts +568 -37
- package/src/hooks/pack-failclosed.ts +3 -0
- package/src/hooks/pack-manifest.ts +489 -7
- package/src/hooks/pack-store.ts +194 -11
- package/src/hooks/policy-authority.ts +386 -0
- package/src/hooks/policy-catalog.ts +206 -0
- package/src/hooks/policy-evaluator.ts +963 -796
- package/src/hooks/policy-registry.ts +27 -1
- package/src/hooks/policy-reviewability.ts +258 -0
- package/src/hooks/policy-types.ts +128 -0
- package/src/hooks/semantic/combine.ts +581 -0
- package/src/hooks/semantic/compile.ts +176 -0
- package/src/hooks/semantic/decide.ts +513 -0
- package/src/hooks/semantic/envelope.ts +1255 -0
- package/src/hooks/semantic/evaluator.ts +556 -0
- package/src/hooks/semantic/facts.ts +387 -0
- package/src/hooks/semantic/intent.ts +1190 -0
- package/src/hooks/semantic/jev-client.ts +1155 -0
- package/src/hooks/semantic/jev-config.ts +1142 -0
- package/src/hooks/semantic/jev-review.ts +389 -0
- package/src/hooks/semantic/jev-stats.ts +289 -0
- package/src/hooks/semantic/jev-throttle.ts +427 -0
- package/src/hooks/semantic/pack-policies.ts +294 -0
- package/src/hooks/semantic/policies.ts +597 -0
- package/src/hooks/semantic/precondition-names.ts +60 -0
- package/src/hooks/semantic/preconditions.ts +58 -0
- package/src/hooks/semantic/redact.ts +2937 -0
- package/src/hooks/semantic/session-root.ts +116 -0
- package/src/hooks/semantic/types.ts +162 -0
- package/src/hooks/semver-precedence.ts +128 -0
- package/src/hooks/tui.ts +4 -0
- package/src/hooks/types.ts +1 -1
- package/src/hooks/worker-server.ts +121 -27
- package/src/index.ts +6 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cuho4x._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1_r2rbg._.js +0 -24
- package/.next/standalone/.next/server/chunks/src_hooks_0iu54mz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-_ki57._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bd3mje._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cg-bgc._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cpu_mj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u3w0ll._.js +0 -22
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__17d_ffl._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19d9tgz._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ctpynv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1jiwfsj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1phc187._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_06imw3p._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/_0h_douw._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1-i_gzc._.js +0 -23
- package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +0 -3
- package/.next/standalone/.next/static/chunks/094xgi4owxaqf.js +0 -1
- package/.next/standalone/.next/static/chunks/1rz20_pz828f3.js +0 -6
- package/.next/standalone/.next/static/chunks/2k9f4tyv04809.css +0 -1
- package/.next/standalone/.next/static/chunks/2klitrtzpaoe0.js +0 -1
- package/.next/standalone/.next/static/chunks/2rshywgeqsyzk.css +0 -2
- package/.next/standalone/.next/static/chunks/3pzx4chkhko9k.js +0 -1
- package/.next/standalone/.next/static/chunks/3rh5o7e16irrm.js +0 -69
- package/.next/standalone/.next/static/chunks/43ufqrz8qo3h-.js +0 -1
- /package/.next/standalone/.next/static/{PgeWCHmyVbjRznv2VO7KF → 5yKM8NoTOpUI0MoQl8eo5}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{PgeWCHmyVbjRznv2VO7KF → 5yKM8NoTOpUI0MoQl8eo5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{PgeWCHmyVbjRznv2VO7KF → 5yKM8NoTOpUI0MoQl8eo5}/_ssgManifest.js +0 -0
package/bin/failproofai.mjs
CHANGED
|
@@ -194,7 +194,7 @@ if (hookIdx >= 0) {
|
|
|
194
194
|
const reason =
|
|
195
195
|
attempt.failure === "protocol-mismatch"
|
|
196
196
|
? "failproofaid is running a different protocol version than this CLI, so it " +
|
|
197
|
-
"cannot evaluate this call. Run `failproofai
|
|
197
|
+
"cannot evaluate this call. Run `failproofai update` to update the daemon."
|
|
198
198
|
: "failproofaid could not be reached. This machine is configured to run hooks through it " +
|
|
199
199
|
"— check the daemon (see `failproofai config`) rather than retrying blindly.";
|
|
200
200
|
result = await evaluateHookEvent(eventType, cli, stdinRead.payload, {
|
|
@@ -373,7 +373,7 @@ async function runCli() {
|
|
|
373
373
|
// at all, only the paragraph in the top-level dump that this rewrite moved.
|
|
374
374
|
// `help` and `publish` are new. `policy` and `pack` are canonicalized to
|
|
375
375
|
// `policies` above and never reach this list.
|
|
376
|
-
const SUBCOMMANDS = ["policies", "audit", "config", "uninstall", "backfill", "flush", "harness", "publish", "update", "migrate", "help"];
|
|
376
|
+
const SUBCOMMANDS = ["policies", "audit", "config", "uninstall", "backfill", "flush", "harness", "jev", "publish", "update", "migrate", "help"];
|
|
377
377
|
// ── help ─────────────────────────────────────────────────────────────────
|
|
378
378
|
//
|
|
379
379
|
// The index and the reference manual used to be the same document: 152 lines,
|
|
@@ -475,6 +475,7 @@ async function runCli() {
|
|
|
475
475
|
["policies add", "Turn one on, or install a pack: <owner>/<repo>"],
|
|
476
476
|
["policies remove", "Turn one off, or uninstall a whole pack"],
|
|
477
477
|
["publish", "Ship your own policies as a pack anyone can install"],
|
|
478
|
+
["jev setup", "Let Jev judge calls with your own key, above regex"],
|
|
478
479
|
],
|
|
479
480
|
},
|
|
480
481
|
{
|
|
@@ -906,6 +907,139 @@ async function runCli() {
|
|
|
906
907
|
return;
|
|
907
908
|
}
|
|
908
909
|
|
|
910
|
+
// jev --url <url> | jev setup | status | test | remove
|
|
911
|
+
//
|
|
912
|
+
// The customer's own Jev endpoint and key (BYOK), the only opt-in to the
|
|
913
|
+
// two-tier hook evaluator. Writes ~/.failproofai/jev.json and nothing else —
|
|
914
|
+
// no root, no daemon call; hooks re-read the file on every event. The key is
|
|
915
|
+
// taken on stdin or at a masked prompt and never printed, so it stays out of
|
|
916
|
+
// `ps`, shell history and scrollback; `--token` is the one spelling that does
|
|
917
|
+
// put it on the command line, and says so every time it is used.
|
|
918
|
+
if (args[0] === "jev") {
|
|
919
|
+
const subArgs = args.slice(1);
|
|
920
|
+
if (subArgs.length === 0 || subArgs.includes("--help") || subArgs.includes("-h")) {
|
|
921
|
+
await printHelp({
|
|
922
|
+
command: "jev",
|
|
923
|
+
tagline: "judge tool calls with Jev — FailproofAI Cloud or your own endpoint — above a hard regex floor",
|
|
924
|
+
sections: [
|
|
925
|
+
{
|
|
926
|
+
label: "usage",
|
|
927
|
+
entries: [
|
|
928
|
+
["failproofai jev --url <url> --key-stdin [options]"],
|
|
929
|
+
["failproofai jev setup --provider <kind> --key-stdin [options]"],
|
|
930
|
+
["failproofai jev setup --provider failproofai [--mode <m>]"],
|
|
931
|
+
["failproofai jev status [--json]"],
|
|
932
|
+
["failproofai jev test [--json]"],
|
|
933
|
+
["failproofai jev models [--provider <kind>] [--url <base>] [--json]"],
|
|
934
|
+
["failproofai jev remove"],
|
|
935
|
+
],
|
|
936
|
+
},
|
|
937
|
+
{
|
|
938
|
+
label: "why",
|
|
939
|
+
lines: [
|
|
940
|
+
"Regex policies cannot tell `rm -rf build/` asked for from `rm -rf ~`",
|
|
941
|
+
"slipped in. Jev, TypeSafe's classifier, reads the call against what",
|
|
942
|
+
"you asked for. With a config it judges each call in parallel with",
|
|
943
|
+
"the regex policies: a hard policy's deny always stands, a reviewable",
|
|
944
|
+
"one's may be cleared, and any Jev failure falls back to regex. With",
|
|
945
|
+
"no config nothing changes — the regex policies run exactly as before.",
|
|
946
|
+
],
|
|
947
|
+
},
|
|
948
|
+
{
|
|
949
|
+
label: "providers",
|
|
950
|
+
entries: [
|
|
951
|
+
["typesafe", "api.typesafe.ai, model jev-1.13.0"],
|
|
952
|
+
["openrouter", "openrouter.ai, model typesafe/jev-1.13, zero-retention routing"],
|
|
953
|
+
["vercel", "Vercel AI Gateway, model typesafe-ai/jev"],
|
|
954
|
+
["cloudflare", "Workers AI, model typesafe/jev; needs --account-id"],
|
|
955
|
+
["custom", "any TypeSafe-compatible endpoint; needs --base-url"],
|
|
956
|
+
["failproofai", "FailproofAI Cloud, on your org's plan; no key or URL of your own"],
|
|
957
|
+
],
|
|
958
|
+
after: [
|
|
959
|
+
"--url reads the provider off the host, so it needs no --provider;",
|
|
960
|
+
"any other host is custom, with that URL as its base. It is a BASE:",
|
|
961
|
+
"/systemone is appended to it, and a URL that already names an",
|
|
962
|
+
"endpoint (/models, /chat/completions, /systemone, …) is refused",
|
|
963
|
+
"with the base it implies. `failproofai jev models` says which",
|
|
964
|
+
"model ids a base serves, and setup refuses one it does not.",
|
|
965
|
+
"",
|
|
966
|
+
"FailproofAI Cloud needs no setup here: `failproofai config --token",
|
|
967
|
+
"<key>` with a key that carries jev:evaluate (the \"machine\" preset)",
|
|
968
|
+
"turns it on in shadow mode when there is no jev.json yet — except",
|
|
969
|
+
"with --no-transcripts, which only stores the key; then",
|
|
970
|
+
"`failproofai jev setup --provider failproofai` switches it on. Its",
|
|
971
|
+
"key stays in credentials.json; no --url ever selects it.",
|
|
972
|
+
],
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
label: "setup options",
|
|
976
|
+
entries: [
|
|
977
|
+
["--url <url>", "The endpoint. Picks the provider from its host."],
|
|
978
|
+
["--token <token>", "The key, on the command line — history and `ps` see it."],
|
|
979
|
+
["--provider <kind>", "Required the first time, or to switch providers."],
|
|
980
|
+
["--key-stdin", "Read the key from stdin; on a terminal, a masked prompt."],
|
|
981
|
+
["--key-from-env", "Store no key; read FAILPROOFAI_JEV_API_KEY per session."],
|
|
982
|
+
["--account-id <id>", "Cloudflare account id (32 hex characters)."],
|
|
983
|
+
["--base-url <url>", "Override the API base; `default` clears it."],
|
|
984
|
+
["--model <id>", "Override the model id; `default` clears it."],
|
|
985
|
+
["--mode <m>", "enforce (default), shadow (log Jev, enforce regex), or off."],
|
|
986
|
+
["--timeout-ms <n>", "Per-call budget before falling back. Default 3000."],
|
|
987
|
+
],
|
|
988
|
+
},
|
|
989
|
+
{
|
|
990
|
+
label: "notes",
|
|
991
|
+
lines: [
|
|
992
|
+
"• Global only: ~/.failproofai/jev.json, written 0600. A copy anyone",
|
|
993
|
+
" else can read — or one in a directory anyone else can WRITE, who",
|
|
994
|
+
" could replace it — is refused; a repository can never set it.",
|
|
995
|
+
"• Re-running setup for the same provider keeps the key, so",
|
|
996
|
+
" `failproofai jev setup --mode shadow` just switches the mode.",
|
|
997
|
+
"• The daemon does not see your shell's environment: keep the key in",
|
|
998
|
+
" the file on a machine set up with `failproofai config`.",
|
|
999
|
+
"• --token is the fast path, not the safe one: your shell history keeps",
|
|
1000
|
+
" it and the process list shows it. Prefer --key-stdin.",
|
|
1001
|
+
],
|
|
1002
|
+
},
|
|
1003
|
+
{
|
|
1004
|
+
label: "examples",
|
|
1005
|
+
lines: [
|
|
1006
|
+
"failproofai jev --url https://api.typesafe.ai/v1 --key-stdin < ~/typesafe.key",
|
|
1007
|
+
"failproofai jev --url https://openrouter.ai/api/v1 --token <token>",
|
|
1008
|
+
"failproofai jev setup --provider typesafe --key-stdin < ~/typesafe.key",
|
|
1009
|
+
"failproofai jev setup --provider cloudflare --account-id <id> --key-stdin",
|
|
1010
|
+
"failproofai config --token <key> (FailproofAI Cloud, shadow mode)",
|
|
1011
|
+
"failproofai jev setup --mode enforce (switch the configured route's mode)",
|
|
1012
|
+
"failproofai jev setup --mode off (keep the config, stop asking Jev)",
|
|
1013
|
+
"failproofai jev test",
|
|
1014
|
+
"failproofai jev status",
|
|
1015
|
+
"failproofai jev models",
|
|
1016
|
+
],
|
|
1017
|
+
},
|
|
1018
|
+
],
|
|
1019
|
+
});
|
|
1020
|
+
process.exit(0);
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
lastSubcommand = "jev";
|
|
1024
|
+
const { runJevCommand } = await import("../src/hooks/jev-cli");
|
|
1025
|
+
const result = await runJevCommand(subArgs);
|
|
1026
|
+
if (subArgs.includes("--json") && result.json !== undefined) {
|
|
1027
|
+
process.stdout.write(`${result.json}\n`);
|
|
1028
|
+
} else {
|
|
1029
|
+
await printLines(result.lines, result.exitCode === 0);
|
|
1030
|
+
}
|
|
1031
|
+
await track("cli_jev", {
|
|
1032
|
+
ok: result.exitCode === 0,
|
|
1033
|
+
// The subcommand only — never the provider, a URL, a model id or the key.
|
|
1034
|
+
// An argv opening with an option is the one-shot form of `setup`, and is
|
|
1035
|
+
// reported as `setup`: the literal, never the option or what follows it.
|
|
1036
|
+
sub: subArgs[0].startsWith("-") ? "setup" : ["setup", "status", "test", "models", "remove"].includes(subArgs[0]) ? subArgs[0] : "unknown",
|
|
1037
|
+
});
|
|
1038
|
+
lastSubcommand = null;
|
|
1039
|
+
await exitAfterFlush(result.exitCode);
|
|
1040
|
+
return;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
909
1043
|
// uninstall [--purge] [--dry-run] [--yes|-y]
|
|
910
1044
|
//
|
|
911
1045
|
// Top-level, and deliberately NOT a flag on `policies`. `policies --uninstall`
|
|
@@ -1538,7 +1672,7 @@ async function runCli() {
|
|
|
1538
1672
|
{
|
|
1539
1673
|
label: "choosing part of a pack",
|
|
1540
1674
|
entries: [
|
|
1541
|
-
["--policy a,b", "exactly these"],
|
|
1675
|
+
["--policy a,b", "exactly these (comma-separated or repeated)"],
|
|
1542
1676
|
["--category x,y", "whole categories (failproofai policies show <source>)"],
|
|
1543
1677
|
["--all", "everything it contains"],
|
|
1544
1678
|
],
|
|
@@ -2178,6 +2312,12 @@ async function runCli() {
|
|
|
2178
2312
|
// re-running enrolment with the url and token again just to fix a display name.
|
|
2179
2313
|
const wantsRename =
|
|
2180
2314
|
connectIdx < 0 && !wantsDisconnect && args.includes("--machine-label");
|
|
2315
|
+
// A key given as --token is in shell history whatever became of the run.
|
|
2316
|
+
const warnTokenOnArgv = async () => {
|
|
2317
|
+
if (!args.includes("--token")) return;
|
|
2318
|
+
const { CONFIG_TOKEN_HISTORY_WARNING } = await import("../src/hooks/cloud-enrollment-cli");
|
|
2319
|
+
process.stderr.write(`\n${CONFIG_TOKEN_HISTORY_WARNING.join("\n")}\n`);
|
|
2320
|
+
};
|
|
2181
2321
|
if (connectIdx >= 0 || wantsDisconnect || wantsRename) {
|
|
2182
2322
|
if (connectIdx >= 0 && wantsDisconnect) {
|
|
2183
2323
|
throw new CliError("--connect and --disconnect cannot be combined.");
|
|
@@ -2201,7 +2341,9 @@ async function runCli() {
|
|
|
2201
2341
|
const { runConnectCommand } = await import("../src/hooks/cloud-enrollment-cli");
|
|
2202
2342
|
result = await runConnectCommand({
|
|
2203
2343
|
url: valueAfter("--connect"),
|
|
2204
|
-
|
|
2344
|
+
// The same fallback the headless `config` path has, and the one
|
|
2345
|
+
// `config --help` documents: it keeps the key out of shell history.
|
|
2346
|
+
token: valueAfter("--token") ?? process.env.FAILPROOFAI_CLOUD_TOKEN,
|
|
2205
2347
|
machineId: valueAfter("--machine-id"),
|
|
2206
2348
|
machineLabel: valueAfter("--machine-label"),
|
|
2207
2349
|
defaultMachineId: hostname(),
|
|
@@ -2215,6 +2357,7 @@ async function runCli() {
|
|
|
2215
2357
|
});
|
|
2216
2358
|
}
|
|
2217
2359
|
await printLines(result.lines, result.exitCode === 0);
|
|
2360
|
+
await warnTokenOnArgv();
|
|
2218
2361
|
await track("cli_cloud_enrollment", {
|
|
2219
2362
|
action: wantsRename ? "rename" : wantsDisconnect ? "disconnect" : "connect",
|
|
2220
2363
|
ok: result.exitCode === 0,
|
|
@@ -2325,6 +2468,7 @@ async function runCli() {
|
|
|
2325
2468
|
noTranscripts: args.includes("--no-transcripts"),
|
|
2326
2469
|
},
|
|
2327
2470
|
);
|
|
2471
|
+
await warnTokenOnArgv();
|
|
2328
2472
|
await track("cli_configure_invoked", {
|
|
2329
2473
|
applied: result.applied,
|
|
2330
2474
|
// `target` and `scopes`, not `scope`: the wizard rework replaced that
|