watchbell 1.0.0 → 1.1.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 (678) 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/build-manifest.json +3 -3
  7. package/server/.next/prerender-manifest.json +3 -3
  8. package/server/.next/server/app/(console)/(private)/ai/agents/page/server-reference-manifest.json +11 -11
  9. package/server/.next/server/app/(console)/(private)/ai/agents/page.js +38 -37
  10. package/server/.next/server/app/(console)/(private)/ai/agents/page.js.nft.json +1 -1
  11. package/server/.next/server/app/(console)/(private)/ai/agents/page_client-reference-manifest.js +1 -1
  12. package/server/.next/server/app/(console)/(private)/ai/ask/page/server-reference-manifest.json +10 -10
  13. package/server/.next/server/app/(console)/(private)/ai/ask/page.js +38 -37
  14. package/server/.next/server/app/(console)/(private)/ai/ask/page.js.nft.json +1 -1
  15. package/server/.next/server/app/(console)/(private)/ai/ask/page_client-reference-manifest.js +1 -1
  16. package/server/.next/server/app/(console)/(private)/ai/connect/page/server-reference-manifest.json +9 -9
  17. package/server/.next/server/app/(console)/(private)/ai/connect/page.js +38 -37
  18. package/server/.next/server/app/(console)/(private)/ai/connect/page.js.nft.json +1 -1
  19. package/server/.next/server/app/(console)/(private)/ai/connect/page_client-reference-manifest.js +1 -1
  20. package/server/.next/server/app/(console)/(private)/ai/keys/page/server-reference-manifest.json +12 -12
  21. package/server/.next/server/app/(console)/(private)/ai/keys/page.js +38 -37
  22. package/server/.next/server/app/(console)/(private)/ai/keys/page.js.nft.json +1 -1
  23. package/server/.next/server/app/(console)/(private)/ai/keys/page_client-reference-manifest.js +1 -1
  24. package/server/.next/server/app/(console)/(private)/ai/logs/page/server-reference-manifest.json +10 -10
  25. package/server/.next/server/app/(console)/(private)/ai/logs/page.js +38 -37
  26. package/server/.next/server/app/(console)/(private)/ai/logs/page.js.nft.json +1 -1
  27. package/server/.next/server/app/(console)/(private)/ai/logs/page_client-reference-manifest.js +1 -1
  28. package/server/.next/server/app/(console)/(private)/ai/models/page/server-reference-manifest.json +19 -19
  29. package/server/.next/server/app/(console)/(private)/ai/models/page.js +38 -37
  30. package/server/.next/server/app/(console)/(private)/ai/models/page.js.nft.json +1 -1
  31. package/server/.next/server/app/(console)/(private)/ai/models/page_client-reference-manifest.js +1 -1
  32. package/server/.next/server/app/(console)/(private)/ai/page/server-reference-manifest.json +9 -9
  33. package/server/.next/server/app/(console)/(private)/ai/page.js +38 -37
  34. package/server/.next/server/app/(console)/(private)/ai/page.js.nft.json +1 -1
  35. package/server/.next/server/app/(console)/(private)/ai/page_client-reference-manifest.js +1 -1
  36. package/server/.next/server/app/(console)/(private)/ai/playground/page/server-reference-manifest.json +12 -12
  37. package/server/.next/server/app/(console)/(private)/ai/playground/page.js +38 -37
  38. package/server/.next/server/app/(console)/(private)/ai/playground/page.js.nft.json +1 -1
  39. package/server/.next/server/app/(console)/(private)/ai/playground/page_client-reference-manifest.js +1 -1
  40. package/server/.next/server/app/(console)/(private)/ai/providers/page/server-reference-manifest.json +15 -15
  41. package/server/.next/server/app/(console)/(private)/ai/providers/page.js +38 -37
  42. package/server/.next/server/app/(console)/(private)/ai/providers/page.js.nft.json +1 -1
  43. package/server/.next/server/app/(console)/(private)/ai/providers/page_client-reference-manifest.js +1 -1
  44. package/server/.next/server/app/(console)/(private)/ai/quota/page/server-reference-manifest.json +10 -10
  45. package/server/.next/server/app/(console)/(private)/ai/quota/page.js +38 -37
  46. package/server/.next/server/app/(console)/(private)/ai/quota/page.js.nft.json +1 -1
  47. package/server/.next/server/app/(console)/(private)/ai/quota/page_client-reference-manifest.js +1 -1
  48. package/server/.next/server/app/(console)/(private)/ai/usage/page/server-reference-manifest.json +10 -10
  49. package/server/.next/server/app/(console)/(private)/ai/usage/page.js +38 -37
  50. package/server/.next/server/app/(console)/(private)/ai/usage/page.js.nft.json +1 -1
  51. package/server/.next/server/app/(console)/(private)/ai/usage/page_client-reference-manifest.js +1 -1
  52. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page/server-reference-manifest.json +9 -9
  53. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js +38 -37
  54. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page.js.nft.json +1 -1
  55. package/server/.next/server/app/(console)/(private)/api-docs/[[...op]]/page_client-reference-manifest.js +1 -1
  56. package/server/.next/server/app/(console)/(private)/auto-actions/page/server-reference-manifest.json +10 -10
  57. package/server/.next/server/app/(console)/(private)/auto-actions/page.js +38 -37
  58. package/server/.next/server/app/(console)/(private)/auto-actions/page.js.nft.json +1 -1
  59. package/server/.next/server/app/(console)/(private)/auto-actions/page_client-reference-manifest.js +1 -1
  60. package/server/.next/server/app/(console)/[...slug]/page/server-reference-manifest.json +9 -9
  61. package/server/.next/server/app/(console)/[...slug]/page.js +38 -37
  62. package/server/.next/server/app/(console)/[...slug]/page.js.nft.json +1 -1
  63. package/server/.next/server/app/(console)/[...slug]/page_client-reference-manifest.js +1 -1
  64. package/server/.next/server/app/(console)/alerts/page/server-reference-manifest.json +22 -22
  65. package/server/.next/server/app/(console)/alerts/page.js +38 -37
  66. package/server/.next/server/app/(console)/alerts/page.js.nft.json +1 -1
  67. package/server/.next/server/app/(console)/alerts/page_client-reference-manifest.js +1 -1
  68. package/server/.next/server/app/(console)/apps/[id]/page/server-reference-manifest.json +23 -23
  69. package/server/.next/server/app/(console)/apps/[id]/page.js +38 -37
  70. package/server/.next/server/app/(console)/apps/[id]/page.js.nft.json +1 -1
  71. package/server/.next/server/app/(console)/apps/[id]/page_client-reference-manifest.js +1 -1
  72. package/server/.next/server/app/(console)/apps/page/server-reference-manifest.json +11 -11
  73. package/server/.next/server/app/(console)/apps/page.js +38 -37
  74. package/server/.next/server/app/(console)/apps/page.js.nft.json +1 -1
  75. package/server/.next/server/app/(console)/apps/page_client-reference-manifest.js +1 -1
  76. package/server/.next/server/app/(console)/backups/page/server-reference-manifest.json +12 -12
  77. package/server/.next/server/app/(console)/backups/page.js +38 -37
  78. package/server/.next/server/app/(console)/backups/page.js.nft.json +1 -1
  79. package/server/.next/server/app/(console)/backups/page_client-reference-manifest.js +1 -1
  80. package/server/.next/server/app/(console)/catalog/page/server-reference-manifest.json +9 -9
  81. package/server/.next/server/app/(console)/catalog/page.js +38 -37
  82. package/server/.next/server/app/(console)/catalog/page.js.nft.json +1 -1
  83. package/server/.next/server/app/(console)/catalog/page_client-reference-manifest.js +1 -1
  84. package/server/.next/server/app/(console)/connections/page/server-reference-manifest.json +20 -20
  85. package/server/.next/server/app/(console)/connections/page.js +38 -37
  86. package/server/.next/server/app/(console)/connections/page.js.nft.json +1 -1
  87. package/server/.next/server/app/(console)/connections/page_client-reference-manifest.js +1 -1
  88. package/server/.next/server/app/(console)/d1/page/server-reference-manifest.json +9 -9
  89. package/server/.next/server/app/(console)/d1/page.js +38 -37
  90. package/server/.next/server/app/(console)/d1/page.js.nft.json +1 -1
  91. package/server/.next/server/app/(console)/d1/page_client-reference-manifest.js +1 -1
  92. package/server/.next/server/app/(console)/deployments/page/server-reference-manifest.json +14 -14
  93. package/server/.next/server/app/(console)/deployments/page.js +38 -37
  94. package/server/.next/server/app/(console)/deployments/page.js.nft.json +1 -1
  95. package/server/.next/server/app/(console)/deployments/page_client-reference-manifest.js +1 -1
  96. package/server/.next/server/app/(console)/dns/page/server-reference-manifest.json +16 -16
  97. package/server/.next/server/app/(console)/dns/page.js +38 -37
  98. package/server/.next/server/app/(console)/dns/page.js.nft.json +1 -1
  99. package/server/.next/server/app/(console)/dns/page_client-reference-manifest.js +1 -1
  100. package/server/.next/server/app/(console)/domains/page/server-reference-manifest.json +11 -11
  101. package/server/.next/server/app/(console)/domains/page.js +38 -37
  102. package/server/.next/server/app/(console)/domains/page.js.nft.json +1 -1
  103. package/server/.next/server/app/(console)/domains/page_client-reference-manifest.js +1 -1
  104. package/server/.next/server/app/(console)/events/page/server-reference-manifest.json +9 -9
  105. package/server/.next/server/app/(console)/events/page.js +38 -37
  106. package/server/.next/server/app/(console)/events/page.js.nft.json +1 -1
  107. package/server/.next/server/app/(console)/events/page_client-reference-manifest.js +1 -1
  108. package/server/.next/server/app/(console)/firebase/page/server-reference-manifest.json +15 -15
  109. package/server/.next/server/app/(console)/firebase/page.js +38 -37
  110. package/server/.next/server/app/(console)/firebase/page.js.nft.json +1 -1
  111. package/server/.next/server/app/(console)/firebase/page_client-reference-manifest.js +1 -1
  112. package/server/.next/server/app/(console)/logs/page/server-reference-manifest.json +10 -10
  113. package/server/.next/server/app/(console)/logs/page.js +38 -37
  114. package/server/.next/server/app/(console)/logs/page.js.nft.json +1 -1
  115. package/server/.next/server/app/(console)/logs/page_client-reference-manifest.js +1 -1
  116. package/server/.next/server/app/(console)/neon/page/server-reference-manifest.json +20 -20
  117. package/server/.next/server/app/(console)/neon/page.js +38 -37
  118. package/server/.next/server/app/(console)/neon/page.js.nft.json +1 -1
  119. package/server/.next/server/app/(console)/neon/page_client-reference-manifest.js +1 -1
  120. package/server/.next/server/app/(console)/overview/page/server-reference-manifest.json +18 -18
  121. package/server/.next/server/app/(console)/overview/page.js +38 -37
  122. package/server/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  123. package/server/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  124. package/server/.next/server/app/(console)/repos/[id]/page/server-reference-manifest.json +10 -10
  125. package/server/.next/server/app/(console)/repos/[id]/page.js +38 -37
  126. package/server/.next/server/app/(console)/repos/[id]/page.js.nft.json +1 -1
  127. package/server/.next/server/app/(console)/repos/[id]/page_client-reference-manifest.js +1 -1
  128. package/server/.next/server/app/(console)/repos/page/server-reference-manifest.json +9 -9
  129. package/server/.next/server/app/(console)/repos/page.js +38 -37
  130. package/server/.next/server/app/(console)/repos/page.js.nft.json +1 -1
  131. package/server/.next/server/app/(console)/repos/page_client-reference-manifest.js +1 -1
  132. package/server/.next/server/app/(console)/settings/page/server-reference-manifest.json +19 -19
  133. package/server/.next/server/app/(console)/settings/page.js +38 -37
  134. package/server/.next/server/app/(console)/settings/page.js.nft.json +1 -1
  135. package/server/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
  136. package/server/.next/server/app/(console)/sql/page/server-reference-manifest.json +16 -16
  137. package/server/.next/server/app/(console)/sql/page.js +38 -37
  138. package/server/.next/server/app/(console)/sql/page.js.nft.json +1 -1
  139. package/server/.next/server/app/(console)/sql/page_client-reference-manifest.js +1 -1
  140. package/server/.next/server/app/(console)/status/page/server-reference-manifest.json +9 -9
  141. package/server/.next/server/app/(console)/status/page.js +38 -37
  142. package/server/.next/server/app/(console)/status/page.js.nft.json +1 -1
  143. package/server/.next/server/app/(console)/status/page_client-reference-manifest.js +1 -1
  144. package/server/.next/server/app/(console)/supabase/page/server-reference-manifest.json +29 -29
  145. package/server/.next/server/app/(console)/supabase/page.js +38 -37
  146. package/server/.next/server/app/(console)/supabase/page.js.nft.json +1 -1
  147. package/server/.next/server/app/(console)/supabase/page_client-reference-manifest.js +1 -1
  148. package/server/.next/server/app/(console)/topology/page/server-reference-manifest.json +9 -9
  149. package/server/.next/server/app/(console)/topology/page.js +38 -37
  150. package/server/.next/server/app/(console)/topology/page.js.nft.json +1 -1
  151. package/server/.next/server/app/(console)/topology/page_client-reference-manifest.js +1 -1
  152. package/server/.next/server/app/(console)/turso/page/server-reference-manifest.json +9 -9
  153. package/server/.next/server/app/(console)/turso/page.js +38 -37
  154. package/server/.next/server/app/(console)/turso/page.js.nft.json +1 -1
  155. package/server/.next/server/app/(console)/turso/page_client-reference-manifest.js +1 -1
  156. package/server/.next/server/app/(console)/upstash/page/server-reference-manifest.json +9 -9
  157. package/server/.next/server/app/(console)/upstash/page.js +38 -37
  158. package/server/.next/server/app/(console)/upstash/page.js.nft.json +1 -1
  159. package/server/.next/server/app/(console)/upstash/page_client-reference-manifest.js +1 -1
  160. package/server/.next/server/app/(console)/uptime/page/server-reference-manifest.json +22 -22
  161. package/server/.next/server/app/(console)/uptime/page.js +38 -37
  162. package/server/.next/server/app/(console)/uptime/page.js.nft.json +1 -1
  163. package/server/.next/server/app/(console)/uptime/page_client-reference-manifest.js +1 -1
  164. package/server/.next/server/app/(console)/welcome/page/server-reference-manifest.json +14 -14
  165. package/server/.next/server/app/(console)/welcome/page.js +38 -37
  166. package/server/.next/server/app/(console)/welcome/page.js.nft.json +1 -1
  167. package/server/.next/server/app/(console)/welcome/page_client-reference-manifest.js +1 -1
  168. package/server/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  169. package/server/.next/server/app/_global-error/page.js.nft.json +1 -1
  170. package/server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  171. package/server/.next/server/app/_global-error.html +1 -1
  172. package/server/.next/server/app/_global-error.rsc +2 -2
  173. package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  174. package/server/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  175. package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  176. package/server/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  177. package/server/.next/server/app/_not-found/page.js.nft.json +1 -1
  178. package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  179. package/server/.next/server/app/_not-found.html +1 -1
  180. package/server/.next/server/app/_not-found.rsc +3 -3
  181. package/server/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  182. package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  183. package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  184. package/server/.next/server/app/account/password/page/server-reference-manifest.json +2 -2
  185. package/server/.next/server/app/account/password/page.js.nft.json +1 -1
  186. package/server/.next/server/app/account/password/page_client-reference-manifest.js +1 -1
  187. package/server/.next/server/app/api/collect/route/server-reference-manifest.json +7 -7
  188. package/server/.next/server/app/api/collect/route.js +48 -46
  189. package/server/.next/server/app/api/collect/route.js.nft.json +1 -1
  190. package/server/.next/server/app/api/daily/route/server-reference-manifest.json +7 -7
  191. package/server/.next/server/app/api/daily/route.js +52 -50
  192. package/server/.next/server/app/api/daily/route.js.nft.json +1 -1
  193. package/server/.next/server/app/api/ping/[...parts]/route.js.nft.json +1 -1
  194. package/server/.next/server/app/api/status/route.js.nft.json +1 -1
  195. package/server/.next/server/app/api/telegram/webhook/route/server-reference-manifest.json +7 -7
  196. package/server/.next/server/app/api/telegram/webhook/route.js +48 -46
  197. package/server/.next/server/app/api/telegram/webhook/route.js.nft.json +1 -1
  198. package/server/.next/server/app/api/v1/advice/route.js +19 -18
  199. package/server/.next/server/app/api/v1/advice/route.js.nft.json +1 -1
  200. package/server/.next/server/app/api/v1/ai/chat/completions/route.js.nft.json +1 -1
  201. package/server/.next/server/app/api/v1/ai/models/route.js.nft.json +1 -1
  202. package/server/.next/server/app/api/v1/ai/questions/[id]/route.js.nft.json +1 -1
  203. package/server/.next/server/app/api/v1/ai/questions/route.js +22 -21
  204. package/server/.next/server/app/api/v1/ai/questions/route.js.nft.json +1 -1
  205. package/server/.next/server/app/api/v1/mcp/route.js +20 -19
  206. package/server/.next/server/app/api/v1/mcp/route.js.nft.json +1 -1
  207. package/server/.next/server/app/api/v1/me/route.js.nft.json +1 -1
  208. package/server/.next/server/app/api/v1/openapi.json/route.js +9 -8
  209. package/server/.next/server/app/api/v1/openapi.json/route.js.nft.json +1 -1
  210. package/server/.next/server/app/api/v1/status/apps/[app]/route.js +18 -17
  211. package/server/.next/server/app/api/v1/status/apps/[app]/route.js.nft.json +1 -1
  212. package/server/.next/server/app/api/v1/status/route.js +18 -17
  213. package/server/.next/server/app/api/v1/status/route.js.nft.json +1 -1
  214. package/server/.next/server/app/api/watchdog/route.js +19 -18
  215. package/server/.next/server/app/api/watchdog/route.js.nft.json +1 -1
  216. package/server/.next/server/app/auth/confirm/route.js.nft.json +1 -1
  217. package/server/.next/server/app/auth/google/callback/route.js +18 -17
  218. package/server/.next/server/app/auth/google/callback/route.js.nft.json +1 -1
  219. package/server/.next/server/app/auth/google/create/callback/route.js.nft.json +1 -1
  220. package/server/.next/server/app/auth/not-member/route.js.nft.json +1 -1
  221. package/server/.next/server/app/auth/session-ended/route.js.nft.json +1 -1
  222. package/server/.next/server/app/invite/page/server-reference-manifest.json +2 -2
  223. package/server/.next/server/app/invite/page.js +4 -3
  224. package/server/.next/server/app/invite/page.js.nft.json +1 -1
  225. package/server/.next/server/app/invite/page_client-reference-manifest.js +1 -1
  226. package/server/.next/server/app/mfa/page/server-reference-manifest.json +2 -2
  227. package/server/.next/server/app/mfa/page.js.nft.json +1 -1
  228. package/server/.next/server/app/mfa/page_client-reference-manifest.js +1 -1
  229. package/server/.next/server/app/mfa/setup/page/server-reference-manifest.json +3 -3
  230. package/server/.next/server/app/mfa/setup/page.js.nft.json +1 -1
  231. package/server/.next/server/app/mfa/setup/page_client-reference-manifest.js +1 -1
  232. package/server/.next/server/app/page/server-reference-manifest.json +1 -1
  233. package/server/.next/server/app/page.js.nft.json +1 -1
  234. package/server/.next/server/app/page_client-reference-manifest.js +1 -1
  235. package/server/.next/server/app/s/[slug]/badge/[file]/route.js +9 -8
  236. package/server/.next/server/app/s/[slug]/badge/[file]/route.js.nft.json +1 -1
  237. package/server/.next/server/app/s/[slug]/page/server-reference-manifest.json +1 -1
  238. package/server/.next/server/app/s/[slug]/page.js +8 -8
  239. package/server/.next/server/app/s/[slug]/page.js.nft.json +1 -1
  240. package/server/.next/server/app/s/[slug]/page_client-reference-manifest.js +1 -1
  241. package/server/.next/server/app/setup/page/server-reference-manifest.json +2 -2
  242. package/server/.next/server/app/setup/page.js.nft.json +1 -1
  243. package/server/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  244. package/server/.next/server/app/signin/page/server-reference-manifest.json +3 -3
  245. package/server/.next/server/app/signin/page.js.nft.json +1 -1
  246. package/server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  247. package/server/.next/server/chunks/{[root-of-the-server]__09qqv-zsz9qhr._.js → [root-of-the-server]__00hb7hqa7qktx._.js} +1 -1
  248. package/server/.next/server/chunks/[root-of-the-server]__03276vwi4jgvk._.js +1 -1
  249. package/server/.next/server/chunks/[root-of-the-server]__049ykc067tlsv._.js +1 -1
  250. package/server/.next/server/chunks/[root-of-the-server]__06f9e4kpi0mw8._.js +1 -1
  251. package/server/.next/server/chunks/[root-of-the-server]__0_rfeg3389imx._.js +1 -1
  252. package/server/.next/server/chunks/{[root-of-the-server]__1n32c8l_j8jt4._.js → [root-of-the-server]__0abdjgj-muln9._.js} +2 -2
  253. package/server/.next/server/chunks/{[root-of-the-server]__1jrqehmo6kq8x._.js → [root-of-the-server]__0alnp_0qkhzze._.js} +2 -2
  254. package/server/.next/server/chunks/[root-of-the-server]__0b2hzo6nez0we._.js +1 -1
  255. package/server/.next/server/chunks/[root-of-the-server]__0c5w5y-db0jkb._.js +3 -0
  256. package/server/.next/server/chunks/{[root-of-the-server]__0znb_m_wygjdc._.js → [root-of-the-server]__0erdelc9_06nk._.js} +2 -2
  257. package/server/.next/server/chunks/{[root-of-the-server]__0u66-8g4ql645._.js → [root-of-the-server]__0grtjjr51j6xe._.js} +1 -1
  258. package/server/.next/server/chunks/{[root-of-the-server]__0-ok-3r9xtz0y._.js → [root-of-the-server]__0hpdrg-m0n6ty._.js} +2 -2
  259. package/server/.next/server/chunks/{[root-of-the-server]__1z3-s7wc9-uc6._.js → [root-of-the-server]__0m7_0rarf_x86._.js} +2 -2
  260. package/server/.next/server/chunks/[root-of-the-server]__0m7i0l3nkbdfm._.js +1 -1
  261. package/server/.next/server/chunks/[root-of-the-server]__0mwiq4mkf8pc5._.js +1 -1
  262. package/server/.next/server/chunks/[root-of-the-server]__0p3lnkpxf2-xz._.js +1 -1
  263. package/server/.next/server/chunks/{[root-of-the-server]__08n3x1x850wqc._.js → [root-of-the-server]__0qmkpydmx3ljf._.js} +2 -2
  264. package/server/.next/server/chunks/{[root-of-the-server]__0_6eq1806attx._.js → [root-of-the-server]__0r-zdzq6ki5gr._.js} +1 -1
  265. package/server/.next/server/chunks/{[root-of-the-server]__157yb_wl7w4ly._.js → [root-of-the-server]__0rak0ce6prxwp._.js} +1 -1
  266. package/server/.next/server/chunks/{[root-of-the-server]__081ywec7cjq3d._.js → [root-of-the-server]__0rxrv00e5e6fj._.js} +2 -2
  267. package/server/.next/server/chunks/{[root-of-the-server]__1_5q9zgl6p5_3._.js → [root-of-the-server]__0sivlmcvkc1uq._.js} +1 -1
  268. package/server/.next/server/chunks/{[root-of-the-server]__1x9tt_2yhozwe._.js → [root-of-the-server]__0vp-x4ifpr3p9._.js} +2 -2
  269. package/server/.next/server/chunks/{[root-of-the-server]__0j0medewrv95l._.js → [root-of-the-server]__0z-41cwvkliev._.js} +2 -2
  270. package/server/.next/server/chunks/{[root-of-the-server]__06iz-tlpv7pqm._.js → [root-of-the-server]__0zd61mh-juh2i._.js} +1 -1
  271. package/server/.next/server/chunks/{[root-of-the-server]__0mtlynfv-vklo._.js → [root-of-the-server]__1-q6_msattgcu._.js} +1 -1
  272. package/server/.next/server/chunks/{[root-of-the-server]__018ux7xja83l6._.js → [root-of-the-server]__1-rqermjb77se._.js} +2 -2
  273. package/server/.next/server/chunks/[root-of-the-server]__110c-t3wz3nzm._.js +1 -1
  274. package/server/.next/server/chunks/[root-of-the-server]__11k46kam6tbia._.js +1 -1
  275. package/server/.next/server/chunks/{[root-of-the-server]__0mhtnnebbepzx._.js → [root-of-the-server]__11kfkk5yxz4ge._.js} +2 -2
  276. package/server/.next/server/chunks/{[root-of-the-server]__0ymon9r-17xe_._.js → [root-of-the-server]__13be7gbo81td4._.js} +1 -1
  277. package/server/.next/server/chunks/{[root-of-the-server]__0uyagcs61c0t_._.js → [root-of-the-server]__13scfgchwlitx._.js} +2 -2
  278. package/server/.next/server/chunks/[root-of-the-server]__14zpwd7xntffk._.js +3 -0
  279. package/server/.next/server/chunks/[root-of-the-server]__15tt645jfx-br._.js +3 -0
  280. package/server/.next/server/chunks/{[root-of-the-server]__08801yoxfe_os._.js → [root-of-the-server]__15zbj_ehkvv-n._.js} +2 -2
  281. package/server/.next/server/chunks/[root-of-the-server]__16sp8qurcwsnf._.js +3 -0
  282. package/server/.next/server/chunks/[root-of-the-server]__19kwj690b37xf._.js +1 -1
  283. package/server/.next/server/chunks/[root-of-the-server]__1_1-jgxiadvs0._.js +3 -0
  284. package/server/.next/server/chunks/[root-of-the-server]__1_2akhn6c9eqq._.js +3 -0
  285. package/server/.next/server/chunks/[root-of-the-server]__1c2u-bg524-_w._.js +3 -0
  286. package/server/.next/server/chunks/[root-of-the-server]__1c8_e0jqh_8na._.js +3 -0
  287. package/server/.next/server/chunks/{[root-of-the-server]__0qpf0qusq792k._.js → [root-of-the-server]__1flvcyht5uk7h._.js} +2 -2
  288. package/server/.next/server/chunks/[root-of-the-server]__1g-be2zoiz2tf._.js +3 -0
  289. package/server/.next/server/chunks/[root-of-the-server]__1h96ebyza_vlh._.js +3 -0
  290. package/server/.next/server/chunks/{[root-of-the-server]__02ihdvnmhshoe._.js → [root-of-the-server]__1hw6s0e7p2-6g._.js} +2 -2
  291. package/server/.next/server/chunks/[root-of-the-server]__1j26i51ankv-z._.js +3 -0
  292. package/server/.next/server/chunks/[root-of-the-server]__1ldcwvd42rpuz._.js +3 -0
  293. package/server/.next/server/chunks/{[root-of-the-server]__0q691wec2busx._.js → [root-of-the-server]__1objhlwwrjfjk._.js} +2 -2
  294. package/server/.next/server/chunks/{[root-of-the-server]__0wt74rsaz-308._.js → [root-of-the-server]__1qzor1nqajuyp._.js} +2 -2
  295. package/server/.next/server/chunks/{[root-of-the-server]__18mztbxkzaxjs._.js → [root-of-the-server]__1rf3slum5swk2._.js} +2 -2
  296. package/server/.next/server/chunks/[root-of-the-server]__1sj7uwyq1gpet._.js +3 -0
  297. package/server/.next/server/chunks/{[root-of-the-server]__0tb-63ts77gqd._.js → [root-of-the-server]__1tefe1f5835t_._.js} +2 -2
  298. package/server/.next/server/chunks/[root-of-the-server]__1u1b3a58anm3f._.js +3 -0
  299. package/server/.next/server/chunks/{[root-of-the-server]__132wlw6sbwt1d._.js → [root-of-the-server]__1vi0u2vkv3tk0._.js} +2 -2
  300. package/server/.next/server/chunks/[root-of-the-server]__1w_73psnce1dd._.js +3 -0
  301. package/server/.next/server/chunks/[root-of-the-server]__202r0hxhr5bnu._.js +3 -0
  302. package/server/.next/server/chunks/[root-of-the-server]__2196hxm-s7u6e._.js +3 -0
  303. package/server/.next/server/chunks/{_076dwl7r_5vcl._.js → _061mqfu1rkl7g._.js} +4 -4
  304. package/server/.next/server/chunks/{_0594j_bb0l80e._.js → _0c_vrxu6rin-k._.js} +2 -2
  305. package/server/.next/server/chunks/_0ejcrge5k4quv._.js +9 -9
  306. package/server/.next/server/chunks/_0n-wbmmvp4omq._.js +3 -0
  307. package/server/.next/server/chunks/_0qawxzcf--lyq._.js +2 -2
  308. package/server/.next/server/chunks/_0qmi54vmnlwdv._.js +3 -3
  309. package/server/.next/server/chunks/{_0m49djgc1t4wg._.js → _0qrn1v02iivm8._.js} +2 -2
  310. package/server/.next/server/chunks/_0vgojnnkcf1vu._.js +2 -2
  311. package/server/.next/server/chunks/_0vz0de4gz70-e._.js +1 -1
  312. package/server/.next/server/chunks/_103ai6ybnpq1k._.js +1 -1
  313. package/server/.next/server/chunks/_108e86rhye0o1._.js +1 -1
  314. package/server/.next/server/chunks/_1476vtrt9101m._.js +1 -1
  315. package/server/.next/server/chunks/{_0r4am1mgz4dg_._.js → _1b63jfweu0o04._.js} +2 -2
  316. package/server/.next/server/chunks/_1b7pc6ohhqxs3._.js +9 -9
  317. package/server/.next/server/chunks/_1g_prqb_u33e3._.js +3 -3
  318. package/server/.next/server/chunks/{_08tppw9ujlpke._.js → _1i57ar6zvd7yb._.js} +4 -4
  319. package/server/.next/server/chunks/{_11p2ejgai2a78._.js → _1k2cwp1_wt6qm._.js} +2 -2
  320. package/server/.next/server/chunks/_1kcmwgs544mo-._.js +1 -1
  321. package/server/.next/server/chunks/{_0n5m3o7at0adm._.js → _1kj2yv4-wk2kp._.js} +4 -4
  322. package/server/.next/server/chunks/_1lq5m27p-ilrw._.js +1 -1
  323. package/server/.next/server/chunks/_1mnwzh3z9y4th._.js +3 -0
  324. package/server/.next/server/chunks/_1nuf-l7izvfl_._.js +1 -1
  325. package/server/.next/server/chunks/{_1rw6_0nf-3sxs._.js → _1ozrnl_on86u7._.js} +4 -4
  326. package/server/.next/server/chunks/_1ptcxyn1tzm9r._.js +1 -1
  327. package/server/.next/server/chunks/_1xeuk6g48m3_1._.js +3 -0
  328. package/server/.next/server/chunks/{src_0uxqs7150nhx2._.js → src_014zbodp4djeb._.js} +2 -2
  329. package/server/.next/server/chunks/{src_0n42os1q41rha._.js → src_04pgj--n_d4w5._.js} +2 -2
  330. package/server/.next/server/chunks/src_063xvouojxyoa._.js +1 -1
  331. package/server/.next/server/chunks/{src_01wdnb4skk1wz._.js → src_08bzavsfds295._.js} +2 -2
  332. package/server/.next/server/chunks/src_0c-owt8q0lyj3._.js +3 -0
  333. package/server/.next/server/chunks/{src_1-r51arho90p7._.js → src_0k78ifotuztod._.js} +2 -2
  334. package/server/.next/server/chunks/src_0o4-snj7wkaav._.js +1 -1
  335. package/server/.next/server/chunks/{src_0d-zi077mzm6v._.js → src_0xqorb3-ef3ub._.js} +2 -2
  336. package/server/.next/server/chunks/src_1a5yibsjcy1ga._.js +1 -1
  337. package/server/.next/server/chunks/src_1zo6so07lgcdj._.js +1 -1
  338. package/server/.next/server/chunks/src_db_rows_ts_15b286wn1kn1e._.js +1 -1
  339. package/server/.next/server/chunks/src_instrumentation-node_ts_1c--sr1k7_8k2._.js +3 -0
  340. package/server/.next/server/chunks/src_lib_0485hz-c7h7dr._.js +6 -6
  341. package/server/.next/server/chunks/src_lib_08u7n7-yunfvd._.js +2 -2
  342. package/server/.next/server/chunks/src_lib_0cbs2jlrw1qbh._.js +3 -0
  343. package/server/.next/server/chunks/src_lib_0glcfed-uogyd._.js +1 -1
  344. package/server/.next/server/chunks/src_lib_0qcyomi01xvf1._.js +6 -6
  345. package/server/.next/server/chunks/src_lib_0vl2-zp4wzw7n._.js +3 -0
  346. package/server/.next/server/chunks/src_lib_0x4n8swwa3zn7._.js +1 -1
  347. package/server/.next/server/chunks/src_lib_10vqn6q0h8kls._.js +2 -2
  348. package/server/.next/server/chunks/src_lib_13g9xjx8ci00z._.js +3 -0
  349. package/server/.next/server/chunks/src_lib_1ryt-36ohhnm6._.js +6 -6
  350. package/server/.next/server/chunks/src_lib_1tzoqx44yogsk._.js +2 -2
  351. package/server/.next/server/chunks/src_lib_1yd94hta5y1hx._.js +3 -0
  352. package/server/.next/server/chunks/src_lib_brand-env_ts_1wcm1bjuismq_._.js +3 -0
  353. package/server/.next/server/chunks/src_lib_collector_runners_ts_12z4gtgikss74._.js +6 -6
  354. package/server/.next/server/chunks/src_lib_data_0ask_rbmgwlf3._.js +1 -1
  355. package/server/.next/server/chunks/src_lib_data_0e155tkqeoojm._.js +1 -1
  356. package/server/.next/server/chunks/src_lib_data_backup-db_ts_19rtzbv84xz_h._.js +2 -2
  357. package/server/.next/server/chunks/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +2 -2
  358. package/server/.next/server/chunks/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  359. package/server/.next/server/chunks/src_lib_demo_pool_ts_14rjvkgozh1d4._.js +9 -9
  360. package/server/.next/server/chunks/src_lib_demo_pool_ts_17xz9bk-d5uic._.js +13 -13
  361. package/server/.next/server/chunks/src_lib_demo_pool_ts_210g_on8zx_-n._.js +9 -9
  362. package/server/.next/server/chunks/src_lib_time_ts_1__07rt8x18k-._.js +3 -0
  363. package/server/.next/server/chunks/src_lib_time_ts_1a27wp71yhgti._.js +3 -0
  364. package/server/.next/server/chunks/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
  365. package/server/.next/server/chunks/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
  366. package/server/.next/server/chunks/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  367. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_agents_page_actions_1q6nc5chwn5k4.js +1 -1
  368. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_models_page_actions_0n_anax2l1jpu.js +1 -1
  369. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_playground_page_actions_1kyng_xuojdtb.js +1 -1
  370. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_quota_page_actions_04r4ro6x7-p7p.js +1 -1
  371. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_ai_usage_page_actions_1fq9uugdpqa_l.js +1 -1
  372. package/server/.next/server/chunks/ssr/1oeh_server_app_(console)_(private)_auto-actions_page_actions_0mhtiq_5szpe0.js +1 -1
  373. package/server/.next/server/chunks/ssr/{[externals]__1u-jgivpw0_oh._.js → [externals]__0vbbz7arebnub._.js} +1 -1
  374. package/server/.next/server/chunks/ssr/[root-of-the-server]__02cq5r26w4itc._.js +1 -1
  375. package/server/.next/server/chunks/ssr/[root-of-the-server]__02qyxz9eh8_eh._.js +1 -1
  376. package/server/.next/server/chunks/ssr/[root-of-the-server]__04a21b9fkrqs3._.js +3 -0
  377. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ijk9z1ot_xi4._.js → [root-of-the-server]__07n1hb3mk44lt._.js} +2 -2
  378. package/server/.next/server/chunks/ssr/[root-of-the-server]__09-0oydof-7uw._.js +1 -1
  379. package/server/.next/server/chunks/ssr/[root-of-the-server]__0ct71emqfru3b._.js +1 -1
  380. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1fdzriy6yyu5d._.js → [root-of-the-server]__0hbk3gqja86zp._.js} +1 -1
  381. package/server/.next/server/chunks/ssr/[root-of-the-server]__0ksvf4x4zcbpb._.js +1 -1
  382. package/server/.next/server/chunks/ssr/[root-of-the-server]__0n7cj-oti5wct._.js +2 -2
  383. package/server/.next/server/chunks/ssr/[root-of-the-server]__0op0kqh43wd-a._.js +3 -0
  384. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1tkmutq84zkeh._.js → [root-of-the-server]__0ryl_hnreck66._.js} +2 -2
  385. package/server/.next/server/chunks/ssr/[root-of-the-server]__0wcnxr_g-bd3r._.js +1 -1
  386. package/server/.next/server/chunks/ssr/[root-of-the-server]__0wf8q7-o-4n8y._.js +3 -0
  387. package/server/.next/server/chunks/ssr/[root-of-the-server]__10bkg3o65q6r4._.js +1 -1
  388. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0ryb947ux5cq7._.js → [root-of-the-server]__11y6b96ofb-c5._.js} +2 -2
  389. package/server/.next/server/chunks/ssr/[root-of-the-server]__13oi70jo-u731._.js +2 -2
  390. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0aahjz4fnt4c_._.js → [root-of-the-server]__13rgl1h4g39l-._.js} +2 -2
  391. package/server/.next/server/chunks/ssr/{[root-of-the-server]__1csz822qejxk-._.js → [root-of-the-server]__168ahi_n-kf90._.js} +2 -2
  392. package/server/.next/server/chunks/ssr/[root-of-the-server]__17kocbnwlcw6d._.js +1 -1
  393. package/server/.next/server/chunks/ssr/{[root-of-the-server]__11-ssp_43878t._.js → [root-of-the-server]__18b1wk6-2gq4x._.js} +2 -2
  394. package/server/.next/server/chunks/ssr/[root-of-the-server]__1_f7nip9age3d._.js +1 -1
  395. package/server/.next/server/chunks/ssr/{[root-of-the-server]__0lks-6wz-rmk5._.js → [root-of-the-server]__1drr27jyyhw7p._.js} +2 -2
  396. package/server/.next/server/chunks/ssr/[root-of-the-server]__1e-xqsuqsd4ub._.js +3 -0
  397. package/server/.next/server/chunks/ssr/[root-of-the-server]__1gw6334w8y2my._.js +1 -1
  398. package/server/.next/server/chunks/ssr/[root-of-the-server]__1i69oli51is1u._.js +1 -1
  399. package/server/.next/server/chunks/ssr/[root-of-the-server]__1lx2k37wgre3d._.js +1 -1
  400. package/server/.next/server/chunks/ssr/[root-of-the-server]__1n1pq5j5p4_qn._.js +3 -0
  401. package/server/.next/server/chunks/ssr/[root-of-the-server]__1qltiqn0htqnx._.js +1 -1
  402. package/server/.next/server/chunks/ssr/[root-of-the-server]__1w1472ukyh58r._.js +1 -1
  403. package/server/.next/server/chunks/ssr/[root-of-the-server]__1xa91qls2i3j4._.js +3 -0
  404. package/server/.next/server/chunks/ssr/[root-of-the-server]__204_t7bzma353._.js +3 -0
  405. package/server/.next/server/chunks/ssr/[root-of-the-server]__20ht054m5-_d6._.js +1 -1
  406. package/server/.next/server/chunks/ssr/_0-uwh2rwm_dic._.js +2 -2
  407. package/server/.next/server/chunks/ssr/_026w_ig6vy9bt._.js +1 -1
  408. package/server/.next/server/chunks/ssr/_06kwu83_fmex9._.js +2 -2
  409. package/server/.next/server/chunks/ssr/{_14bz_443syxhi._.js → _06sp8cllu_ljh._.js} +2 -2
  410. package/server/.next/server/chunks/ssr/{_18t7ov64ycb-w._.js → _08u2qnetu4ghm._.js} +2 -2
  411. package/server/.next/server/chunks/ssr/_0_oc9q0vqkynd._.js +1 -1
  412. package/server/.next/server/chunks/ssr/_0_tr9fol2yq33._.js +1 -1
  413. package/server/.next/server/chunks/ssr/_0_ul4mlc_pj5i._.js +2 -2
  414. package/server/.next/server/chunks/ssr/_0a22b7zsckifp._.js +1 -1
  415. package/server/.next/server/chunks/ssr/_0azq3ml4gbn1d._.js +1 -1
  416. package/server/.next/server/chunks/ssr/_0cukja7zcxh7e._.js +1 -1
  417. package/server/.next/server/chunks/ssr/_0cw4kz3d6kmb1._.js +1 -1
  418. package/server/.next/server/chunks/ssr/_0d702k82llasi._.js +1 -1
  419. package/server/.next/server/chunks/ssr/_0fnl7z-saj7nc._.js +1 -1
  420. package/server/.next/server/chunks/ssr/_0hykblvnwc2ar._.js +1 -1
  421. package/server/.next/server/chunks/ssr/_0i-e824vtomvg._.js +2 -2
  422. package/server/.next/server/chunks/ssr/_0jjoot3rhbde3._.js +2 -2
  423. package/server/.next/server/chunks/ssr/_0kn710rrv_o2t._.js +2 -2
  424. package/server/.next/server/chunks/ssr/_0mgclon6_oh87._.js +2 -2
  425. package/server/.next/server/chunks/ssr/_0oovfx_t_-u0k._.js +1 -1
  426. package/server/.next/server/chunks/ssr/_0qnv1uc1_yv28._.js +2 -2
  427. package/server/.next/server/chunks/ssr/_0sotiqakj-6ci._.js +1 -1
  428. package/server/.next/server/chunks/ssr/_0tcmsw8hszixv._.js +1 -1
  429. package/server/.next/server/chunks/ssr/_0uogspz6zrvwk._.js +2 -2
  430. package/server/.next/server/chunks/ssr/_1-6d1tm3r_qwg._.js +1 -1
  431. package/server/.next/server/chunks/ssr/_10bven6gb1vj0._.js +1 -1
  432. package/server/.next/server/chunks/ssr/_10pz3ggun9s5i._.js +2 -2
  433. package/server/.next/server/chunks/ssr/_11o43qq2eyx_r._.js +3 -0
  434. package/server/.next/server/chunks/ssr/{_06_f735j-1i20._.js → _12348a3ug1-wo._.js} +2 -2
  435. package/server/.next/server/chunks/ssr/_12ddramfkd6o1._.js +2 -2
  436. package/server/.next/server/chunks/ssr/_1476vtrt9101m._.js +1 -1
  437. package/server/.next/server/chunks/ssr/_15ft896zgt02e._.js +2 -2
  438. package/server/.next/server/chunks/ssr/_16t9k9e5cjvas._.js +1 -1
  439. package/server/.next/server/chunks/ssr/_18lgd6o04ugow._.js +2 -2
  440. package/server/.next/server/chunks/ssr/_19-3vzkc6rk97._.js +1 -1
  441. package/server/.next/server/chunks/ssr/_1_-o2s48aj4i7._.js +1 -1
  442. package/server/.next/server/chunks/ssr/{_08y82qdosn7ga._.js → _1_ojvke28lw3y._.js} +2 -2
  443. package/server/.next/server/chunks/ssr/_1b1ano88ar-gi._.js +2 -2
  444. package/server/.next/server/chunks/ssr/_1boia2p3_0nsz._.js +2 -2
  445. package/server/.next/server/chunks/ssr/_1c28jitsyufnt._.js +1 -1
  446. package/server/.next/server/chunks/ssr/_1cl55h_h3q-b_._.js +1 -1
  447. package/server/.next/server/chunks/ssr/_1dx207la592b7._.js +2 -2
  448. package/server/.next/server/chunks/ssr/_1e24cpw3g7njr._.js +2 -2
  449. package/server/.next/server/chunks/ssr/{_0o0-2ela2_qqd._.js → _1exwj9ou5yh71._.js} +2 -2
  450. package/server/.next/server/chunks/ssr/_1flla16o7o9ba._.js +1 -1
  451. package/server/.next/server/chunks/ssr/_1g2zbl_-4z_hg._.js +1 -1
  452. package/server/.next/server/chunks/ssr/_1i77n2n-wb98v._.js +2 -2
  453. package/server/.next/server/chunks/ssr/_1ibagew7zj8y6._.js +3 -0
  454. package/server/.next/server/chunks/ssr/_1j9cka-44jd65._.js +1 -1
  455. package/server/.next/server/chunks/ssr/_1jh_o2i8hj2g5._.js +1 -1
  456. package/server/.next/server/chunks/ssr/_1nir32qtr99-r._.js +1 -1
  457. package/server/.next/server/chunks/ssr/_1qt1czw3w8dww._.js +3 -0
  458. package/server/.next/server/chunks/ssr/_1sq12-1_02tzt._.js +2 -2
  459. package/server/.next/server/chunks/ssr/_1ybhu25y38395._.js +2 -2
  460. package/server/.next/server/chunks/ssr/_1ykxf4mi60jog._.js +2 -2
  461. package/server/.next/server/chunks/ssr/_1z6dy1k48mskn._.js +1 -1
  462. package/server/.next/server/chunks/ssr/_20ln-4gu85-yt._.js +3 -0
  463. package/server/.next/server/chunks/ssr/_210edglbxmcb3._.js +2 -2
  464. package/server/.next/server/chunks/ssr/{_0i6y4bkm-0cm3._.js → _216rrmkts392q._.js} +2 -2
  465. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_keys_page_actions_1910ocjt__nlh.js +1 -1
  466. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_(private)_ai_logs_page_actions_136-s4sxl6nra.js +1 -1
  467. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_alerts_page_actions_0f7cxitw-svnl.js +1 -1
  468. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_[id]_page_actions_14l8--w36mywn.js +1 -1
  469. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_apps_page_actions_1uaicj0j8stji.js +1 -1
  470. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_connections_page_actions_03amng1-xhfd1.js +1 -1
  471. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_dns_page_actions_1p2deebbgom7b.js +1 -1
  472. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_domains_page_actions_0-wg58qcvu_rv.js +1 -1
  473. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_firebase_page_actions_215m-kkv06r4z.js +1 -1
  474. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_logs_page_actions_11-8xinblaop_.js +1 -1
  475. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_settings_page_actions_1z3l1p4keed3m.js +1 -1
  476. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_supabase_page_actions_1evatil08dntl.js +1 -1
  477. package/server/.next/server/chunks/ssr/_next-internal_server_app_(console)_uptime_page_actions_0k1237d-q3oc4.js +1 -1
  478. package/server/.next/server/chunks/ssr/_next-internal_server_app_account_password_page_actions_1v4e71_oifbx9.js +1 -1
  479. package/server/.next/server/chunks/ssr/_next-internal_server_app_signin_page_actions_11wzk446p6_zi.js +1 -1
  480. package/server/.next/server/chunks/ssr/src_00ze92e3aolj8._.js +1 -1
  481. package/server/.next/server/chunks/ssr/src_06tjy8wljego8._.js +1 -1
  482. package/server/.next/server/chunks/ssr/src_084tdkx3c_yqi._.js +1 -1
  483. package/server/.next/server/chunks/ssr/src_0abts6wp5ucc0._.js +1 -1
  484. package/server/.next/server/chunks/ssr/src_0f_ip1ke7i9r7._.js +3 -0
  485. package/server/.next/server/chunks/ssr/src_0iefnjvaszvw_._.js +1 -1
  486. package/server/.next/server/chunks/ssr/src_0ph020gy78gi9._.js +1 -1
  487. package/server/.next/server/chunks/ssr/src_0qu78tivj78-x._.js +3 -0
  488. package/server/.next/server/chunks/ssr/src_0t6-d5hmzrbp1._.js +1 -1
  489. package/server/.next/server/chunks/ssr/src_0xh3xicmff6ws._.js +1 -1
  490. package/server/.next/server/chunks/ssr/src_10zavgy86u3us._.js +1 -1
  491. package/server/.next/server/chunks/ssr/{src_1eermasnm2cgy._.js → src_11_hakxhnybdd._.js} +2 -2
  492. package/server/.next/server/chunks/ssr/src_1sdwdnblbiq_g._.js +1 -1
  493. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_agents_1fyhh1ldgm23z._.js +1 -1
  494. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_06n-9cjmbb-vu._.js +1 -1
  495. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_ask_ask-form_tsx_18ttm9nna_9y6._.js +1 -1
  496. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_connect_connect-view_tsx_04abz05n7hdsd._.js +15 -15
  497. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_logs_export-button_tsx_1k-crb88n1za_._.js +1 -1
  498. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0ayzqn062pnv5._.js +1 -1
  499. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_models_0hla-5y3iresx._.js +1 -1
  500. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_playground_playground-view_tsx_18ua5zn_a0mar._.js +1 -1
  501. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_0jamu-nm6x-dh._.js +1 -1
  502. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_providers_1ru-30x6-uwu4._.js +1 -1
  503. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_1kor9sy67qpiw._.js +1 -1
  504. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_quota_limits-form_tsx_1vouaaf560z_x._.js +1 -1
  505. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_1v003vrkwk19w._.js +1 -1
  506. package/server/.next/server/chunks/ssr/src_app_(console)_(private)_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js +1 -1
  507. package/server/.next/server/chunks/ssr/{src_app_(console)_1ppp9j5e2rtqf._.js → src_app_(console)_1olpa0osy74mq._.js} +2 -2
  508. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_0j5xlt68kwg8x._.js +1 -1
  509. package/server/.next/server/chunks/ssr/src_app_(console)_alerts_1t61z2wktki-v._.js +1 -1
  510. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_088bs149wsgca._.js +1 -1
  511. package/server/.next/server/chunks/ssr/src_app_(console)_apps_[id]_1sfvku9ui1le-._.js +1 -1
  512. package/server/.next/server/chunks/ssr/src_app_(console)_backups_actions_ts_1vpytsdh0wc1f._.js +1 -1
  513. package/server/.next/server/chunks/ssr/src_app_(console)_backups_drive-buttons_tsx_00cku5r_z3jkg._.js +1 -1
  514. package/server/.next/server/chunks/ssr/src_app_(console)_backups_page_tsx_0o082iagq_14b._.js +1 -1
  515. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1fahc65-97qla._.js +1 -1
  516. package/server/.next/server/chunks/ssr/src_app_(console)_connections_1qigx20w8bk53._.js +1 -1
  517. package/server/.next/server/chunks/ssr/src_app_(console)_connections_actions_ts_103blv4gzq76z._.js +1 -1
  518. package/server/.next/server/chunks/ssr/src_app_(console)_create_actions_ts_05-86qr6kfjey._.js +1 -1
  519. package/server/.next/server/chunks/ssr/src_app_(console)_dns_actions_ts_1jzn58xzwbukz._.js +1 -1
  520. package/server/.next/server/chunks/ssr/src_app_(console)_dns_record-actions_tsx_0cqmz51zcuebv._.js +1 -1
  521. package/server/.next/server/chunks/ssr/src_app_(console)_logs_log-viewer_tsx_0v3e4cflfk14w._.js +1 -1
  522. package/server/.next/server/chunks/ssr/src_app_(console)_monitor-actions_ts_10w3h7myk2ppi._.js +1 -1
  523. package/server/.next/server/chunks/ssr/src_app_(console)_palette-action_ts_0zyw9a9imev6p._.js +1 -1
  524. package/server/.next/server/chunks/ssr/src_app_(console)_repos_repo-list_tsx_1n1gcm4qfrfdt._.js +1 -1
  525. package/server/.next/server/chunks/ssr/src_app_(console)_sql_1icfsti04djqe._.js +2 -2
  526. package/server/.next/server/chunks/ssr/src_app_(console)_sql_actions_ts_1oqco02hw-3vp._.js +1 -1
  527. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_0ib3m2ch9gu-4._.js +1 -1
  528. package/server/.next/server/chunks/ssr/src_app_(console)_supabase_pool-actions_ts_0nzd4vwy_9zzx._.js +1 -1
  529. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_148phfjye0539._.js +1 -1
  530. package/server/.next/server/chunks/ssr/src_app_(console)_uptime_1mnnkfi-2zv-k._.js +1 -1
  531. package/server/.next/server/chunks/ssr/src_app_(console)_vercel-actions_ts_0wpk1yo9v632d._.js +1 -1
  532. package/server/.next/server/chunks/ssr/src_app_mfa_setup_setup-flow_tsx_1fpwygr2vdgnh._.js +1 -1
  533. package/server/.next/server/chunks/ssr/src_app_s_[slug]_page_tsx_0jjqe6py82mpb._.js +1 -1
  534. package/server/.next/server/chunks/ssr/src_app_setup_setup-form_tsx_0izoagdur96e1._.js +1 -1
  535. package/server/.next/server/chunks/ssr/{src_app_signin_124xn9wb2fasu._.js → src_app_signin_1y1xla7bcc5a1._.js} +2 -2
  536. package/server/.next/server/chunks/ssr/src_components_11x625pqq9ovs._.js +3 -0
  537. package/server/.next/server/chunks/ssr/src_components_create_create-dialog_tsx_1s_9clly_m1ru._.js +1 -1
  538. package/server/.next/server/chunks/ssr/src_lib_005l0kcpyu43o._.js +3 -3
  539. package/server/.next/server/chunks/ssr/src_lib_05ai1oj91p9w2._.js +2 -2
  540. package/server/.next/server/chunks/ssr/{src_lib_1l8ej-zoyyegd._.js → src_lib_0vl2-zp4wzw7n._.js} +2 -2
  541. package/server/.next/server/chunks/ssr/src_lib_0x4n8swwa3zn7._.js +1 -1
  542. package/server/.next/server/chunks/ssr/src_lib_1nkahiclbn55q._.js +1 -1
  543. package/server/.next/server/chunks/ssr/src_lib_collector_run_ts_0-q8is8s0y9cq._.js +1 -1
  544. package/server/.next/server/chunks/ssr/src_lib_data_logs-db_ts_1ddw07do12mmk._.js +2 -2
  545. package/server/.next/server/chunks/ssr/{src_lib_demo_20hj85e_64pp1._.js → src_lib_demo_20zjotuzm1lm8._.js} +2 -2
  546. package/server/.next/server/chunks/ssr/src_lib_demo_pool_ts_0fpn8acsdk64i._.js +9 -9
  547. package/server/.next/server/chunks/ssr/src_lib_time_ts_1qlwgp7nprvbi._.js +3 -0
  548. package/server/.next/server/chunks/ssr/src_lib_time_ts_1ualgyi3irm1z._.js +3 -0
  549. package/server/.next/server/chunks/ssr/src_private_0iy_wyg2p1jkn._.js +1 -1
  550. package/server/.next/server/chunks/ssr/src_private_actions_decide-form_tsx_1hngtxpyle3v8._.js +1 -1
  551. package/server/.next/server/chunks/ssr/src_private_ai_gateway_ts_04_5ao9914d0p._.js +1 -1
  552. package/server/.next/server/chunks/ssr/src_private_ai_providers_actions_ts_0wxa36ai6s5nn._.js +1 -1
  553. package/server/.next/server/chunks/ssr/src_private_ai_usage-analytics_ts_1bxba3xarzol0._.js +1 -1
  554. package/server/.next/server/chunks/ssr/src_private_ai_views-db_ts_1jbnr41mskha2._.js +1 -1
  555. package/server/.next/server/chunks/ssr/src_private_assist_advisor-notes_ts_0qkpm5c3la7fo._.js +4 -4
  556. package/server/.next/server/chunks/ssr/src_private_explorer_explorer_tsx_04m_tdottspjs._.js +1 -1
  557. package/server/.next/server/chunks/ssr/src_private_notes_notes-actions_ts_1g63g8u965fhc._.js +1 -1
  558. package/server/.next/server/middleware-build-manifest.js +3 -3
  559. package/server/.next/server/pages/404.html +1 -1
  560. package/server/.next/server/pages/500.html +1 -1
  561. package/server/.next/server/preview-props.json +3 -3
  562. package/server/.next/server/server-reference-manifest.js +1 -1
  563. package/server/.next/server/server-reference-manifest.json +133 -133
  564. package/server/.next/static/chunks/0-7by9f00qb4d.js +1 -0
  565. package/server/.next/static/chunks/{2k9ytb8jmg14_.js → 010bc8dzhxd_0.js} +1 -1
  566. package/server/.next/static/chunks/01oee9tptcjdb.js +1 -0
  567. package/server/.next/static/chunks/02uvde7i-78p5.js +1 -0
  568. package/server/.next/static/chunks/{2rdmebof0d_c4.js → 03fjh6klyhqv4.js} +1 -1
  569. package/server/.next/static/chunks/{1o_q7_4ulcq9x.js → 06lmwdlx-fkr8.js} +1 -1
  570. package/server/.next/static/chunks/{1ieazx9t3vl5p.js → 08w0t5q93_9mu.js} +1 -1
  571. package/server/.next/static/chunks/{1mlvn70-zqjvi.js → 0anet8wttkax1.js} +1 -1
  572. package/server/.next/static/chunks/0ao7kjrp6bp3l.js +1 -0
  573. package/server/.next/static/chunks/0b0rwd99q942r.js +1 -0
  574. package/server/.next/static/chunks/{1ts_fd_r1kcrv.js → 0dhgqjjm0zj6_.js} +1 -1
  575. package/server/.next/static/chunks/{2jlv5ekbb0wu2.js → 0dnjs3de2e_d1.js} +1 -1
  576. package/server/.next/static/chunks/{29p15vj15jcsb.js → 0ilml-p3iktnr.js} +1 -1
  577. package/server/.next/static/chunks/{43_va15lk2zc1.js → 0j_5norjm-kef.js} +1 -1
  578. package/server/.next/static/chunks/0nx0h-723nd_u.js +7 -0
  579. package/server/.next/static/chunks/0unx038_2rfsp.js +1 -0
  580. package/server/.next/static/chunks/0y_0w1ek5fakj.js +1 -0
  581. package/server/.next/static/chunks/1483hxa9hair1.js +1 -0
  582. package/server/.next/static/chunks/{1gmof0n5nswkk.js → 18gwem_5y9wnt.js} +1 -1
  583. package/server/.next/static/chunks/1aoqsoecu-fy_.js +1 -0
  584. package/server/.next/static/chunks/1endj3d7bewa1.js +1 -0
  585. package/server/.next/static/chunks/1j18pg23fzwv_.js +1 -0
  586. package/server/.next/static/chunks/{0wlc502815llk.js → 1k01h6men2hvb.js} +1 -1
  587. package/server/.next/static/chunks/{158-i6phe17yl.js → 1mdaf7mwcfafr.js} +1 -1
  588. package/server/.next/static/chunks/{0li9-xjc40g51.js → 1o4mdgq5lu1g_.js} +1 -1
  589. package/server/.next/static/chunks/{3dokgd9nungcr.js → 1t2iu6ufyxecz.js} +1 -1
  590. package/server/.next/static/chunks/{0wtboeftyamyk.js → 1vi8tyc1ou2o3.js} +1 -1
  591. package/server/.next/static/chunks/1xy80z39ducub.js +1 -0
  592. package/server/.next/static/chunks/1yb4_s_96v9tf.js +1 -0
  593. package/server/.next/static/chunks/{2v14aqfx8wv9o.js → 2-8ra6gmaw_pb.js} +1 -1
  594. package/server/.next/static/chunks/{1-1hfgat2l_o9.js → 2cmw27buw9oce.js} +1 -1
  595. package/server/.next/static/chunks/{3f5sxz8awpdog.js → 2lv5qmgi8nm4h.js} +1 -1
  596. package/server/.next/static/chunks/2mj8z5a9dz7bh.js +1 -0
  597. package/server/.next/static/chunks/{1gb8jvw-g7fr7.js → 2n-h6_0i3mpxo.js} +1 -1
  598. package/server/.next/static/chunks/{2cjfogw85k3h-.js → 2pbnh717ldzfl.js} +1 -1
  599. package/server/.next/static/chunks/2qltilq3pn4ia.js +1 -0
  600. package/server/.next/static/chunks/{30fczssqw6xys.js → 2ufr23d_eyosj.js} +1 -1
  601. package/server/.next/static/chunks/2wqgz94tksucm.js +1 -0
  602. package/server/.next/static/chunks/{3tqh7fwtd_k_l.js → 2z6a725ntvlr6.js} +2 -2
  603. package/server/.next/static/chunks/{2fo6iuxb0ec7f.js → 2zdjxqgm-44u1.js} +1 -1
  604. package/server/.next/static/chunks/{026asl66kuq3f.js → 340ecjh1jzqjd.js} +15 -15
  605. package/server/.next/static/chunks/{2z1xy8l4s3usi.js → 3alfhqlczff2s.js} +1 -1
  606. package/server/.next/static/chunks/{36ureqoyz5e06.js → 3col9buetdxvh.js} +2 -2
  607. package/server/.next/static/chunks/{1zi37go-xtasg.js → 3o45i7xbzm0w-.js} +1 -1
  608. package/server/.next/static/chunks/{0cannaigw8lhi.js → 3o7se0ypyiqmz.js} +1 -1
  609. package/server/.next/static/chunks/{1c4fx4kipvnqz.js → 3oe302ug_esoe.js} +1 -1
  610. package/server/.next/static/chunks/3s7hj7g12rmuh.js +1 -0
  611. package/server/.next/static/chunks/{2fj4o7-stsvht.js → 3uujo4bht1tqo.js} +1 -1
  612. package/server/.next/static/chunks/3w445wy3mpp2f.js +1 -0
  613. package/server/.next/static/chunks/{2kmerzslng988.js → 3ypdfkwyovory.js} +1 -1
  614. package/server/.next/server/chunks/[root-of-the-server]__0grnl7ncqcjft._.js +0 -3
  615. package/server/.next/server/chunks/[root-of-the-server]__0m8w2-7618scn._.js +0 -3
  616. package/server/.next/server/chunks/[root-of-the-server]__0p_b0m2cstlrl._.js +0 -3
  617. package/server/.next/server/chunks/[root-of-the-server]__0zxjft8y2r575._.js +0 -3
  618. package/server/.next/server/chunks/[root-of-the-server]__114vjjaqb2wyv._.js +0 -3
  619. package/server/.next/server/chunks/[root-of-the-server]__12uyws-qe6wxs._.js +0 -3
  620. package/server/.next/server/chunks/[root-of-the-server]__139pgc0wpc7kg._.js +0 -3
  621. package/server/.next/server/chunks/[root-of-the-server]__1bwgi7nn5-hc3._.js +0 -3
  622. package/server/.next/server/chunks/[root-of-the-server]__1k8s02gwythps._.js +0 -3
  623. package/server/.next/server/chunks/[root-of-the-server]__1lf_lo1wqcbcg._.js +0 -3
  624. package/server/.next/server/chunks/[root-of-the-server]__1niiijc82bgoj._.js +0 -3
  625. package/server/.next/server/chunks/[root-of-the-server]__1on_3p53yn6fs._.js +0 -3
  626. package/server/.next/server/chunks/[root-of-the-server]__1q90luznbe9-l._.js +0 -3
  627. package/server/.next/server/chunks/[root-of-the-server]__1r15vmrh2r06l._.js +0 -3
  628. package/server/.next/server/chunks/[root-of-the-server]__1woerg3tb4ls3._.js +0 -3
  629. package/server/.next/server/chunks/[root-of-the-server]__1zaomh_4901_f._.js +0 -3
  630. package/server/.next/server/chunks/[root-of-the-server]__20lwsd6a4wnpe._.js +0 -3
  631. package/server/.next/server/chunks/_03bua_9n4apok._.js +0 -3
  632. package/server/.next/server/chunks/_08y82qdosn7ga._.js +0 -3
  633. package/server/.next/server/chunks/_1bcsmpznxhk9h._.js +0 -3
  634. package/server/.next/server/chunks/_1he3nioua8ee5._.js +0 -3
  635. package/server/.next/server/chunks/_1lpcbqj4uzrsh._.js +0 -3
  636. package/server/.next/server/chunks/src_0l-no1yc1_izn._.js +0 -3
  637. package/server/.next/server/chunks/src_156ewlek-4a4z._.js +0 -3
  638. package/server/.next/server/chunks/src_lib_0-ylqsh7whlj2._.js +0 -3
  639. package/server/.next/server/chunks/src_lib_0f0p6-l5vvduu._.js +0 -3
  640. package/server/.next/server/chunks/src_lib_15a3m-j_urkkp._.js +0 -3
  641. package/server/.next/server/chunks/ssr/[root-of-the-server]__06s-dfcfuperv._.js +0 -3
  642. package/server/.next/server/chunks/ssr/[root-of-the-server]__07or1m2vwon1m._.js +0 -3
  643. package/server/.next/server/chunks/ssr/[root-of-the-server]__0d9lwldljqtvx._.js +0 -3
  644. package/server/.next/server/chunks/ssr/[root-of-the-server]__0uklr553mp86_._.js +0 -3
  645. package/server/.next/server/chunks/ssr/[root-of-the-server]__1cykncw1_xcno._.js +0 -3
  646. package/server/.next/server/chunks/ssr/[root-of-the-server]__1ih2a_fbqu7ko._.js +0 -3
  647. package/server/.next/server/chunks/ssr/[root-of-the-server]__1j7_a902k_8es._.js +0 -3
  648. package/server/.next/server/chunks/ssr/[root-of-the-server]__1ofzjllv-b0o0._.js +0 -3
  649. package/server/.next/server/chunks/ssr/_040ixxsgfs0vi._.js +0 -3
  650. package/server/.next/server/chunks/ssr/_0ux6eo_w1x155._.js +0 -3
  651. package/server/.next/server/chunks/ssr/_12o9qqjoik4q4._.js +0 -3
  652. package/server/.next/server/chunks/ssr/_1k2q3yt1h6cfs._.js +0 -3
  653. package/server/.next/server/chunks/ssr/_1zhtvg8t3jtxe._.js +0 -3
  654. package/server/.next/server/chunks/ssr/_200p6me5_kp2j._.js +0 -3
  655. package/server/.next/server/chunks/ssr/src_00s82lfm2ga7-._.js +0 -3
  656. package/server/.next/server/chunks/ssr/src_13hsrg6rdvh-d._.js +0 -3
  657. package/server/.next/server/chunks/ssr/src_1xgsz_do2xpr2._.js +0 -3
  658. package/server/.next/server/chunks/ssr/src_components_shell_shell_tsx_1cpq-hbch_dvj._.js +0 -3
  659. package/server/.next/server/chunks/ssr/src_lib_0y40wht-o-oc2._.js +0 -3
  660. package/server/.next/static/chunks/03qto0oyf2r1n.js +0 -1
  661. package/server/.next/static/chunks/0c7pskzfstcdh.js +0 -1
  662. package/server/.next/static/chunks/0n_l4a3za5-q8.js +0 -1
  663. package/server/.next/static/chunks/0t96fqp1vsmrp.js +0 -1
  664. package/server/.next/static/chunks/1sm8wxvlpowwg.js +0 -1
  665. package/server/.next/static/chunks/1teh52nh5dujq.js +0 -1
  666. package/server/.next/static/chunks/1v4hl1z0y1npd.js +0 -1
  667. package/server/.next/static/chunks/1vh2psoqw3ddc.js +0 -1
  668. package/server/.next/static/chunks/1xau8pf40_upi.js +0 -7
  669. package/server/.next/static/chunks/1z2rcngn3-7i5.js +0 -1
  670. package/server/.next/static/chunks/210qrsqvmgaet.js +0 -1
  671. package/server/.next/static/chunks/2llric-1orr3y.js +0 -1
  672. package/server/.next/static/chunks/2wb9a1xth0yhf.js +0 -1
  673. package/server/.next/static/chunks/34gs6c2dsgtqy.js +0 -1
  674. package/server/.next/static/chunks/3ag6t3ta58rih.js +0 -1
  675. package/server/.next/static/chunks/3gkta99h3_5i2.js +0 -1
  676. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → n3Kt7dFNHr9KDw7DgGz0m}/_buildManifest.js +0 -0
  677. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → n3Kt7dFNHr9KDw7DgGz0m}/_clientMiddlewareManifest.js +0 -0
  678. /package/server/.next/static/{xCga6YpZus71dK3aq8Q4H → n3Kt7dFNHr9KDw7DgGz0m}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
