failproofai 1.0.12 → 1.0.13-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 (306) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +13 -13
  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 +2 -2
  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 -1
  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 +2 -2
  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 +4 -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 +6 -5
  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 +27 -26
  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 +4 -3
  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 +6 -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 -5
  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 -5
  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 +6 -5
  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 +4 -3
  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 +2 -2
  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 +7 -6
  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 +2 -2
  52. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  53. package/.next/standalone/.next/server/app/page.js +6 -5
  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 +2 -2
  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 +5 -4
  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 +2 -2
  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 +21 -20
  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 +2 -2
  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 +10 -9
  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 +2 -2
  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 +7 -6
  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 +2 -2
  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 +6 -5
  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]__0vt9i6fqinjne._.js → [externals]__1h83uo-b1b6-2._.js} +1 -1
  83. package/.next/standalone/.next/server/chunks/[externals]__214wn4wh2x79y._.js +3 -0
  84. package/.next/standalone/.next/server/chunks/{[externals]__1rlxpymm37wel._.js → [root-of-the-server]__031qp1lkow_kc._.js} +2 -2
  85. package/.next/standalone/.next/server/chunks/[root-of-the-server]__038kwryp970nh._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0_hsnj_a2mvl_._.js → [root-of-the-server]__03s1za0hn71yp._.js} +2 -2
  87. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0wg9dk8x8bnau._.js → [root-of-the-server]__07a0sa6fuw5_b._.js} +2 -2
  88. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08atcie7jzswm._.js +3 -0
  89. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08dchfudh2_4f._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0car70pylmvor._.js +3 -0
  91. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0spt0kv8azrpl._.js +1 -1
  92. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__12kq3x-h7t7i1._.js → [root-of-the-server]__0yvyp5b7jmlc4._.js} +2 -2
  93. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__02vous7mpi2xm._.js → [root-of-the-server]__145vo_drnuvas._.js} +2 -2
  94. package/.next/standalone/.next/server/chunks/{[externals]__0h0p9dmv_e7r7._.js → [root-of-the-server]__1a2d0ewycsp6k._.js} +2 -2
  95. package/.next/standalone/.next/server/chunks/{[externals]__1_407huhlmj1m._.js → [root-of-the-server]__1am_1tz0o0aqz._.js} +2 -2
  96. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__03i5o4a840guz._.js → [root-of-the-server]__1gxfzuvpyw30j._.js} +1 -1
  97. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1j6kfp0vzu5rw._.js +3 -0
  98. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1l0ayum_hqqsw._.js +3 -0
  99. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1lh8c0mmhdrbj._.js +3 -0
  100. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1o9rznwc0w7og._.js +3 -0
  101. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0f_4g-vazrvxv._.js → [root-of-the-server]__1o_622x0fglpr._.js} +1 -1
  102. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1oclamblhzhrf._.js +68 -0
  103. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1v1-l-83czzsr._.js +63 -0
  104. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1a5zkndjwlc13._.js → [root-of-the-server]__1wwi53kkqhnfi._.js} +1 -1
  105. package/.next/standalone/.next/server/chunks/{_1y590mjzpkbos._.js → _02sa8fcu9_9xo._.js} +2 -2
  106. package/.next/standalone/.next/server/chunks/_0tovk6q0miud6._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/_0trp3ycqv17cl._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/_1-2owkp-1_987._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/_13ltj8a9z92o8._.js +1 -1
  110. package/.next/standalone/.next/server/chunks/_15k37au70vjvg._.js +1 -1
  111. package/.next/standalone/.next/server/chunks/_18rfu4__wjhwb._.js +1 -1
  112. package/.next/standalone/.next/server/chunks/_1ek68lnh2daur._.js +2 -2
  113. package/.next/standalone/.next/server/chunks/_1fz8m31sndkcu._.js +1 -1
  114. package/.next/standalone/.next/server/chunks/_1ogwigfb0163w._.js +1 -1
  115. package/.next/standalone/.next/server/chunks/_1vslkoe35wok6._.js +1 -1
  116. package/.next/standalone/.next/server/chunks/node_modules_@opentelemetry_api_build_esm_index_0oo58a7rymoxh.js +3 -0
  117. package/.next/standalone/.next/server/chunks/node_modules_@opentelemetry_api_build_esm_index_1jp9ij0_ddtgk.js +3 -0
  118. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oigsgz07._.js +2 -2
  119. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p77cu37y._.js +2 -2
  120. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4vkpxxu7._.js +1 -1
  121. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ffu2-38y03ic._.js → [root-of-the-server]__021vebe-4il8s._.js} +1 -1
  122. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__075uro8t92s0_._.js +14 -0
  123. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08ch3staq3ejw._.js +1 -1
  124. package/.next/standalone/.next/server/chunks/ssr/{[externals]__12qr51qgrrt6o._.js → [root-of-the-server]__097i34ct1o88x._.js} +2 -2
  125. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0alpzjn3450sr._.js +3 -0
  126. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0aup10z2o8zc1._.js +3 -0
  127. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bigvy9xmv2ka._.js +1 -1
  128. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bioghlkjf7s7._.js +3 -0
  129. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__01j58mdcdw0vn._.js → [root-of-the-server]__0ed1zh4scn7-k._.js} +1 -1
  130. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0naevg4bcoh54._.js → [root-of-the-server]__0evgy902m9h5e._.js} +2 -2
  131. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h86bl2qf0k_o._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__167mipqmjprq5._.js → [root-of-the-server]__0mhtkwwx1pxcq._.js} +2 -2
  133. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nhm28v58ty9z._.js +3 -0
  134. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pia5h3p8re4c._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vse4qi496ol-._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__17r4zrwanhp6r._.js → [root-of-the-server]__0yb3u36xjy3b9._.js} +1 -1
  137. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0g8b0kyorya-t._.js → [root-of-the-server]__0ywj2u6ovfm_5._.js} +1 -1
  138. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-ey9fgesfbc0._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0zn1d4blhd3bu._.js → [root-of-the-server]__10v5cyxvj64j4._.js} +1 -1
  140. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15usvs-ms-0hf._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16gb3_92zvk5x._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__190xwrr5zrfi3._.js +3 -0
  143. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1avi2kypusyb_._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1vx7o8ukefudh._.js → [root-of-the-server]__1guwlpkyurdn9._.js} +1 -1
  145. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1k96jctukf65_._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1r7drlqli-ado._.js +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1sj-wn2jp6va5._.js +3 -0
  148. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1vofkb2oq7p7e._.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1s2-ck3k3rsoo._.js → [root-of-the-server]__20dt376-socef._.js} +1 -1
  150. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1lnfv02ucky7m._.js → [root-of-the-server]__2158020r_amn9._.js} +1 -1
  151. package/.next/standalone/.next/server/chunks/ssr/{_1d98fyfrcaqhy._.js → _0bc4f4quq6w47._.js} +2 -2
  152. package/.next/standalone/.next/server/chunks/ssr/_0eoura3_9gjb-._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/ssr/_0ouu886szh6yj._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/ssr/_0pedwblqdoh58._.js +1 -1
  155. package/.next/standalone/.next/server/chunks/ssr/_1_ozgifqv1ssi._.js +1 -1
  156. package/.next/standalone/.next/server/chunks/ssr/_1djqs9i27e4kg._.js +1 -1
  157. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo5_vm5f.js +2 -2
  158. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9snixb5fd-._.js +1 -1
  159. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47q0xq5w._.js +1 -1
  160. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x33jqb6._.js +1 -1
  161. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpcz0uxur._.js +1 -1
  162. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h47jmhhd._.js +1 -1
  163. package/.next/standalone/.next/server/chunks/ssr/{node_modules_09s4n108bqreq._.js → node_modules_0ptcnmeaxvd_a._.js} +22 -2
  164. package/.next/standalone/.next/server/chunks/ssr/node_modules_@opentelemetry_api_build_esm_index_0ntwr8lzj6p2i.js +3 -0
  165. package/.next/standalone/.next/server/chunks/ssr/{node_modules_html-to-image_es_index_0tqc05n832v7a.js → node_modules_html-to-image_es_index_1jwgv0pf-gy96.js} +1 -1
  166. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_0bz67659f5z-3._.js +32 -0
  167. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js +3 -3
  168. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0ocrceo0c9psx._.js +32 -0
  169. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1alv566ojmz5j._.js +32 -0
  170. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1khq67j4vo9y4._.js +3 -0
  171. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_shared_lib_0ftnv26hg1lry._.js +3 -0
  172. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0dagmbznysrc2._.js +1 -1
  173. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuznb72p7z._.js +2 -2
  174. package/.next/standalone/.next/server/chunks/ssr/package_json_[json]_cjs_013tntikdft59._.js +1 -1
  175. package/.next/standalone/.next/server/middleware-build-manifest.js +13 -13
  176. package/.next/standalone/.next/server/middleware.js +2 -2
  177. package/.next/standalone/.next/server/pages/404.html +1 -1
  178. package/.next/standalone/.next/server/pages/500.html +1 -1
  179. package/.next/standalone/.next/server/preview-props.json +3 -3
  180. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
  182. package/.next/standalone/.next/static/chunks/0cbom4-ijx_a_.js +1 -0
  183. package/.next/standalone/.next/static/chunks/0u5weo5jdn2s8.js +1 -0
  184. package/.next/standalone/.next/static/chunks/{0el9n3h9_zp5m.js → 18-icoqze51kl.js} +1 -1
  185. package/.next/standalone/.next/static/chunks/2d-u90dt4-8rd.js +6 -0
  186. package/.next/standalone/.next/static/chunks/2n-bzb7pxe7hu.js +1 -0
  187. package/.next/standalone/.next/static/chunks/{0umzct31duk5g.js → 2zc7lg-jq353g.js} +1 -1
  188. package/.next/standalone/.next/static/chunks/{27cavoc8paelg.js → 33djjf12bhcsv.js} +1 -1
  189. package/.next/standalone/.next/static/chunks/{0wobqgosirs8p.js → 38u_i3j5funpi.js} +1 -1
  190. package/.next/standalone/.next/static/chunks/3symuj7t4js-c.js +1 -0
  191. package/.next/standalone/.next/static/chunks/{1kduj74-715jh.js → 3vzut6zpdrvtx.js} +1 -1
  192. package/.next/standalone/.next/static/chunks/{063al_q720fkj.js → 3xgxl1s_in776.js} +2 -2
  193. package/.next/standalone/SECURITY.md +20 -4
  194. package/.next/standalone/fp-cloud-cli/CHANGELOG.md +15 -1
  195. package/.next/standalone/fp-cloud-cli/fp_cli/_version.py +1 -1
  196. package/.next/standalone/fp-cloud-cli/uv.lock +4 -4
  197. package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
  198. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  199. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  200. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +24 -24
  201. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +26 -26
  202. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +3 -3
  203. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +13 -13
  204. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  205. package/.next/standalone/node_modules/next/dist/server/app-render/app-render.js +41 -40
  206. package/.next/standalone/node_modules/next/dist/server/app-render/async-local-storage.js +1 -1
  207. package/.next/standalone/node_modules/next/dist/server/app-render/dynamic-rendering-validation.js +814 -0
  208. package/.next/standalone/node_modules/next/dist/server/app-render/dynamic-rendering.js +1 -799
  209. package/.next/standalone/node_modules/next/dist/server/base-server.js +39 -5
  210. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  211. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  212. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  213. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  214. package/.next/standalone/node_modules/next/dist/server/lib/dedupe-fetch.js +4 -43
  215. package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch-symbol.js +13 -0
  216. package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch.js +3 -7
  217. package/.next/standalone/node_modules/next/dist/server/lib/router-server.js +3 -3
  218. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js +77 -12
  219. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  220. package/.next/standalone/node_modules/next/dist/server/lib/trace/constants.js +12 -0
  221. package/.next/standalone/node_modules/next/dist/server/lib/trace/tracer.js +30 -14
  222. package/.next/standalone/node_modules/next/dist/server/next-server.js +10 -11
  223. package/.next/standalone/node_modules/next/dist/server/route-modules/pages/pages-handler.js +29 -23
  224. package/.next/standalone/node_modules/next/dist/server/route-modules/route-module.js +85 -8
  225. package/.next/standalone/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1 -1
  226. package/.next/standalone/node_modules/next/dist/server/web/adapter.js +124 -65
  227. package/.next/standalone/node_modules/next/dist/server/web/forward-trace-context.js +102 -0
  228. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  229. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  230. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  231. package/.next/standalone/node_modules/next/package.json +10 -10
  232. package/.next/standalone/node_modules/react/cjs/react.production.js +1 -1
  233. package/.next/standalone/node_modules/react/package.json +1 -1
  234. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
  235. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
  236. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +31 -27
  237. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +33 -27
  238. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +38 -30
  239. package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
  240. package/.next/standalone/node_modules/react-dom/package.json +2 -2
  241. package/.next/standalone/package.json +10 -10
  242. package/.next/standalone/sdk/python/CHANGELOG.md +8 -4
  243. package/.next/standalone/sdk/python/failproofai_sdk/evaluator/source.py +2 -2
  244. package/.next/standalone/sdk/python/pyproject.toml +2 -7
  245. package/.next/standalone/sdk/python/skill/references/frameworks.md +0 -15
  246. package/.next/standalone/sdk/python/tests/test_docs.py +1 -4
  247. package/.next/standalone/sdk/python/tests/test_evaluator_source.py +1 -1
  248. package/.next/standalone/sdk/python/tests/test_packaging.py +4 -7
  249. package/.next/standalone/sdk/python/tests/test_zero_dependencies.py +2 -13
  250. package/.next/standalone/sdk/python/uv.lock +43 -905
  251. package/.next/standalone/sdk/typescript/CHANGELOG.md +52 -0
  252. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +176 -68
  253. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +2 -2
  254. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +3 -3
  255. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +1 -1
  256. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +115 -98
  257. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +3 -3
  258. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +4 -4
  259. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +1 -1
  260. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package-lock.json +171 -149
  261. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package.json +5 -2
  262. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package-lock.json +27 -15
  263. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package.json +2 -1
  264. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/deno-npm.ts +1 -1
  265. package/.next/standalone/server.js +1 -1
  266. package/README.md +0 -6
  267. package/dist/cli.mjs +12 -11
  268. package/dist/worker.mjs +1 -1
  269. package/hermes-plugin/plugin.yaml +1 -1
  270. package/openclaw-plugin/daemon-client.js +254 -0
  271. package/openclaw-plugin/hooks.js +187 -0
  272. package/openclaw-plugin/index.js +17 -211
  273. package/package.json +10 -10
  274. package/scripts/sync-agent-cli-harnesses-prompt.md +26 -31
  275. package/src/hooks/enforcement-capability.ts +1 -1
  276. package/src/hooks/integrations.ts +5 -2
  277. package/.next/standalone/.codex/hooks.json +0 -76
  278. package/.next/standalone/.cursor/hooks.json +0 -47
  279. package/.next/standalone/.factory/hooks.json +0 -112
  280. package/.next/standalone/.next/server/chunks/[externals]__1x24dzcbbq6-g._.js +0 -3
  281. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0__a_je8fsn65._.js +0 -3
  282. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l-oi4gdtmlo5._.js +0 -3
  283. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t9ufnv5hi2hq._.js +0 -327
  284. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1aaw59g-5uty7._.js +0 -322
  285. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1hqpg6vgmfexv._.js +0 -3
  286. package/.next/standalone/.next/server/chunks/ssr/[externals]__0ilfh9mfnzsth._.js +0 -3
  287. package/.next/standalone/.next/server/chunks/ssr/[externals]__0ohnuzsaozaca._.js +0 -3
  288. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pwj2h2efe5f-._.js +0 -14
  289. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_0zuikgt2xho-v._.js +0 -271
  290. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_158jo-9mwvgad._.js +0 -291
  291. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_19r82zsxo2jj1._.js +0 -291
  292. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1dupwucoqt5qm._.js +0 -3
  293. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_shared_lib_03w27x2kh17_8._.js +0 -23
  294. package/.next/standalone/.next/static/chunks/0k7g_8x3o6gd-.js +0 -1
  295. package/.next/standalone/.next/static/chunks/12rug3jilwqzs.js +0 -1
  296. package/.next/standalone/.next/static/chunks/2701amhrbsbot.js +0 -1
  297. package/.next/standalone/.next/static/chunks/2ve23a7keupjw.js +0 -1
  298. package/.next/standalone/.next/static/chunks/3bv6xaoitjpnh.js +0 -6
  299. package/.next/standalone/.opencode/opencode.json +0 -4
  300. package/.next/standalone/.opencode/plugins/failproofai.mjs +0 -210
  301. package/.next/standalone/.pi/settings.json +0 -5
  302. package/.next/standalone/node_modules/react/cjs/react.development.js +0 -1330
  303. package/scripts/dev-hook.mjs +0 -333
  304. /package/.next/standalone/.next/static/{D7LY1YSrw96ZxKSpxxrFw → 1n2dyfTQb0MDajeqlipJy}/_buildManifest.js +0 -0
  305. /package/.next/standalone/.next/static/{D7LY1YSrw96ZxKSpxxrFw → 1n2dyfTQb0MDajeqlipJy}/_clientMiddlewareManifest.js +0 -0
  306. /package/.next/standalone/.next/static/{D7LY1YSrw96ZxKSpxxrFw → 1n2dyfTQb0MDajeqlipJy}/_ssgManifest.js +0 -0
