failproofai 1.0.11 → 1.0.12-beta.1

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 (342) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +23 -23
  3. package/.next/standalone/.next/prerender-manifest.json +4 -4
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +3 -3
  6. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js +2 -2
  8. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.rsc +2 -2
  12. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  13. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  14. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +3 -3
  16. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page.js +3 -3
  18. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
  22. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  23. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  24. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/api/audit/invite/route.js +5 -6
  26. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/audit/run/route.js +24 -24
  28. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/audit/status/route.js +2 -2
  30. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/auth/login-request/route.js +4 -5
  32. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js +6 -7
  34. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/auth/logout/route.js +6 -7
  36. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/auth/status/route.js +5 -6
  38. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +2 -2
  40. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/audit/page/build-manifest.json +3 -3
  42. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  43. package/.next/standalone/.next/server/app/audit/page.js +4 -4
  44. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/index.html +1 -1
  47. package/.next/standalone/.next/server/app/index.rsc +3 -3
  48. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  49. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  50. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/page/build-manifest.json +3 -3
  52. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  53. package/.next/standalone/.next/server/app/page.js +2 -2
  54. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +3 -3
  57. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  58. package/.next/standalone/.next/server/app/policies/page.js +7 -7
  59. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  60. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +3 -3
  62. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  63. package/.next/standalone/.next/server/app/project/[name]/page.js +7 -7
  64. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +3 -3
  67. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  68. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  69. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +8 -8
  70. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +3 -3
  73. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  74. package/.next/standalone/.next/server/app/projects/page.js +3 -3
  75. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/settings/page/build-manifest.json +3 -3
  78. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  79. package/.next/standalone/.next/server/app/settings/page.js +10 -10
  80. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/chunks/{[externals]__0qkp92tjfvw8r._.js → [externals]__0vt9i6fqinjne._.js} +1 -1
  83. package/.next/standalone/.next/server/chunks/[externals]__1x24dzcbbq6-g._.js +3 -0
  84. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02vous7mpi2xm._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03i5o4a840guz._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0__a_je8fsn65._.js +3 -0
  87. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_hsnj_a2mvl_._.js +3 -0
  88. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1izwqj_ij_9x_._.js → [root-of-the-server]__0f_4g-vazrvxv._.js} +1 -1
  89. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l-oi4gdtmlo5._.js +3 -0
  90. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0swiyzbmvja2d._.js → [root-of-the-server]__0t9ufnv5hi2hq._.js} +5 -5
  91. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wg9dk8x8bnau._.js +3 -0
  92. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12kq3x-h7t7i1._.js +3 -0
  93. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a5zkndjwlc13._.js +3 -0
  94. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1r7kbfkiw2xmu._.js → [root-of-the-server]__1aaw59g-5uty7._.js} +12 -12
  95. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1hqpg6vgmfexv._.js +3 -0
  96. package/.next/standalone/.next/server/chunks/_09dz7xva4ce_2._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/_0hf5q4xzyg40j._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/_0tovk6q0miud6._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/_0trp3ycqv17cl._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/_19011-u44143j._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/_1ek68lnh2daur._.js +1 -1
  102. package/.next/standalone/.next/server/chunks/_1vslkoe35wok6._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/{_1ixl-kxq_ctsa._.js → _1y590mjzpkbos._.js} +2 -2
  104. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4vkpxxu7._.js +1 -1
  105. package/.next/standalone/.next/server/chunks/src_hooks_0_em82s16zfym._.js +5 -0
  106. package/.next/standalone/.next/server/chunks/src_hooks_builtin-policies_ts_1yq5ybgx1v98e._.js +3 -0
  107. package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3h94wnn._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/src_hooks_daemon-client_ts_0il_yu1zc0291._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/src_hooks_fp-home_ts_09kv0bn_4twyh._.js +1 -1
  110. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01j58mdcdw0vn._.js +3 -0
  111. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0588st-tpiuia._.js +3 -0
  112. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08ch3staq3ejw._.js +1 -1
  113. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_a8z2ldp2v3n._.js +3 -0
  114. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0vcyntk4snf0f._.js → [root-of-the-server]__0b78b0j8iyv6l._.js} +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bigvy9xmv2ka._.js +1 -1
  116. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ffu2-38y03ic._.js +3 -0
  117. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g8b0kyorya-t._.js +3 -0
  118. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h86bl2qf0k_o._.js +1 -1
  119. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1_xbg2kx30wp-._.js → [root-of-the-server]__0naevg4bcoh54._.js} +1 -1
  120. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pia5h3p8re4c._.js +1 -1
  121. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__075uro8t92s0_._.js → [root-of-the-server]__0pwj2h2efe5f-._.js} +3 -3
  122. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zn1d4blhd3bu._.js +3 -0
  123. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-ey9fgesfbc0._.js +1 -1
  124. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15usvs-ms-0hf._.js +1 -1
  125. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16gb3_92zvk5x._.js +1 -1
  126. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__17r4zrwanhp6r._.js +3 -0
  127. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1avi2kypusyb_._.js +1 -1
  128. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1lnfv02ucky7m._.js +3 -0
  129. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1mc9-zlnh656_._.js +3 -0
  130. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1r7drlqli-ado._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1s2-ck3k3rsoo._.js +3 -0
  132. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1l1qgu5mfapkh._.js → [root-of-the-server]__1vx7o8ukefudh._.js} +1 -1
  133. package/.next/standalone/.next/server/chunks/ssr/_0eoura3_9gjb-._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/ssr/_0pedwblqdoh58._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/ssr/_128ebxr83nk6g._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/ssr/_1_ozgifqv1ssi._.js +1 -1
  137. package/.next/standalone/.next/server/chunks/ssr/{_1gb0ifpkowwub._.js → _1a3tubds7s7ow._.js} +10 -9
  138. package/.next/standalone/.next/server/chunks/ssr/_1djqs9i27e4kg._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo5_vm5f.js +2 -2
  140. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9snixb5fd-._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47q0xq5w._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x33jqb6._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpcz0uxur._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h47jmhhd._.js +1 -1
  145. package/.next/standalone/.next/server/chunks/ssr/{node_modules_html-to-image_es_index_1f_ymmaonkksc.js → node_modules_html-to-image_es_index_1i8oid1gc7s1f.js} +1 -1
  146. package/.next/standalone/.next/server/chunks/ssr/package_json_[json]_cjs_013tntikdft59._.js +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/src_hooks_06kzv9ddabn3_._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/ssr/src_hooks_0agdmptetetdt._.js +5 -0
  149. package/.next/standalone/.next/server/chunks/ssr/src_hooks_0mdwgjisv4fub._.js +5 -0
  150. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4l1tzrm._.js +1 -1
  151. package/.next/standalone/.next/server/chunks/ssr/src_hooks_daemon-client_ts_0k41_i7jg6ndv._.js +1 -1
  152. package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me658zqmh_._.js +1 -1
  153. package/.next/standalone/.next/server/middleware-build-manifest.js +23 -23
  154. package/.next/standalone/.next/server/middleware.js +2 -2
  155. package/.next/standalone/.next/server/pages/404.html +1 -1
  156. package/.next/standalone/.next/server/pages/500.html +1 -1
  157. package/.next/standalone/.next/server/preview-props.json +3 -3
  158. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
  160. package/.next/standalone/.next/static/chunks/{0frxv4_m-m2u5.js → 063al_q720fkj.js} +1 -1
  161. package/.next/standalone/.next/static/chunks/0_zfad4co-t2z.js +1 -0
  162. package/.next/standalone/.next/static/chunks/0jutamwqz8pg5.js +1 -0
  163. package/.next/standalone/.next/static/chunks/114hbolvrv94e.js +1 -0
  164. package/.next/standalone/.next/static/chunks/{37stoe-_yd852.js → 18433qz-8njv3.js} +1 -1
  165. package/.next/standalone/.next/static/chunks/{1kwj8uqxuv85t.js → 1b32-afqacaen.js} +1 -1
  166. package/.next/standalone/.next/static/chunks/{44a7k2_62qc-9.js → 1p-hsi58i-6h0.js} +2 -2
  167. package/.next/standalone/.next/static/chunks/{302llgh97ce6w.js → 2-tf6_7u623kd.js} +1 -1
  168. package/.next/standalone/.next/static/chunks/{1_c0dc7zqj1n7.js → 24w3x2da9sk49.js} +1 -1
  169. package/.next/standalone/.next/static/chunks/2tjfp9dirxnku.js +1 -0
  170. package/.next/standalone/.next/static/chunks/{16z6_d7sp61jm.js → 3-pku9qwv1yfu.js} +1 -1
  171. package/.next/standalone/.next/static/chunks/{15rm15u5a6dua.js → 42e8zab314654.js} +1 -1
  172. package/.next/standalone/fp-cloud-cli/CHANGELOG.md +41 -0
  173. package/.next/standalone/fp-cloud-cli/README.md +42 -1
  174. package/.next/standalone/fp-cloud-cli/fp_cli/client.py +117 -12
  175. package/.next/standalone/fp-cloud-cli/fp_cli/commands/fleet_cmds.py +285 -19
  176. package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +84 -18
  177. package/.next/standalone/fp-cloud-cli/fp_cli/enforcement.py +170 -6
  178. package/.next/standalone/fp-cloud-cli/fp_cli/models.py +89 -6
  179. package/.next/standalone/fp-cloud-cli/fp_cli/output.py +259 -21
  180. package/.next/standalone/fp-cloud-cli/fp_cli/policy_check.py +8 -5
  181. package/.next/standalone/fp-cloud-cli/skill/SKILL.md +2 -2
  182. package/.next/standalone/fp-cloud-cli/skill/references/commands.md +17 -9
  183. package/.next/standalone/fp-cloud-cli/tests/test_cloud_jev.py +692 -0
  184. package/.next/standalone/fp-cloud-cli/tests/test_enforcement_logic.py +46 -0
  185. package/.next/standalone/fp-cloud-cli/tests/test_output.py +23 -0
  186. package/.next/standalone/fp-cloud-cli/uv.lock +6 -6
  187. package/.next/standalone/hermes-plugin/README.md +6 -4
  188. package/.next/standalone/hermes-plugin/__init__.py +16 -0
  189. package/.next/standalone/hermes-plugin/client.py +5 -1
  190. package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
  191. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  192. package/.next/standalone/node_modules/@opentelemetry/api/build/src/api/context.js +72 -0
  193. package/.next/standalone/node_modules/@opentelemetry/api/build/src/api/diag.js +84 -0
  194. package/.next/standalone/node_modules/@opentelemetry/api/build/src/api/metrics.js +50 -0
  195. package/.next/standalone/node_modules/@opentelemetry/api/build/src/api/propagation.js +80 -0
  196. package/.next/standalone/node_modules/@opentelemetry/api/build/src/api/trace.js +70 -0
  197. package/.next/standalone/node_modules/@opentelemetry/api/build/src/baggage/context-helpers.js +52 -0
  198. package/.next/standalone/node_modules/@opentelemetry/api/build/src/baggage/internal/baggage-impl.js +44 -0
  199. package/.next/standalone/node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.js +12 -0
  200. package/.next/standalone/node_modules/@opentelemetry/api/build/src/baggage/utils.js +41 -0
  201. package/.next/standalone/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js +27 -0
  202. package/.next/standalone/node_modules/@opentelemetry/api/build/src/context/context.js +52 -0
  203. package/.next/standalone/node_modules/@opentelemetry/api/build/src/context-api.js +16 -0
  204. package/.next/standalone/node_modules/@opentelemetry/api/build/src/diag/ComponentLogger.js +47 -0
  205. package/.next/standalone/node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js +73 -0
  206. package/.next/standalone/node_modules/@opentelemetry/api/build/src/diag/internal/logLevelLogger.js +34 -0
  207. package/.next/standalone/node_modules/@opentelemetry/api/build/src/diag/types.js +33 -0
  208. package/.next/standalone/node_modules/@opentelemetry/api/build/src/diag-api.js +20 -0
  209. package/.next/standalone/node_modules/@opentelemetry/api/build/src/index.js +71 -0
  210. package/.next/standalone/node_modules/@opentelemetry/api/build/src/internal/global-utils.js +60 -0
  211. package/.next/standalone/node_modules/@opentelemetry/api/build/src/internal/semver.js +111 -0
  212. package/.next/standalone/node_modules/@opentelemetry/api/build/src/metrics/Metric.js +18 -0
  213. package/.next/standalone/node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.js +118 -0
  214. package/.next/standalone/node_modules/@opentelemetry/api/build/src/metrics/NoopMeterProvider.js +20 -0
  215. package/.next/standalone/node_modules/@opentelemetry/api/build/src/metrics-api.js +17 -0
  216. package/.next/standalone/node_modules/@opentelemetry/api/build/src/propagation/NoopTextMapPropagator.js +23 -0
  217. package/.next/standalone/node_modules/@opentelemetry/api/build/src/propagation/TextMapPropagator.js +36 -0
  218. package/.next/standalone/node_modules/@opentelemetry/api/build/src/propagation-api.js +17 -0
  219. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/NonRecordingSpan.js +58 -0
  220. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js +68 -0
  221. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js +21 -0
  222. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js +46 -0
  223. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.js +46 -0
  224. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js +33 -0
  225. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/context-utils.js +71 -0
  226. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-impl.js +94 -0
  227. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-validators.js +35 -0
  228. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/internal/utils.js +16 -0
  229. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.js +25 -0
  230. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/span_kind.js +38 -0
  231. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.js +66 -0
  232. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/status.js +29 -0
  233. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace/trace_flags.js +18 -0
  234. package/.next/standalone/node_modules/@opentelemetry/api/build/src/trace-api.js +17 -0
  235. package/.next/standalone/node_modules/@opentelemetry/api/build/src/version.js +10 -0
  236. package/.next/standalone/node_modules/@opentelemetry/api/package.json +96 -0
  237. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  238. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +2 -2
  239. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +2 -2
  240. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +1 -1
  241. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  242. package/.next/standalone/node_modules/next/dist/server/app-render/async-local-storage.js +1 -1
  243. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  244. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  245. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  246. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  247. package/.next/standalone/node_modules/next/dist/server/lib/generate-agent-files.js +3 -3
  248. package/.next/standalone/node_modules/next/dist/server/lib/router-server.js +1 -1
  249. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  250. package/.next/standalone/node_modules/next/dist/server/lib/trace/tracer.js +1 -1
  251. package/.next/standalone/node_modules/next/dist/server/typescript/rules/config.js +2 -2
  252. package/.next/standalone/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1 -1
  253. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  254. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  255. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  256. package/.next/standalone/node_modules/next/package.json +11 -11
  257. package/.next/standalone/package.json +11 -11
  258. package/.next/standalone/sdk/python/CHANGELOG.md +7 -0
  259. package/.next/standalone/sdk/python/failproofai_sdk/_version.py +1 -1
  260. package/.next/standalone/sdk/python/pyproject.toml +19 -0
  261. package/.next/standalone/sdk/python/uv.lock +520 -301
  262. package/.next/standalone/sdk/typescript/CHANGELOG.md +13 -0
  263. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package-lock.json +4 -13
  264. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package.json +2 -1
  265. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package-lock.json +4 -13
  266. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package.json +3 -0
  267. package/.next/standalone/sdk/typescript/package-lock.json +178 -162
  268. package/.next/standalone/sdk/typescript/package.json +1 -1
  269. package/.next/standalone/sdk/typescript/src/version.ts +1 -1
  270. package/.next/standalone/server.js +1 -1
  271. package/bin/failproofai.mjs +17 -1
  272. package/dist/cli.mjs +2866 -1124
  273. package/dist/worker.mjs +1450 -145
  274. package/hermes-plugin/README.md +6 -4
  275. package/hermes-plugin/__init__.py +16 -0
  276. package/hermes-plugin/client.py +5 -1
  277. package/hermes-plugin/plugin.yaml +1 -1
  278. package/package.json +11 -11
  279. package/src/hooks/agent-roster.ts +172 -0
  280. package/src/hooks/agent-targets.ts +60 -0
  281. package/src/hooks/cloud-connection.ts +97 -27
  282. package/src/hooks/cloud-enrollment-cli.ts +7 -4
  283. package/src/hooks/cloud-managed-policies.ts +380 -20
  284. package/src/hooks/cloud-policy-errors.ts +481 -0
  285. package/src/hooks/config-status.ts +1 -1
  286. package/src/hooks/custom-hooks-loader.ts +26 -3
  287. package/src/hooks/daemon-client.ts +9 -4
  288. package/src/hooks/daemon-service.ts +2 -1
  289. package/src/hooks/effective-reviewers.ts +22 -1
  290. package/src/hooks/fp-home.ts +6 -0
  291. package/src/hooks/handler.ts +235 -18
  292. package/src/hooks/health-probe.ts +15 -0
  293. package/src/hooks/integrations.ts +18 -11
  294. package/src/hooks/jev-cli.ts +197 -0
  295. package/src/hooks/jev-cloud-connection.ts +92 -0
  296. package/src/hooks/manager.ts +122 -16
  297. package/src/hooks/pack-failclosed.ts +2 -0
  298. package/src/hooks/pack-manifest.ts +8 -1
  299. package/src/hooks/policy-evaluator.ts +5 -1
  300. package/src/hooks/policy-registry.ts +3 -2
  301. package/src/hooks/policy-reviewability.ts +21 -5
  302. package/src/hooks/semantic/cloud-jev-health.ts +227 -0
  303. package/src/hooks/semantic/cloud-jev.ts +677 -0
  304. package/src/hooks/semantic/jev-client.ts +18 -1
  305. package/src/hooks/semantic/jev-config.ts +173 -3
  306. package/src/hooks/semantic/jev-review.ts +129 -10
  307. package/src/hooks/semantic/pack-policies.ts +2 -1
  308. package/src/hooks/semantic/types.ts +8 -0
  309. package/src/hooks/session-pause-cli.ts +1 -1
  310. package/src/hooks/worker-server.ts +5 -1
  311. package/.next/standalone/.next/server/chunks/[externals]__0hjaw70fchx66._.js +0 -3
  312. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07l68zv0hqdiu._.js +0 -3
  313. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0car70pylmvor._.js +0 -3
  314. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0u3i025_setk_._.js +0 -3
  315. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10a2f6s636yc7._.js +0 -3
  316. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qt5u58xrcuk6._.js +0 -3
  317. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_077n_4ip5__fu._.js +0 -3
  318. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mqvvxcn6v0op._.js +0 -3
  319. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0pb7ds5g0vzgn._.js +0 -3
  320. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_1gasm5xkeqmm3._.js +0 -3
  321. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_1q1heqmkhh8l4._.js +0 -3
  322. package/.next/standalone/.next/server/chunks/src_hooks_1aveq0uhs2t1b._.js +0 -5
  323. package/.next/standalone/.next/server/chunks/src_hooks_1eem5a7cyqlb2._.js +0 -3
  324. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0888k4s6spfmh._.js +0 -3
  325. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_bflu046ep5j._.js +0 -3
  326. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_lbstb5x2t15._.js +0 -3
  327. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0fdwgktjfhedo._.js +0 -3
  328. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s4deza787asx._.js +0 -3
  329. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__18qe-hu0gwqm4._.js +0 -3
  330. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1_p_9xe520fex._.js +0 -3
  331. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1fmhm8_s9i4re._.js +0 -3
  332. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1g76awtnmimd1._.js +0 -3
  333. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pczevlpk5lxh._.js +0 -3
  334. package/.next/standalone/.next/server/chunks/ssr/_0dc-of_bn0cim._.js +0 -3
  335. package/.next/standalone/.next/server/chunks/ssr/src_hooks_effective-reviewers_ts_1h4wtvo55j16x._.js +0 -5
  336. package/.next/standalone/.next/static/chunks/0m-tv1y6ghhtk.js +0 -1
  337. package/.next/standalone/.next/static/chunks/0ol2gj4ntfn56.js +0 -1
  338. package/.next/standalone/.next/static/chunks/3hj5_7i3nw4zj.js +0 -1
  339. package/.next/standalone/.next/static/chunks/3iyoapeoq_hup.js +0 -1
  340. /package/.next/standalone/.next/static/{kEFP3ybXwZdriNEQmWwlH → xq8UgF5yFxty1VWxY2hyn}/_buildManifest.js +0 -0
  341. /package/.next/standalone/.next/static/{kEFP3ybXwZdriNEQmWwlH → xq8UgF5yFxty1VWxY2hyn}/_clientMiddlewareManifest.js +0 -0
  342. /package/.next/standalone/.next/static/{kEFP3ybXwZdriNEQmWwlH → xq8UgF5yFxty1VWxY2hyn}/_ssgManifest.js +0 -0