- module.exports=[725051,a=>{"use strict";var b=a.i(187924),c=a.i(817748),d=a.i(238246),e=a.i(572131),f=a.i(619089),g=a.i(368114),h=a.i(901615),i=a.i(226708);let j="wb_YOUR_KEY",k="gemini-3.8-flash",l=a=>a.trim().replace(/\/+$/,""),m=a=>/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\])(:\d+)?$/i.test(l(a)),n=a=>`${l(a)}/api/v1/mcp`,o=[{name:"list_apps",what:"Every app with its state, uptime 30d and last deploy"},{name:"get_app",what:"One app: state, the Why problems with their remedies, monitors, linked database alias"},{name:"list_alerts",what:"Open and recent alerts with severity and duration"},{name:"list_monitors",what:"HTTP and heartbeat monitors with state and last check"},{name:"recent_events",what:"The event feed, newest first (max 100)"},{name:"recent_logs",what:"Stored warning and error logs, scrubbed (max 100)"},{name:"list_databases",what:"Databases by alias (db-a ...), provider, state, size"},{name:"get_advisor",what:"Today's recommendations"},{name:"list_pending_questions",what:"Questions the owner asked with Ask AI, waiting for an answer"},{name:"submit_ai_note",what:"Post a note on an app or the console (needs write:notes)",write:!0},{name:"answer_question",what:"Answer a pending question (needs write:notes)",write:!0}];function p(a){return`Schedule: every day at 08:00 (Asia/Jakarta).
2
- Use the MCP server "watchbell" (${n(a)}). Steps:
1
+ module.exports=[725051,a=>{"use strict";var b=a.i(187924),c=a.i(817748),d=a.i(238246),e=a.i(572131),f=a.i(619089),g=a.i(368114),h=a.i(901615),i=a.i(226708),j=a.i(147474);let k="wb_YOUR_KEY",l="gemini-3.8-flash",m=a=>a.trim().replace(/\/+$/,""),n=a=>/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\])(:\d+)?$/i.test(m(a)),o=a=>`${m(a)}/api/v1/mcp`,p=[{name:"list_apps",what:"Every app with its state, uptime 30d and last deploy"},{name:"get_app",what:"One app: state, the Why problems with their remedies, monitors, linked database alias"},{name:"list_alerts",what:"Open and recent alerts with severity and duration"},{name:"list_monitors",what:"HTTP and heartbeat monitors with state and last check"},{name:"recent_events",what:"The event feed, newest first (max 100)"},{name:"recent_logs",what:"Stored warning and error logs, scrubbed (max 100)"},{name:"list_databases",what:"Databases by alias (db-a ...), provider, state, size"},{name:"get_advisor",what:"Today's recommendations"},{name:"list_pending_questions",what:"Questions the owner asked with Ask AI, waiting for an answer"},{name:"submit_ai_note",what:"Post a note on an app or the console (needs write:notes)",write:!0},{name:"answer_question",what:"Answer a pending question (needs write:notes)",write:!0}];function q(a){return`Schedule: every day at 08:00 (${(0,j.C)()}).
2
+ Use the MCP server "watchbell" (${o(a)}). Steps:
3
3
  1. Call list_apps.
4
4
  2. For every app whose state isn't "running", call get_app with its id.
5
5
  3. If every app is running, stop without writing anything.
@@ -8,10 +8,10 @@ Use the MCP server "watchbell" (${n(a)}). Steps:
8
8
  body: 3-6 short markdown bullets: what Watchbell shows, the likely cause, the remedy from get_app first, then your own suggestion. Max 4 KB.
9
9
  severity: "crit" if the app is down, "warn" if degraded, else "info"
10
10
  app: the app id
11
- model: "${k}"
12
- Don't include URLs, emails, keys or database names other than the aliases Watchbell gives you.`}let q="mr-1 inline-block whitespace-nowrap rounded border border-line bg-surface-2 px-[5px] font-mono text-xs text-ink-soft",r="grid grid-cols-[26px_minmax(0,1fr)] gap-3 border-b border-line py-3.5 first:pt-0 last:border-b-0 last:pb-0",s="grid size-6 place-items-center rounded-full border border-line-strong font-mono text-xs text-ink-soft";function t(){return null}function u({origin:a}){var c;let e,g,m,o,t,v;return(0,b.jsxs)(f.N,{title:"Run on a server (24/7)",meta:"Headless server · outbound HTTPS only",children:[(0,b.jsxs)("p",{className:"mb-2 max-w-[860px] text-[13px] text-ink-soft",children:["An agent on your laptop only works while the laptop is on. For checks around the clock, run one on a small server you reach over SSH (for example through Tailscale). The URLs below follow the server choice above (",n(a),")."]}),(0,b.jsxs)("ol",{className:"m-0 list-none p-0",children:[(0,b.jsxs)("li",{className:r,children:[(0,b.jsx)("span",{className:s,children:"1"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Create a key for the server"}),(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:["Its own key, named after the server (for example ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"server-agents"}),"), with ",(0,b.jsx)("span",{className:q,children:"read:status"})," ",(0,b.jsx)("span",{className:q,children:"write:notes"}),". If the server is lost, revoke that key and nothing else changes. ",(0,b.jsx)(d.default,{href:"/ai/keys",children:"API keys"})]})]})]}),(0,b.jsxs)("li",{className:r,children:[(0,b.jsx)("span",{className:s,children:"2"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Register Watchbell on the server, then schedule it"}),(0,b.jsxs)("p",{className:"mb-1 text-[13px] text-ink-soft",children:[(0,b.jsx)("b",{className:"font-medium text-ink",children:"OpenClaw"})," keeps running as a service and can also be reached from Telegram once you set up its Telegram channel (an OpenClaw feature, nothing Watchbell needs)."," ",(0,b.jsx)("b",{className:"font-medium text-ink",children:"Gemini CLI"})," runs one prompt per call, so cron starts it every 6 hours; its settings file expands ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"$WATCHBELL_API_KEY"})," from the environment. Check the flags against ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"gemini --help"})," on the server, they change between versions."]}),(0,b.jsx)(i.CodeTabs,{tabs:(e=n(c=a),g=l(c),m=`# OpenClaw on ${h.z.host} (SSH in first). The key lives in OpenClaw's own env file, not in the command.
11
+ model: "${l}"
12
+ Don't include URLs, emails, keys or database names other than the aliases Watchbell gives you.`}let r="mr-1 inline-block whitespace-nowrap rounded border border-line bg-surface-2 px-[5px] font-mono text-xs text-ink-soft",s="grid grid-cols-[26px_minmax(0,1fr)] gap-3 border-b border-line py-3.5 first:pt-0 last:border-b-0 last:pb-0",t="grid size-6 place-items-center rounded-full border border-line-strong font-mono text-xs text-ink-soft";function u(){return null}function v({origin:a}){var c;let e,g,j,n,p,u;return(0,b.jsxs)(f.N,{title:"Run on a server (24/7)",meta:"Headless server · outbound HTTPS only",children:[(0,b.jsxs)("p",{className:"mb-2 max-w-[860px] text-[13px] text-ink-soft",children:["An agent on your laptop only works while the laptop is on. For checks around the clock, run one on a small server you reach over SSH (for example through Tailscale). The URLs below follow the server choice above (",o(a),")."]}),(0,b.jsxs)("ol",{className:"m-0 list-none p-0",children:[(0,b.jsxs)("li",{className:s,children:[(0,b.jsx)("span",{className:t,children:"1"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Create a key for the server"}),(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:["Its own key, named after the server (for example ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"server-agents"}),"), with ",(0,b.jsx)("span",{className:r,children:"read:status"})," ",(0,b.jsx)("span",{className:r,children:"write:notes"}),". If the server is lost, revoke that key and nothing else changes. ",(0,b.jsx)(d.default,{href:"/ai/keys",children:"API keys"})]})]})]}),(0,b.jsxs)("li",{className:s,children:[(0,b.jsx)("span",{className:t,children:"2"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Register Watchbell on the server, then schedule it"}),(0,b.jsxs)("p",{className:"mb-1 text-[13px] text-ink-soft",children:[(0,b.jsx)("b",{className:"font-medium text-ink",children:"OpenClaw"})," keeps running as a service and can also be reached from Telegram once you set up its Telegram channel (an OpenClaw feature, nothing Watchbell needs)."," ",(0,b.jsx)("b",{className:"font-medium text-ink",children:"Gemini CLI"})," runs one prompt per call, so cron starts it every 6 hours; its settings file expands ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"$WATCHBELL_API_KEY"})," from the environment. Check the flags against ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"gemini --help"})," on the server, they change between versions."]}),(0,b.jsx)(i.CodeTabs,{tabs:(e=o(c=a),g=m(c),j=`# OpenClaw on ${h.z.host} (SSH in first). The key lives in OpenClaw's own env file, not in the command.
13
13
  mkdir -p ~/.openclaw && touch ~/.openclaw/.env && chmod 600 ~/.openclaw/.env
14
- echo 'WATCHBELL_API_KEY=${j}' >> ~/.openclaw/.env
14
+ echo 'WATCHBELL_API_KEY=${k}' >> ~/.openclaw/.env
15
15
 
16
16
  openclaw mcp set watchbell '{
17
17
  "url": "${e}",
@@ -22,8 +22,8 @@ openclaw mcp set watchbell '{
22
22
  # doctor warns about a literal secret; probe opens a live connection and lists the tools
23
23
  openclaw mcp doctor watchbell
24
24
  openclaw mcp probe watchbell
25
- # If probe answers 401, the variable didn't resolve: put the key into the header by hand (Bearer wb_...) and run set again.`,o=`# Gemini CLI on ${h.z.host}: the key in a private env file ...
26
- umask 077 && echo 'export WATCHBELL_API_KEY=${j}' > ~/.watchbell.env
25
+ # If probe answers 401, the variable didn't resolve: put the key into the header by hand (Bearer wb_...) and run set again.`,n=`# Gemini CLI on ${h.z.host}: the key in a private env file ...
26
+ umask 077 && echo 'export WATCHBELL_API_KEY=${k}' > ~/.watchbell.env
27
27
 
28
28
  # ... and the server in ~/.gemini/settings.json (settings.json expands $VAR). "trust" skips the per-call
29
29
  # confirmation, which a headless run can't answer; the key's scopes are what limit the agent.
@@ -38,9 +38,9 @@ umask 077 && echo 'export WATCHBELL_API_KEY=${j}' > ~/.watchbell.env
38
38
  }
