failproofai 1.0.12-beta.0 → 1.0.12-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) 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 +2 -2
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  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 +3 -3
  18. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  20. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  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 +22 -22
  23. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  31. package/.next/standalone/.next/server/app/audit/page.js +1 -1
  32. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/index.html +1 -1
  35. package/.next/standalone/.next/server/app/index.rsc +3 -3
  36. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  37. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  38. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  40. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  43. package/.next/standalone/.next/server/app/policies/page.js +4 -4
  44. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  47. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  50. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  51. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  54. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  57. package/.next/standalone/.next/server/app/settings/page.js +7 -7
  58. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/chunks/{[externals]__0-ha5ydqq0mws._.js → [externals]__0vt9i6fqinjne._.js} +1 -1
  61. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__20xe05hm5u8_1._.js → [root-of-the-server]__0f_4g-vazrvxv._.js} +1 -1
  62. package/.next/standalone/.next/server/chunks/_0hf5q4xzyg40j._.js +1 -1
  63. package/.next/standalone/.next/server/chunks/_0tovk6q0miud6._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/_0trp3ycqv17cl._.js +1 -1
  65. package/.next/standalone/.next/server/chunks/_19011-u44143j._.js +1 -1
  66. package/.next/standalone/.next/server/chunks/_1ek68lnh2daur._.js +2 -2
  67. package/.next/standalone/.next/server/chunks/{_0kc-piux3hady._.js → _1y590mjzpkbos._.js} +2 -2
  68. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4vkpxxu7._.js +1 -1
  69. package/.next/standalone/.next/server/chunks/src_hooks_0_em82s16zfym._.js +5 -0
  70. package/.next/standalone/.next/server/chunks/src_hooks_builtin-policies_ts_1yq5ybgx1v98e._.js +3 -0
  71. package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3h94wnn._.js +1 -1
  72. package/.next/standalone/.next/server/chunks/src_hooks_daemon-client_ts_0il_yu1zc0291._.js +1 -1
  73. package/.next/standalone/.next/server/chunks/src_hooks_fp-home_ts_09kv0bn_4twyh._.js +1 -1
  74. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ts0fg5yih1c1._.js → [root-of-the-server]__00l2u6j86cb8y._.js} +2 -2
  75. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08ch3staq3ejw._.js +1 -1
  76. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bigvy9xmv2ka._.js +1 -1
  77. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h86bl2qf0k_o._.js +1 -1
  78. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1_xbg2kx30wp-._.js → [root-of-the-server]__0naevg4bcoh54._.js} +1 -1
  79. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pia5h3p8re4c._.js +1 -1
  80. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pwj2h2efe5f-._.js +1 -1
  81. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-ey9fgesfbc0._.js +1 -1
  82. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15usvs-ms-0hf._.js +1 -1
  83. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16gb3_92zvk5x._.js +1 -1
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1avi2kypusyb_._.js +1 -1
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1r7drlqli-ado._.js +1 -1
  86. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0vcyntk4snf0f._.js → [root-of-the-server]__1vofkb2oq7p7e._.js} +1 -1
  87. package/.next/standalone/.next/server/chunks/ssr/_0bseae9u7g98r._.js +1 -1
  88. package/.next/standalone/.next/server/chunks/ssr/_0eoura3_9gjb-._.js +1 -1
  89. package/.next/standalone/.next/server/chunks/ssr/_0mouhaflye1ro._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/ssr/{_1gb0ifpkowwub._.js → _0ouu886szh6yj._.js} +10 -9
  91. package/.next/standalone/.next/server/chunks/ssr/_0pedwblqdoh58._.js +1 -1
  92. package/.next/standalone/.next/server/chunks/ssr/_1djqs9i27e4kg._.js +1 -1
  93. package/.next/standalone/.next/server/chunks/ssr/{_1ve8y151ua7qx._.js → _1fw0_nzkae5ao._.js} +2 -2
  94. package/.next/standalone/.next/server/chunks/ssr/_20hn4gn87nsjc._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo5_vm5f.js +2 -2
  96. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9snixb5fd-._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47q0xq5w._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/ssr/app_components_project-list_tsx_1ke6anr0vt64h._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x33jqb6._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpcz0uxur._.js +2 -2
  101. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h47jmhhd._.js +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/{node_modules_html-to-image_es_index_00jxj8foxqz5t.js → node_modules_html-to-image_es_index_1fv03uigni8s5.js} +1 -1
  103. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js +1 -1
  104. package/.next/standalone/.next/server/chunks/ssr/package_json_[json]_cjs_013tntikdft59._.js +1 -1
  105. package/.next/standalone/.next/server/chunks/ssr/src_hooks_06kzv9ddabn3_._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/src_hooks_0agdmptetetdt._.js +5 -0
  107. package/.next/standalone/.next/server/chunks/ssr/src_hooks_0mdwgjisv4fub._.js +5 -0
  108. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4l1tzrm._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/ssr/src_hooks_daemon-client_ts_0k41_i7jg6ndv._.js +1 -1
  110. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589gp4p60j._.js +1 -1
  111. package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me658zqmh_._.js +1 -1
  112. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  113. package/.next/standalone/.next/server/pages/404.html +1 -1
  114. package/.next/standalone/.next/server/pages/500.html +1 -1
  115. package/.next/standalone/.next/server/preview-props.json +3 -3
  116. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
  118. package/.next/standalone/.next/static/chunks/{0pjxnp927y7_j.js → 0ay__-d2h1xb5.js} +1 -1
  119. package/.next/standalone/.next/static/chunks/{2znt1784j9gd9.js → 0tbm3vjm62h-2.js} +1 -1
  120. package/.next/standalone/.next/static/chunks/1c_jf6g5wnslk.js +1 -0
  121. package/.next/standalone/.next/static/chunks/{3tn1bzk094e8e.js → 1my3-5p47t7r-.js} +1 -1
  122. package/.next/standalone/.next/static/chunks/20py8k1gd_i1m.js +1 -0
  123. package/.next/standalone/.next/static/chunks/21hckpmsc4g70.js +6 -0
  124. package/.next/standalone/.next/static/chunks/2hmex93ppj1ke.js +1 -0
  125. package/.next/standalone/.next/static/chunks/2o6d37j425uci.js +1 -0
  126. package/.next/standalone/.next/static/chunks/40oworn_-x12p.js +1 -0
  127. package/.next/standalone/.next/static/chunks/{2qz5piiir-qqm.js → 42xptz88mtq3x.js} +1 -1
  128. package/.next/standalone/app/actions/update-jev-config.ts +5 -3
  129. package/.next/standalone/app/settings/jev-panel.tsx +1 -1
  130. package/.next/standalone/fp-cloud-cli/CHANGELOG.md +32 -0
  131. package/.next/standalone/fp-cloud-cli/README.md +40 -1
  132. package/.next/standalone/fp-cloud-cli/fp_cli/client.py +91 -12
  133. package/.next/standalone/fp-cloud-cli/fp_cli/commands/fleet_cmds.py +78 -16
  134. package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +84 -18
  135. package/.next/standalone/fp-cloud-cli/fp_cli/enforcement.py +124 -6
  136. package/.next/standalone/fp-cloud-cli/fp_cli/models.py +89 -6
  137. package/.next/standalone/fp-cloud-cli/fp_cli/output.py +189 -20
  138. package/.next/standalone/fp-cloud-cli/fp_cli/policy_check.py +8 -5
  139. package/.next/standalone/fp-cloud-cli/skill/SKILL.md +2 -2
  140. package/.next/standalone/fp-cloud-cli/skill/references/commands.md +14 -7
  141. package/.next/standalone/fp-cloud-cli/tests/test_cloud_jev.py +527 -0
  142. package/.next/standalone/fp-cloud-cli/tests/test_enforcement_logic.py +46 -0
  143. package/.next/standalone/fp-cloud-cli/tests/test_output.py +23 -0
  144. package/.next/standalone/hermes-plugin/README.md +6 -4
  145. package/.next/standalone/hermes-plugin/__init__.py +27 -0
  146. package/.next/standalone/hermes-plugin/client.py +5 -1
  147. package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
  148. package/.next/standalone/package.json +11 -10
  149. package/.next/standalone/sdk/python/uv.lock +31 -8
  150. package/.next/standalone/server.js +1 -1
  151. package/bin/failproofai.mjs +17 -1
  152. package/dist/cli.mjs +3507 -1250
  153. package/dist/worker.mjs +1779 -169
  154. package/hermes-plugin/README.md +6 -4
  155. package/hermes-plugin/__init__.py +27 -0
  156. package/hermes-plugin/client.py +5 -1
  157. package/hermes-plugin/plugin.yaml +1 -1
  158. package/package.json +11 -10
  159. package/src/audit/open-browser.ts +6 -7
  160. package/src/hooks/agent-roster.ts +180 -0
  161. package/src/hooks/agent-skill.ts +203 -0
  162. package/src/hooks/agent-targets.ts +60 -0
  163. package/src/hooks/cloud-connection.ts +91 -45
  164. package/src/hooks/cloud-enrollment-cli.ts +7 -4
  165. package/src/hooks/cloud-login.ts +6 -3
  166. package/src/hooks/cloud-managed-policies.ts +430 -20
  167. package/src/hooks/cloud-policy-errors.ts +481 -0
  168. package/src/hooks/codex-system-hooks.ts +10 -4
  169. package/src/hooks/config-status.ts +10 -4
  170. package/src/hooks/configure-wizard.ts +54 -26
  171. package/src/hooks/custom-hooks-loader.ts +26 -3
  172. package/src/hooks/daemon-client.ts +9 -4
  173. package/src/hooks/daemon-service.ts +2 -1
  174. package/src/hooks/delivery-health.ts +47 -2
  175. package/src/hooks/effective-reviewers.ts +36 -1
  176. package/src/hooks/fp-config.ts +19 -0
  177. package/src/hooks/fp-home.ts +6 -0
  178. package/src/hooks/handler.ts +255 -19
  179. package/src/hooks/health-probe.ts +15 -0
  180. package/src/hooks/hook-activity-store.ts +7 -1
  181. package/src/hooks/integrations.ts +36 -14
  182. package/src/hooks/jev-activity.ts +117 -1
  183. package/src/hooks/jev-cli.ts +196 -1
  184. package/src/hooks/jev-cloud-connection.ts +92 -0
  185. package/src/hooks/manager.ts +174 -34
  186. package/src/hooks/pack-failclosed.ts +2 -0
  187. package/src/hooks/pack-manifest.ts +8 -1
  188. package/src/hooks/policy-evaluator.ts +22 -1
  189. package/src/hooks/policy-registry.ts +3 -2
  190. package/src/hooks/policy-reviewability.ts +23 -5
  191. package/src/hooks/semantic/cloud-jev-health.ts +227 -0
  192. package/src/hooks/semantic/cloud-jev.ts +868 -0
  193. package/src/hooks/semantic/combine.ts +26 -1
  194. package/src/hooks/semantic/jev-client.ts +19 -2
  195. package/src/hooks/semantic/jev-config.ts +179 -30
  196. package/src/hooks/semantic/jev-review.ts +217 -10
  197. package/src/hooks/semantic/pack-policies.ts +2 -1
  198. package/src/hooks/semantic/types.ts +8 -0
  199. package/src/hooks/session-pause-cli.ts +1 -1
  200. package/src/hooks/tui.ts +13 -4
  201. package/src/hooks/uninstall-cli.ts +12 -1
  202. package/src/hooks/worker-server.ts +5 -1
  203. package/.next/standalone/.next/server/chunks/src_hooks_1aveq0uhs2t1b._.js +0 -5
  204. package/.next/standalone/.next/server/chunks/src_hooks_1eem5a7cyqlb2._.js +0 -3
  205. package/.next/standalone/.next/server/chunks/ssr/src_hooks_effective-reviewers_ts_1h4wtvo55j16x._.js +0 -5
  206. package/.next/standalone/.next/static/chunks/0a-ccsp3xmypz.js +0 -1
  207. package/.next/standalone/.next/static/chunks/13jv-xvabeb62.js +0 -6
  208. package/.next/standalone/.next/static/chunks/2ank2u3apy8m6.js +0 -1
  209. package/.next/standalone/.next/static/chunks/2meqb9kygrncb.js +0 -1
  210. package/.next/standalone/.next/static/chunks/2ohktp_-lkv3x.js +0 -1
  211. package/.next/standalone/.next/static/chunks/2py0eldhwz8ay.js +0 -1
  212. /package/.next/standalone/.next/static/{SNr7o_-G4kNBQTR-iLZMM → LHCtFxVG0mdvd4lsXAOFC}/_buildManifest.js +0 -0
  213. /package/.next/standalone/.next/static/{SNr7o_-G4kNBQTR-iLZMM → LHCtFxVG0mdvd4lsXAOFC}/_clientMiddlewareManifest.js +0 -0
  214. /package/.next/standalone/.next/static/{SNr7o_-G4kNBQTR-iLZMM → LHCtFxVG0mdvd4lsXAOFC}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[4614,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("00c117e2f6723aaec427f79646a93b7db2e2c1fc33",d.callServer,void 0,d.findSourceMapURL,"getJevSettingsAction"),f=(0,d.createServerReference)("000f25cb570f9ee8b2f54da19de57f679d6e17a052",d.callServer,void 0,d.findSourceMapURL,"removeJevConfigAction"),g=(0,d.createServerReference)("40efd95eef98ad185ef9d139a21ca7d1d6905e34d5",d.callServer,void 0,d.findSourceMapURL,"saveJevConfigAction"),h=(0,d.createServerReference)("4051bcb104f743e8e533ce34b83cc84eca2f875736",d.callServer,void 0,d.findSourceMapURL,"setJevModeAction");var i=a.i(18952);let j=[{value:"typesafe",label:"typesafe"},{value:"openrouter",label:"openrouter"},{value:"vercel",label:"vercel ai gateway"},{value:"cloudflare",label:"cloudflare workers ai"},{value:"custom",label:"custom endpoint"}],k=[{value:"enforce",label:"enforce — jev's verdict counts"},{value:"observe",label:"observe — log only, regex decides"},{value:"off",label:"off — keep this config, don't ask jev"}],l="failproofai";function m(a){return{provider:a.provider&&a.provider!==l?a.provider:"typesafe",baseUrl:a.baseUrl,accountId:a.accountId,mode:a.mode}}function n({id:a,label:c,hint:d,children:e}){return(0,b.jsxs)("div",{className:"set-field",children:[(0,b.jsx)("label",{className:"set-field-label",htmlFor:a,children:c}),e,d?(0,b.jsx)("span",{className:"set-hint",children:d}):null]})}a.s(["default",0,function({initial:a}){var d,o,p;let q,[r,s]=(0,c.useState)(a),[t,u]=(0,c.useState)(a?m(a):{provider:"typesafe",baseUrl:"",accountId:"",mode:"enforce"}),[v,w]=(0,c.useState)(""),[x,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(!1),D=(0,c.useRef)(!0),E=(0,c.useRef)(!1),F=(0,c.useCallback)(async()=>{try{let a=await e();if(!D.current)return;s(a),E.current||u(m(a))}catch{}},[]);(0,c.useEffect)(()=>(D.current=!0,F(),()=>{D.current=!1}),[F]),(0,c.useEffect)(()=>{let a=()=>void F();return window.addEventListener("focus",a),document.addEventListener("visibilitychange",a),()=>{window.removeEventListener("focus",a),document.removeEventListener("visibilitychange",a)}},[F]);let G=(0,c.useCallback)((a,b)=>{E.current=!0,u(c=>({...c,[a]:b}))},[]),H=(0,c.useCallback)(async()=>{y(!0),A(null);try{let a=await g({provider:t.provider,baseUrl:t.baseUrl,accountId:t.accountId,mode:t.mode,token:v});if(!a.ok){A(a.problem),C(!0===a.needsToken);return}E.current=!1,C(!1),w(""),s(a.view),u(m(a.view)),(0,i.toast)(a.view.on?"jev is on.":"saved.")}catch{A("could not save that.")}finally{y(!1)}},[t,v]),I=(0,c.useCallback)(async a=>{y(!0),A(null);try{let b=await h(a);if(!b.ok)return void A(b.problem);E.current=!1,s(b.view),u(m(b.view)),(0,i.toast)("off"===a?"jev is off. hooks run the regex policies.":`jev is on, in ${a} mode.`)}catch{A("could not switch that.")}finally{y(!1)}},[]),J=(0,c.useCallback)(async()=>{y(!0),A(null),C(!1);try{let a=await f();if(!a.ok)return void A(a.problem);E.current=!1,w(""),s(a.view),u(m(a.view)),(0,i.toast)("jev is off. hooks run the regex policies.")}catch{A("could not turn that off.")}finally{y(!1)}},[]),K=null!==r&&"absent"!==r.status,L=r?.provider===l,M=r?.token,N=B?"needed for this save — type the token for this endpoint":M?"cloud"===M.source?"from this machine's FailproofAI Cloud connection":"env"===M.source?"configured, read from the environment — leave blank to keep it":"configured — leave blank to keep it":r?.status==="key-missing"?"read from the environment, which is not set in this shell — leave blank to keep it that way":"sent as a bearer token; stored owner-only at 0600";return(0,b.jsxs)("div",{className:"set-cell set-jev",children:[(0,b.jsx)("h2",{className:"set-cell-title",children:"jev · semantic evaluation"}),(0,b.jsx)("div",{className:"set-row set-row-main",children:(0,b.jsxs)("div",{className:"set-row-copy",children:[(0,b.jsx)("span",{className:r?.on?"set-strong":"set-dim",children:null===r?"reading…":r.on?`on. every judged command is also asked of ${(d=r.provider)===l?"FailproofAI Cloud":d??""}.`:"off"===r.status?"off — switched off. hooks run the regex policies exactly as before.":"not-connected"===r.status?"off — this machine is not connected to FailproofAI Cloud. hooks run the regex policies.":"key-lacks-jev"===r.status?"off — no jev key is stored for this machine's FailproofAI Cloud connection. hooks run the regex policies.":"key-missing"===r.status?"off for this dashboard — FAILPROOFAI_JEV_API_KEY is not set in its environment. hooks run the regex policies wherever it is unset, including under the daemon; a session that sets it still consults jev.":"off. hooks run the regex policies exactly as before."}),(0,b.jsx)("span",{className:"set-dim",children:r?.on?"observe"===r.mode?"observe: jev's answers are logged, the regex result is what gets enforced.":"enforce: jev's answers can clear a reviewable deny.":L?"through FailproofAI Cloud, on your org's plan — no endpoint or token of your own.":"a second opinion on the commands the regex policies flag. needs your own endpoint and token."})]})}),r&&(0,b.jsx)("dl",{className:"set-how-list set-jev-cloud",children:(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"FailproofAI Cloud connection"}),(0,b.jsx)("dd",{className:"set-how-body",children:function(a){if(!a||!a.connected)return a?.jev==="yes"?"a jev key is stored, but no connection is":"not connected";let b=a.org??a.host??"connected",c="yes"===a.jev?"key carries jev":"refused"===a.jev?"jev key refused — credentials.json is not owner-only":"no jev key stored";return`connected to ${b} \xb7 ${c}`}(r.cloud)})]})}),r&&K&&(0,b.jsxs)("dl",{className:"set-how-list",children:[L&&(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"provider"}),(0,b.jsx)("dd",{className:"set-how-body",children:r.cloud?.host?`FailproofAI Cloud \xb7 ${r.cloud.host}`:"FailproofAI Cloud"})]}),(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"model"}),(0,b.jsx)("dd",{className:"set-how-body",children:function(a){switch(a.kind){case"id":return a.id;case"withheld":return"set to something that is not a model id — not shown here, in case it is a key";default:return"the provider's default"}}(r.model)})]}),(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"token"}),(0,b.jsx)("dd",{className:"set-how-body",children:M?"cloud"===M.source?"FailproofAI Cloud connection":"env"===M.source?"from FAILPROOFAI_JEV_API_KEY":"configured":L?r.cloud?.connected?"none stored for this connection":"none — this machine is not connected":"none stored"})]}),r.reviewable&&(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"reviewable"}),(0,b.jsx)("dd",{className:"set-how-body",children:r.reviewable.summary})]}),r.stats&&r.stats.total>0&&(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"fallbacks"}),(0,b.jsx)("dd",{className:"set-how-body",children:`${(o=r.stats.fallbackRate,`${Math.round(100*o)}%`)} of ${r.stats.total} calls in the last ${Number.isInteger(q=(p=r.stats.windowMs)/36e5)&&q>=1?q%24==0?`${q/24}d`:`${q}h`:`${Math.max(1,Math.round(p/6e4))}m`} fell back to the regex engine.`})]})]}),r?.problem&&(0,b.jsxs)("p",{className:"set-warn",children:[r.problem,r.fix?` — ${r.fix}`:""]}),r?.reviewable?.problem&&(0,b.jsx)("p",{className:"set-warn",children:r.reviewable.problem}),(0,b.jsx)("div",{className:"set-rule"}),L?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"set-jev-fields",children:(0,b.jsx)(n,{id:"jev-cloud-mode",label:"mode",hint:"the endpoint and key come from this machine's FailproofAI Cloud connection",children:(0,b.jsx)("select",{id:"jev-cloud-mode",className:"set-select",value:r?.mode==="enforce"?"enforce":"observe",disabled:x||r?.mode==="off",onChange:a=>void I("enforce"===a.target.value?"enforce":"observe"),children:k.filter(a=>"off"!==a.value).map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})})}),z&&(0,b.jsx)("p",{className:"set-warn",children:z}),(0,b.jsx)("div",{className:"set-actions set-jev-actions",children:(0,b.jsx)("button",{type:"button",className:"btn btn-press",disabled:x,onClick:()=>void I(r?.mode==="off"?"observe":"off"),children:x?"[ switching… ]":r?.mode==="off"?"[ turn jev on ]":"[ turn jev off ]"})})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"set-jev-fields",children:[(0,b.jsx)(n,{id:"jev-provider",label:"provider",children:(0,b.jsx)("select",{id:"jev-provider",className:"set-select",value:t.provider,disabled:x,onChange:a=>G("provider",a.target.value),children:j.map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})}),(0,b.jsx)(n,{id:"jev-url",label:"endpoint url",hint:["custom"===t.provider?"required — https, or http to localhost in observe mode":"leave blank for the provider's own api",r?.baseUrlQueryWithheld?"the stored url's query string is not shown here — leave the url as it is to keep it":null].filter(Boolean).join(" · "),children:(0,b.jsx)("input",{id:"jev-url",type:"text",className:"set-text",inputMode:"url",autoComplete:"off",spellCheck:!1,placeholder:"custom"===t.provider?"https://…":"the provider's own api",value:t.baseUrl,disabled:x,onChange:a=>G("baseUrl",a.target.value)})}),"cloudflare"===t.provider&&(0,b.jsx)(n,{id:"jev-account",label:"account id",hint:"32 lowercase hex characters",children:(0,b.jsx)("input",{id:"jev-account",type:"text",className:"set-text",autoComplete:"off",spellCheck:!1,value:t.accountId,disabled:x,onChange:a=>G("accountId",a.target.value)})}),(0,b.jsx)(n,{id:"jev-token",label:"token",hint:N,children:(0,b.jsx)("input",{id:"jev-token",type:"password",className:"set-text",autoComplete:"off",spellCheck:!1,placeholder:M?"•••• kept":"",value:v,disabled:x,"aria-invalid":B||void 0,onChange:a=>{E.current=!0,w(a.target.value)}})}),(0,b.jsx)(n,{id:"jev-mode",label:"mode",children:(0,b.jsx)("select",{id:"jev-mode",className:"set-select",value:t.mode,disabled:x,onChange:a=>G("mode",a.target.value),children:k.map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})})]}),z&&(0,b.jsx)("p",{className:"set-warn",children:z}),(0,b.jsxs)("div",{className:"set-actions set-jev-actions",children:[(0,b.jsx)("button",{type:"button",className:"btn btn-press",disabled:x,onClick:()=>void H(),children:x?"[ saving… ]":K?"[ save changes ]":"[ turn jev on ]"}),K&&(0,b.jsx)("button",{type:"button",className:"set-link",disabled:x,onClick:()=>void J(),children:"turn jev off"})]})]})]})}],4614)},41857,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("0001953c5af243a11547577ef82018061ce3259b2e",d.callServer,void 0,d.findSourceMapURL,"getScheduledAuditAction"),f=(0,d.createServerReference)("40c9442f8916b211fed78371a2bff660dea301ef3c",d.callServer,void 0,d.findSourceMapURL,"setAutoAuditAction"),g=(0,d.createServerReference)("406b9805673a46697a80acba35ac964f3ef5e62a4f",d.callServer,void 0,d.findSourceMapURL,"setAuditIntervalAction");var h=a.i(89564),i=a.i(4543),j=a.i(18952),k=a.i(80977);function l(a){return new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function m(a,b){let c=a-b;if(c<=0)return"now";let d=Math.floor(c/864e5),e=Math.floor(c%864e5/36e5);return d>0?e>0?`${d}d ${e}h`:`${d}d`:e>0?`${e}h`:`${Math.max(1,Math.floor(c/6e4))}m`}function n(a){return a.toLocaleString("en-US")}function o({label:a,value:c,sub:d,tone:e}){return(0,b.jsxs)("div",{className:"set-stat",children:[(0,b.jsx)("div",{className:"set-stat-label",children:a}),(0,b.jsx)("div",{className:`set-stat-value${e?` ${e}`:""}`,children:c}),(0,b.jsx)("div",{className:"set-stat-sub",children:d??" "})]})}function p({lastRunAtMs:a,nextDueAtMs:c,now:d}){if(null==a||null==c||c<=a)return null;let e=Math.min(100,Math.max(0,(d-a)/(c-a)*100));return(0,b.jsxs)("div",{className:"tape","aria-hidden":"true",children:[(0,b.jsxs)("div",{className:"tape-rail",children:[(0,b.jsx)("div",{className:"tape-fill",style:{width:`${e}%`}}),(0,b.jsx)("div",{className:"tape-now",style:{left:`${e}%`}})]}),(0,b.jsxs)("div",{className:"tape-ends",children:[(0,b.jsxs)("span",{children:["last scan · ",l(a)]}),(0,b.jsxs)("span",{className:"tape-next",children:["next · ",m(c,d)]})]})]})}function q({enabled:a,onChange:c,disabled:d,label:e}){return(0,b.jsx)("button",{type:"button",role:"switch","aria-checked":a,"aria-label":e,disabled:d,onClick:c,className:"sw","data-on":a?"true":"false",children:(0,b.jsx)("span",{className:"sw-knob"})})}let r=[{label:"reads",body:"every session transcript on disk — your prompts, the files your agents read and wrote, and command output."},{label:"runs",body:"entirely on this machine. the transcripts never leave it."},{label:"sends",body:"counts, redacted examples, and this machine's name — and only when a scan finds something harmful."}];a.s(["default",0,function({initial:a,jevPanel:d}){let[s,t]=(0,c.useState)(a),[u,v]=(0,c.useState)(a?.auto??!1),[w,x]=(0,c.useState)(a?.intervalDays??7),[y,z]=(0,c.useState)(!1),[A,B]=(0,c.useState)(!1),[C,D]=(0,c.useState)(!1),[E,F]=(0,c.useState)(null===a),[G,H]=(0,c.useState)(0),I=(0,c.useRef)(!0),J=(0,c.useRef)(null!==a),K=(0,c.useCallback)(async()=>{try{let a=await e();if(!I.current)return;t(a),J.current=!0,v(a.auto),x(a.intervalDays),H(Date.now()),F(!1)}catch{I.current&&!J.current&&F(!0)}},[]);(0,c.useEffect)(()=>(I.current=!0,K(),()=>{I.current=!1}),[K]),(0,c.useEffect)(()=>{let a=()=>void K();return window.addEventListener("focus",a),document.addEventListener("visibilitychange",a),()=>{window.removeEventListener("focus",a),document.removeEventListener("visibilitychange",a)}},[K]);let L=s?.signedInAs??null,M=s?.daemon==="running",N=s?.daemon==="unsupported-platform",O=s?.schedule??null,P=s?.lastScan??null,Q=O?.lastExitCode!=null&&0!==O.lastExitCode&&75!==O.lastExitCode,R=(0,c.useCallback)(async()=>{z(!0);try{let a=await f(!0);if(!a.ok){if(v(!1),"unreachable"===a.reason)return void(0,j.toast)("could not reach the server. check your connection and try again.");await K(),D(!0),(0,j.toast)("that sign-in expired. one more code and it's on.");return}v(a.auto),(0,j.toast)("scheduled audits on."),await K()}catch{v(!1),(0,j.toast)("could not turn that on.")}finally{z(!1)}},[K]),S=(0,c.useCallback)(async()=>{if(u){z(!0);try{let a=await f(!1);a.ok&&v(a.auto),(0,j.toast)("scheduled audits off."),await K()}catch{(0,j.toast)("could not turn that off.")}finally{z(!1)}return}L?await R():D(!0)},[u,R,K,L]),T=(0,c.useCallback)(async a=>{z(!0);try{let b=await g(a);x(b.intervalDays),t(a=>a?{...a,intervalDays:b.intervalDays}:a),(0,j.toast)(`scanning every ${b.intervalDays} day${1===b.intervalDays?"":"s"}.`)}catch{x(s?.intervalDays??7),(0,j.toast)("could not save that.")}finally{z(!1)}},[s?.intervalDays]),U=(0,c.useCallback)(async()=>{z(!0);try{await fetch("/api/auth/logout",{method:"POST"}),(0,j.toast)("signed out. scans continue; digests pause."),await K()}catch{(0,j.toast)("could not sign out.")}finally{z(!1)}},[K]),V=(0,c.useCallback)(async()=>{if(!A){B(!0);try{await (0,h.s)({cli:[],since:"all",noCache:!1}),(0,j.toast)("scan complete."),await K()}catch(a){(0,j.toast)(a instanceof h.t&&"timeout"===a.kind?"the scan is taking a while — it will finish in the background.":"the scan could not be completed.")}finally{B(!1)}}},[K,A]),W=(0,c.useCallback)(async a=>{D(!1),await K(),await R()},[R,K]),X=s?M?{value:"running",sub:null!=s.daemonStartedAtMs&&G>0?`up ${function(a){let b=Math.floor(a/864e5);if(b>0)return`${b}d`;let c=Math.floor(a/36e5);return c>0?`${c}h`:`${Math.max(1,Math.floor(a/6e4))}m`}(Math.max(0,G-s.daemonStartedAtMs))}`:"",tone:"ok"}:N?{value:"unavailable",sub:"not on this platform"}:"not-installed"===s.daemon?{value:"not installed",sub:"run failproofai config",tone:"warn"}:"unknown"===s.daemon?{value:"unknown",sub:"could not read it"}:{value:"stopped",sub:"run failproofai config",tone:"warn"}:{value:"…",sub:"reading"},Y=u?O?.nextDueAtMs==null?{value:"pending",sub:"after the next scan"}:{value:G>0?m(O.nextDueAtMs,G):"—",sub:l(O.nextDueAtMs)}:{value:"off",sub:"nothing scheduled"},Z=P?{value:(0,k.f)(Date.parse(P.finishedAt)),sub:null!=P.sessionsScanned?`${n(P.sessionsScanned)} sessions`:"scanned"}:{value:"none yet",sub:"run one below"},$=P?null==P.findings?{value:"—",sub:"unreadable"}:{value:n(P.findings),sub:"this scan",...P.findings>0?{tone:"warn"}:{}}:{value:"—",sub:"no scan yet"};return(0,b.jsxs)("main",{className:"report",children:[(0,b.jsxs)("section",{className:"section set-sec",children:[(0,b.jsxs)("div",{className:"set-mast",children:[(0,b.jsx)("h1",{className:"set-title",children:"settings"}),(0,b.jsx)("p",{className:"set-lede",children:"keeping watch, so you don't have to."})]}),E?(0,b.jsxs)("div",{className:"set-console",children:[(0,b.jsx)("div",{className:"set-cell",children:(0,b.jsxs)("p",{className:"set-warn",children:["could not read this machine's settings. check that the dashboard can reach ",(0,b.jsx)("code",{children:"~/.failproofai/config.json"}),"."]})}),d]}):(0,b.jsxs)("div",{className:"set-console",children:[(0,b.jsxs)("div",{className:"set-stats",children:[(0,b.jsx)(o,{label:"daemon",...X}),(0,b.jsx)(o,{label:"next scan",...Y}),(0,b.jsx)(o,{label:"last scan",...Z}),(0,b.jsx)(o,{label:"findings",...$})]}),(0,b.jsxs)("div",{className:"set-cols",children:[(0,b.jsxs)("div",{className:"set-cell set-config",children:[(0,b.jsx)("h2",{className:"set-cell-title",children:"scheduled audit"}),(0,b.jsxs)("div",{className:"set-row set-row-main",children:[(0,b.jsx)(q,{enabled:u,disabled:y||null===s,onChange:()=>void S(),label:u?"turn off scheduled audits":"turn on scheduled audits"}),(0,b.jsxs)("div",{className:"set-row-copy",children:[(0,b.jsx)("span",{className:"set-strong",children:u?"scanning on a schedule.":"scan on a schedule."}),(0,b.jsx)("span",{className:"set-dim",children:u?"you'll get an email only when a scan finds something.":"off. nothing runs and nothing is sent."})]})]}),(0,b.jsxs)("div",{className:"set-row set-row-interval",children:[(0,b.jsx)("span",{className:"set-dim",children:"scan every"}),(0,b.jsx)("input",{type:"number",className:"set-num",min:1,max:90,value:w,disabled:y||null===s,"aria-label":"days between scheduled scans",onChange:a=>x(Number(a.target.value)),onBlur:a=>{let b=Number(a.target.value);Number.isFinite(b)?b!==s?.intervalDays&&T(b):x(s?.intervalDays??7)}}),(0,b.jsx)("span",{className:"set-dim",children:"days"}),(0,b.jsxs)("span",{className:"set-hint",children:[1,"–",90]})]}),(0,b.jsx)("div",{className:"set-rule"}),(0,b.jsx)("div",{className:"set-row set-row-identity",children:L?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"set-dim",children:"reports go to"}),(0,b.jsx)("span",{className:"set-email",children:L.email}),(0,b.jsx)("button",{type:"button",className:"set-link",disabled:y,onClick:()=>void U(),children:"sign out"})]}):u?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"set-warn",children:"signed out — scans continue, digests are paused."}),(0,b.jsx)("button",{type:"button",className:"set-link",disabled:y,onClick:()=>D(!0),children:"sign in to resume"})]}):(0,b.jsx)("span",{className:"set-dim",children:"turning this on asks for an email, so there is somewhere to send the report."})}),u&&s&&!M&&(0,b.jsx)("p",{className:"set-warn",children:N?"the background service isn't available on this platform, so scheduled scans can't run here. you can still run one now.":"not-installed"===s.daemon?"the background service isn't installed, so nothing will run on the timer. install it with `failproofai config`.":"the background service is stopped, so nothing will run until it starts. repair it with `failproofai config`."}),Q&&(0,b.jsxs)("p",{className:"set-warn",children:["the last scheduled scan exited ",O?.lastExitCode,". the next one will still run."]}),(0,b.jsx)("div",{className:"set-actions",children:(0,b.jsx)("button",{type:"button",className:"btn btn-press",disabled:A,onClick:()=>void V(),children:A?"[ scanning… ]":"[ run a scan now ]"})})]}),(0,b.jsxs)("div",{className:"set-cell set-how",children:[(0,b.jsx)("h2",{className:"set-cell-title",children:"how it works"}),(0,b.jsx)("dl",{className:"set-how-list",children:r.map(a=>(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:a.label}),(0,b.jsx)("dd",{className:"set-how-body",children:a.body})]},a.label))})]})]}),d]}),u&&G>0&&(0,b.jsx)(p,{lastRunAtMs:O?.lastRunAtMs??null,nextDueAtMs:O?.nextDueAtMs??null,now:G})]}),(0,b.jsx)(i.f,{open:C,source:"settings_scheduled_audit",headline:"where should the report go?",subhead:"we'll send a one-time code to confirm.",onClose:()=>D(!1),onAuthed:a=>void W(a)})]})}],41857)}]})();
