failproofai 1.0.3 → 1.0.4-beta.1
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/.grok/hooks/failproofai.json +172 -0
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +4 -4
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +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/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +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 +4 -4
- 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 +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/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
- 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/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
- package/.next/standalone/.next/server/app/policies/page.js +1 -1
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js +3 -3
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js +1 -1
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +4 -4
- 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]__0u3wrvq._.js → [externals]__0_gzk8q._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__0-9ti7z._.js → [externals]__1zndo1i._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07hor7h._.js +5 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08dchfu._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cuho4x._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0elsuli._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gnj_qa._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljuzm_._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w23bpg._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x5c7sh._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yik9_w._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adacul._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1jg6s9m._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1s6qci9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xfm05z._.js +3 -0
- package/.next/standalone/.next/server/chunks/_09dz7xv._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0tdy_6l._.js +3 -0
- 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 +21 -14
- package/.next/standalone/.next/server/chunks/lib_grok-projects_ts_1i2epl_._.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_qwen-projects_ts_0wu_a8e._.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +2 -2
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +2 -2
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_0iu54mz._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_4gcz8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0d--wmy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0oa1lav._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qqrlf_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s11fx1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s740oi._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0n_lxhg._.js → [root-of-the-server]__0wvusu0._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1b5jzxr._.js → [root-of-the-server]__16gamwq._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1bbk-si._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1c3ybxr._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1izi7zn._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qapotl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1zl_r0t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__21bj7uw._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0-yi74u._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0v8eebd._.js → _00z5uuq._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1if9ixi._.js → _08f0jd2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0wso5d3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0j6gd_k._.js → _1byck5v._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1es2j7i._.js +155 -1
- package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_cline-projects_ts_13_hbdd._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/lib_grok-projects_ts_0rc-d0o._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/lib_ori-projects_ts_04tofqo._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/lib_qwen-projects_ts_0w3i9o7._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
- 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 +19 -19
- package/.next/standalone/.next/static/chunks/{0ollg-nnu3t3e.js → 00gv0v91mycm-.js} +1 -1
- package/.next/standalone/.next/static/chunks/{354-n7p7labpn.js → 01hvwwrhvbzyh.js} +1 -1
- package/.next/standalone/.next/static/chunks/0hzmxwb2pvk5p.js +6 -0
- package/.next/standalone/.next/static/chunks/{0nm11ysn0153h.js → 0j884dwnwtyrt.js} +1 -1
- package/.next/standalone/.next/static/chunks/0mr9dg3bnloa1.js +1 -0
- package/.next/standalone/.next/static/chunks/0qn9khv0oo9ex.js +1 -0
- package/.next/standalone/.next/static/chunks/{2xm5mj1d21b4n.js → 1_2jsatfuthrw.js} +1 -1
- package/.next/standalone/.next/static/chunks/1_bxotmf9qngs.js +1 -0
- package/.next/standalone/.next/static/chunks/1eyl7fzkmnkf_.js +1 -0
- package/.next/standalone/.next/static/chunks/{42yfkhekx440s.js → 1po3lirgk2riw.js} +1 -1
- package/.next/standalone/.next/static/chunks/{40lpt2o2b283e.js → 2bnf_4pgyk1rq.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1a6u7l3giejch.js → 2bvwsyu6x__ia.js} +1 -1
- package/.next/standalone/.next/static/chunks/{3l36d73kj18zw.js → 3_--3ibia6ba1.js} +1 -1
- package/.next/standalone/.next/static/chunks/3gf1jg-5m-u1t.css +2 -0
- package/.next/standalone/.next/static/chunks/{3pibxnbhjza7n.js → 3ws7eljkq25wg.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-2x-o099q64i8h.js → turbopack-18qf4jodtft6b.js} +1 -1
- package/.next/standalone/.qwen/settings.json +251 -0
- package/.next/standalone/app/project/[name]/page.tsx +24 -4
- package/.next/standalone/assets/logos/cline.png +0 -0
- package/.next/standalone/assets/logos/grok-dark.svg +1 -0
- package/.next/standalone/assets/logos/grok-light.svg +1 -0
- package/.next/standalone/assets/logos/ori-dark.svg +1 -0
- package/.next/standalone/assets/logos/ori-light.svg +1 -0
- package/.next/standalone/assets/logos/qwen.svg +1 -0
- package/.next/standalone/lib/cli-registry.ts +33 -1
- package/.next/standalone/lib/cline-projects.ts +155 -0
- package/.next/standalone/lib/cline-sessions.ts +268 -0
- package/.next/standalone/lib/download-session.ts +37 -0
- package/.next/standalone/lib/grok-projects.ts +123 -0
- package/.next/standalone/lib/grok-sessions.ts +355 -0
- package/.next/standalone/lib/ori-projects.ts +141 -0
- package/.next/standalone/lib/ori-sessions.ts +221 -0
- package/.next/standalone/lib/projects.ts +27 -3
- package/.next/standalone/lib/qwen-projects.ts +106 -0
- package/.next/standalone/lib/qwen-sessions.ts +313 -0
- package/.next/standalone/node_modules/@next/env/package.json +1 -1
- package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +5 -5
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/image-optimizer.js +2 -2
- package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +17 -4
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/.next/standalone/node_modules/next/package.json +10 -10
- package/.next/standalone/package.json +11 -11
- package/.next/standalone/sdk/python/uv.lock +29 -29
- package/.next/standalone/server.js +1 -1
- package/README.md +38 -7
- package/bin/failproofai.mjs +24 -7
- package/dist/cli.mjs +20313 -17756
- package/dist/worker.mjs +8521 -6768
- package/lib/cli-registry.ts +33 -1
- package/lib/cline-projects.ts +155 -0
- package/lib/cline-sessions.ts +268 -0
- package/lib/download-session.ts +37 -0
- package/lib/grok-projects.ts +123 -0
- package/lib/grok-sessions.ts +355 -0
- package/lib/ori-projects.ts +141 -0
- package/lib/ori-sessions.ts +221 -0
- package/lib/projects.ts +27 -3
- package/lib/qwen-projects.ts +106 -0
- package/lib/qwen-sessions.ts +313 -0
- package/package.json +11 -11
- package/src/audit/cli-adapters/cline.ts +50 -0
- package/src/audit/cli-adapters/grok.ts +70 -0
- package/src/audit/cli-adapters/index.ts +24 -0
- package/src/audit/cli-adapters/ori.ts +55 -0
- package/src/audit/cli-adapters/qwen.ts +71 -0
- package/src/hooks/batch-expand.ts +380 -0
- package/src/hooks/batch-fanout.ts +142 -0
- package/src/hooks/builtin-policies.ts +6 -4
- package/src/hooks/enforcement-capability.ts +97 -0
- package/src/hooks/handler.ts +61 -5
- package/src/hooks/harness-cli.ts +3 -1
- package/src/hooks/integrations.ts +756 -2
- package/src/hooks/normalize-cli-payload.ts +126 -0
- package/src/hooks/policy-evaluator.ts +297 -6
- package/src/hooks/resolve-transcript-path.ts +10 -0
- package/src/hooks/risk-patterns.ts +26 -0
- package/src/hooks/tool-name-canonicalize.ts +64 -0
- package/src/hooks/types.ts +533 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1le9jqc._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1p-qi2t._.js +0 -5
- package/.next/standalone/.next/server/chunks/_1-akg6w._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00-s7h8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__190won8._.js +0 -3
- 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]__1sc84bb._.js +0 -3
- package/.next/standalone/.next/static/chunks/03slu0c8_71y7.js +0 -1
- package/.next/standalone/.next/static/chunks/1-_zkmnm-jwei.js +0 -1
- package/.next/standalone/.next/static/chunks/1r9676mkvihto.js +0 -1
- package/.next/standalone/.next/static/chunks/30pct5s734jua.js +0 -6
- package/.next/standalone/.next/static/chunks/40nr6ehj4p3cw.css +0 -2
- package/.next/standalone/.next/static/chunks/41b5ptaocvi_l.js +0 -1
- /package/.next/standalone/.next/static/{JBYgkXkA1PS48m9P_hKNw → qJx3mbOQV-5ElrcRb4Sp7}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{JBYgkXkA1PS48m9P_hKNw → qJx3mbOQV-5ElrcRb4Sp7}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{JBYgkXkA1PS48m9P_hKNw → qJx3mbOQV-5ElrcRb4Sp7}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ before they execute.
|
|
|
30
30
|
|
|
31
31
|
## Supported harnesses
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Sixteen harnesses in two classes are supported: fourteen coding CLIs, plus two
|
|
34
34
|
gateways: Hermes, OpenClaw. The policy API and session history are shared; which
|
|
35
35
|
events can block varies by harness.
|
|
36
36
|
|
|
@@ -38,9 +38,10 @@ Agents that run in none of them report through the [Python SDK](https://docs.bef
|
|
|
38
38
|
which gives you tracing, sessions and audits. Enforcement there needs a hook in
|
|
39
39
|
your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map it.
|
|
40
40
|
|
|
41
|
-
<!-- A
|
|
42
|
-
so the grid stays 2×
|
|
43
|
-
instead of collapsing into ragged orphan rows).
|
|
41
|
+
<!-- A 7-column table instead of inline <img> runs: table columns never re-wrap,
|
|
42
|
+
so the grid stays 2×7 at any window width (scrolling on very narrow screens
|
|
43
|
+
instead of collapsing into ragged orphan rows). Kept at exactly two full
|
|
44
|
+
rows — 14 CLIs is 7×2, where 6 columns would leave a two-cell orphan row. -->
|
|
44
45
|
<table align="center">
|
|
45
46
|
<tr>
|
|
46
47
|
<td align="center" width="96">
|
|
@@ -72,6 +73,8 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
72
73
|
</picture>
|
|
73
74
|
</a>
|
|
74
75
|
</td>
|
|
76
|
+
</tr>
|
|
77
|
+
<tr>
|
|
75
78
|
<td align="center" width="96">
|
|
76
79
|
<a href="https://opencode.ai/" title="OpenCode">
|
|
77
80
|
<picture>
|
|
@@ -88,8 +91,14 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
88
91
|
</picture>
|
|
89
92
|
</a>
|
|
90
93
|
</td>
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
<td align="center" width="96">
|
|
95
|
+
<a href="https://grok.com" title="grok CLI (xAI)">
|
|
96
|
+
<picture>
|
|
97
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/logos/grok-dark.svg" />
|
|
98
|
+
<img src="assets/logos/grok-light.svg" alt="grok CLI" width="56" height="56" />
|
|
99
|
+
</picture>
|
|
100
|
+
</a>
|
|
101
|
+
</td>
|
|
93
102
|
<td align="center" width="96">
|
|
94
103
|
<a href="https://hermes-agent.nousresearch.com/" title="Hermes (hermes-agent)">
|
|
95
104
|
<picture>
|
|
@@ -98,6 +107,8 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
98
107
|
</picture>
|
|
99
108
|
</a>
|
|
100
109
|
</td>
|
|
110
|
+
</tr>
|
|
111
|
+
<tr>
|
|
101
112
|
<td align="center" width="96">
|
|
102
113
|
<a href="https://openclaw.ai/" title="OpenClaw (openclaw gateway)">
|
|
103
114
|
<img src="assets/logos/openclaw.svg" alt="OpenClaw" width="56" height="56" />
|
|
@@ -121,6 +132,8 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
121
132
|
<img src="assets/logos/antigravity.svg" alt="Antigravity CLI" width="56" height="56" />
|
|
122
133
|
</a>
|
|
123
134
|
</td>
|
|
135
|
+
</tr>
|
|
136
|
+
<tr>
|
|
124
137
|
<td align="center" width="96">
|
|
125
138
|
<a href="https://goose-docs.ai/" title="Goose (codename goose)">
|
|
126
139
|
<picture>
|
|
@@ -129,6 +142,24 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
129
142
|
</picture>
|
|
130
143
|
</a>
|
|
131
144
|
</td>
|
|
145
|
+
<td align="center" width="96">
|
|
146
|
+
<a href="https://github.com/QwenLM/qwen-code" title="Qwen Code (qwen)">
|
|
147
|
+
<img src="assets/logos/qwen.svg" alt="Qwen Code" width="56" height="56" />
|
|
148
|
+
</a>
|
|
149
|
+
</td>
|
|
150
|
+
<td align="center" width="96">
|
|
151
|
+
<a href="https://openrouter.ai/docs/guides/ori/harness" title="Ori (OpenRouter)">
|
|
152
|
+
<picture>
|
|
153
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/logos/ori-dark.svg" />
|
|
154
|
+
<img src="assets/logos/ori-light.svg" alt="Ori" width="56" height="56" />
|
|
155
|
+
</picture>
|
|
156
|
+
</a>
|
|
157
|
+
</td>
|
|
158
|
+
<td align="center" width="96">
|
|
159
|
+
<a href="https://github.com/cline/cline" title="Cline">
|
|
160
|
+
<img src="assets/logos/cline.png" alt="Cline" width="56" height="56" />
|
|
161
|
+
</a>
|
|
162
|
+
</td>
|
|
132
163
|
</tr>
|
|
133
164
|
</table>
|
|
134
165
|
|
|
@@ -276,7 +307,7 @@ own cluster is available on the Enterprise plan.
|
|
|
276
307
|
|---|---|
|
|
277
308
|
| [Quickstart](https://docs.befailproof.ai/start/quickstart) | Install, connect a harness, see the first run |
|
|
278
309
|
| [Concepts](https://docs.befailproof.ai/start/concepts) | How the hook system works |
|
|
279
|
-
| [Supported harnesses](https://docs.befailproof.ai/reference/harnesses) | All
|
|
310
|
+
| [Supported harnesses](https://docs.befailproof.ai/reference/harnesses) | All 16, and what each one can enforce |
|
|
280
311
|
|
|
281
312
|
| Observe | |
|
|
282
313
|
|---|---|
|
package/bin/failproofai.mjs
CHANGED
|
@@ -76,6 +76,19 @@ let lastSubcommand = null;
|
|
|
76
76
|
// with the right event name. Mirrors the cli_install_failure / cli_uninstall_failure
|
|
77
77
|
// pattern below for parity. Cleared back to null after the success track.
|
|
78
78
|
let lastPolicyAction = null;
|
|
79
|
+
/**
|
|
80
|
+
* Every CLI `policies --install/--uninstall/list --cli` accepts.
|
|
81
|
+
*
|
|
82
|
+
* ONE list, referenced from all three flag parsers below. It used to be three
|
|
83
|
+
* hardcoded copies, and they drifted: grok and qwen were added to the `--hook
|
|
84
|
+
* --cli` validation and to INTEGRATION_TYPES, but not here, so a real
|
|
85
|
+
* `policies --install --cli grok` was rejected outright while every unit test
|
|
86
|
+
* passed. __tests__/hooks/integrations.test.ts asserts this equals
|
|
87
|
+
* INTEGRATION_TYPES so the next CLI cannot repeat it.
|
|
88
|
+
*/
|
|
89
|
+
const INSTALLABLE_CLIS = ["claude", "codex", "copilot", "cursor", "opencode", "pi", "hermes", "openclaw", "factory", "devin", "antigravity", "goose", "grok", "qwen", "ori", "cline"];
|
|
90
|
+
const VALID_CLIS_USAGE = `Missing value(s) for --cli. Usage: --cli ${INSTALLABLE_CLIS.join(" ")} (or any subset)`;
|
|
91
|
+
|
|
79
92
|
async function track(name, props) {
|
|
80
93
|
try {
|
|
81
94
|
if (!_telemetry) {
|
|
@@ -121,7 +134,7 @@ const hookIdx = args.indexOf("--hook");
|
|
|
121
134
|
if (hookIdx >= 0) {
|
|
122
135
|
if (!args[hookIdx + 1]) {
|
|
123
136
|
console.error("Error: Missing event type after --hook");
|
|
124
|
-
console.error("Usage: failproofai --hook <event> [--cli <claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose>]");
|
|
137
|
+
console.error("Usage: failproofai --hook <event> [--cli <claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose|grok|qwen|ori|cline>]");
|
|
125
138
|
process.exit(1);
|
|
126
139
|
}
|
|
127
140
|
const eventType = args[hookIdx + 1];
|
|
@@ -143,6 +156,10 @@ if (hookIdx >= 0) {
|
|
|
143
156
|
|| cliArg === "devin"
|
|
144
157
|
|| cliArg === "antigravity"
|
|
145
158
|
|| cliArg === "goose"
|
|
159
|
+
|| cliArg === "grok"
|
|
160
|
+
|| cliArg === "qwen"
|
|
161
|
+
|| cliArg === "ori"
|
|
162
|
+
|| cliArg === "cline"
|
|
146
163
|
)
|
|
147
164
|
? cliArg
|
|
148
165
|
: "claude";
|
|
@@ -408,7 +425,7 @@ async function runCli() {
|
|
|
408
425
|
label: "options",
|
|
409
426
|
entries: [
|
|
410
427
|
["--hook <event>", "PreToolUse, PostToolUse, UserPromptSubmit, Stop, SubagentStop, SessionStart, SessionEnd, PreCompact, Notification, PermissionRequest"],
|
|
411
|
-
["--cli <name>", "claude, codex, copilot, cursor, opencode, pi, hermes, openclaw, factory, devin, antigravity, goose. Defaults to claude. It selects which payload shape to expect: each CLI names its events and tool arguments differently, and failproofai canonicalizes them."],
|
|
428
|
+
["--cli <name>", "claude, codex, copilot, cursor, opencode, pi, hermes, openclaw, factory, devin, antigravity, goose, ori. Defaults to claude. It selects which payload shape to expect: each CLI names its events and tool arguments differently, and failproofai canonicalizes them."],
|
|
412
429
|
],
|
|
413
430
|
},
|
|
414
431
|
{
|
|
@@ -1669,7 +1686,7 @@ async function runCli() {
|
|
|
1669
1686
|
}
|
|
1670
1687
|
|
|
1671
1688
|
// --cli accepts one or more space-separated values, optionally repeated.
|
|
1672
|
-
const VALID_CLIS = new Set(
|
|
1689
|
+
const VALID_CLIS = new Set(INSTALLABLE_CLIS);
|
|
1673
1690
|
const cliFlagValues = [];
|
|
1674
1691
|
const cliConsumedIdxs = new Set();
|
|
1675
1692
|
const cliFlagIdxs = rest.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
|
|
@@ -1871,7 +1888,7 @@ async function runCli() {
|
|
|
1871
1888
|
// --cli claude codex copilot
|
|
1872
1889
|
// --cli claude --cli codex
|
|
1873
1890
|
// Values are consumed greedily until the next flag or end of argv.
|
|
1874
|
-
const VALID_CLIS = new Set(
|
|
1891
|
+
const VALID_CLIS = new Set(INSTALLABLE_CLIS);
|
|
1875
1892
|
const cliFlagValues = [];
|
|
1876
1893
|
const cliConsumedIdxs = new Set();
|
|
1877
1894
|
const cliFlagIdxs = subArgs.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
|
|
@@ -1888,7 +1905,7 @@ async function runCli() {
|
|
|
1888
1905
|
consumed++;
|
|
1889
1906
|
}
|
|
1890
1907
|
if (consumed === 0) {
|
|
1891
|
-
throw new CliError(
|
|
1908
|
+
throw new CliError(VALID_CLIS_USAGE);
|
|
1892
1909
|
}
|
|
1893
1910
|
}
|
|
1894
1911
|
|
|
@@ -1960,7 +1977,7 @@ async function runCli() {
|
|
|
1960
1977
|
}
|
|
1961
1978
|
|
|
1962
1979
|
// --cli accepts one or more space-separated values; same parser as install.
|
|
1963
|
-
const VALID_CLIS = new Set(
|
|
1980
|
+
const VALID_CLIS = new Set(INSTALLABLE_CLIS);
|
|
1964
1981
|
const cliFlagValues = [];
|
|
1965
1982
|
const cliConsumedIdxs = new Set();
|
|
1966
1983
|
const cliFlagIdxs = subArgs.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
|
|
@@ -1977,7 +1994,7 @@ async function runCli() {
|
|
|
1977
1994
|
consumed++;
|
|
1978
1995
|
}
|
|
1979
1996
|
if (consumed === 0) {
|
|
1980
|
-
throw new CliError(
|
|
1997
|
+
throw new CliError(VALID_CLIS_USAGE);
|
|
1981
1998
|
}
|
|
1982
1999
|
}
|
|
1983
2000
|
|