failproofai 0.0.13 → 0.0.14-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 (310) hide show
  1. package/.next/standalone/.codex/hooks.json +6 -6
  2. package/.next/standalone/.cursor/hooks.json +6 -6
  3. package/.next/standalone/.factory/hooks.json +112 -0
  4. package/.next/standalone/.next/BUILD_ID +1 -1
  5. package/.next/standalone/.next/build-manifest.json +5 -5
  6. package/.next/standalone/.next/prerender-manifest.json +3 -3
  7. package/.next/standalone/.next/required-server-files.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
  9. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  10. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  14. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  15. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  16. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  17. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  18. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
  20. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  21. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  24. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  25. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  26. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  27. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  28. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  30. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  31. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/audit/run/route.js +3 -3
  33. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  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/reminder/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +2 -1
  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.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/index.html +1 -1
  46. package/.next/standalone/.next/server/app/index.rsc +15 -15
  47. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  49. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  50. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  51. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
  53. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  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 +8 -8
  58. package/.next/standalone/.next/server/app/policies/page.js +1 -1
  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 +3 -2
  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 +5 -3
  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 +1 -1
  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/chunks/[root-of-the-server]__0--lkk6._.js +3 -0
  78. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-219ec._.js +3 -0
  79. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04_h-a5._.js +3 -0
  80. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06cuf1y._.js +3 -0
  81. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08w4wmd._.js +3 -0
  82. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g6bbuw._.js +3 -0
  83. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jllheg._.js +3 -0
  84. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jnjf2t._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q-v9z2._.js +1 -1
  86. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q0qzx1._.js +3 -0
  87. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q2nbsl._.js +3 -0
  88. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rv7m0k._.js +1 -1
  89. package/.next/standalone/.next/server/chunks/[root-of-the-server]__16le-kd._.js +3 -0
  90. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17g9wh7._.js +1 -1
  91. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1d9qen3._.js +3 -0
  92. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ffkmds._.js +3 -0
  93. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1fwl2mz._.js +1 -1
  94. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1legmza._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1mrihkj._.js +1 -1
  96. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1myjm-d._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qb590j._.js +3 -0
  98. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qxztj-._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1shcqgr._.js +3 -0
  100. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xuedea._.js +3 -0
  101. package/.next/standalone/.next/server/chunks/{_1z062h5._.js → _1vslkoe._.js} +2 -2
  102. package/.next/standalone/.next/server/chunks/lib_factory-projects_ts_1eo_bk-._.js +3 -0
  103. package/.next/standalone/.next/server/chunks/lib_openclaw-projects_ts_0gc-p24._.js +3 -0
  104. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_17k9e3w.js +24 -12
  105. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00cz9as._.js +3 -0
  109. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__015_i4t._.js +2 -2
  110. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__030k0c6._.js +3 -0
  111. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03lv-pe._.js +2 -2
  112. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__042d3cd._.js +3 -0
  113. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05r_17v._.js +3 -0
  114. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09q1168._.js +3 -0
  115. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__108slqn._.js → [root-of-the-server]__0brjczq._.js} +2 -2
  116. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e2l3c1._.js +3 -0
  117. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hci7t3._.js +3 -0
  118. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hdsupo._.js +2 -2
  119. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p84xee._.js +3 -0
  120. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qeuy9c._.js +2 -2
  121. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s89hoe._.js +2 -2
  122. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__07iom4f._.js → [root-of-the-server]__0wp9w6i._.js} +2 -2
  123. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ynf7tx._.js +2 -2
  124. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__170799-._.js +12 -9
  125. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__17ai7sy._.js +4 -0
  126. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1d8omgc._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1nq7ivq._.js +3 -0
  128. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1tkjqka._.js +2 -2
  129. package/.next/standalone/.next/server/chunks/ssr/_05whahf._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/ssr/_0_9_ytf._.js +3 -0
  131. package/.next/standalone/.next/server/chunks/ssr/_11_p9y8._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/ssr/{_0ul5rf_._.js → _1_ozgif._.js} +2 -2
  133. package/.next/standalone/.next/server/chunks/ssr/_1p0-leb._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/ssr/app_087bt9w._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/ssr/app_1fvisnp._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/ssr/app_209u41o._.js +1 -1
  137. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +2 -2
  138. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +1 -1
  140. package/.next/standalone/.next/server/chunks/ssr/lib_0xkhw_v._.js +3 -0
  141. package/.next/standalone/.next/server/chunks/ssr/lib_antigravity-projects_ts_0_6zf11._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/ssr/lib_devin-projects_ts_0a64qdy._.js +3 -0
  143. package/.next/standalone/.next/server/chunks/ssr/lib_factory-projects_ts_1uyaahq._.js +3 -0
  144. package/.next/standalone/.next/server/chunks/ssr/lib_goose-projects_ts_0zkscri._.js +3 -0
  145. package/.next/standalone/.next/server/chunks/ssr/lib_openclaw-projects_ts_0qxq3bp._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/ssr/{node_modules_html-to-image_es_index_13p7zob.js → node_modules_html-to-image_es_index_12rjfea.js} +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1ezd2jf._.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1tnuifj._.js +1 -1
  150. package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
  151. package/.next/standalone/.next/server/pages/404.html +1 -1
  152. package/.next/standalone/.next/server/pages/500.html +1 -1
  153. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/server-reference-manifest.json +10 -10
  155. package/.next/standalone/.next/static/chunks/{13f1kmjea-0md.js → 02jcotghcxrbu.js} +1 -1
  156. package/.next/standalone/.next/static/chunks/{30ysv-_8jj052.js → 0d5lypu1zs21r.js} +1 -1
  157. package/.next/standalone/.next/static/chunks/0emg30_6svycu.js +1 -0
  158. package/.next/standalone/.next/static/chunks/0o9wpnze1ey8y.js +6 -0
  159. package/.next/standalone/.next/static/chunks/{05apzuand0c22.js → 1359o5785rmve.js} +2 -2
  160. package/.next/standalone/.next/static/chunks/20tuctw38jbgw.js +1 -0
  161. package/.next/standalone/.next/static/chunks/{0vc0eak148vo6.js → 2ldhnaweu9ew3.js} +1 -1
  162. package/.next/standalone/.next/static/chunks/{23c7v2svx90dp.js → 2vav_x0_336ds.js} +1 -1
  163. package/.next/standalone/.next/static/chunks/3-ogr79xqbw0h.js +1 -0
  164. package/.next/standalone/.next/static/chunks/36j05kb2x323i.css +2 -0
  165. package/.next/standalone/.next/static/chunks/3cg7x0joi2b98.js +1 -0
  166. package/.next/standalone/.next/static/chunks/{36wdtkgdf0zrd.js → 3k87p-tijud-4.js} +1 -1
  167. package/.next/standalone/.next/static/chunks/{2cejn75gug3j8.js → 3kmaqcp7rldad.js} +1 -1
  168. package/.next/standalone/.next/static/chunks/{turbopack-0vavqo2d-tlt3.js → turbopack-10hj8t5pf33tu.js} +1 -1
  169. package/.next/standalone/.opencode/plugins/failproofai.mjs +30 -11
  170. package/.next/standalone/app/api/audit/run/route.ts +2 -0
  171. package/.next/standalone/app/audit/_components/empty-state.tsx +1 -1
  172. package/.next/standalone/app/components/global-error-listeners.tsx +27 -0
  173. package/.next/standalone/app/globals.css +25 -1
  174. package/.next/standalone/app/policies/hooks-client.tsx +2 -4
  175. package/.next/standalone/app/project/[name]/page.tsx +30 -10
  176. package/.next/standalone/app/project/[name]/session/[sessionId]/page.tsx +71 -21
  177. package/.next/standalone/assets/logos/antigravity.svg +1 -0
  178. package/.next/standalone/assets/logos/devin.svg +1 -0
  179. package/.next/standalone/assets/logos/factory-dark.png +0 -0
  180. package/.next/standalone/assets/logos/factory-light.png +0 -0
  181. package/.next/standalone/assets/logos/goose-dark.svg +1 -0
  182. package/.next/standalone/assets/logos/goose-light.svg +1 -0
  183. package/.next/standalone/assets/logos/openclaw.svg +22 -0
  184. package/.next/standalone/ci/cli-integration/Dockerfile +47 -0
  185. package/.next/standalone/ci/cli-integration/README.md +69 -0
  186. package/.next/standalone/ci/cli-integration/canary-policies.mjs +45 -0
  187. package/.next/standalone/ci/cli-integration/capture-tokens.sh +48 -0
  188. package/.next/standalone/ci/cli-integration/inject-tokens.sh +44 -0
  189. package/.next/standalone/ci/cli-integration/install-clis.sh +91 -0
  190. package/.next/standalone/ci/cli-integration/probe-cli.sh +208 -0
  191. package/.next/standalone/ci/cli-integration/report.js +74 -0
  192. package/.next/standalone/ci/cli-integration/run.sh +107 -0
  193. package/.next/standalone/components/navbar.tsx +5 -11
  194. package/.next/standalone/components/reach-developers.tsx +2 -2
  195. package/.next/standalone/docker-hook-sync/Dockerfile +8 -4
  196. package/.next/standalone/lib/antigravity-projects.ts +224 -0
  197. package/.next/standalone/lib/antigravity-sessions.ts +283 -0
  198. package/.next/standalone/lib/cli-registry.ts +26 -6
  199. package/.next/standalone/lib/devin-projects.ts +141 -0
  200. package/.next/standalone/lib/devin-sessions.ts +343 -0
  201. package/.next/standalone/lib/download-session.ts +56 -5
  202. package/.next/standalone/lib/error-origin.ts +67 -0
  203. package/.next/standalone/lib/factory-projects.ts +109 -0
  204. package/.next/standalone/lib/factory-sessions.ts +312 -0
  205. package/.next/standalone/lib/goose-projects.ts +148 -0
  206. package/.next/standalone/lib/goose-sessions.ts +296 -0
  207. package/.next/standalone/lib/install-check.ts +231 -0
  208. package/.next/standalone/lib/openclaw-projects.ts +182 -0
  209. package/.next/standalone/lib/openclaw-sessions.ts +284 -0
  210. package/.next/standalone/lib/projects.ts +33 -9
  211. package/.next/standalone/lib/telemetry-sanitize.ts +43 -0
  212. package/.next/standalone/openclaw-plugin/index.js +223 -0
  213. package/.next/standalone/openclaw-plugin/openclaw.plugin.json +6 -0
  214. package/.next/standalone/openclaw-plugin/package.json +12 -0
  215. package/.next/standalone/package.json +2 -3
  216. package/.next/standalone/server.js +1 -1
  217. package/README.md +94 -62
  218. package/bin/failproofai.mjs +98 -30
  219. package/dist/cli.mjs +12499 -9243
  220. package/lib/antigravity-projects.ts +224 -0
  221. package/lib/antigravity-sessions.ts +283 -0
  222. package/lib/cli-registry.ts +26 -6
  223. package/lib/devin-projects.ts +141 -0
  224. package/lib/devin-sessions.ts +343 -0
  225. package/lib/download-session.ts +56 -5
  226. package/lib/error-origin.ts +67 -0
  227. package/lib/factory-projects.ts +109 -0
  228. package/lib/factory-sessions.ts +312 -0
  229. package/lib/goose-projects.ts +148 -0
  230. package/lib/goose-sessions.ts +296 -0
  231. package/lib/install-check.ts +231 -0
  232. package/lib/openclaw-projects.ts +182 -0
  233. package/lib/openclaw-sessions.ts +284 -0
  234. package/lib/projects.ts +33 -9
  235. package/lib/telemetry-sanitize.ts +43 -0
  236. package/openclaw-plugin/index.js +223 -0
  237. package/openclaw-plugin/openclaw.plugin.json +6 -0
  238. package/openclaw-plugin/package.json +12 -0
  239. package/package.json +2 -3
  240. package/scripts/dev-hook.mjs +292 -0
  241. package/scripts/install-diagnosis.mjs +5 -8
  242. package/scripts/install-telemetry.mjs +12 -4
  243. package/scripts/launch.ts +4 -8
  244. package/scripts/sync-agent-cli-harnesses-prompt.md +7 -10
  245. package/scripts/translate-docs/cli.ts +120 -53
  246. package/scripts/translate-docs/config.ts +57 -13
  247. package/scripts/translate-docs/mdx-translator.ts +177 -28
  248. package/scripts/translate-docs/mintlify-nav.ts +91 -10
  249. package/scripts/translate-docs/readme-translator.ts +13 -5
  250. package/scripts/translate-docs/translator.ts +38 -2
  251. package/scripts/translate-docs/types.ts +3 -0
  252. package/scripts/validate-mdx.ts +12 -4
  253. package/src/audit/cli-adapters/antigravity.ts +87 -0
  254. package/src/audit/cli-adapters/devin.ts +53 -0
  255. package/src/audit/cli-adapters/factory.ts +75 -0
  256. package/src/audit/cli-adapters/goose.ts +53 -0
  257. package/src/audit/cli-adapters/index.ts +30 -6
  258. package/src/audit/cli-adapters/openclaw.ts +56 -0
  259. package/src/audit/cli.ts +83 -8
  260. package/src/audit/report.ts +1 -1
  261. package/src/audit/types.ts +1 -1
  262. package/src/hooks/builtin-policies.ts +5 -5
  263. package/src/hooks/configure-wizard.ts +356 -0
  264. package/src/hooks/handler.ts +283 -218
  265. package/src/hooks/hook-telemetry.ts +43 -3
  266. package/src/hooks/install-prompt.ts +92 -173
  267. package/src/hooks/integrations.ts +739 -138
  268. package/src/hooks/manager.ts +46 -2
  269. package/src/hooks/policy-evaluator.ts +301 -121
  270. package/src/hooks/policy-presets.ts +71 -0
  271. package/src/hooks/resolve-cwd.ts +1 -1
  272. package/src/hooks/resolve-permission-mode.ts +1 -5
  273. package/src/hooks/resolve-transcript-path.ts +25 -7
  274. package/src/hooks/tool-name-canonicalize.ts +36 -3
  275. package/src/hooks/tui.ts +578 -0
  276. package/src/hooks/types.ts +447 -109
  277. package/.next/standalone/.gemini/settings.json +0 -147
  278. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cag8qd._.js +0 -3
  279. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cefjd9._.js +0 -3
  280. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ekj92q._.js +0 -3
  281. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12v-lma._.js +0 -3
  282. package/.next/standalone/.next/server/chunks/[root-of-the-server]__136y39g._.js +0 -3
  283. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13h8pzr._.js +0 -3
  284. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1hgv_75._.js +0 -3
  285. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04bqvos._.js +0 -3
  286. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dqgs96._.js +0 -3
  287. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0q5rfxg._.js +0 -3
  288. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qukut7._.js +0 -4
  289. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ql-mch._.js +0 -3
  290. package/.next/standalone/.next/server/chunks/ssr/_11v0g3z._.js +0 -3
  291. package/.next/standalone/.next/server/chunks/ssr/lib_gemini-projects_ts_1c7bgx-._.js +0 -3
  292. package/.next/standalone/.next/static/chunks/0fa7j157kg9_d.js +0 -1
  293. package/.next/standalone/.next/static/chunks/0nrah-qv6smeg.js +0 -6
  294. package/.next/standalone/.next/static/chunks/0wtagd8a5gwq-.js +0 -1
  295. package/.next/standalone/.next/static/chunks/1c8i78p7t1i-5.js +0 -1
  296. package/.next/standalone/.next/static/chunks/25qr0e6ez0ei0.js +0 -1
  297. package/.next/standalone/.next/static/chunks/25s52un3k_wht.css +0 -2
  298. package/.next/standalone/assets/logos/gemini-dark.svg +0 -13
  299. package/.next/standalone/assets/logos/gemini-light.svg +0 -13
  300. package/.next/standalone/lib/gemini-projects.ts +0 -243
  301. package/.next/standalone/lib/gemini-sessions.ts +0 -365
  302. package/lib/gemini-projects.ts +0 -243
  303. package/lib/gemini-sessions.ts +0 -365
  304. package/scripts/postinstall.mjs +0 -243
  305. package/scripts/preuninstall.mjs +0 -131
  306. package/src/audit/cli-adapters/gemini.ts +0 -51
  307. package/src/hooks/first-run-nudge.ts +0 -146
  308. /package/.next/standalone/.next/static/{kmzdjTLVs6LqsfyOaUf69 → LkN-JjmhKGmL-WklH7WVi}/_buildManifest.js +0 -0
  309. /package/.next/standalone/.next/static/{kmzdjTLVs6LqsfyOaUf69 → LkN-JjmhKGmL-WklH7WVi}/_clientMiddlewareManifest.js +0 -0
  310. /package/.next/standalone/.next/static/{kmzdjTLVs6LqsfyOaUf69 → LkN-JjmhKGmL-WklH7WVi}/_ssgManifest.js +0 -0
