failproofai 1.0.10 → 1.0.11-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 (297) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +6 -6
  3. package/.next/standalone/.next/prerender-manifest.json +4 -4
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +3 -3
  6. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js +4 -4
  8. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.meta +8 -0
  12. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  14. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  15. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +3 -3
  17. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page.js +4 -4
  19. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.meta +8 -0
  23. package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
  24. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/api/audit/invite/route.js +4 -4
  28. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/audit/run/route.js +4 -4
  30. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/audit/status/route.js +1 -1
  32. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/auth/login-request/route.js +2 -2
  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 +4 -4
  36. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/auth/logout/route.js +3 -3
  38. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/auth/status/route.js +3 -3
  40. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +1 -1
  42. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/audit/page/build-manifest.json +3 -3
  44. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  45. package/.next/standalone/.next/server/app/audit/page.js +4 -4
  46. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/index.html +1 -1
  49. package/.next/standalone/.next/server/app/index.meta +8 -0
  50. package/.next/standalone/.next/server/app/index.rsc +14 -14
  51. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +13 -13
  52. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
  53. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/page/build-manifest.json +3 -3
  55. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  56. package/.next/standalone/.next/server/app/page.js +4 -4
  57. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +3 -3
  60. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  61. package/.next/standalone/.next/server/app/policies/page.js +8 -8
  62. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +3 -3
  65. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  66. package/.next/standalone/.next/server/app/project/[name]/page.js +5 -5
  67. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +3 -3
  70. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  71. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  72. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +5 -5
  73. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +3 -3
  76. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  77. package/.next/standalone/.next/server/app/projects/page.js +5 -5
  78. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/settings/page/build-manifest.json +3 -3
  81. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  82. package/.next/standalone/.next/server/app/settings/page.js +9 -9
  83. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/chunks/{[externals]__0qxhecv._.js → [externals]__0d7i9ea._.js} +2 -2
  86. package/.next/standalone/.next/server/chunks/{[externals]__0sg9-3p._.js → [externals]__0hjaw70._.js} +1 -1
  87. package/.next/standalone/.next/server/chunks/[externals]__1_9ze9b._.js +3 -0
  88. package/.next/standalone/.next/server/chunks/[externals]__1oenfmn._.js +3 -0
  89. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08dchfu._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ga9hs7._.js +3 -0
  91. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l3yhx4._.js +2 -2
  92. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0moxohc._.js +22 -0
  93. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
  94. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0z2ll-a._.js +3 -0
  95. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adacul._.js +11 -11
  96. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1autwno._.js +3 -0
  97. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1v25n-6._.js +3 -0
  98. package/.next/standalone/.next/server/chunks/_09dz7xv._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +2 -2
  102. package/.next/standalone/.next/server/chunks/_1fz8m31._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/_1jrv3hg._.js +3 -0
  104. package/.next/standalone/.next/server/chunks/_1nx8fim._.js +3 -0
  105. package/.next/standalone/.next/server/chunks/_1ogwigf._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/{_1q5i8mb._.js → _1q27azx._.js} +2 -2
  107. package/.next/standalone/.next/server/chunks/lib_telemetry_ts_0dctyyw._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_0el6rg8._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_0ol5pa3._.js} +2 -2
  109. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_04op_ou._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_1rqmk27._.js} +2 -2
  110. package/.next/standalone/.next/server/chunks/{node_modules_posthog-node_dist_entrypoints_index_node_mjs_0dr20uz._.js → node_modules_posthog-node_dist_entrypoints_index_node_mjs_1w7tiq4._.js} +2 -2
  111. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  112. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0oqrl71._.js → [root-of-the-server]__042u-jn._.js} +2 -2
  113. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +2 -2
  114. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1-bm5zf._.js → [root-of-the-server]__0502lat._.js} +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_gn5iz._.js +4 -0
  116. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f765xr._.js +4 -0
  117. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__01bmjsj._.js → [root-of-the-server]__0h38gzz._.js} +1 -1
  118. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hoaz1g._.js +4 -0
  119. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1ouobn4._.js → [root-of-the-server]__0mxmwtx._.js} +1 -1
  120. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__19evfi8._.js → [root-of-the-server]__0uescqv._.js} +1 -1
  121. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13d-wb6._.js +1 -1
  122. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1484zv2._.js +3 -0
  123. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1mf3zp6._.js → [root-of-the-server]__19dutr7._.js} +4 -4
  124. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1u6sn69._.js → [root-of-the-server]__1ab4ifb._.js} +1 -1
  125. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1fbrk56._.js +4 -0
  126. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +2 -2
  127. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1um4yxn._.js +4 -0
  128. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1wb4yt2._.js +4 -0
  129. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1y3n3cn._.js +4 -0
  130. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/ssr/{_0yq5_3a._.js → _1ffxwxz._.js} +1 -1
  133. package/.next/standalone/.next/server/chunks/ssr/_1gb0ifp._.js +2 -2
  134. package/.next/standalone/.next/server/chunks/ssr/{_042cgl1._.js → _1o95rf0._.js} +2 -2
  135. package/.next/standalone/.next/server/chunks/ssr/{_1zopuov._.js → _1thr5rf._.js} +2 -2
  136. package/.next/standalone/.next/server/chunks/ssr/{_16pa9ht._.js → _1v1o2ya._.js} +2 -2
  137. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +12 -14
  138. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  140. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/ssr/node_modules_1hl81y4._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js +6 -0
  145. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589g._.js +1 -1
  146. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
  147. package/.next/standalone/.next/server/middleware-build-manifest.js +6 -6
  148. package/.next/standalone/.next/server/middleware.js +1 -1
  149. package/.next/standalone/.next/server/pages/404.html +1 -1
  150. package/.next/standalone/.next/server/pages/500.html +1 -1
  151. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
  153. package/.next/standalone/.next/static/chunks/08tmc_7n-rba1.js +1 -0
  154. package/.next/standalone/.next/static/chunks/{3mjfvng11xnoo.js → 09tlrmucn6oq3.js} +1 -1
  155. package/.next/standalone/.next/static/chunks/{078dofaxvjgpd.js → 0i69k917myh7b.js} +1 -1
  156. package/.next/standalone/.next/static/chunks/{03h3b-uomi7_d.js → 0u_nhsujkactp.js} +1 -1
  157. package/.next/standalone/.next/static/chunks/{2j92xul6y24_v.js → 0zp51hzx62i-u.js} +1 -1
  158. package/.next/standalone/.next/static/chunks/{3u1s8dsqiean5.js → 1fz7q0gtnmeod.js} +1 -1
  159. package/.next/standalone/.next/static/chunks/{3ob2161ap37ul.js → 1j75le8wln-26.js} +1 -1
  160. package/.next/standalone/.next/static/chunks/{2kj826h1w9r47.js → 1z4km7tw0_50h.js} +1 -1
  161. package/.next/standalone/.next/static/chunks/{1fqukzzowjflt.js → 239ay_80-xr8z.js} +1 -1
  162. package/.next/standalone/.next/static/chunks/{3nkc2jlgyygda.js → 2c9pc5xco6rnu.js} +1 -1
  163. package/.next/standalone/.next/static/chunks/{3i8rg2fv9nd6e.js → 3n46e45atic-m.js} +1 -1
  164. package/.next/standalone/.next/static/chunks/{0542cuk_va8g1.js → 3sg07wnn969xq.js} +1 -1
  165. package/.next/standalone/.next/static/chunks/{turbopack-11dn2pegmg9_9.js → turbopack-1opxka4dtjbc5.js} +1 -1
  166. package/.next/standalone/app/actions/install-hooks-web.ts +10 -2
  167. package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
  168. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  169. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  170. package/.next/standalone/node_modules/next/dist/compiled/hash.js/sha256/256.js +1 -0
  171. package/.next/standalone/node_modules/next/dist/compiled/hash.js/sha256/package.json +1 -0
  172. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +17 -17
  173. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +18 -18
  174. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +3 -3
  175. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +13 -13
  176. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  177. package/.next/standalone/node_modules/next/dist/server/base-server.js +1 -2
  178. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  179. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  180. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  181. package/.next/standalone/node_modules/next/dist/server/image-optimizer.js +265 -53
  182. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  183. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +177 -19
  184. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/index.js +36 -17
  185. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js +14 -6
  186. package/.next/standalone/node_modules/next/dist/server/lib/match-next-data-pathname.js +3 -1
  187. package/.next/standalone/node_modules/next/dist/server/lib/node-fs-methods.js +14 -0
  188. package/.next/standalone/node_modules/next/dist/server/lib/route-cache-key.js +77 -0
  189. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js +9 -11
  190. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  191. package/.next/standalone/node_modules/next/dist/server/mcp/get-mcp-middleware.js +4 -2
  192. package/.next/standalone/node_modules/next/dist/server/next-server.js +7 -3
  193. package/.next/standalone/node_modules/next/dist/server/response-cache/index.js +32 -16
  194. package/.next/standalone/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js +2 -2
  195. package/.next/standalone/node_modules/next/dist/server/route-modules/pages/pages-handler.js +6 -1
  196. package/.next/standalone/node_modules/next/dist/server/route-modules/route-module.js +9 -2
  197. package/.next/standalone/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +30 -29
  198. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/app-paths.js +18 -1
  199. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  200. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  201. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  202. package/.next/standalone/node_modules/next/package.json +10 -10
  203. package/.next/standalone/package.json +14 -11
  204. package/.next/standalone/sdk/python/README.md +41 -0
  205. package/.next/standalone/sdk/python/docs/README.md +1 -0
  206. package/.next/standalone/sdk/python/docs/otel/README.md +36 -0
  207. package/.next/standalone/sdk/python/docs/otel/examples/agent_trace.py +30 -0
  208. package/.next/standalone/sdk/python/docs/otel/examples/quickstart.py +22 -0
  209. package/.next/standalone/sdk/python/failproofai_sdk/__init__.py +8 -0
  210. package/.next/standalone/sdk/python/failproofai_sdk/integrations/__init__.py +3 -0
  211. package/.next/standalone/sdk/python/failproofai_sdk/integrations/otel.py +189 -0
  212. package/.next/standalone/sdk/python/pyproject.toml +2 -1
  213. package/.next/standalone/sdk/python/tests/test_docs.py +16 -3
  214. package/.next/standalone/sdk/python/tests/test_integrations.py +1 -1
  215. package/.next/standalone/sdk/python/tests/test_otel.py +147 -0
  216. package/.next/standalone/sdk/python/tests/test_zero_dependencies.py +4 -1
  217. package/.next/standalone/sdk/python/uv.lock +258 -147
  218. package/.next/standalone/sdk/typescript/README.md +43 -0
  219. package/.next/standalone/sdk/typescript/integration/ai.test.ts +9 -2
  220. package/.next/standalone/sdk/typescript/package-lock.json +57 -5
  221. package/.next/standalone/sdk/typescript/package.json +2 -0
  222. package/.next/standalone/sdk/typescript/src/edge/index.ts +9 -0
  223. package/.next/standalone/sdk/typescript/src/index.ts +2 -0
  224. package/.next/standalone/sdk/typescript/src/integrations/index.ts +4 -1
  225. package/.next/standalone/sdk/typescript/src/integrations/otel.ts +204 -0
  226. package/.next/standalone/sdk/typescript/test/integrations.test.ts +1 -1
  227. package/.next/standalone/sdk/typescript/test/otel.test.ts +125 -0
  228. package/.next/standalone/server.js +1 -1
  229. package/bin/failproofai.mjs +653 -1077
  230. package/dist/cli.mjs +8174 -3930
  231. package/dist/worker.mjs +170 -62
  232. package/hermes-plugin/plugin.yaml +1 -1
  233. package/package.json +14 -11
  234. package/scripts/launch-facts.ts +157 -0
  235. package/scripts/launch-ready.ts +228 -0
  236. package/scripts/launch-screen.ts +202 -0
  237. package/scripts/launch.ts +106 -49
  238. package/scripts/skew-log-filter.ts +42 -0
  239. package/src/audit/cli-login.ts +39 -59
  240. package/src/audit/cli.ts +308 -228
  241. package/src/audit/index.ts +45 -2
  242. package/src/audit/schedule-cli.ts +83 -120
  243. package/src/audit/types.ts +31 -0
  244. package/src/hooks/agent-selection.ts +155 -0
  245. package/src/hooks/backfill-cli.ts +151 -137
  246. package/src/hooks/backfill-request.ts +149 -0
  247. package/src/hooks/cloud-connection.ts +1 -1
  248. package/src/hooks/cloud-enrollment-cli.ts +78 -28
  249. package/src/hooks/cloud-introspect.ts +3 -0
  250. package/src/hooks/collector-config.ts +10 -1
  251. package/src/hooks/config-status.ts +606 -0
  252. package/src/hooks/configure-wizard.ts +915 -989
  253. package/src/hooks/daemon-service.ts +16 -6
  254. package/src/hooks/did-you-mean.ts +185 -0
  255. package/src/hooks/flush-cli.ts +33 -7
  256. package/src/hooks/fp-config.ts +96 -0
  257. package/src/hooks/fp-home.ts +11 -0
  258. package/src/hooks/fp-reset.ts +102 -95
  259. package/src/hooks/handler.ts +4 -0
  260. package/src/hooks/harness-cli.ts +87 -138
  261. package/src/hooks/install-prompt.ts +38 -477
  262. package/src/hooks/integrations.ts +1 -1
  263. package/src/hooks/jev-cli.ts +183 -196
  264. package/src/hooks/manager.ts +554 -358
  265. package/src/hooks/onboarding-attempt.ts +11 -9
  266. package/src/hooks/otel-cli.ts +344 -0
  267. package/src/hooks/otel-output.ts +24 -0
  268. package/src/hooks/otel-writers.ts +225 -0
  269. package/src/hooks/pack-cli.ts +219 -204
  270. package/src/hooks/report-body.ts +50 -0
  271. package/src/hooks/safe-config-write.ts +4 -2
  272. package/src/hooks/session-pause-cli.ts +93 -73
  273. package/src/hooks/tui.ts +849 -389
  274. package/src/hooks/uninstall-cli.ts +136 -149
  275. package/src/hooks/untraced-note.ts +52 -0
  276. package/.next/standalone/.next/server/chunks/[externals]__19_pzeq._.js +0 -3
  277. package/.next/standalone/.next/server/chunks/[externals]__20kzpkf._.js +0 -3
  278. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01eqny5._.js +0 -3
  279. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05ja_05._.js +0 -3
  280. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0igxt32._.js +0 -3
  281. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zyc_nm._.js +0 -3
  282. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ttrwnd._.js +0 -22
  283. package/.next/standalone/.next/server/chunks/_0bs-v8p._.js +0 -3
  284. package/.next/standalone/.next/server/chunks/_185gyk9._.js +0 -3
  285. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +0 -4
  286. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +0 -4
  287. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +0 -4
  288. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yrsbd_._.js +0 -3
  289. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +0 -4
  290. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15578wp._.js +0 -4
  291. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m_svbe._.js +0 -4
  292. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +0 -4
  293. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_1n3w9lb._.js +0 -6
  294. package/.next/standalone/.next/static/chunks/1lyg_puttohbc.js +0 -1
  295. /package/.next/standalone/.next/static/{ECs8__hcNabYV58WfDh-3 → UZKCiP4Q2TeU8zOB-h9Xj}/_buildManifest.js +0 -0
  296. /package/.next/standalone/.next/static/{ECs8__hcNabYV58WfDh-3 → UZKCiP4Q2TeU8zOB-h9Xj}/_clientMiddlewareManifest.js +0 -0
  297. /package/.next/standalone/.next/static/{ECs8__hcNabYV58WfDh-3 → UZKCiP4Q2TeU8zOB-h9Xj}/_ssgManifest.js +0 -0
