failproofai 1.0.8-beta.0 → 1.0.9-beta.0

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.
Files changed (163) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  12. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  18. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
  20. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  30. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/index.html +1 -1
  33. package/.next/standalone/.next/server/app/index.rsc +15 -15
  34. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  35. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  36. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  38. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  41. package/.next/standalone/.next/server/app/policies/page.js +3 -3
  42. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  45. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  48. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  49. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  52. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  55. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
  58. package/.next/standalone/.next/server/chunks/_09dz7xv._.js +20 -20
  59. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  60. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  61. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  63. package/.next/standalone/.next/server/chunks/src_hooks_1aveq0u._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +2 -2
  65. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +2 -2
  66. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +2 -2
  67. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +2 -2
  68. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__14o3ek1._.js → [root-of-the-server]__0tmz862._.js} +2 -2
  69. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +2 -2
  70. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15578wp._.js +2 -2
  71. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m_svbe._.js +2 -2
  72. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +2 -2
  73. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +2 -2
  74. package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +1 -1
  75. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  76. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +1 -1
  77. package/.next/standalone/.next/server/chunks/ssr/{_0o4xkpl._.js → _0n0lja6._.js} +1 -1
  78. package/.next/standalone/.next/server/chunks/ssr/_1gb0ifp._.js +2 -2
  79. package/.next/standalone/.next/server/chunks/ssr/{_1-7sqrb._.js → _1p3iz2d._.js} +2 -2
  80. package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
  81. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +3 -3
  82. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +1 -1
  83. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  84. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  85. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +1 -1
  86. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +1 -1
  87. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_0aiy-os._.js +1 -1
  88. package/.next/standalone/.next/server/chunks/ssr/src_hooks_effective-reviewers_ts_1h4wtvo._.js +1 -1
  89. package/.next/standalone/.next/server/chunks/ssr/src_hooks_semantic_pack-policies_ts_0gh_bu_._.js +1 -1
  90. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  91. package/.next/standalone/.next/server/pages/404.html +1 -1
  92. package/.next/standalone/.next/server/pages/500.html +1 -1
  93. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
  95. package/.next/standalone/.next/static/chunks/{2z7i-yg59w4pn.js → 0247hc9ath5t-.js} +1 -1
  96. package/.next/standalone/.next/static/chunks/{0ahfwmbkpgfw4.js → 03001k9jy-kst.js} +1 -1
  97. package/.next/standalone/.next/static/chunks/{2vo7qbdbvnc0o.js → 06k7gsfnb7jkh.js} +1 -1
  98. package/.next/standalone/.next/static/chunks/0qejem4-zt-hy.js +1 -0
  99. package/.next/standalone/.next/static/chunks/{1v_tp3hm8wyhe.js → 0snylg3y1i47a.js} +1 -1
  100. package/.next/standalone/.next/static/chunks/1h0if8ky362as.js +1 -0
  101. package/.next/standalone/.next/static/chunks/{3bgot5v6f6s3c.js → 2qsrrrl2maqsb.js} +1 -1
  102. package/.next/standalone/.next/static/chunks/{0bhidk90e-07f.css → 3_e_wg5_oay87.css} +1 -1
  103. package/.next/standalone/.next/static/chunks/3ns-egfh8i8i5.js +6 -0
  104. package/.next/standalone/.next/static/chunks/3rq7fjj9we0v3.js +1 -0
  105. package/.next/standalone/.next/static/chunks/42m0f2hh8vfb1.js +1 -0
  106. package/.next/standalone/app/actions/get-jev-config.ts +2 -2
  107. package/.next/standalone/app/actions/update-jev-config.ts +12 -9
  108. package/.next/standalone/app/components/jev-notices.tsx +10 -10
  109. package/.next/standalone/app/settings/jev-panel.tsx +11 -11
  110. package/.next/standalone/fp-cloud-cli/CHANGELOG.md +2 -0
  111. package/.next/standalone/fp-cloud-cli/fp_cli/output.py +26 -0
  112. package/.next/standalone/fp-cloud-cli/tests/test_output.py +27 -0
  113. package/.next/standalone/hermes-plugin/README.md +18 -8
  114. package/.next/standalone/package.json +10 -10
  115. package/.next/standalone/sdk/typescript/CHANGELOG.md +18 -1
  116. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package-lock.json +0 -274
  117. package/.next/standalone/server.js +1 -1
  118. package/bin/failproofai.mjs +33 -7
  119. package/dist/cli.mjs +664 -553
  120. package/dist/worker.mjs +164 -407
  121. package/hermes-plugin/README.md +18 -8
  122. package/package.json +10 -10
  123. package/scripts/build-policy-pack.mjs +6 -9
  124. package/src/hooks/cloud-connection.ts +12 -6
  125. package/src/hooks/custom-hooks-loader.ts +1 -1
  126. package/src/hooks/effective-reviewers.ts +50 -43
  127. package/src/hooks/handler.ts +25 -16
  128. package/src/hooks/hermes-update.ts +74 -0
  129. package/src/hooks/hook-activity-store.ts +3 -3
  130. package/src/hooks/integrations.ts +349 -55
  131. package/src/hooks/jev-activity.ts +3 -3
  132. package/src/hooks/jev-cli.ts +17 -17
  133. package/src/hooks/jev-cloud-connection.ts +4 -4
  134. package/src/hooks/manager.ts +3 -2
  135. package/src/hooks/pack-cli.ts +24 -23
  136. package/src/hooks/pack-manifest.ts +25 -2
  137. package/src/hooks/pack-store.ts +2 -2
  138. package/src/hooks/policy-authority.ts +51 -32
  139. package/src/hooks/policy-evaluator.ts +5 -5
  140. package/src/hooks/policy-registry.ts +5 -7
  141. package/src/hooks/policy-reviewability.ts +26 -10
  142. package/src/hooks/policy-types.ts +4 -4
  143. package/src/hooks/semantic/combine.ts +13 -13
  144. package/src/hooks/semantic/decide.ts +134 -29
  145. package/src/hooks/semantic/evaluator.ts +5 -5
  146. package/src/hooks/semantic/facts.ts +91 -2
  147. package/src/hooks/semantic/jev-client.ts +1 -1
  148. package/src/hooks/semantic/jev-config.ts +21 -12
  149. package/src/hooks/semantic/jev-review.ts +3 -3
  150. package/src/hooks/semantic/jev-stats.ts +17 -17
  151. package/src/hooks/semantic/pack-policies.ts +48 -48
  152. package/src/hooks/semantic/policies.ts +13 -425
  153. package/src/hooks/semantic/precondition-names.ts +1 -1
  154. package/src/hooks/semantic/preconditions.ts +1 -1
  155. package/src/hooks/semantic/types.ts +7 -1
  156. package/.next/standalone/.next/static/chunks/078gnymqoh3r4.js +0 -1
  157. package/.next/standalone/.next/static/chunks/1bu2-nv59ed6i.js +0 -1
  158. package/.next/standalone/.next/static/chunks/2a405_e1o26ol.js +0 -1
  159. package/.next/standalone/.next/static/chunks/36uhh9el_oz8e.js +0 -1
  160. package/.next/standalone/.next/static/chunks/3o3f1ibfci0p7.js +0 -6
  161. /package/.next/standalone/.next/static/{O_b5R1axf5cb4NxIXq2kS → z1C0kJVF0NCtWn5R88hW3}/_buildManifest.js +0 -0
  162. /package/.next/standalone/.next/static/{O_b5R1axf5cb4NxIXq2kS → z1C0kJVF0NCtWn5R88hW3}/_clientMiddlewareManifest.js +0 -0
  163. /package/.next/standalone/.next/static/{O_b5R1axf5cb4NxIXq2kS → z1C0kJVF0NCtWn5R88hW3}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[17694,e=>{"use strict";var t=e.i(2157);e.i(50227);var i=e.i(79857);let r={mode:"oss",daemon:{configured:!1},collector:{sessions:!1,hooks:!0,hooksVerbosity:"decisions",redact:"minimal",environment:"local"},telemetry:{enabled:!0},audit:{auto:!1,intervalDays:7}};e.s(["isTelemetryEnabled",0,function(){if("1"===process.env.FAILPROOFAI_TELEMETRY_DISABLED)return!1;try{return function(){try{var e;let r,n,a,s,o;return e=JSON.parse((0,t.readFileSync)((0,i.configFile)(),"utf8")),r=e.mode?.kind,n=e.daemon??{},a=e.collector??{},s=e.telemetry??{},o=e.audit??{},{mode:"cloud"===r?"cloud":"oss",daemon:{configured:!0===n.configured},collector:{sessions:!0===a.sessions,hooks:!1!==a.hooks,hooksVerbosity:"all"===a.hooks_verbosity||"off"===a.hooks_verbosity?a.hooks_verbosity:"decisions",redact:"off"===a.redact?"off":"minimal",environment:"string"==typeof a.environment?a.environment:"local",machineId:"string"==typeof a.machine_id?a.machine_id:void 0,sources:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t={};for(let[i,r]of Object.entries(e)){if(!r||"object"!=typeof r||Array.isArray(r))continue;let e=r.extra_paths;if(!Array.isArray(e))continue;let n=e.filter(e=>"string"==typeof e&&""!==e.trim());n.length>0&&(t[i]={extraPaths:n})}return Object.keys(t).length>0?t:void 0}(a.sources)},telemetry:{enabled:!1!==s.enabled},audit:{auto:!0===o.auto,intervalDays:function(e){if("number"!=typeof e||!Number.isFinite(e))return 7;let t=Math.floor(e);return t<1?7:Math.min(t,90)}(o.interval_days),reportsConsentedAt:"number"==typeof o.reports_consented_at&&Number.isFinite(o.reports_consented_at)?o.reports_consented_at:void 0}}}catch{return structuredClone(r)}}().telemetry.enabled}catch{return!0}}],17694)},10659,e=>{"use strict";let t;var i=e.i(2157),r=e.i(50227),n=e.i(60526),a=e.i(66680);e.i(74533);var s=e.i(79857);let o=r.default.join(n.default.homedir(),".failproofai"),l=r.default.join(o,"instance-id");function d(e){return a.default.createHmac("sha256","failproofai-telemetry-v1").update(e).digest("hex")}function c(e){let t;try{if(t=(0,s.telemetryIdFile)(),i.default.readFileSync(t,"utf-8").trim()===e)return}catch{try{t=(0,s.telemetryIdFile)()}catch{return}}try{i.default.mkdirSync(r.default.dirname(t),{recursive:!0});let n=`${t}.${process.pid}.tmp`;i.default.writeFileSync(n,e,{encoding:"utf-8",mode:384}),i.default.renameSync(n,t)}catch{}}e.s(["getInstanceId",0,function(){if(t)return t;let e=function(){try{for(let e of(n.default.platform(),["/etc/machine-id","/var/lib/dbus/machine-id"]))try{let t=i.default.readFileSync(e,"utf-8").trim();if(t)return t}catch{}}catch{}}();if(e)return c(t=d(e)),t;let r=[n.default.hostname(),n.default.homedir(),n.default.platform(),n.default.arch(),n.default.cpus()[0]?.model??""].join(":");return r?c(t=d(r)):c(t=function(){try{let e=i.default.readFileSync(l,"utf-8").trim();if(e)return e}catch{}let e=a.default.randomUUID();try{i.default.mkdirSync(o,{recursive:!0}),i.default.writeFileSync(l,e,"utf-8")}catch{}return e}()),t}])},24214,(e,t,i)=>{t.exports={name:"failproofai",version:"1.0.8-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.0","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.8-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.8-beta.0"},failproofaidBinaries:{"linux-x64":"35b641f60e1724513fbb760db382123dad2b5fcdd67dda6373bda80651bd36bb","linux-arm64":"a058288f5d08f99612f053793e5c7f59264d3da97f3dbe769e401b0f8536702d","darwin-x64":"b4f3dbe4aea44e77cc10839647c0dc03a1b8b797dfb27e1d89a6a96554ef27b8","darwin-arm64":"fd42f28bf92001d39117b488a215578b966f07d316214744aca64a1888f2aed2"}}},28067,e=>{"use strict";e.s(["POSTHOG_API_KEY",0,"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX","POSTHOG_PRODUCT",0,"failproofai-oss"])}];
1
+ module.exports=[17694,e=>{"use strict";var t=e.i(2157);e.i(50227);var i=e.i(79857);let r={mode:"oss",daemon:{configured:!1},collector:{sessions:!1,hooks:!0,hooksVerbosity:"decisions",redact:"minimal",environment:"local"},telemetry:{enabled:!0},audit:{auto:!1,intervalDays:7}};e.s(["isTelemetryEnabled",0,function(){if("1"===process.env.FAILPROOFAI_TELEMETRY_DISABLED)return!1;try{return function(){try{var e;let r,n,a,s,o;return e=JSON.parse((0,t.readFileSync)((0,i.configFile)(),"utf8")),r=e.mode?.kind,n=e.daemon??{},a=e.collector??{},s=e.telemetry??{},o=e.audit??{},{mode:"cloud"===r?"cloud":"oss",daemon:{configured:!0===n.configured},collector:{sessions:!0===a.sessions,hooks:!1!==a.hooks,hooksVerbosity:"all"===a.hooks_verbosity||"off"===a.hooks_verbosity?a.hooks_verbosity:"decisions",redact:"off"===a.redact?"off":"minimal",environment:"string"==typeof a.environment?a.environment:"local",machineId:"string"==typeof a.machine_id?a.machine_id:void 0,sources:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t={};for(let[i,r]of Object.entries(e)){if(!r||"object"!=typeof r||Array.isArray(r))continue;let e=r.extra_paths;if(!Array.isArray(e))continue;let n=e.filter(e=>"string"==typeof e&&""!==e.trim());n.length>0&&(t[i]={extraPaths:n})}return Object.keys(t).length>0?t:void 0}(a.sources)},telemetry:{enabled:!1!==s.enabled},audit:{auto:!0===o.auto,intervalDays:function(e){if("number"!=typeof e||!Number.isFinite(e))return 7;let t=Math.floor(e);return t<1?7:Math.min(t,90)}(o.interval_days),reportsConsentedAt:"number"==typeof o.reports_consented_at&&Number.isFinite(o.reports_consented_at)?o.reports_consented_at:void 0}}}catch{return structuredClone(r)}}().telemetry.enabled}catch{return!0}}],17694)},10659,e=>{"use strict";let t;var i=e.i(2157),r=e.i(50227),n=e.i(60526),a=e.i(66680);e.i(74533);var s=e.i(79857);let o=r.default.join(n.default.homedir(),".failproofai"),l=r.default.join(o,"instance-id");function c(e){return a.default.createHmac("sha256","failproofai-telemetry-v1").update(e).digest("hex")}function d(e){let t;try{if(t=(0,s.telemetryIdFile)(),i.default.readFileSync(t,"utf-8").trim()===e)return}catch{try{t=(0,s.telemetryIdFile)()}catch{return}}try{i.default.mkdirSync(r.default.dirname(t),{recursive:!0});let n=`${t}.${process.pid}.tmp`;i.default.writeFileSync(n,e,{encoding:"utf-8",mode:384}),i.default.renameSync(n,t)}catch{}}e.s(["getInstanceId",0,function(){if(t)return t;let e=function(){try{for(let e of(n.default.platform(),["/etc/machine-id","/var/lib/dbus/machine-id"]))try{let t=i.default.readFileSync(e,"utf-8").trim();if(t)return t}catch{}}catch{}}();if(e)return d(t=c(e)),t;let r=[n.default.hostname(),n.default.homedir(),n.default.platform(),n.default.arch(),n.default.cpus()[0]?.model??""].join(":");return r?d(t=c(r)):d(t=function(){try{let e=i.default.readFileSync(l,"utf-8").trim();if(e)return e}catch{}let e=a.default.randomUUID();try{i.default.mkdirSync(o,{recursive:!0}),i.default.writeFileSync(l,e,"utf-8")}catch{}return e}()),t}])},24214,(e,t,i)=>{t.exports={name:"failproofai",version:"1.0.9-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.1","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.9-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.9-beta.0"},failproofaidBinaries:{"linux-x64":"044b6619007227b8aa1fc1095b8c61a17bd90e11da53183ac1f5adecdcae6839","linux-arm64":"479450d7d15c52a59bd1a8cf4c7086be9210e8d31ad4f98d99b123f571e944bd","darwin-x64":"11562912ff726195bfb966ed24a774ffea38d01acc3edc1f9bfa3ea9c298977f","darwin-arm64":"5bbaee1ec89d2d8032b7f16e502fb96891fbc6aa2ee6c861f43a64a0a60e61ba"}}},28067,e=>{"use strict";e.s(["POSTHOG_API_KEY",0,"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX","POSTHOG_PRODUCT",0,"failproofai-oss"])}];
2
2
 
3
3
  //# sourceMappingURL=_0tovk6q._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[17694,e=>{"use strict";var t=e.i(2157);e.i(50227);var i=e.i(79857);let r={mode:"oss",daemon:{configured:!1},collector:{sessions:!1,hooks:!0,hooksVerbosity:"decisions",redact:"minimal",environment:"local"},telemetry:{enabled:!0},audit:{auto:!1,intervalDays:7}};e.s(["isTelemetryEnabled",0,function(){if("1"===process.env.FAILPROOFAI_TELEMETRY_DISABLED)return!1;try{return function(){try{var e;let r,n,a,s,o;return e=JSON.parse((0,t.readFileSync)((0,i.configFile)(),"utf8")),r=e.mode?.kind,n=e.daemon??{},a=e.collector??{},s=e.telemetry??{},o=e.audit??{},{mode:"cloud"===r?"cloud":"oss",daemon:{configured:!0===n.configured},collector:{sessions:!0===a.sessions,hooks:!1!==a.hooks,hooksVerbosity:"all"===a.hooks_verbosity||"off"===a.hooks_verbosity?a.hooks_verbosity:"decisions",redact:"off"===a.redact?"off":"minimal",environment:"string"==typeof a.environment?a.environment:"local",machineId:"string"==typeof a.machine_id?a.machine_id:void 0,sources:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t={};for(let[i,r]of Object.entries(e)){if(!r||"object"!=typeof r||Array.isArray(r))continue;let e=r.extra_paths;if(!Array.isArray(e))continue;let n=e.filter(e=>"string"==typeof e&&""!==e.trim());n.length>0&&(t[i]={extraPaths:n})}return Object.keys(t).length>0?t:void 0}(a.sources)},telemetry:{enabled:!1!==s.enabled},audit:{auto:!0===o.auto,intervalDays:function(e){if("number"!=typeof e||!Number.isFinite(e))return 7;let t=Math.floor(e);return t<1?7:Math.min(t,90)}(o.interval_days),reportsConsentedAt:"number"==typeof o.reports_consented_at&&Number.isFinite(o.reports_consented_at)?o.reports_consented_at:void 0}}}catch{return structuredClone(r)}}().telemetry.enabled}catch{return!0}}],17694)},10659,e=>{"use strict";let t;var i=e.i(2157),r=e.i(50227),n=e.i(60526),a=e.i(66680);e.i(74533);var s=e.i(79857);let o=r.default.join(n.default.homedir(),".failproofai"),l=r.default.join(o,"instance-id");function d(e){return a.default.createHmac("sha256","failproofai-telemetry-v1").update(e).digest("hex")}function c(e){let t;try{if(t=(0,s.telemetryIdFile)(),i.default.readFileSync(t,"utf-8").trim()===e)return}catch{try{t=(0,s.telemetryIdFile)()}catch{return}}try{i.default.mkdirSync(r.default.dirname(t),{recursive:!0});let n=`${t}.${process.pid}.tmp`;i.default.writeFileSync(n,e,{encoding:"utf-8",mode:384}),i.default.renameSync(n,t)}catch{}}e.s(["getInstanceId",0,function(){if(t)return t;let e=function(){try{for(let e of(n.default.platform(),["/etc/machine-id","/var/lib/dbus/machine-id"]))try{let t=i.default.readFileSync(e,"utf-8").trim();if(t)return t}catch{}}catch{}}();if(e)return c(t=d(e)),t;let r=[n.default.hostname(),n.default.homedir(),n.default.platform(),n.default.arch(),n.default.cpus()[0]?.model??""].join(":");return r?c(t=d(r)):c(t=function(){try{let e=i.default.readFileSync(l,"utf-8").trim();if(e)return e}catch{}let e=a.default.randomUUID();try{i.default.mkdirSync(o,{recursive:!0}),i.default.writeFileSync(l,e,"utf-8")}catch{}return e}()),t}])},24214,(e,t,i)=>{t.exports={name:"failproofai",version:"1.0.8-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.0","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.8-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.8-beta.0"},failproofaidBinaries:{"linux-x64":"35b641f60e1724513fbb760db382123dad2b5fcdd67dda6373bda80651bd36bb","linux-arm64":"a058288f5d08f99612f053793e5c7f59264d3da97f3dbe769e401b0f8536702d","darwin-x64":"b4f3dbe4aea44e77cc10839647c0dc03a1b8b797dfb27e1d89a6a96554ef27b8","darwin-arm64":"fd42f28bf92001d39117b488a215578b966f07d316214744aca64a1888f2aed2"}}},28067,e=>{"use strict";e.s(["POSTHOG_API_KEY",0,"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX","POSTHOG_PRODUCT",0,"failproofai-oss"])}];