@@ -36,6 +36,9 @@ const args = process.argv.slice(2);
36
36
 
37
37
  // Normalize 'p' → 'policies' (shorthand alias)
38
38
  if (args[0] === "p") args[0] = "policies";
39
+ // Normalize 'configure' / 'setup' → 'config' (aliases), so every later check
40
+ // (SUBCOMMANDS, dispatch) mentions only the canonical name.
41
+ if (args[0] === "configure" || args[0] === "setup") args[0] = "config";
39
42
 
40
43
  // Lightweight telemetry helper for CLI lifecycle events. Lazy-loads to avoid
41
44
  // pulling in the hook-telemetry / telemetry-id modules on the fast --hook path.
@@ -65,7 +68,7 @@ const hookIdx = args.indexOf("--hook");
65
68
  if (hookIdx >= 0) {
66
69
  if (!args[hookIdx + 1]) {
67
70
  console.error("Error: Missing event type after --hook");
68
- console.error("Usage: failproofai --hook <event> [--cli <claude|codex|copilot|cursor|opencode|pi|gemini|hermes>]");
71
+ console.error("Usage: failproofai --hook <event> [--cli <claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose>]");
69
72
  process.exit(1);
70
73
  }
71
74
  const eventType = args[hookIdx + 1];
@@ -81,14 +84,20 @@ if (hookIdx >= 0) {
81
84
  || cliArg === "cursor"
82
85
  || cliArg === "opencode"
83
86
  || cliArg === "pi"
84
- || cliArg === "gemini"
85
87
  || cliArg === "hermes"
88
+ || cliArg === "openclaw"
89
+ || cliArg === "factory"
90
+ || cliArg === "devin"
91
+ || cliArg === "antigravity"
92
+ || cliArg === "goose"
86
93
  )
87
94
  ? cliArg
88
95
  : "claude";
89
96
  try {
90
97
  const { handleHookEvent } = await import("../src/hooks/handler");
91
98
  const exitCode = await handleHookEvent(eventType, cli);
99
+ // handleHookEvent already flushes its own telemetry before returning; this
100
+ // is the normal, reliable exit.
92
101
  process.exit(exitCode);
93
102
  } catch (err) {
94
103
  const msg = err instanceof Error ? err.message : String(err);
@@ -97,6 +106,13 @@ if (hookIdx >= 0) {
97
106
  cli,
98
107
  error_type: err instanceof Error ? err.name : "unknown",
99
108
  });
109
+ // handleHookEvent threw before its own flush ran, so any events it fired
110
+ // with `void trackHookEvent(...)` are still in flight — drain them (plus the
111
+ // hook_dispatch_error above) before exiting so they aren't dropped.
112
+ try {
113
+ const { flushHookTelemetry } = await import("../src/hooks/hook-telemetry");
114
+ await flushHookTelemetry();
115
+ } catch {}
100
116
  console.error(`Unexpected error: ${msg}`);
101
117
  process.exit(2);
102
118
  }