39
39
 
40
40
  # Check once by hand
41
- . ~/.watchbell.env && gemini -m ${k} -p "Call list_apps on the watchbell MCP server and say how many apps are running."`,t=h.z.cronTab(p(c).split("\n").slice(1).join("\n"),k),v=`# crontab -e: tell Watchbell ${h.z.host} is alive, every 5 minutes.
41
+ . ~/.watchbell.env && gemini -m ${l} -p "Call list_apps on the watchbell MCP server and say how many apps are running."`,p=h.z.cronTab(q(c).split("\n").slice(1).join("\n"),l),u=`# crontab -e: tell Watchbell ${h.z.host} is alive, every 5 minutes.
42
42
  # <token> is shown once when you add the heartbeat (Uptime > Add monitor > Heartbeat).
43
- */5 * * * * curl -fsS -m 10 --retry 2 ${g}/api/ping/<token> > /dev/null`,[...h.z.serverTabs(e,j,k),["OpenClaw",m],["Gemini CLI",o],["Cron: automations",t],["Cron: heartbeat",v]]),label:"Run on a server"})]})]}),(0,b.jsxs)("li",{className:r,children:[(0,b.jsx)("span",{className:s,children:"3"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Watch the server itself"}),(0,b.jsxs)("p",{className:"mb-0 text-[13px] text-ink-soft",children:["The last tab is a heartbeat line: the server calls Watchbell every 5 minutes, and Watchbell alerts you when the calls stop. Create the heartbeat under"," ",(0,b.jsx)(d.default,{href:"/uptime",children:"Uptime"})," › Add monitor › Heartbeat, copy its ping URL into the crontab line, and keep the token private."]})]})]})]}),(0,b.jsxs)("p",{className:"mb-0 mt-3 rounded-lg border border-line bg-surface-2 px-3 py-2.5 text-[13px] text-ink-soft",children:[(0,b.jsx)("b",{className:"font-medium text-ink",children:"Network:"})," the server only needs outbound HTTPS to Watchbell (and to Google for Gemini). Watchbell never connects into the server or your tailnet; it only answers the server's requests, so nothing has to be opened on it."]})]})}a.s(["ConnectView",0,function({siteUrl:a,seen:v}){let w,x,y,z,A,B=function(a,b=!1){let c=l(a),d={id:"production",label:"Production",origin:m(c)?"https://ops.example.com":c};return b||m(c)?[d,{id:"local",label:"Local test",origin:m(c)?c:"http://localhost:3100"}]:[d]}(a),[C,D]=(0,e.useState)(()=>{let b;return(b=l(a),B.find(a=>a.origin===b)??B[0]).id}),[E,F]=(0,e.useState)("daily"),G=(B.find(a=>a.id===C)??B[0]).origin,H=o.filter(a=>!a.write).length,I=o.length-H;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 min-[1001px]:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]",children:[(0,b.jsx)(f.N,{title:"Connect over MCP",meta:"Streamable HTTP · read-only",children:(0,b.jsxs)("ol",{className:"m-0 list-none p-0",children:[(0,b.jsxs)("li",{className:r,children:[(0,b.jsx)("span",{className:s,children:"1"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Create a key with read:status"}),(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:["One key per agent. Add ",(0,b.jsx)("span",{className:q,children:"write:notes"})," for an agent that should post notes or answer questions (",h.p.automationsBelow,"), and ",(0,b.jsx)("span",{className:q,children:"ai:invoke"})," only if it should also use your provider models through Watchbell."]}),(0,b.jsxs)(d.default,{href:"/ai/keys",className:(0,f.R)({size:"sm"}),children:[(0,b.jsx)(c.f,{size:15,"aria-hidden":!0}),"Create key"]})]})]}),(0,b.jsxs)("li",{className:r,children:[(0,b.jsx)("span",{className:s,children:"2"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Add Watchbell as an MCP server"}),(0,b.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"text-ink-soft",id:"origin-label",children:"Server"}),(0,b.jsx)("div",{role:"radiogroup","aria-labelledby":"origin-label",className:"inline-flex overflow-hidden rounded-md border border-line-strong",children:B.map(a=>(0,b.jsx)("button",{type:"button",role:"radio","aria-checked":a.id===C,onClick:()=>D(a.id),className:(0,g.f)("px-2.5 py-1 text-[13px] hover:bg-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/40",a.id===C?"bg-brand-soft font-medium text-brand":"bg-surface text-ink-soft"),children:a.label},a.id))}),(0,b.jsx)("span",{className:"font-mono text-[12.5px] text-ink-soft",children:n(G)})]}),(0,b.jsxs)("p",{className:"mb-1 text-[13px] text-ink-soft",children:["Replace ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"wb_YOUR_KEY"})," with the key. Keep it in an environment variable where the agent supports it."]}),(0,b.jsx)(i.CodeTabs,{tabs:(w=n(G),x=`# Gemini CLI: one command ...
43
+ */5 * * * * curl -fsS -m 10 --retry 2 ${g}/api/ping/<token> > /dev/null`,[...h.z.serverTabs(e,k,l),["OpenClaw",j],["Gemini CLI",n],["Cron: automations",p],["Cron: heartbeat",u]]),label:"Run on a server"})]})]}),(0,b.jsxs)("li",{className:s,children:[(0,b.jsx)("span",{className:t,children:"3"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Watch the server itself"}),(0,b.jsxs)("p",{className:"mb-0 text-[13px] text-ink-soft",children:["The last tab is a heartbeat line: the server calls Watchbell every 5 minutes, and Watchbell alerts you when the calls stop. Create the heartbeat under"," ",(0,b.jsx)(d.default,{href:"/uptime",children:"Uptime"})," › Add monitor › Heartbeat, copy its ping URL into the crontab line, and keep the token private."]})]})]})]}),(0,b.jsxs)("p",{className:"mb-0 mt-3 rounded-lg border border-line bg-surface-2 px-3 py-2.5 text-[13px] text-ink-soft",children:[(0,b.jsx)("b",{className:"font-medium text-ink",children:"Network:"})," the server only needs outbound HTTPS to Watchbell (and to Google for Gemini). Watchbell never connects into the server or your tailnet; it only answers the server's requests, so nothing has to be opened on it."]})]})}a.s(["ConnectView",0,function({siteUrl:a,seen:j}){let w,x,y,z,A,B=function(a,b=!1){let c=m(a),d={id:"production",label:"Production",origin:n(c)?"https://ops.example.com":c};return b||n(c)?[d,{id:"local",label:"Local test",origin:n(c)?c:"http://localhost:3100"}]:[d]}(a),[C,D]=(0,e.useState)(()=>{let b;return(b=m(a),B.find(a=>a.origin===b)??B[0]).id}),[E,F]=(0,e.useState)("daily"),G=(B.find(a=>a.id===C)??B[0]).origin,H=p.filter(a=>!a.write).length,I=p.length-H;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 min-[1001px]:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]",children:[(0,b.jsx)(f.N,{title:"Connect over MCP",meta:"Streamable HTTP · read-only",children:(0,b.jsxs)("ol",{className:"m-0 list-none p-0",children:[(0,b.jsxs)("li",{className:s,children:[(0,b.jsx)("span",{className:t,children:"1"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Create a key with read:status"}),(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:["One key per agent. Add ",(0,b.jsx)("span",{className:r,children:"write:notes"})," for an agent that should post notes or answer questions (",h.p.automationsBelow,"), and ",(0,b.jsx)("span",{className:r,children:"ai:invoke"})," only if it should also use your provider models through Watchbell."]}),(0,b.jsxs)(d.default,{href:"/ai/keys",className:(0,f.R)({size:"sm"}),children:[(0,b.jsx)(c.f,{size:15,"aria-hidden":!0}),"Create key"]})]})]}),(0,b.jsxs)("li",{className:s,children:[(0,b.jsx)("span",{className:t,children:"2"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Add Watchbell as an MCP server"}),(0,b.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"text-ink-soft",id:"origin-label",children:"Server"}),(0,b.jsx)("div",{role:"radiogroup","aria-labelledby":"origin-label",className:"inline-flex overflow-hidden rounded-md border border-line-strong",children:B.map(a=>(0,b.jsx)("button",{type:"button",role:"radio","aria-checked":a.id===C,onClick:()=>D(a.id),className:(0,g.f)("px-2.5 py-1 text-[13px] hover:bg-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/40",a.id===C?"bg-brand-soft font-medium text-brand":"bg-surface text-ink-soft"),children:a.label},a.id))}),(0,b.jsx)("span",{className:"font-mono text-[12.5px] text-ink-soft",children:o(G)})]}),(0,b.jsxs)("p",{className:"mb-1 text-[13px] text-ink-soft",children:["Replace ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"wb_YOUR_KEY"})," with the key. Keep it in an environment variable where the agent supports it."]}),(0,b.jsx)(i.CodeTabs,{tabs:(w=o(G),x=`# Gemini CLI: one command ...
44
44
  gemini mcp add --transport http watchbell ${w} \\
45
45
  --header "Authorization: Bearer $WATCHBELL_API_KEY"
46
46
 
@@ -56,11 +56,11 @@ gemini mcp add --transport http watchbell ${w} \\
56
56
  openclaw mcp set watchbell '{
57
57
  "url": "${w}",
58
58
  "transport": "streamable-http",
59
- "headers": { "Authorization": "Bearer ${j}" }
59
+ "headers": { "Authorization": "Bearer ${k}" }
60
60
  }'
61
61
  openclaw mcp probe watchbell`,z=`# Any MCP client with Streamable HTTP
62
62
  URL: ${w}
63
- Header: Authorization: Bearer ${j}
63
+ Header: Authorization: Bearer ${k}
64
64
  Scope: read:status
65
65
 
66
66
  # Clients that only speak stdio
@@ -69,14 +69,14 @@ curl -s ${w} \\
69
69
  -H "Authorization: Bearer $WATCHBELL_API_KEY" \\
70
70
  -H "Content-Type: application/json" \\
71
71
  -H "Accept: application/json, text/event-stream" \\