1
+ module.exports=[17694,e=>{"use strict";var t=e.i(2157);e.i(50227);var i=e.i(79857);let r={mode:"oss",daemon:{configured:!1},collector:{sessions:!1,hooks:!0,hooksVerbosity:"decisions",redact:"minimal",environment:"local"},telemetry:{enabled:!0},audit:{auto:!1,intervalDays:7}};e.s(["isTelemetryEnabled",0,function(){if("1"===process.env.FAILPROOFAI_TELEMETRY_DISABLED)return!1;try{return function(){try{var e;let r,n,a,s,o;return e=JSON.parse((0,t.readFileSync)((0,i.configFile)(),"utf8")),r=e.mode?.kind,n=e.daemon??{},a=e.collector??{},s=e.telemetry??{},o=e.audit??{},{mode:"cloud"===r?"cloud":"oss",daemon:{configured:!0===n.configured},collector:{sessions:!0===a.sessions,hooks:!1!==a.hooks,hooksVerbosity:"all"===a.hooks_verbosity||"off"===a.hooks_verbosity?a.hooks_verbosity:"decisions",redact:"off"===a.redact?"off":"minimal",environment:"string"==typeof a.environment?a.environment:"local",machineId:"string"==typeof a.machine_id?a.machine_id:void 0,sources:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t={};for(let[i,r]of Object.entries(e)){if(!r||"object"!=typeof r||Array.isArray(r))continue;let e=r.extra_paths;if(!Array.isArray(e))continue;let n=e.filter(e=>"string"==typeof e&&""!==e.trim());n.length>0&&(t[i]={extraPaths:n})}return Object.keys(t).length>0?t:void 0}(a.sources)},telemetry:{enabled:!1!==s.enabled},audit:{auto:!0===o.auto,intervalDays:function(e){if("number"!=typeof e||!Number.isFinite(e))return 7;let t=Math.floor(e);return t<1?7:Math.min(t,90)}(o.interval_days),reportsConsentedAt:"number"==typeof o.reports_consented_at&&Number.isFinite(o.reports_consented_at)?o.reports_consented_at:void 0}}}catch{return structuredClone(r)}}().telemetry.enabled}catch{return!0}}],17694)},10659,e=>{"use strict";let t;var i=e.i(2157),r=e.i(50227),n=e.i(60526),a=e.i(66680);e.i(74533);var s=e.i(79857);let o=r.default.join(n.default.homedir(),".failproofai"),l=r.default.join(o,"instance-id");function c(e){return a.default.createHmac("sha256","failproofai-telemetry-v1").update(e).digest("hex")}function d(e){let t;try{if(t=(0,s.telemetryIdFile)(),i.default.readFileSync(t,"utf-8").trim()===e)return}catch{try{t=(0,s.telemetryIdFile)()}catch{return}}try{i.default.mkdirSync(r.default.dirname(t),{recursive:!0});let n=`${t}.${process.pid}.tmp`;i.default.writeFileSync(n,e,{encoding:"utf-8",mode:384}),i.default.renameSync(n,t)}catch{}}e.s(["getInstanceId",0,function(){if(t)return t;let e=function(){try{for(let e of(n.default.platform(),["/etc/machine-id","/var/lib/dbus/machine-id"]))try{let t=i.default.readFileSync(e,"utf-8").trim();if(t)return t}catch{}}catch{}}();if(e)return d(t=c(e)),t;let r=[n.default.hostname(),n.default.homedir(),n.default.platform(),n.default.arch(),n.default.cpus()[0]?.model??""].join(":");return r?d(t=c(r)):d(t=function(){try{let e=i.default.readFileSync(l,"utf-8").trim();if(e)return e}catch{}let e=a.default.randomUUID();try{i.default.mkdirSync(o,{recursive:!0}),i.default.writeFileSync(l,e,"utf-8")}catch{}return e}()),t}])},24214,(e,t,i)=>{t.exports={name:"failproofai",version:"1.0.9-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.1","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.9-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.9-beta.0"},failproofaidBinaries:{"linux-x64":"044b6619007227b8aa1fc1095b8c61a17bd90e11da53183ac1f5adecdcae6839","linux-arm64":"479450d7d15c52a59bd1a8cf4c7086be9210e8d31ad4f98d99b123f571e944bd","darwin-x64":"11562912ff726195bfb966ed24a774ffea38d01acc3edc1f9bfa3ea9c298977f","darwin-arm64":"5bbaee1ec89d2d8032b7f16e502fb96891fbc6aa2ee6c861f43a64a0a60e61ba"}}},28067,e=>{"use strict";e.s(["POSTHOG_API_KEY",0,"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX","POSTHOG_PRODUCT",0,"failproofai-oss"])}];
2
2
 
3
3
  //# sourceMappingURL=_0trp3yc._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[97610,e=>{"use strict";var t=e.i(89171),i=e.i(71809),n=e.i(73634),s=e.i(73136),o=e.i(52306),r=e.i(38791),a=e.i(38441),c=e.i(12714),l=e.i(2157),d=e.i(50227),u=e.i(81580);let p=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;var f=e.i(54214);function m(e,t){let i=[];for(let s of e)if("assistant"===s.type)for(let e of s.message.content){var n;let o;if("tool_use"!==e.type)continue;let r=e.name,c=(n=t.cli,(r?"copilot"===n?a.COPILOT_TOOL_MAP[r]??r:"cursor"===n?a.CURSOR_TOOL_MAP[r]??r:"codex"===n?a.CODEX_TOOL_MAP[r]??r:"opencode"===n?a.OPENCODE_TOOL_MAP[r]??r:"pi"===n?a.PI_TOOL_MAP[r]??r:"hermes"===n?a.HERMES_TOOL_MAP[r]??r:"openclaw"===n?a.OPENCLAW_TOOL_MAP[r]??r:"factory"===n?a.FACTORY_TOOL_MAP[r]??r:"devin"===n?a.DEVIN_TOOL_MAP[r]??r:"antigravity"===n?a.ANTIGRAVITY_TOOL_MAP[r]??r:"goose"===n?a.GOOSE_TOOL_MAP[r]??r:r:r)??r),l=function(e,t,i){let n;if(!e||!t||"object"!=typeof t||Array.isArray(t)||("copilot"===i?n=a.COPILOT_TOOL_INPUT_MAP[e]:"opencode"===i?n=a.OPENCODE_TOOL_INPUT_MAP[e]:"pi"===i?n=a.PI_TOOL_INPUT_MAP[e]:"hermes"===i?n=a.HERMES_TOOL_INPUT_MAP[e]:"openclaw"===i?n=a.OPENCLAW_TOOL_INPUT_MAP[e]:"antigravity"===i?n=a.ANTIGRAVITY_TOOL_INPUT_MAP[e]:"goose"===i&&(n=a.GOOSE_TOOL_INPUT_MAP[e]),!n))return t;let s={};for(let[e,i]of Object.entries(t))s[n[e]??e]=i;return s}(c,e.input,t.cli);e.result?.content&&(o=function(e){let t=Buffer.from(e,"utf-8");if(t.byteLength<=65536)return e;let i=65536;for(;i>0&&(192&t[i])==128;)i--;return t.subarray(0,i).toString("utf-8")}(e.result.content)),i.push({cli:t.cli,sessionId:t.sessionId,transcriptPath:t.transcriptPath,cwd:t.cwd,timestamp:s.timestamp,toolName:c,rawToolName:r,toolInput:l??{},toolResultText:o})}return i}async function y(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of function(){let e,t=(0,u.getClaudeProjectsPath)();try{e=(0,l.readdirSync)(t,{withFileTypes:!0})}catch{return[]}return e.filter(e=>e.isDirectory()).map(e=>({name:e.name,cwd:(0,u.decodeFolderName)(e.name),path:(0,d.join)(t,e.name)}))}()){let s;if(!t||t.has(e.cwd)){try{s=function(e){let t,i=[];try{t=(0,l.readdirSync)(e.path,{withFileTypes:!0})}catch{return i}for(let n of t)if(n.isFile()&&n.name.endsWith(".jsonl")){let t=n.name.slice(0,-6);if(!p.test(t))continue;let s=(0,d.join)(e.path,n.name);try{let n=(0,l.statSync)(s);i.push({projectName:e.name,cwd:e.cwd,sessionId:t,transcriptPath:s,mtimeMs:n.mtimeMs,sizeBytes:n.size,isSubagent:!1})}catch{}}else if(n.isDirectory()&&p.test(n.name)){let t,s=(0,d.join)(e.path,n.name,"subagents");if(!(0,l.existsSync)(s))continue;try{t=(0,l.readdirSync)(s,{withFileTypes:!0})}catch{continue}for(let n of t){if(!n.isFile()||!n.name.endsWith(".jsonl"))continue;let t=n.name.slice(0,-6),o=(0,d.join)(s,n.name);try{let n=(0,l.statSync)(o);i.push({projectName:e.name,cwd:e.cwd,sessionId:t,transcriptPath:o,mtimeMs:n.mtimeMs,sizeBytes:n.size,isSubagent:!0})}catch{}}}return i}(e)}catch{continue}for(let t of s)t.mtimeMs<i||n.push({cli:"claude",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.transcriptPath,mtimeMs:t.mtimeMs,sizeBytes:t.sizeBytes})}}return n}async function h(e){let t,i;try{t=await (0,c.readFile)(e.transcriptPath,"utf-8")}catch{return[]}try{i=await (0,f.parseLogContent)(t,"session")}catch{return[]}let n="";for(let e of t.split("\n",50))if(e.trim())try{let t=JSON.parse(e);if("string"==typeof t.cwd&&t.cwd.length>0){n=t.cwd;break}}catch{}return m(i,{cli:"claude",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:n})}async function g(e,t){let i,n;if(!Number.isFinite(t)||t<0)return null;let s=null;try{s=await (0,c.open)(e.transcriptPath,"r");let{size:n}=await s.stat();if(t>n)return null;if(t===n)return{events:[],bytesConsumed:t};let o=Buffer.alloc(n-t);await s.read(o,0,o.length,t),i=o.toString("utf-8")}catch{return null}finally{if(s)try{await s.close()}catch{}}let o=i.lastIndexOf("\n"),r=-1===o?"":i.slice(0,o+1),a=i.slice(o+1),l=a.trim().length>0&&(()=>{try{return JSON.parse(a),!0}catch{return!1}})()?r+a:r;if(0===l.length)return{events:[],bytesConsumed:t};let d=t+Buffer.byteLength(l,"utf-8");try{n=await (0,f.parseLogContent)(l,"session")}catch{return null}let u="";for(let e of l.split("\n",50))if(e.trim())try{let t=JSON.parse(e);if("string"==typeof t.cwd&&t.cwd.length>0){u=t.cwd;break}}catch{}return{events:m(n,{cli:"claude",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:u}),bytesConsumed:d,cwd:u||void 0}}var N=e.i(36203),w=e.i(57232);async function S(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,N.getCodexProjects)())){let{cwd:s,sessions:o}=await (0,N.getCodexSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"codex",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function v(e){let t=await (0,w.getCodexSessionLog)(e.sessionId);return t?m(t.entries,{cli:"codex",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var O=e.i(55851),I=e.i(78166);async function T(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,O.getCopilotProjects)())){let{cwd:s,sessions:o}=await (0,O.getCopilotSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"copilot",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function b(e){let t=await (0,I.getCopilotSessionLog)(e.sessionId);return t?m(t.entries,{cli:"copilot",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var x=e.i(46413),P=e.i(72094);async function j(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,x.getCursorProjects)())){let{cwd:s,sessions:o}=await (0,x.getCursorSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"cursor",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function C(e){let t=await (0,P.getCursorSessionLog)(e.sessionId);return t?m(t.entries,{cli:"cursor",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var E=e.i(35435),R=e.i(99440);async function A(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,E.getOpenCodeProjects)())){let{cwd:s,sessions:o}=await (0,E.getOpenCodeSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();!(s<i)&&t.sessionId&&n.push({cli:"opencode",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:0})}}return n}async function k(e){let t=await (0,R.getOpenCodeSessionLog)(e.sessionId);return t?m(t.entries,{cli:"opencode",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var M=e.i(19791),_=e.i(85116);async function $(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,M.getPiProjects)())){let{cwd:s,sessions:o}=await (0,M.getPiSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"pi",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function B(e){let t=await (0,_.getPiSessionLog)(e.sessionId);return t?m(t.entries,{cli:"pi",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var D=e.i(64828),U=e.i(28898),L=e.i(3605);async function J(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=await (0,D.getHermesSessions)(),s=[];for(let e of n)!(e.mtimeMs<i)&&(!(e.messageCount<=0)||e.hasMessages)&&(!t||e.cwd&&t.has(e.cwd))&&s.push({cli:"hermes",projectName:e.cwd?(0,u.encodeFolderName)(e.cwd):e.source?(0,U.hermesProjectPath)(e.profile,e.source):`hermes:${e.profile}`,sessionId:e.sessionId,transcriptPath:`hermes://${e.sessionId}`,mtimeMs:e.mtimeMs,sizeBytes:e.messageCount});return s}async function q(e){let t=await (0,L.getHermesSessionLog)(e.sessionId);return t?m(t.entries,{cli:"hermes",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var W=e.i(90624),z=e.i(64199);async function F(e={}){if(e.projects&&e.projects.length>0)return[];let t=e.sinceMs??0,i=[];for(let e of(await (0,W.getOpenClawSessions)()))e.mtimeMs<t||i.push({cli:"openclaw",projectName:(0,W.openClawProjectPath)(e.agentId,e.channel),sessionId:e.sessionId,transcriptPath:e.transcriptPath,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes});return i}async function Y(e){let t=await (0,z.getOpenClawSessionLog)(e.sessionId);return t?m(t.entries,{cli:"openclaw",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var H=e.i(28246);async function Q(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(0,H.listFactoryTranscripts)())!(e.mtimeMs<i)&&(!t||t.has(e.cwd))&&n.push({cli:"factory",projectName:e.projectName,sessionId:e.sessionId,transcriptPath:e.transcriptPath,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes});return n}async function V(e){let t;try{t=await (0,c.readFile)(e.transcriptPath,"utf-8")}catch{return[]}let i=(0,f.parseRawLines)(t,"session"),n=(0,H.factoryLinesToLogEntries)(i,"session"),s="";for(let e of i)if(e&&"object"==typeof e&&"session_start"===e.type){let t=e.cwd;if("string"==typeof t&&t.length>0){s=t;break}}return m(n,{cli:"factory",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:s})}var G=e.i(93114),K=e.i(30441);async function X(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[],s=await (0,K.getAntigravityIndex)();for(let e of(0,G.listAntigravityTranscripts)()){if(e.mtimeMs<i)continue;let o=s.get(e.conversationId)?.cwd;(!t||o&&t.has(o))&&n.push({cli:"antigravity",projectName:o?(0,u.encodeFolderName)(o):"antigravity",sessionId:e.conversationId,transcriptPath:e.transcriptPath,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes})}return n}async function Z(e){let t;try{t=await (0,c.readFile)(e.transcriptPath,"utf-8")}catch{return[]}let i=(0,f.parseRawLines)(t,"session"),n=(0,G.antigravityLinesToLogEntries)(i,"session"),s="";for(let e of i){if(!e||"object"!=typeof e)continue;let t=e.tool_calls;if(Array.isArray(t)){for(let e of t){let t=e&&"object"==typeof e?e.args:void 0,i=t&&"object"==typeof t?t.Cwd:void 0;if("string"==typeof i&&i.length>0){s=i;break}}if(s)break}}return m(n,{cli:"antigravity",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:s})}var ee=e.i(79364),et=e.i(40375);async function ei(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=await (0,ee.getDevinSessions)(),s=[];for(let e of n)!(e.mtimeMs<i)&&(!t||e.cwd&&t.has(e.cwd))&&s.push({cli:"devin",projectName:e.projectName,sessionId:e.sessionId,transcriptPath:`devin-db://${e.sessionId}`,mtimeMs:e.mtimeMs,sizeBytes:0});return s}async function en(e){let t=await (0,et.getDevinSessionLog)(e.sessionId);return t?m(t.entries,{cli:"devin",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var es=e.i(69164),eo=e.i(36618);let er={claude:{cli:"claude",listTranscripts:y,streamEvents:h,streamEventsFrom:g},codex:{cli:"codex",listTranscripts:S,streamEvents:v},copilot:{cli:"copilot",listTranscripts:T,streamEvents:b},cursor:{cli:"cursor",listTranscripts:j,streamEvents:C},opencode:{cli:"opencode",listTranscripts:A,streamEvents:k},pi:{cli:"pi",listTranscripts:$,streamEvents:B},hermes:{cli:"hermes",listTranscripts:J,streamEvents:q},openclaw:{cli:"openclaw",listTranscripts:F,streamEvents:Y},factory:{cli:"factory",listTranscripts:Q,streamEvents:V},devin:{cli:"devin",listTranscripts:ei,streamEvents:en},antigravity:{cli:"antigravity",listTranscripts:X,streamEvents:Z},goose:{cli:"goose",listTranscripts:async function(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=await (0,es.getGooseSessions)(),s=[];for(let e of n)!(e.mtimeMs<i)&&(!t||e.cwd&&t.has(e.cwd))&&s.push({cli:"goose",projectName:e.projectName,sessionId:e.sessionId,transcriptPath:`goose-db://${e.sessionId}`,mtimeMs:e.mtimeMs,sizeBytes:0});return s},streamEvents:async function(e){let t=await (0,eo.getGooseSessionLog)(e.sessionId);return t?m(t.entries,{cli:"goose",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}}},ea=/\.(?:ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|swift|rb|php|c|h|cc|cpp|hpp|cs|scala|sh|bash|zsh|json|yaml|yml|toml|md|txt|sql|html|css|scss|sass)$/i,ec=["/","/home","/usr","/etc","/var","/opt","/Users"],el="rereadAfterEdit",ed=[{name:"redundant-cd-cwd",description:"Bash commands prefixed with `cd <cwd> && …` even though commands already run in cwd.",category:"Wasteful",severity:"info",displayTitle:"Prepended cd <cwd> before commands",impact:"Pure waste — your agent's shell already runs in `cwd`.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t||!e.cwd)return null;let i=t.trimStart(),n=/^cd\s+(?:"([^"]+)"|'([^']+)'|(\S+))\s*&&\s*([\s\S]+)$/.exec(i);if(!n)return null;let s=(n[1]??n[2]??n[3]??"").replace(/\/+$/,"");if(s!==e.cwd.replace(/\/+$/,""))return null;let o=n[4].trim();return{example:`cd ${s} && ${o}`}}},{name:"prefer-edit-over-read-cat",description:"Bash `cat`/`head`/`tail`/`less`/`more` on a single source file — use Read.",category:"Wasteful",severity:"info",displayTitle:"Used `cat`/`head`/`tail` on a source file",impact:"Burns tokens; the Read tool returns content directly without going through Bash output.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;let i=t.trim();if(/[|<>;&`$()]/.test(i))return null;let n=/^(cat|head|tail|less|more)\s+(?:-\S+\s+)*(?:"([^"]+)"|'([^']+)'|(\S+))\s*$/.exec(i);if(!n)return null;let s=n[2]??n[3]??n[4]??"";return!s||/(?:^|\/)\.env(?:\..+)?$/.test(s)||!ea.test(s)?null:{example:i}}},{name:"prefer-edit-over-sed-awk",description:"Bash `sed -i`/`awk` in-place edits — use Edit.",category:"Wasteful",severity:"info",displayTitle:"Used sed -i or awk for an in-place edit",impact:"Edit tool is safer and produces a diff the agent can verify.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;let i=t.trim();return/(?:^|\s|;|&&|\|\|)sed\b[^|]*\s-i(?=\b|['"])/.test(i)||/(?:^|\s|;|&&|\|\|)awk\b[^|]*\s>\s*\S+/.test(i)&&!/\|/.test(i)?{example:i}:null}},{name:"prefer-write-over-heredoc",description:"Bash heredoc / `echo > file` writing multi-line content — use Write.",category:"Wasteful",severity:"info",displayTitle:"Used heredoc / `echo > file` to write a multi-line file",impact:"Write tool handles escaping and is verifiable.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;return"string"!=typeof t?null:/<<-?\s*['"]?[A-Za-z_][A-Za-z0-9_]*['"]?\s*>\s*\S/.test(t)||/(?:^|\s|;|&&|\|\|)(?:echo|printf)\s+["'][^"']*\n[^"']*["']\s*>\s*\S/.test(t)?{example:t.replace(/\s+/g," ").trim().slice(0,160)}:null}},{name:"sleep-polling-loop",description:"Bash long `sleep` or while-sleep polling loops.",category:"Wasteful",severity:"info",displayTitle:"Used a long sleep or while-sleep polling loop",impact:"Burns wall-clock; better to wait for an explicit signal.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;if(/\bwhile\b[\s\S]*?\bsleep\b[\s\S]*?\bdone\b/.test(t))return{example:t.replace(/\s+/g," ").trim().slice(0,160)};let i=/\bsleep\s+(\d+(?:\.\d+)?)(m|h|d)?\b/.exec(t);if(i){let e=parseFloat(i[1]),n=i[2]??"s";if(("m"===n?60*e:"h"===n?3600*e:"d"===n?86400*e:e)>=30)return{example:t.replace(/\s+/g," ").trim().slice(0,160)}}return null}},{name:"find-from-root",description:"Bash `find` against `/`, `/home`, `/usr`, etc. — scope to cwd instead.",category:"Risky",severity:"warn",displayTitle:"Ran find from /, /home, /usr, etc.",impact:"Filesystem-wide finds exhaust resources and rarely return useful results.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;let i=t.trim(),n=/(?:^|[\s;|&])find\s+(?:-\S+\s+)*("[^"]+"|'[^']+'|\S+)/.exec(i);if(!n)return null;let s=n[1].replace(/^["']|["']$/g,"").replace(/\/+$/,"")||"/";return ec.includes(s)?{example:i.slice(0,160)}:null}},{name:"git-commit-no-verify",description:"git commit invoked with --no-verify / -n, skipping hooks.",category:"Risky",severity:"warn",displayTitle:"Committed with --no-verify",impact:"Skips pre-commit hooks that exist to catch broken or unsafe code.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;return"string"!=typeof t?null:/\bgit\s+commit\b/.test(t)&&(/\s--no-verify\b/.test(t)||/\s-n\b/.test(t))?{example:t.replace(/\s+/g," ").trim().slice(0,160)}:null}},{name:"reread-after-edit",description:"Read of a file that was just Edit'd or Write'n in the same session.",category:"Wasteful",severity:"info",displayTitle:"Re-read a file it just edited",impact:"Edit/Write already returned the updated content; the second Read is wasted tokens.",detect(e,t){let i,n=((i=t[el])||(i={countdown:new Map},t[el]=i),i),s=e.toolInput.file_path,o="string"==typeof s?s:null;for(let[e,t]of n.countdown)t<=1?n.countdown.delete(e):n.countdown.set(e,t-1);return o?"Edit"===e.toolName||"Write"===e.toolName?(n.countdown.set(o,5),null):"Read"===e.toolName&&n.countdown.has(o)?(n.countdown.delete(o),{example:`Read ${o} immediately after Edit/Write`}):null:null}}],eu=["cowboy","explorer","ghost","optimist","hammer","architect"],ep={explorer:.38,architect:.33,hammer:.11,cowboy:.11,optimist:.07,ghost:.01,precision:0,goldfish:0},ef={optimist:0,cowboy:0,explorer:0,goldfish:0,architect:0,precision:0,hammer:0,ghost:0};for(let e of eu)ef[e]=Math.max(ep[e],.05);var em=e.i(66680),ey=e.i(79857);let eh=null,eg=null;function eN(){if(eh)return eh;let e=n.BUILTIN_POLICIES.map(e=>`${e.name}|${e.fn.toString()}`).sort().join("\n");return eh=(0,em.createHash)("sha1").update(e).digest("hex").slice(0,16)}function ew(){if(eg)return eg;let e=ed.map(e=>`${e.name}|${e.detect.toString()}`).sort().join("\n");return eg=(0,em.createHash)("sha1").update(e).digest("hex").slice(0,16)}function eS(e){let t=(0,ey.auditCacheDir)(),i=(0,em.createHash)("sha1").update(e).digest("hex");return(0,d.join)(t,`${i}.json`)}function ev(e,t){if(t<=0)return null;let i=null;try{i=(0,l.openSync)(e,"r");let n=Buffer.alloc(Math.min(4096,t));(0,l.readSync)(i,n,0,n.length,0);let s=Math.min(4096,t),o=Buffer.alloc(s);return(0,l.readSync)(i,o,0,s,t-s),(0,em.createHash)("sha1").update(String(t)).update(n).update(o).digest("hex").slice(0,32)}catch{return null}finally{if(null!==i)try{(0,l.closeSync)(i)}catch{}}}var eO=e.i(71194);let eI="request-cut",eT=/^[A-Za-z0-9._:/@~+-]{1,200}$/;function eb(e){let t=e.find(e=>"deny"===e.decision);if(t)return{decision:"deny",entries:[{policyName:t.policyName,reason:t.reason??""}]};let i=e.filter(e=>"instruct"===e.decision);return i.length>0?{decision:"instruct",entries:i.map(e=>({policyName:e.policyName,reason:e.reason??""}))}:{decision:"allow",entries:e.filter(e=>"allow"===e.decision&&e.reason).map(e=>({policyName:e.policyName,reason:e.reason}))}}let ex={allow:0,instruct:1,deny:2};var eP=e.i(97348),ej=e.i(49335),eC=e.i(10659);function eE(e,t){let i=e.trim(),n="string"==typeof t?t.trim():"";return n?i?`${i}. ${n}`:n:i}function eR(e,t){if(!e?.policyParams)return;let i=e.policyParams[t];if(i)return i;let n=function(e){if(!e.startsWith("pack/"))return null;let t=e.slice(5),i=t.lastIndexOf("/");if(i<=0)return null;let n=t.slice(0,i),s=n.lastIndexOf("@");return{packId:s>0?n.slice(0,s):n,name:t.slice(i+1)}}(t);if(n)return function(e,t,i){if(!e)return;let n=e[`pack/${t}/${i}`];return n||(t.toLowerCase()===eO.CORE_SOURCE.toLowerCase()?e[i]:void 0)}(e.policyParams,n.packId,n.name);let s=`${r.DEFAULT_POLICY_NAMESPACE}/`;if(t.startsWith(s))return e.policyParams[t.slice(s.length)]}let eA={authority:"hard",reviewedBy:[]};async function ek(e,t,i,n,s){let o,a,c=t.tool_name,l=(0,r.getPoliciesForEvent)(e,c);if((0,eP.hookLogInfo)(`evaluating ${l.length} policies for ${e}`),!s){if(0===l.length)return{exitCode:0,stdout:"",stderr:"",policyName:null,reason:null,decision:"allow"};let{verdicts:s}=await eM(e,t,i,n,l);return e_(e,i,c,eb(s))}try{o=await eM(e,t,i,n,l,s)}catch(e){throw s.abort(),e}o.hardDenied?(s.abort(),a={kind:"not-consulted"}):(s.releaseRegistry?.(),a=await s.review);let d=function(e,t,i){let n=eb(e);if("not-consulted"===t.kind)return{final:n,cleared:[],decidedByJev:!1,activity:{evaluator:"jev",jevMode:i}};if("fallback"===t.kind)return{final:n,cleared:[],decidedByJev:!1,activity:{evaluator:"jev-fallback",jevFallbackReason:t.reason,...null!==t.latencyMs?{jevLatencyMs:t.latencyMs}:{},...t.model?{jevModel:t.model}:{},jevMode:i}};let s=t.injectionAsked&&!t.injected&&!t.requestCut,o=new Set(t.asked),r=new Set(t.notDenied),a=s&&!t.unclearableWarned?e.filter(e=>"allow"!==e.decision&&"reviewable"===e.authority&&0!==e.reviewedBy.length&&e.reviewedBy.every(e=>o.has(e)&&r.has(e))).map(e=>e.policyName):[],c={policyName:t.policyName,reason:t.reason??`Flagged by semantic review (${t.policyName})`},l=function(e,t,i,n){let s=new Set(t),o=e.filter(e=>!s.has(e.policyName)),r=o.find(e=>"deny"===e.decision);if(r)return{final:{decision:"deny",entries:[{policyName:r.policyName,reason:r.reason??""}]},decidedByJev:!1};if("deny"===i)return{final:{decision:"deny",entries:[n]},decidedByJev:!0};let a=o.filter(e=>"instruct"===e.decision).map(e=>({policyName:e.policyName,reason:e.reason??""}));return("instruct"===i&&a.push(n),a.length>0)?{final:{decision:"instruct",entries:a},decidedByJev:a[0]===n}:{final:eb(o),decidedByJev:!1}}(e,a,t.decision,c),d={evaluator:t.requestCut?"jev-fallback":"jev",...t.requestCut?{jevFallbackReason:eI}:{},jevDecision:t.decision,...a.length>0&&ex[l.final.decision]<ex[n.decision]?{jevCleared:a}:{},...null!==t.latencyMs?{jevLatencyMs:t.latencyMs}:{},...t.model?{jevModel:t.model}:{},jevMode:i};if("shadow"===i){let e="deny"===t.decision||"instruct"===t.decision?{policyName:c.policyName,decision:t.decision,reason:c.reason,version:t.model&&eT.test(t.model)?t.model:"jev"}:void 0;return{final:n,cleared:a,decidedByJev:!1,activity:d,...e?{shadowVerdict:e}:{}}}return{...l,cleared:a,activity:d}}(o.verdicts,a,s.mode);return d.cleared.length>0&&(0,eP.hookLogInfo)(`jev ${"shadow"===s.mode?"would clear":"cleared"}: ${d.cleared.join(", ")}`),"jev-fallback"===d.activity.evaluator&&(0,eP.hookLogInfo)(d.activity.jevFallbackReason===eI?"jev could not be shown the whole call; it cleared nothing, and the call was not allowed on a partial read":`jev unavailable (${d.activity.jevFallbackReason}); the regex result decided this call`),{...e_(e,i,c,d.final,d.decidedByJev),twoTier:{activity:d.activity,decidedByJev:d.decidedByJev,...d.decidedByJev&&"answered"===a.kind&&a.origin?{jevOrigin:a.origin}:{},...d.shadowVerdict?{shadowVerdict:d.shadowVerdict}:{}}}}async function eM(e,t,i,n,s,o){let a=t.tool_name,c=t.tool_input,l={eventType:e,payload:t,toolName:a,toolInput:c,session:i,cli:i?.cli},d=[];for(let t of s){let s,a,c=t.params,u=eR(n,t.name)??{};if(c){let e={};for(let[t,i]of Object.entries(c))e[t]=t in u?u[t]:i.default;s={...l,params:e}}else s={...l,params:u};try{a=await t.fn(s)}catch(s){let n=s instanceof Error?s.message:String(s);(0,eP.hookLogWarn)(`policy "${t.name}" threw: ${n}`),t.name.startsWith(`${r.DEFAULT_POLICY_NAMESPACE}/`)&&(0,ej.trackHookEvent)((0,eC.getInstanceId)(),"policy_evaluation_error",{policy_name:t.name,event_type:e,cli:i?.cli??null,error_type:s instanceof Error?s.name:"unknown"});continue}if("deny"===a.decision){let e=eE(a.reason??`Blocked by policy: ${t.name}`,eR(n,t.name)?.hint);(0,eP.hookLogInfo)(`deny by "${t.name}": ${e}`);let{authority:i,reviewedBy:s}=o?o.authorityOf(t):eA;if(d.push({policyName:t.name,decision:"deny",reason:e,authority:i,reviewedBy:s}),"hard"===i)return{verdicts:d,hardDenied:!0};continue}if("instruct"===a.decision){let e=eE(a.reason??`Instruction from policy: ${t.name}`,eR(n,t.name)?.hint),{authority:i,reviewedBy:s}=o?o.authorityOf(t):eA;d.push({policyName:t.name,decision:"instruct",reason:e,authority:i,reviewedBy:s}),(0,eP.hookLogInfo)(`instruct by "${t.name}": ${e}`)}"allow"===a.decision&&a.reason&&d.push({policyName:t.name,decision:"allow",reason:a.reason,...eA})}return{verdicts:d,hardDenied:!1}}function e_(e,t,i,n,s=!1){if("deny"===n.decision){let[o]=n.entries;return function(e,t,i,n,s,o=!1){let r;r=i||("UserPromptSubmit"===e?"prompt":"SessionStart"===e?"session start":"SessionEnd"===e?"session end":"Stop"===e?"stop":"operation");let a=o?`Blocked ${r} by failproofai because: ${s.replace(/[.\s]+$/,"")}, as flagged by Jev semantic review`:`Blocked ${r} by failproofai because: ${s}, as per the policy configured by the user`;if(t?.cli==="cursor")return"Stop"===e||"SubagentStop"===e?{exitCode:0,stdout:JSON.stringify({followup_message:`MANDATORY ACTION REQUIRED from failproofai (policy: ${n}): ${s}