1
+ (()=>{"use strict";module.exports=[4614,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("00e9f4f60629d16bfc9cb8e44dc2684793e3801e30",d.callServer,void 0,d.findSourceMapURL,"getJevSettingsAction"),f=(0,d.createServerReference)("007f043b85cfdfd05797121e03e4754fe627fde1f4",d.callServer,void 0,d.findSourceMapURL,"removeJevConfigAction"),g=(0,d.createServerReference)("404b9dfcd5616f88e2e52e121c1278140caca83890",d.callServer,void 0,d.findSourceMapURL,"saveJevConfigAction"),h=(0,d.createServerReference)("40f9a5b3e0b570e1cbd1ab9405d966d53d0464c514",d.callServer,void 0,d.findSourceMapURL,"setJevModeAction");var i=a.i(18952);let j=[{value:"typesafe",label:"typesafe"},{value:"openrouter",label:"openrouter"},{value:"vercel",label:"vercel ai gateway"},{value:"cloudflare",label:"cloudflare workers ai"},{value:"custom",label:"custom endpoint"}],k=[{value:"enforce",label:"enforce — jev's verdict counts"},{value:"observe",label:"observe — log only, regex decides"},{value:"off",label:"off — keep this config, don't ask jev"}],l="failproofai";function m(a){return{provider:a.provider&&a.provider!==l?a.provider:"typesafe",baseUrl:a.baseUrl,accountId:a.accountId,mode:a.mode}}function n({id:a,label:c,hint:d,children:e}){return(0,b.jsxs)("div",{className:"set-field",children:[(0,b.jsx)("label",{className:"set-field-label",htmlFor:a,children:c}),e,d?(0,b.jsx)("span",{className:"set-hint",children:d}):null]})}a.s(["default",0,function({initial:a}){var d,o,p;let q,[r,s]=(0,c.useState)(a),[t,u]=(0,c.useState)(a?m(a):{provider:"typesafe",baseUrl:"",accountId:"",mode:"enforce"}),[v,w]=(0,c.useState)(""),[x,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(!1),D=(0,c.useRef)(!0),E=(0,c.useRef)(!1),F=(0,c.useCallback)(async()=>{try{let a=await e();if(!D.current)return;s(a),E.current||u(m(a))}catch{}},[]);(0,c.useEffect)(()=>(D.current=!0,F(),()=>{D.current=!1}),[F]),(0,c.useEffect)(()=>{let a=()=>void F();return window.addEventListener("focus",a),document.addEventListener("visibilitychange",a),()=>{window.removeEventListener("focus",a),document.removeEventListener("visibilitychange",a)}},[F]);let G=(0,c.useCallback)((a,b)=>{E.current=!0,u(c=>({...c,[a]:b}))},[]),H=(0,c.useCallback)(async()=>{y(!0),A(null);try{let a=await g({provider:t.provider,baseUrl:t.baseUrl,accountId:t.accountId,mode:t.mode,token:v});if(!a.ok){A(a.problem),C(!0===a.needsToken);return}E.current=!1,C(!1),w(""),s(a.view),u(m(a.view)),(0,i.toast)(a.view.on?"jev is on.":"saved.")}catch{A("could not save that.")}finally{y(!1)}},[t,v]),I=(0,c.useCallback)(async a=>{y(!0),A(null);try{let b=await h(a);if(!b.ok)return void A(b.problem);E.current=!1,s(b.view),u(m(b.view)),(0,i.toast)("off"===a?"jev is off. hooks run the regex policies.":`jev is on, in ${a} mode.`)}catch{A("could not switch that.")}finally{y(!1)}},[]),J=(0,c.useCallback)(async()=>{y(!0),A(null),C(!1);try{let a=await f();if(!a.ok)return void A(a.problem);E.current=!1,w(""),s(a.view),u(m(a.view)),(0,i.toast)("jev is off. hooks run the regex policies.")}catch{A("could not turn that off.")}finally{y(!1)}},[]),K=null!==r&&"absent"!==r.status,L=r?.provider===l,M=r?.token,N=B?"needed for this save — type the token for this endpoint":M?"cloud"===M.source?"from this machine's FailproofAI Cloud connection":"env"===M.source?"configured, read from the environment — leave blank to keep it":"configured — leave blank to keep it":r?.status==="key-missing"?"read from the environment, which is not set in this shell — leave blank to keep it that way":"sent as a bearer token; stored owner-only at 0600";return(0,b.jsxs)("div",{className:"set-cell set-jev",children:[(0,b.jsx)("h2",{className:"set-cell-title",children:"jev · semantic evaluation"}),(0,b.jsx)("div",{className:"set-row set-row-main",children:(0,b.jsxs)("div",{className:"set-row-copy",children:[(0,b.jsx)("span",{className:r?.on?"set-strong":"set-dim",children:null===r?"reading…":r.on?`on. every judged command is also asked of ${(d=r.provider)===l?"FailproofAI Cloud":d??""}.`:"off"===r.status?"off — switched off. hooks run the regex policies exactly as before.":"not-connected"===r.status?"off — this machine is not connected to FailproofAI Cloud. hooks run the regex policies.":"key-lacks-jev"===r.status?"off — no jev key is stored for this machine's FailproofAI Cloud connection. hooks run the regex policies.":"key-missing"===r.status?"off for this dashboard — FAILPROOFAI_JEV_API_KEY is not set in its environment. hooks run the regex policies wherever it is unset, including under the daemon; a session that sets it still consults jev.":"off. hooks run the regex policies exactly as before."}),(0,b.jsx)("span",{className:"set-dim",children:r?.on?"observe"===r.mode?"observe: jev's answers are logged, the regex result is what gets enforced.":"enforce: jev's answers can clear a reviewable deny.":L?"through FailproofAI Cloud, on your org's plan — no endpoint or token of your own.":"a second opinion on the commands the regex policies flag. needs your own endpoint and token."})]})}),r&&(0,b.jsx)("dl",{className:"set-how-list set-jev-cloud",children:(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"FailproofAI Cloud connection"}),(0,b.jsx)("dd",{className:"set-how-body",children:function(a){if(!a||!a.connected)return a?.jev==="yes"?"a jev key is stored, but no connection is":"not connected";let b=a.org??a.host??"connected",c="yes"===a.jev?"key carries jev":"refused"===a.jev?"jev key refused — credentials.json is not owner-only":"no jev key stored";return`connected to ${b} \xb7 ${c}`}(r.cloud)})]})}),r&&K&&(0,b.jsxs)("dl",{className:"set-how-list",children:[L&&(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"provider"}),(0,b.jsx)("dd",{className:"set-how-body",children:r.cloud?.host?`FailproofAI Cloud \xb7 ${r.cloud.host}`:"FailproofAI Cloud"})]}),(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"model"}),(0,b.jsx)("dd",{className:"set-how-body",children:function(a){switch(a.kind){case"id":return a.id;case"withheld":return"set to something that is not a model id — not shown here, in case it is a key";default:return"the provider's default"}}(r.model)})]}),(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"token"}),(0,b.jsx)("dd",{className:"set-how-body",children:M?"cloud"===M.source?"FailproofAI Cloud connection":"env"===M.source?"from FAILPROOFAI_JEV_API_KEY":"configured":L?r.cloud?.connected?"none stored for this connection":"none — this machine is not connected":"none stored"})]}),r.reviewable&&(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"reviewable"}),(0,b.jsx)("dd",{className:"set-how-body",children:r.reviewable.summary})]}),r.stats&&r.stats.total>0&&(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:"fallbacks"}),(0,b.jsx)("dd",{className:"set-how-body",children:`${(o=r.stats.fallbackRate,`${Math.round(100*o)}%`)} of ${r.stats.total} calls in the last ${Number.isInteger(q=(p=r.stats.windowMs)/36e5)&&q>=1?q%24==0?`${q/24}d`:`${q}h`:`${Math.max(1,Math.round(p/6e4))}m`} fell back to the regex engine.`})]})]}),r?.problem&&(0,b.jsxs)("p",{className:"set-warn",children:[r.problem,r.fix?` — ${r.fix}`:""]}),r?.reviewable?.problem&&(0,b.jsx)("p",{className:"set-warn",children:r.reviewable.problem}),(0,b.jsx)("div",{className:"set-rule"}),L?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"set-jev-fields",children:(0,b.jsx)(n,{id:"jev-cloud-mode",label:"mode",hint:"the endpoint and key come from this machine's FailproofAI Cloud connection",children:(0,b.jsx)("select",{id:"jev-cloud-mode",className:"set-select",value:r?.mode==="enforce"?"enforce":"observe",disabled:x||r?.mode==="off",onChange:a=>void I("enforce"===a.target.value?"enforce":"observe"),children:k.filter(a=>"off"!==a.value).map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})})}),z&&(0,b.jsx)("p",{className:"set-warn",children:z}),(0,b.jsx)("div",{className:"set-actions set-jev-actions",children:(0,b.jsx)("button",{type:"button",className:"btn btn-press",disabled:x,onClick:()=>void I(r?.mode==="off"?"observe":"off"),children:x?"[ switching… ]":r?.mode==="off"?"[ turn jev on ]":"[ turn jev off ]"})})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"set-jev-fields",children:[(0,b.jsx)(n,{id:"jev-provider",label:"provider",children:(0,b.jsx)("select",{id:"jev-provider",className:"set-select",value:t.provider,disabled:x,onChange:a=>G("provider",a.target.value),children:j.map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})}),(0,b.jsx)(n,{id:"jev-url",label:"endpoint url",hint:["custom"===t.provider?"required — https, or http to localhost in observe mode":"leave blank for the provider's own api",r?.baseUrlQueryWithheld?"the stored url's query string is not shown here — leave the url as it is to keep it":null].filter(Boolean).join(" · "),children:(0,b.jsx)("input",{id:"jev-url",type:"text",className:"set-text",inputMode:"url",autoComplete:"off",spellCheck:!1,placeholder:"custom"===t.provider?"https://…":"the provider's own api",value:t.baseUrl,disabled:x,onChange:a=>G("baseUrl",a.target.value)})}),"cloudflare"===t.provider&&(0,b.jsx)(n,{id:"jev-account",label:"account id",hint:"32 lowercase hex characters",children:(0,b.jsx)("input",{id:"jev-account",type:"text",className:"set-text",autoComplete:"off",spellCheck:!1,value:t.accountId,disabled:x,onChange:a=>G("accountId",a.target.value)})}),(0,b.jsx)(n,{id:"jev-token",label:"token",hint:N,children:(0,b.jsx)("input",{id:"jev-token",type:"password",className:"set-text",autoComplete:"off",spellCheck:!1,placeholder:M?"•••• kept":"",value:v,disabled:x,"aria-invalid":B||void 0,onChange:a=>{E.current=!0,w(a.target.value)}})}),(0,b.jsx)(n,{id:"jev-mode",label:"mode",children:(0,b.jsx)("select",{id:"jev-mode",className:"set-select",value:t.mode,disabled:x,onChange:a=>G("mode",a.target.value),children:k.map(a=>(0,b.jsx)("option",{value:a.value,children:a.label},a.value))})})]}),z&&(0,b.jsx)("p",{className:"set-warn",children:z}),(0,b.jsxs)("div",{className:"set-actions set-jev-actions",children:[(0,b.jsx)("button",{type:"button",className:"btn btn-press",disabled:x,onClick:()=>void H(),children:x?"[ saving… ]":K?"[ save changes ]":"[ turn jev on ]"}),K&&(0,b.jsx)("button",{type:"button",className:"set-link",disabled:x,onClick:()=>void J(),children:"turn jev off"})]})]})]})}],4614)},41857,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("00ced5ea658747cb8527bdf2605ed571071a426d38",d.callServer,void 0,d.findSourceMapURL,"getScheduledAuditAction"),f=(0,d.createServerReference)("406f2bb4e7466cc2b77bb1a0f2864b75a372a4bb06",d.callServer,void 0,d.findSourceMapURL,"setAutoAuditAction"),g=(0,d.createServerReference)("403daad8fdd4531a99d626f85cda91aaffc9a848cc",d.callServer,void 0,d.findSourceMapURL,"setAuditIntervalAction");var h=a.i(89564),i=a.i(4543),j=a.i(18952),k=a.i(80977);function l(a){return new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function m(a,b){let c=a-b;if(c<=0)return"now";let d=Math.floor(c/864e5),e=Math.floor(c%864e5/36e5);return d>0?e>0?`${d}d ${e}h`:`${d}d`:e>0?`${e}h`:`${Math.max(1,Math.floor(c/6e4))}m`}function n(a){return a.toLocaleString("en-US")}function o({label:a,value:c,sub:d,tone:e}){return(0,b.jsxs)("div",{className:"set-stat",children:[(0,b.jsx)("div",{className:"set-stat-label",children:a}),(0,b.jsx)("div",{className:`set-stat-value${e?` ${e}`:""}`,children:c}),(0,b.jsx)("div",{className:"set-stat-sub",children:d??" "})]})}function p({lastRunAtMs:a,nextDueAtMs:c,now:d}){if(null==a||null==c||c<=a)return null;let e=Math.min(100,Math.max(0,(d-a)/(c-a)*100));return(0,b.jsxs)("div",{className:"tape","aria-hidden":"true",children:[(0,b.jsxs)("div",{className:"tape-rail",children:[(0,b.jsx)("div",{className:"tape-fill",style:{width:`${e}%`}}),(0,b.jsx)("div",{className:"tape-now",style:{left:`${e}%`}})]}),(0,b.jsxs)("div",{className:"tape-ends",children:[(0,b.jsxs)("span",{children:["last scan · ",l(a)]}),(0,b.jsxs)("span",{className:"tape-next",children:["next · ",m(c,d)]})]})]})}function q({enabled:a,onChange:c,disabled:d,label:e}){return(0,b.jsx)("button",{type:"button",role:"switch","aria-checked":a,"aria-label":e,disabled:d,onClick:c,className:"sw","data-on":a?"true":"false",children:(0,b.jsx)("span",{className:"sw-knob"})})}let r=[{label:"reads",body:"every session transcript on disk — your prompts, the files your agents read and wrote, and command output."},{label:"runs",body:"entirely on this machine. the transcripts never leave it."},{label:"sends",body:"counts, redacted examples, and this machine's name — and only when a scan finds something harmful."}];a.s(["default",0,function({initial:a,jevPanel:d}){let[s,t]=(0,c.useState)(a),[u,v]=(0,c.useState)(a?.auto??!1),[w,x]=(0,c.useState)(a?.intervalDays??7),[y,z]=(0,c.useState)(!1),[A,B]=(0,c.useState)(!1),[C,D]=(0,c.useState)(!1),[E,F]=(0,c.useState)(null===a),[G,H]=(0,c.useState)(0),I=(0,c.useRef)(!0),J=(0,c.useRef)(null!==a),K=(0,c.useCallback)(async()=>{try{let a=await e();if(!I.current)return;t(a),J.current=!0,v(a.auto),x(a.intervalDays),H(Date.now()),F(!1)}catch{I.current&&!J.current&&F(!0)}},[]);(0,c.useEffect)(()=>(I.current=!0,K(),()=>{I.current=!1}),[K]),(0,c.useEffect)(()=>{let a=()=>void K();return window.addEventListener("focus",a),document.addEventListener("visibilitychange",a),()=>{window.removeEventListener("focus",a),document.removeEventListener("visibilitychange",a)}},[K]);let L=s?.signedInAs??null,M=s?.daemon==="running",N=s?.daemon==="unsupported-platform",O=s?.schedule??null,P=s?.lastScan??null,Q=O?.lastExitCode!=null&&0!==O.lastExitCode&&75!==O.lastExitCode,R=(0,c.useCallback)(async()=>{z(!0);try{let a=await f(!0);if(!a.ok){if(v(!1),"unreachable"===a.reason)return void(0,j.toast)("could not reach the server. check your connection and try again.");await K(),D(!0),(0,j.toast)("that sign-in expired. one more code and it's on.");return}v(a.auto),(0,j.toast)("scheduled audits on."),await K()}catch{v(!1),(0,j.toast)("could not turn that on.")}finally{z(!1)}},[K]),S=(0,c.useCallback)(async()=>{if(u){z(!0);try{let a=await f(!1);a.ok&&v(a.auto),(0,j.toast)("scheduled audits off."),await K()}catch{(0,j.toast)("could not turn that off.")}finally{z(!1)}return}L?await R():D(!0)},[u,R,K,L]),T=(0,c.useCallback)(async a=>{z(!0);try{let b=await g(a);x(b.intervalDays),t(a=>a?{...a,intervalDays:b.intervalDays}:a),(0,j.toast)(`scanning every ${b.intervalDays} day${1===b.intervalDays?"":"s"}.`)}catch{x(s?.intervalDays??7),(0,j.toast)("could not save that.")}finally{z(!1)}},[s?.intervalDays]),U=(0,c.useCallback)(async()=>{z(!0);try{await fetch("/api/auth/logout",{method:"POST"}),(0,j.toast)("signed out. scans continue; digests pause."),await K()}catch{(0,j.toast)("could not sign out.")}finally{z(!1)}},[K]),V=(0,c.useCallback)(async()=>{if(!A){B(!0);try{await (0,h.s)({cli:[],since:"all",noCache:!1}),(0,j.toast)("scan complete."),await K()}catch(a){(0,j.toast)(a instanceof h.t&&"timeout"===a.kind?"the scan is taking a while — it will finish in the background.":"the scan could not be completed.")}finally{B(!1)}}},[K,A]),W=(0,c.useCallback)(async a=>{D(!1),await K(),await R()},[R,K]),X=s?M?{value:"running",sub:null!=s.daemonStartedAtMs&&G>0?`up ${function(a){let b=Math.floor(a/864e5);if(b>0)return`${b}d`;let c=Math.floor(a/36e5);return c>0?`${c}h`:`${Math.max(1,Math.floor(a/6e4))}m`}(Math.max(0,G-s.daemonStartedAtMs))}`:"",tone:"ok"}:N?{value:"unavailable",sub:"not on this platform"}:"not-installed"===s.daemon?{value:"not installed",sub:"run failproofai config",tone:"warn"}:"unknown"===s.daemon?{value:"unknown",sub:"could not read it"}:{value:"stopped",sub:"run failproofai config",tone:"warn"}:{value:"…",sub:"reading"},Y=u?O?.nextDueAtMs==null?{value:"pending",sub:"after the next scan"}:{value:G>0?m(O.nextDueAtMs,G):"—",sub:l(O.nextDueAtMs)}:{value:"off",sub:"nothing scheduled"},Z=P?{value:(0,k.f)(Date.parse(P.finishedAt)),sub:null!=P.sessionsScanned?`${n(P.sessionsScanned)} sessions`:"scanned"}:{value:"none yet",sub:"run one below"},$=P?null==P.findings?{value:"—",sub:"unreadable"}:{value:n(P.findings),sub:"this scan",...P.findings>0?{tone:"warn"}:{}}:{value:"—",sub:"no scan yet"};return(0,b.jsxs)("main",{className:"report",children:[(0,b.jsxs)("section",{className:"section set-sec",children:[(0,b.jsxs)("div",{className:"set-mast",children:[(0,b.jsx)("h1",{className:"set-title",children:"settings"}),(0,b.jsx)("p",{className:"set-lede",children:"keeping watch, so you don't have to."})]}),E?(0,b.jsxs)("div",{className:"set-console",children:[(0,b.jsx)("div",{className:"set-cell",children:(0,b.jsxs)("p",{className:"set-warn",children:["could not read this machine's settings. check that the dashboard can reach ",(0,b.jsx)("code",{children:"~/.failproofai/config.json"}),"."]})}),d]}):(0,b.jsxs)("div",{className:"set-console",children:[(0,b.jsxs)("div",{className:"set-stats",children:[(0,b.jsx)(o,{label:"daemon",...X}),(0,b.jsx)(o,{label:"next scan",...Y}),(0,b.jsx)(o,{label:"last scan",...Z}),(0,b.jsx)(o,{label:"findings",...$})]}),(0,b.jsxs)("div",{className:"set-cols",children:[(0,b.jsxs)("div",{className:"set-cell set-config",children:[(0,b.jsx)("h2",{className:"set-cell-title",children:"scheduled audit"}),(0,b.jsxs)("div",{className:"set-row set-row-main",children:[(0,b.jsx)(q,{enabled:u,disabled:y||null===s,onChange:()=>void S(),label:u?"turn off scheduled audits":"turn on scheduled audits"}),(0,b.jsxs)("div",{className:"set-row-copy",children:[(0,b.jsx)("span",{className:"set-strong",children:u?"scanning on a schedule.":"scan on a schedule."}),(0,b.jsx)("span",{className:"set-dim",children:u?"you'll get an email only when a scan finds something.":"off. nothing runs and nothing is sent."})]})]}),(0,b.jsxs)("div",{className:"set-row set-row-interval",children:[(0,b.jsx)("span",{className:"set-dim",children:"scan every"}),(0,b.jsx)("input",{type:"number",className:"set-num",min:1,max:90,value:w,disabled:y||null===s,"aria-label":"days between scheduled scans",onChange:a=>x(Number(a.target.value)),onBlur:a=>{let b=Number(a.target.value);Number.isFinite(b)?b!==s?.intervalDays&&T(b):x(s?.intervalDays??7)}}),(0,b.jsx)("span",{className:"set-dim",children:"days"}),(0,b.jsxs)("span",{className:"set-hint",children:[1,"–",90]})]}),(0,b.jsx)("div",{className:"set-rule"}),(0,b.jsx)("div",{className:"set-row set-row-identity",children:L?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"set-dim",children:"reports go to"}),(0,b.jsx)("span",{className:"set-email",children:L.email}),(0,b.jsx)("button",{type:"button",className:"set-link",disabled:y,onClick:()=>void U(),children:"sign out"})]}):u?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"set-warn",children:"signed out — scans continue, digests are paused."}),(0,b.jsx)("button",{type:"button",className:"set-link",disabled:y,onClick:()=>D(!0),children:"sign in to resume"})]}):(0,b.jsx)("span",{className:"set-dim",children:"turning this on asks for an email, so there is somewhere to send the report."})}),u&&s&&!M&&(0,b.jsx)("p",{className:"set-warn",children:N?"the background service isn't available on this platform, so scheduled scans can't run here. you can still run one now.":"not-installed"===s.daemon?"the background service isn't installed, so nothing will run on the timer. install it with `failproofai config`.":"the background service is stopped, so nothing will run until it starts. repair it with `failproofai config`."}),Q&&(0,b.jsxs)("p",{className:"set-warn",children:["the last scheduled scan exited ",O?.lastExitCode,". the next one will still run."]}),(0,b.jsx)("div",{className:"set-actions",children:(0,b.jsx)("button",{type:"button",className:"btn btn-press",disabled:A,onClick:()=>void V(),children:A?"[ scanning… ]":"[ run a scan now ]"})})]}),(0,b.jsxs)("div",{className:"set-cell set-how",children:[(0,b.jsx)("h2",{className:"set-cell-title",children:"how it works"}),(0,b.jsx)("dl",{className:"set-how-list",children:r.map(a=>(0,b.jsxs)("div",{className:"set-how-row",children:[(0,b.jsx)("dt",{className:"set-how-label",children:a.label}),(0,b.jsx)("dd",{className:"set-how-body",children:a.body})]},a.label))})]})]}),d]}),u&&G>0&&(0,b.jsx)(p,{lastRunAtMs:O?.lastRunAtMs??null,nextDueAtMs:O?.nextDueAtMs??null,now:G})]}),(0,b.jsx)(i.f,{open:C,source:"settings_scheduled_audit",headline:"where should the report go?",subhead:"we'll send a one-time code to confirm.",onClose:()=>D(!1),onAuthed:a=>void W(a)})]})}],41857)}]})();
2
2
 