@@ -230,6 +230,6 @@ export default async function failproofaiPlugin({ client, directory }) {
230
230
  },
231
231
  };
232
232
  }
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=aa(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=aa(d);if(!(0,c.existsSync)(b))return!1;return(0,c.readFileSync)(b,"utf8").includes(m.Z)}catch{return!1}},detectInstalled:()=>U("opencode")};function ac(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"pi-extension"):(0,d.resolve)((0,e.fileURLToPath)(L.url),"..","..","..","pi-extension")}function ad(a){return"string"==typeof a&&(!!/(?:^|\/)pi-extension\/?$/.test(a)||a.includes("pi-extension")&&a.includes("failproofai"))}let ae={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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_piPackagePath:ac(),_piScope:c}),isFailproofaiHook:a=>"string"==typeof a?ad(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ad(a.source)),writeHookEntries(a,b,c){var e;let f,g,h;Array.isArray(a.packages)||(a.packages=[]);let i=ac(),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=>ad(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=>!ad(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=>ad(a))}catch{return!1}},detectInstalled:()=>U("pi")},af="failproofai",ag=".failproofai-managed",ah=["plugin.yaml","__init__.py","client.py","ledger.py"],ai="hermes-plugin";function aj(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,ai):function(a){let b=(0,d.resolve)(a);for(let a=0;a<8;a++){let a=(0,d.resolve)(b,ai);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,"..","..",ai)}((0,d.dirname)((0,e.fileURLToPath)(L.url)))}function ak(a){return(0,d.resolve)((0,d.dirname)(a),"plugins",af)}function al(a){try{return(0,c.lstatSync)(a),!0}catch{return!1}}function am(a){return ah.every(b=>(0,c.existsSync)((0,d.resolve)(a,b)))}function an(a){return(0,d.resolve)((0,d.dirname)(a),".failproofai-link")}function ao(a){try{let b=(0,c.readFileSync)(an(a),"utf8").trim();return""===b?null:(0,d.resolve)(b)}catch{return null}}function ap(a,b){j(an(a),(0,d.resolve)(b)+"\n",{backup:!1,symlinks:"replace"})}function aq(a){(0,c.rmSync)(an(a),{force:!0})}function ar(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 as(a){let b,e,f=ak(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=ao(a);if(e&&(0,d.resolve)(b)===e||ar(b,aj()))return!0;let f=(0,d.dirname)((0,d.resolve)(b));if((0,d.basename)((0,d.resolve)(b))!==ai||"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:am(a),current:ar(a,aj())}}return e&&(0,c.existsSync)((0,d.resolve)(f,ag))?{kind:"copy",complete:am(f)}:{kind:"foreign"}}function at(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=>!R(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 au(a){if(!(0,c.existsSync)(a))return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1};let b=function(a){try{return P(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=>R(a))),h=Array.isArray(e)&&e.includes(af),i=Array.isArray(f)&&f.includes(af);return{pluginEnabled:h&&!i,pluginListed:h,pluginDisabled:i,legacyShellHookPresent:g}}let av={id:"hermes",displayName:"Hermes",requiresHealthyDaemon:!0,scopes:m.M,eventTypes:m.y,getSettingsPath:()=>(0,d.resolve)((0,I.P)(),"config.yaml"),getSettingsPaths:()=>(0,I.J)().map(a=>(0,d.resolve)(a.home,"config.yaml")),readSettings:a=>P(a),writeSettings(a,b){Q(a,b)},prepareInstall(a){!function(a,b={}){let e=aj();for(let a of ah)if(!(0,c.existsSync)((0,d.resolve)(e,a)))throw Error(`Hermes plugin asset is missing from the failproofai package: ${a}`);let f=ak(a),g=as(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(ao(f)!==(0,d.resolve)(g.target))try{ap(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 ah)(0,c.cpSync)((0,d.resolve)(e,a),(0,d.resolve)(i,a));(0,c.writeFileSync)((0,d.resolve)(i,ag),"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),ap(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{al(f)&&((0,c.renameSync)(f,k),l=!0),(0,c.renameSync)(i,f),l&&(0,c.rmSync)(k,{recursive:!0,force:!0}),j?ap(f,e):aq(f)}catch(a){throw(0,c.rmSync)(i,{recursive:!0,force:!0}),l&&!al(f)&&al(k)&&(0,c.renameSync)(k,f),a}}(a)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_hermesPluginPath:aj()}),isFailproofaiHook:R,writeHookEntries(a){let b,c,d;at(a),(d=Array.isArray((c=(b=a.toJS()??{}).plugins&&"object"==typeof b.plugins?b.plugins:{}).enabled)?[...c.enabled]:[]).includes(af)||d.push(af),c.enabled=d,Array.isArray(c.disabled)&&(c.disabled=c.disabled.filter(a=>a!==af),0===c.disabled.length&&delete c.disabled),a.set("plugins",c)},removeHooksFromFile(a){let b,d,e=P(a),f=at(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!==af),g.enabled.length!==a&&(f+=1,h=!0),0===g.enabled.length&&delete g.enabled}g.entries&&af in g.entries&&(delete g.entries[af],h=!0),0===Object.keys(g).length?e.delete("plugins"):e.set("plugins",g)}return h&&Q(a,e),b=ak(a),("link"===(d=as(a)).kind?((0,c.unlinkSync)(b),aq(b),0):"copy"!==d.kind||((0,c.rmSync)(b,{recursive:!0,force:!0}),0))||(f+=1),f},hooksInstalledInSettings(a,b){let c=V(this,a,b);return c.length>0&&c.every(a=>(function(a){try{let b,c=au(a);return c.pluginEnabled&&(b=as(a),("link"===b.kind||"copy"===b.kind)&&b.complete)&&!c.legacyShellHookPresent}catch{}return!1})(a))},detectInstalled:()=>U("hermes")},aw="failproofai";function ax(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"openclaw-plugin"):(0,d.resolve)((0,e.fileURLToPath)(L.url),"..","..","..","openclaw-plugin")}function ay(a){return"string"==typeof a&&(/(?:^|\/)openclaw-plugin\/?$/.test(a)||a.includes("openclaw-plugin")&&a.includes("failproofai"))}let az={id:"openclaw",displayName:"OpenClaw",scopes:m.E,eventTypes:m.P,getSettingsPath:()=>(0,d.resolve)(K()[0].home,"openclaw.json"),getSettingsPaths:()=>K().map(a=>(0,d.resolve)(a.home,"openclaw.json")),readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:()=>({[m.Z]:!0,_openclawPluginPath:ax()}),isFailproofaiHook:a=>"string"==typeof a?ay(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ay(a.source)),writeHookEntries(a){let b=a.plugins??={},c=b.load??={};Array.isArray(c.paths)||(c.paths=[]);let d=ax(),e=c.paths.findIndex(a=>ay(a));e>=0?c.paths[e]=d:c.paths.push(d);let f=b.entries??={},g=f[aw]??={};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=>!ay(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&&aw in d.entries&&(delete d.entries[aw],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=V(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=>ay(a)),e=b.plugins?.entries?.[aw]?.enabled===!0;return d&&e}catch{return!1}})},detectInstalled:()=>U("openclaw")},aA={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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli factory`:`"${a}" --hook ${b} --cli factory`)+S(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:R,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=>R(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=>!R(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=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("droid")},aB={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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli devin`:`"${a}" --hook ${b} --cli devin`)+S(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:R,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=>R(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=>!R(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=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("devin")},aC="failproofai",aD=new Set(["PreToolUse","PostToolUse"]);function aE(a){if(!a||"object"!=typeof a)return!1;let b=a.command;return"string"==typeof b&&b.includes("failproofai")&&b.includes("--cli goose")}let aF={claude:W,codex:X,copilot:Z,cursor:$,opencode:ab,pi:ae,hermes:av,openclaw:az,factory:aA,devin:aB,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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli antigravity`:`"${a}" --hook ${b} --cli antigravity`)+S(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){a[aC]&&"object"==typeof a[aC]||(a[aC]={});let d=a[aC];for(let a of m.X){let e=this.buildHookEntry(b,a,c);if(aD.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=>R(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=>R(a));c>=0?b[c]=e:b.push(e)}}},removeHooksFromFile(a){let b=this.readSettings(a),c=b[aC];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(aD.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=>!R(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=>!R(a));d+=e-f.length,0===f.length?delete c[a]:c[a]=f}}return 0===Object.keys(c).length&&delete b[aC],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)[aC];if(!a||"object"!=typeof a)return!1;for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(R(a)||a&&Array.isArray(a.hooks)&&a.hooks.some(a=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli goose`:`"${a}" --hook ${b} --cli goose`)+S(c)}),isFailproofaiHook:aE,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=>aE(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=>!aE(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=>aE(a)))return!0}}catch{}return!1},detectInstalled:()=>U("goose")}};a.s(["p",0,W,"D",0,function(a){return m.W.map(b=>{let c=X.buildHookEntry(a,b,"user");return{event:m.p[b],command:c.command,timeout:c.timeout}})},"w",0,function(){return m.z.filter(a=>aF[a]?.detectInstalled())},"B",0,function(a){let b=aF[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!==aF[a]).join(", ")}`);return b},"d",0,function(){return(0,I.J)().map(a=>{let b=(0,d.resolve)(a.home,"config.yaml"),c=au(b),e=as(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=>aF[a]).filter(a=>void 0!==a)},"r",0,V],41863)},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
+ `),{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=aa(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=aa(d);if(!(0,c.existsSync)(b))return!1;return(0,c.readFileSync)(b,"utf8").includes(m.Z)}catch{return!1}},detectInstalled:()=>U("opencode")};function ac(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"pi-extension"):(0,d.resolve)((0,e.fileURLToPath)(L.url),"..","..","..","pi-extension")}function ad(a){return"string"==typeof a&&(!!/(?:^|\/)pi-extension\/?$/.test(a)||a.includes("pi-extension")&&a.includes("failproofai"))}let ae={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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_piPackagePath:ac(),_piScope:c}),isFailproofaiHook:a=>"string"==typeof a?ad(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ad(a.source)),writeHookEntries(a,b,c){var e;let f,g,h;Array.isArray(a.packages)||(a.packages=[]);let i=ac(),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=>ad(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=>!ad(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=>ad(a))}catch{return!1}},detectInstalled:()=>U("pi")},af="failproofai",ag=".failproofai-managed",ah=["plugin.yaml","__init__.py","client.py","ledger.py"],ai="hermes-plugin";function aj(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,ai):function(a){let b=(0,d.resolve)(a);for(let a=0;a<8;a++){let a=(0,d.resolve)(b,ai);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,"..","..",ai)}((0,d.dirname)((0,e.fileURLToPath)(L.url)))}function ak(a){return(0,d.resolve)((0,d.dirname)(a),"plugins",af)}function al(a){try{return(0,c.lstatSync)(a),!0}catch{return!1}}function am(a){return ah.every(b=>(0,c.existsSync)((0,d.resolve)(a,b)))}function an(a){return(0,d.resolve)((0,d.dirname)(a),".failproofai-link")}function ao(a){try{let b=(0,c.readFileSync)(an(a),"utf8").trim();return""===b?null:(0,d.resolve)(b)}catch{return null}}function ap(a,b){j(an(a),(0,d.resolve)(b)+"\n",{backup:!1,symlinks:"replace"})}function aq(a){(0,c.rmSync)(an(a),{force:!0})}function ar(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 as(a){let b,e,f=ak(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=ao(a);if(e&&(0,d.resolve)(b)===e||ar(b,aj()))return!0;let f=(0,d.dirname)((0,d.resolve)(b));if((0,d.basename)((0,d.resolve)(b))!==ai||"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:am(a),current:ar(a,aj())}}return e&&(0,c.existsSync)((0,d.resolve)(f,ag))?{kind:"copy",complete:am(f)}:{kind:"foreign"}}function at(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=>!R(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 au(a){if(!(0,c.existsSync)(a))return{pluginEnabled:!1,pluginListed:!1,pluginDisabled:!1,legacyShellHookPresent:!1};let b=function(a){try{return P(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=>R(a))),h=Array.isArray(e)&&e.includes(af),i=Array.isArray(f)&&f.includes(af);return{pluginEnabled:h&&!i,pluginListed:h,pluginDisabled:i,legacyShellHookPresent:g}}let av={id:"hermes",displayName:"Hermes",requiresHealthyDaemon:!0,scopes:m.M,eventTypes:m.y,getSettingsPath:()=>(0,d.resolve)((0,I.P)(),"config.yaml"),getSettingsPaths:()=>(0,I.J)().map(a=>(0,d.resolve)(a.home,"config.yaml")),readSettings:a=>P(a),writeSettings(a,b){Q(a,b)},prepareInstall(a){!function(a,b={}){let e=aj();for(let a of ah)if(!(0,c.existsSync)((0,d.resolve)(e,a)))throw Error(`Hermes plugin asset is missing from the failproofai package: ${a}`);let f=ak(a),g=as(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(ao(f)!==(0,d.resolve)(g.target))try{ap(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 ah)(0,c.cpSync)((0,d.resolve)(e,a),(0,d.resolve)(i,a));(0,c.writeFileSync)((0,d.resolve)(i,ag),"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),ap(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{al(f)&&((0,c.renameSync)(f,k),l=!0),(0,c.renameSync)(i,f),l&&(0,c.rmSync)(k,{recursive:!0,force:!0}),j?ap(f,e):aq(f)}catch(a){throw(0,c.rmSync)(i,{recursive:!0,force:!0}),l&&!al(f)&&al(k)&&(0,c.renameSync)(k,f),a}}(a)},buildHookEntry:(a,b,c)=>({[m.Z]:!0,_hermesPluginPath:aj()}),isFailproofaiHook:R,writeHookEntries(a){let b,c,d;at(a),(d=Array.isArray((c=(b=a.toJS()??{}).plugins&&"object"==typeof b.plugins?b.plugins:{}).enabled)?[...c.enabled]:[]).includes(af)||d.push(af),c.enabled=d,Array.isArray(c.disabled)&&(c.disabled=c.disabled.filter(a=>a!==af),0===c.disabled.length&&delete c.disabled),a.set("plugins",c)},removeHooksFromFile(a){let b,d,e=P(a),f=at(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!==af),g.enabled.length!==a&&(f+=1,h=!0),0===g.enabled.length&&delete g.enabled}g.entries&&af in g.entries&&(delete g.entries[af],h=!0),0===Object.keys(g).length?e.delete("plugins"):e.set("plugins",g)}return h&&Q(a,e),b=ak(a),("link"===(d=as(a)).kind?((0,c.unlinkSync)(b),aq(b),0):"copy"!==d.kind||((0,c.rmSync)(b,{recursive:!0,force:!0}),0))||(f+=1),f},hooksInstalledInSettings(a,b){let c=V(this,a,b);return c.length>0&&c.every(a=>(function(a){try{let b,c=au(a);return c.pluginEnabled&&(b=as(a),("link"===b.kind||"copy"===b.kind)&&b.complete)&&!c.legacyShellHookPresent}catch{}return!1})(a))},detectInstalled:()=>U("hermes")},aw="failproofai";function ax(){let a=process.env.FAILPROOFAI_PACKAGE_ROOT;return a?(0,d.resolve)(a,"openclaw-plugin"):(0,d.resolve)((0,e.fileURLToPath)(L.url),"..","..","..","openclaw-plugin")}function ay(a){return"string"==typeof a&&(/(?:^|\/)openclaw-plugin\/?$/.test(a)||a.includes("openclaw-plugin")&&a.includes("failproofai"))}let az={id:"openclaw",displayName:"OpenClaw",requiresHealthyDaemon:!0,scopes:m.E,eventTypes:m.P,getSettingsPath:()=>(0,d.resolve)(K()[0].home,"openclaw.json"),getSettingsPaths:()=>K().map(a=>(0,d.resolve)(a.home,"openclaw.json")),readSettings:a=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:()=>({[m.Z]:!0,_openclawPluginPath:ax()}),isFailproofaiHook:a=>"string"==typeof a?ay(a):!!a&&"object"==typeof a&&(!0===a[m.Z]||"string"==typeof a.source&&ay(a.source)),writeHookEntries(a){let b=a.plugins??={},c=b.load??={};Array.isArray(c.paths)||(c.paths=[]);let d=ax(),e=c.paths.findIndex(a=>ay(a));e>=0?c.paths[e]=d:c.paths.push(d);let f=b.entries??={},g=f[aw]??={};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=>!ay(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&&aw in d.entries&&(delete d.entries[aw],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=V(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=>ay(a)),e=b.plugins?.entries?.[aw]?.enabled===!0;return d&&e}catch{return!1}})},detectInstalled:()=>U("openclaw")},aA={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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli factory`:`"${a}" --hook ${b} --cli factory`)+S(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:R,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=>R(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=>!R(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=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("droid")},aB={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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli devin`:`"${a}" --hook ${b} --cli devin`)+S(c),timeout:60,[m.Z]:!0}),isFailproofaiHook:R,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=>R(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=>!R(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=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("devin")},aC="failproofai",aD=new Set(["PreToolUse","PostToolUse"]);function aE(a){if(!a||"object"!=typeof a)return!1;let b=a.command;return"string"==typeof b&&b.includes("failproofai")&&b.includes("--cli goose")}let aF={claude:W,codex:X,copilot:Z,cursor:$,opencode:ab,pi:ae,hermes:av,openclaw:az,factory:aA,devin:aB,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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli antigravity`:`"${a}" --hook ${b} --cli antigravity`)+S(c),timeout:30,[m.Z]:!0}),isFailproofaiHook:R,writeHookEntries(a,b,c){a[aC]&&"object"==typeof a[aC]||(a[aC]={});let d=a[aC];for(let a of m.X){let e=this.buildHookEntry(b,a,c);if(aD.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=>R(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=>R(a));c>=0?b[c]=e:b.push(e)}}},removeHooksFromFile(a){let b=this.readSettings(a),c=b[aC];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(aD.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=>!R(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=>!R(a));d+=e-f.length,0===f.length?delete c[a]:c[a]=f}}return 0===Object.keys(c).length&&delete b[aC],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)[aC];if(!a||"object"!=typeof a)return!1;for(let b of Object.values(a))if(Array.isArray(b)){for(let a of b)if(R(a)||a&&Array.isArray(a.hooks)&&a.hooks.some(a=>R(a)))return!0}}catch{}return!1},detectInstalled:()=>U("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=>N(a),writeSettings(a,b){O(a,b)},buildHookEntry:(a,b,c)=>({type:"command",command:("project"===c?`npx -y failproofai --hook ${b} --cli goose`:`"${a}" --hook ${b} --cli goose`)+S(c)}),isFailproofaiHook:aE,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=>aE(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=>!aE(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=>aE(a)))return!0}}catch{}return!1},detectInstalled:()=>U("goose")}};a.s(["p",0,W,"D",0,function(a){return m.W.map(b=>{let c=X.buildHookEntry(a,b,"user");return{event:m.p[b],command:c.command,timeout:c.timeout}})},"w",0,function(){return m.z.filter(a=>aF[a]?.detectInstalled())},"B",0,function(a){let b=aF[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!==aF[a]).join(", ")}`);return b},"d",0,function(){return(0,I.J)().map(a=>{let b=(0,d.resolve)(a.home,"config.yaml"),c=au(b),e=as(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=>aF[a]).filter(a=>void 0!==a)},"r",0,V],41863)},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":""}))}}}}}])}]})();
234
234
 
235
235
  //# sourceMappingURL=_0ouu886szh6yj._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[21776,a=>{"use strict";var b=a.i(36359),c=a.i(7292);a.S([b,"0085028ebdcdc7b05442823936e8301df482a2a84a,f",0,c,"60ee72ce0b206ad2278e6b42ce4bf3e99600218213,m"],21776)},2726,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__12qr51qgrrt6o._.js","server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuznb72p7z._.js"].map(b=>a.l(b))).then(()=>b(74493)))}];
1
+ module.exports=[21776,a=>{"use strict";var b=a.i(36359),c=a.i(7292);a.S([b,"00e6aa3a37d6d9a262456e3cd4477ff494123de2c2,f",0,c,"609aff06f9e62e037f9c2283b6690f0aefa15a666c,m"],21776)},2726,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0alpzjn3450sr._.js","server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuznb72p7z._.js"].map(b=>a.l(b))).then(()=>b(74493)))}];
2
2
 
3
3
  //# sourceMappingURL=_0pedwblqdoh58._.js.map