@whxway/loom 1.0.1 → 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 (353) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build/56416d4ae4ce586f.js +6 -0
  3. package/.next/build/56416d4ae4ce586f.js.map +5 -0
  4. package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js +206 -0
  5. package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js.map +8 -0
  6. package/.next/build/chunks/[root-of-the-server]__1f933tp._.js +500 -0
  7. package/.next/build/chunks/[root-of-the-server]__1f933tp._.js.map +11 -0
  8. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js +13 -0
  9. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js.map +5 -0
  10. package/.next/build/chunks/[turbopack]_runtime.js +890 -0
  11. package/.next/build/chunks/[turbopack]_runtime.js.map +11 -0
  12. package/.next/build/chunks/node_modules_20v-8wl._.js +6824 -0
  13. package/.next/build/chunks/node_modules_20v-8wl._.js.map +47 -0
  14. package/.next/build/package.json +1 -0
  15. package/.next/build-manifest.json +3 -3
  16. package/.next/cache/.previewinfo +1 -0
  17. package/.next/cache/.rscinfo +1 -0
  18. package/.next/cache/.tsbuildinfo +1 -0
  19. package/.next/diagnostics/build-diagnostics.json +6 -0
  20. package/.next/diagnostics/framework.json +1 -0
  21. package/.next/diagnostics/route-bundle-stats.json +488 -0
  22. package/.next/fallback-build-manifest.json +3 -3
  23. package/.next/prerender-manifest.json +3 -3
  24. package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/(dashboard)/logs/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(dashboard)/mcp/page.js.nft.json +1 -1
  27. package/.next/server/app/(dashboard)/mcp/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/(dashboard)/mcp/presets/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(dashboard)/models/[name]/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/(dashboard)/playground/audio/speech/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(dashboard)/playground/audio/transcription/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/(dashboard)/playground/chat/page.js.nft.json +1 -1
  34. package/.next/server/app/(dashboard)/playground/chat/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/(dashboard)/playground/embedding/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(dashboard)/playground/image/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/(dashboard)/playground/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(dashboard)/playground/video/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/(dashboard)/providers/[name]/page.js.nft.json +1 -1
  40. package/.next/server/app/(dashboard)/providers/[name]/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app/(dashboard)/providers/page.js.nft.json +1 -1
  42. package/.next/server/app/(dashboard)/providers/page_client-reference-manifest.js +1 -1
  43. package/.next/server/app/(dashboard)/settings/api-keys/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  45. package/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/(dashboard)/settings/users/page.js.nft.json +1 -1
  47. package/.next/server/app/(dashboard)/settings/users/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/_global-error.html +1 -1
  49. package/.next/server/app/_global-error.rsc +1 -1
  50. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  52. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  53. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  54. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  55. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/_not-found.html +2 -2
  57. package/.next/server/app/_not-found.rsc +3 -3
  58. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  59. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  62. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  63. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  64. package/.next/server/app/api/adapters/route.js.nft.json +1 -1
  65. package/.next/server/app/api/apikeys/[id]/route.js.nft.json +1 -1
  66. package/.next/server/app/api/apikeys/route.js.nft.json +1 -1
  67. package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
  68. package/.next/server/app/api/conversations/[id]/messages/route.js.nft.json +1 -1
  69. package/.next/server/app/api/conversations/[id]/route.js.nft.json +1 -1
  70. package/.next/server/app/api/conversations/route.js.nft.json +1 -1
  71. package/.next/server/app/api/health/route.js.nft.json +1 -1
  72. package/.next/server/app/api/login/route.js.nft.json +1 -1
  73. package/.next/server/app/api/logout/route.js.nft.json +1 -1
  74. package/.next/server/app/api/logs/generations/[id]/images/[idx]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/logs/generations/[id]/route.js.nft.json +1 -1
  76. package/.next/server/app/api/logs/generations/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/presets/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/servers/[id]/check/route.js.nft.json +1 -1
  79. package/.next/server/app/api/mcp/servers/[id]/route.js.nft.json +1 -1
  80. package/.next/server/app/api/mcp/servers/[id]/tools/route.js.nft.json +1 -1
  81. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  82. package/.next/server/app/api/messages/[id]/rate/route.js.nft.json +1 -1
  83. package/.next/server/app/api/models/[id]/route.js.nft.json +1 -1
  84. package/.next/server/app/api/models/route.js.nft.json +1 -1
  85. package/.next/server/app/api/ping/route.js.nft.json +1 -1
  86. package/.next/server/app/api/playground/chat/route.js.nft.json +1 -1
  87. package/.next/server/app/api/playground/embedding/route.js.nft.json +1 -1
  88. package/.next/server/app/api/providers/[id]/check/route.js.nft.json +1 -1
  89. package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  90. package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  91. package/.next/server/app/api/providers/probe/route.js.nft.json +1 -1
  92. package/.next/server/app/api/providers/reload/route.js.nft.json +1 -1
  93. package/.next/server/app/api/providers/route.js.nft.json +1 -1
  94. package/.next/server/app/api/stats/models/[name]/route.js.nft.json +1 -1
  95. package/.next/server/app/api/stats/route.js.nft.json +1 -1
  96. package/.next/server/app/api/tools/[id]/route.js.nft.json +1 -1
  97. package/.next/server/app/api/tools/route.js.nft.json +1 -1
  98. package/.next/server/app/api/users/[username]/route.js.nft.json +1 -1
  99. package/.next/server/app/api/users/me/preferences/route.js.nft.json +1 -1
  100. package/.next/server/app/api/users/me/route.js.nft.json +1 -1
  101. package/.next/server/app/api/users/route.js.nft.json +1 -1
  102. package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  103. package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  104. package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  105. package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  106. package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  107. package/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  108. package/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  109. package/.next/server/app/api/v1/videos/[id]/content/route.js.nft.json +1 -1
  110. package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  111. package/.next/server/app/api/v1/videos/route.js.nft.json +1 -1
  112. package/.next/server/app/api/variants/route.js.nft.json +1 -1
  113. package/.next/server/app/index.html +2 -2
  114. package/.next/server/app/index.rsc +3 -3
  115. package/.next/server/app/index.segments/!KGRhc2hib2FyZCk/__PAGE__.segment.rsc +1 -1
  116. package/.next/server/app/index.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  117. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  118. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  119. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  120. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  121. package/.next/server/app/login.html +2 -2
  122. package/.next/server/app/login.rsc +3 -3
  123. package/.next/server/app/login.segments/!KGF1dGgp/login/__PAGE__.segment.rsc +1 -1
  124. package/.next/server/app/login.segments/!KGF1dGgp/login.segment.rsc +1 -1
  125. package/.next/server/app/login.segments/!KGF1dGgp.segment.rsc +1 -1
  126. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  127. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  128. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  129. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  130. package/.next/server/app/logs.html +2 -2
  131. package/.next/server/app/logs.rsc +3 -3
  132. package/.next/server/app/logs.segments/!KGRhc2hib2FyZCk/logs/__PAGE__.segment.rsc +1 -1
  133. package/.next/server/app/logs.segments/!KGRhc2hib2FyZCk/logs.segment.rsc +1 -1
  134. package/.next/server/app/logs.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  135. package/.next/server/app/logs.segments/_full.segment.rsc +3 -3
  136. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  137. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  138. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  139. package/.next/server/app/mcp/presets.html +2 -2
  140. package/.next/server/app/mcp/presets.rsc +5 -5
  141. package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk/mcp/presets/__PAGE__.segment.rsc +2 -2
  142. package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk/mcp/presets.segment.rsc +1 -1
  143. package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk/mcp.segment.rsc +1 -1
  144. package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  145. package/.next/server/app/mcp/presets.segments/_full.segment.rsc +5 -5
  146. package/.next/server/app/mcp/presets.segments/_head.segment.rsc +1 -1
  147. package/.next/server/app/mcp/presets.segments/_index.segment.rsc +2 -2
  148. package/.next/server/app/mcp/presets.segments/_tree.segment.rsc +2 -2
  149. package/.next/server/app/mcp.html +2 -2
  150. package/.next/server/app/mcp.rsc +5 -5
  151. package/.next/server/app/mcp.segments/!KGRhc2hib2FyZCk/mcp/__PAGE__.segment.rsc +2 -2
  152. package/.next/server/app/mcp.segments/!KGRhc2hib2FyZCk/mcp.segment.rsc +1 -1
  153. package/.next/server/app/mcp.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  154. package/.next/server/app/mcp.segments/_full.segment.rsc +5 -5
  155. package/.next/server/app/mcp.segments/_head.segment.rsc +1 -1
  156. package/.next/server/app/mcp.segments/_index.segment.rsc +2 -2
  157. package/.next/server/app/mcp.segments/_tree.segment.rsc +2 -2
  158. package/.next/server/app/playground/audio/speech.html +2 -2
  159. package/.next/server/app/playground/audio/speech.rsc +3 -3
  160. package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground/audio/speech/__PAGE__.segment.rsc +1 -1
  161. package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground/audio/speech.segment.rsc +1 -1
  162. package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground/audio.segment.rsc +1 -1
  163. package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
  164. package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  165. package/.next/server/app/playground/audio/speech.segments/_full.segment.rsc +3 -3
  166. package/.next/server/app/playground/audio/speech.segments/_head.segment.rsc +1 -1
  167. package/.next/server/app/playground/audio/speech.segments/_index.segment.rsc +2 -2
  168. package/.next/server/app/playground/audio/speech.segments/_tree.segment.rsc +2 -2
  169. package/.next/server/app/playground/audio/transcription.html +2 -2
  170. package/.next/server/app/playground/audio/transcription.rsc +3 -3
  171. package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground/audio/transcription/__PAGE__.segment.rsc +1 -1
  172. package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground/audio/transcription.segment.rsc +1 -1
  173. package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground/audio.segment.rsc +1 -1
  174. package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
  175. package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  176. package/.next/server/app/playground/audio/transcription.segments/_full.segment.rsc +3 -3
  177. package/.next/server/app/playground/audio/transcription.segments/_head.segment.rsc +1 -1
  178. package/.next/server/app/playground/audio/transcription.segments/_index.segment.rsc +2 -2
  179. package/.next/server/app/playground/audio/transcription.segments/_tree.segment.rsc +2 -2
  180. package/.next/server/app/playground/chat.html +2 -2
  181. package/.next/server/app/playground/chat.rsc +5 -5
  182. package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk/playground/chat/__PAGE__.segment.rsc +2 -2
  183. package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk/playground/chat.segment.rsc +1 -1
  184. package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
  185. package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  186. package/.next/server/app/playground/chat.segments/_full.segment.rsc +5 -5
  187. package/.next/server/app/playground/chat.segments/_head.segment.rsc +1 -1
  188. package/.next/server/app/playground/chat.segments/_index.segment.rsc +2 -2
  189. package/.next/server/app/playground/chat.segments/_tree.segment.rsc +2 -2
  190. package/.next/server/app/playground/embedding.html +2 -2
  191. package/.next/server/app/playground/embedding.rsc +3 -3
  192. package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk/playground/embedding/__PAGE__.segment.rsc +1 -1
  193. package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk/playground/embedding.segment.rsc +1 -1
  194. package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
  195. package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  196. package/.next/server/app/playground/embedding.segments/_full.segment.rsc +3 -3
  197. package/.next/server/app/playground/embedding.segments/_head.segment.rsc +1 -1
  198. package/.next/server/app/playground/embedding.segments/_index.segment.rsc +2 -2
  199. package/.next/server/app/playground/embedding.segments/_tree.segment.rsc +2 -2
  200. package/.next/server/app/playground/image.html +2 -2
  201. package/.next/server/app/playground/image.rsc +3 -3
  202. package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk/playground/image/__PAGE__.segment.rsc +1 -1
  203. package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk/playground/image.segment.rsc +1 -1
  204. package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
  205. package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  206. package/.next/server/app/playground/image.segments/_full.segment.rsc +3 -3
  207. package/.next/server/app/playground/image.segments/_head.segment.rsc +1 -1
  208. package/.next/server/app/playground/image.segments/_index.segment.rsc +2 -2
  209. package/.next/server/app/playground/image.segments/_tree.segment.rsc +2 -2
  210. package/.next/server/app/playground/video.html +2 -2
  211. package/.next/server/app/playground/video.rsc +3 -3
  212. package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk/playground/video/__PAGE__.segment.rsc +1 -1
  213. package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk/playground/video.segment.rsc +1 -1
  214. package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
  215. package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  216. package/.next/server/app/playground/video.segments/_full.segment.rsc +3 -3
  217. package/.next/server/app/playground/video.segments/_head.segment.rsc +1 -1
  218. package/.next/server/app/playground/video.segments/_index.segment.rsc +2 -2
  219. package/.next/server/app/playground/video.segments/_tree.segment.rsc +2 -2
  220. package/.next/server/app/playground.html +2 -2
  221. package/.next/server/app/playground.rsc +3 -3
  222. package/.next/server/app/playground.segments/!KGRhc2hib2FyZCk/playground/__PAGE__.segment.rsc +1 -1
  223. package/.next/server/app/playground.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
  224. package/.next/server/app/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  225. package/.next/server/app/playground.segments/_full.segment.rsc +3 -3
  226. package/.next/server/app/playground.segments/_head.segment.rsc +1 -1
  227. package/.next/server/app/playground.segments/_index.segment.rsc +2 -2
  228. package/.next/server/app/playground.segments/_tree.segment.rsc +2 -2
  229. package/.next/server/app/providers.html +2 -2
  230. package/.next/server/app/providers.rsc +5 -5
  231. package/.next/server/app/providers.segments/!KGRhc2hib2FyZCk/providers/__PAGE__.segment.rsc +2 -2
  232. package/.next/server/app/providers.segments/!KGRhc2hib2FyZCk/providers.segment.rsc +1 -1
  233. package/.next/server/app/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  234. package/.next/server/app/providers.segments/_full.segment.rsc +5 -5
  235. package/.next/server/app/providers.segments/_head.segment.rsc +1 -1
  236. package/.next/server/app/providers.segments/_index.segment.rsc +2 -2
  237. package/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
  238. package/.next/server/app/settings/api-keys.html +2 -2
  239. package/.next/server/app/settings/api-keys.rsc +3 -3
  240. package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk/settings/api-keys/__PAGE__.segment.rsc +1 -1
  241. package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk/settings/api-keys.segment.rsc +1 -1
  242. package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  243. package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  244. package/.next/server/app/settings/api-keys.segments/_full.segment.rsc +3 -3
  245. package/.next/server/app/settings/api-keys.segments/_head.segment.rsc +1 -1
  246. package/.next/server/app/settings/api-keys.segments/_index.segment.rsc +2 -2
  247. package/.next/server/app/settings/api-keys.segments/_tree.segment.rsc +2 -2
  248. package/.next/server/app/settings/users.html +2 -2
  249. package/.next/server/app/settings/users.rsc +5 -5
  250. package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk/settings/users/__PAGE__.segment.rsc +2 -2
  251. package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk/settings/users.segment.rsc +1 -1
  252. package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  253. package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  254. package/.next/server/app/settings/users.segments/_full.segment.rsc +5 -5
  255. package/.next/server/app/settings/users.segments/_head.segment.rsc +1 -1
  256. package/.next/server/app/settings/users.segments/_index.segment.rsc +2 -2
  257. package/.next/server/app/settings/users.segments/_tree.segment.rsc +2 -2
  258. package/.next/server/app/settings.html +2 -2
  259. package/.next/server/app/settings.rsc +5 -5
  260. package/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
  261. package/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  262. package/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  263. package/.next/server/app/settings.segments/_full.segment.rsc +5 -5
  264. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  265. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  266. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  267. package/.next/server/chunks/[root-of-the-server]__02sypva._.js +2 -2
  268. package/.next/server/chunks/[root-of-the-server]__02sypva._.js.map +1 -1
  269. package/.next/server/chunks/[root-of-the-server]__0g3mnim._.js +4 -1
  270. package/.next/server/chunks/[root-of-the-server]__0g3mnim._.js.map +1 -1
  271. package/.next/server/chunks/[root-of-the-server]__0myi8j1._.js +2 -2
  272. package/.next/server/chunks/[root-of-the-server]__0myi8j1._.js.map +1 -1
  273. package/.next/server/chunks/[root-of-the-server]__1qg3d87._.js +2 -2
  274. package/.next/server/chunks/[root-of-the-server]__1qg3d87._.js.map +1 -1
  275. package/.next/server/chunks/ssr/_001fhst._.js +3 -0
  276. package/.next/server/chunks/ssr/_001fhst._.js.map +1 -0
  277. package/.next/server/chunks/ssr/_02wtd-0._.js +3 -0
  278. package/.next/server/chunks/ssr/_02wtd-0._.js.map +1 -0
  279. package/.next/server/chunks/ssr/_05ufvn1._.js +9 -0
  280. package/.next/server/chunks/ssr/_05ufvn1._.js.map +1 -0
  281. package/.next/server/chunks/ssr/{_1fd20ju._.js → _066w-6f._.js} +2 -2
  282. package/.next/server/chunks/ssr/{_1fd20ju._.js.map → _066w-6f._.js.map} +1 -1
  283. package/.next/server/chunks/ssr/_0gd7kq_._.js +1 -1
  284. package/.next/server/chunks/ssr/_0gd7kq_._.js.map +1 -1
  285. package/.next/server/chunks/ssr/_0k-6auj._.js +3 -0
  286. package/.next/server/chunks/ssr/_0k-6auj._.js.map +1 -0
  287. package/.next/server/chunks/ssr/_0qo9tx1._.js +3 -0
  288. package/.next/server/chunks/ssr/_0qo9tx1._.js.map +1 -0
  289. package/.next/server/chunks/ssr/_0uom5g-._.js +9 -0
  290. package/.next/server/chunks/ssr/_0uom5g-._.js.map +1 -0
  291. package/.next/server/chunks/ssr/_1b09eqp._.js +1 -1
  292. package/.next/server/chunks/ssr/_1b09eqp._.js.map +1 -1
  293. package/.next/server/chunks/ssr/_1oi0iqt._.js +9 -0
  294. package/.next/server/chunks/ssr/_1oi0iqt._.js.map +1 -0
  295. package/.next/server/chunks/ssr/_1q3gglq._.js +3 -0
  296. package/.next/server/chunks/ssr/_1q3gglq._.js.map +1 -0
  297. package/.next/server/chunks/ssr/_1y5sreb._.js +3 -0
  298. package/.next/server/chunks/ssr/_1y5sreb._.js.map +1 -0
  299. package/.next/server/chunks/ssr/_1zlpzyk._.js +1 -1
  300. package/.next/server/chunks/ssr/_1zlpzyk._.js.map +1 -1
  301. package/.next/server/chunks/ssr/app_(dashboard)_mcp_page_tsx_0cg7pz9._.js +1 -1
  302. package/.next/server/chunks/ssr/app_(dashboard)_mcp_page_tsx_0cg7pz9._.js.map +1 -1
  303. package/.next/server/middleware-build-manifest.js +3 -3
  304. package/.next/server/pages/404.html +2 -2
  305. package/.next/server/pages/500.html +1 -1
  306. package/.next/server/server-reference-manifest.js +1 -1
  307. package/.next/server/server-reference-manifest.json +1 -1
  308. package/.next/static/chunks/0brzabhj3foow.js +1 -0
  309. package/.next/static/chunks/0cbg1vmtl84ae.css +1 -0
  310. package/.next/static/chunks/0hf0pedij0d6a.js +7 -0
  311. package/.next/static/chunks/1lo5yg9gvb9eg.js +7 -0
  312. package/.next/static/chunks/1s-rfyrjre6lb.js +1 -0
  313. package/.next/static/chunks/27siz43i4h5l7.js +9 -0
  314. package/.next/static/chunks/29p-wdja_cbgh.js +11 -0
  315. package/.next/static/chunks/396ikhrcofosq.js +7 -0
  316. package/.next/static/chunks/3m3fw3fmcc301.js +7 -0
  317. package/.next/trace +2 -0
  318. package/.next/trace-build +1 -1
  319. package/.next/types/cache-life.d.ts +145 -0
  320. package/.next/types/routes.d.ts +139 -0
  321. package/.next/types/validator.ts +682 -0
  322. package/bin/loom.mjs +80 -21
  323. package/package.json +1 -1
  324. package/.next/server/chunks/ssr/_0g6iz5n._.js +0 -3
  325. package/.next/server/chunks/ssr/_0g6iz5n._.js.map +0 -1
  326. package/.next/server/chunks/ssr/_0mim08o._.js +0 -3
  327. package/.next/server/chunks/ssr/_0mim08o._.js.map +0 -1
  328. package/.next/server/chunks/ssr/_0xm-krv._.js +0 -9
  329. package/.next/server/chunks/ssr/_0xm-krv._.js.map +0 -1
  330. package/.next/server/chunks/ssr/_0zxn_u0._.js +0 -3
  331. package/.next/server/chunks/ssr/_0zxn_u0._.js.map +0 -1
  332. package/.next/server/chunks/ssr/_151pht4._.js +0 -9
  333. package/.next/server/chunks/ssr/_151pht4._.js.map +0 -1
  334. package/.next/server/chunks/ssr/_18tl_0o._.js +0 -9
  335. package/.next/server/chunks/ssr/_18tl_0o._.js.map +0 -1
  336. package/.next/server/chunks/ssr/_19nuoa6._.js +0 -9
  337. package/.next/server/chunks/ssr/_19nuoa6._.js.map +0 -1
  338. package/.next/server/chunks/ssr/_1ax02l9._.js +0 -3
  339. package/.next/server/chunks/ssr/_1ax02l9._.js.map +0 -1
  340. package/.next/server/chunks/ssr/_1fze3ic._.js +0 -9
  341. package/.next/server/chunks/ssr/_1fze3ic._.js.map +0 -1
  342. package/.next/static/chunks/0zryggvaj_s87.js +0 -7
  343. package/.next/static/chunks/16bx44gr1d_ij.js +0 -7
  344. package/.next/static/chunks/172e7ymu9a3w9.js +0 -1
  345. package/.next/static/chunks/1_w-1rm5wy0l7.css +0 -1
  346. package/.next/static/chunks/2j_bpzzylp1un.js +0 -9
  347. package/.next/static/chunks/2r2pwisd9bptv.js +0 -11
  348. package/.next/static/chunks/3at-42v-_yh7y.js +0 -7
  349. package/.next/static/chunks/3bp0ieicfxx5n.js +0 -1
  350. package/.next/static/chunks/3et56kszc9f9a.js +0 -7
  351. /package/.next/static/{S-TxD5uw__EHY12mebgvS → wCZkC7ZaYrxG37d-e2tac}/_buildManifest.js +0 -0
  352. /package/.next/static/{S-TxD5uw__EHY12mebgvS → wCZkC7ZaYrxG37d-e2tac}/_clientMiddlewareManifest.js +0 -0
  353. /package/.next/static/{S-TxD5uw__EHY12mebgvS → wCZkC7ZaYrxG37d-e2tac}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ module.exports=[596221,a=>{"use strict";var b=a.i(404650);a.s(["Loader2",()=>b.default])},205522,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Input",0,function({className:a,type:d,...e}){return(0,b.jsx)("input",{type:d,"data-slot":"input",className:(0,c.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...e})}])},917171,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(30553),e=c.forwardRef((a,c)=>(0,b.jsx)(d.Primitive.label,{...a,ref:c,onMouseDown:b=>{b.target.closest("button, input, select, textarea")||(a.onMouseDown?.(b),!b.defaultPrevented&&b.detail>1&&b.preventDefault())}}));e.displayName="Label";var f=a.i(497895);a.s(["Label",0,function({className:a,...c}){return(0,b.jsx)(e,{"data-slot":"label",className:(0,f.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",a),...c})}],917171)},77994,a=>{"use strict";var b=a.i(572131);a.s(["usePrevious",0,function(a){let c=b.useRef({value:a,previous:a});return b.useMemo(()=>(c.current.value!==a&&(c.current.previous=c.current.value,c.current.value=a),c.current.previous),[a])}])},524634,a=>{"use strict";let b=(0,a.i(349682).defineResource)({path:"/models",key:"models",listShape:"array",staleTime:6e4,invalidates:["providers"]});a.s(["models",0,b])},292e3,a=>{"use strict";let b=(0,a.i(883706).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,b],292e3)},808406,a=>{"use strict";let b=(0,a.i(883706).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",0,b],808406)},339220,a=>{"use strict";var b=a.i(370025),c=a.i(433217),d=a.i(937927),e=a.i(572131),f=a.i(349682),g=a.i(262477);let h=(0,f.defineResource)({path:"/mcp/servers",key:"mcp-servers",listShape:"array",staleTime:6e4}),i={...h,listPresets:()=>(0,g.fetcher)("/mcp/presets"),usePresets:()=>(0,c.useQuery)({queryKey:["mcp-presets"],queryFn:()=>i.listPresets(),staleTime:3e5}),check:a=>(0,g.fetcher)(`/mcp/servers/${encodeURIComponent(a)}/check`,{method:"POST"}),useCheck:a=>{let c=(0,d.useQueryClient)();return(0,b.useMutation)({mutationFn:a=>i.check(a),onSuccess:b=>{c.invalidateQueries({queryKey:h.keys.all()}),a?.onSuccess?.(b)},onError:b=>a?.onError?.(b)})},checkStream:async(a,b,c)=>{let d=await (0,g.rawFetch)(`/mcp/servers/${encodeURIComponent(a)}/check`,{method:"POST",headers:{Accept:"text/event-stream"},signal:c?.signal});if(!d.body)throw Error("No response body");let e=d.body.getReader(),f=new TextDecoder,h="",i=null;try{for(;;){let{done:a,value:c}=await e.read();if(a)break;let d=(h+=f.decode(c,{stream:!0})).indexOf("\n\n");for(;-1!==d;){let a=h.slice(0,d);h=h.slice(d+2);let c=a.split("\n").find(a=>a.startsWith("data: "));if(c)try{let a=JSON.parse(c.slice(6));b(a),"result"===a.type?i=a.server:"error"===a.type&&a.server&&(i=a.server)}catch{}d=h.indexOf("\n\n")}}}finally{try{e.releaseLock()}catch{}}return i},useCheckStream:()=>{let a=(0,d.useQueryClient)(),[b,c]=e.useState(null),[f,g]=e.useState([]),[j,k]=e.useState(!1),[l,m]=e.useState(null),[n,o]=e.useState(null),p=e.useRef(null),q=e.useCallback(()=>{c(null),g([]),m(null),o(null)},[]),r=e.useCallback(()=>{p.current?.abort(),p.current=null,k(!1)},[]),s=e.useCallback(async b=>{q(),k(!0);let d=new AbortController;p.current=d;try{let e=await i.checkStream(b,a=>{"phase"===a.type?c(a.phase):"log"===a.type?g(b=>[...b,a.line]):"result"===a.type?o(a.server):"error"===a.type&&(m(a.message),a.server&&o(a.server))},{signal:d.signal});return a.invalidateQueries({queryKey:h.keys.all()}),e}catch(b){let a=b instanceof Error?b.message:String(b);return d.signal.aborted||m(a),null}finally{k(!1),p.current=null}},[q,a]);return e.useEffect(()=>()=>p.current?.abort(),[]),{run:s,cancel:r,reset:q,phase:b,logs:f,isChecking:j,error:l,result:n}}};a.s(["mcpServers",0,i])},812213,a=>{"use strict";var b=a.i(941579),c=a.i(774684),d=class extends b.QueryObserver{constructor(a,b){super(a,b)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(a){a._type="infinite",super.setOptions(a)}getOptimisticResult(a){return a._type="infinite",super.getOptimisticResult(a)}fetchNextPage(a){return this.fetch({...a,meta:{fetchMore:{direction:"forward"}}})}fetchPreviousPage(a){return this.fetch({...a,meta:{fetchMore:{direction:"backward"}}})}createResult(a,b){let{state:d}=a,e=super.createResult(a,b),{isFetching:f,isRefetching:g,isError:h,isRefetchError:i}=e,j=d.fetchMeta?.fetchMore?.direction,k=h&&"forward"===j,l=f&&"forward"===j,m=h&&"backward"===j,n=f&&"backward"===j;return{...e,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:(0,c.hasNextPage)(b,d.data),hasPreviousPage:(0,c.hasPreviousPage)(b,d.data),isFetchNextPageError:k,isFetchingNextPage:l,isFetchPreviousPageError:m,isFetchingPreviousPage:n,isRefetchError:i&&!k&&!m,isRefetching:g&&!l&&!n}}},e=a.i(36339),f=a.i(937927),g=a.i(349682),h=a.i(262477);let i=(0,g.defineResource)({path:"/conversations",key:"conversations",paramsOf:a=>({page:a.page??1,page_size:a.page_size??20,sort:a.sort??"-updated_at",keyword:a.keyword}),staleTime:6e4}),j={...i,updateTitle:(a,b)=>i.update(a,{title:b}),messagesCacheKey:function(a,b){return[...i.keys.one(a),"messages-cache",b]},useInvalidateList:()=>{let a=(0,f.useQueryClient)();return()=>a.invalidateQueries({queryKey:i.keys.all(),predicate:a=>{let b=a.queryKey;return b.length>=2&&("list"===b[1]||"infinite"===b[1])}})},useInfinite:a=>{var b;let c=a?.pageSize??20,f=a?.keyword?.trim()||void 0;return b={queryKey:[...i.keys.all(),"infinite",a?.scope??"default",c,f??""],initialPageParam:1,queryFn:({pageParam:a=1})=>i.list({page:a,page_size:c,keyword:f}),getNextPageParam:a=>{if(a)return a.page*a.page_size<a.total?a.page+1:void 0}},(0,e.useBaseQuery)(b,d,void 0)},listMessages:(a,b)=>(0,h.fetcher)(`/conversations/${encodeURIComponent(a)}/messages?`+new URLSearchParams({page:String(b?.page??1),page_size:String(b?.page_size??50),sort:b?.sort??"-created_at"}).toString())},k=["messages"];a.s(["conversations",0,j,"messages",0,{keys:{all:()=>k},rate:(a,b,c)=>(0,h.fetcher)(`/messages/${encodeURIComponent(a)}/rate`,{method:"POST",body:JSON.stringify({rating:b,feedback:c})})}],812213)},699464,a=>{"use strict";let b=(0,a.i(883706).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,b],699464)},280281,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(507554),e=a.i(470121),f=a.i(750104),g=a.i(225152),h=a.i(77994),i=a.i(3688),j=a.i(30553),k="Switch",[l,m]=(0,f.createContextScope)(k),[n,o]=l(k);function p(a){let{__scopeSwitch:d,checked:e,children:f,defaultChecked:h,disabled:i,form:j,name:l,onCheckedChange:m,required:o,value:p="on",internal_do_not_use_render:q}=a,[r,s]=(0,g.useControllableState)({prop:e,defaultProp:h??!1,onChange:m,caller:k}),[t,u]=c.useState(null),[v,w]=c.useState(null),x=c.useRef(!1),y=!t||!!j||!!t.closest("form"),z={checked:r,setChecked:s,disabled:i,control:t,setControl:u,name:l,form:j,value:p,hasConsumerStoppedPropagationRef:x,required:o,defaultChecked:h,isFormControl:y,bubbleInput:v,setBubbleInput:w};return(0,b.jsx)(n,{scope:d,...z,children:"function"==typeof q?q(z):f})}var q="SwitchTrigger",r=c.forwardRef(({__scopeSwitch:a,onClick:c,...f},g)=>{let{value:h,disabled:i,checked:k,required:l,setControl:m,setChecked:n,hasConsumerStoppedPropagationRef:p,isFormControl:r,bubbleInput:s}=o(q,a),t=(0,e.useComposedRefs)(g,m);return(0,b.jsx)(j.Primitive.button,{type:"button",role:"switch","aria-checked":k,"aria-required":l,"data-state":x(k),"data-disabled":i?"":void 0,disabled:i,value:h,...f,ref:t,onClick:(0,d.composeEventHandlers)(c,a=>{n(a=>!a),s&&r&&(p.current=a.isPropagationStopped(),p.current||a.stopPropagation())})})});r.displayName=q;var s=c.forwardRef((a,c)=>{let{__scopeSwitch:d,name:e,checked:f,defaultChecked:g,required:h,disabled:i,value:j,onCheckedChange:k,form:l,...m}=a;return(0,b.jsx)(p,{__scopeSwitch:d,checked:f,defaultChecked:g,disabled:i,required:h,onCheckedChange:k,name:e,form:l,value:j,internal_do_not_use_render:({isFormControl:a})=>(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(r,{...m,ref:c,__scopeSwitch:d}),a&&(0,b.jsx)(w,{__scopeSwitch:d})]})})});s.displayName=k;var t="SwitchThumb",u=c.forwardRef((a,c)=>{let{__scopeSwitch:d,...e}=a,f=o(t,d);return(0,b.jsx)(j.Primitive.span,{"data-state":x(f.checked),"data-disabled":f.disabled?"":void 0,...e,ref:c})});u.displayName=t;var v="SwitchBubbleInput",w=c.forwardRef(({__scopeSwitch:a,...d},f)=>{let{control:g,hasConsumerStoppedPropagationRef:k,checked:l,defaultChecked:m,required:n,disabled:p,name:q,value:r,form:s,bubbleInput:t,setBubbleInput:u}=o(v,a),w=(0,e.useComposedRefs)(f,u),x=(0,h.usePrevious)(l),y=(0,i.useSize)(g);c.useEffect(()=>{if(!t)return;let a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,b=!k.current;if(x!==l&&a){let c=new Event("click",{bubbles:b});a.call(t,l),t.dispatchEvent(c)}},[t,x,l,k]);let z=c.useRef(l);return(0,b.jsx)(j.Primitive.input,{type:"checkbox","aria-hidden":!0,defaultChecked:m??z.current,required:n,disabled:p,name:q,value:r,form:s,...d,tabIndex:-1,ref:w,style:{...d.style,...y,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function x(a){return a?"checked":"unchecked"}w.displayName=v;var y=a.i(497895);a.s(["Switch",0,function({className:a,...c}){return(0,b.jsx)(s,{"data-slot":"switch",className:(0,y.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...c,children:(0,b.jsx)(u,{"data-slot":"switch-thumb",className:(0,y.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}],280281)},546893,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Textarea",0,function({className:a,...d}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,c.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",a),...d})}])},328790,a=>{"use strict";let b=(0,a.i(883706).default)("refresh-ccw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]);a.s(["RefreshCcw",0,b],328790)},158880,649865,a=>{"use strict";var b=a.i(187924);let c=(0,a.i(883706).default)("inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);var d=a.i(588237),e=a.i(497895);a.s(["DataTableCell",0,function({className:a,...c}){return(0,b.jsx)(d.TableCell,{className:(0,e.cn)("py-2 first:pl-4 last:pr-4",a),...c})},"DataTableEmpty",0,function({colSpan:a,children:e}){return(0,b.jsx)(d.TableRow,{className:"hover:bg-transparent",children:(0,b.jsx)(d.TableCell,{colSpan:a,className:"h-48 text-center align-middle text-muted-foreground/40",children:(0,b.jsx)("div",{className:"flex items-center justify-center",children:(0,b.jsx)(c,{className:"h-8 w-8","aria-label":"empty"})})})})},"DataTableHead",0,function({className:a,...c}){return(0,b.jsx)(d.TableHead,{className:(0,e.cn)("h-10 text-xs font-semibold uppercase tracking-wide text-muted-foreground/80 first:pl-4 last:pr-4",a),...c})},"DataTableHeader",0,function({className:a,...c}){return(0,b.jsx)(d.TableHeader,{className:(0,e.cn)("bg-muted/40 sticky top-0 z-10",a),...c})},"DataTableHeaderRow",0,function({className:a,...c}){return(0,b.jsx)(d.TableRow,{className:(0,e.cn)("hover:bg-transparent border-b-muted/60 shadow-sm",a),...c})},"DataTableRow",0,function({className:a,interactive:c=!0,...f}){return(0,b.jsx)(d.TableRow,{className:(0,e.cn)("h-10 border-b-muted/20 even:bg-muted/50 group",c&&"cursor-pointer hover:bg-muted/90",a),...f})},"DataTableShell",0,function({className:a,...c}){return(0,b.jsx)("div",{className:"overflow-hidden",children:(0,b.jsx)(d.Table,{className:a,...c})})}],158880),a.s(["DataTableBody",()=>d.TableBody],649865)},957064,a=>{"use strict";let b=(0,a.i(883706).default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);a.s(["LayoutGrid",0,b],957064)}];
2
+
3
+ //# sourceMappingURL=_001fhst._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../components/ui/input.tsx","../../../../node_modules/%40radix-ui/react-label/dist/index.mjs","../../../../components/ui/label.tsx","../../../../node_modules/%40radix-ui/react-use-previous/src/use-previous.tsx","../../../../lib/api/models.ts","../../../../node_modules/lucide-react/src/icons/circle-alert.ts","../../../../node_modules/lucide-react/src/icons/sparkles.ts","../../../../lib/api/mcp.ts","../../../../node_modules/%40tanstack/react-query/build/modern/useInfiniteQuery.js","../../../../lib/api/conversations.ts","../../../../node_modules/%40tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../../node_modules/lucide-react/src/icons/pencil.ts","../../../../node_modules/%40radix-ui/react-switch/dist/index.mjs","../../../../components/ui/switch.tsx","../../../../components/ui/textarea.tsx","../../../../node_modules/lucide-react/src/icons/refresh-ccw.ts","../../../../components/ui/data-table.tsx","../../../../node_modules/lucide-react/src/icons/inbox.ts","../../../../node_modules/lucide-react/src/icons/layout-grid.ts"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from 'react';\n\nfunction usePrevious<T>(value: T) {\n const ref = React.useRef({ value, previous: value });\n\n // We compare values before making an update to ensure that\n // a change has been made. This ensures the previous value is\n // persisted correctly between renders.\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\n\nexport { usePrevious };\n","import { defineResource } from \"./resource\";\nimport type { ModelCreateInput, ModelDTO, ModelUpdateInput } from \"@/lib/schemas/model\";\n\nexport const models = defineResource<\n ModelDTO,\n ModelCreateInput,\n ModelUpdateInput,\n Record<string, unknown>,\n ModelDTO[]\n>({\n path: \"/models\",\n key: \"models\",\n listShape: \"array\",\n staleTime: 60_000,\n invalidates: [\"providers\"],\n});\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '12', key: '1pkeuh' }],\n ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16', key: '4dfq90' }],\n];\n\n/**\n * @component @name CircleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjgiIHkyPSIxMiIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMi4wMSIgeTE9IjE2IiB5Mj0iMTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/circle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleAlert = createLucideIcon('circle-alert', __iconNode);\n\nexport default CircleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n];\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTEuMDE3IDIuODE0YTEgMSAwIDAgMSAxLjk2NiAwbDEuMDUxIDUuNTU4YTIgMiAwIDAgMCAxLjU5NCAxLjU5NGw1LjU1OCAxLjA1MWExIDEgMCAwIDEgMCAxLjk2NmwtNS41NTggMS4wNTFhMiAyIDAgMCAwLTEuNTk0IDEuNTk0bC0xLjA1MSA1LjU1OGExIDEgMCAwIDEtMS45NjYgMGwtMS4wNTEtNS41NThhMiAyIDAgMCAwLTEuNTk0LTEuNTk0bC01LjU1OC0xLjA1MWExIDEgMCAwIDEgMC0xLjk2Nmw1LjU1OC0xLjA1MWEyIDIgMCAwIDAgMS41OTQtMS41OTR6IiAvPgogIDxwYXRoIGQ9Ik0yMCAydjQiIC8+CiAgPHBhdGggZD0iTTIyIDRoLTQiIC8+CiAgPGNpcmNsZSBjeD0iNCIgY3k9IjIwIiByPSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/sparkles\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Sparkles = createLucideIcon('sparkles', __iconNode);\n\nexport default Sparkles;\n","\"use client\"\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport * as React from \"react\"\nimport { defineResource } from \"./resource\"\nimport { fetcher, rawFetch } from \"./client\"\nimport type {\n McpPreset,\n McpServerCreateInput,\n McpServerDTO,\n McpServerUpdateInput,\n} from \"@/lib/schemas/mcp\"\n\nconst base = defineResource<\n McpServerDTO,\n McpServerCreateInput,\n McpServerUpdateInput,\n Record<string, unknown>,\n McpServerDTO[]\n>({\n path: \"/mcp/servers\",\n key: \"mcp-servers\",\n listShape: \"array\",\n staleTime: 60_000,\n})\n\n/** Wire shape — mirrors lib/server/mcp/checks.ts McpCheckEvent so\n * adding a new phase/log channel is a one-place edit on each side. */\nexport type McpCheckPhase = \"spawning\" | \"starting\" | \"connecting\" | \"listing\" | \"ready\"\n\nexport type McpCheckEvent =\n | { type: \"phase\"; phase: McpCheckPhase }\n | { type: \"log\"; line: string }\n | { type: \"result\"; server: McpServerDTO }\n | { type: \"error\"; message: string; server?: McpServerDTO }\n\nexport const mcpServers = {\n ...base,\n\n // ---- presets ----\n listPresets: () => fetcher<McpPreset[]>(\"/mcp/presets\"),\n usePresets: () =>\n useQuery({\n queryKey: [\"mcp-presets\"] as const,\n queryFn: () => mcpServers.listPresets(),\n staleTime: 5 * 60 * 1000,\n }),\n\n // ---- check (one-shot JSON, kept for back-compat) ----\n check: (id: string) =>\n fetcher<McpServerDTO>(`/mcp/servers/${encodeURIComponent(id)}/check`, {\n method: \"POST\",\n }),\n useCheck: (opts?: { onSuccess?: (server: McpServerDTO) => void; onError?: (err: Error) => void }) => {\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (id: string) => mcpServers.check(id),\n onSuccess: (server) => {\n qc.invalidateQueries({ queryKey: base.keys.all() })\n opts?.onSuccess?.(server)\n },\n onError: (err: Error) => opts?.onError?.(err),\n })\n },\n\n // ---- check (SSE stream) ----\n /** Streams every phase + stderr line from the server check, then\n * resolves with the final DTO. Caller's onEvent is invoked for\n * every event including the terminating `result` / `error`. */\n checkStream: async (\n id: string,\n onEvent: (ev: McpCheckEvent) => void,\n opts?: { signal?: AbortSignal },\n ): Promise<McpServerDTO | null> => {\n const res = await rawFetch(`/mcp/servers/${encodeURIComponent(id)}/check`, {\n method: \"POST\",\n headers: { Accept: \"text/event-stream\" },\n signal: opts?.signal,\n })\n if (!res.body) throw new Error(\"No response body\")\n\n const reader = res.body.getReader()\n const decoder = new TextDecoder()\n let buf = \"\"\n let last: McpServerDTO | null = null\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buf += decoder.decode(value, { stream: true })\n // SSE frames are separated by \\n\\n.\n let nl = buf.indexOf(\"\\n\\n\")\n while (nl !== -1) {\n const frame = buf.slice(0, nl)\n buf = buf.slice(nl + 2)\n const dataLine = frame.split(\"\\n\").find((l) => l.startsWith(\"data: \"))\n if (dataLine) {\n try {\n const ev = JSON.parse(dataLine.slice(6)) as McpCheckEvent\n onEvent(ev)\n if (ev.type === \"result\") last = ev.server\n else if (ev.type === \"error\" && ev.server) last = ev.server\n } catch { /* malformed frame, skip */ }\n }\n nl = buf.indexOf(\"\\n\\n\")\n }\n }\n } finally {\n try { reader.releaseLock() } catch { /* ignore */ }\n }\n return last\n },\n useCheckStream: () => {\n const qc = useQueryClient()\n const [phase, setPhase] = React.useState<McpCheckPhase | null>(null)\n const [logs, setLogs] = React.useState<string[]>([])\n const [isChecking, setIsChecking] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n const [result, setResult] = React.useState<McpServerDTO | null>(null)\n const abortRef = React.useRef<AbortController | null>(null)\n\n const reset = React.useCallback(() => {\n setPhase(null)\n setLogs([])\n setError(null)\n setResult(null)\n }, [])\n\n const cancel = React.useCallback(() => {\n abortRef.current?.abort()\n abortRef.current = null\n setIsChecking(false)\n }, [])\n\n const run = React.useCallback(\n async (id: string) => {\n reset()\n setIsChecking(true)\n const ctrl = new AbortController()\n abortRef.current = ctrl\n try {\n const final = await mcpServers.checkStream(\n id,\n (ev) => {\n if (ev.type === \"phase\") setPhase(ev.phase)\n else if (ev.type === \"log\") setLogs((prev) => [...prev, ev.line])\n else if (ev.type === \"result\") setResult(ev.server)\n else if (ev.type === \"error\") {\n setError(ev.message)\n if (ev.server) setResult(ev.server)\n }\n },\n { signal: ctrl.signal },\n )\n qc.invalidateQueries({ queryKey: base.keys.all() })\n return final\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n if (!ctrl.signal.aborted) setError(msg)\n return null\n } finally {\n setIsChecking(false)\n abortRef.current = null\n }\n },\n [reset, qc],\n )\n\n React.useEffect(() => () => abortRef.current?.abort(), [])\n\n return { run, cancel, reset, phase, logs, isChecking, error, result }\n },\n}\n","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","\"use client\";\nimport { useInfiniteQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { defineResource } from \"./resource\";\nimport { fetcher } from \"./client\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { ConversationDTO, MessageDTO } from \"@/lib/schemas/conversation\";\n\nconst base = defineResource<\n ConversationDTO,\n never,\n { title: string },\n { page?: number; page_size?: number; sort?: string; keyword?: string },\n Paginated<ConversationDTO>\n>({\n path: \"/conversations\",\n key: \"conversations\",\n paramsOf: (q) => ({\n page: q.page ?? 1,\n page_size: q.page_size ?? 20,\n sort: q.sort ?? \"-updated_at\",\n keyword: q.keyword,\n }),\n // List + get are read-mostly; users rarely care about millisecond\n // freshness here. 60s lets nav back to the sidebar / chat skip\n // a network round-trip — mutations explicit-invalidate anyway.\n staleTime: 60_000,\n});\n\n/** Cache key for the initial page of messages of a single conversation.\n * Lives under the conversation resource so it gets gc'd if the resource\n * is gc'd, but is isolated from list/infinite queries so we can invalidate\n * list-only without dropping the message cache. */\nexport function messagesCacheKey(conversationId: string, pageSize: number) {\n return [...base.keys.one(conversationId), \"messages-cache\", pageSize] as const;\n}\n\nexport const conversations = {\n ...base,\n\n // ---- shorthand: title-only update ----\n updateTitle: (id: string, title: string) => base.update(id, { title }),\n\n // ---- shared message cache key (used by usePaginatedMessages / sync) ----\n messagesCacheKey,\n\n /** Invalidate only the conversation LIST queries (list/infinite),\n * leaving the per-conversation messages cache intact. */\n useInvalidateList: () => {\n const qc = useQueryClient();\n return () => qc.invalidateQueries({\n queryKey: base.keys.all(),\n predicate: (q) => {\n const k = q.queryKey as readonly unknown[];\n return k.length >= 2 && (k[1] === \"list\" || k[1] === \"infinite\");\n },\n });\n },\n\n // ---- infinite scroll variant of useList ----\n useInfinite: (params?: { pageSize?: number; scope?: string; keyword?: string }) => {\n const pageSize = params?.pageSize ?? 20;\n const keyword = params?.keyword?.trim() || undefined;\n return useInfiniteQuery({\n queryKey: [\n ...base.keys.all(),\n \"infinite\",\n params?.scope ?? \"default\",\n pageSize,\n keyword ?? \"\",\n ] as const,\n initialPageParam: 1,\n queryFn: ({ pageParam = 1 }) =>\n base.list({ page: pageParam as number, page_size: pageSize, keyword }),\n getNextPageParam: (lastPage) => {\n if (!lastPage) return undefined;\n const hasMore = lastPage.page * lastPage.page_size < lastPage.total;\n return hasMore ? lastPage.page + 1 : undefined;\n },\n });\n },\n\n // ---- nested: messages under a conversation ----\n listMessages: (id: string, params?: { page?: number; page_size?: number; sort?: string }) =>\n fetcher<Paginated<MessageDTO>>(\n `/conversations/${encodeURIComponent(id)}/messages?` +\n new URLSearchParams({\n page: String(params?.page ?? 1),\n page_size: String(params?.page_size ?? 50),\n sort: params?.sort ?? \"-created_at\",\n }).toString(),\n ),\n};\n\n// Messages are a sibling resource only used for rating today.\nconst messagesKey = [\"messages\"] as const;\nexport const messages = {\n keys: { all: () => messagesKey },\n rate: (messageId: string, rating: \"up\" | \"down\" | \"none\", feedback?: string) =>\n fetcher<null>(`/messages/${encodeURIComponent(messageId)}/rate`, {\n method: \"POST\",\n body: JSON.stringify({ rating, feedback }),\n }),\n};\n","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n constructor(client, options) {\n super(client, options);\n }\n bindMethods() {\n super.bindMethods();\n this.fetchNextPage = this.fetchNextPage.bind(this);\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n }\n setOptions(options) {\n options._type = \"infinite\";\n super.setOptions(options);\n }\n getOptimisticResult(options) {\n options._type = \"infinite\";\n return super.getOptimisticResult(options);\n }\n fetchNextPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"forward\" }\n }\n });\n }\n fetchPreviousPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"backward\" }\n }\n });\n }\n createResult(query, options) {\n const { state } = query;\n const parentResult = super.createResult(query, options);\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n const isFetchNextPageError = isError && fetchDirection === \"forward\";\n const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n const result = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n };\n return result;\n }\n};\nexport {\n InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n];\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIgLz4KICA8cGF0aCBkPSJtMTUgNSA0IDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/pencil\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Pencil = createLucideIcon('pencil', __iconNode);\n\nexport default Pencil;\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '14sxne' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n ['path', { d: 'M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16', key: '1hlbsb' }],\n ['path', { d: 'M16 16h5v5', key: 'ccwih5' }],\n];\n\n/**\n * @component @name RefreshCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMCAwLTktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgLz4KICA8cGF0aCBkPSJNMyAzdjVoNSIgLz4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDAgOSA5IDkuNzUgOS43NSAwIDAgMCA2Ljc0LTIuNzRMMjEgMTYiIC8+CiAgPHBhdGggZD0iTTE2IDE2aDV2NSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/refresh-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCcw = createLucideIcon('refresh-ccw', __iconNode);\n\nexport default RefreshCcw;\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Inbox } from \"lucide-react\"\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\"\nimport { cn } from \"@/lib/utils\"\n\n/**\n * Shared visual contract for dashboard data tables (currently used by\n * /logs and /providers#models). Pages compose these primitives so the\n * \"Loom dashboard table\" look — sticky muted header, uppercase head text,\n * zebra rows, hover highlight, consistent padding — lives in exactly one\n * place. Future style tweaks touch this file only.\n *\n * These primitives are visual-only by design (SRP). They do not know\n * about sorting, pagination, or data fetching; callers wire those.\n */\n\nexport function DataTableShell({\n className,\n ...props\n}: React.ComponentProps<\"table\">) {\n return (\n <div className=\"overflow-hidden\">\n <Table className={className} {...props} />\n </div>\n )\n}\n\nexport function DataTableHeader({\n className,\n ...props\n}: React.ComponentProps<\"thead\">) {\n return (\n <TableHeader\n className={cn(\"bg-muted/40 sticky top-0 z-10\", className)}\n {...props}\n />\n )\n}\n\nexport function DataTableHeaderRow({\n className,\n ...props\n}: React.ComponentProps<\"tr\">) {\n return (\n <TableRow\n className={cn(\n \"hover:bg-transparent border-b-muted/60 shadow-sm\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DataTableHead({\n className,\n ...props\n}: React.ComponentProps<\"th\">) {\n return (\n <TableHead\n className={cn(\n \"h-10 text-xs font-semibold uppercase tracking-wide text-muted-foreground/80 first:pl-4 last:pr-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DataTableRow({\n className,\n interactive = true,\n ...props\n}: React.ComponentProps<\"tr\"> & { interactive?: boolean }) {\n return (\n <TableRow\n className={cn(\n \"h-10 border-b-muted/20 even:bg-muted/50 group\",\n interactive && \"cursor-pointer hover:bg-muted/90\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DataTableCell({\n className,\n ...props\n}: React.ComponentProps<\"td\">) {\n return (\n <TableCell\n className={cn(\"py-2 first:pl-4 last:pr-4\", className)}\n {...props}\n />\n )\n}\n\nexport function DataTableEmpty({\n colSpan,\n children: _children,\n}: {\n colSpan: number\n children?: React.ReactNode\n}) {\n void _children\n return (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n colSpan={colSpan}\n className=\"h-48 text-center align-middle text-muted-foreground/40\"\n >\n <div className=\"flex items-center justify-center\">\n <Inbox className=\"h-8 w-8\" aria-label=\"empty\" />\n </div>\n </TableCell>\n </TableRow>\n )\n}\n\nexport { TableBody as DataTableBody }\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['polyline', { points: '22 12 16 12 14 15 10 15 8 12 2 12', key: 'o97t9d' }],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n key: 'oot6mr',\n },\n ],\n];\n\n/**\n * @component @name Inbox\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cG9seWxpbmUgcG9pbnRzPSIyMiAxMiAxNiAxMiAxNCAxNSAxMCAxNSA4IDEyIDIgMTIiIC8+CiAgPHBhdGggZD0iTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/inbox\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Inbox = createLucideIcon('inbox', __iconNode);\n\nexport default Inbox;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '7', height: '7', x: '3', y: '3', rx: '1', key: '1g98yp' }],\n ['rect', { width: '7', height: '7', x: '14', y: '3', rx: '1', key: '6d4xhi' }],\n ['rect', { width: '7', height: '7', x: '14', y: '14', rx: '1', key: 'nxv5o0' }],\n ['rect', { width: '7', height: '7', x: '3', y: '14', rx: '1', key: '1bb6yr' }],\n];\n\n/**\n * @component @name LayoutGrid\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIzIiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIxNCIgeT0iMyIgcng9IjEiIC8+CiAgPHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMTQiIHk9IjE0IiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIxNCIgcng9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/layout-grid\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutGrid = createLucideIcon('layout-grid', __iconNode);\n\nexport default LayoutGrid;\n"],"names":["Input","className","type","props","NAME","Label","forwardedRef","label","ref","onMouseDown","event","target","closest","defaultPrevented","detail","preventDefault","displayName","Root","models","path","key","listShape","staleTime","invalidates","base","mcpServers","listPresets","usePresets","queryKey","queryFn","check","id","encodeURIComponent","method","useCheck","opts","qc","mutationFn","onSuccess","server","invalidateQueries","keys","all","onError","err","checkStream","onEvent","res","headers","Accept","signal","body","Error","reader","getReader","decoder","TextDecoder","buf","last","done","value","read","decode","stream","nl","indexOf","frame","slice","dataLine","split","find","l","startsWith","ev","JSON","parse","releaseLock","useCheckStream","phase","setPhase","logs","setLogs","isChecking","setIsChecking","error","setError","result","setResult","abortRef","reset","cancel","current","abort","run","ctrl","AbortController","final","prev","line","message","msg","String","aborted","InfiniteQueryObserver","client","options","bindMethods","fetchNextPage","bind","fetchPreviousPage","setOptions","_type","getOptimisticResult","fetch","meta","fetchMore","direction","createResult","query","state","parentResult","isFetching","isRefetching","isError","isRefetchError","fetchDirection","fetchMeta","isFetchNextPageError","isFetchingNextPage","isFetchPreviousPageError","isFetchingPreviousPage","hasNextPage","data","hasPreviousPage","SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","__scopeSwitch","checked","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","internal_do_not_use_render","setChecked","prop","defaultProp","onChange","caller","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isFormControl","context","scope","isFunction","TRIGGER_NAME","SwitchTrigger","onClick","switchProps","composedRefs","button","role","getState","prevChecked","isPropagationStopped","stopPropagation","Switch","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","span","BUBBLE_INPUT_NAME","controlSize","input","inputProto","window","HTMLInputElement","prototype","descriptor","Object","getOwnPropertyDescriptor","set","bubbles","Event","call","dispatchEvent","defaultCheckedRef","tabIndex","style","position","pointerEvents","opacity","margin","transform","Textarea"],"mappings":"oIAEA,EAAA,EAAA,CAAA,CAAA,uBAEA,SAAe,AAANA,CAAQC,WAAS,MAAEC,CAAI,CAAE,GAAGC,EAAsC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACCD,KAAMA,EACN,YAAU,QACVD,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6bACA,gFACA,yGACAA,GAED,GAAGE,CAAK,EAGf,+CCfA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,OAGIE,EAAQ,EAAA,UAAgB,CAAC,CAACF,EAAOG,IACZ,CAAA,EAAA,EAAA,GAAA,AAAG,EACxB,EAAA,SAAS,CAACC,KAAK,CACf,CACE,GAAGJ,CAAK,CACRK,IAAKF,EACLG,YAAa,AAACC,IACGA,AACXC,EADiBA,MAAM,CAChBC,OAAO,CAAC,oCAAoC,CACvDT,EAAMM,WAAW,GAAGC,GAChB,CAACA,EAAMG,gBAAgB,EAAIH,EAAMI,MAAM,CAAG,GAAGJ,EAAMK,cAAc,GACvE,CACF,IAGJV,EAAMW,WAAW,CAhBN,EAgBSZ,MCjBpB,IAAA,EAAA,EAAA,CAAA,CAAA,uBAEA,SAAS,AAAM,WACb,CAASA,CACT,GAAG,EAC8C,EACjD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,ADWMC,ECXN,CACC,YAAU,QACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,sNACA,GAED,GAAGU,CAAK,EAGf,mCCrBA,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,WAAW,gBAEvB,SAAS,AAAe,CAAA,EAAU,AAChC,IAAM,EAAY,EAAA,MAAA,CAAO,OAAE,EAAO,SAAU,CAAM,CAAC,EAKnD,OAAa,EAAA,OAAA,CAAQ,KACf,CADqB,CACjB,OAAA,CAAQ,KAAA,GAAU,IACxB,EAAI,CAD2B,MAC3B,CAAQ,QAAA,CAAW,EAAI,OAAA,CAAQ,KAAA,CACnC,EAAI,OAAA,CAAQ,KAAA,CAAQ,GAEf,EAAI,OAAA,CAAQ,QAAA,EAClB,CAAC,EAAM,CACZ,EADW,2BCXJ,IAAMG,EAAS,CAAA,EAHtB,AAGsB,EAHtB,CAAA,CAAA,QAGsB,cAAA,AAAc,EAMlC,CACEC,KAAM,UACNC,IAAK,SACLC,UAAW,QACXC,UAAW,IACXC,YAAa,CAAC,YAAY,AAC9B,+CCKA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAd,CAAc,AAAd,CAAc,AAAd,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAjBD,CAiBiB,AAhBnD,CAgBmD,AAhBlD,CAgBkD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAhBlD,AAgBkD,CAhBlD,AAAU,AAgBkD,CAhBlD,AAgBkD,AAhBhD,EAAA,CAAI,AAAJ,CAAI,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,AAAI,IAAA,CAAA,AAAM,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,AAAR,CAAQ,AAAE,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,EAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACjE,CAAC,MAAA,CAAA,AAAQ,CAAA,AAAE,EAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,CAAM,AAAN,CAAM,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,CAAM,AAAN,CAAM,CAAA,CAAA,AAAI,IAAA,CAAA,AAAM,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACvE,0DCoBA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAW,CAAA,CAAA,CAAA,AAAX,CAAA,AAAW,CAAX,AAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAxBE,CAClC,AAuB4C,CAtB1C,AAsB0C,CAtB1C,AAsB0C,CAtB1C,AAsB0C,CAtB1C,AAsB0C,CAtB1C,AAsB0C,CAtB1C,AAsB0C,CAtB1C,AAsB0C,CArB1C,AAqB0C,CApBxC,AAoBwC,CApBxC,AAoBkD,CAAA,AApB/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAET,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAY,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAU,CAAE,CAAA,CAAA,CAAA,AAAI,GAAA,CAAA,AAAK,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,AAAN,CAAM,CAAA,AAAG,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,CACzD,wDCbA,IAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAQA,IAAMC,EAAO,CAAA,EAAA,EAAA,cAAA,AAAc,EAMzB,CACEL,KAAM,eACNC,IAAK,cACLC,UAAW,QACXC,UAAW,GACf,GAYaG,EAAa,CACtB,GAAGD,CAAI,CAGPE,YAAa,IAAM,CAAA,EAAA,EAAA,OAAA,AAAO,EAAc,gBACxCC,WAAY,IACR,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,CACLC,SAAU,CAAC,cAAc,CACzBC,QAAS,IAAMJ,EAAWC,WAAW,GACrCJ,UAAW,GACf,CADmB,EAIvBQ,GAJ4B,GAIrB,AAACC,GACJ,CAAA,EAAA,EAAA,OAAA,AAAO,EAAe,CAAC,aAAa,EAAEC,mBAAmBD,GAAI,MAAM,CAAC,CAAE,CAClEE,OAAQ,MACZ,GACJC,SAAU,AAACC,IACP,IAAMC,EAAK,CAAA,EAAA,EAAA,cAAA,AAAc,IACzB,MAAO,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CACfC,WAAY,AAACN,GAAeN,EAAWK,KAAK,CAACC,GAC7CO,UAAW,AAACC,IACRH,EAAGI,iBAAiB,CAAC,CAAEZ,SAAUJ,EAAKiB,IAAI,CAACC,GAAG,EAAG,GACjDP,GAAMG,YAAYC,EACtB,EACAI,QAAS,AAACC,GAAeT,GAAMQ,UAAUC,EAC7C,EACJ,EAMAC,YAAa,MACTd,EACAe,EACAX,KAEA,IAAMY,EAAM,MAAM,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,CAAC,aAAa,EAAEf,mBAAmBD,GAAI,MAAM,CAAC,CAAE,CACvEE,OAAQ,OACRe,QAAS,CAAEC,OAAQ,mBAAoB,EACvCC,OAAQf,GAAMe,MAClB,GACA,GAAI,CAACH,EAAII,IAAI,CAAE,MAAM,AAAIC,MAAM,oBAE/B,IAAMC,EAASN,EAAII,IAAI,CAACG,SAAS,GAC3BC,EAAU,IAAIC,YAChBC,EAAM,GACNC,EAA4B,KAEhC,GAAI,CACA,MAAO,CAAM,CACT,GAAM,MAAEC,CAAI,CAAEC,OAAK,CAAE,CAAG,MAAMP,EAAOQ,IAAI,GACzC,GAAIF,EAAM,MAGV,IAAIK,EAAKP,CAFTA,GAAOF,EAAQO,MAAM,CAACF,EAAO,CAAEG,QAAQ,CAAK,EAAA,EAE/BE,OAAO,CAAC,QACrB,KAAc,AAAPD,CAAQ,OAAG,CACd,IAAME,EAAQT,EAAIU,KAAK,CAAC,EAAGH,GAC3BP,EAAMA,EAAIU,KAAK,CAACH,EAAK,GACrB,IAAMI,EAAWF,EAAMG,KAAK,CAAC,MAAMC,IAAI,CAAC,AAACC,GAAMA,EAAEC,UAAU,CAAC,WAC5D,GAAIJ,EACA,GAAI,CACA,IAFM,AAEAK,EAAKC,KAAKC,KAAK,CAACP,EAASD,KAAK,CAAC,IACrCrB,EAAQ2B,GACQ,WAAZA,EAAGvE,IAAI,CAAewD,EAAOe,EAAGlC,MAAM,CACrB,AAAZkC,YAAGvE,IAAI,EAAgBuE,EAAGlC,MAAM,GAAEmB,EAAOe,EAAGlC,MAAAA,AAAM,CAC/D,CAAE,KAAM,CAA8B,CAE1CyB,EAAKP,EAAIQ,OAAO,CAAC,OACrB,CACJ,CACJ,QAAU,CACN,GAAI,CAAEZ,EAAOuB,WAAW,EAAG,CAAE,KAAM,CAAe,CACtD,CACA,OAAOlB,CACX,EACAmB,eAAgB,KACZ,IAAMzC,EAAK,CAAA,EAAA,EAAA,cAAA,AAAc,IACnB,CAAC0C,EAAOC,EAAS,CAAG,EAAA,QAAc,CAAuB,MACzD,CAACC,EAAMC,EAAQ,CAAG,EAAA,QAAc,CAAW,EAAE,EAC7C,CAACC,EAAYC,EAAc,CAAG,EAAA,QAAc,EAAC,GAC7C,CAACC,EAAOC,EAAS,CAAG,EAAA,QAAc,CAAgB,MAClD,CAACC,EAAQC,EAAU,CAAG,EAAA,QAAc,CAAsB,MAC1DC,EAAW,EAAA,MAAY,CAAyB,MAEhDC,EAAQ,EAAA,WAAiB,CAAC,KAC5BV,EAAS,MACTE,EAAQ,EAAE,EACVI,EAAS,MACTE,EAAU,KACd,EAAG,EAAE,EAECG,EAAS,EAAA,WAAiB,CAAC,KAC7BF,EAASG,OAAO,EAAEC,QAClBJ,EAASG,OAAO,CAAG,KACnBR,GAAc,EAClB,EAAG,EAAE,EAECU,EAAM,EAAA,WAAiB,CACzB,MAAO9D,IACH0D,IACAN,GAAc,GACd,IAAMW,EAAO,IAAIC,gBACjBP,EAASG,OAAO,CAAGG,EACnB,GAAI,CACA,IAAME,EAAQ,MAAMvE,EAAWoB,WAAW,CACtCd,EACA,AAAC0C,IACmB,UAAZA,EAAGvE,IAAI,CAAc6E,EAASN,EAAGK,KAAK,EACrB,QAAZL,EAAGvE,IAAI,CAAY+E,EAASgB,AAAD,GAAU,IAAIA,EAAMxB,EAAGyB,IAAI,CAAC,EAC3C,WAAZzB,EAAGvE,IAAI,CAAeqF,EAAUd,EAAGlC,MAAM,EAC7B,SAAS,CAArBkC,EAAGvE,IAAI,GACZmF,EAASZ,EAAG0B,OAAO,EACf1B,EAAGlC,MAAM,EAAEgD,EAAUd,EAAGlC,MAAM,EAE1C,EACA,CAAEW,OAAQ4C,EAAK5C,MAAM,AAAC,GAG1B,OADAd,EAAGI,iBAAiB,CAAC,CAAEZ,SAAUJ,EAAKiB,IAAI,CAACC,GAAG,EAAG,GAC1CsD,CACX,CAAE,MAAOpD,EAAK,CACV,IAAMwD,EAAMxD,aAAeQ,MAAQR,EAAIuD,OAAO,CAAGE,OAAOzD,GAExD,OADKkD,AAAD,EAAM5C,MAAM,CAACoD,OAAO,EAAEjB,EAASe,GAC5B,IACX,QAAU,CACNjB,EAAc,IACdK,EAASG,OAAO,CAAG,IACvB,CACJ,EACA,CAACF,EAAOrD,EAAG,EAKf,OAFA,EAAA,SAAe,CAAC,IAAM,IAAMoD,EAASG,OAAO,EAAEC,QAAS,EAAE,EAElD,KAAEC,SAAKH,QAAQD,QAAOX,EAAOE,kBAAME,QAAYE,SAAOE,CAAO,CACxE,CACJ,mDG3KA,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACIiB,EAAwB,cAAc,EAAA,aAAa,CACrD,YAAYC,CAAM,CAAEC,CAAO,CAAE,CAC3B,KAAK,CAACD,EAAQC,EAChB,CACAC,aAAc,CACZ,KAAK,CAACA,cACN,IAAI,CAACC,aAAa,CAAG,IAAI,CAACA,aAAa,CAACC,IAAI,CAAC,IAAI,EACjD,IAAI,CAACC,iBAAiB,CAAG,IAAI,CAACA,iBAAiB,CAACD,IAAI,CAAC,IAAI,CAC3D,CACAE,WAAWL,CAAO,CAAE,CAClBA,EAAQM,KAAK,CAAG,WAChB,KAAK,CAACD,WAAWL,EACnB,CACAO,oBAAoBP,CAAO,CAAE,CAE3B,OADAA,EAAQM,KAAK,CAAG,WACT,KAAK,CAACC,oBAAoBP,EACnC,CACAE,cAAcF,CAAO,CAAE,CACrB,OAAO,IAAI,CAACQ,KAAK,CAAC,CAChB,GAAGR,CAAO,CACVS,KAAM,CACJC,UAAW,CAAEC,UAAW,SAAU,CACpC,CACF,EACF,CACAP,kBAAkBJ,CAAO,CAAE,CACzB,OAAO,IAAI,CAACQ,KAAK,CAAC,CAChB,GAAGR,CAAO,CACVS,KAAM,CACJC,UAAW,CAAEC,UAAW,UAAW,CACrC,CACF,EACF,CACAC,aAAaC,CAAK,CAAEb,CAAO,CAAE,CAC3B,GAAM,OAAEc,CAAK,CAAE,CAAGD,EACZE,EAAe,KAAK,CAACH,aAAaC,EAAOb,GACzC,CAAEgB,YAAU,cAAEC,CAAY,SAAEC,CAAO,gBAAEC,CAAc,CAAE,CAAGJ,EACxDK,EAAiBN,EAAMO,SAAS,EAAEX,WAAWC,UAC7CW,EAAuBJ,GAA8B,YAAnBE,EAClCG,EAAqBP,GAAiC,AAAnBI,cACnCI,EAA2BN,GAA8B,aAAnBE,EACtCK,EAAyBT,GAAiC,aAAnBI,EAc7C,MAbe,CACb,AAYKvC,GAZFkC,CAAY,CACfb,cAAe,IAAI,CAACA,aAAa,CACjCE,kBAAmB,IAAI,CAACA,iBAAiB,CACzCsB,YAAa,CAAA,EAAA,EAAA,WAAW,AAAX,EAAY1B,EAASc,EAAMa,IAAI,EAC5CC,gBAAiB,CAAA,EAAA,EAAA,eAAA,AAAe,EAAC5B,EAASc,EAAMa,IAAI,uBACpDL,qBACAC,2BACAC,yBACAC,EACAN,eAAgBA,GAAkB,CAACG,GAAwB,CAACE,EAC5DP,aAAcA,GAAgB,CAACM,GAAsB,CAACE,CACxD,CAEF,CACF,EFxDA,EAAA,EAAA,CAAA,CAAA,OCHA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAIA,IAAMxB,EAAO,CAAA,EAAA,EAAA,cAAA,AAAc,EAMzB,CACE,KAAM,iBACN,IAAK,gBACL,SAAU,AAAC,IAAM,AAAC,CACdK,KAAM,EAAE,IAAI,EAAI,EAChB,UAAW,EAAE,SAAS,EAAI,GAC1B,KAAM,EAAEJ,IAAI,EAAI,cAChB,QAAS,EAAE,OAAO,CACtB,CAAC,CAID,UAAW,GACf,GAUa,EAAgB,CACzB,GAAG,CAAI,CAGP,YAAa,CAAC,EAAY,IAAkB,EAAK,MAAM,CAAC,EAAI,OAAE,CAAM,GAGpEE,iBAXG,SAA0B,AAAjB,CAAuC,CAAE,CAAgB,EACrE,MAAO,IAAI,EAAK,IAAI,CAAC,GAAG,CAAC,GAAiB,iBAAkB,EAAS,AACzE,EAaI,kBAAmB,KACf,IAAM,EAAK,CAAA,EAAA,EAAA,cAAA,AAAc,IACzB,MAAO,IAAM,EAAG,iBAAiB,CAAC,CAC9B,SAAU,EAAK,IAAI,CAAC,GAAG,GACvB,UAAY,AAAD,IACP,IAAM,EAAI,EAAE,QAAQ,CACpB,OAAO,EAAE,MAAM,EAAI,IAAe,CAAV,QAAC,CAAC,CAAC,EAAE,EAAwB,aAAT,CAAC,CAAC,EAAE,AAAK,CAAU,AACnE,CACJ,EACJ,EAGA,YAAa,AAAC,UACV,IAAM,EAAW,GAAQ,UAAY,GAC/B,EAAU,GAAQ,SAAS,aAAU,EAC3C,ODzDkB,ACyDX,EAAiB,CACpB,ID1DqB,KC0DX,IACH,EAAK,IAAI,CAAC,GAAG,GAChB,WACA,GAAQ,OAAS,UACjB,EACA,GAAW,GACd,CACD,iBAAkB,EAClB,QAAS,CAAC,WAAE,EAAY,CAAC,CAAE,GACvB,EAAK,IAAI,CAAC,CAAE,KAAM,EAAqB,UAAW,UAAU,CAAQ,GACxE,iBAAkB,AAAC,IACf,GAAK,CAAD,CAEJ,OADgB,AACT,CAFQ,CACU,IAAI,CAAG,CADV,CACmB,SAAS,CAAG,EAAS,KAAK,CAClD,EAAS,IAAI,CAAG,OAAI,CACzC,CACJ,EDxEC,CAAA,EAAA,EAAA,YAAA,AAAY,EACjBL,EACA,OAH+B,EC0E/B,EAGA,OD7E0C,KAI1C,CCyEc,CAAC,EAAY,IACvB,CAAA,EAAA,EAAA,OAAO,AAAP,EACI,CAAC,eAAe,EAAE,mBAAmB,GAAI,UAAU,CAAC,CACpD,IAAI,gBAAgB,CAChB,KAAM,OAAO,GAAQ,MAAQ,GAC7B,UAAW,OAAO,GAAQ,WAAa,IACvC,KAAM,GAAQ,MAAQ,aAC1B,GAAG,QAAQ,GAEvB,EAGM,EAAc,CAAC,WAAW,uCACR,CACpB,KAAM,CAAE,IAAK,IAAM,CAAY,EAC/B,KAAM,CAAC,EAAmB,EAAgC,IACtD,CAAA,EAAA,EAAA,OAAA,AAAO,EAAO,CAAC,UAAU,EAAE,mBAAmB,GAAW,KAAK,CAAC,CAAE,CAC7D,OAAQ,OACR,KAAM,KAAK,SAAS,CAAC,QAAE,EAAQ,UAAS,EAC5C,EACR,oCE7EA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAT,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAtBI,CAClC,AAqBwC,CApBtC,AAoBsC,CApBtC,AAoBsC,CApBtC,AAoBsC,CApBtC,AAoBsC,CApBtC,AAoBsC,CApBtC,AAoBsC,CApBtC,AAoBsC,CAnBtC,AAmBsC,CAlBpC,AAkBoC,CAlBpC,AAkB8C,CAAA,AAlB3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAET,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAa,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC5C,wECTA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OAEI8B,EAAc,SACd,CAACC,EAAqBC,EAAkB,CAAG,CAAA,EAAA,EAAA,kBAAA,AAAkB,EAACF,GAC9D,CAACG,EAAoBC,EAAiB,CAAGH,EAAoBD,GACjE,SAASK,EAAexI,CAAK,EAC3B,GAAM,eACJyI,CAAa,CACbC,QAASC,CAAW,CACpBC,UAAQ,gBACRC,CAAc,UACdC,CAAQ,MACRC,CAAI,CACJC,MAAI,CACJC,iBAAe,CACfC,UAAQ,OACRzF,EAAQ,IAAI,EACZ,mBAAmB,OACnB0F,CAA0B,CAC3B,CAAGnJ,EACE,CAAC0I,EAASU,EAAW,CAAG,CAAA,EAAA,EAAA,oBAAA,AAAoB,EAAC,CACjDC,KAAMV,EACNW,YAAaT,IAAkB,EAC/BU,SAAUN,EACVO,OAAQrB,CACV,GACM,CAACsB,EAASC,EAAW,CAAG,EAAA,QAAc,CAAC,MACvC,CAACC,EAAaC,EAAe,CAAG,EAAA,QAAc,CAAC,MAC/CC,EAAmC,EAAA,MAAY,EAAC,GAChDC,GAAgBL,GAAU,CAAC,CAACV,GAAQ,CAAC,CAACU,EAAQhJ,OAAO,CAAC,QAItDsJ,EAHJ,AAGc,SACdrB,aACAU,EACAN,mBACAW,aACAC,OACAV,OACAD,QACAtF,EACAoG,CAZiF,2CAajFX,iBACAL,gBACAiB,cACAH,iBACAC,CACF,EACA,MAAuB,CAAhB,AAAgB,EAAA,EAAA,GAAA,AAAG,EAACtB,EAAoB,CAAE0B,CAA7B,KAAoCvB,EAAe,GAAGsB,CAAO,CAAEnB,SAAUqB,AA8KrE,YAAjB,OA9KiGd,AA8K1F1F,EA9KwH0F,EAA2BY,GAAWnB,CAAS,EACvL,CACA,IAAIsB,EAAe,gBACfC,EAAgB,EAAA,UAAgB,CAClC,CAAC,eAAE1B,CAAa,SAAE2B,CAAO,CAAE,GAAGC,EAAa,CAAElK,KAC3C,GAAM,OACJsD,CAAK,UACLqF,CAAQ,SACRJ,CAAO,UACPQ,CAAQ,YACRQ,CAAU,YACVN,CAAU,kCACVS,CAAgC,eAChCC,CAAa,aACbH,CAAW,CACZ,CAAGpB,EAAiB2B,EAAczB,GAC7B6B,EAAe,CAAA,EAAA,EAAA,eAAA,AAAe,EAACnK,EAAcuJ,GACnD,MAAuB,CAAhB,AAAgB,EAAA,EAAA,GAAA,AAAG,EACxB,EAAA,EADkB,OACT,CAACa,MAAM,CAChB,CACExK,KAAM,SACNyK,KAAM,SACN,eAAgB9B,EAChB,gBAAiBQ,EACjB,aAAcuB,EAAS/B,GACvB,gBAAiBI,EAAW,GAAK,KAAK,EACtCA,iBACArF,EACA,GAAG4G,CAAW,CACdhK,IAAKiK,EACLF,QAAS,CAAA,EAAA,EAAA,oBAAA,AAAoB,EAACA,EAAS,AAAC7J,IACtC6I,EAAW,AAACsB,GAAgB,CAACA,GACzBf,GAAeG,IACjBD,EAAiCrE,OAAO,CAAGjF,CADX,CACiBoK,oBAAoB,GACjE,AAACd,EAAiCrE,OAAO,EAAEjF,EAAMqK,eAAe,GAExE,EACF,EAEJ,EAEFT,GAActJ,WAAW,CAAGqJ,EAC5B,IAAIW,EAAS,EAAA,UAAgB,CAC3B,CAAC7K,EAAOG,KACN,GAAM,eACJsI,CAAa,MACbO,CAAI,SACJN,CAAO,gBACPG,CAAc,CACdK,UAAQ,UACRJ,CAAQ,OACRrF,CAAK,iBACLwF,CAAe,MACfF,CAAI,CACJ,GAAGsB,EACJ,CAAGrK,EACJ,MAAuB,CAAhB,AAAgB,EAAA,EAAA,GAAA,AAAG,EACxBwI,EACA,EAFkB,aAGhBC,UACAC,iBACAG,WACAC,WACAI,kBACAD,OACAD,OACAD,QACAtF,EACA0F,2BAA4B,CAAC,eAAEW,CAAa,CAAE,GAAK,AAAgB,CAAA,EAAA,EAAA,IAAA,AAAI,EAAC,EAAA,AAAR,QAAgB,CAAE,CAAElB,SAAU,CAC5E,CAAA,EAAA,EAAA,GAAA,AAAG,EACjBuB,EACA,CACE,GAAGE,CAAW,CACdhK,IAAKF,gBACLsI,CACF,GAEFqB,GAAiC,CAAA,EAAA,EAAA,GAAA,AAAG,EAClCgB,EACA,EAFe,aAGbrC,AAH0B,CAI5B,GAEH,AAAC,EACJ,EAEJ,GAEFoC,EAAOhK,WAAW,CAAGsH,EACrB,IAAI4C,EAAa,cACbC,EAAc,EAAA,UAAgB,CAChC,CAAChL,EAAOG,KACN,GAAM,eAAEsI,CAAa,CAAE,GAAGwC,EAAY,CAAGjL,EACnC+J,EAAUxB,EAAiBwC,EAAYtC,GAC7C,MAAuB,CAAhB,AAAgB,EAAA,EAAA,GAAA,AAAG,EACxB,EAAA,EADkB,OACT,CAACyC,IAAI,CACd,CACE,aAAcT,EAASV,EAAQrB,OAAO,EACtC,gBAAiBqB,EAAQjB,QAAQ,CAAG,GAAK,KAAK,EAC9C,GAAGmC,CAAU,CACb5K,IAAKF,CACP,EAEJ,GAEF6K,EAAYnK,WAAW,CAAGkK,EAC1B,IAAII,EAAoB,oBACpBL,EAAoB,EAAA,UAAgB,CACtC,CAAC,eAAErC,CAAa,CAAE,GAAGzI,EAAO,CAAEG,KAC5B,GAAM,SACJsJ,CAAO,kCACPI,CAAgC,SAChCnB,CAAO,gBACPG,CAAc,UACdK,CAAQ,UACRJ,CAAQ,MACRE,CAAI,OACJvF,CAAK,MACLsF,CAAI,CACJY,aAAW,gBACXC,CAAc,CACf,CAAGrB,EAAiB4C,EAAmB1C,GAClC6B,EAAe,CAAA,EAAA,EAAA,eAAA,AAAe,EAACnK,EAAcyJ,GAC7Cc,EAAc,CAAA,EAAA,EAAA,WAAA,AAAW,EAAChC,GAC1B0C,EAAc,CAAA,EAAA,EAAA,OAAO,AAAP,EAAQ3B,GAC5B,EAAA,SAAe,CAAC,KAEd,GAAI,CAAC4B,EAAO,OAMZ,IAAMjC,EAJauC,AAIAD,OAJOE,wBAAwB,CAD/BL,AAEjBD,OAFwBE,gBAAgB,CAACC,SAAS,CAGlD,WAE4BI,GAAG,CAC3BC,EAAU,CAACjC,EAAiCrE,OAAO,CACzD,GAAIkF,IAAgBhC,GAAWU,EAAY,CACzC,IAAM7I,EAAQ,IAAIwL,MAAM,QAAS,SAAED,CAAQ,GAC3C1C,EAAW4C,IAAI,CAACX,EAAO3C,GAXXiB,AAYZ0B,EAAMY,aAAa,CAAC1L,EACtB,CACF,EAAG,CAACoJ,EAAae,EAAahC,EAASmB,EAAiC,EACxE,IAAMqC,EAAoB,EAAA,MAAY,CAACxD,GACvC,MAAuB,CAAhB,AAAgB,EAAA,EAAA,GAAA,AAAG,EACxB,EAAA,EADkB,OACT,CAAC2C,KAAK,CACf,CACEtL,KAAM,WACN,eAAe,EACf8I,eAAgBA,GAAkBqD,EAAkB1G,OAAO,UAC3D0D,WACAJ,OACAE,QACAvF,OACAsF,EACA,GAAG/I,CAAK,CACRmM,SAAU,CAAC,EACX9L,IAAKiK,EACL8B,MAAO,CACL,GAAGpM,EAAMoM,KAAK,CACd,GAAGhB,CAAW,CACdiB,SAAU,WACVC,cAAe,OACfC,QAAS,EACTC,OAAQ,EAIRC,UAAW,mBACb,CACF,EAEJ,GAMF,SAAShC,EAAS/B,CAAO,EACvB,OAAOA,EAAU,UAAY,WAC/B,CANAoC,EAAkBjK,WAAW,CAAGsK,EClOhC,IAAA,EAAA,EAAA,CAAA,CAAA,wBAEA,SAAS,AAAO,WACd,CAAS,CACT,GAAG,EAC+C,EAClD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,YAAU,SACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,4WACA,GAED,GAAG,CAAK,UAET,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,YAAU,eACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,+QAKV,sDC1BA,EAAA,EAAA,CAAA,CAAA,0BAEA,SAAkB,AAATuB,WAAW5M,CAAS,CAAE,GAAGE,EAAyC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,WAAA,CACC,YAAU,WACVF,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,scACAA,GAED,GAAGE,CAAK,EAGf,6BCMA,CAAA,CAAA,CAAA,CAAM,AAAN,CAAA,CAAM,CAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAb,AAAa,CAAb,AAAa,CAAb,AAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAlBA,CAClC,AAiBiD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAAQ,AAiBwC,CAjBtC,AAAF,AAiBwC,CAAU,CAAA,AAjB7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAsD,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACnF,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,AAAR,CAAQ,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAY,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAuD,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACpF,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,AAAd,CAAc,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC7C,mFEiBA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAA,AAAQ,CAAR,AAAQ,CAAA,AAAR,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAtBK,CAClC,AAqBsC,CAAA,AArBrC,CAAA,AAqBqC,CArBrC,AAqBqC,CArBrC,AAqBqC,CArBrC,AAqBqC,CArBrC,AAqBqC,CArBrC,AAqBqC,CAAA,AArBrC,CAAA,AAqBqC,CAAU,AArB/C,CAAA,AAqB+C,CArB/C,AAAY,CAAA,AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAqC,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC3E,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EACP,CAEJ,EDPA,IAAA,EAAA,EAAA,CAAA,CAAA,QAQA,EAAA,EAAA,CAAA,CAAA,+BAmFO,SAAS,AAAc,WAC1B,CAAS,CACT,GAAG,EACsB,EACzB,MACI,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CACN,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,4BAA6B,GAC1C,GAAG,CAAK,EAGrB,qBAEO,SAAS,AAAe,SAC3B,CAAO,CACP,SAAU,CAAS,CAItB,EAEG,MACI,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CAAC,UAAU,gCAChB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CACN,QAAS,EACT,UAAU,kEAEV,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,4CACX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAM,UAAU,UAAU,aAAW,eAK1D,oBAhEO,SAAS,AAAc,WAC1B,CAAS,CACT,GAAG,EACsB,EACzB,MACI,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CACN,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACT,mGACA,GAEH,GAAG,CAAK,EAGrB,sBAxCO,SAAS,AAAgB,WAC5B,CAAS,CACT,GAAG,EACyB,EAC5B,MACI,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CACR,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,gCAAiC,GAC9C,GAAG,CAAK,EAGrB,yBAEO,SAAS,AAAmB,WAC/B,CAAS,CACT,GAAG,EACsB,EACzB,MACI,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACT,mDACA,GAEH,GAAG,CAAK,EAGrB,mBAiBO,SAAS,AAAa,WACzB,CAAS,aACT,GAAc,CAAI,CAClB,GAAG,EACkD,EACrD,MACI,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACT,gDACA,GAAe,mCACf,GAEH,GAAG,CAAK,EAGrB,qBApEO,SAAwB,AAAf,WACZ,CAAS,CACT,GAAG,EACyB,EAC5B,MACI,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,2BACX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAW,EAAY,GAAG,CAAK,IAGlD,kFEdA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAb,AAAa,CAAb,AAAa,CAAA,AAAb,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAlBA,CAClC,AAiBiD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAiBgD,CAjBhD,AAAQ,AAiBwC,CAjBxC,AAAE,AAiBsC,CAjBtC,AAiBgD,CAAA,AAjBhD,CAAA,CAAA,CAAA,CAAA,AAAO,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,AAAG,CAAA,CAAA,CAAA,CAAA,AAAK,EAAG,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC5E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAO,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,AAAG,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,EAAG,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC7E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAO,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,AAAG,CAAA,CAAA,CAAA,CAAA,CAAM,AAAN,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC9E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,AAAR,CAAQ,AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAO,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,AAAG,CAAA,CAAA,CAAA,CAAA,AAAK,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAA,CAAA,CAAI,AAAJ,CAAI,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC/E","ignoreList":[1,5,6,8,10,11,12,15,17,18]}
@@ -0,0 +1,3 @@
1
+ module.exports=[812213,a=>{"use strict";var b=a.i(941579),c=a.i(774684),d=class extends b.QueryObserver{constructor(a,b){super(a,b)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(a){a._type="infinite",super.setOptions(a)}getOptimisticResult(a){return a._type="infinite",super.getOptimisticResult(a)}fetchNextPage(a){return this.fetch({...a,meta:{fetchMore:{direction:"forward"}}})}fetchPreviousPage(a){return this.fetch({...a,meta:{fetchMore:{direction:"backward"}}})}createResult(a,b){let{state:d}=a,e=super.createResult(a,b),{isFetching:f,isRefetching:g,isError:h,isRefetchError:i}=e,j=d.fetchMeta?.fetchMore?.direction,k=h&&"forward"===j,l=f&&"forward"===j,m=h&&"backward"===j,n=f&&"backward"===j;return{...e,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:(0,c.hasNextPage)(b,d.data),hasPreviousPage:(0,c.hasPreviousPage)(b,d.data),isFetchNextPageError:k,isFetchingNextPage:l,isFetchPreviousPageError:m,isFetchingPreviousPage:n,isRefetchError:i&&!k&&!m,isRefetching:g&&!l&&!n}}},e=a.i(36339),f=a.i(937927),g=a.i(349682),h=a.i(262477);let i=(0,g.defineResource)({path:"/conversations",key:"conversations",paramsOf:a=>({page:a.page??1,page_size:a.page_size??20,sort:a.sort??"-updated_at",keyword:a.keyword}),staleTime:6e4}),j={...i,updateTitle:(a,b)=>i.update(a,{title:b}),messagesCacheKey:function(a,b){return[...i.keys.one(a),"messages-cache",b]},useInvalidateList:()=>{let a=(0,f.useQueryClient)();return()=>a.invalidateQueries({queryKey:i.keys.all(),predicate:a=>{let b=a.queryKey;return b.length>=2&&("list"===b[1]||"infinite"===b[1])}})},useInfinite:a=>{var b;let c=a?.pageSize??20,f=a?.keyword?.trim()||void 0;return b={queryKey:[...i.keys.all(),"infinite",a?.scope??"default",c,f??""],initialPageParam:1,queryFn:({pageParam:a=1})=>i.list({page:a,page_size:c,keyword:f}),getNextPageParam:a=>{if(a)return a.page*a.page_size<a.total?a.page+1:void 0}},(0,e.useBaseQuery)(b,d,void 0)},listMessages:(a,b)=>(0,h.fetcher)(`/conversations/${encodeURIComponent(a)}/messages?`+new URLSearchParams({page:String(b?.page??1),page_size:String(b?.page_size??50),sort:b?.sort??"-created_at"}).toString())},k=["messages"];a.s(["conversations",0,j,"messages",0,{keys:{all:()=>k},rate:(a,b,c)=>(0,h.fetcher)(`/messages/${encodeURIComponent(a)}/rate`,{method:"POST",body:JSON.stringify({rating:b,feedback:c})})}],812213)},339220,a=>{"use strict";var b=a.i(370025),c=a.i(433217),d=a.i(937927),e=a.i(572131),f=a.i(349682),g=a.i(262477);let h=(0,f.defineResource)({path:"/mcp/servers",key:"mcp-servers",listShape:"array",staleTime:6e4}),i={...h,listPresets:()=>(0,g.fetcher)("/mcp/presets"),usePresets:()=>(0,c.useQuery)({queryKey:["mcp-presets"],queryFn:()=>i.listPresets(),staleTime:3e5}),check:a=>(0,g.fetcher)(`/mcp/servers/${encodeURIComponent(a)}/check`,{method:"POST"}),useCheck:a=>{let c=(0,d.useQueryClient)();return(0,b.useMutation)({mutationFn:a=>i.check(a),onSuccess:b=>{c.invalidateQueries({queryKey:h.keys.all()}),a?.onSuccess?.(b)},onError:b=>a?.onError?.(b)})},checkStream:async(a,b,c)=>{let d=await (0,g.rawFetch)(`/mcp/servers/${encodeURIComponent(a)}/check`,{method:"POST",headers:{Accept:"text/event-stream"},signal:c?.signal});if(!d.body)throw Error("No response body");let e=d.body.getReader(),f=new TextDecoder,h="",i=null;try{for(;;){let{done:a,value:c}=await e.read();if(a)break;let d=(h+=f.decode(c,{stream:!0})).indexOf("\n\n");for(;-1!==d;){let a=h.slice(0,d);h=h.slice(d+2);let c=a.split("\n").find(a=>a.startsWith("data: "));if(c)try{let a=JSON.parse(c.slice(6));b(a),"result"===a.type?i=a.server:"error"===a.type&&a.server&&(i=a.server)}catch{}d=h.indexOf("\n\n")}}}finally{try{e.releaseLock()}catch{}}return i},useCheckStream:()=>{let a=(0,d.useQueryClient)(),[b,c]=e.useState(null),[f,g]=e.useState([]),[j,k]=e.useState(!1),[l,m]=e.useState(null),[n,o]=e.useState(null),p=e.useRef(null),q=e.useCallback(()=>{c(null),g([]),m(null),o(null)},[]),r=e.useCallback(()=>{p.current?.abort(),p.current=null,k(!1)},[]),s=e.useCallback(async b=>{q(),k(!0);let d=new AbortController;p.current=d;try{let e=await i.checkStream(b,a=>{"phase"===a.type?c(a.phase):"log"===a.type?g(b=>[...b,a.line]):"result"===a.type?o(a.server):"error"===a.type&&(m(a.message),a.server&&o(a.server))},{signal:d.signal});return a.invalidateQueries({queryKey:h.keys.all()}),e}catch(b){let a=b instanceof Error?b.message:String(b);return d.signal.aborted||m(a),null}finally{k(!1),p.current=null}},[q,a]);return e.useEffect(()=>()=>p.current?.abort(),[]),{run:s,cancel:r,reset:q,phase:b,logs:f,isChecking:j,error:l,result:n}}};a.s(["mcpServers",0,i])},699464,a=>{"use strict";let b=(0,a.i(883706).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,b],699464)},546893,a=>{"use strict";var b=a.i(187924),c=a.i(497895);a.s(["Textarea",0,function({className:a,...d}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,c.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",a),...d})}])},280281,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(507554),e=a.i(470121),f=a.i(750104),g=a.i(225152),h=a.i(77994),i=a.i(3688),j=a.i(30553),k="Switch",[l,m]=(0,f.createContextScope)(k),[n,o]=l(k);function p(a){let{__scopeSwitch:d,checked:e,children:f,defaultChecked:h,disabled:i,form:j,name:l,onCheckedChange:m,required:o,value:p="on",internal_do_not_use_render:q}=a,[r,s]=(0,g.useControllableState)({prop:e,defaultProp:h??!1,onChange:m,caller:k}),[t,u]=c.useState(null),[v,w]=c.useState(null),x=c.useRef(!1),y=!t||!!j||!!t.closest("form"),z={checked:r,setChecked:s,disabled:i,control:t,setControl:u,name:l,form:j,value:p,hasConsumerStoppedPropagationRef:x,required:o,defaultChecked:h,isFormControl:y,bubbleInput:v,setBubbleInput:w};return(0,b.jsx)(n,{scope:d,...z,children:"function"==typeof q?q(z):f})}var q="SwitchTrigger",r=c.forwardRef(({__scopeSwitch:a,onClick:c,...f},g)=>{let{value:h,disabled:i,checked:k,required:l,setControl:m,setChecked:n,hasConsumerStoppedPropagationRef:p,isFormControl:r,bubbleInput:s}=o(q,a),t=(0,e.useComposedRefs)(g,m);return(0,b.jsx)(j.Primitive.button,{type:"button",role:"switch","aria-checked":k,"aria-required":l,"data-state":x(k),"data-disabled":i?"":void 0,disabled:i,value:h,...f,ref:t,onClick:(0,d.composeEventHandlers)(c,a=>{n(a=>!a),s&&r&&(p.current=a.isPropagationStopped(),p.current||a.stopPropagation())})})});r.displayName=q;var s=c.forwardRef((a,c)=>{let{__scopeSwitch:d,name:e,checked:f,defaultChecked:g,required:h,disabled:i,value:j,onCheckedChange:k,form:l,...m}=a;return(0,b.jsx)(p,{__scopeSwitch:d,checked:f,defaultChecked:g,disabled:i,required:h,onCheckedChange:k,name:e,form:l,value:j,internal_do_not_use_render:({isFormControl:a})=>(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(r,{...m,ref:c,__scopeSwitch:d}),a&&(0,b.jsx)(w,{__scopeSwitch:d})]})})});s.displayName=k;var t="SwitchThumb",u=c.forwardRef((a,c)=>{let{__scopeSwitch:d,...e}=a,f=o(t,d);return(0,b.jsx)(j.Primitive.span,{"data-state":x(f.checked),"data-disabled":f.disabled?"":void 0,...e,ref:c})});u.displayName=t;var v="SwitchBubbleInput",w=c.forwardRef(({__scopeSwitch:a,...d},f)=>{let{control:g,hasConsumerStoppedPropagationRef:k,checked:l,defaultChecked:m,required:n,disabled:p,name:q,value:r,form:s,bubbleInput:t,setBubbleInput:u}=o(v,a),w=(0,e.useComposedRefs)(f,u),x=(0,h.usePrevious)(l),y=(0,i.useSize)(g);c.useEffect(()=>{if(!t)return;let a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,b=!k.current;if(x!==l&&a){let c=new Event("click",{bubbles:b});a.call(t,l),t.dispatchEvent(c)}},[t,x,l,k]);let z=c.useRef(l);return(0,b.jsx)(j.Primitive.input,{type:"checkbox","aria-hidden":!0,defaultChecked:m??z.current,required:n,disabled:p,name:q,value:r,form:s,...d,tabIndex:-1,ref:w,style:{...d.style,...y,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function x(a){return a?"checked":"unchecked"}w.displayName=v;var y=a.i(497895);a.s(["Switch",0,function({className:a,...c}){return(0,b.jsx)(s,{"data-slot":"switch",className:(0,y.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...c,children:(0,b.jsx)(u,{"data-slot":"switch-thumb",className:(0,y.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}],280281)},705151,a=>{"use strict";let b=(0,a.i(883706).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);a.s(["Copy",0,b],705151)},104720,a=>{"use strict";let b=(0,a.i(883706).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);a.s(["FileText",0,b],104720)},290669,a=>{"use strict";let b=(0,a.i(883706).default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);a.s(["Activity",0,b],290669)},634755,a=>{"use strict";var b=a.i(187924),c=a.i(965733),d=a.i(572131),e=a.i(823292),f=a.i(596221);a.i(506122);var g=a.i(187527),h=a.i(524634),i=a.i(324546),j=a.i(74761),k=a.i(340695),l=a.i(205522),m=a.i(917171),n=a.i(280281),o=a.i(546893),p=a.i(887682);function q({mode:a,model:c,defaultProviderId:s,onSaved:t,onCancel:u}){let{data:v}=i.providers.useList(),{data:w}=g.capabilities.useList(),{data:x}=j.variants.useList(),[y,z]=(0,d.useState)(""),[A,B]=(0,d.useState)(""),[C,D]=(0,d.useState)(""),[E,F]=(0,d.useState)("chat"),[G,H]=(0,d.useState)(""),[I,J]=(0,d.useState)(""),[K,L]=(0,d.useState)(""),[M,N]=(0,d.useState)(""),[O,P]=(0,d.useState)(""),[Q,R]=(0,d.useState)("{}"),[S,T]=(0,d.useState)(!0),[U,V]=(0,d.useState)(null),W=(0,d.useMemo)(()=>"create"===a&&!!c?.is_discovered,[a,c?.is_discovered]),X="edit"===a||W;(0,d.useEffect)(()=>{c?(z(c.name),B(c.provider_id??""),D(c.model_id??c.name),F(c.type??"chat"),H(c.api_variant_id??c.resolved_variant_id??""),J(c.context_window?.toString()??""),L(c.max_tokens?.toString()??""),N(c.output_dimension?.toString()??""),P(c.description??""),R(JSON.stringify(c.default_params??{},null,2)),T(!1!==c.enabled)):(z(""),B(s??""),D(""),F("chat"),H(""),J(""),L(""),N(""),P(""),R("{}"),T(!0)),V(null)},[a,c,s]);let Y=h.models.useCreate({onSuccess:a=>{e.toast.success("Saved"),t?.(a)},onError:a=>e.toast.error(a.message||"Save failed")}),Z=h.models.useUpdate({onSuccess:a=>{e.toast.success("Saved"),t?.(a??null)},onError:a=>e.toast.error(a.message||"Save failed")}),$=Y.isPending||Z.isPending,_=c||"edit"===a?"Save":"Create",aa=(0,d.useMemo)(()=>(x??[]).filter(a=>a.capability===E),[x,E]),ab=(0,d.useMemo)(()=>(v??[]).find(a=>a.id===A),[v,A]);return(0,b.jsxs)("form",{onSubmit:b=>{if(b.preventDefault(),!y.trim())return e.toast.error("Name required");if(!A)return e.toast.error("Provider required");if(!C.trim())return e.toast.error("Upstream model id required");let d={};try{d=Q.trim()?JSON.parse(Q):{},V(null)}catch(a){V(a instanceof Error?a.message:"Invalid JSON");return}let f={name:y.trim(),provider_id:A,upstream_model_id:C.trim(),type:E,api_variant_id:G||null,default_params:d,context_window:I?Number(I):null,max_tokens:K?Number(K):null,output_dimension:M?Number(M):null,description:O||null,enabled:S};W&&c?.meta?.raw!=null&&(f.discovered_metadata=c.meta.raw),"create"===a?Y.mutate(f):c&&Z.mutate({id:c.id,data:f})},className:"space-y-4",children:[(0,b.jsxs)("div",{className:"grid sm:grid-cols-2 gap-3",children:[(0,b.jsx)(r,{label:"Display name",htmlFor:"m-name",children:(0,b.jsx)(l.Input,{id:"m-name",value:y,onChange:a=>z(a.target.value),placeholder:"gpt-4o-mini",className:"h-9 text-sm font-mono"})}),(0,b.jsx)(r,{label:"Upstream model ID",htmlFor:"m-up",children:(0,b.jsx)(l.Input,{id:"m-up",value:C,onChange:a=>D(a.target.value),placeholder:"gpt-4o-mini",className:"h-9 text-sm font-mono"})})]}),(0,b.jsxs)("div",{className:"grid sm:grid-cols-2 gap-3",children:[(0,b.jsx)(r,{label:"Provider",children:X?(0,b.jsx)(l.Input,{value:ab?.name??A,readOnly:!0,disabled:!0,className:"h-9 text-sm font-mono bg-muted/40"}):(0,b.jsxs)(p.Select,{value:A,onValueChange:B,children:[(0,b.jsx)(p.SelectTrigger,{className:"h-9 text-sm",children:(0,b.jsx)(p.SelectValue,{placeholder:"Select provider"})}),(0,b.jsx)(p.SelectContent,{children:(v??[]).map(a=>(0,b.jsx)(p.SelectItem,{value:a.id,children:a.name},a.id))})]})}),(0,b.jsx)(r,{label:"Capability",children:(0,b.jsxs)(p.Select,{value:E,onValueChange:F,children:[(0,b.jsx)(p.SelectTrigger,{className:"h-9 text-sm",children:(0,b.jsx)(p.SelectValue,{})}),(0,b.jsxs)(p.SelectContent,{children:[(w??[]).map(a=>(0,b.jsx)(p.SelectItem,{value:a.id,children:a.label},a.id)),E&&!(w??[]).some(a=>a.id===E)&&(0,b.jsx)(p.SelectItem,{value:E,children:E})]})]})})]}),aa.length>1&&G&&(0,b.jsx)(r,{label:"Upstream API",children:(0,b.jsxs)(p.Select,{value:G,onValueChange:H,children:[(0,b.jsx)(p.SelectTrigger,{className:"h-9 text-sm",children:(0,b.jsx)(p.SelectValue,{})}),(0,b.jsxs)(p.SelectContent,{children:[aa.map(a=>(0,b.jsx)(p.SelectItem,{value:a.id,children:(0,b.jsx)("span",{className:"font-mono text-xs",children:a.id})},a.id)),!aa.some(a=>a.id===G)&&(0,b.jsx)(p.SelectItem,{value:G,children:(0,b.jsx)("span",{className:"font-mono text-xs",children:G})})]})]})}),(0,b.jsxs)("div",{className:"grid sm:grid-cols-3 gap-3",children:[(0,b.jsx)(r,{label:"Context window",htmlFor:"m-ctx",children:(0,b.jsx)(l.Input,{id:"m-ctx",type:"number",value:I,onChange:a=>J(a.target.value),className:"h-9 text-sm"})}),(0,b.jsx)(r,{label:"Max tokens",htmlFor:"m-max",children:(0,b.jsx)(l.Input,{id:"m-max",type:"number",value:K,onChange:a=>L(a.target.value),className:"h-9 text-sm"})}),(0,b.jsx)(r,{label:"Output dim",htmlFor:"m-dim",children:(0,b.jsx)(l.Input,{id:"m-dim",type:"number",value:M,onChange:a=>N(a.target.value),className:"h-9 text-sm"})})]}),(0,b.jsx)(r,{label:"Description",htmlFor:"m-desc",children:(0,b.jsx)(l.Input,{id:"m-desc",value:O,onChange:a=>P(a.target.value),className:"h-9 text-sm"})}),(0,b.jsxs)(r,{label:"Default params (JSON)",htmlFor:"m-params",children:[(0,b.jsx)(o.Textarea,{id:"m-params",value:Q,onChange:a=>R(a.target.value),rows:5,className:"text-xs font-mono"}),U&&(0,b.jsx)("span",{className:"text-xs text-destructive",children:U})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)(m.Label,{htmlFor:"m-enabled",className:"text-xs",children:"Enabled"}),(0,b.jsx)(n.Switch,{id:"m-enabled",checked:S,onCheckedChange:T})]}),(0,b.jsxs)("div",{className:"flex items-center justify-end gap-2 pt-2",children:[(0,b.jsx)(k.Button,{type:"button",variant:"outline",size:"sm",onClick:u,disabled:$,children:"Cancel"}),(0,b.jsxs)(k.Button,{type:"submit",size:"sm",disabled:$,children:[$&&(0,b.jsx)(f.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),_]})]})]})}function r({label:a,htmlFor:c,children:d}){return(0,b.jsxs)("div",{className:"grid gap-1.5 min-w-0",children:[(0,b.jsx)(m.Label,{htmlFor:c,className:"text-xs",children:a}),d]})}a.s(["ModelFormDialog",0,function({open:a,onOpenChange:d,mode:e,model:f,defaultProviderId:g}){let h=f||"edit"===e?"Edit":"Add model";return(0,b.jsx)(c.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(c.DialogContent,{className:"sm:max-w-[640px] max-h-[90vh] overflow-y-auto",onOpenAutoFocus:f?a=>a.preventDefault():void 0,children:[(0,b.jsx)(c.DialogHeader,{children:(0,b.jsx)(c.DialogTitle,{children:h})}),a&&(0,b.jsx)(q,{mode:e,model:f,defaultProviderId:g,onSaved:()=>d(!1),onCancel:()=>d(!1)})]})})}],634755)},328790,a=>{"use strict";let b=(0,a.i(883706).default)("refresh-ccw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]);a.s(["RefreshCcw",0,b],328790)},158880,649865,a=>{"use strict";var b=a.i(187924);let c=(0,a.i(883706).default)("inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);var d=a.i(588237),e=a.i(497895);a.s(["DataTableCell",0,function({className:a,...c}){return(0,b.jsx)(d.TableCell,{className:(0,e.cn)("py-2 first:pl-4 last:pr-4",a),...c})},"DataTableEmpty",0,function({colSpan:a,children:e}){return(0,b.jsx)(d.TableRow,{className:"hover:bg-transparent",children:(0,b.jsx)(d.TableCell,{colSpan:a,className:"h-48 text-center align-middle text-muted-foreground/40",children:(0,b.jsx)("div",{className:"flex items-center justify-center",children:(0,b.jsx)(c,{className:"h-8 w-8","aria-label":"empty"})})})})},"DataTableHead",0,function({className:a,...c}){return(0,b.jsx)(d.TableHead,{className:(0,e.cn)("h-10 text-xs font-semibold uppercase tracking-wide text-muted-foreground/80 first:pl-4 last:pr-4",a),...c})},"DataTableHeader",0,function({className:a,...c}){return(0,b.jsx)(d.TableHeader,{className:(0,e.cn)("bg-muted/40 sticky top-0 z-10",a),...c})},"DataTableHeaderRow",0,function({className:a,...c}){return(0,b.jsx)(d.TableRow,{className:(0,e.cn)("hover:bg-transparent border-b-muted/60 shadow-sm",a),...c})},"DataTableRow",0,function({className:a,interactive:c=!0,...f}){return(0,b.jsx)(d.TableRow,{className:(0,e.cn)("h-10 border-b-muted/20 even:bg-muted/50 group",c&&"cursor-pointer hover:bg-muted/90",a),...f})},"DataTableShell",0,function({className:a,...c}){return(0,b.jsx)("div",{className:"overflow-hidden",children:(0,b.jsx)(d.Table,{className:a,...c})})}],158880),a.s(["DataTableBody",()=>d.TableBody],649865)},131191,a=>{"use strict";let b={chat:"Chat",embedding:"Embedding",image:"Image","audio.speech":"Speech","audio.transcription":"Transcription",rerank:"Rerank"};a.s(["capabilityLabel",0,function(a){return a?b[a]?b[a]:(a.includes(".")?a.split(".").pop():a).replace(/[-_]/g," ").replace(/\b\w/g,a=>a.toUpperCase()):"—"}])},842586,a=>{"use strict";var b=a.i(187924),c=a.i(654816),d=a.i(497895);let e={ok:{label:"Operational",dot:"bg-green-500 ring-green-200",text:"text-green-600 dark:text-green-400"},down:{label:"Down",dot:"bg-red-500 ring-red-200",text:"text-red-600 dark:text-red-400"},unchecked:{label:"Unchecked",dot:"bg-muted-foreground/40 ring-muted-foreground/10",text:"text-muted-foreground"}};a.s(["ProviderHealthPill",0,function({provider:a,size:f="sm"}){var g;let h;if(!a.health_check_url)return null;let i=e[a.last_health_status??"unchecked"],j=(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("span",{className:(0,d.cn)("rounded-full ring-1 ring-offset-1 transition-colors duration-300","sm"===f?"h-1 w-1":"h-1.5 w-1.5",i.dot)}),(0,b.jsx)("span",{className:(0,d.cn)("font-medium uppercase tracking-wide","sm"===f?"text-[10px]":"text-xs",i.text),children:i.label})]}),k=(h=(g=a).last_health_checked_at,"down"===g.last_health_status?(0,b.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,b.jsx)("div",{className:"font-semibold",children:"Health check failed"}),g.last_health_error&&(0,b.jsx)("div",{className:"font-mono text-[11px] opacity-80",children:g.last_health_error}),h&&(0,b.jsxs)("div",{className:"opacity-60",children:["Last checked: ",new Date(h).toLocaleString()]})]}):"ok"===g.last_health_status&&h?(0,b.jsxs)("div",{className:"text-xs",children:["Last checked: ",new Date(h).toLocaleString()]}):g.last_health_status?null:(0,b.jsx)("div",{className:"text-xs",children:"Provider has a health-check URL but has not been probed yet."}));return k?(0,b.jsx)(c.TooltipProvider,{children:(0,b.jsxs)(c.Tooltip,{children:[(0,b.jsx)(c.TooltipTrigger,{asChild:!0,children:j}),(0,b.jsx)(c.TooltipContent,{side:"top",className:"max-w-[280px] break-words",children:k})]})}):j}])},653407,a=>{"use strict";var b=a.i(187924),c=a.i(50944),d=a.i(823292),e=a.i(705151),f=a.i(699464),g=a.i(781560),h=a.i(254161),i=a.i(340695),j=a.i(158880),k=a.i(649865),l=a.i(654816),m=a.i(131191);a.s(["ModelsTable",0,function({models:a,onEdit:n,onDelete:o}){let p=(0,c.useRouter)(),q=!!n||!!o;return(0,b.jsxs)(j.DataTableShell,{children:[(0,b.jsx)(j.DataTableHeader,{children:(0,b.jsxs)(j.DataTableHeaderRow,{children:[(0,b.jsx)(j.DataTableHead,{children:"Model Name"}),(0,b.jsx)(j.DataTableHead,{children:"ID"}),(0,b.jsx)(j.DataTableHead,{children:"Provider"}),(0,b.jsx)(j.DataTableHead,{children:"Type"}),(0,b.jsx)(j.DataTableHead,{children:"Context"}),(0,b.jsx)(j.DataTableHead,{children:"Source"}),q&&(0,b.jsx)(j.DataTableHead,{className:"w-[88px] text-right",children:"Actions"})]})}),(0,b.jsx)(k.DataTableBody,{children:0===a.length?(0,b.jsx)(j.DataTableEmpty,{colSpan:q?7:6,children:"No models found."}):a.map(a=>(0,b.jsxs)(j.DataTableRow,{onClick:()=>p.push(`/models/${encodeURIComponent(a.name)}`),title:"Open model dashboard",children:[(0,b.jsx)(j.DataTableCell,{className:"font-mono max-w-[300px]",children:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2 w-full",children:[(0,b.jsx)("span",{className:"truncate text-xs",title:a.name,children:a.name}),(0,b.jsx)(i.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",onClick:b=>{b.stopPropagation(),navigator.clipboard.writeText(a.name),d.toast.success("Model name copied to clipboard")},children:(0,b.jsx)(e.Copy,{className:"h-3 w-3 text-muted-foreground"})})]})}),(0,b.jsx)(j.DataTableCell,{className:"font-mono text-xs text-muted-foreground max-w-[260px]",children:(0,b.jsx)(l.TooltipProvider,{children:(0,b.jsxs)(l.Tooltip,{children:[(0,b.jsx)(l.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"truncate block cursor-default",children:a.model_id})}),(0,b.jsx)(l.TooltipContent,{side:"top",children:(0,b.jsx)("p",{className:"font-mono text-xs",children:a.model_id})})]})})}),(0,b.jsx)(j.DataTableCell,{children:(0,b.jsx)(h.Badge,{variant:"outline",className:"font-normal text-[10px]",children:a.provider})}),(0,b.jsx)(j.DataTableCell,{children:(0,b.jsx)(h.Badge,{variant:"secondary",className:"font-normal text-[10px]",children:(0,m.capabilityLabel)(a.type)})}),(0,b.jsx)(j.DataTableCell,{children:(0,b.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:a.context_window?a.context_window>=1e3?`${Math.round(a.context_window/1e3)}k`:a.context_window.toLocaleString():"—"})}),(0,b.jsx)(j.DataTableCell,{children:(0,b.jsx)(h.Badge,{variant:a.is_discovered?"secondary":"default",className:"text-[10px] uppercase",children:a.is_discovered?"discovered":"override"})}),q&&(0,b.jsx)(j.DataTableCell,{className:"text-right",onClick:a=>a.stopPropagation(),children:(0,b.jsxs)("div",{className:"flex items-center justify-end gap-1",children:[n&&(0,b.jsx)(i.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",title:a.is_discovered?"Promote to override":"Edit",onClick:b=>{b.stopPropagation(),n(a)},children:(0,b.jsx)(f.Pencil,{className:"h-3.5 w-3.5"})}),o&&!a.is_discovered&&(0,b.jsx)(i.Button,{variant:"ghost",size:"icon",className:"h-7 w-7 text-destructive hover:text-destructive",title:"Delete",onClick:b=>{b.stopPropagation(),o(a)},children:(0,b.jsx)(g.Trash2,{className:"h-3.5 w-3.5"})})]})})]},a.id||a.name))})]})}])}];
2
+
3
+ //# sourceMappingURL=_02wtd-0._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/%40tanstack/react-query/build/modern/useInfiniteQuery.js","../../../../lib/api/conversations.ts","../../../../node_modules/%40tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../../lib/api/mcp.ts","../../../../node_modules/lucide-react/src/icons/pencil.ts","../../../../components/ui/textarea.tsx","../../../../node_modules/%40radix-ui/react-switch/dist/index.mjs","../../../../components/ui/switch.tsx","../../../../node_modules/lucide-react/src/icons/copy.ts","../../../../node_modules/lucide-react/src/icons/file-text.ts","../../../../node_modules/lucide-react/src/icons/activity.ts","../../../../components/providers/model-form-dialog.tsx","../../../../components/providers/model-form.tsx","../../../../node_modules/lucide-react/src/icons/refresh-ccw.ts","../../../../components/ui/data-table.tsx","../../../../node_modules/lucide-react/src/icons/inbox.ts","../../../../components/providers/capability-label.ts","../../../../components/providers/provider-health-pill.tsx","../../../../components/providers/models-table.tsx"],"sourcesContent":["\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","\"use client\";\nimport { useInfiniteQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { defineResource } from \"./resource\";\nimport { fetcher } from \"./client\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { ConversationDTO, MessageDTO } from \"@/lib/schemas/conversation\";\n\nconst base = defineResource<\n ConversationDTO,\n never,\n { title: string },\n { page?: number; page_size?: number; sort?: string; keyword?: string },\n Paginated<ConversationDTO>\n>({\n path: \"/conversations\",\n key: \"conversations\",\n paramsOf: (q) => ({\n page: q.page ?? 1,\n page_size: q.page_size ?? 20,\n sort: q.sort ?? \"-updated_at\",\n keyword: q.keyword,\n }),\n // List + get are read-mostly; users rarely care about millisecond\n // freshness here. 60s lets nav back to the sidebar / chat skip\n // a network round-trip — mutations explicit-invalidate anyway.\n staleTime: 60_000,\n});\n\n/** Cache key for the initial page of messages of a single conversation.\n * Lives under the conversation resource so it gets gc'd if the resource\n * is gc'd, but is isolated from list/infinite queries so we can invalidate\n * list-only without dropping the message cache. */\nexport function messagesCacheKey(conversationId: string, pageSize: number) {\n return [...base.keys.one(conversationId), \"messages-cache\", pageSize] as const;\n}\n\nexport const conversations = {\n ...base,\n\n // ---- shorthand: title-only update ----\n updateTitle: (id: string, title: string) => base.update(id, { title }),\n\n // ---- shared message cache key (used by usePaginatedMessages / sync) ----\n messagesCacheKey,\n\n /** Invalidate only the conversation LIST queries (list/infinite),\n * leaving the per-conversation messages cache intact. */\n useInvalidateList: () => {\n const qc = useQueryClient();\n return () => qc.invalidateQueries({\n queryKey: base.keys.all(),\n predicate: (q) => {\n const k = q.queryKey as readonly unknown[];\n return k.length >= 2 && (k[1] === \"list\" || k[1] === \"infinite\");\n },\n });\n },\n\n // ---- infinite scroll variant of useList ----\n useInfinite: (params?: { pageSize?: number; scope?: string; keyword?: string }) => {\n const pageSize = params?.pageSize ?? 20;\n const keyword = params?.keyword?.trim() || undefined;\n return useInfiniteQuery({\n queryKey: [\n ...base.keys.all(),\n \"infinite\",\n params?.scope ?? \"default\",\n pageSize,\n keyword ?? \"\",\n ] as const,\n initialPageParam: 1,\n queryFn: ({ pageParam = 1 }) =>\n base.list({ page: pageParam as number, page_size: pageSize, keyword }),\n getNextPageParam: (lastPage) => {\n if (!lastPage) return undefined;\n const hasMore = lastPage.page * lastPage.page_size < lastPage.total;\n return hasMore ? lastPage.page + 1 : undefined;\n },\n });\n },\n\n // ---- nested: messages under a conversation ----\n listMessages: (id: string, params?: { page?: number; page_size?: number; sort?: string }) =>\n fetcher<Paginated<MessageDTO>>(\n `/conversations/${encodeURIComponent(id)}/messages?` +\n new URLSearchParams({\n page: String(params?.page ?? 1),\n page_size: String(params?.page_size ?? 50),\n sort: params?.sort ?? \"-created_at\",\n }).toString(),\n ),\n};\n\n// Messages are a sibling resource only used for rating today.\nconst messagesKey = [\"messages\"] as const;\nexport const messages = {\n keys: { all: () => messagesKey },\n rate: (messageId: string, rating: \"up\" | \"down\" | \"none\", feedback?: string) =>\n fetcher<null>(`/messages/${encodeURIComponent(messageId)}/rate`, {\n method: \"POST\",\n body: JSON.stringify({ rating, feedback }),\n }),\n};\n","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n constructor(client, options) {\n super(client, options);\n }\n bindMethods() {\n super.bindMethods();\n this.fetchNextPage = this.fetchNextPage.bind(this);\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n }\n setOptions(options) {\n options._type = \"infinite\";\n super.setOptions(options);\n }\n getOptimisticResult(options) {\n options._type = \"infinite\";\n return super.getOptimisticResult(options);\n }\n fetchNextPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"forward\" }\n }\n });\n }\n fetchPreviousPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"backward\" }\n }\n });\n }\n createResult(query, options) {\n const { state } = query;\n const parentResult = super.createResult(query, options);\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n const isFetchNextPageError = isError && fetchDirection === \"forward\";\n const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n const result = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n };\n return result;\n }\n};\nexport {\n InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","\"use client\"\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport * as React from \"react\"\nimport { defineResource } from \"./resource\"\nimport { fetcher, rawFetch } from \"./client\"\nimport type {\n McpPreset,\n McpServerCreateInput,\n McpServerDTO,\n McpServerUpdateInput,\n} from \"@/lib/schemas/mcp\"\n\nconst base = defineResource<\n McpServerDTO,\n McpServerCreateInput,\n McpServerUpdateInput,\n Record<string, unknown>,\n McpServerDTO[]\n>({\n path: \"/mcp/servers\",\n key: \"mcp-servers\",\n listShape: \"array\",\n staleTime: 60_000,\n})\n\n/** Wire shape — mirrors lib/server/mcp/checks.ts McpCheckEvent so\n * adding a new phase/log channel is a one-place edit on each side. */\nexport type McpCheckPhase = \"spawning\" | \"starting\" | \"connecting\" | \"listing\" | \"ready\"\n\nexport type McpCheckEvent =\n | { type: \"phase\"; phase: McpCheckPhase }\n | { type: \"log\"; line: string }\n | { type: \"result\"; server: McpServerDTO }\n | { type: \"error\"; message: string; server?: McpServerDTO }\n\nexport const mcpServers = {\n ...base,\n\n // ---- presets ----\n listPresets: () => fetcher<McpPreset[]>(\"/mcp/presets\"),\n usePresets: () =>\n useQuery({\n queryKey: [\"mcp-presets\"] as const,\n queryFn: () => mcpServers.listPresets(),\n staleTime: 5 * 60 * 1000,\n }),\n\n // ---- check (one-shot JSON, kept for back-compat) ----\n check: (id: string) =>\n fetcher<McpServerDTO>(`/mcp/servers/${encodeURIComponent(id)}/check`, {\n method: \"POST\",\n }),\n useCheck: (opts?: { onSuccess?: (server: McpServerDTO) => void; onError?: (err: Error) => void }) => {\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (id: string) => mcpServers.check(id),\n onSuccess: (server) => {\n qc.invalidateQueries({ queryKey: base.keys.all() })\n opts?.onSuccess?.(server)\n },\n onError: (err: Error) => opts?.onError?.(err),\n })\n },\n\n // ---- check (SSE stream) ----\n /** Streams every phase + stderr line from the server check, then\n * resolves with the final DTO. Caller's onEvent is invoked for\n * every event including the terminating `result` / `error`. */\n checkStream: async (\n id: string,\n onEvent: (ev: McpCheckEvent) => void,\n opts?: { signal?: AbortSignal },\n ): Promise<McpServerDTO | null> => {\n const res = await rawFetch(`/mcp/servers/${encodeURIComponent(id)}/check`, {\n method: \"POST\",\n headers: { Accept: \"text/event-stream\" },\n signal: opts?.signal,\n })\n if (!res.body) throw new Error(\"No response body\")\n\n const reader = res.body.getReader()\n const decoder = new TextDecoder()\n let buf = \"\"\n let last: McpServerDTO | null = null\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buf += decoder.decode(value, { stream: true })\n // SSE frames are separated by \\n\\n.\n let nl = buf.indexOf(\"\\n\\n\")\n while (nl !== -1) {\n const frame = buf.slice(0, nl)\n buf = buf.slice(nl + 2)\n const dataLine = frame.split(\"\\n\").find((l) => l.startsWith(\"data: \"))\n if (dataLine) {\n try {\n const ev = JSON.parse(dataLine.slice(6)) as McpCheckEvent\n onEvent(ev)\n if (ev.type === \"result\") last = ev.server\n else if (ev.type === \"error\" && ev.server) last = ev.server\n } catch { /* malformed frame, skip */ }\n }\n nl = buf.indexOf(\"\\n\\n\")\n }\n }\n } finally {\n try { reader.releaseLock() } catch { /* ignore */ }\n }\n return last\n },\n useCheckStream: () => {\n const qc = useQueryClient()\n const [phase, setPhase] = React.useState<McpCheckPhase | null>(null)\n const [logs, setLogs] = React.useState<string[]>([])\n const [isChecking, setIsChecking] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n const [result, setResult] = React.useState<McpServerDTO | null>(null)\n const abortRef = React.useRef<AbortController | null>(null)\n\n const reset = React.useCallback(() => {\n setPhase(null)\n setLogs([])\n setError(null)\n setResult(null)\n }, [])\n\n const cancel = React.useCallback(() => {\n abortRef.current?.abort()\n abortRef.current = null\n setIsChecking(false)\n }, [])\n\n const run = React.useCallback(\n async (id: string) => {\n reset()\n setIsChecking(true)\n const ctrl = new AbortController()\n abortRef.current = ctrl\n try {\n const final = await mcpServers.checkStream(\n id,\n (ev) => {\n if (ev.type === \"phase\") setPhase(ev.phase)\n else if (ev.type === \"log\") setLogs((prev) => [...prev, ev.line])\n else if (ev.type === \"result\") setResult(ev.server)\n else if (ev.type === \"error\") {\n setError(ev.message)\n if (ev.server) setResult(ev.server)\n }\n },\n { signal: ctrl.signal },\n )\n qc.invalidateQueries({ queryKey: base.keys.all() })\n return final\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n if (!ctrl.signal.aborted) setError(msg)\n return null\n } finally {\n setIsChecking(false)\n abortRef.current = null\n }\n },\n [reset, qc],\n )\n\n React.useEffect(() => () => abortRef.current?.abort(), [])\n\n return { run, cancel, reset, phase, logs, isChecking, error, result }\n },\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n];\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIgLz4KICA8cGF0aCBkPSJtMTUgNSA0IDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/pencil\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Pencil = createLucideIcon('pencil', __iconNode);\n\nexport default Pencil;\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2', key: '17jyea' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2', key: 'zix9uf' }],\n];\n\n/**\n * @component @name Copy\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHg9IjgiIHk9IjgiIHJ4PSIyIiByeT0iMiIgLz4KICA8cGF0aCBkPSJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/copy\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Copy = createLucideIcon('copy', __iconNode);\n\nexport default Copy;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n];\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTAgOUg4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxM0g4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxN0g4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileText = createLucideIcon('file-text', __iconNode);\n\nexport default FileText;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2',\n key: '169zse',\n },\n ],\n];\n\n/**\n * @component @name Activity\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjIgMTJoLTIuNDhhMiAyIDAgMCAwLTEuOTMgMS40NmwtMi4zNSA4LjM2YS4yNS4yNSAwIDAgMS0uNDggMEw5LjI0IDIuMThhLjI1LjI1IDAgMCAwLS40OCAwbC0yLjM1IDguMzZBMiAyIDAgMCAxIDQuNDkgMTJIMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/activity\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Activity = createLucideIcon('activity', __iconNode);\n\nexport default Activity;\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport type { ModelDTO } from \"@/lib/schemas/model\"\n\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\"\n\nimport { ModelForm } from \"./model-form\"\n\ninterface Props {\n open: boolean\n onOpenChange: (open: boolean) => void\n mode: \"create\" | \"edit\"\n /** In create mode: optional seed (e.g. a discovered model being\n * promoted). In edit mode: the row being edited. */\n model?: ModelDTO | null\n defaultProviderId?: string\n}\n\nexport function ModelFormDialog({ open, onOpenChange, mode, model, defaultProviderId }: Props) {\n // Pure create only when no model is supplied. Promoting a discovered\n // model is a form of edit from the user's POV — show the same title.\n const title = model || mode === \"edit\" ? \"Edit\" : \"Add model\"\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className=\"sm:max-w-[640px] max-h-[90vh] overflow-y-auto\"\n // Whenever the dialog opens against an existing record\n // (edit or discovered-promote) the cursor in the\n // display-name field is surprising. Only pure-add lets\n // the default first-focus stand.\n onOpenAutoFocus={model ? (e) => e.preventDefault() : undefined}\n >\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n </DialogHeader>\n {/* Remount on open so the form initializer effect re-fires\n * with the freshest `model` prop. */}\n {open && (\n <ModelForm\n mode={mode}\n model={model}\n defaultProviderId={defaultProviderId}\n onSaved={() => onOpenChange(false)}\n onCancel={() => onOpenChange(false)}\n />\n )}\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport { toast } from \"sonner\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { capabilities, models, providers, variants } from \"@/lib/api\"\nimport type { ModelCreateInput, ModelDTO } from \"@/lib/schemas/model\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Switch } from \"@/components/ui/switch\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\ninterface Props {\n mode: \"create\" | \"edit\"\n /** In create mode: optional seed (e.g. a discovered model being\n * promoted). In edit mode: the row being edited. */\n model?: ModelDTO | null\n /** Used to pre-select the provider on pure create. Always locked\n * (provider field becomes read-only) in edit + discovered-promote. */\n defaultProviderId?: string\n onSaved?: (saved: ModelDTO | null) => void\n onCancel?: () => void\n}\n\nexport function ModelForm({ mode, model, defaultProviderId, onSaved, onCancel }: Props) {\n const { data: providerList } = providers.useList()\n const { data: capabilityList } = capabilities.useList()\n const { data: variantList } = variants.useList()\n\n const [name, setName] = useState(\"\")\n const [providerId, setProviderId] = useState<string>(\"\")\n const [upstreamModelId, setUpstreamModelId] = useState(\"\")\n const [type, setType] = useState<string>(\"chat\")\n const [apiVariantId, setApiVariantId] = useState<string>(\"\")\n const [contextWindow, setContextWindow] = useState(\"\")\n const [maxTokens, setMaxTokens] = useState(\"\")\n const [outputDim, setOutputDim] = useState(\"\")\n const [description, setDescription] = useState(\"\")\n const [defaultParams, setDefaultParams] = useState(\"{}\")\n const [enabled, setEnabled] = useState(true)\n const [parseError, setParseError] = useState<string | null>(null)\n\n const isOverride = useMemo(\n () => mode === \"create\" && !!model?.is_discovered,\n [mode, model?.is_discovered],\n )\n\n // Provider is locked in edit + discovered-promote. Pure create lets\n // the admin pick freely.\n const providerLocked = mode === \"edit\" || isOverride\n useEffect(() => {\n if (model) {\n setName(model.name)\n setProviderId(model.provider_id ?? \"\")\n setUpstreamModelId(model.model_id ?? model.name)\n setType(model.type ?? \"chat\")\n // Seed the variant dropdown from the gateway's currently-\n // resolved choice (pin → preference walk → capability default).\n // The form has no Auto option — the dropdown always shows a\n // concrete variant the gateway is using right now.\n setApiVariantId(model.api_variant_id ?? model.resolved_variant_id ?? \"\")\n setContextWindow(model.context_window?.toString() ?? \"\")\n setMaxTokens(model.max_tokens?.toString() ?? \"\")\n setOutputDim(model.output_dimension?.toString() ?? \"\")\n setDescription(model.description ?? \"\")\n setDefaultParams(JSON.stringify(model.default_params ?? {}, null, 2))\n setEnabled(model.enabled !== false)\n } else {\n setName(\"\")\n setProviderId(defaultProviderId ?? \"\")\n setUpstreamModelId(\"\")\n setType(\"chat\")\n setApiVariantId(\"\")\n setContextWindow(\"\")\n setMaxTokens(\"\")\n setOutputDim(\"\")\n setDescription(\"\")\n setDefaultParams(\"{}\")\n setEnabled(true)\n }\n setParseError(null)\n }, [mode, model, defaultProviderId])\n\n const createMutation = models.useCreate({\n onSuccess: (saved) => {\n toast.success(\"Saved\")\n onSaved?.(saved)\n },\n onError: (e) => toast.error(e.message || \"Save failed\"),\n })\n\n const updateMutation = models.useUpdate({\n onSuccess: (saved) => {\n toast.success(\"Saved\")\n onSaved?.(saved ?? null)\n },\n onError: (e) => toast.error(e.message || \"Save failed\"),\n })\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!name.trim()) return toast.error(\"Name required\")\n if (!providerId) return toast.error(\"Provider required\")\n if (!upstreamModelId.trim()) return toast.error(\"Upstream model id required\")\n\n let params: Record<string, unknown> = {}\n try {\n params = defaultParams.trim() ? JSON.parse(defaultParams) : {}\n setParseError(null)\n } catch (err) {\n setParseError(err instanceof Error ? err.message : \"Invalid JSON\")\n return\n }\n\n const payload: ModelCreateInput = {\n name: name.trim(),\n provider_id: providerId,\n upstream_model_id: upstreamModelId.trim(),\n type,\n api_variant_id: apiVariantId || null,\n default_params: params,\n context_window: contextWindow ? Number(contextWindow) : null,\n max_tokens: maxTokens ? Number(maxTokens) : null,\n output_dimension: outputDim ? Number(outputDim) : null,\n description: description || null,\n enabled,\n }\n\n // When promoting a discovered model into an override, snapshot the\n // raw upstream entry so the gateway can re-project metadata even\n // when the discovery cache is cold.\n if (isOverride && model?.meta?.raw != null) {\n payload.discovered_metadata = model.meta.raw\n }\n\n if (mode === \"create\") {\n createMutation.mutate(payload)\n } else if (model) {\n updateMutation.mutate({ id: model.id, data: payload })\n }\n }\n\n const isLoading = createMutation.isPending || updateMutation.isPending\n const submitLabel = model || mode === \"edit\" ? \"Save\" : \"Create\"\n\n const variantsForCapability = useMemo(\n () => (variantList ?? []).filter((v) => v.capability === type),\n [variantList, type],\n )\n const selectedProvider = useMemo(\n () => (providerList ?? []).find((p) => p.id === providerId),\n [providerList, providerId],\n )\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"grid sm:grid-cols-2 gap-3\">\n <Field label=\"Display name\" htmlFor=\"m-name\">\n <Input\n id=\"m-name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"gpt-4o-mini\"\n className=\"h-9 text-sm font-mono\"\n />\n </Field>\n <Field label=\"Upstream model ID\" htmlFor=\"m-up\">\n <Input\n id=\"m-up\"\n value={upstreamModelId}\n onChange={(e) => setUpstreamModelId(e.target.value)}\n placeholder=\"gpt-4o-mini\"\n className=\"h-9 text-sm font-mono\"\n />\n </Field>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-3\">\n <Field label=\"Provider\">\n {providerLocked ? (\n <Input\n value={selectedProvider?.name ?? providerId}\n readOnly\n disabled\n className=\"h-9 text-sm font-mono bg-muted/40\"\n />\n ) : (\n <Select value={providerId} onValueChange={setProviderId}>\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue placeholder=\"Select provider\" />\n </SelectTrigger>\n <SelectContent>\n {(providerList ?? []).map((p) => (\n <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </Field>\n <Field label=\"Capability\">\n <Select value={type} onValueChange={setType}>\n <SelectTrigger className=\"h-9 text-sm\"><SelectValue /></SelectTrigger>\n <SelectContent>\n {(capabilityList ?? []).map((c) => (\n <SelectItem key={c.id} value={c.id}>{c.label}</SelectItem>\n ))}\n {type && !(capabilityList ?? []).some((c) => c.id === type) && (\n <SelectItem value={type}>{type}</SelectItem>\n )}\n </SelectContent>\n </Select>\n </Field>\n </div>\n\n {variantsForCapability.length > 1 && apiVariantId && (\n <Field label=\"Upstream API\">\n <Select value={apiVariantId} onValueChange={setApiVariantId}>\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {variantsForCapability.map((v) => (\n <SelectItem key={v.id} value={v.id}>\n <span className=\"font-mono text-xs\">{v.id}</span>\n </SelectItem>\n ))}\n {!variantsForCapability.some((v) => v.id === apiVariantId) && (\n <SelectItem value={apiVariantId}>\n <span className=\"font-mono text-xs\">{apiVariantId}</span>\n </SelectItem>\n )}\n </SelectContent>\n </Select>\n </Field>\n )}\n\n <div className=\"grid sm:grid-cols-3 gap-3\">\n <Field label=\"Context window\" htmlFor=\"m-ctx\">\n <Input id=\"m-ctx\" type=\"number\" value={contextWindow} onChange={(e) => setContextWindow(e.target.value)} className=\"h-9 text-sm\" />\n </Field>\n <Field label=\"Max tokens\" htmlFor=\"m-max\">\n <Input id=\"m-max\" type=\"number\" value={maxTokens} onChange={(e) => setMaxTokens(e.target.value)} className=\"h-9 text-sm\" />\n </Field>\n <Field label=\"Output dim\" htmlFor=\"m-dim\">\n <Input id=\"m-dim\" type=\"number\" value={outputDim} onChange={(e) => setOutputDim(e.target.value)} className=\"h-9 text-sm\" />\n </Field>\n </div>\n\n <Field label=\"Description\" htmlFor=\"m-desc\">\n <Input id=\"m-desc\" value={description} onChange={(e) => setDescription(e.target.value)} className=\"h-9 text-sm\" />\n </Field>\n\n <Field label=\"Default params (JSON)\" htmlFor=\"m-params\">\n <Textarea\n id=\"m-params\"\n value={defaultParams}\n onChange={(e) => setDefaultParams(e.target.value)}\n rows={5}\n className=\"text-xs font-mono\"\n />\n {parseError && <span className=\"text-xs text-destructive\">{parseError}</span>}\n </Field>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"m-enabled\" className=\"text-xs\">Enabled</Label>\n <Switch id=\"m-enabled\" checked={enabled} onCheckedChange={setEnabled} />\n </div>\n\n <div className=\"flex items-center justify-end gap-2 pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onCancel}\n disabled={isLoading}\n >\n Cancel\n </Button>\n <Button type=\"submit\" size=\"sm\" disabled={isLoading}>\n {isLoading && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n {submitLabel}\n </Button>\n </div>\n </form>\n )\n}\n\nfunction Field({\n label,\n htmlFor,\n children,\n}: {\n label: string\n htmlFor?: string\n children: React.ReactNode\n}) {\n return (\n <div className=\"grid gap-1.5 min-w-0\">\n <Label htmlFor={htmlFor} className=\"text-xs\">{label}</Label>\n {children}\n </div>\n )\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '14sxne' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n ['path', { d: 'M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16', key: '1hlbsb' }],\n ['path', { d: 'M16 16h5v5', key: 'ccwih5' }],\n];\n\n/**\n * @component @name RefreshCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMCAwLTktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgLz4KICA8cGF0aCBkPSJNMyAzdjVoNSIgLz4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDAgOSA5IDkuNzUgOS43NSAwIDAgMCA2Ljc0LTIuNzRMMjEgMTYiIC8+CiAgPHBhdGggZD0iTTE2IDE2aDV2NSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/refresh-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCcw = createLucideIcon('refresh-ccw', __iconNode);\n\nexport default RefreshCcw;\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Inbox } from \"lucide-react\"\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\"\nimport { cn } from \"@/lib/utils\"\n\n/**\n * Shared visual contract for dashboard data tables (currently used by\n * /logs and /providers#models). Pages compose these primitives so the\n * \"Loom dashboard table\" look — sticky muted header, uppercase head text,\n * zebra rows, hover highlight, consistent padding — lives in exactly one\n * place. Future style tweaks touch this file only.\n *\n * These primitives are visual-only by design (SRP). They do not know\n * about sorting, pagination, or data fetching; callers wire those.\n */\n\nexport function DataTableShell({\n className,\n ...props\n}: React.ComponentProps<\"table\">) {\n return (\n <div className=\"overflow-hidden\">\n <Table className={className} {...props} />\n </div>\n )\n}\n\nexport function DataTableHeader({\n className,\n ...props\n}: React.ComponentProps<\"thead\">) {\n return (\n <TableHeader\n className={cn(\"bg-muted/40 sticky top-0 z-10\", className)}\n {...props}\n />\n )\n}\n\nexport function DataTableHeaderRow({\n className,\n ...props\n}: React.ComponentProps<\"tr\">) {\n return (\n <TableRow\n className={cn(\n \"hover:bg-transparent border-b-muted/60 shadow-sm\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DataTableHead({\n className,\n ...props\n}: React.ComponentProps<\"th\">) {\n return (\n <TableHead\n className={cn(\n \"h-10 text-xs font-semibold uppercase tracking-wide text-muted-foreground/80 first:pl-4 last:pr-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DataTableRow({\n className,\n interactive = true,\n ...props\n}: React.ComponentProps<\"tr\"> & { interactive?: boolean }) {\n return (\n <TableRow\n className={cn(\n \"h-10 border-b-muted/20 even:bg-muted/50 group\",\n interactive && \"cursor-pointer hover:bg-muted/90\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport function DataTableCell({\n className,\n ...props\n}: React.ComponentProps<\"td\">) {\n return (\n <TableCell\n className={cn(\"py-2 first:pl-4 last:pr-4\", className)}\n {...props}\n />\n )\n}\n\nexport function DataTableEmpty({\n colSpan,\n children: _children,\n}: {\n colSpan: number\n children?: React.ReactNode\n}) {\n void _children\n return (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n colSpan={colSpan}\n className=\"h-48 text-center align-middle text-muted-foreground/40\"\n >\n <div className=\"flex items-center justify-center\">\n <Inbox className=\"h-8 w-8\" aria-label=\"empty\" />\n </div>\n </TableCell>\n </TableRow>\n )\n}\n\nexport { TableBody as DataTableBody }\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['polyline', { points: '22 12 16 12 14 15 10 15 8 12 2 12', key: 'o97t9d' }],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n key: 'oot6mr',\n },\n ],\n];\n\n/**\n * @component @name Inbox\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cG9seWxpbmUgcG9pbnRzPSIyMiAxMiAxNiAxMiAxNCAxNSAxMCAxNSA4IDEyIDIgMTIiIC8+CiAgPHBhdGggZD0iTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/inbox\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Inbox = createLucideIcon('inbox', __iconNode);\n\nexport default Inbox;\n","/**\n * Display-friendly labels for capability ids. Capability ids are dot-style\n * (`audio.speech`, `audio.transcription`) for namespacing on the server,\n * but rendering them verbatim in the UI looks like a path. Single source\n * of truth so list/table/badge/card all agree.\n *\n * New capabilities fall back to a Title-Cased version of the id.\n */\nconst KNOWN: Record<string, string> = {\n chat: \"Chat\",\n embedding: \"Embedding\",\n image: \"Image\",\n \"audio.speech\": \"Speech\",\n \"audio.transcription\": \"Transcription\",\n rerank: \"Rerank\",\n};\n\nexport function capabilityLabel(id: string | null | undefined): string {\n if (!id) return \"—\";\n if (KNOWN[id]) return KNOWN[id];\n // Fallback: take the last segment, title-case.\n const tail = id.includes(\".\") ? id.split(\".\").pop()! : id;\n return tail.replace(/[-_]/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n","import type { ProviderDTO } from \"@/lib/schemas/provider\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport { cn } from \"@/lib/utils\"\n\n/**\n * Provider health pill.\n *\n * Visibility & color rules (single source of truth — used by both the\n * card grid and the per-provider detail page):\n * - No `health_check_url` → render nothing. We have no signal,\n * so claiming Operational would be a lie.\n * - URL set, status === \"ok\" → green \"Operational\".\n * - URL set, status === \"down\" → red \"Down\" + tooltip with error.\n * - URL set, status === null → grey \"Unchecked\" (never probed).\n *\n * Two `size` variants share the same logic so the card row stays compact\n * and the detail page stays prominent.\n */\ntype Size = \"sm\" | \"md\";\n\nconst STATUS = {\n ok: {\n label: \"Operational\",\n dot: \"bg-green-500 ring-green-200\",\n text: \"text-green-600 dark:text-green-400\",\n },\n down: {\n label: \"Down\",\n dot: \"bg-red-500 ring-red-200\",\n text: \"text-red-600 dark:text-red-400\",\n },\n unchecked: {\n label: \"Unchecked\",\n dot: \"bg-muted-foreground/40 ring-muted-foreground/10\",\n text: \"text-muted-foreground\",\n },\n} as const;\n\nexport function ProviderHealthPill({\n provider,\n size = \"sm\",\n}: {\n provider: Pick<ProviderDTO, \"health_check_url\" | \"last_health_status\" | \"last_health_checked_at\" | \"last_health_error\">;\n size?: Size;\n}) {\n if (!provider.health_check_url) return null;\n\n const key = provider.last_health_status ?? \"unchecked\";\n const s = STATUS[key];\n\n const inner = (\n <div className=\"flex items-center gap-1.5\">\n <span\n className={cn(\n \"rounded-full ring-1 ring-offset-1 transition-colors duration-300\",\n size === \"sm\" ? \"h-1 w-1\" : \"h-1.5 w-1.5\",\n s.dot,\n )}\n />\n <span\n className={cn(\n \"font-medium uppercase tracking-wide\",\n size === \"sm\" ? \"text-[10px]\" : \"text-xs\",\n s.text,\n )}\n >\n {s.label}\n </span>\n </div>\n );\n\n // Tooltip only when there's something useful to show.\n const tooltipBody = tooltipFor(provider);\n if (!tooltipBody) return inner;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{inner}</TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-[280px] break-words\">\n {tooltipBody}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nfunction tooltipFor(\n provider: Pick<ProviderDTO, \"last_health_status\" | \"last_health_checked_at\" | \"last_health_error\">,\n): React.ReactNode {\n const when = provider.last_health_checked_at;\n if (provider.last_health_status === \"down\") {\n return (\n <div className=\"space-y-1 text-xs\">\n <div className=\"font-semibold\">Health check failed</div>\n {provider.last_health_error && (\n <div className=\"font-mono text-[11px] opacity-80\">{provider.last_health_error}</div>\n )}\n {when && <div className=\"opacity-60\">Last checked: {new Date(when).toLocaleString()}</div>}\n </div>\n );\n }\n if (provider.last_health_status === \"ok\" && when) {\n return <div className=\"text-xs\">Last checked: {new Date(when).toLocaleString()}</div>;\n }\n if (!provider.last_health_status) {\n return <div className=\"text-xs\">Provider has a health-check URL but has not been probed yet.</div>;\n }\n return null;\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { toast } from \"sonner\"\nimport { Copy, Pencil, Trash2 } from \"lucide-react\"\n\nimport type { ModelDTO } from \"@/lib/schemas/model\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n DataTableBody,\n DataTableCell,\n DataTableEmpty,\n DataTableHead,\n DataTableHeader,\n DataTableHeaderRow,\n DataTableRow,\n DataTableShell,\n} from \"@/components/ui/data-table\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\"\n\nimport { capabilityLabel } from \"./capability-label\"\n\ninterface Props {\n models: ModelDTO[]\n /** Admin: per-row Edit handler. Opens the popup form. For discovered\n * rows the parent should open the popup in \"create\" mode so the\n * admin saves a new override pre-filled with the discovered defaults. */\n onEdit?: (model: ModelDTO) => void\n /** Admin: per-row Delete handler. */\n onDelete?: (model: ModelDTO) => void\n}\n\n/** Table of models. Row click navigates to the per-model dashboard.\n * Admin Edit / Delete are direct icon buttons (one click, no dropdown). */\nexport function ModelsTable({ models, onEdit, onDelete }: Props) {\n const router = useRouter()\n const showActions = !!onEdit || !!onDelete\n const columnCount = showActions ? 7 : 6\n\n return (\n <DataTableShell>\n <DataTableHeader>\n <DataTableHeaderRow>\n <DataTableHead>Model Name</DataTableHead>\n <DataTableHead>ID</DataTableHead>\n <DataTableHead>Provider</DataTableHead>\n <DataTableHead>Type</DataTableHead>\n <DataTableHead>Context</DataTableHead>\n <DataTableHead>Source</DataTableHead>\n {showActions && <DataTableHead className=\"w-[88px] text-right\">Actions</DataTableHead>}\n </DataTableHeaderRow>\n </DataTableHeader>\n <DataTableBody>\n {models.length === 0 ? (\n <DataTableEmpty colSpan={columnCount}>No models found.</DataTableEmpty>\n ) : (\n models.map((model) => (\n <DataTableRow\n key={model.id || model.name}\n onClick={() =>\n router.push(`/models/${encodeURIComponent(model.name)}`)\n }\n title=\"Open model dashboard\"\n >\n <DataTableCell className=\"font-mono max-w-[300px]\">\n <div className=\"flex items-center justify-between gap-2 w-full\">\n <span className=\"truncate text-xs\" title={model.name}>\n {model.name}\n </span>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity shrink-0\"\n onClick={(e) => {\n e.stopPropagation()\n navigator.clipboard.writeText(model.name)\n toast.success(\"Model name copied to clipboard\")\n }}\n >\n <Copy className=\"h-3 w-3 text-muted-foreground\" />\n </Button>\n </div>\n </DataTableCell>\n <DataTableCell className=\"font-mono text-xs text-muted-foreground max-w-[260px]\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"truncate block cursor-default\">\n {model.model_id}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p className=\"font-mono text-xs\">{model.model_id}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </DataTableCell>\n <DataTableCell>\n <Badge variant=\"outline\" className=\"font-normal text-[10px]\">\n {model.provider}\n </Badge>\n </DataTableCell>\n <DataTableCell>\n <Badge variant=\"secondary\" className=\"font-normal text-[10px]\">\n {capabilityLabel(model.type)}\n </Badge>\n </DataTableCell>\n <DataTableCell>\n <span className=\"font-mono text-xs text-muted-foreground\">\n {model.context_window\n ? model.context_window >= 1000\n ? `${Math.round(model.context_window / 1000)}k`\n : model.context_window.toLocaleString()\n : \"—\"}\n </span>\n </DataTableCell>\n <DataTableCell>\n <Badge\n variant={model.is_discovered ? \"secondary\" : \"default\"}\n className=\"text-[10px] uppercase\"\n >\n {model.is_discovered ? \"discovered\" : \"override\"}\n </Badge>\n </DataTableCell>\n {showActions && (\n <DataTableCell\n className=\"text-right\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-end gap-1\">\n {onEdit && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n title={model.is_discovered ? \"Promote to override\" : \"Edit\"}\n onClick={(e) => {\n e.stopPropagation()\n onEdit(model)\n }}\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n {onDelete && !model.is_discovered && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7 text-destructive hover:text-destructive\"\n title=\"Delete\"\n onClick={(e) => {\n e.stopPropagation()\n onDelete(model)\n }}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n </div>\n </DataTableCell>\n )}\n </DataTableRow>\n ))\n )}\n </DataTableBody>\n </DataTableShell>\n )\n}\n\n"],"names":["InfiniteQueryObserver","client","options","bindMethods","fetchNextPage","bind","fetchPreviousPage","setOptions","_type","getOptimisticResult","fetch","meta","fetchMore","direction","createResult","query","state","parentResult","isFetching","isRefetching","isError","isRefetchError","fetchDirection","fetchMeta","isFetchNextPageError","isFetchingNextPage","isFetchPreviousPageError","isFetchingPreviousPage","result","hasNextPage","data","hasPreviousPage","base","path","key","listShape","staleTime","mcpServers","listPresets","usePresets","queryKey","queryFn","check","id","encodeURIComponent","method","useCheck","opts","qc","mutationFn","onSuccess","server","invalidateQueries","keys","all","onError","err","checkStream","onEvent","res","headers","Accept","signal","body","Error","reader","getReader","decoder","TextDecoder","buf","last","done","value","read","decode","stream","nl","indexOf","frame","slice","dataLine","split","find","l","startsWith","ev","JSON","parse","type","releaseLock","useCheckStream","phase","setPhase","logs","setLogs","isChecking","setIsChecking","error","setError","setResult","abortRef","reset","cancel","current","abort","run","ctrl","AbortController","final","prev","line","message","msg","String","aborted","Textarea","className","props","SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","__scopeSwitch","checked","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","internal_do_not_use_render","setChecked","prop","defaultProp","onChange","caller","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isFormControl","closest","context","scope","isFunction","TRIGGER_NAME","SwitchTrigger","onClick","switchProps","forwardedRef","composedRefs","button","role","getState","ref","event","prevChecked","isPropagationStopped","stopPropagation","displayName","Switch","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","span","BUBBLE_INPUT_NAME","controlSize","input","inputProto","window","HTMLInputElement","prototype","descriptor","Object","getOwnPropertyDescriptor","set","bubbles","Event","call","dispatchEvent","defaultCheckedRef","tabIndex","style","position","pointerEvents","opacity","margin","transform","ModelForm","mode","model","defaultProviderId","onSaved","onCancel","providerList","useList","capabilityList","variantList","setName","providerId","setProviderId","upstreamModelId","setUpstreamModelId","setType","apiVariantId","setApiVariantId","contextWindow","setContextWindow","maxTokens","setMaxTokens","outputDim","setOutputDim","description","setDescription","defaultParams","setDefaultParams","enabled","setEnabled","parseError","setParseError","isOverride","is_discovered","providerLocked","provider_id","model_id","api_variant_id","resolved_variant_id","context_window","toString","max_tokens","output_dimension","stringify","default_params","createMutation","useCreate","saved","success","e","updateMutation","useUpdate","handleSubmit","preventDefault","trim","params","payload","upstream_model_id","Number","raw","discovered_metadata","mutate","isLoading","isPending","submitLabel","variantsForCapability","filter","v","capability","selectedProvider","p","onSubmit","Field","label","htmlFor","target","placeholder","readOnly","onValueChange","map","c","some","length","rows","variant","size","KNOWN","chat","embedding","image","rerank","capabilityLabel","tail","includes","pop","replace","toUpperCase","STATUS","ok","dot","text","down","unchecked","ProviderHealthPill","provider","health_check_url","last_health_status","s","inner","tooltipBody","tooltipFor","asChild","side","when","last_health_checked_at","last_health_error","Date","toLocaleString","ModelsTable","models","onEdit","onDelete","router","showActions","columnCount","colSpan","push","title","navigator","clipboard","writeText","Math","round"],"mappings":"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","ignoreList":[0,2,4,6,8,9,10,13,15]}