72
- -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl-test","version":"1"}}}'`,[...h.z.mcpTabs(w,j),["Gemini CLI",x],["OpenClaw",y],["Other clients",z],["Test with curl",A]]),label:"Agent configuration"}),(0,b.jsx)(t,{})]})]}),(0,b.jsxs)("li",{className:r,children:[(0,b.jsx)("span",{className:s,children:"3"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Ask the agent something"}),(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:['For example "Which of my apps are down, and why?". The agent appears under ',(0,b.jsx)(d.default,{href:"/ai/agents",children:"Agents"})," with its own name within a minute."]}),(0,b.jsxs)("div",{className:"flex items-start gap-2.5 rounded-md border border-dashed border-line-strong px-3.5 py-3 text-[13px] text-ink-soft",role:"status",children:[(0,b.jsx)("span",{className:(0,g.f)("mt-1.5 size-2 shrink-0 rounded-full",v.length?"bg-ok":"animate-pulse bg-ink-faint"),"aria-hidden":!0}),0===v.length?(0,b.jsx)("span",{children:"Waiting for a new agent on a key with read:status. Reload this page after the first request."}):(0,b.jsxs)("span",{children:["Seen over MCP in the last 24 hours:"," ",v.map((a,c)=>(0,b.jsxs)("span",{children:[c>0&&", ",(0,b.jsx)("b",{className:"font-medium text-ink",children:a.name}),a.key?` (key ${a.key})`:"",", ",a.ago]},`${a.name}-${c}`)),". ",(0,b.jsx)(d.default,{href:"/ai/agents",children:"Open Agents"})]})]})]})]})]})}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,b.jsx)(f.N,{title:"Tools the agent gets",meta:`${H} read-only \xb7 ${I} write with write:notes`,flush:!0,children:(0,b.jsx)("div",{className:"px-[18px] pb-3",children:o.map(a=>(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-line py-2 last:border-b-0",children:[(0,b.jsxs)("span",{className:"font-mono text-[12.5px]",children:[a.name,a.write&&(0,b.jsx)(f.E,{children:"write"})]}),(0,b.jsx)("span",{className:"text-right text-[12.5px] text-ink-soft",children:a.what})]},a.name))})}),(0,b.jsxs)(f.N,{title:h.p.automationTitle,children:[(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:[h.p.automationLead," Give its key"," ",(0,b.jsx)("span",{className:q,children:"read:status"})," ",(0,b.jsx)("span",{className:q,children:"write:notes"}),". Gemini models only: the prompt names ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"gemini-3.8-flash"})," and Watchbell rejects other models."]}),(0,b.jsx)("div",{role:"tablist","aria-label":"Automation prompts",className:"mb-2 inline-flex overflow-hidden rounded-md border border-line-strong",children:[["daily","Daily check"],["questions","Answer questions"]].map(([a,c])=>(0,b.jsx)("button",{type:"button",role:"tab","aria-selected":E===a,onClick:()=>F(a),className:(0,g.f)("px-2.5 py-1 text-[13px] hover:bg-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/40",E===a?"bg-brand-soft font-medium text-brand":"bg-surface text-ink-soft"),children:c},a))}),(0,b.jsx)("p",{className:"mb-2 text-[12.5px] text-ink-soft",children:"daily"===E?"Every morning: finds apps that aren't running and posts one note per app. Notes show on Overview and on the app page.":"Answers the questions you ask with Ask AI in the console (they wait in the inbox until the agent runs)."}),(0,b.jsx)(i.PromptBox,{text:"daily"===E?p(G):`Schedule: every 15 minutes (or whenever you are open).
73
- Use the MCP server "watchbell" (${n(G)}). Steps:
72
+ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl-test","version":"1"}}}'`,[...h.z.mcpTabs(w,k),["Gemini CLI",x],["OpenClaw",y],["Other clients",z],["Test with curl",A]]),label:"Agent configuration"}),(0,b.jsx)(u,{})]})]}),(0,b.jsxs)("li",{className:s,children:[(0,b.jsx)("span",{className:t,children:"3"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h3",{className:"mb-1 mt-0.5 text-[14px] font-medium",children:"Ask the agent something"}),(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:['For example "Which of my apps are down, and why?". The agent appears under ',(0,b.jsx)(d.default,{href:"/ai/agents",children:"Agents"})," with its own name within a minute."]}),(0,b.jsxs)("div",{className:"flex items-start gap-2.5 rounded-md border border-dashed border-line-strong px-3.5 py-3 text-[13px] text-ink-soft",role:"status",children:[(0,b.jsx)("span",{className:(0,g.f)("mt-1.5 size-2 shrink-0 rounded-full",j.length?"bg-ok":"animate-pulse bg-ink-faint"),"aria-hidden":!0}),0===j.length?(0,b.jsx)("span",{children:"Waiting for a new agent on a key with read:status. Reload this page after the first request."}):(0,b.jsxs)("span",{children:["Seen over MCP in the last 24 hours:"," ",j.map((a,c)=>(0,b.jsxs)("span",{children:[c>0&&", ",(0,b.jsx)("b",{className:"font-medium text-ink",children:a.name}),a.key?` (key ${a.key})`:"",", ",a.ago]},`${a.name}-${c}`)),". ",(0,b.jsx)(d.default,{href:"/ai/agents",children:"Open Agents"})]})]})]})]})]})}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,b.jsx)(f.N,{title:"Tools the agent gets",meta:`${H} read-only \xb7 ${I} write with write:notes`,flush:!0,children:(0,b.jsx)("div",{className:"px-[18px] pb-3",children:p.map(a=>(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-line py-2 last:border-b-0",children:[(0,b.jsxs)("span",{className:"font-mono text-[12.5px]",children:[a.name,a.write&&(0,b.jsx)(f.E,{children:"write"})]}),(0,b.jsx)("span",{className:"text-right text-[12.5px] text-ink-soft",children:a.what})]},a.name))})}),(0,b.jsxs)(f.N,{title:h.p.automationTitle,children:[(0,b.jsxs)("p",{className:"mb-2 text-[13px] text-ink-soft",children:[h.p.automationLead," Give its key"," ",(0,b.jsx)("span",{className:r,children:"read:status"})," ",(0,b.jsx)("span",{className:r,children:"write:notes"}),". Gemini models only: the prompt names ",(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:"gemini-3.8-flash"})," and Watchbell rejects other models."]}),(0,b.jsx)("div",{role:"tablist","aria-label":"Automation prompts",className:"mb-2 inline-flex overflow-hidden rounded-md border border-line-strong",children:[["daily","Daily check"],["questions","Answer questions"]].map(([a,c])=>(0,b.jsx)("button",{type:"button",role:"tab","aria-selected":E===a,onClick:()=>F(a),className:(0,g.f)("px-2.5 py-1 text-[13px] hover:bg-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/40",E===a?"bg-brand-soft font-medium text-brand":"bg-surface text-ink-soft"),children:c},a))}),(0,b.jsx)("p",{className:"mb-2 text-[12.5px] text-ink-soft",children:"daily"===E?"Every morning: finds apps that aren't running and posts one note per app. Notes show on Overview and on the app page.":"Answers the questions you ask with Ask AI in the console (they wait in the inbox until the agent runs)."}),(0,b.jsx)(i.PromptBox,{text:"daily"===E?q(G):`Schedule: every 15 minutes (or whenever you are open).
73
+ Use the MCP server "watchbell" (${o(G)}). Steps:
74
74
  1. Call list_pending_questions. If it is empty, stop.
75
75
  2. For each question, use get_app, list_alerts or the other read tools if you need facts, then call answer_question:
76
76
  id: the question's id
77
77
  answer: markdown, short and concrete: what is wrong, the likely cause, the remedy. Max 8 KB.
78
- model: "${k}"
78
+ model: "${l}"
79
79
  Answer only from what Watchbell returns; say so when the data doesn't cover the question.
80
- Don't include URLs, emails, keys or database names other than the aliases Watchbell gives you.`,what:"daily"===E?"Daily check prompt copied.":"Question prompt copied."})]}),(0,b.jsx)(f.N,{title:"What agents can't do",children:(0,b.jsx)("p",{className:"m-0 text-[13px] text-ink-soft",children:"No writes except AI notes and answers (with write:notes), no redeploys, no credentials. Results go through the same privacy rules as the console's screenshot mode: database names are aliases, emails hidden, logs scrubbed. Each tool call is rate-limited with the key's limit and logged as metadata."})}),(0,b.jsx)(f.N,{title:"Not supported",children:(0,b.jsxs)("p",{className:"m-0 text-[13px] text-ink-soft",children:[h.p.notSupportedLead," Watchbell only uses the API keys you connect under Bring your own key, one account per provider, never rotated. An agent's own subscription quota can't be read: there is no official API for it."]})})]})]}),(0,b.jsx)(u,{origin:G})]})}],725051)}];
80
+ Don't include URLs, emails, keys or database names other than the aliases Watchbell gives you.`,what:"daily"===E?"Daily check prompt copied.":"Question prompt copied."})]}),(0,b.jsx)(f.N,{title:"What agents can't do",children:(0,b.jsx)("p",{className:"m-0 text-[13px] text-ink-soft",children:"No writes except AI notes and answers (with write:notes), no redeploys, no credentials. Results go through the same privacy rules as the console's screenshot mode: database names are aliases, emails hidden, logs scrubbed. Each tool call is rate-limited with the key's limit and logged as metadata."})}),(0,b.jsx)(f.N,{title:"Not supported",children:(0,b.jsxs)("p",{className:"m-0 text-[13px] text-ink-soft",children:[h.p.notSupportedLead," Watchbell only uses the API keys you connect under Bring your own key, one account per provider, never rotated. An agent's own subscription quota can't be read: there is no official API for it."]})})]})]}),(0,b.jsx)(v,{origin:G})]})}],725051)}];
81
81
 
