failproofai 1.0.12 → 1.0.13-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 +13 -13
- 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 +2 -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 +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- 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 +4 -3
- 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 +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/audit/invite/route.js +6 -5
- 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 +27 -26
- 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 +4 -3
- 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 +6 -5
- 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 +6 -5
- 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 +6 -5
- 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 +6 -5
- 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 +4 -3
- 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 +7 -6
- 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 +3 -3
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- 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 +6 -5
- 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 +5 -4
- 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 +21 -20
- 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 +10 -9
- 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 +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/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/settings/page.js +6 -5
- 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]__0vt9i6fqinjne._.js → [externals]__1h83uo-b1b6-2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[externals]__214wn4wh2x79y._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[externals]__1rlxpymm37wel._.js → [root-of-the-server]__031qp1lkow_kc._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__038kwryp970nh._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0_hsnj_a2mvl_._.js → [root-of-the-server]__03s1za0hn71yp._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0wg9dk8x8bnau._.js → [root-of-the-server]__07a0sa6fuw5_b._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08atcie7jzswm._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08dchfudh2_4f._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0car70pylmvor._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0spt0kv8azrpl._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__12kq3x-h7t7i1._.js → [root-of-the-server]__0yvyp5b7jmlc4._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__02vous7mpi2xm._.js → [root-of-the-server]__145vo_drnuvas._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[externals]__0h0p9dmv_e7r7._.js → [root-of-the-server]__1a2d0ewycsp6k._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[externals]__1_407huhlmj1m._.js → [root-of-the-server]__1am_1tz0o0aqz._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__03i5o4a840guz._.js → [root-of-the-server]__1gxfzuvpyw30j._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1j6kfp0vzu5rw._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1l0ayum_hqqsw._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1lh8c0mmhdrbj._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1o9rznwc0w7og._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0f_4g-vazrvxv._.js → [root-of-the-server]__1o_622x0fglpr._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1oclamblhzhrf._.js +68 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1v1-l-83czzsr._.js +63 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1a5zkndjwlc13._.js → [root-of-the-server]__1wwi53kkqhnfi._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{_1y590mjzpkbos._.js → _02sa8fcu9_9xo._.js} +2 -2
- package/.next/standalone/.next/server/chunks/_0tovk6q0miud6._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0trp3ycqv17cl._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1-2owkp-1_987._.js +1 -1
- package/.next/standalone/.next/server/chunks/_13ltj8a9z92o8._.js +1 -1
- package/.next/standalone/.next/server/chunks/_15k37au70vjvg._.js +1 -1
- package/.next/standalone/.next/server/chunks/_18rfu4__wjhwb._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1ek68lnh2daur._.js +2 -2
- package/.next/standalone/.next/server/chunks/_1fz8m31sndkcu._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1ogwigfb0163w._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1vslkoe35wok6._.js +1 -1
- package/.next/standalone/.next/server/chunks/node_modules_@opentelemetry_api_build_esm_index_0oo58a7rymoxh.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_@opentelemetry_api_build_esm_index_1jp9ij0_ddtgk.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oigsgz07._.js +2 -2
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p77cu37y._.js +2 -2
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4vkpxxu7._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ffu2-38y03ic._.js → [root-of-the-server]__021vebe-4il8s._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__075uro8t92s0_._.js +14 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08ch3staq3ejw._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[externals]__12qr51qgrrt6o._.js → [root-of-the-server]__097i34ct1o88x._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0alpzjn3450sr._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0aup10z2o8zc1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bigvy9xmv2ka._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bioghlkjf7s7._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__01j58mdcdw0vn._.js → [root-of-the-server]__0ed1zh4scn7-k._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0naevg4bcoh54._.js → [root-of-the-server]__0evgy902m9h5e._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h86bl2qf0k_o._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nhm28v58ty9z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pia5h3p8re4c._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vse4qi496ol-._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__17r4zrwanhp6r._.js → [root-of-the-server]__0yb3u36xjy3b9._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0g8b0kyorya-t._.js → [root-of-the-server]__0ywj2u6ovfm_5._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-ey9fgesfbc0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0zn1d4blhd3bu._.js → [root-of-the-server]__10v5cyxvj64j4._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15usvs-ms-0hf._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16gb3_92zvk5x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__190xwrr5zrfi3._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__167mipqmjprq5._.js → [root-of-the-server]__19nvo1qfswchs._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1avi2kypusyb_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1vx7o8ukefudh._.js → [root-of-the-server]__1guwlpkyurdn9._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1k96jctukf65_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1r7drlqli-ado._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1sj-wn2jp6va5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1vofkb2oq7p7e._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1s2-ck3k3rsoo._.js → [root-of-the-server]__20dt376-socef._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1lnfv02ucky7m._.js → [root-of-the-server]__2158020r_amn9._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0eoura3_9gjb-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0pedwblqdoh58._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1_ozgifqv1ssi._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1djqs9i27e4kg._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1d98fyfrcaqhy._.js → _1nvqg4si0splb._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo5_vm5f.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9snixb5fd-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47q0xq5w._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x33jqb6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpcz0uxur._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h47jmhhd._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_09s4n108bqreq._.js → node_modules_0ptcnmeaxvd_a._.js} +22 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@opentelemetry_api_build_esm_index_0ntwr8lzj6p2i.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_html-to-image_es_index_0tqc05n832v7a.js → node_modules_html-to-image_es_index_1gk40bvx2bftt.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_0bz67659f5z-3._.js +32 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js +3 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0ocrceo0c9psx._.js +32 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1alv566ojmz5j._.js +32 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1khq67j4vo9y4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_shared_lib_0ftnv26hg1lry._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0dagmbznysrc2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuznb72p7z._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/package_json_[json]_cjs_013tntikdft59._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +13 -13
- package/.next/standalone/.next/server/middleware.js +2 -2
- 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/preview-props.json +3 -3
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
- package/.next/standalone/.next/static/chunks/061bksch79zq2.js +1 -0
- package/.next/standalone/.next/static/chunks/{0wobqgosirs8p.js → 1l9lji2he-mbw.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1kduj74-715jh.js → 1mkf3bas1g5ka.js} +1 -1
- package/.next/standalone/.next/static/chunks/22gs9785ug-vp.js +1 -0
- package/.next/standalone/.next/static/chunks/{0el9n3h9_zp5m.js → 2f9-xdgd1o3r5.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0umzct31duk5g.js → 2q-6h4rclnu98.js} +1 -1
- package/.next/standalone/.next/static/chunks/{27cavoc8paelg.js → 2x-77r0k0xm3b.js} +1 -1
- package/.next/standalone/.next/static/chunks/2xox4fr0q-ftn.js +1 -0
- package/.next/standalone/.next/static/chunks/3lgxb73wehfv2.js +1 -0
- package/.next/standalone/.next/static/chunks/{063al_q720fkj.js → 3xgxl1s_in776.js} +2 -2
- package/.next/standalone/.next/static/chunks/44rukkkzacqkl.js +6 -0
- package/.next/standalone/SECURITY.md +20 -4
- package/.next/standalone/fp-cloud-cli/CHANGELOG.md +15 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/_version.py +1 -1
- package/.next/standalone/fp-cloud-cli/uv.lock +4 -4
- package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
- 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 +24 -24
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +26 -26
- package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +3 -3
- package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +13 -13
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/app-render/app-render.js +41 -40
- package/.next/standalone/node_modules/next/dist/server/app-render/async-local-storage.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/app-render/dynamic-rendering-validation.js +814 -0
- package/.next/standalone/node_modules/next/dist/server/app-render/dynamic-rendering.js +1 -799
- package/.next/standalone/node_modules/next/dist/server/base-server.js +39 -5
- 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/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/dedupe-fetch.js +4 -43
- package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch-symbol.js +13 -0
- package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch.js +3 -7
- package/.next/standalone/node_modules/next/dist/server/lib/router-server.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js +77 -12
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/trace/constants.js +12 -0
- package/.next/standalone/node_modules/next/dist/server/lib/trace/tracer.js +30 -14
- package/.next/standalone/node_modules/next/dist/server/next-server.js +10 -11
- package/.next/standalone/node_modules/next/dist/server/route-modules/pages/pages-handler.js +29 -23
- package/.next/standalone/node_modules/next/dist/server/route-modules/route-module.js +85 -8
- package/.next/standalone/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/web/adapter.js +124 -65
- package/.next/standalone/node_modules/next/dist/server/web/forward-trace-context.js +102 -0
- 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/node_modules/react/cjs/react.production.js +1 -1
- package/.next/standalone/node_modules/react/package.json +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +31 -27
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +33 -27
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +38 -30
- package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/package.json +2 -2
- package/.next/standalone/package.json +10 -10
- package/.next/standalone/sdk/python/CHANGELOG.md +8 -4
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/source.py +2 -2
- package/.next/standalone/sdk/python/pyproject.toml +2 -7
- package/.next/standalone/sdk/python/skill/references/frameworks.md +0 -15
- package/.next/standalone/sdk/python/tests/test_docs.py +1 -4
- package/.next/standalone/sdk/python/tests/test_evaluator_source.py +1 -1
- package/.next/standalone/sdk/python/tests/test_packaging.py +4 -7
- package/.next/standalone/sdk/python/tests/test_zero_dependencies.py +2 -13
- package/.next/standalone/sdk/python/uv.lock +40 -902
- package/.next/standalone/sdk/typescript/CHANGELOG.md +52 -0
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +176 -68
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +2 -2
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +3 -3
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +115 -98
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +3 -3
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +4 -4
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package-lock.json +171 -149
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package.json +5 -2
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package-lock.json +27 -15
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package.json +2 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/deno-npm.ts +1 -1
- package/.next/standalone/server.js +1 -1
- package/README.md +0 -6
- package/dist/cli.mjs +369 -221
- package/dist/worker.mjs +1 -1
- package/hermes-plugin/plugin.yaml +1 -1
- package/package.json +10 -10
- package/scripts/sync-agent-cli-harnesses-prompt.md +26 -31
- package/src/hooks/daemon-service.ts +168 -3
- package/src/hooks/uninstall-cli.ts +3 -0
- package/.next/standalone/.codex/hooks.json +0 -76
- package/.next/standalone/.cursor/hooks.json +0 -47
- package/.next/standalone/.factory/hooks.json +0 -112
- package/.next/standalone/.next/server/chunks/[externals]__1x24dzcbbq6-g._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0__a_je8fsn65._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l-oi4gdtmlo5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t9ufnv5hi2hq._.js +0 -327
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1aaw59g-5uty7._.js +0 -322
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1hqpg6vgmfexv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[externals]__0ilfh9mfnzsth._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[externals]__0ohnuzsaozaca._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pwj2h2efe5f-._.js +0 -14
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_0zuikgt2xho-v._.js +0 -271
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_158jo-9mwvgad._.js +0 -291
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_19r82zsxo2jj1._.js +0 -291
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1dupwucoqt5qm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_shared_lib_03w27x2kh17_8._.js +0 -23
- package/.next/standalone/.next/static/chunks/0k7g_8x3o6gd-.js +0 -1
- package/.next/standalone/.next/static/chunks/12rug3jilwqzs.js +0 -1
- package/.next/standalone/.next/static/chunks/2701amhrbsbot.js +0 -1
- package/.next/standalone/.next/static/chunks/2ve23a7keupjw.js +0 -1
- package/.next/standalone/.next/static/chunks/3bv6xaoitjpnh.js +0 -6
- package/.next/standalone/.opencode/opencode.json +0 -4
- package/.next/standalone/.opencode/plugins/failproofai.mjs +0 -210
- package/.next/standalone/.pi/settings.json +0 -5
- package/.next/standalone/node_modules/react/cjs/react.development.js +0 -1330
- package/scripts/dev-hook.mjs +0 -333
- /package/.next/standalone/.next/static/{D7LY1YSrw96ZxKSpxxrFw → TdOlUedz_AHC-0Ops67a_}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{D7LY1YSrw96ZxKSpxxrFw → TdOlUedz_AHC-0Ops67a_}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{D7LY1YSrw96ZxKSpxxrFw → TdOlUedz_AHC-0Ops67a_}/_ssgManifest.js +0 -0
package/scripts/dev-hook.mjs
DELETED
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* failproofai DEV-ONLY hook launcher — for THIS repo's dogfood configs only.
|
|
4
|
-
*
|
|
5
|
-
* End users never run this. They install `npx -y failproofai --hook <Event>`
|
|
6
|
-
* (see `src/hooks/integrations.ts`), which resolves the published package.
|
|
7
|
-
* This file exists because this repo dogfoods itself from source, and doing so
|
|
8
|
-
* has three prerequisites that silently rot:
|
|
9
|
-
*
|
|
10
|
-
* 1. `bun` on the hook's PATH. `bin/failproofai.mjs` cannot run under node —
|
|
11
|
-
* it does a bare `import { version } from "../package.json"` (node needs
|
|
12
|
-
* `with { type: "json" }`) and `await import("../src/hooks/handler")`,
|
|
13
|
-
* an extensionless TypeScript specifier node cannot resolve. But bun is
|
|
14
|
-
* routinely absent from a hook's PATH even when it's on yours: `npm i -g
|
|
15
|
-
* bun` installs into ONE nvm version's bin dir, so `nvm use <other>` drops
|
|
16
|
-
* it; a macOS GUI launch gets a launchd PATH built without ~/.zshrc.
|
|
17
|
-
* When that happens every hook exits 127 and the session runs with ZERO
|
|
18
|
-
* policy enforcement — silently.
|
|
19
|
-
*
|
|
20
|
-
* 2. Project dependencies. A fresh checkout has no `node_modules`, so the
|
|
21
|
-
* source binary cannot import its runtime dependencies. The launcher
|
|
22
|
-
* runs the lockfile-pinned install once before attempting enforcement.
|
|
23
|
-
*
|
|
24
|
-
* 3. `dist/index.js`. The committed policies in `.failproofai/policies/`
|
|
25
|
-
* `import from 'failproofai'`, which `findDistIndex()` resolves to that
|
|
26
|
-
* bundle. Without it all three fail-open and only builtins enforce.
|
|
27
|
-
*
|
|
28
|
-
* So: locate bun (installing it via npm if we must), install this checkout's
|
|
29
|
-
* dependencies, make sure the bundle exists, then hand off to the real binary.
|
|
30
|
-
* If we cannot enforce, say so in one line rather than failing silently.
|
|
31
|
-
*
|
|
32
|
-
* INVARIANT — never write to stdout. Most CLIs' deny contracts are JSON on
|
|
33
|
-
* stdout (Copilot `{decision:"block"}`, Cursor `{followup_message}`, Devin,
|
|
34
|
-
* Factory-on-Stop, Antigravity). A single stray byte corrupts the parse and
|
|
35
|
-
* turns a denial into an allow. Diagnostics go to stderr; subprocesses we run
|
|
36
|
-
* for our own purposes get their stdout discarded, never inherited.
|
|
37
|
-
*/
|
|
38
|
-
import { spawnSync } from "node:child_process";
|
|
39
|
-
import { existsSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
|
|
40
|
-
import { constants, homedir } from "node:os";
|
|
41
|
-
import { delimiter, dirname, join, resolve } from "node:path";
|
|
42
|
-
import { fileURLToPath } from "node:url";
|
|
43
|
-
|
|
44
|
-
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
45
|
-
const REPO_ROOT = resolve(HERE, "..");
|
|
46
|
-
const SRC_BIN = resolve(REPO_ROOT, "bin", "failproofai.mjs");
|
|
47
|
-
const BUNDLE = resolve(REPO_ROOT, "dist", "index.js");
|
|
48
|
-
const CACHE_DIR = resolve(REPO_ROOT, "node_modules", ".cache", "failproofai-dev");
|
|
49
|
-
const LOCK_DIR = join(CACHE_DIR, ".lock");
|
|
50
|
-
const DEPENDENCY_SENTINELS = [
|
|
51
|
-
resolve(REPO_ROOT, "node_modules", "posthog-node", "package.json"),
|
|
52
|
-
resolve(REPO_ROOT, "node_modules", "sql.js", "package.json"),
|
|
53
|
-
resolve(REPO_ROOT, "node_modules", "yaml", "package.json"),
|
|
54
|
-
];
|
|
55
|
-
|
|
56
|
-
/** A lock older than this belonged to a process that died mid-install. */
|
|
57
|
-
const LOCK_STALE_MS = 5 * 60_000;
|
|
58
|
-
/** 120 × 250ms = 30s, under the tightest hook timeout (Factory/Antigravity). */
|
|
59
|
-
const LOCK_WAIT_TRIES = 120;
|
|
60
|
-
const LOCK_WAIT_MS = 250;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* @typedef {object} Deps
|
|
64
|
-
* @property {Record<string, string | undefined>} [env]
|
|
65
|
-
* @property {string} [platform]
|
|
66
|
-
* @property {string} [execPath]
|
|
67
|
-
* @property {string} [home]
|
|
68
|
-
* @property {(p: string) => boolean} [exists]
|
|
69
|
-
* @property {(p: string) => string[]} [readdir]
|
|
70
|
-
* @property {typeof spawnSync} [spawn]
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
function warn(msg) {
|
|
74
|
-
process.stderr.write(`[failproofai-dev] ${msg}\n`);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function sleepSync(ms) {
|
|
78
|
-
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function readdirSafe(p) {
|
|
82
|
-
try {
|
|
83
|
-
return readdirSync(p);
|
|
84
|
-
} catch {
|
|
85
|
-
return [];
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/** Executable basenames to probe, most specific first. */
|
|
90
|
-
function exeNames(base, platform) {
|
|
91
|
-
return platform === "win32" ? [`${base}.exe`, `${base}.cmd`, base] : [base];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/** First existing `<dir>/<name>` across dirs × names, or null. */
|
|
95
|
-
function probe(dirs, names, exists) {
|
|
96
|
-
for (const dir of dirs) {
|
|
97
|
-
for (const name of names) {
|
|
98
|
-
const candidate = join(dir, name);
|
|
99
|
-
if (exists(candidate)) return candidate;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Absolute path to a bun executable, or null. NEVER spawns a subprocess —
|
|
107
|
-
* this runs on every hook, so it is an existsSync walk and nothing more.
|
|
108
|
-
* @param {Deps} deps
|
|
109
|
-
*/
|
|
110
|
-
export function findBun(deps = {}) {
|
|
111
|
-
const env = deps.env ?? process.env;
|
|
112
|
-
const platform = deps.platform ?? process.platform;
|
|
113
|
-
const execPath = deps.execPath ?? process.execPath;
|
|
114
|
-
const home = deps.home ?? homedir();
|
|
115
|
-
const exists = deps.exists ?? existsSync;
|
|
116
|
-
const readdir = deps.readdir ?? readdirSafe;
|
|
117
|
-
|
|
118
|
-
const dirs = [];
|
|
119
|
-
const push = (d) => {
|
|
120
|
-
if (d && !dirs.includes(d)) dirs.push(d);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
// 1. PATH — the common case, and the only one that costs nothing.
|
|
124
|
-
for (const p of (env.PATH ?? "").split(delimiter)) push(p);
|
|
125
|
-
// 2. An explicit bun install root.
|
|
126
|
-
if (env.BUN_INSTALL) push(join(env.BUN_INSTALL, "bin"));
|
|
127
|
-
// 3. Where bun.sh's installer puts it. The macOS GUI-launch case: launchd's
|
|
128
|
-
// PATH has /usr/local/bin but never ~/.bun/bin.
|
|
129
|
-
push(join(home, ".bun", "bin"));
|
|
130
|
-
// 4. Package-manager prefixes.
|
|
131
|
-
if (platform !== "win32") {
|
|
132
|
-
push("/opt/homebrew/bin");
|
|
133
|
-
push("/usr/local/bin");
|
|
134
|
-
}
|
|
135
|
-
// 5. Every nvm-managed node version's bin dir. Load-bearing: `npm i -g bun`
|
|
136
|
-
// lands bun in exactly ONE version's bin, so `nvm use <another>` makes it
|
|
137
|
-
// vanish from PATH entirely while it's still perfectly usable on disk.
|
|
138
|
-
// Descending so the newest version wins deterministically.
|
|
139
|
-
const nvmRoot = join(home, ".nvm", "versions", "node");
|
|
140
|
-
for (const v of readdir(nvmRoot).sort().reverse()) push(join(nvmRoot, v, "bin"));
|
|
141
|
-
// 6. Next to the running node. For our own `node scripts/dev-hook.mjs` form
|
|
142
|
-
// this is a strict subset of (1) — node was resolved from PATH — so it is
|
|
143
|
-
// a no-op. Kept only for a caller that spawns node by absolute path.
|
|
144
|
-
push(dirname(execPath));
|
|
145
|
-
|
|
146
|
-
// Cache from a previous npm-install (see installBun). Last, so a real bun
|
|
147
|
-
// that reappears on PATH always wins over our vendored copy.
|
|
148
|
-
push(join(CACHE_DIR, "node_modules", ".bin"));
|
|
149
|
-
|
|
150
|
-
return probe(dirs, exeNames("bun", platform), exists);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/** Absolute path to npm, or null. PATH only — npm ships beside node. */
|
|
154
|
-
export function findNpm(deps = {}) {
|
|
155
|
-
const env = deps.env ?? process.env;
|
|
156
|
-
const platform = deps.platform ?? process.platform;
|
|
157
|
-
const exists = deps.exists ?? existsSync;
|
|
158
|
-
const dirs = (env.PATH ?? "").split(delimiter).filter(Boolean);
|
|
159
|
-
return probe(dirs, exeNames("npm", platform), exists);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* `{ cmd, args }` to run the real binary, or null when bun is unfindable.
|
|
164
|
-
* Shared with `.opencode/plugins/failproofai.mjs`, which spawns bun itself.
|
|
165
|
-
* @param {Deps} deps
|
|
166
|
-
*/
|
|
167
|
-
export function resolveDevSpawn(deps = {}) {
|
|
168
|
-
const bun = findBun(deps);
|
|
169
|
-
return bun ? { cmd: bun, args: [SRC_BIN] } : null;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/** One actionable line. Keep it to one — this can fire on 26 events. */
|
|
173
|
-
export function bunMissingMessage() {
|
|
174
|
-
return (
|
|
175
|
-
"bun not found and npm unavailable to install it — this repo's dogfood hooks are NOT " +
|
|
176
|
-
"enforcing. Install bun: curl -fsSL https://bun.sh/install | bash"
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* A cheap every-hook check for the runtime dependencies the source hook path
|
|
182
|
-
* imports. Requiring several direct dependencies also catches interrupted or
|
|
183
|
-
* partial installs instead of treating any non-empty node_modules as ready.
|
|
184
|
-
*/
|
|
185
|
-
export function projectDependenciesInstalled(deps = {}) {
|
|
186
|
-
const exists = deps.exists ?? existsSync;
|
|
187
|
-
return DEPENDENCY_SENTINELS.every((path) => exists(path));
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Run `doWork` at most once across concurrently-firing hooks. `mkdirSync` is
|
|
192
|
-
* atomic, so it doubles as the lock: EEXIST means another process got there.
|
|
193
|
-
* Losers wait for the artifact rather than duplicating the work.
|
|
194
|
-
*/
|
|
195
|
-
function ensureOnce(isDone, doWork) {
|
|
196
|
-
if (isDone()) return true;
|
|
197
|
-
mkdirSync(CACHE_DIR, { recursive: true });
|
|
198
|
-
|
|
199
|
-
for (let i = 0; i < LOCK_WAIT_TRIES; i++) {
|
|
200
|
-
if (isDone()) return true;
|
|
201
|
-
try {
|
|
202
|
-
mkdirSync(LOCK_DIR);
|
|
203
|
-
} catch (err) {
|
|
204
|
-
if (err?.code !== "EEXIST") throw err;
|
|
205
|
-
try {
|
|
206
|
-
if (Date.now() - statSync(LOCK_DIR).mtimeMs > LOCK_STALE_MS) {
|
|
207
|
-
rmSync(LOCK_DIR, { recursive: true, force: true });
|
|
208
|
-
} else {
|
|
209
|
-
sleepSync(LOCK_WAIT_MS);
|
|
210
|
-
}
|
|
211
|
-
} catch {
|
|
212
|
-
/* lock vanished under us — retry immediately */
|
|
213
|
-
}
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
try {
|
|
217
|
-
doWork();
|
|
218
|
-
} finally {
|
|
219
|
-
try {
|
|
220
|
-
rmSync(LOCK_DIR, { recursive: true, force: true });
|
|
221
|
-
} catch {
|
|
222
|
-
/* best effort; a leaked lock goes stale in LOCK_STALE_MS */
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return isDone();
|
|
226
|
-
}
|
|
227
|
-
return isDone();
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Vendor bun into node_modules/.cache via npm. bun ships as an npm package, so
|
|
232
|
-
* npm is the one bootstrap that works when bun is genuinely absent — building
|
|
233
|
-
* `dist/cli.mjs` to run under node can't, because `build:cli` is itself
|
|
234
|
-
* `bun build`.
|
|
235
|
-
*/
|
|
236
|
-
function installBun(deps = {}) {
|
|
237
|
-
const npm = findNpm(deps);
|
|
238
|
-
if (!npm) return null;
|
|
239
|
-
ensureOnce(
|
|
240
|
-
() => findBun(deps) !== null,
|
|
241
|
-
() => {
|
|
242
|
-
warn("bun not found — installing it into node_modules/.cache (one time, ~15s)");
|
|
243
|
-
const r = spawnSync(
|
|
244
|
-
npm,
|
|
245
|
-
["install", "bun", "--prefix", CACHE_DIR, "--no-save", "--no-audit", "--no-fund", "--loglevel=error"],
|
|
246
|
-
// NOT "inherit" on stdout: npm prints there, and our stdout is a deny
|
|
247
|
-
// channel. stderr passes through so a failed install is visible.
|
|
248
|
-
{ stdio: ["ignore", "ignore", "inherit"], cwd: REPO_ROOT },
|
|
249
|
-
);
|
|
250
|
-
if (r.status !== 0) warn("npm install bun failed — see the error above");
|
|
251
|
-
},
|
|
252
|
-
);
|
|
253
|
-
return findBun(deps);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/** Install a fresh/partial checkout from the committed lockfile, once. */
|
|
257
|
-
export function ensureProjectDependencies(bunPath, deps = {}) {
|
|
258
|
-
const run = deps.spawn ?? spawnSync;
|
|
259
|
-
return ensureOnce(
|
|
260
|
-
() => projectDependenciesInstalled(deps),
|
|
261
|
-
() => {
|
|
262
|
-
warn("project dependencies missing — running bun install (one time)");
|
|
263
|
-
const r = run(bunPath, ["install", "--frozen-lockfile"], {
|
|
264
|
-
// Installation/build output is not hook protocol output. Keep stdout
|
|
265
|
-
// clean, but expose errors so a broken bootstrap is actionable.
|
|
266
|
-
stdio: ["ignore", "ignore", "inherit"],
|
|
267
|
-
cwd: REPO_ROOT,
|
|
268
|
-
});
|
|
269
|
-
if (r.status !== 0) {
|
|
270
|
-
warn("bun install failed — hooks are NOT enforcing; see the error above");
|
|
271
|
-
}
|
|
272
|
-
},
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Build dist/index.js if absent, so `.failproofai/policies/*.mjs` can resolve
|
|
278
|
-
* `import ... from 'failproofai'`. Non-fatal: builtins enforce without it.
|
|
279
|
-
*/
|
|
280
|
-
export function ensureBundle(bunPath) {
|
|
281
|
-
return ensureOnce(
|
|
282
|
-
() => existsSync(BUNDLE),
|
|
283
|
-
() => {
|
|
284
|
-
warn("dist/index.js missing — building it so .failproofai/policies/ can load (one time)");
|
|
285
|
-
const r = spawnSync(
|
|
286
|
-
bunPath,
|
|
287
|
-
["build", "--target=node", "--format=cjs", "--outfile=dist/index.js", "src/index.ts"],
|
|
288
|
-
{ stdio: ["ignore", "ignore", "inherit"], cwd: REPO_ROOT },
|
|
289
|
-
);
|
|
290
|
-
if (r.status !== 0) warn("build failed — policies in .failproofai/policies/ will NOT load");
|
|
291
|
-
},
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
function main() {
|
|
296
|
-
const bun = findBun() ?? installBun();
|
|
297
|
-
if (!bun) {
|
|
298
|
-
warn(bunMissingMessage());
|
|
299
|
-
process.exit(1);
|
|
300
|
-
}
|
|
301
|
-
if (!ensureProjectDependencies(bun)) process.exit(1);
|
|
302
|
-
ensureBundle(bun);
|
|
303
|
-
|
|
304
|
-
// stdio:"inherit" hands the child our actual fds: the payload on stdin and
|
|
305
|
-
// any decision JSON on stdout flow byte-exact, unbuffered, unparsed by us.
|
|
306
|
-
// No cwd override — the child must see whatever cwd the agent CLI chose,
|
|
307
|
-
// exactly as it did when the config spawned bun directly.
|
|
308
|
-
const r = spawnSync(bun, [SRC_BIN, ...process.argv.slice(2)], { stdio: "inherit" });
|
|
309
|
-
|
|
310
|
-
// Exit codes are a contract, not a status: 2 means DENY on Claude/Factory/
|
|
311
|
-
// Goose. Propagate verbatim. Never synthesize 2 (would deny) or 0 (would
|
|
312
|
-
// silently allow).
|
|
313
|
-
if (r.error) {
|
|
314
|
-
warn(`could not run bun (${r.error.code ?? r.error.message}) — hooks are NOT enforcing`);
|
|
315
|
-
process.exit(1);
|
|
316
|
-
}
|
|
317
|
-
if (r.status === null && r.signal) {
|
|
318
|
-
// Mirror what `sh` reports for a signalled child, which is what the agent
|
|
319
|
-
// CLI saw before this launcher sat in between.
|
|
320
|
-
process.exit(128 + (constants.signals[r.signal] ?? 15));
|
|
321
|
-
}
|
|
322
|
-
process.exit(r.status ?? 1);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// Only run when executed, not when `.opencode/plugins/failproofai.mjs` imports
|
|
326
|
-
// the resolver. realpath so a symlinked or relative argv[1] still matches.
|
|
327
|
-
let invokedDirectly = false;
|
|
328
|
-
try {
|
|
329
|
-
invokedDirectly = realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1]);
|
|
330
|
-
} catch {
|
|
331
|
-
invokedDirectly = false;
|
|
332
|
-
}
|
|
333
|
-
if (invokedDirectly) main();
|
|
File without changes
|
|
File without changes
|
|
File without changes
|