@rsalmn/extremerouter 0.8.1 → 0.8.2

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 (942) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +2 -1
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/routes-manifest.json +6 -0
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page.js +2 -2
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page.js.nft.json +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +4 -2
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page.js +2 -2
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/page.js +2 -2
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/page.js.nft.json +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js +2 -2
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +4 -4
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/page.js +2 -2
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +2 -2
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  86. package/app/.next-cli-build/server/app/_global-error/page.js +3 -3
  87. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  96. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  97. package/app/.next-cli-build/server/app/_not-found/page.js +2 -2
  98. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  100. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  101. package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
  102. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
  103. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  104. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +6 -6
  105. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  106. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  107. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  108. package/app/.next-cli-build/server/app/api/alerts/test/route.js +2 -2
  109. package/app/.next-cli-build/server/app/api/alerts/test/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  115. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  117. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  119. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js +1 -1
  121. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  123. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/breaker/route.js +1 -0
  125. package/app/.next-cli-build/server/app/api/breaker/route.js.nft.json +1 -0
  126. package/app/.next-cli-build/server/app/api/breaker/route_client-reference-manifest.js +1 -0
  127. package/app/.next-cli-build/server/app/api/cache/route.js +1 -1
  128. package/app/.next-cli-build/server/app/api/cache/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +2 -2
  130. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  132. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  136. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  142. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  144. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  146. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  148. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  150. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  152. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  154. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  156. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  158. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  162. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  164. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  166. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/combos/validate-roles/route.js +1 -1
  168. package/app/.next-cli-build/server/app/api/combos/validate-roles/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/dashboard/stream/route.js +2 -2
  170. package/app/.next-cli-build/server/app/api/dashboard/stream/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  172. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
  174. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/headroom/stop/route.js +2 -2
  176. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/health/providers/route.js +1 -1
  178. package/app/.next-cli-build/server/app/api/health/providers/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/health/route.js +1 -1
  180. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/health/stream/route.js +2 -2
  182. package/app/.next-cli-build/server/app/api/health/stream/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/init/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  188. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
  192. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  194. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  196. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  198. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  200. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  202. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  204. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  206. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  208. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  210. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  212. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  216. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/oauth/1min/import/route.js +1 -1
  218. package/app/.next-cli-build/server/app/api/oauth/1min/import/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  224. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  226. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  230. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  232. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
  234. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  236. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  238. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -1
  240. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  242. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  244. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/oauth/qwen/import/route.js +1 -1
  246. package/app/.next-cli-build/server/app/api/oauth/qwen/import/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/oauth/wp-studio/import/route.js +1 -1
  248. package/app/.next-cli-build/server/app/api/oauth/wp-studio/import/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js +2 -2
  250. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js +1 -1
  252. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  254. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  258. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  260. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/providers/[id]/agnes-profile/route.js +1 -1
  262. package/app/.next-cli-build/server/app/api/providers/[id]/agnes-profile/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/providers/[id]/freebuff-profile/route.js +1 -1
  264. package/app/.next-cli-build/server/app/api/providers/[id]/freebuff-profile/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/providers/[id]/health-timeline/route.js +1 -1
  266. package/app/.next-cli-build/server/app/api/providers/[id]/health-timeline/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/providers/[id]/inxora-profile/route.js +1 -1
  268. package/app/.next-cli-build/server/app/api/providers/[id]/inxora-profile/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  270. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-api-profile/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-api-profile/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-profile/route.js +1 -1
  274. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-profile/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/providers/[id]/qwencloud-profile/route.js +1 -1
  276. package/app/.next-cli-build/server/app/api/providers/[id]/qwencloud-profile/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  280. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  282. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/providers/[id]/v0-profile/route.js +1 -1
  284. package/app/.next-cli-build/server/app/api/providers/[id]/v0-profile/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/providers/[id]/vault-pool/route.js +1 -1
  286. package/app/.next-cli-build/server/app/api/providers/[id]/vault-pool/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/providers/[id]/zenmux-plans/route.js +1 -1
  288. package/app/.next-cli-build/server/app/api/providers/[id]/zenmux-plans/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  290. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  292. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  294. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  295. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  296. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  298. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  300. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  304. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  306. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  308. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  309. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  310. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  311. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  312. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  313. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js +2 -2
  314. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +2 -2
  316. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  318. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  319. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  320. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  321. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  322. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  324. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/swarm/active/route.js +1 -1
  328. package/app/.next-cli-build/server/app/api/swarm/active/route.js.nft.json +1 -1
  329. package/app/.next-cli-build/server/app/api/swarm/stream/route.js +2 -2
  330. package/app/.next-cli-build/server/app/api/swarm/stream/route.js.nft.json +1 -1
  331. package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  332. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  333. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  334. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  335. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  336. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  337. package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  338. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  339. package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  340. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  341. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  342. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  343. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  344. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  345. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  346. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  347. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  348. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  349. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  350. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  351. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  352. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  353. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  354. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  355. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  356. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  357. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  358. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  359. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  360. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  361. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  362. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  363. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  364. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  365. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  366. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  367. package/app/.next-cli-build/server/app/api/usage/leaderboard/route.js +1 -1
  368. package/app/.next-cli-build/server/app/api/usage/leaderboard/route.js.nft.json +1 -1
  369. package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
  370. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  371. package/app/.next-cli-build/server/app/api/usage/meta/route.js +1 -1
  372. package/app/.next-cli-build/server/app/api/usage/meta/route.js.nft.json +1 -1
  373. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  374. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  375. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  376. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  377. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  378. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  379. package/app/.next-cli-build/server/app/api/usage/retry-stats/route.js +1 -1
  380. package/app/.next-cli-build/server/app/api/usage/retry-stats/route.js.nft.json +1 -1
  381. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  382. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  383. package/app/.next-cli-build/server/app/api/usage/stream/route.js +4 -4
  384. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  385. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  386. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  387. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  388. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  389. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  390. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  391. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  392. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  393. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  394. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  395. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  396. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  397. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  398. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  399. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  400. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  401. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  402. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  403. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  404. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  405. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  406. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  407. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  408. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  409. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  410. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  411. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  412. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  413. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  414. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  415. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  416. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  417. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  418. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  419. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  420. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  421. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  422. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  423. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  424. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  425. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  426. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  427. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  428. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  429. package/app/.next-cli-build/server/app/callback/page.js +2 -2
  430. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  431. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  432. package/app/.next-cli-build/server/app/callback.html +1 -1
  433. package/app/.next-cli-build/server/app/callback.rsc +6 -6
  434. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
  435. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  436. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +6 -6
  437. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  438. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  439. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  441. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  442. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  443. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  444. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
  445. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  446. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +6 -6
  448. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  449. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  450. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  451. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  452. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  453. package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
  454. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  455. package/app/.next-cli-build/server/app/index.html +1 -1
  456. package/app/.next-cli-build/server/app/index.rsc +6 -6
  457. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  458. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
  459. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  460. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +6 -6
  461. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  462. package/app/.next-cli-build/server/app/landing/page.js +2 -2
  463. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  464. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  465. package/app/.next-cli-build/server/app/landing.html +1 -1
  466. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  467. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  468. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +6 -6
  470. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  471. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  472. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  473. package/app/.next-cli-build/server/app/login/page.js +2 -2
  474. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  475. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  476. package/app/.next-cli-build/server/app/login.html +1 -1
  477. package/app/.next-cli-build/server/app/login.rsc +7 -7
  478. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
  479. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  480. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +6 -6
  481. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  482. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  483. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  484. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
  485. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  486. package/app/.next-cli-build/server/app/page.js +2 -2
  487. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  488. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  489. package/app/.next-cli-build/server/app-paths-manifest.json +2 -1
  490. package/app/.next-cli-build/server/chunks/1051.js +1 -1
  491. package/app/.next-cli-build/server/chunks/{2342.js → 1194.js} +6 -6
  492. package/app/.next-cli-build/server/chunks/1350.js +1 -1
  493. package/app/.next-cli-build/server/chunks/1719.js +1 -1
  494. package/app/.next-cli-build/server/chunks/212.js +1 -1
  495. package/app/.next-cli-build/server/chunks/2231.js +1 -1
  496. package/app/.next-cli-build/server/chunks/2701.js +1 -1
  497. package/app/.next-cli-build/server/chunks/412.js +1 -1
  498. package/app/.next-cli-build/server/chunks/422.js +9 -0
  499. package/app/.next-cli-build/server/chunks/4502.js +1 -1
  500. package/app/.next-cli-build/server/chunks/5330.js +1 -1
  501. package/app/.next-cli-build/server/chunks/541.js +1 -0
  502. package/app/.next-cli-build/server/chunks/5612.js +1 -1
  503. package/app/.next-cli-build/server/chunks/5615.js +1 -1
  504. package/app/.next-cli-build/server/chunks/5628.js +1 -1
  505. package/app/.next-cli-build/server/chunks/5699.js +1 -1
  506. package/app/.next-cli-build/server/chunks/5961.js +1 -1
  507. package/app/.next-cli-build/server/chunks/6070.js +1 -1
  508. package/app/.next-cli-build/server/chunks/615.js +1 -1
  509. package/app/.next-cli-build/server/chunks/6316.js +2 -2
  510. package/app/.next-cli-build/server/chunks/6686.js +1 -0
  511. package/app/.next-cli-build/server/chunks/7187.js +1 -1
  512. package/app/.next-cli-build/server/chunks/7872.js +1 -1
  513. package/app/.next-cli-build/server/chunks/8238.js +1 -1
  514. package/app/.next-cli-build/server/chunks/8271.js +1 -1
  515. package/app/.next-cli-build/server/chunks/874.js +9 -0
  516. package/app/.next-cli-build/server/chunks/8895.js +1 -1
  517. package/app/.next-cli-build/server/chunks/9422.js +2 -2
  518. package/app/.next-cli-build/server/chunks/9630.js +1 -1
  519. package/app/.next-cli-build/server/chunks/9703.js +5 -5
  520. package/app/.next-cli-build/server/chunks/9903.js +1 -1
  521. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  522. package/app/.next-cli-build/server/middleware.js +4 -4
  523. package/app/.next-cli-build/server/pages/404.html +1 -1
  524. package/app/.next-cli-build/server/pages/500.html +1 -1
  525. package/app/.next-cli-build/static/S-pbWChrUiCkwFyfx4Su3/_buildManifest.js +1 -0
  526. package/app/.next-cli-build/static/chunks/{1321-675f131c5a80b166.js → 1321-aa0d45362a7ebc08.js} +1 -1
  527. package/app/.next-cli-build/static/chunks/5497-b321fb89cc6d6e14.js +7 -0
  528. package/app/.next-cli-build/static/chunks/8105-204edc780a329497.js +1 -0
  529. package/app/.next-cli-build/static/chunks/{682-03720d6613bcbd0f.js → 9622-fcd7c93a94eaa38f.js} +6 -6
  530. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-cd77e53dbcd46b6c.js +1 -0
  531. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-8b043b8296199edb.js +1 -0
  532. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-61b6cf127f421af9.js → page-dbf52954681b093c.js} +3 -1
  533. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/health/page-ec1dc4e44702257d.js +1 -0
  534. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-a67cd1c5f77da355.js +1 -0
  535. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/playground/page-dc8e49b1fe778d9c.js +1 -0
  536. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-2e82495d63f499e9.js +10 -0
  537. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-9a44fa1600f3ff42.js +1 -0
  538. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/{page-2592739cbb862828.js → page-2f3b8761d7b32ec0.js} +1 -1
  539. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/{page-5433f8ac60dd59f0.js → page-bd421513fd2dc28a.js} +1 -1
  540. package/app/.next-cli-build/static/chunks/app/_global-error/page-ab464cb25617d9dd.js +1 -0
  541. package/app/.next-cli-build/static/chunks/app/api/alerts/test/route-ab464cb25617d9dd.js +1 -0
  542. package/app/.next-cli-build/static/chunks/app/api/auth/login/route-ab464cb25617d9dd.js +1 -0
  543. package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-ab464cb25617d9dd.js +1 -0
  544. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-ab464cb25617d9dd.js +1 -0
  545. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-ab464cb25617d9dd.js +1 -0
  546. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-ab464cb25617d9dd.js +1 -0
  547. package/app/.next-cli-build/static/chunks/app/api/auth/reset-password/route-ab464cb25617d9dd.js +1 -0
  548. package/app/.next-cli-build/static/chunks/app/api/auth/status/route-ab464cb25617d9dd.js +1 -0
  549. package/app/.next-cli-build/static/chunks/app/api/breaker/route-ab464cb25617d9dd.js +1 -0
  550. package/app/.next-cli-build/static/chunks/app/api/cache/route-ab464cb25617d9dd.js +1 -0
  551. package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-ab464cb25617d9dd.js +1 -0
  552. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-ab464cb25617d9dd.js +1 -0
  553. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-ab464cb25617d9dd.js +1 -0
  554. package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-ab464cb25617d9dd.js +1 -0
  555. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-ab464cb25617d9dd.js +1 -0
  556. package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-ab464cb25617d9dd.js +1 -0
  557. package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-ab464cb25617d9dd.js +1 -0
  558. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-ab464cb25617d9dd.js +1 -0
  559. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-ab464cb25617d9dd.js +1 -0
  560. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-ab464cb25617d9dd.js +1 -0
  561. package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-ab464cb25617d9dd.js +1 -0
  562. package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-ab464cb25617d9dd.js +1 -0
  563. package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-ab464cb25617d9dd.js +1 -0
  564. package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-ab464cb25617d9dd.js +1 -0
  565. package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-ab464cb25617d9dd.js +1 -0
  566. package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-ab464cb25617d9dd.js +1 -0
  567. package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-ab464cb25617d9dd.js +1 -0
  568. package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-ab464cb25617d9dd.js +1 -0
  569. package/app/.next-cli-build/static/chunks/app/api/combos/route-ab464cb25617d9dd.js +1 -0
  570. package/app/.next-cli-build/static/chunks/app/api/combos/validate-roles/route-ab464cb25617d9dd.js +1 -0
  571. package/app/.next-cli-build/static/chunks/app/api/dashboard/stream/route-ab464cb25617d9dd.js +1 -0
  572. package/app/.next-cli-build/static/chunks/app/api/headroom/start/route-ab464cb25617d9dd.js +1 -0
  573. package/app/.next-cli-build/static/chunks/app/api/headroom/status/route-ab464cb25617d9dd.js +1 -0
  574. package/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-ab464cb25617d9dd.js +1 -0
  575. package/app/.next-cli-build/static/chunks/app/api/health/providers/route-ab464cb25617d9dd.js +1 -0
  576. package/app/.next-cli-build/static/chunks/app/api/health/route-ab464cb25617d9dd.js +1 -0
  577. package/app/.next-cli-build/static/chunks/app/api/health/stream/route-ab464cb25617d9dd.js +1 -0
  578. package/app/.next-cli-build/static/chunks/app/api/init/route-ab464cb25617d9dd.js +1 -0
  579. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-ab464cb25617d9dd.js +1 -0
  580. package/app/.next-cli-build/static/chunks/app/api/keys/route-ab464cb25617d9dd.js +1 -0
  581. package/app/.next-cli-build/static/chunks/app/api/locale/route-ab464cb25617d9dd.js +1 -0
  582. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-ab464cb25617d9dd.js +1 -0
  583. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-ab464cb25617d9dd.js +1 -0
  584. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-ab464cb25617d9dd.js +1 -0
  585. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-ab464cb25617d9dd.js +1 -0
  586. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-ab464cb25617d9dd.js +1 -0
  587. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-ab464cb25617d9dd.js +1 -0
  588. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-ab464cb25617d9dd.js +1 -0
  589. package/app/.next-cli-build/static/chunks/app/api/models/alias/route-ab464cb25617d9dd.js +1 -0
  590. package/app/.next-cli-build/static/chunks/app/api/models/availability/route-ab464cb25617d9dd.js +1 -0
  591. package/app/.next-cli-build/static/chunks/app/api/models/custom/route-ab464cb25617d9dd.js +1 -0
  592. package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-ab464cb25617d9dd.js +1 -0
  593. package/app/.next-cli-build/static/chunks/app/api/models/route-ab464cb25617d9dd.js +1 -0
  594. package/app/.next-cli-build/static/chunks/app/api/models/test/route-ab464cb25617d9dd.js +1 -0
  595. package/app/.next-cli-build/static/chunks/app/api/oauth/1min/import/route-ab464cb25617d9dd.js +1 -0
  596. package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-ab464cb25617d9dd.js +1 -0
  597. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/bulk-import/route-ab464cb25617d9dd.js +1 -0
  598. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-ab464cb25617d9dd.js +1 -0
  599. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-ab464cb25617d9dd.js +1 -0
  600. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-ab464cb25617d9dd.js +1 -0
  601. package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-ab464cb25617d9dd.js +1 -0
  602. package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-ab464cb25617d9dd.js +1 -0
  603. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/api-key/route-ab464cb25617d9dd.js +1 -0
  604. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-ab464cb25617d9dd.js +1 -0
  605. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-ab464cb25617d9dd.js +1 -0
  606. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-ab464cb25617d9dd.js +1 -0
  607. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-ab464cb25617d9dd.js +1 -0
  608. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-ab464cb25617d9dd.js +1 -0
  609. package/app/.next-cli-build/static/chunks/app/api/oauth/qwen/import/route-ab464cb25617d9dd.js +1 -0
  610. package/app/.next-cli-build/static/chunks/app/api/oauth/wp-studio/import/route-ab464cb25617d9dd.js +1 -0
  611. package/app/.next-cli-build/static/chunks/app/api/oauth/zed/auto-import/route-ab464cb25617d9dd.js +1 -0
  612. package/app/.next-cli-build/static/chunks/app/api/oauth/zed/import/route-ab464cb25617d9dd.js +1 -0
  613. package/app/.next-cli-build/static/chunks/app/api/pricing/route-ab464cb25617d9dd.js +1 -0
  614. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-ab464cb25617d9dd.js +1 -0
  615. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-ab464cb25617d9dd.js +1 -0
  616. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-ab464cb25617d9dd.js +1 -0
  617. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/agnes-profile/route-ab464cb25617d9dd.js +1 -0
  618. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/freebuff-profile/route-ab464cb25617d9dd.js +1 -0
  619. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/health-timeline/route-ab464cb25617d9dd.js +1 -0
  620. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/inxora-profile/route-ab464cb25617d9dd.js +1 -0
  621. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-ab464cb25617d9dd.js +1 -0
  622. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/onemin-api-profile/route-ab464cb25617d9dd.js +1 -0
  623. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/onemin-profile/route-ab464cb25617d9dd.js +1 -0
  624. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/qwencloud-profile/route-ab464cb25617d9dd.js +1 -0
  625. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-ab464cb25617d9dd.js +1 -0
  626. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-ab464cb25617d9dd.js +1 -0
  627. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-ab464cb25617d9dd.js +1 -0
  628. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/v0-profile/route-ab464cb25617d9dd.js +1 -0
  629. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/vault-pool/route-ab464cb25617d9dd.js +1 -0
  630. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/zenmux-plans/route-ab464cb25617d9dd.js +1 -0
  631. package/app/.next-cli-build/static/chunks/app/api/providers/client/route-ab464cb25617d9dd.js +1 -0
  632. package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-ab464cb25617d9dd.js +1 -0
  633. package/app/.next-cli-build/static/chunks/app/api/providers/route-ab464cb25617d9dd.js +1 -0
  634. package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-ab464cb25617d9dd.js +1 -0
  635. package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-ab464cb25617d9dd.js +1 -0
  636. package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-ab464cb25617d9dd.js +1 -0
  637. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-ab464cb25617d9dd.js +1 -0
  638. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-ab464cb25617d9dd.js +1 -0
  639. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-ab464cb25617d9dd.js +1 -0
  640. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-ab464cb25617d9dd.js +1 -0
  641. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-ab464cb25617d9dd.js +1 -0
  642. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-ab464cb25617d9dd.js +1 -0
  643. package/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-ab464cb25617d9dd.js +1 -0
  644. package/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-ab464cb25617d9dd.js +1 -0
  645. package/app/.next-cli-build/static/chunks/app/api/settings/database/route-ab464cb25617d9dd.js +1 -0
  646. package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-ab464cb25617d9dd.js +1 -0
  647. package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-ab464cb25617d9dd.js +1 -0
  648. package/app/.next-cli-build/static/chunks/app/api/settings/route-ab464cb25617d9dd.js +1 -0
  649. package/app/.next-cli-build/static/chunks/app/api/shutdown/route-ab464cb25617d9dd.js +1 -0
  650. package/app/.next-cli-build/static/chunks/app/api/swarm/active/route-ab464cb25617d9dd.js +1 -0
  651. package/app/.next-cli-build/static/chunks/app/api/swarm/stream/route-ab464cb25617d9dd.js +1 -0
  652. package/app/.next-cli-build/static/chunks/app/api/tags/route-ab464cb25617d9dd.js +1 -0
  653. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-ab464cb25617d9dd.js +1 -0
  654. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-ab464cb25617d9dd.js +1 -0
  655. package/app/.next-cli-build/static/chunks/app/api/translator/load/route-ab464cb25617d9dd.js +1 -0
  656. package/app/.next-cli-build/static/chunks/app/api/translator/save/route-ab464cb25617d9dd.js +1 -0
  657. package/app/.next-cli-build/static/chunks/app/api/translator/send/route-ab464cb25617d9dd.js +1 -0
  658. package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-ab464cb25617d9dd.js +1 -0
  659. package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-ab464cb25617d9dd.js +1 -0
  660. package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-ab464cb25617d9dd.js +1 -0
  661. package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-ab464cb25617d9dd.js +1 -0
  662. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-ab464cb25617d9dd.js +1 -0
  663. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-ab464cb25617d9dd.js +1 -0
  664. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-ab464cb25617d9dd.js +1 -0
  665. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-ab464cb25617d9dd.js +1 -0
  666. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-ab464cb25617d9dd.js +1 -0
  667. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-ab464cb25617d9dd.js +1 -0
  668. package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-ab464cb25617d9dd.js +1 -0
  669. package/app/.next-cli-build/static/chunks/app/api/usage/history/route-ab464cb25617d9dd.js +1 -0
  670. package/app/.next-cli-build/static/chunks/app/api/usage/leaderboard/route-ab464cb25617d9dd.js +1 -0
  671. package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-ab464cb25617d9dd.js +1 -0
  672. package/app/.next-cli-build/static/chunks/app/api/usage/meta/route-ab464cb25617d9dd.js +1 -0
  673. package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-ab464cb25617d9dd.js +1 -0
  674. package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-ab464cb25617d9dd.js +1 -0
  675. package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-ab464cb25617d9dd.js +1 -0
  676. package/app/.next-cli-build/static/chunks/app/api/usage/retry-stats/route-ab464cb25617d9dd.js +1 -0
  677. package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-ab464cb25617d9dd.js +1 -0
  678. package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-ab464cb25617d9dd.js +1 -0
  679. package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-ab464cb25617d9dd.js +1 -0
  680. package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-ab464cb25617d9dd.js +1 -0
  681. package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-ab464cb25617d9dd.js +1 -0
  682. package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-ab464cb25617d9dd.js +1 -0
  683. package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-ab464cb25617d9dd.js +1 -0
  684. package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-ab464cb25617d9dd.js +1 -0
  685. package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-ab464cb25617d9dd.js +1 -0
  686. package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-ab464cb25617d9dd.js +1 -0
  687. package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-ab464cb25617d9dd.js +1 -0
  688. package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-ab464cb25617d9dd.js +1 -0
  689. package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-ab464cb25617d9dd.js +1 -0
  690. package/app/.next-cli-build/static/chunks/app/api/v1/models/route-ab464cb25617d9dd.js +1 -0
  691. package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-ab464cb25617d9dd.js +1 -0
  692. package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-ab464cb25617d9dd.js +1 -0
  693. package/app/.next-cli-build/static/chunks/app/api/v1/route-ab464cb25617d9dd.js +1 -0
  694. package/app/.next-cli-build/static/chunks/app/api/v1/search/route-ab464cb25617d9dd.js +1 -0
  695. package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-ab464cb25617d9dd.js +1 -0
  696. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-ab464cb25617d9dd.js +1 -0
  697. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-ab464cb25617d9dd.js +1 -0
  698. package/app/.next-cli-build/static/chunks/app/api/version/route-ab464cb25617d9dd.js +1 -0
  699. package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-ab464cb25617d9dd.js +1 -0
  700. package/app/.next-cli-build/static/chunks/app/api/version/update/route-ab464cb25617d9dd.js +1 -0
  701. package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-ab464cb25617d9dd.js +1 -0
  702. package/app/.next-cli-build/static/chunks/app/page-ab464cb25617d9dd.js +1 -0
  703. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-ab464cb25617d9dd.js +1 -0
  704. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-ab464cb25617d9dd.js +1 -0
  705. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-ab464cb25617d9dd.js +1 -0
  706. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-ab464cb25617d9dd.js +1 -0
  707. package/app/.next-cli-build/static/css/68d66160ca549ddc.css +1 -0
  708. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/upgrade-0.8.0-to-0.8.1-0.8.1-20260802-152517/data.sqlite +0 -0
  709. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/data.sqlite-shm +0 -0
  710. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/data.sqlite-wal +0 -0
  711. package/app/node_modules/@emnapi/runtime/dist/emnapi.cjs.js +1381 -0
  712. package/app/node_modules/@emnapi/runtime/dist/emnapi.cjs.min.js +1 -0
  713. package/app/node_modules/@emnapi/runtime/index.js +5 -0
  714. package/app/node_modules/@emnapi/runtime/package.json +48 -0
  715. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/container.js +106 -51
  716. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/css-syntax-error.js +47 -14
  717. package/app/node_modules/postcss/lib/fromJSON.js +107 -0
  718. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/input.js +67 -33
  719. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/lazy-result.js +127 -51
  720. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/list.js +1 -0
  721. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/map-generator.js +26 -9
  722. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/no-work-result.js +57 -55
  723. package/app/node_modules/postcss/lib/node.js +494 -0
  724. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/parser.js +46 -38
  725. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/previous-map.js +34 -12
  726. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/processor.js +7 -7
  727. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/result.js +5 -5
  728. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/root.js +16 -1
  729. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/stringifier.js +140 -32
  730. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/tokenize.js +6 -2
  731. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/warning.js +10 -0
  732. package/app/node_modules/{next/node_modules/postcss → postcss}/package.json +48 -48
  733. package/app/package.json +6 -1
  734. package/app/public/providers/1min-api.svg +15 -0
  735. package/app/public/providers/1min.svg +15 -0
  736. package/app/public/providers/cline.svg +17 -0
  737. package/app/public/providers/clinepass.svg +20 -0
  738. package/app/public/providers/codestral.svg +16 -0
  739. package/app/public/providers/databricks.svg +21 -0
  740. package/app/public/providers/deepinfra.svg +18 -0
  741. package/app/public/providers/grok-web.svg +14 -0
  742. package/app/public/providers/marathon.svg +18 -0
  743. package/app/public/providers/qwen2api.svg +16 -0
  744. package/app/public/providers/unimodel.svg +26 -0
  745. package/app/public/providers/venice.svg +15 -0
  746. package/app/public/providers/vercel-ai-gateway.svg +13 -0
  747. package/package.json +1 -1
  748. package/app/.next-cli-build/server/chunks/23.js +0 -9
  749. package/app/.next-cli-build/server/chunks/4362.js +0 -9
  750. package/app/.next-cli-build/server/chunks/5050.js +0 -1
  751. package/app/.next-cli-build/static/ZpBU8xc4kSeLftltRrIa6/_buildManifest.js +0 -1
  752. package/app/.next-cli-build/static/chunks/5497-2e59e6171ac782ae.js +0 -7
  753. package/app/.next-cli-build/static/chunks/8105-42ffe16677c2f8f8.js +0 -1
  754. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-d722ccf5e0fec340.js +0 -1
  755. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-afc62a0533448ca0.js +0 -1
  756. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/health/page-d077213deca8c217.js +0 -1
  757. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-99540bfed3193080.js +0 -1
  758. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/playground/page-0a50de81e7b688fc.js +0 -1
  759. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-eca89af2e4f561e3.js +0 -10
  760. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-bc16a0312f0a7915.js +0 -1
  761. package/app/.next-cli-build/static/chunks/app/_global-error/page-dfe796be45352c7b.js +0 -1
  762. package/app/.next-cli-build/static/chunks/app/api/alerts/test/route-dfe796be45352c7b.js +0 -1
  763. package/app/.next-cli-build/static/chunks/app/api/auth/login/route-dfe796be45352c7b.js +0 -1
  764. package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-dfe796be45352c7b.js +0 -1
  765. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-dfe796be45352c7b.js +0 -1
  766. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-dfe796be45352c7b.js +0 -1
  767. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-dfe796be45352c7b.js +0 -1
  768. package/app/.next-cli-build/static/chunks/app/api/auth/reset-password/route-dfe796be45352c7b.js +0 -1
  769. package/app/.next-cli-build/static/chunks/app/api/auth/status/route-dfe796be45352c7b.js +0 -1
  770. package/app/.next-cli-build/static/chunks/app/api/cache/route-dfe796be45352c7b.js +0 -1
  771. package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-dfe796be45352c7b.js +0 -1
  772. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-dfe796be45352c7b.js +0 -1
  773. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-dfe796be45352c7b.js +0 -1
  774. package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-dfe796be45352c7b.js +0 -1
  775. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-dfe796be45352c7b.js +0 -1
  776. package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-dfe796be45352c7b.js +0 -1
  777. package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-dfe796be45352c7b.js +0 -1
  778. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-dfe796be45352c7b.js +0 -1
  779. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-dfe796be45352c7b.js +0 -1
  780. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-dfe796be45352c7b.js +0 -1
  781. package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-dfe796be45352c7b.js +0 -1
  782. package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-dfe796be45352c7b.js +0 -1
  783. package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-dfe796be45352c7b.js +0 -1
  784. package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-dfe796be45352c7b.js +0 -1
  785. package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-dfe796be45352c7b.js +0 -1
  786. package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-dfe796be45352c7b.js +0 -1
  787. package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-dfe796be45352c7b.js +0 -1
  788. package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-dfe796be45352c7b.js +0 -1
  789. package/app/.next-cli-build/static/chunks/app/api/combos/route-dfe796be45352c7b.js +0 -1
  790. package/app/.next-cli-build/static/chunks/app/api/combos/validate-roles/route-dfe796be45352c7b.js +0 -1
  791. package/app/.next-cli-build/static/chunks/app/api/dashboard/stream/route-dfe796be45352c7b.js +0 -1
  792. package/app/.next-cli-build/static/chunks/app/api/headroom/start/route-dfe796be45352c7b.js +0 -1
  793. package/app/.next-cli-build/static/chunks/app/api/headroom/status/route-dfe796be45352c7b.js +0 -1
  794. package/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-dfe796be45352c7b.js +0 -1
  795. package/app/.next-cli-build/static/chunks/app/api/health/providers/route-dfe796be45352c7b.js +0 -1
  796. package/app/.next-cli-build/static/chunks/app/api/health/route-dfe796be45352c7b.js +0 -1
  797. package/app/.next-cli-build/static/chunks/app/api/health/stream/route-dfe796be45352c7b.js +0 -1
  798. package/app/.next-cli-build/static/chunks/app/api/init/route-dfe796be45352c7b.js +0 -1
  799. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-dfe796be45352c7b.js +0 -1
  800. package/app/.next-cli-build/static/chunks/app/api/keys/route-dfe796be45352c7b.js +0 -1
  801. package/app/.next-cli-build/static/chunks/app/api/locale/route-dfe796be45352c7b.js +0 -1
  802. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-dfe796be45352c7b.js +0 -1
  803. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-dfe796be45352c7b.js +0 -1
  804. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-dfe796be45352c7b.js +0 -1
  805. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-dfe796be45352c7b.js +0 -1
  806. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-dfe796be45352c7b.js +0 -1
  807. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-dfe796be45352c7b.js +0 -1
  808. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-dfe796be45352c7b.js +0 -1
  809. package/app/.next-cli-build/static/chunks/app/api/models/alias/route-dfe796be45352c7b.js +0 -1
  810. package/app/.next-cli-build/static/chunks/app/api/models/availability/route-dfe796be45352c7b.js +0 -1
  811. package/app/.next-cli-build/static/chunks/app/api/models/custom/route-dfe796be45352c7b.js +0 -1
  812. package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-dfe796be45352c7b.js +0 -1
  813. package/app/.next-cli-build/static/chunks/app/api/models/route-dfe796be45352c7b.js +0 -1
  814. package/app/.next-cli-build/static/chunks/app/api/models/test/route-dfe796be45352c7b.js +0 -1
  815. package/app/.next-cli-build/static/chunks/app/api/oauth/1min/import/route-dfe796be45352c7b.js +0 -1
  816. package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-dfe796be45352c7b.js +0 -1
  817. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/bulk-import/route-dfe796be45352c7b.js +0 -1
  818. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-dfe796be45352c7b.js +0 -1
  819. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-dfe796be45352c7b.js +0 -1
  820. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-dfe796be45352c7b.js +0 -1
  821. package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-dfe796be45352c7b.js +0 -1
  822. package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-dfe796be45352c7b.js +0 -1
  823. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/api-key/route-dfe796be45352c7b.js +0 -1
  824. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-dfe796be45352c7b.js +0 -1
  825. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-dfe796be45352c7b.js +0 -1
  826. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-dfe796be45352c7b.js +0 -1
  827. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-dfe796be45352c7b.js +0 -1
  828. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-dfe796be45352c7b.js +0 -1
  829. package/app/.next-cli-build/static/chunks/app/api/oauth/qwen/import/route-dfe796be45352c7b.js +0 -1
  830. package/app/.next-cli-build/static/chunks/app/api/oauth/wp-studio/import/route-dfe796be45352c7b.js +0 -1
  831. package/app/.next-cli-build/static/chunks/app/api/oauth/zed/auto-import/route-dfe796be45352c7b.js +0 -1
  832. package/app/.next-cli-build/static/chunks/app/api/oauth/zed/import/route-dfe796be45352c7b.js +0 -1
  833. package/app/.next-cli-build/static/chunks/app/api/pricing/route-dfe796be45352c7b.js +0 -1
  834. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-dfe796be45352c7b.js +0 -1
  835. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-dfe796be45352c7b.js +0 -1
  836. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-dfe796be45352c7b.js +0 -1
  837. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/agnes-profile/route-dfe796be45352c7b.js +0 -1
  838. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/freebuff-profile/route-dfe796be45352c7b.js +0 -1
  839. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/health-timeline/route-dfe796be45352c7b.js +0 -1
  840. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/inxora-profile/route-dfe796be45352c7b.js +0 -1
  841. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-dfe796be45352c7b.js +0 -1
  842. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/onemin-api-profile/route-dfe796be45352c7b.js +0 -1
  843. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/onemin-profile/route-dfe796be45352c7b.js +0 -1
  844. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/qwencloud-profile/route-dfe796be45352c7b.js +0 -1
  845. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-dfe796be45352c7b.js +0 -1
  846. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-dfe796be45352c7b.js +0 -1
  847. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-dfe796be45352c7b.js +0 -1
  848. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/v0-profile/route-dfe796be45352c7b.js +0 -1
  849. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/vault-pool/route-dfe796be45352c7b.js +0 -1
  850. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/zenmux-plans/route-dfe796be45352c7b.js +0 -1
  851. package/app/.next-cli-build/static/chunks/app/api/providers/client/route-dfe796be45352c7b.js +0 -1
  852. package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-dfe796be45352c7b.js +0 -1
  853. package/app/.next-cli-build/static/chunks/app/api/providers/route-dfe796be45352c7b.js +0 -1
  854. package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-dfe796be45352c7b.js +0 -1
  855. package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-dfe796be45352c7b.js +0 -1
  856. package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-dfe796be45352c7b.js +0 -1
  857. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-dfe796be45352c7b.js +0 -1
  858. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-dfe796be45352c7b.js +0 -1
  859. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-dfe796be45352c7b.js +0 -1
  860. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-dfe796be45352c7b.js +0 -1
  861. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-dfe796be45352c7b.js +0 -1
  862. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-dfe796be45352c7b.js +0 -1
  863. package/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-dfe796be45352c7b.js +0 -1
  864. package/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-dfe796be45352c7b.js +0 -1
  865. package/app/.next-cli-build/static/chunks/app/api/settings/database/route-dfe796be45352c7b.js +0 -1
  866. package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-dfe796be45352c7b.js +0 -1
  867. package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-dfe796be45352c7b.js +0 -1
  868. package/app/.next-cli-build/static/chunks/app/api/settings/route-dfe796be45352c7b.js +0 -1
  869. package/app/.next-cli-build/static/chunks/app/api/shutdown/route-dfe796be45352c7b.js +0 -1
  870. package/app/.next-cli-build/static/chunks/app/api/swarm/active/route-dfe796be45352c7b.js +0 -1
  871. package/app/.next-cli-build/static/chunks/app/api/swarm/stream/route-dfe796be45352c7b.js +0 -1
  872. package/app/.next-cli-build/static/chunks/app/api/tags/route-dfe796be45352c7b.js +0 -1
  873. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-dfe796be45352c7b.js +0 -1
  874. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-dfe796be45352c7b.js +0 -1
  875. package/app/.next-cli-build/static/chunks/app/api/translator/load/route-dfe796be45352c7b.js +0 -1
  876. package/app/.next-cli-build/static/chunks/app/api/translator/save/route-dfe796be45352c7b.js +0 -1
  877. package/app/.next-cli-build/static/chunks/app/api/translator/send/route-dfe796be45352c7b.js +0 -1
  878. package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-dfe796be45352c7b.js +0 -1
  879. package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-dfe796be45352c7b.js +0 -1
  880. package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-dfe796be45352c7b.js +0 -1
  881. package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-dfe796be45352c7b.js +0 -1
  882. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-dfe796be45352c7b.js +0 -1
  883. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-dfe796be45352c7b.js +0 -1
  884. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-dfe796be45352c7b.js +0 -1
  885. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-dfe796be45352c7b.js +0 -1
  886. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-dfe796be45352c7b.js +0 -1
  887. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-dfe796be45352c7b.js +0 -1
  888. package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-dfe796be45352c7b.js +0 -1
  889. package/app/.next-cli-build/static/chunks/app/api/usage/history/route-dfe796be45352c7b.js +0 -1
  890. package/app/.next-cli-build/static/chunks/app/api/usage/leaderboard/route-dfe796be45352c7b.js +0 -1
  891. package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-dfe796be45352c7b.js +0 -1
  892. package/app/.next-cli-build/static/chunks/app/api/usage/meta/route-dfe796be45352c7b.js +0 -1
  893. package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-dfe796be45352c7b.js +0 -1
  894. package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-dfe796be45352c7b.js +0 -1
  895. package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-dfe796be45352c7b.js +0 -1
  896. package/app/.next-cli-build/static/chunks/app/api/usage/retry-stats/route-dfe796be45352c7b.js +0 -1
  897. package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-dfe796be45352c7b.js +0 -1
  898. package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-dfe796be45352c7b.js +0 -1
  899. package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-dfe796be45352c7b.js +0 -1
  900. package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-dfe796be45352c7b.js +0 -1
  901. package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-dfe796be45352c7b.js +0 -1
  902. package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-dfe796be45352c7b.js +0 -1
  903. package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-dfe796be45352c7b.js +0 -1
  904. package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-dfe796be45352c7b.js +0 -1
  905. package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-dfe796be45352c7b.js +0 -1
  906. package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-dfe796be45352c7b.js +0 -1
  907. package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-dfe796be45352c7b.js +0 -1
  908. package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-dfe796be45352c7b.js +0 -1
  909. package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-dfe796be45352c7b.js +0 -1
  910. package/app/.next-cli-build/static/chunks/app/api/v1/models/route-dfe796be45352c7b.js +0 -1
  911. package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-dfe796be45352c7b.js +0 -1
  912. package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-dfe796be45352c7b.js +0 -1
  913. package/app/.next-cli-build/static/chunks/app/api/v1/route-dfe796be45352c7b.js +0 -1
  914. package/app/.next-cli-build/static/chunks/app/api/v1/search/route-dfe796be45352c7b.js +0 -1
  915. package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-dfe796be45352c7b.js +0 -1
  916. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-dfe796be45352c7b.js +0 -1
  917. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-dfe796be45352c7b.js +0 -1
  918. package/app/.next-cli-build/static/chunks/app/api/version/route-dfe796be45352c7b.js +0 -1
  919. package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-dfe796be45352c7b.js +0 -1
  920. package/app/.next-cli-build/static/chunks/app/api/version/update/route-dfe796be45352c7b.js +0 -1
  921. package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-dfe796be45352c7b.js +0 -1
  922. package/app/.next-cli-build/static/chunks/app/page-dfe796be45352c7b.js +0 -1
  923. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-dfe796be45352c7b.js +0 -1
  924. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-dfe796be45352c7b.js +0 -1
  925. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-dfe796be45352c7b.js +0 -1
  926. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-dfe796be45352c7b.js +0 -1
  927. package/app/.next-cli-build/static/css/58f8f5fb2d2ac134.css +0 -1
  928. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/upgrade-0.7.7-to-0.7.8-0.7.8-20260727-004850/data.sqlite +0 -0
  929. package/app/node_modules/next/node_modules/postcss/lib/fromJSON.js +0 -54
  930. package/app/node_modules/next/node_modules/postcss/lib/node.js +0 -381
  931. package/app/.next-cli-build/static/{ZpBU8xc4kSeLftltRrIa6 → S-pbWChrUiCkwFyfx4Su3}/_ssgManifest.js +0 -0
  932. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/at-rule.js +0 -0
  933. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/comment.js +0 -0
  934. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/declaration.js +4 -4
  935. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/document.js +0 -0
  936. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/parse.js +1 -1
  937. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/postcss.js +12 -12
  938. package/app/node_modules/{next/node_modules/postcss → postcss}/lib/rule.js +6 -6
  939. /package/app/node_modules/{next/node_modules/postcss → postcss}/lib/stringify.js +0 -0
  940. /package/app/node_modules/{next/node_modules/postcss → postcss}/lib/symbols.js +0 -0
  941. /package/app/node_modules/{next/node_modules/postcss → postcss}/lib/terminal-highlight.js +0 -0
  942. /package/app/node_modules/{next/node_modules/postcss → postcss}/lib/warn-once.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{79595:(e,t,a)=>{Promise.resolve().then(a.bind(a,85309))},85309:(e,t,a)=>{"use strict";a.d(t,{default:()=>x});var s=a(95155),l=a(12115),r=a(98500),i=a.n(r),o=a(35497),c=a(3534),n=a(28777),d=a(64137);let u=a(41463).env.NEXT_PUBLIC_CLOUD_URL;function x({toolId:e,machineId:t}){let a=c.dM[e],[r,v]=(0,l.useState)([]),[m,h]=(0,l.useState)(!0),[p,b]=(0,l.useState)({}),[f,j]=(0,l.useState)(!1),[E,P]=(0,l.useState)(!1),[w,k]=(0,l.useState)(""),[g,N]=(0,l.useState)(!1),[_,y]=(0,l.useState)(""),[S,A]=(0,l.useState)([]);(0,l.useEffect)(()=>{let e=!0;return(async()=>{try{let[t,a,s,l]=await Promise.all([fetch("/api/providers"),fetch("/api/settings"),fetch("/api/tunnel/status"),fetch("/api/keys")]);if(!e)return;if(t.ok){let e=await t.json();v(e.connections||[])}if(a.ok){let e=await a.json();j(e.cloudEnabled||!1)}if(s.ok){let e=await s.json();P(!!(e.tunnel?.enabled||e.tunnel?.settingsEnabled)),k(e.tunnel?.publicUrl||""),N(!!(e.tailscale?.enabled||e.tailscale?.settingsEnabled)),y(e.tailscale?.tunnelUrl||"")}if(l.ok){let e=await l.json();A(e.keys||[])}}catch(e){console.log("Error loading tool data:",e)}finally{e&&h(!1)}})(),()=>{e=!1}},[]);let C=()=>r.filter(e=>!1!==e.isActive),U=(0,l.useCallback)((e,t,a)=>{b(s=>s[e]?.[t]===a?s:{...s,[e]:{...s[e],[t]:a}})},[]);return a?(0,s.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-4 px-1 sm:px-0",children:[(0,s.jsxs)(i(),{href:"/dashboard/cli-tools",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary w-fit",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"arrow_back"}),"Back to CLI Tools"]}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold text-text-main sm:text-2xl",children:a.name}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:a.description})]}),m?(0,s.jsx)(o.Qv,{}):(()=>{let t,l,r,i=(t=C(),l=[],r=new Set,t.forEach(e=>{let t=n.Xg[e.provider]||e.provider;(0,n.KC)(e.provider).forEach(a=>{let s=`${t}/${a.id}`;r.has(s)||(r.add(s),l.push({value:s,label:`${t}/${a.id}`,provider:e.provider,alias:t,connectionName:e.name,modelId:a.id}))})}),l).length>0,o={tool:a,isExpanded:!0,onToggle:()=>{},baseUrl:E&&w?w:f&&u?u:window.location.origin,apiKeys:S,tunnelEnabled:E,tunnelPublicUrl:w,tailscaleEnabled:g,tailscaleUrl:_};switch(e){case"claude":return(0,s.jsx)(d.Tk,{...o,activeProviders:C(),modelMappings:p[e]||{},onModelMappingChange:(t,a)=>U(e,t,a),hasActiveProviders:i,cloudEnabled:f});case"codex":return(0,s.jsx)(d.Ah,{...o,activeProviders:C(),cloudEnabled:f});case"opencode":return(0,s.jsx)(d.qO,{...o,activeProviders:C(),cloudEnabled:f});case"cowork":return(0,s.jsx)(d.Q6,{...o,activeProviders:C(),hasActiveProviders:i,cloudEnabled:f,cloudUrl:u,tunnelEnabled:E,tunnelPublicUrl:w,tailscaleEnabled:g,tailscaleUrl:_});case"droid":return(0,s.jsx)(d.ZM,{...o,activeProviders:C(),hasActiveProviders:i,cloudEnabled:f});case"openclaw":return(0,s.jsx)(d.yZ,{...o,activeProviders:C(),hasActiveProviders:i,cloudEnabled:f});case"hermes":return(0,s.jsx)(d.RF,{...o,activeProviders:C(),hasActiveProviders:i,cloudEnabled:f});case"copilot":return(0,s.jsx)(d.h1,{...o,activeProviders:C(),cloudEnabled:f});case"cline":return(0,s.jsx)(d.aG,{...o,activeProviders:C(),cloudEnabled:f});case"kilo":return(0,s.jsx)(d.c9,{...o,activeProviders:C(),cloudEnabled:f});case"kimchi":return(0,s.jsx)(d.GX,{...o});case"deepseek-tui":return(0,s.jsx)(d.lF,{...o,activeProviders:C(),hasActiveProviders:i,cloudEnabled:f});case"jcode":return(0,s.jsx)(d.mW,{...o,activeProviders:C(),hasActiveProviders:i,cloudEnabled:f});default:return(0,s.jsx)(d.a7,{toolId:e,...o,activeProviders:C(),cloudEnabled:f,tunnelEnabled:E})}})()]}):(0,s.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-4 px-1 sm:px-0",children:[(0,s.jsxs)(i(),{href:"/dashboard/cli-tools",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary w-fit",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"arrow_back"}),"Back to CLI Tools"]}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Tool not found or disabled."})]})}}},e=>{e.O(0,[27,5772,8105,1321,705,5497,9622,8441,3794,7358],()=>e(e.s=79595)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{33899:(e,s,l)=>{Promise.resolve().then(l.bind(l,53501))},53501:(e,s,l)=>{"use strict";l.d(s,{default:()=>m});var t=l(95155),a=l(12115),r=l(35497),i=l(3534),n=l(64137),c=l(98500),o=l.n(c),d=l(5772);function x({toolId:e,tool:s,status:l}){let a=l?l.installed?l.hasExtremeRouter?{label:"Connected",cls:"bg-green-500/10 text-green-600 dark:text-green-400"}:{label:"Not configured",cls:"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400"}:{label:"Not installed",cls:"bg-gray-500/10 text-gray-500"}:{label:"Unknown",cls:"bg-gray-500/10 text-gray-500"};return(0,t.jsx)(o(),{href:`/dashboard/cli-tools/${e}`,className:"block",children:(0,t.jsx)(r.Zp,{padding:"sm",className:"h-full overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,t.jsx)("div",{className:"flex h-full flex-col gap-2",children:(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:s.image?(0,t.jsx)(d.default,{src:s.image,alt:s.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}}):s.icon?(0,t.jsx)("span",{className:"material-symbols-outlined text-[28px]",style:{color:s.color},children:s.icon}):null}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("h3",{className:"font-medium text-sm truncate",children:s.name}),(0,t.jsx)("span",{className:`inline-block mt-1 px-1.5 py-0.5 text-[10px] font-medium rounded-full ${a.cls}`,children:a.label})]}),(0,t.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px] shrink-0",children:"chevron_right"})]})})})})}function m({machineId:e}){let[s,l]=(0,a.useState)(!0),[c,o]=(0,a.useState)({});if((0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let s=await fetch("/api/cli-tools/all-statuses");s.ok&&e&&o(await s.json())}catch(e){console.log("Error fetching tool statuses:",e)}finally{e&&l(!1)}})(),()=>{e=!1}},[]),s)return(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:[(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{})]});let d=Object.entries(i.dM),g=Object.entries(i.wn);return(0,t.jsxs)("div",{className:"flex w-full flex-col gap-6",children:[(0,t.jsx)(r.zY,{title:"CLI Tools",description:"Configure developer tools to use ExtremeRouter",icon:"terminal"}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 sm:gap-4 lg:grid-cols-3",children:d.map(([e,s])=>(0,t.jsx)(x,{toolId:e,tool:s,status:c[e]},e))}),(0,t.jsxs)("div",{className:"flex flex-col gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"security"}),(0,t.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"MITM Tools"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 sm:gap-4 lg:grid-cols-3",children:g.map(([e,s])=>(0,t.jsx)(n.gY,{tool:s},e))})]})]})}}},e=>{e.O(0,[27,5772,8105,1321,705,5497,9622,8441,3794,7358],()=>e(e.s=33899)),_N_E=e.O()}]);
@@ -1 +1,3 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{49293:(e,t,a)=>{Promise.resolve().then(a.bind(a,85330))},85330:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>D});var s=a(95155),l=a(12115),r=a(73321),o=a(35497),n=a(11059);let i=/^[a-zA-Z0-9_.\-]+$/,c=[{value:"fallback",label:"Fallback",desc:"Try models in order, next on failure",icon:"layers"},{value:"round-robin",label:"Round Robin",desc:"Rotate models across requests",icon:"cached"},{value:"fusion",label:"Fusion",desc:"Parallel panel + judge synthesis",icon:"hub"},{value:"swarm",label:"Swarm",desc:"Hierarchical Manager→Staff→Workers",icon:"account_tree"},{value:"cascade",label:"Cascade",desc:"Escalate cheap→capable on low confidence",icon:"trending_up"}],d={fallback:{icon:"layers",color:"#3B82F6",badge:"info"},"round-robin":{icon:"cached",color:"#10B981",badge:"success"},fusion:{icon:"hub",color:"#8B5CF6",badge:"primary"},swarm:{icon:"account_tree",color:"#F59E0B",badge:"warning"},cascade:{icon:"trending_up",color:"#06B6D4",badge:"cyan"}};function m(e){return d[e]||d.fallback}function x(e){let t=c.find(t=>t.value===e);return t?.label||"Fallback"}let u=[{value:"all",label:"All"},{value:"fallback",label:"Fallback"},{value:"round-robin",label:"Round Robin"},{value:"fusion",label:"Fusion"},{value:"swarm",label:"Swarm"},{value:"cascade",label:"Cascade"}],p=[{value:"name",label:"Name"},{value:"models-desc",label:"Most Models"},{value:"models-asc",label:"Fewest Models"}];function h({combos:e,comboStrategies:t,activeProviders:a,onViewCombos:l,onCreate:r}){let n=e.length,i=function(e){let t=new Set;for(let a of e)for(let e of a.models||[])t.add(e);return t.size}(e),c=function(e,t){let a={fallback:0,"round-robin":0,fusion:0,swarm:0,cascade:0},s=new Set(["fallback","round-robin","fusion","swarm","cascade"]);for(let l of e){let e=t[l.name]?.fallbackStrategy||"fallback",r=s.has(e)?e:"fallback";a[r]=(a[r]||0)+1}return a}(e,t),d=Object.values(c).filter(e=>e>0).length,u=n>0?Math.round(e.reduce((e,t)=>e+(t.models?.length||0),0)/n*10)/10:0,p=Math.max(...Object.values(c),1);return(0,s.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,s.jsx)("div",{className:"grid grid-cols-2 gap-3 lg:grid-cols-4",children:[{label:"Total Combos",value:n,icon:"layers",color:"#3B82F6"},{label:"Unique Models",value:i,icon:"model_training",color:"#10B981"},{label:"Strategies Used",value:d,icon:"account_tree",color:"#8B5CF6"},{label:"Avg Models/Combo",value:u,icon:"analytics",color:"#F59E0B"}].map(e=>(0,s.jsx)(o.Zp,{padding:"sm",children:(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${e.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:e.color},children:e.icon})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"font-mono text-lg font-bold text-text-main",children:e.value}),(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted",children:e.label})]})]})},e.label))}),(0,s.jsxs)(o.Zp,{children:[(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:"Strategy Distribution"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:"How combos are distributed across routing strategies"})]}),(0,s.jsx)("div",{className:"flex flex-col gap-2.5",children:Object.entries(c).map(([e,t])=>{let a=m(e),l=n>0?Math.round(t/n*100):0;return(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsxs)("div",{className:"flex w-28 items-center gap-1.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",style:{color:a.color},children:a.icon}),(0,s.jsx)("span",{className:"text-xs font-medium text-text-main",children:x(e)})]}),(0,s.jsx)("div",{className:"flex-1 overflow-hidden rounded-full bg-surface-2",children:(0,s.jsx)("div",{className:"h-2.5 rounded-full transition-all",style:{width:`${t/p*100}%`,backgroundColor:a.color}})}),(0,s.jsxs)("span",{className:"w-16 text-right font-mono text-xs text-text-muted",children:[t," (",l,"%)"]})]},e)})})]}),(0,s.jsxs)(o.Zp,{children:[(0,s.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:"Combo Health"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:"Overview of each combo's status"})]}),(0,s.jsx)(o.$n,{size:"sm",variant:"ghost",icon:"list_alt",onClick:l,children:"View All"})]}),0===e.length?(0,s.jsxs)("div",{className:"py-6 text-center text-sm text-text-muted",children:["No combos yet. ",(0,s.jsx)("button",{onClick:r,className:"text-primary hover:underline",children:"Create one →"})]}):(0,s.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>{let l=t[e.name]?.fallbackStrategy||"fallback",r=m(l),n=(e.models||[]).filter(e=>{let t=e.split("/")[0];return a.some(e=>e.provider===t&&!1!==e.isActive)}).length,i=(e.models||[]).length,c=i>0?Math.round(n/i*100):0;return(0,s.jsxs)("div",{className:"flex items-center gap-3 rounded-lg border border-border-subtle px-3 py-2 hover:bg-sidebar/30",children:[(0,s.jsx)("div",{className:"flex size-7 shrink-0 items-center justify-center rounded",style:{backgroundColor:`${r.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[15px]",style:{color:r.color},children:r.icon})}),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("code",{className:"truncate font-mono text-xs font-medium",children:e.name}),(0,s.jsxs)("div",{className:"flex items-center gap-2 mt-0.5",children:[(0,s.jsx)(o.Ex,{variant:r.badge,size:"sm",children:x(l)}),(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:[i," models"]})]})]}),(0,s.jsxs)("div",{className:"hidden sm:flex items-center gap-2 shrink-0",children:[(0,s.jsx)("div",{className:"w-20 overflow-hidden rounded-full bg-surface-2",children:(0,s.jsx)("div",{className:`h-1.5 rounded-full ${c>=80?"bg-success":c>=50?"bg-warning":"bg-danger"}`,style:{width:`${c}%`}})}),(0,s.jsxs)("span",{className:"w-8 text-right font-mono text-[10px] text-text-muted",children:[n,"/",i]})]})]},e.id)})})]})]})}var b=a(88105);let f=[{value:"auto",label:"Auto (provider default)"},{value:"off",label:"Off"},{value:"effort",label:"Effort (OpenAI-style)"},{value:"extended",label:"Extended (Claude-style)"}],g=[{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"},{value:"max",label:"Max"}],v=[{key:"manager",label:"Manager",icon:"psychology"},{key:"staff",label:"Staff",icon:"badge"},{key:"audit",label:"Audit",icon:"fact_check"},{key:"worker",label:"Worker",icon:"group"}],y=[{key:"panel",label:"Panel",icon:"dashboard"},{key:"judge",label:"Judge",icon:"gavel"}];function j(e){let t=b.Q2[e]?.capabilities;return!t||!1!==t.toolUse&&!1!==t.fileAccess}function N(e){if(!e||"string"!=typeof e)return null;let t=e.indexOf("/");return t>=0?e.slice(0,t):e}function k(e,t){if(e){let t=N(e);return{blocked:!!t&&!j(t),provider:t}}let a=N(t&&t.length>0?t[0]:null);return{blocked:!!a&&!j(a),provider:a}}function w(e){return e.filter(e=>j(e.provider))}function C({combo:e,modelCaps:t={},activeProviders:a=[],copied:r,onCopy:n,onEdit:i,onDelete:d,strategy:u={},onSetStrategy:p}){let[h,b]=(0,l.useState)(!1),[j,N]=(0,l.useState)(!1),[S,M]=(0,l.useState)(null),$=Array.isArray(e?.models)?e.models:[],F=u.fallbackStrategy||"fallback",E=u.judgeModel||"",A="fusion"===F,O="swarm"===F,T=u.managerModel||"",P=u.staffModel||"",z=u.auditModel||"",_=m(F),D=u.thinking||{},R=D.type||"auto",W="auto"!==R&&"off"!==R,[B,J]=(0,l.useState)([]),H=e=>p({thinking:{...D,...e}}),q=(e,t)=>{let a={...D.roles||{}};null===t?delete a[e]:a[e]={...a[e]||{},...t},H({roles:a})},L=$.map(e=>({model:e,caps:t[e]||{}})),U=L.some(e=>{let t=e.caps.thinkingFormat;return!!e.caps.reasoning&&("openai"===t||"effort"===t||!t)}),Z=L.some(e=>{let t=e.caps.thinkingFormat;return!!e.caps.reasoning&&("claude-adaptive"===t||"claude"===t||"extended"===t)}),I=L.some(e=>!!e.caps.thinkingMaxEffort),G=L.filter(e=>!e.caps.reasoning&&void 0!==e.caps.reasoning),V="effort"===R?L.filter(e=>!0===e.caps.reasoning&&e.caps.thinkingFormat&&"openai"!==e.caps.thinkingFormat&&"effort"!==e.caps.thinkingFormat):"extended"===R?L.filter(e=>!0===e.caps.reasoning&&e.caps.thinkingFormat&&"claude-adaptive"!==e.caps.thinkingFormat&&"claude"!==e.caps.thinkingFormat&&"extended"!==e.caps.thinkingFormat):[];return(0,s.jsxs)(o.Zp,{padding:"sm",className:"group transition-all hover:border-primary/20",children:[(0,s.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsxs)("button",{className:"flex min-w-0 flex-1 items-start gap-3 text-left sm:items-center",onClick:()=>b(!h),children:[(0,s.jsx)("div",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${_.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:_.color},children:_.icon})}),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("code",{className:"truncate font-mono text-sm font-medium",children:e.name}),(0,s.jsx)(o.Ex,{variant:_.badge,size:"sm",children:x(F)}),W&&(0,s.jsxs)(o.Ex,{variant:"cyan",size:"sm",className:"flex items-center gap-0.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[10px]",children:"psychology"}),"effort"===R?D.effort||"on":R]}),(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:[$.length," models"]})]}),(0,s.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1",children:[0===$.length?(0,s.jsx)("span",{className:"text-xs text-text-muted italic",children:"No models"}):$.slice(0,3).map((e,a)=>(0,s.jsxs)("code",{className:"inline-flex items-center gap-1 rounded bg-black/5 px-1.5 py-0.5 font-mono text-xs text-text-muted dark:bg-white/5",children:[(0,s.jsx)("span",{className:"truncate max-w-[120px]",children:e}),t[e]&&(0,s.jsx)(o.nh,{caps:t[e],size:11})]},a)),$.length>3&&(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",$.length-3," more"]})]})]}),(0,s.jsx)("span",{className:`shrink-0 text-text-muted transition-transform ${h?"rotate-180":""}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"expand_more"})})]}),(0,s.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:gap-3 sm:shrink-0",children:[(0,s.jsx)("div",{className:"w-full sm:w-[180px]",children:(0,s.jsx)(o.l6,{options:c,value:F,onChange:e=>p({fallbackStrategy:e.target.value}),selectClassName:"py-1.5 text-xs"})}),(0,s.jsxs)("div",{className:"grid grid-cols-3 gap-1 sm:flex",children:[(0,s.jsxs)("button",{onClick:t=>{t.stopPropagation(),n(e.name,`combo-${e.id}`)},className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Copy combo name",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:r===`combo-${e.id}`?"check":"content_copy"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Copy"})]}),(0,s.jsxs)("button",{onClick:i,className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Edit",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,s.jsxs)("button",{onClick:d,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 transition-colors hover:bg-red-500/10",title:"Delete",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]})]})]}),h&&(0,s.jsxs)("div",{className:"mt-3 border-t border-border-subtle pt-3",children:[(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsxs)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted mb-1.5",children:["Models (",$.length,")"]}),(0,s.jsx)("div",{className:"flex flex-col gap-1",children:$.map((e,a)=>(0,s.jsxs)("div",{className:"flex items-center gap-2 rounded px-2 py-1 bg-black/[0.02] dark:bg-white/[0.02]",children:[(0,s.jsx)("span",{className:"text-[10px] font-medium text-text-muted w-4 text-center",children:a+1}),(0,s.jsx)("code",{className:"min-w-0 flex-1 truncate font-mono text-xs text-text-main",children:e}),t[e]&&(0,s.jsx)(o.nh,{caps:t[e],size:11})]},a))})]}),A&&(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted mb-1.5",children:"Fusion Judge"}),(()=>{let{blocked:e,provider:t}=k(E,$);return(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)("button",{onClick:()=>N(!0),className:`inline-flex max-w-full items-center gap-1 rounded border border-dashed px-2 py-1 font-mono text-xs hover:bg-primary/5 ${e?"border-red-400 text-red-500 hover:border-red-500":"border-primary/40 text-primary hover:border-primary"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"gavel"}),(0,s.jsx)("span",{className:"truncate",children:E||`Auto — ${$[0]||"first model"}`})]}),E&&(0,s.jsx)("button",{onClick:()=>p({judgeModel:""}),className:"p-1 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10",title:"Reset to Auto",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]}),e&&(0,s.jsx)("p",{className:"text-[10px] text-red-500",children:E?"⚠ Web cookie providers cannot serve as Judge (no tool use / file access)":`⚠ Auto-fallback to "${t}" (first combo model) — web cookie cannot serve as Judge`})]})})()]}),O&&(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted mb-1.5",children:"Swarm Roles"}),(0,s.jsxs)("div",{className:"flex flex-col gap-1.5",children:[[{key:"manager",label:"Manager",icon:"psychology",value:T,placeholder:`Auto — ${$[0]||"first"}`},{key:"staff",label:"Staff",icon:"badge",value:P,placeholder:"Same as Manager"},{key:"audit",label:"Audit",icon:"fact_check",value:z,placeholder:"Same as Staff"}].map(e=>{let{blocked:t,provider:a}=k(e.value,$);return(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-xs font-medium text-text-muted w-16",children:e.label}),(0,s.jsxs)("button",{onClick:()=>M(e.key),className:`inline-flex max-w-full items-center gap-1 rounded border border-dashed px-2 py-0.5 font-mono text-[11px] hover:bg-primary/5 ${t?"border-red-400 text-red-500 hover:border-red-500":"border-primary/40 text-primary hover:border-primary"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:e.icon}),(0,s.jsx)("span",{className:"truncate",children:e.value||e.placeholder})]}),e.value&&(0,s.jsx)("button",{onClick:()=>p({[`${e.key}Model`]:""}),className:"p-0.5 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10",title:`Reset ${e.label}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"close"})})]}),t&&(0,s.jsx)("p",{className:"text-[10px] text-red-500 pl-[76px]",children:e.value?`⚠ Web cookie providers cannot serve as ${e.label} (no tool use / file access)`:`⚠ Auto-fallback to "${a}" (first combo model) — web cookie cannot serve as ${e.label}`})]},e.key)}),(0,s.jsxs)("div",{className:"flex items-center gap-2 text-[11px] text-text-muted",children:[(0,s.jsx)("span",{className:"font-medium",children:"Workers"}),(0,s.jsxs)("span",{children:["= combo models (",$.length,")"]}),(0,s.jsx)("span",{className:"text-text-subtle",children:"\xb7"}),(0,s.jsx)("a",{href:"/dashboard/swarm",className:"text-primary hover:underline",children:"Telemetry →"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-3 mt-1",children:[(0,s.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,s.jsx)("input",{type:"checkbox",checked:u.autoScale?.enabled===!0,onChange:e=>p({autoScale:{...u.autoScale||{},enabled:e.target.checked}}),className:"rounded border-border accent-primary"}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Auto-scale"})]}),u.autoScale?.enabled&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"flex items-center gap-1",children:[(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Min:"}),(0,s.jsx)("input",{type:"number",min:1,max:u.autoScale?.maxWorkers||8,value:u.autoScale?.minWorkers??1,onChange:e=>p({autoScale:{...u.autoScale||{},minWorkers:Number(e.target.value)||1}}),className:"w-10 rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono text-center focus:outline-none focus:border-primary"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1",children:[(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Max:"}),(0,s.jsx)("input",{type:"number",min:1,max:8,value:u.autoScale?.maxWorkers??$.length,onChange:e=>p({autoScale:{...u.autoScale||{},maxWorkers:Number(e.target.value)||1}}),className:"w-10 rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono text-center focus:outline-none focus:border-primary"})]})]})]})]})]}),(0,s.jsxs)("div",{className:"mt-3 border-t border-border-subtle pt-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted",children:"Thinking"}),(0,s.jsx)("button",{onClick:()=>J(B.length>0?[]:(A?y:O?v:[]).map(e=>e.key)),className:"text-[10px] text-primary hover:underline",children:B.length>0?"Hide roles":`Role overrides${W?" ("+Object.keys(D.roles||{}).length+")":""}`})]}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted",children:"Mode:"}),(0,s.jsx)("select",{value:R,onChange:e=>H({type:e.target.value}),className:"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] font-mono focus:outline-none focus:border-primary",children:f.map(e=>{let t="auto"===e.value||"off"===e.value||"effort"===e.value&&U||"extended"===e.value&&Z;return(0,s.jsxs)("option",{value:e.value,disabled:!t,className:t?"":"text-text-muted",children:[e.label,t?"":" (not supported)"]},e.value)})})]}),V.length>0&&(0,s.jsxs)("div",{className:"flex items-center gap-1 text-amber-600 dark:text-amber-400",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),(0,s.jsxs)("span",{className:"text-[10px]",children:[R," not supported by ",V.map(e=>e.model.split("/").pop()).join(", ")]})]}),G.length>0&&"auto"!==R&&"off"!==R&&(0,s.jsxs)("div",{className:"flex items-center gap-1 text-amber-600 dark:text-amber-400",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),(0,s.jsxs)("span",{className:"text-[10px]",children:["Thinking capability unknown for ",G.map(e=>e.model.split("/").pop()).join(", ")]})]}),"effort"===R&&(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted",children:"Effort:"}),(0,s.jsx)("select",{value:D.effort||"high",onChange:e=>H({effort:e.target.value}),className:"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] font-mono focus:outline-none focus:border-primary",children:g.map(e=>{let t="max"!==e.value||I;return(0,s.jsxs)("option",{value:e.value,disabled:!t,className:t?"":"text-text-muted",children:[e.label,t?"":" (not supported)"]},e.value)})})]}),"extended"===R&&(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted",children:"Budget:"}),(0,s.jsx)("input",{type:"number",min:1024,max:128e3,step:1024,value:D.budgetTokens||4096,onChange:e=>H({budgetTokens:Number(e.target.value)||4096}),className:"w-20 rounded border border-border bg-background px-1.5 py-0.5 text-[11px] font-mono focus:outline-none focus:border-primary"})]})]}),B.length>0&&W&&(0,s.jsxs)("div",{className:"mt-2 flex flex-col gap-1.5 pl-1",children:[(0,s.jsx)("p",{className:"text-[10px] text-text-muted",children:"Per-role overrides (leave as parent to inherit global)"}),(A?y:O?v:[]).map(e=>{let t,a=(t=e.key,D?.roles?.[t]);return(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px] text-text-muted",children:e.icon}),(0,s.jsx)("span",{className:"text-[11px] font-medium text-text-muted w-12",children:e.label}),(0,s.jsxs)("select",{value:a?.type||"inherit",onChange:t=>q(e.key,"inherit"===t.target.value?null:{type:t.target.value}),className:"rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono focus:outline-none focus:border-primary",children:[(0,s.jsx)("option",{value:"inherit",children:"Inherit"}),(0,s.jsx)("option",{value:"off",children:"Off"}),(0,s.jsxs)("option",{value:"effort",disabled:!U,className:U?"":"text-text-muted",children:["Effort",U?"":" (not supported)"]}),(0,s.jsxs)("option",{value:"extended",disabled:!Z,className:Z?"":"text-text-muted",children:["Extended",Z?"":" (not supported)"]})]}),a?.type==="effort"&&(0,s.jsx)("select",{value:a.effort||"high",onChange:t=>q(e.key,{type:"effort",effort:t.target.value}),className:"rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono focus:outline-none focus:border-primary",children:g.map(e=>{let t="max"!==e.value||I;return(0,s.jsxs)("option",{value:e.value,disabled:!t,className:t?"":"text-text-muted",children:[e.label,t?"":" (not supported)"]},e.value)})}),a?.type==="extended"&&(0,s.jsx)("input",{type:"number",min:1024,max:128e3,step:1024,value:a.budgetTokens||4096,onChange:t=>q(e.key,{type:"extended",budgetTokens:Number(t.target.value)||4096}),className:"w-16 rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono focus:outline-none focus:border-primary"}),a&&(0,s.jsx)("button",{onClick:()=>q(e.key,null),className:"p-0.5 rounded text-text-muted hover:text-red-500",title:"Reset to inherit",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},e.key)})]})]}),(0,s.jsxs)("div",{className:"text-xs text-text-muted bg-black/[0.02] dark:bg-white/[0.02] rounded px-2 py-1.5",children:[(0,s.jsxs)("span",{className:"font-medium",children:[x(F),":"]})," ",c.find(e=>e.value===F)?.desc]})]}),(0,s.jsx)(o.rq,{isOpen:j,onClose:()=>N(!1),onSelect:e=>{p({judgeModel:e?.value||""}),N(!1)},activeProviders:w(a),title:"Select Judge Model",addedModelValues:E?[E]:[],closeOnSelect:!0}),S&&(0,s.jsx)(o.rq,{isOpen:!0,onClose:()=>M(null),onSelect:e=>{p({[`${S}Model`]:e?.value||""}),M(null)},activeProviders:w(a),title:`Select ${"manager"===S?"Manager":"staff"===S?"Staff":"Audit"} Model`,addedModelValues:"manager"===S?T?[T]:[]:"staff"===S?P?[P]:[]:z?[z]:[],closeOnSelect:!0})]})}function S({combos:e,modelCaps:t,activeProviders:a,comboStrategies:r,copied:n,copy:i,onEdit:c,onDelete:d,onSetStrategy:m,onCreate:x}){let[h,b]=(0,l.useState)(""),[f,g]=(0,l.useState)("all"),[v,y]=(0,l.useState)("name"),j=(0,l.useMemo)(()=>{var t;let a;return t=function(e,t,a,s){let l=e;if("all"!==a&&(l=l.filter(e=>(s[e.name]?.fallbackStrategy||"fallback")===a)),t.trim()){let e=t.trim().toLowerCase();l=l.filter(t=>t.name.toLowerCase().includes(e)||(t.models||[]).some(t=>t.toLowerCase().includes(e)))}return l}(e,h,f,r),a=[...t],"models-desc"===v?a.sort((e,t)=>(t.models?.length||0)-(e.models?.length||0)):"models-asc"===v?a.sort((e,t)=>(e.models?.length||0)-(t.models?.length||0)):a.sort((e,t)=>e.name.localeCompare(t.name)),a},[e,h,f,v,r]);return 0===e.length?(0,s.jsx)(o.pp,{icon:"layers",title:"No combos yet",description:"Create model combos with fallback, round-robin, fusion, or swarm strategies",actionText:"Create Combo",onAction:x}):(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsx)(o.pd,{placeholder:"Search combos or models...",value:h,onChange:e=>b(e.target.value),className:"sm:max-w-xs"}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("div",{className:"flex flex-wrap gap-1",children:u.map(e=>(0,s.jsx)("button",{onClick:()=>g(e.value),className:`rounded-full px-2.5 py-1 text-xs font-medium transition-colors ${f===e.value?"bg-primary/15 text-primary ring-1 ring-primary/20":"bg-surface-2 text-text-muted hover:text-text-main"}`,children:e.label},e.value))}),(0,s.jsx)("select",{value:v,onChange:e=>y(e.target.value),className:"appearance-none rounded-lg border border-border bg-surface-2 py-1.5 pl-3 pr-8 text-xs text-text-main [-webkit-appearance:none] [-moz-appearance:none] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30",children:p.map(e=>(0,s.jsx)("option",{value:e.value,children:e.label},e.value))})]})]}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:j.length===e.length?`${e.length} combo${1!==e.length?"s":""}`:`${j.length} of ${e.length} combos`}),0===j.length?(0,s.jsx)(o.Zp,{children:(0,s.jsxs)("div",{className:"py-8 text-center text-sm text-text-muted",children:['No combos match "',h,'" ',"all"!==f&&`with ${f} strategy`]})}):(0,s.jsx)("div",{className:"flex flex-col gap-3",children:j.map(e=>(0,s.jsx)(C,{combo:e,modelCaps:t,activeProviders:a,copied:n,onCopy:i,onEdit:()=>c(e),onDelete:()=>d(e.id),strategy:r[e.name]||{},onSetStrategy:t=>m(e.name,t)},e.id))})]})}let M=[{id:"always-on",name:"Always-On (5-Layer Fallback)",description:"Zero-downtime coding with 5 layers of fallback. Mix of subscription, cheap, and free tiers — if any model fails, the next picks up automatically.",icon:"shield",category:"reliability",strategy:"fallback",models:["claude-opus-4-7","gpt-5.4","glm-5.1","MiniMax-M2.7","claude-sonnet-4.5"],preferredProviders:{"claude-opus-4-7":"cc","gpt-5.4":"cx","glm-5.1":"glm","MiniMax-M2.7":"minimax","claude-sonnet-4.5":"kr"}},{id:"max-reasoning-swarm",name:"Max Reasoning Swarm",description:"Deep multi-agent analysis for complex coding tasks. Manager decomposes the problem, workers solve subtasks in parallel, audit reviews the result. Manager thinks at max effort.",icon:"psychology",category:"reasoning",strategy:"swarm",models:["claude-opus-4-7","gpt-5.4","glm-5.1","claude-sonnet-4.5"],preferredProviders:{"claude-opus-4-7":"cc","gpt-5.4":"cx","glm-5.1":"glm","claude-sonnet-4.5":"kr"},strategyConfig:{fallbackStrategy:"swarm",managerModel:"claude-opus-4-7",auditModel:"claude-sonnet-4.5",thinking:{type:"effort",effort:"high",roles:{manager:{type:"effort",effort:"max"},worker:{type:"effort",effort:"medium"},audit:{type:"effort",effort:"high"}}},autoScale:{enabled:!0,minWorkers:2,maxWorkers:4}}},{id:"flash-fusion",name:"Flash Fusion",description:"Two fast models answer in parallel, a judge picks the best result. Low latency with a quality check — great for everyday coding questions.",icon:"bolt",category:"balanced",strategy:"fusion",models:["gpt-5.4","MiniMax-M2.7"],preferredProviders:{"gpt-5.4":"cx","MiniMax-M2.7":"minimax"},strategyConfig:{fallbackStrategy:"fusion",thinking:{type:"effort",effort:"medium"}}},{id:"penny-pincher",name:"Penny-Pincher",description:"Ultra-low-cost daily driver built from cheap and free tiers. Thinking disabled to keep tokens minimal. Use for simple tasks where cost matters most.",icon:"savings",category:"budget",strategy:"fallback",models:["MiniMax-M2.7","glm-5.1","gpt-5.4"],preferredProviders:{"MiniMax-M2.7":"minimax","glm-5.1":"glm","gpt-5.4":"kr"},strategyConfig:{fallbackStrategy:"fallback",thinking:{type:"off"}}},{id:"bug-hunter",name:"Bug Hunter",description:"Three models independently diagnose the same bug, a strong judge picks the most likely root cause. High-precision debugging with thinking on.",icon:"bug_report",category:"debugging",strategy:"fusion",models:["gpt-5.4","glm-5.1","MiniMax-M2.7"],preferredProviders:{"gpt-5.4":"cx","glm-5.1":"glm","MiniMax-M2.7":"minimax"},strategyConfig:{fallbackStrategy:"fusion",thinking:{type:"effort",effort:"high"}}}];function $({combos:e,connections:t,modelIndex:a={},onApply:r}){let[n,i]=(0,l.useState)(null),c=new Set(t?.filter(e=>!1!==e.isActive).map(e=>e.provider)||[]),d=new Set((e||[]).map(e=>e.name)),u=e=>(e.models||[]).map(t=>{let s=t.indexOf("/"),l=s>0,r=l?t.slice(s+1):t,o=(l?t.slice(0,s):"")||(e.preferredProviders||{})[r]||"",n=o?(0,b.rs)(o):"",i=(a[r]||[]).map(e=>(0,b.rs)(e)).filter(e=>c.has(e));if(n&&i.includes(n)){let e=(0,b.wG)(n);return{ref:t,modelName:r,provider:n,providerAlias:e,full:`${e}/${r}`,available:!0}}if(i.length>0){let e=(0,b.wG)(i[0]);return{ref:t,modelName:r,provider:i[0],providerAlias:e,full:`${e}/${r}`,available:!0,resolvedFrom:o}}return{ref:t,modelName:r,provider:n||o,full:l?t:r,available:!1}}),p=async e=>{i(e.id);try{let t=u(e),a=t.filter(e=>e.available).map(e=>e.full),s=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,models:a,kind:null})});if(!s.ok){let e=await s.json();alert(e.error||"Failed to create combo from template");return}let l=await fetch("/api/settings").then(e=>e.json()).catch(()=>({})),o=e.strategyConfig?{...e.strategyConfig}:{fallbackStrategy:e.strategy},n=Object.fromEntries(t.map(e=>[e.modelName,e.full]));for(let e of["managerModel","staffModel","auditModel","judgeModel"]){let t=o[e];if(!t)continue;let a=t.indexOf("/"),s=a>0?t.slice(a+1):t;n[s]&&(o[e]=n[s])}let i={...l?.comboStrategies||{},[e.name]:o},c=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:i})});if(!c.ok){let e=await c.json().catch(()=>({}));alert(e.error||"Failed to apply template strategy");return}r&&r()}catch(e){alert("Failed to apply template: "+(e?.message||String(e)))}finally{i(null)}};return 0===M.length?(0,s.jsx)(o.pp,{icon:"dashboard_customize",title:"No templates available",description:"Combo templates will appear here when added."}):(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"mb-1",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"Combo Templates"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:"One-click prebuilt combos. Provider availability is checked automatically."})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",children:M.map(e=>{let t=u(e),a=t.filter(e=>e.available).length,l=t.length,r=d.has(e.name),i=m(e.strategy),c=a===l;return(0,s.jsxs)(o.Zp,{padding:"sm",className:"flex flex-col gap-3 hover:border-primary/20 transition-all",children:[(0,s.jsxs)("div",{className:"flex items-start justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,s.jsx)("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${i.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:i.color},children:e.icon||i.icon})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm font-semibold text-text-main",children:e.name}),(0,s.jsx)(o.Ex,{variant:i.badge,size:"sm",children:x(e.strategy)})]})]}),r&&(0,s.jsx)(o.Ex,{variant:"success",size:"sm",dot:!0,children:"Created"})]}),(0,s.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:e.description}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-1",children:[t.slice(0,4).map((e,t)=>(0,s.jsxs)("code",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-mono text-[10px] ${e.available?"bg-black/5 text-text-muted dark:bg-white/5":"bg-red-500/10 text-red-500"}`,title:e.available?`Resolved to ${e.provider}`:`No connected provider has ${e.modelName}`,children:[(0,s.jsx)("span",{className:e.available?"text-success":"text-red-500",children:e.available?"✓":"✗"}),(0,s.jsx)("span",{className:"truncate max-w-[110px]",children:e.modelName}),e.available&&(0,s.jsx)("span",{className:"rounded bg-black/10 px-0.5 text-[9px] dark:bg-white/10",children:e.provider})]},t)),t.length>4&&(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",t.length-4," more"]})]}),(0,s.jsx)("div",{className:"flex flex-wrap gap-1",children:t.map(e=>{let t=e.resolvedFrom?(0,b.rs)(e.resolvedFrom):"",a=e.available?`${e.provider}${e.resolvedFrom&&t!==e.provider?` (via ${e.resolvedFrom})`:""}`:`${e.provider||"?"} (missing)`,l=e.available;return(0,s.jsxs)("span",{className:`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[10px] font-medium ${l?"bg-success/10 text-success":"bg-surface-2 text-text-muted"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[10px]",children:l?"check_circle":"radio_button_unchecked"}),a]},e.ref)})}),(0,s.jsx)("div",{className:"mt-auto pt-1",children:(0,s.jsx)(o.$n,{size:"sm",fullWidth:!0,variant:r?"secondary":"primary",icon:n===e.id?"progress_activity":"add",disabled:r||n===e.id||!c,onClick:()=>p(e),children:n===e.id?"Creating...":r?"Already Created":c?"Apply Template":`Apply (${a}/${l} ready)`})})]},e.id)})})]})}var F=a(44923),E=a(87256),A=a(5020),O=a(39768);function T({id:e,index:t,model:a,isFirst:r,isLast:n,modelCaps:i,onEdit:c,onMoveUp:d,onMoveDown:m,onRemove:x}){let{attributes:u,listeners:p,setNodeRef:h,transform:b,isDragging:f}=(0,E.gl)({id:e}),g={transform:O.Ks.Transform.toString(b),opacity:f?.5:1,zIndex:f?999:void 0},[v,y]=(0,l.useState)(!1),[j,N]=(0,l.useState)(a),k=()=>{let e=j.trim();e&&e!==a?c(e):N(a),y(!1)};return(0,s.jsxs)("div",{ref:h,style:g,className:`group flex min-w-0 items-center gap-2 rounded-lg border px-2.5 py-1.5 transition-all ${f?"border-primary/40 bg-panel shadow-md ring-1 ring-primary/20":"border-transparent bg-panel hover:border-border-subtle"}`,children:[(0,s.jsx)("span",{className:"flex size-5 shrink-0 items-center justify-center rounded bg-primary/10 text-[10px] font-bold text-primary",children:t+1}),(0,s.jsx)("button",{...u,...p,type:"button",className:"cursor-grab touch-none shrink-0 p-0.5 rounded text-text-muted/50 hover:text-text-main active:cursor-grabbing",title:"Drag to reorder",children:(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",children:[(0,s.jsx)("circle",{cx:"9",cy:"4",r:"1.5"}),(0,s.jsx)("circle",{cx:"15",cy:"4",r:"1.5"}),(0,s.jsx)("circle",{cx:"9",cy:"12",r:"1.5"}),(0,s.jsx)("circle",{cx:"15",cy:"12",r:"1.5"}),(0,s.jsx)("circle",{cx:"9",cy:"20",r:"1.5"}),(0,s.jsx)("circle",{cx:"15",cy:"20",r:"1.5"})]})}),v?(0,s.jsx)("input",{autoFocus:!0,value:j,onChange:e=>N(e.target.value),onBlur:k,onKeyDown:e=>{"Enter"===e.key&&k(),"Escape"===e.key&&(N(a),y(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-panel px-1.5 py-0.5 font-mono text-xs text-text-main outline-none"}):(0,s.jsxs)("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 cursor-text rounded px-1 py-0.5 hover:bg-black/[0.03] dark:hover:bg-white/[0.03]",onClick:()=>y(!0),title:"Click to edit",children:[(0,s.jsx)("code",{className:"min-w-0 flex-1 truncate font-mono text-xs text-text-main",children:a}),i?.[a]&&(0,s.jsx)(o.nh,{caps:i[a],size:11})]}),(0,s.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5 opacity-0 transition-opacity group-hover:opacity-100",children:[(0,s.jsx)("button",{onClick:d,disabled:r,className:`rounded p-1 transition-colors ${r?"cursor-not-allowed text-text-muted/20":"text-text-muted hover:bg-black/5 hover:text-primary dark:hover:bg-white/5"}`,title:"Move up",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"arrow_upward"})}),(0,s.jsx)("button",{onClick:m,disabled:n,className:`rounded p-1 transition-colors ${n?"cursor-not-allowed text-text-muted/20":"text-text-muted hover:bg-black/5 hover:text-primary dark:hover:bg-white/5"}`,title:"Move down",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"arrow_downward"})})]}),(0,s.jsx)("button",{onClick:x,className:"shrink-0 rounded p-1 text-text-muted opacity-0 transition-all hover:bg-danger/10 hover:text-danger group-hover:opacity-100",title:"Remove model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})}function P({isOpen:e,combo:t,onClose:a,onSave:r,activeProviders:n,modelCaps:d={},kindFilter:m=null}){let[x,u]=(0,l.useState)(t?.name||""),[p,h]=(0,l.useState)(t?.models||[]),[b,f]=(0,l.useState)(!1),[g,v]=(0,l.useState)(!1),[y,j]=(0,l.useState)(""),[N,k]=(0,l.useState)({}),[w,C]=(0,l.useState)(e);(0,l.useEffect)(()=>{e&&!w&&(u(t?.name||""),h(Array.isArray(t?.models)?[...t.models]:[]),j(""),f(!1)),C(e)},[e,w,t]);let S=(0,F.FR)((0,F.MS)(F.AN,{activationConstraint:{distance:5}}),(0,F.MS)(F.uN,{coordinateGetter:E.JR})),M=p.map((e,t)=>({uid:`item-${t}`,model:e}));(0,l.useEffect)(()=>{if(!e)return;let t=!1;return(async()=>{try{let e=await fetch("/api/models/alias");if(!t&&e.ok){let t=await e.json();k(t.aliases||{})}}catch{}})(),()=>{t=!0}},[e]);let $=e=>e.trim()?i.test(e)?(j(""),!0):(j("Only letters, numbers, -, _ and . allowed"),!1):(j("Name is required"),!1),O=async()=>{$(x)&&(v(!0),await r({name:x.trim(),models:p}),v(!1))},z=!!t;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.aF,{isOpen:e,onClose:a,title:z?"Edit Combo":"Create Combo",size:"lg",children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(o.pd,{label:"Combo Name",value:x,onChange:e=>{let t=e.target.value;u(t),t?$(t):j("")},placeholder:"my-combo",error:y}),(0,s.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,s.jsx)("p",{className:"text-[10px] text-text-muted",children:"Use this name as the model in your client:"}),x.trim()&&(0,s.jsx)("code",{className:"rounded bg-primary/10 px-1.5 py-0.5 font-mono text-[10px] text-primary",children:x.trim()})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("label",{className:"text-sm font-medium text-text-main",children:"Models"}),p.length>0&&(0,s.jsxs)(o.Ex,{variant:"info",size:"sm",children:[p.length," model",1!==p.length?"s":""]})]}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Drag to reorder priority"})]}),0===p.length?(0,s.jsxs)("div",{className:"flex flex-col items-center justify-center py-8 border border-dashed border-border rounded-lg bg-surface-2/50",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-text-muted text-2xl mb-2",children:"layers"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mb-3",children:"Add models to build your combo"}),(0,s.jsx)(o.$n,{size:"sm",variant:"secondary",icon:"add",onClick:()=>f(!0),children:"Add First Model"})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(F.Mp,{sensors:S,collisionDetection:F.fp,onDragEnd:e=>{let{active:t,over:a}=e;if(a&&t.id!==a.id){let e=M.findIndex(e=>e.uid===t.id),s=M.findIndex(e=>e.uid===a.id);-1!==e&&-1!==s&&h(t=>(0,E.be)(t,e,s))}},modifiers:[A.FN,A.gj],children:(0,s.jsx)(E.gB,{items:M.map(e=>e.uid),strategy:E._G,children:(0,s.jsx)("div",{className:"flex max-h-[45vh] min-w-0 flex-col gap-1 overflow-y-auto rounded-lg bg-surface-2/30 p-1.5",children:M.map(({uid:e,model:t},a)=>(0,s.jsx)(T,{id:e,index:a,model:t,modelCaps:d,isFirst:0===a,isLast:a===M.length-1,onEdit:e=>{let t=[...p];t[a]=e,h(t)},onMoveUp:()=>(e=>{if(0===e)return;let t=[...p];[t[e-1],t[e]]=[t[e],t[e-1]],h(t)})(a),onMoveDown:()=>(e=>{if(e===p.length-1)return;let t=[...p];[t[e],t[e+1]]=[t[e+1],t[e]],h(t)})(a),onRemove:()=>{h(e=>e.filter((e,t)=>t!==a))}},e))})})}),(0,s.jsxs)("button",{onClick:()=>f(!0),className:"w-full mt-2 py-2 border border-dashed border-primary/30 rounded-lg text-xs text-primary font-medium hover:border-primary hover:bg-primary/5 transition-colors flex items-center justify-center gap-1.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"add"}),"Add Model"]})]})]}),p.length>=2&&(0,s.jsxs)("div",{className:"rounded-lg border border-border-subtle bg-surface-2/50 px-3 py-2",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 mb-1.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"lightbulb"}),(0,s.jsx)("span",{className:"text-xs font-medium text-text-main",children:"Strategy Tips"})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-2",children:c.map(e=>(0,s.jsxs)("div",{className:"flex items-start gap-1.5 text-[11px] text-text-muted",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px] mt-0.5 text-primary/60",children:e.icon}),(0,s.jsxs)("span",{children:[(0,s.jsx)("span",{className:"font-medium text-text-main",children:e.label})," — ",e.desc]})]},e.value))}),(0,s.jsx)("p",{className:"mt-1.5 text-[10px] text-text-muted",children:"Set strategy after creating the combo from the Combos tab."})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-2 pt-1 sm:flex-row",children:[(0,s.jsx)(o.$n,{onClick:a,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,s.jsx)(o.$n,{onClick:O,fullWidth:!0,size:"sm",icon:z?"save":"add",disabled:!x.trim()||!!y||g,children:g?"Saving...":z?"Save Changes":"Create Combo"})]})]})}),(0,s.jsx)(o.rq,{isOpen:b,onClose:()=>f(!1),onSelect:e=>{h(t=>t.includes(e.value)?t:[...t,e.value])},onDeselect:e=>{h(t=>t.filter(t=>t!==e.value))},activeProviders:n,modelAliases:N,title:"Add Model to Combo",kindFilter:m,addedModelValues:p,closeOnSelect:!1})]})}let z=[{value:"overview",label:"Overview"},{value:"combos",label:"Combos"},{value:"templates",label:"Templates"}];function _(){let e=(0,r.useRouter)(),t=(0,r.useSearchParams)().get("tab")||"overview",[a,i]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[m,x]=(0,l.useState)(!1),[u,p]=(0,l.useState)(null),[b,f]=(0,l.useState)([]),[g,v]=(0,l.useState)({}),[y,j]=(0,l.useState)({}),[N,k]=(0,l.useState)({}),[w,C]=(0,l.useState)(null),{copied:M,copy:F}=(0,n.C)(),E=(0,l.useCallback)(async()=>{try{let[e,t,a,s]=await Promise.all([fetch("/api/combos"),fetch("/api/providers"),fetch("/api/settings"),fetch("/api/models")]),l=await e.json(),r=await t.json(),o=a.ok?await a.json():{};if(e.ok&&i((l.combos||[]).filter(e=>!e.kind||"llm"===e.kind)),t.ok&&f(r.connections||[]),s.ok){let e=await s.json(),t={},a={};for(let s of e.models||[]){s.caps&&(t[s.fullModel]=s.caps);let e=(s.fullModel||"").split("/").slice(1).join("/");e&&s.provider&&(a[e]||(a[e]=[]),a[e].includes(s.provider)||a[e].push(s.provider))}j(t),k(a)}v(o.comboStrategies||{})}catch(e){console.log("Error fetching data:",e)}finally{d(!1)}},[]);(0,l.useEffect)(()=>{E()},[E]);let A=t=>e.push(`/dashboard/combos?tab=${t}`),O=async e=>{try{let t=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(t.ok)await E(),x(!1);else{let e=await t.json();alert(e.error||"Failed to create combo")}}catch(e){console.log("Error creating combo:",e)}},T=async(e,t)=>{try{let a=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(a.ok)await E(),p(null);else{let e=await a.json();alert(e.error||"Failed to update combo")}}catch(e){console.log("Error updating combo:",e)}},_=async(e,t)=>{try{let a=g[e]||{},s={...a,...t},l=s.fallbackStrategy,r=new Set(["fallbackStrategy","thinking","autoScale",...{fusion:["judgeModel","fusionTuning"],swarm:["managerModel","staffModel","auditModel","workerCount","swarmTuning","enableTelemetry"],cascade:["cascade"],fallback:[],"round-robin":[]}[l]||[]]),o={};for(let[e,t]of Object.entries(s))r.has(e)&&(o[e]=t);let n=Object.keys(a).some(e=>"fallbackStrategy"!==e&&null!=a[e]&&""!==a[e]),i=Object.keys(o).some(e=>"fallbackStrategy"!==e),c="fallback"===o.fallbackStrategy&&n&&!i;await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:{[e]:c?null:o}})}),v(t=>{let a={...t};return c?delete a[e]:a[e]=o,a})}catch(e){console.log("Error updating combo strategy:",e)}};return c?(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)(o.Qv,{}),(0,s.jsx)(o.Qv,{})]}):(0,s.jsxs)("div",{className:"flex min-w-0 flex-col gap-5",children:[(0,s.jsx)(o.zY,{title:"Combos",description:"Group models under one name, then pick a strategy per combo",icon:"layers",actions:(0,s.jsx)(o.$n,{size:"sm",icon:"add",onClick:()=>x(!0),className:"whitespace-nowrap",children:"Create Combo"})}),(0,s.jsx)(o.Iz,{options:z,value:t,onChange:A}),"overview"===t&&(0,s.jsx)(h,{combos:a,comboStrategies:g,activeProviders:b,onViewCombos:()=>A("combos"),onCreate:()=>x(!0)}),"combos"===t&&(0,s.jsx)(S,{combos:a,modelCaps:y,activeProviders:b,comboStrategies:g,copied:M,copy:F,onEdit:p,onDelete:e=>{C({title:"Delete Combo",message:"Delete this combo?",onConfirm:async()=>{C(null);try{let t=await fetch(`/api/combos/${e}`,{method:"DELETE"});if(t.ok)i(t=>t.filter(t=>t.id!==e));else{let e=await t.json().catch(()=>({}));alert(e.error||`Failed to delete combo (${t.status})`)}}catch(e){console.log("Error deleting combo:",e),alert("Failed to delete combo — network error")}}})},onSetStrategy:_,onCreate:()=>x(!0)}),"templates"===t&&(0,s.jsx)($,{combos:a,connections:b,modelIndex:N,onApply:E}),(0,s.jsx)(P,{isOpen:m,onClose:()=>x(!1),onSave:O,activeProviders:b,modelCaps:y},"create"),(0,s.jsx)(P,{isOpen:!!u,combo:u,onClose:()=>p(null),onSave:e=>T(u.id,e),activeProviders:b,modelCaps:y},u?.id||"new"),(0,s.jsx)(o.uo,{isOpen:!!w,onClose:()=>C(null),onConfirm:w?.onConfirm,title:w?.title||"Confirm",message:w?.message,variant:"danger"})]})}function D(){return(0,s.jsx)(l.Suspense,{fallback:(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)("div",{className:"h-32 animate-pulse rounded-lg bg-sidebar"}),(0,s.jsx)("div",{className:"h-32 animate-pulse rounded-lg bg-sidebar"})]}),children:(0,s.jsx)(_,{})})}}},e=>{e.O(0,[27,7055,8105,1321,705,5497,8441,3794,7358],()=>e(e.s=49293)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{49293:(e,t,a)=>{Promise.resolve().then(a.bind(a,85330))},85330:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>D});var s=a(95155),l=a(12115),r=a(73321),o=a(35497),n=a(11059);let i=/^[a-zA-Z0-9_.\-]+$/,c=[{value:"fallback",label:"Fallback",desc:"Try models in order, next on failure",icon:"layers"},{value:"round-robin",label:"Round Robin",desc:"Rotate models across requests",icon:"cached"},{value:"fusion",label:"Fusion",desc:"Parallel panel + judge synthesis",icon:"hub"},{value:"swarm",label:"Swarm",desc:"Hierarchical Manager→Staff→Workers",icon:"account_tree"},{value:"cascade",label:"Cascade",desc:"Escalate cheap→capable on low confidence",icon:"trending_up"}],d={fallback:{icon:"layers",color:"#3B82F6",badge:"info"},"round-robin":{icon:"cached",color:"#10B981",badge:"success"},fusion:{icon:"hub",color:"#8B5CF6",badge:"primary"},swarm:{icon:"account_tree",color:"#F59E0B",badge:"warning"},cascade:{icon:"trending_up",color:"#06B6D4",badge:"cyan"}};function m(e){return d[e]||d.fallback}function x(e){let t=c.find(t=>t.value===e);return t?.label||"Fallback"}let u=[{value:"all",label:"All"},{value:"fallback",label:"Fallback"},{value:"round-robin",label:"Round Robin"},{value:"fusion",label:"Fusion"},{value:"swarm",label:"Swarm"},{value:"cascade",label:"Cascade"}],p=[{value:"name",label:"Name"},{value:"models-desc",label:"Most Models"},{value:"models-asc",label:"Fewest Models"}];function h({combos:e,comboStrategies:t,activeProviders:a,onViewCombos:l,onCreate:r}){let n=e.length,i=function(e){let t=new Set;for(let a of e)for(let e of a.models||[])t.add(e);return t.size}(e),c=function(e,t){let a={fallback:0,"round-robin":0,fusion:0,swarm:0,cascade:0},s=new Set(["fallback","round-robin","fusion","swarm","cascade"]);for(let l of e){let e=t[l.name]?.fallbackStrategy||"fallback",r=s.has(e)?e:"fallback";a[r]=(a[r]||0)+1}return a}(e,t),d=Object.values(c).filter(e=>e>0).length,u=n>0?Math.round(e.reduce((e,t)=>e+(t.models?.length||0),0)/n*10)/10:0,p=Math.max(...Object.values(c),1);return(0,s.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,s.jsx)("div",{className:"grid grid-cols-2 gap-3 lg:grid-cols-4",children:[{label:"Total Combos",value:n,icon:"layers",color:"#3B82F6"},{label:"Unique Models",value:i,icon:"model_training",color:"#10B981"},{label:"Strategies Used",value:d,icon:"account_tree",color:"#8B5CF6"},{label:"Avg Models/Combo",value:u,icon:"analytics",color:"#F59E0B"}].map(e=>(0,s.jsx)(o.Zp,{padding:"sm",children:(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${e.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:e.color},children:e.icon})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"font-mono text-lg font-bold text-text-main",children:e.value}),(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted",children:e.label})]})]})},e.label))}),(0,s.jsxs)(o.Zp,{children:[(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:"Strategy Distribution"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:"How combos are distributed across routing strategies"})]}),(0,s.jsx)("div",{className:"flex flex-col gap-2.5",children:Object.entries(c).map(([e,t])=>{let a=m(e),l=n>0?Math.round(t/n*100):0;return(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsxs)("div",{className:"flex w-28 items-center gap-1.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",style:{color:a.color},children:a.icon}),(0,s.jsx)("span",{className:"text-xs font-medium text-text-main",children:x(e)})]}),(0,s.jsx)("div",{className:"flex-1 overflow-hidden rounded-full bg-surface-2",children:(0,s.jsx)("div",{className:"h-2.5 rounded-full transition-all",style:{width:`${t/p*100}%`,backgroundColor:a.color}})}),(0,s.jsxs)("span",{className:"w-16 text-right font-mono text-xs text-text-muted",children:[t," (",l,"%)"]})]},e)})})]}),(0,s.jsxs)(o.Zp,{children:[(0,s.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:"Combo Health"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:"Overview of each combo's status"})]}),(0,s.jsx)(o.$n,{size:"sm",variant:"ghost",icon:"list_alt",onClick:l,children:"View All"})]}),0===e.length?(0,s.jsxs)("div",{className:"py-6 text-center text-sm text-text-muted",children:["No combos yet. ",(0,s.jsx)("button",{onClick:r,className:"text-primary hover:underline",children:"Create one →"})]}):(0,s.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>{let l=t[e.name]?.fallbackStrategy||"fallback",r=m(l),n=(e.models||[]).filter(e=>{let t=e.split("/")[0];return a.some(e=>e.provider===t&&!1!==e.isActive)}).length,i=(e.models||[]).length,c=i>0?Math.round(n/i*100):0;return(0,s.jsxs)("div",{className:"flex items-center gap-3 rounded-lg border border-border-subtle px-3 py-2 hover:bg-sidebar/30",children:[(0,s.jsx)("div",{className:"flex size-7 shrink-0 items-center justify-center rounded",style:{backgroundColor:`${r.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[15px]",style:{color:r.color},children:r.icon})}),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("code",{className:"truncate font-mono text-xs font-medium",children:e.name}),(0,s.jsxs)("div",{className:"flex items-center gap-2 mt-0.5",children:[(0,s.jsx)(o.Ex,{variant:r.badge,size:"sm",children:x(l)}),(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:[i," models"]})]})]}),(0,s.jsxs)("div",{className:"hidden sm:flex items-center gap-2 shrink-0",children:[(0,s.jsx)("div",{className:"w-20 overflow-hidden rounded-full bg-surface-2",children:(0,s.jsx)("div",{className:`h-1.5 rounded-full ${c>=80?"bg-success":c>=50?"bg-warning":"bg-danger"}`,style:{width:`${c}%`}})}),(0,s.jsxs)("span",{className:"w-8 text-right font-mono text-[10px] text-text-muted",children:[n,"/",i]})]})]},e.id)})})]})]})}var f=a(88105);let b=[{value:"auto",label:"Auto (provider default)"},{value:"off",label:"Off"},{value:"effort",label:"Effort (OpenAI-style)"},{value:"extended",label:"Extended (Claude-style)"}],g=[{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"},{value:"max",label:"Max"}],v=[{key:"manager",label:"Manager",icon:"psychology"},{key:"staff",label:"Staff",icon:"badge"},{key:"audit",label:"Audit",icon:"fact_check"},{key:"worker",label:"Worker",icon:"group"}],y=[{key:"panel",label:"Panel",icon:"dashboard"},{key:"judge",label:"Judge",icon:"gavel"}];function j(e){let t=f.Q2[e]?.capabilities;return!t||!1!==t.toolUse&&!1!==t.fileAccess}function N(e){if(!e||"string"!=typeof e)return null;let t=e.indexOf("/");return t>=0?e.slice(0,t):e}function k(e,t){if(e){let t=N(e);return{blocked:!!t&&!j(t),provider:t}}let a=N(t&&t.length>0?t[0]:null);return{blocked:!!a&&!j(a),provider:a}}function w(e){return e.filter(e=>j(e.provider))}function C({combo:e,modelCaps:t={},activeProviders:a=[],copied:r,onCopy:n,onEdit:i,onDelete:d,strategy:u={},onSetStrategy:p}){let[h,f]=(0,l.useState)(!1),[j,N]=(0,l.useState)(!1),[S,M]=(0,l.useState)(null),$=Array.isArray(e?.models)?e.models:[],F=u.fallbackStrategy||"fallback",A=u.judgeModel||"",O="fusion"===F,E="swarm"===F,T=u.managerModel||"",P=u.staffModel||"",z=u.auditModel||"",_=m(F),D=u.thinking||{},R=D.type||"auto",W="auto"!==R&&"off"!==R,[B,J]=(0,l.useState)([]),H=e=>p({thinking:{...D,...e}}),q=(e,t)=>{let a={...D.roles||{}};null===t?delete a[e]:a[e]={...a[e]||{},...t},H({roles:a})},L=$.map(e=>({model:e,caps:t[e]||{}})),U=L.some(e=>{let t=e.caps.thinkingFormat;return!!e.caps.reasoning&&("openai"===t||"effort"===t||!t)}),Z=L.some(e=>{let t=e.caps.thinkingFormat;return!!e.caps.reasoning&&("claude-adaptive"===t||"claude"===t||"extended"===t)}),I=L.some(e=>!!e.caps.thinkingMaxEffort),G=L.filter(e=>!e.caps.reasoning&&void 0!==e.caps.reasoning),V="effort"===R?L.filter(e=>!0===e.caps.reasoning&&e.caps.thinkingFormat&&"openai"!==e.caps.thinkingFormat&&"effort"!==e.caps.thinkingFormat):"extended"===R?L.filter(e=>!0===e.caps.reasoning&&e.caps.thinkingFormat&&"claude-adaptive"!==e.caps.thinkingFormat&&"claude"!==e.caps.thinkingFormat&&"extended"!==e.caps.thinkingFormat):[];return(0,s.jsxs)(o.Zp,{padding:"sm",className:"group transition-all hover:border-primary/20",children:[(0,s.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsxs)("button",{className:"flex min-w-0 flex-1 items-start gap-3 text-left sm:items-center",onClick:()=>f(!h),children:[(0,s.jsx)("div",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${_.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:_.color},children:_.icon})}),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("code",{className:"truncate font-mono text-sm font-medium",children:e.name}),(0,s.jsx)(o.Ex,{variant:_.badge,size:"sm",children:x(F)}),W&&(0,s.jsxs)(o.Ex,{variant:"cyan",size:"sm",className:"flex items-center gap-0.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[10px]",children:"psychology"}),"effort"===R?D.effort||"on":R]}),(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:[$.length," models"]})]}),(0,s.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1",children:[0===$.length?(0,s.jsx)("span",{className:"text-xs text-text-muted italic",children:"No models"}):$.slice(0,3).map((e,a)=>(0,s.jsxs)("code",{className:"inline-flex items-center gap-1 rounded bg-black/5 px-1.5 py-0.5 font-mono text-xs text-text-muted dark:bg-white/5",children:[(0,s.jsx)("span",{className:"truncate max-w-[120px]",children:e}),t[e]&&(0,s.jsx)(o.nh,{caps:t[e],size:11})]},a)),$.length>3&&(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",$.length-3," more"]})]})]}),(0,s.jsx)("span",{className:`shrink-0 text-text-muted transition-transform ${h?"rotate-180":""}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"expand_more"})})]}),(0,s.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:gap-3 sm:shrink-0",children:[(0,s.jsx)("div",{className:"w-full sm:w-[180px]",children:(0,s.jsx)(o.l6,{options:c,value:F,onChange:e=>p({fallbackStrategy:e.target.value}),selectClassName:"py-1.5 text-xs"})}),(0,s.jsxs)("div",{className:"grid grid-cols-3 gap-1 sm:flex",children:[(0,s.jsxs)("button",{onClick:t=>{t.stopPropagation(),n(e.name,`combo-${e.id}`)},className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Copy combo name",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:r===`combo-${e.id}`?"check":"content_copy"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Copy"})]}),(0,s.jsxs)("button",{onClick:i,className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Edit",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,s.jsxs)("button",{onClick:d,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 transition-colors hover:bg-red-500/10",title:"Delete",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]})]})]}),h&&(0,s.jsxs)("div",{className:"mt-3 border-t border-border-subtle pt-3",children:[(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsxs)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted mb-1.5",children:["Models (",$.length,")"]}),(0,s.jsx)("div",{className:"flex flex-col gap-1",children:$.map((e,a)=>(0,s.jsxs)("div",{className:"flex items-center gap-2 rounded px-2 py-1 bg-black/[0.02] dark:bg-white/[0.02]",children:[(0,s.jsx)("span",{className:"text-[10px] font-medium text-text-muted w-4 text-center",children:a+1}),(0,s.jsx)("code",{className:"min-w-0 flex-1 truncate font-mono text-xs text-text-main",children:e}),t[e]&&(0,s.jsx)(o.nh,{caps:t[e],size:11})]},a))})]}),O&&(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted mb-1.5",children:"Fusion Judge"}),(()=>{let{blocked:e,provider:t}=k(A,$);return(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)("button",{onClick:()=>N(!0),className:`inline-flex max-w-full items-center gap-1 rounded border border-dashed px-2 py-1 font-mono text-xs hover:bg-primary/5 ${e?"border-red-400 text-red-500 hover:border-red-500":"border-primary/40 text-primary hover:border-primary"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"gavel"}),(0,s.jsx)("span",{className:"truncate",children:A||`Auto — ${$[0]||"first model"}`})]}),A&&(0,s.jsx)("button",{onClick:()=>p({judgeModel:""}),className:"p-1 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10",title:"Reset to Auto",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]}),e&&(0,s.jsx)("p",{className:"text-[10px] text-red-500",children:A?"⚠ Web cookie providers cannot serve as Judge (no tool use / file access)":`⚠ Auto-fallback to "${t}" (first combo model) — web cookie cannot serve as Judge`})]})})()]}),E&&(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted mb-1.5",children:"Swarm Roles"}),(0,s.jsxs)("div",{className:"flex flex-col gap-1.5",children:[[{key:"manager",label:"Manager",icon:"psychology",value:T,placeholder:`Auto — ${$[0]||"first"}`},{key:"staff",label:"Staff",icon:"badge",value:P,placeholder:"Same as Manager"},{key:"audit",label:"Audit",icon:"fact_check",value:z,placeholder:"Same as Staff"}].map(e=>{let{blocked:t,provider:a}=k(e.value,$);return(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-xs font-medium text-text-muted w-16",children:e.label}),(0,s.jsxs)("button",{onClick:()=>M(e.key),className:`inline-flex max-w-full items-center gap-1 rounded border border-dashed px-2 py-0.5 font-mono text-[11px] hover:bg-primary/5 ${t?"border-red-400 text-red-500 hover:border-red-500":"border-primary/40 text-primary hover:border-primary"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:e.icon}),(0,s.jsx)("span",{className:"truncate",children:e.value||e.placeholder})]}),e.value&&(0,s.jsx)("button",{onClick:()=>p({[`${e.key}Model`]:""}),className:"p-0.5 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10",title:`Reset ${e.label}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"close"})})]}),t&&(0,s.jsx)("p",{className:"text-[10px] text-red-500 pl-[76px]",children:e.value?`⚠ Web cookie providers cannot serve as ${e.label} (no tool use / file access)`:`⚠ Auto-fallback to "${a}" (first combo model) — web cookie cannot serve as ${e.label}`})]},e.key)}),(0,s.jsxs)("div",{className:"flex items-center gap-2 text-[11px] text-text-muted",children:[(0,s.jsx)("span",{className:"font-medium",children:"Workers"}),(0,s.jsxs)("span",{children:["= combo models (",$.length,")"]}),(0,s.jsx)("span",{className:"text-text-subtle",children:"\xb7"}),(0,s.jsx)("a",{href:"/dashboard/swarm",className:"text-primary hover:underline",children:"Telemetry →"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-3 mt-1",children:[(0,s.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,s.jsx)("input",{type:"checkbox",checked:u.autoScale?.enabled===!0,onChange:e=>p({autoScale:{...u.autoScale||{},enabled:e.target.checked}}),className:"rounded border-border accent-primary"}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Auto-scale"})]}),u.autoScale?.enabled&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"flex items-center gap-1",children:[(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Min:"}),(0,s.jsx)("input",{type:"number",min:1,max:u.autoScale?.maxWorkers||8,value:u.autoScale?.minWorkers??1,onChange:e=>p({autoScale:{...u.autoScale||{},minWorkers:Number(e.target.value)||1}}),className:"w-10 rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono text-center focus:outline-none focus:border-primary"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1",children:[(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Max:"}),(0,s.jsx)("input",{type:"number",min:1,max:8,value:u.autoScale?.maxWorkers??$.length,onChange:e=>p({autoScale:{...u.autoScale||{},maxWorkers:Number(e.target.value)||1}}),className:"w-10 rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono text-center focus:outline-none focus:border-primary"})]})]})]})]})]}),(0,s.jsxs)("div",{className:"mt-3 border-t border-border-subtle pt-3",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wide text-text-muted",children:"Thinking"}),(0,s.jsx)("button",{onClick:()=>J(B.length>0?[]:(O?y:E?v:[]).map(e=>e.key)),className:"text-[10px] text-primary hover:underline",children:B.length>0?"Hide roles":`Role overrides${W?" ("+Object.keys(D.roles||{}).length+")":""}`})]}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted",children:"Mode:"}),(0,s.jsx)("select",{value:R,onChange:e=>H({type:e.target.value}),className:"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] font-mono focus:outline-none focus:border-primary",children:b.map(e=>{let t="auto"===e.value||"off"===e.value||"effort"===e.value&&U||"extended"===e.value&&Z;return(0,s.jsxs)("option",{value:e.value,disabled:!t,className:t?"":"text-text-muted",children:[e.label,t?"":" (not supported)"]},e.value)})})]}),V.length>0&&(0,s.jsxs)("div",{className:"flex items-center gap-1 text-amber-600 dark:text-amber-400",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),(0,s.jsxs)("span",{className:"text-[10px]",children:[R," not supported by ",V.map(e=>e.model.split("/").pop()).join(", ")]})]}),G.length>0&&"auto"!==R&&"off"!==R&&(0,s.jsxs)("div",{className:"flex items-center gap-1 text-amber-600 dark:text-amber-400",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),(0,s.jsxs)("span",{className:"text-[10px]",children:["Thinking capability unknown for ",G.map(e=>e.model.split("/").pop()).join(", ")]})]}),"effort"===R&&(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted",children:"Effort:"}),(0,s.jsx)("select",{value:D.effort||"high",onChange:e=>H({effort:e.target.value}),className:"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] font-mono focus:outline-none focus:border-primary",children:g.map(e=>{let t="max"!==e.value||I;return(0,s.jsxs)("option",{value:e.value,disabled:!t,className:t?"":"text-text-muted",children:[e.label,t?"":" (not supported)"]},e.value)})})]}),"extended"===R&&(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted",children:"Budget:"}),(0,s.jsx)("input",{type:"number",min:1024,max:128e3,step:1024,value:D.budgetTokens||4096,onChange:e=>H({budgetTokens:Number(e.target.value)||4096}),className:"w-20 rounded border border-border bg-background px-1.5 py-0.5 text-[11px] font-mono focus:outline-none focus:border-primary"})]})]}),B.length>0&&W&&(0,s.jsxs)("div",{className:"mt-2 flex flex-col gap-1.5 pl-1",children:[(0,s.jsx)("p",{className:"text-[10px] text-text-muted",children:"Per-role overrides (leave as parent to inherit global)"}),(O?y:E?v:[]).map(e=>{let t,a=(t=e.key,D?.roles?.[t]);return(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px] text-text-muted",children:e.icon}),(0,s.jsx)("span",{className:"text-[11px] font-medium text-text-muted w-12",children:e.label}),(0,s.jsxs)("select",{value:a?.type||"inherit",onChange:t=>q(e.key,"inherit"===t.target.value?null:{type:t.target.value}),className:"rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono focus:outline-none focus:border-primary",children:[(0,s.jsx)("option",{value:"inherit",children:"Inherit"}),(0,s.jsx)("option",{value:"off",children:"Off"}),(0,s.jsxs)("option",{value:"effort",disabled:!U,className:U?"":"text-text-muted",children:["Effort",U?"":" (not supported)"]}),(0,s.jsxs)("option",{value:"extended",disabled:!Z,className:Z?"":"text-text-muted",children:["Extended",Z?"":" (not supported)"]})]}),a?.type==="effort"&&(0,s.jsx)("select",{value:a.effort||"high",onChange:t=>q(e.key,{type:"effort",effort:t.target.value}),className:"rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono focus:outline-none focus:border-primary",children:g.map(e=>{let t="max"!==e.value||I;return(0,s.jsxs)("option",{value:e.value,disabled:!t,className:t?"":"text-text-muted",children:[e.label,t?"":" (not supported)"]},e.value)})}),a?.type==="extended"&&(0,s.jsx)("input",{type:"number",min:1024,max:128e3,step:1024,value:a.budgetTokens||4096,onChange:t=>q(e.key,{type:"extended",budgetTokens:Number(t.target.value)||4096}),className:"w-16 rounded border border-border bg-background px-1 py-0.5 text-[10px] font-mono focus:outline-none focus:border-primary"}),a&&(0,s.jsx)("button",{onClick:()=>q(e.key,null),className:"p-0.5 rounded text-text-muted hover:text-red-500",title:"Reset to inherit",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},e.key)})]})]}),(0,s.jsxs)("div",{className:"text-xs text-text-muted bg-black/[0.02] dark:bg-white/[0.02] rounded px-2 py-1.5",children:[(0,s.jsxs)("span",{className:"font-medium",children:[x(F),":"]})," ",c.find(e=>e.value===F)?.desc]})]}),(0,s.jsx)(o.rq,{isOpen:j,onClose:()=>N(!1),onSelect:e=>{p({judgeModel:e?.value||""}),N(!1)},activeProviders:w(a),title:"Select Judge Model",addedModelValues:A?[A]:[],closeOnSelect:!0}),S&&(0,s.jsx)(o.rq,{isOpen:!0,onClose:()=>M(null),onSelect:e=>{p({[`${S}Model`]:e?.value||""}),M(null)},activeProviders:w(a),title:`Select ${"manager"===S?"Manager":"staff"===S?"Staff":"Audit"} Model`,addedModelValues:"manager"===S?T?[T]:[]:"staff"===S?P?[P]:[]:z?[z]:[],closeOnSelect:!0})]})}function S({combos:e,modelCaps:t,activeProviders:a,comboStrategies:r,copied:n,copy:i,onEdit:c,onDelete:d,onSetStrategy:m,onCreate:x}){let[h,f]=(0,l.useState)(""),[b,g]=(0,l.useState)("all"),[v,y]=(0,l.useState)("name"),j=(0,l.useMemo)(()=>{var t;let a;return t=function(e,t,a,s){let l=e;if("all"!==a&&(l=l.filter(e=>(s[e.name]?.fallbackStrategy||"fallback")===a)),t.trim()){let e=t.trim().toLowerCase();l=l.filter(t=>t.name.toLowerCase().includes(e)||(t.models||[]).some(t=>t.toLowerCase().includes(e)))}return l}(e,h,b,r),a=[...t],"models-desc"===v?a.sort((e,t)=>(t.models?.length||0)-(e.models?.length||0)):"models-asc"===v?a.sort((e,t)=>(e.models?.length||0)-(t.models?.length||0)):a.sort((e,t)=>e.name.localeCompare(t.name)),a},[e,h,b,v,r]);return 0===e.length?(0,s.jsx)(o.pp,{icon:"layers",title:"No combos yet",description:"Create model combos with fallback, round-robin, fusion, or swarm strategies",actionText:"Create Combo",onAction:x}):(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsx)(o.pd,{placeholder:"Search combos or models...",value:h,onChange:e=>f(e.target.value),className:"sm:max-w-xs"}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("div",{className:"flex flex-wrap gap-1",children:u.map(e=>(0,s.jsx)("button",{onClick:()=>g(e.value),className:`rounded-full px-2.5 py-1 text-xs font-medium transition-colors ${b===e.value?"bg-primary/15 text-primary ring-1 ring-primary/20":"bg-surface-2 text-text-muted hover:text-text-main"}`,children:e.label},e.value))}),(0,s.jsx)("select",{value:v,onChange:e=>y(e.target.value),className:"appearance-none rounded-lg border border-border bg-surface-2 py-1.5 pl-3 pr-8 text-xs text-text-main [-webkit-appearance:none] [-moz-appearance:none] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30",children:p.map(e=>(0,s.jsx)("option",{value:e.value,children:e.label},e.value))})]})]}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:j.length===e.length?`${e.length} combo${1!==e.length?"s":""}`:`${j.length} of ${e.length} combos`}),0===j.length?(0,s.jsx)(o.Zp,{children:(0,s.jsxs)("div",{className:"py-8 text-center text-sm text-text-muted",children:['No combos match "',h,'" ',"all"!==b&&`with ${b} strategy`]})}):(0,s.jsx)("div",{className:"flex flex-col gap-3",children:j.map(e=>(0,s.jsx)(C,{combo:e,modelCaps:t,activeProviders:a,copied:n,onCopy:i,onEdit:()=>c(e),onDelete:()=>d(e.id),strategy:r[e.name]||{},onSetStrategy:t=>m(e.name,t)},e.id))})]})}let M=[{id:"always-on",name:"Always-On (5-Layer Fallback)",description:"Zero-downtime coding with 5 layers of fallback. Mix of subscription, cheap, and free tiers — if any model fails, the next picks up automatically.",icon:"shield",category:"reliability",strategy:"fallback",models:["claude-opus-4-7","gpt-5.4","glm-5.1","MiniMax-M2.7","claude-sonnet-4.5"],preferredProviders:{"claude-opus-4-7":"cc","gpt-5.4":"cx","glm-5.1":"glm","MiniMax-M2.7":"minimax","claude-sonnet-4.5":"kr"}},{id:"max-reasoning-swarm",name:"Max Reasoning Swarm",description:"Deep multi-agent analysis for complex coding tasks. Manager decomposes the problem, workers solve subtasks in parallel, audit reviews the result. Manager thinks at max effort.",icon:"psychology",category:"reasoning",strategy:"swarm",models:["claude-opus-4-7","gpt-5.4","glm-5.1","claude-sonnet-4.5"],preferredProviders:{"claude-opus-4-7":"cc","gpt-5.4":"cx","glm-5.1":"glm","claude-sonnet-4.5":"kr"},strategyConfig:{fallbackStrategy:"swarm",managerModel:"claude-opus-4-7",auditModel:"claude-sonnet-4.5",thinking:{type:"effort",effort:"high",roles:{manager:{type:"effort",effort:"max"},worker:{type:"effort",effort:"medium"},audit:{type:"effort",effort:"high"}}},autoScale:{enabled:!0,minWorkers:2,maxWorkers:4}}},{id:"flash-fusion",name:"Flash Fusion",description:"Two fast models answer in parallel, a judge picks the best result. Low latency with a quality check — great for everyday coding questions.",icon:"bolt",category:"balanced",strategy:"fusion",models:["gpt-5.4","MiniMax-M2.7"],preferredProviders:{"gpt-5.4":"cx","MiniMax-M2.7":"minimax"},strategyConfig:{fallbackStrategy:"fusion",thinking:{type:"effort",effort:"medium"}}},{id:"penny-pincher",name:"Penny-Pincher",description:"Ultra-low-cost daily driver built from cheap and free tiers. Thinking disabled to keep tokens minimal. Use for simple tasks where cost matters most.",icon:"savings",category:"budget",strategy:"fallback",models:["MiniMax-M2.7","glm-5.1","gpt-5.4"],preferredProviders:{"MiniMax-M2.7":"minimax","glm-5.1":"glm","gpt-5.4":"kr"},strategyConfig:{fallbackStrategy:"fallback",thinking:{type:"off"}}},{id:"bug-hunter",name:"Bug Hunter",description:"Three models independently diagnose the same bug, a strong judge picks the most likely root cause. High-precision debugging with thinking on.",icon:"bug_report",category:"debugging",strategy:"fusion",models:["gpt-5.4","glm-5.1","MiniMax-M2.7"],preferredProviders:{"gpt-5.4":"cx","glm-5.1":"glm","MiniMax-M2.7":"minimax"},strategyConfig:{fallbackStrategy:"fusion",thinking:{type:"effort",effort:"high"}}}];function $({combos:e,connections:t,modelIndex:a={},onApply:r}){let[n,i]=(0,l.useState)(null),c=new Set(t?.filter(e=>!1!==e.isActive).map(e=>e.provider)||[]),d=new Set((e||[]).map(e=>e.name)),u=e=>(e.models||[]).map(t=>{let s=t.indexOf("/"),l=s>0,r=l?t.slice(s+1):t,o=(l?t.slice(0,s):"")||(e.preferredProviders||{})[r]||"",n=o?(0,f.rs)(o):"",i=(a[r]||[]).map(e=>(0,f.rs)(e)).filter(e=>c.has(e));if(n&&i.includes(n)){let e=(0,f.wG)(n);return{ref:t,modelName:r,provider:n,providerAlias:e,full:`${e}/${r}`,available:!0}}if(i.length>0){let e=(0,f.wG)(i[0]);return{ref:t,modelName:r,provider:i[0],providerAlias:e,full:`${e}/${r}`,available:!0,resolvedFrom:o}}return{ref:t,modelName:r,provider:n||o,full:l?t:r,available:!1}}),p=async e=>{i(e.id);try{let t=u(e),a=t.filter(e=>e.available).map(e=>e.full),s=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,models:a,kind:null})});if(!s.ok){let e=await s.json();alert(e.error||"Failed to create combo from template");return}let l=await fetch("/api/settings").then(e=>e.json()).catch(()=>({})),o=e.strategyConfig?{...e.strategyConfig}:{fallbackStrategy:e.strategy},n=Object.fromEntries(t.map(e=>[e.modelName,e.full]));for(let e of["managerModel","staffModel","auditModel","judgeModel"]){let t=o[e];if(!t)continue;let a=t.indexOf("/"),s=a>0?t.slice(a+1):t;n[s]&&(o[e]=n[s])}let i={...l?.comboStrategies||{},[e.name]:o},c=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:i})});if(!c.ok){let e=await c.json().catch(()=>({}));alert(e.error||"Failed to apply template strategy");return}r&&r()}catch(e){alert("Failed to apply template: "+(e?.message||String(e)))}finally{i(null)}};return 0===M.length?(0,s.jsx)(o.pp,{icon:"dashboard_customize",title:"No templates available",description:"Combo templates will appear here when added."}):(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"mb-1",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"Combo Templates"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:"One-click prebuilt combos. Provider availability is checked automatically."})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",children:M.map(e=>{let t=u(e),a=t.filter(e=>e.available).length,l=t.length,r=d.has(e.name),i=m(e.strategy),c=a===l;return(0,s.jsxs)(o.Zp,{padding:"sm",className:"flex flex-col gap-3 hover:border-primary/20 transition-all",children:[(0,s.jsxs)("div",{className:"flex items-start justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,s.jsx)("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${i.color}15`},children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:i.color},children:e.icon||i.icon})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm font-semibold text-text-main",children:e.name}),(0,s.jsx)(o.Ex,{variant:i.badge,size:"sm",children:x(e.strategy)})]})]}),r&&(0,s.jsx)(o.Ex,{variant:"success",size:"sm",dot:!0,children:"Created"})]}),(0,s.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:e.description}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-1",children:[t.slice(0,4).map((e,t)=>(0,s.jsxs)("code",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-mono text-[10px] ${e.available?"bg-black/5 text-text-muted dark:bg-white/5":"bg-red-500/10 text-red-500"}`,title:e.available?`Resolved to ${e.provider}`:`No connected provider has ${e.modelName}`,children:[(0,s.jsx)("span",{className:e.available?"text-success":"text-red-500",children:e.available?"✓":"✗"}),(0,s.jsx)("span",{className:"truncate max-w-[110px]",children:e.modelName}),e.available&&(0,s.jsx)("span",{className:"rounded bg-black/10 px-0.5 text-[9px] dark:bg-white/10",children:e.provider})]},t)),t.length>4&&(0,s.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",t.length-4," more"]})]}),(0,s.jsx)("div",{className:"flex flex-wrap gap-1",children:t.map(e=>{let t=e.resolvedFrom?(0,f.rs)(e.resolvedFrom):"",a=e.available?`${e.provider}${e.resolvedFrom&&t!==e.provider?` (via ${e.resolvedFrom})`:""}`:`${e.provider||"?"} (missing)`,l=e.available;return(0,s.jsxs)("span",{className:`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[10px] font-medium ${l?"bg-success/10 text-success":"bg-surface-2 text-text-muted"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[10px]",children:l?"check_circle":"radio_button_unchecked"}),a]},e.ref)})}),(0,s.jsx)("div",{className:"mt-auto pt-1",children:(0,s.jsx)(o.$n,{size:"sm",fullWidth:!0,variant:r?"secondary":"primary",icon:n===e.id?"progress_activity":"add",disabled:r||n===e.id||!c,onClick:()=>p(e),children:n===e.id?"Creating...":r?"Already Created":c?"Apply Template":`Apply (${a}/${l} ready)`})})]},e.id)})})]})}var F=a(44923),A=a(87256),O=a(5020),E=a(39768);function T({id:e,index:t,model:a,isFirst:r,isLast:n,modelCaps:i,onEdit:c,onMoveUp:d,onMoveDown:m,onRemove:x}){let{attributes:u,listeners:p,setNodeRef:h,transform:f,isDragging:b}=(0,A.gl)({id:e}),g={transform:E.Ks.Transform.toString(f),opacity:b?.5:1,zIndex:b?999:void 0},[v,y]=(0,l.useState)(!1),[j,N]=(0,l.useState)(a),k=()=>{let e=j.trim();e&&e!==a?c(e):N(a),y(!1)};return(0,s.jsxs)("div",{ref:h,style:g,className:`group flex min-w-0 items-center gap-2 rounded-lg border px-2.5 py-1.5 transition-all ${b?"border-primary/40 bg-panel shadow-md ring-1 ring-primary/20":"border-transparent bg-panel hover:border-border-subtle"}`,children:[(0,s.jsx)("span",{className:"flex size-5 shrink-0 items-center justify-center rounded bg-primary/10 text-[10px] font-bold text-primary",children:t+1}),(0,s.jsx)("button",{...u,...p,type:"button",className:"cursor-grab touch-none shrink-0 p-0.5 rounded text-text-muted/50 hover:text-text-main active:cursor-grabbing",title:"Drag to reorder",children:(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",children:[(0,s.jsx)("circle",{cx:"9",cy:"4",r:"1.5"}),(0,s.jsx)("circle",{cx:"15",cy:"4",r:"1.5"}),(0,s.jsx)("circle",{cx:"9",cy:"12",r:"1.5"}),(0,s.jsx)("circle",{cx:"15",cy:"12",r:"1.5"}),(0,s.jsx)("circle",{cx:"9",cy:"20",r:"1.5"}),(0,s.jsx)("circle",{cx:"15",cy:"20",r:"1.5"})]})}),v?(0,s.jsx)("input",{autoFocus:!0,value:j,onChange:e=>N(e.target.value),onBlur:k,onKeyDown:e=>{"Enter"===e.key&&k(),"Escape"===e.key&&(N(a),y(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-panel px-1.5 py-0.5 font-mono text-xs text-text-main outline-none"}):(0,s.jsxs)("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 cursor-text rounded px-1 py-0.5 hover:bg-black/[0.03] dark:hover:bg-white/[0.03]",onClick:()=>y(!0),title:"Click to edit",children:[(0,s.jsx)("code",{className:"min-w-0 flex-1 truncate font-mono text-xs text-text-main",children:a}),i?.[a]&&(0,s.jsx)(o.nh,{caps:i[a],size:11})]}),(0,s.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5 opacity-0 transition-opacity group-hover:opacity-100",children:[(0,s.jsx)("button",{onClick:d,disabled:r,className:`rounded p-1 transition-colors ${r?"cursor-not-allowed text-text-muted/20":"text-text-muted hover:bg-black/5 hover:text-primary dark:hover:bg-white/5"}`,title:"Move up",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"arrow_upward"})}),(0,s.jsx)("button",{onClick:m,disabled:n,className:`rounded p-1 transition-colors ${n?"cursor-not-allowed text-text-muted/20":"text-text-muted hover:bg-black/5 hover:text-primary dark:hover:bg-white/5"}`,title:"Move down",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"arrow_downward"})})]}),(0,s.jsx)("button",{onClick:x,className:"shrink-0 rounded p-1 text-text-muted opacity-0 transition-all hover:bg-danger/10 hover:text-danger group-hover:opacity-100",title:"Remove model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})}function P({isOpen:e,combo:t,onClose:a,onSave:r,activeProviders:n,modelCaps:d={},kindFilter:m=null}){let[x,u]=(0,l.useState)(t?.name||""),[p,h]=(0,l.useState)(t?.models||[]),[f,b]=(0,l.useState)(!1),[g,v]=(0,l.useState)(!1),[y,j]=(0,l.useState)(""),[N,k]=(0,l.useState)({}),[w,C]=(0,l.useState)(e);(0,l.useEffect)(()=>{e&&!w&&(u(t?.name||""),h(Array.isArray(t?.models)?[...t.models]:[]),j(""),b(!1)),C(e)},[e,w,t]);let S=(0,F.FR)((0,F.MS)(F.AN,{activationConstraint:{distance:5}}),(0,F.MS)(F.uN,{coordinateGetter:A.JR})),M=p.map((e,t)=>({uid:`item-${t}`,model:e}));(0,l.useEffect)(()=>{if(!e)return;let t=!1;return(async()=>{try{let e=await fetch("/api/models/alias");if(!t&&e.ok){let t=await e.json();k(t.aliases||{})}}catch{}})(),()=>{t=!0}},[e]);let $=e=>e.trim()?i.test(e)?(j(""),!0):(j("Only letters, numbers, -, _ and . allowed"),!1):(j("Name is required"),!1),E=async()=>{$(x)&&(v(!0),await r({name:x.trim(),models:p}),v(!1))},z=!!t;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.aF,{isOpen:e,onClose:a,title:z?"Edit Combo":"Create Combo",size:"lg",children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(o.pd,{label:"Combo Name",value:x,onChange:e=>{let t=e.target.value;u(t),t?$(t):j("")},placeholder:"my-combo",error:y}),(0,s.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,s.jsx)("p",{className:"text-[10px] text-text-muted",children:"Use this name as the model in your client:"}),x.trim()&&(0,s.jsx)("code",{className:"rounded bg-primary/10 px-1.5 py-0.5 font-mono text-[10px] text-primary",children:x.trim()})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("label",{className:"text-sm font-medium text-text-main",children:"Models"}),p.length>0&&(0,s.jsxs)(o.Ex,{variant:"info",size:"sm",children:[p.length," model",1!==p.length?"s":""]})]}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"Drag to reorder priority"})]}),0===p.length?(0,s.jsxs)("div",{className:"flex flex-col items-center justify-center py-8 border border-dashed border-border rounded-lg bg-surface-2/50",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-text-muted text-2xl mb-2",children:"layers"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mb-3",children:"Add models to build your combo"}),(0,s.jsx)(o.$n,{size:"sm",variant:"secondary",icon:"add",onClick:()=>b(!0),children:"Add First Model"})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(F.Mp,{sensors:S,collisionDetection:F.fp,onDragEnd:e=>{let{active:t,over:a}=e;if(a&&t.id!==a.id){let e=M.findIndex(e=>e.uid===t.id),s=M.findIndex(e=>e.uid===a.id);-1!==e&&-1!==s&&h(t=>(0,A.be)(t,e,s))}},modifiers:[O.FN,O.gj],children:(0,s.jsx)(A.gB,{items:M.map(e=>e.uid),strategy:A._G,children:(0,s.jsx)("div",{className:"flex max-h-[45vh] min-w-0 flex-col gap-1 overflow-y-auto rounded-lg bg-surface-2/30 p-1.5",children:M.map(({uid:e,model:t},a)=>(0,s.jsx)(T,{id:e,index:a,model:t,modelCaps:d,isFirst:0===a,isLast:a===M.length-1,onEdit:e=>{let t=[...p];t[a]=e,h(t)},onMoveUp:()=>(e=>{if(0===e)return;let t=[...p];[t[e-1],t[e]]=[t[e],t[e-1]],h(t)})(a),onMoveDown:()=>(e=>{if(e===p.length-1)return;let t=[...p];[t[e],t[e+1]]=[t[e+1],t[e]],h(t)})(a),onRemove:()=>{h(e=>e.filter((e,t)=>t!==a))}},e))})})}),(0,s.jsxs)("button",{onClick:()=>b(!0),className:"w-full mt-2 py-2 border border-dashed border-primary/30 rounded-lg text-xs text-primary font-medium hover:border-primary hover:bg-primary/5 transition-colors flex items-center justify-center gap-1.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"add"}),"Add Model"]})]})]}),p.length>=2&&(0,s.jsxs)("div",{className:"rounded-lg border border-border-subtle bg-surface-2/50 px-3 py-2",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 mb-1.5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"lightbulb"}),(0,s.jsx)("span",{className:"text-xs font-medium text-text-main",children:"Strategy Tips"})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-2",children:c.map(e=>(0,s.jsxs)("div",{className:"flex items-start gap-1.5 text-[11px] text-text-muted",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px] mt-0.5 text-primary/60",children:e.icon}),(0,s.jsxs)("span",{children:[(0,s.jsx)("span",{className:"font-medium text-text-main",children:e.label})," — ",e.desc]})]},e.value))}),(0,s.jsx)("p",{className:"mt-1.5 text-[10px] text-text-muted",children:"Set strategy after creating the combo from the Combos tab."})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-2 pt-1 sm:flex-row",children:[(0,s.jsx)(o.$n,{onClick:a,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,s.jsx)(o.$n,{onClick:E,fullWidth:!0,size:"sm",icon:z?"save":"add",disabled:!x.trim()||!!y||g,children:g?"Saving...":z?"Save Changes":"Create Combo"})]})]})}),(0,s.jsx)(o.rq,{isOpen:f,onClose:()=>b(!1),onSelect:e=>{h(t=>t.includes(e.value)?t:[...t,e.value])},onDeselect:e=>{h(t=>t.filter(t=>t!==e.value))},activeProviders:n,modelAliases:N,title:"Add Model to Combo",kindFilter:m,addedModelValues:p,closeOnSelect:!1})]})}let z=[{value:"overview",label:"Overview"},{value:"combos",label:"Combos"},{value:"templates",label:"Templates"}];function _(){let e=(0,r.useRouter)(),t=(0,r.useSearchParams)().get("tab")||"overview",[a,i]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[m,x]=(0,l.useState)(!1),[u,p]=(0,l.useState)(null),[f,b]=(0,l.useState)([]),[g,v]=(0,l.useState)({}),[y,j]=(0,l.useState)({}),[N,k]=(0,l.useState)({}),[w,C]=(0,l.useState)(null),{copied:M,copy:F}=(0,n.C)(),A=(0,l.useCallback)(async()=>{try{let[e,t,a,s]=await Promise.all([fetch("/api/combos"),fetch("/api/providers"),fetch("/api/settings"),fetch("/api/models")]),l=await e.json(),r=await t.json(),o=a.ok?await a.json():{};if(e.ok&&i((l.combos||[]).filter(e=>!e.kind||"llm"===e.kind)),t.ok&&b(r.connections||[]),s.ok){let e=await s.json(),t={},a={};for(let s of e.models||[]){s.caps&&(t[s.fullModel]=s.caps);let e=(s.fullModel||"").split("/").slice(1).join("/");e&&s.provider&&(a[e]||(a[e]=[]),a[e].includes(s.provider)||a[e].push(s.provider))}j(t),k(a)}v(o.comboStrategies||{})}catch(e){console.log("Error fetching data:",e)}finally{d(!1)}},[]);(0,l.useEffect)(()=>{A()},[A]);let O=t=>e.push(`/dashboard/combos?tab=${t}`),E=async e=>{try{let t=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(t.ok)await A(),x(!1);else{let e=await t.json();alert(e.error||"Failed to create combo")}}catch(e){console.log("Error creating combo:",e)}},T=async(e,t)=>{try{let a=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(a.ok)await A(),p(null);else{let e=await a.json();alert(e.error||"Failed to update combo")}}catch(e){console.log("Error updating combo:",e)}},_=async(e,t)=>{try{let s=g[e]||{},l={...s,...t},r=l.fallbackStrategy,o=new Set(["fallbackStrategy","thinking","autoScale",...{fusion:["judgeModel","fusionTuning"],swarm:["managerModel","staffModel","auditModel","workerCount","swarmTuning","enableTelemetry"],cascade:["cascade"],fallback:[],"round-robin":[]}[r]||[]]),n={};for(let[e,t]of Object.entries(l))o.has(e)&&(n[e]=t);let i=Object.keys(s).some(e=>"fallbackStrategy"!==e&&null!=s[e]&&""!==s[e]),c=Object.keys(n).some(e=>"fallbackStrategy"!==e),d="fallback"===n.fallbackStrategy&&i&&!c;if(!d&&("swarm"===n.fallbackStrategy||"fusion"===n.fallbackStrategy)){let t=a.find(t=>t.name===e),s=t?.models||[];try{let e=await fetch("/api/combos/validate-roles",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({strategy:n.fallbackStrategy,managerModel:n.managerModel,staffModel:n.staffModel,auditModel:n.auditModel,judgeModel:n.judgeModel,panel:s})});if(e.ok){let t=await e.json();if(!t.valid&&Array.isArray(t.violations)&&t.violations.length>0){let e=t.violations.map(e=>`${e.role}: ${e.reason}`).join("\n");alert(`Cannot save strategy — invalid role models:
2
+
3
+ ${e}`);return}}}catch{}}await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:{[e]:d?null:n}})}),v(t=>{let a={...t};return d?delete a[e]:a[e]=n,a})}catch(e){console.log("Error updating combo strategy:",e)}};return c?(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)(o.Qv,{}),(0,s.jsx)(o.Qv,{})]}):(0,s.jsxs)("div",{className:"flex min-w-0 flex-col gap-5",children:[(0,s.jsx)(o.zY,{title:"Combos",description:"Group models under one name, then pick a strategy per combo",icon:"layers",actions:(0,s.jsx)(o.$n,{size:"sm",icon:"add",onClick:()=>x(!0),className:"whitespace-nowrap",children:"Create Combo"})}),(0,s.jsx)(o.Iz,{options:z,value:t,onChange:O}),"overview"===t&&(0,s.jsx)(h,{combos:a,comboStrategies:g,activeProviders:f,onViewCombos:()=>O("combos"),onCreate:()=>x(!0)}),"combos"===t&&(0,s.jsx)(S,{combos:a,modelCaps:y,activeProviders:f,comboStrategies:g,copied:M,copy:F,onEdit:p,onDelete:e=>{C({title:"Delete Combo",message:"Delete this combo?",onConfirm:async()=>{C(null);try{let t=await fetch(`/api/combos/${e}`,{method:"DELETE"});if(t.ok)i(t=>t.filter(t=>t.id!==e));else{let e=await t.json().catch(()=>({}));alert(e.error||`Failed to delete combo (${t.status})`)}}catch(e){console.log("Error deleting combo:",e),alert("Failed to delete combo — network error")}}})},onSetStrategy:_,onCreate:()=>x(!0)}),"templates"===t&&(0,s.jsx)($,{combos:a,connections:f,modelIndex:N,onApply:A}),(0,s.jsx)(P,{isOpen:m,onClose:()=>x(!1),onSave:E,activeProviders:f,modelCaps:y},"create"),(0,s.jsx)(P,{isOpen:!!u,combo:u,onClose:()=>p(null),onSave:e=>T(u.id,e),activeProviders:f,modelCaps:y},u?.id||"new"),(0,s.jsx)(o.uo,{isOpen:!!w,onClose:()=>C(null),onConfirm:w?.onConfirm,title:w?.title||"Confirm",message:w?.message,variant:"danger"})]})}function D(){return(0,s.jsx)(l.Suspense,{fallback:(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)("div",{className:"h-32 animate-pulse rounded-lg bg-sidebar"}),(0,s.jsx)("div",{className:"h-32 animate-pulse rounded-lg bg-sidebar"})]}),children:(0,s.jsx)(_,{})})}}},e=>{e.O(0,[27,7055,8105,1321,705,5497,8441,3794,7358],()=>e(e.s=49293)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8192],{31474:(e,t,s)=>{"use strict";function r(...e){return e.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}s.d(t,{cn:()=>r})},37466:(e,t,s)=>{"use strict";s.d(t,{default:()=>o});var r=s(95155),a=s(12115),n=s(56061),i=s(99312),l=s(31474),c=s(88105);function d(e){return null==e?"—":e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}function o(){let[e,t]=(0,a.useState)([]),[s,o]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=new EventSource("/api/health/stream");return e.onopen=()=>o(!0),e.onerror=()=>o(!1),e.onmessage=e=>{try{let s=JSON.parse(e.data);"snapshot"===s.type&&Array.isArray(s.providers)?t(s.providers):s.provider&&t(e=>{let t=e.findIndex(e=>e.provider===s.provider);if(t>=0){let r=[...e];return r[t]=s,r}return[...e,s]})}catch{}},()=>e.close()},[]),(0,r.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:(0,l.cn)("size-2 rounded-full",s?"bg-success animate-pulse":"bg-danger")}),s?"Live":"Reconnecting…"]}),e.length>0&&(0,r.jsxs)("div",{className:"flex items-center gap-3 text-xs text-text-muted",children:[(0,r.jsxs)("span",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"size-2 rounded-full bg-success"})," Healthy"]}),(0,r.jsxs)("span",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"size-2 rounded-full bg-warning"})," Degraded"]}),(0,r.jsxs)("span",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"size-2 rounded-full bg-danger"})," Unhealthy"]})]})]}),0===e.length?(0,r.jsx)(i.default,{icon:"monitor_heart",title:"No health data yet",description:"Provider health metrics will appear here once requests flow through the gateway. Send a request to any provider to start collecting samples."}):(0,r.jsx)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",children:e.map(e=>{var t;let s,a=function(e,t){if(0===t)return{label:"Unknown",variant:"default",color:"text-text-subtle",bar:"bg-text-subtle"};let s=e??0;return s>=.95?{label:"Healthy",variant:"success",color:"text-success",bar:"bg-success"}:s>=.8?{label:"Degraded",variant:"warning",color:"text-warning",bar:"bg-warning"}:{label:"Unhealthy",variant:"error",color:"text-danger",bar:"bg-danger"}}(e.successRate,e.total),i=null!=e.successRate?Math.round(100*e.successRate):null;return(0,r.jsxs)("div",{className:"rounded-panel border border-border-subtle bg-panel p-4 shadow-[var(--shadow-soft)]",children:[(0,r.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,r.jsx)("h3",{className:"truncate font-mono text-sm font-semibold text-text-main",children:(t=e.provider,s=c.Q2[t],s?.name?s.name:t.replace(/-/g," ").replace(/\b\w/g,e=>e.toUpperCase()))}),(0,r.jsx)(n.default,{variant:a.variant,dot:!0,size:"sm",children:a.label})]}),null!=i&&(0,r.jsxs)("div",{className:"mb-3",children:[(0,r.jsxs)("div",{className:"mb-1 flex items-center justify-between text-xs text-text-muted",children:[(0,r.jsx)("span",{children:"Success rate"}),(0,r.jsxs)("span",{className:(0,l.cn)("font-mono font-semibold",a.color),children:[i,"%"]})]}),(0,r.jsx)("div",{className:"h-1.5 overflow-hidden rounded-full bg-surface-2",children:(0,r.jsx)("div",{className:(0,l.cn)("h-full rounded-full transition-all",a.bar),style:{width:`${i}%`}})})]}),(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[(0,r.jsxs)("div",{className:"rounded-md bg-surface-2 p-2",children:[(0,r.jsx)("div",{className:"text-text-subtle",children:"Requests"}),(0,r.jsx)("div",{className:"font-mono font-semibold text-text-main",children:e.total})]}),(0,r.jsxs)("div",{className:"rounded-md bg-surface-2 p-2",children:[(0,r.jsx)("div",{className:"text-text-subtle",children:"Failures"}),(0,r.jsx)("div",{className:(0,l.cn)("font-mono font-semibold",e.failures>0?"text-danger":"text-text-main"),children:e.failures})]}),(0,r.jsxs)("div",{className:"rounded-md bg-surface-2 p-2",children:[(0,r.jsx)("div",{className:"text-text-subtle",children:"Avg latency"}),(0,r.jsx)("div",{className:"font-mono font-semibold text-text-main",children:d(e.avgLatencyMs)})]}),(0,r.jsxs)("div",{className:"rounded-md bg-surface-2 p-2",children:[(0,r.jsx)("div",{className:"text-text-subtle",children:"p95 latency"}),(0,r.jsx)("div",{className:"font-mono font-semibold text-text-main",children:d(e.p95LatencyMs)})]})]}),e.lastError&&(0,r.jsxs)("div",{className:"mt-3 flex items-center gap-1.5 text-xs text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[13px] text-danger",children:"error"}),"Last error: ",(0,r.jsx)("span",{className:"font-mono",children:e.lastError})," \xb7 ",function(e){if(!e)return"—";let t=Date.now()-e;return t<5e3?"just now":t<6e4?`${Math.floor(t/1e3)}s ago`:t<36e5?`${Math.floor(t/6e4)}m ago`:new Date(e).toLocaleTimeString()}(e.lastErrorAt)]})]},e.provider)})})]})}},40208:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var r=s(95155),a=s(12115),n=s(92542),i=s(56061),l=s(99312);let c={closed:{label:"Closed",variant:"success"},halfOpen:{label:"Half-open (probing)",variant:"warning"},open:{label:"Open",variant:"error"}};function d(){let[e,t]=(0,a.useState)([]),s=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/breaker");if(!e.ok)return;let s=await e.json();t(s.breakers||[])}catch{}},[]);(0,a.useEffect)(()=>{s();let e=setInterval(s,3e3);return()=>clearInterval(e)},[s]);let d=async e=>{try{await fetch("/api/breaker",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e,key:e})})}catch{}s()},o=async()=>{for(let t of e)try{await fetch("/api/breaker",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,key:t.provider})})}catch{}s()};return(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"Circuit Breakers"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(n.default,{size:"sm",variant:"ghost",icon:"refresh",onClick:s,children:"Refresh"}),e.length>0&&(0,r.jsx)(n.default,{size:"sm",variant:"danger",icon:"bolt",onClick:o,children:"Reset all"})]})]}),0===e.length?(0,r.jsx)(l.default,{icon:"bolt",title:"No opened circuit breakers",description:"Breakers trip when a provider repeatedly fails and recover automatically after cooldown. Opened breakers will appear here so you can inspect or force-close them."}):(0,r.jsx)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3",children:e.map(e=>{var t;let s=c[e.state]||c.closed;return(0,r.jsxs)("div",{className:"rounded-panel border border-border-subtle bg-panel p-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("div",{className:"truncate font-mono text-xs font-semibold text-text-main",children:String((t=e.provider)||"").split(":")[0]||t}),(0,r.jsx)("div",{className:"truncate text-[11px] text-text-subtle",children:e.provider})]}),(0,r.jsx)(i.default,{variant:s.variant,dot:!0,size:"sm",children:s.label})]}),(0,r.jsxs)("div",{className:"mt-2 flex items-center justify-between text-xs text-text-muted",children:[(0,r.jsxs)("span",{children:["Failures: ",(0,r.jsx)("span",{className:"font-mono",children:e.failures})]}),"open"===e.state&&(0,r.jsxs)("span",{children:["Cooldown: ",(0,r.jsx)("span",{className:"font-mono",children:function(e){if(null==e)return"—";let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let s=Math.floor(t/60);return`${s}m ${t%60}s`}(e.cooldownRemainingMs)})]})]}),(0,r.jsx)(n.default,{size:"sm",variant:"secondary",icon:"replay",className:"mt-3 w-full",onClick:()=>d(e.provider),children:"Close breaker"})]},e.provider)})})]})}},54642:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},54960:(e,t,s)=>{"use strict";s.d(t,{default:()=>n});var r=s(95155),a=s(31474);function n({title:e,description:t,icon:s,iconNode:i,actions:l,breadcrumbs:c,className:d}){return(0,r.jsxs)("div",{className:(0,a.cn)("mb-6",d),children:[c?.length>0&&(0,r.jsx)("nav",{className:"mb-2 flex items-center gap-1.5 text-xs text-text-muted",children:c.map((e,t)=>(0,r.jsxs)("span",{className:"flex items-center gap-1.5",children:[t>0&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[12px] opacity-60",children:"chevron_right"}),e.href?(0,r.jsx)("a",{href:e.href,className:"transition-colors hover:text-primary",children:e.label}):(0,r.jsx)("span",{className:"font-medium text-text-main",children:e.label})]},t))}),(0,r.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,r.jsxs)("div",{className:"flex min-w-0 items-start gap-3",children:[i?(0,r.jsx)("div",{className:"mt-0.5 shrink-0",children:i}):s&&(0,r.jsx)("div",{className:"mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-brand bg-primary/10 text-primary ring-1 ring-primary/15",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:s})}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h1",{className:"truncate text-xl font-semibold tracking-tight text-text-main",children:e}),t&&(0,r.jsx)("p",{className:"mt-0.5 text-sm text-text-muted",children:t})]})]}),l&&(0,r.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:l})]})]})}},56061:(e,t,s)=>{"use strict";s.d(t,{default:()=>c});var r=s(95155),a=s(31474);let n={default:"bg-surface-2 text-text-muted ring-1 ring-border-subtle",primary:"bg-primary/12 text-primary ring-1 ring-primary/20",success:"bg-success/12 text-success ring-1 ring-success/20",warning:"bg-warning/12 text-warning ring-1 ring-warning/20",error:"bg-danger/12 text-danger ring-1 ring-danger/20",info:"bg-info/12 text-info ring-1 ring-info/20",cyan:"bg-cyan/12 text-cyan ring-1 ring-cyan/20"},i={default:"bg-text-subtle",primary:"bg-primary",success:"bg-success",warning:"bg-warning",error:"bg-danger",info:"bg-info",cyan:"bg-cyan"},l={sm:"px-2 py-0.5 text-xs",md:"px-2.5 py-1 text-xs",lg:"px-3 py-1.5 text-sm"};function c({children:e,variant:t="default",size:s="md",dot:d=!1,icon:o,className:m}){return(0,r.jsxs)("span",{className:(0,a.cn)("inline-flex items-center gap-1.5 rounded-full font-semibold leading-none",n[t],l[s],m),children:[d&&(0,r.jsx)("span",{className:(0,a.cn)("size-1.5 rounded-full",i[t])}),o&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:o}),e]})}},56665:(e,t,s)=>{Promise.resolve().then(s.bind(s,40208)),Promise.resolve().then(s.bind(s,37466)),Promise.resolve().then(s.bind(s,54960))},92542:(e,t,s)=>{"use strict";s.d(t,{default:()=>l});var r=s(95155),a=s(31474);let n={primary:"bg-primary hover:bg-primary-hover text-white shadow-[0_0_0_1px_rgba(255,255,255,0.08)_inset,0_10px_30px_-18px_rgba(139,92,246,0.75)] disabled:bg-surface-3 disabled:text-text-muted",secondary:"bg-surface-2 hover:bg-surface-3 text-text-main border border-border disabled:opacity-50",outline:"border border-border text-text-main hover:bg-surface-2 hover:border-primary/45",ghost:"text-text-muted hover:bg-surface-2 hover:text-text-main",danger:"bg-danger hover:brightness-110 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted",success:"bg-success hover:brightness-110 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted"},i={sm:"h-7 px-3 text-xs rounded-brand",md:"h-9 px-4 text-sm rounded-brand",lg:"h-10 px-5 text-sm rounded-brand"};function l({children:e,variant:t="primary",size:s="md",icon:c,iconRight:d,disabled:o=!1,loading:m=!1,fullWidth:x=!1,className:u,...f}){return(0,r.jsxs)("button",{className:(0,a.cn)("inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer","active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/35 focus-visible:ring-offset-2 focus-visible:ring-offset-bg",n[t],i[s],x&&"w-full",u),disabled:o||m,...f,children:[m?(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin text-[16px]",children:"progress_activity"}):c?(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:c}):null,e,d&&!m&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:d})]})}},99312:(e,t,s)=>{"use strict";s.d(t,{default:()=>i});var r=s(95155),a=s(31474),n=s(92542);function i({icon:e="inbox",title:t="No items found",description:s="There's nothing here yet.",action:l,actionText:c,onAction:d,className:o}){return(0,r.jsxs)("div",{className:(0,a.cn)("flex flex-col items-center justify-center rounded-panel border border-dashed border-border p-12 text-center",o),children:[(0,r.jsx)("div",{className:"mb-4 flex size-12 items-center justify-center rounded-full bg-surface-2 text-text-muted ring-1 ring-border-subtle",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[24px]",children:e})}),(0,r.jsx)("h3",{className:"mb-1.5 text-sm font-semibold text-text-main",children:t}),(0,r.jsx)("p",{className:"mb-6 max-w-sm text-xs text-text-muted",children:s}),l||c&&d&&(0,r.jsx)(n.default,{variant:"outline",size:"sm",onClick:d,children:c})]})}}},e=>{e.O(0,[8105,8441,3794,7358],()=>e(e.s=56665)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6607],{19924:(e,t,s)=>{Promise.resolve().then(s.bind(s,23879))},23879:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var a=s(95155),i=s(12115),n=s(3534),r=s(28777),o=s(88105),l=s(64137),c=s(54960);function d(){let[e,t]=(0,i.useState)([]),[s,d]=(0,i.useState)([]),[u,h]=(0,i.useState)({}),[p,f]=(0,i.useState)(!1),[g,w]=(0,i.useState)(null),[x,y]=(0,i.useState)({running:!1,certExists:!1,dnsStatus:{},hasCachedPassword:!1});(0,i.useEffect)(()=>{v(),m(),S(),b()},[]);let v=async()=>{try{let e=await fetch("/api/providers");if(e.ok){let s=await e.json();t(s.connections||[])}}catch{}},m=async()=>{try{let e=await fetch("/api/keys");if(e.ok){let t=await e.json();d(t.keys||[])}}catch{}},S=async()=>{try{let e=await fetch("/api/models/alias");if(e.ok){let t=await e.json();h(t.aliases||{})}}catch{}},b=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let t=await e.json();f(t.cloudEnabled||!1)}}catch{}},j=()=>e.filter(e=>!1!==e.isActive),k=Object.entries(n.wn);return(0,a.jsxs)("div",{className:"flex w-full flex-col gap-6",children:[(0,a.jsx)(c.default,{title:"MITM Proxy",description:"Intercept selected IDE traffic through the gateway",icon:"security"}),(0,a.jsxs)("div",{className:"flex items-start gap-2 rounded-panel border border-warning/30 bg-warning/10 px-3 py-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-0.5 shrink-0 text-[16px] text-warning",children:"warning"}),(0,a.jsx)("p",{className:"text-xs leading-relaxed text-warning",children:"MITM intercepts HTTPS traffic of IDE tools (Antigravity, GitHub Copilot, Kiro) via local CA to redirect requests to your providers. May violate ToS → account ban. Use at your own risk."})]}),(0,a.jsx)(l.tA,{apiKeys:s,cloudEnabled:p,onStatusChange:y}),(0,a.jsx)("div",{className:"grid gap-3 sm:gap-4",children:k.map(([e,t])=>(0,a.jsx)(l.kn,{tool:t,isExpanded:g===e,onToggle:()=>w(g===e?null:e),serverRunning:x.running,dnsActive:x.dnsStatus?.[e]||!1,hasCachedPassword:x.hasCachedPassword||!1,needsSudoPassword:!1!==x.needsSudoPassword,isWin:!0===x.isWin,apiKeys:s,activeProviders:j(),hasActiveProviders:j().some(e=>(0,r.KC)(e.provider).length>0||(0,o.mq)(e.provider)||(0,o.gb)(e.provider)),modelAliases:u,cloudEnabled:p,onDnsChange:e=>y(t=>({...t,dnsStatus:e.dnsStatus??t.dnsStatus}))},e))})]})}}},e=>{e.O(0,[27,5772,8105,1321,705,5497,9622,8441,3794,7358],()=>e(e.s=19924)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1287],{51191:(e,t,s)=>{Promise.resolve().then(s.bind(s,65784))},65784:(e,t,s)=>{"use strict";s.d(t,{default:()=>$});var a=s(95155),r=s(12115),n=s(35497),l=s(14051),i=s.n(l),o=s(57250),c=s(8247),d=s(28777);function m({value:e,onChange:t,models:s,compact:l=!1,modelAliases:i={},activeProviders:u=[]}){let[x,p]=(0,r.useState)(!1),g="string"==typeof e?e:null==e?"":String(e),h=(()=>{if(!g)return null;let e=s?.find(e=>e.id===g);return e?.provider||g.split("/")[0]})(),f=(()=>{if(!g)return"Select a model...";if(i?.[g])return i[g];if(h){let e=(0,d.u0)(h,g);if(e&&e!==g)return e}return g})();return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("button",{type:"button",onClick:()=>p(!0),className:l?"flex h-8 items-center gap-1.5 rounded-lg border border-border-subtle bg-surface-2 px-2 text-xs text-text-main hover:border-primary/40":"flex h-9 w-full items-center gap-2 rounded-lg border border-border-subtle bg-surface-2 px-3 text-sm text-text-main hover:border-primary/40",title:f,children:[h&&(0,a.jsx)(o.A,{src:(0,c.k)(h),alt:h,size:l?16:18,fallbackText:(h||"?").slice(0,2).toUpperCase()}),(0,a.jsx)("span",{className:`truncate ${e?"font-medium":"text-text-muted"}`,children:f}),(0,a.jsx)("span",{className:"material-symbols-outlined ml-auto text-[16px] text-text-muted",children:"expand_more"})]}),(0,a.jsx)(n.rq,{isOpen:x,onClose:()=>p(!1),onSelect:e=>{t("string"==typeof e?e:e?.value||e?.name||e?.id||""),p(!1)},selectedModel:g,activeProviders:u,title:"Select Model",modelAliases:i})]})}m.propTypes={value:i().string,onChange:i().func.isRequired,models:i().arrayOf(i().shape({id:i().string,provider:i().string})),compact:i().bool,modelAliases:i().object,activeProviders:i().array};var u=s(53593);let x=["low","medium","high","max"];function p({params:e,onChange:t,selectedModel:s=""}){let[n,l]=(0,r.useState)(!0),{getCaps:i}=(0,u.y)(),o=(s,a)=>t({...e,[s]:a}),c=i?.(s),d=!!c?.reasoning,m=!!(e.systemPrompt&&e.systemPrompt.trim());return(0,a.jsxs)("div",{className:"rounded-brand border border-border-subtle bg-panel p-3",children:[(0,a.jsxs)("button",{onClick:()=>l(!n),className:"mb-3 flex w-full items-center justify-between",children:[(0,a.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"tune"}),"Parameters",m&&(0,a.jsx)("span",{className:"rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:"system"})]}),(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted transition-transform ${n?"rotate-90":""}`,children:"chevron_right"})]}),n&&(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"mb-1 block text-xs font-medium text-text-muted",children:"System Prompt"}),(0,a.jsx)("textarea",{value:e.systemPrompt||"",onChange:e=>o("systemPrompt",e.target.value),placeholder:"You are a helpful assistant...",rows:3,className:"custom-scrollbar w-full resize-none rounded-lg border border-border-subtle bg-surface-2 px-3 py-2 text-sm text-text-main placeholder:text-text-muted focus:border-primary focus:outline-none"})]}),d&&(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Thinking Level"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1",children:x.map(t=>{let s=(e.reasoningEffort||"medium")===t;return"max"!==t||c?.thinkingMaxEffort?(0,a.jsx)("button",{onClick:()=>o("reasoningEffort",s?"":t),className:`rounded-lg px-2.5 py-1 text-xs font-medium capitalize transition-colors ${s?"bg-primary text-white":"bg-surface-2 text-text-muted hover:bg-surface-3"}`,children:t},t):null})}),(0,a.jsx)("p",{className:"mt-1 text-[10px] text-text-muted",children:"Reasoning effort. Tap active level to clear."})]}),(0,a.jsx)(g,{label:"Temperature",value:e.temperature??.7,min:0,max:2,step:.05,onChange:e=>o("temperature",e)}),(0,a.jsx)(g,{label:"Top P",value:e.topP??1,min:0,max:1,step:.05,onChange:e=>o("topP",e)}),(0,a.jsx)(g,{label:"Frequency Penalty",value:e.frequencyPenalty??0,min:0,max:2,step:.1,onChange:e=>o("frequencyPenalty",e)}),(0,a.jsx)(g,{label:"Presence Penalty",value:e.presencePenalty??0,min:0,max:2,step:.1,onChange:e=>o("presencePenalty",e)}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Max Tokens"}),(0,a.jsx)("input",{type:"number",min:"1",max:"128000",value:e.maxTokens??4096,onChange:e=>o("maxTokens",parseInt(e.target.value)||4096),className:"w-full rounded-lg border border-border-subtle bg-surface-2 px-3 py-1.5 text-sm text-text-main focus:border-primary focus:outline-none"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Top K"}),(0,a.jsx)("input",{type:"number",min:"1",max:"1000",placeholder:"unset",value:e.topK??"",onChange:e=>o("topK",""===e.target.value?null:parseInt(e.target.value)),className:"w-full rounded-lg border border-border-subtle bg-surface-2 px-3 py-1.5 text-sm text-text-main placeholder:text-text-muted focus:border-primary focus:outline-none"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Seed"}),(0,a.jsx)("input",{type:"number",placeholder:"unset",value:e.seed??"",onChange:e=>o("seed",""===e.target.value?null:parseInt(e.target.value)),className:"w-full rounded-lg border border-border-subtle bg-surface-2 px-3 py-1.5 text-sm text-text-main placeholder:text-text-muted focus:border-primary focus:outline-none"})]})]})]})}function g({label:e,value:t,min:s,max:r,step:n,onChange:l}){return(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"mb-1 flex items-center justify-between",children:[(0,a.jsx)("label",{className:"text-xs font-medium text-text-muted",children:e}),(0,a.jsx)("span",{className:"text-xs font-mono text-text-main",children:Number(t).toFixed(2)})]}),(0,a.jsx)("input",{type:"range",min:s,max:r,step:n,value:t,onChange:e=>l(parseFloat(e.target.value)),className:"w-full accent-primary"})]})}p.propTypes={params:i().shape({systemPrompt:i().string,reasoningEffort:i().string,temperature:i().number,maxTokens:i().number,topP:i().number,frequencyPenalty:i().number,presencePenalty:i().number,topK:i().number,seed:i().number}).isRequired,onChange:i().func.isRequired,selectedModel:i().string},g.propTypes={label:i().string.isRequired,value:i().number.isRequired,min:i().number.isRequired,max:i().number.isRequired,step:i().number.isRequired,onChange:i().func.isRequired};var h=s(62630);function f(e){return null==e?"—":e>=1e3?`${(e/1e3).toFixed(1)}K`:e.toLocaleString()}function b(e){return null==e?"—":e<1e3?`${e}ms`:`${(e/1e3).toFixed(1)}s`}function y({stats:e,mode:t="single"}){var s;if("compare"===t)return(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3 rounded-brand border border-border-subtle bg-surface-2 px-3 py-2 text-xs",children:[(0,a.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-primary",children:"compare_arrows"}),(0,a.jsxs)("span",{className:"font-medium text-text-main",children:[e.models||0," models compared"]})]}),(0,a.jsx)("span",{className:"text-text-muted",children:"\xb7"}),(0,a.jsxs)("span",{className:"text-text-muted",children:["Total: ",b(e.compareLatencyMs)]})]});let r=null==(s=function(e){if(!e?.model||!e.inputTokens&&!e.outputTokens)return null;let t=e.model,s=t.indexOf("/"),a=s>0?t.slice(0,s):null,r=s>0?t.slice(s+1):t,n=(0,h.PS)(a,r);if(!n)return null;let l={prompt_tokens:e.inputTokens||0,completion_tokens:e.outputTokens||0,cached_tokens:e.cachedTokens||0,reasoning_tokens:e.reasoningTokens||0};return(0,h.uy)(l,n)}(e))||0===s?null:s<.01?`$${s.toFixed(4)}`:(0,h.BD)(s);return(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3 rounded-brand border border-border-subtle bg-surface-2 px-3 py-2 text-xs",children:[(0,a.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-success",children:"arrow_upward"}),(0,a.jsx)("span",{className:"text-text-muted",children:"In:"}),(0,a.jsx)("span",{className:"font-mono font-medium text-text-main",children:f(e.inputTokens)})]}),(0,a.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-info",children:"arrow_downward"}),(0,a.jsx)("span",{className:"text-text-muted",children:"Out:"}),(0,a.jsx)("span",{className:"font-mono font-medium text-text-main",children:f(e.outputTokens)})]}),(0,a.jsx)("span",{className:"text-text-muted",children:"\xb7"}),(0,a.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"timer"}),(0,a.jsx)("span",{className:"text-text-muted",children:"Latency:"}),(0,a.jsx)("span",{className:"font-mono font-medium text-text-main",children:b(e.latencyMs)})]}),r&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"\xb7"}),(0,a.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-warning",children:"payments"}),(0,a.jsx)("span",{className:"text-text-muted",children:"Cost:"}),(0,a.jsx)("span",{className:"font-mono font-medium text-warning",children:r})]})]}),e.model&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"text-text-muted",children:"\xb7"}),(0,a.jsx)("span",{className:"font-mono text-text-muted",children:e.model})]})]})}function j({sessions:e,currentSession:t,onNew:s,onLoad:l,onDelete:i}){let[o,c]=(0,r.useState)(""),[,d]=(0,r.useState)(0);(0,r.useEffect)(()=>{let e=setInterval(()=>d(e=>e+1),6e4);return()=>clearInterval(e)},[]);let m=(0,r.useMemo)(()=>{let t=o.trim().toLowerCase();return t?e.filter(e=>(e.title||"").toLowerCase().includes(t)):e},[e,o]);return(0,a.jsxs)("div",{className:"flex flex-col gap-2 rounded-brand border border-border-subtle bg-panel p-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-text-muted",children:"History"}),(0,a.jsx)(n.$n,{size:"sm",variant:"ghost",icon:"add",onClick:s,title:"New chat","aria-label":"New chat"})]}),e.length>0&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5 rounded-lg border border-border-subtle bg-surface-2 px-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"search"}),(0,a.jsx)("input",{value:o,onChange:e=>c(e.target.value),placeholder:"Search...",className:"w-full bg-transparent py-1 text-xs text-text-main placeholder:text-text-muted focus:outline-none"})]}),0===e.length?(0,a.jsx)("p",{className:"py-4 text-center text-xs text-text-muted",children:"No saved conversations"}):0===m.length?(0,a.jsx)("p",{className:"py-4 text-center text-xs text-text-muted",children:"No matches"}):(0,a.jsx)("div",{className:"custom-scrollbar flex max-h-[70vh] flex-col gap-1 overflow-y-auto",children:m.map(e=>(0,a.jsxs)("div",{className:`group flex items-center gap-2 rounded-lg px-2 py-1.5 transition-colors ${t===e.id?"bg-primary/10":"hover:bg-surface-2"}`,children:[(0,a.jsxs)("button",{onClick:()=>l(e),className:"flex min-w-0 flex-1 flex-col items-start",children:[(0,a.jsx)("span",{className:"w-full truncate text-xs font-medium text-text-main",children:e.title}),(0,a.jsx)("span",{className:"text-[10px] text-text-muted",children:function(e){if(!e)return"";let t=Math.floor((Date.now()-e)/6e4);if(t<1)return"just now";if(t<60)return`${t}m ago`;let s=Math.floor(t/60);return s<24?`${s}h ago`:new Date(e).toLocaleDateString()}(e.updatedAt||e.createdAt)})]}),(0,a.jsx)("button",{onClick:()=>i(e.id),className:"rounded p-1 text-text-muted opacity-0 hover:text-danger group-hover:opacity-100",title:"Delete","aria-label":`Delete ${e.title}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"delete"})})]},e.id))})]})}y.propTypes={stats:i().object,mode:i().string},j.propTypes={sessions:i().array,currentSession:i().string,onNew:i().func.isRequired,onLoad:i().func.isRequired,onDelete:i().func.isRequired};var v=s(9233),N=s(91992);let w=void 0!==window.document,k=!1,C={FORBID_TAGS:["style","form","input","textarea","button","select","svg"],FORBID_ATTR:["style"],ALLOW_UNKNOWN_PROTOCOLS:!1};function S({content:e,role:t,error:s=!1}){let n=!s&&"assistant"===t,l=(0,r.useMemo)(()=>{if(!n||!e)return"";try{var t;let s=v.xI.parse(e);return t="string"==typeof s?s:String(s),"string"==typeof t&&t?w?(!k&&w&&(k=!0,N.A.addHook("afterSanitizeAttributes",e=>{for(let t of("A"===e.tagName&&(e.setAttribute("target","_blank"),e.setAttribute("rel","noopener noreferrer")),["src","href","xlink:href","action","formaction"])){let s=e.getAttribute(t);s&&/^\s*data:/i.test(s)&&!/^\s*data:image\/(?:png|jpe?g|gif|webp);/i.test(s)&&e.removeAttribute(t)}})),N.A.sanitize(t,C)):t:""}catch{return""}},[e,n]);return n&&l?(0,a.jsx)("div",{className:"prose-chat whitespace-pre-wrap break-words",dangerouslySetInnerHTML:{__html:l}}):(0,a.jsx)("p",{className:"whitespace-pre-wrap break-words",children:e})}function T({messages:e,onSend:t,streaming:s}){let l=(0,r.useRef)(null);return((0,r.useEffect)(()=>{l.current&&(l.current.scrollTop=l.current.scrollHeight)},[e]),0===e.length)?(0,a.jsx)("div",{className:"flex min-h-[300px] flex-1 items-center justify-center",children:(0,a.jsx)(n.pp,{icon:"science",title:"Start a conversation",description:"Pick a model above, type a message below, and press Enter. Switch to Compare mode to test multiple models side-by-side."})}):(0,a.jsx)("div",{ref:l,className:"custom-scrollbar flex max-h-[60vh] min-h-[200px] flex-1 flex-col gap-3 overflow-y-auto rounded-brand border border-border-subtle bg-panel p-4",children:e.map(e=>(0,a.jsx)(P,{msg:e},e.id))})}function P({msg:e}){let t="user"===e.role,s=e.error;return(0,a.jsx)("div",{className:`flex ${t?"justify-end":"justify-start"}`,children:(0,a.jsxs)("div",{className:`max-w-[80%] rounded-2xl px-4 py-2.5 text-sm ${t?"bg-primary text-white":s?"bg-danger/10 text-danger border border-danger/20":"bg-surface-2 text-text-main"}`,children:[e.model&&!t&&(0,a.jsx)("div",{className:"mb-1 text-[10px] font-medium text-text-muted",children:e.model}),e.reasoning&&(0,a.jsxs)("details",{className:"mb-1.5 rounded bg-black/5 px-2 py-1 dark:bg-white/5",children:[(0,a.jsx)("summary",{className:"cursor-pointer text-[10px] font-medium text-text-muted",children:"Reasoning"}),(0,a.jsx)("p",{className:"mt-1 whitespace-pre-wrap break-words text-xs italic text-text-muted",children:e.reasoning})]}),t&&e.attachments&&e.attachments.length>0&&(0,a.jsx)("div",{className:"mb-1.5 flex flex-wrap gap-1.5",children:e.attachments.map(e=>(0,a.jsx)("img",{src:e.dataUrl,alt:e.name,className:"h-20 w-20 rounded-lg border border-white/20 object-cover"},e.id))}),(0,a.jsxs)("div",{className:"break-words",children:[(0,a.jsx)(S,{content:e.content,role:e.role,error:s}),e.streaming&&(0,a.jsx)("span",{className:"ml-0.5 inline-block size-3 animate-pulse rounded-full bg-primary/50 align-middle"})]})]})})}async function A(e,{onChunk:t}={}){if(!e?.body?.getReader)return null;let s=e.body.getReader(),a=new TextDecoder,r="",n=null;for(;;){let{value:e,done:l}=await s.read();if(l)break;let i=(r+=a.decode(e,{stream:!0})).split(/\r?\n/);for(let e of(r=i.pop()||"",i)){let s=e.trim();if(!s.startsWith("data:"))continue;let a=s.slice(5).trim();if(a&&"[DONE]"!==a)try{let e=function(e){let t=e?.choices?.[0],s=t?.delta||{};return{content:"string"==typeof s.content?s.content:null,reasoning:"string"==typeof s.reasoning_content?s.reasoning_content:null,toolCalls:Array.isArray(s.tool_calls)&&s.tool_calls.length>0?s.tool_calls:null,finishReason:t?.finish_reason??null,usage:e?.usage??null}}(JSON.parse(a));e.usage&&(n=e.usage),t?.(e)}catch{}}}return n}v.xI.setOptions({gfm:!0,breaks:!0,async:!1}),S.propTypes={content:i().string,role:i().string,error:i().bool},T.propTypes={messages:i().arrayOf(i().shape({id:i().string,role:i().string,content:i().string,reasoning:i().string,model:i().string,streaming:i().bool,error:i().bool,attachments:i().array})),onSend:i().func,streaming:i().bool};let _="extremerouter.playground.sessions";function R(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function O(e){try{return localStorage.setItem(_,JSON.stringify(e)),"saved"}catch{try{return localStorage.setItem(_,JSON.stringify(e.map(e=>({...e,messages:(e.messages||[]).map(e=>"user"!==e.role?e:{...e,displayAttachments:Array.isArray(e.displayAttachments)?e.displayAttachments.map(e=>({id:e.id,name:e.name,stripped:!0})):void 0,content:Array.isArray(e.content)?e.content.map(e=>e&&"image_url"===e.type?{type:"image_url",image_url:{url:""}}:e):e.content})})))),"stripped"}catch{return"failed"}}}function $(){let[e,t]=(0,r.useState)(!0),[s,l]=(0,r.useState)([]),[i,o]=(0,r.useState)([]),[c,d]=(0,r.useState)({}),[u,x]=(0,r.useState)([]),[g,h]=(0,r.useState)(null),[f,b]=(0,r.useState)([]),[v,N]=(0,r.useState)({}),[w,k]=(0,r.useState)("single"),[C,P]=(0,r.useState)([""]),[$,z]=(0,r.useState)({systemPrompt:"",temperature:.7,maxTokens:4096,topP:1,frequencyPenalty:0,presencePenalty:0,topK:null,seed:null,reasoningEffort:""}),[D,E]=(0,r.useState)({}),I=(0,r.useRef)(null),M=(0,r.useRef)({}),[F,L]=(0,r.useState)(null),K=(0,r.useRef)(!1),[B,H]=(0,r.useState)(null),U=(0,r.useRef)(null),W=(0,r.useCallback)(e=>{H(e),U.current&&clearTimeout(U.current),U.current=setTimeout(()=>H(null),3e3)},[]),[J,Y]=(0,r.useState)(!1),[Z,G]=(0,r.useState)(null),[Q,V]=(0,r.useState)(null),{streamChat:X,abortAll:ee,streaming:et}=function({onDelta:e,onComplete:t,onError:s}){let a=(0,r.useRef)({}),[n,l]=(0,r.useState)(0);(0,r.useEffect)(()=>{let e=a.current;return()=>{Object.values(e).forEach(e=>e?.abort?.())}},[]);let i=(0,r.useCallback)(async(r,{body:n,apiKey:i})=>{let o=new AbortController;a.current[r]=o,l(e=>e+1);try{let a={"Content-Type":"application/json",Accept:"text/event-stream"};i&&(a.Authorization=`Bearer ${i}`);let l=await fetch("/api/v1/chat/completions",{method:"POST",headers:a,body:JSON.stringify({...n,stream:!0}),signal:o.signal});if(!l.ok){let e=await l.json().catch(()=>({error:{message:`HTTP ${l.status}`}}));s(r,e.error?.message||`HTTP ${l.status}`,l.status);return}let c=await A(l,{onChunk:t=>e(r,t)});t(r,{usage:c,ok:!0})}catch(e){e?.name!=="AbortError"&&s(r,e?.message||"Network error",0)}finally{delete a.current[r],l(e=>Math.max(0,e-1))}},[e,t,s]);return{streamChat:i,abort:(0,r.useCallback)(e=>{a.current[e]?.abort?.()},[]),abortAll:(0,r.useCallback)(()=>{Object.values(a.current).forEach(e=>e?.abort?.())},[]),streaming:n>0}}({onDelta:(0,r.useCallback)((e,t)=>{let s=M.current[e];if(!s)return;let a=(e,t,s)=>s?(e||"")+s:e;"single"===s.mode?b(e=>e.map(e=>e.id!==s.assistantId?e:{...e,content:a(e.content,"content",t.content),reasoning:a(e.reasoning,"reasoning",t.reasoning)})):N(s=>{let r=s[e]||{content:"",reasoning:"",streaming:!0,error:null};return{...s,[e]:{...r,content:a(r.content,"content",t.content),reasoning:a(r.reasoning,"reasoning",t.reasoning)}}})},[]),onComplete:(0,r.useCallback)((e,{usage:t})=>{let s=M.current[e];s&&("single"===s.mode?(b(e=>e.map(e=>e.id===s.assistantId?{...e,streaming:!1}:e)),E({model:s.modelId,inputTokens:t?.prompt_tokens||0,outputTokens:t?.completion_tokens||0,latencyMs:Date.now()-s.startTime})):N(s=>({...s,[e]:{...s[e],streaming:!1,usage:t}})),delete M.current[e])},[]),onError:(0,r.useCallback)((e,t)=>{let s,a=M.current[e];if(!a)return;let r=((s=(s=(s=(s=(s="string"==typeof t?t:String(t??"")).replace(/https?:\/\/[^\s"'<>]+/g,"[url]")).replace(/(Bearer\s+)[A-Za-z0-9._\-]{16,}/gi,"$1[token]")).replace(/(signature=)[A-Za-z0-9%+/=]{16,}/gi,"$1[sig]")).replace(/\{[\s\S]{80,}\}/g,"[provider json]")).length>300&&(s=s.slice(0,297)+"..."),s.trim());"single"===a.mode?b(e=>e.map(e=>e.id===a.assistantId?{...e,content:`❌ Error: ${r}`,streaming:!1,error:!0}:e)):N(t=>({...t,[e]:{...t[e],content:`❌ ${r}`,streaming:!1,error:!0}})),delete M.current[e]},[])}),es=(0,r.useCallback)(async()=>{G(null);try{let[e,t,s]=await Promise.all([fetch("/api/providers"),fetch("/api/models/alias"),fetch("/api/v1/models")]),a=await e.json();o((a.connections||[]).filter(e=>!1!==e.isActive));let r=await t.json();d(r.aliases||{});let n=((await s.json()).data||[]).map(e=>({id:e.id,name:e.id,provider:e.owned_by||e.id.split("/")[0]}));l(n),n.length>0&&P(e=>e[0]?e:[n[0].id])}catch(e){G(e?.message||"Failed to load models")}},[]);(0,r.useEffect)(()=>{(async()=>{x(function(){try{let e=localStorage.getItem(_);return e?JSON.parse(e):[]}catch{return[]}}());try{let e=await fetch("/api/keys"),t=await e.json(),s=(t.keys||t||[]).find?.(e=>!1!==e.isActive);s?.key&&(I.current=s.key)}catch{}try{let e=await fetch("/api/settings"),t=await e.json(),s=!0===t.requireApiKey;Y(s&&!I.current)}catch{Y(!1)}await es(),t(!1)})()},[es]),(0,r.useEffect)(()=>{"single"===w&&(K.current=!1)},[w]);let ea=(0,r.useCallback)(()=>{f.length>0&&g&&el(g,f),L(null),b([]),h(null),E({}),N({})},[f,g]),er=(0,r.useCallback)(e=>{f.length>0&&g&&el(g,f),b(e.messages||[]),h(e.id),e.model&&P([e.model]),e.params&&z(e.params),E({}),N({})},[f,g]),en=(0,r.useCallback)(e=>{let t=u.filter(t=>t.id!==e);x(t),O(t),g===e&&(h(null),b([]))},[u,g]),el=(0,r.useCallback)((e,t)=>{let s=u.map(s=>s.id===e?{...s,messages:t.slice(-60),updatedAt:Date.now()}:s).slice(0,100);x(s),O(s)},[u]),ei=(0,r.useCallback)(()=>{if(0===f.length)return;let e=g||R(),t={id:e,title:f.find(e=>"user"===e.role)?.content?.slice(0,40)||"New Chat",messages:f.slice(-60),model:C[0],params:$,createdAt:Date.now(),updatedAt:Date.now()},s=(u.find(t=>t.id===e)?u.map(s=>s.id===e?{...s,...t}:s):[t,...u]).slice(0,100);x(s);let a=O(s);h(e),W(a)},[f,g,u,C,$,W]),eo=(0,r.useCallback)((e,t=[])=>{let s=t.length>0,a={role:"user",content:s?[{type:"text",text:e},...t.map(e=>({type:"image_url",image_url:{url:e.dataUrl}}))]:e,id:R(),displayText:e,displayAttachments:s?t:void 0},r=[...f];$.systemPrompt&&r.unshift({role:"system",content:$.systemPrompt});let n=[...r.slice(-50),a],l={temperature:$.temperature,max_tokens:$.maxTokens,top_p:$.topP};return $.frequencyPenalty&&(l.frequency_penalty=$.frequencyPenalty),$.presencePenalty&&(l.presence_penalty=$.presencePenalty),$.topK&&(l.top_k=$.topK),null!=$.seed&&(l.seed=$.seed),$.reasoningEffort&&(l.reasoning_effort=$.reasoningEffort),{userMsg:a,baseMessages:n,requestParams:l}},[f,$]),ec=(0,r.useCallback)(async(e,t=[])=>{let{userMsg:s,baseMessages:a,requestParams:r}=eo(e,t),n=I.current,l=Date.now();if("single"===w){let e=C[0];if(!e)return;let t=R();b([...a.filter(e=>"system"!==e.role).map(e=>"user"===e.role?{...e,content:e.displayText??e.content,attachments:e.displayAttachments}:e),{role:"assistant",content:"",reasoning:"",id:t,model:e,streaming:!0}]),M.current.single={mode:"single",assistantId:t,modelId:e,startTime:l},await X("single",{body:{model:e,messages:a,...r},apiKey:n})}else{let e=C.filter(Boolean);if(0===e.length)return;N({}),e.forEach(e=>{M.current[e]={mode:"compare",modelId:e,startTime:l}}),await Promise.allSettled(e.map(e=>X(e,{body:{model:e,messages:a,...r},apiKey:n}))),E({compareLatencyMs:Date.now()-l,models:e.length})}},[w,C,eo,X]),ed=(0,r.useCallback)(async(e,t=[])=>{if((e.trim()||0!==t.length)&&!et){if("compare"===w&&!K.current&&C.filter(Boolean).length>1)return void L({text:e,attachments:t});await ec(e,t)}},[w,et,C,ec]),em=(0,r.useCallback)(()=>{K.current=!0,F&&(ec(F.text,F.attachments),L(null))},[F,ec]),eu=(0,r.useCallback)(()=>{ee(),M.current={},b(e=>e.map(e=>e.streaming?{...e,streaming:!1}:e)),N(e=>{let t={};for(let[s,a]of Object.entries(e))t[s]={...a,streaming:!1};return t})},[ee]);return e?(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsx)(n.zY,{title:"Playground",description:"Test models, compare outputs, tune parameters",icon:"science"}),(0,a.jsx)(n.Qv,{})]}):(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsx)(n.zY,{title:"Playground",description:"Test models, compare outputs, tune parameters",icon:"science",actions:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(n.Iz,{options:[{value:"single",label:"Chat"},{value:"compare",label:"Compare"}],value:w,onChange:k,size:"sm"}),(0,a.jsx)(n.$n,{size:"sm",variant:"ghost",icon:et?"stop":"save",onClick:et?eu:ei,disabled:!et&&0===f.length,children:et?"Stop":"Save"}),(0,a.jsx)(n.$n,{size:"sm",variant:"ghost",icon:"history",className:"lg:hidden","aria-label":"Open history",onClick:()=>V("history")}),(0,a.jsx)(n.$n,{size:"sm",variant:"ghost",icon:"tune",className:"lg:hidden","aria-label":"Open parameters",onClick:()=>V("params")}),B&&(0,a.jsxs)("span",{className:"text-xs text-text-muted",role:"status","aria-live":"polite",children:["saved"===B&&"Saved","stripped"===B&&"Saved — images removed to fit storage","failed"===B&&"Save failed"]})]})}),(J||Z)&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[J&&(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-brand border border-warning/30 bg-warning/5 px-3 py-2 text-xs text-warning",children:[(0,a.jsxs)("span",{children:[(0,a.jsx)("b",{children:"API key required."})," The gateway requires an API key for requests, but no active key was found — sends will fail with a 401."]}),(0,a.jsx)("a",{href:"/dashboard/endpoint",className:"shrink-0 font-semibold underline hover:text-warning/80",children:"Create an API key →"})]}),Z&&(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-brand border border-danger/30 bg-danger/5 px-3 py-2 text-xs text-danger",children:[(0,a.jsxs)("span",{className:"truncate",children:["Failed to load models: ",Z]}),(0,a.jsx)(n.$n,{size:"sm",variant:"outline",icon:"refresh",onClick:es,children:"Retry"})]})]}),(0,a.jsxs)("div",{className:"flex min-w-0 gap-4",children:[(0,a.jsx)("div",{className:"hidden w-56 shrink-0 lg:block",children:(0,a.jsx)(j,{sessions:u,currentSession:g,onNew:ea,onLoad:er,onDelete:en})}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-3",children:["single"===w?(0,a.jsx)(m,{models:s,value:C[0],onChange:e=>P([e]),activeProviders:i,modelAliases:c}):(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[C.map((e,t)=>(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(m,{models:s,value:e,onChange:e=>{let s=[...C];s[t]=e,P(s)},compact:!0,activeProviders:i,modelAliases:c}),C.length>2&&(0,a.jsx)("button",{onClick:()=>P(C.filter((e,s)=>s!==t)),className:"rounded-lg p-1.5 text-text-muted hover:bg-surface-2 hover:text-danger",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"close"})})]},t)),C.length<4&&(0,a.jsxs)("button",{onClick:()=>P([...C,""]),className:"flex items-center gap-1 rounded-lg border border-dashed border-border px-3 py-1.5 text-xs text-text-muted hover:border-primary/40 hover:text-primary",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"add"}),"Add Model"]})]}),"single"===w?(0,a.jsx)(T,{messages:f,onSend:ed,streaming:et,stats:D}):(0,a.jsx)("div",{className:"flex min-w-0 gap-3",children:C.filter(Boolean).map(e=>{let t=v[e];return(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col rounded-brand border border-border-subtle bg-panel",children:[(0,a.jsx)("div",{className:"border-b border-border-subtle px-3 py-2",children:(0,a.jsx)("span",{className:"truncate text-xs font-medium text-text-main",children:e})}),(0,a.jsxs)("div",{className:"custom-scrollbar max-h-[60vh] min-h-[200px] overflow-y-auto p-3",children:[t?.reasoning&&(0,a.jsxs)("details",{className:"mb-2 rounded bg-black/5 px-2 py-1 dark:bg-white/5",children:[(0,a.jsx)("summary",{className:"cursor-pointer text-[10px] font-medium text-text-muted",children:"Reasoning"}),(0,a.jsx)("p",{className:"mt-1 whitespace-pre-wrap text-xs italic text-text-muted",children:t.reasoning})]}),t?.content?(0,a.jsxs)("div",{className:`text-sm ${t.error?"text-danger":"text-text-main"}`,children:[t.error?(0,a.jsx)("p",{className:"whitespace-pre-wrap break-words",children:t.content}):(0,a.jsx)(S,{content:t.content,role:"assistant"}),t.streaming&&(0,a.jsx)("span",{className:"ml-0.5 inline-block size-3 animate-pulse rounded-full bg-primary/50 align-middle"})]}):(0,a.jsx)("p",{className:"text-sm text-text-muted",children:et?"Waiting...":"Send a message to compare"})]})]},e)})}),(0,a.jsx)(q,{onSend:ed,streaming:et,onStop:eu}),Object.keys(D).length>0&&(0,a.jsx)(y,{stats:D,mode:w})]}),(0,a.jsx)("div",{className:"hidden w-60 shrink-0 xl:block",children:(0,a.jsx)(p,{params:$,onChange:z,selectedModel:C[0]})})]}),(0,a.jsx)(n.uo,{isOpen:!!F,onClose:()=>L(null),onConfirm:em,title:"Send to multiple models at once?",message:F?`Compare mode sends this exact prompt to ${C.filter(Boolean).length} models simultaneously. One request becomes ${C.filter(Boolean).length} upstream calls (~${C.filter(Boolean).length}\xd7 the tokens of a single request), billed by each provider.`:"",confirmText:"Compare all",cancelText:"Cancel",variant:"secondary"}),(0,a.jsx)(n.aF,{isOpen:"history"===Q,onClose:()=>V(null),title:"History",size:"lg",children:(0,a.jsx)("div",{className:"max-h-[70vh] overflow-y-auto",children:(0,a.jsx)(j,{sessions:u,currentSession:g,onNew:ea,onLoad:e=>{er(e),V(null)},onDelete:en})})}),(0,a.jsx)(n.aF,{isOpen:"params"===Q,onClose:()=>V(null),title:"Parameters",size:"lg",children:(0,a.jsx)(p,{params:$,onChange:z,selectedModel:C[0]})})]})}function q({onSend:e,streaming:t,onStop:s}){let[n,l]=(0,r.useState)(""),[i,o]=(0,r.useState)([]),c=(0,r.useRef)(null),d=e=>{if(!e||!e.type.startsWith("image/")||e.size>5242880)return;let t=new FileReader;t.onload=()=>{o(s=>[...s,{id:R(),dataUrl:t.result,name:e.name}])},t.readAsDataURL(e)},m=()=>{(n.trim()||0!==i.length)&&!t&&(e(n,i),l(""),o([]),c.current&&(c.current.style.height="auto"))},u=(n.trim()||i.length>0)&&!t;return(0,a.jsxs)("div",{className:"flex flex-col gap-2 rounded-brand border border-border-subtle bg-panel p-2",children:[i.length>0&&(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:i.map(e=>(0,a.jsxs)("div",{className:"group relative",children:[(0,a.jsx)("img",{src:e.dataUrl,alt:e.name,className:"h-16 w-16 rounded-lg border border-border-subtle object-cover"}),(0,a.jsx)("button",{onClick:()=>o(t=>t.filter(t=>t.id!==e.id)),className:"absolute -right-1.5 -top-1.5 flex size-5 items-center justify-center rounded-full bg-danger text-white opacity-0 transition-opacity group-hover:opacity-100",title:"Remove",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},e.id))}),(0,a.jsxs)("div",{className:"flex items-end gap-2",children:[(0,a.jsx)("textarea",{ref:c,value:n,onChange:e=>{l(e.target.value),e.target.style.height="auto",e.target.style.height=Math.min(e.target.scrollHeight,120)+"px"},onPaste:e=>{let t=e.clipboardData?.items;if(!t)return;let s=!1;for(let e of t)e.type.startsWith("image/")&&(s=!0,d(e.getAsFile()));s&&e.preventDefault()},onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),m())},placeholder:"Send a message... (Enter to send, Shift+Enter for newline, paste images)",rows:1,className:"custom-scrollbar max-h-[120px] flex-1 resize-none bg-transparent px-2 py-1.5 text-sm text-text-main placeholder:text-text-muted focus:outline-none"}),t?(0,a.jsx)("button",{onClick:s,className:"flex size-9 shrink-0 items-center justify-center rounded-lg bg-danger/15 text-danger hover:bg-danger/25",title:"Stop","aria-label":"Stop",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"stop"})}):(0,a.jsx)("button",{onClick:m,disabled:!u,className:"flex size-9 shrink-0 items-center justify-center rounded-lg bg-primary text-white hover:bg-primary-hover disabled:opacity-40",title:"Send","aria-label":"Send",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"send"})})]})]})}}},e=>{e.O(0,[27,1992,8105,1321,705,5497,8441,3794,7358],()=>e(e.s=51191)),_N_E=e.O()}]);