82
82
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_connect_connect-view_tsx_04abz05n7hdsd._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[815287,a=>{"use strict";var b=a.i(187924);let c=(0,a.i(449862).f)("outline","download","Download",[["path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M7 11l5 5l5 -5",key:"svg-1"}],["path",{d:"M12 4l0 12",key:"svg-2"}]]);var d=a.i(572131),e=a.i(823292),f=a.i(619089),g=a.i(405050);let h=(0,g.createServerReference)("407f1514b0a9a14c686fe87c3e170b6e5384bb1832",g.callServer,void 0,g.findSourceMapURL,"exportLogsCsv");a.s(["ExportButton",0,function({params:a}){let[g,i]=(0,d.useTransition)();return(0,b.jsxs)(f.K,{onClick:()=>i(async()=>{try{let b=await h(a);if(!b.ok||!b.data)return void e.c.error(b.ok?"Nothing to export.":b.error);let c=URL.createObjectURL(new Blob(["\uFEFF",b.data.csv],{type:"text/csv;charset=utf-8"})),d=document.createElement("a");d.href=c,d.download=`watchbell-ai-logs-${new Date().toISOString().slice(0,10)}.csv`,document.body.append(d),d.click(),d.remove(),URL.revokeObjectURL(c),e.c.success(b.message??"Exported.")}catch{e.c.error("Something went wrong. Try again.")}}),disabled:g,children:[(0,b.jsx)(c,{size:16,"aria-hidden":!0}),g?"Exporting...":"Export CSV"]})}],815287)}];
1
+ module.exports=[815287,a=>{"use strict";var b=a.i(187924);let c=(0,a.i(449862).f)("outline","download","Download",[["path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M7 11l5 5l5 -5",key:"svg-1"}],["path",{d:"M12 4l0 12",key:"svg-2"}]]);var d=a.i(572131),e=a.i(823292),f=a.i(619089),g=a.i(405050);let h=(0,g.createServerReference)("40b63d289db7609c89e2b4b4b7f70351fb389b01f2",g.callServer,void 0,g.findSourceMapURL,"exportLogsCsv");a.s(["ExportButton",0,function({params:a}){let[g,i]=(0,d.useTransition)();return(0,b.jsxs)(f.K,{onClick:()=>i(async()=>{try{let b=await h(a);if(!b.ok||!b.data)return void e.c.error(b.ok?"Nothing to export.":b.error);let c=URL.createObjectURL(new Blob(["\uFEFF",b.data.csv],{type:"text/csv;charset=utf-8"})),d=document.createElement("a");d.href=c,d.download=`watchbell-ai-logs-${new Date().toISOString().slice(0,10)}.csv`,document.body.append(d),d.click(),d.remove(),URL.revokeObjectURL(c),e.c.success(b.message??"Exported.")}catch{e.c.error("Something went wrong. Try again.")}}),disabled:g,children:[(0,b.jsx)(c,{size:16,"aria-hidden":!0}),g?"Exporting...":"Export CSV"]})}],815287)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_logs_export-button_tsx_1k-crb88n1za_._.js.map
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[127306,a=>{var b=a.i(187924),c=a.i(908161),d=a.i(572131),e=a.i(823292),f=a.i(619089),g=a.i(368114),h=a.i(271288),i=a.i(700629),j=a.i(405050);let k=(0,j.createServerReference)("00276d1fa2effa3927f2d126ed797e25e7cac2888b",j.callServer,void 0,j.findSourceMapURL,"runAdvisorNowAction"),l=(0,j.createServerReference)("609724c6a1059cab05d7b5e455fda1f60eedb624c8",j.callServer,void 0,j.findSourceMapURL,"setAdvisorNotesAction");a.s(["AdvisorNotesControls",0,function({enabled:a,model:j,models:m,defaultLabel:n}){let[o,p]=(0,d.useState)(a),[q,r]=(0,d.useState)(j??""),[s,t]=(0,d.useTransition)(),[u,v]=(0,d.useTransition)(),w=(b,c)=>t(async()=>{try{let d=await l(b,c||null);d.ok?e.c.success(d.message??"Saved."):(p(a),r(j??""),e.c.error(d.error))}catch{e.c.error("Something went wrong. Try again.")}});return(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,b.jsx)(h.f,{checked:o,disabled:s,label:"Advisor notes",onChange:a=>{p(a),w(a,q)}}),(0,b.jsxs)("span",{className:"text-[13px]",children:["Advisor notes ",o?"on":"off"]}),(0,b.jsxs)("label",{className:"flex items-center gap-1.5 text-[13px] text-ink-soft",children:[(0,b.jsx)("span",{className:"sr-only",children:"Advisor model"}),(0,b.jsxs)("select",{className:(0,g.f)(f.S,"max-w-[260px] py-1 font-mono text-[12.5px]"),value:q,disabled:s,onChange:a=>{r(a.target.value),w(o,a.target.value)},children:[(0,b.jsxs)("option",{value:"",children:["Default (",n,")"]}),m.map(a=>(0,b.jsx)("option",{value:a,children:a},a))]})]}),(0,b.jsxs)(f.K,{size:"sm",disabled:u,onClick:()=>v(async()=>{try{let a=await k();a.ok?e.c.success(a.message??"Done."):e.c.error(a.error)}catch{e.c.error("Something went wrong. Try again.")}}),children:[(0,b.jsx)(c.f,{size:15,"aria-hidden":!0}),u?"Writing…":"Run now"]}),u&&(0,b.jsx)(i.f,{})]})}],127306)},785149,a=>{var b=a.i(187924),c=a.i(572131),d=a.i(823292),e=a.i(611619),f=a.i(619089),g=a.i(405050);let h=(0,g.createServerReference)("60d6fb609e5375684640eb18a22e5d955baec8e2e0",g.callServer,void 0,g.findSourceMapURL,"addManualModel"),i=(0,g.createServerReference)("6050721759957079b233630ae0799b53d5c1b4f941",g.callServer,void 0,g.findSourceMapURL,"removeManualModel");a.s(["AddModelIdForm",0,function({providerId:a,providerName:e}){let g=(0,c.useId)(),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useTransition)();return(0,b.jsxs)("form",{className:"flex flex-col gap-1.5",onSubmit:b=>{b.preventDefault();let c=i.trim();c&&l(async()=>{try{let b=await h(a,c);b.ok?(d.c.success(b.message??"Added."),j("")):d.c.error(b.error)}catch{d.c.error("Something went wrong. Try again.")}})},children:[(0,b.jsxs)("label",{htmlFor:g,className:"text-[13px] font-medium",children:["Add model id · ",e]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("input",{id:g,name:"modelId",value:i,onChange:a=>j(a.target.value),maxLength:120,autoComplete:"off",spellCheck:!1,placeholder:"model id","aria-describedby":`${g}-hint`,disabled:k,className:`${f.S} min-w-0 flex-1 font-mono text-[13px] sm:max-w-[320px]`}),(0,b.jsx)(f.K,{size:"sm",type:"submit",disabled:k||""===i.trim(),children:k?"Testing…":"Add"})]}),(0,b.jsx)("p",{id:`${g}-hint`,className:"m-0 text-[12.5px] text-ink-faint",children:"For ids the server doesn't list (for example a combo). Watchbell tests it once before saving."})]})},"RemoveManualModelButton",0,function({providerId:a,modelId:c,publicId:d}){return(0,b.jsx)(e.f,{trigger:(0,b.jsx)(f.K,{size:"sm",variant:"ghost",children:"Remove"}),title:`Remove ${d}?`,body:"Watchbell stops offering this model id. Calls for it answer 400 model_not_enabled. Nothing changes on your server.",cta:"Remove",danger:!0,onConfirm:async()=>{let b=await i(a,c);return{ok:b.ok,message:(b.ok?b.message:b.error)??""}}})}],785149)},391737,a=>{var b=a.i(187924),c=a.i(402699),d=a.i(908161);let e=(0,a.i(449862).f)("outline","radar","Radar",[["path",{d:"M21 12h-8a1 1 0 1 0 -1 1v8a9 9 0 0 0 9 -9",key:"svg-0"}],["path",{d:"M16 9a5 5 0 1 0 -7 7",key:"svg-1"}],["path",{d:"M20.486 9a9 9 0 1 0 -11.482 11.495",key:"svg-2"}]]);var f=a.i(147909),g=a.i(572131),h=a.i(823292),i=a.i(619089),j=a.i(271288),k=a.i(405050);let l=(0,k.createServerReference)("40ca860c29570e1f532649ec898a55216d483ecbf5",k.callServer,void 0,k.findSourceMapURL,"makeDefaultModel"),m=(0,k.createServerReference)("0036a0f55cd85f905e6f79270162019c1bb5e1730e",k.callServer,void 0,k.findSourceMapURL,"refreshAllModels"),n=(0,k.createServerReference)("40ae6380ed7a88f6df7ac73aff3047f422ef2282de",k.callServer,void 0,k.findSourceMapURL,"scanModelsAction"),o=(0,k.createServerReference)("004b24fa2f4c7cf8dedd407fb1e4afaacc308b5229",k.callServer,void 0,k.findSourceMapURL,"syncModelsNowAction"),p=(0,k.createServerReference)("60cc1a97fcc6a8b795900e3d33502ee089497d7f01",k.callServer,void 0,k.findSourceMapURL,"testModelAction"),q=(0,k.createServerReference)("709dded2cd11a03b47a3989c20d37b046c3375ef4c",k.callServer,void 0,k.findSourceMapURL,"toggleModel");a.s(["MakeDefaultButton",0,function({publicId:a}){let[c,d]=(0,g.useTransition)();return(0,b.jsx)(i.K,{size:"sm",variant:"ghost",disabled:c,onClick:()=>d(async()=>{try{let b=await l(a);b.ok?h.c.success(b.message??"Saved."):h.c.error(b.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:"Make default"})},"ModelSwitch",0,function({providerId:a,modelId:c,publicId:d,enabled:e,disabled:f}){let[i,k]=(0,g.useState)(e),[l,m]=(0,g.useTransition)(),[n,o]=(0,g.useState)(e);return n!==e&&(o(e),k(e)),(0,b.jsx)(j.f,{checked:i,disabled:f||l,label:`Model ${d}`,onChange:b=>{k(b),m(async()=>{try{let d=await q(a,c,b);d.ok?h.c.success(d.message??"Saved."):(k(!b),h.c.error(d.error))}catch{k(!b),h.c.error("Something went wrong. Try again.")}})}})},"RefreshModelsButton",0,function(){let[a,c]=(0,g.useTransition)();return(0,b.jsxs)(i.K,{disabled:a,onClick:()=>c(async()=>{try{let a=await m();a.ok?h.c.success(a.message??"Refreshed."):h.c.error(a.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:[(0,b.jsx)(f.f,{size:16,"aria-hidden":!0}),a?"Refreshing...":"Refresh models"]})},"ScanAllButton",0,function({providerId:a,name:d}){let[f,j]=(0,g.useTransition)();return(0,b.jsxs)(i.K,{size:"sm",disabled:f,onClick:()=>j(async()=>{try{let b=await n(a);b.ok?h.c.success(b.message??"Scanned."):h.c.error(b.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:[f?(0,b.jsx)(c.f,{size:15,className:"animate-spin","aria-hidden":!0}):(0,b.jsx)(e,{size:15,"aria-hidden":!0}),f?`Scanning ${d}…`:`Scan all \xb7 ${d}`]})},"SyncNowButton",0,function(){let[a,d]=(0,g.useTransition)();return(0,b.jsxs)(i.K,{size:"sm",disabled:a,onClick:()=>d(async()=>{try{let a=await o();a.ok?h.c.success(a.message??"Synced."):h.c.error(a.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:[a?(0,b.jsx)(c.f,{size:15,className:"animate-spin","aria-hidden":!0}):(0,b.jsx)(f.f,{size:15,"aria-hidden":!0}),a?"Syncing…":"Sync now"]})},"TestModelButton",0,function({providerId:a,modelId:e,publicId:f}){let[j,k]=(0,g.useTransition)();return(0,b.jsx)(i.K,{size:"sm",variant:"ghost","aria-label":`Test ${f}`,title:`Test ${f}`,disabled:j,onClick:()=>k(async()=>{try{let b=await p(a,e);b.ok?h.c.success(b.message??"Works."):h.c.error(b.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:j?(0,b.jsx)(c.f,{size:15,className:"animate-spin","aria-hidden":!0}):(0,b.jsx)(d.f,{size:15,"aria-hidden":!0})})}],391737)}]})();
1
+ (()=>{"use strict";module.exports=[127306,a=>{var b=a.i(187924),c=a.i(908161),d=a.i(572131),e=a.i(823292),f=a.i(619089),g=a.i(368114),h=a.i(271288),i=a.i(700629),j=a.i(405050);let k=(0,j.createServerReference)("00530637b2c99388b47bc6da4ff547ef49cd9857ca",j.callServer,void 0,j.findSourceMapURL,"runAdvisorNowAction"),l=(0,j.createServerReference)("60f5530db9400f95bb9697a064ce85a0cff96c636b",j.callServer,void 0,j.findSourceMapURL,"setAdvisorNotesAction");a.s(["AdvisorNotesControls",0,function({enabled:a,model:j,models:m,defaultLabel:n}){let[o,p]=(0,d.useState)(a),[q,r]=(0,d.useState)(j??""),[s,t]=(0,d.useTransition)(),[u,v]=(0,d.useTransition)(),w=(b,c)=>t(async()=>{try{let d=await l(b,c||null);d.ok?e.c.success(d.message??"Saved."):(p(a),r(j??""),e.c.error(d.error))}catch{e.c.error("Something went wrong. Try again.")}});return(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,b.jsx)(h.f,{checked:o,disabled:s,label:"Advisor notes",onChange:a=>{p(a),w(a,q)}}),(0,b.jsxs)("span",{className:"text-[13px]",children:["Advisor notes ",o?"on":"off"]}),(0,b.jsxs)("label",{className:"flex items-center gap-1.5 text-[13px] text-ink-soft",children:[(0,b.jsx)("span",{className:"sr-only",children:"Advisor model"}),(0,b.jsxs)("select",{className:(0,g.f)(f.S,"max-w-[260px] py-1 font-mono text-[12.5px]"),value:q,disabled:s,onChange:a=>{r(a.target.value),w(o,a.target.value)},children:[(0,b.jsxs)("option",{value:"",children:["Default (",n,")"]}),m.map(a=>(0,b.jsx)("option",{value:a,children:a},a))]})]}),(0,b.jsxs)(f.K,{size:"sm",disabled:u,onClick:()=>v(async()=>{try{let a=await k();a.ok?e.c.success(a.message??"Done."):e.c.error(a.error)}catch{e.c.error("Something went wrong. Try again.")}}),children:[(0,b.jsx)(c.f,{size:15,"aria-hidden":!0}),u?"Writing…":"Run now"]}),u&&(0,b.jsx)(i.f,{})]})}],127306)},785149,a=>{var b=a.i(187924),c=a.i(572131),d=a.i(823292),e=a.i(611619),f=a.i(619089),g=a.i(405050);let h=(0,g.createServerReference)("608d730b2bab8bb21f9f24a65dc4db0c28c5a70a92",g.callServer,void 0,g.findSourceMapURL,"addManualModel"),i=(0,g.createServerReference)("60f021df3bb998de2592754889aa06da2bb6349a5a",g.callServer,void 0,g.findSourceMapURL,"removeManualModel");a.s(["AddModelIdForm",0,function({providerId:a,providerName:e}){let g=(0,c.useId)(),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useTransition)();return(0,b.jsxs)("form",{className:"flex flex-col gap-1.5",onSubmit:b=>{b.preventDefault();let c=i.trim();c&&l(async()=>{try{let b=await h(a,c);b.ok?(d.c.success(b.message??"Added."),j("")):d.c.error(b.error)}catch{d.c.error("Something went wrong. Try again.")}})},children:[(0,b.jsxs)("label",{htmlFor:g,className:"text-[13px] font-medium",children:["Add model id · ",e]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("input",{id:g,name:"modelId",value:i,onChange:a=>j(a.target.value),maxLength:120,autoComplete:"off",spellCheck:!1,placeholder:"model id","aria-describedby":`${g}-hint`,disabled:k,className:`${f.S} min-w-0 flex-1 font-mono text-[13px] sm:max-w-[320px]`}),(0,b.jsx)(f.K,{size:"sm",type:"submit",disabled:k||""===i.trim(),children:k?"Testing…":"Add"})]}),(0,b.jsx)("p",{id:`${g}-hint`,className:"m-0 text-[12.5px] text-ink-faint",children:"For ids the server doesn't list (for example a combo). Watchbell tests it once before saving."})]})},"RemoveManualModelButton",0,function({providerId:a,modelId:c,publicId:d}){return(0,b.jsx)(e.f,{trigger:(0,b.jsx)(f.K,{size:"sm",variant:"ghost",children:"Remove"}),title:`Remove ${d}?`,body:"Watchbell stops offering this model id. Calls for it answer 400 model_not_enabled. Nothing changes on your server.",cta:"Remove",danger:!0,onConfirm:async()=>{let b=await i(a,c);return{ok:b.ok,message:(b.ok?b.message:b.error)??""}}})}],785149)},391737,a=>{var b=a.i(187924),c=a.i(402699),d=a.i(908161);let e=(0,a.i(449862).f)("outline","radar","Radar",[["path",{d:"M21 12h-8a1 1 0 1 0 -1 1v8a9 9 0 0 0 9 -9",key:"svg-0"}],["path",{d:"M16 9a5 5 0 1 0 -7 7",key:"svg-1"}],["path",{d:"M20.486 9a9 9 0 1 0 -11.482 11.495",key:"svg-2"}]]);var f=a.i(147909),g=a.i(572131),h=a.i(823292),i=a.i(619089),j=a.i(271288),k=a.i(405050);let l=(0,k.createServerReference)("4082e5a8645a582cf81d46205cd89264e8a30ed17e",k.callServer,void 0,k.findSourceMapURL,"makeDefaultModel"),m=(0,k.createServerReference)("004ce6b40bddc36d3486004783c249fc8152cd51f6",k.callServer,void 0,k.findSourceMapURL,"refreshAllModels"),n=(0,k.createServerReference)("4097ad05c2d27a67f03beb31e4101ae80caa0e6008",k.callServer,void 0,k.findSourceMapURL,"scanModelsAction"),o=(0,k.createServerReference)("00d2a7f8de04ed43c462eed5d3500086bb1ac4a554",k.callServer,void 0,k.findSourceMapURL,"syncModelsNowAction"),p=(0,k.createServerReference)("6049131072443d0df2662baa72e68c97cf3890c901",k.callServer,void 0,k.findSourceMapURL,"testModelAction"),q=(0,k.createServerReference)("70dacbd2a09bb6cbb6fbf4ad7df1ca9b4627a585cb",k.callServer,void 0,k.findSourceMapURL,"toggleModel");a.s(["MakeDefaultButton",0,function({publicId:a}){let[c,d]=(0,g.useTransition)();return(0,b.jsx)(i.K,{size:"sm",variant:"ghost",disabled:c,onClick:()=>d(async()=>{try{let b=await l(a);b.ok?h.c.success(b.message??"Saved."):h.c.error(b.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:"Make default"})},"ModelSwitch",0,function({providerId:a,modelId:c,publicId:d,enabled:e,disabled:f}){let[i,k]=(0,g.useState)(e),[l,m]=(0,g.useTransition)(),[n,o]=(0,g.useState)(e);return n!==e&&(o(e),k(e)),(0,b.jsx)(j.f,{checked:i,disabled:f||l,label:`Model ${d}`,onChange:b=>{k(b),m(async()=>{try{let d=await q(a,c,b);d.ok?h.c.success(d.message??"Saved."):(k(!b),h.c.error(d.error))}catch{k(!b),h.c.error("Something went wrong. Try again.")}})}})},"RefreshModelsButton",0,function(){let[a,c]=(0,g.useTransition)();return(0,b.jsxs)(i.K,{disabled:a,onClick:()=>c(async()=>{try{let a=await m();a.ok?h.c.success(a.message??"Refreshed."):h.c.error(a.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:[(0,b.jsx)(f.f,{size:16,"aria-hidden":!0}),a?"Refreshing...":"Refresh models"]})},"ScanAllButton",0,function({providerId:a,name:d}){let[f,j]=(0,g.useTransition)();return(0,b.jsxs)(i.K,{size:"sm",disabled:f,onClick:()=>j(async()=>{try{let b=await n(a);b.ok?h.c.success(b.message??"Scanned."):h.c.error(b.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:[f?(0,b.jsx)(c.f,{size:15,className:"animate-spin","aria-hidden":!0}):(0,b.jsx)(e,{size:15,"aria-hidden":!0}),f?`Scanning ${d}…`:`Scan all \xb7 ${d}`]})},"SyncNowButton",0,function(){let[a,d]=(0,g.useTransition)();return(0,b.jsxs)(i.K,{size:"sm",disabled:a,onClick:()=>d(async()=>{try{let a=await o();a.ok?h.c.success(a.message??"Synced."):h.c.error(a.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:[a?(0,b.jsx)(c.f,{size:15,className:"animate-spin","aria-hidden":!0}):(0,b.jsx)(f.f,{size:15,"aria-hidden":!0}),a?"Syncing…":"Sync now"]})},"TestModelButton",0,function({providerId:a,modelId:e,publicId:f}){let[j,k]=(0,g.useTransition)();return(0,b.jsx)(i.K,{size:"sm",variant:"ghost","aria-label":`Test ${f}`,title:`Test ${f}`,disabled:j,onClick:()=>k(async()=>{try{let b=await p(a,e);b.ok?h.c.success(b.message??"Works."):h.c.error(b.error)}catch{h.c.error("Something went wrong. Try again.")}}),children:j?(0,b.jsx)(c.f,{size:15,className:"animate-spin","aria-hidden":!0}):(0,b.jsx)(d.f,{size:15,"aria-hidden":!0})})}],391737)}]})();
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_models_0ayzqn062pnv5._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[[471503,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call AdvisorNotesControls() from the server but AdvisorNotesControls is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/advisor-controls.tsx","AdvisorNotesControls");a.s(["AdvisorNotesControls",0,b])},333445,a=>{var b=a.i(471503);a.n(b)},743547,a=>{var b=a.i(211857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call AddModelIdForm() from the server but AddModelIdForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/manual-model-controls.tsx","AddModelIdForm"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call RemoveManualModelButton() from the server but RemoveManualModelButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/manual-model-controls.tsx","RemoveManualModelButton");a.s(["AddModelIdForm",0,c,"RemoveManualModelButton",0,d])},169489,a=>{var b=a.i(743547);a.n(b)},164548,a=>{var b=a.i(211857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call MakeDefaultButton() from the server but MakeDefaultButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","MakeDefaultButton"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call ModelSwitch() from the server but ModelSwitch is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","ModelSwitch"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call RefreshModelsButton() from the server but RefreshModelsButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","RefreshModelsButton"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call ScanAllButton() from the server but ScanAllButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","ScanAllButton"),g=(0,b.registerClientReference)(function(){throw Error("Attempted to call SyncNowButton() from the server but SyncNowButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","SyncNowButton"),h=(0,b.registerClientReference)(function(){throw Error("Attempted to call TestModelButton() from the server but TestModelButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","TestModelButton");a.s(["MakeDefaultButton",0,c,"ModelSwitch",0,d,"RefreshModelsButton",0,e,"ScanAllButton",0,f,"SyncNowButton",0,g,"TestModelButton",0,h])},552951,a=>{var b=a.i(164548);a.n(b)},17422,a=>{var b=a.i(907997),c=a.i(395936),d=a.i(803681),e=a.i(959581),f=a.i(791444),g=a.i(484458),h=a.i(916056),i=a.i(263972),j=a.i(393746),k=a.i(169489),l=a.i(552951),m=a.i(708636),n=a.i(912459),o=a.i(330863),p=a.i(964806),q=a.i(256961),r=a.i(86657),s=a.i(333445),t=a.i(75148),u=a.i(109307),v=a.i(463743);async function w(){let a=await (0,u.B)("owner");if(!a.ok)return(0,b.jsx)(t.f,{role:a.member.role});(0,v.f)();let w=new Date,[{rows:x,defaultModel:y,providers:z},A,B,C,D]=await Promise.all([(0,i.Y)(),(0,h.Q)(w),(0,o.J)().catch(()=>q.o),r.f.provider().catch(()=>null),(0,g.b)().catch(()=>null)]),E=z.filter(a=>"custom"===a.kind),F=x.map(a=>{let c=a.publicId===y,e=a.enabled&&a.providerEnabled?"ok":"off",g=a.pending&&!a.lastTest?{tone:"none",text:"waiting for the sync's test"}:function(a,b){if(!a)return{tone:"none",text:"never tested"};let c=(0,n.L)(new Date(a.at),b);return a.ok?{tone:"ok",text:`ok \xb7 ${(a.ms/1e3).toFixed(1)} s \xb7 ${c}`}:{tone:"err",text:`${a.error??"failed"} \xb7 ${c}`}}(a.lastTest,w);return{key:`${a.providerId}/${a.modelId}`,state:e,tags:"ok"===g.tone?["working"]:[],text:`${a.publicId} ${a.upstream} ${a.providerName}`,row:(0,b.jsxs)("tr",{"data-state":e,className:f.C,children:[(0,b.jsxs)("td",{className:f.z,children:[(0,b.jsx)("b",{className:"font-mono text-[13px] font-medium",children:a.publicId}),c&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"Default"})]}),a.manual&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"manual"})]}),a.removed&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsxs)(d.E,{children:["removed in ",a.providerName]})]}),!a.removed&&(0,m.a)(a,w)&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"new"})]}),a.manualOff&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"off by hand"})]}),(0,b.jsx)("div",{className:"font-mono text-xs text-ink-faint",children:a.upstream})]}),(0,b.jsxs)("td",{className:f.z,children:[a.providerName,!a.providerEnabled&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"Connection off"})]})]}),(0,b.jsx)("td",{className:`${f.z} font-mono`,children:(0,j.a)(a.ctx)}),(0,b.jsx)("td",{className:`${f.z} font-mono`,children:(0,j.a)(a.out)}),(0,b.jsxs)("td",{className:`${f.z} ${f.M}`,children:[(0,b.jsxs)("span",{className:`text-[12.5px] ${"ok"===g.tone?"text-ok":"err"===g.tone?"text-err":"text-ink-faint"}`,children:["ok"===g.tone?"✓ ":"err"===g.tone?"✗ ":"",g.text]}),a.providerEnabled&&!a.removed&&(0,b.jsx)(l.TestModelButton,{providerId:a.providerId,modelId:a.modelId,publicId:a.publicId})]}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(l.ModelSwitch,{providerId:a.providerId,modelId:a.modelId,publicId:a.publicId,enabled:a.enabled,disabled:!a.providerEnabled||a.removed})}),(0,b.jsxs)("td",{className:`${f.z} ${f.M}`,children:[!c&&a.enabled&&a.providerEnabled?(0,b.jsx)(l.MakeDefaultButton,{publicId:a.publicId}):null,a.manual&&(0,b.jsx)(k.RemoveManualModelButton,{providerId:a.providerId,modelId:a.modelId,publicId:a.publicId})]})]})}});return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Models"}],title:"Models",sub:"Listed by each connected provider (its /models). Model ids are provider/model; a bare id goes to the default provider. Turn a model off and the gateway answers 400 model_not_enabled.",actions:(0,b.jsx)(l.RefreshModelsButton,{})}),C&&(0,b.jsxs)(d.N,{title:"Advisor notes",meta:"07:00 and 19:00 WIB · your provider",children:[(0,b.jsxs)("p",{className:"m-0 mb-3 text-[13px] text-ink-soft",children:[p.f?`Short notes for ${p.f} and up to 3 apps that need attention`:"Short notes for up to 3 apps that need attention",", written from scrubbed console data. They show with the other AI notes."]}),(0,b.jsx)(s.AdvisorNotesControls,{enabled:B.enabled,model:B.model,defaultLabel:C.model,models:x.filter(a=>a.enabled&&a.providerEnabled).map(a=>a.publicId)})]}),"none"!==A&&(0,b.jsx)(h.C,{view:A,now:w}),(0,b.jsx)("h2",{className:"m-0 mt-2 text-[13px] font-medium uppercase tracking-wide text-ink-soft",children:"Providers · Bring your own key"}),(0,b.jsx)(d.N,{flush:!0,children:0===F.length?(0,b.jsx)(d.k,{title:"No models yet",action:(0,b.jsx)(c.default,{href:"/ai/providers",className:(0,d.R)({size:"sm"}),children:"Bring your own key"}),children:"Connect a provider and its model list appears here."}):(0,b.jsxs)(b.Fragment,{children:[g.S.modelSync&&E.some(a=>a.enabled)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2 border-b border-line px-[18px] py-3 max-[720px]:px-3.5",children:[(0,b.jsx)("span",{className:"font-mono text-[12.5px] text-ink-soft",children:D?(0,m.i)(D,w):"Auto-sync: on · status unavailable"}),D?.error&&(0,b.jsxs)("span",{className:"text-[12.5px] text-err",children:["Last run: ",D.error]}),(0,b.jsx)("span",{className:"ml-auto max-[720px]:ml-0",children:(0,b.jsx)(l.SyncNowButton,{})})]}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2 px-[18px] pt-3.5 max-[720px]:px-3.5",children:z.filter(a=>a.enabled).map(a=>(0,b.jsx)(l.ScanAllButton,{providerId:a.id,name:a.name},a.id))}),(0,b.jsx)(e.ListFilter,{placeholder:"Filter models",states:[["ok","On"],["off","Off"]],chips:[["working","Working only"]],head:["Model id","Provider","Context","Max output","Test","Enabled",""],rows:F})]})}),E.length>0&&(0,b.jsx)(d.N,{title:"Custom servers",children:(0,b.jsx)("div",{className:"flex flex-col gap-4",children:E.map(a=>(0,b.jsx)(k.AddModelIdForm,{providerId:a.id,providerName:a.name},a.id))})}),(0,b.jsx)("p",{className:"m-0 text-[12.5px] text-ink-faint",children:"Gemini presets offer Google models only; a custom server offers every model it lists, plus model ids you add. Every 6 hours Watchbell syncs each custom server's list: new models are tested and turned on when they answer, models the server no longer lists are switched off and marked removed, and a model you switch off here stays off. The default model is what the console's own AI (Ask AI, summaries, Playground) uses when none is picked."})]})}a.s(["default",0,w,"maxDuration",0,60],17422)}],176032,function(a){a.n(a.i(17422))}];
1
+ module.exports=[[471503,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call AdvisorNotesControls() from the server but AdvisorNotesControls is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/advisor-controls.tsx","AdvisorNotesControls");a.s(["AdvisorNotesControls",0,b])},333445,a=>{var b=a.i(471503);a.n(b)},743547,a=>{var b=a.i(211857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call AddModelIdForm() from the server but AddModelIdForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/manual-model-controls.tsx","AddModelIdForm"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call RemoveManualModelButton() from the server but RemoveManualModelButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/manual-model-controls.tsx","RemoveManualModelButton");a.s(["AddModelIdForm",0,c,"RemoveManualModelButton",0,d])},169489,a=>{var b=a.i(743547);a.n(b)},164548,a=>{var b=a.i(211857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call MakeDefaultButton() from the server but MakeDefaultButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","MakeDefaultButton"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call ModelSwitch() from the server but ModelSwitch is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","ModelSwitch"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call RefreshModelsButton() from the server but RefreshModelsButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","RefreshModelsButton"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call ScanAllButton() from the server but ScanAllButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","ScanAllButton"),g=(0,b.registerClientReference)(function(){throw Error("Attempted to call SyncNowButton() from the server but SyncNowButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","SyncNowButton"),h=(0,b.registerClientReference)(function(){throw Error("Attempted to call TestModelButton() from the server but TestModelButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/models/model-controls.tsx","TestModelButton");a.s(["MakeDefaultButton",0,c,"ModelSwitch",0,d,"RefreshModelsButton",0,e,"ScanAllButton",0,f,"SyncNowButton",0,g,"TestModelButton",0,h])},552951,a=>{var b=a.i(164548);a.n(b)},17422,a=>{var b=a.i(907997),c=a.i(395936),d=a.i(803681),e=a.i(959581),f=a.i(791444),g=a.i(484458),h=a.i(916056),i=a.i(263972),j=a.i(393746),k=a.i(169489),l=a.i(552951),m=a.i(708636),n=a.i(912459),o=a.i(330863),p=a.i(964806),q=a.i(256961),r=a.i(86657),s=a.i(333445),t=a.i(75148),u=a.i(109307),v=a.i(245710),w=a.i(463743);async function x(){let a=await (0,u.B)("owner");if(!a.ok)return(0,b.jsx)(t.f,{role:a.member.role});(0,w.f)();let x=new Date,[{rows:y,defaultModel:z,providers:A},B,C,D,E]=await Promise.all([(0,i.Y)(),(0,h.Q)(x),(0,o.J)().catch(()=>q.o),r.f.provider().catch(()=>null),(0,g.b)().catch(()=>null)]),F=A.filter(a=>"custom"===a.kind),G=y.map(a=>{let c=a.publicId===z,e=a.enabled&&a.providerEnabled?"ok":"off",g=a.pending&&!a.lastTest?{tone:"none",text:"waiting for the sync's test"}:function(a,b){if(!a)return{tone:"none",text:"never tested"};let c=(0,n.L)(new Date(a.at),b);return a.ok?{tone:"ok",text:`ok \xb7 ${(a.ms/1e3).toFixed(1)} s \xb7 ${c}`}:{tone:"err",text:`${a.error??"failed"} \xb7 ${c}`}}(a.lastTest,x);return{key:`${a.providerId}/${a.modelId}`,state:e,tags:"ok"===g.tone?["working"]:[],text:`${a.publicId} ${a.upstream} ${a.providerName}`,row:(0,b.jsxs)("tr",{"data-state":e,className:f.C,children:[(0,b.jsxs)("td",{className:f.z,children:[(0,b.jsx)("b",{className:"font-mono text-[13px] font-medium",children:a.publicId}),c&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"Default"})]}),a.manual&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"manual"})]}),a.removed&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsxs)(d.E,{children:["removed in ",a.providerName]})]}),!a.removed&&(0,m.a)(a,x)&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"new"})]}),a.manualOff&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"off by hand"})]}),(0,b.jsx)("div",{className:"font-mono text-xs text-ink-faint",children:a.upstream})]}),(0,b.jsxs)("td",{className:f.z,children:[a.providerName,!a.providerEnabled&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)(d.E,{children:"Connection off"})]})]}),(0,b.jsx)("td",{className:`${f.z} font-mono`,children:(0,j.a)(a.ctx)}),(0,b.jsx)("td",{className:`${f.z} font-mono`,children:(0,j.a)(a.out)}),(0,b.jsxs)("td",{className:`${f.z} ${f.M}`,children:[(0,b.jsxs)("span",{className:`text-[12.5px] ${"ok"===g.tone?"text-ok":"err"===g.tone?"text-err":"text-ink-faint"}`,children:["ok"===g.tone?"✓ ":"err"===g.tone?"✗ ":"",g.text]}),a.providerEnabled&&!a.removed&&(0,b.jsx)(l.TestModelButton,{providerId:a.providerId,modelId:a.modelId,publicId:a.publicId})]}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(l.ModelSwitch,{providerId:a.providerId,modelId:a.modelId,publicId:a.publicId,enabled:a.enabled,disabled:!a.providerEnabled||a.removed})}),(0,b.jsxs)("td",{className:`${f.z} ${f.M}`,children:[!c&&a.enabled&&a.providerEnabled?(0,b.jsx)(l.MakeDefaultButton,{publicId:a.publicId}):null,a.manual&&(0,b.jsx)(k.RemoveManualModelButton,{providerId:a.providerId,modelId:a.modelId,publicId:a.publicId})]})]})}});return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Models"}],title:"Models",sub:"Listed by each connected provider (its /models). Model ids are provider/model; a bare id goes to the default provider. Turn a model off and the gateway answers 400 model_not_enabled.",actions:(0,b.jsx)(l.RefreshModelsButton,{})}),D&&(0,b.jsxs)(d.N,{title:"Advisor notes",meta:`07:00 and 19:00 ${(0,v.D)()} \xb7 your provider`,children:[(0,b.jsxs)("p",{className:"m-0 mb-3 text-[13px] text-ink-soft",children:[p.f?`Short notes for ${p.f} and up to 3 apps that need attention`:"Short notes for up to 3 apps that need attention",", written from scrubbed console data. They show with the other AI notes."]}),(0,b.jsx)(s.AdvisorNotesControls,{enabled:C.enabled,model:C.model,defaultLabel:D.model,models:y.filter(a=>a.enabled&&a.providerEnabled).map(a=>a.publicId)})]}),"none"!==B&&(0,b.jsx)(h.C,{view:B,now:x}),(0,b.jsx)("h2",{className:"m-0 mt-2 text-[13px] font-medium uppercase tracking-wide text-ink-soft",children:"Providers · Bring your own key"}),(0,b.jsx)(d.N,{flush:!0,children:0===G.length?(0,b.jsx)(d.k,{title:"No models yet",action:(0,b.jsx)(c.default,{href:"/ai/providers",className:(0,d.R)({size:"sm"}),children:"Bring your own key"}),children:"Connect a provider and its model list appears here."}):(0,b.jsxs)(b.Fragment,{children:[g.S.modelSync&&F.some(a=>a.enabled)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2 border-b border-line px-[18px] py-3 max-[720px]:px-3.5",children:[(0,b.jsx)("span",{className:"font-mono text-[12.5px] text-ink-soft",children:E?(0,m.i)(E,x):"Auto-sync: on · status unavailable"}),E?.error&&(0,b.jsxs)("span",{className:"text-[12.5px] text-err",children:["Last run: ",E.error]}),(0,b.jsx)("span",{className:"ml-auto max-[720px]:ml-0",children:(0,b.jsx)(l.SyncNowButton,{})})]}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2 px-[18px] pt-3.5 max-[720px]:px-3.5",children:A.filter(a=>a.enabled).map(a=>(0,b.jsx)(l.ScanAllButton,{providerId:a.id,name:a.name},a.id))}),(0,b.jsx)(e.ListFilter,{placeholder:"Filter models",states:[["ok","On"],["off","Off"]],chips:[["working","Working only"]],head:["Model id","Provider","Context","Max output","Test","Enabled",""],rows:G})]})}),F.length>0&&(0,b.jsx)(d.N,{title:"Custom servers",children:(0,b.jsx)("div",{className:"flex flex-col gap-4",children:F.map(a=>(0,b.jsx)(k.AddModelIdForm,{providerId:a.id,providerName:a.name},a.id))})}),(0,b.jsx)("p",{className:"m-0 text-[12.5px] text-ink-faint",children:"Gemini presets offer Google models only; a custom server offers every model it lists, plus model ids you add. Every 6 hours Watchbell syncs each custom server's list: new models are tested and turned on when they answer, models the server no longer lists are switched off and marked removed, and a model you switch off here stays off. The default model is what the console's own AI (Ask AI, summaries, Playground) uses when none is picked."})]})}a.s(["default",0,x,"maxDuration",0,60],17422)}],176032,function(a){a.n(a.i(17422))}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_models_0hla-5y3iresx._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[274974,a=>{"use strict";var b=a.i(187924),c=a.i(402699),d=a.i(282269),e=a.i(572131),f=a.i(619089),g=a.i(901615),h=a.i(368114),i=a.i(243881),j=a.i(405050);let k=(0,j.createServerReference)("40a6680d019d4f26e262b222626994b915d691201d",j.callServer,void 0,j.findSourceMapURL,"questionStatus");var l=a.i(295914);let m=g.T.hint,n=(a,b)=>{let c=a.replace(/\s+/g," ").trim();return c.length>b?`${c.slice(0,b-1)}…`:c},o=(0,j.createServerReference)("400dddd263bf43d944ff523494b0b7aa147695a145",j.callServer,void 0,j.findSourceMapURL,"playgroundSend");a.s(["PlaygroundView",0,function({models:a,defaultModel:j}){let[p,q]=(0,e.useState)(a.some(a=>a.id===j)?j:a[0]?.id??""),[r,s]=(0,e.useState)("plain"),[t,u]=(0,e.useState)("0.4"),[v,w]=(0,e.useState)("1024"),[x,y]=(0,e.useState)("You are Watchbell's assistant. Answer from the console data you are given. Say when the data doesn't cover the question."),[z,A]=(0,e.useState)(""),[B,C]=(0,e.useState)([]),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)(0),[J,K]=(0,e.useTransition)(),L=(0,e.useRef)(null),M="antigravity"===(a.find(a=>a.id===p)?.via??"provider"),N=J||null!==F,O=a.filter(a=>"provider"===a.via),P=a.filter(a=>"antigravity"===a.via);(0,e.useEffect)(()=>{L.current?.scrollTo({top:L.current.scrollHeight})},[B,J,F]),(0,e.useEffect)(()=>{if(!F)return;let a=!1,b=!1,c=b=>{!a&&(G(null),b&&E(b))},d=setInterval(()=>I(Date.now()),1e3),e=setInterval(async()=>{if(!b&&!a){if(Date.now()-F.startedAt>6e5)return c(g.T.giveUp);b=!0;try{let b=await k(F.id);if(a)return;if(!b.ok)return c(b.error);let d=b.data;if(d?.status==="answered"){let a=Math.max(1,Math.round((Date.now()-F.startedAt)/1e3));C(b=>[...b,{role:"assistant",content:d.answer?.trim()||g.T.emptyAnswer,md:!0,meta:g.T.answerMeta(d.model??F.model,a)}]),c(null)}else d?.status==="expired"&&c(g.T.expired)}catch{}finally{b=!1}}},3e3);return()=>{a=!0,clearInterval(d),clearInterval(e)}},[F]);let Q=()=>{let a=z.trim();if(!a||N||!p)return;let b=[...B,{role:"user",content:a}];if(C(b),A(""),E(null),M){let b;b=function(a,b,c=2e3){let d=b.trim(),e=a.slice(-4).map(a=>`Q: ${n(a.q,300)}
1
+ module.exports=[274974,a=>{"use strict";var b=a.i(187924),c=a.i(402699),d=a.i(282269),e=a.i(572131),f=a.i(619089),g=a.i(901615),h=a.i(368114),i=a.i(40878),j=a.i(405050);let k=(0,j.createServerReference)("400413de182c19933e1fabdd7230c56a4225d5d07e",j.callServer,void 0,j.findSourceMapURL,"questionStatus");var l=a.i(295914);a.i(147474);let m=g.T.hint,n=(a,b)=>{let c=a.replace(/\s+/g," ").trim();return c.length>b?`${c.slice(0,b-1)}…`:c},o=(0,j.createServerReference)("4071a0b909bc53cf1288536a7308fe98057d065ee7",j.callServer,void 0,j.findSourceMapURL,"playgroundSend");a.s(["PlaygroundView",0,function({models:a,defaultModel:j}){let[p,q]=(0,e.useState)(a.some(a=>a.id===j)?j:a[0]?.id??""),[r,s]=(0,e.useState)("plain"),[t,u]=(0,e.useState)("0.4"),[v,w]=(0,e.useState)("1024"),[x,y]=(0,e.useState)("You are Watchbell's assistant. Answer from the console data you are given. Say when the data doesn't cover the question."),[z,A]=(0,e.useState)(""),[B,C]=(0,e.useState)([]),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)(0),[J,K]=(0,e.useTransition)(),L=(0,e.useRef)(null),M="antigravity"===(a.find(a=>a.id===p)?.via??"provider"),N=J||null!==F,O=a.filter(a=>"provider"===a.via),P=a.filter(a=>"antigravity"===a.via);(0,e.useEffect)(()=>{L.current?.scrollTo({top:L.current.scrollHeight})},[B,J,F]),(0,e.useEffect)(()=>{if(!F)return;let a=!1,b=!1,c=b=>{!a&&(G(null),b&&E(b))},d=setInterval(()=>I(Date.now()),1e3),e=setInterval(async()=>{if(!b&&!a){if(Date.now()-F.startedAt>6e5)return c(g.T.giveUp);b=!0;try{let b=await k(F.id);if(a)return;if(!b.ok)return c(b.error);let d=b.data;if(d?.status==="answered"){let a=Math.max(1,Math.round((Date.now()-F.startedAt)/1e3));C(b=>[...b,{role:"assistant",content:d.answer?.trim()||g.T.emptyAnswer,md:!0,meta:g.T.answerMeta(d.model??F.model,a)}]),c(null)}else d?.status==="expired"&&c(g.T.expired)}catch{}finally{b=!1}}},3e3);return()=>{a=!0,clearInterval(d),clearInterval(e)}},[F]);let Q=()=>{let a=z.trim();if(!a||N||!p)return;let b=[...B,{role:"user",content:a}];if(C(b),A(""),E(null),M){let b;b=function(a,b,c=2e3){let d=b.trim(),e=a.slice(-4).map(a=>`Q: ${n(a.q,300)}
2
2
  A: ${n(a.a,600)}`);for(;e.length>0;){let a=`Earlier in this chat:
3
3
  ${e.join("\n")}
4
4
 
@@ -1,3 +1,3 @@
1
- module.exports=[[25900,a=>{var b=a.i(907997),c=a.i(395936),d=a.i(803681),e=a.i(686251),f=a.i(791444),g=a.i(711672),h=a.i(931256),i=a.i(104198),j=a.i(776005),k=a.i(938123),l=a.i(56052),m=a.i(996432);let n={gemini:k.f,cloudflare:l.f,custom:m.f};var o=a.i(75148),p=a.i(484458),q=a.i(462820),r=a.i(109307),s=a.i(371289);let t=()=>"selfhost"===(0,s.c)();function u({c:a}){let c=n[a.kind],d=a.models.filter(a=>a.enabled).length,g=null!==a.lastTestStatus&&200!==a.lastTestStatus?a.lastError:null;return(0,b.jsxs)("tr",{className:f.C,children:[(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,b.jsx)("span",{className:"grid size-[26px] place-items-center rounded-md bg-sunken text-ink-soft",children:(0,b.jsx)(c,{size:15,"aria-hidden":!0})}),(0,b.jsxs)("span",{children:[(0,b.jsx)("b",{className:"font-medium",children:a.name}),a.isDefault&&(0,b.jsx)("span",{className:"ml-1.5 rounded-[5px] border border-line bg-surface-2 px-1.5 text-xs text-ink-soft",children:"Default"}),(0,b.jsx)("div",{className:"max-w-[360px] truncate font-mono text-[11.5px] text-ink-faint",children:a.baseUrl})]})]})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)("span",{className:"text-[12.5px] text-ink-soft",children:a.keyHint?(0,b.jsxs)(b.Fragment,{children:[h.M[a.kind].keyLabel," ",(0,b.jsx)("span",{className:"font-mono",children:a.keyHint})]}):q.Y.noKey})}),(0,b.jsxs)("td",{className:`${f.z} font-mono`,children:[a.models.length," · ",d," on"]}),(0,b.jsx)("td",{className:`${f.z} text-ink-soft`,children:function(a){if(!a.lastTestAt)return"—";let b=a.lastTestAt.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",timeZone:"Asia/Jakarta"});return`${b} \xb7 ${200===a.lastTestStatus?"ok":a.lastTestStatus??"—"}`}(a)}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(i.EnabledSwitch,{id:a.id,on:a.enabled,name:a.name})}),(0,b.jsx)("td",{className:`${f.z} ${g?f.M:""}`,children:g?(0,b.jsx)(e.F,{state:"err",children:g}):a.enabled?(0,b.jsx)(e.F,{state:"ok",children:"Connected"}):(0,b.jsx)(e.F,{state:"off",children:"Off"})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)(i.TestProviderButton,{id:a.id}),(0,b.jsx)(j.ProviderDialog,{kind:a.kind,replace:{id:a.id,name:a.name,baseUrl:a.baseUrl},primary:null!==g,selfhost:t()}),(0,b.jsx)(i.ProviderMenu,{id:a.id,name:a.name,isDefault:a.isDefault})]})})]})}function v({kind:a}){let c=h.M[a],d=n[a];return(0,b.jsxs)("tr",{className:f.C,children:[(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,b.jsx)("span",{className:"grid size-[26px] place-items-center rounded-md bg-sunken text-ink-soft",children:(0,b.jsx)(d,{size:15,"aria-hidden":!0})}),(0,b.jsxs)("span",{children:[(0,b.jsx)("b",{className:"font-medium",children:c.name}),(0,b.jsx)("div",{className:"font-mono text-[11.5px] text-ink-faint",children:"cloudflare"===a?c.baseUrl({apiKey:"",accountId:"{account_id}"}):"custom"===a?"Your base URL (…/v1)":c.baseUrl({apiKey:""})})]})]})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("span",{className:"text-ink-faint",children:[c.keyLabel,"cloudflare"===a?" + account ID":"custom"===a?" + base URL":""]})}),(0,b.jsx)("td",{className:`${f.z} font-mono`,children:"—"}),(0,b.jsx)("td",{className:`${f.z} text-ink-soft`,children:"—"}),(0,b.jsx)("td",{className:f.z}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(e.F,{state:"off",children:"Not connected"})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(j.ProviderDialog,{kind:a,primary:!0,selfhost:t()})})]})}let w=["Provider","Key","Models","Last test","Enabled","Status",""];async function x(){let a=await (0,r.B)("owner");if(!a.ok)return(0,b.jsx)(o.f,{role:a.member.role});let[e,k]=await Promise.all([(0,g.B)(),(0,p.y)().then(({report:a})=>(0,p.U)(a,new Date)).catch(()=>!1)]),l=k?{title:q.C.infoAgentTitle,body:q.C.infoAgentBody}:{title:"No provider connected",body:q.C.infoBody},m=e.filter(a=>"custom"===a.kind),n=e.find(a=>a.isDefault)??null,s=e.some(a=>a.enabled);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Bring your own key"}],title:"Bring your own key",sub:"OpenAI-compatible provider connections, Google models only. One is the default; a console key can be pinned to another provider or model. Keys are encrypted with AES-256-GCM, never sent to the browser, never logged. Watchbell never rotates between accounts."}),!s&&(0,b.jsx)(d.M,{tone:"info",title:l.title,children:l.body}),(0,b.jsxs)(d.N,{title:"Provider connections",meta:"OpenAI-compatible · one account per provider",flush:!0,children:[(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:f.o,children:[(0,b.jsx)(f.U,{head:w}),(0,b.jsx)("tbody",{children:["gemini","cloudflare"].map(a=>{let c=e.find(b=>b.kind===a);return c?(0,b.jsx)(u,{c:c},c.id):(0,b.jsx)(v,{kind:a},a)})})]})}),(0,b.jsxs)("details",{className:"border-t border-line px-[18px] py-2.5",open:m.length>0,children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-[13px] text-ink-soft",children:["Advanced: custom OpenAI-compatible server (",m.length," of ",g.Y,")"]}),(0,b.jsxs)("p",{className:"mt-1.5 text-[13px] text-ink-soft",children:[h.M.custom.where.text," Models the server doesn't list can be added on ",(0,b.jsx)(c.default,{href:"/ai/models",children:"Models"}),"."]}),m.length>0&&(0,b.jsx)("div",{className:"-mx-[18px] mt-2 overflow-x-auto",children:(0,b.jsxs)("table",{className:f.o,children:[(0,b.jsx)(f.U,{head:w}),(0,b.jsx)("tbody",{children:m.map(a=>(0,b.jsx)(u,{c:a},a.id))})]})}),m.length<g.Y&&(0,b.jsx)("div",{className:"mt-2",children:(0,b.jsx)(j.ProviderDialog,{kind:"custom",label:"Connect a custom server",selfhost:t()})})]})]}),(0,b.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,b.jsx)(d.N,{title:"Routing",children:(0,b.jsxs)("dl",{className:"grid grid-cols-[130px_1fr] gap-x-3 gap-y-2 text-[13px]",children:[(0,b.jsx)("dt",{className:"text-ink-soft",children:"Default provider"}),(0,b.jsx)("dd",{children:(0,b.jsx)(i.DefaultProviderSelect,{options:e.map(a=>({id:a.id,name:a.name})),current:n?.id??null})}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Model ids"}),(0,b.jsxs)("dd",{children:[(0,b.jsx)("span",{className:"font-mono",children:"provider/model"})," goes to that provider. A bare id goes to the default provider."]}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Per key"}),(0,b.jsx)("dd",{children:"A console key can be pinned to a provider or one model (API keys › Change routing)."}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Models"}),(0,b.jsx)("dd",{children:q.Y.modelsLine}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Failover"}),(0,b.jsx)("dd",{children:"None. A provider error goes back to the caller as is; Watchbell never retries on another account."})]})}),(0,b.jsx)(d.N,{title:"How keys are kept",children:(0,b.jsxs)("dl",{className:"grid grid-cols-[130px_1fr] gap-x-3 gap-y-2 text-[13px]",children:[(0,b.jsx)("dt",{className:"text-ink-soft",children:"Stored"}),(0,b.jsx)("dd",{children:"Encrypted (AES-256-GCM, with key version) in the console's database. The browser sees only the last 3 characters."}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Sent to"}),(0,b.jsx)("dd",{children:"Only that provider's base URL, from the server."}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Never"}),(0,b.jsx)("dd",{children:"Consumer sign-ins, OAuth sessions, borrowed accounts, rotating keys for more quota."})]})})]})]})}a.s(["default",0,x],25900)},892810,a=>{var b=a.i(211857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call DefaultProviderSelect() from the server but DefaultProviderSelect is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","DefaultProviderSelect"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call EnabledSwitch() from the server but EnabledSwitch is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","EnabledSwitch"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call ProviderMenu() from the server but ProviderMenu is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","ProviderMenu"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TestProviderButton() from the server but TestProviderButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","TestProviderButton");a.s(["DefaultProviderSelect",0,c,"EnabledSwitch",0,d,"ProviderMenu",0,e,"TestProviderButton",0,f])},104198,a=>{var b=a.i(892810);a.n(b)},419380,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call ProviderDialog() from the server but ProviderDialog is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-dialog.tsx","ProviderDialog");a.s(["ProviderDialog",0,b])},776005,a=>{var b=a.i(419380);a.n(b)}],762404,function(a){a.n(a.i(25900))}];
1
+ module.exports=[[25900,a=>{var b=a.i(907997),c=a.i(395936),d=a.i(803681),e=a.i(686251),f=a.i(791444),g=a.i(711672),h=a.i(931256),i=a.i(104198),j=a.i(776005),k=a.i(938123),l=a.i(56052),m=a.i(996432);let n={gemini:k.f,cloudflare:l.f,custom:m.f};var o=a.i(75148),p=a.i(484458),q=a.i(462820),r=a.i(109307),s=a.i(371289),t=a.i(245710);let u=()=>"selfhost"===(0,s.c)();function v({c:a}){let c=n[a.kind],d=a.models.filter(a=>a.enabled).length,g=null!==a.lastTestStatus&&200!==a.lastTestStatus?a.lastError:null;return(0,b.jsxs)("tr",{className:f.C,children:[(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,b.jsx)("span",{className:"grid size-[26px] place-items-center rounded-md bg-sunken text-ink-soft",children:(0,b.jsx)(c,{size:15,"aria-hidden":!0})}),(0,b.jsxs)("span",{children:[(0,b.jsx)("b",{className:"font-medium",children:a.name}),a.isDefault&&(0,b.jsx)("span",{className:"ml-1.5 rounded-[5px] border border-line bg-surface-2 px-1.5 text-xs text-ink-soft",children:"Default"}),(0,b.jsx)("div",{className:"max-w-[360px] truncate font-mono text-[11.5px] text-ink-faint",children:a.baseUrl})]})]})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)("span",{className:"text-[12.5px] text-ink-soft",children:a.keyHint?(0,b.jsxs)(b.Fragment,{children:[h.M[a.kind].keyLabel," ",(0,b.jsx)("span",{className:"font-mono",children:a.keyHint})]}):q.Y.noKey})}),(0,b.jsxs)("td",{className:`${f.z} font-mono`,children:[a.models.length," · ",d," on"]}),(0,b.jsx)("td",{className:`${f.z} text-ink-soft`,children:function(a){if(!a.lastTestAt)return"—";let b=(0,t.U)(a.lastTestAt);return`${b} \xb7 ${200===a.lastTestStatus?"ok":a.lastTestStatus??"—"}`}(a)}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(i.EnabledSwitch,{id:a.id,on:a.enabled,name:a.name})}),(0,b.jsx)("td",{className:`${f.z} ${g?f.M:""}`,children:g?(0,b.jsx)(e.F,{state:"err",children:g}):a.enabled?(0,b.jsx)(e.F,{state:"ok",children:"Connected"}):(0,b.jsx)(e.F,{state:"off",children:"Off"})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)(i.TestProviderButton,{id:a.id}),(0,b.jsx)(j.ProviderDialog,{kind:a.kind,replace:{id:a.id,name:a.name,baseUrl:a.baseUrl},primary:null!==g,selfhost:u()}),(0,b.jsx)(i.ProviderMenu,{id:a.id,name:a.name,isDefault:a.isDefault})]})})]})}function w({kind:a}){let c=h.M[a],d=n[a];return(0,b.jsxs)("tr",{className:f.C,children:[(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,b.jsx)("span",{className:"grid size-[26px] place-items-center rounded-md bg-sunken text-ink-soft",children:(0,b.jsx)(d,{size:15,"aria-hidden":!0})}),(0,b.jsxs)("span",{children:[(0,b.jsx)("b",{className:"font-medium",children:c.name}),(0,b.jsx)("div",{className:"font-mono text-[11.5px] text-ink-faint",children:"cloudflare"===a?c.baseUrl({apiKey:"",accountId:"{account_id}"}):"custom"===a?"Your base URL (…/v1)":c.baseUrl({apiKey:""})})]})]})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsxs)("span",{className:"text-ink-faint",children:[c.keyLabel,"cloudflare"===a?" + account ID":"custom"===a?" + base URL":""]})}),(0,b.jsx)("td",{className:`${f.z} font-mono`,children:"—"}),(0,b.jsx)("td",{className:`${f.z} text-ink-soft`,children:"—"}),(0,b.jsx)("td",{className:f.z}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(e.F,{state:"off",children:"Not connected"})}),(0,b.jsx)("td",{className:f.z,children:(0,b.jsx)(j.ProviderDialog,{kind:a,primary:!0,selfhost:u()})})]})}let x=["Provider","Key","Models","Last test","Enabled","Status",""];async function y(){let a=await (0,r.B)("owner");if(!a.ok)return(0,b.jsx)(o.f,{role:a.member.role});let[e,k]=await Promise.all([(0,g.B)(),(0,p.y)().then(({report:a})=>(0,p.U)(a,new Date)).catch(()=>!1)]),l=k?{title:q.C.infoAgentTitle,body:q.C.infoAgentBody}:{title:"No provider connected",body:q.C.infoBody},m=e.filter(a=>"custom"===a.kind),n=e.find(a=>a.isDefault)??null,s=e.some(a=>a.enabled);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Bring your own key"}],title:"Bring your own key",sub:"OpenAI-compatible provider connections, Google models only. One is the default; a console key can be pinned to another provider or model. Keys are encrypted with AES-256-GCM, never sent to the browser, never logged. Watchbell never rotates between accounts."}),!s&&(0,b.jsx)(d.M,{tone:"info",title:l.title,children:l.body}),(0,b.jsxs)(d.N,{title:"Provider connections",meta:"OpenAI-compatible · one account per provider",flush:!0,children:[(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:f.o,children:[(0,b.jsx)(f.U,{head:x}),(0,b.jsx)("tbody",{children:["gemini","cloudflare"].map(a=>{let c=e.find(b=>b.kind===a);return c?(0,b.jsx)(v,{c:c},c.id):(0,b.jsx)(w,{kind:a},a)})})]})}),(0,b.jsxs)("details",{className:"border-t border-line px-[18px] py-2.5",open:m.length>0,children:[(0,b.jsxs)("summary",{className:"cursor-pointer text-[13px] text-ink-soft",children:["Advanced: custom OpenAI-compatible server (",m.length," of ",g.Y,")"]}),(0,b.jsxs)("p",{className:"mt-1.5 text-[13px] text-ink-soft",children:[h.M.custom.where.text," Models the server doesn't list can be added on ",(0,b.jsx)(c.default,{href:"/ai/models",children:"Models"}),"."]}),m.length>0&&(0,b.jsx)("div",{className:"-mx-[18px] mt-2 overflow-x-auto",children:(0,b.jsxs)("table",{className:f.o,children:[(0,b.jsx)(f.U,{head:x}),(0,b.jsx)("tbody",{children:m.map(a=>(0,b.jsx)(v,{c:a},a.id))})]})}),m.length<g.Y&&(0,b.jsx)("div",{className:"mt-2",children:(0,b.jsx)(j.ProviderDialog,{kind:"custom",label:"Connect a custom server",selfhost:u()})})]})]}),(0,b.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,b.jsx)(d.N,{title:"Routing",children:(0,b.jsxs)("dl",{className:"grid grid-cols-[130px_1fr] gap-x-3 gap-y-2 text-[13px]",children:[(0,b.jsx)("dt",{className:"text-ink-soft",children:"Default provider"}),(0,b.jsx)("dd",{children:(0,b.jsx)(i.DefaultProviderSelect,{options:e.map(a=>({id:a.id,name:a.name})),current:n?.id??null})}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Model ids"}),(0,b.jsxs)("dd",{children:[(0,b.jsx)("span",{className:"font-mono",children:"provider/model"})," goes to that provider. A bare id goes to the default provider."]}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Per key"}),(0,b.jsx)("dd",{children:"A console key can be pinned to a provider or one model (API keys › Change routing)."}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Models"}),(0,b.jsx)("dd",{children:q.Y.modelsLine}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Failover"}),(0,b.jsx)("dd",{children:"None. A provider error goes back to the caller as is; Watchbell never retries on another account."})]})}),(0,b.jsx)(d.N,{title:"How keys are kept",children:(0,b.jsxs)("dl",{className:"grid grid-cols-[130px_1fr] gap-x-3 gap-y-2 text-[13px]",children:[(0,b.jsx)("dt",{className:"text-ink-soft",children:"Stored"}),(0,b.jsx)("dd",{children:"Encrypted (AES-256-GCM, with key version) in the console's database. The browser sees only the last 3 characters."}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Sent to"}),(0,b.jsx)("dd",{children:"Only that provider's base URL, from the server."}),(0,b.jsx)("dt",{className:"text-ink-soft",children:"Never"}),(0,b.jsx)("dd",{children:"Consumer sign-ins, OAuth sessions, borrowed accounts, rotating keys for more quota."})]})})]})]})}a.s(["default",0,y],25900)},892810,a=>{var b=a.i(211857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call DefaultProviderSelect() from the server but DefaultProviderSelect is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","DefaultProviderSelect"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call EnabledSwitch() from the server but EnabledSwitch is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","EnabledSwitch"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call ProviderMenu() from the server but ProviderMenu is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","ProviderMenu"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TestProviderButton() from the server but TestProviderButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-actions.tsx","TestProviderButton");a.s(["DefaultProviderSelect",0,c,"EnabledSwitch",0,d,"ProviderMenu",0,e,"TestProviderButton",0,f])},104198,a=>{var b=a.i(892810);a.n(b)},419380,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call ProviderDialog() from the server but ProviderDialog is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/providers/provider-dialog.tsx","ProviderDialog");a.s(["ProviderDialog",0,b])},776005,a=>{var b=a.i(419380);a.n(b)}],762404,function(a){a.n(a.i(25900))}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_providers_0jamu-nm6x-dh._.js.map
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[492768,a=>{var b=a.i(187924),c=a.i(335371),d=a.i(572131),e=a.i(823292),f=a.i(611619),g=a.i(619089),h=a.i(188406),i=a.i(405050);let j=(0,i.createServerReference)("409b35735850969b1e607e477bd97b020233144809",i.callServer,void 0,i.findSourceMapURL,"makeDefaultProvider"),k=(0,i.createServerReference)("40d3a2343578d87ad648a3fe90dee744f04d55c12a",i.callServer,void 0,i.findSourceMapURL,"removeProvider"),l=(0,i.createServerReference)("6015c50d3dd3dfff01cdd9def5c289771ea9feba6a",i.callServer,void 0,i.findSourceMapURL,"setProviderEnabled"),m=(0,i.createServerReference)("40f4e48487161a41402c8b992a130571596c967813",i.callServer,void 0,i.findSourceMapURL,"testProvider");function n(a){a.ok?e.c.success(a.message??"Done."):e.c.error(a.error??"Something went wrong.")}a.s(["DefaultProviderSelect",0,function({options:a,current:c}){let[e,f]=(0,d.useTransition)(),[h,i]=(0,d.useState)(c??"");return 0===a.length?(0,b.jsx)("span",{className:"text-ink-faint",children:"No provider connected"}):(0,b.jsxs)("select",{"aria-label":"Default provider",className:`${g.S} w-auto`,value:h,disabled:e,onChange:a=>{let b=a.target.value;i(b),b&&f(async()=>n(await j(b)))},children:[!c&&(0,b.jsx)("option",{value:"",children:"None yet"}),a.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]})},"EnabledSwitch",0,function({id:a,on:c,name:e}){let[f,g]=(0,d.useTransition)(),[h,i]=(0,d.useState)(c);return(0,b.jsxs)("label",{className:"relative inline-flex cursor-pointer items-center",title:`${e}: ${h?"on":"off"}`,children:[(0,b.jsx)("input",{type:"checkbox",role:"switch",className:"peer sr-only",checked:h,disabled:f,"aria-label":`${e} enabled`,onChange:b=>{let c=b.target.checked;i(c),g(async()=>{let b=await l(a,c);b.ok||i(!c),n(b)})}}),(0,b.jsx)("span",{className:"h-5 w-9 rounded-full bg-line-strong transition-colors peer-checked:bg-brand peer-focus-visible:ring-2 peer-focus-visible:ring-brand/40 peer-disabled:opacity-60"}),(0,b.jsx)("span",{className:"absolute left-0.5 top-0.5 size-4 rounded-full bg-surface transition-transform peer-checked:translate-x-4"})]})},"ProviderMenu",0,function({id:a,name:c,isDefault:e}){let[g,i]=(0,d.useState)(!1);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.RowMenu,{label:`Actions for ${c}`,items:[...e?[]:[{label:"Make default",onSelect:async()=>n(await j(a))},"---"],{label:"Remove",danger:!0,onSelect:()=>i(!0)}]}),(0,b.jsx)(f.f,{open:g,onOpenChange:i,title:`Remove ${c}?`,body:"Its encrypted key is deleted. Calls for its models answer 503 until you connect a provider again. Nothing changes at the provider.",cta:"Remove",danger:!0,onConfirm:async()=>{let b=await k(a);return{ok:b.ok,message:(b.ok?b.message:b.error)??""}}})]})},"TestProviderButton",0,function({id:a}){let[e,f]=(0,d.useTransition)();return(0,b.jsxs)(g.K,{size:"sm",disabled:e,onClick:()=>f(async()=>n(await m(a))),children:[(0,b.jsx)(c.f,{size:15,"aria-hidden":!0}),e?"Testing…":"Test"]})}],492768)},36105,a=>{var b=a.i(187924),c=a.i(834295),d=a.i(572131),e=a.i(823292),f=a.i(619089),g=a.i(814574),h=a.i(405050);let i=(0,h.createServerReference)("6044af7125f48d4b7635fd244af712fa9580e0844b",h.callServer,void 0,h.findSourceMapURL,"connectProvider"),j=(0,h.createServerReference)("6062d290de9b6e11a3ec76f0e3129b794438898ff7",h.callServer,void 0,h.findSourceMapURL,"replaceProviderKey");var k=a.i(901615);let l={gemini:{name:"Google Gemini",baseUrl:()=>"https://generativelanguage.googleapis.com/v1beta/openai",secretFields:["apiKey"],modelsPath:"/models",listModels:"gemini-native",quotaFrom:"own",auth:"x-goog-api-key",streamUsage:!0,advanced:!1,keyLabel:"AI Studio API key",where:{url:"https://aistudio.google.com/apikey",text:"Create a key (it starts with AQ. or AIza). If Google says the project is restricted or denied, use a key from another Google project or account."}},cloudflare:{name:"Cloudflare Workers AI",baseUrl:a=>`https://api.cloudflare.com/client/v4/accounts/${a.accountId??""}/ai/v1`,secretFields:["accountId","apiKey"],modelsPath:"/models/search",listModels:"cloudflare-search",quotaFrom:"own",auth:"bearer",streamUsage:!0,advanced:!1,keyLabel:"API token",where:{url:"https://dash.cloudflare.com/profile/api-tokens",text:"Create a token with Workers AI: Read. The account ID is on the Workers AI page. Only Google's Gemma models are offered."}},custom:{name:"Custom OpenAI-compatible",baseUrl:a=>(a.baseUrl??"").replace(/\/+$/,""),secretFields:["baseUrl","apiKey"],modelsPath:"/models",listModels:"openai",quotaFrom:"headers",auth:"bearer",streamUsage:!0,advanced:!0,keyLabel:"API key",where:{url:null,text:"Any HTTPS server that speaks the OpenAI chat completions API and answers GET /models. Every model the server lists is offered; switch any off on Models."}}};k.X.localUrl;var m=a.i(449862);let n=(0,m.f)("outline","brand-google","BrandGoogle",[["path",{d:"M20.945 11a9 9 0 1 1 -3.284 -5.997l-2.655 2.392a5.5 5.5 0 1 0 2.119 6.605h-4.125v-3h7.945",key:"svg-0"}]]);var o=a.i(786581);let p=(0,m.f)("outline","plug","Plug",[["path",{d:"M9.785 6l8.215 8.215l-2.054 2.054a5.81 5.81 0 1 1 -8.215 -8.215l2.054 -2.054",key:"svg-0"}],["path",{d:"M4 20l3.5 -3.5",key:"svg-1"}],["path",{d:"M15 4l-3.5 3.5",key:"svg-2"}],["path",{d:"M20 9l-3.5 3.5",key:"svg-3"}]]),q={gemini:n,cloudflare:o.f,custom:p},r={gemini:"AQ.… or AIza…",cloudflare:"Paste the API token",custom:"Paste the API key"};a.s(["ProviderDialog",0,function({kind:a,replace:h,primary:m,label:n,selfhost:o=!1}){let p=l[a],s=q[a],[t,u]=(0,d.useState)(!1),[v,w]=(0,d.useTransition)(),[x,y]=(0,d.useState)(""),[z,A]=(0,d.useState)(""),[B,C]=(0,d.useState)(""),[D,E]=(0,d.useState)(h?.baseUrl??""),[F,G]=(0,d.useState)(!1),[H,I]=(0,d.useState)({}),[J,K]=(0,d.useState)(null),[L,M]=(0,d.useState)(null);function N(a){u(a),a||(M(null),y(""),A(""),C(""),E(h?.baseUrl??""),G(!1),I({}),K(null))}let O=h?`Replace key \xb7 ${h.name}`:`Connect ${p.name}`;return(0,b.jsxs)(g.N,{open:t,onOpenChange:N,children:[(0,b.jsx)(g.a,{className:(0,f.R)({size:"sm",variant:m?"primary":"secondary"}),children:n??(h?"Replace":"Connect")}),(0,b.jsxs)(g.d,{className:"max-w-[560px] gap-0 p-0 sm:max-w-[560px]",children:[(0,b.jsxs)("div",{className:"flex items-start gap-3 px-[18px] pb-2 pt-4",children:[(0,b.jsx)("span",{className:"grid size-9 shrink-0 place-items-center rounded-lg bg-sunken text-ink-soft",children:(0,b.jsx)(s,{size:19})}),(0,b.jsxs)("div",{children:[(0,b.jsx)(g.F,{className:"text-base",children:O}),(0,b.jsxs)(g.C,{className:"mt-0.5 text-[13px] text-ink-soft",children:[p.keyLabel,"cloudflare"===a?" and account ID":""]})]})]}),(0,b.jsxs)("div",{className:"px-[18px] pt-1.5",children:[(0,b.jsxs)("p",{className:"mb-3 text-[13px] text-ink-soft",children:[p.where.url&&(0,b.jsxs)(b.Fragment,{children:["Open ",(0,b.jsxs)("a",{href:p.where.url,target:"_blank",rel:"noopener noreferrer",children:[p.where.url.replace("https://","")," ",(0,b.jsx)(c.f,{size:12,className:"inline","aria-hidden":!0})]}),". "]}),p.where.text," Watchbell lists the models and makes one tiny generation call before saving."]}),"custom"===a&&!h&&(0,b.jsx)(f.O,{id:"p-name",label:"Name",help:"Used in model ids: name/model.",error:H.name,children:(0,b.jsx)("input",{id:"p-name",value:B,onChange:a=>C(a.target.value),placeholder:"my-llm",className:f.S,autoComplete:"off"})}),"custom"===a?(0,b.jsx)(f.O,{id:"p-base",label:"Base URL",help:o?k.X.baseUrlHelp.selfhost:k.X.baseUrlHelp.cloud,error:H.baseUrl,children:(0,b.jsx)("input",{id:"p-base",value:D,onChange:a=>E(a.target.value),placeholder:"https://example.com/v1",className:`${f.S} font-mono text-[12.5px]`,autoComplete:"off"})}):(0,b.jsxs)("div",{className:"mb-3.5 flex flex-col gap-[5px]",children:[(0,b.jsx)("span",{className:"text-[13px] font-medium",children:"Base URL"}),(0,b.jsx)("span",{className:"break-all font-mono text-[12.5px] text-ink-faint",children:"cloudflare"===a?p.baseUrl({apiKey:"",accountId:"{account_id}"}):p.baseUrl({apiKey:""})})]}),"cloudflare"===a&&(0,b.jsx)(f.O,{id:"p-acct",label:"Account ID",error:H.accountId,children:(0,b.jsx)("input",{id:"p-acct",value:z,onChange:a=>A(a.target.value),placeholder:"32 hex characters",className:`${f.S} font-mono`,autoComplete:"off",spellCheck:!1})}),(0,b.jsx)(f.O,{id:"p-key",label:p.keyLabel,help:"custom"===a&&o?k.X.keyHelp.selfhostCustom:k.X.keyHelp.cloud,error:H.apiKey,children:(0,b.jsx)("input",{id:"p-key",type:"password",value:x,onChange:a=>y(a.target.value),placeholder:r[a],className:`${f.S} font-mono`,autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,"data-gramm":"false"})}),!h&&(0,b.jsxs)("label",{className:"mb-3.5 flex items-center gap-2 text-[13px]",children:[(0,b.jsx)("input",{type:"checkbox",checked:F,onChange:a=>G(a.target.checked)})," Make this the default provider"]}),J&&(0,b.jsx)("div",{className:"mb-3.5 rounded-lg bg-err-soft px-3 py-2.5 text-[13px]",role:"alert",children:J}),L&&(0,b.jsxs)("div",{className:"mb-3.5",role:"status",children:[(0,b.jsxs)("p",{className:"m-0 mb-1.5 text-[13px] font-medium",children:["Found ",L.length," model",1===L.length?"":"s",":"]}),(0,b.jsx)("ul",{className:"m-0 flex max-h-40 list-none flex-wrap gap-1.5 overflow-y-auto p-0",children:L.map(a=>(0,b.jsx)("li",{className:"rounded border border-line bg-surface-2 px-1.5 font-mono text-[12px]",children:a},a))}),(0,b.jsx)("p",{className:"m-0 mt-1.5 text-[12.5px] text-ink-faint",children:"Use Scan all under Models to see which of them really answer."})]})]}),(0,b.jsx)("div",{className:"flex flex-wrap items-center justify-end gap-2 border-t border-line px-[18px] py-3",children:L?(0,b.jsx)(f.K,{variant:"primary",onClick:()=>N(!1),children:"Done"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.K,{onClick:()=>N(!1),disabled:v,children:"Cancel"}),(0,b.jsx)(f.K,{variant:"primary",onClick:function(){w(async()=>{let b={apiKey:x,..."cloudflare"===a?{accountId:z}:{},..."custom"===a?{baseUrl:D,...h?{}:{name:B}}:{},makeDefault:F},c=h?await j(h.id,b):await i(a,b);if(I(c.ok?{}:c.fieldErrors??{}),K(c.ok||c.fieldErrors?null:c.error),c.ok){e.c.success(c.message??`${p.name} connected.`);let b=c.data?.models??[];"custom"===a&&b.length?M(b):N(!1)}})},disabled:v,children:v?"Testing…":h?"Test and replace":"Test and connect"})]})})]})]})}],36105)}]})();
1
+ (()=>{"use strict";module.exports=[492768,a=>{var b=a.i(187924),c=a.i(335371),d=a.i(572131),e=a.i(823292),f=a.i(611619),g=a.i(619089),h=a.i(188406),i=a.i(405050);let j=(0,i.createServerReference)("40c2e867bb4ccad508933caa4e5d34f2534f0433c6",i.callServer,void 0,i.findSourceMapURL,"makeDefaultProvider"),k=(0,i.createServerReference)("40040b4b8fc35c29e3c6e4b8f451ee81c485eedba9",i.callServer,void 0,i.findSourceMapURL,"removeProvider"),l=(0,i.createServerReference)("60a68af64222af0511502c4a348b0897d19d921587",i.callServer,void 0,i.findSourceMapURL,"setProviderEnabled"),m=(0,i.createServerReference)("40cb59742414bbfe7c7c3d8b7814feb5fb89c17dd7",i.callServer,void 0,i.findSourceMapURL,"testProvider");function n(a){a.ok?e.c.success(a.message??"Done."):e.c.error(a.error??"Something went wrong.")}a.s(["DefaultProviderSelect",0,function({options:a,current:c}){let[e,f]=(0,d.useTransition)(),[h,i]=(0,d.useState)(c??"");return 0===a.length?(0,b.jsx)("span",{className:"text-ink-faint",children:"No provider connected"}):(0,b.jsxs)("select",{"aria-label":"Default provider",className:`${g.S} w-auto`,value:h,disabled:e,onChange:a=>{let b=a.target.value;i(b),b&&f(async()=>n(await j(b)))},children:[!c&&(0,b.jsx)("option",{value:"",children:"None yet"}),a.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]})},"EnabledSwitch",0,function({id:a,on:c,name:e}){let[f,g]=(0,d.useTransition)(),[h,i]=(0,d.useState)(c);return(0,b.jsxs)("label",{className:"relative inline-flex cursor-pointer items-center",title:`${e}: ${h?"on":"off"}`,children:[(0,b.jsx)("input",{type:"checkbox",role:"switch",className:"peer sr-only",checked:h,disabled:f,"aria-label":`${e} enabled`,onChange:b=>{let c=b.target.checked;i(c),g(async()=>{let b=await l(a,c);b.ok||i(!c),n(b)})}}),(0,b.jsx)("span",{className:"h-5 w-9 rounded-full bg-line-strong transition-colors peer-checked:bg-brand peer-focus-visible:ring-2 peer-focus-visible:ring-brand/40 peer-disabled:opacity-60"}),(0,b.jsx)("span",{className:"absolute left-0.5 top-0.5 size-4 rounded-full bg-surface transition-transform peer-checked:translate-x-4"})]})},"ProviderMenu",0,function({id:a,name:c,isDefault:e}){let[g,i]=(0,d.useState)(!1);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.RowMenu,{label:`Actions for ${c}`,items:[...e?[]:[{label:"Make default",onSelect:async()=>n(await j(a))},"---"],{label:"Remove",danger:!0,onSelect:()=>i(!0)}]}),(0,b.jsx)(f.f,{open:g,onOpenChange:i,title:`Remove ${c}?`,body:"Its encrypted key is deleted. Calls for its models answer 503 until you connect a provider again. Nothing changes at the provider.",cta:"Remove",danger:!0,onConfirm:async()=>{let b=await k(a);return{ok:b.ok,message:(b.ok?b.message:b.error)??""}}})]})},"TestProviderButton",0,function({id:a}){let[e,f]=(0,d.useTransition)();return(0,b.jsxs)(g.K,{size:"sm",disabled:e,onClick:()=>f(async()=>n(await m(a))),children:[(0,b.jsx)(c.f,{size:15,"aria-hidden":!0}),e?"Testing…":"Test"]})}],492768)},36105,a=>{var b=a.i(187924),c=a.i(834295),d=a.i(572131),e=a.i(823292),f=a.i(619089),g=a.i(814574),h=a.i(405050);let i=(0,h.createServerReference)("60224f2ced3908f328ce284ce111dcbdfc947f94e5",h.callServer,void 0,h.findSourceMapURL,"connectProvider"),j=(0,h.createServerReference)("60cf4334e9ae0418003e01313271a9a30975004e04",h.callServer,void 0,h.findSourceMapURL,"replaceProviderKey");var k=a.i(901615);let l={gemini:{name:"Google Gemini",baseUrl:()=>"https://generativelanguage.googleapis.com/v1beta/openai",secretFields:["apiKey"],modelsPath:"/models",listModels:"gemini-native",quotaFrom:"own",auth:"x-goog-api-key",streamUsage:!0,advanced:!1,keyLabel:"AI Studio API key",where:{url:"https://aistudio.google.com/apikey",text:"Create a key (it starts with AQ. or AIza). If Google says the project is restricted or denied, use a key from another Google project or account."}},cloudflare:{name:"Cloudflare Workers AI",baseUrl:a=>`https://api.cloudflare.com/client/v4/accounts/${a.accountId??""}/ai/v1`,secretFields:["accountId","apiKey"],modelsPath:"/models/search",listModels:"cloudflare-search",quotaFrom:"own",auth:"bearer",streamUsage:!0,advanced:!1,keyLabel:"API token",where:{url:"https://dash.cloudflare.com/profile/api-tokens",text:"Create a token with Workers AI: Read. The account ID is on the Workers AI page. Only Google's Gemma models are offered."}},custom:{name:"Custom OpenAI-compatible",baseUrl:a=>(a.baseUrl??"").replace(/\/+$/,""),secretFields:["baseUrl","apiKey"],modelsPath:"/models",listModels:"openai",quotaFrom:"headers",auth:"bearer",streamUsage:!0,advanced:!0,keyLabel:"API key",where:{url:null,text:"Any HTTPS server that speaks the OpenAI chat completions API and answers GET /models. Every model the server lists is offered; switch any off on Models."}}};k.X.localUrl;var m=a.i(449862);let n=(0,m.f)("outline","brand-google","BrandGoogle",[["path",{d:"M20.945 11a9 9 0 1 1 -3.284 -5.997l-2.655 2.392a5.5 5.5 0 1 0 2.119 6.605h-4.125v-3h7.945",key:"svg-0"}]]);var o=a.i(786581);let p=(0,m.f)("outline","plug","Plug",[["path",{d:"M9.785 6l8.215 8.215l-2.054 2.054a5.81 5.81 0 1 1 -8.215 -8.215l2.054 -2.054",key:"svg-0"}],["path",{d:"M4 20l3.5 -3.5",key:"svg-1"}],["path",{d:"M15 4l-3.5 3.5",key:"svg-2"}],["path",{d:"M20 9l-3.5 3.5",key:"svg-3"}]]),q={gemini:n,cloudflare:o.f,custom:p},r={gemini:"AQ.… or AIza…",cloudflare:"Paste the API token",custom:"Paste the API key"};a.s(["ProviderDialog",0,function({kind:a,replace:h,primary:m,label:n,selfhost:o=!1}){let p=l[a],s=q[a],[t,u]=(0,d.useState)(!1),[v,w]=(0,d.useTransition)(),[x,y]=(0,d.useState)(""),[z,A]=(0,d.useState)(""),[B,C]=(0,d.useState)(""),[D,E]=(0,d.useState)(h?.baseUrl??""),[F,G]=(0,d.useState)(!1),[H,I]=(0,d.useState)({}),[J,K]=(0,d.useState)(null),[L,M]=(0,d.useState)(null);function N(a){u(a),a||(M(null),y(""),A(""),C(""),E(h?.baseUrl??""),G(!1),I({}),K(null))}let O=h?`Replace key \xb7 ${h.name}`:`Connect ${p.name}`;return(0,b.jsxs)(g.N,{open:t,onOpenChange:N,children:[(0,b.jsx)(g.a,{className:(0,f.R)({size:"sm",variant:m?"primary":"secondary"}),children:n??(h?"Replace":"Connect")}),(0,b.jsxs)(g.d,{className:"max-w-[560px] gap-0 p-0 sm:max-w-[560px]",children:[(0,b.jsxs)("div",{className:"flex items-start gap-3 px-[18px] pb-2 pt-4",children:[(0,b.jsx)("span",{className:"grid size-9 shrink-0 place-items-center rounded-lg bg-sunken text-ink-soft",children:(0,b.jsx)(s,{size:19})}),(0,b.jsxs)("div",{children:[(0,b.jsx)(g.F,{className:"text-base",children:O}),(0,b.jsxs)(g.C,{className:"mt-0.5 text-[13px] text-ink-soft",children:[p.keyLabel,"cloudflare"===a?" and account ID":""]})]})]}),(0,b.jsxs)("div",{className:"px-[18px] pt-1.5",children:[(0,b.jsxs)("p",{className:"mb-3 text-[13px] text-ink-soft",children:[p.where.url&&(0,b.jsxs)(b.Fragment,{children:["Open ",(0,b.jsxs)("a",{href:p.where.url,target:"_blank",rel:"noopener noreferrer",children:[p.where.url.replace("https://","")," ",(0,b.jsx)(c.f,{size:12,className:"inline","aria-hidden":!0})]}),". "]}),p.where.text," Watchbell lists the models and makes one tiny generation call before saving."]}),"custom"===a&&!h&&(0,b.jsx)(f.O,{id:"p-name",label:"Name",help:"Used in model ids: name/model.",error:H.name,children:(0,b.jsx)("input",{id:"p-name",value:B,onChange:a=>C(a.target.value),placeholder:"my-llm",className:f.S,autoComplete:"off"})}),"custom"===a?(0,b.jsx)(f.O,{id:"p-base",label:"Base URL",help:o?k.X.baseUrlHelp.selfhost:k.X.baseUrlHelp.cloud,error:H.baseUrl,children:(0,b.jsx)("input",{id:"p-base",value:D,onChange:a=>E(a.target.value),placeholder:"https://example.com/v1",className:`${f.S} font-mono text-[12.5px]`,autoComplete:"off"})}):(0,b.jsxs)("div",{className:"mb-3.5 flex flex-col gap-[5px]",children:[(0,b.jsx)("span",{className:"text-[13px] font-medium",children:"Base URL"}),(0,b.jsx)("span",{className:"break-all font-mono text-[12.5px] text-ink-faint",children:"cloudflare"===a?p.baseUrl({apiKey:"",accountId:"{account_id}"}):p.baseUrl({apiKey:""})})]}),"cloudflare"===a&&(0,b.jsx)(f.O,{id:"p-acct",label:"Account ID",error:H.accountId,children:(0,b.jsx)("input",{id:"p-acct",value:z,onChange:a=>A(a.target.value),placeholder:"32 hex characters",className:`${f.S} font-mono`,autoComplete:"off",spellCheck:!1})}),(0,b.jsx)(f.O,{id:"p-key",label:p.keyLabel,help:"custom"===a&&o?k.X.keyHelp.selfhostCustom:k.X.keyHelp.cloud,error:H.apiKey,children:(0,b.jsx)("input",{id:"p-key",type:"password",value:x,onChange:a=>y(a.target.value),placeholder:r[a],className:`${f.S} font-mono`,autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,"data-gramm":"false"})}),!h&&(0,b.jsxs)("label",{className:"mb-3.5 flex items-center gap-2 text-[13px]",children:[(0,b.jsx)("input",{type:"checkbox",checked:F,onChange:a=>G(a.target.checked)})," Make this the default provider"]}),J&&(0,b.jsx)("div",{className:"mb-3.5 rounded-lg bg-err-soft px-3 py-2.5 text-[13px]",role:"alert",children:J}),L&&(0,b.jsxs)("div",{className:"mb-3.5",role:"status",children:[(0,b.jsxs)("p",{className:"m-0 mb-1.5 text-[13px] font-medium",children:["Found ",L.length," model",1===L.length?"":"s",":"]}),(0,b.jsx)("ul",{className:"m-0 flex max-h-40 list-none flex-wrap gap-1.5 overflow-y-auto p-0",children:L.map(a=>(0,b.jsx)("li",{className:"rounded border border-line bg-surface-2 px-1.5 font-mono text-[12px]",children:a},a))}),(0,b.jsx)("p",{className:"m-0 mt-1.5 text-[12.5px] text-ink-faint",children:"Use Scan all under Models to see which of them really answer."})]})]}),(0,b.jsx)("div",{className:"flex flex-wrap items-center justify-end gap-2 border-t border-line px-[18px] py-3",children:L?(0,b.jsx)(f.K,{variant:"primary",onClick:()=>N(!1),children:"Done"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.K,{onClick:()=>N(!1),disabled:v,children:"Cancel"}),(0,b.jsx)(f.K,{variant:"primary",onClick:function(){w(async()=>{let b={apiKey:x,..."cloudflare"===a?{accountId:z}:{},..."custom"===a?{baseUrl:D,...h?{}:{name:B}}:{},makeDefault:F},c=h?await j(h.id,b):await i(a,b);if(I(c.ok?{}:c.fieldErrors??{}),K(c.ok||c.fieldErrors?null:c.error),c.ok){e.c.success(c.message??`${p.name} connected.`);let b=c.data?.models??[];"custom"===a&&b.length?M(b):N(!1)}})},disabled:v,children:v?"Testing…":h?"Test and replace":"Test and connect"})]})})]})]})}],36105)}]})();
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_providers_1ru-30x6-uwu4._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[[355235,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call LimitsForm() from the server but LimitsForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/quota/limits-form.tsx","LimitsForm");a.s(["LimitsForm",0,b])},398527,a=>{var b=a.i(355235);a.n(b)},278893,a=>{var b=a.i(907997),c=a.i(175038),d=a.i(938123),e=a.i(996432),f=a.i(395936),g=a.i(685865),h=a.i(803681),i=a.i(791444),j=a.i(384896),k=a.i(849423),l=a.i(916056),m=a.i(462820),n=a.i(955996);let o=["chat","console","models","agent"],p=()=>({requests:0,input:0,cached:0,output:0,errors:0});function q(a,b){a.requests++,a.input+=b.tokensIn??0,a.cached+=b.tokensCached??0,a.output+=(b.tokensOut??0)+(b.tokensThinking??0),b.status>=400&&a.errors++}let r=a=>new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(a);var s=a.i(263972),t=a.i(777302),u=a.i(398527),v=a.i(75148),w=a.i(109307);async function x(a){try{let[b,c]=await Promise.all([(0,k.A)(a),(0,k.S)()]);return function(a,b,c){let d=(0,n.r)(c.getTime()),e=c.getTime()-6048e5,f=b.map(a=>({...a,today:p(),week:p()})),g=new Map(f.map(a=>[a.id,a])),h=null;for(let b of a){if(!o.includes(b.kind))continue;let a=b.at.getTime();if(a<e||a>c.getTime())continue;let f=b.providerId?g.get(b.providerId):void 0;f||b.providerId||"agent"!==b.kind||(h??={id:"vm-agent",name:m.V.providerName,kind:"agent",enabled:!0,today:p(),week:p()},f=h),f&&(q(f.week,b),a>=d&&q(f.today,b))}return h?[...f,h]:f}(b,c,a)}catch{return console.warn("reading the provider usage failed"),[]}}async function y(){let a=await (0,w.B)("owner");if(!a.ok)return(0,b.jsx)(v.f,{role:a.member.role});let c=new Date,[d,e,k,m,n,o]=await Promise.all([(0,t.q)(c),(0,s.d)(),(0,s.Q)(c),(0,l.T)(c),(0,l.K)(c),x(c)]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.AutoRefresh,{at:c.getTime()}),(0,b.jsx)(h.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Quota"}],title:"Quota",sub:l.t.sub}),(0,b.jsx)(l.L,{view:n,now:c}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 min-[1001px]:grid-cols-[minmax(0,1.4fr)_minmax(0,1fr)]",children:[(0,b.jsx)(h.N,{title:"Provider usage",meta:"Today (WIB) · last 7 days",flush:!0,children:0===o.length?(0,b.jsx)(h.k,{title:"No provider connected",action:(0,b.jsx)(f.default,{href:"/ai/providers",className:(0,h.R)({size:"sm"}),children:"Bring your own key"}),children:"Connect a provider to see its requests and tokens here."}):o.map(a=>(0,b.jsx)(z,{p:a,groups:d.filter(b=>b.providerId===a.id),canLimit:e.some(b=>b.id===a.id)},a.id))}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,b.jsxs)(h.N,{title:"Where these numbers come from",children:[(0,b.jsx)("p",{className:"mb-2 text-[13px] text-ink-soft",children:"From the provider's rate-limit headers when it sends them. Otherwise Watchbell counts the calls it forwards against limits you enter; calls made with the same account outside Watchbell aren't counted. A 429 from a provider marks the row as used up until it resets."}),(0,b.jsxs)("p",{className:"m-0 text-[12.5px] text-ink-faint",children:[l.t.sourceNote&&`${l.t.sourceNote} `,"Day and week windows of your limits reset at 00:00 UTC (weeks on Monday)."]})]}),(0,b.jsx)(h.N,{title:(0,b.jsx)("span",{id:"limits",children:"Limits you enter"}),children:0===e.length?(0,b.jsxs)("p",{className:"m-0 text-[13px] text-ink-soft",children:["Connect a provider first. ",(0,b.jsx)(f.default,{href:"/ai/providers",children:"Bring your own key"})]}):(0,b.jsx)(u.LimitsForm,{providers:e})})]})]}),m&&(0,b.jsx)(l.A,{ag:m}),(0,b.jsx)(h.N,{title:"Per key",meta:"Applied before the provider's limits",flush:!0,children:0===k.length?(0,b.jsx)(h.k,{title:"No active keys",action:(0,b.jsx)(f.default,{href:"/ai/keys",className:(0,h.R)({size:"sm"}),children:"API keys"}),children:"Create a key to see its usage here."}):(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:i.o,children:[(0,b.jsx)(i.U,{head:["Key","Limit","This minute","Today",""]}),(0,b.jsx)("tbody",{children:k.map(a=>(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{className:i.z,children:(0,b.jsx)("b",{className:"font-medium",children:a.name})}),(0,b.jsxs)("td",{className:`${i.z} font-mono`,children:[a.ratePerMin," / min"]}),(0,b.jsxs)("td",{className:`${i.z} font-mono`,children:[a.lastMinute,(0,b.jsx)(h.e,{pct:(0,j.c)(a.lastMinute/a.ratePerMin*100),tone:a.lastMinute>=a.ratePerMin?"err":a.lastMinute/a.ratePerMin>=.75?"warn":void 0})]}),(0,b.jsx)("td",{className:`${i.z} font-mono`,children:a.today.toLocaleString("en-US")}),(0,b.jsx)("td",{className:i.z,children:(0,b.jsx)(f.default,{href:"/ai/keys",className:(0,h.R)({size:"sm"}),children:"Change"})})]},a.id))})]})})})]})}function z({p:a,groups:f,canLimit:g}){let i=f.flatMap(a=>a.rows.map(b=>({...b,key:`${a.group}|${b.label}`,group:a.group})));return(0,b.jsxs)("section",{className:"border-t border-line px-4 py-3 first-of-type:border-t-0",children:[(0,b.jsxs)("h3",{className:"mb-1.5 flex items-center gap-2 text-[13px] font-medium",children:["gemini"===a.kind||"agent"===a.kind?(0,b.jsx)(d.f,{size:16,"aria-hidden":!0}):"groq"===a.kind?(0,b.jsx)(c.f,{size:16,"aria-hidden":!0}):(0,b.jsx)(e.f,{size:16,"aria-hidden":!0}),a.name,!a.enabled&&(0,b.jsx)(h.E,{children:"Off"})]}),(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:"w-full border-collapse text-[12.5px]",children:[(0,b.jsx)("thead",{children:(0,b.jsx)("tr",{className:"text-left text-ink-soft",children:["","Requests","Input","Cached","Output","Errors"].map(a=>(0,b.jsx)("th",{className:"py-1 pr-3 font-medium",children:a},a))})}),(0,b.jsx)("tbody",{className:"font-mono",children:[["Today",a.today],["7 days",a.week]].map(([a,c])=>(0,b.jsxs)("tr",{className:"border-t border-line",children:[(0,b.jsx)("td",{className:"py-1 pr-3 font-sans text-ink-soft",children:a}),[c.requests.toLocaleString("en-US"),r(c.input),r(c.cached),r(c.output),c.errors.toLocaleString("en-US")].map((a,d)=>(0,b.jsx)("td",{className:4===d&&c.errors>0?"py-1 pr-3 text-err":"py-1 pr-3",children:a},d))]},a))})]})}),i.length>0?(0,b.jsx)("ul",{className:"m-0 mt-2 flex list-none flex-col gap-2 p-0",children:i.map(a=>(0,b.jsxs)("li",{className:"text-[12.5px]",children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"font-medium",children:a.label}),a.limited&&(0,b.jsx)(h.E,{children:"Used up"}),(0,b.jsxs)("span",{className:"ml-auto font-mono text-ink-soft",children:[a.pctLeft,"% left"]})]}),(0,b.jsx)(h.e,{pct:100-a.pctLeft,tone:a.pctLeft<20?"err":a.pctLeft<50?"warn":void 0}),(0,b.jsxs)("small",{className:"block text-[11.5px] text-ink-faint",children:[a.group," · resets in ",a.resetsIn," · ","header"===a.source?"from the provider's headers":`Watchbell's count of ${(a.used??0).toLocaleString("en-US")} / ${(a.limit??0).toLocaleString("en-US")}`]})]},a.key))}):g?(0,b.jsx)("a",{href:"#limits",className:"mt-1.5 inline-block text-[12px] text-ink-faint",children:"Add a limit to see a bar"}):null]})}a.s(["default",0,y],278893)}],915801,function(a){a.n(a.i(278893))}];
1
+ module.exports=[[355235,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call LimitsForm() from the server but LimitsForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/quota/limits-form.tsx","LimitsForm");a.s(["LimitsForm",0,b])},398527,a=>{var b=a.i(355235);a.n(b)},278893,a=>{var b=a.i(907997),c=a.i(175038),d=a.i(938123),e=a.i(996432),f=a.i(395936),g=a.i(685865),h=a.i(803681),i=a.i(791444),j=a.i(384896),k=a.i(849423),l=a.i(916056),m=a.i(462820),n=a.i(955996);let o=["chat","console","models","agent"],p=()=>({requests:0,input:0,cached:0,output:0,errors:0});function q(a,b){a.requests++,a.input+=b.tokensIn??0,a.cached+=b.tokensCached??0,a.output+=(b.tokensOut??0)+(b.tokensThinking??0),b.status>=400&&a.errors++}let r=a=>new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(a);var s=a.i(263972),t=a.i(777302),u=a.i(398527),v=a.i(75148),w=a.i(109307),x=a.i(245710);async function y(a){try{let[b,c]=await Promise.all([(0,k.A)(a),(0,k.S)()]);return function(a,b,c){let d=(0,n.S)(c.getTime()),e=c.getTime()-6048e5,f=b.map(a=>({...a,today:p(),week:p()})),g=new Map(f.map(a=>[a.id,a])),h=null;for(let b of a){if(!o.includes(b.kind))continue;let a=b.at.getTime();if(a<e||a>c.getTime())continue;let f=b.providerId?g.get(b.providerId):void 0;f||b.providerId||"agent"!==b.kind||(h??={id:"vm-agent",name:m.V.providerName,kind:"agent",enabled:!0,today:p(),week:p()},f=h),f&&(q(f.week,b),a>=d&&q(f.today,b))}return h?[...f,h]:f}(b,c,a)}catch{return console.warn("reading the provider usage failed"),[]}}async function z(){let a=await (0,w.B)("owner");if(!a.ok)return(0,b.jsx)(v.f,{role:a.member.role});let c=new Date,[d,e,k,m,n,o]=await Promise.all([(0,t.q)(c),(0,s.d)(),(0,s.Q)(c),(0,l.T)(c),(0,l.K)(c),y(c)]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.AutoRefresh,{at:c.getTime()}),(0,b.jsx)(h.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Quota"}],title:"Quota",sub:l.t.sub}),(0,b.jsx)(l.L,{view:n,now:c}),(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-4 min-[1001px]:grid-cols-[minmax(0,1.4fr)_minmax(0,1fr)]",children:[(0,b.jsx)(h.N,{title:"Provider usage",meta:`Today (${(0,x.D)()}) \xb7 last 7 days`,flush:!0,children:0===o.length?(0,b.jsx)(h.k,{title:"No provider connected",action:(0,b.jsx)(f.default,{href:"/ai/providers",className:(0,h.R)({size:"sm"}),children:"Bring your own key"}),children:"Connect a provider to see its requests and tokens here."}):o.map(a=>(0,b.jsx)(A,{p:a,groups:d.filter(b=>b.providerId===a.id),canLimit:e.some(b=>b.id===a.id)},a.id))}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,b.jsxs)(h.N,{title:"Where these numbers come from",children:[(0,b.jsx)("p",{className:"mb-2 text-[13px] text-ink-soft",children:"From the provider's rate-limit headers when it sends them. Otherwise Watchbell counts the calls it forwards against limits you enter; calls made with the same account outside Watchbell aren't counted. A 429 from a provider marks the row as used up until it resets."}),(0,b.jsxs)("p",{className:"m-0 text-[12.5px] text-ink-faint",children:[l.t.sourceNote&&`${l.t.sourceNote} `,"Day and week windows of your limits reset at 00:00 UTC (weeks on Monday)."]})]}),(0,b.jsx)(h.N,{title:(0,b.jsx)("span",{id:"limits",children:"Limits you enter"}),children:0===e.length?(0,b.jsxs)("p",{className:"m-0 text-[13px] text-ink-soft",children:["Connect a provider first. ",(0,b.jsx)(f.default,{href:"/ai/providers",children:"Bring your own key"})]}):(0,b.jsx)(u.LimitsForm,{providers:e})})]})]}),m&&(0,b.jsx)(l.A,{ag:m}),(0,b.jsx)(h.N,{title:"Per key",meta:"Applied before the provider's limits",flush:!0,children:0===k.length?(0,b.jsx)(h.k,{title:"No active keys",action:(0,b.jsx)(f.default,{href:"/ai/keys",className:(0,h.R)({size:"sm"}),children:"API keys"}),children:"Create a key to see its usage here."}):(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:i.o,children:[(0,b.jsx)(i.U,{head:["Key","Limit","This minute","Today",""]}),(0,b.jsx)("tbody",{children:k.map(a=>(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{className:i.z,children:(0,b.jsx)("b",{className:"font-medium",children:a.name})}),(0,b.jsxs)("td",{className:`${i.z} font-mono`,children:[a.ratePerMin," / min"]}),(0,b.jsxs)("td",{className:`${i.z} font-mono`,children:[a.lastMinute,(0,b.jsx)(h.e,{pct:(0,j.c)(a.lastMinute/a.ratePerMin*100),tone:a.lastMinute>=a.ratePerMin?"err":a.lastMinute/a.ratePerMin>=.75?"warn":void 0})]}),(0,b.jsx)("td",{className:`${i.z} font-mono`,children:a.today.toLocaleString("en-US")}),(0,b.jsx)("td",{className:i.z,children:(0,b.jsx)(f.default,{href:"/ai/keys",className:(0,h.R)({size:"sm"}),children:"Change"})})]},a.id))})]})})})]})}function A({p:a,groups:f,canLimit:g}){let i=f.flatMap(a=>a.rows.map(b=>({...b,key:`${a.group}|${b.label}`,group:a.group})));return(0,b.jsxs)("section",{className:"border-t border-line px-4 py-3 first-of-type:border-t-0",children:[(0,b.jsxs)("h3",{className:"mb-1.5 flex items-center gap-2 text-[13px] font-medium",children:["gemini"===a.kind||"agent"===a.kind?(0,b.jsx)(d.f,{size:16,"aria-hidden":!0}):"groq"===a.kind?(0,b.jsx)(c.f,{size:16,"aria-hidden":!0}):(0,b.jsx)(e.f,{size:16,"aria-hidden":!0}),a.name,!a.enabled&&(0,b.jsx)(h.E,{children:"Off"})]}),(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:"w-full border-collapse text-[12.5px]",children:[(0,b.jsx)("thead",{children:(0,b.jsx)("tr",{className:"text-left text-ink-soft",children:["","Requests","Input","Cached","Output","Errors"].map(a=>(0,b.jsx)("th",{className:"py-1 pr-3 font-medium",children:a},a))})}),(0,b.jsx)("tbody",{className:"font-mono",children:[["Today",a.today],["7 days",a.week]].map(([a,c])=>(0,b.jsxs)("tr",{className:"border-t border-line",children:[(0,b.jsx)("td",{className:"py-1 pr-3 font-sans text-ink-soft",children:a}),[c.requests.toLocaleString("en-US"),r(c.input),r(c.cached),r(c.output),c.errors.toLocaleString("en-US")].map((a,d)=>(0,b.jsx)("td",{className:4===d&&c.errors>0?"py-1 pr-3 text-err":"py-1 pr-3",children:a},d))]},a))})]})}),i.length>0?(0,b.jsx)("ul",{className:"m-0 mt-2 flex list-none flex-col gap-2 p-0",children:i.map(a=>(0,b.jsxs)("li",{className:"text-[12.5px]",children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"font-medium",children:a.label}),a.limited&&(0,b.jsx)(h.E,{children:"Used up"}),(0,b.jsxs)("span",{className:"ml-auto font-mono text-ink-soft",children:[a.pctLeft,"% left"]})]}),(0,b.jsx)(h.e,{pct:100-a.pctLeft,tone:a.pctLeft<20?"err":a.pctLeft<50?"warn":void 0}),(0,b.jsxs)("small",{className:"block text-[11.5px] text-ink-faint",children:[a.group," · resets in ",a.resetsIn," · ","header"===a.source?"from the provider's headers":`Watchbell's count of ${(a.used??0).toLocaleString("en-US")} / ${(a.limit??0).toLocaleString("en-US")}`]})]},a.key))}):g?(0,b.jsx)("a",{href:"#limits",className:"mt-1.5 inline-block text-[12px] text-ink-faint",children:"Add a limit to see a bar"}):null]})}a.s(["default",0,z],278893)}],915801,function(a){a.n(a.i(278893))}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_quota_1kor9sy67qpiw._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[223538,a=>{"use strict";var b=a.i(187924),c=a.i(817748),d=a.i(851519),e=a.i(572131),f=a.i(823292),g=a.i(619089),h=a.i(507504),i=a.i(368114);let j=["requests","tokens"],k=["minute","day","week"];var l=a.i(405050);let m=(0,l.createServerReference)("60b0c3b5f14cf715de30a66f539966523152015f68",l.callServer,void 0,l.findSourceMapURL,"saveLimits"),n={minute:"per minute",day:"per day",week:"per week"};function o({provider:a}){let[l,p]=(0,e.useState)(()=>a.limits.map(a=>({...a,limit:String(a.limit)}))),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(null),[u,v]=(0,e.useTransition)();(0,h.useHoldRefresh)(q);let w=(a,b)=>{p(c=>c.map((c,d)=>d===a?{...c,...b}:c)),r(!0),t(null)};return(0,b.jsxs)("div",{className:"mb-4 last:mb-0",children:[(0,b.jsx)("div",{className:"mb-1.5 text-[13px] font-medium",children:a.name}),0===l.length&&(0,b.jsx)("p",{className:"mb-2 text-[12.5px] text-ink-faint",children:"No limits entered. Add one to count calls against it."}),l.map((c,e)=>(0,b.jsxs)("div",{className:"mb-2 grid grid-cols-[minmax(0,1fr)_auto] gap-x-2 gap-y-1.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap gap-1.5",children:[(0,b.jsx)("select",{className:(0,i.f)(g.S,"w-auto"),"aria-label":`${a.name} limit ${e+1} metric`,value:c.metric,onChange:a=>w(e,{metric:a.target.value}),children:j.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)("select",{className:(0,i.f)(g.S,"w-auto"),"aria-label":`${a.name} limit ${e+1} window`,value:c.window,onChange:a=>w(e,{window:a.target.value}),children:k.map(a=>(0,b.jsx)("option",{value:a,children:n[a]},a))}),(0,b.jsx)("input",{className:(0,i.f)(g.S,"w-[120px] font-mono"),inputMode:"numeric","aria-label":`${a.name} limit ${e+1} value`,value:c.limit,onChange:a=>w(e,{limit:a.target.value})}),(0,b.jsx)("input",{className:(0,i.f)(g.S,"w-[150px] font-mono"),"aria-label":`${a.name} limit ${e+1} model (all = every model)`,placeholder:"model, or all",value:c.scope,onChange:a=>w(e,{scope:a.target.value})})]}),(0,b.jsx)("button",{type:"button","aria-label":`Remove limit ${e+1}`,className:"rounded-md p-1.5 text-ink-faint hover:bg-hover hover:text-ink",onClick:()=>{p(a=>a.filter((a,b)=>b!==e)),r(!0),t(null)},children:(0,b.jsx)(d.f,{size:15,"aria-hidden":!0})})]},e)),s&&(0,b.jsx)("p",{className:"mb-2 text-[12.5px] text-err",role:"alert",children:s}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(g.K,{size:"sm",disabled:l.length>=10,onClick:()=>{p(a=>[...a,{metric:"requests",scope:"all",limit:"",window:"day"}]),r(!0)},children:[(0,b.jsx)(c.f,{size:14,"aria-hidden":!0}),"Add limit"]}),(0,b.jsx)(g.K,{size:"sm",variant:"primary",disabled:!q||u,onClick:()=>v(async()=>{try{let b=await m(a.id,l);b.ok?(f.c.success(b.message??"Limits saved."),r(!1),t(null)):t(b.error)}catch{t("Something went wrong. Try again.")}}),children:u?"Saving...":"Save"})]})]})}a.s(["LimitsForm",0,function({providers:a}){return(0,b.jsx)(b.Fragment,{children:a.map(a=>(0,b.jsx)(o,{provider:a},a.id))})}],223538)}];
1
+ module.exports=[223538,a=>{"use strict";var b=a.i(187924),c=a.i(817748),d=a.i(851519),e=a.i(572131),f=a.i(823292),g=a.i(619089),h=a.i(507504),i=a.i(368114);let j=["requests","tokens"],k=["minute","day","week"];var l=a.i(405050);let m=(0,l.createServerReference)("60a56b0bc2cbda9717bbec189e7b9eb4910f8ccff2",l.callServer,void 0,l.findSourceMapURL,"saveLimits"),n={minute:"per minute",day:"per day",week:"per week"};function o({provider:a}){let[l,p]=(0,e.useState)(()=>a.limits.map(a=>({...a,limit:String(a.limit)}))),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(null),[u,v]=(0,e.useTransition)();(0,h.useHoldRefresh)(q);let w=(a,b)=>{p(c=>c.map((c,d)=>d===a?{...c,...b}:c)),r(!0),t(null)};return(0,b.jsxs)("div",{className:"mb-4 last:mb-0",children:[(0,b.jsx)("div",{className:"mb-1.5 text-[13px] font-medium",children:a.name}),0===l.length&&(0,b.jsx)("p",{className:"mb-2 text-[12.5px] text-ink-faint",children:"No limits entered. Add one to count calls against it."}),l.map((c,e)=>(0,b.jsxs)("div",{className:"mb-2 grid grid-cols-[minmax(0,1fr)_auto] gap-x-2 gap-y-1.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap gap-1.5",children:[(0,b.jsx)("select",{className:(0,i.f)(g.S,"w-auto"),"aria-label":`${a.name} limit ${e+1} metric`,value:c.metric,onChange:a=>w(e,{metric:a.target.value}),children:j.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)("select",{className:(0,i.f)(g.S,"w-auto"),"aria-label":`${a.name} limit ${e+1} window`,value:c.window,onChange:a=>w(e,{window:a.target.value}),children:k.map(a=>(0,b.jsx)("option",{value:a,children:n[a]},a))}),(0,b.jsx)("input",{className:(0,i.f)(g.S,"w-[120px] font-mono"),inputMode:"numeric","aria-label":`${a.name} limit ${e+1} value`,value:c.limit,onChange:a=>w(e,{limit:a.target.value})}),(0,b.jsx)("input",{className:(0,i.f)(g.S,"w-[150px] font-mono"),"aria-label":`${a.name} limit ${e+1} model (all = every model)`,placeholder:"model, or all",value:c.scope,onChange:a=>w(e,{scope:a.target.value})})]}),(0,b.jsx)("button",{type:"button","aria-label":`Remove limit ${e+1}`,className:"rounded-md p-1.5 text-ink-faint hover:bg-hover hover:text-ink",onClick:()=>{p(a=>a.filter((a,b)=>b!==e)),r(!0),t(null)},children:(0,b.jsx)(d.f,{size:15,"aria-hidden":!0})})]},e)),s&&(0,b.jsx)("p",{className:"mb-2 text-[12.5px] text-err",role:"alert",children:s}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(g.K,{size:"sm",disabled:l.length>=10,onClick:()=>{p(a=>[...a,{metric:"requests",scope:"all",limit:"",window:"day"}]),r(!0)},children:[(0,b.jsx)(c.f,{size:14,"aria-hidden":!0}),"Add limit"]}),(0,b.jsx)(g.K,{size:"sm",variant:"primary",disabled:!q||u,onClick:()=>v(async()=>{try{let b=await m(a.id,l);b.ok?(f.c.success(b.message??"Limits saved."),r(!1),t(null)):t(b.error)}catch{t("Something went wrong. Try again.")}}),children:u?"Saving...":"Save"})]})]})}a.s(["LimitsForm",0,function({providers:a}){return(0,b.jsx)(b.Fragment,{children:a.map(a=>(0,b.jsx)(o,{provider:a},a.id))})}],223538)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_quota_limits-form_tsx_1vouaaf560z_x._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[[984890,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call LimitsForm() from the server but LimitsForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/usage/limits-form.tsx","LimitsForm");a.s(["LimitsForm",0,b])},500762,a=>{var b=a.i(984890);a.n(b)},258291,a=>{var b=a.i(907997);let c=(0,a.i(377269).f)("outline","activity","Activity",[["path",{d:"M3 12h4l3 8l4 -16l3 8h4",key:"svg-0"}]]);var d=a.i(735453),e=a.i(395936),f=a.i(252302),g=a.i(803681),h=a.i(685865),i=a.i(75148),j=a.i(109307),k=a.i(462820),l=a.i(139138),m=a.i(690041),n=a.i(849423),o=a.i(484458),p=a.i(916056),q=a.i(912459),r=a.i(955996),s=a.i(500762);let t=new Intl.NumberFormat("en");function u({n:a}){let c="hub"===a.kind?132:150,d="hub"===a.kind?46:40,e=(a.chips??[]).slice(0,4);return(0,b.jsxs)("g",{children:[(0,b.jsx)("rect",{x:a.x-c/2,y:a.y-d/2,width:c,height:d,rx:7,className:"hub"===a.kind?"fill-ink stroke-ink":"fill-surface stroke-line-strong",strokeWidth:1}),(0,b.jsx)("text",{x:a.x,y:a.y-3,textAnchor:"middle",className:"hub"===a.kind?"fill-surface text-[13px] font-semibold":"fill-ink text-[12.5px] font-medium",children:a.label.length>22?`${a.label.slice(0,21)}…`:a.label}),(0,b.jsx)("text",{x:a.x,y:a.y+12,textAnchor:"middle",className:"hub"===a.kind?"fill-surface font-mono text-[10.5px] opacity-80":"fill-ink-soft font-mono text-[10.5px]",children:"hub"===a.kind?a.sub:`${a.sub} \xb7 ${t.format(a.requests)} req`}),e.map((e,f)=>(0,b.jsxs)("g",{children:[(0,b.jsx)("rect",{x:a.x-c/2,y:a.y+d/2+4+17*f,width:c,height:14,rx:3,className:e.active?"fill-brand-soft stroke-brand":"fill-surface-2 stroke-line",strokeWidth:.75}),(0,b.jsx)("text",{x:a.x,y:a.y+d/2+14+17*f,textAnchor:"middle",className:e.active?"fill-brand font-mono text-[9.5px]":"fill-ink-faint font-mono text-[9.5px]",children:e.id.length>26?`${e.id.slice(0,25)}…`:e.id})]},e.id)),(a.chips?.length??0)>e.length&&(0,b.jsxs)("text",{x:a.x,y:a.y+d/2+14+17*e.length,textAnchor:"middle",className:"fill-ink-faint text-[10px]",children:["+",(a.chips?.length??0)-e.length," more"]})]})}function v({graph:a}){let c=a.nodes[0],d=new Map(a.nodes.map(a=>[a.id,a])),e=a.edges.map(a=>`${d.get(a.to)?.label}: ${a.running?"running":a.active?"traffic":"no traffic"}`).join("; ");return(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("svg",{viewBox:`0 0 ${a.width} ${a.height+40}`,className:"block h-auto w-full min-w-[560px]",role:"img","aria-label":`Sources of AI traffic. ${e}`,children:[a.edges.map(a=>{let e=d.get(a.to);return e?(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:c.x,y1:c.y,x2:e.x,y2:e.y,className:a.active?"stroke-brand":"stroke-line-strong",strokeWidth:a.running?3.5:a.active?1.75:1,strokeDasharray:a.active?void 0:"4 4"}),a.running&&(0,b.jsx)("text",{x:(c.x+e.x)/2,y:(c.y+e.y)/2-7,textAnchor:"middle",className:"fill-brand font-mono text-[11px] font-medium",children:"running"})]},a.to):null}),a.nodes.map(a=>(0,b.jsx)(u,{n:a},a.id))]})})}let w=new Intl.NumberFormat("en"),x=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),y="font-mono text-[24px] font-semibold tracking-tight",z="text-[11.5px] font-medium uppercase tracking-wide text-ink-soft",A="mt-1 text-[12px] text-ink-soft",B="px-3 py-2 text-left text-[12px] font-medium text-ink-soft",C="border-t border-line px-3 py-2";async function D({searchParams:a}){let t=await (0,j.B)("owner");if(!t.ok)return(0,b.jsx)(i.f,{role:t.member.role});let u=await a,E=(0,r.D)(u.range),F="1"===u.api,G=new Date,H=(0,r.q)(E,G),[{rows:I,capped:J},K,L,M,N,O,P,Q,R]=await Promise.all([(0,n.v)(H.since),(0,n.c)(F?[...r.b,...r.X]:[...r.b],50),(0,n.e)(G),(0,n.q)(H.since),(0,n.S)(),(0,n.m)(G),(0,n.a)(G).catch(()=>({activity:null,limits:{...m.m}})),(0,o.y)(G).catch(()=>null),(0,o.V)().catch(()=>null)]),S=Q?.report?Q.report.models.filter(a=>(0,o._)(Q.report,Q.prefs,Q.allowed).includes(a.id)):[],T=P.activity?.running??null,U=(0,r.L)(I),V=(0,r.V)(I,H),W=!!Q?.report&&(0,o.U)(Q.report,G),X=(0,r.K)({agModels:S,providers:N,clients:O,rows:I,byAgent:M,running:T,agConnected:W}),Y=L.reduce((a,b)=>!a||b.at>a?b.at:a,null),Z=(0,r.z)(T,Y,Q?.report?.models??[],G),$=(0,m.X)(L,P.limits,G),_="requests"===u.chart?"requests":"tokens",aa=a=>{let b=new URLSearchParams;return b.set("range",a.range??E),(a.api??F)&&b.set("api","1"),(a.chart??_)==="requests"&&b.set("chart","requests"),`/ai/usage?${b.toString()}`},ab=a=>(0,l.f)("rounded-md px-2.5 py-1 text-[13px] hover:no-underline",a?"bg-nav-active font-medium text-nav-active-text":"text-ink-soft hover:bg-hover hover:text-ink");return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.AutoRefresh,{at:G.getTime(),everyMs:Z.running?5e3:void 0}),(0,b.jsx)(g.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Usage"}],title:"Usage & Analytics",sub:k.V.sub}),(0,b.jsxs)("nav",{"aria-label":"Range",className:"flex flex-wrap items-center gap-1",children:[r.d.map(a=>(0,b.jsx)(e.default,{href:aa({range:a.key}),"aria-current":a.key===E?"page":void 0,className:ab(a.key===E),children:a.label},a.key)),"all"===E&&(0,b.jsx)("span",{className:"ml-2 text-[12px] text-ink-faint",children:"Watchbell keeps 30 days."})]}),(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-3 md:grid-cols-3 xl:grid-cols-5",children:[(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Total requests"}),(0,b.jsx)("div",{className:y,children:w.format(U.requests)}),(0,b.jsxs)("div",{className:A,children:[w.format(U.agentRequests)," ",k.V.agentRequests," · ",w.format(U.providerRequests)," providers",U.errors?` \xb7 ${U.errors} failed`:""]})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Input tokens"}),(0,b.jsx)("div",{className:y,title:w.format(U.input),children:x.format(U.input)}),(0,b.jsx)("div",{className:A,children:"New input, not from cache"})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Cached tokens"}),(0,b.jsx)("div",{className:y,title:w.format(U.cached),children:x.format(U.cached)}),(0,b.jsx)("div",{className:A,children:"Read from the prompt cache"})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Output tokens"}),(0,b.jsx)("div",{className:y,title:w.format(U.output),children:x.format(U.output)}),(0,b.jsxs)("div",{className:A,children:["incl. ",(0,b.jsx)("span",{className:"font-mono",children:x.format(U.thinking)})," thinking"]})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Est. cost"}),(0,b.jsx)("div",{className:y,children:"$0.00"}),(0,b.jsxs)("div",{className:A,children:[k.V.costAgents," · providers: ",(0,b.jsx)("span",{title:"No prices are known for your own keys",children:"—"})]})]})]}),(0,b.jsxs)("div",{className:"grid gap-3 lg:grid-cols-[minmax(0,1fr)_320px]",children:[(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,b.jsxs)(g.N,{title:"Sources",meta:(0,b.jsx)("span",{className:"font-mono",children:r.d.find(a=>a.key===E)?.label}),children:[(0,b.jsxs)("div",{className:(0,l.f)("mb-2 flex items-center gap-2 rounded-md border px-3 py-2 text-[13px]",Z.running?"border-brand bg-brand-soft text-ink":"border-line text-ink-soft"),role:"status",children:[Z.running?(0,b.jsx)(c,{size:16,className:"text-brand","aria-hidden":!0}):(0,b.jsx)(d.f,{size:16,"aria-hidden":!0}),(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:Z.text})]}),(0,b.jsx)(v,{graph:X})]}),(0,b.jsxs)(g.N,{title:"tokens"===_?"Tokens":"Requests",meta:(0,b.jsxs)("span",{className:"flex gap-1",children:[(0,b.jsx)(e.default,{href:aa({chart:"tokens"}),className:ab("tokens"===_),children:"Tokens"}),(0,b.jsx)(e.default,{href:aa({chart:"requests"}),className:ab("requests"===_),children:"Requests"})]}),children:[(0,b.jsx)(f.T,{height:140,label:"tokens"===_?`Tokens per ${H.bucket}: new input, cached, output`:`Requests per ${H.bucket}`,parts:"tokens"===_?["New input","Cached","Output"]:["Requests"],bars:V.map(a=>({key:a.t.toISOString(),title:"tokens"===_?`${a.label}: ${w.format(a.fresh)} new \xb7 ${w.format(a.cached)} cached \xb7 ${w.format(a.output)} out`:`${a.label}: ${w.format(a.requests)} requests`,values:"tokens"===_?[a.fresh,a.cached,a.output]:[a.requests]}))}),(0,b.jsxs)("div",{className:"mt-1 flex justify-between font-mono text-[11px] text-ink-faint",children:[(0,b.jsx)("span",{children:V[0]?.label}),(0,b.jsx)("span",{children:V.at(-1)?.label})]}),J&&(0,b.jsx)("p",{className:"m-0 mt-2 text-[12px] text-warn",children:"Only the newest 20,000 requests are counted in this range."})]})]}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,b.jsx)(p.V,{report:R,now:G}),W&&(0,b.jsxs)(g.N,{title:k.V.quotaTitle,meta:(0,b.jsx)(s.LimitsForm,{values:P.limits}),children:[(0,b.jsx)("ul",{className:"m-0 flex list-none flex-col gap-3 p-0",children:$.map(a=>(0,b.jsxs)("li",{children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"font-medium",children:a.label}),(0,b.jsx)("span",{className:"ml-auto font-mono text-[12px] text-ink-soft",children:null===a.limit?`${x.format(a.used)} used`:`${x.format(a.remaining??0)} left of ${x.format(a.limit)}`})]}),null!==a.limit&&null!==a.pct&&(0,b.jsx)(g.e,{pct:a.pct,tone:a.pct>=100?"err":a.pct>=80?"warn":void 0}),(0,b.jsxs)("div",{className:"mt-1 text-[12px] text-ink-faint",children:[null===a.limit?"No limit entered · ":"",a.runs," runs in ",a.window,a.resetsAt?` \xb7 resets as the oldest run leaves the window (~${(0,q.g)(a.resetsAt,G)})`:""]})]},a.key))}),(0,b.jsxs)("p",{className:"m-0 mt-3 text-[12px] text-ink-faint",children:[k.V.quotaNote," ","Counted: new input + output + thinking; cached input excluded."]})]})]})]}),(0,b.jsx)(g.N,{title:"Recent requests",meta:(0,b.jsx)(e.default,{href:aa({api:!F}),className:"text-[12.5px]","aria-pressed":F,children:F?"Hide API calls":"Include API calls"}),flush:!0,children:0===K.length?(0,b.jsx)(g.k,{title:"No requests yet",children:k.V.emptyRecent}):(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:"w-full border-collapse text-[13px]",children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{children:[(0,b.jsx)("th",{className:B,children:"Model"}),(0,b.jsx)("th",{className:B,children:"Purpose"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"New ↑"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"Cached"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"Out ↓"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"Duration"}),(0,b.jsx)("th",{className:B,children:"Status"}),(0,b.jsx)("th",{className:B,children:"When"})]})}),(0,b.jsx)("tbody",{children:K.map((a,b)=>(0,r.I)(a,G,b)).map(a=>(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{className:`${C} max-w-[260px] truncate font-mono text-[12.5px]`,children:a.model}),(0,b.jsx)("td",{className:`${C} text-ink-soft`,children:a.purpose}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:null===a.fresh?"–":w.format(a.fresh)}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:null===a.cached?"–":w.format(a.cached)}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:null===a.out?"–":w.format(a.out)}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:a.durationMs<1e3?`${a.durationMs} ms`:(0,q._)(a.durationMs)}),(0,b.jsx)("td",{className:C,children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 font-mono text-[12px]",children:[(0,b.jsx)("i",{className:(0,l.f)("inline-block size-2 rounded-full","ok"===a.tone?"bg-ok":"warn"===a.tone?"bg-warn-icon":"bg-err"),"aria-hidden":!0}),a.status]})}),(0,b.jsx)("td",{className:`${C} whitespace-nowrap text-ink-soft`,title:a.whenTitle,children:a.when})]},a.key))})]})})})]})}a.s(["default",0,D],258291)}],91185,function(a){a.n(a.i(258291))}];
1
+ module.exports=[[984890,a=>{let b=(0,a.i(211857).registerClientReference)(function(){throw Error("Attempted to call LimitsForm() from the server but LimitsForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/app/(console)/(private)/ai/usage/limits-form.tsx","LimitsForm");a.s(["LimitsForm",0,b])},500762,a=>{var b=a.i(984890);a.n(b)},258291,a=>{var b=a.i(907997);let c=(0,a.i(377269).f)("outline","activity","Activity",[["path",{d:"M3 12h4l3 8l4 -16l3 8h4",key:"svg-0"}]]);var d=a.i(735453),e=a.i(395936),f=a.i(252302),g=a.i(803681),h=a.i(685865),i=a.i(75148),j=a.i(109307),k=a.i(462820),l=a.i(139138),m=a.i(690041),n=a.i(849423),o=a.i(484458),p=a.i(916056),q=a.i(912459),r=a.i(955996),s=a.i(500762);let t=new Intl.NumberFormat("en");function u({n:a}){let c="hub"===a.kind?132:150,d="hub"===a.kind?46:40,e=(a.chips??[]).slice(0,4);return(0,b.jsxs)("g",{children:[(0,b.jsx)("rect",{x:a.x-c/2,y:a.y-d/2,width:c,height:d,rx:7,className:"hub"===a.kind?"fill-ink stroke-ink":"fill-surface stroke-line-strong",strokeWidth:1}),(0,b.jsx)("text",{x:a.x,y:a.y-3,textAnchor:"middle",className:"hub"===a.kind?"fill-surface text-[13px] font-semibold":"fill-ink text-[12.5px] font-medium",children:a.label.length>22?`${a.label.slice(0,21)}…`:a.label}),(0,b.jsx)("text",{x:a.x,y:a.y+12,textAnchor:"middle",className:"hub"===a.kind?"fill-surface font-mono text-[10.5px] opacity-80":"fill-ink-soft font-mono text-[10.5px]",children:"hub"===a.kind?a.sub:`${a.sub} \xb7 ${t.format(a.requests)} req`}),e.map((e,f)=>(0,b.jsxs)("g",{children:[(0,b.jsx)("rect",{x:a.x-c/2,y:a.y+d/2+4+17*f,width:c,height:14,rx:3,className:e.active?"fill-brand-soft stroke-brand":"fill-surface-2 stroke-line",strokeWidth:.75}),(0,b.jsx)("text",{x:a.x,y:a.y+d/2+14+17*f,textAnchor:"middle",className:e.active?"fill-brand font-mono text-[9.5px]":"fill-ink-faint font-mono text-[9.5px]",children:e.id.length>26?`${e.id.slice(0,25)}…`:e.id})]},e.id)),(a.chips?.length??0)>e.length&&(0,b.jsxs)("text",{x:a.x,y:a.y+d/2+14+17*e.length,textAnchor:"middle",className:"fill-ink-faint text-[10px]",children:["+",(a.chips?.length??0)-e.length," more"]})]})}function v({graph:a}){let c=a.nodes[0],d=new Map(a.nodes.map(a=>[a.id,a])),e=a.edges.map(a=>`${d.get(a.to)?.label}: ${a.running?"running":a.active?"traffic":"no traffic"}`).join("; ");return(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("svg",{viewBox:`0 0 ${a.width} ${a.height+40}`,className:"block h-auto w-full min-w-[560px]",role:"img","aria-label":`Sources of AI traffic. ${e}`,children:[a.edges.map(a=>{let e=d.get(a.to);return e?(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:c.x,y1:c.y,x2:e.x,y2:e.y,className:a.active?"stroke-brand":"stroke-line-strong",strokeWidth:a.running?3.5:a.active?1.75:1,strokeDasharray:a.active?void 0:"4 4"}),a.running&&(0,b.jsx)("text",{x:(c.x+e.x)/2,y:(c.y+e.y)/2-7,textAnchor:"middle",className:"fill-brand font-mono text-[11px] font-medium",children:"running"})]},a.to):null}),a.nodes.map(a=>(0,b.jsx)(u,{n:a},a.id))]})})}let w=new Intl.NumberFormat("en"),x=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}),y="font-mono text-[24px] font-semibold tracking-tight",z="text-[11.5px] font-medium uppercase tracking-wide text-ink-soft",A="mt-1 text-[12px] text-ink-soft",B="px-3 py-2 text-left text-[12px] font-medium text-ink-soft",C="border-t border-line px-3 py-2";async function D({searchParams:a}){let t=await (0,j.B)("owner");if(!t.ok)return(0,b.jsx)(i.f,{role:t.member.role});let u=await a,E=(0,r.D)(u.range),F="1"===u.api,G=new Date,H=(0,r.q)(E,G),[{rows:I,capped:J},K,L,M,N,O,P,Q,R]=await Promise.all([(0,n.v)(H.since),(0,n.c)(F?[...r.b,...r.X]:[...r.b],50),(0,n.e)(G),(0,n.q)(H.since),(0,n.S)(),(0,n.m)(G),(0,n.a)(G).catch(()=>({activity:null,limits:{...m.m}})),(0,o.y)(G).catch(()=>null),(0,o.V)().catch(()=>null)]),S=Q?.report?Q.report.models.filter(a=>(0,o._)(Q.report,Q.prefs,Q.allowed).includes(a.id)):[],T=P.activity?.running??null,U=(0,r.L)(I),V=(0,r.V)(I,H),W=!!Q?.report&&(0,o.U)(Q.report,G),X=(0,r.K)({agModels:S,providers:N,clients:O,rows:I,byAgent:M,running:T,agConnected:W}),Y=L.reduce((a,b)=>!a||b.at>a?b.at:a,null),Z=(0,r.z)(T,Y,Q?.report?.models??[],G),$=(0,m.X)(L,P.limits,G),_="requests"===u.chart?"requests":"tokens",aa=a=>{let b=new URLSearchParams;return b.set("range",a.range??E),(a.api??F)&&b.set("api","1"),(a.chart??_)==="requests"&&b.set("chart","requests"),`/ai/usage?${b.toString()}`},ab=a=>(0,l.f)("rounded-md px-2.5 py-1 text-[13px] hover:no-underline",a?"bg-nav-active font-medium text-nav-active-text":"text-ink-soft hover:bg-hover hover:text-ink");return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h.AutoRefresh,{at:G.getTime(),everyMs:Z.running?5e3:void 0}),(0,b.jsx)(g.L,{crumbs:[{label:"AI & API"},{label:"AI Gateway",href:"/ai"},{label:"Usage"}],title:"Usage & Analytics",sub:k.V.sub}),(0,b.jsxs)("nav",{"aria-label":"Range",className:"flex flex-wrap items-center gap-1",children:[r.d.map(a=>(0,b.jsx)(e.default,{href:aa({range:a.key}),"aria-current":a.key===E?"page":void 0,className:ab(a.key===E),children:a.label},a.key)),"all"===E&&(0,b.jsx)("span",{className:"ml-2 text-[12px] text-ink-faint",children:"Watchbell keeps 30 days."})]}),(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-3 md:grid-cols-3 xl:grid-cols-5",children:[(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Total requests"}),(0,b.jsx)("div",{className:y,children:w.format(U.requests)}),(0,b.jsxs)("div",{className:A,children:[w.format(U.agentRequests)," ",k.V.agentRequests," · ",w.format(U.providerRequests)," providers",U.errors?` \xb7 ${U.errors} failed`:""]})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Input tokens"}),(0,b.jsx)("div",{className:y,title:w.format(U.input),children:x.format(U.input)}),(0,b.jsx)("div",{className:A,children:"New input, not from cache"})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Cached tokens"}),(0,b.jsx)("div",{className:y,title:w.format(U.cached),children:x.format(U.cached)}),(0,b.jsx)("div",{className:A,children:"Read from the prompt cache"})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Output tokens"}),(0,b.jsx)("div",{className:y,title:w.format(U.output),children:x.format(U.output)}),(0,b.jsxs)("div",{className:A,children:["incl. ",(0,b.jsx)("span",{className:"font-mono",children:x.format(U.thinking)})," thinking"]})]}),(0,b.jsxs)(g.N,{children:[(0,b.jsx)("div",{className:z,children:"Est. cost"}),(0,b.jsx)("div",{className:y,children:"$0.00"}),(0,b.jsxs)("div",{className:A,children:[k.V.costAgents," · providers: ",(0,b.jsx)("span",{title:"No prices are known for your own keys",children:"—"})]})]})]}),(0,b.jsxs)("div",{className:"grid gap-3 lg:grid-cols-[minmax(0,1fr)_320px]",children:[(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,b.jsxs)(g.N,{title:"Sources",meta:(0,b.jsx)("span",{className:"font-mono",children:r.d.find(a=>a.key===E)?.label}),children:[(0,b.jsxs)("div",{className:(0,l.f)("mb-2 flex items-center gap-2 rounded-md border px-3 py-2 text-[13px]",Z.running?"border-brand bg-brand-soft text-ink":"border-line text-ink-soft"),role:"status",children:[Z.running?(0,b.jsx)(c,{size:16,className:"text-brand","aria-hidden":!0}):(0,b.jsx)(d.f,{size:16,"aria-hidden":!0}),(0,b.jsx)("span",{className:"font-mono text-[12.5px]",children:Z.text})]}),(0,b.jsx)(v,{graph:X})]}),(0,b.jsxs)(g.N,{title:"tokens"===_?"Tokens":"Requests",meta:(0,b.jsxs)("span",{className:"flex gap-1",children:[(0,b.jsx)(e.default,{href:aa({chart:"tokens"}),className:ab("tokens"===_),children:"Tokens"}),(0,b.jsx)(e.default,{href:aa({chart:"requests"}),className:ab("requests"===_),children:"Requests"})]}),children:[(0,b.jsx)(f.T,{height:140,label:"tokens"===_?`Tokens per ${H.bucket}: new input, cached, output`:`Requests per ${H.bucket}`,parts:"tokens"===_?["New input","Cached","Output"]:["Requests"],bars:V.map(a=>({key:a.t.toISOString(),title:"tokens"===_?`${a.label}: ${w.format(a.fresh)} new \xb7 ${w.format(a.cached)} cached \xb7 ${w.format(a.output)} out`:`${a.label}: ${w.format(a.requests)} requests`,values:"tokens"===_?[a.fresh,a.cached,a.output]:[a.requests]}))}),(0,b.jsxs)("div",{className:"mt-1 flex justify-between font-mono text-[11px] text-ink-faint",children:[(0,b.jsx)("span",{children:V[0]?.label}),(0,b.jsx)("span",{children:V.at(-1)?.label})]}),J&&(0,b.jsx)("p",{className:"m-0 mt-2 text-[12px] text-warn",children:"Only the newest 20,000 requests are counted in this range."})]})]}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,b.jsx)(p.V,{report:R,now:G}),W&&(0,b.jsxs)(g.N,{title:k.V.quotaTitle,meta:(0,b.jsx)(s.LimitsForm,{values:P.limits}),children:[(0,b.jsx)("ul",{className:"m-0 flex list-none flex-col gap-3 p-0",children:$.map(a=>(0,b.jsxs)("li",{children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"font-medium",children:a.label}),(0,b.jsx)("span",{className:"ml-auto font-mono text-[12px] text-ink-soft",children:null===a.limit?`${x.format(a.used)} used`:`${x.format(a.remaining??0)} left of ${x.format(a.limit)}`})]}),null!==a.limit&&null!==a.pct&&(0,b.jsx)(g.e,{pct:a.pct,tone:a.pct>=100?"err":a.pct>=80?"warn":void 0}),(0,b.jsxs)("div",{className:"mt-1 text-[12px] text-ink-faint",children:[null===a.limit?"No limit entered · ":"",a.runs," runs in ",a.window,a.resetsAt?` \xb7 resets as the oldest run leaves the window (~${(0,q.X)(a.resetsAt,G)})`:""]})]},a.key))}),(0,b.jsxs)("p",{className:"m-0 mt-3 text-[12px] text-ink-faint",children:[k.V.quotaNote," ","Counted: new input + output + thinking; cached input excluded."]})]})]})]}),(0,b.jsx)(g.N,{title:"Recent requests",meta:(0,b.jsx)(e.default,{href:aa({api:!F}),className:"text-[12.5px]","aria-pressed":F,children:F?"Hide API calls":"Include API calls"}),flush:!0,children:0===K.length?(0,b.jsx)(g.k,{title:"No requests yet",children:k.V.emptyRecent}):(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:"w-full border-collapse text-[13px]",children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{children:[(0,b.jsx)("th",{className:B,children:"Model"}),(0,b.jsx)("th",{className:B,children:"Purpose"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"New ↑"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"Cached"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"Out ↓"}),(0,b.jsx)("th",{className:`${B} text-right`,children:"Duration"}),(0,b.jsx)("th",{className:B,children:"Status"}),(0,b.jsx)("th",{className:B,children:"When"})]})}),(0,b.jsx)("tbody",{children:K.map((a,b)=>(0,r.I)(a,G,b)).map(a=>(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{className:`${C} max-w-[260px] truncate font-mono text-[12.5px]`,children:a.model}),(0,b.jsx)("td",{className:`${C} text-ink-soft`,children:a.purpose}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:null===a.fresh?"–":w.format(a.fresh)}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:null===a.cached?"–":w.format(a.cached)}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:null===a.out?"–":w.format(a.out)}),(0,b.jsx)("td",{className:`${C} text-right font-mono`,children:a.durationMs<1e3?`${a.durationMs} ms`:(0,q._)(a.durationMs)}),(0,b.jsx)("td",{className:C,children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 font-mono text-[12px]",children:[(0,b.jsx)("i",{className:(0,l.f)("inline-block size-2 rounded-full","ok"===a.tone?"bg-ok":"warn"===a.tone?"bg-warn-icon":"bg-err"),"aria-hidden":!0}),a.status]})}),(0,b.jsx)("td",{className:`${C} whitespace-nowrap text-ink-soft`,title:a.whenTitle,children:a.when})]},a.key))})]})})})]})}a.s(["default",0,D],258291)}],91185,function(a){a.n(a.i(258291))}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_usage_1v003vrkwk19w._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[348021,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(823292),e=a.i(619089),f=a.i(368114);let g=[{key:"gemini5h",label:"Gemini · 5 h",family:"gemini",windowMs:18e6,window:"5 h"},{key:"geminiWeek",label:"Gemini · week",family:"gemini",windowMs:6048e5,window:"7 days"},{key:"claude5h",label:"Claude · 5 h",family:"claude",windowMs:18e6,window:"5 h"},{key:"claudeWeek",label:"Claude · week",family:"claude",windowMs:6048e5,window:"7 days"}];var h=a.i(405050);let i=(0,h.createServerReference)("40b5d5669ef989f9ffbc17fd1b7a96244ac2097954",h.callServer,void 0,h.findSourceMapURL,"saveAgLimits");a.s(["LimitsForm",0,function({values:a}){let[h,j]=(0,c.useTransition)(),[k,l]=(0,c.useState)(!1);return k?(0,b.jsxs)("form",{className:"flex flex-col gap-2",action:a=>j(async()=>{try{let b=await i(a);b.ok?(d.c.success(b.message??"Saved."),l(!1)):d.c.error(b.error)}catch{d.c.error("Something went wrong. Try again.")}}),children:[g.map(c=>(0,b.jsxs)("label",{className:"flex items-center gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"w-28 shrink-0 text-ink-soft",children:c.label}),(0,b.jsx)("input",{name:c.key,inputMode:"numeric",autoComplete:"off",placeholder:"No limit",defaultValue:a[c.key]??"",className:(0,f.f)(e.S,"min-w-0 flex-1 py-1 text-right font-mono text-[12.5px]"),"aria-label":`${c.label} limit in tokens`})]},c.key)),(0,b.jsx)("p",{className:"m-0 text-[12px] text-ink-faint",children:"Tokens per window: new input + output + thinking. Cached input isn't counted."}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(e.K,{size:"sm",variant:"primary",type:"submit",disabled:h,children:h?"Saving…":"Save"}),(0,b.jsx)(e.K,{size:"sm",type:"button",disabled:h,onClick:()=>l(!1),children:"Cancel"})]})]}):(0,b.jsx)(e.K,{size:"sm",onClick:()=>l(!0),children:"Edit limits"})}],348021)}];
1
+ module.exports=[348021,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(823292),e=a.i(619089),f=a.i(368114);let g=[{key:"gemini5h",label:"Gemini · 5 h",family:"gemini",windowMs:18e6,window:"5 h"},{key:"geminiWeek",label:"Gemini · week",family:"gemini",windowMs:6048e5,window:"7 days"},{key:"claude5h",label:"Claude · 5 h",family:"claude",windowMs:18e6,window:"5 h"},{key:"claudeWeek",label:"Claude · week",family:"claude",windowMs:6048e5,window:"7 days"}];var h=a.i(405050);let i=(0,h.createServerReference)("400aa3098e9d852e864749f130ff0f5b0e561a48e2",h.callServer,void 0,h.findSourceMapURL,"saveAgLimits");a.s(["LimitsForm",0,function({values:a}){let[h,j]=(0,c.useTransition)(),[k,l]=(0,c.useState)(!1);return k?(0,b.jsxs)("form",{className:"flex flex-col gap-2",action:a=>j(async()=>{try{let b=await i(a);b.ok?(d.c.success(b.message??"Saved."),l(!1)):d.c.error(b.error)}catch{d.c.error("Something went wrong. Try again.")}}),children:[g.map(c=>(0,b.jsxs)("label",{className:"flex items-center gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"w-28 shrink-0 text-ink-soft",children:c.label}),(0,b.jsx)("input",{name:c.key,inputMode:"numeric",autoComplete:"off",placeholder:"No limit",defaultValue:a[c.key]??"",className:(0,f.f)(e.S,"min-w-0 flex-1 py-1 text-right font-mono text-[12.5px]"),"aria-label":`${c.label} limit in tokens`})]},c.key)),(0,b.jsx)("p",{className:"m-0 text-[12px] text-ink-faint",children:"Tokens per window: new input + output + thinking. Cached input isn't counted."}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(e.K,{size:"sm",variant:"primary",type:"submit",disabled:h,children:h?"Saving…":"Save"}),(0,b.jsx)(e.K,{size:"sm",type:"button",disabled:h,onClick:()=>l(!1),children:"Cancel"})]})]}):(0,b.jsx)(e.K,{size:"sm",onClick:()=>l(!0),children:"Edit limits"})}],348021)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28console%29_%28private%29_ai_usage_limits-form_tsx_0sfk3ver58rqw._.js.map
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[217897,a=>{var b=a.i(187924),c=a.i(572131),d=a.i(823292),e=a.i(188406),f=a.i(742680),g=a.i(293078),h=a.i(752818);a.s(["AppMenu",0,function({app:a}){let[,i]=(0,c.useTransition)(),j=(0,h.f)(),k=[{label:"Redeploy",later:6},...a.siteUrl?[{label:"Open site",href:a.siteUrl}]:[],{label:"View logs",later:5}];return a.monitorCount>0&&k.push({label:a.paused?"Resume monitors":"Pause monitors",onSelect:()=>j(()=>new Promise(b=>i(async()=>{try{let b=await (0,g.f)(a.id,!a.paused);b.ok?d.c.success(b.message??""):d.c.error(b.error)}catch{d.c.error("Something went wrong. Try again.")}finally{b()}})))}),(0,b.jsx)(e.RowMenu,{items:k,label:(0,f.J)(a.name)})}])},293078,752818,a=>{var b=a.i(405050);let c=(0,b.createServerReference)("60366e1f5a6a959733f3b03a61c7a3da273ded3b18",b.callServer,void 0,b.findSourceMapURL,"pauseAppMonitors");a.s(["f",0,c],293078);var d=a.i(572131);a.s(["f",0,function(){let a=(0,d.useRef)(!1);return b=>!a.current&&(a.current=!0,b().catch(()=>void 0).finally(()=>{a.current=!1}),!0)}],752818)}]})();
1
+ (()=>{"use strict";module.exports=[217897,a=>{var b=a.i(187924),c=a.i(572131),d=a.i(823292),e=a.i(188406),f=a.i(742680),g=a.i(405174),h=a.i(752818);a.s(["AppMenu",0,function({app:a}){let[,i]=(0,c.useTransition)(),j=(0,h.f)(),k=[{label:"Redeploy",later:6},...a.siteUrl?[{label:"Open site",href:a.siteUrl}]:[],{label:"View logs",later:5}];return a.monitorCount>0&&k.push({label:a.paused?"Resume monitors":"Pause monitors",onSelect:()=>j(()=>new Promise(b=>i(async()=>{try{let b=await (0,g.f)(a.id,!a.paused);b.ok?d.c.success(b.message??""):d.c.error(b.error)}catch{d.c.error("Something went wrong. Try again.")}finally{b()}})))}),(0,b.jsx)(e.RowMenu,{items:k,label:(0,f.J)(a.name)})}])},405174,752818,a=>{var b=a.i(405050);let c=(0,b.createServerReference)("6078a6727342c4ef6348dcecf887d0ca6d82be3f59",b.callServer,void 0,b.findSourceMapURL,"pauseAppMonitors");a.s(["f",0,c],405174);var d=a.i(572131);a.s(["f",0,function(){let a=(0,d.useRef)(!1);return b=>!a.current&&(a.current=!0,b().catch(()=>void 0).finally(()=>{a.current=!1}),!0)}],752818)}]})();
2
2
 
3
- //# sourceMappingURL=src_app_%28console%29_1ppp9j5e2rtqf._.js.map
3
+ //# sourceMappingURL=src_app_%28console%29_1olpa0osy74mq._.js.map