@@ -37,18 +37,11 @@
37
37
 
38
38
  import { homedir } from "node:os";
39
39
  import { resolve } from "node:path";
40
- import { readConfig, updateConfig } from "./fp-config";
40
+ import { isAgentTraced, readConfig, updateConfig } from "./fp-config";
41
41
  import { configFile } from "./fp-home";
42
- import {
43
- emptyState,
44
- note,
45
- table,
46
- optsFor,
47
- rule,
48
- stack,
49
- title,
50
- warning,
51
- } from "./tui";
42
+ import { getIntegration } from "./integrations";
43
+ import { optsFor, screenKit } from "./tui";
44
+ import type { IntegrationType } from "./types";
52
45
 
53
46
  /**
54
47
  * Harness keys `collector.sources.<key>` accepts.
@@ -88,13 +81,23 @@ export interface HarnessResult {
88
81
 
89
82
  const ok = (lines: string[]): HarnessResult => ({ lines, exitCode: 0 });
90
83
  const fail = (lines: string[]): HarnessResult => ({ lines, exitCode: 1 });
84
+ const kitFor = () => screenKit(optsFor(process.stdout));
91
85
 
92
86
  function unknownHarness(name: string): HarnessResult {
93
- return fail([
94
- `Unknown harness: ${name}`,
95
- "",
96
- `Known harnesses: ${HARNESS_KEYS.join(", ")}`,
97
- ]);
87
+ const kit = kitFor();
88
+ return fail([kit.fail(`Unknown harness: ${name}.`), ` Known: ${HARNESS_KEYS.join(", ")}`]);
89
+ }
90
+
91
+ /**
92
+ * An agent `failproofai config` does not trace collects nothing, extra paths
93
+ * included: the daemon starts no task for it. Said wherever a path is shown or
94
+ * added, because otherwise a configured path reads as captured.
95
+ */
96
+ function untracedLine(harness: string): string[] {
97
+ if (isAgentTraced(harness)) return [];
98
+ const kit = kitFor();
99
+ const name = getIntegration(harness as IntegrationType).displayName;
100
+ return [kit.caution(`${name} isn't traced, so nothing is captured from its paths until it is.`, "failproofai config")];
98
101
  }