@@ -22,9 +22,9 @@ ${c.indent}`)}}else(""===z||"\n"===z[0])&&(A="");return x+=A+z,c.inFlow?y&&h&&h(
22
22
  ${c}`)+"'";return b.implicitKey?d:f.foldFlowLines(d,c,f.FOLD_FLOW,g(b,!1))}function j(a,b){let c,{singleQuote:d}=b.options;if(!1===d)c=h;else{let b=a.includes('"'),e=a.includes("'");c=b&&!e?i:e&&!b?h:d?i:h}return c(a,b)}try{d=RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{d=/\n+(?!\n|$)/g}function k({comment:a,type:b,value:c},h,i,l){let m,n,o,p,{blockQuote:q,commentString:r,lineWidth:s}=h.options;if(!q||/\n[\t ]+$/.test(c))return j(c,h);let t=h.indent||(h.forceBlockIndent||(p=c,/^(%|---|\.\.\.)/m.test(p))?" ":""),u="literal"===q||"folded"!==q&&b!==e.Scalar.BLOCK_FOLDED&&(b===e.Scalar.BLOCK_LITERAL||!function(a,b,c){if(!b||b<0)return!1;let d=b-c,e=a.length;if(e<=d)return!1;for(let b=0,c=0;b<e;++b)if("\n"===a[b]){if(b-c>d)return!0;if(e-(c=b+1)<=d)return!1}return!0}(c,s,t.length));if(!c)return u?"|\n":">\n";for(n=c.length;n>0;--n){let a=c[n-1];if("\n"!==a&&" "!==a&&" "!==a)break}let v=c.substring(n),w=v.indexOf("\n");-1===w?m="-":c===v||w!==v.length-1?(m="+",l&&l()):m="",v&&(c=c.slice(0,-v.length),"\n"===v[v.length-1]&&(v=v.slice(0,-1)),v=v.replace(d,`$&${t}`));let x=!1,y=-1;for(o=0;o<c.length;++o){let a=c[o];if(" "===a)x=!0;else if("\n"===a)y=o;else break}let z=c.substring(0,y<o?y+1:o);z&&(c=c.substring(z.length),z=z.replace(/\n+/g,`$&${t}`));let A=t?"2":"1",B=(x?A:"")+m;if(a&&(B+=" "+r(a.replace(/ ?[\r\n]+/g," ")),i&&i()),!u){let a=c.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${t}`),d=!1,i=g(h,!0);"folded"!==q&&b!==e.Scalar.BLOCK_FOLDED&&(i.onOverflow=()=>{d=!0});let j=f.foldFlowLines(`${z}${a}${v}`,t,f.FOLD_BLOCK,i);if(!d)return`>${B}
23
23
  ${t}${j}`}return c=c.replace(/\n+/g,`$&${t}`),`|${B}
24
24
  ${t}${z}${c}${v}`}c.stringifyString=function(a,b,c,d){let{implicitKey:l,inFlow:m}=b,n="string"==typeof a.value?a:Object.assign({},a,{value:String(a.value)}),{type:o}=a;o!==e.Scalar.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(n.value)&&(o=e.Scalar.QUOTE_DOUBLE);let p=a=>{switch(a){case e.Scalar.BLOCK_FOLDED:case e.Scalar.BLOCK_LITERAL:return l||m?j(n.value,b):k(n,b,c,d);case e.Scalar.QUOTE_DOUBLE:return h(n.value,b);case e.Scalar.QUOTE_SINGLE:return i(n.value,b);case e.Scalar.PLAIN:return function(a,b,c,d){let{type:h,value:i}=a,{actualString:l,implicitKey:m,indent:n,indentStep:o,inFlow:p}=b;if(m&&i.includes("\n")||p&&/[[\]{},]/.test(i))return j(i,b);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(i))return m||p||!i.includes("\n")?j(i,b):k(a,b,c,d);if(!m&&!p&&h!==e.Scalar.PLAIN&&i.includes("\n"))return k(a,b,c,d);if(/^(%|---|\.\.\.)/m.test(i)){if(""===n)return b.forceBlockIndent=!0,k(a,b,c,d);else if(m&&n===o)return j(i,b)}let q=i.replace(/\n+/g,`$&
25
- ${n}`);if(l){let a=a=>a.default&&"tag:yaml.org,2002:str"!==a.tag&&a.test?.test(q),{compat:c,tags:d}=b.doc.schema;if(d.some(a)||c?.some(a))return j(i,b)}return m?q:f.foldFlowLines(q,n,f.FOLD_FLOW,g(b,!1))}(n,b,c,d);default:return null}},q=p(o);if(null===q){let{defaultKeyType:a,defaultStringType:c}=b.options,d=l&&a||c;if(null===(q=p(d)))throw Error(`Unsupported default string type ${d}`)}return q}},85927,(a,b,c)=>{var d=a.r(27267);let e=Symbol("break visit"),f=Symbol("skip children"),g=Symbol("remove node");function h(a,b){let c=l(b);d.isDocument(a)?i(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):i(null,a,c,Object.freeze([]))}function i(a,b,c,f){let h=m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),i(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=i(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=i("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=i("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}async function j(a,b){let c=l(b);d.isDocument(a)?await k(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):await k(null,a,c,Object.freeze([]))}async function k(a,b,c,f){let h=await m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),k(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=await k(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=await k("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=await k("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}function l(a){return"object"==typeof a&&(a.Collection||a.Node||a.Value)?Object.assign({Alias:a.Node,Map:a.Node,Scalar:a.Node,Seq:a.Node},a.Value&&{Map:a.Value,Scalar:a.Value,Seq:a.Value},a.Collection&&{Map:a.Collection,Seq:a.Collection},a):a}function m(a,b,c,e){return"function"==typeof c?c(a,b,e):d.isMap(b)?c.Map?.(a,b,e):d.isSeq(b)?c.Seq?.(a,b,e):d.isPair(b)?c.Pair?.(a,b,e):d.isScalar(b)?c.Scalar?.(a,b,e):d.isAlias(b)?c.Alias?.(a,b,e):void 0}function n(a,b,c){let e=b[b.length-1];if(d.isCollection(e))e.items[a]=c;else if(d.isPair(e))"key"===a?e.key=c:e.value=c;else if(d.isDocument(e))e.contents=c;else{let a=d.isAlias(e)?"alias":"scalar";throw Error(`Cannot replace node with ${a} parent`)}}h.BREAK=e,h.SKIP=f,h.REMOVE=g,j.BREAK=e,j.SKIP=f,j.REMOVE=g,c.visit=h,c.visitAsync=j},17280,a=>{var b=a.i(66680),c=a.i(2157),d=a.i(50227),e=a.i(9909),f=a.i(86304);let g="failproofai-pack.json",h="failproofai-pack.mjs",i="SHA256SUMS";function j(){return(process.env.FAILPROOFAI_PACK_BASE_URL||"https://github.com").replace(/\/+$/,"")}let k=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,l=/^[A-Za-z0-9][A-Za-z0-9._/-]{0,127}$/,m="FailproofAI/policies",n=new Set(["core","failproofai","official"]);function o(a){let b=a.trim();if(0===b.length)throw Error("pack source is empty");let c=b.match(/^(?:https?:\/\/)?(?:www\.)?github\.com\/(.+)$/i);if(c){let[a,b,...d]=c[1].replace(/\/+$/,"").split("/"),e=null;if("releases"===d[0]&&("tag"===d[1]||"download"===d[1])){let a=d.slice(2);e=("download"===d[1]?a.slice(0,-1):a).join("/")||null}else"releases"===d[0]&&"latest"===d[1]&&(e=null);return p(a,b,e)}let d=b.replace(/^github:/i,""),e=d.lastIndexOf("@"),f=e>0?d.slice(0,e):d,g=e>0?d.slice(e+1):null,h=f.indexOf("/");if(h<=0||h===f.length-1){if(n.has(f.trim().toLowerCase()))throw Error(`${JSON.stringify(a)} is no longer a pack name — ours is a pack like anyone else's now. Use ${m} instead.`);throw Error(`pack source must be owner/repo, owner/repo@tag, or a github.com URL — got ${JSON.stringify(a)}`)}return p(f.slice(0,h),f.slice(h+1),g)}function p(a,b,c){if(!a||!k.test(a))throw Error(`unsafe owner ${JSON.stringify(a)}`);if(!b||!k.test(b))throw Error(`unsafe repo ${JSON.stringify(b)}`);if(null!==c&&!l.test(c))throw Error(`unsafe tag ${JSON.stringify(c)}`);return{owner:a,repo:b,tag:c}}async function q(a){let b=`${j()}/${a.owner}/${a.repo}/releases/latest`,c=await fetch(b,{signal:AbortSignal.timeout(3e4),redirect:"manual"}),d=c.headers.get("location");if(!d)throw Error(`could not resolve the newest release of ${a.owner}/${a.repo} (GET ${b} returned ${c.status} with no redirect). That redirect is issued only for a published, non-prerelease release, so either the repository has no releases at all or every release it has is a prerelease or a draft. Name a tag explicitly.`);let e=d.match(/\/releases\/tag\/(.+)$/);if(!e)throw Error(`unexpected redirect from ${b}: ${d}`);let f=decodeURIComponent(e[1]).replace(/\/+$/,"");if(!l.test(f))throw Error(`unsafe tag ${JSON.stringify(f)} from ${b}`);return f}async function r(b,c){let d,e=c.toLowerCase(),f=`${(process.env.FAILPROOFAI_GITHUB_API??"https://api.github.com").replace(/\/+$/,"")}/repos/${b.owner}/${b.repo}/releases?per_page=100`;try{let a=(process.env.GITHUB_TOKEN||process.env.GH_TOKEN||"").trim(),b=await fetch(f,{headers:{...a?{Authorization:`Bearer ${a}`}:{},Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"failproofai"},signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${f} returned ${b.status}`);d=await b.json()}catch(a){throw Error(`could not resolve commit ${c} in ${b.owner}/${b.repo}: ${L(a)}. Name the release tag instead if you know it.`)}let{parseReleaseBody:g}=await a.A(49679),h=Array.isArray(d)?d:[],i=[];for(let a of h){let b="string"==typeof a.tag_name?a.tag_name:"";if(!b||!l.test(b))continue;let c=g("string"==typeof a.body?a.body:"");c.commit&&c.commit.startsWith(e)&&i.push({tag:b,commit:c.commit})}if(i.length>1)throw Error(`commit ${c} matches ${i.length} releases of ${b.owner}/${b.repo}: `+i.map(a=>`${a.tag} (${a.commit})`).join(", ")+". Name one of those tags, or type more of the commit.");return 1===i.length?i[0].tag:null}async function s(a){return null===a.tag?q(a):e.r.test(a.tag)?await r(a,a.tag)??a.tag:a.tag}function t(a){return`github:${a.owner}/${a.repo}@${a.tag}`}function u(a,b){return`${j()}/${a.owner}/${a.repo}/releases/download/${a.tag}/${b}`}async function v(a){let b=await fetch(a,{signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${a} returned ${b.status}`);let c=b.headers.get("content-length");if(null!==c){let d=Number(c);if(Number.isFinite(d)&&d>8388608)throw await b.body?.cancel(),Error(`${a} declares ${d} bytes, over the 8388608 limit`)}if(!b.body)return Buffer.alloc(0);let d=[],e=b.body.getReader(),f=0;try{for(;;){let{done:b,value:c}=await e.read();if(b)break;if((f+=c.byteLength)>8388608)throw await e.cancel(),Error(`${a} is over the 8388608 byte limit`);d.push(Buffer.from(c))}}finally{e.releaseLock()}return Buffer.concat(d,f)}function w(a,b){for(let c of a.split("\n")){let a=c.trim().match(/^([0-9a-f]{64})\s+\*?(.+)$/i);if(a&&a[2].trim()===b)return a[1].toLowerCase()}return null}function x(a){return(0,b.createHash)("sha256").update(a).digest("hex")}function y(a,b){let e=`${a}.${process.pid}.tmp`;try{(0,c.mkdirSync)((0,d.dirname)(a),{recursive:!0}),(0,c.writeFileSync)(e,b),(0,c.renameSync)(e,a)}catch(a){throw(0,c.rmSync)(e,{force:!0}),a}}function z(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} semantic is not an array`);if(b.length>e.P)throw Error(`pack ${a} declares ${b.length} semantic policies, over the cap of ${e.P}`);let c=b.map((b,c)=>(0,e.U)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares semantic policy ${b.name} twice`);d.add(b.name)}return c}function A(a,b){let c=(0,e.T)(a,b);if("too-old"===c.kind)throw Error(c.reason);return"unreadable"===c.kind?{minCliVersionNote:c.reason}:c.declared?{minCliVersion:c.declared}:{}}async function B(a,b={}){let c=await I(a,b);return{id:c.id,version:c.version,enabled:c.enabled,available:c.available,bundled:!1,source:c.source,tag:c.tag,resolvedFromLatest:c.resolvedFromLatest,selection:c.selection,categories:c.categories}}async function C(a){let b;if("1"===process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("FAILPROOFAI_NO_DOWNLOAD is set, so nothing can be fetched to preview");let c=o(a),d=null===c.tag,f={...c,tag:await s(c)},h=(await v(u(f,i))).toString("utf8"),j=await v(u(f,g)),k=w(h,g);if(!k)throw Error(`${i} has no entry for ${g}`);if(x(j)!==k)throw Error(`${g} failed integrity verification`);try{b=JSON.parse(j.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let l=b,m=(0,e.$)(l),n=A(m.id,l.minCliVersion),p=z(m.id,l.semantic),q=D(m.id,l.policies);return E(q,p),{id:m.id,version:m.version,effect:m.effect,...m.commit?{commit:m.commit}:{},policies:q,semantic:p,...n,source:t(f),resolvedFromLatest:d}}function D(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} policies is not an array`);let c=b.map((b,c)=>(0,e.Z)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares ${b.name} twice`);d.add(b.name)}return c}function E(a,b){if(0===a.length&&0===b.length)throw Error("pack manifest declares no policies")}async function F(a){let b,c=(await v(u(a,i))).toString("utf8"),d=await v(u(a,g)),f=w(c,g);if(!f)throw Error(`${i} has no entry for ${g}`);if(x(d)!==f)throw Error(`${g} failed integrity verification`);let j=await v(u(a,h)),k=w(c,h);if(!k)throw Error(`${i} has no entry for ${h}`);let l=x(j);if(l!==k)throw Error(`${h} failed integrity verification`);try{b=JSON.parse(d.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let m=b,n=(0,e.$)(m),o=A(n.id,m.minCliVersion),p=D(n.id,m.policies),q=z(n.id,m.semantic);return E(p,q),{id:n.id,version:n.version,policies:p,semantic:q,...o,...void 0!==m.effect?{effect:n.effect}:{},...n.commit?{commit:n.commit}:{},artifact:j,artifactDigest:l}}function G(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}async function H(b,c){let d,{loadCustomHooks:e}=await a.A(6188);try{d=(await e(b,{strict:!0})).map(a=>a.name)}catch(a){throw Error(`its artifact could not be loaded: ${a instanceof Error?a.message:String(a)}`)}let f=c.filter(a=>!d.includes(a)),g=d.filter(a=>!c.includes(a));if(f.length>0)throw Error(`its manifest declares ${f.join(", ")} but the artifact does not register ${1===f.length?"it":"them"} — that would install as protection that never runs`);if(g.length>0)throw Error(`its artifact registers undeclared ${g.join(", ")} — a policy that enforces but appears in no listing cannot be reviewed or switched off`)}async function I(a,b){var g,h,i,j;let k,l;if(process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("pack downloads are disabled (FAILPROOFAI_NO_DOWNLOAD). Already-installed packs keep enforcing.");let m=o(a),n={...m,tag:await s(m)},p=null===m.tag,q=await F(n);if(g=n.tag,h=q.version,(k=g.slice(g.lastIndexOf("/")+1))!==h&&k!==`v${h}`){let a=n.tag.slice(n.tag.lastIndexOf("/")+1).replace(/^v/,""),b=`re-tag the release ${q.version} (a leading v is fine), or rebuild the pack with --version ${a}`;throw Error(`${q.id} was not installed: release tag ${n.tag} does not match the version its manifest declares (${q.version}). `+(p?`That is the newest release of ${n.owner}/${n.repo}, so the release and the pack disagree at the source — ask the publisher to ${b}.`:`Name the tag whose manifest says ${q.version}, or fix the pack: ${b}.`))}if(/^failproofai\//i.test(q.id)&&!(0,f.g)({source:t(n)}))throw Error(`${q.id} was not installed: the FailproofAI/ namespace is reserved for releases from github.com/FailproofAI, and this one came from ${n.owner}/${n.repo}.`);let r=q.policies.map(a=>a.name),u=(i=q.id,j=q.artifactDigest,(l=(0,e.V)().packs).find(a=>a.id===i)??l.find(a=>a.sha256===j)),{enabled:v,reason:w}=function(a,b,c,d){let e=a.map(a=>a.name);if(b?.all)return{enabled:null,reason:"all"};let f=new Set;if(b?.categories?.length){let c=new Set(b.categories.map(G)),d=new Map(a.map(a=>[G(a.category),a.category])),e=[...c].filter(a=>!d.has(a));if(e.length>0)throw Error(`no such categor${1===e.length?"y":"ies"}: ${e.join(", ")} (has: ${[...new Set(a.map(a=>G(a.category)))].join(", ")})`);for(let b of a)c.has(G(b.category))&&f.add(b.name)}if(b?.only?.length){let a=b.only.filter(a=>!e.includes(a));if(a.length>0)throw Error(`pack does not contain ${a.join(", ")}`);for(let a of b.only)f.add(a)}if(b?.only!==void 0||b?.categories?.length){if(b.merge&&d){if(null===c)return{enabled:null,reason:"carried"};for(let a of c??[])f.add(a);return{enabled:e.filter(a=>f.has(a)),reason:"added"}}return{enabled:e.filter(a=>f.has(a)),reason:"selected"}}return d?{enabled:null===c?null:c??null,reason:"carried"}:{enabled:a.filter(a=>a.defaultEnabled).map(a=>a.name),reason:"defaults"}}(q.policies,b,u?.enabled?u.enabled.filter(a=>r.includes(a)):u?.enabled,!!u),x=(0,e.N)(),z=`artifacts/${q.artifactDigest}.mjs`,A=(0,d.resolve)(x,z);(0,c.existsSync)(A)||y(A,q.artifact);try{await H(A,r)}catch(a){throw Error(`${q.id}@${q.version} was not installed: ${a instanceof Error?a.message:String(a)}`)}let B=a=>{let b=a.lastIndexOf("@");return b>a.indexOf(":")?a.slice(0,b):a};if(u&&u.id===q.id&&!u.source.startsWith("bundled:")&&B(u.source)!==B(t(n)))throw Error(`pack id ${q.id} is already installed from ${u.source}. Refusing to replace it with ${t(n)} — remove it first if that is what you mean.`);let C={id:q.id,version:q.version,source:t(n),entry:z,sha256:q.artifactDigest,policies:q.policies,...q.semantic.length>0?{semantic:q.semantic}:{},...q.minCliVersion?{minCliVersion:q.minCliVersion}:{},...q.commit?{commit:q.commit}:{},...q.effect?{effect:q.effect}:{},...v?{enabled:v}:{},...b?.clis?{clis:b.clis}:b?.merge!==!1&&u?.clis?{clis:u.clis}:{}};return{replaced:function(a,b=!0){let f=(0,d.resolve)((0,e.N)(),"installed.json"),g=[];if((0,c.existsSync)(f))try{let a=JSON.parse((0,c.readFileSync)(f,"utf8"));Array.isArray(a.packs)&&(g=a.packs)}catch{throw Error(`existing pack manifest at ${f} is unreadable; move it aside and re-add`)}let h=g.filter(b=>b?.sha256===a.sha256&&b?.id!==a.id).map(a=>a.id);if(b&&!a.enabled){let b=g.find(a=>h.includes(a?.id)),c=b?.enabled?.filter(b=>a.policies?.some(a=>a?.name===b));c&&c.length>0&&(a.enabled=c)}let i=g.filter(a=>!h.includes(a?.id)),j=i.findIndex(b=>b?.id===a.id);return j>=0?i[j]=a:i.push(a),y(f,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),h}(C,"all"!==w),id:q.id,version:q.version,source:C.source,tag:n.tag,resolvedFromLatest:p,enabled:v??r,available:r,selection:w,categories:[...new Set(q.policies.map(a=>G(a.category)))],semantic:q.semantic.length,...q.minCliVersionNote?{minCliVersionNote:q.minCliVersionNote}:{},...q.effect?{effect:q.effect}:{},...C.clis?{clis:C.clis}:{},artifact:A}}function J(a){let b=a.trim(),c=b.lastIndexOf("@");return(c>0?b.slice(0,c):b).trim()}class K extends Error{candidates;constructor(a,b){super(`${b} matches ${a.length} installed packs: ${a.join(", ")}. Name one of them exactly.`),this.candidates=a,this.name="AmbiguousPackId"}}function L(a){return a instanceof Error?a.message:String(a)}a.s(["w",0,m,"U",0,i,"Z",0,h,"v",0,g,"I",0,I,"z",0,B,"k",0,C,"R",0,function(a){let b,f=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(f))return null;try{b=JSON.parse((0,c.readFileSync)(f,"utf8"))}catch{return null}let g=Array.isArray(b.packs)?b.packs:[],h=g.find(b=>b?.id===J(a)),i=g.filter(b=>{var c;return b?.id&&(c=b.id,J(c).toLowerCase()===J(a).toLowerCase())});if(!h&&i.length>1)throw new K(i.map(a=>a.id).filter(a=>"string"==typeof a),a);let j=h??i[0],k=g.filter(a=>a!==j);return j&&k.length!==g.length?(y(f,JSON.stringify({schemaVersion:1,packs:k},null,2)+"\n"),j.id):null},"g",0,function(a,b,f){let g,h=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(h))return{ok:!1,reason:"no packs are installed"};try{g=JSON.parse((0,c.readFileSync)(h,"utf8"))}catch{return{ok:!1,reason:`pack manifest at ${h} is unreadable`}}let i=Array.isArray(g.packs)?g.packs:[],j=i.find(b=>b?.id===a);if(!j)return{ok:!1,reason:`no installed pack with id ${a}`};let k=(Array.isArray(j.policies)?j.policies:[]).map(a=>"string"==typeof a?.name?a.name:null).filter(a=>null!==a);if(!k.includes(b))return{ok:!1,reason:`pack ${a} declares no policy named ${b}`};let l=j.enabled??k,m=f?[...new Set([...l,b])]:l.filter(a=>a!==b);return j.enabled=k.filter(a=>m.includes(a)),y(h,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),{ok:!0}}])},49526,a=>{var b=a.i(1457),c=a.i(12072);let d={rgb:[102,209,181],c256:79,basic:"36"},e={rgb:[228,88,125],c256:168,basic:"95"},f={rgb:[227,179,65],c256:179,basic:"33"},g={rgb:[107,118,132],basic:"2"},h={rgb:[118,127,139],basic:"2"},i={rgb:[62,67,76],basic:"2"},j={rgb:[240,113,120],c256:203,basic:"31"};function k(a){return!!a.isTTY&&!process.env.NO_COLOR}let l="\x1b[0m";function m(){return/truecolor|24bit/i.test(process.env.COLORTERM||"")?"truecolor":/256color/i.test(process.env.TERM||"")?"ansi256":"basic"}function n(a,b){return"truecolor"===b?`38;2;${a.rgb[0]};${a.rgb[1]};${a.rgb[2]}`:"ansi256"===b&&void 0!==a.c256?`38;5;${a.c256}`:a.basic}let o=["...tt........","..tttt.......",".tttttt..pppp",".tttttt..pppp","..tttt...pppp","...tt....pppp",".........pppp",".........pppp","..pppp...pppp","..pppp...pppp","..pppp...pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp","..pppp...pppp","..ppppppppppp","..ppppppppppp","..ppppppppppp","..ppppppppppp"];function p(a,b){let c=0,d="",e=0;for(;e<a.length;)if("\x1b"===a[e]&&"["===a[e+1]){let b=e+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;b++,d+=a.slice(e,b),e=b}else{if(c>=b)break;d+=a[e],c++,e++}return d}function q(a,b,c,d={}){let e=a.columns||80,f=d.cut??!0,g=c.map(a=>""!==a&&f?p(a,e):a).join("\n")+"\n",h=b.lastCount>0?`\x1b[${b.lastCount}A\x1b[J`:"";a.write(`\x1b[?2026h${d.lead??""}${h}${g}${d.tail??""}\x1b[?2026l`),b.lastCount=c.length}function r(a){let b=0,c=0;for(;c<a.length;)if("\x1b"===a[c]&&"["===a[c+1]){let b=c+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;c=b+1}else b++,c++;return b}function s(a){let b=[],c="",d=0;for(;d<a.length;)if("\x1b"===a[d]&&"["===a[d+1]){let b=d+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;let e=a.slice(d,b+1);c=/\[0?m$/.test(e)?"":c+e,d=b+1}else b.push({ch:a[d],active:c}),d++;return b}function t(a){let b="",c="";for(let d of a)d.active!==c&&(c&&(b+=l),b+=d.active,c=d.active),b+=d.ch;return c?b+l:b}function u(a,b,c="left"){let d=Math.max(0,b-r(a));return"right"===c?" ".repeat(d)+a:a+" ".repeat(d)}Symbol("failproofai.back"),Symbol("failproofai.open-source"),Object.values({on:"✓ ON",off:"· OFF",mixed:"◐ MIXED",locked:"✓ LOCK",cloud:"✓ CLOUD",pack:"✓ PACK",failed:"▲ FAIL",observe:"◉ OBS"}).map(a=>a.length),a.s(["J",0," ","v",0,k,"w",0,function(a=process.stdout){return{cols:a.columns||80,color:k(a)}},"m",0,function(a={}){var k;let v,w,{cols:x,c:y}={cols:Math.max(20,a?.cols??80),c:(v=(k=a?.color??!1)?m():"basic",{bold:a=>k?`\x1b[1m${a}\x1b[0m`:a,dim:(w=(a,b=!1)=>c=>k?`\x1b[${b?"1;":""}${n(a,v)}m${c}\x1b[0m`:c)(g),guide:w(d),pink:w(e),pinkBold:w(e,!0),softPink:w(e),warn:w(f),ink2:a=>a,ink3:w(h),track:w(i),err:w(j)})},z=a.color??!1,A=a.version??c.version,B=y.ink3(" · "),C=(a,b)=>b?a(b):"",D=a=>y.pink(a),E=y.guide("●"),F=y.ink3("○"),G=y.err("✕"),H=y.pink("■"),I=y.ink3("□"),J=a=>`${y.bold("fa")}${y.pinkBold("il")}${y.bold("proof ai")} ${y.ink3(`v${A}`)}`+(a?`${B}${a}`:""),K=(a,b)=>y.bold(a.toUpperCase())+(b?` ${y.ink3(b)}`:""),L=(b,c=0)=>{let d=Math.max(c,...b.map(([a,b])=>b?r(a)+2:0));return b.map(([b,c])=>{let e,f;if(!c)return` ${b}`;let g=` ${u(b,d)}`;return g+(e=y.ink2(c),f=x-r(g),a.fit&&r(e)>f?function(a,b){var c;if(r(a)<=b)return a;if(a.includes("\x1b")){let d,e;return b<=1?"…":`${(e=(d=s(c=p(a,b-1)))[d.length-1])&&e.active?c+l:c}…`}return b<=0?"":a.length<=b?a:a.slice(0,b-1).trimEnd()+"…"}(e,Math.max(1,f)):e)})};return{cols:x,sep:B,cmd:D,on:E,off:F,failed:G,selected:H,unselected:I,meta:a=>C(y.ink3,a),header:J,head:K,rows:L,kv:(a,b=9)=>{let c=Math.max(b,...a.map(([a])=>r(a)))+2;return a.map(([a,b])=>b?` ${u(C(y.ink3,a),c)}${b}`:` ${C(y.ink3,a)}`)},ok:(a,b)=>`${y.guide("✓")} ${a}${b?` ${y.ink3(b)}`:""}`,caution:(a,b)=>`${y.warn("▲")} ${a}${b?`${B}${D(b)}`:""}`,fail:(a,b)=>`${y.err("✕")} ${a}${b?`${B}${D(b)}`:""}`,notice:(a,b)=>{let c=a=>(a.split("`").length-1)%2==0?a.replace(/`([^`]+)`/g,(a,b)=>D(b)):a,d="ok"===a?y.guide("✓"):"caution"===a?y.warn("▲"):y.err("✕"),[e="",...f]=b.split("\n");return[`${d} ${c(e)}`,...f.map(a=>""===a.trim()?"":` ${c(a)}`)]},confirm:(a,c="Continue?")=>new Promise(d=>{let{stdin:e,stdout:f}=a,g="",h=!1,i=e.isRaw,j=a=>{h||(h=!0,e.removeListener("keypress",l),e.removeListener("end",k),e.setRawMode?.(i??!1),e.pause(),f.write("\n"),d(a))};function k(){j(!1)}function l(a,b){let c=b?.name;b?.ctrl&&("c"===c||"d"===c)||"escape"===c?j(!1):"return"===c||"enter"===c?j(/^y(es)?$/i.test(g.trim())):"backspace"===c?g&&(g=g.slice(0,-1),f.write("\b \b")):a&&1===a.length&&a>=" "&&!b?.ctrl&&!b?.meta&&(g+=a,f.write(a))}f.write(`${c} ${y.ink3("y/N")} `),b.emitKeypressEvents(e),e.setRawMode?.(!0),e.on("keypress",l),e.on("end",k),e.resume()}),keys:a=>y.ink3(a.join(" · ")),bar:(a,b)=>{let c=Math.round(Math.max(0,Math.min(1,b))*a),d=Math.max(0,a-c);return C(y.pink,"━".repeat(c))+(z?C(y.track,"━".repeat(d)):" ".repeat(d))},logo:()=>x<22?[]:(function(a){let b=".".repeat(o[0]?.length??0),c=a=>"t"===a?d:"p"===a?e:null,f=[];for(let d=0;d<o.length;d+=2){let e=o[d],g=o[d+1]??b,h="";for(let b=0;b<e.length;b++){let d=c(e[b]),f=c(g[b]);if(d||f)if("basic"===a)h+=d&&f?"█":d?"▀":"▄";else if(d&&f)h+=d===f?`\x1b[${n(d,a)}m█\x1b[0m`:`\x1b[${n(d,a)};${"ansi256"===a&&void 0!==f.c256?`48;5;${f.c256}`:`48;2;${f.rgb[0]};${f.rgb[1]};${f.rgb[2]}`}m▀\x1b[0m`;else d?h+=`\x1b[${n(d,a)}m▀\x1b[0m`:h+=`\x1b[${n(f,a)}m▄\x1b[0m`;else h+=" "}f.push(h)}return f})(z?m():"basic").map(a=>` ${a}`),helpPage:b=>{var c;let d,e=[J(b.name),"",K("Usage"),...L(b.usage)];return b.options?.length&&e.push("",K("Options"),...(c=b.options,d=Math.max(b.optionsCol??0,...c.map(([a,b])=>b?r(a)+2:0)),c.flatMap(([b,c])=>{if(!c)return[` ${b}`];let e=` ${u(b,d)}`,f=x-r(e);if(!a.fit||r(c)<=f)return[e+y.ink2(c)];let g=" ".repeat(r(e));return(function(a,b){if(b<=0)return[a];if(!a.includes("\x1b")){if(b<=0)return[a];let c=a.split(/\s+/).filter(Boolean);if(0===c.length)return[];let d=[],e="";for(let a of c)e?e.length+1+a.length<=b?e+=` ${a}`:(d.push(e),e=a):e=a;return e&&d.push(e),d}let c=[],d=[];for(let b of s(a))/\s/.test(b.ch)?(d.length>0&&c.push(d),d=[]):d.push(b);d.length>0&&c.push(d);let e=[],f=[];for(let a of c){if(f.length>0&&f.length+1+a.length>b){e.push(t(f)),f=[...a];continue}f.length>0&&f.push({ch:" ",active:f[f.length-1].active}),f.push(...a)}return f.length>0&&e.push(t(f)),e})(c,Math.max(1,f)).map((a,b)=>(0===b?e:g)+y.ink2(a))}))),b.examples?.length&&e.push("",K("Examples"),...b.examples.map(a=>` ${D(a)}`)),e},live:a=>{let b={lastCount:0},c=0,d=null,e=null,f=!1,g=!1,h=()=>{a.write("\x1b[?25h")},i=()=>{process.removeListener("exit",h),process.removeListener("SIGINT",j),process.removeListener("SIGTERM",j)},j=a=>{g=!0,e&&clearTimeout(e),i(),h(),process.kill(process.pid,a)},k=()=>{e=null;let i=d;if(d=null,!i||g)return;c=Date.now();let k="";f||(f=!0,k="\x1b[?25l",process.once("exit",h),process.on("SIGINT",j),process.on("SIGTERM",j)),q(a,b,i(),{lead:k})};return{draw(a){if(g||(d=a,e))return;let b=c+100-Date.now();b<=0?k():(e=setTimeout(k,b),e.unref?.())},done(c){g||(g=!0,e&&clearTimeout(e),e=null,d=null,i(),q(a,b,c,{cut:!1,tail:f?"\x1b[?25h":""}))}}}}}])},91997,80504,67121,a=>{let b=["user","project","local"],c=["claude","codex","copilot","cursor","opencode","pi","hermes","openclaw","factory","devin","antigravity","goose"],d=["user","project"],e=["session_start","pre_tool_use","permission_request","post_tool_use","user_prompt_submit","stop","subagent_start","pre_compact","post_compact","subagent_stop"],f={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"},g=["user"],h=["pre_tool_call","post_tool_call","on_session_start","on_session_end","subagent_stop"],i=["user","project"],j=["SessionStart","SessionEnd","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","PostToolUseFailure","ErrorOccurred","PreCompact","PermissionRequest","Notification"],k=["user","project"],l=["sessionStart","sessionEnd","beforeSubmitPrompt","preToolUse","postToolUse","stop","subagentStop"],m=["user","project"],n=["tool.execute.before","tool.execute.after","session.created","session.deleted","session.idle","message.updated","permission.ask"],o=["user","project"],p=["session_start","session_shutdown","input","tool_call","user_bash","tool_result","agent_end"],q=["user"],r=["before_tool_call","after_tool_call","before_agent_run","before_agent_finalize","session_start","session_end","subagent_ended","before_compaction"],s=["user","project"],t=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Notification","Stop","SubagentStop","PreCompact","SessionEnd"],u=["user","project"],v=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PermissionRequest","Stop","SessionEnd"],w=["user","project"],x=["PreToolUse","PostToolUse","PreInvocation","Stop"],y=["user","project"],z=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","SessionEnd"],A=["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),B="__failproofai_hook__";a.s(["X",0,x,"m",0,w,"I",0,A,"p",0,f,"W",0,e,"L",0,d,"d",0,j,"w",0,i,"s",0,l,"Y",0,k,"D",0,v,"c",0,u,"n",0,t,"B",0,s,"Z",0,B,"i",0,z,"x",0,y,"y",0,h,"M",0,g,"F",0,b,"z",0,c,"P",0,r,"E",0,q,"e",0,n,"O",0,m,"J",0,p,"G",0,o],91997);var C=a.i(74533),D=a.i(2157),E=a.i(50227),F=a.i(57764),G=a.i(60526),H=a.i(22650),I=a.i(66680);class J extends Error{path;target;constructor(a,b){super(`Refusing to write ${a}: it is a symlink to ${b}, which does not exist. Fix or remove the link, then retry — failproofai will not replace it with a regular file.`),this.path=a,this.target=b,this.name="DanglingConfigSymlinkError"}}function K(a,b,c={}){let d,e,f="replace"===c.symlinks&&function(a){try{return(0,D.lstatSync)(a).isSymbolicLink()}catch{return!1}}(a),g="replace"===c.symlinks?a:function(a){let b=!1;try{b=(0,D.lstatSync)(a).isSymbolicLink()}catch{return a}if(!b)return a;try{return(0,D.realpathSync)(a)}catch{let b="(unreadable link)";try{b=(0,D.readlinkSync)(a)}catch{}throw new J(a,b)}}(a),h=(0,E.dirname)(g);(0,D.mkdirSync)(h,{recursive:!0});try{d=c.mode??(f?void 0:511&(0,D.statSync)(g).mode)}catch{d=c.mode}let i=(0,E.join)(h,`.${(0,E.basename)(g)}.failproofai-${process.pid}-${(0,I.randomBytes)(4).toString("hex")}.tmp`);try{e=(0,D.openSync)(i,"wx",d??438);let a=Buffer.from(b,"utf8"),j=0;for(;j<a.length;)j+=(0,D.writeSync)(e,a,j,a.length-j);(0,D.fsyncSync)(e),(0,D.closeSync)(e),e=void 0,void 0!==d&&(0,D.chmodSync)(i,d),!1!==c.backup&&!f&&(0,D.existsSync)(g)&&function(a,b){let c=`${a}.failproofai-backup`,d=(0,E.join)(b,`.${(0,E.basename)(a)}.failproofai-backup-${process.pid}-${(0,I.randomBytes)(4).toString("hex")}.tmp`);try{(0,D.copyFileSync)(a,d,D.constants.COPYFILE_EXCL),(0,D.renameSync)(d,c)}catch(a){throw(0,D.rmSync)(d,{force:!0}),a}}(g,h),(c.rename??D.renameSync)(i,g)}catch(a){if(void 0!==e)try{(0,D.closeSync)(e)}catch{}throw(0,D.rmSync)(i,{force:!0}),a}try{let a=(0,D.openSync)(h,"r");try{(0,D.fsyncSync)(a)}finally{(0,D.closeSync)(a)}}catch{}}var L=a.i(8284),M=a.i(68561);let N="# >>> failproofai managed hooks >>>",O="# <<< failproofai managed hooks <<<",P="0.129.0",Q=["PreToolUse","PermissionRequest","PostToolUse","PreCompact","PostCompact","SessionStart","SessionEnd","UserPromptSubmit","SubagentStart","SubagentStop","Stop","Interrupt"];function R(a){return`${a}.failproofai-backup`}function S(){try{let a=(0,C.execSync)("codex --version",{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5e3});return/(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(a)?.[1]??null}catch{return null}}function T(a){let b=RegExp(`^${U(N)}[ \\t]*$`,"m").exec(a);if(!b)return RegExp(`^${U(O)}[ \\t]*$`,"m").test(a)?"malformed":null;let c=RegExp(`^${U(O)}[ \\t]*$`,"mg");c.lastIndex=b.index+b[0].length;let d=c.exec(a);if(!d)return"malformed";let e=d.index+d[0].length;return"\r"===a[e]&&e++,"\n"===a[e]&&e++,{start:b.index,end:e}}function U(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function V(a,b){let c=T(a);if("malformed"===c)throw Error("failproofai's managed block is missing its begin or end marker");if(c){let d=a.slice(0,c.start),e=a.slice(c.end);return null!==b?d+b+e:(d.endsWith("\n\n")&&""===e?d.slice(0,-1):d)+e}return null===b?a:""===a?b:`${a}${a.endsWith("\n")?"\n":"\n\n"}${b}`}function W(a){let b;return void 0!==a.path?a.path:void 0!==(b=process.env.FAILPROOFAI_CODEX_SYSTEM_CONFIG)?""===b||"off"===b?null:(0,E.resolve)(b):"/etc/codex/config.toml"}function X(a){let b=(0,E.dirname)(a);for(;!(0,D.existsSync)(b);){let a=(0,E.dirname)(b);if(a===b)return!1;b=a}try{return(0,D.accessSync)(b,D.constants.W_OK),(0,D.existsSync)(a)&&(0,D.accessSync)(a,D.constants.W_OK),!0}catch{return!1}}function Y(a){try{return(511&(0,D.statSync)(a).mode).toString(8).padStart(4,"0")}catch{return"0644"}}function Z(a,b,c,d){if(d){K(a,b,{backup:!1}),(0,D.chmodSync)(a,parseInt(c,8));return}(0,L.p)("install",["-d","-m","0755",(0,E.dirname)(a)]),(0,L.C)(a,b,c)}function $(a,b){b?(0,D.rmSync)(a,{force:!0}):(0,L.p)("rm",["-f",a])}function _(a={}){let b=W(a);if(!b)return!1;try{var c;let a;return c=(0,D.readFileSync)(b,"utf8"),a=T(c),null!==a&&"malformed"!==a}catch{return!1}}function aa(a){return a.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase()}let ab=new Set(["UserPromptSubmit","Stop","Interrupt"]);function ac(a,b){for(;b<a.length&&(" "===a[b]||" "===a[b]);)b++;return b}function ad(a,b){let c=[];for(;;){b=ac(a,b);let d=ae(a,b);if(d)c.push(d.value),b=d.end;else{let d=/^[A-Za-z0-9_-]+/.exec(a.slice(b));if(!d)return null;c.push(d[0]),b+=d[0].length}let e=ac(a,b);if("."!==a[e])return{path:c,end:b};b=e+1}}function ae(a,b){if("'"===a[b]){let c=a.indexOf("'",b+1);return c<0?null:{value:a.slice(b+1,c),end:c+1}}if('"'!==a[b])return null;let c="";for(let d=b+1;d<a.length;d++){let b=a[d];if('"'===b)return{value:c,end:d+1};if("\\"!==b){c+=b;continue}let e=a[++d],f={b:"\b",t:" ",n:"\n",f:"\f",r:"\r",'"':'"',"\\":"\\",e:"\x1b"};if(e in f)c+=f[e];else if("u"===e||"U"===e){let b="u"===e?4:8,f=a.slice(d+1,d+1+b);if(!/^[0-9A-Fa-f]+$/.test(f)||f.length!==b)return null;c+=String.fromCodePoint(parseInt(f,16)),d+=b}else break}return null}a.s(["s",0,"Codex won't run failproofai's hooks until they're trusted.\nRe-run `failproofai config` and allow sudo, or open `codex` once and approve the hooks.","c",0,function(a={}){let b=W(a);if(b&&_({path:b}))return{kind:"system",path:b};let c=a.hooksJsonPath??(0,E.resolve)((0,G.homedir)(),".codex","hooks.json"),d=function(a){let b;try{b=JSON.parse((0,D.readFileSync)(a,"utf8"))}catch{return[]}let c=b?.hooks;if(!c||"object"!=typeof c)return[];let d=[];for(let[b,e]of Object.entries(c))Array.isArray(e)&&e.forEach((c,e)=>{let f=c?.hooks;Array.isArray(f)&&f.forEach((f,g)=>{if(!function(a){if(!a||"object"!=typeof a)return!1;if(!0===a[B])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}(f))return;let h=c.matcher;d.push({key:`${a}:${aa(b)}:${e}:${g}`,hash:function(a,b,c){let d="SessionEnd"===a||"Interrupt"===a,e="number"==typeof c.timeout&&Number.isFinite(c.timeout)?Math.trunc(c.timeout):null,f=d?Math.min(3,Math.max(1,e??1)):Math.max(1,e??600),g={async:!0===c.async,command:"string"==typeof c.command?c.command:"",timeout:f,type:"command"};"string"==typeof c.statusMessage&&(g.statusMessage=c.statusMessage);let h=c.additionalContextLimit;"number"==typeof h&&2500!==h&&(g.additionalContextLimit=h);let i={event_name:aa(a),hooks:[g]};return null===b||ab.has(a)||(i.matcher=b),`sha256:${(0,I.createHash)("sha256").update(function a(b){if(Array.isArray(b))return`[${b.map(a).join(",")}]`;if(b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b));return`{${c.map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}return JSON.stringify(b)}(i)).digest("hex")}`}(b,"string"==typeof h?h:null,f)})})});return d}(c);if(0===d.length)return{kind:"none"};let e=(a.codexVersion??S)();if(e&&!function(a){if(!a)return!0;let b=(0,M.f)(a,P);return null===b||b>=0}(e))return{kind:"ungated",path:c,version:e};let f=new Map;try{f=function(a){let b=new Map,c=(a,c)=>{if(4===a.length&&"hooks"===a[0]&&"state"===a[1]&&"trusted_hash"===a[3]){let d=a[2].trim();d&&b.set(d,c)}},d=[],e=null;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(e){a.includes(e)&&(e=null);continue}let f=a.trimStart();if(f.startsWith("#")||""===f)continue;if(f.startsWith("[[")){let a=ad(f,2);d=a?[...a.path,"[]"]:["[]"];continue}if(f.startsWith("[")){let a=ad(f,1);d=a&&"]"===f[ac(f,a.end)]?a.path:["?"];continue}let g=ad(f,0);if(!g)continue;let h=ac(f,g.end);if("="!==f[h])continue;h=ac(f,h+1);let i=[...d,...g.path];if(f.startsWith('"""',h)||f.startsWith("'''",h)){let a=f.slice(h,h+3);f.slice(h+3).includes(a)||(e=a);continue}let j=ae(f,h);if(j){c(i,j.value);continue}if("{"===f[h]){let a=h+1;for(;;){a=ac(f,a);let b=ad(f,a);if(!b||(a=ac(f,b.end),"="!==f[a]))break;a=ac(f,a+1);let d=ae(f,a);if(d)c([...i,...b.path],d.value),a=d.end;else for(;a<f.length&&","!==f[a]&&"}"!==f[a];)a++;if(a=ac(f,a),","!==f[a])break;a++}}}return b}((0,D.readFileSync)(a.userConfigPath??(0,E.resolve)((0,G.homedir)(),".codex","config.toml"),"utf8"))}catch{}let g=d.filter(a=>f.get(a.key)!==a.hash).length;return 0===g?{kind:"trusted",path:c}:{kind:"untrusted",path:c,untrusted:g,total:d.length}},"j",0,_,"i",0,function(a,b={}){let c=W(b);if(!c)return{ok:!1,reason:"unsupported-platform"};let d=(b.codexVersion??S)();if(!d)return{ok:!1,reason:"codex-not-found",path:c};let e=(0,M.f)(d,P);if(null!==e&&e<0)return{ok:!1,reason:"codex-too-old",detail:d,path:c};let f="",g=(0,D.existsSync)(c);if(g)try{f=(0,D.readFileSync)(c,"utf8")}catch(a){return{ok:!1,reason:"unreadable",detail:a instanceof Error?a.message:String(a),path:c}}let h=T(f);if("malformed"===h)return{ok:!1,reason:"unreadable",detail:"failproofai's block has lost one of its markers",path:c};let i=function(a){let b=Q.join("|"),c=/^\s*hooks\s*=/,d=RegExp(`^\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(=|\\.)`),e=RegExp(`^\\s*\\[\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(\\]|\\.)`),f=RegExp(`^\\s*"?(${b})"?\\s*(=|\\.)`),g=!1;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(/^\s*\[\[/.test(a)){g=!1;continue}if(/^\s*\[/.test(a)){if(e.test(a))return a.trim();g=/^\s*\[\s*hooks\s*\]/.test(a);continue}if(c.test(a)||d.test(a)||g&&f.test(a))return a.trim()}return null}(h?f.slice(0,h.start)+f.slice(h.end):f);if(i)return{ok:!1,reason:"conflict",detail:i,path:c};let j=V(f,function(a){let b=[N,"# Written by failproofai. Codex runs hooks from its system config without","# asking to trust them. `failproofai uninstall` removes this block; edit","# outside the markers only, everything between them is replaced."];for(let c of a)b.push("",`[[hooks.${c.event}]]`,`[[hooks.${c.event}.hooks]]`,'type = "command"',`command = ${JSON.stringify(c.command)}`,`timeout = ${Math.trunc(c.timeout)}`);return b.push(O),`${b.join("\n")}
26
- `}(a));if(j===f)return{ok:!0,path:c,changed:!1};let k=X(c);if(!k&&!(b.canElevate??L.e)())return{ok:!1,reason:"no-root",path:c};try{let a=g?Y(c):"0644",b=R(c);!g||h||(0,D.existsSync)(b)||Z(b,f,a,k),Z(c,j,a,k)}catch(a){return{ok:!1,reason:"write-failed",detail:a instanceof Error?a.message:String(a),path:c}}return{ok:!0,path:c,changed:!0}},"g",0,function(a={}){let b,c=W(a);if(!c||!(0,D.existsSync)(c))return{status:"absent"};try{b=(0,D.readFileSync)(c,"utf8")}catch(a){return{status:"failed",path:c,reason:a instanceof Error?a.message:String(a)}}let d=T(b);if(null===d)return{status:"absent"};if("malformed"===d)return{status:"failed",path:c,reason:"one of failproofai's markers is missing; remove the block by hand"};let e=(b.slice(d.start,d.end).match(/^\[\[hooks\.[A-Za-z]+\.hooks\]\]/gm)??[]).length,f=V(b,null),g=R(c),h=null;try{(0,D.existsSync)(g)&&(h=(0,D.readFileSync)(g,"utf8"))}catch{h=null}let i=X(c);if(!i&&!(a.canElevate??L.e)())return{status:"failed",path:c,reason:"removing it needs root, and sudo is not available"};try{null!==h&&(f===h||f===`${h}
27
- `)?(Z(c,h,Y(c),i),$(g,i)):null===h&&""===f.trim()?$(c,i):Z(c,f,Y(c),i)}catch(a){return{status:"failed",path:c,reason:a instanceof Error?a.message:String(a)}}return{status:"removed",path:c,hooks:e}}],80504);var af=a.i(43600);let ag="default";function ah(){let a,b=function(){let a=(process.env.OPENCLAW_STATE_DIR??"").trim();if(a)return(0,E.resolve)(a);let b=(process.env.OPENCLAW_HOME??"").trim();if(b)return(0,E.resolve)(b);let c=(process.env.OPENCLAW_CONFIG_PATH||"").trim();return c?(0,E.dirname)((0,E.resolve)(c)):(0,E.join)((0,G.homedir)(),".openclaw")}(),c=(0,E.basename)(b);if(".openclaw"!==c&&!c.startsWith(".openclaw-"))return[{name:ag,home:b}];let d=(0,E.dirname)(b),e=[{name:ag,home:(0,E.join)(d,".openclaw")}];try{a=(0,D.readdirSync)(d,{withFileTypes:!0})}catch{return e}let f=a.filter(a=>(a.isDirectory()||a.isSymbolicLink())&&a.name.startsWith(".openclaw-")&&a.name.length>10&&(0,D.existsSync)((0,E.join)(d,a.name,"openclaw.json"))).map(a=>({name:a.name.slice(10),home:(0,E.join)(d,a.name)})).sort((a,b)=>a.name.localeCompare(b.name));return e.push(...f),e}var ai={get url(){return a.F("src/hooks/integrations.ts")},env:{DEV:!1,PROD:!0,MODE:"production",BASE_URL:"/",SSR:!0}};class aj extends Error{path;constructor(a,b){super(`Refusing to modify ${a}: ${b}. failproofai never rewrites a config it could not parse — fix or move the file, then retry.`),this.path=a,this.name="UnreadableAgentConfigError"}}function ak(a){let b,c;if(!(0,D.existsSync)(a))return{};try{b=(0,D.readFileSync)(a,"utf8")}catch(b){throw new aj(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}if(""===b.trim())return{};try{c=JSON.parse(b)}catch(b){throw new aj(a,`it is not valid JSON (${b instanceof Error?b.message:String(b)})`)}if(!c||"object"!=typeof c||Array.isArray(c))throw new aj(a,"its top level is not a JSON object");return c}function al(a,b){K(a,JSON.stringify(b,null,2)+"\n")}function am(a){let b;if(!(0,D.existsSync)(a))return(0,H.parseDocument)("");try{b=(0,D.readFileSync)(a,"utf8")}catch(b){throw new aj(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}let c=(0,H.parseDocument)(b);if(c.errors.length>0){let b=c.errors[0]?.message.split("\n")[0]??"syntax error";throw new aj(a,`it does not parse as YAML (${b})`)}return c}function an(a,b){K(a,b.toString())}function ao(a){if(!a||"object"!=typeof a)return!1;if(!0===a[B])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}function ap(a){return"version"in a&&(delete a.version,!0)}function aq(a){try{let b=`which ${a}`;return(0,C.execSync)(b,{encoding:"utf8",stdio:"pipe"}),!0}catch{return!1}}function ar(a,b,c){let d=a.getSettingsPaths?.(b,c);return d&&d.length>0?d:[a.getSettingsPath(b,c)]}let as={id:"claude",displayName:"Claude Code",scopes:b,eventTypes:A,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".claude","settings.json");case"project":return(0,E.resolve)(c,".claude","settings.json");case"local":return(0,E.resolve)(c,".claude","settings.local.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b}`:`"${a}" --hook ${b}`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){a.hooks||(a.hooks={});let d=new Set(A);for(let b of Object.keys(a.hooks)){if(d.has(b))continue;let c=a.hooks[b];if(!Array.isArray(c))continue;let e=[];for(let a of c){if(!a||!Array.isArray(a.hooks)){a&&e.push(a);continue}let b=a.hooks.length;a.hooks=a.hooks.filter(a=>!ao(a)),0===a.hooks.length&&b>0||e.push(a)}a.hooks[b]=e,0===e.length&&delete a.hooks[b]}for(let d of A){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("claude")||aq("claude-code")},at={id:"codex",displayName:"OpenAI Codex",scopes:d,eventTypes:e,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".codex","hooks.json");case"project":case"local":return(0,E.resolve)(c,".codex","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli codex`:`"${a}" --hook ${b} --cli codex`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of(ap(a),a.hooks||(a.hooks={}),e)){let e=f[d],g=this.buildHookEntry(b,d,c);a.hooks[e]||(a.hooks[e]=[]);let h=a.hooks[e],i=!1;for(let a of h){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=g,i=!0;break}}i||h.push({hooks:[g]})}},removeHooksFromFile(a){let b=this.readSettings(a),c=ap(b);if(!b.hooks)return c&&this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(b.hooks)){let c=b.hooks[a];if(Array.isArray(c)){for(let a=c.length-1;a>=0;a--){let b=c[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),d+=e-b.hooks.length,0===b.hooks.length&&c.splice(a,1)}0===c.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,(d>0||c)&&this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){if("user"===a&&_())return!0;let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("codex")};function au(a){if(!0===a[B])return!0;for(let b of["string"==typeof a.bash?a.bash:"","string"==typeof a.powershell?a.powershell:""])if(b.includes("failproofai")&&b.includes("--hook"))return!0;return!1}let av="./plugins/failproofai.mjs";function aw(a){return(0,E.resolve)((0,E.dirname)(a),"plugins","failproofai.mjs")}function ax(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,E.resolve)(a,"pi-extension"):(0,E.resolve)((0,F.fileURLToPath)(ai.url),"..","..","..","pi-extension")}function ay(a){return"string"==typeof a&&(!!/(?:^|\/)pi-extension\/?$/.test(a)||a.includes("pi-extension")&&a.includes("failproofai"))}let az="failproofai",aA=".failproofai-managed",aB=["plugin.yaml","__init__.py","client.py","ledger.py"],aC="hermes-plugin";function aD(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,E.resolve)(a,aC):function(a){let b=(0,E.resolve)(a);for(let a=0;a<8;a++){let a=(0,E.resolve)(b,aC);if((0,D.existsSync)((0,E.resolve)(a,"plugin.yaml")))return a;let c=(0,E.dirname)(b);if(c===b)break;b=c}return(0,E.resolve)(a,"..","..",aC)}((0,E.dirname)((0,F.fileURLToPath)(ai.url)))}function aE(a){return(0,E.resolve)((0,E.dirname)(a),"plugins",az)}function aF(a){try{return(0,D.lstatSync)(a),!0}catch{return!1}}function aG(a){return aB.every(b=>(0,D.existsSync)((0,E.resolve)(a,b)))}function aH(a){return(0,E.resolve)((0,E.dirname)(a),".failproofai-link")}function aI(a){try{let b=(0,D.readFileSync)(aH(a),"utf8").trim();return""===b?null:(0,E.resolve)(b)}catch{return null}}function aJ(a,b){K(aH(a),(0,E.resolve)(b)+"\n",{backup:!1,symlinks:"replace"})}function aK(a){(0,D.rmSync)(aH(a),{force:!0})}function aL(a,b){if((0,E.resolve)(a)===(0,E.resolve)(b))return!0;try{return(0,D.realpathSync)(a)===(0,D.realpathSync)(b)}catch{return!1}}function aM(a){let b,c,d=aE(a);try{let a=(0,D.lstatSync)(d);b=a.isSymbolicLink(),c=a.isDirectory()}catch{return{kind:"absent"}}if(b){let a;try{a=(0,E.resolve)((0,E.dirname)(d),(0,D.readlinkSync)(d))}catch{return{kind:"foreign"}}return!function(a,b){let c=aI(a);if(c&&(0,E.resolve)(b)===c||aL(b,aD()))return!0;let d=(0,E.dirname)((0,E.resolve)(b));if((0,E.basename)((0,E.resolve)(b))!==aC||"failproofai"!==(0,E.basename)(d)||"node_modules"!==(0,E.basename)((0,E.dirname)(d)))return!1;try{let a=JSON.parse((0,D.readFileSync)((0,E.resolve)(d,"package.json"),"utf8"));return"failproofai"===a.name}catch{return!1}}(d,a)?{kind:"foreign"}:{kind:"link",target:a,complete:aG(a),current:aL(a,aD())}}return c&&(0,D.existsSync)((0,E.resolve)(d,aA))?{kind:"copy",complete:aG(d)}:{kind:"foreign"}}function aN(a){let b=(a.toJS()??{}).hooks,c=0;if(b&&"object"==typeof b){for(let a of Object.keys(b)){let d=b[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!ao(a));c+=e-f.length,0===f.length?delete b[a]:b[a]=f}0===Object.keys(b).length?(a.delete("hooks"),c>0&&a.delete("hooks_auto_accept")):a.set("hooks",b)}return c}function aO(a){if(!(0,D.existsSync)(a))return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1};let b=function(a){try{return am(a)}catch{return null}}(a);if(!b)return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1,unreadable:!0};let c=b.toJS()??{},d=c.plugins?.enabled,e=c.plugins?.disabled,f=!!c.hooks&&"object"==typeof c.hooks&&Object.values(c.hooks).some(a=>Array.isArray(a)&&a.some(a=>ao(a))),g=Array.isArray(d)&&d.includes(az),h=Array.isArray(e)&&e.includes(az);return{pluginEnabled:g&&!h,pluginListed:g,pluginDisabled:h,legacyShellHookPresent:f}}let aP="failproofai";function aQ(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,E.resolve)(a,"openclaw-plugin"):(0,E.resolve)((0,F.fileURLToPath)(ai.url),"..","..","..","openclaw-plugin")}function aR(a){return"string"==typeof a&&(/(?:^|\/)openclaw-plugin\/?$/.test(a)||a.includes("openclaw-plugin")&&a.includes("failproofai"))}let aS="failproofai",aT=new Set(["PreToolUse","PostToolUse"]);function aU(a){if(!a||"object"!=typeof a)return!1;let b=a.command;return"string"==typeof b&&b.includes("failproofai")&&b.includes("--cli goose")}let aV={claude:as,codex:at,copilot:{id:"copilot",displayName:"GitHub Copilot",scopes:i,eventTypes:j,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".copilot","hooks","failproofai.json");case"project":case"local":return(0,E.resolve)(c,".github","hooks","failproofai.json")}},readSettings(a){let b=ak(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){al(a,b)},buildHookEntry(a,b,c){let d="project"===c?`npx -y failproofai --hook ${b} --cli copilot`:`"${a}" --hook ${b} --cli copilot`;return{type:"command",bash:d,powershell:d,timeoutSec:60,[B]:!0}},isFailproofaiHook:au,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),j)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>au(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!au(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>au(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("copilot")},cursor:{id:"cursor",displayName:"Cursor Agent",scopes:k,eventTypes:l,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".cursor","hooks.json");case"project":case"local":return(0,E.resolve)(c,".cursor","hooks.json")}},readSettings(a){let b=ak(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli cursor`:`"${a}" --hook ${b} --cli cursor`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),l)){let e=this.buildHookEntry(b,d,c),f=a.hooks[d],g=f??[];f||(a.hooks[d]=g);let h=g.findIndex(a=>ao(a));h>=0?g[h]=e:g.push(e)}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!ao(a));c+=e-f.length,0===f.length?delete b.hooks[a]:b.hooks[a]=f}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)&&b.some(a=>ao(a)))return!0}catch{}return!1},detectInstalled:()=>aq("cursor-agent")||aq("agent")},opencode:{id:"opencode",displayName:"OpenCode",scopes:m,eventTypes:n,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".config","opencode","opencode.json");case"project":case"local":return(0,E.resolve)(c,".opencode","opencode.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry(a,b,c){if("user"===c){let a=(0,E.resolve)((0,G.homedir)(),".config","opencode","plugins","failproofai.mjs");return{spec:`file://${a}`,[B]:!0}}return{spec:av,[B]:!0}},isFailproofaiHook:a=>"string"==typeof a?a.includes("failproofai.mjs"):!!Array.isArray(a)&&"string"==typeof a[0]&&a[0].includes("failproofai.mjs"),writeHookEntries(a,b,c){let d,e,f=c??"project",g=aw("user"===f?(0,E.resolve)((0,G.homedir)(),".config","opencode","opencode.json"):(0,E.resolve)(process.cwd(),".opencode","opencode.json"));(0,D.mkdirSync)((0,E.dirname)(g),{recursive:!0}),K(g,(e=(d="project"===f)?'""':JSON.stringify(b),`// AUTO-GENERATED by failproofai. ${B}
25
+ ${n}`);if(l){let a=a=>a.default&&"tag:yaml.org,2002:str"!==a.tag&&a.test?.test(q),{compat:c,tags:d}=b.doc.schema;if(d.some(a)||c?.some(a))return j(i,b)}return m?q:f.foldFlowLines(q,n,f.FOLD_FLOW,g(b,!1))}(n,b,c,d);default:return null}},q=p(o);if(null===q){let{defaultKeyType:a,defaultStringType:c}=b.options,d=l&&a||c;if(null===(q=p(d)))throw Error(`Unsupported default string type ${d}`)}return q}},85927,(a,b,c)=>{var d=a.r(27267);let e=Symbol("break visit"),f=Symbol("skip children"),g=Symbol("remove node");function h(a,b){let c=l(b);d.isDocument(a)?i(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):i(null,a,c,Object.freeze([]))}function i(a,b,c,f){let h=m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),i(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=i(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=i("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=i("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}async function j(a,b){let c=l(b);d.isDocument(a)?await k(null,a.contents,c,Object.freeze([a]))===g&&(a.contents=null):await k(null,a,c,Object.freeze([]))}async function k(a,b,c,f){let h=await m(a,b,c,f);if(d.isNode(h)||d.isPair(h))return n(a,f,h),k(a,h,c,f);if("symbol"!=typeof h){if(d.isCollection(b)){f=Object.freeze(f.concat(b));for(let a=0;a<b.items.length;++a){let d=await k(a,b.items[a],c,f);if("number"==typeof d)a=d-1;else{if(d===e)return e;d===g&&(b.items.splice(a,1),a-=1)}}}else if(d.isPair(b)){f=Object.freeze(f.concat(b));let a=await k("key",b.key,c,f);if(a===e)return e;a===g&&(b.key=null);let d=await k("value",b.value,c,f);if(d===e)return e;d===g&&(b.value=null)}}return h}function l(a){return"object"==typeof a&&(a.Collection||a.Node||a.Value)?Object.assign({Alias:a.Node,Map:a.Node,Scalar:a.Node,Seq:a.Node},a.Value&&{Map:a.Value,Scalar:a.Value,Seq:a.Value},a.Collection&&{Map:a.Collection,Seq:a.Collection},a):a}function m(a,b,c,e){return"function"==typeof c?c(a,b,e):d.isMap(b)?c.Map?.(a,b,e):d.isSeq(b)?c.Seq?.(a,b,e):d.isPair(b)?c.Pair?.(a,b,e):d.isScalar(b)?c.Scalar?.(a,b,e):d.isAlias(b)?c.Alias?.(a,b,e):void 0}function n(a,b,c){let e=b[b.length-1];if(d.isCollection(e))e.items[a]=c;else if(d.isPair(e))"key"===a?e.key=c:e.value=c;else if(d.isDocument(e))e.contents=c;else{let a=d.isAlias(e)?"alias":"scalar";throw Error(`Cannot replace node with ${a} parent`)}}h.BREAK=e,h.SKIP=f,h.REMOVE=g,j.BREAK=e,j.SKIP=f,j.REMOVE=g,c.visit=h,c.visitAsync=j},67121,80504,a=>{var b=a.i(74533),c=a.i(2157),d=a.i(50227),e=a.i(57764),f=a.i(60526),g=a.i(22650),h=a.i(66680);class i extends Error{path;target;constructor(a,b){super(`Refusing to write ${a}: it is a symlink to ${b}, which does not exist. Fix or remove the link, then retry — failproofai will not replace it with a regular file.`),this.path=a,this.target=b,this.name="DanglingConfigSymlinkError"}}function j(a,b,e={}){let f,g,k="replace"===e.symlinks&&function(a){try{return(0,c.lstatSync)(a).isSymbolicLink()}catch{return!1}}(a),l="replace"===e.symlinks?a:function(a){let b=!1;try{b=(0,c.lstatSync)(a).isSymbolicLink()}catch{return a}if(!b)return a;try{return(0,c.realpathSync)(a)}catch{let b="(unreadable link)";try{b=(0,c.readlinkSync)(a)}catch{}throw new i(a,b)}}(a),m=(0,d.dirname)(l);(0,c.mkdirSync)(m,{recursive:!0});try{f=e.mode??(k?void 0:511&(0,c.statSync)(l).mode)}catch{f=e.mode}let n=(0,d.join)(m,`.${(0,d.basename)(l)}.failproofai-${process.pid}-${(0,h.randomBytes)(4).toString("hex")}.tmp`);try{g=(0,c.openSync)(n,"wx",f??438);let a=Buffer.from(b,"utf8"),i=0;for(;i<a.length;)i+=(0,c.writeSync)(g,a,i,a.length-i);(0,c.fsyncSync)(g),(0,c.closeSync)(g),g=void 0,void 0!==f&&(0,c.chmodSync)(n,f),!1!==e.backup&&!k&&(0,c.existsSync)(l)&&function(a,b){let e=`${a}.failproofai-backup`,f=(0,d.join)(b,`.${(0,d.basename)(a)}.failproofai-backup-${process.pid}-${(0,h.randomBytes)(4).toString("hex")}.tmp`);try{(0,c.copyFileSync)(a,f,c.constants.COPYFILE_EXCL),(0,c.renameSync)(f,e)}catch(a){throw(0,c.rmSync)(f,{force:!0}),a}}(l,m),(e.rename??c.renameSync)(n,l)}catch(a){if(void 0!==g)try{(0,c.closeSync)(g)}catch{}throw(0,c.rmSync)(n,{force:!0}),a}try{let a=(0,c.openSync)(m,"r");try{(0,c.fsyncSync)(a)}finally{(0,c.closeSync)(a)}}catch{}}var k=a.i(8284),l=a.i(68561),m=a.i(91997);let n="# >>> failproofai managed hooks >>>",o="# <<< failproofai managed hooks <<<",p="0.129.0",q=["PreToolUse","PermissionRequest","PostToolUse","PreCompact","PostCompact","SessionStart","SessionEnd","UserPromptSubmit","SubagentStart","SubagentStop","Stop","Interrupt"];function r(a){return`${a}.failproofai-backup`}function s(){try{let a=(0,b.execSync)("codex --version",{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5e3});return/(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(a)?.[1]??null}catch{return null}}function t(a){let b=RegExp(`^${u(n)}[ \\t]*$`,"m").exec(a);if(!b)return RegExp(`^${u(o)}[ \\t]*$`,"m").test(a)?"malformed":null;let c=RegExp(`^${u(o)}[ \\t]*$`,"mg");c.lastIndex=b.index+b[0].length;let d=c.exec(a);if(!d)return"malformed";let e=d.index+d[0].length;return"\r"===a[e]&&e++,"\n"===a[e]&&e++,{start:b.index,end:e}}function u(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function v(a,b){let c=t(a);if("malformed"===c)throw Error("failproofai's managed block is missing its begin or end marker");if(c){let d=a.slice(0,c.start),e=a.slice(c.end);return null!==b?d+b+e:(d.endsWith("\n\n")&&""===e?d.slice(0,-1):d)+e}return null===b?a:""===a?b:`${a}${a.endsWith("\n")?"\n":"\n\n"}${b}`}function w(a){let b;return void 0!==a.path?a.path:void 0!==(b=process.env.FAILPROOFAI_CODEX_SYSTEM_CONFIG)?""===b||"off"===b?null:(0,d.resolve)(b):"/etc/codex/config.toml"}function x(a){let b=(0,d.dirname)(a);for(;!(0,c.existsSync)(b);){let a=(0,d.dirname)(b);if(a===b)return!1;b=a}try{return(0,c.accessSync)(b,c.constants.W_OK),(0,c.existsSync)(a)&&(0,c.accessSync)(a,c.constants.W_OK),!0}catch{return!1}}function y(a){try{return(511&(0,c.statSync)(a).mode).toString(8).padStart(4,"0")}catch{return"0644"}}function z(a,b,e,f){if(f){j(a,b,{backup:!1}),(0,c.chmodSync)(a,parseInt(e,8));return}(0,k.p)("install",["-d","-m","0755",(0,d.dirname)(a)]),(0,k.C)(a,b,e)}function A(a,b){b?(0,c.rmSync)(a,{force:!0}):(0,k.p)("rm",["-f",a])}function B(a={}){let b=w(a);if(!b)return!1;try{var d;let a;return d=(0,c.readFileSync)(b,"utf8"),a=t(d),null!==a&&"malformed"!==a}catch{return!1}}function C(a){return a.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase()}let D=new Set(["UserPromptSubmit","Stop","Interrupt"]);function E(a,b){for(;b<a.length&&(" "===a[b]||" "===a[b]);)b++;return b}function F(a,b){let c=[];for(;;){b=E(a,b);let d=G(a,b);if(d)c.push(d.value),b=d.end;else{let d=/^[A-Za-z0-9_-]+/.exec(a.slice(b));if(!d)return null;c.push(d[0]),b+=d[0].length}let e=E(a,b);if("."!==a[e])return{path:c,end:b};b=e+1}}function G(a,b){if("'"===a[b]){let c=a.indexOf("'",b+1);return c<0?null:{value:a.slice(b+1,c),end:c+1}}if('"'!==a[b])return null;let c="";for(let d=b+1;d<a.length;d++){let b=a[d];if('"'===b)return{value:c,end:d+1};if("\\"!==b){c+=b;continue}let e=a[++d],f={b:"\b",t:" ",n:"\n",f:"\f",r:"\r",'"':'"',"\\":"\\",e:"\x1b"};if(e in f)c+=f[e];else if("u"===e||"U"===e){let b="u"===e?4:8,f=a.slice(d+1,d+1+b);if(!/^[0-9A-Fa-f]+$/.test(f)||f.length!==b)return null;c+=String.fromCodePoint(parseInt(f,16)),d+=b}else break}return null}a.s(["s",0,"Codex won't run failproofai's hooks until they're trusted.\nRe-run `failproofai config` and allow sudo, or open `codex` once and approve the hooks.","c",0,function(a={}){let b=w(a);if(b&&B({path:b}))return{kind:"system",path:b};let e=a.hooksJsonPath??(0,d.resolve)((0,f.homedir)(),".codex","hooks.json"),g=function(a){let b;try{b=JSON.parse((0,c.readFileSync)(a,"utf8"))}catch{return[]}let d=b?.hooks;if(!d||"object"!=typeof d)return[];let e=[];for(let[b,c]of Object.entries(d))Array.isArray(c)&&c.forEach((c,d)=>{let f=c?.hooks;Array.isArray(f)&&f.forEach((f,g)=>{if(!function(a){if(!a||"object"!=typeof a)return!1;if(!0===a[m.Z])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}(f))return;let i=c.matcher;e.push({key:`${a}:${C(b)}:${d}:${g}`,hash:function(a,b,c){let d="SessionEnd"===a||"Interrupt"===a,e="number"==typeof c.timeout&&Number.isFinite(c.timeout)?Math.trunc(c.timeout):null,f=d?Math.min(3,Math.max(1,e??1)):Math.max(1,e??600),g={async:!0===c.async,command:"string"==typeof c.command?c.command:"",timeout:f,type:"command"};"string"==typeof c.statusMessage&&(g.statusMessage=c.statusMessage);let i=c.additionalContextLimit;"number"==typeof i&&2500!==i&&(g.additionalContextLimit=i);let j={event_name:C(a),hooks:[g]};return null===b||D.has(a)||(j.matcher=b),`sha256:${(0,h.createHash)("sha256").update(function a(b){if(Array.isArray(b))return`[${b.map(a).join(",")}]`;if(b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b));return`{${c.map(([b,c])=>`${JSON.stringify(b)}:${a(c)}`).join(",")}}`}return JSON.stringify(b)}(j)).digest("hex")}`}(b,"string"==typeof i?i:null,f)})})});return e}(e);if(0===g.length)return{kind:"none"};let i=(a.codexVersion??s)();if(i&&!function(a){if(!a)return!0;let b=(0,l.f)(a,p);return null===b||b>=0}(i))return{kind:"ungated",path:e,version:i};let j=new Map;try{j=function(a){let b=new Map,c=(a,c)=>{if(4===a.length&&"hooks"===a[0]&&"state"===a[1]&&"trusted_hash"===a[3]){let d=a[2].trim();d&&b.set(d,c)}},d=[],e=null;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(e){a.includes(e)&&(e=null);continue}let f=a.trimStart();if(f.startsWith("#")||""===f)continue;if(f.startsWith("[[")){let a=F(f,2);d=a?[...a.path,"[]"]:["[]"];continue}if(f.startsWith("[")){let a=F(f,1);d=a&&"]"===f[E(f,a.end)]?a.path:["?"];continue}let g=F(f,0);if(!g)continue;let h=E(f,g.end);if("="!==f[h])continue;h=E(f,h+1);let i=[...d,...g.path];if(f.startsWith('"""',h)||f.startsWith("'''",h)){let a=f.slice(h,h+3);f.slice(h+3).includes(a)||(e=a);continue}let j=G(f,h);if(j){c(i,j.value);continue}if("{"===f[h]){let a=h+1;for(;;){a=E(f,a);let b=F(f,a);if(!b||(a=E(f,b.end),"="!==f[a]))break;a=E(f,a+1);let d=G(f,a);if(d)c([...i,...b.path],d.value),a=d.end;else for(;a<f.length&&","!==f[a]&&"}"!==f[a];)a++;if(a=E(f,a),","!==f[a])break;a++}}}return b}((0,c.readFileSync)(a.userConfigPath??(0,d.resolve)((0,f.homedir)(),".codex","config.toml"),"utf8"))}catch{}let k=g.filter(a=>j.get(a.key)!==a.hash).length;return 0===k?{kind:"trusted",path:e}:{kind:"untrusted",path:e,untrusted:k,total:g.length}},"j",0,B,"i",0,function(a,b={}){let d=w(b);if(!d)return{ok:!1,reason:"unsupported-platform"};let e=(b.codexVersion??s)();if(!e)return{ok:!1,reason:"codex-not-found",path:d};let f=(0,l.f)(e,p);if(null!==f&&f<0)return{ok:!1,reason:"codex-too-old",detail:e,path:d};let g="",h=(0,c.existsSync)(d);if(h)try{g=(0,c.readFileSync)(d,"utf8")}catch(a){return{ok:!1,reason:"unreadable",detail:a instanceof Error?a.message:String(a),path:d}}let i=t(g);if("malformed"===i)return{ok:!1,reason:"unreadable",detail:"failproofai's block has lost one of its markers",path:d};let j=function(a){let b=q.join("|"),c=/^\s*hooks\s*=/,d=RegExp(`^\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(=|\\.)`),e=RegExp(`^\\s*\\[\\s*hooks\\s*\\.\\s*"?(${b})"?\\s*(\\]|\\.)`),f=RegExp(`^\\s*"?(${b})"?\\s*(=|\\.)`),g=!1;for(let b of a.split("\n")){let a=b.replace(/\r$/,"");if(/^\s*\[\[/.test(a)){g=!1;continue}if(/^\s*\[/.test(a)){if(e.test(a))return a.trim();g=/^\s*\[\s*hooks\s*\]/.test(a);continue}if(c.test(a)||d.test(a)||g&&f.test(a))return a.trim()}return null}(i?g.slice(0,i.start)+g.slice(i.end):g);if(j)return{ok:!1,reason:"conflict",detail:j,path:d};let m=v(g,function(a){let b=[n,"# Written by failproofai. Codex runs hooks from its system config without","# asking to trust them. `failproofai uninstall` removes this block; edit","# outside the markers only, everything between them is replaced."];for(let c of a)b.push("",`[[hooks.${c.event}]]`,`[[hooks.${c.event}.hooks]]`,'type = "command"',`command = ${JSON.stringify(c.command)}`,`timeout = ${Math.trunc(c.timeout)}`);return b.push(o),`${b.join("\n")}
26
+ `}(a));if(m===g)return{ok:!0,path:d,changed:!1};let u=x(d);if(!u&&!(b.canElevate??k.e)())return{ok:!1,reason:"no-root",path:d};try{let a=h?y(d):"0644",b=r(d);!h||i||(0,c.existsSync)(b)||z(b,g,a,u),z(d,m,a,u)}catch(a){return{ok:!1,reason:"write-failed",detail:a instanceof Error?a.message:String(a),path:d}}return{ok:!0,path:d,changed:!0}},"g",0,function(a={}){let b,d=w(a);if(!d||!(0,c.existsSync)(d))return{status:"absent"};try{b=(0,c.readFileSync)(d,"utf8")}catch(a){return{status:"failed",path:d,reason:a instanceof Error?a.message:String(a)}}let e=t(b);if(null===e)return{status:"absent"};if("malformed"===e)return{status:"failed",path:d,reason:"one of failproofai's markers is missing; remove the block by hand"};let f=(b.slice(e.start,e.end).match(/^\[\[hooks\.[A-Za-z]+\.hooks\]\]/gm)??[]).length,g=v(b,null),h=r(d),i=null;try{(0,c.existsSync)(h)&&(i=(0,c.readFileSync)(h,"utf8"))}catch{i=null}let j=x(d);if(!j&&!(a.canElevate??k.e)())return{status:"failed",path:d,reason:"removing it needs root, and sudo is not available"};try{null!==i&&(g===i||g===`${i}
27
+ `)?(z(d,i,y(d),j),A(h,j)):null===i&&""===g.trim()?A(d,j):z(d,g,y(d),j)}catch(a){return{status:"failed",path:d,reason:a instanceof Error?a.message:String(a)}}return{status:"removed",path:d,hooks:f}}],80504);var H=a.i(43600);let I="default";function J(){let a,b=function(){let a=(process.env.OPENCLAW_STATE_DIR??"").trim();if(a)return(0,d.resolve)(a);let b=(process.env.OPENCLAW_HOME??"").trim();if(b)return(0,d.resolve)(b);let c=(process.env.OPENCLAW_CONFIG_PATH||"").trim();return c?(0,d.dirname)((0,d.resolve)(c)):(0,d.join)((0,f.homedir)(),".openclaw")}(),e=(0,d.basename)(b);if(".openclaw"!==e&&!e.startsWith(".openclaw-"))return[{name:I,home:b}];let g=(0,d.dirname)(b),h=[{name:I,home:(0,d.join)(g,".openclaw")}];try{a=(0,c.readdirSync)(g,{withFileTypes:!0})}catch{return h}let i=a.filter(a=>(a.isDirectory()||a.isSymbolicLink())&&a.name.startsWith(".openclaw-")&&a.name.length>10&&(0,c.existsSync)((0,d.join)(g,a.name,"openclaw.json"))).map(a=>({name:a.name.slice(10),home:(0,d.join)(g,a.name)})).sort((a,b)=>a.name.localeCompare(b.name));return h.push(...i),h}var K={get url(){return a.F("src/hooks/integrations.ts")},env:{DEV:!1,PROD:!0,MODE:"production",BASE_URL:"/",SSR:!0}};class L extends Error{path;constructor(a,b){super(`Refusing to modify ${a}: ${b}. failproofai never rewrites a config it could not parse — fix or move the file, then retry.`),this.path=a,this.name="UnreadableAgentConfigError"}}function M(a){let b,d;if(!(0,c.existsSync)(a))return{};try{b=(0,c.readFileSync)(a,"utf8")}catch(b){throw new L(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}if(""===b.trim())return{};try{d=JSON.parse(b)}catch(b){throw new L(a,`it is not valid JSON (${b instanceof Error?b.message:String(b)})`)}if(!d||"object"!=typeof d||Array.isArray(d))throw new L(a,"its top level is not a JSON object");return d}function N(a,b){j(a,JSON.stringify(b,null,2)+"\n")}function O(a){let b;if(!(0,c.existsSync)(a))return(0,g.parseDocument)("");try{b=(0,c.readFileSync)(a,"utf8")}catch(b){throw new L(a,`it could not be read (${b instanceof Error?b.message:String(b)})`)}let d=(0,g.parseDocument)(b);if(d.errors.length>0){let b=d.errors[0]?.message.split("\n")[0]??"syntax error";throw new L(a,`it does not parse as YAML (${b})`)}return d}function P(a,b){j(a,b.toString())}function Q(a){if(!a||"object"!=typeof a)return!1;if(!0===a[m.Z])return!0;let b="string"==typeof a.command?a.command:"";return b.includes("failproofai")&&b.includes("--hook")}function R(a){return` --agent-scope ${a??"user"}`}function S(a){return"version"in a&&(delete a.version,!0)}function T(a){try{let c=`which ${a}`;return(0,b.execSync)(c,{encoding:"utf8",stdio:"pipe"}),!0}catch{return!1}}function U(a,b,c){let d=a.getSettingsPaths?.(b,c);return d&&d.length>0?d:[a.getSettingsPath(b,c)]}let V={id:"claude",displayName:"Claude Code",scopes:m.F,eventTypes:m.I,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".claude","settings.json");case"project":return(0,d.resolve)(c,".claude","settings.json");case"local":return(0,d.resolve)(c,".claude","settings.local.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b}`:`"${a}" --hook ${b}`)+R(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:Q,writeHookEntries(a,b,c){a.hooks||(a.hooks={});let d=new Set(m.I);for(let b of Object.keys(a.hooks)){if(d.has(b))continue;let c=a.hooks[b];if(!Array.isArray(c))continue;let e=[];for(let a of c){if(!a||!Array.isArray(a.hooks)){a&&e.push(a);continue}let b=a.hooks.length;a.hooks=a.hooks.filter(a=>!Q(a)),0===a.hooks.length&&b>0||e.push(a)}a.hooks[b]=e,0===e.length&&delete a.hooks[b]}for(let d of m.I){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>Q(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!Q(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>Q(a)))return!0}}catch{}return!1},detectInstalled:()=>T("claude")||T("claude-code")},W={id:"codex",displayName:"OpenAI Codex",scopes:m.L,eventTypes:m.W,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".codex","hooks.json");case"project":case"local":return(0,d.resolve)(c,".codex","hooks.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli codex`:`"${a}" --hook ${b} --cli codex`)+R(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:Q,writeHookEntries(a,b,c){for(let d of(S(a),a.hooks||(a.hooks={}),m.W)){let e=m.p[d],f=this.buildHookEntry(b,d,c);a.hooks[e]||(a.hooks[e]=[]);let g=a.hooks[e],h=!1;for(let a of g){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>Q(a));if(b>=0){a.hooks[b]=f,h=!0;break}}h||g.push({hooks:[f]})}},removeHooksFromFile(a){let b=this.readSettings(a),c=S(b);if(!b.hooks)return c&&this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(b.hooks)){let c=b.hooks[a];if(Array.isArray(c)){for(let a=c.length-1;a>=0;a--){let b=c[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!Q(a)),d+=e-b.hooks.length,0===b.hooks.length&&c.splice(a,1)}0===c.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,(d>0||c)&&this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){if("user"===a&&B())return!0;let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>Q(a)))return!0}}catch{}return!1},detectInstalled:()=>T("codex")};function X(a){if(!0===a[m.Z])return!0;for(let b of["string"==typeof a.bash?a.bash:"","string"==typeof a.powershell?a.powershell:""])if(b.includes("failproofai")&&b.includes("--hook"))return!0;return!1}let Y={id:"copilot",displayName:"GitHub Copilot",scopes:m.w,eventTypes:m.d,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".copilot","hooks","failproofai.json");case"project":case"local":return(0,d.resolve)(c,".github","hooks","failproofai.json")}},readSettings(a){let b=M(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){N(a,b)},buildHookEntry(a,b,c){let d="project"===c?`npx -y failproofai --hook ${b} --cli copilot`:`"${a}" --hook ${b} --cli copilot`;return{type:"command",bash:d+R(c),powershell:d+R(c),timeoutSec:60,[m.Z]:!0}},isFailproofaiHook:X,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),m.d)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>X(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!X(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>X(a)))return!0}}catch{}return!1},detectInstalled:()=>T("copilot")},Z={id:"cursor",displayName:"Cursor Agent",scopes:m.Y,eventTypes:m.s,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".cursor","hooks.json");case"project":case"local":return(0,d.resolve)(c,".cursor","hooks.json")}},readSettings(a){let b=M(a);return void 0===b.version&&(b.version=1),b},writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli cursor`:`"${a}" --hook ${b} --cli cursor`)+R(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:Q,writeHookEntries(a,b,c){for(let d of(void 0===a.version&&(a.version=1),a.hooks||(a.hooks={}),m.s)){let e=this.buildHookEntry(b,d,c),f=a.hooks[d],g=f??[];f||(a.hooks[d]=g);let h=g.findIndex(a=>Q(a));h>=0?g[h]=e:g.push(e)}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!Q(a));c+=e-f.length,0===f.length?delete b.hooks[a]:b.hooks[a]=f}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)&&b.some(a=>Q(a)))return!0}catch{}return!1},detectInstalled:()=>T("cursor-agent")||T("agent")},$="./plugins/failproofai.mjs";function _(a){return(0,d.resolve)((0,d.dirname)(a),"plugins","failproofai.mjs")}let aa={id:"opencode",displayName:"OpenCode",scopes:m.O,eventTypes:m.e,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".config","opencode","opencode.json");case"project":case"local":return(0,d.resolve)(c,".opencode","opencode.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry(a,b,c){if("user"===c){let a=(0,d.resolve)((0,f.homedir)(),".config","opencode","plugins","failproofai.mjs");return{spec:`file://${a}`,[m.Z]:!0}}return{spec:$,[m.Z]:!0}},isFailproofaiHook:a=>"string"==typeof a?a.includes("failproofai.mjs"):!!Array.isArray(a)&&"string"==typeof a[0]&&a[0].includes("failproofai.mjs"),writeHookEntries(a,b,e){let g,h,i=e??"project",k=_("user"===i?(0,d.resolve)((0,f.homedir)(),".config","opencode","opencode.json"):(0,d.resolve)(process.cwd(),".opencode","opencode.json"));(0,c.mkdirSync)((0,d.dirname)(k),{recursive:!0}),j(k,(h=(g="project"===i)?'""':JSON.stringify(b),`// AUTO-GENERATED by failproofai. ${m.Z}
28
28
  // Re-generate via: failproofai policies --install --cli opencode
29
29
  // Plugin shim that bridges OpenCode's plugin API to the failproofai binary.
30
30
  // See: https://opencode.ai/docs/plugins/
@@ -88,14 +88,15 @@ function canonicalizeToolInput(canonicalToolName, args) {
88
88
  return out;
89
89
  }
90
90
 
91
- const FAILPROOFAI_BIN = ${e};
92
- const USE_NPX = ${d};
91
+ const FAILPROOFAI_BIN = ${h};
92
+ const USE_NPX = ${g};
93
+ const AGENT_SCOPE = ${JSON.stringify(i)};
93
94
 
94
95
  function runFailproofai(eventName, payload, directory) {
95
96
  const cmd = USE_NPX ? "npx" : FAILPROOFAI_BIN;
96
97
  const args = USE_NPX
97
- ? ["-y", "failproofai", "--hook", eventName, "--cli", "opencode"]
98
- : ["--hook", eventName, "--cli", "opencode"];
98
+ ? ["-y", "failproofai", "--hook", eventName, "--cli", "opencode", "--agent-scope", AGENT_SCOPE]
99
+ : ["--hook", eventName, "--cli", "opencode", "--agent-scope", AGENT_SCOPE];
99
100
  const r = spawnSync(cmd, args, {
100
101
  input: JSON.stringify(payload),
101
102
  encoding: "utf8",
@@ -229,6 +230,6 @@ export default async function failproofaiPlugin({ client, directory }) {
229
230
  },
230
231
  };
231
232
  }
232
- `),{symlinks:"replace"}),Array.isArray(a.plugin)||(a.plugin=[]);let h="user"===f?`file://${g}`:av,i=a.plugin.findIndex(a=>this.isFailproofaiHook(a));i>=0?a.plugin[i]=h:a.plugin.push(h)},removeHooksFromFile(a){let b=0,c=this.readSettings(a);if(Array.isArray(c.plugin)){let a=c.plugin.length;c.plugin=c.plugin.filter(a=>!this.isFailproofaiHook(a)),b+=a-c.plugin.length,0===c.plugin.length&&delete c.plugin}this.writeSettings(a,c);let d=aw(a);if((0,D.existsSync)(d))try{(0,D.readFileSync)(d,"utf8").includes(B)&&((0,D.unlinkSync)(d),0===b&&(b=1))}catch{}return b},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!Array.isArray(a.plugin)||!a.plugin.some(a=>this.isFailproofaiHook(a)))return!1;let b=aw(c);if(!(0,D.existsSync)(b))return!1;return(0,D.readFileSync)(b,"utf8").includes(B)}catch{return!1}},detectInstalled:()=>aq("opencode")},pi:{id:"pi",displayName:"Pi",scopes:o,eventTypes:p,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".pi","agent","settings.json");case"project":case"local":return(0,E.resolve)(c,".pi","settings.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({[B]:!0,_piPackagePath:ax(),_piScope:c}),isFailproofaiHook:a=>"string"==typeof a?ay(a):!!a&&"object"==typeof a&&(!0===a[B]||"string"==typeof a.source&&ay(a.source)),writeHookEntries(a,b,c){var d;let e,f,g;Array.isArray(a.packages)||(a.packages=[]);let h=ax(),i="project"===c?(d=h,e=process.cwd(),f=(0,E.resolve)(e),(g=(0,E.resolve)(d)).startsWith(f+"/")||g===f?"../"+g.slice(f.length+1):g):h,j=a.packages.findIndex(a=>ay(a));j>=0?a.packages[j]=i:a.packages.push(i)},removeHooksFromFile(a){if(!(0,D.existsSync)(a))return 0;let b=this.readSettings(a);if(!Array.isArray(b.packages))return 0;let c=b.packages.length;b.packages=b.packages.filter(a=>!ay(a));let d=c-b.packages.length;return 0===b.packages.length&&delete b.packages,this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!Array.isArray(a.packages))return!1;return a.packages.some(a=>ay(a))}catch{return!1}},detectInstalled:()=>aq("pi")},hermes:{id:"hermes",displayName:"Hermes",requiresHealthyDaemon:!0,scopes:g,eventTypes:h,getSettingsPath:()=>(0,E.resolve)((0,af.P)(),"config.yaml"),getSettingsPaths:()=>(0,af.J)().map(a=>(0,E.resolve)(a.home,"config.yaml")),readSettings:a=>am(a),writeSettings(a,b){an(a,b)},prepareInstall(a){!function(a,b={}){let c=aD();for(let a of aB)if(!(0,D.existsSync)((0,E.resolve)(c,a)))throw Error(`Hermes plugin asset is missing from the failproofai package: ${a}`);let d=aE(a),e=aM(a);if("foreign"===e.kind)throw Error(`Refusing to overwrite an unmanaged Hermes plugin at ${d}. Move it aside or install FailproofAI under a different Hermes profile.`);if("link"===e.kind&&e.current){if(aI(d)!==(0,E.resolve)(e.target))try{aJ(d,e.target)}catch{}return}(0,D.mkdirSync)((0,E.dirname)(d),{recursive:!0});let f=`${process.pid}-${Date.now()}`,g=`${d}.install-${f}`,h=!1;try{(b.symlink??function(a,b){(0,D.symlinkSync)(a,b,"dir")})(c,g),h=!0}catch{(0,D.rmSync)(g,{recursive:!0,force:!0})}if(!h){(0,D.mkdirSync)(g,{recursive:!0});try{for(let a of aB)(0,D.cpSync)((0,E.resolve)(c,a),(0,E.resolve)(g,a));(0,D.writeFileSync)((0,E.resolve)(g,aA),"Managed by failproofai. Remove with `failproofai policies --uninstall --cli hermes`.\n",{encoding:"utf8",mode:384})}catch(a){throw(0,D.rmSync)(g,{recursive:!0,force:!0}),a}}if(h&&("absent"===e.kind||"link"===e.kind))try{return(0,D.renameSync)(g,d),aJ(d,c),"linked"}catch(a){if("link"!==e.kind)throw(0,D.rmSync)(g,{force:!0}),a}let i=`${d}.backup-${f}`,j=!1;try{aF(d)&&((0,D.renameSync)(d,i),j=!0),(0,D.renameSync)(g,d),j&&(0,D.rmSync)(i,{recursive:!0,force:!0}),h?aJ(d,c):aK(d)}catch(a){throw(0,D.rmSync)(g,{recursive:!0,force:!0}),j&&!aF(d)&&aF(i)&&(0,D.renameSync)(i,d),a}}(a)},buildHookEntry:(a,b,c)=>({[B]:!0,_hermesPluginPath:aD()}),isFailproofaiHook:ao,writeHookEntries(a){let b,c,d;aN(a),(d=Array.isArray((c=(b=a.toJS()??{}).plugins&&"object"==typeof b.plugins?b.plugins:{}).enabled)?[...c.enabled]:[]).includes(az)||d.push(az),c.enabled=d,Array.isArray(c.disabled)&&(c.disabled=c.disabled.filter(a=>a!==az),0===c.disabled.length&&delete c.disabled),a.set("plugins",c)},removeHooksFromFile(a){let b,c,d=am(a),e=aN(d),f=(d.toJS()??{}).plugins,g=e>0;if(f&&"object"==typeof f){if(Array.isArray(f.enabled)){let a=f.enabled.length;f.enabled=f.enabled.filter(a=>a!==az),f.enabled.length!==a&&(e+=1,g=!0),0===f.enabled.length&&delete f.enabled}f.entries&&az in f.entries&&(delete f.entries[az],g=!0),0===Object.keys(f).length?d.delete("plugins"):d.set("plugins",f)}return g&&an(a,d),b=aE(a),("link"===(c=aM(a)).kind?((0,D.unlinkSync)(b),aK(b),0):"copy"!==c.kind||((0,D.rmSync)(b,{recursive:!0,force:!0}),0))||(e+=1),e},hooksInstalledInSettings(a,b){let c=ar(this,a,b);return c.length>0&&c.every(a=>(function(a){try{let b,c=aO(a);return c.pluginEnabled&&(b=aM(a),("link"===b.kind||"copy"===b.kind)&&b.complete)&&!c.legacyShellHookPresent}catch{}return!1})(a))},detectInstalled:()=>aq("hermes")},openclaw:{id:"openclaw",displayName:"OpenClaw",scopes:q,eventTypes:r,getSettingsPath:()=>(0,E.resolve)(ah()[0].home,"openclaw.json"),getSettingsPaths:()=>ah().map(a=>(0,E.resolve)(a.home,"openclaw.json")),readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:()=>({[B]:!0,_openclawPluginPath:aQ()}),isFailproofaiHook:a=>"string"==typeof a?aR(a):!!a&&"object"==typeof a&&(!0===a[B]||"string"==typeof a.source&&aR(a.source)),writeHookEntries(a){let b=a.plugins??={},c=b.load??={};Array.isArray(c.paths)||(c.paths=[]);let d=aQ(),e=c.paths.findIndex(a=>aR(a));e>=0?c.paths[e]=d:c.paths.push(d);let f=b.entries??={},g=f[aP]??={};g.enabled=!0,(g.hooks??={}).allowConversationAccess=!0},removeHooksFromFile(a){if(!(0,D.existsSync)(a))return 0;let b=this.readSettings(a),c=b.plugins;if(!c)return 0;let d=0;if(Array.isArray(c.load?.paths)){let a=c.load.paths.length;c.load.paths=c.load.paths.filter(a=>!aR(a)),d+=a-c.load.paths.length,0===c.load.paths.length&&delete c.load.paths,c.load&&0===Object.keys(c.load).length&&delete c.load}return c.entries&&aP in c.entries&&(delete c.entries[aP],d+=1,0===Object.keys(c.entries).length&&delete c.entries),0===Object.keys(c).length&&delete b.plugins,this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let c=ar(this,a,b);return c.length>0&&c.every(a=>{if(!(0,D.existsSync)(a))return!1;try{let b=this.readSettings(a),c=b.plugins?.load?.paths,d=Array.isArray(c)&&c.some(a=>aR(a)),e=b.plugins?.entries?.[aP]?.enabled===!0;return d&&e}catch{return!1}})},detectInstalled:()=>aq("openclaw")},factory:{id:"factory",displayName:"Factory Droid",scopes:s,eventTypes:t,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".factory","hooks.json");case"project":case"local":return(0,E.resolve)(c,".factory","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli factory`:`"${a}" --hook ${b} --cli factory`,timeout:30,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of t){let e=this.buildHookEntry(b,d,c);Array.isArray(a[d])||(a[d]=[]);let f=a[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,g=!0;break}}if(!g){let a="PreToolUse"===d||"PostToolUse"===d;f.push(a?{matcher:"*",hooks:[e]}:{hooks:[e]})}}},removeHooksFromFile(a){let b=this.readSettings(a),c=0;for(let a of Object.keys(b)){let d=b[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b[a]}}return this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("droid")},devin:{id:"devin",displayName:"Devin CLI",scopes:u,eventTypes:v,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".config","devin","config.json");case"project":case"local":return(0,E.resolve)(c,".devin","config.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli devin`:`"${a}" --hook ${b} --cli devin`,timeout:60,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),v)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!ao(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("devin")},antigravity:{id:"antigravity",displayName:"Antigravity CLI",scopes:w,eventTypes:x,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".gemini","config","hooks.json");case"project":case"local":return(0,E.resolve)(c,".agents","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli antigravity`:`"${a}" --hook ${b} --cli antigravity`,timeout:30,[B]:!0}),isFailproofaiHook:ao,writeHookEntries(a,b,c){a[aS]&&"object"==typeof a[aS]||(a[aS]={});let d=a[aS];for(let a of x){let e=this.buildHookEntry(b,a,c);if(aT.has(a)){Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=!1;for(let a of b){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>ao(a));if(b>=0){a.hooks[b]=e,c=!0;break}}c||b.push({matcher:"*",hooks:[e]})}else{Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=b.findIndex(a=>ao(a));c>=0?b[c]=e:b.push(e)}}},removeHooksFromFile(a){let b=this.readSettings(a),c=b[aS];if(!c||"object"!=typeof c)return this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(c)){let b=c[a];if(Array.isArray(b))if(aT.has(a)){for(let a=b.length-1;a>=0;a--){let c=b[a];if(!c||!c.hooks)continue;let e=c.hooks.length;c.hooks=c.hooks.filter(a=>!ao(a)),d+=e-c.hooks.length,0===c.hooks.length&&b.splice(a,1)}0===b.length&&delete c[a]}else{let e=b.length,f=b.filter(a=>!ao(a));d+=e-f.length,0===f.length?delete c[a]:c[a]=f}}return 0===Object.keys(c).length&&delete b[aS],this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c)[aS];if(!a||"object"!=typeof a)return!1;for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(ao(a)||a&&Array.isArray(a.hooks)&&a.hooks.some(a=>ao(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("agy")},goose:{id:"goose",displayName:"Goose",scopes:y,eventTypes:z,getSettingsPath(a,b){let c=b?(0,E.resolve)(b):process.cwd();switch(a){case"user":return(0,E.resolve)((0,G.homedir)(),".agents","plugins","failproofai","hooks","hooks.json");case"project":case"local":return(0,E.resolve)(c,".agents","plugins","failproofai","hooks","hooks.json")}},readSettings:a=>ak(a),writeSettings(a,b){al(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:"project"===c?`npx -y failproofai --hook ${b} --cli goose`:`"${a}" --hook ${b} --cli goose`}),isFailproofaiHook:aU,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),z)){let e=this.buildHookEntry(b,d,c);Array.isArray(a.hooks[d])||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>aU(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!aU(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let c=this.getSettingsPath(a,b);if(!(0,D.existsSync)(c))return!1;try{let a=this.readSettings(c);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>aU(a)))return!0}}catch{}return!1},detectInstalled:()=>aq("goose")}};a.s(["p",0,as,"D",0,function(a){return e.map(b=>{let c=at.buildHookEntry(a,b,"user");return{event:f[b],command:c.command,timeout:c.timeout}})},"w",0,function(){return c.filter(a=>aV[a]?.detectInstalled())},"B",0,function(a){let b=aV[a];if(!b)throw Error(`"${a}" is audit-only — live-hook install is not supported for it yet. Installable: ${c.filter(a=>void 0!==aV[a]).join(", ")}`);return b},"d",0,function(){return(0,af.J)().map(a=>{let b=(0,E.resolve)(a.home,"config.yaml"),c=aO(b),d=aM(b),e=("link"===d.kind||"copy"===d.kind)&&d.complete,f=e&&c.pluginEnabled;return{name:a.name,home:a.home,settingsPath:b,pluginInstalled:e,pluginMode:"link"===d.kind||"copy"===d.kind?d.kind:null,pluginEnabled:c.pluginEnabled,pluginDisabled:c.pluginDisabled,legacyShellHookPresent:c.legacyShellHookPresent,cronUnchecked:c.legacyShellHookPresent&&!f,configUnreadable:!0===c.unreadable,pluginForeign:"foreign"===d.kind,healthy:f&&!c.legacyShellHookPresent&&!0!==c.unreadable}})},"u",0,function(){return c.map(a=>aV[a]).filter(a=>void 0!==a)},"r",0,ar],67121)}]})();
233
+ `),{symlinks:"replace"}),Array.isArray(a.plugin)||(a.plugin=[]);let l="user"===i?`file://${k}`:$,n=a.plugin.findIndex(a=>this.isFailproofaiHook(a));n>=0?a.plugin[n]=l:a.plugin.push(l)},removeHooksFromFile(a){let b=0,d=this.readSettings(a);if(Array.isArray(d.plugin)){let a=d.plugin.length;d.plugin=d.plugin.filter(a=>!this.isFailproofaiHook(a)),b+=a-d.plugin.length,0===d.plugin.length&&delete d.plugin}this.writeSettings(a,d);let e=_(a);if((0,c.existsSync)(e))try{(0,c.readFileSync)(e,"utf8").includes(m.Z)&&((0,c.unlinkSync)(e),0===b&&(b=1))}catch{}return b},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!Array.isArray(a.plugin)||!a.plugin.some(a=>this.isFailproofaiHook(a)))return!1;let b=_(d);if(!(0,c.existsSync)(b))return!1;return(0,c.readFileSync)(b,"utf8").includes(m.Z)}catch{return!1}},detectInstalled:()=>T("opencode")};function ab(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"pi-extension"):(0,d.resolve)((0,e.fileURLToPath)(K.url),"..","..","..","pi-extension")}function ac(a){return"string"==typeof a&&(!!/(?:^|\/)pi-extension\/?$/.test(a)||a.includes("pi-extension")&&a.includes("failproofai"))}let ad={id:"pi",displayName:"Pi",scopes:m.G,eventTypes:m.J,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".pi","agent","settings.json");case"project":case"local":return(0,d.resolve)(c,".pi","settings.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_piPackagePath:ab(),_piScope:c}),isFailproofaiHook:a=>"string"==typeof a?ac(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ac(a.source)),writeHookEntries(a,b,c){var e;let f,g,h;Array.isArray(a.packages)||(a.packages=[]);let i=ab(),j="project"===c?(e=i,f=process.cwd(),g=(0,d.resolve)(f),(h=(0,d.resolve)(e)).startsWith(g+"/")||h===g?"../"+h.slice(g.length+1):h):i,k=a.packages.findIndex(a=>ac(a));k>=0?a.packages[k]=j:a.packages.push(j)},removeHooksFromFile(a){if(!(0,c.existsSync)(a))return 0;let b=this.readSettings(a);if(!Array.isArray(b.packages))return 0;let d=b.packages.length;b.packages=b.packages.filter(a=>!ac(a));let e=d-b.packages.length;return 0===b.packages.length&&delete b.packages,this.writeSettings(a,b),e},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!Array.isArray(a.packages))return!1;return a.packages.some(a=>ac(a))}catch{return!1}},detectInstalled:()=>T("pi")},ae="failproofai",af=".failproofai-managed",ag=["plugin.yaml","__init__.py","client.py","ledger.py"],ah="hermes-plugin";function ai(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,ah):function(a){let b=(0,d.resolve)(a);for(let a=0;a<8;a++){let a=(0,d.resolve)(b,ah);if((0,c.existsSync)((0,d.resolve)(a,"plugin.yaml")))return a;let e=(0,d.dirname)(b);if(e===b)break;b=e}return(0,d.resolve)(a,"..","..",ah)}((0,d.dirname)((0,e.fileURLToPath)(K.url)))}function aj(a){return(0,d.resolve)((0,d.dirname)(a),"plugins",ae)}function ak(a){try{return(0,c.lstatSync)(a),!0}catch{return!1}}function al(a){return ag.every(b=>(0,c.existsSync)((0,d.resolve)(a,b)))}function am(a){return(0,d.resolve)((0,d.dirname)(a),".failproofai-link")}function an(a){try{let b=(0,c.readFileSync)(am(a),"utf8").trim();return""===b?null:(0,d.resolve)(b)}catch{return null}}function ao(a,b){j(am(a),(0,d.resolve)(b)+"\n",{backup:!1,symlinks:"replace"})}function ap(a){(0,c.rmSync)(am(a),{force:!0})}function aq(a,b){if((0,d.resolve)(a)===(0,d.resolve)(b))return!0;try{return(0,c.realpathSync)(a)===(0,c.realpathSync)(b)}catch{return!1}}function ar(a){let b,e,f=aj(a);try{let a=(0,c.lstatSync)(f);b=a.isSymbolicLink(),e=a.isDirectory()}catch{return{kind:"absent"}}if(b){let a;try{a=(0,d.resolve)((0,d.dirname)(f),(0,c.readlinkSync)(f))}catch{return{kind:"foreign"}}return!function(a,b){let e=an(a);if(e&&(0,d.resolve)(b)===e||aq(b,ai()))return!0;let f=(0,d.dirname)((0,d.resolve)(b));if((0,d.basename)((0,d.resolve)(b))!==ah||"failproofai"!==(0,d.basename)(f)||"node_modules"!==(0,d.basename)((0,d.dirname)(f)))return!1;try{let a=JSON.parse((0,c.readFileSync)((0,d.resolve)(f,"package.json"),"utf8"));return"failproofai"===a.name}catch{return!1}}(f,a)?{kind:"foreign"}:{kind:"link",target:a,complete:al(a),current:aq(a,ai())}}return e&&(0,c.existsSync)((0,d.resolve)(f,af))?{kind:"copy",complete:al(f)}:{kind:"foreign"}}function as(a){let b=(a.toJS()??{}).hooks,c=0;if(b&&"object"==typeof b){for(let a of Object.keys(b)){let d=b[a];if(!Array.isArray(d))continue;let e=d.length,f=d.filter(a=>!Q(a));c+=e-f.length,0===f.length?delete b[a]:b[a]=f}0===Object.keys(b).length?(a.delete("hooks"),c>0&&a.delete("hooks_auto_accept")):a.set("hooks",b)}return c}function at(a){if(!(0,c.existsSync)(a))return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1};let b=function(a){try{return O(a)}catch{return null}}(a);if(!b)return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1,unreadable:!0};let d=b.toJS()??{},e=d.plugins?.enabled,f=d.plugins?.disabled,g=!!d.hooks&&"object"==typeof d.hooks&&Object.values(d.hooks).some(a=>Array.isArray(a)&&a.some(a=>Q(a))),h=Array.isArray(e)&&e.includes(ae),i=Array.isArray(f)&&f.includes(ae);return{pluginEnabled:h&&!i,pluginListed:h,pluginDisabled:i,legacyShellHookPresent:g}}let au={id:"hermes",displayName:"Hermes",requiresHealthyDaemon:!0,scopes:m.M,eventTypes:m.y,getSettingsPath:()=>(0,d.resolve)((0,H.P)(),"config.yaml"),getSettingsPaths:()=>(0,H.J)().map(a=>(0,d.resolve)(a.home,"config.yaml")),readSettings:a=>O(a),writeSettings(a,b){P(a,b)},prepareInstall(a){!function(a,b={}){let e=ai();for(let a of ag)if(!(0,c.existsSync)((0,d.resolve)(e,a)))throw Error(`Hermes plugin asset is missing from the failproofai package: ${a}`);let f=aj(a),g=ar(a);if("foreign"===g.kind)throw Error(`Refusing to overwrite an unmanaged Hermes plugin at ${f}. Move it aside or install FailproofAI under a different Hermes profile.`);if("link"===g.kind&&g.current){if(an(f)!==(0,d.resolve)(g.target))try{ao(f,g.target)}catch{}return}(0,c.mkdirSync)((0,d.dirname)(f),{recursive:!0});let h=`${process.pid}-${Date.now()}`,i=`${f}.install-${h}`,j=!1;try{(b.symlink??function(a,b){(0,c.symlinkSync)(a,b,"dir")})(e,i),j=!0}catch{(0,c.rmSync)(i,{recursive:!0,force:!0})}if(!j){(0,c.mkdirSync)(i,{recursive:!0});try{for(let a of ag)(0,c.cpSync)((0,d.resolve)(e,a),(0,d.resolve)(i,a));(0,c.writeFileSync)((0,d.resolve)(i,af),"Managed by failproofai. Remove with `failproofai policies --uninstall --cli hermes`.\n",{encoding:"utf8",mode:384})}catch(a){throw(0,c.rmSync)(i,{recursive:!0,force:!0}),a}}if(j&&("absent"===g.kind||"link"===g.kind))try{return(0,c.renameSync)(i,f),ao(f,e),"linked"}catch(a){if("link"!==g.kind)throw(0,c.rmSync)(i,{force:!0}),a}let k=`${f}.backup-${h}`,l=!1;try{ak(f)&&((0,c.renameSync)(f,k),l=!0),(0,c.renameSync)(i,f),l&&(0,c.rmSync)(k,{recursive:!0,force:!0}),j?ao(f,e):ap(f)}catch(a){throw(0,c.rmSync)(i,{recursive:!0,force:!0}),l&&!ak(f)&&ak(k)&&(0,c.renameSync)(k,f),a}}(a)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_hermesPluginPath:ai()}),isFailproofaiHook:Q,writeHookEntries(a){let b,c,d;as(a),(d=Array.isArray((c=(b=a.toJS()??{}).plugins&&"object"==typeof b.plugins?b.plugins:{}).enabled)?[...c.enabled]:[]).includes(ae)||d.push(ae),c.enabled=d,Array.isArray(c.disabled)&&(c.disabled=c.disabled.filter(a=>a!==ae),0===c.disabled.length&&delete c.disabled),a.set("plugins",c)},removeHooksFromFile(a){let b,d,e=O(a),f=as(e),g=(e.toJS()??{}).plugins,h=f>0;if(g&&"object"==typeof g){if(Array.isArray(g.enabled)){let a=g.enabled.length;g.enabled=g.enabled.filter(a=>a!==ae),g.enabled.length!==a&&(f+=1,h=!0),0===g.enabled.length&&delete g.enabled}g.entries&&ae in g.entries&&(delete g.entries[ae],h=!0),0===Object.keys(g).length?e.delete("plugins"):e.set("plugins",g)}return h&&P(a,e),b=aj(a),("link"===(d=ar(a)).kind?((0,c.unlinkSync)(b),ap(b),0):"copy"!==d.kind||((0,c.rmSync)(b,{recursive:!0,force:!0}),0))||(f+=1),f},hooksInstalledInSettings(a,b){let c=U(this,a,b);return c.length>0&&c.every(a=>(function(a){try{let b,c=at(a);return c.pluginEnabled&&(b=ar(a),("link"===b.kind||"copy"===b.kind)&&b.complete)&&!c.legacyShellHookPresent}catch{}return!1})(a))},detectInstalled:()=>T("hermes")},av="failproofai";function aw(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"openclaw-plugin"):(0,d.resolve)((0,e.fileURLToPath)(K.url),"..","..","..","openclaw-plugin")}function ax(a){return"string"==typeof a&&(/(?:^|\/)openclaw-plugin\/?$/.test(a)||a.includes("openclaw-plugin")&&a.includes("failproofai"))}let ay={id:"openclaw",displayName:"OpenClaw",scopes:m.E,eventTypes:m.P,getSettingsPath:()=>(0,d.resolve)(J()[0].home,"openclaw.json"),getSettingsPaths:()=>J().map(a=>(0,d.resolve)(a.home,"openclaw.json")),readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:()=>({[m.Z]:!0,_openclawPluginPath:aw()}),isFailproofaiHook:a=>"string"==typeof a?ax(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ax(a.source)),writeHookEntries(a){let b=a.plugins??={},c=b.load??={};Array.isArray(c.paths)||(c.paths=[]);let d=aw(),e=c.paths.findIndex(a=>ax(a));e>=0?c.paths[e]=d:c.paths.push(d);let f=b.entries??={},g=f[av]??={};g.enabled=!0,(g.hooks??={}).allowConversationAccess=!0},removeHooksFromFile(a){if(!(0,c.existsSync)(a))return 0;let b=this.readSettings(a),d=b.plugins;if(!d)return 0;let e=0;if(Array.isArray(d.load?.paths)){let a=d.load.paths.length;d.load.paths=d.load.paths.filter(a=>!ax(a)),e+=a-d.load.paths.length,0===d.load.paths.length&&delete d.load.paths,d.load&&0===Object.keys(d.load).length&&delete d.load}return d.entries&&av in d.entries&&(delete d.entries[av],e+=1,0===Object.keys(d.entries).length&&delete d.entries),0===Object.keys(d).length&&delete b.plugins,this.writeSettings(a,b),e},hooksInstalledInSettings(a,b){let d=U(this,a,b);return d.length>0&&d.every(a=>{if(!(0,c.existsSync)(a))return!1;try{let b=this.readSettings(a),c=b.plugins?.load?.paths,d=Array.isArray(c)&&c.some(a=>ax(a)),e=b.plugins?.entries?.[av]?.enabled===!0;return d&&e}catch{return!1}})},detectInstalled:()=>T("openclaw")},az={id:"factory",displayName:"Factory Droid",scopes:m.B,eventTypes:m.n,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".factory","hooks.json");case"project":case"local":return(0,d.resolve)(c,".factory","hooks.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli factory`:`"${a}" --hook ${b} --cli factory`)+R(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:Q,writeHookEntries(a,b,c){for(let d of m.n){let e=this.buildHookEntry(b,d,c);Array.isArray(a[d])||(a[d]=[]);let f=a[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>Q(a));if(b>=0){a.hooks[b]=e,g=!0;break}}if(!g){let a="PreToolUse"===d||"PostToolUse"===d;f.push(a?{matcher:"*",hooks:[e]}:{hooks:[e]})}}},removeHooksFromFile(a){let b=this.readSettings(a),c=0;for(let a of Object.keys(b)){let d=b[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!Q(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b[a]}}return this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>Q(a)))return!0}}catch{}return!1},detectInstalled:()=>T("droid")},aA={id:"devin",displayName:"Devin CLI",scopes:m.c,eventTypes:m.D,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".config","devin","config.json");case"project":case"local":return(0,d.resolve)(c,".devin","config.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli devin`:`"${a}" --hook ${b} --cli devin`)+R(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:Q,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),m.D)){let e=this.buildHookEntry(b,d,c);a.hooks[d]||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>Q(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!Q(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a.hooks&&a.hooks.some(a=>Q(a)))return!0}}catch{}return!1},detectInstalled:()=>T("devin")},aB="failproofai",aC=new Set(["PreToolUse","PostToolUse"]);function aD(a){if(!a||"object"!=typeof a)return!1;let b=a.command;return"string"==typeof b&&b.includes("failproofai")&&b.includes("--cli goose")}let aE={claude:V,codex:W,copilot:Y,cursor:Z,opencode:aa,pi:ad,hermes:au,openclaw:ay,factory:az,devin:aA,antigravity:{id:"antigravity",displayName:"Antigravity CLI",scopes:m.m,eventTypes:m.X,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".gemini","config","hooks.json");case"project":case"local":return(0,d.resolve)(c,".agents","hooks.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli antigravity`:`"${a}" --hook ${b} --cli antigravity`)+R(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:Q,writeHookEntries(a,b,c){a[aB]&&"object"==typeof a[aB]||(a[aB]={});let d=a[aB];for(let a of m.X){let e=this.buildHookEntry(b,a,c);if(aC.has(a)){Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=!1;for(let a of b){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>Q(a));if(b>=0){a.hooks[b]=e,c=!0;break}}c||b.push({matcher:"*",hooks:[e]})}else{Array.isArray(d[a])||(d[a]=[]);let b=d[a],c=b.findIndex(a=>Q(a));c>=0?b[c]=e:b.push(e)}}},removeHooksFromFile(a){let b=this.readSettings(a),c=b[aB];if(!c||"object"!=typeof c)return this.writeSettings(a,b),0;let d=0;for(let a of Object.keys(c)){let b=c[a];if(Array.isArray(b))if(aC.has(a)){for(let a=b.length-1;a>=0;a--){let c=b[a];if(!c||!c.hooks)continue;let e=c.hooks.length;c.hooks=c.hooks.filter(a=>!Q(a)),d+=e-c.hooks.length,0===c.hooks.length&&b.splice(a,1)}0===b.length&&delete c[a]}else{let e=b.length,f=b.filter(a=>!Q(a));d+=e-f.length,0===f.length?delete c[a]:c[a]=f}}return 0===Object.keys(c).length&&delete b[aB],this.writeSettings(a,b),d},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d)[aB];if(!a||"object"!=typeof a)return!1;for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(Q(a)||a&&Array.isArray(a.hooks)&&a.hooks.some(a=>Q(a)))return!0}}catch{}return!1},detectInstalled:()=>T("agy")},goose:{id:"goose",displayName:"Goose",scopes:m.x,eventTypes:m.i,getSettingsPath(a,b){let c=b?(0,d.resolve)(b):process.cwd();switch(a){case"user":return(0,d.resolve)((0,f.homedir)(),".agents","plugins","failproofai","hooks","hooks.json");case"project":case"local":return(0,d.resolve)(c,".agents","plugins","failproofai","hooks","hooks.json")}},readSettings:a=>M(a),writeSettings(a,b){N(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli goose`:`"${a}" --hook ${b} --cli goose`)+R(c)}),isFailproofaiHook:aD,writeHookEntries(a,b,c){for(let d of(a.hooks||(a.hooks={}),m.i)){let e=this.buildHookEntry(b,d,c);Array.isArray(a.hooks[d])||(a.hooks[d]=[]);let f=a.hooks[d],g=!1;for(let a of f){if(!a.hooks)continue;let b=a.hooks.findIndex(a=>aD(a));if(b>=0){a.hooks[b]=e,g=!0;break}}g||f.push({hooks:[e]})}},removeHooksFromFile(a){let b=this.readSettings(a);if(!b.hooks)return 0;let c=0;for(let a of Object.keys(b.hooks)){let d=b.hooks[a];if(Array.isArray(d)){for(let a=d.length-1;a>=0;a--){let b=d[a];if(!b||!b.hooks)continue;let e=b.hooks.length;b.hooks=b.hooks.filter(a=>!aD(a)),c+=e-b.hooks.length,0===b.hooks.length&&d.splice(a,1)}0===d.length&&delete b.hooks[a]}}return 0===Object.keys(b.hooks).length&&delete b.hooks,this.writeSettings(a,b),c},hooksInstalledInSettings(a,b){let d=this.getSettingsPath(a,b);if(!(0,c.existsSync)(d))return!1;try{let a=this.readSettings(d);if(!a.hooks)return!1;for(let b of Object.values(a.hooks))if(Array.isArray(b)){for(let a of b)if(a&&a.hooks&&a.hooks.some(a=>aD(a)))return!0}}catch{}return!1},detectInstalled:()=>T("goose")}};a.s(["p",0,V,"D",0,function(a){return m.W.map(b=>{let c=W.buildHookEntry(a,b,"user");return{event:m.p[b],command:c.command,timeout:c.timeout}})},"w",0,function(){return m.z.filter(a=>aE[a]?.detectInstalled())},"B",0,function(a){let b=aE[a];if(!b)throw Error(`"${a}" is audit-only — live-hook install is not supported for it yet. Installable: ${m.z.filter(a=>void 0!==aE[a]).join(", ")}`);return b},"d",0,function(){return(0,H.J)().map(a=>{let b=(0,d.resolve)(a.home,"config.yaml"),c=at(b),e=ar(b),f=("link"===e.kind||"copy"===e.kind)&&e.complete,g=f&&c.pluginEnabled;return{name:a.name,home:a.home,settingsPath:b,pluginInstalled:f,pluginMode:"link"===e.kind||"copy"===e.kind?e.kind:null,pluginEnabled:c.pluginEnabled,pluginDisabled:c.pluginDisabled,legacyShellHookPresent:c.legacyShellHookPresent,cronUnchecked:c.legacyShellHookPresent&&!g,configUnreadable:!0===c.unreadable,pluginForeign:"foreign"===e.kind,healthy:g&&!c.legacyShellHookPresent&&!0!==c.unreadable}})},"u",0,function(){return m.z.map(a=>aE[a]).filter(a=>void 0!==a)},"r",0,U],67121)},17280,a=>{var b=a.i(66680),c=a.i(2157),d=a.i(50227),e=a.i(9909),f=a.i(86304);let g="failproofai-pack.json",h="failproofai-pack.mjs",i="SHA256SUMS";function j(){return(process.env.FAILPROOFAI_PACK_BASE_URL||"https://github.com").replace(/\/+$/,"")}let k=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,l=/^[A-Za-z0-9][A-Za-z0-9._/-]{0,127}$/,m="FailproofAI/policies",n=new Set(["core","failproofai","official"]);function o(a){let b=a.trim();if(0===b.length)throw Error("pack source is empty");let c=b.match(/^(?:https?:\/\/)?(?:www\.)?github\.com\/(.+)$/i);if(c){let[a,b,...d]=c[1].replace(/\/+$/,"").split("/"),e=null;if("releases"===d[0]&&("tag"===d[1]||"download"===d[1])){let a=d.slice(2);e=("download"===d[1]?a.slice(0,-1):a).join("/")||null}else"releases"===d[0]&&"latest"===d[1]&&(e=null);return p(a,b,e)}let d=b.replace(/^github:/i,""),e=d.lastIndexOf("@"),f=e>0?d.slice(0,e):d,g=e>0?d.slice(e+1):null,h=f.indexOf("/");if(h<=0||h===f.length-1){if(n.has(f.trim().toLowerCase()))throw Error(`${JSON.stringify(a)} is no longer a pack name — ours is a pack like anyone else's now. Use ${m} instead.`);throw Error(`pack source must be owner/repo, owner/repo@tag, or a github.com URL — got ${JSON.stringify(a)}`)}return p(f.slice(0,h),f.slice(h+1),g)}function p(a,b,c){if(!a||!k.test(a))throw Error(`unsafe owner ${JSON.stringify(a)}`);if(!b||!k.test(b))throw Error(`unsafe repo ${JSON.stringify(b)}`);if(null!==c&&!l.test(c))throw Error(`unsafe tag ${JSON.stringify(c)}`);return{owner:a,repo:b,tag:c}}async function q(a){let b=`${j()}/${a.owner}/${a.repo}/releases/latest`,c=await fetch(b,{signal:AbortSignal.timeout(3e4),redirect:"manual"}),d=c.headers.get("location");if(!d)throw Error(`could not resolve the newest release of ${a.owner}/${a.repo} (GET ${b} returned ${c.status} with no redirect). That redirect is issued only for a published, non-prerelease release, so either the repository has no releases at all or every release it has is a prerelease or a draft. Name a tag explicitly.`);let e=d.match(/\/releases\/tag\/(.+)$/);if(!e)throw Error(`unexpected redirect from ${b}: ${d}`);let f=decodeURIComponent(e[1]).replace(/\/+$/,"");if(!l.test(f))throw Error(`unsafe tag ${JSON.stringify(f)} from ${b}`);return f}async function r(b,c){let d,e=c.toLowerCase(),f=`${(process.env.FAILPROOFAI_GITHUB_API??"https://api.github.com").replace(/\/+$/,"")}/repos/${b.owner}/${b.repo}/releases?per_page=100`;try{let a=(process.env.GITHUB_TOKEN||process.env.GH_TOKEN||"").trim(),b=await fetch(f,{headers:{...a?{Authorization:`Bearer ${a}`}:{},Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28","User-Agent":"failproofai"},signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${f} returned ${b.status}`);d=await b.json()}catch(a){throw Error(`could not resolve commit ${c} in ${b.owner}/${b.repo}: ${L(a)}. Name the release tag instead if you know it.`)}let{parseReleaseBody:g}=await a.A(49679),h=Array.isArray(d)?d:[],i=[];for(let a of h){let b="string"==typeof a.tag_name?a.tag_name:"";if(!b||!l.test(b))continue;let c=g("string"==typeof a.body?a.body:"");c.commit&&c.commit.startsWith(e)&&i.push({tag:b,commit:c.commit})}if(i.length>1)throw Error(`commit ${c} matches ${i.length} releases of ${b.owner}/${b.repo}: `+i.map(a=>`${a.tag} (${a.commit})`).join(", ")+". Name one of those tags, or type more of the commit.");return 1===i.length?i[0].tag:null}async function s(a){return null===a.tag?q(a):e.r.test(a.tag)?await r(a,a.tag)??a.tag:a.tag}function t(a){return`github:${a.owner}/${a.repo}@${a.tag}`}function u(a,b){return`${j()}/${a.owner}/${a.repo}/releases/download/${a.tag}/${b}`}async function v(a){let b=await fetch(a,{signal:AbortSignal.timeout(3e4),redirect:"follow"});if(!b.ok)throw Error(`GET ${a} returned ${b.status}`);let c=b.headers.get("content-length");if(null!==c){let d=Number(c);if(Number.isFinite(d)&&d>8388608)throw await b.body?.cancel(),Error(`${a} declares ${d} bytes, over the 8388608 limit`)}if(!b.body)return Buffer.alloc(0);let d=[],e=b.body.getReader(),f=0;try{for(;;){let{done:b,value:c}=await e.read();if(b)break;if((f+=c.byteLength)>8388608)throw await e.cancel(),Error(`${a} is over the 8388608 byte limit`);d.push(Buffer.from(c))}}finally{e.releaseLock()}return Buffer.concat(d,f)}function w(a,b){for(let c of a.split("\n")){let a=c.trim().match(/^([0-9a-f]{64})\s+\*?(.+)$/i);if(a&&a[2].trim()===b)return a[1].toLowerCase()}return null}function x(a){return(0,b.createHash)("sha256").update(a).digest("hex")}function y(a,b){let e=`${a}.${process.pid}.tmp`;try{(0,c.mkdirSync)((0,d.dirname)(a),{recursive:!0}),(0,c.writeFileSync)(e,b),(0,c.renameSync)(e,a)}catch(a){throw(0,c.rmSync)(e,{force:!0}),a}}function z(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} semantic is not an array`);if(b.length>e.P)throw Error(`pack ${a} declares ${b.length} semantic policies, over the cap of ${e.P}`);let c=b.map((b,c)=>(0,e.U)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares semantic policy ${b.name} twice`);d.add(b.name)}return c}function A(a,b){let c=(0,e.T)(a,b);if("too-old"===c.kind)throw Error(c.reason);return"unreadable"===c.kind?{minCliVersionNote:c.reason}:c.declared?{minCliVersion:c.declared}:{}}async function B(a,b={}){let c=await I(a,b);return{id:c.id,version:c.version,enabled:c.enabled,available:c.available,bundled:!1,source:c.source,tag:c.tag,resolvedFromLatest:c.resolvedFromLatest,selection:c.selection,categories:c.categories}}async function C(a){let b;if("1"===process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("FAILPROOFAI_NO_DOWNLOAD is set, so nothing can be fetched to preview");let c=o(a),d=null===c.tag,f={...c,tag:await s(c)},h=(await v(u(f,i))).toString("utf8"),j=await v(u(f,g)),k=w(h,g);if(!k)throw Error(`${i} has no entry for ${g}`);if(x(j)!==k)throw Error(`${g} failed integrity verification`);try{b=JSON.parse(j.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let l=b,m=(0,e.$)(l),n=A(m.id,l.minCliVersion),p=z(m.id,l.semantic),q=D(m.id,l.policies);return E(q,p),{id:m.id,version:m.version,effect:m.effect,...m.commit?{commit:m.commit}:{},policies:q,semantic:p,...n,source:t(f),resolvedFromLatest:d}}function D(a,b){if(void 0===b)return[];if(!Array.isArray(b))throw Error(`pack ${a} policies is not an array`);let c=b.map((b,c)=>(0,e.Z)(a,b,c)),d=new Set;for(let b of c){if(d.has(b.name))throw Error(`pack ${a} declares ${b.name} twice`);d.add(b.name)}return c}function E(a,b){if(0===a.length&&0===b.length)throw Error("pack manifest declares no policies")}async function F(a){let b,c=(await v(u(a,i))).toString("utf8"),d=await v(u(a,g)),f=w(c,g);if(!f)throw Error(`${i} has no entry for ${g}`);if(x(d)!==f)throw Error(`${g} failed integrity verification`);let j=await v(u(a,h)),k=w(c,h);if(!k)throw Error(`${i} has no entry for ${h}`);let l=x(j);if(l!==k)throw Error(`${h} failed integrity verification`);try{b=JSON.parse(d.toString("utf8"))}catch(a){throw Error(`${g} is not valid JSON: ${L(a)}`)}if(!b||"object"!=typeof b)throw Error(`${g} is not an object`);let m=b,n=(0,e.$)(m),o=A(n.id,m.minCliVersion),p=D(n.id,m.policies),q=z(n.id,m.semantic);return E(p,q),{id:n.id,version:n.version,policies:p,semantic:q,...o,...void 0!==m.effect?{effect:n.effect}:{},...n.commit?{commit:n.commit}:{},artifact:j,artifactDigest:l}}function G(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}async function H(b,c){let d,{loadCustomHooks:e}=await a.A(6188);try{d=(await e(b,{strict:!0})).map(a=>a.name)}catch(a){throw Error(`its artifact could not be loaded: ${a instanceof Error?a.message:String(a)}`)}let f=c.filter(a=>!d.includes(a)),g=d.filter(a=>!c.includes(a));if(f.length>0)throw Error(`its manifest declares ${f.join(", ")} but the artifact does not register ${1===f.length?"it":"them"} — that would install as protection that never runs`);if(g.length>0)throw Error(`its artifact registers undeclared ${g.join(", ")} — a policy that enforces but appears in no listing cannot be reviewed or switched off`)}async function I(a,b){var g,h,i,j;let k,l;if(process.env.FAILPROOFAI_NO_DOWNLOAD)throw Error("pack downloads are disabled (FAILPROOFAI_NO_DOWNLOAD). Already-installed packs keep enforcing.");let m=o(a),n={...m,tag:await s(m)},p=null===m.tag,q=await F(n);if(g=n.tag,h=q.version,(k=g.slice(g.lastIndexOf("/")+1))!==h&&k!==`v${h}`){let a=n.tag.slice(n.tag.lastIndexOf("/")+1).replace(/^v/,""),b=`re-tag the release ${q.version} (a leading v is fine), or rebuild the pack with --version ${a}`;throw Error(`${q.id} was not installed: release tag ${n.tag} does not match the version its manifest declares (${q.version}). `+(p?`That is the newest release of ${n.owner}/${n.repo}, so the release and the pack disagree at the source — ask the publisher to ${b}.`:`Name the tag whose manifest says ${q.version}, or fix the pack: ${b}.`))}if(/^failproofai\//i.test(q.id)&&!(0,f.g)({source:t(n)}))throw Error(`${q.id} was not installed: the FailproofAI/ namespace is reserved for releases from github.com/FailproofAI, and this one came from ${n.owner}/${n.repo}.`);let r=q.policies.map(a=>a.name),u=(i=q.id,j=q.artifactDigest,(l=(0,e.V)().packs).find(a=>a.id===i)??l.find(a=>a.sha256===j)),{enabled:v,reason:w}=function(a,b,c,d){let e=a.map(a=>a.name);if(b?.all)return{enabled:null,reason:"all"};let f=new Set;if(b?.categories?.length){let c=new Set(b.categories.map(G)),d=new Map(a.map(a=>[G(a.category),a.category])),e=[...c].filter(a=>!d.has(a));if(e.length>0)throw Error(`no such categor${1===e.length?"y":"ies"}: ${e.join(", ")} (has: ${[...new Set(a.map(a=>G(a.category)))].join(", ")})`);for(let b of a)c.has(G(b.category))&&f.add(b.name)}if(b?.only?.length){let a=b.only.filter(a=>!e.includes(a));if(a.length>0)throw Error(`pack does not contain ${a.join(", ")}`);for(let a of b.only)f.add(a)}if(b?.only!==void 0||b?.categories?.length){if(b.merge&&d){if(null===c)return{enabled:null,reason:"carried"};for(let a of c??[])f.add(a);return{enabled:e.filter(a=>f.has(a)),reason:"added"}}return{enabled:e.filter(a=>f.has(a)),reason:"selected"}}return d?{enabled:null===c?null:c??null,reason:"carried"}:{enabled:a.filter(a=>a.defaultEnabled).map(a=>a.name),reason:"defaults"}}(q.policies,b,u?.enabled?u.enabled.filter(a=>r.includes(a)):u?.enabled,!!u),x=(0,e.N)(),z=`artifacts/${q.artifactDigest}.mjs`,A=(0,d.resolve)(x,z);(0,c.existsSync)(A)||y(A,q.artifact);try{await H(A,r)}catch(a){throw Error(`${q.id}@${q.version} was not installed: ${a instanceof Error?a.message:String(a)}`)}let B=a=>{let b=a.lastIndexOf("@");return b>a.indexOf(":")?a.slice(0,b):a};if(u&&u.id===q.id&&!u.source.startsWith("bundled:")&&B(u.source)!==B(t(n)))throw Error(`pack id ${q.id} is already installed from ${u.source}. Refusing to replace it with ${t(n)} — remove it first if that is what you mean.`);let C={id:q.id,version:q.version,source:t(n),entry:z,sha256:q.artifactDigest,policies:q.policies,...q.semantic.length>0?{semantic:q.semantic}:{},...q.minCliVersion?{minCliVersion:q.minCliVersion}:{},...q.commit?{commit:q.commit}:{},...q.effect?{effect:q.effect}:{},...v?{enabled:v}:{},...b?.clis?{clis:b.clis}:b?.merge!==!1&&u?.clis?{clis:u.clis}:{}};return{replaced:function(a,b=!0){let f=(0,d.resolve)((0,e.N)(),"installed.json"),g=[];if((0,c.existsSync)(f))try{let a=JSON.parse((0,c.readFileSync)(f,"utf8"));Array.isArray(a.packs)&&(g=a.packs)}catch{throw Error(`existing pack manifest at ${f} is unreadable; move it aside and re-add`)}let h=g.filter(b=>b?.sha256===a.sha256&&b?.id!==a.id).map(a=>a.id);if(b&&!a.enabled){let b=g.find(a=>h.includes(a?.id)),c=b?.enabled?.filter(b=>a.policies?.some(a=>a?.name===b));c&&c.length>0&&(a.enabled=c)}let i=g.filter(a=>!h.includes(a?.id)),j=i.findIndex(b=>b?.id===a.id);return j>=0?i[j]=a:i.push(a),y(f,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),h}(C,"all"!==w),id:q.id,version:q.version,source:C.source,tag:n.tag,resolvedFromLatest:p,enabled:v??r,available:r,selection:w,categories:[...new Set(q.policies.map(a=>G(a.category)))],semantic:q.semantic.length,...q.minCliVersionNote?{minCliVersionNote:q.minCliVersionNote}:{},...q.effect?{effect:q.effect}:{},...C.clis?{clis:C.clis}:{},artifact:A}}function J(a){let b=a.trim(),c=b.lastIndexOf("@");return(c>0?b.slice(0,c):b).trim()}class K extends Error{candidates;constructor(a,b){super(`${b} matches ${a.length} installed packs: ${a.join(", ")}. Name one of them exactly.`),this.candidates=a,this.name="AmbiguousPackId"}}function L(a){return a instanceof Error?a.message:String(a)}a.s(["w",0,m,"U",0,i,"Z",0,h,"v",0,g,"I",0,I,"z",0,B,"k",0,C,"R",0,function(a){let b,f=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(f))return null;try{b=JSON.parse((0,c.readFileSync)(f,"utf8"))}catch{return null}let g=Array.isArray(b.packs)?b.packs:[],h=g.find(b=>b?.id===J(a)),i=g.filter(b=>{var c;return b?.id&&(c=b.id,J(c).toLowerCase()===J(a).toLowerCase())});if(!h&&i.length>1)throw new K(i.map(a=>a.id).filter(a=>"string"==typeof a),a);let j=h??i[0],k=g.filter(a=>a!==j);return j&&k.length!==g.length?(y(f,JSON.stringify({schemaVersion:1,packs:k},null,2)+"\n"),j.id):null},"g",0,function(a,b,f){let g,h=(0,d.resolve)((0,e.N)(),"installed.json");if(!(0,c.existsSync)(h))return{ok:!1,reason:"no packs are installed"};try{g=JSON.parse((0,c.readFileSync)(h,"utf8"))}catch{return{ok:!1,reason:`pack manifest at ${h} is unreadable`}}let i=Array.isArray(g.packs)?g.packs:[],j=i.find(b=>b?.id===a);if(!j)return{ok:!1,reason:`no installed pack with id ${a}`};let k=(Array.isArray(j.policies)?j.policies:[]).map(a=>"string"==typeof a?.name?a.name:null).filter(a=>null!==a);if(!k.includes(b))return{ok:!1,reason:`pack ${a} declares no policy named ${b}`};let l=j.enabled??k,m=f?[...new Set([...l,b])]:l.filter(a=>a!==b);return j.enabled=k.filter(a=>m.includes(a)),y(h,JSON.stringify({schemaVersion:1,packs:i},null,2)+"\n"),{ok:!0}}])},1459,a=>{var b=a.i(1457),c=a.i(12072);let d={rgb:[102,209,181],c256:79,basic:"36"},e={rgb:[228,88,125],c256:168,basic:"95"},f={rgb:[227,179,65],c256:179,basic:"33"},g={rgb:[107,118,132],basic:"2"},h={rgb:[118,127,139],basic:"2"},i={rgb:[62,67,76],basic:"2"},j={rgb:[240,113,120],c256:203,basic:"31"};function k(a){return!!a.isTTY&&!process.env.NO_COLOR}let l="\x1b[0m";function m(){return/truecolor|24bit/i.test(process.env.COLORTERM||"")?"truecolor":/256color/i.test(process.env.TERM||"")?"ansi256":"basic"}function n(a,b){return"truecolor"===b?`38;2;${a.rgb[0]};${a.rgb[1]};${a.rgb[2]}`:"ansi256"===b&&void 0!==a.c256?`38;5;${a.c256}`:a.basic}let o=["...tt........","..tttt.......",".tttttt..pppp",".tttttt..pppp","..tttt...pppp","...tt....pppp",".........pppp",".........pppp","..pppp...pppp","..pppp...pppp","..pppp...pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp",".pppppp..pppp","..pppp...pppp","..ppppppppppp","..ppppppppppp","..ppppppppppp","..ppppppppppp"];function p(a,b){let c=0,d="",e=0;for(;e<a.length;)if("\x1b"===a[e]&&"["===a[e+1]){let b=e+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;b++,d+=a.slice(e,b),e=b}else{if(c>=b)break;d+=a[e],c++,e++}return d}function q(a,b,c,d={}){let e=a.columns||80,f=d.cut??!0,g=c.map(a=>""!==a&&f?p(a,e):a).join("\n")+"\n",h=b.lastCount>0?`\x1b[${b.lastCount}A\x1b[J`:"";a.write(`\x1b[?2026h${d.lead??""}${h}${g}${d.tail??""}\x1b[?2026l`),b.lastCount=c.length}function r(a){let b=0,c=0;for(;c<a.length;)if("\x1b"===a[c]&&"["===a[c+1]){let b=c+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;c=b+1}else b++,c++;return b}function s(a){let b=[],c="",d=0;for(;d<a.length;)if("\x1b"===a[d]&&"["===a[d+1]){let b=d+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;let e=a.slice(d,b+1);c=/\[0?m$/.test(e)?"":c+e,d=b+1}else b.push({ch:a[d],active:c}),d++;return b}function t(a){let b="",c="";for(let d of a)d.active!==c&&(c&&(b+=l),b+=d.active,c=d.active),b+=d.ch;return c?b+l:b}function u(a,b,c="left"){let d=Math.max(0,b-r(a));return"right"===c?" ".repeat(d)+a:a+" ".repeat(d)}Symbol("failproofai.back"),Symbol("failproofai.open-source"),Object.values({on:"✓ ON",off:"· OFF",mixed:"◐ MIXED",locked:"✓ LOCK",cloud:"✓ CLOUD",pack:"✓ PACK",failed:"▲ FAIL",observe:"◉ OBS"}).map(a=>a.length),a.s(["J",0," ","v",0,k,"w",0,function(a=process.stdout){return{cols:a.columns||80,color:k(a)}},"m",0,function(a={}){var k;let v,w,{cols:x,c:y}={cols:Math.max(20,a?.cols??80),c:(v=(k=a?.color??!1)?m():"basic",{bold:a=>k?`\x1b[1m${a}\x1b[0m`:a,dim:(w=(a,b=!1)=>c=>k?`\x1b[${b?"1;":""}${n(a,v)}m${c}\x1b[0m`:c)(g),guide:w(d),pink:w(e),pinkBold:w(e,!0),softPink:w(e),warn:w(f),ink2:a=>a,ink3:w(h),track:w(i),err:w(j)})},z=a.color??!1,A=a.version??c.version,B=y.ink3(" · "),C=(a,b)=>b?a(b):"",D=a=>y.pink(a),E=y.guide("●"),F=y.ink3("○"),G=y.err("✕"),H=y.pink("■"),I=y.ink3("□"),J=a=>`${y.bold("fa")}${y.pinkBold("il")}${y.bold("proof ai")} ${y.ink3(`v${A}`)}`+(a?`${B}${a}`:""),K=(a,b)=>y.bold(a.toUpperCase())+(b?` ${y.ink3(b)}`:""),L=(b,c=0)=>{let d=Math.max(c,...b.map(([a,b])=>b?r(a)+2:0));return b.map(([b,c])=>{let e,f;if(!c)return` ${b}`;let g=` ${u(b,d)}`;return g+(e=y.ink2(c),f=x-r(g),a.fit&&r(e)>f?function(a,b){var c;if(r(a)<=b)return a;if(a.includes("\x1b")){let d,e;return b<=1?"…":`${(e=(d=s(c=p(a,b-1)))[d.length-1])&&e.active?c+l:c}…`}return b<=0?"":a.length<=b?a:a.slice(0,b-1).trimEnd()+"…"}(e,Math.max(1,f)):e)})};return{cols:x,sep:B,cmd:D,on:E,off:F,failed:G,selected:H,unselected:I,meta:a=>C(y.ink3,a),header:J,head:K,rows:L,kv:(a,b=9)=>{let c=Math.max(b,...a.map(([a])=>r(a)))+2;return a.map(([a,b])=>b?` ${u(C(y.ink3,a),c)}${b}`:` ${C(y.ink3,a)}`)},ok:(a,b)=>`${y.guide("✓")} ${a}${b?` ${y.ink3(b)}`:""}`,caution:(a,b)=>`${y.warn("▲")} ${a}${b?`${B}${D(b)}`:""}`,fail:(a,b)=>`${y.err("✕")} ${a}${b?`${B}${D(b)}`:""}`,notice:(a,b)=>{let c=a=>(a.split("`").length-1)%2==0?a.replace(/`([^`]+)`/g,(a,b)=>D(b)):a,d="ok"===a?y.guide("✓"):"caution"===a?y.warn("▲"):y.err("✕"),[e="",...f]=b.split("\n");return[`${d} ${c(e)}`,...f.map(a=>""===a.trim()?"":` ${c(a)}`)]},confirm:(a,c="Continue?")=>new Promise(d=>{let{stdin:e,stdout:f}=a,g="",h=!1,i=e.isRaw,j=a=>{h||(h=!0,e.removeListener("keypress",l),e.removeListener("end",k),e.setRawMode?.(i??!1),e.pause(),f.write("\n"),d(a))};function k(){j(!1)}function l(a,b){let c=b?.name;b?.ctrl&&("c"===c||"d"===c)||"escape"===c?j(!1):"return"===c||"enter"===c?j(/^y(es)?$/i.test(g.trim())):"backspace"===c?g&&(g=g.slice(0,-1),f.write("\b \b")):a&&1===a.length&&a>=" "&&!b?.ctrl&&!b?.meta&&(g+=a,f.write(a))}f.write(`${c} ${y.ink3("y/N")} `),b.emitKeypressEvents(e),e.setRawMode?.(!0),e.on("keypress",l),e.on("end",k),e.resume()}),keys:a=>y.ink3(a.join(" · ")),bar:(a,b)=>{let c=Math.round(Math.max(0,Math.min(1,b))*a),d=Math.max(0,a-c);return C(y.pink,"━".repeat(c))+(z?C(y.track,"━".repeat(d)):" ".repeat(d))},logo:()=>x<22?[]:(function(a){let b=".".repeat(o[0]?.length??0),c=a=>"t"===a?d:"p"===a?e:null,f=[];for(let d=0;d<o.length;d+=2){let e=o[d],g=o[d+1]??b,h="";for(let b=0;b<e.length;b++){let d=c(e[b]),f=c(g[b]);if(d||f)if("basic"===a)h+=d&&f?"█":d?"▀":"▄";else if(d&&f)h+=d===f?`\x1b[${n(d,a)}m█\x1b[0m`:`\x1b[${n(d,a)};${"ansi256"===a&&void 0!==f.c256?`48;5;${f.c256}`:`48;2;${f.rgb[0]};${f.rgb[1]};${f.rgb[2]}`}m▀\x1b[0m`;else d?h+=`\x1b[${n(d,a)}m▀\x1b[0m`:h+=`\x1b[${n(f,a)}m▄\x1b[0m`;else h+=" "}f.push(h)}return f})(z?m():"basic").map(a=>` ${a}`),helpPage:b=>{var c;let d,e=[J(b.name),"",K("Usage"),...L(b.usage)];return b.options?.length&&e.push("",K("Options"),...(c=b.options,d=Math.max(b.optionsCol??0,...c.map(([a,b])=>b?r(a)+2:0)),c.flatMap(([b,c])=>{if(!c)return[` ${b}`];let e=` ${u(b,d)}`,f=x-r(e);if(!a.fit||r(c)<=f)return[e+y.ink2(c)];let g=" ".repeat(r(e));return(function(a,b){if(b<=0)return[a];if(!a.includes("\x1b")){if(b<=0)return[a];let c=a.split(/\s+/).filter(Boolean);if(0===c.length)return[];let d=[],e="";for(let a of c)e?e.length+1+a.length<=b?e+=` ${a}`:(d.push(e),e=a):e=a;return e&&d.push(e),d}let c=[],d=[];for(let b of s(a))/\s/.test(b.ch)?(d.length>0&&c.push(d),d=[]):d.push(b);d.length>0&&c.push(d);let e=[],f=[];for(let a of c){if(f.length>0&&f.length+1+a.length>b){e.push(t(f)),f=[...a];continue}f.length>0&&f.push({ch:" ",active:f[f.length-1].active}),f.push(...a)}return f.length>0&&e.push(t(f)),e})(c,Math.max(1,f)).map((a,b)=>(0===b?e:g)+y.ink2(a))}))),b.examples?.length&&e.push("",K("Examples"),...b.examples.map(a=>` ${D(a)}`)),e},live:a=>{let b={lastCount:0},c=0,d=null,e=null,f=!1,g=!1,h=()=>{a.write("\x1b[?25h")},i=()=>{process.removeListener("exit",h),process.removeListener("SIGINT",j),process.removeListener("SIGTERM",j)},j=a=>{g=!0,e&&clearTimeout(e),i(),h(),process.kill(process.pid,a)},k=()=>{e=null;let i=d;if(d=null,!i||g)return;c=Date.now();let k="";f||(f=!0,k="\x1b[?25l",process.once("exit",h),process.on("SIGINT",j),process.on("SIGTERM",j)),q(a,b,i(),{lead:k})};return{draw(a){if(g||(d=a,e))return;let b=c+100-Date.now();b<=0?k():(e=setTimeout(k,b),e.unref?.())},done(c){g||(g=!0,e&&clearTimeout(e),e=null,d=null,i(),q(a,b,c,{cut:!1,tail:f?"\x1b[?25h":""}))}}}}}])}]})();
233
234
 
234
- //# sourceMappingURL=_1gb0ifpkowwub._.js.map
235
+ //# sourceMappingURL=_1a3tubds7s7ow._.js.map
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[45550,a=>{var b=a.i(72131),c=a.i(66036);let d=/\b[\w-]+-extension:\/\//i;function e(a){return"app"===function({stack:a,filename:b,appOrigin:c}){let e=[b,a].filter(Boolean).join("\n");return e.trim()?d.test(e)?"extension":c&&e.includes(c)?"app":"unknown":"unknown"}(a)}a.s(["GlobalErrorListeners",0,function(){return(0,b.useEffect)(()=>{let a=a=>{e({stack:a.error?.stack,filename:a.filename,appOrigin:window.location.origin})&&(0,c.L)("unhandled_exception",{error_message:a.message,error_name:a.error?.name,error_filename:a.filename,error_lineno:a.lineno,error_colno:a.colno})},b=a=>{let b=a.reason;e({stack:b instanceof Error?b.stack:void 0,appOrigin:window.location.origin})&&(0,c.L)("unhandled_rejection",{error_message:b instanceof Error?b.message:String(b),error_name:b instanceof Error?b.name:void 0})};return window.addEventListener("error",a),window.addEventListener("unhandledrejection",b),()=>{window.removeEventListener("error",a),window.removeEventListener("unhandledrejection",b)}},[]),null}],45550)},10815,a=>{var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(41476),f=a.i(72131),g=a.i(64831);let h={name:"git-branch",size:24,node:[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]]};h.node;let i=(0,g.f)(h);var j=a.i(89027);let k={name:"star",size:24,node:[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]};k.node;let l=(0,g.f)(k),m={name:"book-open",size:24,node:[["path",{d:"M12 5v16",key:"1f6ucr"}],["path",{d:"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z",key:"1fyvmf"}]]};m.node;let n=(0,g.f)(m),o={name:"message-circle",size:24,node:[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]]};o.node;let p=(0,g.f)(o),q={name:"messages-square",size:24,node:[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]};q.node;let r=(0,g.f)(q),s={name:"message-square-warning",size:24,node:[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 15h.01",key:"q59x07"}],["path",{d:"M12 7v4",key:"xawao1"}]]};s.node;let t=(0,g.f)(s);var u=a.i(40695);let v="failproofai@exosphere.host",w=[{label:"Star us on GitHub",icon:l,href:"https://github.com/failproofai/failproofai",color:"#f5c842",bg:"rgba(245,200,66,0.08)"},{label:"Documentation",icon:n,href:"https://docs.befailproof.ai/introduction",color:"#60a5fa",bg:"rgba(96,165,250,0.08)"},{label:"Join our Discord",icon:p,href:"https://discord.befailproof.ai/",color:"#5865f2",bg:"rgba(88,101,242,0.08)"},{label:"Join r/failproofai",icon:r,href:"https://www.reddit.com/r/failproofai/",color:"#ff4500",bg:"rgba(255,69,0,0.08)"},{label:"Feedback & Issues",icon:t,href:"https://github.com/FailproofAI/failproofai/issues/new/choose",color:"#34d399",bg:"rgba(52,211,153,0.08)"}],x=()=>{let[a,c]=(0,f.useState)(!1),d=(0,f.useCallback)(()=>c(!1),[]),e=(0,f.useCallback)(a=>{"Escape"===a.key&&c(!1)},[]);return(0,b.jsxs)("div",{className:"relative",onKeyDown:e,children:[a&&(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:d,"aria-hidden":"true"}),(0,b.jsxs)(u.f,{type:"button",variant:"ghost",size:"sm",onClick:()=>c(a=>!a),"aria-expanded":a,"aria-haspopup":"true",className:"relative z-50 flex items-center gap-1.5 text-muted-foreground hover:text-foreground",children:[(0,b.jsx)(i,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"hidden sm:inline text-xs whitespace-nowrap",children:"Reach Us"}),(0,b.jsx)(j.f,{className:`h-3 w-3 transition-transform ${a?"rotate-180":""}`})]}),a&&(0,b.jsxs)("div",{className:"absolute right-0 mt-2 w-60 rounded-lg border border-border bg-card shadow-xl z-50",role:"menu",style:{boxShadow:"0 8px 32px rgba(0,0,0,0.45), 0 0 0 1px rgba(255,255,255,0.04)"},children:[(0,b.jsxs)("div",{className:"px-3 py-2.5 border-b border-border",style:{background:"linear-gradient(135deg, rgba(236,72,153,0.12) 0%, rgba(139,92,246,0.08) 100%)"},children:[(0,b.jsx)("p",{className:"text-xs font-semibold",style:{color:"#e879f9",letterSpacing:"0.06em"},children:"Reach Developers"}),(0,b.jsx)("p",{className:"text-[0.65rem] text-muted-foreground mt-0.5",children:"We'd love to hear from you"})]}),(0,b.jsx)("div",{className:"py-1",children:w.map(({label:a,icon:c,href:e,color:f,bg:g})=>(0,b.jsxs)("a",{href:e,target:"_blank",rel:"noopener noreferrer",role:"menuitem",className:"flex items-center gap-2.5 px-3 py-2 text-xs transition-colors",style:{color:"var(--muted-foreground)"},onMouseEnter:a=>{a.currentTarget.style.background=g,a.currentTarget.style.color=f},onMouseLeave:a=>{a.currentTarget.style.background="",a.currentTarget.style.color=""},onClick:d,children:[(0,b.jsx)(c,{className:"h-3.5 w-3.5 flex-shrink-0",style:{color:f}}),a]},a))}),(0,b.jsx)("div",{className:"px-3 py-2 border-t border-border",style:{background:"rgba(0,0,0,0.2)"},children:(0,b.jsxs)("p",{className:"text-[0.65rem] text-muted-foreground",children:["or email"," ",(0,b.jsx)("a",{href:`mailto:${v}`,className:"transition-colors",style:{color:"#e879f9"},onMouseEnter:a=>a.currentTarget.style.opacity="0.75",onMouseLeave:a=>a.currentTarget.style.opacity="1",children:v})]})})]})]})},y={name:"refresh-cw",size:24,node:[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]};y.node;let z=(0,g.f)(y);var A=a.i(97895),B=a.i(6236);let C=[{label:"Off",value:0},{label:"5s",value:5},{label:"10s",value:10},{label:"30s",value:30}];function D({className:a}){let c=(0,d.useRouter)(),[e,g]=(0,f.useTransition)(),{intervalSec:h,setIntervalSec:i}=(0,B.useAutoRefresh)(),j=(0,f.useCallback)(()=>{g(()=>c.refresh())},[c]);(0,f.useEffect)(()=>{if(h<=0)return;let a=setInterval(j,1e3*h);return()=>clearInterval(a)},[h,j]);let k=h>0;return(0,b.jsxs)("div",{className:(0,A.f)("inline-flex items-center rounded-lg border border-border bg-muted/50 p-0.5 gap-0.5",a),children:[(0,b.jsx)("button",{onClick:j,title:"Refresh",className:(0,A.f)("inline-flex items-center justify-center rounded-md p-1.5 transition-colors",k?"text-primary hover:bg-primary/10":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:(0,b.jsx)(z,{className:(0,A.f)("w-3.5 h-3.5",e&&"animate-spin")})}),(0,b.jsx)("div",{className:"w-px h-4 bg-border"}),(0,b.jsx)("div",{className:"inline-flex items-center gap-0.5",role:"group","aria-label":"Auto-refresh interval",children:C.map(a=>(0,b.jsx)("button",{onClick:()=>i(a.value),"aria-pressed":h===a.value,className:(0,A.f)("px-2 py-1 text-[11px] font-medium rounded-md transition-colors",h===a.value?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:a.label},a.value))})]})}var E=a.i(10765);let F=[{href:"/projects",label:"projects"},{href:"/policies",label:"policies"},{href:"/audit",label:"audit"}];a.s(["Navbar",0,({disabledPages:a=[]})=>{let f=(0,d.usePathname)(),{capture:g}=(0,E.usePostHog)(),h=f.startsWith("/policies")?"policies":f.startsWith("/audit")?"audit":f.startsWith("/settings")?"settings":f.startsWith("/projects")||f.startsWith("/project/")?"projects":"";return(0,b.jsxs)("header",{className:"app-header",children:[(0,b.jsx)("a",{href:"https://github.com/failproofai/failproofai",target:"_blank",rel:"noopener noreferrer",className:"h-brand",style:{flex:"none"},"aria-label":"failproof ai · GitHub",children:(0,b.jsx)("img",{src:"/logo.svg",alt:"failproof_ai",style:{height:18,display:"block",flexShrink:0}})}),(0,b.jsx)("nav",{className:"tabs",style:{border:"none",padding:0,gap:0},children:F.filter(({href:b})=>{let c=b.slice(1);return!a.includes(c)}).map(({href:a,label:d})=>{let e="/projects"===a?"/projects"===f||f.startsWith("/project/"):f.startsWith(a);return(0,b.jsx)(c.default,{href:a,className:`tab${e?" is-active":""}`,"aria-current":e?"page":void 0,onClick:()=>{"/audit"===a&&g("audit_nav_clicked",{from_path:f,is_active_tab:e})},children:d},a)})}),(0,b.jsx)("div",{style:{flex:1}}),(0,b.jsxs)("div",{className:"h-meta",children:[(0,b.jsxs)("span",{className:"h-version",children:["v","1.0.11"]}),h&&(0,b.jsx)("span",{className:"h-brand-sep","aria-hidden":"true",children:"·"}),h&&(0,b.jsx)("span",{className:"h-brand-section",children:h})]}),(0,b.jsxs)("div",{className:"h-actions",children:[(0,b.jsx)(D,{}),(0,b.jsx)("span",{style:{width:1,height:18,background:"var(--line)",margin:"0 6px"}}),!a.includes("settings")&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(c.default,{href:"/settings",className:`h-icon-btn${f.startsWith("/settings")?" is-active":""}`,"aria-label":"settings","aria-current":f.startsWith("/settings")?"page":void 0,title:"settings",children:(0,b.jsx)(e.f,{className:"w-3.5 h-3.5",strokeWidth:1.75,"aria-hidden":"true"})}),(0,b.jsx)("span",{style:{width:1,height:18,background:"var(--line)",margin:"0 6px"}})]}),(0,b.jsx)(x,{})]})]})}],10815)}]})();
1
+ (()=>{"use strict";module.exports=[45550,a=>{var b=a.i(72131),c=a.i(66036);let d=/\b[\w-]+-extension:\/\//i;function e(a){return"app"===function({stack:a,filename:b,appOrigin:c}){let e=[b,a].filter(Boolean).join("\n");return e.trim()?d.test(e)?"extension":c&&e.includes(c)?"app":"unknown":"unknown"}(a)}a.s(["GlobalErrorListeners",0,function(){return(0,b.useEffect)(()=>{let a=a=>{e({stack:a.error?.stack,filename:a.filename,appOrigin:window.location.origin})&&(0,c.L)("unhandled_exception",{error_message:a.message,error_name:a.error?.name,error_filename:a.filename,error_lineno:a.lineno,error_colno:a.colno})},b=a=>{let b=a.reason;e({stack:b instanceof Error?b.stack:void 0,appOrigin:window.location.origin})&&(0,c.L)("unhandled_rejection",{error_message:b instanceof Error?b.message:String(b),error_name:b instanceof Error?b.name:void 0})};return window.addEventListener("error",a),window.addEventListener("unhandledrejection",b),()=>{window.removeEventListener("error",a),window.removeEventListener("unhandledrejection",b)}},[]),null}],45550)},10815,a=>{var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(41476),f=a.i(72131),g=a.i(64831);let h={name:"git-branch",size:24,node:[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]]};h.node;let i=(0,g.f)(h);var j=a.i(89027);let k={name:"star",size:24,node:[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]};k.node;let l=(0,g.f)(k),m={name:"book-open",size:24,node:[["path",{d:"M12 5v16",key:"1f6ucr"}],["path",{d:"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z",key:"1fyvmf"}]]};m.node;let n=(0,g.f)(m),o={name:"message-circle",size:24,node:[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]]};o.node;let p=(0,g.f)(o),q={name:"messages-square",size:24,node:[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]};q.node;let r=(0,g.f)(q),s={name:"message-square-warning",size:24,node:[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 15h.01",key:"q59x07"}],["path",{d:"M12 7v4",key:"xawao1"}]]};s.node;let t=(0,g.f)(s);var u=a.i(40695);let v="failproofai@exosphere.host",w=[{label:"Star us on GitHub",icon:l,href:"https://github.com/failproofai/failproofai",color:"#f5c842",bg:"rgba(245,200,66,0.08)"},{label:"Documentation",icon:n,href:"https://docs.befailproof.ai/introduction",color:"#60a5fa",bg:"rgba(96,165,250,0.08)"},{label:"Join our Discord",icon:p,href:"https://discord.befailproof.ai/",color:"#5865f2",bg:"rgba(88,101,242,0.08)"},{label:"Join r/failproofai",icon:r,href:"https://www.reddit.com/r/failproofai/",color:"#ff4500",bg:"rgba(255,69,0,0.08)"},{label:"Feedback & Issues",icon:t,href:"https://github.com/FailproofAI/failproofai/issues/new/choose",color:"#34d399",bg:"rgba(52,211,153,0.08)"}],x=()=>{let[a,c]=(0,f.useState)(!1),d=(0,f.useCallback)(()=>c(!1),[]),e=(0,f.useCallback)(a=>{"Escape"===a.key&&c(!1)},[]);return(0,b.jsxs)("div",{className:"relative",onKeyDown:e,children:[a&&(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:d,"aria-hidden":"true"}),(0,b.jsxs)(u.f,{type:"button",variant:"ghost",size:"sm",onClick:()=>c(a=>!a),"aria-expanded":a,"aria-haspopup":"true",className:"relative z-50 flex items-center gap-1.5 text-muted-foreground hover:text-foreground",children:[(0,b.jsx)(i,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"hidden sm:inline text-xs whitespace-nowrap",children:"Reach Us"}),(0,b.jsx)(j.f,{className:`h-3 w-3 transition-transform ${a?"rotate-180":""}`})]}),a&&(0,b.jsxs)("div",{className:"absolute right-0 mt-2 w-60 rounded-lg border border-border bg-card shadow-xl z-50",role:"menu",style:{boxShadow:"0 8px 32px rgba(0,0,0,0.45), 0 0 0 1px rgba(255,255,255,0.04)"},children:[(0,b.jsxs)("div",{className:"px-3 py-2.5 border-b border-border",style:{background:"linear-gradient(135deg, rgba(236,72,153,0.12) 0%, rgba(139,92,246,0.08) 100%)"},children:[(0,b.jsx)("p",{className:"text-xs font-semibold",style:{color:"#e879f9",letterSpacing:"0.06em"},children:"Reach Developers"}),(0,b.jsx)("p",{className:"text-[0.65rem] text-muted-foreground mt-0.5",children:"We'd love to hear from you"})]}),(0,b.jsx)("div",{className:"py-1",children:w.map(({label:a,icon:c,href:e,color:f,bg:g})=>(0,b.jsxs)("a",{href:e,target:"_blank",rel:"noopener noreferrer",role:"menuitem",className:"flex items-center gap-2.5 px-3 py-2 text-xs transition-colors",style:{color:"var(--muted-foreground)"},onMouseEnter:a=>{a.currentTarget.style.background=g,a.currentTarget.style.color=f},onMouseLeave:a=>{a.currentTarget.style.background="",a.currentTarget.style.color=""},onClick:d,children:[(0,b.jsx)(c,{className:"h-3.5 w-3.5 flex-shrink-0",style:{color:f}}),a]},a))}),(0,b.jsx)("div",{className:"px-3 py-2 border-t border-border",style:{background:"rgba(0,0,0,0.2)"},children:(0,b.jsxs)("p",{className:"text-[0.65rem] text-muted-foreground",children:["or email"," ",(0,b.jsx)("a",{href:`mailto:${v}`,className:"transition-colors",style:{color:"#e879f9"},onMouseEnter:a=>a.currentTarget.style.opacity="0.75",onMouseLeave:a=>a.currentTarget.style.opacity="1",children:v})]})})]})]})},y={name:"refresh-cw",size:24,node:[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]};y.node;let z=(0,g.f)(y);var A=a.i(97895),B=a.i(6236);let C=[{label:"Off",value:0},{label:"5s",value:5},{label:"10s",value:10},{label:"30s",value:30}];function D({className:a}){let c=(0,d.useRouter)(),[e,g]=(0,f.useTransition)(),{intervalSec:h,setIntervalSec:i}=(0,B.useAutoRefresh)(),j=(0,f.useCallback)(()=>{g(()=>c.refresh())},[c]);(0,f.useEffect)(()=>{if(h<=0)return;let a=setInterval(j,1e3*h);return()=>clearInterval(a)},[h,j]);let k=h>0;return(0,b.jsxs)("div",{className:(0,A.f)("inline-flex items-center rounded-lg border border-border bg-muted/50 p-0.5 gap-0.5",a),children:[(0,b.jsx)("button",{onClick:j,title:"Refresh",className:(0,A.f)("inline-flex items-center justify-center rounded-md p-1.5 transition-colors",k?"text-primary hover:bg-primary/10":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:(0,b.jsx)(z,{className:(0,A.f)("w-3.5 h-3.5",e&&"animate-spin")})}),(0,b.jsx)("div",{className:"w-px h-4 bg-border"}),(0,b.jsx)("div",{className:"inline-flex items-center gap-0.5",role:"group","aria-label":"Auto-refresh interval",children:C.map(a=>(0,b.jsx)("button",{onClick:()=>i(a.value),"aria-pressed":h===a.value,className:(0,A.f)("px-2 py-1 text-[11px] font-medium rounded-md transition-colors",h===a.value?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:a.label},a.value))})]})}var E=a.i(10765);let F=[{href:"/projects",label:"projects"},{href:"/policies",label:"policies"},{href:"/audit",label:"audit"}];a.s(["Navbar",0,({disabledPages:a=[]})=>{let f=(0,d.usePathname)(),{capture:g}=(0,E.usePostHog)(),h=f.startsWith("/policies")?"policies":f.startsWith("/audit")?"audit":f.startsWith("/settings")?"settings":f.startsWith("/projects")||f.startsWith("/project/")?"projects":"";return(0,b.jsxs)("header",{className:"app-header",children:[(0,b.jsx)("a",{href:"https://github.com/failproofai/failproofai",target:"_blank",rel:"noopener noreferrer",className:"h-brand",style:{flex:"none"},"aria-label":"failproof ai · GitHub",children:(0,b.jsx)("img",{src:"/logo.svg",alt:"failproof_ai",style:{height:18,display:"block",flexShrink:0}})}),(0,b.jsx)("nav",{className:"tabs",style:{border:"none",padding:0,gap:0},children:F.filter(({href:b})=>{let c=b.slice(1);return!a.includes(c)}).map(({href:a,label:d})=>{let e="/projects"===a?"/projects"===f||f.startsWith("/project/"):f.startsWith(a);return(0,b.jsx)(c.default,{href:a,className:`tab${e?" is-active":""}`,"aria-current":e?"page":void 0,onClick:()=>{"/audit"===a&&g("audit_nav_clicked",{from_path:f,is_active_tab:e})},children:d},a)})}),(0,b.jsx)("div",{style:{flex:1}}),(0,b.jsxs)("div",{className:"h-meta",children:[(0,b.jsxs)("span",{className:"h-version",children:["v","1.0.12-beta.1"]}),h&&(0,b.jsx)("span",{className:"h-brand-sep","aria-hidden":"true",children:"·"}),h&&(0,b.jsx)("span",{className:"h-brand-section",children:h})]}),(0,b.jsxs)("div",{className:"h-actions",children:[(0,b.jsx)(D,{}),(0,b.jsx)("span",{style:{width:1,height:18,background:"var(--line)",margin:"0 6px"}}),!a.includes("settings")&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(c.default,{href:"/settings",className:`h-icon-btn${f.startsWith("/settings")?" is-active":""}`,"aria-label":"settings","aria-current":f.startsWith("/settings")?"page":void 0,title:"settings",children:(0,b.jsx)(e.f,{className:"w-3.5 h-3.5",strokeWidth:1.75,"aria-hidden":"true"})}),(0,b.jsx)("span",{style:{width:1,height:18,background:"var(--line)",margin:"0 6px"}})]}),(0,b.jsx)(x,{})]})]})}],10815)}]})();
2
2
 
3
3
  //# sourceMappingURL=_1djqs9i27e4kg._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[73338,a=>{"use strict";var b=a.i(36359),c=a.i(7292),d=a.i(37936),e=a.i(2157);a.i(66680);var f=a.i(50227),g=a.i(8674);a.i(1144);var h=a.i(75818),i=a.i(13095);async function j(){return function(a=Date.now()){let b,c,d=(c=process.env.FAILPROOFAI_STATE_DIR)?(0,f.resolve)(c,"sessions"):(0,h.$)();if(!(0,e.existsSync)(d))return[];let g=[];try{b=(0,e.readdirSync)(d)}catch{return[]}for(let c of b)if(c.endsWith(".json"))try{let b=function(a){if(!a||"object"!=typeof a||1!==a.schemaVersion||"string"!=typeof a.sessionId||0===a.sessionId.length||!Number.isFinite(a.pausedAt)||!Number.isFinite(a.expiresAt))return null;let b=a.pausedAt,c=Number.isFinite(a.firstPausedAt)?a.firstPausedAt:b;return{schemaVersion:1,sessionId:a.sessionId,pausedAt:b,firstPausedAt:c,expiresAt:Math.min(a.expiresAt,c+288e5),setBy:"string"==typeof a.setBy?a.setBy:"unknown",..."string"==typeof a.cwd?{cwd:a.cwd}:{}}}(JSON.parse((0,e.readFileSync)((0,f.join)(d,c),"utf8")));if(!b||b.expiresAt<=a)continue;let{schemaVersion:h,...i}=b;g.push(i)}catch{}return g.sort((a,b)=>b.pausedAt-a.pausedAt)}()}(0,i.ensureServerEntryExports)([j]),(0,d.registerServerReference)(j,"0048b2349d5d15713f07f749a4aa9714eb8407cfbf",null);var k=a.i(17280);a.i(75534);var l=a.i(10695),m=a.i(98378),n=a.i(69839),o=a.i(28120),p=a.i(74533),q=a.i(60526),r=a.i(91997),s=a.i(67121),t=a.i(80504),u=a.i(92956),v=a.i(15638),w=a.i(32352);class x extends Error{exitCode;constructor(a,b=1){super(a),this.name="CliError",this.exitCode=b}}a.i(89790);var y=a.i(9909),z=a.i(8284),A=a.i(21572),B=a.i(49526);function C(a,b){let c,d,i=r.z.filter(a=>b.includes(a));if(0===i.length)return null;let j=(0,A.s)().agents;if("installed"===a){if(!j||0===(c=i.filter(a=>!j.selected.includes(a))).length)return null;let a=a=>[...r.z.filter(b=>a.includes(b)),...a.filter(a=>!r.z.includes(a))],b=(0,s.w)(),e=c.filter(a=>b.includes(a)&&!j.seen.includes(a));d={selected:a([...j.selected,...c]),seen:e.length>0?a([...j.seen,...e]):j.seen}}else if(j){if(0===(c=i.filter(a=>j.selected.includes(a))).length)return null;let a=new Set(c);d={selected:j.selected.filter(b=>!a.has(b)),seen:j.seen}}else{c=i;let a=(0,s.w)(),b=process.cwd();d={selected:r.z.filter(c=>!i.includes(c)&&(a.includes(c)||function(a,b){let c=(0,s.B)(a);try{if(c.hooksInstalledInSettings("user",b))return!0;if("hermes"===a)return(0,s.d)().some(a=>(0,e.existsSync)(a.home)&&(a.pluginInstalled&&a.pluginEnabled||a.legacyShellHookPresent));let d=(0,s.r)(c,"user",b);if(d.length<2)return!1;return d.some(a=>c.hooksInstalledInSettings.call({...c,getSettingsPaths:()=>[a]},"user",b))}catch{return!1}}(c,b))),seen:a}}let k=(0,B.m)((0,B.w)(process.stdout)),m=c.map(a=>(0,s.B)(a).displayName),n=1===m.length?m[0]:`${m.slice(0,-1).join(", ")} and ${m[m.length-1]}`,o=1===m.length,p=k.cmd("failproofai config");"installed"===a&&function(a,b,c=Date.now()){if(0!==a.length&&b)try{!function(a){var b;let c=(b=void 0,(0,f.join)((0,h.J)(b),"state","backfill-request.json")),d=null;if((0,e.existsSync)(c))try{d=function(a,b){let c;if("object"!=typeof a||null===a||Array.isArray(a))return null;if(Array.isArray(a.agents))c=[...new Set(a.agents.filter(a=>"string"==typeof a&&""!==a.trim()))];else if(void 0!==a.agents&&null!==a.agents)return null;let d="number"==typeof a.requestedAtMs?a.requestedAtMs:void 0,e=void 0===a.kind||null===a.kind?"user":a.kind;return"user"===e?"number"!=typeof a.sinceMs?null:{kind:"user",sinceMs:a.sinceMs,requestedAtMs:d??b,...c?{agents:c}:{}}:"added"===e?void 0===d||!c||b-d>6e5?null:{kind:"added",requestedAtMs:d,agents:c}:null}(JSON.parse((0,e.readFileSync)(c,"utf8")),a.requestedAtMs)}catch{d=null}let i=function(a,b){let c,d;if(!a)return b;if("added"===a.kind&&"added"===b.kind)return{kind:"added",requestedAtMs:b.requestedAtMs,agents:[...new Set([...a.agents,...b.agents])]};let e=[a,b].flatMap(a=>"user"===a.kind?[a.sinceMs]:[]),f=(c=a.agents,d=b.agents,void 0===c||void 0===d?void 0:[...new Set([...c,...d])]);return{kind:"user",sinceMs:Math.min(...e),requestedAtMs:b.requestedAtMs,...f?{agents:f}:{}}}(d,a);(0,g.f)(c,i)}({kind:"added",agents:[...a],requestedAtMs:c})}catch(a){return(0,l.g)(`could not write the backfill request for re-added agents: ${a instanceof Error?a.message:String(a)}`),!1}}(c,function(){try{let a;return null!==((a=(0,A.d)().ingest)?{url:a.url,key:a.key}:null)&&!0===(0,A.s)().collector.sessions}catch{return!1}}());try{(0,A.t)({agents:d})}catch(c){let b=c instanceof Error?c.message:String(c);return k.caution("installed"===a?`Couldn't record ${n} as traced (${b}), so ${p} may remove ${o?"its":"their"} hooks again.`:`Couldn't record ${n} as no longer traced (${b}), so ${p} may add ${o?"its":"their"} hooks back.`)}return k.ok("installed"===a?`${n} ${o?"is":"are"} traced again, so ${p} keeps ${o?"its":"their"} hooks.`:`${n} ${o?"is":"are"} no longer traced, so ${p} won't add ${o?"its":"their"} hooks back.`)}let D=new Set(u.H.map(a=>a.name));function E(a,b){return s.p.getSettingsPath(a,b)}function F(a){let b=[],c=[],d=[],e=[];try{e=(0,y.V)().packs}catch{}let f=(a,b)=>e.filter(b=>null===a||b.id===a).filter(a=>a.policies.some(a=>a.name===b)).map(a=>({packId:a.id,packVersion:a.version,name:b,disabledKey:`pack:${a.id}@${a.version}:${b}`}));for(let e of a){let a=f(null,e);if(1===a.length){c.push(a[0]);continue}if(a.length>1)throw new x(`"${e}" is declared by ${a.length} installed packs.
1
+ module.exports=[73338,a=>{"use strict";var b=a.i(36359),c=a.i(7292),d=a.i(37936),e=a.i(2157);a.i(66680);var f=a.i(50227),g=a.i(8674);a.i(1144);var h=a.i(75818),i=a.i(13095);async function j(){return function(a=Date.now()){let b,c,d=(c=process.env.FAILPROOFAI_STATE_DIR)?(0,f.resolve)(c,"sessions"):(0,h.$)();if(!(0,e.existsSync)(d))return[];let g=[];try{b=(0,e.readdirSync)(d)}catch{return[]}for(let c of b)if(c.endsWith(".json"))try{let b=function(a){if(!a||"object"!=typeof a||1!==a.schemaVersion||"string"!=typeof a.sessionId||0===a.sessionId.length||!Number.isFinite(a.pausedAt)||!Number.isFinite(a.expiresAt))return null;let b=a.pausedAt,c=Number.isFinite(a.firstPausedAt)?a.firstPausedAt:b;return{schemaVersion:1,sessionId:a.sessionId,pausedAt:b,firstPausedAt:c,expiresAt:Math.min(a.expiresAt,c+288e5),setBy:"string"==typeof a.setBy?a.setBy:"unknown",..."string"==typeof a.cwd?{cwd:a.cwd}:{}}}(JSON.parse((0,e.readFileSync)((0,f.join)(d,c),"utf8")));if(!b||b.expiresAt<=a)continue;let{schemaVersion:h,...i}=b;g.push(i)}catch{}return g.sort((a,b)=>b.pausedAt-a.pausedAt)}()}(0,i.ensureServerEntryExports)([j]),(0,d.registerServerReference)(j,"006ccaa5b797e8c4bed7276f22bca7093b374a7c2d",null);var k=a.i(17280);a.i(75534);var l=a.i(10695),m=a.i(98378),n=a.i(69839),o=a.i(28120),p=a.i(74533),q=a.i(60526),r=a.i(91997),s=a.i(67121),t=a.i(80504),u=a.i(92956),v=a.i(15638),w=a.i(32352);class x extends Error{exitCode;constructor(a,b=1){super(a),this.name="CliError",this.exitCode=b}}a.i(89790);var y=a.i(9909);a.i(86017);var z=a.i(8284),A=a.i(21572),B=a.i(1459);function C(a,b){let c,d,i=r.z.filter(a=>b.includes(a));if(0===i.length)return null;let j=(0,A.s)().agents;if("installed"===a){if(!j||0===(c=i.filter(a=>!j.selected.includes(a))).length)return null;let a=a=>[...r.z.filter(b=>a.includes(b)),...a.filter(a=>!r.z.includes(a))],b=(0,s.w)(),e=c.filter(a=>b.includes(a)&&!j.seen.includes(a));d={selected:a([...j.selected,...c]),seen:e.length>0?a([...j.seen,...e]):j.seen}}else if(j){if(0===(c=i.filter(a=>j.selected.includes(a))).length)return null;let a=new Set(c);d={selected:j.selected.filter(b=>!a.has(b)),seen:j.seen}}else{c=i;let a=(0,s.w)(),b=process.cwd();d={selected:r.z.filter(c=>!i.includes(c)&&(a.includes(c)||function(a,b){let c=(0,s.B)(a);try{if(c.hooksInstalledInSettings("user",b))return!0;if("hermes"===a)return(0,s.d)().some(a=>(0,e.existsSync)(a.home)&&(a.pluginInstalled&&a.pluginEnabled||a.legacyShellHookPresent));let d=(0,s.r)(c,"user",b);if(d.length<2)return!1;return d.some(a=>c.hooksInstalledInSettings.call({...c,getSettingsPaths:()=>[a]},"user",b))}catch{return!1}}(c,b))),seen:a}}let k=(0,B.m)((0,B.w)(process.stdout)),m=c.map(a=>(0,s.B)(a).displayName),n=1===m.length?m[0]:`${m.slice(0,-1).join(", ")} and ${m[m.length-1]}`,o=1===m.length,p=k.cmd("failproofai config");"installed"===a&&function(a,b,c=Date.now()){if(0!==a.length&&b)try{!function(a){var b;let c=(b=void 0,(0,f.join)((0,h.J)(b),"state","backfill-request.json")),d=null;if((0,e.existsSync)(c))try{d=function(a,b){let c;if("object"!=typeof a||null===a||Array.isArray(a))return null;if(Array.isArray(a.agents))c=[...new Set(a.agents.filter(a=>"string"==typeof a&&""!==a.trim()))];else if(void 0!==a.agents&&null!==a.agents)return null;let d="number"==typeof a.requestedAtMs?a.requestedAtMs:void 0,e=void 0===a.kind||null===a.kind?"user":a.kind;return"user"===e?"number"!=typeof a.sinceMs?null:{kind:"user",sinceMs:a.sinceMs,requestedAtMs:d??b,...c?{agents:c}:{}}:"added"===e?void 0===d||!c||b-d>6e5?null:{kind:"added",requestedAtMs:d,agents:c}:null}(JSON.parse((0,e.readFileSync)(c,"utf8")),a.requestedAtMs)}catch{d=null}let i=function(a,b){let c,d;if(!a)return b;if("added"===a.kind&&"added"===b.kind)return{kind:"added",requestedAtMs:b.requestedAtMs,agents:[...new Set([...a.agents,...b.agents])]};let e=[a,b].flatMap(a=>"user"===a.kind?[a.sinceMs]:[]),f=(c=a.agents,d=b.agents,void 0===c||void 0===d?void 0:[...new Set([...c,...d])]);return{kind:"user",sinceMs:Math.min(...e),requestedAtMs:b.requestedAtMs,...f?{agents:f}:{}}}(d,a);(0,g.f)(c,i)}({kind:"added",agents:[...a],requestedAtMs:c})}catch(a){return(0,l.g)(`could not write the backfill request for re-added agents: ${a instanceof Error?a.message:String(a)}`),!1}}(c,function(){try{let a;return null!==((a=(0,A.d)().ingest)?{url:a.url,key:a.key}:null)&&!0===(0,A.s)().collector.sessions}catch{return!1}}());try{(0,A.t)({agents:d})}catch(c){let b=c instanceof Error?c.message:String(c);return k.caution("installed"===a?`Couldn't record ${n} as traced (${b}), so ${p} may remove ${o?"its":"their"} hooks again.`:`Couldn't record ${n} as no longer traced (${b}), so ${p} may add ${o?"its":"their"} hooks back.`)}return k.ok("installed"===a?`${n} ${o?"is":"are"} traced again, so ${p} keeps ${o?"its":"their"} hooks.`:`${n} ${o?"is":"are"} no longer traced, so ${p} won't add ${o?"its":"their"} hooks back.`)}let D=new Set(u.H.map(a=>a.name));function E(a,b){return s.p.getSettingsPath(a,b)}function F(a){let b=[],c=[],d=[],e=[];try{e=(0,y.V)().packs}catch{}let f=(a,b)=>e.filter(b=>null===a||b.id===a).filter(a=>a.policies.some(a=>a.name===b)).map(a=>({packId:a.id,packVersion:a.version,name:b,disabledKey:`pack:${a.id}@${a.version}:${b}`}));for(let e of a){let a=f(null,e);if(1===a.length){c.push(a[0]);continue}if(a.length>1)throw new x(`"${e}" is declared by ${a.length} installed packs.
2
2
  Name the one you mean:
3
3
  `+a.map(a=>` \`${a.packId}:${a.name}\``).join("\n"));if(D.has(e)){b.push(e);continue}let g=e.lastIndexOf(":"),h=g>0?{packId:e.slice(0,g),name:e.slice(g+1)}:null,i=h?f(h.packId,h.name):f(null,e);if(1===i.length){c.push(i[0]);continue}if(i.length>1)throw new x(`"${e}" is declared by ${i.length} installed packs.
4
4
  Name the one you mean:
@@ -12,6 +12,6 @@ Make sure the file calls \`customPolicies.add(...)\` at least once.`).join("\n
12
12
  `),process.exit(1)}console.log(`
13
13
  Validated ${a.length} custom hook(s) from ${d}: ${a.map(a=>a.name).join(", ")}`)}}(0,o.f)(S,b,c);let T=new Set(u.H.filter(a=>a.alwaysOn).map(a=>a.name)),U=void 0===a?[]:K.filter(a=>!T.has(a));if(U.length>0)if((0,y.Q)()){for(let a of U)for(let b of(0,y.V)().packs)if(b.policies.some(b=>b.name===a)){(0,k.g)(b.id,a,!0);break}}else try{await (0,k.I)(k.w,{only:U})}catch(a){console.log((0,B.m)((0,B.w)(process.stdout)).caution(`Couldn't fetch the policy pack (${a instanceof Error?a.message:String(a)}). Once you are online:`,"failproofai policies add FailproofAI/policies"))}if(void 0!==a&&K.length>0){let a=K.length;console.log((0,B.m)((0,B.w)(process.stdout)).ok(`Enabled ${a} ${1===a?"policy":"policies"}: ${K.join(", ")}`))}if(i)console.log((0,B.m)((0,B.w)(process.stdout)).ok("Custom hooks path cleared."));else if(S.customPoliciesPaths?.length||S.customPoliciesPath){let a=S.customPoliciesPaths??[S.customPoliciesPath];for(let b of(0,B.m)((0,B.w)(process.stdout)).kv([["custom",a.join(", ")]]))console.log(b)}let V=[],W=null;for(let a of M){let d=(0,s.B)(a);if("codex"===a&&"user"===b){let b=(0,t.i)((0,s.D)(P));if(b.ok){let f=d.getSettingsPath("user",c);(0,e.existsSync)(f)&&d.removeHooksFromFile(f),V.push({cli:a,path:b.path});continue}W=b}let f=(0,s.r)(d,b,c);try{for(let c of f){d.prepareInstall?.(c);let e=d.readSettings(c);d.writeHookEntries(e,P,b),d.writeSettings(c,e),V.push({cli:a,path:c})}}catch(d){let c=d instanceof Error&&/EACCES|EPERM/.test(d.message)?"permission_denied":d instanceof Error&&/ENOENT|ENOTDIR/.test(d.message)?"path_not_found":"write_error";try{await (0,m.f)((0,n._)(),"hook_write_failed",{cli:a,scope:b,error_type:c})}catch{}throw d}}try{let a=new Set(K),c=K.filter(a=>!R.has(a)),e=[...R].filter(b=>!a.has(b)),f=(0,n._)();if(await (0,m.f)(f,"hooks_installed",{scope:b,cli:M,cli_count:M.length,policies:K,policy_count:K.length,policies_added:c,policies_removed:e,...g?{source:g}:{},platform:(0,q.platform)(),arch:(0,q.arch)(),os_release:(0,q.release)(),hostname_hash:(0,n.F)((0,q.hostname)()),has_custom_hooks_path:!!(S.customPoliciesPaths?.length||S.customPoliciesPath),has_policy_params:!!(S.policyParams&&Object.keys(S.policyParams).length>0),param_policy_names:S.policyParams?Object.keys(S.policyParams):[],command_format:"project"===b?"npx":"absolute"}),d){let a=new Set(u.H.filter(a=>a.beta).map(a=>a.name)),c=K.filter(b=>a.has(b));c.length>0&&await (0,m.f)(f,"beta_policies_installed",{scope:b,cli:M,beta_count:c.length,beta_policy_names:c,...g?{source:g}:{}})}}catch{}let X=(0,B.m)((0,B.w)(process.stdout));for(let{cli:a,path:c}of V){let d=(0,s.B)(a);for(let e of(console.log(X.ok("hermes"===a?`${d.displayName} plugin installed (8 hooks, ${b} scope).`:`${d.displayName} hooks installed (${d.eventTypes.length} events, ${b} scope).`)),X.kv([["settings",c]])))console.log(e)}for(let a of X.kv("project"===b?[["command","npx -y failproofai"]]:[["binary",P]]))console.log(a);if("project"===b&&console.log(`${B.J}This file can be committed to git: it has no machine-specific paths.`),W&&!W.ok&&(("conflict"===W.reason||"unreadable"===W.reason||"write-failed"===W.reason)&&console.log(X.caution(`Couldn't add the Codex hooks to ${W.path}: ${W.detail??W.reason}.`)),"untrusted"===(0,t.c)().kind))for(let a of X.notice("caution",t.s))console.log(a);let Y=(I=r.F,L=new Set,I.filter(a=>{let b=E(a,c);return!L.has(b)&&(L.add(b),!0)})).filter(a=>a!==b).filter(a=>H(a,c));if(Y.length>0){let a=Y.map(a=>`${a} (${function(a){switch(a){case"user":return"~/.claude/settings.json";case"project":return"{cwd}/.claude/settings.json";case"local":return"{cwd}/.claude/settings.local.json"}}(a)})`).join(", ");console.log(X.caution(`Hooks are also installed at ${a}, so each policy may run twice.`,`failproofai policies --uninstall --scope ${Y[0]}`));try{await (0,m.f)((0,n._)(),"multi_scope_warning_shown",{new_scope:b,existing_scopes:Y,cli:M})}catch{}}if(A){let a=C("installed",V.map(a=>a.cli));a&&console.log(a)}}async function K(a,b="user",c,d){let f=a=>{d?.silent||console.log(a)},g="all"===b?"user":b,h=d?.cli&&d.cli.length>0?[...new Set(d.cli)]:["claude"];if(d?.removeCustomHooks){let a=(0,o.Z)(g,c);delete a.customPoliciesPath,delete a.customPoliciesPaths,(0,o.f)(a,g,c),f("Custom hooks path cleared.")}if(a&&a.length>0&&(1!==a.length||"all"!==a[0])){let b=F(a);G(b.packs,!1,g,c);var i=a=b.builtins;let d=new Set(u.H.filter(a=>a.alwaysOn).map(a=>a.name)),e=i.filter(a=>d.has(a));if(e.length>0)throw new x(`Cannot disable: ${e.join(", ")}
14
14
  It stops an agent from switching failproofai off, so it is always on.`);if(b.packs.length>0&&0===a.length)return}if(a&&a.length>0&&(1!==a.length||"all"!==a[0])){let e=(0,o.Z)(g,c),i=new Set(a),j=e.enabledPolicies.filter(a=>!i.has(a)),k=a.filter(a=>!e.enabledPolicies.includes(a));k.length>0&&f(`Warning: policy(ies) not currently enabled: ${k.join(", ")}`);let{policyParams:l,...p}=e,r=l?Object.fromEntries(Object.entries(l).filter(([a])=>!i.has(a))):null,s={...p,enabledPolicies:j,...r&&Object.keys(r).length>0?{policyParams:r}:{}};(0,o.f)(s,g,c);try{let c=(0,n._)(),f=a.filter(a=>e.enabledPolicies.includes(a));await (0,m.f)(c,"hooks_removed",{scope:b,cli:h,removal_mode:d?.betaOnly?"beta_policies":"policies",beta_only:d?.betaOnly??!1,policies_removed:f,removed_count:f.length,...d?.source?{source:d.source}:{},platform:(0,q.platform)(),arch:(0,q.arch)(),os_release:(0,q.release)(),hostname_hash:(0,n.F)((0,q.hostname)())})}catch{}f(`Disabled ${a.length-k.length} policy(ies).`),f(`Remaining: ${j.length>0?j.join(", "):"(none)"}`);return}let j=(0,o.Z)(g,c),k=()=>{if(!d?.syncAgentSelection||"user"!==b&&"all"!==b)return;let a=C("removed",h.filter(a=>"all"===b||(0,s.B)(a).scopes.includes("user")));a&&f(a)},l=0,p=!1;for(let a of h){let d=(0,s.B)(a);for(let g of"all"===b?[...d.scopes]:d.scopes.includes(b)?[b]:[]){let i=0;if("codex"===a&&"user"===g){let a=(0,t.g)();if("removed"===a.status){if(i=a.hooks,"all"!==b)for(let b of(f((0,B.m)((0,B.w)(process.stdout)).ok(`Removed ${a.hooks} failproofai ${1===a.hooks?"hook":"hooks"} from Codex's system config.`)),(0,B.m)((0,B.w)(process.stdout)).kv([["settings",a.path]])))f(b)}else if("failed"===a.status)for(let b of(0,B.m)((0,B.w)(process.stdout)).notice("caution",`failproofai's Codex hooks are still in ${a.path}: ${a.reason}.
15
- Run \`sudo -v\`, then this command again.`))f(b)}let j=(0,s.r)(d,g,c),k="hermes"===a?j:j.filter(a=>(0,e.existsSync)(a));if(0===k.length){if(l+=i,i>0)continue;"all"!==b&&1===h.length&&(f((0,B.m)((0,B.w)(process.stdout)).ok("No settings file found, so there is nothing to remove.")),p=!0);continue}let m=i;for(let a of k){let c=d.removeHooksFromFile(a);if(m+=c,c>0&&"all"!==b)for(let b of(f((0,B.m)((0,B.w)(process.stdout)).ok(`Removed ${c} failproofai ${1===c?"hook":"hooks"} from ${d.displayName} settings.`)),(0,B.m)((0,B.w)(process.stdout)).kv([["settings",a]])))f(b)}if(0===m&&"all"!==b&&1===h.length){f((0,B.m)((0,B.w)(process.stdout)).ok("No hooks found in settings, so there is nothing to remove.")),p=!0;continue}l+=m}}if(p&&0===l)return void k();if("all"===b)for(let a of(f((0,B.m)((0,B.w)(process.stdout)).ok(`Removed ${l} failproofai ${1===l?"hook":"hooks"} from every scope.`)),h)){let b=(0,s.B)(a);for(let a of b.scopes)for(let d of(0,s.r)(b,a,c))f(`${B.J}${b.displayName}, ${a}: ${d}`)}try{let a=(0,n._)();await (0,m.f)(a,"hooks_removed",{scope:b,cli:h,removal_mode:"hooks",policies_removed:j.enabledPolicies,removed_count:l,...d?.source?{source:d.source}:{},platform:(0,q.platform)(),arch:(0,q.arch)(),os_release:(0,q.release)(),hostname_hash:(0,n.F)((0,q.hostname)())})}catch{}if("all"===b)for(let a of r.F){let b=(0,o.Z)(a,c);if(b.enabledPolicies.length>0||b.customPoliciesPaths?.length||b.customPoliciesPath||b.policyParams){let{customPoliciesPath:d,customPoliciesPaths:e,policyParams:f,...g}=b;(0,o.f)({...g,enabledPolicies:[]},a,c)}}else if(!r.F.some(a=>H(a,c))){let{customPoliciesPath:a,customPoliciesPaths:b,policyParams:d,...e}=(0,o.Z)(g,c);(0,o.f)({...e,enabledPolicies:[]},g,c)}k()}var L=a.i(24282),M=a.i(12714);async function N(a,b){let c=process.env.FAILPROOFAI_LAUNCH_CWD||process.cwd(),d=(0,f.resolve)((0,o.Y)(c),".failproofai","policies"),e=(0,h.E)(),g=[];for(let{scope:c,dir:h}of[{scope:"project",dir:d},...e===d?[]:[{scope:"user",dir:e}]]){let d=[];try{d=(0,v.discoverPolicyFiles)(h)}catch{continue}for(let e of d){if(b.has(e))continue;let d=[];try{d=(await O(e)).map(b=>{let d=(0,v.conventionPolicyId)(c,(0,f.basename)(e),b.name);return{...b,id:d,enabled:!a.has(d)}})}catch{}g.push({scope:c,file:(0,f.basename)(e),path:e,policies:d})}}return g}async function O(a){if(!(0,e.existsSync)(a))return[];let b=await (0,M.readFile)(a,"utf-8"),c=[],d=b.split(/customPolicies\.add\s*\(/);for(let a=1;a<d.length;a++){let b=d[a],e=b.match(/name:\s*["'`]([^"'`]+)["'`]/);if(!e)continue;let f=b.match(/description:\s*["'`]([^"'`]+)["'`]/),g=b.match(/events:\s*\[([^\]]+)\]/),h=g?g[1].replace(/["'`\s]/g,"").split(",").filter(Boolean).join(", "):void 0;c.push({name:e[1],description:f?.[1],eventScope:h,id:"",enabled:!0})}return c}async function P(){let a=process.env.FAILPROOFAI_LAUNCH_CWD||process.cwd(),b=(0,o.q)(a),c=new Set(b.disabledCustomPolicies??[]),d=r.F.filter(a=>H(a)),e=E(d[0]??"user"),g=(0,s.u)().map(a=>({id:a.id,label:(0,L.A)(a.id),installed:a.hooksInstalledInSettings("user"),settingsPath:a.getSettingsPath("user"),detected:a.detectInstalled()})),h=[],i=[];try{let a=(0,y.V)();h=a.packs,i=a.errors}catch{}let j=[];for(let a of h){let d=a.enabled??a.policies.map(a=>a.name);for(let e of a.policies)j.push({name:e.name,description:e.description,category:e.category,defaultEnabled:e.defaultEnabled,beta:!1,enabled:d.includes(e.name)&&!c.has(`pack:${a.id}@${a.version}:${e.name}`),eventScope:function(a){let b=a.events?.join(", ")??"",c=a.toolNames?` \xb7 ${a.toolNames.join(", ")}`:"";return`${b}${c}`}(e.match),packId:a.id,packVersion:a.version,...e.params?{params:Object.fromEntries(Object.entries(e.params).map(([a,b])=>[a,{type:b.type,description:b.description,default:b.default}])),currentParams:function(a,b,c){if(!a)return;let d=a[`pack/${b}/${c}`];return d||(b.toLowerCase()===k.w.toLowerCase()?a[c]:void 0)}(b.policyParams,a.id,e.name)??{}}:{}})}let l=(0,o.W)(b),m=(0,o.Y)(a),n=l.map(a=>(0,f.resolve)(m,a)),p=(await Promise.all(n.map(async a=>{try{return(await O(a)).map(b=>{let d=(0,v.customPolicyId)(a,b.name);return{...b,id:d,enabled:!c.has(d)}})}catch{return[]}}))).flat(),q=await N(c,new Set(n)),t=h.map(a=>{let b=a.enabled??a.policies.map(a=>a.name);return{id:a.id,version:a.version,source:a.source,effect:a.effect,policies:a.policies.map(d=>({name:d.name,description:d.description,category:d.category,enabled:b.includes(d.name)&&!c.has(`pack:${a.id}@${a.version}:${d.name}`)}))}});for(let a of i)t.push({id:a.id??"(unnamed pack)",version:"",source:"",effect:"enforce",policies:[],error:a.reason});return{enabledPolicies:b.enabledPolicies,installedScopes:d,settingsPath:e,clis:g,policies:j,customPoliciesPaths:l.length?l:void 0,customPoliciesPath:1===l.length?l[0]:void 0,customPolicies:p.length?p:void 0,conventionPolicies:q,packs:t}}async function Q(a,b){let c=(0,o.E)(),d=new Set(c.enabledPolicies);b?d.add(a):d.delete(a),(0,o.H)({...c,enabledPolicies:[...d]});try{let c=(0,n._)();await (0,m.f)(c,"policy_toggled",{policy_name:a,enabled:b,action:b?"enable":"disable",source:"web"})}catch{}}async function R(a,b){if(!a.startsWith("custom:")&&!a.startsWith("convention:"))throw Error("Invalid custom policy ID");let c=process.env.FAILPROOFAI_LAUNCH_CWD||process.cwd();if(b){for(let b of r.F){let d=(0,o.Z)(b,c);if(!d.disabledCustomPolicies?.includes(a))continue;let e=d.disabledCustomPolicies.filter(b=>b!==a),f={...d,disabledCustomPolicies:e};e.length||delete f.disabledCustomPolicies,(0,o.f)(f,b,c)}return}let d=(0,o.E)(),e=new Set(d.disabledCustomPolicies??[]);e.add(a);let f={...d,disabledCustomPolicies:[...e]};e.size||delete f.disabledCustomPolicies,(0,o.H)(f)}async function S(a,b){let c=a.trim();if(!c)return{ok:!1,error:"Enter a pack source, for example acme/ops"};try{let a=await (0,k.z)(c,b??{});return{ok:!0,id:a.id,version:a.version,enabled:a.enabled,available:a.available}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function T(){try{let a=await (0,k.I)(k.w);return{ok:!0,id:a.id,version:a.version,enabled:a.enabled,available:a.available}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function U(a){let b;try{b=(0,k.R)(a)}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}return b?{ok:!0,id:b}:{ok:!1,error:`No installed pack with id ${a}`}}async function V(a,b,c){let d=(0,k.g)(a,b,c);if(!d.ok)return{ok:!1,error:d.reason};if(c){let c=(0,y.V)().packs.find(b=>b.id===a);if(c){let a=`pack:${c.id}@${c.version}:${b}`,d=(0,o.E)(),e=(d.disabledCustomPolicies??[]).filter(b=>b!==a);if(e.length!==(d.disabledCustomPolicies??[]).length){let{disabledCustomPolicies:a,...b}=d;(0,o.H)(e.length>0?{...b,disabledCustomPolicies:e}:b)}}}return{ok:!0,id:a}}async function W(a){let b=a.trim();if(!b)return{ok:!1,error:"Enter a pack source, for example acme/ops"};try{let a=await (0,k.k)(b);return{ok:!0,id:a.id,version:a.version,source:a.source,effect:a.effect,policies:a.policies.map(a=>({name:a.name,description:a.description,category:a.category,defaultEnabled:a.defaultEnabled})),...a.semantic.length>0?{semantic:a.semantic.map(a=>a.name)}:{},...a.minCliVersion?{minCliVersion:a.minCliVersion}:{}}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function X(a="user",b){let c=(0,o.E)(),d=c.enabledPolicies.length>0?c.enabledPolicies:u.H.filter(a=>a.defaultEnabled&&!a.beta).map(a=>a.name),e=b&&b.length>0?b:(0,s.w)(),f=e.length>0?e:["claude"];await I(d,a,void 0,!1,"web",void 0,!1,f,{syncAgentSelection:!0})}async function Y(a="user",b){let c=b&&b.length>0?b:(0,s.w)(),d=c.length>0?c:["claude"];await K(void 0,a,void 0,{source:"web",cli:d,syncAgentSelection:!0})}async function Z(a,b){let c=(0,o.E)(),d={...c.policyParams??{},[a]:b};(0,o.H)({...c,policyParams:d});try{let c=(0,n._)();await (0,m.f)(c,"policy_params_updated",{policy_name:a,param_keys:Object.keys(b),source:"web"})}catch{}}(0,i.ensureServerEntryExports)([P]),(0,d.registerServerReference)(P,"00895d4b3cd614451111010c4743e2ad2b811e5c2c",null),(0,i.ensureServerEntryExports)([Q,R]),(0,d.registerServerReference)(Q,"600a9c90e6e2912627713fae6a1b8b3dc0435d318f",null),(0,d.registerServerReference)(R,"60610fdb7d8fb2a361b4bc0d05a60a7b15ebad2094",null),(0,i.ensureServerEntryExports)([S,T,U,V,W]),(0,d.registerServerReference)(S,"60b6e8e7090c5c8590f764abbab3b30a2eede0ae22",null),(0,d.registerServerReference)(T,"001cb3a8cce3e879e730a681bbdce4baed8c03e613",null),(0,d.registerServerReference)(U,"40a74110c39998cb132b4d90657de1626f06005548",null),(0,d.registerServerReference)(V,"7001d320c6c3fef3b3649902714c0cf0288a81c1e2",null),(0,d.registerServerReference)(W,"40ec2c7861d3db95ade86663849449ccf76ab587e8",null),(0,i.ensureServerEntryExports)([X,Y]),(0,d.registerServerReference)(X,"608a0187039113b0496b566969083088c722196ffb",null),(0,d.registerServerReference)(Y,"6076719922358ae20ca97754eef7fd0f65124a5053",null),(0,i.ensureServerEntryExports)([Z]),(0,d.registerServerReference)(Z,"6093da8b551f35f73b8f46534d796e87a0108db474",null),a.s(["001cb3a8cce3e879e730a681bbdce4baed8c03e613",0,T,"0048b2349d5d15713f07f749a4aa9714eb8407cfbf",0,j,"00817d93b66813c1f16544147af118f6c81d0f496f",()=>b.f,"00895d4b3cd614451111010c4743e2ad2b811e5c2c",0,P,"406d4e7dd09da534fa3e96b2da8d244957c81e7245",()=>c.x,"40a74110c39998cb132b4d90657de1626f06005548",0,U,"40ec2c7861d3db95ade86663849449ccf76ab587e8",0,W,"60130bb15961cded68b8676eee6422be45b28ff640",()=>c.m,"60610fdb7d8fb2a361b4bc0d05a60a7b15ebad2094",0,R,"6076719922358ae20ca97754eef7fd0f65124a5053",0,Y,"608a0187039113b0496b566969083088c722196ffb",0,X,"6093da8b551f35f73b8f46534d796e87a0108db474",0,Z,"60b6e8e7090c5c8590f764abbab3b30a2eede0ae22",0,S,"7001d320c6c3fef3b3649902714c0cf0288a81c1e2",0,V],73338)}];
15
+ Run \`sudo -v\`, then this command again.`))f(b)}let j=(0,s.r)(d,g,c),k="hermes"===a?j:j.filter(a=>(0,e.existsSync)(a));if(0===k.length){if(l+=i,i>0)continue;"all"!==b&&1===h.length&&(f((0,B.m)((0,B.w)(process.stdout)).ok("No settings file found, so there is nothing to remove.")),p=!0);continue}let m=i;for(let a of k){let c=d.removeHooksFromFile(a);if(m+=c,c>0&&"all"!==b)for(let b of(f((0,B.m)((0,B.w)(process.stdout)).ok(`Removed ${c} failproofai ${1===c?"hook":"hooks"} from ${d.displayName} settings.`)),(0,B.m)((0,B.w)(process.stdout)).kv([["settings",a]])))f(b)}if(0===m&&"all"!==b&&1===h.length){f((0,B.m)((0,B.w)(process.stdout)).ok("No hooks found in settings, so there is nothing to remove.")),p=!0;continue}l+=m}}if(p&&0===l)return void k();if("all"===b)for(let a of(f((0,B.m)((0,B.w)(process.stdout)).ok(`Removed ${l} failproofai ${1===l?"hook":"hooks"} from every scope.`)),h)){let b=(0,s.B)(a);for(let a of b.scopes)for(let d of(0,s.r)(b,a,c))f(`${B.J}${b.displayName}, ${a}: ${d}`)}try{let a=(0,n._)();await (0,m.f)(a,"hooks_removed",{scope:b,cli:h,removal_mode:"hooks",policies_removed:j.enabledPolicies,removed_count:l,...d?.source?{source:d.source}:{},platform:(0,q.platform)(),arch:(0,q.arch)(),os_release:(0,q.release)(),hostname_hash:(0,n.F)((0,q.hostname)())})}catch{}if("all"===b)for(let a of r.F){let b=(0,o.Z)(a,c);if(b.enabledPolicies.length>0||b.customPoliciesPaths?.length||b.customPoliciesPath||b.policyParams){let{customPoliciesPath:d,customPoliciesPaths:e,policyParams:f,...g}=b;(0,o.f)({...g,enabledPolicies:[]},a,c)}}else if(!r.F.some(a=>H(a,c))){let{customPoliciesPath:a,customPoliciesPaths:b,policyParams:d,...e}=(0,o.Z)(g,c);(0,o.f)({...e,enabledPolicies:[]},g,c)}k()}var L=a.i(24282),M=a.i(12714);async function N(a,b){let c=process.env.FAILPROOFAI_LAUNCH_CWD||process.cwd(),d=(0,f.resolve)((0,o.Y)(c),".failproofai","policies"),e=(0,h.E)(),g=[];for(let{scope:c,dir:h}of[{scope:"project",dir:d},...e===d?[]:[{scope:"user",dir:e}]]){let d=[];try{d=(0,v.discoverPolicyFiles)(h)}catch{continue}for(let e of d){if(b.has(e))continue;let d=[];try{d=(await O(e)).map(b=>{let d=(0,v.conventionPolicyId)(c,(0,f.basename)(e),b.name);return{...b,id:d,enabled:!a.has(d)}})}catch{}g.push({scope:c,file:(0,f.basename)(e),path:e,policies:d})}}return g}async function O(a){if(!(0,e.existsSync)(a))return[];let b=await (0,M.readFile)(a,"utf-8"),c=[],d=b.split(/customPolicies\.add\s*\(/);for(let a=1;a<d.length;a++){let b=d[a],e=b.match(/name:\s*["'`]([^"'`]+)["'`]/);if(!e)continue;let f=b.match(/description:\s*["'`]([^"'`]+)["'`]/),g=b.match(/events:\s*\[([^\]]+)\]/),h=g?g[1].replace(/["'`\s]/g,"").split(",").filter(Boolean).join(", "):void 0;c.push({name:e[1],description:f?.[1],eventScope:h,id:"",enabled:!0})}return c}async function P(){let a=process.env.FAILPROOFAI_LAUNCH_CWD||process.cwd(),b=(0,o.q)(a),c=new Set(b.disabledCustomPolicies??[]),d=r.F.filter(a=>H(a)),e=E(d[0]??"user"),g=(0,s.u)().map(a=>({id:a.id,label:(0,L.A)(a.id),installed:a.hooksInstalledInSettings("user"),settingsPath:a.getSettingsPath("user"),detected:a.detectInstalled()})),h=[],i=[];try{let a=(0,y.V)();h=a.packs,i=a.errors}catch{}let j=[];for(let a of h){let d=a.enabled??a.policies.map(a=>a.name);for(let e of a.policies)j.push({name:e.name,description:e.description,category:e.category,defaultEnabled:e.defaultEnabled,beta:!1,enabled:d.includes(e.name)&&!c.has(`pack:${a.id}@${a.version}:${e.name}`),eventScope:function(a){let b=a.events?.join(", ")??"",c=a.toolNames?` \xb7 ${a.toolNames.join(", ")}`:"";return`${b}${c}`}(e.match),packId:a.id,packVersion:a.version,...e.params?{params:Object.fromEntries(Object.entries(e.params).map(([a,b])=>[a,{type:b.type,description:b.description,default:b.default}])),currentParams:function(a,b,c){if(!a)return;let d=a[`pack/${b}/${c}`];return d||(b.toLowerCase()===k.w.toLowerCase()?a[c]:void 0)}(b.policyParams,a.id,e.name)??{}}:{}})}let l=(0,o.W)(b),m=(0,o.Y)(a),n=l.map(a=>(0,f.resolve)(m,a)),p=(await Promise.all(n.map(async a=>{try{return(await O(a)).map(b=>{let d=(0,v.customPolicyId)(a,b.name);return{...b,id:d,enabled:!c.has(d)}})}catch{return[]}}))).flat(),q=await N(c,new Set(n)),t=h.map(a=>{let b=a.enabled??a.policies.map(a=>a.name);return{id:a.id,version:a.version,source:a.source,effect:a.effect,policies:a.policies.map(d=>({name:d.name,description:d.description,category:d.category,enabled:b.includes(d.name)&&!c.has(`pack:${a.id}@${a.version}:${d.name}`)}))}});for(let a of i)t.push({id:a.id??"(unnamed pack)",version:"",source:"",effect:"enforce",policies:[],error:a.reason});return{enabledPolicies:b.enabledPolicies,installedScopes:d,settingsPath:e,clis:g,policies:j,customPoliciesPaths:l.length?l:void 0,customPoliciesPath:1===l.length?l[0]:void 0,customPolicies:p.length?p:void 0,conventionPolicies:q,packs:t}}async function Q(a,b){let c=(0,o.E)(),d=new Set(c.enabledPolicies);b?d.add(a):d.delete(a),(0,o.H)({...c,enabledPolicies:[...d]});try{let c=(0,n._)();await (0,m.f)(c,"policy_toggled",{policy_name:a,enabled:b,action:b?"enable":"disable",source:"web"})}catch{}}async function R(a,b){if(!a.startsWith("custom:")&&!a.startsWith("convention:"))throw Error("Invalid custom policy ID");let c=process.env.FAILPROOFAI_LAUNCH_CWD||process.cwd();if(b){for(let b of r.F){let d=(0,o.Z)(b,c);if(!d.disabledCustomPolicies?.includes(a))continue;let e=d.disabledCustomPolicies.filter(b=>b!==a),f={...d,disabledCustomPolicies:e};e.length||delete f.disabledCustomPolicies,(0,o.f)(f,b,c)}return}let d=(0,o.E)(),e=new Set(d.disabledCustomPolicies??[]);e.add(a);let f={...d,disabledCustomPolicies:[...e]};e.size||delete f.disabledCustomPolicies,(0,o.H)(f)}async function S(a,b){let c=a.trim();if(!c)return{ok:!1,error:"Enter a pack source, for example acme/ops"};try{let a=await (0,k.z)(c,b??{});return{ok:!0,id:a.id,version:a.version,enabled:a.enabled,available:a.available}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function T(){try{let a=await (0,k.I)(k.w);return{ok:!0,id:a.id,version:a.version,enabled:a.enabled,available:a.available}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function U(a){let b;try{b=(0,k.R)(a)}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}return b?{ok:!0,id:b}:{ok:!1,error:`No installed pack with id ${a}`}}async function V(a,b,c){let d=(0,k.g)(a,b,c);if(!d.ok)return{ok:!1,error:d.reason};if(c){let c=(0,y.V)().packs.find(b=>b.id===a);if(c){let a=`pack:${c.id}@${c.version}:${b}`,d=(0,o.E)(),e=(d.disabledCustomPolicies??[]).filter(b=>b!==a);if(e.length!==(d.disabledCustomPolicies??[]).length){let{disabledCustomPolicies:a,...b}=d;(0,o.H)(e.length>0?{...b,disabledCustomPolicies:e}:b)}}}return{ok:!0,id:a}}async function W(a){let b=a.trim();if(!b)return{ok:!1,error:"Enter a pack source, for example acme/ops"};try{let a=await (0,k.k)(b);return{ok:!0,id:a.id,version:a.version,source:a.source,effect:a.effect,policies:a.policies.map(a=>({name:a.name,description:a.description,category:a.category,defaultEnabled:a.defaultEnabled})),...a.semantic.length>0?{semantic:a.semantic.map(a=>a.name)}:{},...a.minCliVersion?{minCliVersion:a.minCliVersion}:{}}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function X(a="user",b){let c=(0,o.E)(),d=c.enabledPolicies.length>0?c.enabledPolicies:u.H.filter(a=>a.defaultEnabled&&!a.beta).map(a=>a.name),e=b&&b.length>0?b:(0,s.w)(),f=e.length>0?e:["claude"];await I(d,a,void 0,!1,"web",void 0,!1,f,{syncAgentSelection:!0})}async function Y(a="user",b){let c=b&&b.length>0?b:(0,s.w)(),d=c.length>0?c:["claude"];await K(void 0,a,void 0,{source:"web",cli:d,syncAgentSelection:!0})}async function Z(a,b){let c=(0,o.E)(),d={...c.policyParams??{},[a]:b};(0,o.H)({...c,policyParams:d});try{let c=(0,n._)();await (0,m.f)(c,"policy_params_updated",{policy_name:a,param_keys:Object.keys(b),source:"web"})}catch{}}(0,i.ensureServerEntryExports)([P]),(0,d.registerServerReference)(P,"004145ebd49b5d18dba71548f4b6b07a797fa0e1de",null),(0,i.ensureServerEntryExports)([Q,R]),(0,d.registerServerReference)(Q,"60234ed64eb11ccd6ac737f2543fb5976a0e8824c2",null),(0,d.registerServerReference)(R,"60b28b9d290d8a82cc460b2e532b045a433cf81bdb",null),(0,i.ensureServerEntryExports)([S,T,U,V,W]),(0,d.registerServerReference)(S,"60cdb09b0c02694cf4f16e8a1305adc0f62e352a45",null),(0,d.registerServerReference)(T,"0032cfa2ccaa3a2ed47f837096c01c34cb8d00a4d7",null),(0,d.registerServerReference)(U,"405e26f69a79aa60d6c8f8f416cba4a66e5b63b9ab",null),(0,d.registerServerReference)(V,"709f017fa941fd26dc2fd74cfd9766b03a5aee1398",null),(0,d.registerServerReference)(W,"40ed54eb81f1e3b00fa8324718e84aa7db557f8ef7",null),(0,i.ensureServerEntryExports)([X,Y]),(0,d.registerServerReference)(X,"609560002cdd5e1a1c5d5cb8cf8d6842f6f19c8c94",null),(0,d.registerServerReference)(Y,"608edf5a298f5d8cdcb906e6f9740d0bfddee50697",null),(0,i.ensureServerEntryExports)([Z]),(0,d.registerServerReference)(Z,"60cf99e6da55d25519b65a974525baf47fd6b00da6",null),a.s(["0032cfa2ccaa3a2ed47f837096c01c34cb8d00a4d7",0,T,"004145ebd49b5d18dba71548f4b6b07a797fa0e1de",0,P,"006ccaa5b797e8c4bed7276f22bca7093b374a7c2d",0,j,"00de9ed6392ff068792d68e272f943ca9a05f589fa",()=>b.f,"405e26f69a79aa60d6c8f8f416cba4a66e5b63b9ab",0,U,"40620aef35573c0f70760dade2911af54d7bb6bdcd",()=>c.x,"40ed54eb81f1e3b00fa8324718e84aa7db557f8ef7",0,W,"601da5259db8771c5daa055322e9f6abf5b570520a",()=>c.m,"608edf5a298f5d8cdcb906e6f9740d0bfddee50697",0,Y,"609560002cdd5e1a1c5d5cb8cf8d6842f6f19c8c94",0,X,"60b28b9d290d8a82cc460b2e532b045a433cf81bdb",0,R,"60cdb09b0c02694cf4f16e8a1305adc0f62e352a45",0,S,"60cf99e6da55d25519b65a974525baf47fd6b00da6",0,Z,"709f017fa941fd26dc2fd74cfd9766b03a5aee1398",0,V],73338)}];
16
16
 
17
17
  //# sourceMappingURL=_next-internal_server_app_policies_page_actions_1sp2-yo5_vm5f.js.map