@@ -108,8 +124,18 @@ if (hookIdx >= 0) {
108
124
  * Error → unexpected; shows message only, exits 2
109
125
  */
110
126
  async function runCli() {
127
+ // Report a fresh install / upgrade. Deliberately here rather than at module
128
+ // scope: everything above this point is the --hook fast path, which runs on
129
+ // every tool call. No-ops after the first run on a given version.
130
+ try {
131
+ const { maybeReportInstall } = await import("../lib/install-check");
132
+ await maybeReportInstall(version);
133
+ } catch {
134
+ // never block a command on reporting
135
+ }
136
+
111
137
  // --help / -h (only when not inside a subcommand that handles its own --help)
112
- const SUBCOMMANDS = ["policies", "policy", "auth", "audit"];
138
+ const SUBCOMMANDS = ["policies", "policy", "auth", "audit", "config"];
113
139
  if ((args.includes("--help") || args.includes("-h")) && !SUBCOMMANDS.includes(args[0])) {
114
140
  const extraArgs = args.filter((a) => a !== "--help" && a !== "-h");
115
141
  if (extraArgs.length > 0) {
@@ -123,6 +149,7 @@ USAGE
123
149
 
124
150
  COMMANDS
125
151
  (no args) Launch the policy dashboard
152
+ config Interactive setup — pick scope, agents & policies
126
153
 
127
154
  policy add <name> Enable a single policy (see \`policy --help\`)
128
155
  policy remove <name> Disable a single policy
@@ -130,18 +157,18 @@ COMMANDS
130
157
  policies, p List all available policies and their status
131
158
  policies --install, -i Enable policies in agent CLI settings
132
159
  [names...] Specific policy names to enable
133
- --cli claude|codex|copilot|cursor|opencode|pi|gemini|hermes
160
+ --cli claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose
134
161
  Agent CLI(s) to install for; space-separated
135
- (e.g. --cli claude codex copilot cursor opencode pi gemini hermes) or repeated.
162
+ (e.g. --cli claude codex copilot cursor opencode pi hermes openclaw factory devin antigravity goose) or repeated.
136
163
  Default: detect installed CLIs and prompt.
137
164
  --scope user|project|local Config scope to write to (default: user)
138
- (Codex / Copilot / Cursor / OpenCode / Pi / Gemini support user|project only)
165
+ (Codex / Copilot / Cursor / OpenCode / Pi support user|project only)
139
166
  --beta Include beta policies
140
167
  --custom, -c <path> Path to a JS file of custom policies
141
168
 
142
169
  policies --uninstall, -u Disable policies or remove hooks
143
170
  [names...] Specific policy names to disable
144
- --cli claude|codex|copilot|cursor|opencode|pi|gemini|hermes
171
+ --cli claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose
145
172
  Agent CLI(s) to uninstall from
146
173
  --scope user|project|local|all Config scope to remove from (default: user)
147
174
  --beta Remove only beta policies
@@ -176,8 +203,9 @@ EXAMPLES
176
203
  failproofai policies --install --cli cursor --scope project
177
204
  failproofai policies --install --cli opencode --scope project
178
205
  failproofai policies --install --cli pi --scope project
179
- failproofai policies --install --cli gemini --scope project
180
- failproofai policies --install --cli claude codex copilot cursor opencode pi gemini hermes
206
+ failproofai policies --install --cli factory --scope project
207
+ failproofai policies --install --cli devin --scope project
208
+ failproofai policies --install --cli claude codex copilot cursor opencode pi hermes openclaw factory devin antigravity goose
181
209
  failproofai policies --install --custom ./my-policies.js
182
210
  failproofai policies -i -c ./my-policies.js
183
211
  failproofai policies --uninstall block-sudo
@@ -186,13 +214,12 @@ EXAMPLES
186
214
  failproofai policies --uninstall --cli cursor
187
215
  failproofai policies --uninstall --cli opencode
188
216
  failproofai policies --uninstall --cli pi
189
- failproofai policies --uninstall --cli gemini
190
217
  failproofai policies --uninstall --custom
191
218
 
192
219
  LINKS
193
220
  ⭐ Star us: https://github.com/failproofai/failproofai
194
221
  📖 Docs: https://docs.befailproof.ai/introduction
195
- 💬 Discord: https://discord.gg/2zjBZP7yQJ
222
+ 💬 Discord: https://discord.befailproof.ai/
196
223
  `.trimStart());
197
224
  process.exit(0);
198
225
  }
@@ -226,20 +253,20 @@ USAGE
226
253
 
227
254
  OPTIONS (install)
228
255
  [names...] Specific policy names to enable (omit for interactive)
229
- --cli claude|codex|copilot|cursor|opencode|pi|gemini|hermes
256
+ --cli claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose
230
257
  Agent CLI(s) to install for; space-separated
231
- (e.g. --cli claude codex copilot cursor opencode pi gemini hermes) or repeated.
258
+ (e.g. --cli claude codex copilot cursor opencode pi hermes openclaw factory devin antigravity goose) or repeated.
232
259
  Omit to detect installed CLIs and prompt (or
233
260
  auto-pick if only one is found).
234
261
  --scope user|project|local Config scope to write to (default: user)
235
- (Codex / Copilot / Cursor / OpenCode / Pi / Gemini support user|project only)
262
+ (Codex / Copilot / Cursor / OpenCode / Pi support user|project only)
236
263
  --beta Include beta policies
237
264
  --custom, -c <path> Path to a JS file of custom policies
238
265
  (skips interactive prompt; validates file first)
239
266
 
240
267
  OPTIONS (uninstall)
241
268
  [names...] Specific policy names to disable (omit to remove hooks)
242
- --cli claude|codex|copilot|cursor|opencode|pi|gemini|hermes
269
+ --cli claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose
243
270
  Agent CLI(s) to uninstall from
244
271
  --scope user|project|local|all Config scope to remove from (default: user)
245
272
  --beta Remove only beta policies
@@ -254,8 +281,9 @@ EXAMPLES
254
281
  failproofai policies --install --cli cursor --scope project
255
282
  failproofai policies --install --cli opencode --scope project
256
283
  failproofai policies --install --cli pi --scope project
257
- failproofai policies --install --cli gemini --scope project
258
- failproofai policies --install --cli claude codex copilot cursor opencode pi gemini hermes
284
+ failproofai policies --install --cli factory --scope project
285
+ failproofai policies --install --cli devin --scope project
286
+ failproofai policies --install --cli claude codex copilot cursor opencode pi hermes openclaw factory devin antigravity goose
259
287
  failproofai policies --install --custom ./my-policies.js
260
288
  failproofai policies -i -c ./my-policies.js
261
289
  failproofai policies --uninstall block-sudo
@@ -296,7 +324,7 @@ EXAMPLES
296
324
  // --cli claude codex copilot
297
325
  // --cli claude --cli codex
298
326
  // Values are consumed greedily until the next flag or end of argv.
299
- const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "gemini", "hermes"]);
327
+ const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "hermes", "openclaw", "factory", "devin", "antigravity", "goose"]);
300
328
  const cliFlagValues = [];