1
+ module.exports=[97610,e=>{"use strict";var t=e.i(89171),i=e.i(71809),n=e.i(73634),s=e.i(73136),o=e.i(52306),r=e.i(38791),a=e.i(38441),c=e.i(12714),l=e.i(2157),d=e.i(50227),u=e.i(81580);let p=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;var f=e.i(54214);function m(e,t){let i=[];for(let s of e)if("assistant"===s.type)for(let e of s.message.content){var n;let o;if("tool_use"!==e.type)continue;let r=e.name,c=(n=t.cli,(r?"copilot"===n?a.COPILOT_TOOL_MAP[r]??r:"cursor"===n?a.CURSOR_TOOL_MAP[r]??r:"codex"===n?a.CODEX_TOOL_MAP[r]??r:"opencode"===n?a.OPENCODE_TOOL_MAP[r]??r:"pi"===n?a.PI_TOOL_MAP[r]??r:"hermes"===n?a.HERMES_TOOL_MAP[r]??r:"openclaw"===n?a.OPENCLAW_TOOL_MAP[r]??r:"factory"===n?a.FACTORY_TOOL_MAP[r]??r:"devin"===n?a.DEVIN_TOOL_MAP[r]??r:"antigravity"===n?a.ANTIGRAVITY_TOOL_MAP[r]??r:"goose"===n?a.GOOSE_TOOL_MAP[r]??r:r:r)??r),l=function(e,t,i){let n;if(!e||!t||"object"!=typeof t||Array.isArray(t)||("copilot"===i?n=a.COPILOT_TOOL_INPUT_MAP[e]:"opencode"===i?n=a.OPENCODE_TOOL_INPUT_MAP[e]:"pi"===i?n=a.PI_TOOL_INPUT_MAP[e]:"hermes"===i?n=a.HERMES_TOOL_INPUT_MAP[e]:"openclaw"===i?n=a.OPENCLAW_TOOL_INPUT_MAP[e]:"antigravity"===i?n=a.ANTIGRAVITY_TOOL_INPUT_MAP[e]:"goose"===i&&(n=a.GOOSE_TOOL_INPUT_MAP[e]),!n))return t;let s={};for(let[e,i]of Object.entries(t))s[n[e]??e]=i;return s}(c,e.input,t.cli);e.result?.content&&(o=function(e){let t=Buffer.from(e,"utf-8");if(t.byteLength<=65536)return e;let i=65536;for(;i>0&&(192&t[i])==128;)i--;return t.subarray(0,i).toString("utf-8")}(e.result.content)),i.push({cli:t.cli,sessionId:t.sessionId,transcriptPath:t.transcriptPath,cwd:t.cwd,timestamp:s.timestamp,toolName:c,rawToolName:r,toolInput:l??{},toolResultText:o})}return i}async function y(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of function(){let e,t=(0,u.getClaudeProjectsPath)();try{e=(0,l.readdirSync)(t,{withFileTypes:!0})}catch{return[]}return e.filter(e=>e.isDirectory()).map(e=>({name:e.name,cwd:(0,u.decodeFolderName)(e.name),path:(0,d.join)(t,e.name)}))}()){let s;if(!t||t.has(e.cwd)){try{s=function(e){let t,i=[];try{t=(0,l.readdirSync)(e.path,{withFileTypes:!0})}catch{return i}for(let n of t)if(n.isFile()&&n.name.endsWith(".jsonl")){let t=n.name.slice(0,-6);if(!p.test(t))continue;let s=(0,d.join)(e.path,n.name);try{let n=(0,l.statSync)(s);i.push({projectName:e.name,cwd:e.cwd,sessionId:t,transcriptPath:s,mtimeMs:n.mtimeMs,sizeBytes:n.size,isSubagent:!1})}catch{}}else if(n.isDirectory()&&p.test(n.name)){let t,s=(0,d.join)(e.path,n.name,"subagents");if(!(0,l.existsSync)(s))continue;try{t=(0,l.readdirSync)(s,{withFileTypes:!0})}catch{continue}for(let n of t){if(!n.isFile()||!n.name.endsWith(".jsonl"))continue;let t=n.name.slice(0,-6),o=(0,d.join)(s,n.name);try{let n=(0,l.statSync)(o);i.push({projectName:e.name,cwd:e.cwd,sessionId:t,transcriptPath:o,mtimeMs:n.mtimeMs,sizeBytes:n.size,isSubagent:!0})}catch{}}}return i}(e)}catch{continue}for(let t of s)t.mtimeMs<i||n.push({cli:"claude",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.transcriptPath,mtimeMs:t.mtimeMs,sizeBytes:t.sizeBytes})}}return n}async function h(e){let t,i;try{t=await (0,c.readFile)(e.transcriptPath,"utf-8")}catch{return[]}try{i=await (0,f.parseLogContent)(t,"session")}catch{return[]}let n="";for(let e of t.split("\n",50))if(e.trim())try{let t=JSON.parse(e);if("string"==typeof t.cwd&&t.cwd.length>0){n=t.cwd;break}}catch{}return m(i,{cli:"claude",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:n})}async function g(e,t){let i,n;if(!Number.isFinite(t)||t<0)return null;let s=null;try{s=await (0,c.open)(e.transcriptPath,"r");let{size:n}=await s.stat();if(t>n)return null;if(t===n)return{events:[],bytesConsumed:t};let o=Buffer.alloc(n-t);await s.read(o,0,o.length,t),i=o.toString("utf-8")}catch{return null}finally{if(s)try{await s.close()}catch{}}let o=i.lastIndexOf("\n"),r=-1===o?"":i.slice(0,o+1),a=i.slice(o+1),l=a.trim().length>0&&(()=>{try{return JSON.parse(a),!0}catch{return!1}})()?r+a:r;if(0===l.length)return{events:[],bytesConsumed:t};let d=t+Buffer.byteLength(l,"utf-8");try{n=await (0,f.parseLogContent)(l,"session")}catch{return null}let u="";for(let e of l.split("\n",50))if(e.trim())try{let t=JSON.parse(e);if("string"==typeof t.cwd&&t.cwd.length>0){u=t.cwd;break}}catch{}return{events:m(n,{cli:"claude",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:u}),bytesConsumed:d,cwd:u||void 0}}var N=e.i(36203),w=e.i(57232);async function S(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,N.getCodexProjects)())){let{cwd:s,sessions:o}=await (0,N.getCodexSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"codex",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function v(e){let t=await (0,w.getCodexSessionLog)(e.sessionId);return t?m(t.entries,{cli:"codex",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var O=e.i(55851),I=e.i(78166);async function b(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,O.getCopilotProjects)())){let{cwd:s,sessions:o}=await (0,O.getCopilotSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"copilot",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function T(e){let t=await (0,I.getCopilotSessionLog)(e.sessionId);return t?m(t.entries,{cli:"copilot",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var x=e.i(46413),P=e.i(72094);async function j(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,x.getCursorProjects)())){let{cwd:s,sessions:o}=await (0,x.getCursorSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"cursor",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function C(e){let t=await (0,P.getCursorSessionLog)(e.sessionId);return t?m(t.entries,{cli:"cursor",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var E=e.i(35435),R=e.i(99440);async function A(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,E.getOpenCodeProjects)())){let{cwd:s,sessions:o}=await (0,E.getOpenCodeSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();!(s<i)&&t.sessionId&&n.push({cli:"opencode",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:0})}}return n}async function k(e){let t=await (0,R.getOpenCodeSessionLog)(e.sessionId);return t?m(t.entries,{cli:"opencode",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var M=e.i(19791),_=e.i(85116);async function $(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(await (0,M.getPiProjects)())){let{cwd:s,sessions:o}=await (0,M.getPiSessionsByEncodedName)(e.name),r=s??"";if(!t||t.has(r))for(let t of o){let s=t.lastModified.getTime();if(s<i)continue;let o=0;try{o=(0,l.statSync)(t.path).size}catch{}t.sessionId&&n.push({cli:"pi",projectName:e.name,sessionId:t.sessionId,transcriptPath:t.path,mtimeMs:s,sizeBytes:o})}}return n}async function B(e){let t=await (0,_.getPiSessionLog)(e.sessionId);return t?m(t.entries,{cli:"pi",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var D=e.i(64828),U=e.i(28898),L=e.i(3605);async function J(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=await (0,D.getHermesSessions)(),s=[];for(let e of n)!(e.mtimeMs<i)&&(!(e.messageCount<=0)||e.hasMessages)&&(!t||e.cwd&&t.has(e.cwd))&&s.push({cli:"hermes",projectName:e.cwd?(0,u.encodeFolderName)(e.cwd):e.source?(0,U.hermesProjectPath)(e.profile,e.source):`hermes:${e.profile}`,sessionId:e.sessionId,transcriptPath:`hermes://${e.sessionId}`,mtimeMs:e.mtimeMs,sizeBytes:e.messageCount});return s}async function q(e){let t=await (0,L.getHermesSessionLog)(e.sessionId);return t?m(t.entries,{cli:"hermes",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var W=e.i(90624),z=e.i(64199);async function F(e={}){if(e.projects&&e.projects.length>0)return[];let t=e.sinceMs??0,i=[];for(let e of(await (0,W.getOpenClawSessions)()))e.mtimeMs<t||i.push({cli:"openclaw",projectName:(0,W.openClawProjectPath)(e.agentId,e.channel),sessionId:e.sessionId,transcriptPath:e.transcriptPath,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes});return i}async function Y(e){let t=await (0,z.getOpenClawSessionLog)(e.sessionId);return t?m(t.entries,{cli:"openclaw",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var H=e.i(28246);async function Q(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[];for(let e of(0,H.listFactoryTranscripts)())!(e.mtimeMs<i)&&(!t||t.has(e.cwd))&&n.push({cli:"factory",projectName:e.projectName,sessionId:e.sessionId,transcriptPath:e.transcriptPath,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes});return n}async function V(e){let t;try{t=await (0,c.readFile)(e.transcriptPath,"utf-8")}catch{return[]}let i=(0,f.parseRawLines)(t,"session"),n=(0,H.factoryLinesToLogEntries)(i,"session"),s="";for(let e of i)if(e&&"object"==typeof e&&"session_start"===e.type){let t=e.cwd;if("string"==typeof t&&t.length>0){s=t;break}}return m(n,{cli:"factory",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:s})}var G=e.i(93114),K=e.i(30441);async function X(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=[],s=await (0,K.getAntigravityIndex)();for(let e of(0,G.listAntigravityTranscripts)()){if(e.mtimeMs<i)continue;let o=s.get(e.conversationId)?.cwd;(!t||o&&t.has(o))&&n.push({cli:"antigravity",projectName:o?(0,u.encodeFolderName)(o):"antigravity",sessionId:e.conversationId,transcriptPath:e.transcriptPath,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes})}return n}async function Z(e){let t;try{t=await (0,c.readFile)(e.transcriptPath,"utf-8")}catch{return[]}let i=(0,f.parseRawLines)(t,"session"),n=(0,G.antigravityLinesToLogEntries)(i,"session"),s="";for(let e of i){if(!e||"object"!=typeof e)continue;let t=e.tool_calls;if(Array.isArray(t)){for(let e of t){let t=e&&"object"==typeof e?e.args:void 0,i=t&&"object"==typeof t?t.Cwd:void 0;if("string"==typeof i&&i.length>0){s=i;break}}if(s)break}}return m(n,{cli:"antigravity",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:s})}var ee=e.i(79364),et=e.i(40375);async function ei(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=await (0,ee.getDevinSessions)(),s=[];for(let e of n)!(e.mtimeMs<i)&&(!t||e.cwd&&t.has(e.cwd))&&s.push({cli:"devin",projectName:e.projectName,sessionId:e.sessionId,transcriptPath:`devin-db://${e.sessionId}`,mtimeMs:e.mtimeMs,sizeBytes:0});return s}async function en(e){let t=await (0,et.getDevinSessionLog)(e.sessionId);return t?m(t.entries,{cli:"devin",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}var es=e.i(69164),eo=e.i(36618);let er={claude:{cli:"claude",listTranscripts:y,streamEvents:h,streamEventsFrom:g},codex:{cli:"codex",listTranscripts:S,streamEvents:v},copilot:{cli:"copilot",listTranscripts:b,streamEvents:T},cursor:{cli:"cursor",listTranscripts:j,streamEvents:C},opencode:{cli:"opencode",listTranscripts:A,streamEvents:k},pi:{cli:"pi",listTranscripts:$,streamEvents:B},hermes:{cli:"hermes",listTranscripts:J,streamEvents:q},openclaw:{cli:"openclaw",listTranscripts:F,streamEvents:Y},factory:{cli:"factory",listTranscripts:Q,streamEvents:V},devin:{cli:"devin",listTranscripts:ei,streamEvents:en},antigravity:{cli:"antigravity",listTranscripts:X,streamEvents:Z},goose:{cli:"goose",listTranscripts:async function(e={}){let t=e.projects?new Set(e.projects):null,i=e.sinceMs??0,n=await (0,es.getGooseSessions)(),s=[];for(let e of n)!(e.mtimeMs<i)&&(!t||e.cwd&&t.has(e.cwd))&&s.push({cli:"goose",projectName:e.projectName,sessionId:e.sessionId,transcriptPath:`goose-db://${e.sessionId}`,mtimeMs:e.mtimeMs,sizeBytes:0});return s},streamEvents:async function(e){let t=await (0,eo.getGooseSessionLog)(e.sessionId);return t?m(t.entries,{cli:"goose",sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:t.cwd??""}):[]}}},ea=/\.(?:ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|swift|rb|php|c|h|cc|cpp|hpp|cs|scala|sh|bash|zsh|json|yaml|yml|toml|md|txt|sql|html|css|scss|sass)$/i,ec=["/","/home","/usr","/etc","/var","/opt","/Users"],el="rereadAfterEdit",ed=[{name:"redundant-cd-cwd",description:"Bash commands prefixed with `cd <cwd> && …` even though commands already run in cwd.",category:"Wasteful",severity:"info",displayTitle:"Prepended cd <cwd> before commands",impact:"Pure waste — your agent's shell already runs in `cwd`.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t||!e.cwd)return null;let i=t.trimStart(),n=/^cd\s+(?:"([^"]+)"|'([^']+)'|(\S+))\s*&&\s*([\s\S]+)$/.exec(i);if(!n)return null;let s=(n[1]??n[2]??n[3]??"").replace(/\/+$/,"");if(s!==e.cwd.replace(/\/+$/,""))return null;let o=n[4].trim();return{example:`cd ${s} && ${o}`}}},{name:"prefer-edit-over-read-cat",description:"Bash `cat`/`head`/`tail`/`less`/`more` on a single source file — use Read.",category:"Wasteful",severity:"info",displayTitle:"Used `cat`/`head`/`tail` on a source file",impact:"Burns tokens; the Read tool returns content directly without going through Bash output.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;let i=t.trim();if(/[|<>;&`$()]/.test(i))return null;let n=/^(cat|head|tail|less|more)\s+(?:-\S+\s+)*(?:"([^"]+)"|'([^']+)'|(\S+))\s*$/.exec(i);if(!n)return null;let s=n[2]??n[3]??n[4]??"";return!s||/(?:^|\/)\.env(?:\..+)?$/.test(s)||!ea.test(s)?null:{example:i}}},{name:"prefer-edit-over-sed-awk",description:"Bash `sed -i`/`awk` in-place edits — use Edit.",category:"Wasteful",severity:"info",displayTitle:"Used sed -i or awk for an in-place edit",impact:"Edit tool is safer and produces a diff the agent can verify.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;let i=t.trim();return/(?:^|\s|;|&&|\|\|)sed\b[^|]*\s-i(?=\b|['"])/.test(i)||/(?:^|\s|;|&&|\|\|)awk\b[^|]*\s>\s*\S+/.test(i)&&!/\|/.test(i)?{example:i}:null}},{name:"prefer-write-over-heredoc",description:"Bash heredoc / `echo > file` writing multi-line content — use Write.",category:"Wasteful",severity:"info",displayTitle:"Used heredoc / `echo > file` to write a multi-line file",impact:"Write tool handles escaping and is verifiable.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;return"string"!=typeof t?null:/<<-?\s*['"]?[A-Za-z_][A-Za-z0-9_]*['"]?\s*>\s*\S/.test(t)||/(?:^|\s|;|&&|\|\|)(?:echo|printf)\s+["'][^"']*\n[^"']*["']\s*>\s*\S/.test(t)?{example:t.replace(/\s+/g," ").trim().slice(0,160)}:null}},{name:"sleep-polling-loop",description:"Bash long `sleep` or while-sleep polling loops.",category:"Wasteful",severity:"info",displayTitle:"Used a long sleep or while-sleep polling loop",impact:"Burns wall-clock; better to wait for an explicit signal.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;if(/\bwhile\b[\s\S]*?\bsleep\b[\s\S]*?\bdone\b/.test(t))return{example:t.replace(/\s+/g," ").trim().slice(0,160)};let i=/\bsleep\s+(\d+(?:\.\d+)?)(m|h|d)?\b/.exec(t);if(i){let e=parseFloat(i[1]),n=i[2]??"s";if(("m"===n?60*e:"h"===n?3600*e:"d"===n?86400*e:e)>=30)return{example:t.replace(/\s+/g," ").trim().slice(0,160)}}return null}},{name:"find-from-root",description:"Bash `find` against `/`, `/home`, `/usr`, etc. — scope to cwd instead.",category:"Risky",severity:"warn",displayTitle:"Ran find from /, /home, /usr, etc.",impact:"Filesystem-wide finds exhaust resources and rarely return useful results.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;if("string"!=typeof t)return null;let i=t.trim(),n=/(?:^|[\s;|&])find\s+(?:-\S+\s+)*("[^"]+"|'[^']+'|\S+)/.exec(i);if(!n)return null;let s=n[1].replace(/^["']|["']$/g,"").replace(/\/+$/,"")||"/";return ec.includes(s)?{example:i.slice(0,160)}:null}},{name:"git-commit-no-verify",description:"git commit invoked with --no-verify / -n, skipping hooks.",category:"Risky",severity:"warn",displayTitle:"Committed with --no-verify",impact:"Skips pre-commit hooks that exist to catch broken or unsafe code.",detect(e){if("Bash"!==e.toolName)return null;let t=e.toolInput.command;return"string"!=typeof t?null:/\bgit\s+commit\b/.test(t)&&(/\s--no-verify\b/.test(t)||/\s-n\b/.test(t))?{example:t.replace(/\s+/g," ").trim().slice(0,160)}:null}},{name:"reread-after-edit",description:"Read of a file that was just Edit'd or Write'n in the same session.",category:"Wasteful",severity:"info",displayTitle:"Re-read a file it just edited",impact:"Edit/Write already returned the updated content; the second Read is wasted tokens.",detect(e,t){let i,n=((i=t[el])||(i={countdown:new Map},t[el]=i),i),s=e.toolInput.file_path,o="string"==typeof s?s:null;for(let[e,t]of n.countdown)t<=1?n.countdown.delete(e):n.countdown.set(e,t-1);return o?"Edit"===e.toolName||"Write"===e.toolName?(n.countdown.set(o,5),null):"Read"===e.toolName&&n.countdown.has(o)?(n.countdown.delete(o),{example:`Read ${o} immediately after Edit/Write`}):null:null}}],eu=["cowboy","explorer","ghost","optimist","hammer","architect"],ep={explorer:.38,architect:.33,hammer:.11,cowboy:.11,optimist:.07,ghost:.01,precision:0,goldfish:0},ef={optimist:0,cowboy:0,explorer:0,goldfish:0,architect:0,precision:0,hammer:0,ghost:0};for(let e of eu)ef[e]=Math.max(ep[e],.05);var em=e.i(66680),ey=e.i(79857);let eh=null,eg=null;function eN(){if(eh)return eh;let e=n.BUILTIN_POLICIES.map(e=>`${e.name}|${e.fn.toString()}`).sort().join("\n");return eh=(0,em.createHash)("sha1").update(e).digest("hex").slice(0,16)}function ew(){if(eg)return eg;let e=ed.map(e=>`${e.name}|${e.detect.toString()}`).sort().join("\n");return eg=(0,em.createHash)("sha1").update(e).digest("hex").slice(0,16)}function eS(e){let t=(0,ey.auditCacheDir)(),i=(0,em.createHash)("sha1").update(e).digest("hex");return(0,d.join)(t,`${i}.json`)}function ev(e,t){if(t<=0)return null;let i=null;try{i=(0,l.openSync)(e,"r");let n=Buffer.alloc(Math.min(4096,t));(0,l.readSync)(i,n,0,n.length,0);let s=Math.min(4096,t),o=Buffer.alloc(s);return(0,l.readSync)(i,o,0,s,t-s),(0,em.createHash)("sha1").update(String(t)).update(n).update(o).digest("hex").slice(0,32)}catch{return null}finally{if(null!==i)try{(0,l.closeSync)(i)}catch{}}}var eO=e.i(71194);let eI="request-cut",eb=/^[A-Za-z0-9._:/@~+-]{1,200}$/;function eT(e){let t=e.find(e=>"deny"===e.decision);if(t)return{decision:"deny",entries:[{policyName:t.policyName,reason:t.reason??""}]};let i=e.filter(e=>"instruct"===e.decision);return i.length>0?{decision:"instruct",entries:i.map(e=>({policyName:e.policyName,reason:e.reason??""}))}:{decision:"allow",entries:e.filter(e=>"allow"===e.decision&&e.reason).map(e=>({policyName:e.policyName,reason:e.reason}))}}let ex={allow:0,instruct:1,deny:2};var eP=e.i(97348),ej=e.i(49335),eC=e.i(10659);function eE(e,t){let i=e.trim(),n="string"==typeof t?t.trim():"";return n?i?`${i}. ${n}`:n:i}function eR(e,t){if(!e?.policyParams)return;let i=e.policyParams[t];if(i)return i;let n=function(e){if(!e.startsWith("pack/"))return null;let t=e.slice(5),i=t.lastIndexOf("/");if(i<=0)return null;let n=t.slice(0,i),s=n.lastIndexOf("@");return{packId:s>0?n.slice(0,s):n,name:t.slice(i+1)}}(t);if(n)return function(e,t,i){if(!e)return;let n=e[`pack/${t}/${i}`];return n||(t.toLowerCase()===eO.CORE_SOURCE.toLowerCase()?e[i]:void 0)}(e.policyParams,n.packId,n.name);let s=`${r.DEFAULT_POLICY_NAMESPACE}/`;if(t.startsWith(s))return e.policyParams[t.slice(s.length)]}let eA={authority:"hard",reviewedBy:[]};async function ek(e,t,i,n,s){let o,a,c=t.tool_name,l=(0,r.getPoliciesForEvent)(e,c);if((0,eP.hookLogInfo)(`evaluating ${l.length} policies for ${e}`),!s){if(0===l.length)return{exitCode:0,stdout:"",stderr:"",policyName:null,reason:null,decision:"allow"};let{verdicts:s}=await eM(e,t,i,n,l);return e_(e,i,c,eT(s))}try{o=await eM(e,t,i,n,l,s)}catch(e){throw s.abort(),e}o.hardDenied?(s.abort(),a={kind:"not-consulted"}):(s.releaseRegistry?.(),a=await s.review);let d=function(e,t,i){let n=eT(e);if("not-consulted"===t.kind)return{final:n,cleared:[],decidedByJev:!1,activity:{evaluator:"jev",jevMode:i}};if("fallback"===t.kind)return{final:n,cleared:[],decidedByJev:!1,activity:{evaluator:"jev-fallback",jevFallbackReason:t.reason,...null!==t.latencyMs?{jevLatencyMs:t.latencyMs}:{},...t.model?{jevModel:t.model}:{},jevMode:i}};let s=t.injectionAsked&&!t.injected&&!t.requestCut,o=new Set(t.asked),r=new Set(t.notDenied),a=s&&!t.unclearableWarned?e.filter(e=>"allow"!==e.decision&&"reviewable"===e.authority&&0!==e.reviewedBy.length&&e.reviewedBy.every(e=>o.has(e)&&r.has(e))).map(e=>e.policyName):[],c={policyName:t.policyName,reason:t.reason??`Flagged by semantic review (${t.policyName})`},l=function(e,t,i,n){let s=new Set(t),o=e.filter(e=>!s.has(e.policyName)),r=o.find(e=>"deny"===e.decision);if(r)return{final:{decision:"deny",entries:[{policyName:r.policyName,reason:r.reason??""}]},decidedByJev:!1};if("deny"===i)return{final:{decision:"deny",entries:[n]},decidedByJev:!0};let a=o.filter(e=>"instruct"===e.decision).map(e=>({policyName:e.policyName,reason:e.reason??""}));return("instruct"===i&&a.push(n),a.length>0)?{final:{decision:"instruct",entries:a},decidedByJev:a[0]===n}:{final:eT(o),decidedByJev:!1}}(e,a,t.decision,c),d={evaluator:t.requestCut?"jev-fallback":"jev",...t.requestCut?{jevFallbackReason:eI}:{},jevDecision:t.decision,...a.length>0&&ex[l.final.decision]<ex[n.decision]?{jevCleared:a}:{},...null!==t.latencyMs?{jevLatencyMs:t.latencyMs}:{},...t.model?{jevModel:t.model}:{},jevMode:i};if("observe"===i){let e="deny"===t.decision||"instruct"===t.decision?{policyName:c.policyName,decision:t.decision,reason:c.reason,version:t.model&&eb.test(t.model)?t.model:"jev"}:void 0;return{final:n,cleared:a,decidedByJev:!1,activity:d,...e?{observeVerdict:e}:{}}}return{...l,cleared:a,activity:d}}(o.verdicts,a,s.mode);return d.cleared.length>0&&(0,eP.hookLogInfo)(`jev ${"observe"===s.mode?"would clear":"cleared"}: ${d.cleared.join(", ")}`),"jev-fallback"===d.activity.evaluator&&(0,eP.hookLogInfo)(d.activity.jevFallbackReason===eI?"jev could not be shown the whole call; it cleared nothing, and the call was not allowed on a partial read":`jev unavailable (${d.activity.jevFallbackReason}); the regex result decided this call`),{...e_(e,i,c,d.final,d.decidedByJev),twoTier:{activity:d.activity,decidedByJev:d.decidedByJev,...d.decidedByJev&&"answered"===a.kind&&a.origin?{jevOrigin:a.origin}:{},...d.observeVerdict?{observeVerdict:d.observeVerdict}:{}}}}async function eM(e,t,i,n,s,o){let a=t.tool_name,c=t.tool_input,l={eventType:e,payload:t,toolName:a,toolInput:c,session:i,cli:i?.cli},d=[];for(let t of s){let s,a,c=t.params,u=eR(n,t.name)??{};if(c){let e={};for(let[t,i]of Object.entries(c))e[t]=t in u?u[t]:i.default;s={...l,params:e}}else s={...l,params:u};try{a=await t.fn(s)}catch(s){let n=s instanceof Error?s.message:String(s);(0,eP.hookLogWarn)(`policy "${t.name}" threw: ${n}`),t.name.startsWith(`${r.DEFAULT_POLICY_NAMESPACE}/`)&&(0,ej.trackHookEvent)((0,eC.getInstanceId)(),"policy_evaluation_error",{policy_name:t.name,event_type:e,cli:i?.cli??null,error_type:s instanceof Error?s.name:"unknown"});continue}if("deny"===a.decision){let e=eE(a.reason??`Blocked by policy: ${t.name}`,eR(n,t.name)?.hint);(0,eP.hookLogInfo)(`deny by "${t.name}": ${e}`);let{authority:i,reviewedBy:s}=o?o.authorityOf(t):eA;if(d.push({policyName:t.name,decision:"deny",reason:e,authority:i,reviewedBy:s}),"hard"===i)return{verdicts:d,hardDenied:!0};continue}if("instruct"===a.decision){let e=eE(a.reason??`Instruction from policy: ${t.name}`,eR(n,t.name)?.hint),{authority:i,reviewedBy:s}=o?o.authorityOf(t):eA;d.push({policyName:t.name,decision:"instruct",reason:e,authority:i,reviewedBy:s}),(0,eP.hookLogInfo)(`instruct by "${t.name}": ${e}`)}"allow"===a.decision&&a.reason&&d.push({policyName:t.name,decision:"allow",reason:a.reason,...eA})}return{verdicts:d,hardDenied:!1}}function e_(e,t,i,n,s=!1){if("deny"===n.decision){let[o]=n.entries;return function(e,t,i,n,s,o=!1){let r;r=i||("UserPromptSubmit"===e?"prompt":"SessionStart"===e?"session start":"SessionEnd"===e?"session end":"Stop"===e?"stop":"operation");let a=o?`Blocked ${r} by failproofai because: ${s.replace(/[.\s]+$/,"")}, as flagged by Jev semantic review`:`Blocked ${r} by failproofai because: ${s}, as per the policy configured by the user`;if(t?.cli==="cursor")return"Stop"===e||"SubagentStop"===e?{exitCode:0,stdout:JSON.stringify({followup_message:`MANDATORY ACTION REQUIRED from failproofai (policy: ${n}): ${s}
2
2
 
3
3
  You MUST complete the above action NOW. Do NOT ask the user for confirmation — execute the required action, then attempt to finish your task again.`}),stderr:"",policyName:n,reason:s,decision:"deny"}:"UserPromptSubmit"===e?{exitCode:0,stdout:JSON.stringify({continue:!1,user_message:a}),stderr:"",policyName:n,reason:s,decision:"deny"}:{exitCode:0,stdout:JSON.stringify({permission:"deny",user_message:a,agent_message:a}),stderr:"",policyName:n,reason:s,decision:"deny"};if(t?.cli==="pi")return"Stop"===e?{exitCode:0,stdout:JSON.stringify({permission:"deny",reason:`MANDATORY ACTION REQUIRED from failproofai (policy: ${n}): ${s}
4
4
 
@@ -28,6 +28,6 @@ You MUST complete the above action(s) NOW. Do NOT ask the user for confirmation
28
28
 
29
29
  You MUST complete the above action(s) NOW. Do NOT ask the user for confirmation — execute the required action(s), then attempt to finish your task again.`}),stderr:"",policyName:s[0],policyNames:s,reason:n,decision:"instruct"}}return{exitCode:0,stdout:"",stderr:i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n")+"\n",policyName:s[0],policyNames:s,reason:n,decision:"instruct"}}if(t?.cli==="goose")return{exitCode:0,stdout:"",stderr:i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n")+"\n",policyName:s[0],policyNames:s,reason:n,decision:"instruct"};if("Stop"===e||"SubagentStop"===e){let e=1===s.length?`policy: ${s[0]}`:`policies: ${s.join(", ")}`,i=`MANDATORY ACTION REQUIRED from failproofai (${e}): ${n}
30
30
 
31
- You MUST complete the above action(s) NOW. Do NOT ask the user for confirmation — execute the required action(s), then attempt to finish your task again.`;return t?.cli==="copilot"?{exitCode:0,stdout:JSON.stringify({decision:"block",reason:i}),stderr:"",policyName:s[0],policyNames:s,reason:n,decision:"instruct"}:{exitCode:2,stdout:"",stderr:i,policyName:s[0],policyNames:s,reason:n,decision:"instruct"}}return{exitCode:0,stdout:JSON.stringify({hookSpecificOutput:{hookEventName:e,additionalContext:`Instruction from failproofai: ${n}`}}),stderr:"",policyName:s[0],policyNames:s,reason:n,decision:"instruct"}}(e,t,n.entries):n.entries.length>0?function(e,t,i){let n=i.map(e=>e.reason).join("\n"),s=i.map(e=>e.policyName);if(t?.cli==="cursor"){let e={permission:"allow",additional_context:`Note from failproofai: ${n}`},t=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return{exitCode:0,stdout:JSON.stringify(e),stderr:t+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}if(t?.cli==="pi"){let e={permission:"allow",reason:`Note from failproofai: ${n}`},t=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return{exitCode:0,stdout:JSON.stringify(e),stderr:t+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}if(t?.cli==="openclaw"){let e=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return{exitCode:0,stdout:JSON.stringify({permission:"allow",reason:`Note from failproofai: ${n}`}),stderr:e+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}let o=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return"PreToolUse"===e||"PostToolUse"===e||"UserPromptSubmit"===e||"PermissionRequest"===e?{exitCode:0,stdout:JSON.stringify({hookSpecificOutput:{hookEventName:e,additionalContext:`Note from failproofai: ${n}`}}),stderr:o+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}:{exitCode:0,stdout:"",stderr:o+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}(e,t,n.entries):{exitCode:0,stdout:"",stderr:"",policyName:null,reason:null,decision:"allow"}}let e$=new Set(["warn-repeated-tool-calls"].map(e=>(0,r.normalizePolicyName)(e))),eB=!1,eD=null;async function eU(){if(eB)return;eD=(0,r.getAllPolicies)(),(0,r.clearPolicies)();let e=n.BUILTIN_POLICIES.map(e=>e.name).filter(e=>!e$.has((0,r.normalizePolicyName)(e)));(0,n.registerBuiltinPolicies)(e),eB=!0}async function eL(e){eB||await eU();let t={sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:e.cwd,cli:e.cli},i={tool_name:e.toolName,tool_input:e.toolInput,session_id:e.sessionId,cwd:e.cwd,transcript_path:e.transcriptPath},n=[];if(eJ(await ek("PreToolUse",i,t),"PreToolUse",n),void 0!==e.toolResultText){let s={...i,tool_response:e.toolResultText};eJ(await ek("PostToolUse",s,t),"PostToolUse",n)}return n}function eJ(e,t,i){for(let n of e.policyNames&&e.policyNames.length>0?e.policyNames:e.policyName?[e.policyName]:[])i.push({policyName:n,decision:e.decision,reason:e.reason,eventType:t})}function eq(e){let t=e.indexOf("/");return t>=0?e.slice(t+1):e}function eW(e){return e.length<=80?e:e.slice(0,79)+"…"}async function ez(e,t){let i,n={transcriptPath:e.transcriptPath,cli:e.cli,projectName:e.projectName,sessionId:e.sessionId,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes,cwd:"",eventsScanned:0,hitsByName:{},examplesByName:{},rangeByName:{}},s=er[e.cli],o=0,r=!1,a=t?.detectorState??{};if(s.streamEventsFrom){let a=await s.streamEventsFrom(e,t?.fromByte??0);a?(i=a.events,o=a.bytesConsumed,n.cwd=a.cwd??"",r=!0):(i=await s.streamEvents(e),o=0)}else i=await s.streamEvents(e),o=0;if(0===i.length)return{result:n,bytesScanned:o,detectorState:a,resumed:r};for(let e of(n.eventsScanned=i.length,n.cwd=n.cwd||i[0].cwd||"",i)){let t;for(let t of ed){let i=t.detect(e,a);i&&eF(n,t.name,e.timestamp,e.cwd,eW(i.example))}try{t=await eL(e)}catch{continue}for(let i of t){let t=function(e,t){if("Bash"===t.toolName){let e=t.toolInput.command;if("string"==typeof e)return e.replace(/\s+/g," ")}let i=t.toolInput.file_path;return"string"==typeof i?`${t.toolName} ${i}`:`${t.toolName}`}(i.policyName,e);eF(n,i.policyName,e.timestamp,e.cwd,eW(t))}}return{result:n,bytesScanned:o,detectorState:a,resumed:r}}function eF(e,t,i,n,s){e.hitsByName[t]=(e.hitsByName[t]??0)+1;let o=e.examplesByName[t]??[];o.length<3&&(o.push({timestamp:i,cwd:n,example:s}),e.examplesByName[t]=o);let r=e.rangeByName[t];r?(i<r.first&&(r.first=i),i>r.last&&(r.last=i)):e.rangeByName[t]={first:i,last:i}}async function eY(e={}){let t=Date.now();await eU();try{return await eH(e,t)}finally{eB&&(null!==eD&&((0,r.setAllPolicies)(eD),eD=null),eB=!1)}}async function eH(e,t){let c=e.clis??Array.from(a.INTEGRATION_TYPES),d=function(e){if(!e)return;let t=/^(\d+)\s*([dhm])$/i.exec(e.trim());if(t){let e=parseInt(t[1],10),i=t[2].toLowerCase();return Date.now()-e*("d"===i?864e5:"h"===i?36e5:6e4)}let i=Date.parse(e);if(!Number.isNaN(i))return i;throw Error(`Invalid --since value: "${e}" (expected e.g. "7d", "30d", or "2026-04-01")`)}(e.since),u=new Set(((0,s.readMergedHooksConfig)().enabledPolicies??[]).map(e=>(0,r.normalizePolicyName)(e)));try{for(let e of(0,o.readInstalledPacks)().packs)for(let t of e.enabled??e.policies.map(e=>e.name))u.add((0,r.normalizePolicyName)(t))}catch{}let p=[];for(let t of c){let i,n=er[t];try{i=await n.listTranscripts({projects:e.projects,sinceMs:d})}catch{continue}p.push(...i)}let f=0,m=0,y=p.map(t=>async()=>{let i,n=null;if(!e.noCache){let e=function(e,t,i){if(0===i)return null;let n=eS(e);if(!(0,l.existsSync)(n))return null;try{let s=(0,l.readFileSync)(n,"utf-8"),o=JSON.parse(s);if(4!==o.schemaVersion||o.engineVersion!==eN()||o.detectorVersion!==ew()||!Number.isFinite(o.cachedAt)||Date.now()-o.cachedAt>2592e6||!o.result)return null;if(o.mtimeMs===t&&o.sizeBytes===i)return{kind:"hit",result:o.result};let r=o.bytesScanned;if(!Number.isFinite(r)||r<=0||r>i||!o.anchorHash||ev(e,r)!==o.anchorHash)return null;return{kind:"resume",result:o.result,fromByte:r,detectorState:function(e){if(!e)return{};try{return JSON.parse(e,(e,t)=>t&&"object"==typeof t&&Array.isArray(t.__map)?new Map(t.__map):t)}catch{return{}}}(o.detectorState)}}catch{return null}}(t.transcriptPath,t.mtimeMs,t.sizeBytes);if(e?.kind==="hit")return e.result;i=e?.kind==="resume"?{fromByte:e.fromByte,detectorState:e.detectorState}:void 0,n=e?.kind==="resume"?e.result:null}try{let s=await ez(t,i),o=n&&s.resumed?function(e,t){let i={...e,mtimeMs:t.mtimeMs,sizeBytes:t.sizeBytes,cwd:e.cwd||t.cwd||"",eventsScanned:(e.eventsScanned??0)+(t.eventsScanned??0),hitsByName:{...e.hitsByName},examplesByName:{},rangeByName:{...e.rangeByName}};for(let[t,n]of Object.entries(e.examplesByName))i.examplesByName[t]=[...n];for(let[e,n]of Object.entries(t.hitsByName))i.hitsByName[e]=(i.hitsByName[e]??0)+n;for(let[e,n]of Object.entries(t.examplesByName)){let t=i.examplesByName[e]??[];for(let e of n){if(t.length>=3)break;t.push(e)}i.examplesByName[e]=t}for(let[e,n]of Object.entries(t.rangeByName)){let t=i.rangeByName[e];t?(n.first<t.first&&(t.first=n.first),n.last>t.last&&(t.last=n.last)):i.rangeByName[e]={...n}}return i}(n,s.result):s.result;return e.noCache||function(e,t,i,n,s){if(0===i)return;let o=eS(e);try{(0,l.mkdirSync)((0,ey.auditCacheDir)(),{recursive:!0});let a={schemaVersion:4,cachedAt:Date.now(),mtimeMs:t,sizeBytes:i,engineVersion:eN(),detectorVersion:ew(),result:n};if(s&&s.bytesScanned>0){let t=ev(e,s.bytesScanned);if(t){var r;a.bytesScanned=s.bytesScanned,a.anchorHash=t,r=s.detectorState,a.detectorState=JSON.stringify(r,(e,t)=>t instanceof Map?{__map:[...t.entries()]}:t)}}(0,l.writeFileSync)(o,JSON.stringify(a),{encoding:"utf-8",mode:384});try{(0,l.chmodSync)(o,384)}catch{}}catch{}}(t.transcriptPath,t.mtimeMs,t.sizeBytes,o,s.bytesScanned>0?{bytesScanned:s.bytesScanned,detectorState:s.detectorState}:void 0),o}catch{return m++,{transcriptPath:t.transcriptPath,cli:t.cli,projectName:t.projectName,cwd:"",sessionId:t.sessionId,mtimeMs:t.mtimeMs,sizeBytes:t.sizeBytes,eventsScanned:0,hitsByName:{},examplesByName:{},rangeByName:{}}}}),h=await (0,i.batchAll)(y,8),g=[];for(let e of h)"fulfilled"===e.status?g.push(e.value):f++;let N=function(e,t){let i=new Map;for(let t of e)for(let[e,n]of Object.entries(t.hitsByName)){let s=i.get(e)??{hits:0,projects:new Set,examples:[]};for(let i of(s.hits+=n,s.projects.add(t.projectName),t.examplesByName[e]??[]))s.examples.length<3&&s.examples.push({...i,sessionId:t.sessionId});let o=t.rangeByName[e];o&&((!s.first||o.first<s.first)&&(s.first=o.first),(!s.last||o.last>s.last)&&(s.last=o.last)),i.set(e,s)}let s=new Map(ed.map(e=>[e.name,e])),o=[];for(let[e,a]of i){let i=s.get(e),c=!!i,l=c?null:function(e){let t=eq(e);for(let i of n.BUILTIN_POLICIES)if(i.name===e||eq(i.name)===t)return i;return null}(e),d=c?"audit-detector":"builtin",u=!c&&t.has((0,r.normalizePolicyName)(e)),p=i?.displayTitle??l?.displayTitle??i?.description??l?.description??eq(e),f=i?.impact??l?.impact??"";o.push({name:e,source:d,category:i?.category??l?.category??"Custom",severity:c?i?.severity??"info":function(e){let t,i=(t=e.indexOf("/"))>=0?e.slice(t+1):e;return i.startsWith("sanitize-")?"sanitize":i.startsWith("block-")?"deny":i.startsWith("warn-")||i.startsWith("protect-")||i.startsWith("prefer-")||i.startsWith("require-")?"warn":"deny"}(e),hits:a.hits,projects:a.projects.size,firstSeen:a.first,lastSeen:a.last,examples:a.examples,displayTitle:p,impact:f,enabledInConfig:u,installHint:"audit-detector"===d?"Audit-only — `failproofai audit` will keep tracking these.":u?"Already enforced — failproofai is blocking these in real time.":`Enable in one command: failproofai policies --install ${eq(e)}`})}return o.sort((e,t)=>t.hits-e.hits),o}(g,u);if(e.policies?.length){let t=new Set(e.policies.map(eq));N=N.filter(e=>t.has(eq(e.name)))}let w=N.reduce((e,t)=>e+t.hits,0),S=new Set,v=new Set,O=0;for(let e of g)Object.keys(e.hitsByName).length>0&&S.add(e.projectName),e.cwd&&v.add(e.cwd),O+=e.eventsScanned??0;return{version:2,scannedAt:new Date(t).toISOString(),scope:{cli:c,projects:e.projects??"all",since:e.since??null},transcripts:{scanned:p.length,skipped:f,errors:m,durationMs:Date.now()-t},results:N,totals:{hits:w,projectsWithHits:S.size},projectsScanned:[...v].sort(),eventsScanned:O,enabledBuiltinNames:[...u].map(e=>e.includes("/")?e.slice(e.indexOf("/")+1):e)}}var eQ=e.i(47756),eV=e.i(48480),eG=e.i(29095),eK=e.i(46501),eX=e.i(60526);let eZ=new Set(a.INTEGRATION_TYPES);async function e0(e){await (0,eK.initTelemetry)();let i={};try{let n=await e.text();if(n.trim().length>0){let e=JSON.parse(n);if(null===e||"object"!=typeof e||Array.isArray(e))return(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"non_object_body"}),t.NextResponse.json({error:"Request body must be a JSON object"},{status:400});i=e}}catch{return(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"invalid_json"}),t.NextResponse.json({error:"Invalid JSON body"},{status:400})}let n=function(e){let t={};if("string"==typeof e.since&&e.since.trim()&&(t.since=e.since.trim()),Array.isArray(e.cli)&&e.cli.length>0){let i=e.cli.filter(e=>"string"==typeof e&&eZ.has(e));i.length>0&&(t.clis=i)}return Array.isArray(e.project)&&e.project.length>0&&(t.projects=e.project.filter(e=>"string"==typeof e)),Array.isArray(e.policy)&&e.policy.length>0&&(t.policies=e.policy.filter(e=>"string"==typeof e)),!0===e.noCache&&(t.noCache=!0),t}(i);if(!(0,eV.tryAcquireRun)())return(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"already_running"}),t.NextResponse.json({error:"Audit already running",status:"already-running"},{status:409});let s=(0,eG.acquireAuditLock)("dashboard");if(!s.ok)return(0,eV.finishRun)(null),(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"cross_process_lock"}),t.NextResponse.json({error:"Audit already running",status:"already-running"},{status:409});(0,eK.trackEvent)("audit_run_started",{source:"dashboard",since:n.since??null,no_cache:!0===n.noCache,cli_count:n.clis?.length??0,project_count:n.projects?.length??0});let o=Date.now();return(async()=>{try{let e=await eY(n),t=(0,eQ.writeDashboardCache)(n,e);(0,eK.trackEvent)("audit_run_completed",{source:"dashboard",duration_ms:Date.now()-o,events_scanned:e.eventsScanned,sessions_scanned:e.transcripts.scanned,projects_scanned:e.projectsScanned.length,findings:e.results.length,total_hits:e.totals.hits,persisted:t}),(0,eV.finishRun)(t?null:"audit finished but its result could not be saved")}catch(e){(0,eK.trackEvent)("audit_run_failed",{source:"dashboard",duration_ms:Date.now()-o,error_type:e instanceof Error?e.name:"unknown",error_message:function(e){let t;try{t=e instanceof Error?e.message:String(e)}catch{return"unknown"}if(!t)return"";let i="";try{i=eX.default.homedir()}catch{}return i&&i.length>1&&(t=t.split(i).join("~")),t.length>300&&(t=t.slice(0,300)+"…"),t}(e)}),(0,eV.finishRun)(e instanceof Error?e.message:String(e))}finally{s.lock.release()}})(),t.NextResponse.json({status:"started"},{status:202})}e.s(["POST",0,e0,"dynamic",0,"force-dynamic"],97610)},89498,e=>{"use strict";var t=e.i(47909),i=e.i(74017),n=e.i(96250),s=e.i(59756),o=e.i(61916),r=e.i(74677),a=e.i(69741),c=e.i(16795),l=e.i(87718),d=e.i(95169),u=e.i(47587),p=e.i(66012),f=e.i(70101),m=e.i(26937),y=e.i(10372),h=e.i(93695);e.i(52474);var g=e.i(220);let N=new t.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/audit/run/route",pathname:"/api/audit/run",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/audit/run/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(97610),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:S,serverHooks:v}=N;async function O(e,t,n){n.requestMeta&&(0,s.setRequestMeta)(e,n.requestMeta),N.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/audit/run/route";w=w.replace(/\/index$/,"")||"/";let S=await N.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!S)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:v,deploymentId:O,params:I,nextConfig:T,parsedUrl:b,isDraftMode:x,prerenderManifest:P,routerServerContext:j,isOnDemandRevalidate:C,revalidateOnlyGenerated:E,resolvedPathname:R,clientReferenceManifest:A,serverActionsManifest:k}=S,M=(0,a.normalizeAppPath)(w),_=!!(P.dynamicRoutes[M]||P.routes[R]),$=async()=>((null==j?void 0:j.render404)?await j.render404(e,t,b,!1):t.end("This page could not be found"),null);if(_&&!x){let e=!!P.routes[R],t=P.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(T.adapterPath)return await $();throw new h.NoFallbackError}}let B=null;!_||N.isDev||x||(B="/index"===(B=R)?"/":B);let D=!0===N.isDev||!_,U=_&&!D;k&&A&&(0,r.setManifestsSingleton)({page:w,clientReferenceManifest:A,serverActionsManifest:k});let L=e.method||"GET",J=(0,o.getTracer)(),q=J.getActiveScopeSpan(),W=!!(null==j?void 0:j.isWrappedByNextServer),z=!!(0,s.getRequestMeta)(e,"minimalMode"),F=(0,s.getRequestMeta)(e,"incrementalCache")||await N.getIncrementalCache(e,T,P,z);null==F||F.resetRequestCache(),globalThis.__incrementalCache=F;let Y={params:I,previewProps:P.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,supportsDynamicResponse:D,incrementalCache:F,hmrRefreshHash:(0,s.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,i,n,s)=>N.onRequestError(e,t,n,s,j)},sharedContext:{buildId:v,deploymentId:O}},H=new c.NodeNextRequest(e),Q=new c.NodeNextResponse(t),V=l.NextRequestAdapter.fromNodeNextRequest(H,(0,l.signalFromNodeResponse)(t)),G=async({previousCacheEntry:i})=>{try{if(!z&&C&&E&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await N.handle(V,Y);e.fetchMetrics=Y.renderOpts.fetchMetrics;let o=Y.renderOpts.pendingWaitUntil;o&&n.waitUntil&&(n.waitUntil(o),o=void 0);let r=Y.renderOpts.collectedTags;if(!_)return await (0,p.sendResponse)(H,Q,s,o),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);r&&(t[y.NEXT_CACHE_TAGS_HEADER]=r),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let i=void 0!==Y.renderOpts.collectedRevalidate&&!(Y.renderOpts.collectedRevalidate>=y.INFINITE_CACHE)&&Y.renderOpts.collectedRevalidate,n=void 0===Y.renderOpts.collectedExpire||Y.renderOpts.collectedExpire>=y.INFINITE_CACHE?!1!==i&&i>0?T.expireTime:void 0:Y.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:i,expire:n}}}}catch(t){throw(null==i?void 0:i.isStale)&&await N.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:C})},!1,j),t}},K=async(s,r)=>{try{var a,c;let s=await N.handleResponse({req:e,nextConfig:T,cacheKey:B,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:P,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:E,responseGenerator:G,waitUntil:n.waitUntil,isMinimalMode:z});if(!_)return;if((null==s||null==(a=s.value)?void 0:a.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==s||null==(c=s.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});z||t.setHeader("x-nextjs-cache",C?"REVALIDATED":s.isMiss?"MISS":s.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,f.fromNodeOutgoingHttpHeaders)(s.value.headers);z&&_||o.delete(y.NEXT_CACHE_TAGS_HEADER),!s.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,m.getCacheControlHeader)(s.cacheControl)),await (0,p.sendResponse)(H,Q,new Response(s.value.body,{headers:o,status:s.value.status||200}));return}catch(t){if(t instanceof h.NoFallbackError||await N.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:C})},!1,j),_)throw t;await (0,p.sendResponse)(H,Q,new Response(null,{status:500}));return}finally{(()=>{if(!s)return;let e=t.statusCode;s.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(s.setStatus({code:o.SpanStatusCode.ERROR}),s.setAttribute("error.type",e.toString()));let i=J.getRootSpanAttributes();if(!i)return;if(i.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${i.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=i.get("next.route")||M,a=`${L} ${n}`;s.setAttributes({"next.route":n,"http.route":n,"next.span_name":a}),s.updateName(a),r&&r!==s&&(r.setAttribute("http.route",n),r.updateName(a))})()}};if(W&&q)await K(q,void 0);else{let t=J.getActiveScopeSpan();await J.withPropagatedContext(e.headers,()=>J.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:o.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>K(e,t)),void 0,!W)}}e.s(["handler",0,O,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:S})},"routeModule",0,N,"serverHooks",0,v,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,S])}];
31
+ You MUST complete the above action(s) NOW. Do NOT ask the user for confirmation — execute the required action(s), then attempt to finish your task again.`;return t?.cli==="copilot"?{exitCode:0,stdout:JSON.stringify({decision:"block",reason:i}),stderr:"",policyName:s[0],policyNames:s,reason:n,decision:"instruct"}:{exitCode:2,stdout:"",stderr:i,policyName:s[0],policyNames:s,reason:n,decision:"instruct"}}return{exitCode:0,stdout:JSON.stringify({hookSpecificOutput:{hookEventName:e,additionalContext:`Instruction from failproofai: ${n}`}}),stderr:"",policyName:s[0],policyNames:s,reason:n,decision:"instruct"}}(e,t,n.entries):n.entries.length>0?function(e,t,i){let n=i.map(e=>e.reason).join("\n"),s=i.map(e=>e.policyName);if(t?.cli==="cursor"){let e={permission:"allow",additional_context:`Note from failproofai: ${n}`},t=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return{exitCode:0,stdout:JSON.stringify(e),stderr:t+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}if(t?.cli==="pi"){let e={permission:"allow",reason:`Note from failproofai: ${n}`},t=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return{exitCode:0,stdout:JSON.stringify(e),stderr:t+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}if(t?.cli==="openclaw"){let e=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return{exitCode:0,stdout:JSON.stringify({permission:"allow",reason:`Note from failproofai: ${n}`}),stderr:e+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}let o=i.map(e=>`[failproofai] ${e.policyName}: ${e.reason}`).join("\n");return"PreToolUse"===e||"PostToolUse"===e||"UserPromptSubmit"===e||"PermissionRequest"===e?{exitCode:0,stdout:JSON.stringify({hookSpecificOutput:{hookEventName:e,additionalContext:`Note from failproofai: ${n}`}}),stderr:o+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}:{exitCode:0,stdout:"",stderr:o+"\n",policyName:s[0],policyNames:s,reason:n,decision:"allow"}}(e,t,n.entries):{exitCode:0,stdout:"",stderr:"",policyName:null,reason:null,decision:"allow"}}let e$=new Set(["warn-repeated-tool-calls"].map(e=>(0,r.normalizePolicyName)(e))),eB=!1,eD=null;async function eU(){if(eB)return;eD=(0,r.getAllPolicies)(),(0,r.clearPolicies)();let e=n.BUILTIN_POLICIES.map(e=>e.name).filter(e=>!e$.has((0,r.normalizePolicyName)(e)));(0,n.registerBuiltinPolicies)(e),eB=!0}async function eL(e){eB||await eU();let t={sessionId:e.sessionId,transcriptPath:e.transcriptPath,cwd:e.cwd,cli:e.cli},i={tool_name:e.toolName,tool_input:e.toolInput,session_id:e.sessionId,cwd:e.cwd,transcript_path:e.transcriptPath},n=[];if(eJ(await ek("PreToolUse",i,t),"PreToolUse",n),void 0!==e.toolResultText){let s={...i,tool_response:e.toolResultText};eJ(await ek("PostToolUse",s,t),"PostToolUse",n)}return n}function eJ(e,t,i){for(let n of e.policyNames&&e.policyNames.length>0?e.policyNames:e.policyName?[e.policyName]:[])i.push({policyName:n,decision:e.decision,reason:e.reason,eventType:t})}function eq(e){let t=e.indexOf("/");return t>=0?e.slice(t+1):e}function eW(e){return e.length<=80?e:e.slice(0,79)+"…"}async function ez(e,t){let i,n={transcriptPath:e.transcriptPath,cli:e.cli,projectName:e.projectName,sessionId:e.sessionId,mtimeMs:e.mtimeMs,sizeBytes:e.sizeBytes,cwd:"",eventsScanned:0,hitsByName:{},examplesByName:{},rangeByName:{}},s=er[e.cli],o=0,r=!1,a=t?.detectorState??{};if(s.streamEventsFrom){let a=await s.streamEventsFrom(e,t?.fromByte??0);a?(i=a.events,o=a.bytesConsumed,n.cwd=a.cwd??"",r=!0):(i=await s.streamEvents(e),o=0)}else i=await s.streamEvents(e),o=0;if(0===i.length)return{result:n,bytesScanned:o,detectorState:a,resumed:r};for(let e of(n.eventsScanned=i.length,n.cwd=n.cwd||i[0].cwd||"",i)){let t;for(let t of ed){let i=t.detect(e,a);i&&eF(n,t.name,e.timestamp,e.cwd,eW(i.example))}try{t=await eL(e)}catch{continue}for(let i of t){let t=function(e,t){if("Bash"===t.toolName){let e=t.toolInput.command;if("string"==typeof e)return e.replace(/\s+/g," ")}let i=t.toolInput.file_path;return"string"==typeof i?`${t.toolName} ${i}`:`${t.toolName}`}(i.policyName,e);eF(n,i.policyName,e.timestamp,e.cwd,eW(t))}}return{result:n,bytesScanned:o,detectorState:a,resumed:r}}function eF(e,t,i,n,s){e.hitsByName[t]=(e.hitsByName[t]??0)+1;let o=e.examplesByName[t]??[];o.length<3&&(o.push({timestamp:i,cwd:n,example:s}),e.examplesByName[t]=o);let r=e.rangeByName[t];r?(i<r.first&&(r.first=i),i>r.last&&(r.last=i)):e.rangeByName[t]={first:i,last:i}}async function eY(e={}){let t=Date.now();await eU();try{return await eH(e,t)}finally{eB&&(null!==eD&&((0,r.setAllPolicies)(eD),eD=null),eB=!1)}}async function eH(e,t){let c=e.clis??Array.from(a.INTEGRATION_TYPES),d=function(e){if(!e)return;let t=/^(\d+)\s*([dhm])$/i.exec(e.trim());if(t){let e=parseInt(t[1],10),i=t[2].toLowerCase();return Date.now()-e*("d"===i?864e5:"h"===i?36e5:6e4)}let i=Date.parse(e);if(!Number.isNaN(i))return i;throw Error(`Invalid --since value: "${e}" (expected e.g. "7d", "30d", or "2026-04-01")`)}(e.since),u=new Set(((0,s.readMergedHooksConfig)().enabledPolicies??[]).map(e=>(0,r.normalizePolicyName)(e)));try{for(let e of(0,o.readInstalledPacks)().packs)for(let t of e.enabled??e.policies.map(e=>e.name))u.add((0,r.normalizePolicyName)(t))}catch{}let p=[];for(let t of c){let i,n=er[t];try{i=await n.listTranscripts({projects:e.projects,sinceMs:d})}catch{continue}p.push(...i)}let f=0,m=0,y=p.map(t=>async()=>{let i,n=null;if(!e.noCache){let e=function(e,t,i){if(0===i)return null;let n=eS(e);if(!(0,l.existsSync)(n))return null;try{let s=(0,l.readFileSync)(n,"utf-8"),o=JSON.parse(s);if(4!==o.schemaVersion||o.engineVersion!==eN()||o.detectorVersion!==ew()||!Number.isFinite(o.cachedAt)||Date.now()-o.cachedAt>2592e6||!o.result)return null;if(o.mtimeMs===t&&o.sizeBytes===i)return{kind:"hit",result:o.result};let r=o.bytesScanned;if(!Number.isFinite(r)||r<=0||r>i||!o.anchorHash||ev(e,r)!==o.anchorHash)return null;return{kind:"resume",result:o.result,fromByte:r,detectorState:function(e){if(!e)return{};try{return JSON.parse(e,(e,t)=>t&&"object"==typeof t&&Array.isArray(t.__map)?new Map(t.__map):t)}catch{return{}}}(o.detectorState)}}catch{return null}}(t.transcriptPath,t.mtimeMs,t.sizeBytes);if(e?.kind==="hit")return e.result;i=e?.kind==="resume"?{fromByte:e.fromByte,detectorState:e.detectorState}:void 0,n=e?.kind==="resume"?e.result:null}try{let s=await ez(t,i),o=n&&s.resumed?function(e,t){let i={...e,mtimeMs:t.mtimeMs,sizeBytes:t.sizeBytes,cwd:e.cwd||t.cwd||"",eventsScanned:(e.eventsScanned??0)+(t.eventsScanned??0),hitsByName:{...e.hitsByName},examplesByName:{},rangeByName:{...e.rangeByName}};for(let[t,n]of Object.entries(e.examplesByName))i.examplesByName[t]=[...n];for(let[e,n]of Object.entries(t.hitsByName))i.hitsByName[e]=(i.hitsByName[e]??0)+n;for(let[e,n]of Object.entries(t.examplesByName)){let t=i.examplesByName[e]??[];for(let e of n){if(t.length>=3)break;t.push(e)}i.examplesByName[e]=t}for(let[e,n]of Object.entries(t.rangeByName)){let t=i.rangeByName[e];t?(n.first<t.first&&(t.first=n.first),n.last>t.last&&(t.last=n.last)):i.rangeByName[e]={...n}}return i}(n,s.result):s.result;return e.noCache||function(e,t,i,n,s){if(0===i)return;let o=eS(e);try{(0,l.mkdirSync)((0,ey.auditCacheDir)(),{recursive:!0});let a={schemaVersion:4,cachedAt:Date.now(),mtimeMs:t,sizeBytes:i,engineVersion:eN(),detectorVersion:ew(),result:n};if(s&&s.bytesScanned>0){let t=ev(e,s.bytesScanned);if(t){var r;a.bytesScanned=s.bytesScanned,a.anchorHash=t,r=s.detectorState,a.detectorState=JSON.stringify(r,(e,t)=>t instanceof Map?{__map:[...t.entries()]}:t)}}(0,l.writeFileSync)(o,JSON.stringify(a),{encoding:"utf-8",mode:384});try{(0,l.chmodSync)(o,384)}catch{}}catch{}}(t.transcriptPath,t.mtimeMs,t.sizeBytes,o,s.bytesScanned>0?{bytesScanned:s.bytesScanned,detectorState:s.detectorState}:void 0),o}catch{return m++,{transcriptPath:t.transcriptPath,cli:t.cli,projectName:t.projectName,cwd:"",sessionId:t.sessionId,mtimeMs:t.mtimeMs,sizeBytes:t.sizeBytes,eventsScanned:0,hitsByName:{},examplesByName:{},rangeByName:{}}}}),h=await (0,i.batchAll)(y,8),g=[];for(let e of h)"fulfilled"===e.status?g.push(e.value):f++;let N=function(e,t){let i=new Map;for(let t of e)for(let[e,n]of Object.entries(t.hitsByName)){let s=i.get(e)??{hits:0,projects:new Set,examples:[]};for(let i of(s.hits+=n,s.projects.add(t.projectName),t.examplesByName[e]??[]))s.examples.length<3&&s.examples.push({...i,sessionId:t.sessionId});let o=t.rangeByName[e];o&&((!s.first||o.first<s.first)&&(s.first=o.first),(!s.last||o.last>s.last)&&(s.last=o.last)),i.set(e,s)}let s=new Map(ed.map(e=>[e.name,e])),o=[];for(let[e,a]of i){let i=s.get(e),c=!!i,l=c?null:function(e){let t=eq(e);for(let i of n.BUILTIN_POLICIES)if(i.name===e||eq(i.name)===t)return i;return null}(e),d=c?"audit-detector":"builtin",u=!c&&t.has((0,r.normalizePolicyName)(e)),p=i?.displayTitle??l?.displayTitle??i?.description??l?.description??eq(e),f=i?.impact??l?.impact??"";o.push({name:e,source:d,category:i?.category??l?.category??"Custom",severity:c?i?.severity??"info":function(e){let t,i=(t=e.indexOf("/"))>=0?e.slice(t+1):e;return i.startsWith("sanitize-")?"sanitize":i.startsWith("block-")?"deny":i.startsWith("warn-")||i.startsWith("protect-")||i.startsWith("prefer-")||i.startsWith("require-")?"warn":"deny"}(e),hits:a.hits,projects:a.projects.size,firstSeen:a.first,lastSeen:a.last,examples:a.examples,displayTitle:p,impact:f,enabledInConfig:u,installHint:"audit-detector"===d?"Audit-only — `failproofai audit` will keep tracking these.":u?"Already enforced — failproofai is blocking these in real time.":`Enable in one command: failproofai policies --install ${eq(e)}`})}return o.sort((e,t)=>t.hits-e.hits),o}(g,u);if(e.policies?.length){let t=new Set(e.policies.map(eq));N=N.filter(e=>t.has(eq(e.name)))}let w=N.reduce((e,t)=>e+t.hits,0),S=new Set,v=new Set,O=0;for(let e of g)Object.keys(e.hitsByName).length>0&&S.add(e.projectName),e.cwd&&v.add(e.cwd),O+=e.eventsScanned??0;return{version:2,scannedAt:new Date(t).toISOString(),scope:{cli:c,projects:e.projects??"all",since:e.since??null},transcripts:{scanned:p.length,skipped:f,errors:m,durationMs:Date.now()-t},results:N,totals:{hits:w,projectsWithHits:S.size},projectsScanned:[...v].sort(),eventsScanned:O,enabledBuiltinNames:[...u].map(e=>e.includes("/")?e.slice(e.indexOf("/")+1):e)}}var eQ=e.i(47756),eV=e.i(48480),eG=e.i(29095),eK=e.i(46501),eX=e.i(60526);let eZ=new Set(a.INTEGRATION_TYPES);async function e0(e){await (0,eK.initTelemetry)();let i={};try{let n=await e.text();if(n.trim().length>0){let e=JSON.parse(n);if(null===e||"object"!=typeof e||Array.isArray(e))return(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"non_object_body"}),t.NextResponse.json({error:"Request body must be a JSON object"},{status:400});i=e}}catch{return(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"invalid_json"}),t.NextResponse.json({error:"Invalid JSON body"},{status:400})}let n=function(e){let t={};if("string"==typeof e.since&&e.since.trim()&&(t.since=e.since.trim()),Array.isArray(e.cli)&&e.cli.length>0){let i=e.cli.filter(e=>"string"==typeof e&&eZ.has(e));i.length>0&&(t.clis=i)}return Array.isArray(e.project)&&e.project.length>0&&(t.projects=e.project.filter(e=>"string"==typeof e)),Array.isArray(e.policy)&&e.policy.length>0&&(t.policies=e.policy.filter(e=>"string"==typeof e)),!0===e.noCache&&(t.noCache=!0),t}(i);if(!(0,eV.tryAcquireRun)())return(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"already_running"}),t.NextResponse.json({error:"Audit already running",status:"already-running"},{status:409});let s=(0,eG.acquireAuditLock)("dashboard");if(!s.ok)return(0,eV.finishRun)(null),(0,eK.trackEvent)("audit_run_rejected",{source:"dashboard",reason:"cross_process_lock"}),t.NextResponse.json({error:"Audit already running",status:"already-running"},{status:409});(0,eK.trackEvent)("audit_run_started",{source:"dashboard",since:n.since??null,no_cache:!0===n.noCache,cli_count:n.clis?.length??0,project_count:n.projects?.length??0});let o=Date.now();return(async()=>{try{let e=await eY(n),t=(0,eQ.writeDashboardCache)(n,e);(0,eK.trackEvent)("audit_run_completed",{source:"dashboard",duration_ms:Date.now()-o,events_scanned:e.eventsScanned,sessions_scanned:e.transcripts.scanned,projects_scanned:e.projectsScanned.length,findings:e.results.length,total_hits:e.totals.hits,persisted:t}),(0,eV.finishRun)(t?null:"audit finished but its result could not be saved")}catch(e){(0,eK.trackEvent)("audit_run_failed",{source:"dashboard",duration_ms:Date.now()-o,error_type:e instanceof Error?e.name:"unknown",error_message:function(e){let t;try{t=e instanceof Error?e.message:String(e)}catch{return"unknown"}if(!t)return"";let i="";try{i=eX.default.homedir()}catch{}return i&&i.length>1&&(t=t.split(i).join("~")),t.length>300&&(t=t.slice(0,300)+"…"),t}(e)}),(0,eV.finishRun)(e instanceof Error?e.message:String(e))}finally{s.lock.release()}})(),t.NextResponse.json({status:"started"},{status:202})}e.s(["POST",0,e0,"dynamic",0,"force-dynamic"],97610)},89498,e=>{"use strict";var t=e.i(47909),i=e.i(74017),n=e.i(96250),s=e.i(59756),o=e.i(61916),r=e.i(74677),a=e.i(69741),c=e.i(16795),l=e.i(87718),d=e.i(95169),u=e.i(47587),p=e.i(66012),f=e.i(70101),m=e.i(26937),y=e.i(10372),h=e.i(93695);e.i(52474);var g=e.i(220);let N=new t.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/audit/run/route",pathname:"/api/audit/run",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/audit/run/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(97610),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:S,serverHooks:v}=N;async function O(e,t,n){n.requestMeta&&(0,s.setRequestMeta)(e,n.requestMeta),N.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/audit/run/route";w=w.replace(/\/index$/,"")||"/";let S=await N.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!S)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:v,deploymentId:O,params:I,nextConfig:b,parsedUrl:T,isDraftMode:x,prerenderManifest:P,routerServerContext:j,isOnDemandRevalidate:C,revalidateOnlyGenerated:E,resolvedPathname:R,clientReferenceManifest:A,serverActionsManifest:k}=S,M=(0,a.normalizeAppPath)(w),_=!!(P.dynamicRoutes[M]||P.routes[R]),$=async()=>((null==j?void 0:j.render404)?await j.render404(e,t,T,!1):t.end("This page could not be found"),null);if(_&&!x){let e=!!P.routes[R],t=P.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await $();throw new h.NoFallbackError}}let B=null;!_||N.isDev||x||(B="/index"===(B=R)?"/":B);let D=!0===N.isDev||!_,U=_&&!D;k&&A&&(0,r.setManifestsSingleton)({page:w,clientReferenceManifest:A,serverActionsManifest:k});let L=e.method||"GET",J=(0,o.getTracer)(),q=J.getActiveScopeSpan(),W=!!(null==j?void 0:j.isWrappedByNextServer),z=!!(0,s.getRequestMeta)(e,"minimalMode"),F=(0,s.getRequestMeta)(e,"incrementalCache")||await N.getIncrementalCache(e,b,P,z);null==F||F.resetRequestCache(),globalThis.__incrementalCache=F;let Y={params:I,previewProps:P.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts,useCacheTimeout:b.experimental.useCacheTimeout},cacheComponents:!!b.cacheComponents,validationLevel:b.experimental.instantInsights.validationLevel,supportsDynamicResponse:D,incrementalCache:F,hmrRefreshHash:(0,s.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:b.cacheLife,staticPageGenerationTimeout:b.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,i,n,s)=>N.onRequestError(e,t,n,s,j)},sharedContext:{buildId:v,deploymentId:O}},H=new c.NodeNextRequest(e),Q=new c.NodeNextResponse(t),V=l.NextRequestAdapter.fromNodeNextRequest(H,(0,l.signalFromNodeResponse)(t)),G=async({previousCacheEntry:i})=>{try{if(!z&&C&&E&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await N.handle(V,Y);e.fetchMetrics=Y.renderOpts.fetchMetrics;let o=Y.renderOpts.pendingWaitUntil;o&&n.waitUntil&&(n.waitUntil(o),o=void 0);let r=Y.renderOpts.collectedTags;if(!_)return await (0,p.sendResponse)(H,Q,s,o),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);r&&(t[y.NEXT_CACHE_TAGS_HEADER]=r),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let i=void 0!==Y.renderOpts.collectedRevalidate&&!(Y.renderOpts.collectedRevalidate>=y.INFINITE_CACHE)&&Y.renderOpts.collectedRevalidate,n=void 0===Y.renderOpts.collectedExpire||Y.renderOpts.collectedExpire>=y.INFINITE_CACHE?!1!==i&&i>0?b.expireTime:void 0:Y.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:i,expire:n}}}}catch(t){throw(null==i?void 0:i.isStale)&&await N.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:C})},!1,j),t}},K=async(s,r)=>{try{var a,c;let s=await N.handleResponse({req:e,nextConfig:b,cacheKey:B,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:P,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:E,responseGenerator:G,waitUntil:n.waitUntil,isMinimalMode:z});if(!_)return;if((null==s||null==(a=s.value)?void 0:a.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==s||null==(c=s.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});z||t.setHeader("x-nextjs-cache",C?"REVALIDATED":s.isMiss?"MISS":s.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,f.fromNodeOutgoingHttpHeaders)(s.value.headers);z&&_||o.delete(y.NEXT_CACHE_TAGS_HEADER),!s.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,m.getCacheControlHeader)(s.cacheControl)),await (0,p.sendResponse)(H,Q,new Response(s.value.body,{headers:o,status:s.value.status||200}));return}catch(t){if(t instanceof h.NoFallbackError||await N.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:C})},!1,j),_)throw t;await (0,p.sendResponse)(H,Q,new Response(null,{status:500}));return}finally{(()=>{if(!s)return;let e=t.statusCode;s.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(s.setStatus({code:o.SpanStatusCode.ERROR}),s.setAttribute("error.type",e.toString()));let i=J.getRootSpanAttributes();if(!i)return;if(i.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${i.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=i.get("next.route")||M,a=`${L} ${n}`;s.setAttributes({"next.route":n,"http.route":n,"next.span_name":a}),s.updateName(a),r&&r!==s&&(r.setAttribute("http.route",n),r.updateName(a))})()}};if(W&&q)await K(q,void 0);else{let t=J.getActiveScopeSpan();await J.withPropagatedContext(e.headers,()=>J.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:o.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>K(e,t)),void 0,!W)}}e.s(["handler",0,O,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:S})},"routeModule",0,N,"serverHooks",0,v,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,S])}];
32
32
 
33
33
  //# sourceMappingURL=_1ek68ln._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[93133,(e,i,t)=>{i.exports={name:"failproofai",version:"1.0.8-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.0","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.8-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.8-beta.0"},failproofaidBinaries:{"linux-x64":"35b641f60e1724513fbb760db382123dad2b5fcdd67dda6373bda80651bd36bb","linux-arm64":"a058288f5d08f99612f053793e5c7f59264d3da97f3dbe769e401b0f8536702d","darwin-x64":"b4f3dbe4aea44e77cc10839647c0dc03a1b8b797dfb27e1d89a6a96554ef27b8","darwin-arm64":"fd42f28bf92001d39117b488a215578b966f07d316214744aca64a1888f2aed2"}}}];
1
+ module.exports=[93133,(e,i,t)=>{i.exports={name:"failproofai",version:"1.0.9-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.1","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.9-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.9-beta.0"},failproofaidBinaries:{"linux-x64":"044b6619007227b8aa1fc1095b8c61a17bd90e11da53183ac1f5adecdcae6839","linux-arm64":"479450d7d15c52a59bd1a8cf4c7086be9210e8d31ad4f98d99b123f571e944bd","darwin-x64":"11562912ff726195bfb966ed24a774ffea38d01acc3edc1f9bfa3ea9c298977f","darwin-arm64":"5bbaee1ec89d2d8032b7f16e502fb96891fbc6aa2ee6c861f43a64a0a60e61ba"}}}];
2
2
 
3
3
  //# sourceMappingURL=package_json_%5Bjson%5D_cjs_1nxcc4v._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[16774,99891,98901,52306,e=>{"use strict";let r;var t=e.i(66680),i=e.i(2157),o=e.i(50227),n=e.i(24214),a=e.i(79857);e.i(97348);let s=new Set(["destructive-deletion","production-infra-change","git-history-rewrite","push-to-protected-branch","commit-on-protected-branch","secret-exposure","credential-exfiltration","remote-code-execution","privilege-escalation","database-destruction","read-outside-workspace","agent-config-tampering","system-modification","env-secrets-dump","external-destructive-action","external-data-egress"]),c=e=>"string"==typeof e&&e.length>0;function l(e){let r={};("hard"===e.authority||"reviewable"===e.authority)&&(r.authority=e.authority);let t=e.reviewedBy;return Array.isArray(t)&&t.length>0&&t.every(c)&&(r.reviewedBy=[...t]),r}e.s(["SEMANTIC_REVIEWER_NAMES",0,s,"authorityFieldsOf",0,l,"resolvePolicyAuthority",0,function(e,r=s,t){let i=e?.authority==="reviewable";if(!e||"hard"==(!0!==e.alwaysOn&&"reviewable"===e.authority&&Array.isArray(e.reviewedBy)&&e.reviewedBy.filter(e=>"string"==typeof e&&e.length>0).length>0?"reviewable":"hard")){var o;return i?{authority:"hard",downgraded:!0===(o=e).alwaysOn?"it is alwaysOn, and the self-protection guard is never reviewable":Array.isArray(o.reviewedBy)&&0!==o.reviewedBy.length?"reviewedBy is not a list of semantic policy names":"reviewedBy does not name any semantic policy"}:{authority:"hard"}}let n=e.reviewedBy;if(!n.every(c))return{authority:"hard",downgraded:"reviewedBy is not a list of semantic policy names"};let a=n.filter(e=>!r.has(e));return a.length>0?{authority:"hard",downgraded:`reviewedBy names ${a.map(e=>(function(e,r,t){let i=JSON.stringify(e),o=t?.get(e);if(o)return`${i}, which packs ${o.join(" and ")} declare differently, so it is asked for neither`;if(r===s)return`${i}, which is not a semantic policy in this build`;let n=[...r].sort(),a=n.length>6?`${n.slice(0,6).join(", ")} and ${n.length-6} more`:n.join(", ");return`${i}, which is not among the Jev checks it is judged against (${a})`})(e,r,t)).join("; ")}`}:{authority:"reviewable",reviewedBy:[...new Set(n)]}}],99891);let f=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/,d=/^(?:0|[1-9]\d*)$/;function p(e){if("string"!=typeof e)return null;let r=f.exec(e);return r?{major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3]),prerelease:void 0===r[4]?[]:r[4].split(".").map(e=>d.test(e)?Number(e):e)}:null}let h=(e,r)=>e<r?-1:+(e>r),u=["always","protected_branch","in_git_repo","has_paths","paths_outside_project","system_or_root_paths"];function y(e){return"string"==typeof e&&u.includes(e)}e.s(["PACK_PRECONDITION_NAMES",0,u,"isPackPreconditionName",0,y],98901);let m=[1],g=/^[a-f0-9]{64}$/,w=/^[A-Za-z0-9._-]{1,64}\/[A-Za-z0-9._-]{1,64}$/,$=/^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$/,v=/^[0-9a-f]{7,40}$/,b=/^[A-Za-z0-9._-]{1,128}$/,A=/^[a-z][a-z0-9_]{0,31}$/,O=new Set(["exempt","user_asked"]),E=new Set(["shell","write","read","network","other"]),k=new Set(["string","number","boolean","string[]","pattern[]"]);function S(e,r,t,i){if("string"!=typeof t||0===t.length)throw Error(`${e} is missing ${r}`);if(t.length>i)throw Error(`${e} has a ${r} of ${t.length} characters, over the ${i}-character cap`);return t}function j(e,r,t){let i;if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`${e} is not an object`);if(null!==t)i=t;else{if("string"!=typeof r.id||!A.test(r.id))throw Error(`${e} has an unsafe id ${JSON.stringify(r.id)}`);if(O.has(r.id))throw Error(`${e} uses the reserved probe id ${JSON.stringify(r.id)}`);i=r.id}let o=S(e,"instructions",r.instructions,600);if(void 0===r.criteria)return{id:i,instructions:o};if(!r.criteria||"object"!=typeof r.criteria||Array.isArray(r.criteria))throw Error(`${e} has criteria that is not an object`);let n=r.criteria;return{id:i,instructions:o,criteria:{true:S(e,"criteria.true",n.true,300),false:S(e,"criteria.false",n.false,300)}}}function P(){let e,r=process.env.FAILPROOFAI_PACK_DIR?(0,o.resolve)(process.env.FAILPROOFAI_PACK_DIR,"installed.json"):(0,a.packsInstalledFile)();if(!(0,i.existsSync)(r))return{packs:[],errors:[]};try{e=JSON.parse((0,i.readFileSync)(r,"utf8"))}catch(e){return{packs:[],errors:[{id:null,reason:`unreadable pack manifest: ${_(e)}`}]}}if(!e||"object"!=typeof e)return{packs:[],errors:[{id:null,reason:"pack manifest is not an object"}]};let s=e;if(!m.includes(s.schemaVersion))return{packs:[],errors:[{id:null,reason:`unsupported pack manifest schema ${String(s.schemaVersion)} (supported: ${m.join(", ")})`}]};if(!Array.isArray(s.packs))return{packs:[],errors:[{id:null,reason:"pack manifest packs is not an array"}]};let c=process.env.FAILPROOFAI_PACK_DIR??(0,a.packsDir)(),f=[],d=[],A=[],O=new Set;for(let e of s.packs){let r=e&&"object"==typeof e&&"string"==typeof e.id?e.id:null,a=[];try{let r=function(e,r,a){if(!r||"object"!=typeof r)throw Error("pack entry is not an object");let s=function(e){if("string"!=typeof e.id||!w.test(e.id))throw Error(`unsafe pack id ${JSON.stringify(e.id)}`);if("string"!=typeof e.version||!$.test(e.version))throw Error(`invalid version for pack ${e.id}`);if(void 0!==e.effect&&"enforce"!==e.effect&&"observe"!==e.effect)throw Error(`unknown effect ${JSON.stringify(e.effect)} for pack ${e.id}`);let r="string"==typeof e.commit&&v.test(e.commit.trim().toLowerCase())?e.commit.trim().toLowerCase():void 0;return{id:e.id,version:e.version,effect:e.effect??"enforce",...r?{commit:r}:{}}}(r);if("string"!=typeof r.source||0===r.source.length)throw Error(`pack ${r.id} has no source`);if("string"!=typeof r.sha256||!g.test(r.sha256))throw Error(`invalid SHA-256 for pack ${r.id}`);let c=s.effect,f=function(e,r,t=n.version){if(void 0===r)return{kind:"satisfied"};let i=function(e,r){let t=p(e),i=p(r);return t&&i?h(t.major,i.major)||h(t.minor,i.minor)||h(t.patch,i.patch)||function(e,r){if(0===e.length&&0===r.length)return 0;if(0===e.length)return 1;if(0===r.length)return -1;for(let t=0;t<Math.min(e.length,r.length);t++){let i=e[t],o=r[t];if(i===o)continue;let n="number"==typeof i,a="number"==typeof o;if(n!==a)return n?-1:1;if(n&&a)return h(i,o);return i<o?-1:1}return h(e.length,r.length)}(t.prerelease,i.prerelease):null}(t,r);return null===i?{kind:"unreadable",reason:`pack ${e} declares minCliVersion ${JSON.stringify(r)}, which is not a version this CLI can compare against its own (${t}) — the requirement was ignored`}:i<0?{kind:"too-old",reason:`pack ${e} needs failproofai ${String(r)} or newer and this is ${t} — run \`npm i -g "failproofai@>=${String(r)}" && failproofai update\``}:{kind:"satisfied",declared:r}}(s.id,r.minCliVersion);if("too-old"===f.kind)throw Error(f.reason);"unreadable"===f.kind&&a.push(f.reason);let d=function(e,r){if(!r||(0,o.isAbsolute)(r))throw Error(`unsafe managed policy path ${JSON.stringify(r)}`);let t=(0,o.resolve)(e,r),n=(0,o.relative)(e,t);if(n.startsWith("..")||(0,o.isAbsolute)(n))throw Error(`managed policy path escapes its root: ${JSON.stringify(r)}`);let a=(0,i.realpathSync)(e),s=(0,i.realpathSync)(t),c=(0,o.relative)(a,s);if(c.startsWith("..")||(0,o.isAbsolute)(c))throw Error(`managed policy symlink escapes its root: ${JSON.stringify(r)}`);return s}(e,r.entry),m=(0,t.createHash)("sha256").update((0,i.readFileSync)(d)).digest("hex");if(m!==r.sha256)throw Error(`pack ${r.id} failed integrity verification: expected ${r.sha256}, got ${m}`);if(!Array.isArray(r.policies))throw Error(`pack ${r.id} policies is not an array`);let A=r.policies.map((e,t)=>(function(e,r,t,i){let o=`${e} policy #${t}`;if(!r||"object"!=typeof r)throw Error(`${o} is not an object`);let n=r.name;if("string"!=typeof n||!b.test(n))throw Error(`${o} has an unsafe name ${JSON.stringify(n)}`);if("alwaysOn"in r)throw Error(`${o} declares alwaysOn, which packs may not set`);if("string"!=typeof r.description||0===r.description.length)throw Error(`${o} is missing a description`);if("string"!=typeof r.category||0===r.category.length)throw Error(`${o} is missing a category`);if("boolean"!=typeof r.defaultEnabled)throw Error(`${o} is missing defaultEnabled`);if(!r.match||"object"!=typeof r.match)throw Error(`${o} is missing a match`);let a=r.match;for(let e of["events","toolNames"]){let r=a[e];if(void 0!==r&&(!Array.isArray(r)||r.some(e=>"string"!=typeof e||0===e.length)))throw Error(`${o} has a match.${e} that is not a list of names`)}let s=l(r),c=["authority","reviewedBy"].filter(e=>e in r&&!(e in s));if("params"in r){let e=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return"params is not an object";for(let[r,t]of Object.entries(e)){if(0===r.length)return"params has an empty parameter name";if(!t||"object"!=typeof t||Array.isArray(t))return`params.${r} is not an object`;if("string"!=typeof t.type||!k.has(t.type))return`params.${r} has type ${JSON.stringify(t.type)}, which is not one of ${[...k].join(", ")}`;if("string"!=typeof t.description||0===t.description.length)return`params.${r} is missing a description`;if(!("default"in t))return`params.${r} is missing a default`}}(r.params);e&&(i?.push(`${o} declares a params schema that was dropped: ${e}`),c.push("params"))}return c.length>0?Object.fromEntries(Object.entries(r).filter(([e])=>!c.includes(e))):r})(r.id,e,t,a)),O=new Set;for(let e of A){if(O.has(e.name))throw Error(`pack ${r.id} declares ${e.name} twice`);O.add(e.name)}let P=null;if(void 0!==r.enabled){if(!Array.isArray(r.enabled)||r.enabled.some(e=>"string"!=typeof e))throw Error(`pack ${r.id} enabled is not an array of names`);P=r.enabled.filter(e=>O.has(e))}let N=null;if(void 0!==r.clis){if(!Array.isArray(r.clis)||r.clis.some(e=>"string"!=typeof e))throw Error(`pack ${r.id} clis is not an array of agent names`);N=r.clis}return{clis:N,id:s.id,version:s.version,source:r.source,path:d,sha256:r.sha256,effect:c,policies:A,semantic:function(e,r,t){if(void 0===r)return[];if(!Array.isArray(r))return t.push(`pack ${e} semantic is not an array, so none of it was loaded`),[];let i=[],o=new Set;for(let[n,a]of r.entries()){if(i.length>=24){t.push(`pack ${e} declares more than 24 semantic policies; the ${r.length-24} past that cap were dropped`);break}try{let r=function(e,r,t){let i=`${e} semantic policy #${t}`;if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`${i} is not an object`);let o=r.name;if("string"!=typeof o||!b.test(o))throw Error(`${i} has an unsafe name ${JSON.stringify(o)}`);if("alwaysOn"in r)throw Error(`${i} declares alwaysOn, which packs may not set`);let n=S(`${e} semantic policy ${o}`,"title",r.title,120),a=`${e} semantic policy ${o}`;if(!Array.isArray(r.appliesTo)||0===r.appliesTo.length)throw Error(`${a} has no appliesTo tool classes`);let s=r.appliesTo.find(e=>"string"!=typeof e||!E.has(e));if(void 0!==s)throw Error(`${a} applies to ${JSON.stringify(s)}, which is not a tool class (${[...E].join(", ")})`);if("deny"!==r.mode&&"instruct"!==r.mode)throw Error(`${a} has mode ${JSON.stringify(r.mode)}, which must be "deny" or "instruct"`);if("boolean"!=typeof r.userCanOverride)throw Error(`${a} is missing userCanOverride, which has no default`);if(!Array.isArray(r.probes)||0===r.probes.length)throw Error(`${a} declares no probes`);if(r.probes.length>6)throw Error(`${a} declares ${r.probes.length} probes, over the cap of 6`);let c=r.probes.map((e,r)=>j(`${a} probe #${r}`,e,null)),l=new Set;for(let e of c){if(l.has(e.id))throw Error(`${a} declares probe ${e.id} twice`);l.add(e.id)}let f=void 0===r.exempt?void 0:j(`${a} exempt`,r.exempt,"exempt");if(void 0!==r.precondition&&!y(r.precondition))throw Error(`${a} names precondition ${JSON.stringify(r.precondition)}, which this build does not have (${u.join(", ")})`);let d=S(a,"guidance",r.guidance,600);return{name:o,title:n,appliesTo:r.appliesTo,mode:r.mode,userCanOverride:r.userCanOverride,probes:c,...f?{exempt:f}:{},...void 0!==r.precondition?{precondition:r.precondition}:{},guidance:d}}(e,a,n);if(o.has(r.name))throw Error(`pack ${e} declares semantic policy ${r.name} twice`);o.add(r.name),i.push(r)}catch(e){t.push(_(e))}}return i}(s.id,r.semantic,a),..."satisfied"===f.kind&&f.declared?{minCliVersion:f.declared}:{},enabled:P}}(c,e,a);if(O.has(r.id))throw Error(`duplicate pack id ${r.id}`);O.add(r.id),f.push(r),A.push(...a)}catch(i){let t=e&&("observe"===e.effect||"enforce"===e.effect)?e.effect:"enforce";d.push({id:r,reason:_(i),effect:t,...Array.isArray(e?.policies)?{declared:function(e){let r=[];for(let t of e)t&&"object"==typeof t&&"string"==typeof t.name&&t.match&&"object"==typeof t.match&&r.push(t);return r}(e.policies)}:{},...Array.isArray(e?.policies)&&0===e.policies.length?{semanticOnly:!0}:{},...Array.isArray(e?.clis)&&e.clis.every(e=>"string"==typeof e)?{clis:e.clis}:{}})}}return{packs:f,errors:d,...A.length>0?{warnings:A}:{}}}function _(e){return e instanceof Error?e.message:String(e)}e.s(["readInstalledPacks",0,P,"semanticQuestions",0,function(e){return e.exempt?[...e.probes,e.exempt]:e.probes}],52306);let N=null;function I(e){let r=new Map,t=new Map;for(let i of e)for(let e of i.semantic??[]){if(C(i,e.name))continue;let o=function e(r){if(Array.isArray(r))return`[${r.map(e).join(",")}]`;if(null!==r&&"object"==typeof r){let t=Object.entries(r).filter(([,e])=>void 0!==e).sort(([e],[r])=>e<r?-1:+(e>r));return`{${t.map(([r,t])=>`${JSON.stringify(r)}:${e(t)}`).join(",")}}`}return JSON.stringify(r)??"null"}(e),n=r.get(e.name);if(void 0===n){r.set(e.name,{form:o,ids:[i.id]});continue}n.ids.push(i.id),n.form!==o&&t.set(e.name,n.ids)}return t}function F(e){return/^github:FailproofAI\//i.test(e.source??"")}function C(e,r){return s.has(r)&&!F(e)}e.s(["effectiveReviewerNames",0,function(){if(N)return N;let e=s;try{var t,i,o;let n,a,c=(t=P().packs,i=r,t.filter(e=>"observe"!==e.effect&&!(i&&Array.isArray(e.clis)&&e.clis.length>0&&!e.clis.includes(i))));o=c,n=I(o),a=o.flatMap(e=>(e.semantic??[]).filter(r=>!C(e,r.name)).map(e=>e.name)).filter(e=>!n.has(e)),e=0===a.length?s:new Set(o.some(e=>F(e)&&(e.semantic??[]).length>0)?a:[...s,...a]),I(c)}catch{}return N=e,e},"forgetEffectiveReviewerNames",0,function(e){N=null,r=e}],16774)},97348,e=>{"use strict";var r=e.i(2157),t=e.i(50227),i=e.i(79857);let o={info:0,warn:1,error:2},n=(0,i.logsDir)(),a=!1,s="warn",c=!1,l=n;function f(e){return!function(){if(a)return;a=!0;let e=(process.env.FAILPROOFAI_LOG_LEVEL??"").toLowerCase();("info"===e||"warn"===e||"error"===e)&&(s=e);let r=(process.env.FAILPROOFAI_HOOK_LOG_FILE??"").trim();r&&(c=!0,"1"!==r&&"true"!==r&&(l=r))}(),o[e]>=o[s]}function d(e,r){process.stderr.write(`[failproofai:hook] ${e} ${r}
1
+ module.exports=[16774,99891,98901,52306,e=>{"use strict";let r;var t=e.i(66680),i=e.i(2157),o=e.i(50227),n=e.i(24214),a=e.i(79857);e.i(97348);let s=new Set(["destructive-deletion","production-infra-change","git-history-rewrite","push-to-protected-branch","commit-on-protected-branch","secret-exposure","credential-exfiltration","remote-code-execution","privilege-escalation","database-destruction","read-outside-workspace","agent-config-tampering","system-modification","env-secrets-dump","external-destructive-action","external-data-egress"]),c=new Set,l=e=>"string"==typeof e&&e.length>0;function f(e){let r={};("hard"===e.authority||"reviewable"===e.authority)&&(r.authority=e.authority);let t=e.reviewedBy;return Array.isArray(t)&&t.length>0&&t.every(l)&&(r.reviewedBy=[...t]),r}e.s(["NO_REVIEWERS",0,c,"SEMANTIC_REVIEWER_NAMES",0,s,"authorityFieldsOf",0,f,"resolvePolicyAuthority",0,function(e,r=c,t){let i=e?.authority==="reviewable";if(!e||"hard"==(!0!==e.alwaysOn&&"reviewable"===e.authority&&Array.isArray(e.reviewedBy)&&e.reviewedBy.filter(e=>"string"==typeof e&&e.length>0).length>0?"reviewable":"hard")){var o;return i?{authority:"hard",downgraded:!0===(o=e).alwaysOn?"it is alwaysOn, and the self-protection guard is never reviewable":Array.isArray(o.reviewedBy)&&0!==o.reviewedBy.length?"reviewedBy is not a list of semantic policy names":"reviewedBy does not name any semantic policy"}:{authority:"hard"}}let n=e.reviewedBy;if(!n.every(l))return{authority:"hard",downgraded:"reviewedBy is not a list of semantic policy names"};let a=n.filter(e=>!r.has(e));return 0!==r.size||a.some(e=>t?.has(e))?a.length>0?{authority:"hard",downgraded:`reviewedBy names ${a.map(e=>(function(e,r,t){let i=JSON.stringify(e),o=t?.get(e);if(o)return`${i}, which packs ${o.join(" and ")} declare differently, so it is asked for neither`;if(r===s)return`${i}, which is not a semantic policy in this build`;let n=[...r].sort(),a=n.length>6?`${n.slice(0,6).join(", ")} and ${n.length-6} more`:n.join(", ");return`${i}, which is not among the Jev checks it is judged against (${a})`})(e,r,t)).join("; ")}`}:{authority:"reviewable",reviewedBy:[...new Set(n)]}:{authority:"hard"}}],99891);let d=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/,p=/^(?:0|[1-9]\d*)$/;function h(e){if("string"!=typeof e)return null;let r=d.exec(e);return r?{major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3]),prerelease:void 0===r[4]?[]:r[4].split(".").map(e=>p.test(e)?Number(e):e)}:null}let u=(e,r)=>e<r?-1:+(e>r),y=["always","protected_branch","in_git_repo","has_paths","paths_outside_project","system_or_root_paths"];function m(e){return"string"==typeof e&&y.includes(e)}e.s(["PACK_PRECONDITION_NAMES",0,y,"isPackPreconditionName",0,m],98901);let g=[1],w=/^[a-f0-9]{64}$/,$=/^[A-Za-z0-9._-]{1,64}\/[A-Za-z0-9._-]{1,64}$/,v=/^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$/,b=/^[0-9a-f]{7,40}$/,A=/^[A-Za-z0-9._-]{1,128}$/,O=/^[a-z][a-z0-9_]{0,31}$/,E=new Set(["exempt","user_asked"]),S=new Set(["shell","write","read","network","other"]),k=new Set(["string","number","boolean","string[]","pattern[]"]);function j(e,r,t,i){if("string"!=typeof t||0===t.length)throw Error(`${e} is missing ${r}`);if(t.length>i)throw Error(`${e} has a ${r} of ${t.length} characters, over the ${i}-character cap`);return t}function P(e,r,t){let i;if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`${e} is not an object`);if(null!==t)i=t;else{if("string"!=typeof r.id||!O.test(r.id))throw Error(`${e} has an unsafe id ${JSON.stringify(r.id)}`);if(E.has(r.id))throw Error(`${e} uses the reserved probe id ${JSON.stringify(r.id)}`);i=r.id}let o=j(e,"instructions",r.instructions,600);if(void 0===r.criteria)return{id:i,instructions:o};if(!r.criteria||"object"!=typeof r.criteria||Array.isArray(r.criteria))throw Error(`${e} has criteria that is not an object`);let n=r.criteria;return{id:i,instructions:o,criteria:{true:j(e,"criteria.true",n.true,300),false:j(e,"criteria.false",n.false,300)}}}function _(){let e,r=process.env.FAILPROOFAI_PACK_DIR?(0,o.resolve)(process.env.FAILPROOFAI_PACK_DIR,"installed.json"):(0,a.packsInstalledFile)();if(!(0,i.existsSync)(r))return{packs:[],errors:[]};try{e=JSON.parse((0,i.readFileSync)(r,"utf8"))}catch(e){return{packs:[],errors:[{id:null,reason:`unreadable pack manifest: ${N(e)}`}]}}if(!e||"object"!=typeof e)return{packs:[],errors:[{id:null,reason:"pack manifest is not an object"}]};let s=e;if(!g.includes(s.schemaVersion))return{packs:[],errors:[{id:null,reason:`unsupported pack manifest schema ${String(s.schemaVersion)} (supported: ${g.join(", ")})`}]};if(!Array.isArray(s.packs))return{packs:[],errors:[{id:null,reason:"pack manifest packs is not an array"}]};let c=process.env.FAILPROOFAI_PACK_DIR??(0,a.packsDir)(),l=[],d=[],p=[],O=new Set;for(let e of s.packs){let r=e&&"object"==typeof e&&"string"==typeof e.id?e.id:null,a=[];try{let r=function(e,r,a){if(!r||"object"!=typeof r)throw Error("pack entry is not an object");let s=function(e){if("string"!=typeof e.id||!$.test(e.id))throw Error(`unsafe pack id ${JSON.stringify(e.id)}`);if("string"!=typeof e.version||!v.test(e.version))throw Error(`invalid version for pack ${e.id}`);if(void 0!==e.effect&&"enforce"!==e.effect&&"observe"!==e.effect)throw Error(`unknown effect ${JSON.stringify(e.effect)} for pack ${e.id}`);let r="string"==typeof e.commit&&b.test(e.commit.trim().toLowerCase())?e.commit.trim().toLowerCase():void 0;return{id:e.id,version:e.version,effect:e.effect??"enforce",...r?{commit:r}:{}}}(r);if("string"!=typeof r.source||0===r.source.length)throw Error(`pack ${r.id} has no source`);if("string"!=typeof r.sha256||!w.test(r.sha256))throw Error(`invalid SHA-256 for pack ${r.id}`);let c=s.effect,l=function(e,r,t=n.version){if(void 0===r)return{kind:"satisfied"};let i=function(e,r){let t=h(e),i=h(r);return t&&i?u(t.major,i.major)||u(t.minor,i.minor)||u(t.patch,i.patch)||function(e,r){if(0===e.length&&0===r.length)return 0;if(0===e.length)return 1;if(0===r.length)return -1;for(let t=0;t<Math.min(e.length,r.length);t++){let i=e[t],o=r[t];if(i===o)continue;let n="number"==typeof i,a="number"==typeof o;if(n!==a)return n?-1:1;if(n&&a)return u(i,o);return i<o?-1:1}return u(e.length,r.length)}(t.prerelease,i.prerelease):null}(t,r);return null===i?{kind:"unreadable",reason:`pack ${e} declares minCliVersion ${JSON.stringify(r)}, which is not a version this CLI can compare against its own (${t}) — the requirement was ignored`}:i<0?{kind:"too-old",reason:`pack ${e} needs failproofai ${String(r)} or newer and this is ${t} — run \`npm i -g "failproofai@>=${String(r)}" && failproofai update\``}:{kind:"satisfied",declared:r}}(s.id,r.minCliVersion);if("too-old"===l.kind)throw Error(l.reason);"unreadable"===l.kind&&a.push(l.reason);let d=function(e,r){if(!r||(0,o.isAbsolute)(r))throw Error(`unsafe managed policy path ${JSON.stringify(r)}`);let t=(0,o.resolve)(e,r),n=(0,o.relative)(e,t);if(n.startsWith("..")||(0,o.isAbsolute)(n))throw Error(`managed policy path escapes its root: ${JSON.stringify(r)}`);let a=(0,i.realpathSync)(e),s=(0,i.realpathSync)(t),c=(0,o.relative)(a,s);if(c.startsWith("..")||(0,o.isAbsolute)(c))throw Error(`managed policy symlink escapes its root: ${JSON.stringify(r)}`);return s}(e,r.entry),p=(0,t.createHash)("sha256").update((0,i.readFileSync)(d)).digest("hex");if(p!==r.sha256)throw Error(`pack ${r.id} failed integrity verification: expected ${r.sha256}, got ${p}`);if(!Array.isArray(r.policies))throw Error(`pack ${r.id} policies is not an array`);let g=r.policies.map((e,t)=>(function(e,r,t,i){let o=`${e} policy #${t}`;if(!r||"object"!=typeof r)throw Error(`${o} is not an object`);let n=r.name;if("string"!=typeof n||!A.test(n))throw Error(`${o} has an unsafe name ${JSON.stringify(n)}`);if("alwaysOn"in r)throw Error(`${o} declares alwaysOn, which packs may not set`);if("string"!=typeof r.description||0===r.description.length)throw Error(`${o} is missing a description`);if("string"!=typeof r.category||0===r.category.length)throw Error(`${o} is missing a category`);if("boolean"!=typeof r.defaultEnabled)throw Error(`${o} is missing defaultEnabled`);if(!r.match||"object"!=typeof r.match)throw Error(`${o} is missing a match`);let a=r.match;for(let e of["events","toolNames"]){let r=a[e];if(void 0!==r&&(!Array.isArray(r)||r.some(e=>"string"!=typeof e||0===e.length)))throw Error(`${o} has a match.${e} that is not a list of names`)}let s=f(r),c=["authority","reviewedBy"].filter(e=>e in r&&!(e in s));if("params"in r){let e=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return"params is not an object";for(let[r,t]of Object.entries(e)){if(0===r.length)return"params has an empty parameter name";if(!t||"object"!=typeof t||Array.isArray(t))return`params.${r} is not an object`;if("string"!=typeof t.type||!k.has(t.type))return`params.${r} has type ${JSON.stringify(t.type)}, which is not one of ${[...k].join(", ")}`;if("string"!=typeof t.description||0===t.description.length)return`params.${r} is missing a description`;if(!("default"in t))return`params.${r} is missing a default`}}(r.params);e&&(i?.push(`${o} declares a params schema that was dropped: ${e}`),c.push("params"))}return c.length>0?Object.fromEntries(Object.entries(r).filter(([e])=>!c.includes(e))):r})(r.id,e,t,a)),O=new Set;for(let e of g){if(O.has(e.name))throw Error(`pack ${r.id} declares ${e.name} twice`);O.add(e.name)}let E=null;if(void 0!==r.enabled){if(!Array.isArray(r.enabled)||r.enabled.some(e=>"string"!=typeof e))throw Error(`pack ${r.id} enabled is not an array of names`);E=r.enabled.filter(e=>O.has(e))}let _=null;if(void 0!==r.clis){if(!Array.isArray(r.clis)||r.clis.some(e=>"string"!=typeof e))throw Error(`pack ${r.id} clis is not an array of agent names`);_=r.clis}return{clis:_,id:s.id,version:s.version,source:r.source,path:d,sha256:r.sha256,effect:c,policies:g,semantic:function(e,r,t){if(void 0===r)return[];if(!Array.isArray(r))return t.push(`pack ${e} semantic is not an array, so none of it was loaded`),[];let i=[],o=new Set;for(let[n,a]of r.entries()){if(i.length>=24){t.push(`pack ${e} declares more than 24 semantic policies; the ${r.length-24} past that cap were dropped`);break}try{let r=function(e,r,t){let i=`${e} semantic policy #${t}`;if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`${i} is not an object`);let o=r.name;if("string"!=typeof o||!A.test(o))throw Error(`${i} has an unsafe name ${JSON.stringify(o)}`);if("alwaysOn"in r)throw Error(`${i} declares alwaysOn, which packs may not set`);let n=j(`${e} semantic policy ${o}`,"title",r.title,120),a=`${e} semantic policy ${o}`;if(!Array.isArray(r.appliesTo)||0===r.appliesTo.length)throw Error(`${a} has no appliesTo tool classes`);let s=r.appliesTo.find(e=>"string"!=typeof e||!S.has(e));if(void 0!==s)throw Error(`${a} applies to ${JSON.stringify(s)}, which is not a tool class (${[...S].join(", ")})`);if("deny"!==r.mode&&"instruct"!==r.mode)throw Error(`${a} has mode ${JSON.stringify(r.mode)}, which must be "deny" or "instruct"`);if("boolean"!=typeof r.userCanOverride)throw Error(`${a} is missing userCanOverride, which has no default`);if(!Array.isArray(r.probes)||0===r.probes.length)throw Error(`${a} declares no probes`);if(r.probes.length>6)throw Error(`${a} declares ${r.probes.length} probes, over the cap of 6`);let c=r.probes.map((e,r)=>P(`${a} probe #${r}`,e,null)),l=new Set;for(let e of c){if(l.has(e.id))throw Error(`${a} declares probe ${e.id} twice`);l.add(e.id)}let f=void 0===r.exempt?void 0:P(`${a} exempt`,r.exempt,"exempt");if(void 0!==r.precondition&&!m(r.precondition))throw Error(`${a} names precondition ${JSON.stringify(r.precondition)}, which this build does not have (${y.join(", ")})`);let d=j(a,"guidance",r.guidance,600);return{name:o,title:n,appliesTo:r.appliesTo,mode:r.mode,userCanOverride:r.userCanOverride,probes:c,...f?{exempt:f}:{},...void 0!==r.precondition?{precondition:r.precondition}:{},guidance:d}}(e,a,n);if(o.has(r.name))throw Error(`pack ${e} declares semantic policy ${r.name} twice`);o.add(r.name),i.push(r)}catch(e){t.push(N(e))}}return i}(s.id,r.semantic,a),..."satisfied"===l.kind&&l.declared?{minCliVersion:l.declared}:{},enabled:E}}(c,e,a);if(O.has(r.id))throw Error(`duplicate pack id ${r.id}`);O.add(r.id),l.push(r),p.push(...a)}catch(i){let t=e&&("observe"===e.effect||"enforce"===e.effect)?e.effect:"enforce";d.push({id:r,reason:N(i),effect:t,...Array.isArray(e?.policies)?{declared:function(e){let r=[];for(let t of e)t&&"object"==typeof t&&"string"==typeof t.name&&t.match&&"object"==typeof t.match&&r.push(t);return r}(e.policies)}:{},...Array.isArray(e?.policies)&&0===e.policies.length?{semanticOnly:!0}:{},...Array.isArray(e?.clis)&&e.clis.every(e=>"string"==typeof e)?{clis:e.clis}:{}})}}return{packs:l,errors:d,...p.length>0?{warnings:p}:{}}}function N(e){return e instanceof Error?e.message:String(e)}e.s(["readInstalledPacks",0,_],52306);let I=null;function F(e){let r=new Map,t=new Map;for(let i of e)for(let e of i.semantic??[]){if(R(i,e.name))continue;let o=function e(r){if(Array.isArray(r))return`[${r.map(e).join(",")}]`;if(null!==r&&"object"==typeof r){let t=Object.entries(r).filter(([,e])=>void 0!==e).sort(([e],[r])=>e<r?-1:+(e>r));return`{${t.map(([r,t])=>`${JSON.stringify(r)}:${e(t)}`).join(",")}}`}return JSON.stringify(r)??"null"}(e),n=r.get(e.name);if(void 0===n){r.set(e.name,{form:o,ids:[i.id]});continue}n.ids.push(i.id),n.form!==o&&t.set(e.name,n.ids)}return t}function R(e,r){return s.has(r)&&!/^github:FailproofAI\//i.test(e.source??"")}e.s(["effectiveReviewerNames",0,function(){if(I)return I;let e=c;try{var t,i,o;let n,a,s=(t=_().packs,i=r,t.filter(e=>"observe"!==e.effect&&!(i&&Array.isArray(e.clis)&&e.clis.length>0&&!e.clis.includes(i))));o=s,n=F(o),a=o.flatMap(e=>(e.semantic??[]).filter(r=>!R(e,r.name)).map(e=>e.name)).filter(e=>!n.has(e)),e=0===a.length?c:new Set(a),F(s)}catch{}return I=e,e},"forgetEffectiveReviewerNames",0,function(e){I=null,r=e}],16774)},97348,e=>{"use strict";var r=e.i(2157),t=e.i(50227),i=e.i(79857);let o={info:0,warn:1,error:2},n=(0,i.logsDir)(),a=!1,s="warn",c=!1,l=n;function f(e){return!function(){if(a)return;a=!0;let e=(process.env.FAILPROOFAI_LOG_LEVEL??"").toLowerCase();("info"===e||"warn"===e||"error"===e)&&(s=e);let r=(process.env.FAILPROOFAI_HOOK_LOG_FILE??"").trim();r&&(c=!0,"1"!==r&&"true"!==r&&(l=r))}(),o[e]>=o[s]}function d(e,r){process.stderr.write(`[failproofai:hook] ${e} ${r}
2
2
  `)}function p(e,i){if(c)try{(0,r.existsSync)(l)||(0,r.mkdirSync)(l,{recursive:!0});let o=(0,t.join)(l,"hooks.log");try{if((0,r.statSync)(o).size>=524288){let e=`hooks-${Date.now()}.log`;(0,r.renameSync)(o,(0,t.join)(l,e))}}catch{}let n=new Date().toISOString(),a=`[${n}] ${e} ${i}
3
3
  `;(0,r.appendFileSync)(o,a,"utf-8")}catch{}}e.s(["hookLogError",0,function(e){f("error")&&(d("ERROR",e),p("ERROR",e))},"hookLogInfo",0,function(e){f("info")&&(d("INFO",e),p("INFO",e))},"hookLogWarn",0,function(e){f("warn")&&(d("WARN",e),p("WARN",e))}])},73136,49335,e=>{"use strict";var r=e.i(2157),t=e.i(50227),i=e.i(60526),o=e.i(97348),n=e.i(79857);function a(e){if(!(0,r.existsSync)(e))return{};try{let t=(0,r.readFileSync)(e,"utf8");return JSON.parse(t)}catch(r){return(0,o.hookLogWarn)(`failed to parse config at ${e}: ${r instanceof Error?r.message:String(r)}`),{}}}e.s(["readMergedHooksConfig",0,function(e){let o=function(e){let o=(0,i.homedir)(),n=(0,t.resolve)(e);for(;n!==o;){let e=(0,t.resolve)(n,".failproofai");try{if((0,r.statSync)(e).isDirectory())return n}catch{}let i=(0,t.dirname)(n);if(i===n)break;n=i}return(0,t.resolve)(e)}(e??process.cwd()),s=(0,t.resolve)(o,".failproofai","policies-config.json"),c=(0,t.resolve)(o,".failproofai","policies-config.local.json"),l=(0,n.globalPolicyConfigFile)(),f=a(s),d=a(c),p=a(l),h=new Set([...f.enabledPolicies??[],...d.enabledPolicies??[],...p.enabledPolicies??[]]),u={};for(let e of[f,d,p])if(e.policyParams)for(let[r,t]of Object.entries(e.policyParams))r in u||(u[r]=t);let y=[f,d,p].map(e=>void 0!==e.customPoliciesPaths?e.customPoliciesPaths:void 0!==e.customPoliciesPath?[e.customPoliciesPath]:void 0).find(e=>void 0!==e),m=new Set([...f.disabledCustomPolicies??[],...d.disabledCustomPolicies??[],...p.disabledCustomPolicies??[]]),g=f.customPoliciesEnabled??d.customPoliciesEnabled??p.customPoliciesEnabled,w=f.llm??d.llm??p.llm;return{enabledPolicies:[...h],...Object.keys(u).length>0?{policyParams:u}:{},...void 0!==y?{customPoliciesPaths:y}:{},...m.size?{disabledCustomPolicies:[...m]}:{},...void 0!==g?{customPoliciesEnabled:g}:{},...void 0!==w?{llm:w}:{}}}],73136);var s=e.i(24214),c=e.i(28067),l=e.i(17694);let f=c.POSTHOG_API_KEY,d=new Set;async function p(e,r,t){let i=JSON.stringify({api_key:process.env.FAILPROOFAI_POSTHOG_KEY??f,event:r,distinct_id:e,properties:{...t,$lib:"failproofai-hooks",failproofai_version:s.version,product:c.POSTHOG_PRODUCT}});try{await fetch(process.env.FAILPROOFAI_POSTHOG_HOST?`${process.env.FAILPROOFAI_POSTHOG_HOST}/capture/`:"https://us.i.posthog.com/capture/",{method:"POST",headers:{"Content-Type":"application/json"},body:i,signal:AbortSignal.timeout(5e3)})}catch{}}async function h(e,r,t){if(!(0,l.isTelemetryEnabled)())return;let i=p(e,r,t);d.add(i),i.finally(()=>d.delete(i)),await i}e.s(["trackHookEvent",0,h],49335)}];
4
4
 
@@ -1,4 +1,4 @@
1
- module.exports=[74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},36359,a=>{"use strict";var b=a.i(37936),c=a.i(69839);a.i(93328);var d=a.i(31920),e=a.i(12072);async function f(){let a=(0,d.isTelemetryEnabled)();return{enabled:a,distinctId:a?(0,c.getInstanceId)():"",apiKey:process.env.FAILPROOFAI_POSTHOG_KEY??"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX",host:process.env.FAILPROOFAI_POSTHOG_HOST??"https://us.i.posthog.com",version:e.version}}(0,a.i(13095).ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"001a2a72e76e3921760e74bf74c4a3259818d5d76c",null),a.s(["getTelemetryConfig",0,f])},31920,a=>{"use strict";var b=a.i(21572);a.s(["isTelemetryEnabled",0,function(){if("1"===process.env.FAILPROOFAI_TELEMETRY_DISABLED)return!1;try{return(0,b.readConfig)().telemetry.enabled}catch{return!0}}])},69839,a=>{"use strict";let b;var c=a.i(2157),d=a.i(50227),e=a.i(60526),f=a.i(66680);a.i(74533);var g=a.i(75818);let h=d.default.join(e.default.homedir(),".failproofai"),i=d.default.join(h,"instance-id");function j(a){return f.default.createHmac("sha256","failproofai-telemetry-v1").update(a).digest("hex")}function k(a){let b;try{if(b=(0,g.telemetryIdFile)(),c.default.readFileSync(b,"utf-8").trim()===a)return}catch{try{b=(0,g.telemetryIdFile)()}catch{return}}try{c.default.mkdirSync(d.default.dirname(b),{recursive:!0});let e=`${b}.${process.pid}.tmp`;c.default.writeFileSync(e,a,{encoding:"utf-8",mode:384}),c.default.renameSync(e,b)}catch{}}a.s(["getInstanceId",0,function(){if(b)return b;let a=function(){try{for(let a of(e.default.platform(),["/etc/machine-id","/var/lib/dbus/machine-id"]))try{let b=c.default.readFileSync(a,"utf-8").trim();if(b)return b}catch{}}catch{}}();if(a)return k(b=j(a)),b;let d=[e.default.hostname(),e.default.homedir(),e.default.platform(),e.default.arch(),e.default.cpus()[0]?.model??""].join(":");return d?k(b=j(d)):k(b=function(){try{let a=c.default.readFileSync(i,"utf-8").trim();if(a)return a}catch{}let a=f.default.randomUUID();try{c.default.mkdirSync(h,{recursive:!0}),c.default.writeFileSync(i,a,"utf-8")}catch{}return a}()),b},"hashToId",0,j])},93328,a=>{"use strict";var b=a.i(69839),c=a.i(31920),d=a.i(12072),e=a.i(79779);e.POSTHOG_API_KEY,a.s(["trackEvent",0,function(a,f){if(!(0,c.isTelemetryEnabled)())return;let g=globalThis.__FAILPROOFAI_POSTHOG__;g&&g.capture({distinctId:(0,b.getInstanceId)(),event:a,properties:{...f,$lib:"failproofai",failproofai_version:d.version,product:e.POSTHOG_PRODUCT}})}])},13095,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},37936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(11857)},12072,(a,b,c)=>{b.exports={name:"failproofai",version:"1.0.8-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.0","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.8-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.8-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.8-beta.0"},failproofaidBinaries:{"linux-x64":"35b641f60e1724513fbb760db382123dad2b5fcdd67dda6373bda80651bd36bb","linux-arm64":"a058288f5d08f99612f053793e5c7f59264d3da97f3dbe769e401b0f8536702d","darwin-x64":"b4f3dbe4aea44e77cc10839647c0dc03a1b8b797dfb27e1d89a6a96554ef27b8","darwin-arm64":"fd42f28bf92001d39117b488a215578b966f07d316214744aca64a1888f2aed2"}}},1144,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(75818);let e="current.jsonl",f=()=>(0,d.hookActivityDir)();function g(){(0,b.existsSync)(f())||(0,b.mkdirSync)(f(),{recursive:!0})}function h(){let a=function(){try{return JSON.parse((0,b.readFileSync)((0,c.join)(f(),"stats.json"),"utf-8"))}catch{return{totalEvents:0,denyCount:0,policyMap:{}}}}(),d=null,e=0;for(let[b,c]of Object.entries(a.policyMap))c>e&&(d=b,e=c);return{totalEvents:a.totalEvents,denyCount:a.denyCount,topPolicy:d,topPolicyCount:e}}function i(a){let c=function(a){try{return(0,b.readFileSync)(a,"utf-8")}catch{return""}}(a);if(!c.trim())return[];let d=[];for(let a of c.trim().split("\n"))try{var e;d.push((e=JSON.parse(a),void 0===e.cloudVersion&&"number"==typeof e.cloudRevision&&(e.cloudVersion=e.cloudRevision),void 0===e.cloudDeployment&&"number"==typeof e.cloudGeneration&&(e.cloudDeployment=e.cloudGeneration),e))}catch{}return d}function j(){try{return(0,b.readdirSync)(f()).filter(a=>a.startsWith("page-")&&a.endsWith(".jsonl")).sort((a,b)=>{let c=a.slice(5,-6).split("-"),d=b.slice(5,-6).split("-"),e=parseInt(c[0],10),f=parseInt(d[0],10);if(e!==f)return f-e;let g=c.length>1?parseInt(c[1],10):0;return(d.length>1?parseInt(d[1],10):0)-g})}catch{return[]}}a.s(["getHookActivityEntriesSince",0,function(a){g();let b=f(),d=b=>"number"==typeof b.timestamp&&b.timestamp>=a,h=new Set(j());let k=i((0,c.join)(b,e));let l=new Map;for(let a of k){let b=JSON.stringify(a);l.set(b,(l.get(b)??0)+1)}let m=a=>{let b=JSON.stringify(a),c=l.get(b)??0;return 0===c||(l.set(b,c-1),!1)},n=k.reverse().filter(d);for(let e of j()){let f=parseInt(e.slice(5,-6).split("-")[0],10);if(Number.isFinite(f)&&f<a-6e5)break;let g=i((0,c.join)(b,e));h.has(e)||(g=g.filter(m)),n.push(...g.reverse().filter(d))}return n},"getHookActivityHistory",0,function(a){let b=function(a){if(g(),a<1)return[];if(1===a)return i((0,c.join)(f(),e)).reverse();let b=j(),d=a-2;return d>=b.length?[]:i((0,c.join)(f(),b[d])).reverse()}(a);return{entries:b,totalPages:(g(),1+j().length),page:a,stats:h()}},"searchHookActivity",0,function(a,b){let d=(function(){g();let a=i((0,c.join)(f(),e)).reverse(),b=j(),d=[];for(let a of b){let b=i((0,c.join)(f(),a));d.push(...b.reverse())}return[...a,...d]})().filter(b=>(!a.decision||b.decision===a.decision)&&(!a.eventType||b.eventType===a.eventType)&&(!a.policyName||!!b.policyName&&!!b.policyName.toLowerCase().includes(a.policyName.toLowerCase()))&&(!a.sessionId||!!b.sessionId&&!!b.sessionId.toLowerCase().includes(a.sessionId.toLowerCase()))&&(!a.integration||b.integration===a.integration)&&(!a.source||b.policySource===a.source)&&!0),k=Math.max(1,Math.ceil(d.length/25)),l=(b-1)*25;return{entries:d.slice(l,l+25),totalPages:k,page:b,stats:h()}}])},79779,a=>{"use strict";a.s(["POSTHOG_API_KEY",0,"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX","POSTHOG_PRODUCT",0,"failproofai-oss"])}];
1
+ module.exports=[74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},36359,a=>{"use strict";var b=a.i(37936),c=a.i(69839);a.i(93328);var d=a.i(31920),e=a.i(12072);async function f(){let a=(0,d.isTelemetryEnabled)();return{enabled:a,distinctId:a?(0,c.getInstanceId)():"",apiKey:process.env.FAILPROOFAI_POSTHOG_KEY??"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX",host:process.env.FAILPROOFAI_POSTHOG_HOST??"https://us.i.posthog.com",version:e.version}}(0,a.i(13095).ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"0043783c8d8788c6fdf2265fdb9afe68c938bfb6ed",null),a.s(["getTelemetryConfig",0,f])},31920,a=>{"use strict";var b=a.i(21572);a.s(["isTelemetryEnabled",0,function(){if("1"===process.env.FAILPROOFAI_TELEMETRY_DISABLED)return!1;try{return(0,b.readConfig)().telemetry.enabled}catch{return!0}}])},69839,a=>{"use strict";let b;var c=a.i(2157),d=a.i(50227),e=a.i(60526),f=a.i(66680);a.i(74533);var g=a.i(75818);let h=d.default.join(e.default.homedir(),".failproofai"),i=d.default.join(h,"instance-id");function j(a){return f.default.createHmac("sha256","failproofai-telemetry-v1").update(a).digest("hex")}function k(a){let b;try{if(b=(0,g.telemetryIdFile)(),c.default.readFileSync(b,"utf-8").trim()===a)return}catch{try{b=(0,g.telemetryIdFile)()}catch{return}}try{c.default.mkdirSync(d.default.dirname(b),{recursive:!0});let e=`${b}.${process.pid}.tmp`;c.default.writeFileSync(e,a,{encoding:"utf-8",mode:384}),c.default.renameSync(e,b)}catch{}}a.s(["getInstanceId",0,function(){if(b)return b;let a=function(){try{for(let a of(e.default.platform(),["/etc/machine-id","/var/lib/dbus/machine-id"]))try{let b=c.default.readFileSync(a,"utf-8").trim();if(b)return b}catch{}}catch{}}();if(a)return k(b=j(a)),b;let d=[e.default.hostname(),e.default.homedir(),e.default.platform(),e.default.arch(),e.default.cpus()[0]?.model??""].join(":");return d?k(b=j(d)):k(b=function(){try{let a=c.default.readFileSync(i,"utf-8").trim();if(a)return a}catch{}let a=f.default.randomUUID();try{c.default.mkdirSync(h,{recursive:!0}),c.default.writeFileSync(i,a,"utf-8")}catch{}return a}()),b},"hashToId",0,j])},93328,a=>{"use strict";var b=a.i(69839),c=a.i(31920),d=a.i(12072),e=a.i(79779);e.POSTHOG_API_KEY,a.s(["trackEvent",0,function(a,f){if(!(0,c.isTelemetryEnabled)())return;let g=globalThis.__FAILPROOFAI_POSTHOG__;g&&g.capture({distinctId:(0,b.getInstanceId)(),event:a,properties:{...f,$lib:"failproofai",failproofai_version:d.version,product:e.POSTHOG_PRODUCT}})}])},13095,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},37936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(11857)},12072,(a,b,c)=>{b.exports={name:"failproofai",version:"1.0.9-beta.0",description:"Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",bin:{failproofai:"./dist/cli.mjs",failproofaid:"./bin/failproofaid-shim.mjs"},files:["bin/","src/","scripts/","lib/","pi-extension/","hermes-plugin/","openclaw-plugin/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node --external sql.js && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"","build:worker":"bun build --target=node --format=esm --outfile=dist/worker.mjs bin/failproofai-worker.mjs --external posthog-node --external sql.js",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun run build:worker && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate","validate:mdx":"bun scripts/validate-mdx.ts","docs:audit":"bun scripts/docs-audit.ts","build:pack":"bun scripts/build-policy-pack.mjs"},keywords:["agent-observability","llm-observability","agent-tracing","agent-monitoring","agent-harness","guardrails","enforcement","policies","evals","ai-agent","autonomous-agent","agent-reliability","failure-prevention","claude-code","codex","hermes","openclaw","cli","local-first","hooks"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/FailproofAI/failproofai",repository:{type:"git",url:"https://github.com/FailproofAI/failproofai.git"},bugs:{url:"https://github.com/FailproofAI/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@anthropic-ai/sdk":"^0.127.0","@mdx-js/mdx":"^3.1.1","@tailwindcss/postcss":"^4.3.1","@tanstack/react-virtual":"^3.14.10","@testing-library/jest-dom":"^7.0.0","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.5","@types/node":"26.6.1","@types/react":"19.3.0","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.1.0",clsx:"^2.1.1",eslint:"^10.9.0","eslint-config-next":"^16.3.2",jsdom:"^30.0.1","lucide-react":"^1.33.0",next:"^16.3.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.3.1",typescript:"6.0.3",vitest:"^5.0.0"},dependencies:{"html-to-image":"^1.11.13","posthog-node":"^5.50.0","sql.js":"^1.14.1",yaml:"^2.9.0"},overrides:{nanoid:"3.3.18",postcss:"8.5.26","eslint-plugin-react-hooks":"7.0.1",vite:"8.0.16",undici:"7.29.1","brace-expansion":"5.0.9",sharp:"0.35.4",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.9-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.9-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.9-beta.0"},failproofaidBinaries:{"linux-x64":"044b6619007227b8aa1fc1095b8c61a17bd90e11da53183ac1f5adecdcae6839","linux-arm64":"479450d7d15c52a59bd1a8cf4c7086be9210e8d31ad4f98d99b123f571e944bd","darwin-x64":"11562912ff726195bfb966ed24a774ffea38d01acc3edc1f9bfa3ea9c298977f","darwin-arm64":"5bbaee1ec89d2d8032b7f16e502fb96891fbc6aa2ee6c861f43a64a0a60e61ba"}}},1144,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(75818);let e="current.jsonl",f=()=>(0,d.hookActivityDir)();function g(){(0,b.existsSync)(f())||(0,b.mkdirSync)(f(),{recursive:!0})}function h(){let a=function(){try{return JSON.parse((0,b.readFileSync)((0,c.join)(f(),"stats.json"),"utf-8"))}catch{return{totalEvents:0,denyCount:0,policyMap:{}}}}(),d=null,e=0;for(let[b,c]of Object.entries(a.policyMap))c>e&&(d=b,e=c);return{totalEvents:a.totalEvents,denyCount:a.denyCount,topPolicy:d,topPolicyCount:e}}function i(a){let c=function(a){try{return(0,b.readFileSync)(a,"utf-8")}catch{return""}}(a);if(!c.trim())return[];let d=[];for(let a of c.trim().split("\n"))try{var e;d.push((e=JSON.parse(a),void 0===e.cloudVersion&&"number"==typeof e.cloudRevision&&(e.cloudVersion=e.cloudRevision),void 0===e.cloudDeployment&&"number"==typeof e.cloudGeneration&&(e.cloudDeployment=e.cloudGeneration),e))}catch{}return d}function j(){try{return(0,b.readdirSync)(f()).filter(a=>a.startsWith("page-")&&a.endsWith(".jsonl")).sort((a,b)=>{let c=a.slice(5,-6).split("-"),d=b.slice(5,-6).split("-"),e=parseInt(c[0],10),f=parseInt(d[0],10);if(e!==f)return f-e;let g=c.length>1?parseInt(c[1],10):0;return(d.length>1?parseInt(d[1],10):0)-g})}catch{return[]}}a.s(["getHookActivityEntriesSince",0,function(a){g();let b=f(),d=b=>"number"==typeof b.timestamp&&b.timestamp>=a,h=new Set(j());let k=i((0,c.join)(b,e));let l=new Map;for(let a of k){let b=JSON.stringify(a);l.set(b,(l.get(b)??0)+1)}let m=a=>{let b=JSON.stringify(a),c=l.get(b)??0;return 0===c||(l.set(b,c-1),!1)},n=k.reverse().filter(d);for(let e of j()){let f=parseInt(e.slice(5,-6).split("-")[0],10);if(Number.isFinite(f)&&f<a-6e5)break;let g=i((0,c.join)(b,e));h.has(e)||(g=g.filter(m)),n.push(...g.reverse().filter(d))}return n},"getHookActivityHistory",0,function(a){let b=function(a){if(g(),a<1)return[];if(1===a)return i((0,c.join)(f(),e)).reverse();let b=j(),d=a-2;return d>=b.length?[]:i((0,c.join)(f(),b[d])).reverse()}(a);return{entries:b,totalPages:(g(),1+j().length),page:a,stats:h()}},"searchHookActivity",0,function(a,b){let d=(function(){g();let a=i((0,c.join)(f(),e)).reverse(),b=j(),d=[];for(let a of b){let b=i((0,c.join)(f(),a));d.push(...b.reverse())}return[...a,...d]})().filter(b=>(!a.decision||b.decision===a.decision)&&(!a.eventType||b.eventType===a.eventType)&&(!a.policyName||!!b.policyName&&!!b.policyName.toLowerCase().includes(a.policyName.toLowerCase()))&&(!a.sessionId||!!b.sessionId&&!!b.sessionId.toLowerCase().includes(a.sessionId.toLowerCase()))&&(!a.integration||b.integration===a.integration)&&(!a.source||b.policySource===a.source)&&!0),k=Math.max(1,Math.ceil(d.length/25)),l=(b-1)*25;return{entries:d.slice(l,l+25),totalPages:k,page:b,stats:h()}}])},79779,a=>{"use strict";a.s(["POSTHOG_API_KEY",0,"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX","POSTHOG_PRODUCT",0,"failproofai-oss"])}];
3
3
 
4
4
  //# sourceMappingURL=%5Broot-of-the-server%5D__04usis8._.js.map