watchbell 1.0.0 → 1.2.0

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 (1030) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +123 -84
  3. package/bin/watchbell.mjs +593 -23
  4. package/package.json +1 -1
  5. package/server/.next/BUILD_ID +1 -1
  6. package/server/.next/app-path-routes-manifest.json +1 -0
  7. package/server/.next/build-manifest.json +116 -105
  8. package/server/.next/prerender-manifest.json +3 -3
  9. package/server/.next/routes-manifest.json +6 -0
  10. package/server/.next/server/app/(console)/(private)/ai/agents/page/build-manifest.json +3 -3
  11. package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +11 -11
  12. package/server/.next/server/app/(console)/(private)/ai/agents/page.js +61 -58
  13. package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
  14. package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
  15. package/server/.next/server/app/(console)/(private)/ai/ask/page/build-manifest.json +3 -3
  16. package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +10 -10
  17. package/server/.next/server/app/(console)/(private)/ai/ask/page.js +61 -58
  18. package/server/.next/server/app/(console)/(private)/ai/ask/page.js.nft.json +1 -1
  19. package/server/.next/server/app/(console)/(private)/ai/ask/page_client-reference-manifest.js +1 -1
  20. package/server/.next/server/app/(console)/(private)/ai/connect/page/build-manifest.json +3 -3
  21. package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +9 -9
  22. package/server/.next/server/app/(console)/(private)/ai/connect/page.js +61 -58
  23. package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
  24. package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
  25. package/server/.next/server/app/(console)/(private)/ai/keys/page/build-manifest.json +3 -3
  26. package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +12 -12
  27. package/server/.next/server/app/(console)/(private)/ai/keys/page.js +61 -58
  28. package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
  29. package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
  30. package/server/.next/server/app/(console)/(private)/ai/logs/page/build-manifest.json +3 -3
  31. package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +10 -10
  32. package/server/.next/server/app/(console)/(private)/ai/logs/page.js +61 -58
  33. package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
  34. package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
  35. package/server/.next/server/app/(console)/(private)/ai/models/page/build-manifest.json +3 -3
  36. package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +19 -19
  37. package/server/.next/server/app/(console)/(private)/ai/models/page.js +61 -58
  38. package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
  39. package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
  40. package/server/.next/server/app/(console)/(private)/ai/page/build-manifest.json +3 -3
  41. package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +9 -9
  42. package/server/.next/server/app/(console)/(private)/ai/page.js +61 -58
  43. package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
  44. package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
  45. package/server/.next/server/app/(console)/(private)/ai/playground/page/build-manifest.json +3 -3
  46. package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +12 -12
  47. package/server/.next/server/app/(console)/(private)/ai/playground/page.js +61 -58
  48. package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
  49. package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
  50. package/server/.next/server/app/(console)/(private)/ai/providers/page/build-manifest.json +3 -3
  51. package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +15 -15
  52. package/server/.next/server/app/(console)/(private)/ai/providers/page.js +61 -58
  53. package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
  54. package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
  55. package/server/.next/server/app/(console)/(private)/ai/quota/page/build-manifest.json +3 -3
  56. package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +10 -10
  57. package/server/.next/server/app/(console)/(private)/ai/quota/page.js +61 -58
  58. package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
  59. package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
  60. package/server/.next/server/app/(console)/(private)/ai/usage/page/build-manifest.json +3 -3
  61. package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +10 -10
  62. package/server/.next/server/app/(console)/(private)/ai/usage/page.js +61 -58
  63. package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
  64. package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
  65. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/build-manifest.json +3 -3
  66. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +9 -9
  67. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +61 -58
  68. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
  69. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
  70. package/server/.next/server/app/(console)/(private)/auto-actions/page/build-manifest.json +3 -3
  71. package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +10 -10
  72. package/server/.next/server/app/(console)/(private)/auto-actions/page.js +61 -58
  73. package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
  74. package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
  75. package/server/.next/server/app/(console)/[...slug]/page/build-manifest.json +3 -3
  76. package/server/.next/server/app/(console)/[...slug]/page/server-reference-manifest.json +9 -9
  77. package/server/.next/server/app/(console)/[...slug]/page.js +62 -59
  78. package/server/.next/server/app/(console)/[...slug]/page.js.nft.json +1 -1
  79. package/server/.next/server/app/(console)/[...slug]/page_client-reference-manifest.js +1 -1
  80. package/server/.next/server/app/(console)/alerts/page/build-manifest.json +3 -3
  81. package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +22 -22
  82. package/server/.next/server/app/(console)/alerts/page.js +61 -58
  83. package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
  84. package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
  85. package/server/.next/server/app/(console)/apps/[id]/page/build-manifest.json +3 -3
  86. package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +23 -23
  87. package/server/.next/server/app/(console)/apps/[id]/page.js +61 -58
  88. package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
  89. package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
  90. package/server/.next/server/app/(console)/apps/page/build-manifest.json +3 -3
  91. package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +11 -11
  92. package/server/.next/server/app/(console)/apps/page.js +61 -58
  93. package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
  94. package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
  95. package/server/.next/server/app/(console)/backups/page/build-manifest.json +3 -3
  96. package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +12 -12
  97. package/server/.next/server/app/(console)/backups/page.js +61 -58
  98. package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
  99. package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
  100. package/server/.next/server/app/(console)/catalog/page/build-manifest.json +3 -3
  101. package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +9 -9
  102. package/server/.next/server/app/(console)/catalog/page.js +61 -58
  103. package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
  104. package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
  105. package/server/.next/server/app/(console)/connections/page/build-manifest.json +3 -3
  106. package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +54 -54
  107. package/server/.next/server/app/(console)/connections/page.js +67 -64
  108. package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
  109. package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
  110. package/server/.next/server/app/(console)/d1/page/build-manifest.json +3 -3
  111. package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +9 -9
  112. package/server/.next/server/app/(console)/d1/page.js +61 -58
  113. package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
  114. package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
  115. package/server/.next/server/app/(console)/deployments/page/build-manifest.json +3 -3
  116. package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +14 -14
  117. package/server/.next/server/app/(console)/deployments/page.js +61 -58
  118. package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
  119. package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
  120. package/server/.next/server/app/(console)/dns/page/build-manifest.json +3 -3
  121. package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +16 -16
  122. package/server/.next/server/app/(console)/dns/page.js +61 -58
  123. package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
  124. package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
  125. package/server/.next/server/app/(console)/domains/page/build-manifest.json +3 -3
  126. package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +11 -11
  127. package/server/.next/server/app/(console)/domains/page.js +61 -58
  128. package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
  129. package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
  130. package/server/.next/server/app/(console)/events/page/build-manifest.json +3 -3
  131. package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +9 -9
  132. package/server/.next/server/app/(console)/events/page.js +61 -58
  133. package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
  134. package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
  135. package/server/.next/server/app/(console)/firebase/page/build-manifest.json +3 -3
  136. package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +15 -15
  137. package/server/.next/server/app/(console)/firebase/page.js +62 -59
  138. package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
  139. package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
  140. package/server/.next/server/app/(console)/logs/page/build-manifest.json +3 -3
  141. package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +10 -10
  142. package/server/.next/server/app/(console)/logs/page.js +61 -58
  143. package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
  144. package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
  145. package/server/.next/server/app/(console)/manage/sections/page/app-paths-manifest.json +3 -0
  146. package/server/.next/server/app/(console)/manage/sections/page/build-manifest.json +22 -0
  147. package/server/.next/server/app/(console)/manage/sections/page/next-font-manifest.json +11 -0
  148. package/server/.next/server/app/(console)/manage/sections/page/react-loadable-manifest.json +1 -0
  149. package/server/.next/server/app/(console)/manage/sections/page/server-reference-manifest.json +105 -0
  150. package/server/.next/server/app/(console)/manage/sections/page.js +104 -0
  151. package/server/.next/server/app/(console)/manage/sections/page.js.nft.json +1 -0
  152. package/server/.next/server/app/(console)/manage/sections/page_client-reference-manifest.js +3 -0
  153. package/server/.next/server/app/(console)/neon/page/build-manifest.json +3 -3
  154. package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +20 -20
  155. package/server/.next/server/app/(console)/neon/page.js +61 -58
  156. package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
  157. package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
  158. package/server/.next/server/app/(console)/overview/page/build-manifest.json +3 -3
  159. package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +16 -16
  160. package/server/.next/server/app/(console)/overview/page.js +61 -58
  161. package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  162. package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  163. package/server/.next/server/app/(console)/repos/[id]/page/build-manifest.json +3 -3
  164. package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +10 -10
  165. package/server/.next/server/app/(console)/repos/[id]/page.js +61 -58
  166. package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
  167. package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
  168. package/server/.next/server/app/(console)/repos/page/build-manifest.json +3 -3
  169. package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +9 -9
  170. package/server/.next/server/app/(console)/repos/page.js +61 -58
  171. package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
  172. package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
  173. package/server/.next/server/app/(console)/settings/page/build-manifest.json +3 -3
  174. package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +19 -19
  175. package/server/.next/server/app/(console)/settings/page.js +61 -58
  176. package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
  177. package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
  178. package/server/.next/server/app/(console)/sql/page/build-manifest.json +3 -3
  179. package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +16 -16
  180. package/server/.next/server/app/(console)/sql/page.js +61 -58
  181. package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
  182. package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
  183. package/server/.next/server/app/(console)/status/page/build-manifest.json +3 -3
  184. package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +9 -9
  185. package/server/.next/server/app/(console)/status/page.js +61 -58
  186. package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
  187. package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
  188. package/server/.next/server/app/(console)/supabase/page/build-manifest.json +3 -3
  189. package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +27 -27
  190. package/server/.next/server/app/(console)/supabase/page.js +61 -58
  191. package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
  192. package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
  193. package/server/.next/server/app/(console)/topology/page/build-manifest.json +3 -3
  194. package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +9 -9
  195. package/server/.next/server/app/(console)/topology/page.js +61 -58
  196. package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
  197. package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
  198. package/server/.next/server/app/(console)/turso/page/build-manifest.json +3 -3
  199. package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +9 -9
  200. package/server/.next/server/app/(console)/turso/page.js +61 -58
  201. package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
  202. package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
  203. package/server/.next/server/app/(console)/upstash/page/build-manifest.json +3 -3
  204. package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +9 -9
  205. package/server/.next/server/app/(console)/upstash/page.js +61 -58
  206. package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
  207. package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
  208. package/server/.next/server/app/(console)/uptime/page/build-manifest.json +3 -3
  209. package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +22 -22
  210. package/server/.next/server/app/(console)/uptime/page.js +61 -58
  211. package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
  212. package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
  213. package/server/.next/server/app/(console)/welcome/page/build-manifest.json +3 -3
  214. package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +14 -14
  215. package/server/.next/server/app/(console)/welcome/page.js +62 -59
  216. package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
  217. package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
  218. package/server/.next/server/app/_global-error/page/build-manifest.json +3 -3
  219. package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  220. package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
  221. package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  222. package/server/.next/server/app/_global-error.html +1 -1
  223. package/server/.next/server/app/_global-error.rsc +3 -3
  224. package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  225. package/server/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
  226. package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -2
  227. package/server/.next/server/app/_not-found/page/build-manifest.json +3 -3
  228. package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  229. package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
  230. package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  231. package/server/.next/server/app/_not-found.html +1 -1
  232. package/server/.next/server/app/_not-found.rsc +4 -4
  233. package/server/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  234. package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  235. package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  236. package/server/.next/server/app/account/password/page/build-manifest.json +3 -3
  237. package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
  238. package/server/.next/server/app/account/password/page.js.nft.json +1 -1
  239. package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
  240. package/server/.next/server/app/api/collect/route/server-reference-manifest.json +7 -7
  241. package/server/.next/server/app/api/collect/route.js +78 -73
  242. package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
  243. package/server/.next/server/app/api/daily/route/server-reference-manifest.json +7 -7
  244. package/server/.next/server/app/api/daily/route.js +77 -72
  245. package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
  246. package/server/.next/server/app/api/health/route.js.nft.json +1 -1
  247. package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
  248. package/server/.next/server/app/api/status/route.js.nft.json +1 -1
  249. package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +7 -7
  250. package/server/.next/server/app/api/telegram/webhook/route.js +75 -70
  251. package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
  252. package/server/.next/server/app/api/v1/[[...rest]]/route.js.nft.json +1 -1
  253. package/server/.next/server/app/api/v1/advice/route.js +20 -19
  254. package/server/.next/server/app/api/v1/advice/route.js.nft.json +1 -1
  255. package/server/.next/server/app/api/v1/ai/chat/completions/route.js +2 -2
  256. package/server/.next/server/app/api/v1/ai/chat/completions/route.js.nft.json +1 -1
  257. package/server/.next/server/app/api/v1/ai/models/route.js +2 -2
  258. package/server/.next/server/app/api/v1/ai/models/route.js.nft.json +1 -1
  259. package/server/.next/server/app/api/v1/ai/questions/[id]/route.js +1 -1
  260. package/server/.next/server/app/api/v1/ai/questions/[id]/route.js.nft.json +1 -1
  261. package/server/.next/server/app/api/v1/ai/questions/route.js +24 -23
  262. package/server/.next/server/app/api/v1/ai/questions/route.js.nft.json +1 -1
  263. package/server/.next/server/app/api/v1/mcp/route.js +22 -21
  264. package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
  265. package/server/.next/server/app/api/v1/me/route.js +1 -1
  266. package/server/.next/server/app/api/v1/me/route.js.nft.json +1 -1
  267. package/server/.next/server/app/api/v1/openapi.json/route.js +10 -9
  268. package/server/.next/server/app/api/v1/openapi.json/route.js.nft.json +1 -1
  269. package/server/.next/server/app/api/v1/status/apps/[app]/route.js +20 -19
  270. package/server/.next/server/app/api/v1/status/apps/[app]/route.js.nft.json +1 -1
  271. package/server/.next/server/app/api/v1/status/route.js +20 -19
  272. package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
  273. package/server/.next/server/app/api/watchdog/route.js +21 -19
  274. package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
  275. package/server/.next/server/app/auth/confirm/route.js.nft.json +1 -1
  276. package/server/.next/server/app/auth/google/callback/route.js +18 -17
  277. package/server/.next/server/app/auth/google/callback/route.js.nft.json +1 -1
  278. package/server/.next/server/app/auth/google/create/callback/route.js.nft.json +1 -1
  279. package/server/.next/server/app/auth/not-member/route.js.nft.json +1 -1
  280. package/server/.next/server/app/auth/session-ended/route.js.nft.json +1 -1
  281. package/server/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  282. package/server/.next/server/app/invite/page/build-manifest.json +3 -3
  283. package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
  284. package/server/.next/server/app/invite/page.js +4 -3
  285. package/server/.next/server/app/invite/page.js.nft.json +1 -1
  286. package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
  287. package/server/.next/server/app/mfa/page/build-manifest.json +3 -3
  288. package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
  289. package/server/.next/server/app/mfa/page.js.nft.json +1 -1
  290. package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
  291. package/server/.next/server/app/mfa/setup/page/build-manifest.json +3 -3
  292. package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
  293. package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
  294. package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
  295. package/server/.next/server/app/page/build-manifest.json +3 -3
  296. package/server/.next/server/app/page/server-reference-manifest.json +1 -1
  297. package/server/.next/server/app/page.js.nft.json +1 -1
  298. package/server/.next/server/app/page_client-reference-manifest.js +1 -1
  299. package/server/.next/server/app/s/[slug]/badge/[file]/route.js +9 -8
  300. package/server/.next/server/app/s/[slug]/badge/[file]/route.js.nft.json +1 -1
  301. package/server/.next/server/app/s/[slug]/page/build-manifest.json +3 -3
  302. package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
  303. package/server/.next/server/app/s/[slug]/page.js +8 -8
  304. package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
  305. package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
  306. package/server/.next/server/app/setup/page/build-manifest.json +3 -3
  307. package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
  308. package/server/.next/server/app/setup/page.js.nft.json +1 -1
  309. package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  310. package/server/.next/server/app/signin/page/build-manifest.json +3 -3
  311. package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
  312. package/server/.next/server/app/signin/page.js.nft.json +1 -1
  313. package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  314. package/server/.next/server/app-paths-manifest.json +1 -0
  315. package/server/.next/server/chunks/{[externals]__0fbnlnnial7w5._.js → [externals]__0qo8lpb70m87u._.js} +1 -1
  316. package/server/.next/server/chunks/{[externals]__1e0dmqhilgze5._.js → [externals]__100hq0n2xtenb._.js} +1 -1
  317. package/server/.next/server/chunks/{[externals]__1jhautmcwmgii._.js → [externals]__1irgb5qz1s3gv._.js} +1 -1
  318. package/server/.next/server/chunks/{[root-of-the-server]__0_6eq1806attx._.js → [root-of-the-server]__00hb7hqa7qktx._.js} +1 -1
  319. package/server/.next/server/chunks/[root-of-the-server]__03276vwi4jgvk._.js +1 -1
  320. package/server/.next/server/chunks/[root-of-the-server]__049ykc067tlsv._.js +1 -1
  321. package/server/.next/server/chunks/[root-of-the-server]__04q-9779vl4kn._.js +3 -0
  322. package/server/.next/server/chunks/[root-of-the-server]__04rnior8cyxtx._.js +3 -0
  323. package/server/.next/server/chunks/{[root-of-the-server]__010exlr_efe2h._.js → [root-of-the-server]__06ek056i_j_uk._.js} +2 -2
  324. package/server/.next/server/chunks/[root-of-the-server]__06f9e4kpi0mw8._.js +1 -1
  325. package/server/.next/server/chunks/[root-of-the-server]__06jphm4auz_sh._.js +3 -0
  326. package/server/.next/server/chunks/{[root-of-the-server]__06iz-tlpv7pqm._.js → [root-of-the-server]__06r-019fixp3f._.js} +1 -1
  327. package/server/.next/server/chunks/{[root-of-the-server]__0mtlynfv-vklo._.js → [root-of-the-server]__07uknh5b-embq._.js} +1 -1
  328. package/server/.next/server/chunks/{[root-of-the-server]__0j0medewrv95l._.js → [root-of-the-server]__07v5e0vzgl4n2._.js} +2 -2
  329. package/server/.next/server/chunks/{[root-of-the-server]__0ul6-jnt2oco7._.js → [root-of-the-server]__08fyoixg__c7n._.js} +1 -1
  330. package/server/.next/server/chunks/[root-of-the-server]__0_rfeg3389imx._.js +1 -1
  331. package/server/.next/server/chunks/[root-of-the-server]__0b2hzo6nez0we._.js +1 -1
  332. package/server/.next/server/chunks/[root-of-the-server]__0b9tciqdsctau._.js +3 -0
  333. package/server/.next/server/chunks/{[root-of-the-server]__09qqv-zsz9qhr._.js → [root-of-the-server]__0b_4w-5x5u7ag._.js} +1 -1
  334. package/server/.next/server/chunks/{[root-of-the-server]__1-37ctpn8yw_m._.js → [root-of-the-server]__0bnasoi-x21jc._.js} +1 -1
  335. package/server/.next/server/chunks/[root-of-the-server]__0c5w5y-db0jkb._.js +3 -0
  336. package/server/.next/server/chunks/{[root-of-the-server]__08i_or_xyqg4g._.js → [root-of-the-server]__0d8ypilha-el8._.js} +2 -2
  337. package/server/.next/server/chunks/{[root-of-the-server]__0znb_m_wygjdc._.js → [root-of-the-server]__0erdelc9_06nk._.js} +2 -2
  338. package/server/.next/server/chunks/{[root-of-the-server]__018ux7xja83l6._.js → [root-of-the-server]__0flqwe7amc3mz._.js} +2 -2
  339. package/server/.next/server/chunks/{[root-of-the-server]__0f5l9--3_wjvx._.js → [root-of-the-server]__0fw19tsgp-vbq._.js} +2 -2
  340. package/server/.next/server/chunks/{[root-of-the-server]__1_l4gp3r2d-7x._.js → [root-of-the-server]__0fw7l5y58_xcd._.js} +2 -2
  341. package/server/.next/server/chunks/{[root-of-the-server]__02ihdvnmhshoe._.js → [root-of-the-server]__0g1tldn4xjewd._.js} +2 -2
  342. package/server/.next/server/chunks/{[root-of-the-server]__0ogbwvwpnlx0b._.js → [root-of-the-server]__0grtjjr51j6xe._.js} +1 -1
  343. package/server/.next/server/chunks/{[root-of-the-server]__1jrqehmo6kq8x._.js → [root-of-the-server]__0h1qhdjpfq1d4._.js} +2 -2
  344. package/server/.next/server/chunks/{[root-of-the-server]__08801yoxfe_os._.js → [root-of-the-server]__0h4n81_nqdr4j._.js} +2 -2
  345. package/server/.next/server/chunks/{[root-of-the-server]__081ywec7cjq3d._.js → [root-of-the-server]__0hty-wue10pro._.js} +2 -2
  346. package/server/.next/server/chunks/[root-of-the-server]__0jqgfbhrgi28s._.js +3 -0
  347. package/server/.next/server/chunks/[root-of-the-server]__0m7i0l3nkbdfm._.js +1 -1
  348. package/server/.next/server/chunks/[root-of-the-server]__0mwiq4mkf8pc5._.js +1 -1
  349. package/server/.next/server/chunks/{[root-of-the-server]__0mui3wh3lfb6m._.js → [root-of-the-server]__0npmbdrxybln5._.js} +1 -1
  350. package/server/.next/server/chunks/{[root-of-the-server]__0-ok-3r9xtz0y._.js → [root-of-the-server]__0nqw6z6fp8wad._.js} +2 -2
  351. package/server/.next/server/chunks/{[root-of-the-server]__0_iz9zh9e_mov._.js → [root-of-the-server]__0olmk-rbbhxlo._.js} +2 -2
  352. package/server/.next/server/chunks/{[root-of-the-server]__0nsie5dba69e6._.js → [root-of-the-server]__0owyb9lr5t5u-._.js} +2 -2
  353. package/server/.next/server/chunks/[root-of-the-server]__0p3lnkpxf2-xz._.js +1 -1
  354. package/server/.next/server/chunks/[root-of-the-server]__0qmkpydmx3ljf._.js +3 -0
  355. package/server/.next/server/chunks/[root-of-the-server]__0r-zdzq6ki5gr._.js +3 -0
  356. package/server/.next/server/chunks/{[root-of-the-server]__0mhtnnebbepzx._.js → [root-of-the-server]__0si9k9jhdc0bm._.js} +2 -2
  357. package/server/.next/server/chunks/{[root-of-the-server]__0u66-8g4ql645._.js → [root-of-the-server]__0sivlmcvkc1uq._.js} +1 -1
  358. package/server/.next/server/chunks/[root-of-the-server]__0t8d8b4qkw3y-._.js +3 -0
  359. package/server/.next/server/chunks/{[root-of-the-server]__0i1de88cj5y-p._.js → [root-of-the-server]__0tl5pxttllr4d._.js} +2 -2
  360. package/server/.next/server/chunks/{[root-of-the-server]__1z3-s7wc9-uc6._.js → [root-of-the-server]__0uyh4jgcd9092._.js} +2 -2
  361. package/server/.next/server/chunks/[root-of-the-server]__0v4-g6c-ls39_._.js +3 -0
  362. package/server/.next/server/chunks/[root-of-the-server]__0vgnlhvdoh3bn._.js +3 -0
  363. package/server/.next/server/chunks/{[root-of-the-server]__1x9tt_2yhozwe._.js → [root-of-the-server]__0vp-x4ifpr3p9._.js} +2 -2
  364. package/server/.next/server/chunks/{[root-of-the-server]__15j_u2bz3jc-a._.js → [root-of-the-server]__0wy38l7k36j6g._.js} +1 -1
  365. package/server/.next/server/chunks/{[root-of-the-server]__0qesn8t6k9y_n._.js → [root-of-the-server]__0xiz361p5kdhf._.js} +1 -1
  366. package/server/.next/server/chunks/[root-of-the-server]__0z-07azr3zk8s._.js +3 -0
  367. package/server/.next/server/chunks/[root-of-the-server]__0z-41cwvkliev._.js +3 -0
  368. package/server/.next/server/chunks/[root-of-the-server]__0zxyfd7u67hmv._.js +3 -0
  369. package/server/.next/server/chunks/[root-of-the-server]__1-rqermjb77se._.js +3 -0
  370. package/server/.next/server/chunks/[root-of-the-server]__10c7apgidgs6x._.js +3 -0
  371. package/server/.next/server/chunks/{[root-of-the-server]__03pc2mot62sow._.js → [root-of-the-server]__10x3lu8jeqgbt._.js} +2 -2
  372. package/server/.next/server/chunks/{[root-of-the-server]__0gs-x779qi1ba._.js → [root-of-the-server]__11-van59e9p2a._.js} +2 -2
  373. package/server/.next/server/chunks/[root-of-the-server]__110c-t3wz3nzm._.js +1 -1
  374. package/server/.next/server/chunks/[root-of-the-server]__116b4n13dv75t._.js +3 -0
  375. package/server/.next/server/chunks/[root-of-the-server]__11k46kam6tbia._.js +1 -1
  376. package/server/.next/server/chunks/[root-of-the-server]__11tte6au1b-z-._.js +3 -0
  377. package/server/.next/server/chunks/[root-of-the-server]__127dbd1prkw0n._.js +3 -0
  378. package/server/.next/server/chunks/[root-of-the-server]__12uj0887q1ayr._.js +1 -1
  379. package/server/.next/server/chunks/[root-of-the-server]__13_b24n_f4my4._.js +3 -0
  380. package/server/.next/server/chunks/[root-of-the-server]__13be7gbo81td4._.js +3 -0
  381. package/server/.next/server/chunks/[root-of-the-server]__13h--47xmg706._.js +5 -0
  382. package/server/.next/server/chunks/{[root-of-the-server]__0wt74rsaz-308._.js → [root-of-the-server]__145gadwk31inl._.js} +2 -2
  383. package/server/.next/server/chunks/{[root-of-the-server]__0j53mir12jire._.js → [root-of-the-server]__14luo1ecxoqh-._.js} +1 -1
  384. package/server/.next/server/chunks/{[root-of-the-server]__15ddlx_ma_1iu._.js → [root-of-the-server]__162cm9ds1c5y2._.js} +2 -2
  385. package/server/.next/server/chunks/[root-of-the-server]__19kwj690b37xf._.js +1 -1
  386. package/server/.next/server/chunks/[root-of-the-server]__19vsae2naddj5._.js +3 -0
  387. package/server/.next/server/chunks/[root-of-the-server]__1_l065umy451k._.js +3 -0
  388. package/server/.next/server/chunks/[root-of-the-server]__1_ow7lgy0u7st._.js +3 -0
  389. package/server/.next/server/chunks/[root-of-the-server]__1akvpmbiap6nf._.js +1 -1
  390. package/server/.next/server/chunks/{[root-of-the-server]__0292lwnmh4wtc._.js → [root-of-the-server]__1aza-7l2pl-pm._.js} +2 -2
  391. package/server/.next/server/chunks/[root-of-the-server]__1bsyavebtmd7w._.js +3 -0
  392. package/server/.next/server/chunks/[root-of-the-server]__1cju843cjyf1t._.js +3 -0
  393. package/server/.next/server/chunks/{[root-of-the-server]__0qpf0qusq792k._.js → [root-of-the-server]__1cla4k3dqtcfb._.js} +2 -2
  394. package/server/.next/server/chunks/[root-of-the-server]__1fnsa-f0t7bxj._.js +3 -0
  395. package/server/.next/server/chunks/[root-of-the-server]__1g1176fer3j4e._.js +3 -0
  396. package/server/.next/server/chunks/[root-of-the-server]__1hqy35gww7ps2._.js +3 -0
  397. package/server/.next/server/chunks/[root-of-the-server]__1i92wg2yuvs4c._.js +3 -0
  398. package/server/.next/server/chunks/{[root-of-the-server]__03e141znq0hr-._.js → [root-of-the-server]__1iv6vg3z9ho81._.js} +1 -1
  399. package/server/.next/server/chunks/[root-of-the-server]__1j26i51ankv-z._.js +3 -0
  400. package/server/.next/server/chunks/{[root-of-the-server]__1jh0el-zvg4hp._.js → [root-of-the-server]__1j3-sv7eqyhjb._.js} +2 -2
  401. package/server/.next/server/chunks/[root-of-the-server]__1j3w0-cp17tx4._.js +3 -0
  402. package/server/.next/server/chunks/{[root-of-the-server]__1czhdqbxj_3ov._.js → [root-of-the-server]__1j_iy13gp2-on._.js} +2 -2
  403. package/server/.next/server/chunks/[root-of-the-server]__1kg91b3sadtoc._.js +3 -0
  404. package/server/.next/server/chunks/[root-of-the-server]__1kjndfodqqamq._.js +3 -0
  405. package/server/.next/server/chunks/[root-of-the-server]__1mami4vb3y5gd._.js +3 -0
  406. package/server/.next/server/chunks/[root-of-the-server]__1mse65-7gtj-n._.js +3 -0
  407. package/server/.next/server/chunks/{[root-of-the-server]__0q691wec2busx._.js → [root-of-the-server]__1objhlwwrjfjk._.js} +2 -2
  408. package/server/.next/server/chunks/[root-of-the-server]__1pscg7y0et34j._.js +3 -0
  409. package/server/.next/server/chunks/[root-of-the-server]__1rw0i4x2ake3x._.js +3 -0
  410. package/server/.next/server/chunks/[root-of-the-server]__1t9zp524wouer._.js +3 -0
  411. package/server/.next/server/chunks/{[root-of-the-server]__0tb-63ts77gqd._.js → [root-of-the-server]__1tefe1f5835t_._.js} +2 -2
  412. package/server/.next/server/chunks/[root-of-the-server]__1u1b3a58anm3f._.js +3 -0
  413. package/server/.next/server/chunks/[root-of-the-server]__1v-789ydxj30e._.js +3 -0
  414. package/server/.next/server/chunks/{[root-of-the-server]__132wlw6sbwt1d._.js → [root-of-the-server]__1vi0u2vkv3tk0._.js} +2 -2
  415. package/server/.next/server/chunks/{[root-of-the-server]__0j68ia9q425ff._.js → [root-of-the-server]__1w3svzao_gnxp._.js} +2 -2
  416. package/server/.next/server/chunks/[root-of-the-server]__1w_73psnce1dd._.js +3 -0
  417. package/server/.next/server/chunks/[root-of-the-server]__1x7ucdyxuh2_k._.js +3 -0
  418. package/server/.next/server/chunks/{[root-of-the-server]__08l1x_plf4dil._.js → [root-of-the-server]__1xdi98xyay6bn._.js} +1 -1
  419. package/server/.next/server/chunks/{[root-of-the-server]__18mztbxkzaxjs._.js → [root-of-the-server]__20_1nfa6fiz-q._.js} +2 -2
  420. package/server/.next/server/chunks/[root-of-the-server]__20b_clyk74g5u._.js +3 -0
  421. package/server/.next/server/chunks/[root-of-the-server]__20ev6t8zggct2._.js +3 -0
  422. package/server/.next/server/chunks/_004c7-39glldb._.js +4 -4
  423. package/server/.next/server/chunks/_008zv66xvj7ey._.js +37 -0
  424. package/server/.next/server/chunks/{_12uzjq-fbcuvb._.js → _01s3_8ssosvqi._.js} +1 -1
  425. package/server/.next/server/chunks/_03qlijpos6a21._.js +3 -0
  426. package/server/.next/server/chunks/_09l75j3ey14tc._.js +1 -1
  427. package/server/.next/server/chunks/_0a7533vs89s78._.js +7 -0
  428. package/server/.next/server/chunks/_0ejcrge5k4quv._.js +9 -9
  429. package/server/.next/server/chunks/_0k4iqzwm6w5_c._.js +37 -0
  430. package/server/.next/server/chunks/_0kmhvts35imzs._.js +1 -1
  431. package/server/.next/server/chunks/_0m1ll2r1g77ii._.js +1 -1
  432. package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +3 -0
  433. package/server/.next/server/chunks/_0nt4hve0bi30h._.js +37 -0
  434. package/server/.next/server/chunks/_0op74d4yyc3ma._.js +1 -1
  435. package/server/.next/server/chunks/_0pf2g5n_ko5dq._.js +3 -0
  436. package/server/.next/server/chunks/_0qmi54vmnlwdv._.js +3 -3
  437. package/server/.next/server/chunks/_0qr77omrkuewo._.js +3 -0
  438. package/server/.next/server/chunks/_0rjh9w2ih3j2h._.js +3 -0
  439. package/server/.next/server/chunks/_0sy878k2ywjbq._.js +3 -0
  440. package/server/.next/server/chunks/_0tz4o-qufnu3l._.js +4 -4
  441. package/server/.next/server/chunks/_0voowig3y32v1._.js +1 -1
  442. package/server/.next/server/chunks/_0wxm_716tjorj._.js +3 -0
  443. package/server/.next/server/chunks/_0xf7mtsrkgc9e._.js +1 -1
  444. package/server/.next/server/chunks/_0zkmkbrbc96-h._.js +3 -0
  445. package/server/.next/server/chunks/_1-pw7jw52sbti._.js +3 -0
  446. package/server/.next/server/chunks/_103ai6ybnpq1k._.js +1 -1
  447. package/server/.next/server/chunks/_108e86rhye0o1._.js +1 -1
  448. package/server/.next/server/chunks/_10vh_l3hht4_3._.js +4 -4
  449. package/server/.next/server/chunks/_1476vtrt9101m._.js +1 -1
  450. package/server/.next/server/chunks/_14ymj3uzawde4._.js +7 -0
  451. package/server/.next/server/chunks/_15g-opioju_ju._.js +3 -0
  452. package/server/.next/server/chunks/_17aiz6zt-yv52._.js +1 -1
  453. package/server/.next/server/chunks/_1_son1yzo5xvl._.js +3 -0
  454. package/server/.next/server/chunks/_1b7pc6ohhqxs3._.js +9 -9
  455. package/server/.next/server/chunks/_1g_prqb_u33e3._.js +3 -3
  456. package/server/.next/server/chunks/_1i7qkrp3fnx1a._.js +37 -0
  457. package/server/.next/server/chunks/_1kcmwgs544mo-._.js +1 -1
  458. package/server/.next/server/chunks/_1lq5m27p-ilrw._.js +1 -1
  459. package/server/.next/server/chunks/_1luzeov9x87mg._.js +7 -0
  460. package/server/.next/server/chunks/_1mnwzh3z9y4th._.js +3 -0
  461. package/server/.next/server/chunks/_1nuf-l7izvfl_._.js +1 -1
  462. package/server/.next/server/chunks/{_1jz6k3wy_s8br._.js → _1p0ced3sr0i_8._.js} +1 -1
  463. package/server/.next/server/chunks/_1ptcxyn1tzm9r._.js +1 -1
  464. package/server/.next/server/chunks/_1v7q0xdxbqawm._.js +1 -1
  465. package/server/.next/server/chunks/_1zx_54or1pubb._.js +1 -1
  466. package/server/.next/server/chunks/node_modules_next_dist_1i-_xribpwttd._.js +313 -0
  467. package/server/.next/server/chunks/{src_0uxqs7150nhx2._.js → src_014zbodp4djeb._.js} +2 -2
  468. package/server/.next/server/chunks/src_01jp2f5qmh8e2._.js +3 -0
  469. package/server/.next/server/chunks/{src_0n42os1q41rha._.js → src_04pgj--n_d4w5._.js} +2 -2
  470. package/server/.next/server/chunks/src_063xvouojxyoa._.js +1 -1
  471. package/server/.next/server/chunks/src_088gmyaew7ds0._.js +3 -0
  472. package/server/.next/server/chunks/src_0c-owt8q0lyj3._.js +3 -0
  473. package/server/.next/server/chunks/{src_01wdnb4skk1wz._.js → src_0kwnhwi77unm7._.js} +2 -2
  474. package/server/.next/server/chunks/src_0o4-snj7wkaav._.js +1 -1
  475. package/server/.next/server/chunks/{src_0d-zi077mzm6v._.js → src_0xqorb3-ef3ub._.js} +2 -2
  476. package/server/.next/server/chunks/src_0y_4gogmeu-2k._.js +3 -0
  477. package/server/.next/server/chunks/src_1-xw4hea2lvb3._.js +1 -1
  478. package/server/.next/server/chunks/src_1a5yibsjcy1ga._.js +1 -1
  479. package/server/.next/server/chunks/src_1bqzr81r3wkvi._.js +3 -0
  480. package/server/.next/server/chunks/{src_03umyw-p7jhaj._.js → src_1dsh9rzlos6-1._.js} +2 -2
  481. package/server/.next/server/chunks/src_1hy7u0jtydq_d._.js +3 -0
  482. package/server/.next/server/chunks/src_1j2o14j0-23xv._.js +3 -0
  483. package/server/.next/server/chunks/src_1j71dvub05y-4._.js +3 -0
  484. package/server/.next/server/chunks/{src_1-r51arho90p7._.js → src_1no_yh953mran._.js} +2 -2
  485. package/server/.next/server/chunks/src_1s7yll47_n_hy._.js +3 -0
  486. package/server/.next/server/chunks/src_1tux0n9_5b1kr._.js +3 -3
  487. package/server/.next/server/chunks/src_1wduh0eckiwl1._.js +3 -0
  488. package/server/.next/server/chunks/src_1wzm081p6qyre._.js +3 -3
  489. package/server/.next/server/chunks/src_instrumentation-node_ts_1c--sr1k7_8k2._.js +3 -0
  490. package/server/.next/server/chunks/src_lib_08u7n7-yunfvd._.js +2 -2
  491. package/server/.next/server/chunks/src_lib_0cbs2jlrw1qbh._.js +3 -0
  492. package/server/.next/server/chunks/src_lib_0ds7lhpop_adf._.js +1 -1
  493. package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
  494. package/server/.next/server/chunks/src_lib_0oz4gm8agoidh._.js +6 -0
  495. package/server/.next/server/chunks/src_lib_0s_txig7jm3ty._.js +3 -3
  496. package/server/.next/server/chunks/src_lib_0ta8sd9jeuw50._.js +15 -0
  497. package/server/.next/server/chunks/src_lib_0x4n8swwa3zn7._.js +1 -1
  498. package/server/.next/server/chunks/src_lib_0y-obfzqjj0c6._.js +6 -0
  499. package/server/.next/server/chunks/src_lib_10_w0ihgmx4e6._.js +6 -0
  500. package/server/.next/server/chunks/src_lib_10vqn6q0h8kls._.js +2 -2
  501. package/server/.next/server/chunks/src_lib_13g9xjx8ci00z._.js +3 -0
  502. package/server/.next/server/chunks/src_lib_15wd7ab4u5nrn._.js +3 -3
  503. package/server/.next/server/chunks/src_lib_1en6omqx66g9d._.js +15 -0
  504. package/server/.next/server/chunks/src_lib_1p21oczr6lh5a._.js +3 -0
  505. package/server/.next/server/chunks/src_lib_1qo6t00wwitz6._.js +15 -0
  506. package/server/.next/server/chunks/src_lib_1sz77jjn7xl7o._.js +1 -1
  507. package/server/.next/server/chunks/src_lib_1tzoqx44yogsk._.js +2 -2
  508. package/server/.next/server/chunks/src_lib_1yd94hta5y1hx._.js +3 -0
  509. package/server/.next/server/chunks/src_lib_1yewk45thnv1h._.js +1 -1
  510. package/server/.next/server/chunks/src_lib_1z73euz6d3tus._.js +6 -0
  511. package/server/.next/server/chunks/src_lib_brand-env_ts_1wcm1bjuismq_._.js +3 -0
  512. package/server/.next/server/chunks/src_lib_collector_auth_ts_0lqx92__e4zij._.js +4 -4
  513. package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +6 -6
  514. package/server/.next/server/chunks/src_lib_data_0ask_rbmgwlf3._.js +1 -1
  515. package/server/.next/server/chunks/src_lib_data_0e155tkqeoojm._.js +1 -1
  516. package/server/.next/server/chunks/src_lib_data_backup-db_ts_19rtzbv84xz_h._.js +2 -2
  517. package/server/.next/server/chunks/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +1 -1
  518. package/server/.next/server/chunks/src_lib_data_sections-db_ts_1ky6-o4z1mimq._.js +6 -0
  519. package/server/.next/server/chunks/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  520. package/server/.next/server/chunks/src_lib_demo_pool_ts_14rjvkgozh1d4._.js +9 -9
  521. package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +13 -13
  522. package/server/.next/server/chunks/src_lib_demo_pool_ts_210g_on8zx_-n._.js +9 -9
  523. package/server/.next/server/chunks/src_lib_notify_lang_ts_1r2w02ctaky7e._.js +1 -1
  524. package/server/.next/server/chunks/src_lib_providers_info_ts_02x6g30rg2hsp._.js +3 -0
  525. package/server/.next/server/chunks/src_lib_time_ts_1__07rt8x18k-._.js +3 -0
  526. package/server/.next/server/chunks/src_lib_time_ts_1a27wp71yhgti._.js +3 -0
  527. package/server/.next/server/chunks/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
  528. package/server/.next/server/chunks/src_lib_view_databases_ts_0fdc7jkjvyrxi._.js +3 -0
  529. package/server/.next/server/chunks/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
  530. package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  531. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_1q6nc5chwn5k4.js +1 -1
  532. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0n_anax2l1jpu.js +1 -1
  533. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_1kyng_xuojdtb.js +1 -1
  534. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_04r4ro6x7-p7p.js +1 -1
  535. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1fq9uugdpqa_l.js +1 -1
  536. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_0mhtiq_5szpe0.js +1 -1
  537. package/server/.next/server/chunks/ssr/{[externals]__1u-jgivpw0_oh._.js → [externals]__0zvy4iicnrk95._.js} +1 -1
  538. package/server/.next/server/chunks/ssr/[root-of-the-server]__02cq5r26w4itc._.js +1 -1
  539. package/server/.next/server/chunks/ssr/[root-of-the-server]__02qyxz9eh8_eh._.js +1 -1
  540. package/server/.next/server/chunks/ssr/[root-of-the-server]__04ovk2bqwu87z._.js +3 -0
  541. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0aahjz4fnt4c_._.js → [root-of-the-server]__052_cprs0alpy._.js} +2 -2
  542. package/server/.next/server/chunks/ssr/{[root-of-the-server]__11-ssp_43878t._.js → [root-of-the-server]__0543ddliluvv3._.js} +2 -2
  543. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ijk9z1ot_xi4._.js → [root-of-the-server]__08479d23kb1xv._.js} +2 -2
  544. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1csz822qejxk-._.js → [root-of-the-server]__08fqg76puqdfr._.js} +2 -2
  545. package/server/.next/server/chunks/ssr/[root-of-the-server]__09-0oydof-7uw._.js +1 -1
  546. package/server/.next/server/chunks/ssr/[root-of-the-server]__09nm_hn1c8zhf._.js +3 -0
  547. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0lks-6wz-rmk5._.js → [root-of-the-server]__0acmauri7z1sg._.js} +2 -2
  548. package/server/.next/server/chunks/ssr/[root-of-the-server]__0ct71emqfru3b._.js +1 -1
  549. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tkmutq84zkeh._.js → [root-of-the-server]__0e9m8up0h1qhl._.js} +2 -2
  550. package/server/.next/server/chunks/ssr/[root-of-the-server]__0h9gtpapca7i_._.js +3 -0
  551. package/server/.next/server/chunks/ssr/[root-of-the-server]__0hln97a4qcziv._.js +3 -0
  552. package/server/.next/server/chunks/ssr/[root-of-the-server]__0ksvf4x4zcbpb._.js +1 -1
  553. package/server/.next/server/chunks/ssr/[root-of-the-server]__0lc7my3iqbrsu._.js +1 -1
  554. package/server/.next/server/chunks/ssr/[root-of-the-server]__0n7cj-oti5wct._.js +2 -2
  555. package/server/.next/server/chunks/ssr/[root-of-the-server]__0ncef7_34ta3-._.js +1 -1
  556. package/server/.next/server/chunks/ssr/[root-of-the-server]__0op0kqh43wd-a._.js +3 -0
  557. package/server/.next/server/chunks/ssr/[root-of-the-server]__0wcnxr_g-bd3r._.js +1 -1
  558. package/server/.next/server/chunks/ssr/[root-of-the-server]__1-o_iq-ed9vc8._.js +1 -1
  559. package/server/.next/server/chunks/ssr/[root-of-the-server]__10bkg3o65q6r4._.js +1 -1
  560. package/server/.next/server/chunks/ssr/[root-of-the-server]__12qymdfh83hht._.js +3 -0
  561. package/server/.next/server/chunks/ssr/[root-of-the-server]__13oi70jo-u731._.js +2 -2
  562. package/server/.next/server/chunks/ssr/[root-of-the-server]__146kj3-h6fkaq._.js +1 -1
  563. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1fdzriy6yyu5d._.js → [root-of-the-server]__15n-r12rnj61t._.js} +1 -1
  564. package/server/.next/server/chunks/ssr/[root-of-the-server]__16o4p3l21rdq3._.js +3 -0
  565. package/server/.next/server/chunks/ssr/[root-of-the-server]__17kocbnwlcw6d._.js +1 -1
  566. package/server/.next/server/chunks/ssr/[root-of-the-server]__19_nr6j2w-in_._.js +3 -0
  567. package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
  568. package/server/.next/server/chunks/ssr/[root-of-the-server]__1gw6334w8y2my._.js +1 -1
  569. package/server/.next/server/chunks/ssr/[root-of-the-server]__1i69oli51is1u._.js +1 -1
  570. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ryb947ux5cq7._.js → [root-of-the-server]__1k1fmq0-rg3p0._.js} +2 -2
  571. package/server/.next/server/chunks/ssr/[root-of-the-server]__1lx2k37wgre3d._.js +1 -1
  572. package/server/.next/server/chunks/ssr/[root-of-the-server]__1owrn7crnsybx._.js +3 -0
  573. package/server/.next/server/chunks/ssr/[root-of-the-server]__1qltiqn0htqnx._.js +1 -1
  574. package/server/.next/server/chunks/ssr/[root-of-the-server]__1w1472ukyh58r._.js +1 -1
  575. package/server/.next/server/chunks/ssr/[root-of-the-server]__20ht054m5-_d6._.js +1 -1
  576. package/server/.next/server/chunks/ssr/_0-uwh2rwm_dic._.js +2 -2
  577. package/server/.next/server/chunks/ssr/_026w_ig6vy9bt._.js +1 -1
  578. package/server/.next/server/chunks/ssr/{_1wu_8nu5allm0._.js → _05kq3r87s7p3q._.js} +1 -1
  579. package/server/.next/server/chunks/ssr/_06kwu83_fmex9._.js +2 -2
  580. package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
  581. package/server/.next/server/chunks/ssr/_0_rtyc4t9xcdo._.js +1 -1
  582. package/server/.next/server/chunks/ssr/_0_tr9fol2yq33._.js +1 -1
  583. package/server/.next/server/chunks/ssr/_0_ul4mlc_pj5i._.js +2 -2
  584. package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
  585. package/server/.next/server/chunks/ssr/_0azq3ml4gbn1d._.js +1 -1
  586. package/server/.next/server/chunks/ssr/_0cukja7zcxh7e._.js +1 -1
  587. package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
  588. package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
  589. package/server/.next/server/chunks/ssr/_0fnl7z-saj7nc._.js +1 -1
  590. package/server/.next/server/chunks/ssr/_0hykblvnwc2ar._.js +1 -1
  591. package/server/.next/server/chunks/ssr/_0i-e824vtomvg._.js +2 -2
  592. package/server/.next/server/chunks/ssr/_0jjoot3rhbde3._.js +2 -2
  593. package/server/.next/server/chunks/ssr/_0kn710rrv_o2t._.js +2 -2
  594. package/server/.next/server/chunks/ssr/_0m1ll2r1g77ii._.js +1 -1
  595. package/server/.next/server/chunks/ssr/_0mgclon6_oh87._.js +2 -2
  596. package/server/.next/server/chunks/ssr/{_18t7ov64ycb-w._.js → _0ooh0hh-r_12s._.js} +2 -2
  597. package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
  598. package/server/.next/server/chunks/ssr/{_14bz_443syxhi._.js → _0pn3dn9s9es51._.js} +2 -2
  599. package/server/.next/server/chunks/ssr/_0qnv1uc1_yv28._.js +2 -2
  600. package/server/.next/server/chunks/ssr/_0qo8tc43kjsf_._.js +1 -1
  601. package/server/.next/server/chunks/ssr/{_06_f735j-1i20._.js → _0r04c1-snv6jw._.js} +2 -2
  602. package/server/.next/server/chunks/ssr/_0sotiqakj-6ci._.js +1 -1
  603. package/server/.next/server/chunks/ssr/_0tcmsw8hszixv._.js +1 -1
  604. package/server/.next/server/chunks/ssr/{_0i6y4bkm-0cm3._.js → _0tnfblwwlyvq2._.js} +2 -2
  605. package/server/.next/server/chunks/ssr/_0uogspz6zrvwk._.js +2 -2
  606. package/server/.next/server/chunks/ssr/{_0o0-2ela2_qqd._.js → _0x1vi7mal3bqd._.js} +2 -2
  607. package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
  608. package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
  609. package/server/.next/server/chunks/ssr/_10pz3ggun9s5i._.js +2 -2
  610. package/server/.next/server/chunks/ssr/_11w5w9dpxcf1w._.js +3 -0
  611. package/server/.next/server/chunks/ssr/_12ddramfkd6o1._.js +2 -2
  612. package/server/.next/server/chunks/ssr/_1476vtrt9101m._.js +1 -1
  613. package/server/.next/server/chunks/ssr/{_1p4i1e1kw70-_._.js → _14kop_5asppd8._.js} +2 -2
  614. package/server/.next/server/chunks/ssr/_15ft896zgt02e._.js +2 -2
  615. package/server/.next/server/chunks/ssr/_16t9k9e5cjvas._.js +1 -1
  616. package/server/.next/server/chunks/ssr/_18lgd6o04ugow._.js +2 -2
  617. package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
  618. package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
  619. package/server/.next/server/chunks/ssr/{_08y82qdosn7ga._.js → _1_ojvke28lw3y._.js} +2 -2
  620. package/server/.next/server/chunks/ssr/_1b1ano88ar-gi._.js +2 -2
  621. package/server/.next/server/chunks/ssr/_1b4uqc9fwt4dy._.js +1 -1
  622. package/server/.next/server/chunks/ssr/_1boia2p3_0nsz._.js +2 -2
  623. package/server/.next/server/chunks/ssr/_1c28jitsyufnt._.js +1 -1
  624. package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
  625. package/server/.next/server/chunks/ssr/_1dx207la592b7._.js +2 -2
  626. package/server/.next/server/chunks/ssr/_1e24cpw3g7njr._.js +2 -2
  627. package/server/.next/server/chunks/ssr/_1flla16o7o9ba._.js +1 -1
  628. package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
  629. package/server/.next/server/chunks/ssr/_1gl78598hz_ku._.js +1 -1
  630. package/server/.next/server/chunks/ssr/_1i77n2n-wb98v._.js +2 -2
  631. package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
  632. package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
  633. package/server/.next/server/chunks/ssr/_1nir32qtr99-r._.js +1 -1
  634. package/server/.next/server/chunks/ssr/_1qt1czw3w8dww._.js +3 -0
  635. package/server/.next/server/chunks/ssr/_1sq12-1_02tzt._.js +2 -2
  636. package/server/.next/server/chunks/ssr/_1ybhu25y38395._.js +2 -2
  637. package/server/.next/server/chunks/ssr/_1ykxf4mi60jog._.js +2 -2
  638. package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
  639. package/server/.next/server/chunks/ssr/_1zr0t31h18f2p._.js +3 -0
  640. package/server/.next/server/chunks/ssr/_20ln-4gu85-yt._.js +3 -0
  641. package/server/.next/server/chunks/ssr/_210edglbxmcb3._.js +2 -2
  642. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_1910ocjt__nlh.js +1 -1
  643. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_136-s4sxl6nra.js +1 -1
  644. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_0f7cxitw-svnl.js +1 -1
  645. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_14l8--w36mywn.js +1 -1
  646. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_1uaicj0j8stji.js +1 -1
  647. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_06a1fnrawxlh1.js +3 -0
  648. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_1p2deebbgom7b.js +1 -1
  649. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_0-wg58qcvu_rv.js +1 -1
  650. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_215m-kkv06r4z.js +1 -1
  651. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_11-8xinblaop_.js +1 -1
  652. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_manage_sections_page_actions_0ven9q46d3d7s.js +3 -0
  653. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1z3l1p4keed3m.js +1 -1
  654. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1evatil08dntl.js +1 -1
  655. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_0k1237d-q3oc4.js +1 -1
  656. package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
  657. package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
  658. package/server/.next/server/chunks/ssr/node_modules_next_dist_0joxsz2q5dh6c._.js +2 -2
  659. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pz49shx663y1.js +3 -0
  660. package/server/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1b0g9w0uow3x5.js +1 -1
  661. package/server/.next/server/chunks/ssr/src_00wh1gv_h2pjs._.js +1 -1
  662. package/server/.next/server/chunks/ssr/src_00ze92e3aolj8._.js +1 -1
  663. package/server/.next/server/chunks/ssr/src_01jp2f5qmh8e2._.js +3 -0
  664. package/server/.next/server/chunks/ssr/src_025wo6h30c00a._.js +1 -1
  665. package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
  666. package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
  667. package/server/.next/server/chunks/ssr/src_09atx_ns_mlan._.js +1 -1
  668. package/server/.next/server/chunks/ssr/src_0_5_wl0sww-x7._.js +1 -1
  669. package/server/.next/server/chunks/ssr/src_0_kumjlw3o034._.js +1 -1
  670. package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
  671. package/server/.next/server/chunks/ssr/src_0dl7jkqqm313f._.js +3 -0
  672. package/server/.next/server/chunks/ssr/src_0f_ip1ke7i9r7._.js +3 -0
  673. package/server/.next/server/chunks/ssr/src_0fdfz--89117z._.js +1 -1
  674. package/server/.next/server/chunks/ssr/src_0ho313o5cu3-h._.js +1 -1
  675. package/server/.next/server/chunks/ssr/src_0iefnjvaszvw_._.js +1 -1
  676. package/server/.next/server/chunks/ssr/src_0loe22pbn4cuu._.js +1 -1
  677. package/server/.next/server/chunks/ssr/src_0nylfis4--x5j._.js +1 -1
  678. package/server/.next/server/chunks/ssr/src_0ohsn5qzqqds_._.js +1 -1
  679. package/server/.next/server/chunks/ssr/src_0p0fk07bj9gpq._.js +1 -1
  680. package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
  681. package/server/.next/server/chunks/ssr/src_0t6-d5hmzrbp1._.js +1 -1
  682. package/server/.next/server/chunks/ssr/src_0uitfl3c1mdqb._.js +1 -1
  683. package/server/.next/server/chunks/ssr/src_0usxo7vu7o2cj._.js +1 -1
  684. package/server/.next/server/chunks/ssr/src_0widudneyf0oq._.js +1 -1
  685. package/server/.next/server/chunks/ssr/src_0xau6d5z5e_md._.js +1 -1
  686. package/server/.next/server/chunks/ssr/src_0xh3xicmff6ws._.js +1 -1
  687. package/server/.next/server/chunks/ssr/src_1-wu43p02yiel._.js +1 -1
  688. package/server/.next/server/chunks/ssr/src_1-xw4hea2lvb3._.js +1 -1
  689. package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
  690. package/server/.next/server/chunks/ssr/src_11iuy79j_finh._.js +3 -0
  691. package/server/.next/server/chunks/ssr/src_12x8sjp-qdw08._.js +1 -1
  692. package/server/.next/server/chunks/ssr/src_14aur12he3m2a._.js +1 -1
  693. package/server/.next/server/chunks/ssr/src_15aqc6akkqade._.js +1 -1
  694. package/server/.next/server/chunks/ssr/src_15zqi72ky6hi9._.js +1 -1
  695. package/server/.next/server/chunks/ssr/src_19evuexp67uty._.js +1 -1
  696. package/server/.next/server/chunks/ssr/src_1am4_ady64k2b._.js +1 -1
  697. package/server/.next/server/chunks/ssr/src_1cbawr4iw5h-x._.js +1 -1
  698. package/server/.next/server/chunks/ssr/src_1ccrc8twenijg._.js +1 -1
  699. package/server/.next/server/chunks/ssr/src_1ctx1an_a3k7g._.js +1 -1
  700. package/server/.next/server/chunks/ssr/src_1iyzhhf1u_gwo._.js +3 -0
  701. package/server/.next/server/chunks/ssr/{src_1eermasnm2cgy._.js → src_1ottjkdvhje3g._.js} +2 -2
  702. package/server/.next/server/chunks/ssr/src_1sdwdnblbiq_g._.js +1 -1
  703. package/server/.next/server/chunks/ssr/src_1xsg-zd4lt_d4._.js +1 -1
  704. package/server/.next/server/chunks/ssr/src_1y0xvj1obxu7i._.js +1 -1
  705. package/server/.next/server/chunks/ssr/src_1zpftf1xj-30l._.js +1 -1
  706. package/server/.next/server/chunks/ssr/src_20hs1ilkxmap0._.js +1 -1
  707. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
  708. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1lhfs18es1mqc._.js +1 -1
  709. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_loading_tsx_1qyzywm3br5h2._.js +1 -1
  710. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_06n-9cjmbb-vu._.js +1 -1
  711. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
  712. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_loading_tsx_1niopfalguzs6._.js +1 -1
  713. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_connect_connect-view_tsx_04abz05n7hdsd._.js +15 -15
  714. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_connect_loading_tsx_0q7g8dpf7-vgo._.js +1 -1
  715. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_keys_04ypt31p11eq7._.js +1 -1
  716. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_keys_loading_tsx_1hc7x_jx0xx0_._.js +1 -1
  717. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_0261l8yb2z9x1._.js +1 -1
  718. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
  719. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_loading_tsx_1dwhza0ud8asg._.js +1 -1
  720. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
  721. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0hla-5y3iresx._.js +1 -1
  722. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_loading_tsx_1qtp-lo_o41cr._.js +1 -1
  723. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_1o1z2qp3tik5x._.js +1 -1
  724. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_loading_tsx_02umaieh-00pu._.js +1 -1
  725. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +1 -1
  726. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_0jamu-nm6x-dh._.js +1 -1
  727. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
  728. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_loading_tsx_0u2pi0tk7s3ch._.js +1 -1
  729. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_1kor9sy67qpiw._.js +1 -1
  730. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
  731. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_loading_tsx_1hhnum-g2eq3n._.js +1 -1
  732. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_1v003vrkwk19w._.js +1 -1
  733. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
  734. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_loading_tsx_0pjvu-xuxbxmh._.js +1 -1
  735. package/server/.next/server/chunks/ssr/{src_app_(console)_1ppp9j5e2rtqf._.js → src_app_(console)_1l7irblrb5fae._.js} +2 -2
  736. package/server/.next/server/chunks/ssr/src_app_(console)_[___slug]_page_tsx_0b007i3c1v_vg._.js +1 -1
  737. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +1 -1
  738. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_1t61z2wktki-v._.js +1 -1
  739. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_088bs149wsgca._.js +1 -1
  740. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1sfvku9ui1le-._.js +1 -1
  741. package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
  742. package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
  743. package/server/.next/server/chunks/ssr/src_app_(console)_backups_page_tsx_0o082iagq_14b._.js +1 -1
  744. package/server/.next/server/chunks/ssr/src_app_(console)_catalog_page_tsx_1u2_-bv4yi5oo._.js +1 -1
  745. package/server/.next/server/chunks/ssr/src_app_(console)_connections_02upf_c41dauw._.js +3 -0
  746. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
  747. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fmp_anbkapur._.js +3 -0
  748. package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
  749. package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
  750. package/server/.next/server/chunks/ssr/src_app_(console)_d1_page_tsx_167hwnq_9uh81._.js +1 -1
  751. package/server/.next/server/chunks/ssr/src_app_(console)_dns_0d1uyir4fe7pc._.js +1 -1
  752. package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
  753. package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
  754. package/server/.next/server/chunks/ssr/src_app_(console)_domains_1ut499n11u8_r._.js +1 -1
  755. package/server/.next/server/chunks/ssr/src_app_(console)_firebase_page_tsx_0g20hm13dvbc-._.js +1 -1
  756. package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
  757. package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_17htk-vea5fna._.js +3 -0
  758. package/server/.next/server/chunks/ssr/src_app_(console)_manage_sections_section-switch_tsx_1mfs-o_357i22._.js +3 -0
  759. package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
  760. package/server/.next/server/chunks/ssr/src_app_(console)_neon_1ubea__gt06o0._.js +1 -1
  761. package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
  762. package/server/.next/server/chunks/ssr/src_app_(console)_repos_[id]_page_tsx_1nkxthc4ethrj._.js +1 -1
  763. package/server/.next/server/chunks/ssr/src_app_(console)_repos_repo-list_tsx_1n1gcm4qfrfdt._.js +1 -1
  764. package/server/.next/server/chunks/ssr/src_app_(console)_sql_16-sh45tpob8n._.js +1 -1
  765. package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
  766. package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
  767. package/server/.next/server/chunks/ssr/src_app_(console)_status_page_tsx_1zvj799nv4kah._.js +1 -1
  768. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
  769. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_1ofufib3-zzt-._.js +1 -1
  770. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
  771. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_148phfjye0539._.js +1 -1
  772. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
  773. package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
  774. package/server/.next/server/chunks/ssr/src_app_(console)_welcome_page_tsx_1bw0x0riq-oem._.js +1 -1
  775. package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
  776. package/server/.next/server/chunks/ssr/src_app_s_[slug]_page_tsx_0jjqe6py82mpb._.js +1 -1
  777. package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
  778. package/server/.next/server/chunks/ssr/{src_app_signin_124xn9wb2fasu._.js → src_app_signin_1tg6pswa99jbe._.js} +2 -2
  779. package/server/.next/server/chunks/ssr/src_components_11x625pqq9ovs._.js +3 -0
  780. package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
  781. package/server/.next/server/chunks/ssr/src_components_ui_dialog_tsx_1tn-i_6d3rhzt._.js +1 -1
  782. package/server/.next/server/chunks/ssr/src_lib_005l0kcpyu43o._.js +3 -3
  783. package/server/.next/server/chunks/ssr/src_lib_05ai1oj91p9w2._.js +2 -2
  784. package/server/.next/server/chunks/ssr/src_lib_0x4n8swwa3zn7._.js +1 -1
  785. package/server/.next/server/chunks/ssr/src_lib_1nkahiclbn55q._.js +1 -1
  786. package/server/.next/server/chunks/ssr/{src_lib_1l8ej-zoyyegd._.js → src_lib_1p21oczr6lh5a._.js} +2 -2
  787. package/server/.next/server/chunks/ssr/src_lib_1yewk45thnv1h._.js +1 -1
  788. package/server/.next/server/chunks/ssr/src_lib_collector_run_ts_0-q8is8s0y9cq._.js +3 -3
  789. package/server/.next/server/chunks/ssr/src_lib_copy_edition_ts_1y6lsdbj64t9p._.js +1 -1
  790. package/server/.next/server/chunks/ssr/src_lib_data_keep-active-db_ts_0p07g9b74uu3e._.js +1 -1
  791. package/server/.next/server/chunks/ssr/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +1 -1
  792. package/server/.next/server/chunks/ssr/src_lib_data_sections-db_ts_1ky6-o4z1mimq._.js +6 -0
  793. package/server/.next/server/chunks/ssr/{src_lib_demo_20hj85e_64pp1._.js → src_lib_demo_0hdl7pzdqejqx._.js} +2 -2
  794. package/server/.next/server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  795. package/server/.next/server/chunks/ssr/src_lib_providers_info_ts_02x6g30rg2hsp._.js +3 -0
  796. package/server/.next/server/chunks/ssr/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
  797. package/server/.next/server/chunks/ssr/src_lib_time_ts_1ualgyi3irm1z._.js +3 -0
  798. package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
  799. package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
  800. package/server/.next/server/chunks/ssr/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
  801. package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
  802. package/server/.next/server/chunks/ssr/src_private_ai_usage-analytics_ts_1bxba3xarzol0._.js +1 -1
  803. package/server/.next/server/chunks/ssr/src_private_ai_views-db_ts_1jbnr41mskha2._.js +1 -1
  804. package/server/.next/server/chunks/ssr/src_private_assist_advisor-notes_ts_0qkpm5c3la7fo._.js +3 -3
  805. package/server/.next/server/chunks/ssr/src_private_explorer_explorer_tsx_04m_tdottspjs._.js +1 -1
  806. package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  807. package/server/.next/server/middleware-build-manifest.js +116 -105
  808. package/server/.next/server/next-font-manifest.js +1 -1
  809. package/server/.next/server/next-font-manifest.json +4 -0
  810. package/server/.next/server/pages/404.html +1 -1
  811. package/server/.next/server/pages/500.html +1 -1
  812. package/server/.next/server/preview-props.json +3 -3
  813. package/server/.next/server/server-reference-manifest.js +1 -1
  814. package/server/.next/server/server-reference-manifest.json +210 -164
  815. package/server/.next/static/chunks/08dak2kh1c6_7.js +1 -0
  816. package/server/.next/static/chunks/{2v14aqfx8wv9o.js → 0b9slopuz4e8a.js} +1 -1
  817. package/server/.next/static/chunks/{36ureqoyz5e06.js → 0dp-tuwkw7xf8.js} +2 -2
  818. package/server/.next/static/chunks/0fhj_pu5ntcfo.js +1 -0
  819. package/server/.next/static/chunks/{2k9ytb8jmg14_.js → 0h9i512dn01kj.js} +1 -1
  820. package/server/.next/static/chunks/0ic6_-0gkd6p7.js +1 -0
  821. package/server/.next/static/chunks/0icohez16w-ei.js +1 -0
  822. package/server/.next/static/chunks/{1ieazx9t3vl5p.js → 0j1wzqg4ukm70.js} +1 -1
  823. package/server/.next/static/chunks/{43_va15lk2zc1.js → 0j_5norjm-kef.js} +1 -1
  824. package/server/.next/static/chunks/{1-1hfgat2l_o9.js → 0kscmnb071fci.js} +1 -1
  825. package/server/.next/static/chunks/{0c7pskzfstcdh.js → 0ld78j1d4j201.js} +1 -1
  826. package/server/.next/static/chunks/0qlb-l1uyqku5.js +1 -0
  827. package/server/.next/static/chunks/0udh0u8c6ovgf.css +3 -0
  828. package/server/.next/static/chunks/0y1ss0tjq0nq0.js +1 -0
  829. package/server/.next/static/chunks/{1ts_fd_r1kcrv.js → 1-oetq3mwlhds.js} +1 -1
  830. package/server/.next/static/chunks/{2fj4o7-stsvht.js → 11ywzwmfd_pt0.js} +1 -1
  831. package/server/.next/static/chunks/1j18pg23fzwv_.js +1 -0
  832. package/server/.next/static/chunks/1jaozq01v9r6e.js +1 -0
  833. package/server/.next/static/chunks/1ky5exl-c1kbo.js +1 -0
  834. package/server/.next/static/chunks/{0cannaigw8lhi.js → 1lsu_fxiyaeiz.js} +1 -1
  835. package/server/.next/static/chunks/1o3_amrh-sxr3.js +1 -0
  836. package/server/.next/static/chunks/{0wtboeftyamyk.js → 1w9o_jo_pejc5.js} +1 -1
  837. package/server/.next/static/chunks/1xy80z39ducub.js +1 -0
  838. package/server/.next/static/chunks/1yvbs41m8_4nc.js +7 -0
  839. package/server/.next/static/chunks/22alexnun_rdm.js +1 -0
  840. package/server/.next/static/chunks/{1o_q7_4ulcq9x.js → 27qwmt1w6-iri.js} +1 -1
  841. package/server/.next/static/chunks/29humkd2-_1oo.js +1 -0
  842. package/server/.next/static/chunks/29j96yfhxsf41.js +1 -0
  843. package/server/.next/static/chunks/29qnnsjsgsia6.js +1 -0
  844. package/server/.next/static/chunks/{2cjfogw85k3h-.js → 2ii8j9xuvv604.js} +1 -1
  845. package/server/.next/static/chunks/{30fczssqw6xys.js → 2m0ftj__ody0m.js} +1 -1
  846. package/server/.next/static/chunks/{201zah03wlibg.js → 2q88116332v43.js} +1 -1
  847. package/server/.next/static/chunks/2rbtw3em5hkt4.js +1 -0
  848. package/server/.next/static/chunks/2sdyov_lz1uj4.js +1 -0
  849. package/server/.next/static/chunks/{0li9-xjc40g51.js → 2toeyr9b_nk0e.js} +1 -1
  850. package/server/.next/static/chunks/{2fo6iuxb0ec7f.js → 2w7qxt7ux-m1-.js} +1 -1
  851. package/server/.next/static/chunks/{1gmof0n5nswkk.js → 2zc1osymeruya.js} +1 -1
  852. package/server/.next/static/chunks/33fbppn5fotpk.js +1 -0
  853. package/server/.next/static/chunks/{026asl66kuq3f.js → 340ecjh1jzqjd.js} +15 -15
  854. package/server/.next/static/chunks/3auw1gobgv94g.js +1 -0
  855. package/server/.next/static/chunks/3b1p-xm7iow1_.js +1 -0
  856. package/server/.next/static/chunks/{3tqh7fwtd_k_l.js → 3gl2k6v182lli.js} +2 -2
  857. package/server/.next/static/chunks/{3f5sxz8awpdog.js → 3gurl_36kr7sg.js} +1 -1
  858. package/server/.next/static/chunks/{1gb8jvw-g7fr7.js → 3h-i_hcaaf7vs.js} +1 -1
  859. package/server/.next/static/chunks/{2jlv5ekbb0wu2.js → 3kznplgmzot89.js} +1 -1
  860. package/server/.next/static/chunks/{0du6qnm4ee-qx.js → 3mb_v650fie_i.js} +1 -1
  861. package/server/.next/static/chunks/{3dokgd9nungcr.js → 3n_n6yeienmn-.js} +1 -1
  862. package/server/.next/static/chunks/3nqciag05fif0.js +1 -0
  863. package/server/.next/static/chunks/{1zi37go-xtasg.js → 3o45i7xbzm0w-.js} +1 -1
  864. package/server/.next/static/chunks/{1c4fx4kipvnqz.js → 3oe302ug_esoe.js} +1 -1
  865. package/server/.next/static/chunks/3r3mt51wqymgs.js +1 -0
  866. package/server/.next/static/chunks/3sg_npfod25zq.js +1 -0
  867. package/server/.next/static/chunks/{2rdmebof0d_c4.js → 3shbvizselyoq.js} +1 -1
  868. package/server/.next/static/chunks/3xxagngfonh62.js +1 -0
  869. package/server/.next/static/chunks/{2z1xy8l4s3usi.js → 3yv-enyk37whg.js} +1 -1
  870. package/server/node_modules/@next/env/package.json +1 -1
  871. package/server/node_modules/next/dist/build/analyze/snapshot.js +1 -1
  872. package/server/node_modules/next/dist/build/index.js +3 -3
  873. package/server/node_modules/next/dist/build/swc/index.js +1 -1
  874. package/server/node_modules/next/dist/build/turbopack-analyze/index.js +1 -1
  875. package/server/node_modules/next/dist/build/turbopack-build/impl.js +1 -1
  876. package/server/node_modules/next/dist/build/webpack-config.js +3 -3
  877. package/server/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +2 -2
  878. package/server/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +2 -2
  879. package/server/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +1 -1
  880. package/server/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  881. package/server/node_modules/next/dist/server/app-render/async-local-storage.js +1 -1
  882. package/server/node_modules/next/dist/server/config.js +1 -1
  883. package/server/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  884. package/server/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  885. package/server/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  886. package/server/node_modules/next/dist/server/lib/generate-agent-files.js +3 -3
  887. package/server/node_modules/next/dist/server/lib/router-server.js +1 -1
  888. package/server/node_modules/next/dist/server/lib/start-server.js +1 -1
  889. package/server/node_modules/next/dist/server/lib/trace/tracer.js +1 -1
  890. package/server/node_modules/next/dist/server/typescript/rules/config.js +2 -2
  891. package/server/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1 -1
  892. package/server/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  893. package/server/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  894. package/server/node_modules/next/dist/telemetry/events/version.js +2 -2
  895. package/server/node_modules/next/package.json +11 -11
  896. package/server/.next/server/chunks/[root-of-the-server]__03zcy67tjxii8._.js +0 -3
  897. package/server/.next/server/chunks/[root-of-the-server]__08j1jeemvo-th._.js +0 -3
  898. package/server/.next/server/chunks/[root-of-the-server]__08n3x1x850wqc._.js +0 -3
  899. package/server/.next/server/chunks/[root-of-the-server]__0b_bj-_t8b0b-._.js +0 -3
  900. package/server/.next/server/chunks/[root-of-the-server]__0grnl7ncqcjft._.js +0 -3
  901. package/server/.next/server/chunks/[root-of-the-server]__0hju4mctdmvz9._.js +0 -3
  902. package/server/.next/server/chunks/[root-of-the-server]__0i3n8l6ecdb4u._.js +0 -3
  903. package/server/.next/server/chunks/[root-of-the-server]__0m8w2-7618scn._.js +0 -3
  904. package/server/.next/server/chunks/[root-of-the-server]__0p_b0m2cstlrl._.js +0 -3
  905. package/server/.next/server/chunks/[root-of-the-server]__0uyagcs61c0t_._.js +0 -3
  906. package/server/.next/server/chunks/[root-of-the-server]__0v1kcolrxwmob._.js +0 -3
  907. package/server/.next/server/chunks/[root-of-the-server]__0vctt_0kj1gz4._.js +0 -3
  908. package/server/.next/server/chunks/[root-of-the-server]__0x0x6v75re5_e._.js +0 -3
  909. package/server/.next/server/chunks/[root-of-the-server]__0xyzhdj3z_1ro._.js +0 -3
  910. package/server/.next/server/chunks/[root-of-the-server]__0ymon9r-17xe_._.js +0 -3
  911. package/server/.next/server/chunks/[root-of-the-server]__0zxjft8y2r575._.js +0 -3
  912. package/server/.next/server/chunks/[root-of-the-server]__114vjjaqb2wyv._.js +0 -3
  913. package/server/.next/server/chunks/[root-of-the-server]__12uyws-qe6wxs._.js +0 -3
  914. package/server/.next/server/chunks/[root-of-the-server]__139pgc0wpc7kg._.js +0 -3
  915. package/server/.next/server/chunks/[root-of-the-server]__157yb_wl7w4ly._.js +0 -3
  916. package/server/.next/server/chunks/[root-of-the-server]__16dyxwm6pzumx._.js +0 -3
  917. package/server/.next/server/chunks/[root-of-the-server]__18qf1s7o0ia89._.js +0 -3
  918. package/server/.next/server/chunks/[root-of-the-server]__1951xb3jdzdop._.js +0 -3
  919. package/server/.next/server/chunks/[root-of-the-server]__1_5q9zgl6p5_3._.js +0 -3
  920. package/server/.next/server/chunks/[root-of-the-server]__1a9cd4d9ohf69._.js +0 -3
  921. package/server/.next/server/chunks/[root-of-the-server]__1bwgi7nn5-hc3._.js +0 -3
  922. package/server/.next/server/chunks/[root-of-the-server]__1hxhj2o7lea8i._.js +0 -3
  923. package/server/.next/server/chunks/[root-of-the-server]__1i4bqqne6vibf._.js +0 -3
  924. package/server/.next/server/chunks/[root-of-the-server]__1i83m8i-3yn72._.js +0 -3
  925. package/server/.next/server/chunks/[root-of-the-server]__1jrcnhad_b53j._.js +0 -3
  926. package/server/.next/server/chunks/[root-of-the-server]__1k8s02gwythps._.js +0 -3
  927. package/server/.next/server/chunks/[root-of-the-server]__1lf_lo1wqcbcg._.js +0 -3
  928. package/server/.next/server/chunks/[root-of-the-server]__1n32c8l_j8jt4._.js +0 -3
  929. package/server/.next/server/chunks/[root-of-the-server]__1niiijc82bgoj._.js +0 -3
  930. package/server/.next/server/chunks/[root-of-the-server]__1on_3p53yn6fs._.js +0 -3
  931. package/server/.next/server/chunks/[root-of-the-server]__1pgtip37umn35._.js +0 -3
  932. package/server/.next/server/chunks/[root-of-the-server]__1q90luznbe9-l._.js +0 -3
  933. package/server/.next/server/chunks/[root-of-the-server]__1r15vmrh2r06l._.js +0 -3
  934. package/server/.next/server/chunks/[root-of-the-server]__1rl43iilsc-je._.js +0 -3
  935. package/server/.next/server/chunks/[root-of-the-server]__1ta7-xvmtkjwr._.js +0 -3
  936. package/server/.next/server/chunks/[root-of-the-server]__1voiad6r-u931._.js +0 -3
  937. package/server/.next/server/chunks/[root-of-the-server]__1wlilsfzjqdw9._.js +0 -3
  938. package/server/.next/server/chunks/[root-of-the-server]__1woerg3tb4ls3._.js +0 -3
  939. package/server/.next/server/chunks/[root-of-the-server]__1wonw7ft4hset._.js +0 -3
  940. package/server/.next/server/chunks/[root-of-the-server]__1zaomh_4901_f._.js +0 -3
  941. package/server/.next/server/chunks/[root-of-the-server]__20lwsd6a4wnpe._.js +0 -3
  942. package/server/.next/server/chunks/_01vdbh009dk-w._.js +0 -5
  943. package/server/.next/server/chunks/_03bua_9n4apok._.js +0 -3
  944. package/server/.next/server/chunks/_0594j_bb0l80e._.js +0 -3
  945. package/server/.next/server/chunks/_076dwl7r_5vcl._.js +0 -34
  946. package/server/.next/server/chunks/_08tppw9ujlpke._.js +0 -34
  947. package/server/.next/server/chunks/_08y82qdosn7ga._.js +0 -3
  948. package/server/.next/server/chunks/_0m49djgc1t4wg._.js +0 -3
  949. package/server/.next/server/chunks/_0n5m3o7at0adm._.js +0 -34
  950. package/server/.next/server/chunks/_0qawxzcf--lyq._.js +0 -4
  951. package/server/.next/server/chunks/_0r4am1mgz4dg_._.js +0 -3
  952. package/server/.next/server/chunks/_0s30ac32b7prb._.js +0 -3
  953. package/server/.next/server/chunks/_0vfrh5u-u4mis._.js +0 -3
  954. package/server/.next/server/chunks/_0vgojnnkcf1vu._.js +0 -4
  955. package/server/.next/server/chunks/_0vz0de4gz70-e._.js +0 -4
  956. package/server/.next/server/chunks/_1-mixh9aeqh7f._.js +0 -3
  957. package/server/.next/server/chunks/_11p2ejgai2a78._.js +0 -3
  958. package/server/.next/server/chunks/_1bcsmpznxhk9h._.js +0 -3
  959. package/server/.next/server/chunks/_1he3nioua8ee5._.js +0 -3
  960. package/server/.next/server/chunks/_1l82x0z8bo4pt._.js +0 -3
  961. package/server/.next/server/chunks/_1lpcbqj4uzrsh._.js +0 -3
  962. package/server/.next/server/chunks/_1rw6_0nf-3sxs._.js +0 -34
  963. package/server/.next/server/chunks/src_0d5xqe2zx_935._.js +0 -3
  964. package/server/.next/server/chunks/src_0l-no1yc1_izn._.js +0 -3
  965. package/server/.next/server/chunks/src_0v4pdrc1yxyl8._.js +0 -3
  966. package/server/.next/server/chunks/src_0vva87j3z99p9._.js +0 -3
  967. package/server/.next/server/chunks/src_156ewlek-4a4z._.js +0 -3
  968. package/server/.next/server/chunks/src_1zo6so07lgcdj._.js +0 -3
  969. package/server/.next/server/chunks/src_db_rows_ts_15b286wn1kn1e._.js +0 -3
  970. package/server/.next/server/chunks/src_lib_0-ylqsh7whlj2._.js +0 -3
  971. package/server/.next/server/chunks/src_lib_0485hz-c7h7dr._.js +0 -15
  972. package/server/.next/server/chunks/src_lib_0f0p6-l5vvduu._.js +0 -3
  973. package/server/.next/server/chunks/src_lib_0qcyomi01xvf1._.js +0 -15
  974. package/server/.next/server/chunks/src_lib_15a3m-j_urkkp._.js +0 -3
  975. package/server/.next/server/chunks/src_lib_1d6edz_ucj01w._.js +0 -3
  976. package/server/.next/server/chunks/src_lib_1ryt-36ohhnm6._.js +0 -15
  977. package/server/.next/server/chunks/src_lib_1suc_xwzxtuej._.js +0 -3
  978. package/server/.next/server/chunks/src_lib_1uh73ofc-pe92._.js +0 -3
  979. package/server/.next/server/chunks/src_private_1yzfhupl3rlpx._.js +0 -6
  980. package/server/.next/server/chunks/ssr/[root-of-the-server]__004r8ubf3fp_i._.js +0 -3
  981. package/server/.next/server/chunks/ssr/[root-of-the-server]__06s-dfcfuperv._.js +0 -3
  982. package/server/.next/server/chunks/ssr/[root-of-the-server]__07or1m2vwon1m._.js +0 -3
  983. package/server/.next/server/chunks/ssr/[root-of-the-server]__0d9lwldljqtvx._.js +0 -3
  984. package/server/.next/server/chunks/ssr/[root-of-the-server]__0q36f5xjkzf4z._.js +0 -3
  985. package/server/.next/server/chunks/ssr/[root-of-the-server]__0uklr553mp86_._.js +0 -3
  986. package/server/.next/server/chunks/ssr/[root-of-the-server]__1cykncw1_xcno._.js +0 -3
  987. package/server/.next/server/chunks/ssr/[root-of-the-server]__1ih2a_fbqu7ko._.js +0 -3
  988. package/server/.next/server/chunks/ssr/[root-of-the-server]__1j7_a902k_8es._.js +0 -3
  989. package/server/.next/server/chunks/ssr/[root-of-the-server]__1ofzjllv-b0o0._.js +0 -3
  990. package/server/.next/server/chunks/ssr/_040ixxsgfs0vi._.js +0 -3
  991. package/server/.next/server/chunks/ssr/_04e0uk5aqrgc3._.js +0 -3
  992. package/server/.next/server/chunks/ssr/_0ux6eo_w1x155._.js +0 -3
  993. package/server/.next/server/chunks/ssr/_12o9qqjoik4q4._.js +0 -3
  994. package/server/.next/server/chunks/ssr/_1k2q3yt1h6cfs._.js +0 -3
  995. package/server/.next/server/chunks/ssr/_1zhtvg8t3jtxe._.js +0 -3
  996. package/server/.next/server/chunks/ssr/_200p6me5_kp2j._.js +0 -3
  997. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_03amng1-xhfd1.js +0 -3
  998. package/server/.next/server/chunks/ssr/src_00s82lfm2ga7-._.js +0 -3
  999. package/server/.next/server/chunks/ssr/src_13hsrg6rdvh-d._.js +0 -3
  1000. package/server/.next/server/chunks/ssr/src_1xgsz_do2xpr2._.js +0 -3
  1001. package/server/.next/server/chunks/ssr/src_app_(console)_connections_0gm1y-wtw5gyd._.js +0 -3
  1002. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1qigx20w8bk53._.js +0 -3
  1003. package/server/.next/server/chunks/ssr/src_components_shell_shell_tsx_1cpq-hbch_dvj._.js +0 -3
  1004. package/server/.next/server/chunks/ssr/src_lib_0y40wht-o-oc2._.js +0 -3
  1005. package/server/.next/server/chunks/ssr/src_lib_data_settings-db_ts_1to3jtggxlaz4._.js +0 -3
  1006. package/server/.next/static/chunks/03qto0oyf2r1n.js +0 -1
  1007. package/server/.next/static/chunks/0dmi-v53phuqn.js +0 -1
  1008. package/server/.next/static/chunks/0n_l4a3za5-q8.js +0 -1
  1009. package/server/.next/static/chunks/0t96fqp1vsmrp.js +0 -1
  1010. package/server/.next/static/chunks/0wlc502815llk.js +0 -1
  1011. package/server/.next/static/chunks/158-i6phe17yl.js +0 -1
  1012. package/server/.next/static/chunks/1fxuyn0k52n4v.css +0 -3
  1013. package/server/.next/static/chunks/1mlvn70-zqjvi.js +0 -1
  1014. package/server/.next/static/chunks/1sm8wxvlpowwg.js +0 -1
  1015. package/server/.next/static/chunks/1teh52nh5dujq.js +0 -1
  1016. package/server/.next/static/chunks/1v4hl1z0y1npd.js +0 -1
  1017. package/server/.next/static/chunks/1vh2psoqw3ddc.js +0 -1
  1018. package/server/.next/static/chunks/1xau8pf40_upi.js +0 -7
  1019. package/server/.next/static/chunks/1z2rcngn3-7i5.js +0 -1
  1020. package/server/.next/static/chunks/210qrsqvmgaet.js +0 -1
  1021. package/server/.next/static/chunks/29p15vj15jcsb.js +0 -1
  1022. package/server/.next/static/chunks/2kmerzslng988.js +0 -1
  1023. package/server/.next/static/chunks/2llric-1orr3y.js +0 -1
  1024. package/server/.next/static/chunks/2wb9a1xth0yhf.js +0 -1
  1025. package/server/.next/static/chunks/34gs6c2dsgtqy.js +0 -1
  1026. package/server/.next/static/chunks/3ag6t3ta58rih.js +0 -1
  1027. package/server/.next/static/chunks/3gkta99h3_5i2.js +0 -1
  1028. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → 00CFAqN6pFBVkqJyXSd78}/_buildManifest.js +0 -0
  1029. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → 00CFAqN6pFBVkqJyXSd78}/_clientMiddlewareManifest.js +0 -0
  1030. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → 00CFAqN6pFBVkqJyXSd78}/_ssgManifest.js +0 -0