301
329
  const cliConsumedIdxs = new Set();
302
330
  const cliFlagIdxs = subArgs.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
@@ -313,7 +341,7 @@ EXAMPLES
313
341
  consumed++;
314
342
  }
315
343
  if (consumed === 0) {
316
- throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi gemini hermes (or any subset)");
344
+ throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi hermes openclaw (or any subset)");
317
345
  }
318
346
  }
319
347
 
@@ -385,7 +413,7 @@ EXAMPLES
385
413
  }
386
414
 
387
415
  // --cli accepts one or more space-separated values; same parser as install.
388
- const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "gemini", "hermes"]);
416
+ const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "hermes", "openclaw", "factory", "devin", "antigravity", "goose"]);
389
417
  const cliFlagValues = [];
390
418
  const cliConsumedIdxs = new Set();
391
419
  const cliFlagIdxs = subArgs.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
@@ -402,7 +430,7 @@ EXAMPLES
402
430
  consumed++;
403
431
  }
404
432
  if (consumed === 0) {
405
- throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi gemini hermes (or any subset)");
433
+ throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi hermes openclaw (or any subset)");
406
434
  }
407
435
  }
408
436
 
@@ -511,7 +539,7 @@ USAGE
511
539
  failproofai policy remove <name> Disable one policy
