failproofai 1.0.0-beta.5 → 1.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +2 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/routes-manifest.json +6 -0
- 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 +3 -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 +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +3 -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/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- 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/_not-found.segment.rsc +3 -3
- 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 +3 -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 -3
- 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 +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 +2 -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 +3 -2
- 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 +3 -2
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/reminder/route.js +3 -2
- package/.next/standalone/.next/server/app/api/auth/reminder/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route.js +3 -2
- 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/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page.js +5 -3
- 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 +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js +3 -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/server-reference-manifest.json +10 -10
- package/.next/standalone/.next/server/app/policies/page.js +4 -2
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js +4 -2
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +6 -4
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js +4 -2
- 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/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/settings/page/build-manifest.json +18 -0
- package/.next/standalone/.next/server/app/settings/page/next-font-manifest.json +6 -0
- package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +53 -0
- package/.next/standalone/.next/server/app/settings/page.js +18 -0
- package/.next/standalone/.next/server/app/settings/page.js.map +5 -0
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app-paths-manifest.json +2 -1
- package/.next/standalone/.next/server/chunks/{[externals]__1nl3dvw._.js → [externals]__0r-zamh._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06hexd0._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__094p1f1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_0xu5z._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ed01_d._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g0vcwt._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0h3lfmp._.js → [root-of-the-server]__0ky_n0r._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__18d-9oi._.js → [root-of-the-server]__0lk_935._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1p7s8-d._.js → [root-of-the-server]__0pbp9fe._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q-v9z2._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__10oa-v9._.js → [root-of-the-server]__0v2fpxe._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0sb_5m8._.js → [root-of-the-server]__131ebum._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0-dh5jy._.js → [root-of-the-server]__1_ps0jw._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0l4vuqm._.js → [root-of-the-server]__1a7i2q4._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ibjy5x._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1iny24d._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tvn4wf._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tyedjt._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0lxbzdq._.js +5 -0
- package/.next/standalone/.next/server/chunks/_1zuiiy3._.js +5 -0
- package/.next/standalone/.next/server/chunks/lib_telemetry_ts_0dctyyw._.js +5 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_17k9e3w.js +5 -5
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06bp_fg._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__074qmkp._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0c_qcgp._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kbc9bs._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0spkm68._.js +10 -10
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1a2hcb_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0rtdfof._.js → [root-of-the-server]__1rdruw4._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1rv-sc9._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1tyf0tc._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1u-wx42._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1v185mo._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0rag5dg._.js → [root-of-the-server]__1yw368c._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0-yi74u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_04mekdy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0r-dsre._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0rjgfln._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0se484m._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0uz7o9y._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_11_p9y8._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_194yh9u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1fahg9e._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1gmzkwj._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/_1w8sola._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1w_6p9g._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dwo94s.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589g._.js +5 -0
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- 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/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +54 -12
- package/.next/standalone/.next/static/chunks/0945ybz3fsvba.js +1 -0
- package/.next/standalone/.next/static/chunks/{0cr85wuc9gc9k.js → 0gr76ps8_zm26.js} +1 -1
- package/.next/standalone/.next/static/chunks/{2cqk4a9s893oy.js → 0m-m7wgtxdoav.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1tp9dex23zs8y.js → 11l6oh9cyb35a.js} +1 -1
- package/.next/standalone/.next/static/chunks/166f8qnh03jqc.js +6 -0
- package/.next/standalone/.next/static/chunks/1bm0q12hgs22l.css +2 -0
- package/.next/standalone/.next/static/chunks/1v1gqvpjk62jm.js +1 -0
- package/.next/standalone/.next/static/chunks/{2s9g1dsde_ts1.js → 2aej0vi1fm87m.js} +1 -1
- package/.next/standalone/.next/static/chunks/{1bkynffp3q1f7.js → 2bxld6-rym3ah.js} +22 -22
- package/.next/standalone/.next/static/chunks/{2v1rpzrh2i1wv.js → 2p2kz4aj1tooj.js} +1 -1
- package/.next/standalone/.next/static/chunks/2uvhw57mf9lg_.css +2 -0
- package/.next/standalone/.next/static/chunks/36pc3_8fpb6ic.js +1 -0
- package/.next/standalone/.next/static/chunks/{2k285z07qce47.js → 3t1wr_kx6brwc.js} +1 -1
- package/.next/standalone/app/actions/get-hooks-config.ts +2 -1
- package/.next/standalone/app/actions/get-scheduled-audit.ts +70 -0
- package/.next/standalone/app/actions/update-scheduled-audit.ts +44 -0
- package/.next/standalone/app/api/audit/run/route.ts +28 -0
- package/.next/standalone/app/api/audit/status/route.ts +13 -1
- package/.next/standalone/app/api/auth/status/route.ts +1 -1
- package/.next/standalone/app/audit/_components/auth-dialog.css +159 -0
- package/.next/standalone/app/audit/_components/auth-dialog.tsx +3 -0
- package/.next/standalone/app/audit/audit-styles.css +6 -149
- package/.next/standalone/app/settings/page.tsx +31 -0
- package/.next/standalone/app/settings/settings-client.tsx +488 -0
- package/.next/standalone/components/navbar.tsx +2 -0
- package/.next/standalone/lib/auth/api-server-client.ts +2 -3
- package/.next/standalone/lib/auth/auth-store.ts +4 -4
- package/.next/standalone/lib/codex-sessions.ts +2 -1
- package/.next/standalone/lib/dashboard-host.ts +101 -0
- package/.next/standalone/lib/install-check.ts +22 -7
- package/.next/standalone/lib/pi-sessions.ts +99 -14
- package/.next/standalone/lib/telemetry-enabled.ts +54 -0
- package/.next/standalone/lib/telemetry-id.ts +52 -1
- package/.next/standalone/lib/telemetry.ts +8 -4
- package/.next/standalone/node_modules/react/cjs/react.development.js +1 -1
- package/.next/standalone/node_modules/react/cjs/react.production.js +1 -1
- package/.next/standalone/node_modules/react/package.json +3 -3
- 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 +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
- package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
- package/.next/standalone/node_modules/react-dom/package.json +4 -4
- package/.next/standalone/package.json +7 -6
- package/.next/standalone/proxy.ts +89 -1
- package/.next/standalone/server.js +1 -1
- package/bin/failproofai.mjs +202 -86
- package/dist/cli.mjs +17803 -15346
- package/dist/worker.mjs +1620 -257
- package/lib/auth/api-server-client.ts +2 -3
- package/lib/auth/auth-store.ts +4 -4
- package/lib/codex-sessions.ts +2 -1
- package/lib/dashboard-host.ts +101 -0
- package/lib/install-check.ts +22 -7
- package/lib/pi-sessions.ts +99 -14
- package/lib/telemetry-enabled.ts +54 -0
- package/lib/telemetry-id.ts +52 -1
- package/lib/telemetry.ts +8 -4
- package/package.json +7 -6
- package/scripts/install-telemetry.mjs +8 -1
- package/scripts/launch.ts +25 -3
- package/scripts/parse-script-args.ts +17 -1
- package/scripts/prune-standalone.mjs +20 -0
- package/scripts/translate-docs/readme-translator.ts +163 -4
- package/scripts/validate-mdx.ts +153 -13
- package/src/audit/audit-lock.ts +285 -0
- package/src/audit/audit-schedule.ts +111 -0
- package/src/audit/cache.ts +18 -4
- package/src/audit/cli-adapters/goose.ts +2 -1
- package/src/audit/cli-adapters/hermes.ts +28 -10
- package/src/audit/cli.ts +191 -35
- package/src/audit/dashboard-cache.ts +2 -1
- package/src/hooks/builtin-policies.ts +100 -3
- package/src/hooks/cloud-connection.ts +160 -14
- package/src/hooks/cloud-enrollment-cli.ts +119 -21
- package/src/hooks/cloud-enrollment.ts +87 -17
- package/src/hooks/cloud-introspect.ts +147 -0
- package/src/hooks/cloud-managed-policies.ts +33 -2
- package/src/hooks/collector-config.ts +25 -43
- package/src/hooks/configure-wizard.ts +750 -318
- package/src/hooks/custom-hooks-loader.ts +125 -11
- package/src/hooks/daemon-client.ts +83 -17
- package/src/hooks/daemon-download.ts +54 -2
- package/src/hooks/daemon-service.ts +605 -29
- package/src/hooks/first-run-gate.ts +39 -0
- package/src/hooks/fp-config.ts +497 -0
- package/src/hooks/fp-home.ts +355 -0
- package/src/hooks/fp-reset.ts +332 -0
- package/src/hooks/handler.ts +42 -1
- package/src/hooks/hook-activity-store.ts +35 -20
- package/src/hooks/hook-logger.ts +2 -1
- package/src/hooks/hook-telemetry.ts +5 -1
- package/src/hooks/hooks-config.ts +4 -3
- package/src/hooks/loader-utils.ts +166 -5
- package/src/hooks/manager.ts +5 -4
- package/src/hooks/onboarding-attempt.ts +179 -0
- package/src/hooks/onboarding-lock.ts +119 -0
- package/src/hooks/policy-types.ts +0 -7
- package/src/hooks/session-pause-cli.ts +15 -13
- package/src/hooks/session-pause.ts +36 -4
- package/src/hooks/setup-state.ts +256 -0
- package/src/hooks/tui.ts +4 -4
- package/src/hooks/worker-server.ts +53 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0f8nu8d._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0szqzl8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__17g9wh7._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19120tr._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1fwl2mz._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1myjm-d._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rhmvod._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02r5bgf._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__094nop3._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e8sjqm._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lkzqax._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ls0gsr._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n_uvv0._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qucxyj._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u02miy._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__14dd6h8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1gak4pd._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1j4u3yd._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1zqz4v8._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/_1m_p7pi._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_html-to-image_es_index_12c_2cz.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1ezd2jf._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1tnuifj._.js +0 -5
- package/.next/standalone/.next/static/chunks/0h7auy7hzjyhw.js +0 -1
- package/.next/standalone/.next/static/chunks/1bw4dfzflelcv.js +0 -1
- package/.next/standalone/.next/static/chunks/34sjdw8lv46e3.js +0 -6
- package/.next/standalone/.next/static/chunks/3i27c3hcriawq.css +0 -1
- package/.next/standalone/.next/static/chunks/3zdwnnthucs_1.css +0 -2
- package/.next/standalone/Cargo.lock +0 -2222
- package/.next/standalone/Cargo.toml +0 -9
- package/.next/standalone/crates/CLOUD_POLICIES.md +0 -136
- package/.next/standalone/crates/PROTOCOL.md +0 -122
- package/.next/standalone/crates/failproofaid/Cargo.toml +0 -25
- package/.next/standalone/crates/failproofaid/src/cloud_client.rs +0 -484
- package/.next/standalone/crates/failproofaid/src/cloud_policies.rs +0 -921
- package/.next/standalone/crates/failproofaid/src/lock.rs +0 -81
- package/.next/standalone/crates/failproofaid/src/main.rs +0 -639
- package/.next/standalone/crates/failproofaid/src/paths.rs +0 -201
- package/.next/standalone/crates/failproofaid/src/server.rs +0 -502
- package/.next/standalone/crates/failproofaid/src/worker.rs +0 -400
- package/.next/standalone/crates/failproofaid/tests/daemon_e2e.rs +0 -241
- package/.next/standalone/crates/fpai-collect/Cargo.toml +0 -43
- package/.next/standalone/crates/fpai-collect/src/config.rs +0 -420
- package/.next/standalone/crates/fpai-collect/src/cursor.rs +0 -520
- package/.next/standalone/crates/fpai-collect/src/delivery.rs +0 -472
- package/.next/standalone/crates/fpai-collect/src/filetail.rs +0 -487
- package/.next/standalone/crates/fpai-collect/src/health.rs +0 -369
- package/.next/standalone/crates/fpai-collect/src/lib.rs +0 -34
- package/.next/standalone/crates/fpai-collect/src/redact.rs +0 -516
- package/.next/standalone/crates/fpai-collect/src/sources/claude/mod.rs +0 -279
- package/.next/standalone/crates/fpai-collect/src/sources/claude/transform.rs +0 -619
- package/.next/standalone/crates/fpai-collect/src/sources/codex/mod.rs +0 -156
- package/.next/standalone/crates/fpai-collect/src/sources/codex/transform.rs +0 -715
- package/.next/standalone/crates/fpai-collect/src/sources/copilot/mod.rs +0 -158
- package/.next/standalone/crates/fpai-collect/src/sources/copilot/transform.rs +0 -512
- package/.next/standalone/crates/fpai-collect/src/sources/goose/mod.rs +0 -511
- package/.next/standalone/crates/fpai-collect/src/sources/goose/transform.rs +0 -586
- package/.next/standalone/crates/fpai-collect/src/sources/hermes/mod.rs +0 -318
- package/.next/standalone/crates/fpai-collect/src/sources/hermes/transform.rs +0 -579
- package/.next/standalone/crates/fpai-collect/src/sources/hooks/mod.rs +0 -314
- package/.next/standalone/crates/fpai-collect/src/sources/hooks/transform.rs +0 -448
- package/.next/standalone/crates/fpai-collect/src/sources/mod.rs +0 -23
- package/.next/standalone/crates/fpai-collect/src/sources/openclaw/mod.rs +0 -176
- package/.next/standalone/crates/fpai-collect/src/sources/openclaw/transform.rs +0 -500
- package/.next/standalone/crates/fpai-collect/src/sources/opencode/mod.rs +0 -315
- package/.next/standalone/crates/fpai-collect/src/sources/opencode/transform.rs +0 -493
- package/.next/standalone/crates/fpai-collect/src/sources/pi/mod.rs +0 -201
- package/.next/standalone/crates/fpai-collect/src/sources/pi/transform.rs +0 -533
- package/.next/standalone/crates/fpai-collect/src/spool.rs +0 -535
- package/.next/standalone/crates/fpai-collect/src/sqlitepoll.rs +0 -390
- package/.next/standalone/crates/fpai-collect/src/supervisor.rs +0 -423
- package/.next/standalone/crates/fpai-collect/src/uploader.rs +0 -600
- package/.next/standalone/crates/fpai-collect/tests/claude_source.rs +0 -739
- package/.next/standalone/crates/fpai-collect/tests/claude_subagents.rs +0 -394
- package/.next/standalone/crates/fpai-collect/tests/codex_source.rs +0 -976
- package/.next/standalone/crates/fpai-collect/tests/config.rs +0 -286
- package/.next/standalone/crates/fpai-collect/tests/copilot_source.rs +0 -1020
- package/.next/standalone/crates/fpai-collect/tests/delivery.rs +0 -281
- package/.next/standalone/crates/fpai-collect/tests/goose_source.rs +0 -1009
- package/.next/standalone/crates/fpai-collect/tests/hermes_source.rs +0 -1130
- package/.next/standalone/crates/fpai-collect/tests/hooks_source.rs +0 -622
- package/.next/standalone/crates/fpai-collect/tests/openclaw_source.rs +0 -855
- package/.next/standalone/crates/fpai-collect/tests/opencode_source.rs +0 -1478
- package/.next/standalone/crates/fpai-collect/tests/pi_source.rs +0 -1192
- package/.next/standalone/crates/fpai-collect/tests/supervisor.rs +0 -290
- package/.next/standalone/crates/fpai-collect/tests/uploader.rs +0 -506
- package/.next/standalone/crates/fpai-ipc/Cargo.toml +0 -16
- package/.next/standalone/crates/fpai-ipc/src/envelope.rs +0 -175
- package/.next/standalone/crates/fpai-ipc/src/framing.rs +0 -177
- package/.next/standalone/crates/fpai-ipc/src/lib.rs +0 -10
- package/.next/standalone/crates/fpai-ipc/src/peer.rs +0 -80
- package/.next/standalone/docker-hook-sync/Dockerfile +0 -79
- package/.next/standalone/docker-hook-sync/entrypoint.sh +0 -109
- package/.next/standalone/integration-suite/Dockerfile +0 -47
- package/.next/standalone/integration-suite/README.md +0 -129
- package/.next/standalone/integration-suite/canary-policies.mjs +0 -45
- package/.next/standalone/integration-suite/capture-tokens.sh +0 -48
- package/.next/standalone/integration-suite/ci-entrypoint.sh +0 -179
- package/.next/standalone/integration-suite/inject-tokens.sh +0 -44
- package/.next/standalone/integration-suite/install-clis.sh +0 -136
- package/.next/standalone/integration-suite/probe-cli.sh +0 -248
- package/.next/standalone/integration-suite/report.js +0 -120
- package/.next/standalone/integration-suite/run.sh +0 -159
- package/.next/standalone/openclaw-plugin/index.js +0 -223
- package/.next/standalone/openclaw-plugin/openclaw.plugin.json +0 -6
- package/.next/standalone/openclaw-plugin/package.json +0 -12
- package/.next/standalone/osv-scanner.toml +0 -17
- package/.next/standalone/pi-extension/index.ts +0 -524
- package/.next/standalone/pi-extension/package.json +0 -12
- package/.next/standalone/postcss.config.mjs +0 -8
- package/.next/standalone/readme-arch-hq.gif +0 -0
- package/.next/standalone/rust-toolchain.toml +0 -4
- package/src/auth/cli.ts +0 -371
- /package/.next/standalone/.next/static/{LOuwMmfomO6hQYfMQYs4K → LUaLkKg40nSkHrIajexIk}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{LOuwMmfomO6hQYfMQYs4K → LUaLkKg40nSkHrIajexIk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{LOuwMmfomO6hQYfMQYs4K → LUaLkKg40nSkHrIajexIk}/_ssgManifest.js +0 -0
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# Cloud-managed policy generations
|
|
2
|
-
|
|
3
|
-
This is the contract between the Failproof Cloud HTTP transport and the
|
|
4
|
-
`failproofaid` policy worker. Polling and integrity maintenance run outside the
|
|
5
|
-
hook path; hooks evaluate only the last verified local generation.
|
|
6
|
-
|
|
7
|
-
## Layout
|
|
8
|
-
|
|
9
|
-
```text
|
|
10
|
-
~/.failproofai/policies/cloud-managed/
|
|
11
|
-
├── desired-state.json
|
|
12
|
-
├── active.json
|
|
13
|
-
├── artifacts/
|
|
14
|
-
│ └── <sha256>.mjs
|
|
15
|
-
└── generations/
|
|
16
|
-
└── <generation>/
|
|
17
|
-
├── manifest.json
|
|
18
|
-
└── <policy-id>.mjs
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
- `desired-state.json` is the last complete desired-state snapshot received
|
|
22
|
-
from cloud. A later slice must authenticate it with a publisher signature;
|
|
23
|
-
SHA-256 alone proves byte identity, not publisher identity.
|
|
24
|
-
- `artifacts/` is a content-addressed cache.
|
|
25
|
-
- `generations/` contains complete materialized policy sets. New generations
|
|
26
|
-
are built without modifying the active one.
|
|
27
|
-
- `active.json` is an atomically replaced pointer to one complete generation.
|
|
28
|
-
It is derived state and is reconstructed when it is deleted, malformed, or
|
|
29
|
-
disagrees with `desired-state.json`.
|
|
30
|
-
|
|
31
|
-
## Desired-state schema
|
|
32
|
-
|
|
33
|
-
```json
|
|
34
|
-
{
|
|
35
|
-
"schemaVersion": 1,
|
|
36
|
-
"generation": 184,
|
|
37
|
-
"policies": [
|
|
38
|
-
{
|
|
39
|
-
"id": "block-secret-exfiltration",
|
|
40
|
-
"revision": 7,
|
|
41
|
-
"sha256": "<64 lowercase hex characters>",
|
|
42
|
-
"artifactUrl": "https://..."
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
The artifact URL is opaque to the store. A cloud client supplies downloaded
|
|
49
|
-
bytes through `ArtifactFetcher`; the reconciler trusts none of those bytes
|
|
50
|
-
until their SHA-256 matches the desired state.
|
|
51
|
-
|
|
52
|
-
## Cloud transport
|
|
53
|
-
|
|
54
|
-
Enrol with the CLI:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
failproofai config --connect https://be.failproof.ai \
|
|
58
|
-
--token <org-scoped policies:pull key> \
|
|
59
|
-
--machine-id prod-runner-01 # defaults to this host's name
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
That verifies the credentials against the server before storing anything, then
|
|
63
|
-
writes `~/.failproofai/cloud.json` (mode 0600). `--disconnect` removes it,
|
|
64
|
-
`--status` reports the connection with the token masked.
|
|
65
|
-
|
|
66
|
-
**The credential must not go in the service unit.** `daemon-service.ts` installs
|
|
67
|
-
`/etc/systemd/system/failproofaid@<user>.service` at mode 0644 — root-owned and
|
|
68
|
-
world-readable — and the launchd plist likewise. An
|
|
69
|
-
`Environment="FAILPROOFAI_CLOUD_TOKEN=…"` line there hands an organization-scoped
|
|
70
|
-
key to every local user, and `systemctl show` prints it back with no privilege
|
|
71
|
-
at all. Keeping it in a file also means enrolment, rotation and disconnect need
|
|
72
|
-
no root, and an already-installed daemon can be connected without reinstalling.
|
|
73
|
-
|
|
74
|
-
The daemon re-resolves enrolment on **every poll**, not at startup, so all three
|
|
75
|
-
take effect within one interval with nothing to restart — which matters because
|
|
76
|
-
restarting a system unit needs root, the very thing this avoids.
|
|
77
|
-
|
|
78
|
-
Environment variables still take precedence over the file, for CI, containers
|
|
79
|
-
and tests:
|
|
80
|
-
|
|
81
|
-
```text
|
|
82
|
-
FAILPROOFAI_CLOUD_URL=https://be.failproof.ai
|
|
83
|
-
FAILPROOFAI_CLOUD_TOKEN=<org-scoped policies:pull key>
|
|
84
|
-
FAILPROOFAI_MACHINE_ID=<deployment machine id>
|
|
85
|
-
FAILPROOFAI_CLOUD_CREDENTIALS=<path> # overrides ~/.failproofai/cloud.json
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
`FAILPROOFAI_CLOUD_POLICY_POLL_MS` controls the interval (30 seconds by
|
|
89
|
-
default, clamped to at least 100 ms). The client sends Bearer authentication
|
|
90
|
-
to both desired-state and artifact endpoints. Relative artifact locators are
|
|
91
|
-
resolved against the configured base URL; cross-origin locators are rejected
|
|
92
|
-
before the token is sent.
|
|
93
|
-
|
|
94
|
-
An HTTP failure, invalid desired-state response, bad digest, or incomplete
|
|
95
|
-
generation leaves the previous generation active.
|
|
96
|
-
|
|
97
|
-
## Activation transaction
|
|
98
|
-
|
|
99
|
-
1. Validate schema, policy IDs, unique IDs, digests, and monotonic generation.
|
|
100
|
-
2. Reuse a verified cache/generation copy or fetch missing bytes.
|
|
101
|
-
3. Verify every artifact digest.
|
|
102
|
-
4. Materialize the complete generation and `fsync` its files/directories.
|
|
103
|
-
5. Persist `desired-state.json`.
|
|
104
|
-
6. Atomically replace `active.json`.
|
|
105
|
-
|
|
106
|
-
Any failure before step 6 leaves the previous generation active. The worker
|
|
107
|
-
loads only paths named by `active.json` and independently verifies every digest
|
|
108
|
-
immediately before importing JavaScript.
|
|
109
|
-
|
|
110
|
-
## Integrity maintenance
|
|
111
|
-
|
|
112
|
-
`failproofaid` runs a maintenance thread outside the hook path. It hashes the
|
|
113
|
-
active generation periodically (30 seconds by default) and repairs either a
|
|
114
|
-
modified generation copy or a modified content-addressed artifact from the
|
|
115
|
-
other verified copy. If both are gone, it retains the active manifest and
|
|
116
|
-
reports that a cloud re-fetch is required.
|
|
117
|
-
|
|
118
|
-
`FAILPROOFAI_CLOUD_POLICY_DIR` overrides the root for tests and development.
|
|
119
|
-
When cloud polling is disabled, `FAILPROOFAI_CLOUD_POLICY_RECONCILE_MS`
|
|
120
|
-
overrides the standalone integrity interval, clamped to at least 100 ms. With
|
|
121
|
-
cloud polling enabled, integrity repair runs on each poll.
|
|
122
|
-
|
|
123
|
-
## Current security boundary
|
|
124
|
-
|
|
125
|
-
PR #632 runs the daemon as the same OS user as the governed agent. This layer
|
|
126
|
-
provides deterministic deployment, drift detection, and self-healing, but it
|
|
127
|
-
does not make policies tamper-proof against that user. The user can stop the
|
|
128
|
-
service or delete both verified copies. Publisher signatures, deployment
|
|
129
|
-
acknowledgement, and a stronger service identity are separate follow-up layers.
|
|
130
|
-
The current machine credential is an org-scoped Bearer key transported over
|
|
131
|
-
HTTPS.
|
|
132
|
-
|
|
133
|
-
Downloaded JavaScript executes in the existing TypeScript policy worker with
|
|
134
|
-
the user's authority. Cloud authorization must therefore treat assigning an
|
|
135
|
-
arbitrary JavaScript policy as remote code execution until a sandboxed policy
|
|
136
|
-
runtime exists.
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
# failproofaid wire protocol
|
|
2
|
-
|
|
3
|
-
The contract between the `failproofai` CLI (thin client) and the `failproofaid`
|
|
4
|
-
daemon over a Unix domain socket. This is the same contract every hook
|
|
5
|
-
invocation already has today — see `src/hooks/handler.ts`'s
|
|
6
|
-
`handleHookEvent`: `(argv --hook <Event> --cli <cli>, stdin JSON payload) ->
|
|
7
|
-
(stdout, stderr, exitCode)`. The daemon adds nothing to that contract; it only
|
|
8
|
-
relays it over a socket instead of a fresh process's argv/stdin/stdout.
|
|
9
|
-
|
|
10
|
-
Implemented in `crates/fpai-ipc` (framing + envelope + peer verification) and
|
|
11
|
-
`crates/failproofaid` (the socket server itself). As of Stage 2, the daemon
|
|
12
|
-
answers `ping` and rejects `hook` with a stub "not implemented" error — Stage 3
|
|
13
|
-
wires `hook` up to a real warm Node/Bun worker.
|
|
14
|
-
|
|
15
|
-
## Transport
|
|
16
|
-
|
|
17
|
-
One Unix domain socket, one connection per request. The daemon reads exactly
|
|
18
|
-
one frame, dispatches it, writes exactly one frame back, and lets the
|
|
19
|
-
connection close — there is no request-ID multiplexing because there is never
|
|
20
|
-
more than one logical request in flight per connection.
|
|
21
|
-
|
|
22
|
-
Default path: `~/.failproofai/run/failproofaid.sock`. Overridable via the
|
|
23
|
-
`FAILPROOFAI_DAEMON_SOCKET` env var (used by local dev and tests — never point
|
|
24
|
-
this at a directory failproofaid doesn't own itself; see
|
|
25
|
-
`crates/failproofaid/src/paths.rs`'s `ensure_run_dir`, which refuses to modify
|
|
26
|
-
permissions on a pre-existing directory it didn't create).
|
|
27
|
-
|
|
28
|
-
Permissions: the run directory is `0700` and the socket file `0600` — this is
|
|
29
|
-
the actual access-control boundary (user-scope only, no elevation, same OS
|
|
30
|
-
user only). `crates/fpai-ipc/src/peer.rs`'s `SO_PEERCRED` (Linux) /
|
|
31
|
-
`getpeereid` (macOS) check is defense-in-depth on top of that, not a stronger
|
|
32
|
-
boundary — same-user access can always reach this daemon regardless.
|
|
33
|
-
|
|
34
|
-
## Framing
|
|
35
|
-
|
|
36
|
-
Every message, in both directions, is:
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
+----------------------------+------------------------------+
|
|
40
|
-
| length (4 bytes, big-endian u32) | UTF-8 JSON body (length bytes) |
|
|
41
|
-
+----------------------------+------------------------------+
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
A declared length over `MAX_FRAME_LEN` (16 MiB) is rejected without
|
|
45
|
-
allocating a body buffer for it — a hook payload is at most 1 MiB (see
|
|
46
|
-
`handler.ts`'s own stdin cap), so 16 MiB is headroom, not an expected size.
|
|
47
|
-
|
|
48
|
-
## Envelope
|
|
49
|
-
|
|
50
|
-
Tagged JSON, `"type"` as the discriminant, camelCase field names.
|
|
51
|
-
|
|
52
|
-
### Client → daemon (`ClientMessage`)
|
|
53
|
-
|
|
54
|
-
```jsonc
|
|
55
|
-
// Liveness/handshake check.
|
|
56
|
-
{ "type": "ping", "protocolVersion": 1 }
|
|
57
|
-
|
|
58
|
-
// One hook evaluation request — one per `failproofai --hook <Event> --cli <cli>` invocation.
|
|
59
|
-
{
|
|
60
|
-
"type": "hook",
|
|
61
|
-
"protocolVersion": 1,
|
|
62
|
-
"hookEvent": "PreToolUse",
|
|
63
|
-
"cli": "claude",
|
|
64
|
-
"stdin": "<raw stdin payload the calling agent CLI wrote to the one-shot failproofai process, forwarded verbatim>",
|
|
65
|
-
"cwd": "/path/to/session/cwd" // optional; see the note below
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
`cwd` must be the *originating* CLI process's cwd, captured by the thin
|
|
70
|
-
client before dispatch — never the daemon's own cwd. The daemon is a single
|
|
71
|
-
long-lived process; its own `cwd` does not vary per request and must never be
|
|
72
|
-
used to resolve project config or custom policies (this is the "process.cwd()
|
|
73
|
-
hazard" the TS-side plan calls out explicitly).
|
|
74
|
-
|
|
75
|
-
### Daemon → client (`ServerMessage`)
|
|
76
|
-
|
|
77
|
-
```jsonc
|
|
78
|
-
{ "type": "pong", "protocolVersion": 1 }
|
|
79
|
-
|
|
80
|
-
{
|
|
81
|
-
"type": "hookResult",
|
|
82
|
-
"protocolVersion": 1,
|
|
83
|
-
"exitCode": 0,
|
|
84
|
-
"stdout": "...",
|
|
85
|
-
"stderr": "..."
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// The daemon accepted the connection and parsed the request, but could not
|
|
89
|
-
// produce a verdict (worker down/hung, or — in Stage 2 — hook evaluation
|
|
90
|
-
// simply isn't wired up yet). Distinct from hookResult so the client can
|
|
91
|
-
// tell "ran and decided" apart from "daemon couldn't evaluate at all" — the
|
|
92
|
-
// latter is what drives the client's fail-closed path.
|
|
93
|
-
{ "type": "error", "protocolVersion": 1, "message": "..." }
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Protocol versioning
|
|
97
|
-
|
|
98
|
-
`protocolVersion` is carried on every message in both directions. A mismatch
|
|
99
|
-
gets an explicit `error` response from the daemon — the client treats *any*
|
|
100
|
-
failure mode (missing socket, refused connection, timeout, malformed
|
|
101
|
-
response, or an explicit version mismatch) identically: fall through to
|
|
102
|
-
whatever the client's fail-closed/in-process policy dictates. There is no
|
|
103
|
-
negotiation, only agree-or-fall-back.
|
|
104
|
-
|
|
105
|
-
## Peer verification
|
|
106
|
-
|
|
107
|
-
Every connection is checked with `SO_PEERCRED`/`getpeereid` before a single
|
|
108
|
-
byte of the request is read. A peer running as a different OS user gets the
|
|
109
|
-
connection dropped with **no response at all** — not even an `error` frame —
|
|
110
|
-
so a connection from the wrong user can't even confirm a daemon is listening
|
|
111
|
-
there.
|
|
112
|
-
|
|
113
|
-
## Malformed input handling
|
|
114
|
-
|
|
115
|
-
- A frame whose declared length exceeds `MAX_FRAME_LEN`: connection closed,
|
|
116
|
-
no response, no allocation attempted for the declared size.
|
|
117
|
-
- A syntactically invalid or truncated frame: connection closed, no response.
|
|
118
|
-
- A well-formed frame with an unrecognized `"type"`: fails to deserialize,
|
|
119
|
-
same as above.
|
|
120
|
-
|
|
121
|
-
None of these crash the daemon or the connection-handling thread — a bad
|
|
122
|
-
frame from one connection has no effect on any other connection.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "failproofaid"
|
|
3
|
-
version.workspace = true
|
|
4
|
-
edition.workspace = true
|
|
5
|
-
license-file.workspace = true
|
|
6
|
-
repository.workspace = true
|
|
7
|
-
description = "Thin Rust supervisor: owns the failproofai IPC socket, service lifecycle, and warm worker process supervision. Carries no policy logic."
|
|
8
|
-
publish = false
|
|
9
|
-
|
|
10
|
-
[[bin]]
|
|
11
|
-
name = "failproofaid"
|
|
12
|
-
path = "src/main.rs"
|
|
13
|
-
|
|
14
|
-
[dependencies]
|
|
15
|
-
fpai-ipc = { path = "../fpai-ipc" }
|
|
16
|
-
fpai-collect = { path = "../fpai-collect" }
|
|
17
|
-
# Without a subscriber every `tracing::` call in fpai-collect is silently
|
|
18
|
-
# discarded — including the uploader's "the server stored NONE of its events".
|
|
19
|
-
tracing = "0.1"
|
|
20
|
-
tracing-subscriber = { version = "0.3", default-features = false, features = ["std", "fmt", "env-filter"] }
|
|
21
|
-
serde = { version = "1", features = ["derive"] }
|
|
22
|
-
serde_json = "1"
|
|
23
|
-
libc = "0.2"
|
|
24
|
-
sha2 = "0.10"
|
|
25
|
-
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] }
|