3
3
  //# sourceMappingURL=app_settings_02tf1h47jmhhd._.js.map
@@ -1,3 +1,3 @@
1
1
  module.exports=[3900,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_html-to-image_es_index_1ao30b1e-jmzy.js"].map(b=>a.l(b))).then(()=>b(63460)))}];
2
2
 
3
- //# sourceMappingURL=node_modules_html-to-image_es_index_00jxj8foxqz5t.js.map
3
+ //# sourceMappingURL=node_modules_html-to-image_es_index_1fv03uigni8s5.js.map
@@ -1,6 +1,6 @@
1
1
  module.exports=[67436,a=>{"use strict";var b=a.i(71306),c=a.i(88604),d=a.i(79847),e=a.i(9185),f=a.i(72842),g=a.i(54897),h=a.i(56157),i=a.i(15988),j=a.i(1268),k=a.i(25766),l=a.i(90833),m=a.i(21626),n=a.i(89257),o=a.i(5785),p=a.i(74793),q=a.i(85826),r=a.i(21565),s=a.i(110),t=a.i(65911),u=a.i(25128),v=a.i(40781);a.i(69411);var w=a.i(63081),x=a.i(62837),y=a.i(34607),z=a.i(96338),A=a.i(50642),B=a.i(88530),C=a.i(93695),D=a.i(22980),E=a.i(8583),F=a.i(38534),G=a.i(5672);a.i(70408);var H=a.i(22922),I=a.i(78294),J=a.i(16625),K=a.i(88648),L=a.i(25466);a.s(["f",0,function({tree:M,page:N,pathname:O,require:P,loadChunk:Q,interopDefault:R}){let S={require:P,loadChunk:Q},T=new b.AppPageRouteModule({definition:{kind:d.RouteKind.APP_PAGE,page:N,pathname:O,bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:M},distDir:".next",relativeProjectDir:""}),U=N;U=U.replace(/\/index$/,"")||"/";let V=(0,r.normalizeAppPath)(U),W=(0,s.parseNormalizedAppRoute)(V).dynamicSegments.map(a=>a.param.paramName);async function X(b,r,s){var N,O,P,Q,Y,Z;s.requestMeta&&(0,g.setRequestMeta)(b,s.requestMeta),T.isDev&&(0,g.addRequestMeta)(b,"devRequestTimingInternalsEnd",process.hrtime.bigint());let $=!!(0,g.getRequestMeta)(b,"minimalMode"),_=b.url,aa=await T.prepare(b,r,{srcPage:U,multiZoneDraftMode:!1});if(!aa)return r.statusCode=400,r.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:ab,query:ac,params:ad,pageIsDynamic:ae,buildManifest:af,nextFontManifest:ag,reactLoadableManifest:ah,serverActionsManifest:ai,clientReferenceManifest:aj,subresourceIntegrityManifest:ak,prerenderManifest:al,prefetchHintsManifest:am,isDraftMode:an,resolvedPathname:ao,revalidateOnlyGenerated:ap,routerServerContext:aq,nextConfig:ar,parsedUrl:as,interceptionRoutePatterns:at,deploymentId:au,clientAssetToken:av,previewProps:aw}=aa,{isOnDemandRevalidate:ax}=aa,ay=T.match(ao,al),az=(null==ay?void 0:ay.route)??null,aA=T.isDev||(0,D.isRouteCacheOwner)(ao,T.cacheOwner,al.routes[ao])?al.routes[ao]:void 0,aB=!!aA,aC=b.headers["user-agent"]||"",aD=(0,v.getBotType)(aC),aE=(0,g.getRequestMeta)(b,"isPrefetchRSCRequest")??"1"===b.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aF=(0,g.getRequestMeta)(b,"isRSCRequest")??(0,l.isRSCRequestHeader)(b.headers[u.RSC_HEADER]),aG=(0,t.getIsPossibleServerAction)(b);if(V===n.UNDERSCORE_NOT_FOUND_ROUTE&&("GET"===b.method||"HEAD"===b.method)&&!aF&&(0,m.isNonHtmlSecFetchDest)(b.headers["sec-fetch-dest"]))return r.statusCode=404,r.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),r.setHeader("Content-Type","text/plain; charset=utf-8"),r.end("Not Found"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let aH=!!ar.cacheComponents,aI=b.headers[z.NEXT_RESUME_STATE_LENGTH_HEADER];if(!(0,g.getRequestMeta)(b,"postponed")&&$&&aH&&aG&&aI&&"string"==typeof aI){let c=parseInt(aI,10),{maxPostponedStateSize:d,maxPostponedStateSizeBytes:e}=(0,F.getMaxPostponedStateSize)(ar.experimental.maxPostponedStateSize);if(!isNaN(c)&&c>0){if(c>e)return r.statusCode=413,r.end((0,F.getPostponedStateExceededErrorMessage)(d)),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let f="1 MB",h=(null==(Z=ar.experimental.serverActions)?void 0:Z.bodySizeLimit)??f,i=c+(h!==f?a.r(14465).parse(h):1048576),j=await (0,F.readBodyWithSizeLimit)(b,i);if(null===j)return r.statusCode=413,r.end("Request body exceeded limit. To configure the body size limit for Server Actions, see: https://nextjs.org/docs/app/api-reference/next-config-js/serverActions#bodysizelimit"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;if(j.length>=c){let a=j.subarray(0,c).toString("utf8");(0,g.addRequestMeta)(b,"postponed",a);let d=j.subarray(c);(0,g.addRequestMeta)(b,"actionBody",d)}else throw Error(`invariant: expected ${c} bytes of postponed state but only received ${j.length} bytes`)}}if("string"!=typeof(0,g.getRequestMeta)(b,"postponed")&&aH&&"1"===b.headers[z.NEXT_RESUME_HEADER]&&"POST"===b.method){let{maxPostponedStateSize:a,maxPostponedStateSizeBytes:c}=(0,F.getMaxPostponedStateSize)(ar.experimental.maxPostponedStateSize),d=await (0,F.readBodyWithSizeLimit)(b,c);if(null===d)return r.statusCode=413,r.end((0,F.getPostponedStateExceededErrorMessage)(a)),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let e=d.toString("utf8");(0,g.addRequestMeta)(b,"postponed",e)}let aJ=!0===ar.cacheComponents&&(!0===T.isDev||!0===ar.experimental.exposeTestingApiInProductionBuild),aK=aJ&&"string"==typeof b.headers.cookie&&b.headers.cookie.includes(u.NEXT_INSTANT_TEST_COOKIE+"=")&&(!(0,l.isRSCRequestHeader)(b.headers[u.RSC_HEADER])||"1"===b.headers[u.NEXT_ROUTER_PREFETCH_HEADER]),aL=aH&&((null==(N=al.routes[V]??al.dynamicRoutes[V])?void 0:N.renderingMode)==="PARTIALLY_STATIC"||aK&&(aJ||(null==aq?void 0:aq.experimentalTestProxy)===!0)),aM=aK&&aL,aN=aM&&!0===T.isDev,aO=!1,aP=aM||aN||aO,aQ=aL?(0,g.getRequestMeta)(b,"postponed"):void 0,aR="string"==typeof aQ,aS=null==aA?void 0:aA.prefetchDataRoute,aT=(null==az?void 0:az._isEnsureStaticPage)===!0,aU=aL&&aF&&!aE&&!aS&&!aT;$&&(aU=aU&&aR);let aV=b.headers[u.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER],aW=(0,g.getRequestMeta)(b,"segmentPrefetchRSCRequest")??(aE?"string"==typeof aV?aV:Array.isArray(aV)?aV[0]:void 0:void 0),aX=!aC||(0,q.shouldServeStreamingMetadata)(aC,ar.htmlLimitedBots),aY=aL&&!aX,aZ=!!((az||aB||al.routes[V])&&!aY),a$=aL&&!0===ar.cacheComponents,a_=!0===T.isDev||an||!aZ||aR||(a$&&(0,g.getRequestMeta)(b,"onCacheEntryV2")?aU&&!$:aU),a0=(null==az?void 0:az.remainingPrerenderableParams)??[],a1=ar.cacheComponents?(null==az||null==(O=az.fallbackRouteParams)?void 0:O.filter(a=>!a0.some(b=>b.paramName===a.paramName)))??[]:[],a2=aB&&a0.some(a=>{let b=null==ad?void 0:ad[a.paramName];return null==b||Array.isArray(b)&&0===b.length}),a3=(null==az?void 0:az.fallback)===null&&((null==(P=az.fallbackRootParams)?void 0:P.length)??0)>0,a4=ay?"string"==typeof(null==az?void 0:az.fallback)?az.fallback:ay.source:null,a5=null;if(ar.cacheComponents&&(null==az?void 0:az.fallback)!==!1&&(ar.partialPrefetching||a1.length>0)&&a4&&(null==az||null==(Q=az.fallbackRouteParams)?void 0:Q.length)&&!a2){let a,b=(a=new Map(a0.map(a=>[a.paramName,a])),a4.split("/").map(b=>{let c=(0,L.getSegmentParam)(b);if(!c)return b;let d=a.get(c.paramName);if(!d)return b;let e=null==ad?void 0:ad[d.paramName];if(!e)return b;let f=Array.isArray(e)?e.map(a=>encodeURIComponent(a)).join("/"):encodeURIComponent(e);return b.replace((0,o.buildDynamicSegmentPlaceholder)(d),f)}).join("/")||"/");(b!==a4||a1.length>0)&&(a5=b)}let a6=null,a7=!1;an||!aZ||a_||aG||aR||aU||(null!==a5?(a5!==a4||ax)&&(a6=a5,a7=!0):a6=ao);let a8=a6;!a8&&(T.isDev||aZ&&ae&&(null==az||null==(Y=az.fallbackRouteParams)?void 0:Y.length)&&!aG)&&(a8=ao),T.isDev||an||!aZ||!aF||aU||(0,i.stripFlightHeaders)(b.headers);let a9={...H,tree:M,handler:X,routeModule:T,__next_app__:S};ai&&aj&&(0,p.setManifestsSingleton)({page:U,clientReferenceManifest:aj,serverActionsManifest:ai});let ba=b.method||"GET",bb=(0,f.getTracer)(),bc=bb.getActiveScopeSpan(),bd=!!(null==aq?void 0:aq.isWrappedByNextServer),be=async()=>((null==aq?void 0:aq.render404)?await aq.render404(b,r,as,!1):(r.statusCode=404,r.end("This page could not be found")),null);try{let a,i=T.getVaryHeader(ao,at);r.setHeader("Vary",i);let l=async(c,d,e)=>{let g=new k.NodeNextRequest(b),i=new k.NodeNextResponse(r);return("prerender"===e?T.prerender(g,i,d):T.render(g,i,d)).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":r.statusCode,"next.rsc":aF}),r.statusCode&&r.statusCode>=500&&(c.setStatus({code:f.SpanStatusCode.ERROR}),c.setAttribute("error.type",r.statusCode.toString()));let b=bb.getRootSpanAttributes();if(!b)return;if(b.get("next.span_type")!==h.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${b.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let d=b.get("next.route")||V,e=aF?`RSC ${ba} ${d}`:`${ba} ${d}`;c.setAttributes({"next.route":d,"http.route":d,"next.span_name":e}),c.updateName(e),a&&a!==c&&(a.setAttribute("http.route",d),a.updateName(e))})},m=(0,g.getRequestMeta)(b,"incrementalCache")||await T.getIncrementalCache(b,ar,aw,al,$);null==m||m.resetRequestCache(),globalThis.__incrementalCache=m;let n=async({span:a,postponed:d,fallbackRouteParams:e,renderOperation:f,allowEmptyStaticShell:h})=>{var i,k;let n={query:ac,params:ad,page:V,routeMatch:{resolvedPathname:ao},parsedRequestHeaders:(0,j.parseRequestHeaders)(b.headers,{isRoutePPREnabled:aL,previewModeId:null==aw?void 0:aw.previewModeId}),sharedContext:{buildId:ab,deploymentId:au,clientAssetToken:av},dev:(0,c.createDevRenderContext)(b),fallbackRouteParams:e,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:a9,Component:R(a9),params:ad,routeModule:T,page:U,postponed:d,allowEmptyStaticShell:h,serveStreamingMetadata:aX,supportsDynamicResponse:"render"===f&&("string"==typeof d||a_),buildManifest:af,nextFontManifest:ag,reactLoadableManifest:ah,subresourceIntegrityManifest:ak,setCacheStatus:null==aq?void 0:aq.setCacheStatus,setIsrStatus:null==aq?void 0:aq.setIsrStatus,setReactDebugChannel:null==aq?void 0:aq.setReactDebugChannel,sendErrorsToBrowser:null==aq?void 0:aq.sendErrorsToBrowser,dir:require("path").join(process.cwd(),T.relativeProjectDir),isDraftMode:an,botType:aD,isOnDemandRevalidate:ax,isPossibleServerAction:aG,assetPrefix:T.getAssetPrefixForRender(aq,ar.assetPrefix),nextConfigOutput:ar.output,crossOrigin:ar.crossOrigin,trailingSlash:ar.trailingSlash,images:ar.images,previewProps:aw,enableTainting:ar.experimental.taint,reactMaxHeadersLength:ar.reactMaxHeadersLength,multiZoneDraftMode:!1,prefetchHints:am,notFoundParams:(T.isDev?(0,g.getRequestMeta)(b,"devNotFoundParams"):void 0)??(null==(i=al.dynamicRoutes[V])?void 0:i.notFoundParams)??((null==(k=al.dynamicRoutes[V])?void 0:k.fallback)===!1?W:void 0),incrementalCache:m,cacheLifeProfiles:ar.cacheLife,staticPageGenerationTimeout:ar.staticPageGenerationTimeout,basePath:ar.basePath,serverActions:ar.experimental.serverActions,logServerFunctions:"object"==typeof ar.logging&&!!ar.logging.serverFunctions,...aM||aN||aO?{isBuildTimePrerendering:!0,isDebugDynamicAccesses:aN}:{},cacheComponents:!!ar.cacheComponents,partialPrefetching:ar.partialPrefetching,isFallbackUpgradeable:!!ar.partialPrefetching&&a0.length>0,validationLevel:ar.experimental.instantInsights.validationLevel,experimental:{isRoutePPREnabled:aL,expireTime:ar.expireTime,staleTimes:ar.experimental.staleTimes,dynamicOnHover:!!ar.experimental.dynamicOnHover,optimisticRouting:!!ar.experimental.optimisticRouting,parallelRouteMetadata:!!ar.experimental.parallelRouteMetadata,inlineCss:!!ar.experimental.inlineCss,prefetchInlining:ar.experimental.prefetchInlining??!1,authInterrupts:!!ar.experimental.authInterrupts,reactBrowserBailout:!!ar.experimental.reactBrowserBailout,serverComponentsHmrCancellation:!!ar.experimental.serverComponentsHmrCancellation,useCacheTimeout:ar.experimental.useCacheTimeout,durableUseCacheEntries:!!ar.experimental.durableUseCacheEntries,cachedNavigations:ar.experimental.cachedNavigations??!1,clientTraceMetadata:ar.experimental.clientTraceMetadata||[],clientParamParsingOrigins:ar.experimental.clientParamParsingOrigins,maxPostponedStateSizeBytes:(0,E.parseMaxPostponedStateSize)(ar.experimental.maxPostponedStateSize),disableResumeDataCacheCompression:ar.experimental.disableResumeDataCacheCompression??!1,exposeTestingApi:aJ},waitUntil:s.waitUntil,onClose:a=>{r.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(a,c,d)=>T.onRequestError(b,a,c,d,aq),err:(0,g.getRequestMeta)(b,"invokeError")}},o=await l(a,n,f);if("error"in o)return b.fetchMetrics=o.result.metadata.fetchMetrics,o;let{metadata:p}=o,{cacheControl:q,headers:t={},fetchTags:u,fetchMetrics:v}=p;if(q&&!1!==q.revalidate&&q.revalidate>0&&void 0===q.expire&&(q.expire=ar.expireTime),u&&(t[z.NEXT_CACHE_TAGS_HEADER]=u),b.fetchMetrics=v,aZ&&(null==q?void 0:q.revalidate)===0&&!T.isDev&&!aL){let a=p.staticBailoutInfo,b=Error(`Page changed from static to dynamic at runtime ${ao}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
2
2
  see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`);if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:w.CachedRouteKind.APP_PAGE,html:o,headers:t,rscData:p.flightData,postponed:p.postponed,status:p.statusCode,segmentData:p.segmentData},cacheControl:q}},p=async({hasResolved:a,previousCacheEntry:c,isRevalidating:f,span:h,forceStaticRender:i=!1})=>{let j=!1===T.isDev,k=a||r.writableEnded,l=a=>T.onRequestError(b,a,{routerKind:"App Router",routePath:U,routeType:"render",revalidateReason:(0,e.getRevalidateReason)({isStaticGeneration:aZ,isOnDemandRevalidate:ax})},!1,aq);try{var q;let e;if(ax&&ap&&!c&&!$)return(null==aq?void 0:aq.render404)?await aq.render404(b,r):(r.statusCode=404,r.end("This page could not be found")),null;if(az&&(e=(0,x.parseFallbackField)(az.fallback)),e===x.FallbackMode.NOT_FOUND&&aB&&(e=x.FallbackMode.BLOCKING_STATIC_RENDER),!ar.partialPrefetching||(null==az?void 0:az.fallback)!==null||aT||az.isExplicitlyBlocking||a2||a3||!(a0.length>0)||(e=x.FallbackMode.PRERENDER),e!==x.FallbackMode.PRERENDER||(aL?aX:!aD)||(e=x.FallbackMode.BLOCKING_STATIC_RENDER),(null==c?void 0:c.isStale)===-1&&(ax=!0),ax&&e!==x.FallbackMode.NOT_FOUND&&(e=x.FallbackMode.BLOCKING_STATIC_RENDER),(j||i||aP)&&!$&&e!==x.FallbackMode.BLOCKING_STATIC_RENDER&&a8&&!k&&!an&&ae&&(j||!aB)&&aL&&(ar.cacheComponents?!aU:!aF)){let c,e=j&&"string"==typeof(null==az?void 0:az.fallback)?az.fallback:V;c=j?(null==az?void 0:az.fallbackRouteParams)?(0,o.createOpaqueFallbackRouteParams)(az.fallbackRouteParams):aO?(0,o.getFallbackRouteParams)(V,T):null:aO?(0,o.getFallbackRouteParams)(V,T):aM?(0,g.getRequestMeta)(b,"fallbackRouteParams")??null:null,aM&&(0,g.addRequestMeta)(b,"stagedFallbackParams",c);let f=await T.handleResponse({cacheKey:e,req:b,nextConfig:ar,routeKind:d.RouteKind.APP_PAGE,isFallback:!0,previewProps:aw,prerenderManifest:al,isRoutePPREnabled:aL,responseGenerator:async()=>n({span:h,postponed:void 0,fallbackRouteParams:c,renderOperation:"prerender",allowEmptyStaticShell:aK||void 0}),waitUntil:s.waitUntil,isMinimalMode:$});if(null===f||"error"in f)return f;if(f)return!$&&aL&&ar.partialPrefetching&&a0.length>0&&a6&&m&&!ax&&!aO&&!aJ&&!aK&&(0,K.scheduleOnNextTick)(async()=>{let c=T.getResponseCache(b);try{let b=await c.revalidate(a6,m,aL,!1,a=>n({span:a.span,postponed:void 0,fallbackRouteParams:a1.length>0?(0,o.createOpaqueFallbackRouteParams)(a1):null,renderOperation:"prerender"}),null,a,s.waitUntil);if(null!==b&&"error"in b)throw b.error}catch(a){console.error("Error revalidating the page in the background",a)}}),delete f.cacheControl,f}let t=ax||f||!aQ?void 0:aQ,v=!1;if(a$&&!$&&m&&(aU||aG)&&!i){let c=a5??ao,d=await m.get(c,{kind:w.IncrementalCacheKind.APP_PAGE,route:T.cacheOwner,isRoutePPREnabled:!0,isFallback:!1});d&&d.value&&d.value.kind===w.CachedRouteKind.APP_PAGE&&(t=d.value.postponed,v=void 0===t,d&&(-1===d.isStale||!0===d.isStale)&&(0,K.scheduleOnNextTick)(async()=>{let d=T.getResponseCache(b);try{let b=await d.revalidate(c,m,aL,!1,a=>p({...a,forceStaticRender:!0}),null,a,s.waitUntil);if(null!==b&&"error"in b)throw b.error}catch(a){console.error("Error revalidating the page in the background",a)}}))}if((aM||aN)&&void 0!==t)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:w.CachedRouteKind.APP_PAGE,html:y.default.fromStatic("",aF?u.RSC_CONTENT_TYPE_HEADER:z.HTML_CONTENT_TYPE_HEADER),rscData:void 0,postponed:t,segmentData:void 0,headers:void 0,status:void 0}};let A=!T.isDev&&ae&&(null==az?void 0:az.fallbackRouteParams)?(0,o.getPlaceholderFallbackRouteParams)(ad,az.fallbackRouteParams):null,B=A&&A.length>0?A:null==az?void 0:az.fallbackRouteParams,C=null!=A&&A.length>0,D=null;if(ar.cacheComponents&&(null==az?void 0:az.fallbackRouteParams)){let a=(0,g.getRequestMeta)(b,"resolvedRouteParamKeys");a&&a.size>0&&(D=az.fallbackRouteParams.filter(b=>!a.has(b.paramName)))}let E=(j&&(0,g.getRequestMeta)(b,"renderFallbackShell")||C||aM&&!aB)&&B?(0,o.createOpaqueFallbackRouteParams)(B):D&&D.length>0&&D.length<((null==az||null==(q=az.fallbackRouteParams)?void 0:q.length)??0)?(0,o.createOpaqueFallbackRouteParams)(D):!$&&(a7||i&&null!==a5)&&a1.length>0?(0,o.createOpaqueFallbackRouteParams)(a1):aO?(0,o.getFallbackRouteParams)(V,T):null;if((j||aM)&&ar.cacheComponents){let a;a=C?(0,o.createOpaqueFallbackRouteParams)(A):aM?E:v||aB?null:t&&(null==az?void 0:az.fallbackRouteParams)?(0,o.createOpaqueFallbackRouteParams)(az.fallbackRouteParams):az?(0,o.getStagedFallbackParams)(az):null,(0,g.addRequestMeta)(b,"stagedFallbackParams",a)}let F=!i&&!aP&&(a_||aG),G=await n({span:h,postponed:t,fallbackRouteParams:E,renderOperation:F?"render":"prerender",allowEmptyStaticShell:aK||void 0});return"error"in G&&a&&await l(G.error),G}catch(b){throw a&&await l(b),b}},q=a=>{var c;let d=a$?(0,g.getRequestMeta)(b,"onCacheEntryV2")??(0,g.getRequestMeta)(b,"onCacheEntry"):(0,g.getRequestMeta)(b,"onCacheEntry");if(!d)return!1;let e=(0,g.getRequestMeta)(b,"initURL")??b.url;return d(a,{url:e?(null==(c=(0,G.parseUrl)(e))?void 0:c.pathname)??e:void 0})},t=(a,c,d)=>{let e=new TransformStream;a.push(e.readable),ar.cacheComponents&&(null==az?void 0:az.fallbackRouteParams)&&(0,g.addRequestMeta)(b,"stagedFallbackParams",(0,o.createOpaqueFallbackRouteParams)(az.fallbackRouteParams)),n({span:d,postponed:c,fallbackRouteParams:null,renderOperation:"render"}).then(async a=>{var b,c;if(!a)throw Error("Invariant: expected a result to be returned");if("error"in a)throw a.error;if((null==(b=a.value)?void 0:b.kind)!==w.CachedRouteKind.APP_PAGE)throw Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`);await a.value.html.pipeTo(e.writable)}).catch(a=>{e.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})})},v=async a=>{var c,h,i,j;let k,l=T.isDev&&!aP&&(0,g.getRequestMeta)(b,"devParamMatchingRejected");if(!$&&!an&&!aG&&ae&&(l||(null==az?void 0:az.fallback)===!1&&!aB)){if(ar.adapterPath)return await be();throw new C.NoFallbackError}let m=await T.handleResponse({cacheKey:a6,responseGenerator:b=>p({span:a,...b}),routeKind:d.RouteKind.APP_PAGE,isOnDemandRevalidate:ax,isRoutePPREnabled:aL,req:b,nextConfig:ar,previewProps:aw,prerenderManifest:al,waitUntil:s.waitUntil,isMinimalMode:$});if(null!==m&&"error"in m){if(r.headersSent||r.writableEnded)throw m.error;let c=()=>{let a=T.onRequestError(b,m.error,{routerKind:"App Router",routePath:U,routeType:"render",revalidateReason:(0,e.getRevalidateReason)({isStaticGeneration:aZ,isOnDemandRevalidate:ax})},!1,aq).catch(a=>{console.error(a)});null==s.waitUntil||s.waitUntil.call(s,a)},{result:d}=m;for(let[a,b]of Object.entries(d.metadata.headers??{}))void 0!==b&&r.appendHeader(a,"number"==typeof b?b.toString():b);r.statusCode=500,null==a||a.setAttributes({"http.status_code":500,"next.rsc":aF,"error.type":"500"}),null==a||a.setStatus({code:f.SpanStatusCode.ERROR}),r.removeHeader("x-nextjs-cache"),r.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let g=d;if(aF)g=y.default.fromStatic("",u.RSC_CONTENT_TYPE_HEADER);else if("string"==typeof d.metadata.postponed){if(await q({value:{kind:w.CachedRouteKind.APP_PAGE,html:d,rscData:d.metadata.flightData,postponed:d.metadata.postponed,status:500,headers:void 0,segmentData:void 0},cacheControl:{revalidate:0,expire:void 0}}))return c(),null;if($)throw m.error;t(g=y.default.fromStatic(d.toUnchunkedString(),z.HTML_CONTENT_TYPE_HEADER),d.metadata.postponed,a)}return c(),(0,B.sendRenderResult)({req:b,res:r,result:g,generateEtags:!1,poweredByHeader:ar.poweredByHeader,cacheControl:void 0})}if(an&&r.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),T.isDev&&r.setHeader("Cache-Control","no-store"),!m){if(a6)throw Error("invariant: cache entry required but not generated");return null}if((null==(c=m.value)?void 0:c.kind)!==w.CachedRouteKind.APP_PAGE)throw Error(`Invariant app-page handler received invalid cache entry ${null==(i=m.value)?void 0:i.kind}`);let n="string"==typeof m.value.postponed;aF&&!aG&&au&&r.setHeader(z.NEXT_NAV_DEPLOYMENT_ID_HEADER,au),aZ&&!aU&&(!n||aE)&&($||r.setHeader("x-nextjs-cache",ax?"REVALIDATED":m.isMiss?"MISS":m.isStale?"STALE":"HIT"),r.setHeader(u.NEXT_IS_PRERENDER_HEADER,"1"));let{value:o}=m;if(aR)k={revalidate:0,expire:void 0};else if(aU)k={revalidate:0,expire:void 0};else if(!T.isDev)if(an)k={revalidate:0,expire:void 0};else if(aZ){if(m.cacheControl)if("number"==typeof m.cacheControl.revalidate){if(m.cacheControl.revalidate<1)throw Error(`Invalid revalidate configuration provided: ${m.cacheControl.revalidate} < 1`);k={revalidate:m.cacheControl.revalidate,expire:m.cacheControl.expire}}else k={revalidate:z.CACHE_ONE_YEAR_SECONDS,expire:void 0}}else r.getHeader("Cache-Control")||(k={revalidate:0,expire:void 0});if(m.cacheControl=k,"string"==typeof aW&&(null==o?void 0:o.kind)===w.CachedRouteKind.APP_PAGE&&o.segmentData){r.setHeader(u.NEXT_DID_POSTPONE_HEADER,"2");let a=null==(j=o.headers)?void 0:j[z.NEXT_CACHE_TAGS_HEADER];$&&aZ&&a&&"string"==typeof a&&r.setHeader(z.NEXT_CACHE_TAGS_HEADER,a);let c=o.segmentData.get(aW);return void 0!==c?(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:y.default.fromStatic(c,u.RSC_CONTENT_TYPE_HEADER),cacheControl:m.cacheControl}):(r.statusCode=404,(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:y.default.EMPTY,cacheControl:m.cacheControl}))}if(!aM&&await q(m))return null;if(o.headers){let a={...o.headers};for(let[b,c]of($&&aZ||delete a[z.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==c)if(Array.isArray(c))for(let a of c)r.appendHeader(b,a);else"number"==typeof c&&(c=c.toString()),r.appendHeader(b,c)}let v=null==(h=o.headers)?void 0:h[z.NEXT_CACHE_TAGS_HEADER];if($&&aZ&&v&&"string"==typeof v&&r.setHeader(z.NEXT_CACHE_TAGS_HEADER,v),!o.status||aF&&aL||(r.statusCode=o.status),!$&&o.status&&I.RedirectStatusCode[o.status]&&aF&&(r.statusCode=200),n&&!aU&&r.setHeader(u.NEXT_DID_POSTPONE_HEADER,"1"),aF&&!an){if(void 0===o.rscData){if(o.html.contentType!==u.RSC_CONTENT_TYPE_HEADER)if(ar.cacheComponents)return r.statusCode=404,(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:y.default.EMPTY,cacheControl:m.cacheControl});else throw new J.InvariantError(`Expected RSC response, got ${o.html.contentType}`);return(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:o.html,cacheControl:m.cacheControl})}return(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:y.default.fromStatic(o.rscData,u.RSC_CONTENT_TYPE_HEADER),cacheControl:m.cacheControl})}let x=o.html;if(aK&&aM){if("string"==typeof o.postponed&&H.isEmptyHTMLPrelude(o.postponed)){if(!0===T.isDev)throw Error(`The Navigation Inspector was active, but you attempted to load a blocking route. Reload the page to reset the inspector.
3
3
 
4
- To identify why this route is blocking, refer to the Instant Navigation docs: https://preview.nextjs.org/docs/app/guides/instant-navigation`);let a=`<!DOCTYPE html><html><head><meta charSet="utf-8"/></head><body><script>document.cookie="${u.NEXT_INSTANT_TEST_COOKIE}=; Path=/; Max-Age=0"</script><p>The Navigation Inspector was active, but you attempted to load a blocking route. Reload the page to reset the inspector.</p><p>To identify why this route is blocking, refer to the <a href="https://preview.nextjs.org/docs/app/guides/instant-navigation">Instant Navigation docs</a>.</p></body></html>`;return(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:y.default.fromStatic(a,z.HTML_CONTENT_TYPE_HEADER),cacheControl:{revalidate:0,expire:void 0}})}return x.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:x,cacheControl:{revalidate:0,expire:void 0}})}return!n||$||aF?(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:x,cacheControl:m.cacheControl}):(aM||aN?x.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})):t(x,o.postponed,a),(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:x,cacheControl:{revalidate:0,expire:void 0}}))};if(!bd||!bc)return a=bb.getActiveScopeSpan(),await bb.withPropagatedContext(b.headers,()=>bb.trace(h.BaseServerSpan.handleRequest,{spanName:`${ba} ${U}`,kind:f.SpanKind.SERVER,attributes:{"http.method":ba,"http.target":_}},v),void 0,!bd);await v(bc)}catch(a){throw aK&&!r.headersSent&&r.setHeader("Set-Cookie",`${u.NEXT_INSTANT_TEST_COOKIE}=; Path=/; Max-Age=0`),a instanceof C.NoFallbackError||await T.onRequestError(b,a,{routerKind:"App Router",routePath:U,routeType:"render",revalidateReason:(0,e.getRevalidateReason)({isStaticGeneration:aZ,isOnDemandRevalidate:ax})},!1,aq),a}}return{__next_app__:S,routeModule:T,handler:X}}])},25128,function(a){a.n(a.i(91562))},78294,function(a){a.n(a.i(71717))},96338,function(a){a.n(a.i(21751))},62837,function(a){a.n(a.i(40795))},88648,function(a){a.n(a.i(68113))},5672,function(a){a.n(a.i(42440))},22922,function(a){a.n(a.i(96772))},70408,function(a){a.n(a.i(9095))},94331,function(a){a.n(a.i(60644))},74793,function(a){a.n(a.i(33169))},15988,function(a){a.n(a.i(56952))},25766,function(a){a.n(a.i(77341))},9185,function(a){a.n(a.i(29432))},21626,function(a){a.n(a.i(975))},90833,function(a){a.n(a.i(46994))},38534,function(a){a.n(a.i(87613))},22980,function(a){a.n(a.i(96195))},65911,function(a){a.n(a.i(8950))},85826,function(a){a.n(a.i(37111))},56157,function(a){a.n(a.i(18970))},72842,function(a){a.n(a.i(75164))},34607,function(a){a.n(a.i(11614))},54897,function(a){a.n(a.i(30106))},5785,function(a){a.n(a.i(90588))},69411,function(a){a.n(a.i(75700))},63081,function(a){a.n(a.i(276))},79847,function(a){a.n(a.i(3343))},88604,function(a){a.n(a.i(9210))},71306,(a,b,c)=>{b.exports=a.r(18622)},1268,function(a){a.n(a.i(91315))},88530,function(a){a.n(a.i(10531))},50642,function(a){a.n(a.i(12213))},89257,function(a){a.n(a.i(58579))},16625,function(a){a.n(a.i(85034))},110,function(a){a.n(a.i(8770))},21565,function(a){a.n(a.i(41763))},25466,function(a){a.n(a.i(91505))},40781,function(a){a.n(a.i(49670))},8583,function(a){a.n(a.i(1082))},12948,(a,b,c)=>{"use strict";function d(a){return a}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"instrumentModuleGetter",{enumerable:!0,get:function(){return d}})}];
4
+ To identify why this route is blocking, refer to the Instant Navigation docs: https://preview.nextjs.org/docs/app/guides/instant-navigation`);let a=`<!DOCTYPE html><html><head><meta charSet="utf-8"/></head><body><script>document.cookie="${u.NEXT_INSTANT_TEST_COOKIE}=; Path=/; Max-Age=0"</script><p>The Navigation Inspector was active, but you attempted to load a blocking route. Reload the page to reset the inspector.</p><p>To identify why this route is blocking, refer to the <a href="https://preview.nextjs.org/docs/app/guides/instant-navigation">Instant Navigation docs</a>.</p></body></html>`;return(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:y.default.fromStatic(a,z.HTML_CONTENT_TYPE_HEADER),cacheControl:{revalidate:0,expire:void 0}})}return x.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:x,cacheControl:{revalidate:0,expire:void 0}})}return!n||$||aF?(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:x,cacheControl:m.cacheControl}):(aM||aN?x.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})):t(x,o.postponed,a),(0,B.sendRenderResult)({req:b,res:r,generateEtags:ar.generateEtags,poweredByHeader:ar.poweredByHeader,result:x,cacheControl:{revalidate:0,expire:void 0}}))};if(!bd||!bc)return a=bb.getActiveScopeSpan(),await bb.withPropagatedContext(b.headers,()=>bb.trace(h.BaseServerSpan.handleRequest,{spanName:`${ba} ${U}`,kind:f.SpanKind.SERVER,attributes:{"http.method":ba,"http.target":_}},v),void 0,!bd);await v(bc)}catch(a){throw aK&&!r.headersSent&&r.setHeader("Set-Cookie",`${u.NEXT_INSTANT_TEST_COOKIE}=; Path=/; Max-Age=0`),a instanceof C.NoFallbackError||await T.onRequestError(b,a,{routerKind:"App Router",routePath:U,routeType:"render",revalidateReason:(0,e.getRevalidateReason)({isStaticGeneration:aZ,isOnDemandRevalidate:ax})},!1,aq),a}}return{__next_app__:S,routeModule:T,handler:X}}])},25128,function(a){a.n(a.i(91562))},78294,function(a){a.n(a.i(71717))},96338,function(a){a.n(a.i(21751))},62837,function(a){a.n(a.i(40795))},88648,function(a){a.n(a.i(68113))},5672,function(a){a.n(a.i(42440))},22922,function(a){a.n(a.i(96772))},70408,function(a){a.n(a.i(9095))},94331,function(a){a.n(a.i(60644))},74793,function(a){a.n(a.i(33169))},15988,function(a){a.n(a.i(56952))},25766,function(a){a.n(a.i(77341))},9185,function(a){a.n(a.i(29432))},21626,function(a){a.n(a.i(975))},90833,function(a){a.n(a.i(46994))},38534,function(a){a.n(a.i(87613))},22980,function(a){a.n(a.i(96195))},65911,function(a){a.n(a.i(8950))},85826,function(a){a.n(a.i(37111))},56157,function(a){a.n(a.i(18970))},72842,function(a){a.n(a.i(75164))},34607,function(a){a.n(a.i(11614))},54897,function(a){a.n(a.i(30106))},5785,function(a){a.n(a.i(90588))},69411,function(a){a.n(a.i(75700))},63081,function(a){a.n(a.i(276))},79847,function(a){a.n(a.i(3343))},88604,function(a){a.n(a.i(9210))},71306,(a,b,c)=>{b.exports=a.r(18622)},1268,function(a){a.n(a.i(91315))},88530,function(a){a.n(a.i(10531))},50642,function(a){a.n(a.i(12213))},89257,function(a){a.n(a.i(58579))},16625,function(a){a.n(a.i(85034))},110,function(a){a.n(a.i(8770))},21565,function(a){a.n(a.i(41763))},25466,function(a){a.n(a.i(91505))},40781,function(a){a.n(a.i(49670))},8583,function(a){a.n(a.i(97918))},12948,(a,b,c)=>{"use strict";function d(a){return a}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"instrumentModuleGetter",{enumerable:!0,get:function(){return d}})}];
5
5
 