512
540
 
513
541
  OPTIONS
514
- --cli claude|codex|copilot|cursor|opencode|pi|gemini|hermes
542
+ --cli claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose
515
543
  Agent CLI(s) to apply to; space-separated or repeated.
516
544
  Omit to detect installed CLIs and prompt.
517
545
  --scope user|project|local Config scope (default: user)
@@ -549,7 +577,7 @@ EXAMPLES
549
577
  }
550
578
 
551
579
  // --cli accepts one or more space-separated values, optionally repeated.
552
- const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "gemini", "hermes"]);
580
+ const VALID_CLIS = new Set(["claude", "codex", "copilot", "cursor", "opencode", "pi", "hermes", "openclaw", "factory", "devin", "antigravity", "goose"]);
553
581
  const cliFlagValues = [];
554
582
  const cliConsumedIdxs = new Set();
555
583
  const cliFlagIdxs = rest.map((a, i) => (a === "--cli" ? i : -1)).filter((i) => i >= 0);
@@ -564,7 +592,7 @@ EXAMPLES
564
592
  consumed++;
565
593
  }
566
594
  if (consumed === 0) {
567
- throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi gemini hermes (or any subset)");
595
+ throw new CliError("Missing value(s) for --cli. Usage: --cli claude codex copilot cursor opencode pi hermes openclaw (or any subset)");
568
596
  }