package/bin/watchbell.mjs CHANGED
@@ -31,17 +31,21 @@ const SERVICE = "watchbell.service";
31
31
  const TASK = "Watchbell";
32
32
  const UNIT_MARKER = "# Written by the watchbell CLI";
33
33
  const LAUNCHD_LABEL = "watchbell";
34
+ const LAUNCHD_THROTTLE_S = 60;
35
+ const PLIST_MARKER = "<!-- Written by the watchbell CLI";
34
36
  const READY_TIMEOUT_MS = 120_000;
35
37
 
36
38
  // [usage, description]: --help prints them all (a test checks that every command is listed).
37
39
  export const COMMANDS = [
38
40
  ["watchbell [start] [--no-open]", "Start Watchbell (the default). First run creates ~/.watchbell, prints the setup code and opens /setup."],
39
41
  ["watchbell start --new-key", "Start with a new OPS_ENCRYPTION_KEY when it was lost (tokens saved with the old key can't be read)."],
42
+ ["watchbell start --host <addr> --port <n>", "Listen on this address and port for this run (also with run). 0.0.0.0 opens it to your network."],
40
43
  ["watchbell run", "Start in the foreground for a service manager (never opens a browser)."],
41
44
  ["watchbell stop [--timeout <seconds>]", "Ask the running Watchbell to stop cleanly (default wait 30 s)."],
42
45
  ["watchbell status", "Show whether Watchbell runs, its address and folders (exit 0 running, 3 not running)."],
43
- ["watchbell service install [--yes]", "Start Watchbell when you log in: a systemd user service (Linux) or a Scheduled Task (Windows)."],
46
+ ["watchbell service install [--yes]", "Start Watchbell when you log in: a systemd user service (Linux), a Scheduled Task (Windows) or a launchd agent (macOS)."],
44
47
  ["watchbell service uninstall [--yes]", "Remove that service or task. Your settings and data stay."],
48
+ ["watchbell update", "Update to the latest version with the npm next to this Node.js (an installed service is stopped and started again)."],
45
49
  ["watchbell reset-login <email>", "Give an account a new temporary password and remove its authenticator (Watchbell stopped)."],
46
50
  ["watchbell --version", "Print the version."],
47
51
  ["watchbell --help", "Print this help."],
@@ -60,16 +64,28 @@ export function helpText(version) {
60
64
  "(a HOST or PORT your shell exports is ignored); WATCHBELL_HOST, WATCHBELL_PORT and WATCHBELL_SITE_URL in the",
61
65
  "environment override them. Other variables set in the environment win over the file, except DATABASE_URL, which",
62
66
  "is read from the file only.",
67
+ "",
68
+ "watchbell start and watchbell status ask registry.npmjs.org at most once a day whether a newer version exists (a",
69
+ "plain GET of the version number, nothing about you). WATCHBELL_NO_UPDATE_CHECK=1 turns that off.",
63
70
  ].join("\n");
64
71
  }