99
102
 
100
103
  /** The path half of an entry, for comparing against what a user typed. */
@@ -150,10 +153,7 @@ function writePaths(harness: string, paths: string[]): void {
150
153
  * wrong twice over: the restart is unnecessary, and it asks for root from a
151
154
  * command that writes one file in the user's own home and needs none.
152
155
  */
153
- const TAKES_EFFECT_HINT = [
154
- "",
155
- "The daemon picks this up on its own within a few seconds — no restart, no sudo.",
156
- ];
156
+ const TAKES_EFFECT_HINT = [" The daemon picks this up within a few seconds: no restart, no sudo."];
157
157
 
158
158
  /**
159
159
  * The daemon's label rule, FOR COMPARISON ONLY.
@@ -206,10 +206,11 @@ function effectiveLabel(entry: string): string {
206
206
 
207
207
  export function addPath(harness: string, entry: string): HarnessResult {
208
208
  if (!(HARNESS_KEYS as readonly string[]).includes(harness)) return unknownHarness(harness);
209
+ const kit = kitFor();
209
210
  const trimmed = entry.trim();
210
- if (trimmed === "") return fail(["A path is required."]);
211
+ if (trimmed === "") return fail([kit.fail("A path is required.")]);
211
212
  if (pathOf(trimmed) === "") {
212
- return fail([`Could not read a path out of ${JSON.stringify(entry)}.`, "", "Use `<path>` or `<label>=<path>`."]);
213
+ return fail([kit.fail(`Could not read a path out of ${JSON.stringify(entry)}.`), ` Use ${kit.cmd("<path>")} or ${kit.cmd("<label>=<path>")}`]);
213
214
  }
214
215
 
215
216
  const existing = currentPaths(harness);
@@ -217,7 +218,7 @@ export function addPath(harness: string, entry: string): HarnessResult {
217
218
  // Exact duplicate: succeed rather than error. `add-path` run twice from a
218
219
  // provisioning script must not fail the second time.
219
220
  if (existing.includes(trimmed)) {
220
- return ok([`${harness}: ${trimmed} is already configured.`]);
221
+ return ok([kit.ok(`${harness}: ${trimmed} is already configured.`), ...untracedLine(harness)]);
221
222
  }
222
223
 
223
224
  // Same path under a different label, or the same label on a different path.
@@ -231,10 +232,8 @@ export function addPath(harness: string, entry: string): HarnessResult {
231
232
  const samePath = existing.find((e) => comparablePath(pathOf(e)) === comparablePath(pathOf(trimmed)));
232
233
  if (samePath) {
233
234
  return fail([
234
- `${harness} already captures ${pathOf(trimmed)} as ${JSON.stringify(samePath)}.`,
235
- "",
236
- "Remove it first if you meant to relabel it:",
237
- ` failproofai harness remove-path ${harness} ${pathOf(trimmed)}`,
235
+ kit.fail(`${harness} already captures ${pathOf(trimmed)} as ${JSON.stringify(samePath)}.`),
236
+ ` To relabel it, remove it first: ${kit.cmd(`failproofai harness remove-path ${harness} ${pathOf(trimmed)}`)}`,
238
237
  ]);
239
238
  }
240
239
  const wanted = labelOf(trimmed);
@@ -249,15 +248,12 @@ export function addPath(harness: string, entry: string): HarnessResult {
249
248
  ? existing.find((e) => effectiveLabel(e) === effective)
250
249
  : undefined;
251
250
  if (sameLabel) {
251
+ // Labels namespace agent ids, and the daemon lowercases them and collapses
252
+ // punctuation, so labels differing only in case or spacing collide; an
253
+ // unlabelled path takes its folder name.
252
254
  return fail([
253
- `${harness} already uses the label ${JSON.stringify(effective)} for ${pathOf(sameLabel)}.`,
254
- "",
255
- "Labels namespace agent ids, so two paths cannot share one — and the daemon",
256
- "lowercases them and collapses punctuation to `-`, so labels that differ only",
257
- "in case or spacing collide. An unlabelled path takes its folder name.",
258
- "",
259
- "Give this one an explicit label:",
260
- ` failproofai harness add-path ${harness} <label>=${pathOf(trimmed)}`,
255
+ kit.fail(`${harness} already uses the label ${JSON.stringify(effective)} for ${pathOf(sameLabel)}.`),
256
+ ` Give this one its own label: ${kit.cmd(`failproofai harness add-path ${harness} <label>=${pathOf(trimmed)}`)}`,
261
257
  ]);
262
258
  }
263
259
 
@@ -270,15 +266,15 @@ export function addPath(harness: string, entry: string): HarnessResult {
270
266
  // is not in a position to make, so it says what it did and where the answer
271
267
  // is. Teaching the CLI all thirteen sources' default roots would be the second
272
268
  // parser this file exists to avoid.
273
- `${harness}: configured to also capture ${pathOf(trimmed)}`,
274
- wanted
275
- ? ` agent ids will be namespaced ${wanted}-*`
276
- : " a label will be derived from the folder name; `failproofai harness list` shows it",
277
- ` written to ${configFile()}`,
278
- "",
279
- " The daemon validates it on the next read and reports what it rejected —",
280
- " `failproofai harness list` shows what is actually being captured.",
269
+ //
270
+ // And `harness list` is not where the answer is: it reads this same file, so
271
+ // it shows what is configured, not what is captured. The daemon's log is.
272
+ kit.ok(`${harness}: configured to also capture ${pathOf(trimmed)}`),
273
+ wanted ? ` Agent ids are namespaced ${wanted}-*` : " A label is derived from the folder name.",
274
+ ` Written to ${configFile()}`,
275
+ " The daemon validates it on the next read and logs any path it rejects.",
281
276
  ...TAKES_EFFECT_HINT,
277
+ ...untracedLine(harness),
282
278
  ]);
283
279
  }
284
280
 
@@ -289,21 +285,17 @@ export function removePath(harness: string, target: string): HarnessResult {
289
285
  // Match on the whole entry, on its path, or on its label — a user removing
290
286
  // something is working from what `list` printed, which shows all three.
291
287
  const kept = existing.filter((e) => e !== t && pathOf(e) !== t && labelOf(e) !== t);
288
+ const kit = kitFor();
292
289
  if (kept.length === existing.length) {
293
290
  return fail([
294
- `${harness} has no extra path matching ${JSON.stringify(t)}.`,
295
- "",
296
- existing.length > 0
297
- ? `Configured: ${existing.join(", ")}`
298
- : `${harness} has no extra paths configured.`,
291
+ kit.fail(`${harness} has no extra path matching ${JSON.stringify(t)}.`),
292
+ existing.length > 0 ? ` Configured: ${existing.join(", ")}` : ` ${harness} has no extra paths configured.`,
299
293
  ]);
300
294
  }
301
295
  writePaths(harness, kept);
302
296
  return ok([
303
- `${harness}: no longer capturing ${t}`,
304
- "",
305
- "Already-collected sessions from that path are NOT removed — they are on the",
306
- "server. This only stops new ones.",
297
+ kit.ok(`${harness}: no longer capturing ${t}`),
298
+ " Sessions already collected from it stay on the server; this only stops new ones.",
307
299
  ...TAKES_EFFECT_HINT,
308
300
  ]);
309
301
  }
@@ -324,91 +316,48 @@ export function listPaths(harness?: string): HarnessResult {
324
316
  (k) => !(HARNESS_KEYS as readonly string[]).includes(k),
325
317
  );
326
318
 
327
- const opts = optsFor(process.stdout);
328
- const head = (extra: number) =>
329
- title(
330
- "failproofai harness list",
331
- `${HARNESS_KEYS.length} harnesses · ${extra} extra path${extra === 1 ? "" : "s"}`,
332
- opts,
333
- );
319
+ const kit = kitFor();
320
+ const header = [kit.header("Harness"), ""];
321
+ const unknownLines =
322
+ unknown.length > 0
323
+ ? [
324
+ "",
325
+ kit.caution(
326
+ `config.json configures ${unknown.length === 1 ? "an unknown harness" : `${unknown.length} unknown harnesses`}: ${unknown.join(", ")}. Nothing is captured from ${unknown.length === 1 ? "it" : "them"}.`,
327
+ ),
328
+ ` Known: ${HARNESS_KEYS.join(", ")}`,
329
+ ]
330
+ : [];
334
331
 
335
- if (names.length === 0 && unknown.length === 0) {
336
- return ok(
337
- stack(
338
- head(0),
339
- emptyState(
340
- {
341
- what: "No extra capture paths configured. Every harness is watching only its default location.",
342
- hint: "Add one with:",
343
- cmd: "failproofai harness add-path <harness> [<label>=]<path>",
344
- },
345
- opts,
346
- ),
347
- // Wrapped, not joined into one line: twelve names ran off the right edge
348
- // of an 80-column terminal, and the twelfth is as real as the first.
349
- note(`Harnesses: ${HARNESS_KEYS.join(", ")}`, opts),
350
- ),
351
- );
332
+ const configured = names.reduce((n, name) => n + (sources[name]?.extraPaths?.length ?? 0), 0);
333
+ if (configured === 0 && !harness) {
334
+ return ok([
335
+ ...header,
336
+ "No extra capture paths configured. Every agent reads only its default location.",
337
+ ` Add one: ${kit.cmd("failproofai harness add-path <agent> [label=]<path>")}`,
338
+ ...unknownLines,
339
+ ]);
352
340
  }
353
341
 
354
- const configured = names.reduce((n, name) => n + (sources[name]?.extraPaths?.length ?? 0), 0);
355
- const groups: Array<string[] | null> = [head(configured)];
342
+ const lines: string[] = [...header];
356
343
  for (const name of names) {
357
344
  const entries = sources[name]?.extraPaths ?? [];
358
- if (entries.length === 0) {
359
- if (harness) {
360
- groups.push(rule(name, opts));
361
- groups.push(note("no extra paths configured (default location only)", opts));
362
- }
363
- continue;
364
- }
365
- groups.push(rule(name, opts));
366
- // A table, not label/value rows: the PATH is the fact here, and a row's
367
- // label column would have capped it at 24 columns — a truncated path cannot
368
- // be copied, which makes the listing useless for the one thing it is for.
369
- groups.push(
370
- table(
371
- {
372
- head: ["Path", "Agent ids"],
373
- rows: entries.map((e) => {
374
- const label = labelOf(e);
375
- return [
376
- pathOf(e),
377
- label ? `${label}-*` : "derived from the folder name",
378
- ];
379
- }),
380
- flex: 1,
381
- // The path is the value this listing exists to hand back; it is never
382
- // the column that gives way.
383
- protect: [0],
384
- },
385
- opts,
345
+ const count = `${entries.length} extra path${entries.length === 1 ? "" : "s"}`;
346
+ lines.push(kit.head(name, entries.length > 0 ? count : "default location only"));
347
+ // Rows of path then agent ids. The PATH is the value this listing exists
348
+ // to hand back, so it is never cut.
349
+ lines.push(
350
+ ...kit.rows(
351
+ entries.map((e): [string, string] => {
352
+ const label = labelOf(e);
353
+ return [pathOf(e), label ? `${label}-*` : "derived from the folder name"];
354
+ }),
386
355
  ),
387
356
  );
357
+ lines.push(...untracedLine(name), "");
388
358
  }
389
- const lines: string[] = stack(...groups);
390
- // Unknown tables are surfaced here as well as by the daemon: a user who
391
- // hand-edited config.json runs `list` to check it, and that is the moment the
392
- // typo is cheapest to find.
393
- if (unknown.length > 0) {
394
- const body =
395
- configured === 0
396
- ? [...head(0), "", ...note("No extra capture paths configured for any known harness.", opts)]
397
- : lines;
398
- return ok([
399
- ...body,
400
- "",
401
- ...warning(
402
- [
403
- `config.json configures ${unknown.length} unknown harness(es): ${unknown.join(", ")}`,
404
- "Nothing is captured from them.",
405
- `Known: ${HARNESS_KEYS.join(", ")}`,
406
- ],
407
- opts,
408
- ),
409
- ]);
410
- }
411
- return ok(lines);
359
+ if (lines[lines.length - 1] === "") lines.pop();
360
+ return ok([...lines, ...unknownLines]);
412
361
  }
413
362
 
414
363
  /** Dispatch for `failproofai harness <sub> ...`. */
@@ -417,24 +366,24 @@ export function runHarnessCommand(argv: string[]): HarnessResult {
417
366
  switch (sub) {
418
367
  case "add-path":
419
368
  if (rest.length < 2) {
420
- return fail(["Usage: failproofai harness add-path <harness> [<label>=]<path>"]);
369
+ return fail([kitFor().fail("add-path needs an agent and a path."), ` Usage: ${kitFor().cmd("failproofai harness add-path <agent> [label=]<path>")}`]);
421
370
  }
422
371
  return addPath(rest[0], rest.slice(1).join(" "));
423
372
  case "remove-path":
424
373
  if (rest.length < 2) {
425
- return fail(["Usage: failproofai harness remove-path <harness> <path|label>"]);
374
+ return fail([kitFor().fail("remove-path needs an agent and a path or label."), ` Usage: ${kitFor().cmd("failproofai harness remove-path <agent> <path | label>")}`]);
426
375
  }
427
376
  return removePath(rest[0], rest.slice(1).join(" "));
428
377
  case "list":
429
378
  return listPaths(rest[0]);
430
- default:
379
+ default: {
380
+ const kit = kitFor();
431
381
  return fail([
432
- sub ? `Unknown subcommand: ${sub}` : "A subcommand is required.",
433
- "",
434
- "Usage:",
435
- " failproofai harness list [<harness>]",
436
- " failproofai harness add-path <harness> [<label>=]<path>",
437
- " failproofai harness remove-path <harness> <path|label>",
382
+ kit.fail(sub ? `Unknown subcommand: ${sub}.` : "A subcommand is required."),
383
+ ` ${kit.cmd("failproofai harness list [agent]")}`,
384
+ ` ${kit.cmd("failproofai harness add-path <agent> [label=]<path>")}`,
385
+ ` ${kit.cmd("failproofai harness remove-path <agent> <path | label>")}`,
438
386
  ]);
387
+ }
439
388
  }
440
389
  }