569
597
  }
570
598
 
@@ -652,6 +680,42 @@ EXAMPLES
652
680
  process.exit(0);
653
681
  }
654
682
 
683
+ // config — the interactive setup launcher (scope, agents, policies).
684
+ // `configure` and `setup` are canonicalized to "config" up top. Running it
685
+ // explicitly does NOT run the post-setup audit (that only fires on first-run
686
+ // onboarding via bare `failproofai`).
687
+ if (args[0] === "config") {
688
+ if (args.includes("--help") || args.includes("-h")) {
689
+ console.log(`
690
+ failproofai config — interactive setup
691
+
692
+ USAGE
693
+ failproofai config Guided setup: choose scope, agents, and policies
694
+ failproofai configure Alias for config
695
+ failproofai setup Alias for config
696
+
697
+ WHAT IT DOES
698
+ Walks you through 4 quick steps and writes everything for you:
699
+ 1. Where — global (all projects) or just this project
700
+ 2. Assistants — which agent CLIs to protect (Claude, Codex, ...)
701
+ 3. Policies — presets (combine any), Everything, or a custom pick
702
+ 4. Review — confirms the exact files it will change, then applies
703
+
704
+ Prefer flags? See \`failproofai policies --help\`.
705
+ `.trimStart());
706
+ process.exit(0);
707
+ }
708
+ lastSubcommand = "config";
709
+ const { runConfigureWizard } = await import("../src/hooks/configure-wizard");
710
+ const result = await runConfigureWizard();
711
+ await track("cli_configure_invoked", {
712
+ applied: result.applied,
713
+ scope: result.scope ?? null,
714
+ cli_count: result.clis?.length ?? 0,
715
+ });
716
+ process.exit(0);
717
+ }
718
+
655
719
  // Unknown flag guard — must appear after all known-flag branches