65
72
 
66
73
  // ---------------------------------------------------------------------------------------------------- arguments
67
74
 
68
- const COMMAND_NAMES = ["start", "run", "stop", "status", "service", "reset-login"];
69
- const OPTION_OWNER = { "--no-open": "start", "--new-key": "start", "--timeout": "stop", "--yes": "service" };
75
+ const COMMAND_NAMES = ["start", "run", "stop", "status", "service", "reset-login", "update"];
76
+ const OPTION_OWNER = { "--no-open": "start", "--new-key": "start", "--timeout": "stop", "--yes": "service", "--host": ["start", "run"], "--port": ["start", "run"] };
77
+ // An IPv4 or IPv6 address (brackets allowed) or a host name; never something that looks like an option.
78
+ const HOST_ARG = /^(?:\[[0-9A-Fa-f:.]+\]|[0-9A-Fa-f.]*:[0-9A-Fa-f:.]*|[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?)$/;
79
+ // Brackets off, IPv6 in lower case, every spelling of the all-zero IPv6 address as "::" (the health check knows that one).
80
+ const normalizeHostArg = (v) => {
81
+ const h = v.replace(/^\[(.*)\]$/, "$1");
82
+ if (!h.includes(":")) return h;
83
+ return /^[0:]+$/.test(h) ? "::" : h.toLowerCase();
84
+ };
85
+ const isPortArg = (v) => /^\d{1,5}$/.test(v) && Number(v) >= 1 && Number(v) <= 65535;
70
86
 
71
87
  export function parseArgs(argv) {
72
- const opts = { command: null, args: [], open: true, newKey: false, yes: false, timeout: null, help: false, version: false };
88
+ const opts = { command: null, args: [], open: true, newKey: false, yes: false, timeout: null, help: false, version: false, host: null, port: null };
73
89
  const errors = [];
74
90
  const used = [];
75
91
  for (let i = 0; i < argv.length; i++) {
@@ -92,6 +108,18 @@ export function parseArgs(argv) {
92
108
  i++;
93
109
  } else errors.push("--timeout needs a number of seconds (1-9999)");
94
110
  used.push("--timeout");
111
+ } else if (/^--(host|port)(=|$)/.test(a)) {
112
+ // --host <addr> / --port <n>, or --host=<addr> / --port=<n>. A value that is no option is taken even when wrong.
113
+ const name = a.slice(2, 6);
114
+ const inline = a.length > 6 ? a.slice(7) : undefined;
115
+ const v = inline ?? argv[i + 1];
116
+ if (inline === undefined && v !== undefined && !v.startsWith("-")) i++;
117
+ if (name === "host") {
118
+ if (v !== undefined && HOST_ARG.test(v)) opts.host = normalizeHostArg(v);
119
+ else errors.push("--host needs an address, such as 0.0.0.0 or 192.168.1.20");
120
+ } else if (v !== undefined && isPortArg(v)) opts.port = String(Number(v));
121
+ else errors.push("--port needs a port number (1-65535)");
122
+ used.push(`--${name}`);
95
123
  } else if (a.startsWith("-")) errors.push(`unknown option ${a}`);
96
124
  else if (opts.command === null) opts.command = a;
97
125
  else opts.args.push(a);
@@ -99,8 +127,8 @@ export function parseArgs(argv) {
99
127
  opts.command ??= "start";
100
128
  if (!COMMAND_NAMES.includes(opts.command)) errors.push(`unknown command ${opts.command}`);
101
129
  for (const o of used) {
102
- const owner = OPTION_OWNER[o];
103
- if (opts.command !== owner) errors.push(`${o} only goes with watchbell ${owner}`);
130
+ const owners = [OPTION_OWNER[o]].flat();
131
+ if (!owners.includes(opts.command)) errors.push(`${o} only goes with ${owners.map((c) => `watchbell ${c}`).join(" or ")}`);
104
132
  }
105
133
  if (opts.command === "service") {
106
134
  if (opts.args.length !== 1 || !["install", "uninstall"].includes(opts.args[0])) errors.push("use watchbell service install or watchbell service uninstall");
@@ -203,6 +231,12 @@ const isSet = (v) => typeof v === "string" && v.trim() !== "";
203
231
  // "~/wb" quoted in a dotfile reaches us unexpanded; without this it would be a folder named "~" in the current one.
204
232
  const expandTilde = (p, homedir) => (/^~(?=$|[\\/])/.test(p) ? path.join(homedir, p.slice(1)) : p);
205
233
 
234
+ const defaultSiteUrl = (host, port) => {
235
+ const h = unbracket(host);
236
+ if (isLoopbackHost(h) || ANY_ADDRESS.has(h)) return `http://localhost:${port}`;
237
+ return h.includes(":") ? `http://[${h}]:${port}` : `http://${h}:${port}`;
238
+ };
239
+
206
240
  export function resolveContext(d) {
207
241
  const home = isSet(d.env.WATCHBELL_HOME) ? path.resolve(expandTilde(d.env.WATCHBELL_HOME.trim(), d.homedir)) : path.join(d.homedir, ".watchbell");
208
242
  const envFile = path.join(home, ".env");
@@ -217,6 +251,7 @@ export function resolveContext(d) {
217
251
  // Nor the address: tcsh exports HOST=<machine name> (which would bind to the LAN) and many developer shells export
218
252
  // PORT. HOST, PORT and SITE_URL come from the file; only WATCHBELL_HOST / WATCHBELL_PORT / WATCHBELL_SITE_URL override.
219
253
  const address = (key) => {
254
+ if (isSet(d.cliAddress?.[key])) return d.cliAddress[key]; // --host / --port, for this run only
220
255
  const own = d.env[`WATCHBELL_${key}`];
221
256
  if (isSet(own)) return own.trim();
222
257
  return isSet(fromFile[key]) ? fromFile[key].trim() : null;
@@ -228,7 +263,9 @@ export function resolveContext(d) {
228
263
  // and opened is where the server listens. A SITE_URL of the user's own (a proxy, a name) is kept as it is.
229
264
  const filePort = isSet(fromFile.PORT) ? fromFile.PORT.trim() : "3100";
230
265
  let siteUrl = address("SITE_URL")?.replace(/\/+$/, "") ?? null;
231
- if (siteUrl === null || (!isSet(d.env.WATCHBELL_SITE_URL) && siteUrl === `http://localhost:${filePort}`)) siteUrl = `http://localhost:${port}`;
266
+ // A host that is one address of another network (not this machine, not all of them) answers only there, so the CLI's
267
+ // own SITE_URL names that address: localhost would not answer.
268
+ if (siteUrl === null || (!isSet(d.env.WATCHBELL_SITE_URL) && siteUrl === `http://localhost:${filePort}`)) siteUrl = defaultSiteUrl(host, port);
232
269
  const serverDir = path.join(d.pkgRoot, "server");
233
270
  return { home, envFile, merged, dataDir, host, port, siteUrl, serverDir, lockFile: lockFileOf(dataDir), healthUrl: healthUrlOf(host, port) };
234
271
  }
@@ -270,6 +307,28 @@ const ENV_HEADER = [
270
307
 
271
308
  class HomeError extends Error {}
272
309
 
310
+ /**
311
+ * This computer's IANA time zone (Europe/Berlin), written as WATCHBELL_TIMEZONE into a NEW .env only: an install
312
+ * from before 1.1 keeps Asia/Jakarta, the app's default. Null when Intl can't name a usable zone (then nothing is
313
+ * written and the default applies). `d.timeZone` replaces Intl in tests. The few old names ICU still prefers are
314
+ * written by their current name (Asia/Calcutta → Asia/Kolkata). Only a full Area/Location name or UTC/GMT is written:
315
+ * an abbreviation (CET, IST) means another zone to Postgres. Both keep in step with lib/time.ts (ZONE_NAME,
316
+ * LEGACY_ZONES; src/lib/time.test.ts compares the copies).
317
+ */
318
+ const ZONE_NAME = /^(?:UTC|GMT|[A-Za-z]+(?:\/[A-Za-z0-9_+\-]+)+)$/i;
319
+ const LEGACY_ZONES = { "Asia/Calcutta": "Asia/Kolkata", "Asia/Katmandu": "Asia/Kathmandu", "Asia/Saigon": "Asia/Ho_Chi_Minh", "Asia/Rangoon": "Asia/Yangon" };
320
+ export function machineTimeZone(d) {
321
+ try {
322
+ const found = (d.timeZone ?? (() => Intl.DateTimeFormat().resolvedOptions().timeZone))();
323
+ const zone = typeof found === "string" ? (LEGACY_ZONES[found] ?? found) : found;
324
+ if (typeof zone !== "string" || !ZONE_NAME.test(zone)) return null;
325
+ new Intl.DateTimeFormat("en-US", { timeZone: zone }); // throws on a name Intl doesn't know
326
+ return zone;
327
+ } catch {
328
+ return null;
329
+ }
330
+ }
331
+
273
332
  /**
274
333
  * Creates <home>, <home>/data and <home>/.env on first run. Later runs only fill keys that are missing or empty; a
275
334
  * value that is set is never changed (an old WATCHPOST_<KEY> counts for WATCHBELL_<KEY>). Returns what it did.
@@ -315,7 +374,9 @@ export function ensureHome(ctx, d, { newKey = false } = {}) {
315
374
  }
316
375
  if (!exists) {
317
376
  const nl = d.platform === "win32" ? "\r\n" : "\n";
318
- const lines = [...ENV_HEADER, ...[...fill].map(([k, v]) => `${k}=${v}`)];
377
+ const zone = machineTimeZone(d);
378
+ const zoneLines = zone ? ["# Times, the daily job (03:00) and the digest (07:00) follow this zone: this computer's when the file was made.", `WATCHBELL_TIMEZONE=${zone}`] : [];
379
+ const lines = [...ENV_HEADER, ...[...fill].map(([k, v]) => `${k}=${v}`), ...zoneLines];
319
380
  fs.writeFileSync(ctx.envFile, lines.join(nl) + nl, { mode: 0o600, flag: "wx" });
320
381
  protectEnvFile(ctx.envFile, d, userSid);
321
382
  return { created: true, filled: [...fill.keys()] };
@@ -424,12 +485,12 @@ function noteIgnoredShellAddress(ctx, d) {
424
485
  for (const [key, used] of [["HOST", ctx.host], ["PORT", ctx.port]]) {
425
486
  const shell = d.env[key];
426
487
  if (!isSet(shell) || shell.trim() === used) continue;
427
- const from = isSet(d.env[`WATCHBELL_${key}`]) ? `WATCHBELL_${key}` : ctx.envFile;
488
+ const from = isSet(d.cliAddress?.[key]) ? `--${key.toLowerCase()}` : isSet(d.env[`WATCHBELL_${key}`]) ? `WATCHBELL_${key}` : ctx.envFile;
428
489
  d.err(`note: ${key}=${shell.trim()} from your shell is ignored: Watchbell uses ${key}=${used} from ${from}. Set WATCHBELL_${key} to override it.`);
429
490
  }
430
491
  }
431
492
 
432
- async function cmdStart(first, d, { open, foreground, newKey }) {
493
+ async function cmdStart(first, d, { open, foreground, newKey, track }) {
433
494
  let ctx = first;
434
495
  const serverJs = path.join(ctx.serverDir, "server.js");
435
496
  if (!fs.existsSync(serverJs)) {
@@ -474,7 +535,10 @@ async function cmdStart(first, d, { open, foreground, newKey }) {
474
535
  warnPortMismatch(ctx, d);
475
536
  noteIgnoredShellAddress(ctx, d);
476
537
  d.out(`Starting on ${ctx.siteUrl} ...`);
538
+ // Asked while the server starts, so it never delays the start; said once the server is ready (start only, not run).
539
+ const update = foreground ? null : checkForUpdate(ctx, d, { background: true });
477
540
 
541
+ if (track) track.spawned = true;
478
542
  const child = d.spawn(d.execPath, [serverJs], { cwd: ctx.serverDir, env: serverEnv(ctx), stdio: "inherit" });
479
543
  const unsupervise = superviseChild(child, { platform: d.platform, proc: d.proc });
480
544
  let exited = false;
@@ -493,6 +557,8 @@ async function cmdStart(first, d, { open, foreground, newKey }) {
493
557
  const probe = await probeHealth(ctx.healthUrl, d.fetch);
494
558
  if (probe?.status === 200) {
495
559
  announce(ctx, d, { open, foreground });
560
+ announceNetwork(ctx, d);
561
+ await sayUpdate(update, d);
496
562
  break;
497
563
  }
498
564
  if (d.now() >= deadline) {
@@ -555,6 +621,8 @@ async function cmdStatus(ctx, d) {
555
621
  d.out(` Version: ${packageVersion(d.pkgRoot)}`);
556
622
  d.out(` Settings: ${ctx.envFile}${fs.existsSync(ctx.envFile) ? "" : " (created on the first start)"}`);
557
623
  d.out(` Data: ${ctx.dataDir}`);
624
+ warnServiceNode(ctx, d);
625
+ await sayUpdate(checkForUpdate(ctx, d), d);
558
626
  return running ? 0 : 3;
559
627
  }
560
628
 
@@ -839,16 +907,20 @@ export function launchdPlist(ctx, d) {
839
907
  return [
840
908
  '<?xml version="1.0" encoding="UTF-8"?>',
841
909
  '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">',
910
+ `${PLIST_MARKER} (npm package watchbell). Remove it with: watchbell service uninstall -->`,
842
911
  '<plist version="1.0">',
843
912
  "<dict>",
844
913
  ` <key>Label</key><string>${LAUNCHD_LABEL}</string>`,
845
914
  " <key>ProgramArguments</key>",
846
915
  ` <array><string>${xml(d.execPath)}</string><string>${xml(d.cliPath)}</string><string>run</string></array>`,
847
916
  " <key>EnvironmentVariables</key>",
848
- ` <dict><key>WATCHBELL_HOME</key><string>${xml(ctx.home)}</string></dict>`,
917
+ ` <dict><key>WATCHBELL_HOME</key><string>${xml(ctx.home)}</string><key>WATCHBELL_SERVICE</key><string>launchd</string></dict>`,
849
918
  ` <key>WorkingDirectory</key><string>${xml(ctx.home)}</string>`,
850
919
  " <key>RunAtLoad</key><true/>",
851
920
  " <key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict>",
921
+ // launchd has no start limit like systemd's StartLimitBurst: at most one start a minute, and `run` gives up with a
922
+ // clean exit (never restarted) on a failure that won't clear or after LAUNCHD_MAX_FAILURES (runUnderLaunchd).
923
+ ` <key>ThrottleInterval</key><integer>${LAUNCHD_THROTTLE_S}</integer>`,
852
924
  ` <key>StandardOutPath</key><string>${xml(log)}</string>`,
853
925
  ` <key>StandardErrorPath</key><string>${xml(log)}</string>`,
854
926
  "</dict>",
@@ -856,30 +928,524 @@ export function launchdPlist(ctx, d) {
856
928
  ].join("\n");
857
929
  }
858
930
 
859
- function macService(action, ctx, d) {
860
- const plist = `~/Library/LaunchAgents/${LAUNCHD_LABEL}.plist`;
861
- if (action === "uninstall") {
862
- d.out("watchbell service changes nothing on macOS. If you set up the launchd agent, remove it with:");
863
- d.out(` launchctl bootout gui/$(id -u)/${LAUNCHD_LABEL} && rm ${plist}`);
864
- return 0;
931
+ // macOS: a per-user launchd agent in ~/Library/LaunchAgents, loaded into the user's GUI domain (no admin rights).
932
+ const LAUNCHCTL = "/bin/launchctl";
933
+ const plistFileOf = (d) => path.join(d.homedir, "Library", "LaunchAgents", `${LAUNCHD_LABEL}.plist`);
934
+ const guiDomain = (d) => `gui/${d.uid ?? process.getuid?.() ?? os.userInfo().uid}`;
935
+ /** Whether the agent is loaded, and whether its process runs now (launchctl print: "state = running"). */
936
+ function agentState(d) {
937
+ const r = d.runSync(LAUNCHCTL, ["print", `${guiDomain(d)}/${LAUNCHD_LABEL}`]);
938
+ return { loaded: r.status === 0, running: r.status === 0 && /^\s*state = running\s*$/m.test(r.stdout ?? "") };
939
+ }
940
+ const agentLoaded = (d) => agentState(d).loaded;
941
+ const BOOTOUT_POLLS = 120; // x 250 ms: up to 30 s for the server to close its database
942
+ const BOOTOUT_IN_PROGRESS = 36; // "Boot-out failed: 36: Operation now in progress"
943
+
944
+ /**
945
+ * bootout sends SIGTERM and can return (0, or 36 "in progress") while the job still closes its database; a bootstrap
946
+ * right then fails with 5 or 37. Waits until launchctl print says the job is gone.
947
+ */
948
+ async function bootoutAndWait(d) {
949
+ const target = `${guiDomain(d)}/${LAUNCHD_LABEL}`;
950
+ const r = d.runSync(LAUNCHCTL, ["bootout", target]);
951
+ if (r.status !== 0 && r.status !== BOOTOUT_IN_PROGRESS) {
952
+ d.err(`launchctl bootout ${target} did not work${r.stderr.trim() ? `: ${r.stderr.trim().split(/\r?\n/)[0]}` : ""}`);
953
+ return false;
954
+ }
955
+ for (let i = 0; i < BOOTOUT_POLLS; i++) {
956
+ if (!agentLoaded(d)) return true;
957
+ await d.sleep(250);
958
+ }
959
+ d.err(`The launchd agent ${LAUNCHD_LABEL} did not stop within 30 s. Wait a moment, then run watchbell service install again.`);
960
+ return false;
961
+ }
962
+
963
+ function launchctl(d, ...args) {
964
+ const r = d.runSync(LAUNCHCTL, args);
965
+ if (r.status !== 0) d.err(`launchctl ${args.join(" ")} did not work${r.stderr.trim() ? `: ${r.stderr.trim().split(/\r?\n/)[0]}` : ""}`);
966
+ return r.status === 0;
967
+ }
968
+
969
+ async function macInstall(ctx, d, yes) {
970
+ const plistFile = plistFileOf(d);
971
+ const old = fs.existsSync(plistFile) ? fs.readFileSync(plistFile, "utf8") : null;
972
+ const foreign = old !== null && !old.includes(PLIST_MARKER);
973
+ if (foreign) d.out(`${plistFile} already exists and was not written by the watchbell CLI.`);
974
+ const question = foreign
975
+ ? `Replace it with an agent for the npm package (settings and data in ${ctx.home})? [y/N] `
976
+ : `Install the launchd agent ${LAUNCHD_LABEL}, which starts Watchbell when you log in? [y/N] `;
977
+ if (!(await consent(d, yes, question))) return 1;
978
+ const { loaded, running } = agentState(d);
979
+ // A Watchbell in a terminal holds the database; an agent started next to it would fail at every start.
980
+ if (!running && runningPid(ctx, d) !== null) {
981
+ d.err('Watchbell is running in a terminal now. Stop it first ("watchbell stop"), then run watchbell service install again.');
982
+ return 1;
983
+ }
984
+ if (!prepareHome(ctx, d)) return 1;
985
+ fs.mkdirSync(path.dirname(plistFile), { recursive: true });
986
+ fs.writeFileSync(plistFile, `${launchdPlist(ctx, d)}\n`);
987
+ d.out(`Wrote ${plistFile}`);
988
+ // A loaded agent keeps its old definition until it is booted out (bootout stops it with SIGTERM: a clean stop).
989
+ if (loaded && !(await bootoutAndWait(d))) return 1;
990
+ if (!launchctl(d, "bootstrap", guiDomain(d), plistFile)) {
991
+ d.err("Run watchbell service install again in a moment; if it keeps failing, log out and in, then try once more.");
992
+ return 1;
865
993
  }
866
- d.out(`watchbell service installs nothing on macOS. To start Watchbell at login with launchd, save this as ${plist}:`);
867
- d.out("");
868
- d.out(launchdPlist(ctx, d));
869
994
  d.out("");
870
- d.out(`then run: launchctl bootstrap gui/$(id -u) ${plist}`);
871
- d.out('Stop it cleanly with "watchbell stop" (KeepAlive restarts it only after a crash).');
995
+ d.out("Watchbell runs as a launchd agent and starts when you log in.");
996
+ d.out(" Status: watchbell status");
997
+ d.out(` Log: ${path.join(ctx.home, "watchbell.log")} (it grows; delete it now and then while Watchbell is stopped)`);
998
+ d.out(" Stop: watchbell stop (launchd restarts it only after a crash)");
999
+ d.out(" Remove: watchbell service uninstall");
1000
+ d.out(` Address: ${ctx.siteUrl}`);
1001
+ d.out(` Node.js: ${d.execPath}. After changing or removing this Node.js (nvm, fnm, volta, Homebrew), run watchbell service install again.`);
872
1002
  return 0;
873
1003
  }
874
1004
 
1005
+ async function macUninstall(ctx, d, yes) {
1006
+ const plistFile = plistFileOf(d);
1007
+ if (!fs.existsSync(plistFile)) {
1008
+ d.out(`No launchd agent is installed (${plistFile} does not exist).`);
1009
+ return 0;
1010
+ }
1011
+ if (!(await consent(d, yes, `Remove the launchd agent ${LAUNCHD_LABEL}? Your settings and data in ${ctx.home} stay. [y/N] `))) return 1;
1012
+ // bootout stops it with SIGTERM: the server closes its database cleanly.
1013
+ if (agentLoaded(d) && !(await bootoutAndWait(d))) return 1;
1014
+ fs.rmSync(plistFile, { force: true });
1015
+ d.out(`Removed ${plistFile}. Your settings and data stay in ${ctx.home}.`);
1016
+ return 0;
1017
+ }
1018
+
1019
+ // launchd restarts a job after every failed exit, with no limit (ThrottleInterval only spaces the starts). Under the
1020
+ // agent, `run` therefore ends with a clean exit 0, which KeepAlive does not restart, when the start can't succeed
1021
+ // (port taken, database locked, key missing: nothing was started) and after LAUNCHD_MAX_FAILURES failed exits within
1022
+ // LAUNCHD_WINDOW_MS (systemd: 5 starts in 2 min, the Scheduled Task: 3 restarts). The count is kept in the home folder.
1023
+ const LAUNCHD_MAX_FAILURES = 5;
1024
+ const LAUNCHD_WINDOW_MS = 10 * 60 * 1000;
1025
+ const LAUNCHD_FAILURES = "launchd-failures.json";
1026
+
1027
+ const underLaunchd = (d) => d.env.WATCHBELL_SERVICE === "launchd" || (d.platform === "darwin" && d.env.XPC_SERVICE_NAME === LAUNCHD_LABEL);
1028
+
1029
+ function recentFailures(file, now) {
1030
+ try {
1031
+ const list = JSON.parse(fs.readFileSync(file, "utf8"));
1032
+ return Array.isArray(list) ? list.filter((t) => Number.isFinite(t) && t <= now && now - t < LAUNCHD_WINDOW_MS) : [];
1033
+ } catch {
1034
+ return [];
1035
+ }
1036
+ }
1037
+
1038
+ export async function runUnderLaunchd(ctx, d) {
1039
+ const track = { spawned: false };
1040
+ const code = await cmdStart(ctx, d, { open: false, foreground: true, newKey: false, track });
1041
+ const kick = `launchctl kickstart ${guiDomain(d)}/${LAUNCHD_LABEL}`;
1042
+ const file = path.join(ctx.home, LAUNCHD_FAILURES);
1043
+ if (code === 0) return 0;
1044
+ if (!track.spawned) {
1045
+ d.err(`watchbell: launchd will not start Watchbell again until you fix the problem above. Then run: ${kick} (or log out and in).`);
1046
+ return 0;
1047
+ }
1048
+ const now = d.now();
1049
+ const failures = [...recentFailures(file, now), now];
1050
+ if (failures.length >= LAUNCHD_MAX_FAILURES) {
1051
+ d.err(`watchbell: the server stopped with an error ${failures.length} times in 10 minutes; launchd will not restart it again. See the messages above, then run: ${kick}`);
1052
+ fs.rmSync(file, { force: true });
1053
+ return 0;
1054
+ }
1055
+ try {
1056
+ fs.writeFileSync(file, `${JSON.stringify(failures)}\n`);
1057
+ } catch {
1058
+ // a read-only home: ThrottleInterval still spaces the restarts
1059
+ }
1060
+ return code;
1061
+ }
1062
+
1063
+ // ---------------------------------------------------------------------------------------------------- service Node.js
1064
+
1065
+ // The Node.js path out of what the CLI wrote: the unit's first ExecStart word, the task's command line, the plist's
1066
+ // first ProgramArguments string.
1067
+ const PS_TASK_ACTION = [
1068
+ "$t = Get-ScheduledTask -TaskName $env:WB_TASK -ErrorAction SilentlyContinue",
1069
+ "if ($null -eq $t) { '{}' } else {",
1070
+ " $a = @($t.Actions) | Select-Object -First 1",
1071
+ " [pscustomobject]@{ dir = [string]$a.WorkingDirectory; args = [string]$a.Arguments } | ConvertTo-Json -Compress",
1072
+ "}",
1073
+ ].join("\n");
1074
+
1075
+ const unitUnquote = (s) => s.replace(/\\(.)/g, "$1").replaceAll("%%", "%").replaceAll("$$", "$");
1076
+ const xmlText = (s) => s.replaceAll("&quot;", '"').replaceAll("&gt;", ">").replaceAll("&lt;", "<").replaceAll("&amp;", "&");
1077
+
1078
+ /** The Node.js the installed service of this package runs, or null (no service, someone else's, or unreadable). */
1079
+ export function serviceNodePath(ctx, d) {
1080
+ try {
1081
+ if (d.platform === "linux") {
1082
+ const unit = fs.readFileSync(unitFileOf(d), "utf8");
1083
+ if (!unit.includes(UNIT_MARKER)) return null;
1084
+ const m = /^ExecStart="((?:[^"\\]|\\.)*)"/m.exec(unit);
1085
+ return m ? unitUnquote(m[1]) : null;
1086
+ }
1087
+ if (d.platform === "darwin") {
1088
+ const plist = fs.readFileSync(plistFileOf(d), "utf8");
1089
+ const m = /<key>ProgramArguments<\/key>\s*<array>\s*<string>([^<]*)<\/string>/.exec(plist);
1090
+ return m ? xmlText(m[1]) : null;
1091
+ }
1092
+ if (d.platform === "win32") {
1093
+ const r = powershell(d, PS_TASK_ACTION, { WB_TASK: TASK });
1094
+ if (r.status !== 0) return null;
1095
+ const info = JSON.parse(r.stdout.trim().split(/\r?\n/).filter(Boolean).pop() ?? "{}");
1096
+ if (typeof info.args !== "string" || !sameFolder(info.dir || "", ctx.home)) return null;
1097
+ return /&& "([^"]+)" "/.exec(info.args)?.[1] ?? null;
1098
+ }
1099
+ } catch {
1100
+ // no service file, or one that can't be read: nothing to say
1101
+ }
1102
+ return null;
1103
+ }
1104
+
1105
+ /** After a Node.js change (nvm, fnm, volta, an upgrade) the service would fail at every login; say how to fix it. */
1106
+ function warnServiceNode(ctx, d) {
1107
+ const node = serviceNodePath(ctx, d);
1108
+ if (node && !fs.existsSync(node)) d.err(`The service runs ${node}, which no longer exists. Run: watchbell service install`);
1109
+ }
1110
+
875
1111
  async function cmdService(action, ctx, d, yes) {
876
1112
  if (d.platform === "linux") return action === "install" ? linuxInstall(ctx, d, yes) : linuxUninstall(ctx, d, yes);
877
1113
  if (d.platform === "win32") return action === "install" ? windowsInstall(ctx, d, yes) : windowsUninstall(ctx, d, yes);
878
- if (d.platform === "darwin") return macService(action, ctx, d);
1114
+ if (d.platform === "darwin") return action === "install" ? macInstall(ctx, d, yes) : macUninstall(ctx, d, yes);
879
1115
  d.err(`watchbell service is not available on ${d.platform}. Have your service manager run: "${d.execPath}" "${d.cliPath}" run`);
880
1116
  return 1;
881
1117
  }
882
1118
 
1119
+ // ---------------------------------------------------------------------------------------------------- update notice
1120
+
1121
+ // D8: the only request Watchbell's CLI makes on its own. A plain GET of the public version document, no ids or cookies.
1122
+ const REGISTRY_LATEST = "https://registry.npmjs.org/watchbell/latest";
1123
+ const UPDATE_CACHE = "update-check.json";
1124
+ const UPDATE_EVERY_MS = 24 * 60 * 60 * 1000;
1125
+ const UPDATE_TIMEOUT_MS = 3000;
1126
+ const SEMVER = /^(\d{1,9})\.(\d{1,9})\.(\d{1,9})(?:-([0-9A-Za-z.-]{1,64}))?(?:\+[0-9A-Za-z.-]{1,64})?$/;
1127
+
1128
+ /** Like a sort compare (<0, 0, >0); a release is newer than its own pre-releases. Null when either is no version. */
1129
+ export function compareVersions(a, b) {
1130
+ const x = SEMVER.exec(String(a));
1131
+ const y = SEMVER.exec(String(b));
1132
+ if (!x || !y) return null;
1133
+ for (let i = 1; i <= 3; i++) if (Number(x[i]) !== Number(y[i])) return Number(x[i]) - Number(y[i]);
1134
+ if (!x[4] || !y[4]) return (x[4] ? -1 : 0) - (y[4] ? -1 : 0);
1135
+ const p = x[4].split(".");
1136
+ const q = y[4].split(".");
1137
+ const num = (s) => /^\d+$/.test(s);
1138
+ for (let i = 0; i < Math.max(p.length, q.length); i++) {
1139
+ if (p[i] === undefined) return -1;
1140
+ if (q[i] === undefined) return 1;
1141
+ if (p[i] === q[i]) continue;
1142
+ if (num(p[i]) && num(q[i])) return Number(p[i]) - Number(q[i]);
1143
+ if (num(p[i]) || num(q[i])) return num(p[i]) ? -1 : 1;
1144
+ return p[i] < q[i] ? -1 : 1;
1145
+ }
1146
+ return 0;
1147
+ }
1148
+
1149
+ const switchedOn = (v) => isSet(v) && !/^(0|false|no|off)$/i.test(v.trim());
1150
+ /** WATCHBELL_NO_UPDATE_CHECK, NO_UPDATE_NOTIFIER (the usual opt-out of npm tools) or CI turn the check off. */
1151
+ export const updateCheckOff = (env) => ["WATCHBELL_NO_UPDATE_CHECK", "NO_UPDATE_NOTIFIER", "CI"].some((k) => switchedOn(env[k]));
1152
+
1153
+ function readUpdateCache(file) {
1154
+ try {
1155
+ const c = JSON.parse(fs.readFileSync(file, "utf8"));
1156
+ const at = Date.parse(c?.checkedAt);
1157
+ return Number.isFinite(at) && typeof c.latest === "string" && SEMVER.test(c.latest) ? { at, latest: c.latest } : null;
1158
+ } catch {
1159
+ return null; // none yet, or not ours to trust: ask again
1160
+ }
1161
+ }
1162
+
1163
+ /** The registry's latest version; null when offline, slower than 3 s, refused, or answered with something else. */
1164
+ async function registryLatest(d, { background = false } = {}) {
1165
+ const ac = new AbortController();
1166
+ let timer;
1167
+ const late = new Promise((resolve) => {
1168
+ timer = (d.setTimer ?? setTimeout)(() => {
1169
+ ac.abort();
1170
+ resolve(null);
1171
+ }, d.updateTimeoutMs ?? UPDATE_TIMEOUT_MS);
1172
+ // start does not wait for the answer when the server fails early: the timer must not keep the CLI alive then.
1173
+ if (background) timer?.unref?.();
1174
+ });
1175
+ const ask = (async () => {
1176
+ const res = await d.fetch(REGISTRY_LATEST, { method: "GET", headers: { accept: "application/json" }, signal: ac.signal });
1177
+ if (!res?.ok) return null;
1178
+ const v = (await res.json())?.version;
1179
+ return typeof v === "string" && SEMVER.test(v.trim()) ? v.trim() : null;
1180
+ })().catch(() => null);
1181
+ try {
1182
+ return await Promise.race([ask, late]);
1183
+ } finally {
1184
+ clearTimeout(timer);
1185
+ }
1186
+ }
1187
+
1188
+ /**
1189
+ * This package's version and the registry's latest: from <home>/update-check.json when it is less than 24 h old, else
1190
+ * asked (and the answer saved). A failed ask is saved too, with the last known answer, so an offline machine is not
1191
+ * asked on every start. `force` (watchbell update) always asks and returns only the registry's own answer.
1192
+ */
1193
+ async function lookupLatest(ctx, d, { force = false, background = false } = {}) {
1194
+ const current = packageVersion(d.pkgRoot);
1195
+ const file = path.join(ctx.home, UPDATE_CACHE);
1196
+ const cached = readUpdateCache(file);
1197
+ const now = d.now();
1198
+ if (!force && cached && now >= cached.at && now - cached.at < UPDATE_EVERY_MS) return { current, latest: cached.latest };
1199
+ const latest = await registryLatest(d, { background });
1200
+ const keep = latest ?? cached?.latest ?? (SEMVER.test(current) ? current : null);
1201
+ if (keep && fs.existsSync(ctx.home)) {
1202
+ try {
1203
+ fs.writeFileSync(file, `${JSON.stringify({ checkedAt: new Date(now).toISOString(), latest: keep })}\n`);
1204
+ } catch {
1205
+ // a read-only home: the next start asks again
1206
+ }
1207
+ }
1208
+ return { current, latest: force ? latest : (latest ?? cached?.latest ?? null) };
1209
+ }
1210
+
1211
+ /** D8. Never throws; null unless the registry has a newer version than this package. */
1212
+ export async function checkForUpdate(ctx, d, { background = false } = {}) {
1213
+ try {
1214
+ // ~/.watchbell/.env as well as the environment (which wins), like every other setting.
1215
+ if (updateCheckOff(ctx.merged ?? d.env)) return null;
1216
+ const { current, latest } = await lookupLatest(ctx, d, { background });
1217
+ return latest && compareVersions(latest, current) > 0 ? { current, latest } : null;
1218
+ } catch {
1219
+ return null;
1220
+ }
1221
+ }
1222
+
1223
+ async function sayUpdate(check, d) {
1224
+ const found = check ? await check : null;
1225
+ if (found) d.out(`A newer Watchbell is available: ${found.latest} (this is ${found.current}). Update with: watchbell update`);
1226
+ }
1227
+
1228
+ // ---------------------------------------------------------------------------------------------------- network (D10)
1229
+
1230
+ const unbracket = (h) => h.replace(/^\[(.*)\]$/, "$1");
1231
+ export const isLoopbackHost = (host) => {
1232
+ const h = unbracket(String(host)).toLowerCase();
1233
+ return h === "localhost" || h === "::1" || /^(::ffff:)?127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(h);
1234
+ };
1235
+ const ANY_ADDRESS = new Set(["0.0.0.0", "::", "0:0:0:0:0:0:0:0"]);
1236
+
1237
+ /** The http addresses other computers can use: every network address of this machine for 0.0.0.0 / ::, else the host. */
1238
+ export function networkUrls(host, port, interfaces) {
1239
+ const h = unbracket(host);
1240
+ const at = (a) => (a.includes(":") ? `http://[${a}]:${port}` : `http://${a}:${port}`);
1241
+ if (!ANY_ADDRESS.has(h)) return [at(h)];
1242
+ const out = [];
1243
+ for (const list of Object.values(interfaces ?? {})) {
1244
+ for (const i of list ?? []) {
1245
+ if (i.internal) continue;
1246
+ if (i.family === "IPv4" || i.family === 4) out.push(at(i.address));
1247
+ else if (h !== "0.0.0.0" && !/^fe80:/i.test(i.address)) out.push(at(i.address)); // :: also takes IPv6
1248
+ }
1249
+ }
1250
+ return [...new Set(out)];
1251
+ }
1252
+
1253
+ /** A host other than this machine: where others can open it, what that means, and SITE_URL when it names localhost. */
1254
+ function announceNetwork(ctx, d) {
1255
+ if (isLoopbackHost(ctx.host)) return;
1256
+ let urls = [];
1257
+ try {
1258
+ urls = networkUrls(ctx.host, ctx.port, (d.networkInterfaces ?? os.networkInterfaces)());
1259
+ } catch {
1260
+ // no list of addresses: the warning still applies
1261
+ }
1262
+ d.out("");
1263
+ d.out(urls.length ? `Watchbell listens on ${ctx.host}, so other computers can open it at:` : `Watchbell listens on ${ctx.host} (no network address of this machine was found).`);
1264
+ for (const u of urls) d.out(` ${u}`);
1265
+ d.err("warning: everyone who can reach these addresses gets the Watchbell sign-in page, and plain http sends passwords");
1266
+ d.err("readable on the network. Finish /setup (the owner account) before you share the address, and put HTTPS in front");
1267
+ d.err("(a reverse proxy) before you open it to the internet. Safer for one person: keep HOST=127.0.0.1 and use an SSH");
1268
+ d.err('tunnel (see "Open it from another computer" in the install guide).');
1269
+ let site = null;
1270
+ try {
1271
+ site = new URL(ctx.siteUrl);
1272
+ } catch {
1273
+ // an unreadable SITE_URL is the server's own error
1274
+ }
1275
+ if (site && isLoopbackHost(site.hostname)) {
1276
+ const example = urls[0] ?? `http://<this computer's address>:${ctx.port}`;
1277
+ d.err(
1278
+ `note: SITE_URL is ${ctx.siteUrl}, so links in alerts and messages lead to localhost. Signing in from another computer ` +
1279
+ `works anyway; for links that work there, set SITE_URL=${example} in ${ctx.envFile} (or WATCHBELL_SITE_URL for one run).`,
1280
+ );
1281
+ }
1282
+ }
1283
+
1284
+ // ---------------------------------------------------------------------------------------------------- update (D9)
1285
+
1286
+ const NPM_UPDATE_ARGS = ["install", "-g", "watchbell@latest"];
1287
+ const NPM_UPDATE = `npm ${NPM_UPDATE_ARGS.join(" ")}`;
1288
+ const PS_START = "Start-ScheduledTask -TaskName $env:WB_TASK";
1289
+
1290
+ /** The npm next to the running Node.js (npm.cmd on Windows, run through System32's cmd.exe); null if cmd can't take it. */
1291
+ export function npmCommand(d) {
1292
+ const p = d.platform === "win32" ? path.win32 : path.posix;
1293
+ const npm = p.join(p.dirname(d.execPath), d.platform === "win32" ? "npm.cmd" : "npm");
1294
+ if (d.platform !== "win32") return { npm, cmd: npm, args: NPM_UPDATE_ARGS, opts: {} };
1295
+ if (/["%\r\n]/.test(npm)) return null; // cmd expands % even inside quotes
1296
+ return { npm, cmd: system32Tool(d, "cmd.exe"), args: ["/d", "/s", "/c", `""${npm}" ${NPM_UPDATE_ARGS.join(" ")}"`], opts: { windowsVerbatimArguments: true } };
1297
+ }
1298
+
1299
+ const writableDir = (dir) => {
1300
+ try {
1301
+ fs.accessSync(dir, fs.constants.W_OK);
1302
+ return true;
1303
+ } catch {
1304
+ return false;
1305
+ }
1306
+ };
1307
+
1308
+ /** The service of the npm package that runs now, with how to stop it cleanly and start it again; else null. */
1309
+ async function runningService(ctx, d) {
1310
+ if (d.platform === "linux") {
1311
+ let unit = null;
1312
+ try {
1313
+ unit = fs.readFileSync(unitFileOf(d), "utf8");
1314
+ } catch {
1315
+ return null;
1316
+ }
1317
+ if (!unit.includes(UNIT_MARKER)) return null; // an installer's unit runs a source checkout, not this package
1318
+ if (d.runSync("systemctl", ["--user", "is-active", "--quiet", SERVICE]).status !== 0) return null;
1319
+ return {
1320
+ name: `the systemd user service ${SERVICE}`,
1321
+ stopHint: `systemctl --user stop ${SERVICE}`,
1322
+ startHint: `systemctl --user start ${SERVICE}`,
1323
+ stop: async () => systemctl(d, "stop", SERVICE),
1324
+ start: async () => systemctl(d, "start", SERVICE),
1325
+ };
1326
+ }
1327
+ if (d.platform === "win32") {
1328
+ const info = taskInfo(d);
1329
+ if (!info || info.state !== "Running" || !sameFolder(info.dir || "", ctx.home)) return null;
1330
+ return {
1331
+ name: `the Scheduled Task "${TASK}"`,
1332
+ stopHint: "watchbell stop",
1333
+ startHint: `Start-ScheduledTask ${TASK}, or sign out and in`,
1334
+ stop: async () => (await stopServer(ctx, d)) === 0, // the clean stop; the task ends with the server
1335
+ start: async () => {
1336
+ const r = powershell(d, PS_START, { WB_TASK: TASK });
1337
+ if (r.status !== 0) d.err(`Could not start the Scheduled Task "${TASK}" again (exit ${r.status}). Sign out and in, or run: watchbell`);
1338
+ return r.status === 0;
1339
+ },
1340
+ };
1341
+ }
1342
+ if (d.platform === "darwin") {
1343
+ // Only an agent whose process runs now: after "watchbell stop" it stays loaded but idle, and a Watchbell started in
1344
+ // a terminal then is not the service's to restart.
1345
+ if (!fs.existsSync(plistFileOf(d)) || !agentState(d).running || runningPid(ctx, d) === null) return null;
1346
+ return {
1347
+ name: `the launchd agent ${LAUNCHD_LABEL}`,
1348
+ stopHint: "watchbell stop",
1349
+ startHint: `launchctl kickstart ${guiDomain(d)}/${LAUNCHD_LABEL}`,
1350
+ stop: async () => (await stopServer(ctx, d)) === 0, // a clean exit: KeepAlive restarts it only after a crash
1351
+ start: async () => launchctl(d, "kickstart", `${guiDomain(d)}/${LAUNCHD_LABEL}`),
1352
+ };
1353
+ }
1354
+ return null;
1355
+ }
1356
+
1357
+ /** What to do by hand: stop Watchbell (its service, when one runs), run `cmd`, start it again. */
1358
+ function byHand(service, cmd) {
1359
+ if (!service) return `Stop Watchbell ("watchbell stop"), then run: ${cmd}`;
1360
+ return `Stop ${service.name} (${service.stopHint}), run ${cmd}, then start it again (${service.startHint}).`;
1361
+ }
1362
+
1363
+ function packageName(pkgRoot) {
1364
+ try {
1365
+ return JSON.parse(fs.readFileSync(path.join(pkgRoot, "package.json"), "utf8")).name ?? null;
1366
+ } catch {
1367
+ return null;
1368
+ }
1369
+ }
1370
+
1371
+ /**
1372
+ * D9: `npm install -g watchbell@latest` with the npm next to this Node.js, only while Watchbell is stopped. A running
1373
+ * service of the package is stopped cleanly first and started again after (also when npm failed: the old version
1374
+ * then runs on). 0: updated or already the latest; 1: running, npm failed, or the service did not stop.
1375
+ */
1376
+ export async function cmdUpdate({ ctx }, d) {
1377
+ // `sudo watchbell update` reads root's home: it would not see the user's Watchbell or stop its service.
1378
+ if ((d.uid ?? process.getuid?.()) === 0 && isSet(d.env.SUDO_USER)) {
1379
+ d.err(`Run watchbell update as ${d.env.SUDO_USER.trim()}, without sudo: as root it looks at ${ctx.home} and can't see or stop your Watchbell.`);
1380
+ d.err("When npm needs root, watchbell update says so and names the sudo command to run.");
1381
+ return 1;
1382
+ }
1383
+ if (packageName(d.pkgRoot) !== "watchbell") {
1384
+ d.err(`This Watchbell (${d.pkgRoot}) is not the npm package. Update a source checkout with git, or with its installer's --upgrade.`);
1385
+ return 1;
1386
+ }
1387
+ const { current, latest } = await lookupLatest(ctx, d, { force: true });
1388
+ const newer = latest ? compareVersions(latest, current) : null;
1389
+ if (newer !== null && newer <= 0) {
1390
+ d.out(`Watchbell ${current} is the latest version.`);
1391
+ return 0;
1392
+ }
1393
+ if (latest === null) d.out("Could not ask registry.npmjs.org for the latest version; npm will try.");
1394
+ const npm = npmCommand(d);
1395
+ if (!npm) {
1396
+ d.err(`The folder of this Node.js can't go on a cmd command line. Stop Watchbell and run: ${NPM_UPDATE}`);
1397
+ return 1;
1398
+ }
1399
+ const service = await runningService(ctx, d);
1400
+ // A system Node.js (/usr/lib/node_modules) is owned by root: say so before anything is stopped.
1401
+ const npmFolder = path.dirname(d.pkgRoot);
1402
+ if (d.platform !== "win32" && !writableDir(npmFolder)) {
1403
+ d.err(`npm can't write to ${npmFolder} as your user, so watchbell update can't update it.`);
1404
+ d.err(byHand(service, `sudo ${NPM_UPDATE}`));
1405
+ return 1;
1406
+ }
1407
+ if (service) {
1408
+ d.out(`Stopping ${service.name} for the update ...`);
1409
+ if (!(await service.stop())) {
1410
+ d.err(`Could not stop ${service.name}; nothing was updated.`);
1411
+ return 1;
1412
+ }
1413
+ } else {
1414
+ const pid = runningPid(ctx, d);
1415
+ if (pid !== null) {
1416
+ d.err(`Watchbell is running (process ${pid}). Stop it first with "watchbell stop", then run watchbell update again.`);
1417
+ return 1;
1418
+ }
1419
+ }
1420
+ d.out(`Updating Watchbell ${current}${latest ? ` to ${latest}` : ""}: ${npm.npm} ${NPM_UPDATE_ARGS.join(" ")}`);
1421
+ // POSIX: npm starts with "#!/usr/bin/env node", so this Node.js goes first on PATH, else npm runs (and installs for)
1422
+ // whichever node PATH finds first. A large maxBuffer: a verbose .npmrc must not get npm killed mid-install.
1423
+ const env = d.platform === "win32" ? d.env : { ...d.env, PATH: [path.posix.dirname(d.execPath), d.env.PATH].filter(isSet).join(":") };
1424
+ const r = d.runSync(npm.cmd, npm.args, { ...npm.opts, env, stdio: ["inherit", "inherit", "pipe"], maxBuffer: 64 * 1024 * 1024 });
1425
+ const said = (r.stderr ?? "").trim();
1426
+ if (said) d.err(said); // npm's warnings too, not only its errors
1427
+ let code = 0;
1428
+ if (r.status !== 0) {
1429
+ code = 1;
1430
+ d.err(r.error ? `Could not run ${npm.npm}: ${r.error.code ?? r.error.message}.` : `npm could not update Watchbell (exit ${r.status}).`);
1431
+ d.err(service ? byHand(service, NPM_UPDATE) : `Run it yourself: ${NPM_UPDATE}`);
1432
+ if (d.platform !== "win32" && /\bEACCES\b|\bEPERM\b|permission denied/i.test(said)) {
1433
+ d.err(`npm's global folder is not writable by your user. ${byHand(service, `sudo ${NPM_UPDATE}`)}`);
1434
+ }
1435
+ } else {
1436
+ const now = packageVersion(d.pkgRoot);
1437
+ if (now === current && newer !== null && newer > 0) {
1438
+ code = 1;
1439
+ d.err(`npm finished, but ${d.pkgRoot} still holds Watchbell ${now}: this npm installs somewhere else (see npm prefix -g).`);
1440
+ } else d.out(now === current ? `Watchbell ${now} is up to date.` : `Updated Watchbell ${current} to ${now}.`);
1441
+ }
1442
+ if (service) {
1443
+ d.out(`Starting ${service.name} again ...`);
1444
+ if (!(await service.start())) code = 1;
1445
+ }
1446
+ return code;
1447
+ }
1448
+
883
1449
  // ---------------------------------------------------------------------------------------------------- main
884
1450
 
885
1451
  export async function main(argv, overrides = {}) {
@@ -904,6 +1470,7 @@ export async function main(argv, overrides = {}) {
904
1470
  d.err(`Watchbell needs Node.js 24 or newer; this is Node.js ${d.nodeVersion}.`);
905
1471
  return 1;
906
1472
  }
1473
+ if (opts.host !== null || opts.port !== null) d.cliAddress = { HOST: opts.host, PORT: opts.port };
907
1474
  let ctx;
908
1475
  try {
909
1476
  ctx = resolveContext(d);
@@ -915,6 +1482,7 @@ export async function main(argv, overrides = {}) {
915
1482
  case "start":
916
1483
  return cmdStart(ctx, d, { open: opts.open, foreground: false, newKey: opts.newKey });
917
1484
  case "run":
1485
+ if (underLaunchd(d)) return runUnderLaunchd(ctx, d);
918
1486
  return cmdStart(ctx, d, { open: false, foreground: true, newKey: false });
919
1487
  case "stop":
920
1488
  return stopServer(ctx, d, opts.timeout);
@@ -924,6 +1492,8 @@ export async function main(argv, overrides = {}) {
924
1492
  return cmdService(opts.args[0], ctx, d, opts.yes);
925
1493
  case "reset-login":
926
1494
  return cmdResetLogin(ctx, d, opts.args[0].trim());
1495
+ case "update":
1496
+ return cmdUpdate({ ctx }, d);
927
1497
  default:
928
1498
  return 2;
929
1499
  }