failproofai 0.0.6-beta.2 → 0.0.6-beta.4

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 (511) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +7 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  12. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  13. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  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/server-reference-manifest.json +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  19. package/.next/standalone/.next/server/app/_not-found.rsc +17 -17
  20. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +17 -17
  21. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  22. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  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/_not-found.segment.rsc +3 -3
  25. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  26. package/.next/standalone/.next/server/app/index.html +1 -1
  27. package/.next/standalone/.next/server/app/index.rsc +16 -16
  28. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
  30. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  31. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +11 -11
  32. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  33. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  34. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  37. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  40. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  43. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  44. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  47. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
  50. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  51. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  52. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  53. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  54. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  55. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0i5kvry._.js → [root-of-the-server]__0om-5pe._.js} +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__05akje6._.js → [root-of-the-server]__111.vxi._.js} +2 -2
  59. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  63. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js +1 -1
  65. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  66. package/.next/standalone/.next/server/pages/404.html +2 -2
  67. package/.next/standalone/.next/server/pages/500.html +1 -1
  68. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  70. package/.next/standalone/.next/static/chunks/{05j1px0r8yzh6.js → 02dqjyv6_9mhq.js} +2 -2
  71. package/.next/standalone/.next/static/chunks/{14cl9poem30dq.js → 070orfsl6.xal.js} +1 -1
  72. package/.next/standalone/.next/static/chunks/0mir9jdxn35~s.css +1 -0
  73. package/.next/standalone/.next/static/chunks/{00j0rr7rh8ef8.js → 0o547jv-k_k35.js} +1 -1
  74. package/.next/standalone/.next/static/chunks/{0ijk_kek9_wyx.js → 0pk2h2.mjxy.m.js} +1 -1
  75. package/.next/standalone/.next/static/chunks/{0xpl.oscrakvx.js → 0rcwkbh24w38b.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/{1052sguyd-.ka.js → 140xx_tfr~lm_.js} +1 -1
  77. package/.next/standalone/.next/static/chunks/{0npb~873.wvg3.js → 169_e4dq~1~b6.js} +1 -1
  78. package/.next/standalone/.next/static/chunks/{0badv41uxa56..js → 17ne4p.1sw1jy.js} +1 -1
  79. package/.next/standalone/next.config.ts +6 -0
  80. package/.next/standalone/package.json +2 -2
  81. package/.next/standalone/server.js +1 -1
  82. package/bin/failproofai.mjs +91 -4
  83. package/dist/cli.mjs +1155 -54
  84. package/package.json +2 -2
  85. package/scripts/prune-standalone.mjs +128 -0
  86. package/src/auth/login.ts +104 -0
  87. package/src/auth/logout.ts +50 -0
  88. package/src/auth/token-store.ts +64 -0
  89. package/src/hooks/builtin-policies.ts +22 -20
  90. package/src/hooks/handler.ts +35 -15
  91. package/src/relay/daemon.ts +362 -0
  92. package/src/relay/pid.ts +76 -0
  93. package/src/relay/queue.ts +225 -0
  94. package/.next/standalone/.claude/settings.json +0 -316
  95. package/.next/standalone/.failproofai/policies/review-policies.mjs +0 -113
  96. package/.next/standalone/.failproofai/policies/workflow-policies.mjs +0 -63
  97. package/.next/standalone/.failproofai/policies-config.json +0 -39
  98. package/.next/standalone/.next/static/chunks/0gu_a.a80ritd.css +0 -1
  99. package/.next/standalone/AGENTS.md +0 -80
  100. package/.next/standalone/CHANGELOG.md +0 -151
  101. package/.next/standalone/CLAUDE.md +0 -165
  102. package/.next/standalone/CONTRIBUTING.md +0 -76
  103. package/.next/standalone/Dockerfile.docs +0 -12
  104. package/.next/standalone/LICENSE +0 -42
  105. package/.next/standalone/README.md +0 -301
  106. package/.next/standalone/bin/failproofai.mjs +0 -352
  107. package/.next/standalone/bun.lock +0 -1119
  108. package/.next/standalone/components.json +0 -23
  109. package/.next/standalone/dist/cli.mjs +0 -3595
  110. package/.next/standalone/dist/index.js +0 -80
  111. package/.next/standalone/docs/ar/architecture.mdx +0 -334
  112. package/.next/standalone/docs/ar/built-in-policies.mdx +0 -574
  113. package/.next/standalone/docs/ar/cli/dashboard.mdx +0 -28
  114. package/.next/standalone/docs/ar/cli/environment-variables.mdx +0 -34
  115. package/.next/standalone/docs/ar/cli/hook.mdx +0 -31
  116. package/.next/standalone/docs/ar/cli/install-policies.mdx +0 -48
  117. package/.next/standalone/docs/ar/cli/list-policies.mdx +0 -31
  118. package/.next/standalone/docs/ar/cli/remove-policies.mdx +0 -43
  119. package/.next/standalone/docs/ar/cli/version.mdx +0 -13
  120. package/.next/standalone/docs/ar/configuration.mdx +0 -223
  121. package/.next/standalone/docs/ar/custom-policies.mdx +0 -354
  122. package/.next/standalone/docs/ar/dashboard.mdx +0 -142
  123. package/.next/standalone/docs/ar/examples.mdx +0 -307
  124. package/.next/standalone/docs/ar/for-agents.mdx +0 -39
  125. package/.next/standalone/docs/ar/getting-started.mdx +0 -187
  126. package/.next/standalone/docs/ar/introduction.mdx +0 -58
  127. package/.next/standalone/docs/ar/package-aliases.mdx +0 -82
  128. package/.next/standalone/docs/ar/testing.mdx +0 -261
  129. package/.next/standalone/docs/architecture.mdx +0 -332
  130. package/.next/standalone/docs/built-in-policies.mdx +0 -574
  131. package/.next/standalone/docs/cli/dashboard.mdx +0 -28
  132. package/.next/standalone/docs/cli/environment-variables.mdx +0 -34
  133. package/.next/standalone/docs/cli/hook.mdx +0 -30
  134. package/.next/standalone/docs/cli/install-policies.mdx +0 -47
  135. package/.next/standalone/docs/cli/list-policies.mdx +0 -31
  136. package/.next/standalone/docs/cli/remove-policies.mdx +0 -43
  137. package/.next/standalone/docs/cli/version.mdx +0 -12
  138. package/.next/standalone/docs/configuration.mdx +0 -222
  139. package/.next/standalone/docs/custom-policies.mdx +0 -353
  140. package/.next/standalone/docs/dashboard.mdx +0 -142
  141. package/.next/standalone/docs/de/architecture.mdx +0 -332
  142. package/.next/standalone/docs/de/built-in-policies.mdx +0 -574
  143. package/.next/standalone/docs/de/cli/dashboard.mdx +0 -28
  144. package/.next/standalone/docs/de/cli/environment-variables.mdx +0 -34
  145. package/.next/standalone/docs/de/cli/hook.mdx +0 -30
  146. package/.next/standalone/docs/de/cli/install-policies.mdx +0 -47
  147. package/.next/standalone/docs/de/cli/list-policies.mdx +0 -31
  148. package/.next/standalone/docs/de/cli/remove-policies.mdx +0 -43
  149. package/.next/standalone/docs/de/cli/version.mdx +0 -12
  150. package/.next/standalone/docs/de/configuration.mdx +0 -222
  151. package/.next/standalone/docs/de/custom-policies.mdx +0 -353
  152. package/.next/standalone/docs/de/dashboard.mdx +0 -142
  153. package/.next/standalone/docs/de/examples.mdx +0 -307
  154. package/.next/standalone/docs/de/for-agents.mdx +0 -38
  155. package/.next/standalone/docs/de/getting-started.mdx +0 -186
  156. package/.next/standalone/docs/de/introduction.mdx +0 -57
  157. package/.next/standalone/docs/de/package-aliases.mdx +0 -82
  158. package/.next/standalone/docs/de/testing.mdx +0 -260
  159. package/.next/standalone/docs/docs.json +0 -1002
  160. package/.next/standalone/docs/es/architecture.mdx +0 -332
  161. package/.next/standalone/docs/es/built-in-policies.mdx +0 -574
  162. package/.next/standalone/docs/es/cli/dashboard.mdx +0 -28
  163. package/.next/standalone/docs/es/cli/environment-variables.mdx +0 -34
  164. package/.next/standalone/docs/es/cli/hook.mdx +0 -30
  165. package/.next/standalone/docs/es/cli/install-policies.mdx +0 -47
  166. package/.next/standalone/docs/es/cli/list-policies.mdx +0 -31
  167. package/.next/standalone/docs/es/cli/remove-policies.mdx +0 -43
  168. package/.next/standalone/docs/es/cli/version.mdx +0 -12
  169. package/.next/standalone/docs/es/configuration.mdx +0 -222
  170. package/.next/standalone/docs/es/custom-policies.mdx +0 -353
  171. package/.next/standalone/docs/es/dashboard.mdx +0 -142
  172. package/.next/standalone/docs/es/examples.mdx +0 -307
  173. package/.next/standalone/docs/es/for-agents.mdx +0 -38
  174. package/.next/standalone/docs/es/getting-started.mdx +0 -186
  175. package/.next/standalone/docs/es/introduction.mdx +0 -57
  176. package/.next/standalone/docs/es/package-aliases.mdx +0 -82
  177. package/.next/standalone/docs/es/testing.mdx +0 -260
  178. package/.next/standalone/docs/examples.mdx +0 -307
  179. package/.next/standalone/docs/favicon.ico +0 -0
  180. package/.next/standalone/docs/for-agents.mdx +0 -38
  181. package/.next/standalone/docs/fr/architecture.mdx +0 -332
  182. package/.next/standalone/docs/fr/built-in-policies.mdx +0 -574
  183. package/.next/standalone/docs/fr/cli/dashboard.mdx +0 -28
  184. package/.next/standalone/docs/fr/cli/environment-variables.mdx +0 -34
  185. package/.next/standalone/docs/fr/cli/hook.mdx +0 -30
  186. package/.next/standalone/docs/fr/cli/install-policies.mdx +0 -47
  187. package/.next/standalone/docs/fr/cli/list-policies.mdx +0 -31
  188. package/.next/standalone/docs/fr/cli/remove-policies.mdx +0 -43
  189. package/.next/standalone/docs/fr/cli/version.mdx +0 -12
  190. package/.next/standalone/docs/fr/configuration.mdx +0 -222
  191. package/.next/standalone/docs/fr/custom-policies.mdx +0 -353
  192. package/.next/standalone/docs/fr/dashboard.mdx +0 -142
  193. package/.next/standalone/docs/fr/examples.mdx +0 -307
  194. package/.next/standalone/docs/fr/for-agents.mdx +0 -38
  195. package/.next/standalone/docs/fr/getting-started.mdx +0 -186
  196. package/.next/standalone/docs/fr/introduction.mdx +0 -57
  197. package/.next/standalone/docs/fr/package-aliases.mdx +0 -82
  198. package/.next/standalone/docs/fr/testing.mdx +0 -260
  199. package/.next/standalone/docs/getting-started.mdx +0 -186
  200. package/.next/standalone/docs/he/architecture.mdx +0 -333
  201. package/.next/standalone/docs/he/built-in-policies.mdx +0 -574
  202. package/.next/standalone/docs/he/cli/dashboard.mdx +0 -28
  203. package/.next/standalone/docs/he/cli/environment-variables.mdx +0 -34
  204. package/.next/standalone/docs/he/cli/hook.mdx +0 -30
  205. package/.next/standalone/docs/he/cli/install-policies.mdx +0 -47
  206. package/.next/standalone/docs/he/cli/list-policies.mdx +0 -32
  207. package/.next/standalone/docs/he/cli/remove-policies.mdx +0 -43
  208. package/.next/standalone/docs/he/cli/version.mdx +0 -12
  209. package/.next/standalone/docs/he/configuration.mdx +0 -223
  210. package/.next/standalone/docs/he/custom-policies.mdx +0 -353
  211. package/.next/standalone/docs/he/dashboard.mdx +0 -142
  212. package/.next/standalone/docs/he/examples.mdx +0 -307
  213. package/.next/standalone/docs/he/for-agents.mdx +0 -38
  214. package/.next/standalone/docs/he/getting-started.mdx +0 -186
  215. package/.next/standalone/docs/he/introduction.mdx +0 -57
  216. package/.next/standalone/docs/he/package-aliases.mdx +0 -82
  217. package/.next/standalone/docs/he/testing.mdx +0 -260
  218. package/.next/standalone/docs/hi/architecture.mdx +0 -334
  219. package/.next/standalone/docs/hi/built-in-policies.mdx +0 -576
  220. package/.next/standalone/docs/hi/cli/dashboard.mdx +0 -28
  221. package/.next/standalone/docs/hi/cli/environment-variables.mdx +0 -34
  222. package/.next/standalone/docs/hi/cli/hook.mdx +0 -30
  223. package/.next/standalone/docs/hi/cli/install-policies.mdx +0 -47
  224. package/.next/standalone/docs/hi/cli/list-policies.mdx +0 -31
  225. package/.next/standalone/docs/hi/cli/remove-policies.mdx +0 -43
  226. package/.next/standalone/docs/hi/cli/version.mdx +0 -12
  227. package/.next/standalone/docs/hi/configuration.mdx +0 -222
  228. package/.next/standalone/docs/hi/custom-policies.mdx +0 -354
  229. package/.next/standalone/docs/hi/dashboard.mdx +0 -142
  230. package/.next/standalone/docs/hi/examples.mdx +0 -309
  231. package/.next/standalone/docs/hi/for-agents.mdx +0 -38
  232. package/.next/standalone/docs/hi/getting-started.mdx +0 -187
  233. package/.next/standalone/docs/hi/introduction.mdx +0 -57
  234. package/.next/standalone/docs/hi/package-aliases.mdx +0 -82
  235. package/.next/standalone/docs/hi/testing.mdx +0 -260
  236. package/.next/standalone/docs/i18n/README.ar.md +0 -312
  237. package/.next/standalone/docs/i18n/README.de.md +0 -307
  238. package/.next/standalone/docs/i18n/README.es.md +0 -307
  239. package/.next/standalone/docs/i18n/README.fr.md +0 -307
  240. package/.next/standalone/docs/i18n/README.he.md +0 -312
  241. package/.next/standalone/docs/i18n/README.hi.md +0 -307
  242. package/.next/standalone/docs/i18n/README.it.md +0 -307
  243. package/.next/standalone/docs/i18n/README.ja.md +0 -307
  244. package/.next/standalone/docs/i18n/README.ko.md +0 -307
  245. package/.next/standalone/docs/i18n/README.pt-br.md +0 -307
  246. package/.next/standalone/docs/i18n/README.ru.md +0 -308
  247. package/.next/standalone/docs/i18n/README.tr.md +0 -307
  248. package/.next/standalone/docs/i18n/README.vi.md +0 -307
  249. package/.next/standalone/docs/i18n/README.zh.md +0 -307
  250. package/.next/standalone/docs/introduction.mdx +0 -57
  251. package/.next/standalone/docs/it/architecture.mdx +0 -334
  252. package/.next/standalone/docs/it/built-in-policies.mdx +0 -574
  253. package/.next/standalone/docs/it/cli/dashboard.mdx +0 -28
  254. package/.next/standalone/docs/it/cli/environment-variables.mdx +0 -34
  255. package/.next/standalone/docs/it/cli/hook.mdx +0 -30
  256. package/.next/standalone/docs/it/cli/install-policies.mdx +0 -47
  257. package/.next/standalone/docs/it/cli/list-policies.mdx +0 -31
  258. package/.next/standalone/docs/it/cli/remove-policies.mdx +0 -43
  259. package/.next/standalone/docs/it/cli/version.mdx +0 -12
  260. package/.next/standalone/docs/it/configuration.mdx +0 -222
  261. package/.next/standalone/docs/it/custom-policies.mdx +0 -353
  262. package/.next/standalone/docs/it/dashboard.mdx +0 -142
  263. package/.next/standalone/docs/it/examples.mdx +0 -307
  264. package/.next/standalone/docs/it/for-agents.mdx +0 -38
  265. package/.next/standalone/docs/it/getting-started.mdx +0 -186
  266. package/.next/standalone/docs/it/introduction.mdx +0 -57
  267. package/.next/standalone/docs/it/package-aliases.mdx +0 -82
  268. package/.next/standalone/docs/it/testing.mdx +0 -260
  269. package/.next/standalone/docs/ja/architecture.mdx +0 -332
  270. package/.next/standalone/docs/ja/built-in-policies.mdx +0 -572
  271. package/.next/standalone/docs/ja/cli/dashboard.mdx +0 -28
  272. package/.next/standalone/docs/ja/cli/environment-variables.mdx +0 -34
  273. package/.next/standalone/docs/ja/cli/hook.mdx +0 -30
  274. package/.next/standalone/docs/ja/cli/install-policies.mdx +0 -47
  275. package/.next/standalone/docs/ja/cli/list-policies.mdx +0 -31
  276. package/.next/standalone/docs/ja/cli/remove-policies.mdx +0 -43
  277. package/.next/standalone/docs/ja/cli/version.mdx +0 -12
  278. package/.next/standalone/docs/ja/configuration.mdx +0 -222
  279. package/.next/standalone/docs/ja/custom-policies.mdx +0 -353
  280. package/.next/standalone/docs/ja/dashboard.mdx +0 -142
  281. package/.next/standalone/docs/ja/examples.mdx +0 -307
  282. package/.next/standalone/docs/ja/for-agents.mdx +0 -38
  283. package/.next/standalone/docs/ja/getting-started.mdx +0 -186
  284. package/.next/standalone/docs/ja/introduction.mdx +0 -57
  285. package/.next/standalone/docs/ja/package-aliases.mdx +0 -82
  286. package/.next/standalone/docs/ja/testing.mdx +0 -260
  287. package/.next/standalone/docs/ko/architecture.mdx +0 -332
  288. package/.next/standalone/docs/ko/built-in-policies.mdx +0 -572
  289. package/.next/standalone/docs/ko/cli/dashboard.mdx +0 -28
  290. package/.next/standalone/docs/ko/cli/environment-variables.mdx +0 -34
  291. package/.next/standalone/docs/ko/cli/hook.mdx +0 -30
  292. package/.next/standalone/docs/ko/cli/install-policies.mdx +0 -47
  293. package/.next/standalone/docs/ko/cli/list-policies.mdx +0 -31
  294. package/.next/standalone/docs/ko/cli/remove-policies.mdx +0 -43
  295. package/.next/standalone/docs/ko/cli/version.mdx +0 -12
  296. package/.next/standalone/docs/ko/configuration.mdx +0 -222
  297. package/.next/standalone/docs/ko/custom-policies.mdx +0 -353
  298. package/.next/standalone/docs/ko/dashboard.mdx +0 -142
  299. package/.next/standalone/docs/ko/examples.mdx +0 -307
  300. package/.next/standalone/docs/ko/for-agents.mdx +0 -38
  301. package/.next/standalone/docs/ko/getting-started.mdx +0 -186
  302. package/.next/standalone/docs/ko/introduction.mdx +0 -57
  303. package/.next/standalone/docs/ko/package-aliases.mdx +0 -82
  304. package/.next/standalone/docs/ko/testing.mdx +0 -260
  305. package/.next/standalone/docs/logo/dark.svg +0 -21
  306. package/.next/standalone/docs/logo/exosphere-dark.png +0 -0
  307. package/.next/standalone/docs/logo/exosphere-light.png +0 -0
  308. package/.next/standalone/docs/logo/light.svg +0 -21
  309. package/.next/standalone/docs/package-aliases.mdx +0 -82
  310. package/.next/standalone/docs/pt-br/architecture.mdx +0 -332
  311. package/.next/standalone/docs/pt-br/built-in-policies.mdx +0 -574
  312. package/.next/standalone/docs/pt-br/cli/dashboard.mdx +0 -28
  313. package/.next/standalone/docs/pt-br/cli/environment-variables.mdx +0 -34
  314. package/.next/standalone/docs/pt-br/cli/hook.mdx +0 -30
  315. package/.next/standalone/docs/pt-br/cli/install-policies.mdx +0 -47
  316. package/.next/standalone/docs/pt-br/cli/list-policies.mdx +0 -31
  317. package/.next/standalone/docs/pt-br/cli/remove-policies.mdx +0 -43
  318. package/.next/standalone/docs/pt-br/cli/version.mdx +0 -12
  319. package/.next/standalone/docs/pt-br/configuration.mdx +0 -222
  320. package/.next/standalone/docs/pt-br/custom-policies.mdx +0 -353
  321. package/.next/standalone/docs/pt-br/dashboard.mdx +0 -142
  322. package/.next/standalone/docs/pt-br/examples.mdx +0 -307
  323. package/.next/standalone/docs/pt-br/for-agents.mdx +0 -38
  324. package/.next/standalone/docs/pt-br/getting-started.mdx +0 -186
  325. package/.next/standalone/docs/pt-br/introduction.mdx +0 -57
  326. package/.next/standalone/docs/pt-br/package-aliases.mdx +0 -82
  327. package/.next/standalone/docs/pt-br/testing.mdx +0 -260
  328. package/.next/standalone/docs/ru/architecture.mdx +0 -333
  329. package/.next/standalone/docs/ru/built-in-policies.mdx +0 -574
  330. package/.next/standalone/docs/ru/cli/dashboard.mdx +0 -28
  331. package/.next/standalone/docs/ru/cli/environment-variables.mdx +0 -34
  332. package/.next/standalone/docs/ru/cli/hook.mdx +0 -30
  333. package/.next/standalone/docs/ru/cli/install-policies.mdx +0 -48
  334. package/.next/standalone/docs/ru/cli/list-policies.mdx +0 -32
  335. package/.next/standalone/docs/ru/cli/remove-policies.mdx +0 -43
  336. package/.next/standalone/docs/ru/cli/version.mdx +0 -12
  337. package/.next/standalone/docs/ru/configuration.mdx +0 -222
  338. package/.next/standalone/docs/ru/custom-policies.mdx +0 -354
  339. package/.next/standalone/docs/ru/dashboard.mdx +0 -142
  340. package/.next/standalone/docs/ru/examples.mdx +0 -309
  341. package/.next/standalone/docs/ru/for-agents.mdx +0 -38
  342. package/.next/standalone/docs/ru/getting-started.mdx +0 -186
  343. package/.next/standalone/docs/ru/introduction.mdx +0 -57
  344. package/.next/standalone/docs/ru/package-aliases.mdx +0 -82
  345. package/.next/standalone/docs/ru/testing.mdx +0 -260
  346. package/.next/standalone/docs/testing.mdx +0 -260
  347. package/.next/standalone/docs/tr/architecture.mdx +0 -333
  348. package/.next/standalone/docs/tr/built-in-policies.mdx +0 -574
  349. package/.next/standalone/docs/tr/cli/dashboard.mdx +0 -28
  350. package/.next/standalone/docs/tr/cli/environment-variables.mdx +0 -34
  351. package/.next/standalone/docs/tr/cli/hook.mdx +0 -30
  352. package/.next/standalone/docs/tr/cli/install-policies.mdx +0 -47
  353. package/.next/standalone/docs/tr/cli/list-policies.mdx +0 -31
  354. package/.next/standalone/docs/tr/cli/remove-policies.mdx +0 -44
  355. package/.next/standalone/docs/tr/cli/version.mdx +0 -12
  356. package/.next/standalone/docs/tr/configuration.mdx +0 -222
  357. package/.next/standalone/docs/tr/custom-policies.mdx +0 -353
  358. package/.next/standalone/docs/tr/dashboard.mdx +0 -142
  359. package/.next/standalone/docs/tr/examples.mdx +0 -308
  360. package/.next/standalone/docs/tr/for-agents.mdx +0 -38
  361. package/.next/standalone/docs/tr/getting-started.mdx +0 -186
  362. package/.next/standalone/docs/tr/introduction.mdx +0 -57
  363. package/.next/standalone/docs/tr/package-aliases.mdx +0 -82
  364. package/.next/standalone/docs/tr/testing.mdx +0 -260
  365. package/.next/standalone/docs/vi/architecture.mdx +0 -334
  366. package/.next/standalone/docs/vi/built-in-policies.mdx +0 -575
  367. package/.next/standalone/docs/vi/cli/dashboard.mdx +0 -28
  368. package/.next/standalone/docs/vi/cli/environment-variables.mdx +0 -34
  369. package/.next/standalone/docs/vi/cli/hook.mdx +0 -30
  370. package/.next/standalone/docs/vi/cli/install-policies.mdx +0 -47
  371. package/.next/standalone/docs/vi/cli/list-policies.mdx +0 -31
  372. package/.next/standalone/docs/vi/cli/remove-policies.mdx +0 -43
  373. package/.next/standalone/docs/vi/cli/version.mdx +0 -13
  374. package/.next/standalone/docs/vi/configuration.mdx +0 -222
  375. package/.next/standalone/docs/vi/custom-policies.mdx +0 -353
  376. package/.next/standalone/docs/vi/dashboard.mdx +0 -142
  377. package/.next/standalone/docs/vi/examples.mdx +0 -308
  378. package/.next/standalone/docs/vi/for-agents.mdx +0 -38
  379. package/.next/standalone/docs/vi/getting-started.mdx +0 -186
  380. package/.next/standalone/docs/vi/introduction.mdx +0 -57
  381. package/.next/standalone/docs/vi/package-aliases.mdx +0 -82
  382. package/.next/standalone/docs/vi/testing.mdx +0 -260
  383. package/.next/standalone/docs/zh/architecture.mdx +0 -332
  384. package/.next/standalone/docs/zh/built-in-policies.mdx +0 -572
  385. package/.next/standalone/docs/zh/cli/dashboard.mdx +0 -28
  386. package/.next/standalone/docs/zh/cli/environment-variables.mdx +0 -34
  387. package/.next/standalone/docs/zh/cli/hook.mdx +0 -30
  388. package/.next/standalone/docs/zh/cli/install-policies.mdx +0 -47
  389. package/.next/standalone/docs/zh/cli/list-policies.mdx +0 -31
  390. package/.next/standalone/docs/zh/cli/remove-policies.mdx +0 -43
  391. package/.next/standalone/docs/zh/cli/version.mdx +0 -12
  392. package/.next/standalone/docs/zh/configuration.mdx +0 -222
  393. package/.next/standalone/docs/zh/custom-policies.mdx +0 -353
  394. package/.next/standalone/docs/zh/dashboard.mdx +0 -142
  395. package/.next/standalone/docs/zh/examples.mdx +0 -307
  396. package/.next/standalone/docs/zh/for-agents.mdx +0 -38
  397. package/.next/standalone/docs/zh/getting-started.mdx +0 -186
  398. package/.next/standalone/docs/zh/introduction.mdx +0 -57
  399. package/.next/standalone/docs/zh/package-aliases.mdx +0 -82
  400. package/.next/standalone/docs/zh/testing.mdx +0 -260
  401. package/.next/standalone/eslint.config.mjs +0 -15
  402. package/.next/standalone/examples/convention-policies/security-policies.mjs +0 -40
  403. package/.next/standalone/examples/convention-policies/workflow-policies.mjs +0 -41
  404. package/.next/standalone/examples/policies-advanced/index.js +0 -103
  405. package/.next/standalone/examples/policies-advanced/utils.js +0 -35
  406. package/.next/standalone/examples/policies-basic.js +0 -77
  407. package/.next/standalone/examples/policies-notification.js +0 -104
  408. package/.next/standalone/node_modules/@img/colour/color.cjs +0 -1594
  409. package/.next/standalone/node_modules/@img/colour/index.cjs +0 -1
  410. package/.next/standalone/node_modules/@img/colour/package.json +0 -45
  411. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +0 -46
  412. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  413. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
  414. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  415. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  416. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/versions.json +0 -30
  417. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
  418. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  419. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
  420. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  421. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
  422. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
  423. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  424. package/.next/standalone/node_modules/@img/sharp-linux-x64/package.json +0 -46
  425. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  426. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
  427. package/.next/standalone/node_modules/detect-libc/lib/detect-libc.js +0 -313
  428. package/.next/standalone/node_modules/detect-libc/lib/elf.js +0 -39
  429. package/.next/standalone/node_modules/detect-libc/lib/filesystem.js +0 -51
  430. package/.next/standalone/node_modules/detect-libc/lib/process.js +0 -24
  431. package/.next/standalone/node_modules/detect-libc/package.json +0 -44
  432. package/.next/standalone/node_modules/sharp/lib/channel.js +0 -177
  433. package/.next/standalone/node_modules/sharp/lib/colour.js +0 -195
  434. package/.next/standalone/node_modules/sharp/lib/composite.js +0 -212
  435. package/.next/standalone/node_modules/sharp/lib/constructor.js +0 -499
  436. package/.next/standalone/node_modules/sharp/lib/index.js +0 -16
  437. package/.next/standalone/node_modules/sharp/lib/input.js +0 -809
  438. package/.next/standalone/node_modules/sharp/lib/is.js +0 -143
  439. package/.next/standalone/node_modules/sharp/lib/libvips.js +0 -207
  440. package/.next/standalone/node_modules/sharp/lib/operation.js +0 -1016
  441. package/.next/standalone/node_modules/sharp/lib/output.js +0 -1666
  442. package/.next/standalone/node_modules/sharp/lib/resize.js +0 -595
  443. package/.next/standalone/node_modules/sharp/lib/sharp.js +0 -121
  444. package/.next/standalone/node_modules/sharp/lib/utility.js +0 -291
  445. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/comparator.js +0 -143
  446. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/range.js +0 -557
  447. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/semver.js +0 -333
  448. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/cmp.js +0 -54
  449. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/coerce.js +0 -62
  450. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/compare.js +0 -7
  451. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/eq.js +0 -5
  452. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gt.js +0 -5
  453. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gte.js +0 -5
  454. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lt.js +0 -5
  455. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lte.js +0 -5
  456. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/neq.js +0 -5
  457. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/parse.js +0 -18
  458. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/satisfies.js +0 -12
  459. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/constants.js +0 -37
  460. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/debug.js +0 -11
  461. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/identifiers.js +0 -29
  462. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/lrucache.js +0 -42
  463. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/parse-options.js +0 -17
  464. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/re.js +0 -223
  465. package/.next/standalone/node_modules/sharp/node_modules/semver/package.json +0 -78
  466. package/.next/standalone/node_modules/sharp/package.json +0 -202
  467. package/.next/standalone/scripts/alias-proxy.js +0 -18
  468. package/.next/standalone/scripts/dev.ts +0 -3
  469. package/.next/standalone/scripts/install-telemetry.mjs +0 -108
  470. package/.next/standalone/scripts/launch.ts +0 -83
  471. package/.next/standalone/scripts/parse-script-args.ts +0 -87
  472. package/.next/standalone/scripts/postinstall.mjs +0 -121
  473. package/.next/standalone/scripts/preuninstall.mjs +0 -131
  474. package/.next/standalone/scripts/publish-aliases.mjs +0 -87
  475. package/.next/standalone/scripts/start.ts +0 -3
  476. package/.next/standalone/scripts/sync-hook-events-prompt.md +0 -60
  477. package/.next/standalone/scripts/translate-docs/cache.ts +0 -62
  478. package/.next/standalone/scripts/translate-docs/cli.ts +0 -357
  479. package/.next/standalone/scripts/translate-docs/config.ts +0 -248
  480. package/.next/standalone/scripts/translate-docs/mdx-translator.ts +0 -153
  481. package/.next/standalone/scripts/translate-docs/mintlify-nav.ts +0 -107
  482. package/.next/standalone/scripts/translate-docs/readme-translator.ts +0 -154
  483. package/.next/standalone/scripts/translate-docs/translator.ts +0 -68
  484. package/.next/standalone/scripts/translate-docs/types.ts +0 -43
  485. package/.next/standalone/src/cli-error.ts +0 -18
  486. package/.next/standalone/src/hooks/builtin-policies.ts +0 -1613
  487. package/.next/standalone/src/hooks/custom-hooks-loader.ts +0 -205
  488. package/.next/standalone/src/hooks/custom-hooks-registry.ts +0 -30
  489. package/.next/standalone/src/hooks/handler.ts +0 -202
  490. package/.next/standalone/src/hooks/hook-activity-store.ts +0 -349
  491. package/.next/standalone/src/hooks/hook-logger.ts +0 -133
  492. package/.next/standalone/src/hooks/hook-telemetry.ts +0 -43
  493. package/.next/standalone/src/hooks/hooks-config.ts +0 -166
  494. package/.next/standalone/src/hooks/install-prompt.ts +0 -357
  495. package/.next/standalone/src/hooks/llm-client.ts +0 -90
  496. package/.next/standalone/src/hooks/loader-utils.ts +0 -178
  497. package/.next/standalone/src/hooks/manager.ts +0 -692
  498. package/.next/standalone/src/hooks/policy-evaluator.ts +0 -224
  499. package/.next/standalone/src/hooks/policy-helpers.ts +0 -16
  500. package/.next/standalone/src/hooks/policy-registry.ts +0 -90
  501. package/.next/standalone/src/hooks/policy-types.ts +0 -77
  502. package/.next/standalone/src/hooks/types.ts +0 -63
  503. package/.next/standalone/src/index.ts +0 -19
  504. package/.next/standalone/src/posthog-key.ts +0 -5
  505. package/.next/standalone/tailwind.config.ts +0 -11
  506. package/.next/standalone/tsconfig.json +0 -42
  507. package/.next/standalone/vitest.config.e2e.mts +0 -24
  508. package/.next/standalone/vitest.config.mts +0 -23
  509. /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_buildManifest.js +0 -0
  510. /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_clientMiddlewareManifest.js +0 -0
  511. /package/.next/standalone/.next/static/{A9pNTZdoYJTVyPAYwQMx5 → wOkJXoch1UmRAmyIuKZWc}/_ssgManifest.js +0 -0
@@ -1,357 +0,0 @@
1
- /**
2
- * Interactive searchable multi-select prompt for choosing hook policies.
3
- * Uses raw mode stdin with node:readline for keypress handling.
4
- * No external dependencies.
5
- *
6
- * Rendering strategy: track line count, use cursor-up + clear-to-end-of-screen
7
- * (\x1B[NA\x1B[J) to avoid flickering. Lines are truncated to terminal width to
8
- * ensure lastLineCount stays accurate when the terminal is narrow.
9
- *
10
- * Keybindings: ↑↓ navigate · Space toggle · Ctrl+A all · Ctrl+S save · Esc clear search
11
- */
12
- import * as readline from "node:readline";
13
- import { BUILTIN_POLICIES } from "./builtin-policies";
14
-
15
- interface SelectItem {
16
- name: string;
17
- description: string;
18
- category: string;
19
- selected: boolean;
20
- beta: boolean;
21
- }
22
-
23
- type DisplayRow =
24
- | { kind: "header"; category: string; enabledCount: number; totalCount: number }
25
- | { kind: "item"; item: SelectItem; filteredIndex: number };
26
-
27
- export interface PromptOptions {
28
- includeBeta?: boolean;
29
- }
30
-
31
- /**
32
- * Show interactive searchable policy selector.
33
- * @param preSelected — policy names to pre-check (e.g. from existing config).
34
- * When omitted, uses each policy's defaultEnabled flag.
35
- * @param options — prompt options (e.g. includeBeta)
36
- */
37
- export async function promptPolicySelection(
38
- preSelected?: string[],
39
- options: PromptOptions = {},
40
- ): Promise<string[]> {
41
- const { includeBeta = false } = options;
42
-
43
- // If stdin is not a TTY (piped/CI), return defaults
44
- if (!process.stdin.isTTY) {
45
- const available = BUILTIN_POLICIES.filter((p) => includeBeta || !p.beta);
46
- if (preSelected) return preSelected.filter((name) => available.some((p) => p.name === name));
47
- return available.filter((p) => p.defaultEnabled).map((p) => p.name);
48
- }
49
-
50
- const preSelectedSet = preSelected ? new Set(preSelected) : null;
51
-
52
- const items: SelectItem[] = BUILTIN_POLICIES
53
- .filter((p) => includeBeta || !p.beta)
54
- .map((p) => ({
55
- name: p.name,
56
- description: p.description,
57
- category: p.category,
58
- selected: preSelectedSet ? preSelectedSet.has(p.name) : p.defaultEnabled,
59
- beta: !!p.beta,
60
- }));
61
-
62
- const total = items.length;
63
- const WINDOW_SIZE = 8;
64
-
65
- let cursor = 0;
66
- let search = "";
67
- let lastLineCount = 0;
68
- let cursorHidden = false;
69
-
70
- function hideCursor(): void {
71
- if (!cursorHidden) {
72
- process.stdout.write("\x1B[?25l");
73
- cursorHidden = true;
74
- }
75
- }
76
-
77
- function showCursor(): void {
78
- if (cursorHidden) {
79
- process.stdout.write("\x1B[?25h");
80
- cursorHidden = false;
81
- }
82
- }
83
-
84
- // Truncate a line to `width` visual columns, skipping ANSI CSI sequences.
85
- function truncateLine(line: string, width: number): string {
86
- let visual = 0;
87
- let result = "";
88
- let i = 0;
89
- while (i < line.length) {
90
- if (line[i] === "\x1B" && line[i + 1] === "[") {
91
- let j = i + 2;
92
- while (j < line.length && !/[A-Za-z]/.test(line[j])) j++;
93
- j++;
94
- result += line.slice(i, j);
95
- i = j;
96
- } else {
97
- if (visual >= width) break;
98
- result += line[i];
99
- visual++;
100
- i++;
101
- }
102
- }
103
- return result;
104
- }
105
-
106
- function getFiltered(): SelectItem[] {
107
- if (!search) return items;
108
- const q = search.toLowerCase();
109
- return items.filter(
110
- (i) => i.name.toLowerCase().includes(q) || i.description.toLowerCase().includes(q),
111
- );
112
- }
113
-
114
- // Build display rows: category header rows interspersed with item rows.
115
- // Categories appear in the order they first appear in BUILTIN_POLICIES.
116
- function buildDisplayRows(filtered: SelectItem[]): DisplayRow[] {
117
- // Single pass: compute category order, enabled counts, and total counts together.
118
- const categoryOrder: string[] = [];
119
- const categoryEnabledCount = new Map<string, number>();
120
- const categoryTotalCount = new Map<string, number>();
121
- for (const p of items) {
122
- if (!categoryEnabledCount.has(p.category)) {
123
- categoryOrder.push(p.category);
124
- categoryEnabledCount.set(p.category, 0);
125
- categoryTotalCount.set(p.category, 0);
126
- }
127
- categoryTotalCount.set(p.category, categoryTotalCount.get(p.category)! + 1);
128
- if (p.selected) categoryEnabledCount.set(p.category, categoryEnabledCount.get(p.category)! + 1);
129
- }
130
-
131
- const filteredByCategory = new Map<string, SelectItem[]>();
132
- for (const item of filtered) {
133
- const bucket = filteredByCategory.get(item.category) ?? [];
134
- bucket.push(item);
135
- filteredByCategory.set(item.category, bucket);
136
- }
137
-
138
- const rows: DisplayRow[] = [];
139
- let idx = 0;
140
- for (const cat of categoryOrder) {
141
- const catFiltered = filteredByCategory.get(cat);
142
- if (!catFiltered || catFiltered.length === 0) continue;
143
- rows.push({ kind: "header", category: cat, enabledCount: categoryEnabledCount.get(cat)!, totalCount: categoryTotalCount.get(cat)! });
144
- for (const item of catFiltered) {
145
- rows.push({ kind: "item", item, filteredIndex: idx++ });
146
- }
147
- }
148
- return rows;
149
- }
150
-
151
- function render(): void {
152
- const cols = process.stdout.columns || 120;
153
- hideCursor();
154
-
155
- const filtered = getFiltered();
156
- const shown = filtered.length;
157
-
158
- // Clamp cursor to filtered list bounds
159
- if (shown > 0 && cursor >= shown) cursor = shown - 1;
160
-
161
- const lines: string[] = [];
162
-
163
- // ── Title ────────────────────────────────────────────────────
164
- lines.push(" Failproof AI \u2014 Policy Manager");
165
- lines.push("");
166
-
167
- // ── Bordered search box ──────────────────────────────────────
168
- const innerWidth = Math.max(20, cols - 6);
169
- const topBorder = " \u250c" + "\u2500".repeat(innerWidth + 2) + "\u2510";
170
- const botBorder = " \u2514" + "\u2500".repeat(innerWidth + 2) + "\u2518";
171
- const cursorChar = "\x1B[7m \x1B[0m"; // reverse-video block cursor
172
- const countPart = search
173
- ? ` \x1B[2m(${shown}/${total})\x1B[0m`
174
- : ` \x1B[2m(${total} policies)\x1B[0m`;
175
- const searchContent = `\x1B[1mSearch:\x1B[0m ${search}${cursorChar}${countPart}`;
176
- lines.push(topBorder);
177
- lines.push(` \u2502 ${searchContent}`);
178
- lines.push(botBorder);
179
- lines.push("");
180
-
181
- // ── Content area ─────────────────────────────────────────────
182
- if (shown === 0) {
183
- lines.push(" \x1B[2mNo policies match \u201c" + search + "\u201d\x1B[0m");
184
- // Pad to stable height: 1 (scroll-up) + WINDOW_SIZE (rows) + 1 (scroll-down)
185
- for (let i = 0; i < WINDOW_SIZE + 1; i++) lines.push("");
186
- } else {
187
- const displayRows = buildDisplayRows(filtered);
188
-
189
- // Find the display row index that corresponds to the current cursor
190
- let cursorDisplayRow = 0;
191
- for (let i = 0; i < displayRows.length; i++) {
192
- const row = displayRows[i];
193
- if (row.kind === "item" && row.filteredIndex === cursor) {
194
- cursorDisplayRow = i;
195
- break;
196
- }
197
- }
198
-
199
- // Viewport: keep cursor row roughly centred
200
- let windowStart = cursorDisplayRow - Math.floor(WINDOW_SIZE / 2);
201
- windowStart = Math.max(0, windowStart);
202
- windowStart = Math.min(windowStart, Math.max(0, displayRows.length - WINDOW_SIZE));
203
- const windowEnd = Math.min(displayRows.length, windowStart + WINDOW_SIZE);
204
-
205
- // Scroll-up indicator (always reserve this line for stable height)
206
- const aboveItems = displayRows
207
- .slice(0, windowStart)
208
- .filter((r) => r.kind === "item").length;
209
- if (aboveItems > 0) {
210
- lines.push(` \x1B[2m \u2191 ${aboveItems} more above\x1B[0m`);
211
- } else {
212
- lines.push("");
213
- }
214
-
215
- // Visible display rows
216
- for (let i = windowStart; i < windowEnd; i++) {
217
- const row = displayRows[i];
218
- if (row.kind === "header") {
219
- // ── CATEGORY NAME (enabled/total) ─────
220
- const label = ` ${row.category.toUpperCase()} (${row.enabledCount}/${row.totalCount}) `;
221
- const prefix = "\u2500\u2500 ";
222
- const prefixLen = 3 + label.length;
223
- const dashLen = Math.max(2, cols - 2 - prefixLen);
224
- lines.push(
225
- ` \x1B[2m${prefix}${label}${"\u2500".repeat(dashLen)}\x1B[0m`,
226
- );
227
- } else {
228
- const item = row.item;
229
- const isActive = row.filteredIndex === cursor;
230
- const pointer = isActive ? "\x1B[36m\u276f\x1B[0m" : " ";
231
- const check = item.selected ? "\x1B[32m[\u2713]\x1B[0m" : "[ ]";
232
- const namePart = isActive
233
- ? `\x1B[1;36m${item.name}\x1B[0m`
234
- : item.name;
235
- const betaPart = item.beta ? " \x1B[35m[beta]\x1B[0m" : "";
236
- const pad = " ".repeat(Math.max(1, 28 - item.name.length));
237
- const desc = `\x1B[2m${item.description}\x1B[0m`;
238
- lines.push(` ${pointer} ${check} ${namePart}${betaPart}${pad}${desc}`);
239
- }
240
- }
241
-
242
- // Pad window to fixed WINDOW_SIZE rows for stable height
243
- for (let i = windowEnd - windowStart; i < WINDOW_SIZE; i++) {
244
- lines.push("");
245
- }
246
-
247
- // Scroll-down indicator (always reserve this line for stable height)
248
- const belowItems = displayRows
249
- .slice(windowEnd)
250
- .filter((r) => r.kind === "item").length;
251
- if (belowItems > 0) {
252
- lines.push(` \x1B[2m \u2193 ${belowItems} more below\x1B[0m`);
253
- } else {
254
- lines.push("");
255
- }
256
- }
257
-
258
- // ── Footer ───────────────────────────────────────────────────
259
- lines.push("");
260
- lines.push(" \x1B[2m" + "\u2500".repeat(cols - 2) + "\x1B[0m");
261
- lines.push(
262
- " [\u2191\u2193] Move [Space] Toggle [Ctrl+A] All [Ctrl+S] Save [Esc] Clear [^C] Quit",
263
- );
264
- lines.push("");
265
- lines.push(
266
- " \x1B[2mTip: `policies` for a flat list \u00b7 `policies --install <name\u2026>` to skip prompt\x1B[0m",
267
- );
268
- if (!includeBeta) {
269
- lines.push(
270
- " \x1B[2mTip: `policies --install --beta` to include beta policies\x1B[0m",
271
- );
272
- }
273
-
274
- // ── Repaint: cursor-up by previous line count, clear to end, redraw ──
275
- if (lastLineCount > 0) {
276
- process.stdout.write(`\x1B[${lastLineCount}A\x1B[J`);
277
- }
278
- const output =
279
- lines.map((l) => (l === "" ? l : truncateLine(l, cols))).join("\n") + "\n";
280
- process.stdout.write(output);
281
- lastLineCount = lines.length;
282
- }
283
-
284
- return new Promise<string[]>((resolve) => {
285
- render();
286
-
287
- process.stdin.setRawMode(true);
288
- process.stdin.resume();
289
- // Use a single data→keypress pipeline with no readline.Interface.
290
- // readline.createInterface would register its own competing data listener
291
- // and its close() call would unexpectedly pause stdin, breaking arrow keys.
292
- readline.emitKeypressEvents(process.stdin);
293
-
294
- function keypressHandler(_str: string | undefined, key: readline.Key): void {
295
- if (!key) return;
296
-
297
- if (key.ctrl && key.name === "c") {
298
- cleanup();
299
- process.exit(0);
300
- }
301
-
302
- const filtered = getFiltered();
303
-
304
- if (key.name === "up") {
305
- if (filtered.length > 0) {
306
- cursor = cursor > 0 ? cursor - 1 : filtered.length - 1;
307
- }
308
- render();
309
- } else if (key.name === "down") {
310
- if (filtered.length > 0) {
311
- cursor = cursor < filtered.length - 1 ? cursor + 1 : 0;
312
- }
313
- render();
314
- } else if (key.name === "return" || key.name === "space") {
315
- const item = filtered[cursor];
316
- if (item) item.selected = !item.selected;
317
- render();
318
- } else if (key.name === "escape") {
319
- // Clear search filter
320
- search = "";
321
- cursor = 0;
322
- render();
323
- } else if (key.ctrl && key.name === "a") {
324
- // Toggle all visible items
325
- const allSelected = filtered.length > 0 && filtered.every((i) => i.selected);
326
- for (const item of filtered) item.selected = !allSelected;
327
- render();
328
- } else if (key.ctrl && key.name === "s") {
329
- // Submit
330
- cleanup();
331
- const selected = items.filter((i) => i.selected).map((i) => i.name);
332
- process.stdout.write("\n");
333
- resolve(selected);
334
- } else if (key.name === "backspace" || key.name === "delete") {
335
- if (search.length > 0) {
336
- search = search.slice(0, -1);
337
- cursor = 0;
338
- render();
339
- }
340
- } else if (_str && _str.length === 1 && !key.ctrl && !key.meta) {
341
- // All printable characters (including 'a', 's') go to search
342
- search += _str;
343
- cursor = 0;
344
- render();
345
- }
346
- }
347
-
348
- function cleanup(): void {
349
- showCursor();
350
- process.stdin.removeListener("keypress", keypressHandler);
351
- process.stdin.setRawMode(false);
352
- process.stdin.pause();
353
- }
354
-
355
- process.stdin.on("keypress", keypressHandler);
356
- });
357
- }
@@ -1,90 +0,0 @@
1
- /**
2
- * Shared OpenAI-compatible chat completions client.
3
- *
4
- * Uses raw `fetch` — no SDK dependency. Any policy can import this
5
- * to make LLM calls using the shared configuration from policies-config.json
6
- * or environment variables.
7
- */
8
- import { readLlmConfig } from "./hooks-config";
9
- import { hookLogInfo, hookLogError } from "./hook-logger";
10
-
11
- export interface ChatMessage {
12
- role: "system" | "user" | "assistant";
13
- content: string;
14
- }
15
-
16
- export interface ChatCompletionOptions {
17
- temperature?: number;
18
- maxTokens?: number;
19
- responseFormat?: { type: "json_object" };
20
- }
21
-
22
- export interface ChatCompletionResponse {
23
- content: string;
24
- usage?: {
25
- promptTokens: number;
26
- completionTokens: number;
27
- totalTokens: number;
28
- };
29
- }
30
-
31
- export async function chatCompletion(
32
- messages: ChatMessage[],
33
- options?: ChatCompletionOptions & { cwd?: string },
34
- ): Promise<ChatCompletionResponse> {
35
- const config = readLlmConfig(options?.cwd);
36
- if (!config) {
37
- throw new Error(
38
- "No LLM API key configured. Set FAILPROOFAI_LLM_API_KEY or configure llm.apiKey in policies-config.json",
39
- );
40
- }
41
-
42
- const body: Record<string, unknown> = {
43
- model: config.model,
44
- messages,
45
- temperature: options?.temperature ?? 0.2,
46
- max_tokens: options?.maxTokens ?? 4096,
47
- };
48
- if (options?.responseFormat) {
49
- body.response_format = options.responseFormat;
50
- }
51
-
52
- const url = `${config.baseUrl.replace(/\/+$/, "")}/chat/completions`;
53
-
54
- hookLogInfo(`llm-client: POST ${url} model=${config.model} messages=${messages.length}`);
55
-
56
- const response = await fetch(url, {
57
- method: "POST",
58
- headers: {
59
- "Content-Type": "application/json",
60
- Authorization: `Bearer ${config.apiKey}`,
61
- },
62
- body: JSON.stringify(body),
63
- signal: AbortSignal.timeout(30_000),
64
- });
65
-
66
- if (!response.ok) {
67
- let errBody = "";
68
- try { errBody = await response.text(); } catch {}
69
- hookLogError(`llm-client: ${response.status} ${response.statusText} — ${errBody.slice(0, 200)}`);
70
- throw new Error(`LLM API error: ${response.status} ${response.statusText} — ${errBody.slice(0, 200)}`);
71
- }
72
-
73
- const json = (await response.json()) as {
74
- choices?: Array<{ message?: { content?: string } }>;
75
- usage?: { prompt_tokens?: number; completion_tokens?: number; total_tokens?: number };
76
- };
77
-
78
- const content = json.choices?.[0]?.message?.content ?? "";
79
-
80
- const usage = json.usage
81
- ? {
82
- promptTokens: json.usage.prompt_tokens ?? 0,
83
- completionTokens: json.usage.completion_tokens ?? 0,
84
- totalTokens: json.usage.total_tokens ?? 0,
85
- }
86
- : undefined;
87
-
88
- hookLogInfo(`llm-client: OK tokens=${usage?.totalTokens ?? "unknown"}`);
89
- return { content, usage };
90
- }
@@ -1,178 +0,0 @@
1
- /**
2
- * Utilities for loading ESM hook/eval modules from user-provided .js files.
3
- *
4
- * Handles three problems:
5
- * 1. ESM/CJS: .js files with `import` syntax fail if package.json lacks "type":"module".
6
- * Fix: writes a temp .mjs copy (Node.js always treats .mjs as ESM).
7
- * 2. Module resolution: `from 'failproofai'` (or legacy `from 'claudeye'`) won't resolve when running in-repo.
8
- * Fix: rewrites the specifier to the absolute dist/index.js path via an ESM shim.
9
- * 3. Transitive imports: files imported by the entry point also need rewriting.
10
- * Fix: recursively follows local relative imports and rewrites all reachable files.
11
- *
12
- * The ESM shim includes hooks API exports.
13
- */
14
- import { readFile, writeFile, unlink, access } from "fs/promises";
15
- import { resolve, dirname, relative } from "path";
16
- import { pathToFileURL } from "url";
17
-
18
- export const TMP_SUFFIX = ".__failproofai_tmp__.mjs";
19
-
20
- /** Regex to find local relative import specifiers (ESM). */
21
- const LOCAL_IMPORT_RE = /(?:import\s+(?:[\s\S]*?\s+from\s+)?|export\s+(?:[\s\S]*?\s+from\s+))(['"])(\.\.?\/[^'"]+)\1/g;
22
-
23
- /** Regex to find local relative require specifiers (CJS). */
24
- const LOCAL_REQUIRE_RE = /require\s*\(\s*(['"])(\.\.?\/[^'"]+)\1\s*\)/g;
25
-
26
- export async function fileExists(path: string): Promise<boolean> {
27
- try {
28
- await access(path);
29
- return true;
30
- } catch {
31
- return false;
32
- }
33
- }
34
-
35
- export async function findDistIndex(): Promise<string | null> {
36
- // Env var set by scripts/dev.ts, scripts/start.ts, bin/failproofai.mjs
37
- const distPath = process.env.FAILPROOFAI_DIST_PATH;
38
- if (distPath) {
39
- const candidate = resolve(distPath, "index.js");
40
- if (await fileExists(candidate)) return candidate;
41
- }
42
-
43
- // Fallback: check common locations
44
- const candidates = [
45
- // Packaged binary: dist is bundled at {binaryDir}/../assets/dist/
46
- resolve(dirname(process.execPath), "..", "assets", "dist", "index.js"),
47
- resolve(process.cwd(), "dist", "index.js"),
48
- resolve(process.cwd(), "node_modules", "failproofai", "dist", "index.js"),
49
- ];
50
- for (const c of candidates) {
51
- if (await fileExists(c)) return c;
52
- }
53
- return null;
54
- }
55
-
56
- /**
57
- * Resolve a relative import specifier to an actual file path.
58
- * Tries the path as-is, then with .js, .mjs, .ts, and /index.js extensions.
59
- */
60
- export async function resolveLocalImport(
61
- fromDir: string,
62
- specifier: string,
63
- ): Promise<string | null> {
64
- const base = resolve(fromDir, specifier);
65
- const candidates = [base, `${base}.js`, `${base}.mjs`, `${base}.ts`, resolve(base, "index.js")];
66
- for (const c of candidates) {
67
- if (await fileExists(c)) return c;
68
- }
69
- return null;
70
- }
71
-
72
- /**
73
- * Create an ESM shim that re-exports from the CJS dist module.
74
- * Exports the full public API of failproofai: customPolicies, allow, deny, instruct,
75
- * getCustomHooks, clearCustomHooks.
76
- */
77
- export async function createEsmShim(
78
- distIndex: string,
79
- distUrl: string,
80
- ): Promise<{ shimPath: string; shimUrl: string }> {
81
- const shimPath = distIndex + ".__failproofai_esm_shim__.mjs";
82
- const shimCode = [
83
- `import _cjs from '${distUrl}';`,
84
- `export const customPolicies = _cjs.customPolicies;`,
85
- `export const getCustomHooks = _cjs.getCustomHooks;`,
86
- `export const clearCustomHooks = _cjs.clearCustomHooks;`,
87
- `export const allow = _cjs.allow;`,
88
- `export const deny = _cjs.deny;`,
89
- `export const instruct = _cjs.instruct;`,
90
- `export default _cjs;`,
91
- ].join("\n");
92
- await writeFile(shimPath, shimCode, "utf-8");
93
- return { shimPath, shimUrl: pathToFileURL(shimPath).href };
94
- }
95
-
96
- /**
97
- * Rewrite `from 'failproofai'`/`from 'claudeye'` and local relative imports in all files
98
- * reachable from the entry point. Returns the list of temp files created (including the shim).
99
- */
100
- export async function rewriteFileTree(
101
- entryPath: string,
102
- distUrl: string | null,
103
- distIndex: string | null,
104
- ): Promise<string[]> {
105
- const queue: string[] = [entryPath];
106
- const visited = new Set<string>();
107
- const tmpFiles: string[] = [];
108
-
109
- let esmShimUrl: string | null = null;
110
- if (distIndex && distUrl) {
111
- const shim = await createEsmShim(distIndex, distUrl);
112
- tmpFiles.push(shim.shimPath);
113
- esmShimUrl = shim.shimUrl;
114
- }
115
-
116
- while (queue.length > 0) {
117
- const filePath = queue.shift()!;
118
- if (visited.has(filePath)) continue;
119
- visited.add(filePath);
120
-
121
- let code = await readFile(filePath, "utf-8");
122
-
123
- // Rewrite 'failproofai' or legacy 'claudeye' imports to the ESM shim (or direct CJS for require)
124
- if (esmShimUrl) {
125
- code = code.replace(
126
- /from\s+(['"])(?:claudeye|failproofai)\1/g,
127
- `from '${esmShimUrl}'`,
128
- );
129
- }
130
- if (distIndex) {
131
- code = code.replace(
132
- /require\s*\(\s*(['"])(?:claudeye|failproofai)\1\s*\)/g,
133
- `require('${distIndex.replace(/\\/g, "\\\\")}')`
134
- );
135
- }
136
-
137
- // Find local relative imports and collect specifier → replacement mappings
138
- const dir = dirname(filePath);
139
- const rewrites = new Map<string, string>();
140
- for (const re of [LOCAL_IMPORT_RE, LOCAL_REQUIRE_RE]) {
141
- const freshRe = new RegExp(re.source, re.flags);
142
- let match: RegExpExecArray | null;
143
- while ((match = freshRe.exec(code)) !== null) {
144
- const specifier = match[2];
145
- if (rewrites.has(specifier)) continue;
146
- const resolved = await resolveLocalImport(dir, specifier);
147
- if (!resolved) continue;
148
- if (!visited.has(resolved) && !queue.includes(resolved)) {
149
- queue.push(resolved);
150
- }
151
- let relPath = relative(dir, resolved + TMP_SUFFIX).split("\\").join("/");
152
- if (!relPath.startsWith(".")) relPath = "./" + relPath;
153
- rewrites.set(specifier, relPath);
154
- }
155
- }
156
-
157
- // Rewrite collected specifiers to point to temp versions
158
- const sortedSpecs = [...rewrites.keys()].sort((a, b) => b.length - a.length);
159
- for (const specifier of sortedSpecs) {
160
- const replacement = rewrites.get(specifier)!;
161
- const escaped = specifier.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
162
- code = code.replace(new RegExp(`'${escaped}'`, "g"), `'${replacement}'`);
163
- code = code.replace(new RegExp(`"${escaped}"`, "g"), `"${replacement}"`);
164
- }
165
-
166
- const tmpPath = filePath + TMP_SUFFIX;
167
- await writeFile(tmpPath, code, "utf-8");
168
- tmpFiles.push(tmpPath);
169
- }
170
-
171
- return tmpFiles;
172
- }
173
-
174
- export async function cleanupTmpFiles(tmpFiles: string[]): Promise<void> {
175
- for (const tmp of tmpFiles) {
176
- try { await unlink(tmp); } catch { /* ignore cleanup errors */ }
177
- }
178
- }