6
6
  //# sourceMappingURL=node_modules_next_dist_0janj0i6dqko7._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[12072,(a,b,c)=>{b.exports={name:"failproofai",version:"1.0.12-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.135.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.5","@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.8",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","jsonc-parser":"^3.3.1","posthog-node":"^5.50.0","smol-toml":"^1.9.1","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.1.6",undici:"7.29.1","brace-expansion":"5.0.12",sharp:"0.35.5","source-map-js":"1.2.2",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.12-beta.0","@failproofai/failproofaid-linux-arm64":"1.0.12-beta.0","@failproofai/failproofaid-darwin-x64":"1.0.12-beta.0","@failproofai/failproofaid-darwin-arm64":"1.0.12-beta.0"},failproofaidBinaries:{"linux-x64":"61710dd6261ff0deb1116e390c366c26809bf04bb2e2c16f279b7d79e1819049","linux-arm64":"5e9501522d35b32790664b4f3b1b90aa1728629f5013df94e72c2e2a11842bd2","darwin-x64":"e9d195cf30b6bc2427b7cbe89e354cc8dab7ae02e7c45a7e44a941eda84c2674","darwin-arm64":"d70ae3a3b8073ace0852a20671dba3d32f380b97ed4a01f5791a13d2fa12e63b"}}}];
1
+ module.exports=[12072,(a,b,c)=>{b.exports={name:"failproofai",version:"1.0.12-beta.2",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.135.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.5","@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.8",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","jsonc-parser":"^3.3.1","posthog-node":"^5.50.0","smol-toml":"^1.9.1","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.1.6",undici:"7.30.1",zod:"4.6.6","brace-expansion":"5.0.12",sharp:"0.35.5","source-map-js":"1.2.2",browserslist:"4.28.8"},optionalDependencies:{"@failproofai/failproofaid-linux-x64":"1.0.12-beta.2","@failproofai/failproofaid-linux-arm64":"1.0.12-beta.2","@failproofai/failproofaid-darwin-x64":"1.0.12-beta.2","@failproofai/failproofaid-darwin-arm64":"1.0.12-beta.2"},failproofaidBinaries:{"linux-x64":"4c09117fdb80d87792d1d2b77d9359cdbd0c522b5a6222ab7b927659130ddf54","linux-arm64":"dd390d76561267fc519ceb96fb90be340044e2f564bef36a44e284f227d93f29","darwin-x64":"62381f7ffe21d02289c36c4b205166b2867dbde986444d1ea185241b94fd04ef","darwin-arm64":"9ad798817d3048a5126e80dc71883538d37c1b6b6443e9c19389dc2583c8f675"}}}];
2
2
 
3
3
  //# sourceMappingURL=package_json_%5Bjson%5D_cjs_013tntikdft59._.js.map