656
720
  const knownFlags = ["--version", "-v", "--help", "-h", "--hook"];
657
721
  const unknownFlag = args.find(a => a.startsWith("-") && !knownFlags.includes(a));
@@ -693,18 +757,22 @@ EXAMPLES
693
757
  );
694
758
  }
695
759
 
696
- // First-run nudgeonly on truly bare `failproofai` invocations. Best-effort:
697
- // any thrown error must not block the dashboard from launching.
760
+ // First-run onboarding — on the first bare `failproofai` invocation, run the
761
+ // configure wizard (which also fires the post-setup audit) BEFORE the
762
+ // dashboard. Unlike before, we then fall through to launch the dashboard, so a
763
+ // fresh user gets: setup → audit → dashboard, and every later `failproofai`
764
+ // goes straight to the dashboard. Best-effort: any error must not block launch.
698
765
  if (args.length === 0) {
699
766
  try {
700
- const { maybeRunFirstRunNudge } = await import("../src/hooks/first-run-nudge");
701
- await maybeRunFirstRunNudge();
767
+ const { maybeFirstRunConfigure } = await import("../src/hooks/configure-wizard");
768
+ await maybeFirstRunConfigure();
702
769
  } catch {
703
- // Nudge is non-critical; fall through to dashboard.
770
+ // First-run onboarding is non-critical; fall through to the dashboard.
704
771
  }
705
772
  }
706
773
 
707
- // Dashboard launch — always production mode
774
+ // Dashboard launch — always production mode. Runs on every bare `failproofai`
775
+ // (after first-run onboarding, if any).
708
776
  const { launch } = await import("../scripts/launch");
709
777
  launch("start");
710
778
  }