failproofai 1.0.4-beta.1 → 1.0.4-beta.2
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 +5 -5
- package/.next/standalone/.next/prerender-manifest.json +5 -5
- 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/invite/route_client-reference-manifest.js +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/run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/status/route_client-reference-manifest.js +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-request/route_client-reference-manifest.js +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/login-verify/route_client-reference-manifest.js +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/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route_client-reference-manifest.js +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/api/download/[project]/[session]/route_client-reference-manifest.js +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 +37 -4
- package/.next/standalone/.next/server/app/audit/page.js +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]__1zndo1i._.js → [externals]__1lh7m5d._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__0_gzk8q._.js → [externals]__1rqkg_y._.js} +1 -1
- 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]__0o07qi9._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adacul._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1le9jqc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1p-qi2t._.js +5 -0
- package/.next/standalone/.next/server/chunks/_08w6xzm._.js +3 -0
- package/.next/standalone/.next/server/chunks/_09dz7xv._.js +1 -1
- 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 +14 -21
- package/.next/standalone/.next/server/chunks/lib_telemetry_ts_0dctyyw._.js +1 -1
- 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/src_hooks_fp-home_ts_09kv0bn._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00-s7h8._.js +3 -0
- 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]__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]__0wvusu0._.js → [root-of-the-server]__0n_lxhg._.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]__0rgu2r3._.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]__190won8._.js +3 -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]__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]__1sc84bb._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1zl_r0t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0-oij9d._.js +23 -0
- package/.next/standalone/.next/server/chunks/ssr/_0-yi74u._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0l2hi_d._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0oq1dh6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0wso5d3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1es2j7i._.js +48 -168
- package/.next/standalone/.next/server/chunks/ssr/{_08f0jd2._.js → _1if9ixi._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.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 -69
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_rerun-button_tsx_0blihgw._.js +3 -0
- 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/node_modules_13n822a._.js +1 -1
- 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/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/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 +54 -21
- package/.next/standalone/.next/static/chunks/{1_bxotmf9qngs.js → 010bv1w6j171t.js} +1 -1
- package/.next/standalone/.next/static/chunks/04r6ch8uf_n8m.js +1 -0
- package/.next/standalone/.next/static/chunks/{29-iqnp9v_axt.css → 0o-hh5_turzlz.css} +1 -1
- package/.next/standalone/.next/static/chunks/0qmsunv04x4na.css +2 -0
- package/.next/standalone/.next/static/chunks/{00gv0v91mycm-.js → 0wz8yftk18ts2.js} +1 -1
- package/.next/standalone/.next/static/chunks/0zebh1n9jkfbt.js +1 -0
- package/.next/standalone/.next/static/chunks/{0qn9khv0oo9ex.js → 1pb1oztsbwcss.js} +1 -1
- package/.next/standalone/.next/static/chunks/2aquitk72k2op.js +1 -0
- package/.next/standalone/.next/static/chunks/2bi_1y0a_smt7.js +6 -0
- package/.next/standalone/.next/static/chunks/{1po3lirgk2riw.js → 2ej3b8gk5ittu.js} +1 -1
- package/.next/standalone/.next/static/chunks/{01hvwwrhvbzyh.js → 2zafgs90r_leq.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1_2jsatfuthrw.js → 32spub4wqjem-.js} +1 -1
- package/.next/standalone/.next/static/chunks/{3_--3ibia6ba1.js → 3l36d73kj18zw.js} +1 -1
- package/.next/standalone/.next/static/chunks/{2bvwsyu6x__ia.js → 3m4upvybtrexd.js} +1 -1
- package/.next/standalone/.next/static/chunks/{2k9f4tyv04809.css → 3uyhmm01g64k4.css} +1 -0
- package/.next/standalone/.next/static/chunks/{2bnf_4pgyk1rq.js → 40lpt2o2b283e.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-18qf4jodtft6b.js → turbopack-3s3c-u_u_l0u9.js} +1 -1
- package/.next/standalone/.opencode/plugins/failproofai.mjs +51 -27
- package/.next/standalone/app/actions/get-leaks.ts +100 -0
- package/.next/standalone/app/audit/_components/audit-dashboard.tsx +112 -33
- package/.next/standalone/app/audit/_components/audit-poster.tsx +29 -10
- package/.next/standalone/app/audit/_components/come-back-better-section.tsx +6 -1
- package/.next/standalone/app/audit/_components/empty-state.tsx +4 -1
- package/.next/standalone/app/audit/_components/how-to-improve-section.tsx +19 -5
- package/.next/standalone/app/audit/_components/leak-section.tsx +179 -0
- package/.next/standalone/app/audit/_components/share-templates.ts +110 -44
- package/.next/standalone/app/audit/audit-styles.css +114 -1
- package/.next/standalone/app/project/[name]/page.tsx +4 -24
- package/.next/standalone/fp-cloud-cli/CHANGELOG.md +26 -3
- package/.next/standalone/fp-cloud-cli/fp_cli/_click_compat.py +31 -8
- package/.next/standalone/fp-cloud-cli/fp_cli/permissions.py +1 -0
- package/.next/standalone/fp-cloud-cli/pyproject.toml +9 -2
- package/.next/standalone/fp-cloud-cli/tests/test_click_compat.py +54 -0
- package/.next/standalone/fp-cloud-cli/uv.lock +9 -12
- package/.next/standalone/lib/auth/api-server-client.ts +28 -0
- package/.next/standalone/lib/claude-sessions.ts +101 -27
- package/.next/standalone/lib/cli-registry.ts +1 -33
- package/.next/standalone/lib/download-session.ts +0 -37
- package/.next/standalone/lib/projects.ts +3 -27
- 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/pages-turbo.runtime.prod.js +1 -1
- package/.next/standalone/node_modules/next/dist/experimental/testmode/fetch.js +10 -2
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/lib/typescript/runTypeScriptCli.js +2 -2
- package/.next/standalone/node_modules/next/dist/lib/verify-typescript-setup.js +3 -1
- 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/start-server.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 +11 -11
- package/.next/standalone/package.json +15 -14
- package/.next/standalone/sdk/python/CHANGELOG.md +155 -0
- package/.next/standalone/sdk/python/README.md +8 -0
- package/.next/standalone/sdk/python/examples/evaluator_worker.py +121 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_version.py +1 -1
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/__init__.py +101 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/__main__.py +49 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/_sandbox_runner.py +63 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/authoring.py +404 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/client.py +299 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/protocol.py +754 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/runtime.py +936 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/source.py +684 -0
- package/.next/standalone/sdk/python/tests/fixtures/evaluator_v2/README.md +28 -0
- package/.next/standalone/sdk/python/tests/fixtures/evaluator_v2/contract.json +252 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_authoring.py +124 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_client.py +253 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_example.py +35 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_http_e2e.py +636 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_main.py +47 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_protocol.py +246 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_review_fixes.py +164 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_runtime.py +1103 -0
- package/.next/standalone/sdk/python/tests/test_evaluator_source.py +430 -0
- package/.next/standalone/sdk/python/tests/test_zero_dependencies.py +17 -0
- package/.next/standalone/sdk/python/uv.lock +18 -18
- package/.next/standalone/server.js +1 -1
- package/README.md +19 -95
- package/bin/failproofai.mjs +7 -24
- package/dist/cli.mjs +19910 -25855
- package/dist/worker.mjs +4818 -6344
- package/lib/auth/api-server-client.ts +28 -0
- package/lib/claude-sessions.ts +101 -27
- package/lib/cli-registry.ts +1 -33
- package/lib/download-session.ts +0 -37
- package/lib/projects.ts +3 -27
- package/package.json +15 -14
- package/pi-extension/index.ts +42 -4
- package/scripts/changelog-open.py +115 -0
- package/src/audit/cli-adapters/index.ts +0 -24
- package/src/audit/cli.ts +134 -0
- package/src/audit/desktop-notify.ts +420 -0
- package/src/audit/harm-report.ts +101 -0
- package/src/audit/index.ts +141 -13
- package/src/audit/leak-fingerprint.ts +200 -0
- package/src/audit/leak-notice.ts +161 -0
- package/src/audit/leak-record.ts +232 -0
- package/src/audit/leak-scan.ts +292 -0
- package/src/audit/leak-store.ts +217 -0
- package/src/audit/macos-notifier.ts +310 -0
- package/src/audit/redact-example.ts +266 -14
- package/src/audit/report-harm.ts +12 -1
- package/src/audit/report.ts +6 -3
- package/src/audit/schedule-cli.ts +37 -0
- package/src/audit/scoring.ts +49 -0
- package/src/audit/types.ts +41 -0
- package/src/hooks/builtin-policies.ts +71 -8
- package/src/hooks/configure-wizard.ts +20 -0
- package/src/hooks/enforcement-capability.ts +0 -97
- package/src/hooks/fp-config.ts +71 -11
- package/src/hooks/fp-home.ts +27 -0
- package/src/hooks/handler.ts +64 -62
- package/src/hooks/harness-cli.ts +1 -3
- package/src/hooks/integrations.ts +49 -769
- package/src/hooks/normalize-cli-payload.ts +0 -126
- package/src/hooks/notice.ts +155 -0
- package/src/hooks/policy-evaluator.ts +6 -297
- package/src/hooks/resolve-transcript-path.ts +0 -10
- package/src/hooks/tool-name-canonicalize.ts +0 -64
- package/src/hooks/types.ts +2 -533
- package/src/hooks/uninstall-cli.ts +15 -0
- package/.next/standalone/.grok/hooks/failproofai.json +0 -172
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07hor7h._.js +0 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0elsuli._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gnj_qa._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljuzm_._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w23bpg._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x5c7sh._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yik9_w._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1jg6s9m._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1s6qci9._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xfm05z._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0tdy_6l._.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_grok-projects_ts_1i2epl_._.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_qwen-projects_ts_0wu_a8e._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_4gcz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0d--wmy._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qqrlf_._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s11fx1._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16gamwq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1bbk-si._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1c3ybxr._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1izi7zn._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__21bj7uw._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_00z5uuq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1byck5v._.js +0 -23
- package/.next/standalone/.next/server/chunks/ssr/_1ylae7o._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/lib_cline-projects_ts_13_hbdd._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/lib_grok-projects_ts_0rc-d0o._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/lib_ori-projects_ts_04tofqo._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/lib_qwen-projects_ts_0w3i9o7._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_html-to-image_es_index_1ao30b1.js +0 -3
- package/.next/standalone/.next/static/chunks/0hzmxwb2pvk5p.js +0 -6
- package/.next/standalone/.next/static/chunks/0j884dwnwtyrt.js +0 -1
- package/.next/standalone/.next/static/chunks/0mr9dg3bnloa1.js +0 -1
- package/.next/standalone/.next/static/chunks/0u64yey446k4f.css +0 -1
- package/.next/standalone/.next/static/chunks/3gf1jg-5m-u1t.css +0 -2
- package/.next/standalone/.next/static/chunks/3qfoeqhy5l10x.js +0 -1
- package/.next/standalone/.next/static/chunks/3ws7eljkq25wg.js +0 -69
- package/.next/standalone/.next/static/chunks/3zkg2s2vzxc3d.js +0 -1
- package/.next/standalone/.qwen/settings.json +0 -251
- package/.next/standalone/assets/logos/cline.png +0 -0
- package/.next/standalone/assets/logos/grok-dark.svg +0 -1
- package/.next/standalone/assets/logos/grok-light.svg +0 -1
- package/.next/standalone/assets/logos/ori-dark.svg +0 -1
- package/.next/standalone/assets/logos/ori-light.svg +0 -1
- package/.next/standalone/assets/logos/qwen.svg +0 -1
- package/.next/standalone/lib/cline-projects.ts +0 -155
- package/.next/standalone/lib/cline-sessions.ts +0 -268
- package/.next/standalone/lib/grok-projects.ts +0 -123
- package/.next/standalone/lib/grok-sessions.ts +0 -355
- package/.next/standalone/lib/ori-projects.ts +0 -141
- package/.next/standalone/lib/ori-sessions.ts +0 -221
- package/.next/standalone/lib/qwen-projects.ts +0 -106
- package/.next/standalone/lib/qwen-sessions.ts +0 -313
- package/lib/cline-projects.ts +0 -155
- package/lib/cline-sessions.ts +0 -268
- package/lib/grok-projects.ts +0 -123
- package/lib/grok-sessions.ts +0 -355
- package/lib/ori-projects.ts +0 -141
- package/lib/ori-sessions.ts +0 -221
- package/lib/qwen-projects.ts +0 -106
- package/lib/qwen-sessions.ts +0 -313
- package/src/audit/cli-adapters/cline.ts +0 -50
- package/src/audit/cli-adapters/grok.ts +0 -70
- package/src/audit/cli-adapters/ori.ts +0 -55
- package/src/audit/cli-adapters/qwen.ts +0 -71
- package/src/hooks/batch-expand.ts +0 -380
- package/src/hooks/batch-fanout.ts +0 -142
- package/src/hooks/risk-patterns.ts +0 -26
- /package/.next/standalone/.next/static/{qJx3mbOQV-5ElrcRb4Sp7 → aKNv4Kmv98Xpwns0Xa-C-}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{qJx3mbOQV-5ElrcRb4Sp7 → aKNv4Kmv98Xpwns0Xa-C-}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{qJx3mbOQV-5ElrcRb4Sp7 → aKNv4Kmv98Xpwns0Xa-C-}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
|
|
15
15
|
**Translations:** [简体中文](./docs/i18n/README.zh.md) · [日本語](./docs/i18n/README.ja.md) · [한국어](./docs/i18n/README.ko.md) · [Español](./docs/i18n/README.es.md) · [Português](./docs/i18n/README.pt-br.md) · [Deutsch](./docs/i18n/README.de.md) · [Français](./docs/i18n/README.fr.md) · [Русский](./docs/i18n/README.ru.md) · [हिन्दी](./docs/i18n/README.hi.md) · [Türkçe](./docs/i18n/README.tr.md) · [Tiếng Việt](./docs/i18n/README.vi.md) · [Italiano](./docs/i18n/README.it.md) · [العربية](./docs/i18n/README.ar.md) · [עברית](./docs/i18n/README.he.md)
|
|
16
16
|
|
|
17
|
-
**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
before they execute.
|
|
17
|
+
**Observability and enforcement for every harness your agents run in.**
|
|
18
|
+
Wherever your agents run, we see it — and we can say no. Failproof hooks 12 agent
|
|
19
|
+
harnesses — coding CLIs like Claude Code and Codex, chat gateways like Hermes,
|
|
20
|
+
self-hosted assistants like OpenClaw — capturing every run and blocking dangerous
|
|
21
|
+
tool calls before they execute. 39 built-in policies. Zero latency. Runs locally.
|
|
22
22
|
|
|
23
23
|
</div>
|
|
24
24
|
|
|
@@ -30,18 +30,17 @@ before they execute.
|
|
|
30
30
|
|
|
31
31
|
## Supported harnesses
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
gateways
|
|
35
|
-
|
|
33
|
+
Twelve harnesses in two classes — ten coding CLIs, and two chat and assistant
|
|
34
|
+
gateways (Hermes, OpenClaw). Same events, same policies, same session history,
|
|
35
|
+
whichever one your agent runs in.
|
|
36
36
|
|
|
37
37
|
Agents that run in none of them report through the [Python SDK](https://docs.befailproof.ai/reference/custom-agents),
|
|
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).
|
|
44
|
-
rows — 14 CLIs is 7×2, where 6 columns would leave a two-cell orphan row. -->
|
|
41
|
+
<!-- A 6-column table instead of inline <img> runs: table columns never re-wrap,
|
|
42
|
+
so the grid stays 2×6 at any window width (scrolling on very narrow screens
|
|
43
|
+
instead of collapsing into ragged orphan rows). -->
|
|
45
44
|
<table align="center">
|
|
46
45
|
<tr>
|
|
47
46
|
<td align="center" width="96">
|
|
@@ -73,8 +72,6 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
73
72
|
</picture>
|
|
74
73
|
</a>
|
|
75
74
|
</td>
|
|
76
|
-
</tr>
|
|
77
|
-
<tr>
|
|
78
75
|
<td align="center" width="96">
|
|
79
76
|
<a href="https://opencode.ai/" title="OpenCode">
|
|
80
77
|
<picture>
|
|
@@ -91,14 +88,8 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
91
88
|
</picture>
|
|
92
89
|
</a>
|
|
93
90
|
</td>
|
|
94
|
-
|
|
95
|
-
|
|
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>
|
|
91
|
+
</tr>
|
|
92
|
+
<tr>
|
|
102
93
|
<td align="center" width="96">
|
|
103
94
|
<a href="https://hermes-agent.nousresearch.com/" title="Hermes (hermes-agent)">
|
|
104
95
|
<picture>
|
|
@@ -107,8 +98,6 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
107
98
|
</picture>
|
|
108
99
|
</a>
|
|
109
100
|
</td>
|
|
110
|
-
</tr>
|
|
111
|
-
<tr>
|
|
112
101
|
<td align="center" width="96">
|
|
113
102
|
<a href="https://openclaw.ai/" title="OpenClaw (openclaw gateway)">
|
|
114
103
|
<img src="assets/logos/openclaw.svg" alt="OpenClaw" width="56" height="56" />
|
|
@@ -132,8 +121,6 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
132
121
|
<img src="assets/logos/antigravity.svg" alt="Antigravity CLI" width="56" height="56" />
|
|
133
122
|
</a>
|
|
134
123
|
</td>
|
|
135
|
-
</tr>
|
|
136
|
-
<tr>
|
|
137
124
|
<td align="center" width="96">
|
|
138
125
|
<a href="https://goose-docs.ai/" title="Goose (codename goose)">
|
|
139
126
|
<picture>
|
|
@@ -142,54 +129,18 @@ your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map i
|
|
|
142
129
|
</picture>
|
|
143
130
|
</a>
|
|
144
131
|
</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>
|
|
163
132
|
</tr>
|
|
164
133
|
</table>
|
|
165
134
|
|
|
166
135
|
## Install
|
|
167
136
|
|
|
168
|
-
Give a compatible agent the Failproof AI skill if you want it to guide setup,
|
|
169
|
-
inspect the machine, and route policy, audit, session, and Cloud work correctly:
|
|
170
|
-
|
|
171
|
-
```sh
|
|
172
|
-
npx skills add FailproofAI/skills
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
This installs the umbrella skill and its specialist siblings. To install only the
|
|
176
|
-
umbrella, add `--skill failproofai`. Skills supply operating instructions; install
|
|
177
|
-
and configure the product itself with:
|
|
178
|
-
|
|
179
137
|
```sh
|
|
180
138
|
npm install -g failproofai
|
|
181
|
-
failproofai
|
|
182
|
-
failproofai
|
|
183
|
-
failproofai # dashboard on localhost:8020
|
|
139
|
+
failproofai policies --install # or just run `failproofai` and accept the first-run prompt
|
|
140
|
+
failproofai
|
|
184
141
|
```
|
|
185
142
|
|
|
186
|
-
|
|
187
|
-
policy pack: before you add one, only `block-failproofai-commands` runs to stop an
|
|
188
|
-
agent disabling Failproof AI.
|
|
189
|
-
|
|
190
|
-
Connect Cloud without prompts with `failproofai config --token <machine-key>`. On a
|
|
191
|
-
shared machine or in CI, set `FAILPROOFAI_CLOUD_TOKEN` and run `failproofai config`
|
|
192
|
-
so the key does not appear in command history.
|
|
143
|
+
39 built-in policies activate immediately. Dashboard at `localhost:8020`. Disable the first-run prompt with `FAILPROOFAI_NO_FIRST_RUN=1`.
|
|
193
144
|
|
|
194
145
|
---
|
|
195
146
|
|
|
@@ -206,8 +157,8 @@ so the key does not appear in command history.
|
|
|
206
157
|
| `block-rm-rf` | Recursive file deletion |
|
|
207
158
|
| `block-force-push` / `block-push-master` | `git push --force`, direct pushes to `main` |
|
|
208
159
|
|
|
209
|
-
|
|
210
|
-
|
|
160
|
+
The first five apply to any agent that can call a tool. The last three are the
|
|
161
|
+
developer favourites — coding CLIs are the harness class we cover deepest.
|
|
211
162
|
|
|
212
163
|
→ [All 39 built-in policies](https://docs.befailproof.ai/policies/builtin)
|
|
213
164
|
|
|
@@ -244,33 +195,6 @@ Three decisions available to every policy:
|
|
|
244
195
|
|
|
245
196
|
---
|
|
246
197
|
|
|
247
|
-
## Policy packs
|
|
248
|
-
|
|
249
|
-
A policy pack is a versioned set of policies published from a public GitHub
|
|
250
|
-
repository. Inspect one before installing it:
|
|
251
|
-
|
|
252
|
-
```sh
|
|
253
|
-
failproofai policies show FailproofAI/policies
|
|
254
|
-
failproofai policies add FailproofAI/policies
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
Anything with a slash is a pack source; anything without one is a policy name.
|
|
258
|
-
You can install selected categories or policies, and pin a release when needed.
|
|
259
|
-
|
|
260
|
-
```sh
|
|
261
|
-
failproofai policies add FailproofAI/policies --category git,database
|
|
262
|
-
failproofai policies add owner/repo@a1b2c3d4e5f6
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
Browse published packs in the [Policy Hub](https://befailproof.ai/policy-hub/), or
|
|
266
|
-
run `failproofai publish --init` to start your own. Observe mode lets a pack record
|
|
267
|
-
what it would have done without blocking: `failproofai publish --effect observe`.
|
|
268
|
-
|
|
269
|
-
→ [Policy packs](https://docs.befailproof.ai/policies/packs) ·
|
|
270
|
-
[Publish a pack](https://docs.befailproof.ai/policies/publish-a-pack)
|
|
271
|
-
|
|
272
|
-
---
|
|
273
|
-
|
|
274
198
|
## Observability
|
|
275
199
|
|
|
276
200
|
Enforcement is one half. The other half is seeing what the agent actually did.
|
|
@@ -307,7 +231,7 @@ own cluster is available on the Enterprise plan.
|
|
|
307
231
|
|---|---|
|
|
308
232
|
| [Quickstart](https://docs.befailproof.ai/start/quickstart) | Install, connect a harness, see the first run |
|
|
309
233
|
| [Concepts](https://docs.befailproof.ai/start/concepts) | How the hook system works |
|
|
310
|
-
| [Supported harnesses](https://docs.befailproof.ai/reference/harnesses) | All
|
|
234
|
+
| [Supported harnesses](https://docs.befailproof.ai/reference/harnesses) | All 12, and what each one can enforce |
|
|
311
235
|
|
|
312
236
|
| Observe | |
|
|
313
237
|
|---|---|
|
package/bin/failproofai.mjs
CHANGED
|
@@ -76,19 +76,6 @@ 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
|
-
|
|
92
79
|
async function track(name, props) {
|
|
93
80
|
try {
|
|
94
81
|
if (!_telemetry) {
|
|
@@ -134,7 +121,7 @@ const hookIdx = args.indexOf("--hook");
|
|
|
134
121
|
if (hookIdx >= 0) {
|
|
135
122
|
if (!args[hookIdx + 1]) {
|
|
136
123
|
console.error("Error: Missing event type after --hook");
|
|
137
|
-
console.error("Usage: failproofai --hook <event> [--cli <claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose
|
|
124
|
+
console.error("Usage: failproofai --hook <event> [--cli <claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose>]");
|
|
138
125
|
process.exit(1);
|
|
139
126
|
}
|
|
140
127
|
const eventType = args[hookIdx + 1];
|
|
@@ -156,10 +143,6 @@ if (hookIdx >= 0) {
|
|
|
156
143
|
|| cliArg === "devin"
|
|
157
144
|
|| cliArg === "antigravity"
|
|
158
145
|
|| cliArg === "goose"
|
|
159
|
-
|| cliArg === "grok"
|
|
160
|
-
|| cliArg === "qwen"
|
|
161
|
-
|| cliArg === "ori"
|
|
162
|
-
|| cliArg === "cline"
|
|
163
146
|
)
|
|
164
147
|
? cliArg
|
|
165
148
|
: "claude";
|
|
@@ -425,7 +408,7 @@ async function runCli() {
|
|
|
425
408
|
label: "options",
|
|
426
409
|
entries: [
|
|
427
410
|
["--hook <event>", "PreToolUse, PostToolUse, UserPromptSubmit, Stop, SubagentStop, SessionStart, SessionEnd, PreCompact, Notification, PermissionRequest"],
|
|
428
|
-
["--cli <name>", "claude, codex, copilot, cursor, opencode, pi, hermes, openclaw, factory, devin, antigravity, goose
|
|
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."],
|
|
429
412
|
],
|
|
430
413
|
},
|
|
431
414
|
{
|
|
@@ -1686,7 +1669,7 @@ async function runCli() {
|
|
|
1686
1669
|
}
|
|
1687
1670
|
|
|
1688
1671
|
// --cli accepts one or more space-separated values, optionally repeated.
|
|
1689
|
-
const VALID_CLIS = new Set(
|
|
1672
|
+
const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "hermes", "openclaw", "factory", "devin", "antigravity", "goose"]);
|
|
1690
1673
|
const cliFlagValues = [];
|
|
1691
1674
|
const cliConsumedIdxs = new Set();
|
|
1692
1675
|
const cliFlagIdxs = rest.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
|
|
@@ -1888,7 +1871,7 @@ async function runCli() {
|
|
|
1888
1871
|
// --cli claude codex copilot
|
|
1889
1872
|
// --cli claude --cli codex
|
|
1890
1873
|
// Values are consumed greedily until the next flag or end of argv.
|
|
1891
|
-
const VALID_CLIS = new Set(
|
|
1874
|
+
const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "hermes", "openclaw", "factory", "devin", "antigravity", "goose"]);
|
|
1892
1875
|
const cliFlagValues = [];
|
|
1893
1876
|
const cliConsumedIdxs = new Set();
|
|
1894
1877
|
const cliFlagIdxs = subArgs.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
|
|
@@ -1905,7 +1888,7 @@ async function runCli() {
|
|
|
1905
1888
|
consumed++;
|
|
1906
1889
|
}
|
|
1907
1890
|
if (consumed === 0) {
|
|
1908
|
-
throw new CliError(
|
|
1891
|
+
throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi hermes openclaw (or any subset)");
|
|
1909
1892
|
}
|
|
1910
1893
|
}
|
|
1911
1894
|
|
|
@@ -1977,7 +1960,7 @@ async function runCli() {
|
|
|
1977
1960
|
}
|
|
1978
1961
|
|
|
1979
1962
|
// --cli accepts one or more space-separated values; same parser as install.
|
|
1980
|
-
const VALID_CLIS = new Set(
|
|
1963
|
+
const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "hermes", "openclaw", "factory", "devin", "antigravity", "goose"]);
|
|
1981
1964
|
const cliFlagValues = [];
|
|
1982
1965
|
const cliConsumedIdxs = new Set();
|
|
1983
1966
|
const cliFlagIdxs = subArgs.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
|
|
@@ -1994,7 +1977,7 @@ async function runCli() {
|
|
|
1994
1977
|
consumed++;
|
|
1995
1978
|
}
|
|
1996
1979
|
if (consumed === 0) {
|
|
1997
|
-
throw new CliError(
|
|
1980
|
+
throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi hermes openclaw (or any subset)");
|
|
1998
1981
|
}
|
|
1999
1982
|
}
|
|
2000
1983
|
|