@@ -1,4 +1,4 @@
1
- (()=>{"use strict";module.exports=[15638,a=>{var b=a.i(50227),c=a.i(54799),d=a.i(2157),e=a.i(12714),f=a.i(57764),g=a.i(66680),h=a.i(10695),i=a.i(32352),j=a.i(84948);a.i(28120);var k=a.i(98378),l=a.i(69839);a.i(75818),a.i(86304),a.i(91609);let m="__FAILPROOFAI_LOADING_HOOKS__",n=/policies\.(js|mjs|ts)$/,o=0,p=new Map;async function q(a){let b,c,d=Number.isFinite(c=Number(process.env.FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS))&&c>0?c:1e4;try{await Promise.race([import(a),new Promise((a,c)=>{b=setTimeout(()=>c(Error(`timed out loading module after ${d}ms`)),d),b.unref?.()})])}finally{b&&clearTimeout(b)}}let r=new Set;async function s(a,d){let e=globalThis;e[m]=!0;let g=[];try{let e=await (0,j.P)(),k=e?(0,f.pathToFileURL)(e).href:null,l=++o,m=`${j.F}.${process.pid}.${l}.${(0,c.randomUUID)()}.mjs`;g=await (0,j.j)(a,k,e,m,d?.verifyEntrySha);let n=await t(g,m),s=p.get(a);if(s?.fingerprint===n){for(let a of s.hooks)i.T.add({...a});return null}let u=a+m,v=(0,f.pathToFileURL)(u).href,w=(0,i.C)().length,x=(0,i.K)().length;await q(v);let y=(0,i.K)().slice(x).map(a=>a?.name);return d?.outsidePack&&y.length>0&&!r.has(a)&&(r.add(a),(0,h.g)(`${(0,b.basename)(a)}: semanticPolicies.add only takes effect in a pack published with \`failproofai publish\`; ${y.join(", ")} ${1===y.length?"is":"are"} never asked here`)),p.size>=500&&p.clear(),p.set(a,{fingerprint:n,hooks:(0,i.C)().slice(w).map(a=>({...a}))}),null}catch(f){let c=f instanceof Error?f.message:String(f),e=/Cannot find module|MODULE_NOT_FOUND|ENOENT/i.test(c)?"module_not_found":/SyntaxError|Unexpected token/i.test(c)?"syntax_error":/timed out loading module/i.test(c)?"load_timeout":"runtime_error";if((0,k.f)((0,l._)(),"custom_hooks_load_error",{error_type:e,is_convention:!!d?.conventionScope,convention_scope:d?.conventionScope??null,file_basename:(0,b.basename)(a)}),d?.strict)throw Error(`Failed to load custom hooks from ${a}: ${c}`);return(0,h.F)(`failed to load custom hooks from ${a}: ${c}`),{type:e,reason:c}}finally{e[m]=!1,await (0,j.H)(g)}}async function t(a,b){let c=(0,g.createHash)("sha256");for(let d of[...a].sort()){c.update(d.replaceAll(b,j.F));let a=await (0,e.readFile)(d,"utf8");c.update(a.replaceAll(b,j.F))}return c.digest("hex")}async function u(a,c){if(!a)return[];let e=(0,b.isAbsolute)(a)?a:(0,b.resolve)(c?.sessionCwd??process.cwd(),a);if(!(0,d.existsSync)(e)){if(c?.strict)throw Error(`Custom hooks file not found: ${e}`);return(0,h.g)(`customPoliciesPath not found: ${e}`),[]}return(0,i.c)(),await s(e,c),(0,i.C)()}a.s(["conventionPolicyId",0,function(a,b,c){return`convention:${a}:${b}:${c}`},"customPolicyId",0,function(a,b){return`custom:${a}:${b}`},"discoverPolicyFiles",0,function(a){if(!(0,d.existsSync)(a))return[];try{return(0,d.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isFile()&&n.test(a.name)).sort((a,b)=>a.name.localeCompare(b.name)).map(c=>(0,b.resolve)(a,c.name))}catch{return[]}},"loadCustomHooks",0,u])},32352,84948,a=>{let b="__failproofai_custom_hooks__",c="__failproofai_semantic_policies__";function d(){let a=globalThis;return Array.isArray(a[b])||(a[b]=[]),a[b]}a.s(["c",0,function(){let a=globalThis;a[b]=[],a[c]=[]},"T",0,{add(a){d().push(a)}},"C",0,function(){return d()},"K",0,function(){let a;return Array.isArray((a=globalThis)[c])||(a[c]=[]),a[c]}],32352);var e=a.i(24868),f=a.i(46786),g=a.i(14747),h=a.i(92509),i=a.i(54799),j=a.i(75818),k=a.i(10695);let l=".__failproofai_tmp__.mjs",m=/(?:import\s+(?:[\s\S]*?\s+from\s+)?|export\s+(?:[\s\S]*?\s+from\s+))(['"])(\.\.?\/[^'"]+)\1/g,n=/require\s*\(\s*(['"])(\.\.?\/[^'"]+)\1\s*\)/g;async function o(a){try{return await (0,e.access)(a),!0}catch{return!1}}async function p(){let a=process.env.FAILPROOFAI_DIST_PATH;if(a){let b=(0,g.resolve)(a,"index.js");if(await o(b))return b}for(let a of[(0,g.resolve)((0,g.dirname)(process.execPath),"..","assets","dist","index.js"),(0,g.resolve)(process.cwd(),"dist","index.js"),(0,g.resolve)(process.cwd(),"node_modules","failproofai","dist","index.js")])if(await o(a))return a;return null}async function q(a,b){let c=(0,g.resolve)(a,b);for(let a of[c,`${c}.js`,`${c}.mjs`,`${c}.ts`,(0,g.resolve)(c,"index.js")])if(await o(a))return a;return null}async function r(a,b,c,d){let f=(0,g.join)(a,b);return await (0,e.writeFile)(f,c,{encoding:"utf-8",mode:384,...d?{flag:"wx"}:{}}),f}async function s(a,b,c=l){let d=`import _cjs from '${b}';
1
+ (()=>{"use strict";module.exports=[15638,a=>{var b=a.i(50227),c=a.i(54799),d=a.i(2157),e=a.i(12714),f=a.i(57764),g=a.i(66680),h=a.i(10695),i=a.i(32352),j=a.i(84948);a.i(28120);var k=a.i(98378),l=a.i(69839);a.i(75818),a.i(86304),a.i(91609);let m="__FAILPROOFAI_LOADING_HOOKS__",n=/policies\.(js|mjs|ts)$/,o=0,p=new Map;async function q(a){let b,c,d=Number.isFinite(c=Number(process.env.FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS))&&c>0?c:1e4;try{await Promise.race([import(a),new Promise((a,c)=>{b=setTimeout(()=>c(Error(`timed out loading module after ${d}ms`)),d),b.unref?.()})])}finally{b&&clearTimeout(b)}}let r=new Set;async function s(a,d){let e=globalThis;e[m]=!0;let g=[];try{let e=await (0,j.P)(),k=e?(0,f.pathToFileURL)(e).href:null,l=++o,m=`${j.F}.${process.pid}.${l}.${(0,c.randomUUID)()}.mjs`;g=await (0,j.j)(a,k,e,m,d?.verifyEntrySha);let n=await t(g,m),s=p.get(a);if(s?.fingerprint===n){for(let a of s.hooks)i.T.add({...a});return null}let u=a+m,v=(0,f.pathToFileURL)(u).href,w=(0,i.C)().length,x=(0,i.K)().length;await q(v);let y=(0,i.K)().slice(x).map(a=>a?.name);return d?.outsidePack&&y.length>0&&!r.has(a)&&(r.add(a),(0,h.g)(`${(0,b.basename)(a)}: semanticPolicies.add only takes effect in a pack published with \`failproofai publish\`; ${y.join(", ")} ${1===y.length?"is":"are"} never asked here`)),p.size>=500&&p.clear(),p.set(a,{fingerprint:n,hooks:(0,i.C)().slice(w).map(a=>({...a}))}),null}catch(f){let c=f instanceof Error?f.message:String(f),e=/Cannot find module|MODULE_NOT_FOUND|Cannot find package/i.test(c)?"module_not_found":/ENOENT/i.test(c)?"file_not_found":/SyntaxError|Unexpected token/i.test(c)?"syntax_error":/timed out loading module/i.test(c)?"load_timeout":"runtime_error";if((0,k.f)((0,l._)(),"custom_hooks_load_error",{error_type:e,is_convention:!!d?.conventionScope,convention_scope:d?.conventionScope??null,file_basename:(0,b.basename)(a)}),d?.strict)throw Error(`Failed to load custom hooks from ${a}: ${c}`);return(0,h.F)(`failed to load custom hooks from ${a}: ${c}`),{type:e,reason:c}}finally{e[m]=!1,await (0,j.H)(g)}}async function t(a,b){let c=(0,g.createHash)("sha256");for(let d of[...a].sort()){c.update(d.replaceAll(b,j.F));let a=await (0,e.readFile)(d,"utf8");c.update(a.replaceAll(b,j.F))}return c.digest("hex")}async function u(a,c){if(!a)return[];let e=(0,b.isAbsolute)(a)?a:(0,b.resolve)(c?.sessionCwd??process.cwd(),a);if(!(0,d.existsSync)(e)){if(c?.strict)throw Error(`Custom hooks file not found: ${e}`);return(0,h.g)(`customPoliciesPath not found: ${e}`),[]}return(0,i.c)(),await s(e,c),(0,i.C)()}a.s(["conventionPolicyId",0,function(a,b,c){return`convention:${a}:${b}:${c}`},"customPolicyId",0,function(a,b){return`custom:${a}:${b}`},"discoverPolicyFiles",0,function(a){if(!(0,d.existsSync)(a))return[];try{return(0,d.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isFile()&&n.test(a.name)).sort((a,b)=>a.name.localeCompare(b.name)).map(c=>(0,b.resolve)(a,c.name))}catch{return[]}},"loadCustomHooks",0,u])},32352,84948,a=>{let b="__failproofai_custom_hooks__",c="__failproofai_semantic_policies__";function d(){let a=globalThis;return Array.isArray(a[b])||(a[b]=[]),a[b]}a.s(["c",0,function(){let a=globalThis;a[b]=[],a[c]=[]},"T",0,{add(a){d().push(a)}},"C",0,function(){return d()},"K",0,function(){let a;return Array.isArray((a=globalThis)[c])||(a[c]=[]),a[c]}],32352);var e=a.i(24868),f=a.i(46786),g=a.i(14747),h=a.i(92509),i=a.i(54799),j=a.i(75818),k=a.i(10695);let l=".__failproofai_tmp__.mjs",m=/(?:import\s+(?:[\s\S]*?\s+from\s+)?|export\s+(?:[\s\S]*?\s+from\s+))(['"])(\.\.?\/[^'"]+)\1/g,n=/require\s*\(\s*(['"])(\.\.?\/[^'"]+)\1\s*\)/g;async function o(a){try{return await (0,e.access)(a),!0}catch{return!1}}async function p(){let a=process.env.FAILPROOFAI_DIST_PATH;if(a){let b=(0,g.resolve)(a,"index.js");if(await o(b))return b}for(let a of[(0,g.resolve)((0,g.dirname)(process.execPath),"..","assets","dist","index.js"),(0,g.resolve)(process.cwd(),"dist","index.js"),(0,g.resolve)(process.cwd(),"node_modules","failproofai","dist","index.js")])if(await o(a))return a;return null}async function q(a,b){let c=(0,g.resolve)(a,b);for(let a of[c,`${c}.js`,`${c}.mjs`,`${c}.ts`,(0,g.resolve)(c,"index.js")])if(await o(a))return a;return null}async function r(a,b,c,d){let f=(0,g.join)(a,b);return await (0,e.writeFile)(f,c,{encoding:"utf-8",mode:384,...d?{flag:"wx"}:{}}),f}async function s(a,b,c=l){let d=`import _cjs from '${b}';
2
2
  export const customPolicies = _cjs.customPolicies;
3
3
  export const semanticPolicies = _cjs.semanticPolicies;
4
4
  export const getCustomHooks = _cjs.getCustomHooks;
@@ -0,0 +1,5 @@
1
+ (()=>{"use strict";module.exports=[86017,91997,a=>{let b=["claude","codex","copilot","cursor","opencode","pi","hermes","openclaw","factory","devin","antigravity","goose"],c=["SessionStart","SessionEnd","UserPromptSubmit","PreToolUse","PermissionRequest","PermissionDenied","PostToolUse","PostToolUseFailure","Notification","SubagentStart","SubagentStop","TaskCreated","TaskCompleted","Stop","StopFailure","TeammateIdle","InstructionsLoaded","ConfigChange","CwdChanged","FileChanged","WorktreeCreate","WorktreeRemove","PreCompact","PostCompact","Elicitation","ElicitationResult","UserPromptExpansion","PostToolBatch","Setup"].filter(a=>"WorktreeCreate"!==a);a.s(["X",0,["PreToolUse","PostToolUse","PreInvocation","Stop"],"m",0,["user","project"],"I",0,c,"p",0,{session_start:"SessionStart",pre_tool_use:"PreToolUse",permission_request:"PermissionRequest",post_tool_use:"PostToolUse",user_prompt_submit:"UserPromptSubmit",stop:"Stop",subagent_start:"SubagentStart",pre_compact:"PreCompact",post_compact:"PostCompact",subagent_stop:"SubagentStop"},"W",0,["session_start","pre_tool_use","permission_request","post_tool_use","user_prompt_submit","stop","subagent_start","pre_compact","post_compact","subagent_stop"],"L",0,["user","project"],"d",0,["SessionStart","SessionEnd","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","PostToolUseFailure","ErrorOccurred","PreCompact","PermissionRequest","Notification"],"w",0,["user","project"],"s",0,["sessionStart","sessionEnd","beforeSubmitPrompt","preToolUse","postToolUse","stop","subagentStop"],"Y",0,["user","project"],"D",0,["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PermissionRequest","Stop","SessionEnd"],"c",0,["user","project"],"n",0,["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Notification","Stop","SubagentStop","PreCompact","SessionEnd"],"B",0,["user","project"],"Z",0,"__failproofai_hook__","i",0,["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","SessionEnd"],"x",0,["user","project"],"y",0,["pre_tool_call","post_tool_call","on_session_start","on_session_end","subagent_stop"],"M",0,["user"],"F",0,["user","project","local"],"z",0,b,"P",0,["before_tool_call","after_tool_call","before_agent_run","before_agent_finalize","session_start","session_end","subagent_ended","before_compaction"],"E",0,["user"],"e",0,["tool.execute.before","tool.execute.after","session.created","session.deleted","session.idle","message.updated","permission.ask"],"O",0,["user","project"],"J",0,["session_start","session_shutdown","input","tool_call","user_bash","tool_result","agent_end"],"G",0,["user","project"]],91997);let d=/^agt_[0-9a-f]{16,32}$/,e=new Set(b);a.s(["f",0,function(a,b){if(null==a)return;if(b<3||!Array.isArray(a)||a.length<1||a.length>32)throw Error("invalid agentTargets in cloud-managed active manifest");let c=new Set;return a.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a)||Object.keys(a).some(a=>"integration"!==a&&"instanceId"!==a)||"string"!=typeof a.integration||!e.has(a.integration)||void 0!==a.instanceId&&("string"!=typeof a.instanceId||!d.test(a.instanceId)))throw Error("invalid agentTargets in cloud-managed active manifest");let b=`${a.integration}\0${a.instanceId??""}`;if(c.has(b))throw Error("duplicate agentTargets in cloud-managed active manifest");return c.add(b),{integration:a.integration,...void 0!==a.instanceId?{instanceId:a.instanceId}:{}}})}],86017)},86304,91609,89790,68561,48630,9909,a=>{var b=a.i(66680),c=a.i(2157),d=a.i(50227),e=a.i(12072),f=a.i(75818),g=a.i(86017);a.i(10695);let h=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"]),i=new Set,j=a=>"string"==typeof a&&a.length>0;function k(a){let b={};("hard"===a.authority||"reviewable"===a.authority)&&(b.authority=a.authority);let c=a.reviewedBy;return Array.isArray(c)&&c.length>0&&c.every(j)&&(b.reviewedBy=[...c]),b}a.s(["g",0,h,"i",0,k,"d",0,function(a,b=i,c){let d=a?.authority==="reviewable";if(!a||"hard"==(!0!==a.alwaysOn&&"reviewable"===a.authority&&Array.isArray(a.reviewedBy)&&a.reviewedBy.filter(a=>"string"==typeof a&&a.length>0).length>0?"reviewable":"hard")){var e;return d?{authority:"hard",downgraded:!0===(e=a).alwaysOn?"it is alwaysOn, and the self-protection guard is never reviewable":Array.isArray(e.reviewedBy)&&0!==e.reviewedBy.length?"reviewedBy is not a list of semantic policy names":"reviewedBy does not name any semantic policy"}:{authority:"hard"}}let f=a.reviewedBy;if(!f.every(j))return{authority:"hard",downgraded:"reviewedBy is not a list of semantic policy names"};let g=f.filter(a=>!b.has(a));return 0!==b.size||g.some(a=>c?.has(a))?g.length>0?{authority:"hard",downgraded:`reviewedBy names ${g.map(a=>(function(a,b,c){let d=JSON.stringify(a),e=c?.get(a);if(e)return`${d}, which packs ${e.join(" and ")} declare differently, so it is asked for neither`;if(b===h)return`${d}, which is not a semantic policy in this build`;let f=[...b].sort(),g=f.length>6?`${f.slice(0,6).join(", ")} and ${f.length-6} more`:f.join(", ");return`${d}, which is not among the Jev checks it is judged against (${g})`})(a,b,c)).join("; ")}`}:{authority:"reviewable",reviewedBy:[...new Set(f)]}:{authority:"hard"}}],91609);let l=[1,2,3],m=/^[a-f0-9]{64}$/,n=/^[A-Za-z0-9._-]{1,128}$/;function o(){return process.env.FAILPROOFAI_CLOUD_POLICY_DIR??(0,f.I)()}function p(a,b){if(!b||(0,d.isAbsolute)(b))throw Error(`unsafe managed policy path ${JSON.stringify(b)}`);let e=(0,d.resolve)(a,b),f=(0,d.relative)(a,e);if(f.startsWith("..")||(0,d.isAbsolute)(f))throw Error(`managed policy path escapes its root: ${JSON.stringify(b)}`);let g=(0,c.realpathSync)(a),h=(0,c.realpathSync)(e),i=(0,d.relative)(g,h);if(i.startsWith("..")||(0,d.isAbsolute)(i))throw Error(`managed policy symlink escapes its root: ${JSON.stringify(b)}`);return h}let q=null;function r(){if(function(){try{let a=JSON.parse((0,c.readFileSync)((0,f.y)(),"utf8"));if(!a||"object"!=typeof a||Array.isArray(a))return!1;let b=a.mode;return!!b&&"object"==typeof b&&!Array.isArray(b)&&"oss"===b.kind}catch{return!1}}()){q=null;return}let a=(0,d.resolve)(o(),"active.json"),b=function(a){try{let b=(0,c.statSync)(a,{bigint:!0});return`${b.dev}:${b.ino}:${b.mode}:${b.size}:${b.mtimeNs}:${b.ctimeNs}`}catch(b){let a=b.code;if("ENOENT"===a||"ENOTDIR"===a)return null;throw b}}(a);if(null===b){q=null;return}if(q&&q.path===a&&q.version===b)return q.value;let e=JSON.parse((0,c.readFileSync)(a,"utf8"));return q={path:a,version:b,value:e},e}let s=/^cloud:[^/]+\/./;function t(a,b){return"reviewable"!==a.authority?a.authority?{authority:a.authority}:{}:"observe"===a.effect||"observe"!==b&&"enforce"!==b?{authority:"hard"}:{authority:"reviewable",reviewedBy:(a.reviewedBy??[]).map(b=>{var c;return s.test(b)?b:(c=a.id,`cloud:${c}/${b}`)})}}a.s(["i",0,t,"O",0,function(a,b){let c=[];for(let d of a){let a=t(d,b);"reviewable"===a.authority&&c.push(...a.reviewedBy??[])}return c},"h",0,function(){return function(a){let d,e=o();try{d=r()}catch(a){throw Error(`failed to read cloud-managed active manifest: ${a instanceof Error?a.message:String(a)}`)}if(void 0===d)return[];let f=function(a){if(!a||"object"!=typeof a)throw Error("active manifest is not an object");if(!l.includes(a.schemaVersion))throw Error(`unsupported active manifest schema ${String(a.schemaVersion)} (supported: ${l.join(", ")})`);let b=a.deployment??a.generation;if(!Number.isSafeInteger(b)||(b??-1)<0)throw Error("active manifest deployment is invalid");if(!Array.isArray(a.policies))throw Error("active manifest policies is not an array");let c=a.policies.map(a=>({...a,version:a.version??a.revision}));return{schemaVersion:a.schemaVersion,deployment:b,policies:c}}(d),h=f.policies.filter(b=>a((0,g.f)(b.agentTargets,f.schemaVersion))),i=new Set;return h.map(a=>{if(!n.test(a.id)||"."===a.id||".."===a.id)throw Error(`unsafe cloud-managed policy id ${JSON.stringify(a.id)}`);if(!Number.isSafeInteger(a.version)||a.version<0)throw Error(`invalid version for cloud-managed policy ${a.id}`);if(!m.test(a.sha256))throw Error(`invalid SHA-256 for cloud-managed policy ${a.id}`);if(i.has(a.id))throw Error(`duplicate cloud-managed policy id ${a.id}`);i.add(a.id);let d=p(e,a.path),h=(0,c.readFileSync)(d),j=(0,b.createHash)("sha256").update(h).digest("hex");if(j!==a.sha256)throw Error(`cloud-managed policy ${a.id} failed integrity verification: expected ${a.sha256}, got ${j}`);if(void 0!==a.effect&&"enforce"!==a.effect&&"observe"!==a.effect)throw Error(`unknown effect ${JSON.stringify(a.effect)} for cloud-managed policy ${a.id}`);return{id:a.id,version:a.version,effect:a.effect??"enforce",sha256:a.sha256,path:d,deployment:f.deployment,...(0,g.f)(a.agentTargets,f.schemaVersion)?{agentTargets:(0,g.f)(a.agentTargets,f.schemaVersion)}:{},...k(a)}})}(()=>!0)},"D",0,function(){try{var a;return a=function(){let a=r();if(void 0===a)return null;if(!a||"object"!=typeof a||Array.isArray(a))throw Error("active manifest is not an object");if(!l.includes(a.schemaVersion))throw Error(`unsupported active manifest schema ${String(a.schemaVersion)}`);return a}()?.jevMode,"off"===a||"observe"===a||"enforce"===a?a:null}catch{return null}},"t",0,p],89790);let u=/^(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-]+)*))?$/,v=/^(?:0|[1-9]\d*)$/;function w(a){if("string"!=typeof a)return null;let b=u.exec(a);return b?{major:Number(b[1]),minor:Number(b[2]),patch:Number(b[3]),prerelease:void 0===b[4]?[]:b[4].split(".").map(a=>v.test(a)?Number(a):a)}:null}let x=(a,b)=>a<b?-1:+(a>b);function y(a,b){let c=w(a),d=w(b);return c&&d?x(c.major,d.major)||x(c.minor,d.minor)||x(c.patch,d.patch)||function(a,b){if(0===a.length&&0===b.length)return 0;if(0===a.length)return 1;if(0===b.length)return -1;for(let c=0;c<Math.min(a.length,b.length);c++){let d=a[c],e=b[c];if(d===e)continue;let f="number"==typeof d,g="number"==typeof e;if(f!==g)return f?-1:1;if(f&&g)return x(d,e);return d<e?-1:1}return x(a.length,b.length)}(c.prerelease,d.prerelease):null}a.s(["f",0,y],68561);let z=["always","protected_branch","in_git_repo","has_paths","paths_outside_project","system_or_root_paths"];function A(a){return"string"==typeof a&&z.includes(a)}a.s(["B",0,z,"M",0,A],48630);let B=[1],C=/^[a-f0-9]{64}$/,D=/^[A-Za-z0-9._-]{1,64}\/[A-Za-z0-9._-]{1,64}$/,E=/^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$/,F=/^[0-9a-f]{7,40}$/,G=/^[A-Za-z0-9._-]{1,128}$/,H=/^[a-z][a-z0-9_]{0,31}$/,I=new Set(["exempt","user_asked"]),J=new Set(["shell","write","read","network","other"]);function K(){return process.env.FAILPROOFAI_PACK_DIR??(0,f.n)()}function L(a){if("string"!=typeof a.id||!D.test(a.id))throw Error(`unsafe pack id ${JSON.stringify(a.id)}`);if("string"!=typeof a.version||!E.test(a.version))throw Error(`invalid version for pack ${a.id}`);if(void 0!==a.effect&&"enforce"!==a.effect&&"observe"!==a.effect)throw Error(`unknown effect ${JSON.stringify(a.effect)} for pack ${a.id}`);let b="string"==typeof a.commit&&F.test(a.commit.trim().toLowerCase())?a.commit.trim().toLowerCase():void 0;return{id:a.id,version:a.version,effect:a.effect??"enforce",...b?{commit:b}:{}}}function M(){return process.env.FAILPROOFAI_PACK_DIR?(0,d.resolve)(process.env.FAILPROOFAI_PACK_DIR,"installed.json"):(0,f.v)()}let N=new Set(["string","number","boolean","string[]","pattern[]"]);function O(a,b,c,d){let e=`${a} policy #${c}`;if(!b||"object"!=typeof b)throw Error(`${e} is not an object`);let f=b.name;if("string"!=typeof f||!G.test(f))throw Error(`${e} has an unsafe name ${JSON.stringify(f)}`);if("alwaysOn"in b)throw Error(`${e} declares alwaysOn, which packs may not set`);if("string"!=typeof b.description||0===b.description.length)throw Error(`${e} is missing a description`);if("string"!=typeof b.category||0===b.category.length)throw Error(`${e} is missing a category`);if("boolean"!=typeof b.defaultEnabled)throw Error(`${e} is missing defaultEnabled`);if(!b.match||"object"!=typeof b.match)throw Error(`${e} is missing a match`);let g=b.match;for(let a of["events","toolNames"]){let b=g[a];if(void 0!==b&&(!Array.isArray(b)||b.some(a=>"string"!=typeof a||0===a.length)))throw Error(`${e} has a match.${a} that is not a list of names`)}let h=k(b),i=["authority","reviewedBy"].filter(a=>a in b&&!(a in h));if("params"in b){let a=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"params is not an object";for(let[b,c]of Object.entries(a)){if(0===b.length)return"params has an empty parameter name";if(!c||"object"!=typeof c||Array.isArray(c))return`params.${b} is not an object`;if("string"!=typeof c.type||!N.has(c.type))return`params.${b} has type ${JSON.stringify(c.type)}, which is not one of ${[...N].join(", ")}`;if("string"!=typeof c.description||0===c.description.length)return`params.${b} is missing a description`;if(!("default"in c))return`params.${b} is missing a default`}}(b.params);a&&(d?.push(`${e} declares a params schema that was dropped: ${a}`),i.push("params"))}return i.length>0?Object.fromEntries(Object.entries(b).filter(([a])=>!i.includes(a))):b}function P(a,b,c=e.version){if(void 0===b)return{kind:"satisfied"};let d=y(c,b);return null===d?{kind:"unreadable",reason:`pack ${a} declares minCliVersion ${JSON.stringify(b)}, which is not a version this CLI can compare against its own (${c}) — the requirement was ignored`}:d<0?{kind:"too-old",reason:`pack ${a} needs failproofai ${String(b)} or newer and this is ${c} — run \`npm i -g "failproofai@>=${String(b)}" && failproofai update\``}:{kind:"satisfied",declared:b}}function Q(a,b,c,d){if("string"!=typeof c||0===c.length)throw Error(`${a} is missing ${b}`);if(c.length>d)throw Error(`${a} has a ${b} of ${c.length} characters, over the ${d}-character cap`);return c}function R(a,b,c){let d;if(!b||"object"!=typeof b||Array.isArray(b))throw Error(`${a} is not an object`);if(null!==c)d=c;else{if("string"!=typeof b.id||!H.test(b.id))throw Error(`${a} has an unsafe id ${JSON.stringify(b.id)}`);if(I.has(b.id))throw Error(`${a} uses the reserved probe id ${JSON.stringify(b.id)}`);d=b.id}let e=Q(a,"instructions",b.instructions,600);if(void 0===b.criteria)return{id:d,instructions:e};if(!b.criteria||"object"!=typeof b.criteria||Array.isArray(b.criteria))throw Error(`${a} has criteria that is not an object`);let f=b.criteria;return{id:d,instructions:e,criteria:{true:Q(a,"criteria.true",f.true,300),false:Q(a,"criteria.false",f.false,300)}}}function S(a,b,c){let d=`${a} semantic policy #${c}`;if(!b||"object"!=typeof b||Array.isArray(b))throw Error(`${d} is not an object`);let e=b.name;if("string"!=typeof e||!G.test(e))throw Error(`${d} has an unsafe name ${JSON.stringify(e)}`);if("alwaysOn"in b)throw Error(`${d} declares alwaysOn, which packs may not set`);let f=Q(`${a} semantic policy ${e}`,"title",b.title,120),g=`${a} semantic policy ${e}`;if(!Array.isArray(b.appliesTo)||0===b.appliesTo.length)throw Error(`${g} has no appliesTo tool classes`);let h=b.appliesTo.find(a=>"string"!=typeof a||!J.has(a));if(void 0!==h)throw Error(`${g} applies to ${JSON.stringify(h)}, which is not a tool class (${[...J].join(", ")})`);if("deny"!==b.mode&&"instruct"!==b.mode)throw Error(`${g} has mode ${JSON.stringify(b.mode)}, which must be "deny" or "instruct"`);if("boolean"!=typeof b.userCanOverride)throw Error(`${g} is missing userCanOverride, which has no default`);if(!Array.isArray(b.probes)||0===b.probes.length)throw Error(`${g} declares no probes`);if(b.probes.length>6)throw Error(`${g} declares ${b.probes.length} probes, over the cap of 6`);let i=b.probes.map((a,b)=>R(`${g} probe #${b}`,a,null)),j=new Set;for(let a of i){if(j.has(a.id))throw Error(`${g} declares probe ${a.id} twice`);j.add(a.id)}let k=void 0===b.exempt?void 0:R(`${g} exempt`,b.exempt,"exempt");if(void 0!==b.precondition&&!A(b.precondition))throw Error(`${g} names precondition ${JSON.stringify(b.precondition)}, which this build does not have (${z.join(", ")})`);let l=Q(g,"guidance",b.guidance,600);return{name:e,title:f,appliesTo:b.appliesTo,mode:b.mode,userCanOverride:b.userCanOverride,probes:i,...k?{exempt:k}:{},...void 0!==b.precondition?{precondition:b.precondition}:{},guidance:l}}function T(a){return a instanceof Error?a.message:String(a)}function U(a){return/^github:FailproofAI\//i.test(a.source??"")}function V(a,b){return h.has(b)&&!U(a)}a.s(["P",0,24,"r",0,F,"T",0,P,"Q",0,function(){try{let a=JSON.parse((0,c.readFileSync)(M(),"utf8"));if(!Array.isArray(a.packs))return!1;return a.packs.some(a=>!!a&&"object"==typeof a&&Array.isArray(a.policies)&&a.policies.length>0)}catch{return!1}},"E",0,function(a){return a.semantic??[]},"N",0,K,"$",0,L,"Z",0,O,"U",0,S,"V",0,function(){let a,d=M();if(!(0,c.existsSync)(d))return{packs:[],errors:[]};try{a=JSON.parse((0,c.readFileSync)(d,"utf8"))}catch(a){return{packs:[],errors:[{id:null,reason:`unreadable pack manifest: ${T(a)}`}]}}if(!a||"object"!=typeof a)return{packs:[],errors:[{id:null,reason:"pack manifest is not an object"}]};let e=a;if(!B.includes(e.schemaVersion))return{packs:[],errors:[{id:null,reason:`unsupported pack manifest schema ${String(e.schemaVersion)} (supported: ${B.join(", ")})`}]};if(!Array.isArray(e.packs))return{packs:[],errors:[{id:null,reason:"pack manifest packs is not an array"}]};let f=K(),g=[],h=[],i=[],j=new Set;for(let a of e.packs){let d=a&&"object"==typeof a&&"string"==typeof a.id?a.id:null,e=[];try{let d=function(a,d,e){if(!d||"object"!=typeof d)throw Error("pack entry is not an object");let f=L(d);if("string"!=typeof d.source||0===d.source.length)throw Error(`pack ${d.id} has no source`);if("string"!=typeof d.sha256||!C.test(d.sha256))throw Error(`invalid SHA-256 for pack ${d.id}`);let g=f.effect,h=P(f.id,d.minCliVersion);if("too-old"===h.kind)throw Error(h.reason);"unreadable"===h.kind&&e.push(h.reason);let i=p(a,d.entry),j=(0,b.createHash)("sha256").update((0,c.readFileSync)(i)).digest("hex");if(j!==d.sha256)throw Error(`pack ${d.id} failed integrity verification: expected ${d.sha256}, got ${j}`);if(!Array.isArray(d.policies))throw Error(`pack ${d.id} policies is not an array`);let k=d.policies.map((a,b)=>O(d.id,a,b,e)),l=new Set;for(let a of k){if(l.has(a.name))throw Error(`pack ${d.id} declares ${a.name} twice`);l.add(a.name)}let m=null;if(void 0!==d.enabled){if(!Array.isArray(d.enabled)||d.enabled.some(a=>"string"!=typeof a))throw Error(`pack ${d.id} enabled is not an array of names`);m=d.enabled.filter(a=>l.has(a))}let n=null;if(void 0!==d.clis){if(!Array.isArray(d.clis)||d.clis.some(a=>"string"!=typeof a))throw Error(`pack ${d.id} clis is not an array of agent names`);n=d.clis}return{clis:n,id:f.id,version:f.version,source:d.source,path:i,sha256:d.sha256,effect:g,policies:k,semantic:function(a,b,c){if(void 0===b)return[];if(!Array.isArray(b))return c.push(`pack ${a} semantic is not an array, so none of it was loaded`),[];let d=[],e=new Set;for(let[f,g]of b.entries()){if(d.length>=24){c.push(`pack ${a} declares more than 24 semantic policies; the ${b.length-24} past that cap were dropped`);break}try{let b=S(a,g,f);if(e.has(b.name))throw Error(`pack ${a} declares semantic policy ${b.name} twice`);e.add(b.name),d.push(b)}catch(a){c.push(T(a))}}return d}(f.id,d.semantic,e),..."satisfied"===h.kind&&h.declared?{minCliVersion:h.declared}:{},enabled:m}}(f,a,e);if(j.has(d.id))throw Error(`duplicate pack id ${d.id}`);j.add(d.id),g.push(d),i.push(...e)}catch(c){let b=a&&("observe"===a.effect||"enforce"===a.effect)?a.effect:"enforce";h.push({id:d,reason:T(c),effect:b,...Array.isArray(a?.policies)?{declared:function(a){let b=[];for(let c of a)c&&"object"==typeof c&&"string"==typeof c.name&&c.match&&"object"==typeof c.match&&b.push(c);return b}(a.policies)}:{},...Array.isArray(a?.policies)&&0===a.policies.length?{semanticOnly:!0}:{},...Array.isArray(a?.clis)&&a.clis.every(a=>"string"==typeof a)?{clis:a.clis}:{}})}}return{packs:g,errors:h,...i.length>0?{warnings:i}:{}}},"M",0,function(a){return a.exempt?[...a.probes,a.exempt]:a.probes}],9909),a.s(["v",0,function(a){let b=new Map,c=new Map;for(let d of a)for(let a of d.semantic??[]){if(V(d,a.name))continue;let e=function a(b){if(Array.isArray(b))return`[${b.map(a).join(",")}]`;if(null!==b&&"object"==typeof b){let c=Object.entries(b).filter(([,a])=>void 0!==a).sort(([a],[b])=>a<b?-1:+(a>b));return`{${c.map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}return JSON.stringify(b)??"null"}(a),f=b.get(a.name);if(void 0===f){b.set(a.name,{form:e,ids:[d.id]});continue}f.ids.push(d.id),f.form!==e&&c.set(a.name,f.ids)}return c},"g",0,U,"B",0,V,"r",0,function(a,b){return a.filter(a=>"observe"!==a.effect&&!(b&&Array.isArray(a.clis)&&a.clis.length>0&&!a.clis.includes(b)))}],86304)},10695,a=>{var b=a.i(2157),c=a.i(50227),d=a.i(75818);let e={info:0,warn:1,error:2},f=(0,d.A)(),g=!1,h="warn",i=!1,j=f;function k(a){return!function(){if(g)return;g=!0;let a=(process.env.FAILPROOFAI_LOG_LEVEL??"").toLowerCase();("info"===a||"warn"===a||"error"===a)&&(h=a);let b=(process.env.FAILPROOFAI_HOOK_LOG_FILE??"").trim();b&&(i=!0,"1"!==b&&"true"!==b&&(j=b))}(),e[a]>=e[h]}function l(a,b){process.stderr.write(`[failproofai:hook] ${a} ${b}
2
+ `)}function m(a,d){if(i)try{(0,b.existsSync)(j)||(0,b.mkdirSync)(j,{recursive:!0});let e=(0,c.join)(j,"hooks.log");try{if((0,b.statSync)(e).size>=524288){let a=`hooks-${Date.now()}.log`;(0,b.renameSync)(e,(0,c.join)(j,a))}}catch{}let f=new Date().toISOString(),g=`[${f}] ${a} ${d}
3
+ `;(0,b.appendFileSync)(e,g,"utf-8")}catch{}}a.s(["F",0,function(a){k("error")&&(l("ERROR",a),m("ERROR",a))},"g",0,function(a){k("warn")&&(l("WARN",a),m("WARN",a))}])}]})();
4
+
5
+ //# sourceMappingURL=src_hooks_0agdmptetetdt._.js.map
@@ -0,0 +1,5 @@
1
+ (()=>{"use strict";module.exports=[86017,91997,a=>{let b=["claude","codex","copilot","cursor","opencode","pi","hermes","openclaw","factory","devin","antigravity","goose"],c=["SessionStart","SessionEnd","UserPromptSubmit","PreToolUse","PermissionRequest","PermissionDenied","PostToolUse","PostToolUseFailure","Notification","SubagentStart","SubagentStop","TaskCreated","TaskCompleted","Stop","StopFailure","TeammateIdle","InstructionsLoaded","ConfigChange","CwdChanged","FileChanged","WorktreeCreate","WorktreeRemove","PreCompact","PostCompact","Elicitation","ElicitationResult","UserPromptExpansion","PostToolBatch","Setup"].filter(a=>"WorktreeCreate"!==a);a.s(["X",0,["PreToolUse","PostToolUse","PreInvocation","Stop"],"m",0,["user","project"],"I",0,c,"p",0,{session_start:"SessionStart",pre_tool_use:"PreToolUse",permission_request:"PermissionRequest",post_tool_use:"PostToolUse",user_prompt_submit:"UserPromptSubmit",stop:"Stop",subagent_start:"SubagentStart",pre_compact:"PreCompact",post_compact:"PostCompact",subagent_stop:"SubagentStop"},"W",0,["session_start","pre_tool_use","permission_request","post_tool_use","user_prompt_submit","stop","subagent_start","pre_compact","post_compact","subagent_stop"],"L",0,["user","project"],"d",0,["SessionStart","SessionEnd","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","PostToolUseFailure","ErrorOccurred","PreCompact","PermissionRequest","Notification"],"w",0,["user","project"],"s",0,["sessionStart","sessionEnd","beforeSubmitPrompt","preToolUse","postToolUse","stop","subagentStop"],"Y",0,["user","project"],"D",0,["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PermissionRequest","Stop","SessionEnd"],"c",0,["user","project"],"n",0,["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Notification","Stop","SubagentStop","PreCompact","SessionEnd"],"B",0,["user","project"],"Z",0,"__failproofai_hook__","i",0,["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","SessionEnd"],"x",0,["user","project"],"y",0,["pre_tool_call","post_tool_call","on_session_start","on_session_end","subagent_stop"],"M",0,["user"],"F",0,["user","project","local"],"z",0,b,"P",0,["before_tool_call","after_tool_call","before_agent_run","before_agent_finalize","session_start","session_end","subagent_ended","before_compaction"],"E",0,["user"],"e",0,["tool.execute.before","tool.execute.after","session.created","session.deleted","session.idle","message.updated","permission.ask"],"O",0,["user","project"],"J",0,["session_start","session_shutdown","input","tool_call","user_bash","tool_result","agent_end"],"G",0,["user","project"]],91997);let d=/^agt_[0-9a-f]{16,32}$/,e=new Set(b);a.s(["f",0,function(a,b){if(null==a)return;if(b<3||!Array.isArray(a)||a.length<1||a.length>32)throw Error("invalid agentTargets in cloud-managed active manifest");let c=new Set;return a.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a)||Object.keys(a).some(a=>"integration"!==a&&"instanceId"!==a)||"string"!=typeof a.integration||!e.has(a.integration)||void 0!==a.instanceId&&("string"!=typeof a.instanceId||!d.test(a.instanceId)))throw Error("invalid agentTargets in cloud-managed active manifest");let b=`${a.integration}\0${a.instanceId??""}`;if(c.has(b))throw Error("duplicate agentTargets in cloud-managed active manifest");return c.add(b),{integration:a.integration,...void 0!==a.instanceId?{instanceId:a.instanceId}:{}}})}],86017)},86304,91609,89790,68561,48630,9909,a=>{var b=a.i(66680),c=a.i(2157),d=a.i(50227),e=a.i(12072),f=a.i(75818),g=a.i(86017);a.i(10695);let h=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"]),i=new Set,j=a=>"string"==typeof a&&a.length>0;function k(a){let b={};("hard"===a.authority||"reviewable"===a.authority)&&(b.authority=a.authority);let c=a.reviewedBy;return Array.isArray(c)&&c.length>0&&c.every(j)&&(b.reviewedBy=[...c]),b}a.s(["g",0,h,"i",0,k,"d",0,function(a,b=i,c){let d=a?.authority==="reviewable";if(!a||"hard"==(!0!==a.alwaysOn&&"reviewable"===a.authority&&Array.isArray(a.reviewedBy)&&a.reviewedBy.filter(a=>"string"==typeof a&&a.length>0).length>0?"reviewable":"hard")){var e;return d?{authority:"hard",downgraded:!0===(e=a).alwaysOn?"it is alwaysOn, and the self-protection guard is never reviewable":Array.isArray(e.reviewedBy)&&0!==e.reviewedBy.length?"reviewedBy is not a list of semantic policy names":"reviewedBy does not name any semantic policy"}:{authority:"hard"}}let f=a.reviewedBy;if(!f.every(j))return{authority:"hard",downgraded:"reviewedBy is not a list of semantic policy names"};let g=f.filter(a=>!b.has(a));return 0!==b.size||g.some(a=>c?.has(a))?g.length>0?{authority:"hard",downgraded:`reviewedBy names ${g.map(a=>(function(a,b,c){let d=JSON.stringify(a),e=c?.get(a);if(e)return`${d}, which packs ${e.join(" and ")} declare differently, so it is asked for neither`;if(b===h)return`${d}, which is not a semantic policy in this build`;let f=[...b].sort(),g=f.length>6?`${f.slice(0,6).join(", ")} and ${f.length-6} more`:f.join(", ");return`${d}, which is not among the Jev checks it is judged against (${g})`})(a,b,c)).join("; ")}`}:{authority:"reviewable",reviewedBy:[...new Set(f)]}:{authority:"hard"}}],91609);let l=[1,2,3],m=/^[a-f0-9]{64}$/,n=/^[A-Za-z0-9._-]{1,128}$/;function o(){return process.env.FAILPROOFAI_CLOUD_POLICY_DIR??(0,f.I)()}function p(a,b){if(!b||(0,d.isAbsolute)(b))throw Error(`unsafe managed policy path ${JSON.stringify(b)}`);let e=(0,d.resolve)(a,b),f=(0,d.relative)(a,e);if(f.startsWith("..")||(0,d.isAbsolute)(f))throw Error(`managed policy path escapes its root: ${JSON.stringify(b)}`);let g=(0,c.realpathSync)(a),h=(0,c.realpathSync)(e),i=(0,d.relative)(g,h);if(i.startsWith("..")||(0,d.isAbsolute)(i))throw Error(`managed policy symlink escapes its root: ${JSON.stringify(b)}`);return h}let q=null;function r(){if(function(){try{let a=JSON.parse((0,c.readFileSync)((0,f.y)(),"utf8"));if(!a||"object"!=typeof a||Array.isArray(a))return!1;let b=a.mode;return!!b&&"object"==typeof b&&!Array.isArray(b)&&"oss"===b.kind}catch{return!1}}()){q=null;return}let a=(0,d.resolve)(o(),"active.json"),b=function(a){try{let b=(0,c.statSync)(a,{bigint:!0});return`${b.dev}:${b.ino}:${b.mode}:${b.size}:${b.mtimeNs}:${b.ctimeNs}`}catch(b){let a=b.code;if("ENOENT"===a||"ENOTDIR"===a)return null;throw b}}(a);if(null===b){q=null;return}if(q&&q.path===a&&q.version===b)return q.value;let e=JSON.parse((0,c.readFileSync)(a,"utf8"));return q={path:a,version:b,value:e},e}let s=/^cloud:[^/]+\/./;function t(a,b){return"reviewable"!==a.authority?a.authority?{authority:a.authority}:{}:"observe"===a.effect||"observe"!==b&&"enforce"!==b?{authority:"hard"}:{authority:"reviewable",reviewedBy:(a.reviewedBy??[]).map(b=>{var c;return s.test(b)?b:(c=a.id,`cloud:${c}/${b}`)})}}a.s(["i",0,t,"O",0,function(a,b){let c=[];for(let d of a){let a=t(d,b);"reviewable"===a.authority&&c.push(...a.reviewedBy??[])}return c},"h",0,function(){return function(a){let d,e=o();try{d=r()}catch(a){throw Error(`failed to read cloud-managed active manifest: ${a instanceof Error?a.message:String(a)}`)}if(void 0===d)return[];let f=function(a){if(!a||"object"!=typeof a)throw Error("active manifest is not an object");if(!l.includes(a.schemaVersion))throw Error(`unsupported active manifest schema ${String(a.schemaVersion)} (supported: ${l.join(", ")})`);let b=a.deployment??a.generation;if(!Number.isSafeInteger(b)||(b??-1)<0)throw Error("active manifest deployment is invalid");if(!Array.isArray(a.policies))throw Error("active manifest policies is not an array");let c=a.policies.map(a=>({...a,version:a.version??a.revision}));return{schemaVersion:a.schemaVersion,deployment:b,policies:c}}(d),h=f.policies.filter(b=>a((0,g.f)(b.agentTargets,f.schemaVersion))),i=new Set;return h.map(a=>{if(!n.test(a.id)||"."===a.id||".."===a.id)throw Error(`unsafe cloud-managed policy id ${JSON.stringify(a.id)}`);if(!Number.isSafeInteger(a.version)||a.version<0)throw Error(`invalid version for cloud-managed policy ${a.id}`);if(!m.test(a.sha256))throw Error(`invalid SHA-256 for cloud-managed policy ${a.id}`);if(i.has(a.id))throw Error(`duplicate cloud-managed policy id ${a.id}`);i.add(a.id);let d=p(e,a.path),h=(0,c.readFileSync)(d),j=(0,b.createHash)("sha256").update(h).digest("hex");if(j!==a.sha256)throw Error(`cloud-managed policy ${a.id} failed integrity verification: expected ${a.sha256}, got ${j}`);if(void 0!==a.effect&&"enforce"!==a.effect&&"observe"!==a.effect)throw Error(`unknown effect ${JSON.stringify(a.effect)} for cloud-managed policy ${a.id}`);return{id:a.id,version:a.version,effect:a.effect??"enforce",sha256:a.sha256,path:d,deployment:f.deployment,...(0,g.f)(a.agentTargets,f.schemaVersion)?{agentTargets:(0,g.f)(a.agentTargets,f.schemaVersion)}:{},...k(a)}})}(()=>!0)},"D",0,function(){try{var a;return a=function(){let a=r();if(void 0===a)return null;if(!a||"object"!=typeof a||Array.isArray(a))throw Error("active manifest is not an object");if(!l.includes(a.schemaVersion))throw Error(`unsupported active manifest schema ${String(a.schemaVersion)}`);return a}()?.jevMode,"off"===a||"observe"===a||"enforce"===a?a:null}catch{return null}},"t",0,p],89790);let u=/^(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-]+)*))?$/,v=/^(?:0|[1-9]\d*)$/;function w(a){if("string"!=typeof a)return null;let b=u.exec(a);return b?{major:Number(b[1]),minor:Number(b[2]),patch:Number(b[3]),prerelease:void 0===b[4]?[]:b[4].split(".").map(a=>v.test(a)?Number(a):a)}:null}let x=(a,b)=>a<b?-1:+(a>b);function y(a,b){let c=w(a),d=w(b);return c&&d?x(c.major,d.major)||x(c.minor,d.minor)||x(c.patch,d.patch)||function(a,b){if(0===a.length&&0===b.length)return 0;if(0===a.length)return 1;if(0===b.length)return -1;for(let c=0;c<Math.min(a.length,b.length);c++){let d=a[c],e=b[c];if(d===e)continue;let f="number"==typeof d,g="number"==typeof e;if(f!==g)return f?-1:1;if(f&&g)return x(d,e);return d<e?-1:1}return x(a.length,b.length)}(c.prerelease,d.prerelease):null}a.s(["f",0,y],68561);let z=["always","protected_branch","in_git_repo","has_paths","paths_outside_project","system_or_root_paths"];function A(a){return"string"==typeof a&&z.includes(a)}a.s(["B",0,z,"M",0,A],48630);let B=[1],C=/^[a-f0-9]{64}$/,D=/^[A-Za-z0-9._-]{1,64}\/[A-Za-z0-9._-]{1,64}$/,E=/^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$/,F=/^[0-9a-f]{7,40}$/,G=/^[A-Za-z0-9._-]{1,128}$/,H=/^[a-z][a-z0-9_]{0,31}$/,I=new Set(["exempt","user_asked"]),J=new Set(["shell","write","read","network","other"]);function K(){return process.env.FAILPROOFAI_PACK_DIR??(0,f.n)()}function L(a){if("string"!=typeof a.id||!D.test(a.id))throw Error(`unsafe pack id ${JSON.stringify(a.id)}`);if("string"!=typeof a.version||!E.test(a.version))throw Error(`invalid version for pack ${a.id}`);if(void 0!==a.effect&&"enforce"!==a.effect&&"observe"!==a.effect)throw Error(`unknown effect ${JSON.stringify(a.effect)} for pack ${a.id}`);let b="string"==typeof a.commit&&F.test(a.commit.trim().toLowerCase())?a.commit.trim().toLowerCase():void 0;return{id:a.id,version:a.version,effect:a.effect??"enforce",...b?{commit:b}:{}}}function M(){return process.env.FAILPROOFAI_PACK_DIR?(0,d.resolve)(process.env.FAILPROOFAI_PACK_DIR,"installed.json"):(0,f.v)()}let N=new Set(["string","number","boolean","string[]","pattern[]"]);function O(a,b,c,d){let e=`${a} policy #${c}`;if(!b||"object"!=typeof b)throw Error(`${e} is not an object`);let f=b.name;if("string"!=typeof f||!G.test(f))throw Error(`${e} has an unsafe name ${JSON.stringify(f)}`);if("alwaysOn"in b)throw Error(`${e} declares alwaysOn, which packs may not set`);if("string"!=typeof b.description||0===b.description.length)throw Error(`${e} is missing a description`);if("string"!=typeof b.category||0===b.category.length)throw Error(`${e} is missing a category`);if("boolean"!=typeof b.defaultEnabled)throw Error(`${e} is missing defaultEnabled`);if(!b.match||"object"!=typeof b.match)throw Error(`${e} is missing a match`);let g=b.match;for(let a of["events","toolNames"]){let b=g[a];if(void 0!==b&&(!Array.isArray(b)||b.some(a=>"string"!=typeof a||0===a.length)))throw Error(`${e} has a match.${a} that is not a list of names`)}let h=k(b),i=["authority","reviewedBy"].filter(a=>a in b&&!(a in h));if("params"in b){let a=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"params is not an object";for(let[b,c]of Object.entries(a)){if(0===b.length)return"params has an empty parameter name";if(!c||"object"!=typeof c||Array.isArray(c))return`params.${b} is not an object`;if("string"!=typeof c.type||!N.has(c.type))return`params.${b} has type ${JSON.stringify(c.type)}, which is not one of ${[...N].join(", ")}`;if("string"!=typeof c.description||0===c.description.length)return`params.${b} is missing a description`;if(!("default"in c))return`params.${b} is missing a default`}}(b.params);a&&(d?.push(`${e} declares a params schema that was dropped: ${a}`),i.push("params"))}return i.length>0?Object.fromEntries(Object.entries(b).filter(([a])=>!i.includes(a))):b}function P(a,b,c=e.version){if(void 0===b)return{kind:"satisfied"};let d=y(c,b);return null===d?{kind:"unreadable",reason:`pack ${a} declares minCliVersion ${JSON.stringify(b)}, which is not a version this CLI can compare against its own (${c}) — the requirement was ignored`}:d<0?{kind:"too-old",reason:`pack ${a} needs failproofai ${String(b)} or newer and this is ${c} — run \`npm i -g "failproofai@>=${String(b)}" && failproofai update\``}:{kind:"satisfied",declared:b}}function Q(a,b,c,d){if("string"!=typeof c||0===c.length)throw Error(`${a} is missing ${b}`);if(c.length>d)throw Error(`${a} has a ${b} of ${c.length} characters, over the ${d}-character cap`);return c}function R(a,b,c){let d;if(!b||"object"!=typeof b||Array.isArray(b))throw Error(`${a} is not an object`);if(null!==c)d=c;else{if("string"!=typeof b.id||!H.test(b.id))throw Error(`${a} has an unsafe id ${JSON.stringify(b.id)}`);if(I.has(b.id))throw Error(`${a} uses the reserved probe id ${JSON.stringify(b.id)}`);d=b.id}let e=Q(a,"instructions",b.instructions,600);if(void 0===b.criteria)return{id:d,instructions:e};if(!b.criteria||"object"!=typeof b.criteria||Array.isArray(b.criteria))throw Error(`${a} has criteria that is not an object`);let f=b.criteria;return{id:d,instructions:e,criteria:{true:Q(a,"criteria.true",f.true,300),false:Q(a,"criteria.false",f.false,300)}}}function S(a,b,c){let d=`${a} semantic policy #${c}`;if(!b||"object"!=typeof b||Array.isArray(b))throw Error(`${d} is not an object`);let e=b.name;if("string"!=typeof e||!G.test(e))throw Error(`${d} has an unsafe name ${JSON.stringify(e)}`);if("alwaysOn"in b)throw Error(`${d} declares alwaysOn, which packs may not set`);let f=Q(`${a} semantic policy ${e}`,"title",b.title,120),g=`${a} semantic policy ${e}`;if(!Array.isArray(b.appliesTo)||0===b.appliesTo.length)throw Error(`${g} has no appliesTo tool classes`);let h=b.appliesTo.find(a=>"string"!=typeof a||!J.has(a));if(void 0!==h)throw Error(`${g} applies to ${JSON.stringify(h)}, which is not a tool class (${[...J].join(", ")})`);if("deny"!==b.mode&&"instruct"!==b.mode)throw Error(`${g} has mode ${JSON.stringify(b.mode)}, which must be "deny" or "instruct"`);if("boolean"!=typeof b.userCanOverride)throw Error(`${g} is missing userCanOverride, which has no default`);if(!Array.isArray(b.probes)||0===b.probes.length)throw Error(`${g} declares no probes`);if(b.probes.length>6)throw Error(`${g} declares ${b.probes.length} probes, over the cap of 6`);let i=b.probes.map((a,b)=>R(`${g} probe #${b}`,a,null)),j=new Set;for(let a of i){if(j.has(a.id))throw Error(`${g} declares probe ${a.id} twice`);j.add(a.id)}let k=void 0===b.exempt?void 0:R(`${g} exempt`,b.exempt,"exempt");if(void 0!==b.precondition&&!A(b.precondition))throw Error(`${g} names precondition ${JSON.stringify(b.precondition)}, which this build does not have (${z.join(", ")})`);let l=Q(g,"guidance",b.guidance,600);return{name:e,title:f,appliesTo:b.appliesTo,mode:b.mode,userCanOverride:b.userCanOverride,probes:i,...k?{exempt:k}:{},...void 0!==b.precondition?{precondition:b.precondition}:{},guidance:l}}function T(a){return a instanceof Error?a.message:String(a)}function U(a){return/^github:FailproofAI\//i.test(a.source??"")}function V(a,b){return h.has(b)&&!U(a)}a.s(["P",0,24,"r",0,F,"T",0,P,"Q",0,function(){try{let a=JSON.parse((0,c.readFileSync)(M(),"utf8"));if(!Array.isArray(a.packs))return!1;return a.packs.some(a=>!!a&&"object"==typeof a&&Array.isArray(a.policies)&&a.policies.length>0)}catch{return!1}},"E",0,function(a){return a.semantic??[]},"N",0,K,"$",0,L,"Z",0,O,"U",0,S,"V",0,function(){let a,d=M();if(!(0,c.existsSync)(d))return{packs:[],errors:[]};try{a=JSON.parse((0,c.readFileSync)(d,"utf8"))}catch(a){return{packs:[],errors:[{id:null,reason:`unreadable pack manifest: ${T(a)}`}]}}if(!a||"object"!=typeof a)return{packs:[],errors:[{id:null,reason:"pack manifest is not an object"}]};let e=a;if(!B.includes(e.schemaVersion))return{packs:[],errors:[{id:null,reason:`unsupported pack manifest schema ${String(e.schemaVersion)} (supported: ${B.join(", ")})`}]};if(!Array.isArray(e.packs))return{packs:[],errors:[{id:null,reason:"pack manifest packs is not an array"}]};let f=K(),g=[],h=[],i=[],j=new Set;for(let a of e.packs){let d=a&&"object"==typeof a&&"string"==typeof a.id?a.id:null,e=[];try{let d=function(a,d,e){if(!d||"object"!=typeof d)throw Error("pack entry is not an object");let f=L(d);if("string"!=typeof d.source||0===d.source.length)throw Error(`pack ${d.id} has no source`);if("string"!=typeof d.sha256||!C.test(d.sha256))throw Error(`invalid SHA-256 for pack ${d.id}`);let g=f.effect,h=P(f.id,d.minCliVersion);if("too-old"===h.kind)throw Error(h.reason);"unreadable"===h.kind&&e.push(h.reason);let i=p(a,d.entry),j=(0,b.createHash)("sha256").update((0,c.readFileSync)(i)).digest("hex");if(j!==d.sha256)throw Error(`pack ${d.id} failed integrity verification: expected ${d.sha256}, got ${j}`);if(!Array.isArray(d.policies))throw Error(`pack ${d.id} policies is not an array`);let k=d.policies.map((a,b)=>O(d.id,a,b,e)),l=new Set;for(let a of k){if(l.has(a.name))throw Error(`pack ${d.id} declares ${a.name} twice`);l.add(a.name)}let m=null;if(void 0!==d.enabled){if(!Array.isArray(d.enabled)||d.enabled.some(a=>"string"!=typeof a))throw Error(`pack ${d.id} enabled is not an array of names`);m=d.enabled.filter(a=>l.has(a))}let n=null;if(void 0!==d.clis){if(!Array.isArray(d.clis)||d.clis.some(a=>"string"!=typeof a))throw Error(`pack ${d.id} clis is not an array of agent names`);n=d.clis}return{clis:n,id:f.id,version:f.version,source:d.source,path:i,sha256:d.sha256,effect:g,policies:k,semantic:function(a,b,c){if(void 0===b)return[];if(!Array.isArray(b))return c.push(`pack ${a} semantic is not an array, so none of it was loaded`),[];let d=[],e=new Set;for(let[f,g]of b.entries()){if(d.length>=24){c.push(`pack ${a} declares more than 24 semantic policies; the ${b.length-24} past that cap were dropped`);break}try{let b=S(a,g,f);if(e.has(b.name))throw Error(`pack ${a} declares semantic policy ${b.name} twice`);e.add(b.name),d.push(b)}catch(a){c.push(T(a))}}return d}(f.id,d.semantic,e),..."satisfied"===h.kind&&h.declared?{minCliVersion:h.declared}:{},enabled:m}}(f,a,e);if(j.has(d.id))throw Error(`duplicate pack id ${d.id}`);j.add(d.id),g.push(d),i.push(...e)}catch(c){let b=a&&("observe"===a.effect||"enforce"===a.effect)?a.effect:"enforce";h.push({id:d,reason:T(c),effect:b,...Array.isArray(a?.policies)?{declared:function(a){let b=[];for(let c of a)c&&"object"==typeof c&&"string"==typeof c.name&&c.match&&"object"==typeof c.match&&b.push(c);return b}(a.policies)}:{},...Array.isArray(a?.policies)&&0===a.policies.length?{semanticOnly:!0}:{},...Array.isArray(a?.clis)&&a.clis.every(a=>"string"==typeof a)?{clis:a.clis}:{}})}}return{packs:g,errors:h,...i.length>0?{warnings:i}:{}}},"M",0,function(a){return a.exempt?[...a.probes,a.exempt]:a.probes}],9909),a.s(["v",0,function(a){let b=new Map,c=new Map;for(let d of a)for(let a of d.semantic??[]){if(V(d,a.name))continue;let e=function a(b){if(Array.isArray(b))return`[${b.map(a).join(",")}]`;if(null!==b&&"object"==typeof b){let c=Object.entries(b).filter(([,a])=>void 0!==a).sort(([a],[b])=>a<b?-1:+(a>b));return`{${c.map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}return JSON.stringify(b)??"null"}(a),f=b.get(a.name);if(void 0===f){b.set(a.name,{form:e,ids:[d.id]});continue}f.ids.push(d.id),f.form!==e&&c.set(a.name,f.ids)}return c},"g",0,U,"B",0,V,"r",0,function(a,b){return a.filter(a=>"observe"!==a.effect&&!(b&&Array.isArray(a.clis)&&a.clis.length>0&&!a.clis.includes(b)))}],86304)},10695,a=>{var b=a.i(2157),c=a.i(50227),d=a.i(75818);let e={info:0,warn:1,error:2},f=(0,d.A)(),g=!1,h="warn",i=!1,j=f;function k(a){return!function(){if(g)return;g=!0;let a=(process.env.FAILPROOFAI_LOG_LEVEL??"").toLowerCase();("info"===a||"warn"===a||"error"===a)&&(h=a);let b=(process.env.FAILPROOFAI_HOOK_LOG_FILE??"").trim();b&&(i=!0,"1"!==b&&"true"!==b&&(j=b))}(),e[a]>=e[h]}function l(a,b){process.stderr.write(`[failproofai:hook] ${a} ${b}
2
+ `)}function m(a,d){if(i)try{(0,b.existsSync)(j)||(0,b.mkdirSync)(j,{recursive:!0});let e=(0,c.join)(j,"hooks.log");try{if((0,b.statSync)(e).size>=524288){let a=`hooks-${Date.now()}.log`;(0,b.renameSync)(e,(0,c.join)(j,a))}}catch{}let f=new Date().toISOString(),g=`[${f}] ${a} ${d}
3
+ `;(0,b.appendFileSync)(e,g,"utf-8")}catch{}}a.s(["F",0,function(a){k("error")&&(l("ERROR",a),m("ERROR",a))},"g",0,function(a){k("warn")&&(l("WARN",a),m("WARN",a))}])}]})();
4
+
5
+ //# sourceMappingURL=src_hooks_0mdwgjisv4fub._.js.map
@@ -1,4 +1,4 @@
1
- (()=>{"use strict";module.exports=[15638,a=>{var b=a.i(50227),c=a.i(54799),d=a.i(2157),e=a.i(12714),f=a.i(57764),g=a.i(66680),h=a.i(10695),i=a.i(32352),j=a.i(84948);a.i(28120);var k=a.i(98378),l=a.i(69839);a.i(75818),a.i(86304),a.i(91609);let m="__FAILPROOFAI_LOADING_HOOKS__",n=/policies\.(js|mjs|ts)$/,o=0,p=new Map;async function q(a){let b,c,d=Number.isFinite(c=Number(process.env.FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS))&&c>0?c:1e4;try{await Promise.race([import(a),new Promise((a,c)=>{b=setTimeout(()=>c(Error(`timed out loading module after ${d}ms`)),d),b.unref?.()})])}finally{b&&clearTimeout(b)}}let r=new Set;async function s(a,d){let e=globalThis;e[m]=!0;let g=[];try{let e=await (0,j.P)(),k=e?(0,f.pathToFileURL)(e).href:null,l=++o,m=`${j.F}.${process.pid}.${l}.${(0,c.randomUUID)()}.mjs`;g=await (0,j.j)(a,k,e,m,d?.verifyEntrySha);let n=await t(g,m),s=p.get(a);if(s?.fingerprint===n){for(let a of s.hooks)i.T.add({...a});return null}let u=a+m,v=(0,f.pathToFileURL)(u).href,w=(0,i.C)().length,x=(0,i.K)().length;await q(v);let y=(0,i.K)().slice(x).map(a=>a?.name);return d?.outsidePack&&y.length>0&&!r.has(a)&&(r.add(a),(0,h.g)(`${(0,b.basename)(a)}: semanticPolicies.add only takes effect in a pack published with \`failproofai publish\`; ${y.join(", ")} ${1===y.length?"is":"are"} never asked here`)),p.size>=500&&p.clear(),p.set(a,{fingerprint:n,hooks:(0,i.C)().slice(w).map(a=>({...a}))}),null}catch(f){let c=f instanceof Error?f.message:String(f),e=/Cannot find module|MODULE_NOT_FOUND|ENOENT/i.test(c)?"module_not_found":/SyntaxError|Unexpected token/i.test(c)?"syntax_error":/timed out loading module/i.test(c)?"load_timeout":"runtime_error";if((0,k.f)((0,l._)(),"custom_hooks_load_error",{error_type:e,is_convention:!!d?.conventionScope,convention_scope:d?.conventionScope??null,file_basename:(0,b.basename)(a)}),d?.strict)throw Error(`Failed to load custom hooks from ${a}: ${c}`);return(0,h.F)(`failed to load custom hooks from ${a}: ${c}`),{type:e,reason:c}}finally{e[m]=!1,await (0,j.H)(g)}}async function t(a,b){let c=(0,g.createHash)("sha256");for(let d of[...a].sort()){c.update(d.replaceAll(b,j.F));let a=await (0,e.readFile)(d,"utf8");c.update(a.replaceAll(b,j.F))}return c.digest("hex")}async function u(a,c){if(!a)return[];let e=(0,b.isAbsolute)(a)?a:(0,b.resolve)(c?.sessionCwd??process.cwd(),a);if(!(0,d.existsSync)(e)){if(c?.strict)throw Error(`Custom hooks file not found: ${e}`);return(0,h.g)(`customPoliciesPath not found: ${e}`),[]}return(0,i.c)(),await s(e,c),(0,i.C)()}a.s(["conventionPolicyId",0,function(a,b,c){return`convention:${a}:${b}:${c}`},"customPolicyId",0,function(a,b){return`custom:${a}:${b}`},"discoverPolicyFiles",0,function(a){if(!(0,d.existsSync)(a))return[];try{return(0,d.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isFile()&&n.test(a.name)).sort((a,b)=>a.name.localeCompare(b.name)).map(c=>(0,b.resolve)(a,c.name))}catch{return[]}},"loadCustomHooks",0,u])},32352,84948,a=>{let b="__failproofai_custom_hooks__",c="__failproofai_semantic_policies__";function d(){let a=globalThis;return Array.isArray(a[b])||(a[b]=[]),a[b]}a.s(["c",0,function(){let a=globalThis;a[b]=[],a[c]=[]},"T",0,{add(a){d().push(a)}},"C",0,function(){return d()},"K",0,function(){let a;return Array.isArray((a=globalThis)[c])||(a[c]=[]),a[c]}],32352);var e=a.i(24868),f=a.i(46786),g=a.i(14747),h=a.i(92509),i=a.i(54799),j=a.i(75818),k=a.i(10695);let l=".__failproofai_tmp__.mjs",m=/(?:import\s+(?:[\s\S]*?\s+from\s+)?|export\s+(?:[\s\S]*?\s+from\s+))(['"])(\.\.?\/[^'"]+)\1/g,n=/require\s*\(\s*(['"])(\.\.?\/[^'"]+)\1\s*\)/g;async function o(a){try{return await (0,e.access)(a),!0}catch{return!1}}async function p(){let a=process.env.FAILPROOFAI_DIST_PATH;if(a){let b=(0,g.resolve)(a,"index.js");if(await o(b))return b}for(let a of[(0,g.resolve)((0,g.dirname)(process.execPath),"..","assets","dist","index.js"),(0,g.resolve)(process.cwd(),"dist","index.js"),(0,g.resolve)(process.cwd(),"node_modules","failproofai","dist","index.js")])if(await o(a))return a;return null}async function q(a,b){let c=(0,g.resolve)(a,b);for(let a of[c,`${c}.js`,`${c}.mjs`,`${c}.ts`,(0,g.resolve)(c,"index.js")])if(await o(a))return a;return null}async function r(a,b,c,d){let f=(0,g.join)(a,b);return await (0,e.writeFile)(f,c,{encoding:"utf-8",mode:384,...d?{flag:"wx"}:{}}),f}async function s(a,b,c=l){let d=`import _cjs from '${b}';
1
+ (()=>{"use strict";module.exports=[15638,a=>{var b=a.i(50227),c=a.i(54799),d=a.i(2157),e=a.i(12714),f=a.i(57764),g=a.i(66680),h=a.i(10695),i=a.i(32352),j=a.i(84948);a.i(28120);var k=a.i(98378),l=a.i(69839);a.i(75818),a.i(86304),a.i(91609);let m="__FAILPROOFAI_LOADING_HOOKS__",n=/policies\.(js|mjs|ts)$/,o=0,p=new Map;async function q(a){let b,c,d=Number.isFinite(c=Number(process.env.FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS))&&c>0?c:1e4;try{await Promise.race([import(a),new Promise((a,c)=>{b=setTimeout(()=>c(Error(`timed out loading module after ${d}ms`)),d),b.unref?.()})])}finally{b&&clearTimeout(b)}}let r=new Set;async function s(a,d){let e=globalThis;e[m]=!0;let g=[];try{let e=await (0,j.P)(),k=e?(0,f.pathToFileURL)(e).href:null,l=++o,m=`${j.F}.${process.pid}.${l}.${(0,c.randomUUID)()}.mjs`;g=await (0,j.j)(a,k,e,m,d?.verifyEntrySha);let n=await t(g,m),s=p.get(a);if(s?.fingerprint===n){for(let a of s.hooks)i.T.add({...a});return null}let u=a+m,v=(0,f.pathToFileURL)(u).href,w=(0,i.C)().length,x=(0,i.K)().length;await q(v);let y=(0,i.K)().slice(x).map(a=>a?.name);return d?.outsidePack&&y.length>0&&!r.has(a)&&(r.add(a),(0,h.g)(`${(0,b.basename)(a)}: semanticPolicies.add only takes effect in a pack published with \`failproofai publish\`; ${y.join(", ")} ${1===y.length?"is":"are"} never asked here`)),p.size>=500&&p.clear(),p.set(a,{fingerprint:n,hooks:(0,i.C)().slice(w).map(a=>({...a}))}),null}catch(f){let c=f instanceof Error?f.message:String(f),e=/Cannot find module|MODULE_NOT_FOUND|Cannot find package/i.test(c)?"module_not_found":/ENOENT/i.test(c)?"file_not_found":/SyntaxError|Unexpected token/i.test(c)?"syntax_error":/timed out loading module/i.test(c)?"load_timeout":"runtime_error";if((0,k.f)((0,l._)(),"custom_hooks_load_error",{error_type:e,is_convention:!!d?.conventionScope,convention_scope:d?.conventionScope??null,file_basename:(0,b.basename)(a)}),d?.strict)throw Error(`Failed to load custom hooks from ${a}: ${c}`);return(0,h.F)(`failed to load custom hooks from ${a}: ${c}`),{type:e,reason:c}}finally{e[m]=!1,await (0,j.H)(g)}}async function t(a,b){let c=(0,g.createHash)("sha256");for(let d of[...a].sort()){c.update(d.replaceAll(b,j.F));let a=await (0,e.readFile)(d,"utf8");c.update(a.replaceAll(b,j.F))}return c.digest("hex")}async function u(a,c){if(!a)return[];let e=(0,b.isAbsolute)(a)?a:(0,b.resolve)(c?.sessionCwd??process.cwd(),a);if(!(0,d.existsSync)(e)){if(c?.strict)throw Error(`Custom hooks file not found: ${e}`);return(0,h.g)(`customPoliciesPath not found: ${e}`),[]}return(0,i.c)(),await s(e,c),(0,i.C)()}a.s(["conventionPolicyId",0,function(a,b,c){return`convention:${a}:${b}:${c}`},"customPolicyId",0,function(a,b){return`custom:${a}:${b}`},"discoverPolicyFiles",0,function(a){if(!(0,d.existsSync)(a))return[];try{return(0,d.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isFile()&&n.test(a.name)).sort((a,b)=>a.name.localeCompare(b.name)).map(c=>(0,b.resolve)(a,c.name))}catch{return[]}},"loadCustomHooks",0,u])},32352,84948,a=>{let b="__failproofai_custom_hooks__",c="__failproofai_semantic_policies__";function d(){let a=globalThis;return Array.isArray(a[b])||(a[b]=[]),a[b]}a.s(["c",0,function(){let a=globalThis;a[b]=[],a[c]=[]},"T",0,{add(a){d().push(a)}},"C",0,function(){return d()},"K",0,function(){let a;return Array.isArray((a=globalThis)[c])||(a[c]=[]),a[c]}],32352);var e=a.i(24868),f=a.i(46786),g=a.i(14747),h=a.i(92509),i=a.i(54799),j=a.i(75818),k=a.i(10695);let l=".__failproofai_tmp__.mjs",m=/(?:import\s+(?:[\s\S]*?\s+from\s+)?|export\s+(?:[\s\S]*?\s+from\s+))(['"])(\.\.?\/[^'"]+)\1/g,n=/require\s*\(\s*(['"])(\.\.?\/[^'"]+)\1\s*\)/g;async function o(a){try{return await (0,e.access)(a),!0}catch{return!1}}async function p(){let a=process.env.FAILPROOFAI_DIST_PATH;if(a){let b=(0,g.resolve)(a,"index.js");if(await o(b))return b}for(let a of[(0,g.resolve)((0,g.dirname)(process.execPath),"..","assets","dist","index.js"),(0,g.resolve)(process.cwd(),"dist","index.js"),(0,g.resolve)(process.cwd(),"node_modules","failproofai","dist","index.js")])if(await o(a))return a;return null}async function q(a,b){let c=(0,g.resolve)(a,b);for(let a of[c,`${c}.js`,`${c}.mjs`,`${c}.ts`,(0,g.resolve)(c,"index.js")])if(await o(a))return a;return null}async function r(a,b,c,d){let f=(0,g.join)(a,b);return await (0,e.writeFile)(f,c,{encoding:"utf-8",mode:384,...d?{flag:"wx"}:{}}),f}async function s(a,b,c=l){let d=`import _cjs from '${b}';
2
2
  export const customPolicies = _cjs.customPolicies;
3
3
  export const semanticPolicies = _cjs.semanticPolicies;
4
4
  export const getCustomHooks = _cjs.getCustomHooks;
@@ -1,3 +1,3 @@
1
- module.exports=[32271,a=>{"use strict";var b=a.i(61095);a.i(2157);var c=a.i(75818);async function d(a=150){return new Promise(c=>{let d=!1,f=a=>{d||(d=!0,clearTimeout(h),g.removeAllListeners(),g.destroy(),c(a))},g=(0,b.createConnection)({path:e()}),h=setTimeout(()=>f(!1),a);h.unref?.(),g.on("connect",()=>f(!0)),g.on("error",()=>f(!1))})}function e(){return process.env.FAILPROOFAI_DAEMON_SOCKET?process.env.FAILPROOFAI_DAEMON_SOCKET:(0,c._)()}async function f(a,c){let d=c?.responseTimeoutMs??3e4;return new Promise(c=>{let f,g=!1,h=a=>{clearTimeout(f),f=setTimeout(()=>j("unreachable"),a),f.unref?.()},i=a=>{g||(g=!0,clearTimeout(f),k.removeAllListeners(),k.destroy(),c(a))},j=a=>i({ok:!1,failure:a}),k=(0,b.createConnection)({path:e()});h(150);let l=Buffer.alloc(0),m=null;k.on("connect",()=>{let b,c;h(d),k.write((b=Buffer.from(JSON.stringify(a),"utf8"),(c=Buffer.alloc(4)).writeUInt32BE(b.length,0),Buffer.concat([c,b])))}),k.on("data",a=>{let b;if(l=Buffer.concat([l,a]),null===m){if(l.length<4)return;if((m=l.readUInt32BE(0))>0x1000000)return void j("unreachable");l=l.subarray(4)}if(l.length<m)return;let c=l.subarray(0,m);try{b=JSON.parse(c.toString("utf8"))}catch{j("unreachable");return}if(!b||"object"!=typeof b||Array.isArray(b))return void j("unreachable");let d=b;1!==d.protocolVersion?j("protocol-mismatch"):i({ok:!0,message:d})}),k.on("error",()=>j("unreachable")),k.on("close",()=>j("unreachable"))})}async function g(a,b){let c=await f({type:"hook",protocolVersion:1,hookEvent:a.hookEvent,cli:a.cli,stdin:a.stdin,cwd:a.cwd},b);if(!c.ok)return c;let d=c.message;return"hookResult"===d.type&&"number"==typeof d.exitCode&&"string"==typeof d.stdout&&"string"==typeof d.stderr?{ok:!0,response:{exitCode:d.exitCode,stdout:d.stdout,stderr:d.stderr}}:{ok:!1,failure:"unreachable"}}function h(a){return Array.isArray(a)&&a.every(a=>"string"==typeof a)}async function i(a,b){let c=await f({type:"policyEvaluation",protocolVersion:1,integration:a.integration,event:a.event,payload:a.payload,cwd:a.cwd},b);if(!c.ok)return c;let d=c.message,e=a=>null==a||"string"==typeof a;return"policyResult"===d.type&&("allow"===d.decision||"deny"===d.decision||"instruct"===d.decision)&&h(d.policyNames)&&e(d.reason)&&h(d.matchedPolicies)&&"number"==typeof d.durationMs&&Number.isInteger(d.durationMs)&&d.durationMs>=0&&e(d.toolName)?{ok:!0}:{ok:!1,failure:"unreachable"}}a.i(21572),a.s(["attemptDaemonHook",0,g,"attemptDaemonPolicyEvaluation",0,i,"daemonAcceptsConnections",0,d])}];
1
+ module.exports=[32271,a=>{"use strict";var b=a.i(61095);a.i(2157);var c=a.i(75818);async function d(a=150){return new Promise(c=>{let d=!1,f=a=>{d||(d=!0,clearTimeout(h),g.removeAllListeners(),g.destroy(),c(a))},g=(0,b.createConnection)({path:e()}),h=setTimeout(()=>f(!1),a);h.unref?.(),g.on("connect",()=>f(!0)),g.on("error",()=>f(!1))})}function e(){return process.env.FAILPROOFAI_DAEMON_SOCKET?process.env.FAILPROOFAI_DAEMON_SOCKET:(0,c._)()}async function f(a,c){let d=c?.responseTimeoutMs??3e4;return new Promise(c=>{let f,g=!1,h=a=>{clearTimeout(f),f=setTimeout(()=>j("unreachable"),a),f.unref?.()},i=a=>{g||(g=!0,clearTimeout(f),k.removeAllListeners(),k.destroy(),c(a))},j=a=>i({ok:!1,failure:a}),k=(0,b.createConnection)({path:e()});h(150);let l=Buffer.alloc(0),m=null;k.on("connect",()=>{let b,c;h(d),k.write((b=Buffer.from(JSON.stringify(a),"utf8"),(c=Buffer.alloc(4)).writeUInt32BE(b.length,0),Buffer.concat([c,b])))}),k.on("data",a=>{let b;if(l=Buffer.concat([l,a]),null===m){if(l.length<4)return;if((m=l.readUInt32BE(0))>0x1000000)return void j("unreachable");l=l.subarray(4)}if(l.length<m)return;let c=l.subarray(0,m);try{b=JSON.parse(c.toString("utf8"))}catch{j("unreachable");return}if(!b||"object"!=typeof b||Array.isArray(b))return void j("unreachable");let d=b;2!==d.protocolVersion?j("protocol-mismatch"):i({ok:!0,message:d})}),k.on("error",()=>j("unreachable")),k.on("close",()=>j("unreachable"))})}async function g(a,b){let c=await f({type:"hook",protocolVersion:2,hookEvent:a.hookEvent,cli:a.cli,stdin:a.stdin,cwd:a.cwd,agentSettingsPath:a.agentSettingsPath},b);if(!c.ok)return c;let d=c.message;return"hookResult"===d.type&&"number"==typeof d.exitCode&&"string"==typeof d.stdout&&"string"==typeof d.stderr?{ok:!0,response:{exitCode:d.exitCode,stdout:d.stdout,stderr:d.stderr}}:{ok:!1,failure:"unreachable"}}function h(a){return Array.isArray(a)&&a.every(a=>"string"==typeof a)}async function i(a,b){let c=await f({type:"policyEvaluation",protocolVersion:2,integration:a.integration,event:a.event,payload:a.payload,cwd:a.cwd,agentSettingsPath:a.agentSettingsPath},b);if(!c.ok)return c;let d=c.message,e=a=>null==a||"string"==typeof a;return"policyResult"===d.type&&("allow"===d.decision||"deny"===d.decision||"instruct"===d.decision)&&h(d.policyNames)&&e(d.reason)&&h(d.matchedPolicies)&&"number"==typeof d.durationMs&&Number.isInteger(d.durationMs)&&d.durationMs>=0&&e(d.toolName)?{ok:!0}:{ok:!1,failure:"unreachable"}}a.i(21572),a.s(["attemptDaemonHook",0,g,"attemptDaemonPolicyEvaluation",0,i,"daemonAcceptsConnections",0,d])}];
2
2
 
3
3
  //# sourceMappingURL=src_hooks_daemon-client_ts_0k41_i7jg6ndv._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[21572,a=>{"use strict";var b=a.i(2157),c=a.i(50227);a.i(8674);var d=a.i(75818);let e={mode:"oss",daemon:{configured:!1},collector:{sessions:!1,hooks:!0,hooksVerbosity:"decisions",redact:"minimal",environment:"local"},telemetry:{enabled:!0},audit:{auto:!1,intervalDays:7}};function f(){let a={};try{let c=JSON.parse((0,b.readFileSync)((0,d.y)(),"utf8"));c&&"object"==typeof c&&!Array.isArray(c)&&(a=c)}catch{}return{raw:a,config:g()}}function g(){try{var a;let c,e,f,g,h;return a=JSON.parse((0,b.readFileSync)((0,d.y)(),"utf8")),c=a.mode?.kind,e=a.daemon??{},f=a.collector??{},g=a.telemetry??{},h=a.audit??{},{mode:"cloud"===c?"cloud":"oss",daemon:{configured:!0===e.configured},collector:{sessions:!0===f.sessions,hooks:!1!==f.hooks,hooksVerbosity:"all"===f.hooks_verbosity||"off"===f.hooks_verbosity?f.hooks_verbosity:"decisions",redact:"off"===f.redact?"off":"minimal",environment:"string"==typeof f.environment?f.environment:"local",machineId:"string"==typeof f.machine_id?f.machine_id:void 0,sources:function(a){if(!a||"object"!=typeof a||Array.isArray(a))return;let b={};for(let[c,d]of Object.entries(a)){if(!d||"object"!=typeof d||Array.isArray(d))continue;let a=d.extra_paths;if(!Array.isArray(a))continue;let e=a.filter(a=>"string"==typeof a&&""!==a.trim());e.length>0&&(b[c]={extraPaths:e})}return Object.keys(b).length>0?b:void 0}(f.sources),agents:function(a){if(!a||"object"!=typeof a||Array.isArray(a))return;let b=Object.fromEntries(Object.entries(a).flatMap(([a,b])=>{if(!b||"object"!=typeof b||Array.isArray(b))return[];let c=b.sessions;return"boolean"==typeof c?[[a,{sessions:c}]]:[]}));return Object.keys(b).length?b:void 0}(f.agents),otlp:function(a){if(!(!a||"object"!=typeof a||Array.isArray(a)))return{enabled:!0===a.enabled,..."number"==typeof a.port&&Number.isInteger(a.port)?{port:a.port}:{}}}(f.otlp)},telemetry:{enabled:!1!==g.enabled},audit:{auto:!0===h.auto,intervalDays:function(a){if("number"!=typeof a||!Number.isFinite(a))return 7;let b=Math.floor(a);return b<1?7:Math.min(b,90)}(h.interval_days),reportsConsentedAt:"number"==typeof h.reports_consented_at&&Number.isFinite(h.reports_consented_at)?h.reports_consented_at:void 0},agents:function(a){if(!a||"object"!=typeof a||Array.isArray(a))return;let b=a=>Array.isArray(a)?[...new Set(a.filter(a=>"string"==typeof a&&""!==a.trim()))]:[];if(Array.isArray(a.selected))return{selected:b(a.selected),seen:b(a.seen)}}(a.agents)}}catch{return structuredClone(e)}}let h=[["mode","kind"],["daemon","configured"],["collector","sessions"],["collector","hooks"],["collector","hooks_verbosity"],["collector","redact"],["collector","environment"],["collector","machine_id"],["collector","sources","*","extra_paths"],["collector","agents","*","sessions"],["collector","otlp","enabled"],["collector","otlp","port"],["telemetry","enabled"],["audit","auto"],["audit","interval_days"],["audit","reports_consented_at"],["agents","selected"],["agents","seen"]],i=a=>"object"==typeof a&&null!==a&&!Array.isArray(a);function j(a){{let b=a.cloud,c=a.ingest,d=a.auth,e={};if("number"==typeof a.connectedAt&&Number.isSafeInteger(a.connectedAt)&&a.connectedAt>=0&&(e.connectedAt=a.connectedAt),b&&"string"==typeof b.url&&"string"==typeof b.machine_id&&"string"==typeof b.token&&b.url&&b.token){let a="string"==typeof b.machine_label&&b.machine_label?b.machine_label:void 0;e.cloud={url:b.url,machineId:b.machine_id,token:b.token,machineLabel:a}}let f=a.org;if(f){let a=a=>"string"==typeof a&&a?a:void 0,b="number"==typeof f.since&&Number.isSafeInteger(f.since)&&f.since>=0?f.since:void 0,c={id:a(f.id),slug:a(f.slug),name:a(f.name),...void 0!==b?{since:b}:{}};(c.id||c.slug||c.name||void 0!==b)&&(e.org=c)}c&&"string"==typeof c.url&&"string"==typeof c.key&&c.url&&c.key&&(e.ingest={url:c.url,key:c.key});let g=k(a.jev);return g&&(e.jev=g),d&&(e.auth={baseUrl:"string"==typeof d.base_url?d.base_url:void 0,sessionToken:"string"==typeof d.session_token?d.session_token:void 0,expiresAt:"number"==typeof d.expires_at?d.expires_at:void 0,email:"string"==typeof d.email?d.email:void 0}),e}}function k(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let{url:b,key:c}=a;return"string"==typeof b&&b&&"string"==typeof c&&c?{url:b,key:c}:null}function l(a){if(!a)return null;try{let b=new URL(a).origin;return"null"===b?null:b}catch{return null}}a.s(["s",0,g,"d",0,function(){try{return j(JSON.parse((0,b.readFileSync)((0,d.L)(),"utf8")))}catch{return{}}},"R",0,function(){let a,e,f,g=(0,d.L)();try{a=(0,b.openSync)(g,b.constants.O_RDONLY|(b.constants.O_NONBLOCK??0))}catch(b){let a=b.code;if("ENOENT"===a||"ENOTDIR"===a)return{status:"absent",path:g,connected:!1};return{status:"refused",path:g,mode:null,reason:"unreadable",problem:`cannot open ${g} (${a??"error"})`}}try{let d=(0,b.fstatSync)(a);if(!d.isFile())return{status:"refused",path:g,mode:null,reason:"unreadable",problem:`${g} is not a regular file`};let f="win32"!==process.platform,h=511&d.mode;if(f&&(63&h)!=0)return{status:"refused",path:g,mode:h,reason:"too-open",problem:`${g} is ${h.toString(8).padStart(4,"0")}; it holds the key Jev sends to FailproofAI Cloud, so it must be owner-only (chmod 600 ${g})`,fix:`chmod 600 ${g}`};{let a=null;try{let d=511&(0,b.statSync)((0,c.dirname)(g)).mode;(18&d)!=0&&(a=d)}catch{}if(null!==a)return{status:"refused",path:g,mode:h,reason:"too-open",problem:`its directory ${(0,c.dirname)(g)} is ${a.toString(8).padStart(4,"0")} — other users can write there, so they can put their own credentials in its place; it must be owner-only (chmod 700 ${(0,c.dirname)(g)})`,fix:`chmod 700 ${(0,c.dirname)(g)}`}}if(d.size>65536)return{status:"refused",path:g,mode:h,reason:"too-large",problem:`${g} is larger than 65536 bytes`};let i=Buffer.alloc(d.size),j=0;for(;j<i.length;){let c=(0,b.readSync)(a,i,j,i.length-j,j);if(0===c)break;j+=c}e=i.subarray(0,j).toString("utf8")}catch(a){return{status:"refused",path:g,mode:null,reason:"unreadable",problem:`cannot read ${g} (${a.code??"error"})`}}finally{try{(0,b.closeSync)(a)}catch{}}try{f=JSON.parse(e)}catch{return{status:"refused",path:g,mode:null,reason:"not-json",problem:`${g} is not valid JSON`}}if(!f||"object"!=typeof f||Array.isArray(f))return{status:"refused",path:g,mode:null,reason:"not-json",problem:`${g} does not hold a JSON object`};let h=f,i=j(h),m=[i.cloud?{origin:l(i.cloud.url),key:i.cloud.token}:null,i.ingest?{origin:l(i.ingest.url),key:i.ingest.key}:null].filter(a=>null!==a&&null!==a.origin),n=m.length>0,o=k(h.jev);if(!o)return{status:"absent",path:g,connected:n};let p=l(o.url);return null!==p&&m.some(a=>a.origin===p&&a.key===o.key)?{status:"ok",path:g,credential:o}:{status:"absent",path:g,connected:n,orphaned:!0}},"t",0,function(a){var e,g;let{raw:j,config:k}=f(),l={mode:a.mode??k.mode,daemon:{...k.daemon,...a.daemon},collector:{...k.collector,...a.collector},telemetry:{...k.telemetry,...a.telemetry},audit:{...k.audit,...a.audit},agents:void 0===a.agents?k.agents:a.agents??void 0},m=l.collector,n={mode:{kind:l.mode},daemon:{configured:l.daemon.configured},collector:{sessions:m.sessions,hooks:m.hooks,hooks_verbosity:m.hooksVerbosity,redact:m.redact,environment:m.environment,...m.machineId?{machine_id:m.machineId}:{},...m.agents?{agents:m.agents}:{},...m.otlp?{otlp:m.otlp}:{},...Object.entries(m.sources??{}).some(([,a])=>a.extraPaths?.length)?{sources:Object.fromEntries(Object.entries(m.sources??{}).filter(([,a])=>a.extraPaths?.length).map(([a,b])=>[a,{extra_paths:b.extraPaths}]))}:{}},...l.telemetry.enabled?{}:{telemetry:{enabled:!1}},audit:{auto:l.audit.auto,interval_days:l.audit.intervalDays,...void 0===l.audit.reportsConsentedAt?{}:{reports_consented_at:l.audit.reportsConsentedAt}},...l.agents?{agents:{selected:l.agents.selected,seen:l.agents.seen}}:{}},o=structuredClone(j??f().raw);for(let a of h)!function a(b,c){let[d,...e]=c;if(void 0!==d)for(let c of"*"===d?Object.keys(b):[d]){if(0===e.length){delete b[c];continue}let d=b[c];i(d)&&(a(d,e),0===Object.keys(d).length&&delete b[c])}}(o,a);return!function a(b,c){for(let[d,e]of Object.entries(c)){let c=b[d];i(c)&&i(e)?a(c,e):b[d]=e}}(o,n),e=(0,d.y)(),g=`${JSON.stringify(o,null,2)}
1
+ module.exports=[21572,a=>{"use strict";var b=a.i(2157),c=a.i(50227);a.i(8674);var d=a.i(75818);let e={mode:"oss",daemon:{configured:!1},collector:{sessions:!1,hooks:!0,hooksVerbosity:"decisions",redact:"minimal",environment:"local"},telemetry:{enabled:!0},audit:{auto:!1,intervalDays:7}};function f(){let a={};try{let c=JSON.parse((0,b.readFileSync)((0,d.y)(),"utf8"));c&&"object"==typeof c&&!Array.isArray(c)&&(a=c)}catch{}return{raw:a,config:g()}}function g(){try{var a;let c,e,f,g,h;return a=JSON.parse((0,b.readFileSync)((0,d.y)(),"utf8")),c=a.mode?.kind,e=a.daemon??{},f=a.collector??{},g=a.telemetry??{},h=a.audit??{},{mode:"cloud"===c?"cloud":"oss",daemon:{configured:!0===e.configured},collector:{sessions:!0===f.sessions,hooks:!1!==f.hooks,hooksVerbosity:"all"===f.hooks_verbosity||"off"===f.hooks_verbosity?f.hooks_verbosity:"decisions",redact:"off"===f.redact?"off":"minimal",environment:"string"==typeof f.environment?f.environment:"local",machineId:"string"==typeof f.machine_id?f.machine_id:void 0,sources:function(a){if(!a||"object"!=typeof a||Array.isArray(a))return;let b={};for(let[c,d]of Object.entries(a)){if(!d||"object"!=typeof d||Array.isArray(d))continue;let a=d.extra_paths;if(!Array.isArray(a))continue;let e=a.filter(a=>"string"==typeof a&&""!==a.trim());e.length>0&&(b[c]={extraPaths:e})}return Object.keys(b).length>0?b:void 0}(f.sources),agents:function(a){if(!a||"object"!=typeof a||Array.isArray(a))return;let b=Object.fromEntries(Object.entries(a).flatMap(([a,b])=>{if(!b||"object"!=typeof b||Array.isArray(b))return[];let c=b.sessions;return"boolean"==typeof c?[[a,{sessions:c}]]:[]}));return Object.keys(b).length?b:void 0}(f.agents),otlp:function(a){if(!(!a||"object"!=typeof a||Array.isArray(a)))return{enabled:!0===a.enabled,..."number"==typeof a.port&&Number.isInteger(a.port)?{port:a.port}:{}}}(f.otlp)},telemetry:{enabled:!1!==g.enabled},audit:{auto:!0===h.auto,intervalDays:function(a){if("number"!=typeof a||!Number.isFinite(a))return 7;let b=Math.floor(a);return b<1?7:Math.min(b,90)}(h.interval_days),reportsConsentedAt:"number"==typeof h.reports_consented_at&&Number.isFinite(h.reports_consented_at)?h.reports_consented_at:void 0},agents:function(a){if(!a||"object"!=typeof a||Array.isArray(a))return;let b=a=>Array.isArray(a)?[...new Set(a.filter(a=>"string"==typeof a&&""!==a.trim()))]:[];if(Array.isArray(a.selected))return{selected:b(a.selected),seen:b(a.seen)}}(a.agents)}}catch{return structuredClone(e)}}let h=[["mode","kind"],["daemon","configured"],["collector","sessions"],["collector","hooks"],["collector","hooks_verbosity"],["collector","redact"],["collector","environment"],["collector","machine_id"],["collector","sources","*","extra_paths"],["collector","agents","*","sessions"],["collector","otlp","enabled"],["collector","otlp","port"],["telemetry","enabled"],["audit","auto"],["audit","interval_days"],["audit","reports_consented_at"],["agents","selected"],["agents","seen"]],i=a=>"object"==typeof a&&null!==a&&!Array.isArray(a);function j(){try{return k(JSON.parse((0,b.readFileSync)((0,d.L)(),"utf8")))}catch{return{}}}function k(a){{let b=a.cloud,c=a.ingest,d=a.auth,e={};if("number"==typeof a.connectedAt&&Number.isSafeInteger(a.connectedAt)&&a.connectedAt>=0&&(e.connectedAt=a.connectedAt),b&&"string"==typeof b.url&&"string"==typeof b.machine_id&&"string"==typeof b.token&&b.url&&b.token){let a="string"==typeof b.machine_label&&b.machine_label?b.machine_label:void 0;e.cloud={url:b.url,machineId:b.machine_id,token:b.token,machineLabel:a}}let f=a.org;if(f){let a=a=>"string"==typeof a&&a?a:void 0,b="number"==typeof f.since&&Number.isSafeInteger(f.since)&&f.since>=0?f.since:void 0,c={id:a(f.id),slug:a(f.slug),name:a(f.name),...void 0!==b?{since:b}:{}};(c.id||c.slug||c.name||void 0!==b)&&(e.org=c)}c&&"string"==typeof c.url&&"string"==typeof c.key&&c.url&&c.key&&(e.ingest={url:c.url,key:c.key});let g=l(a.jev);return g&&(e.jev=g),d&&(e.auth={baseUrl:"string"==typeof d.base_url?d.base_url:void 0,sessionToken:"string"==typeof d.session_token?d.session_token:void 0,expiresAt:"number"==typeof d.expires_at?d.expires_at:void 0,email:"string"==typeof d.email?d.email:void 0}),e}}function l(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let{url:b,key:c}=a;return"string"==typeof b&&b&&"string"==typeof c&&c?{url:b,key:c}:null}function m(a){if(!a)return null;try{let b=new URL(a).origin;return"null"===b?null:b}catch{return null}}a.s(["H",0,"Jev mode is managed by FailproofAI Cloud on this machine: enforce while a Jev policy is deployed here, off when none is.","M",0,function(){try{let a=j().cloud;return!!(a?.url&&a.machineId)}catch{return!1}},"s",0,g,"d",0,j,"R",0,function(){let a,e,f,g=(0,d.L)();try{a=(0,b.openSync)(g,b.constants.O_RDONLY|(b.constants.O_NONBLOCK??0))}catch(b){let a=b.code;if("ENOENT"===a||"ENOTDIR"===a)return{status:"absent",path:g,connected:!1};return{status:"refused",path:g,mode:null,reason:"unreadable",problem:`cannot open ${g} (${a??"error"})`}}try{let d=(0,b.fstatSync)(a);if(!d.isFile())return{status:"refused",path:g,mode:null,reason:"unreadable",problem:`${g} is not a regular file`};let f="win32"!==process.platform,h=511&d.mode;if(f&&(63&h)!=0)return{status:"refused",path:g,mode:h,reason:"too-open",problem:`${g} is ${h.toString(8).padStart(4,"0")}; it holds the key Jev sends to FailproofAI Cloud, so it must be owner-only (chmod 600 ${g})`,fix:`chmod 600 ${g}`};{let a=null;try{let d=511&(0,b.statSync)((0,c.dirname)(g)).mode;(18&d)!=0&&(a=d)}catch{}if(null!==a)return{status:"refused",path:g,mode:h,reason:"too-open",problem:`its directory ${(0,c.dirname)(g)} is ${a.toString(8).padStart(4,"0")} — other users can write there, so they can put their own credentials in its place; it must be owner-only (chmod 700 ${(0,c.dirname)(g)})`,fix:`chmod 700 ${(0,c.dirname)(g)}`}}if(d.size>65536)return{status:"refused",path:g,mode:h,reason:"too-large",problem:`${g} is larger than 65536 bytes`};let i=Buffer.alloc(d.size),j=0;for(;j<i.length;){let c=(0,b.readSync)(a,i,j,i.length-j,j);if(0===c)break;j+=c}e=i.subarray(0,j).toString("utf8")}catch(a){return{status:"refused",path:g,mode:null,reason:"unreadable",problem:`cannot read ${g} (${a.code??"error"})`}}finally{try{(0,b.closeSync)(a)}catch{}}try{f=JSON.parse(e)}catch{return{status:"refused",path:g,mode:null,reason:"not-json",problem:`${g} is not valid JSON`}}if(!f||"object"!=typeof f||Array.isArray(f))return{status:"refused",path:g,mode:null,reason:"not-json",problem:`${g} does not hold a JSON object`};let h=f,i=k(h),j=[i.cloud?{origin:m(i.cloud.url),key:i.cloud.token}:null,i.ingest?{origin:m(i.ingest.url),key:i.ingest.key}:null].filter(a=>null!==a&&null!==a.origin),n=j.length>0,o=l(h.jev);if(!o)return{status:"absent",path:g,connected:n};let p=m(o.url);return null!==p&&j.some(a=>a.origin===p&&a.key===o.key)?{status:"ok",path:g,credential:o}:{status:"absent",path:g,connected:n,orphaned:!0}},"t",0,function(a){var e,g;let{raw:j,config:k}=f(),l={mode:a.mode??k.mode,daemon:{...k.daemon,...a.daemon},collector:{...k.collector,...a.collector},telemetry:{...k.telemetry,...a.telemetry},audit:{...k.audit,...a.audit},agents:void 0===a.agents?k.agents:a.agents??void 0},m=l.collector,n={mode:{kind:l.mode},daemon:{configured:l.daemon.configured},collector:{sessions:m.sessions,hooks:m.hooks,hooks_verbosity:m.hooksVerbosity,redact:m.redact,environment:m.environment,...m.machineId?{machine_id:m.machineId}:{},...m.agents?{agents:m.agents}:{},...m.otlp?{otlp:m.otlp}:{},...Object.entries(m.sources??{}).some(([,a])=>a.extraPaths?.length)?{sources:Object.fromEntries(Object.entries(m.sources??{}).filter(([,a])=>a.extraPaths?.length).map(([a,b])=>[a,{extra_paths:b.extraPaths}]))}:{}},...l.telemetry.enabled?{}:{telemetry:{enabled:!1}},audit:{auto:l.audit.auto,interval_days:l.audit.intervalDays,...void 0===l.audit.reportsConsentedAt?{}:{reports_consented_at:l.audit.reportsConsentedAt}},...l.agents?{agents:{selected:l.agents.selected,seen:l.agents.seen}}:{}},o=structuredClone(j??f().raw);for(let a of h)!function a(b,c){let[d,...e]=c;if(void 0!==d)for(let c of"*"===d?Object.keys(b):[d]){if(0===e.length){delete b[c];continue}let d=b[c];i(d)&&(a(d,e),0===Object.keys(d).length&&delete b[c])}}(o,a);return!function a(b,c){for(let[d,e]of Object.entries(c)){let c=b[d];i(c)&&i(e)?a(c,e):b[d]=e}}(o,n),e=(0,d.y)(),g=`${JSON.stringify(o,null,2)}
2
2
  `,(0,b.mkdirSync)((0,c.dirname)(e),{recursive:!0}),(0,b.writeFileSync)(e,g,"utf8"),l}])}];
3
3
 
4
4
  //# sourceMappingURL=src_hooks_fp-config_ts_04t589gp4p60j._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[31934,a=>{"use strict";a.i(74533),a.i(60526),a.i(66680),a.i(2157),a.i(50227),a.i(91997),a.i(9909),a.i(67121),a.i(88673);var b=a.i(17280);a.i(15638),a.i(86304),a.i(91609),a.i(1459),b.v,b.Z,b.U,process.env.FAILPROOFAI_GITHUB_API,process.env.FAILPROOFAI_GITHUB_UPLOADS,process.env.FAILPROOFAI_GITHUB_GIT,a.s(["parseReleaseBody",0,function(a){let b="string"==typeof a?a:"",c={},d=/(\d+)\s+policies,\s*(\d+)\s+on by default/.exec(b);d&&(c.policies=Number(d[1]),c.defaultOn=Number(d[2]));let e=/(?:^|\n)\s*commit\s+([0-9a-f]{7,40})\b/i.exec(b);return e&&(c.commit=e[1].toLowerCase()),c}])}];
1
+ module.exports=[31934,a=>{"use strict";a.i(74533),a.i(60526),a.i(66680),a.i(2157),a.i(50227),a.i(91997),a.i(9909),a.i(41863),a.i(88673);var b=a.i(17280);a.i(15638),a.i(86304),a.i(91609),a.i(1459),b.v,b.Z,b.U,process.env.FAILPROOFAI_GITHUB_API,process.env.FAILPROOFAI_GITHUB_UPLOADS,process.env.FAILPROOFAI_GITHUB_GIT,a.s(["parseReleaseBody",0,function(a){let b="string"==typeof a?a:"",c={},d=/(\d+)\s+policies,\s*(\d+)\s+on by default/.exec(b);d&&(c.policies=Number(d[1]),c.defaultOn=Number(d[2]));let e=/(?:^|\n)\s*commit\s+([0-9a-f]{7,40})\b/i.exec(b);return e&&(c.commit=e[1].toLowerCase()),c}])}];
2
2
 
3
3
  //# sourceMappingURL=src_hooks_pack-cli_ts_0t7me658zqmh_._.js.map
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
7
7
  "static/chunks/0cz1d0mv5g_q7.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/SNr7o_-G4kNBQTR-iLZMM/_buildManifest.js",
11
- "static/SNr7o_-G4kNBQTR-iLZMM/_ssgManifest.js",
12
- "static/SNr7o_-G4kNBQTR-iLZMM/_clientMiddlewareManifest.js"
10
+ "static/LHCtFxVG0mdvd4lsXAOFC/_buildManifest.js",
11
+ "static/LHCtFxVG0mdvd4lsXAOFC/_ssgManifest.js",
12
+ "static/LHCtFxVG0mdvd4lsXAOFC/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/2ojf3r8g4tn7s.js",