zevairouter 1.0.104 → 1.0.106

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 (408) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +6 -2
  3. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  4. package/cli/app/.next-cli-build/app-path-routes-manifest.json +11 -11
  5. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  33. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  39. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  40. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  41. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  42. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  43. package/cli/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  44. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  45. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
  47. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  48. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  49. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  50. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  62. package/cli/app/.next-cli-build/server/app/callback.rsc +4 -4
  63. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  64. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  65. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
  66. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  67. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  69. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  70. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +6 -6
  71. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  72. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  73. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  74. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  75. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +6 -6
  76. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +4 -4
  78. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +2 -2
  79. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  80. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  81. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  82. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  83. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  84. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  85. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  86. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  87. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  88. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  89. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  90. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
  91. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  92. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  93. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  94. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  95. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  96. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  97. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  98. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  99. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  100. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  101. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  102. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  103. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  104. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  105. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  106. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  107. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  108. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  109. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  110. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +6 -6
  111. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  112. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  113. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  114. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  115. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +6 -6
  116. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  117. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +4 -4
  118. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +2 -2
  119. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  120. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
  121. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  122. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  123. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  124. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  125. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
  126. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  127. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  128. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  129. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  130. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  131. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  132. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  133. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  134. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  135. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  136. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  137. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  138. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  139. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  140. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  141. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  142. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  143. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  144. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  145. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  146. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  147. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  148. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  149. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  150. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  151. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +6 -6
  152. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  153. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  154. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  155. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  156. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +6 -6
  157. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  158. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +4 -4
  159. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +2 -2
  160. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  161. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  162. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  163. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  164. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  165. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  166. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  167. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  168. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  169. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  170. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  171. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  172. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  173. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  174. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  175. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  176. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  177. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  178. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  179. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  180. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  181. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  182. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  183. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  184. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  185. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  186. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  187. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  188. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  189. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  190. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  191. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  192. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  193. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  194. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  195. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  196. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  197. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  198. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  199. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  200. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  201. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  202. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +6 -6
  203. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  204. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  205. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  206. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  207. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
  208. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  209. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +4 -4
  210. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  211. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  212. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  213. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  214. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  215. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  216. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  217. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  218. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  220. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  221. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  222. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  223. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  224. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  225. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  226. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  227. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  228. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  229. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  230. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  231. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  232. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  233. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
  234. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  235. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  236. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  237. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  238. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  239. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  240. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +4 -4
  241. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  242. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  243. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  244. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  245. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  246. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  247. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  248. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  249. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  251. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  252. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  253. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  254. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  255. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  256. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  257. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  258. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  259. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  260. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  261. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  262. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  263. package/cli/app/.next-cli-build/server/app/dashboard.rsc +6 -6
  264. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  265. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  266. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  267. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
  268. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  269. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
  270. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  271. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  272. package/cli/app/.next-cli-build/server/app/index.rsc +4 -4
  273. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  274. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  275. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  276. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
  277. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  278. package/cli/app/.next-cli-build/server/app/landing/page.js +1 -1
  279. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  280. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  281. package/cli/app/.next-cli-build/server/app/landing.rsc +5 -5
  282. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  283. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  284. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
  285. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  286. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  287. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  288. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  289. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  290. package/cli/app/.next-cli-build/server/app/login.rsc +5 -5
  291. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  292. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  293. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
  294. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  295. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  296. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  297. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  298. package/cli/app/.next-cli-build/server/app-paths-manifest.json +11 -11
  299. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  300. package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
  301. package/cli/app/.next-cli-build/server/chunks/412.js +2 -2
  302. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  303. package/cli/app/.next-cli-build/server/chunks/5469.js +1 -1
  304. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  305. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  306. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  307. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  308. package/cli/app/.next-cli-build/static/chunks/{3702-71ea2cb15f471160.js → 3702-5f034d6da865ad7a.js} +1 -1
  309. package/cli/app/.next-cli-build/static/chunks/5497-cd29d71de5a0d443.js +7 -0
  310. package/cli/app/.next-cli-build/static/chunks/9126-2efa8985d72b10b7.js +1 -0
  311. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-16cab1ed7e707419.js → page-a2d55f0103564e42.js} +1 -1
  312. package/cli/app/.next-cli-build/static/chunks/app/landing/page-a5bcf36367dce737.js +1 -0
  313. package/cli/app/.next-cli-build/static/css/b2b993ebf3c2ebd5.css +1 -0
  314. package/cli/app/CHANGELOG.md +44 -0
  315. package/cli/app/package.json +7 -2
  316. package/cli/package.json +1 -1
  317. package/open-sse/handlers/embeddingProviders/gemini.js +4 -1
  318. package/open-sse/handlers/embeddingProviders/openaiCompatNode.js +4 -1
  319. package/open-sse/handlers/imageProviders/blackForestLabs.js +4 -1
  320. package/open-sse/handlers/imageProviders/cloudflareAi.js +4 -1
  321. package/open-sse/handlers/imageProviders/codex.js +4 -1
  322. package/open-sse/handlers/imageProviders/comfyui.js +4 -1
  323. package/open-sse/handlers/imageProviders/falAi.js +4 -1
  324. package/open-sse/handlers/imageProviders/gemini.js +4 -1
  325. package/open-sse/handlers/imageProviders/huggingface.js +4 -1
  326. package/open-sse/handlers/imageProviders/nanobanana.js +4 -1
  327. package/open-sse/handlers/imageProviders/runwayml.js +4 -1
  328. package/open-sse/handlers/imageProviders/sdwebui.js +4 -1
  329. package/open-sse/handlers/imageProviders/stabilityAi.js +4 -1
  330. package/open-sse/handlers/ttsProviders/edgeTts.js +4 -1
  331. package/open-sse/handlers/ttsProviders/elevenlabs.js +4 -1
  332. package/open-sse/handlers/ttsProviders/gemini.js +4 -1
  333. package/open-sse/handlers/ttsProviders/googleTts.js +4 -1
  334. package/open-sse/handlers/ttsProviders/localDevice.js +4 -1
  335. package/open-sse/handlers/ttsProviders/openai.js +4 -1
  336. package/open-sse/handlers/ttsProviders/openrouter.js +4 -1
  337. package/open-sse/utils/cursorChecksum.js +4 -1
  338. package/open-sse/utils/cursorProtobuf.js +4 -1
  339. package/package.json +7 -2
  340. package/src/app/(dashboard)/dashboard/automation/page.js +3 -0
  341. package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.js +8 -1
  342. package/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js +6 -0
  343. package/src/app/(dashboard)/dashboard/cli-tools/components/BaseUrlSelect.js +2 -0
  344. package/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js +6 -0
  345. package/src/app/(dashboard)/dashboard/cli-tools/components/ClineToolCard.js +6 -0
  346. package/src/app/(dashboard)/dashboard/cli-tools/components/CodexToolCard.js +7 -0
  347. package/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js +7 -0
  348. package/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js +6 -0
  349. package/src/app/(dashboard)/dashboard/cli-tools/components/DeepSeekTuiToolCard.js +6 -0
  350. package/src/app/(dashboard)/dashboard/cli-tools/components/DroidToolCard.js +6 -0
  351. package/src/app/(dashboard)/dashboard/cli-tools/components/EndpointPresetControl.js +1 -0
  352. package/src/app/(dashboard)/dashboard/cli-tools/components/HermesToolCard.js +6 -0
  353. package/src/app/(dashboard)/dashboard/cli-tools/components/JcodeToolCard.js +6 -0
  354. package/src/app/(dashboard)/dashboard/cli-tools/components/KiloToolCard.js +5 -0
  355. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js +2 -0
  356. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenClawToolCard.js +6 -0
  357. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js +6 -0
  358. package/src/app/(dashboard)/dashboard/combos/page.js +3 -0
  359. package/src/app/(dashboard)/dashboard/context/page.js +1 -0
  360. package/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js +7 -0
  361. package/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +10 -0
  362. package/src/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -0
  363. package/src/app/(dashboard)/dashboard/mitm/MitmPageClient.js +4 -0
  364. package/src/app/(dashboard)/dashboard/profile/page.js +2 -0
  365. package/src/app/(dashboard)/dashboard/providers/[id]/AddCustomModelModal.js +1 -0
  366. package/src/app/(dashboard)/dashboard/providers/[id]/ConnectionRow.js +1 -0
  367. package/src/app/(dashboard)/dashboard/providers/[id]/EditCompatibleNodeModal.js +1 -0
  368. package/src/app/(dashboard)/dashboard/providers/[id]/page.js +4 -0
  369. package/src/app/(dashboard)/dashboard/providers/[id]/page.new.js +8 -6
  370. package/src/app/(dashboard)/dashboard/providers/components/ConnectionsCard.js +2 -0
  371. package/src/app/(dashboard)/dashboard/providers/components/ModelAvailabilityBadge.js +1 -0
  372. package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.js +1 -0
  373. package/src/app/(dashboard)/dashboard/providers/page.js +9 -1
  374. package/src/app/(dashboard)/dashboard/proxy-pools/page.js +4 -1
  375. package/src/app/(dashboard)/dashboard/pxpipe/PxpipeClient.js +1 -0
  376. package/src/app/(dashboard)/dashboard/terminal/TerminalPageClient.js +1 -0
  377. package/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.js +3 -0
  378. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.js +2 -0
  379. package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.js +11 -6
  380. package/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js +2 -0
  381. package/src/app/(dashboard)/dashboard/usage/components/UsageChart.js +1 -0
  382. package/src/app/(dashboard)/dashboard/usage/components/UsageTable.js +1 -0
  383. package/src/app/api/oauth/cursor/auto-import/route.js +0 -1
  384. package/src/app/callback/page.js +1 -0
  385. package/src/app/dashboard/settings/pricing/page.js +1 -0
  386. package/src/lib/db/migrations/001-initial.js +4 -1
  387. package/src/shared/components/AddCustomEmbeddingModal.js +1 -0
  388. package/src/shared/components/BulkAccountAutomationModal.js +3 -1
  389. package/src/shared/components/ChangelogModal.js +1 -0
  390. package/src/shared/components/CursorAuthModal.js +1 -0
  391. package/src/shared/components/EditConnectionModal.js +1 -0
  392. package/src/shared/components/HeaderLanguage.js +1 -0
  393. package/src/shared/components/KiroAuthModal.js +1 -0
  394. package/src/shared/components/KiroOAuthWrapper.js +1 -0
  395. package/src/shared/components/LanguageSwitcher.js +2 -0
  396. package/src/shared/components/McpMarketplaceModal.js +1 -1
  397. package/src/shared/components/ModelSelectModal.js +10 -6
  398. package/src/shared/components/OAuthModal.js +3 -1
  399. package/src/shared/components/PricingModal.js +1 -0
  400. package/src/shared/components/ProviderIcon.js +8 -3
  401. package/src/shared/components/RequestLogger.js +1 -0
  402. package/src/shared/components/Sidebar.js +1 -0
  403. package/cli/app/.next-cli-build/static/chunks/5497-667e14237552c864.js +0 -7
  404. package/cli/app/.next-cli-build/static/chunks/9126-5dc2ccda07a8c55e.js +0 -1
  405. package/cli/app/.next-cli-build/static/chunks/app/landing/page-6621ec8b157e77cc.js +0 -1
  406. package/cli/app/.next-cli-build/static/css/c7077ef89735a356.css +0 -1
  407. /package/cli/app/.next-cli-build/static/{CsjKSx0C8GBhUjd-ob2F9 → cfUGr8kYmZvImlaBuzL9m}/_buildManifest.js +0 -0
  408. /package/cli/app/.next-cli-build/static/{CsjKSx0C8GBhUjd-ob2F9 → cfUGr8kYmZvImlaBuzL9m}/_ssgManifest.js +0 -0
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ /* eslint-disable @next/next/no-img-element -- dynamic/blob/external image src with onError fallback; next/image requires static dims + domain allowlist */
2
3
 
3
4
  import { useMemo, useState, useEffect, useCallback, useRef } from "react";
4
5
  import PropTypes from "prop-types";
@@ -14,6 +15,7 @@ import { AI_PROVIDERS } from "@/shared/constants/providers";
14
15
  // Force-stop FE animation if a provider stays active longer than this
15
16
  const FE_ACTIVE_TIMEOUT_MS = 60000;
16
17
  const FE_ACTIVE_TICK_MS = 1000;
18
+ const FIT_OPTS = { padding: 0.2, duration: 200 };
17
19
 
18
20
  function getProviderConfig(providerId) {
19
21
  return AI_PROVIDERS[providerId] || { color: "#6b7280", name: providerId };
@@ -230,18 +232,22 @@ export default function ProviderTopology({ providers = [], activeRequests = [],
230
232
  }, [rawActiveSet]);
231
233
 
232
234
  const activeSet = useMemo(() => {
235
+ void tick; // tick only re-triggers this memo so time-based expiry is re-evaluated on each interval
236
+ // eslint-disable-next-line react-hooks/purity -- intentional time-window filter: memo is re-evaluated every FE_ACTIVE_TICK_MS via tick, so each evaluation needs the current time
233
237
  const now = Date.now();
234
238
  const filtered = new Set();
239
+ /* eslint-disable react-hooks/refs -- firstSeenRef is written in an effect and read here only to re-derive a time-windowed view on each tick; intentional */
235
240
  for (const p of rawActiveSet) {
236
241
  const ts = firstSeenRef.current[p];
237
242
  if (!ts || now - ts < FE_ACTIVE_TIMEOUT_MS) filtered.add(p);
238
243
  }
244
+ /* eslint-enable react-hooks/refs */
239
245
  return filtered;
240
246
  }, [rawActiveSet, tick]);
241
247
 
242
248
  const { nodes, edges } = useMemo(
243
249
  () => buildLayout(providers, activeSet, lastSet, errorSet),
244
- [providers, activeSet, lastKey, errorKey]
250
+ [providers, activeSet, lastSet, errorSet]
245
251
  );
246
252
 
247
253
  // Stable key — only remount when provider list changes
@@ -252,10 +258,9 @@ export default function ProviderTopology({ providers = [], activeRequests = [],
252
258
 
253
259
  const rfInstance = useRef(null);
254
260
  const containerRef = useRef(null);
255
- const fitOpts = { padding: 0.2, duration: 200 };
256
261
  const onInit = useCallback((instance) => {
257
262
  rfInstance.current = instance;
258
- setTimeout(() => instance.fitView(fitOpts), 50);
263
+ setTimeout(() => instance.fitView(FIT_OPTS), 50);
259
264
  }, []);
260
265
 
261
266
  // Re-fit on container resize
@@ -263,7 +268,7 @@ export default function ProviderTopology({ providers = [], activeRequests = [],
263
268
  const el = containerRef.current;
264
269
  if (!el) return;
265
270
  const ro = new ResizeObserver(() => {
266
- if (rfInstance.current) rfInstance.current.fitView(fitOpts);
271
+ if (rfInstance.current) rfInstance.current.fitView(FIT_OPTS);
267
272
  });
268
273
  ro.observe(el);
269
274
  return () => ro.disconnect();
@@ -272,7 +277,7 @@ export default function ProviderTopology({ providers = [], activeRequests = [],
272
277
  // Re-fit when node count/layout changes
273
278
  useEffect(() => {
274
279
  if (rfInstance.current) {
275
- const id = setTimeout(() => rfInstance.current.fitView(fitOpts), 50);
280
+ const id = setTimeout(() => rfInstance.current.fitView(FIT_OPTS), 50);
276
281
  return () => clearTimeout(id);
277
282
  }
278
283
  }, [nodes.length]);
@@ -290,7 +295,7 @@ export default function ProviderTopology({ providers = [], activeRequests = [],
290
295
  edges={edges}
291
296
  nodeTypes={nodeTypes}
292
297
  fitView
293
- fitViewOptions={fitOpts}
298
+ fitViewOptions={FIT_OPTS}
294
299
  minZoom={0.1}
295
300
  maxZoom={2}
296
301
  onInit={onInit}
@@ -144,10 +144,12 @@ export default function RequestDetailsTab() {
144
144
  }, [pagination.page, pagination.pageSize, filters]);
145
145
 
146
146
  useEffect(() => {
147
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- mount data fetch; fetchProviders sets state only after await, which the rule flags conservatively
147
148
  fetchProviders();
148
149
  }, [fetchProviders]);
149
150
 
150
151
  useEffect(() => {
152
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- data fetch on filter/page change; fetchDetails sets state only after await, which the rule flags conservatively
151
153
  fetchDetails();
152
154
  }, [fetchDetails]);
153
155
 
@@ -43,6 +43,7 @@ export default function UsageChart({ period = "7d" }) {
43
43
  }, [period]);
44
44
 
45
45
  useEffect(() => {
46
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- data fetch on period change; fetchData sets state only after await, which the rule flags conservatively
46
47
  fetchData();
47
48
  }, [fetchData]);
48
49
 
@@ -110,6 +110,7 @@ export default function UsageTable({
110
110
  useEffect(() => {
111
111
  try {
112
112
  const saved = localStorage.getItem(storageKey);
113
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- one-time mount initialization from localStorage (external store), intentionally client-only
113
114
  if (saved) setExpanded(new Set(JSON.parse(saved)));
114
115
  } catch (e) {
115
116
  console.error(`Failed to load ${storageKey}:`, e);
@@ -78,7 +78,6 @@ const normalize = (value) => {
78
78
  */
79
79
  function extractTokensViaBetterSqlite(dbPath) {
80
80
  // Dynamic require so the route stays importable even if native bindings fail
81
- // eslint-disable-next-line @typescript-eslint/no-require-imports
82
81
  const Database = require("better-sqlite3");
83
82
  const db = new Database(dbPath, { readonly: true, fileMustExist: true });
84
83
 
@@ -75,6 +75,7 @@ function CallbackContent() {
75
75
  return;
76
76
  }
77
77
 
78
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- OAuth popup relay: status transitions are the entire point of this one-shot callback effect
78
79
  setStatus("success");
79
80
  setTimeout(() => {
80
81
  window.close();
@@ -12,6 +12,7 @@ export default function PricingSettingsPage() {
12
12
  const [loading, setLoading] = useState(true);
13
13
 
14
14
  useEffect(() => {
15
+ // eslint-disable-next-line react-hooks/immutability -- false positive: these are local fetch+setState helpers invoked once on effect fire (not during render); defined with const below because all invocations are deferred (effects/events), so no TDZ issue at runtime
15
16
  loadPricing();
16
17
  }, []);
17
18
 
@@ -2,7 +2,7 @@
2
2
  // For existing DB at version 0 (legacy unstamped), it's idempotent (IF NOT EXISTS).
3
3
  import { TABLES, buildCreateTableSql } from "../schema.js";
4
4
 
5
- export default {
5
+ const M001Initial = {
6
6
  version: 1,
7
7
  name: "initial",
8
8
  up(db) {
@@ -12,3 +12,6 @@ export default {
12
12
  }
13
13
  },
14
14
  };
15
+
16
+
17
+ export default M001Initial;
@@ -22,6 +22,7 @@ export default function AddCustomEmbeddingModal({ isOpen, onClose, onCreated, on
22
22
 
23
23
  useEffect(() => {
24
24
  if (!isOpen) return;
25
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- reset-on-open + sync-from-props hybrid: reinitializes the form whenever the modal opens or the edited node changes
25
26
  setValidationResult(null);
26
27
  setCheckKey("");
27
28
  setCheckModelId("");
@@ -110,6 +110,7 @@ export default function BulkAccountAutomationModal({
110
110
  const saved = window.localStorage.getItem(draftKey);
111
111
  if (saved) {
112
112
  bulkTextRef.current = saved;
113
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- one-time restore of draft text from localStorage (external store) on mount
113
114
  setBulkTextState(saved);
114
115
  }
115
116
  } catch { /* ignore */ }
@@ -160,9 +161,10 @@ export default function BulkAccountAutomationModal({
160
161
  if (typeof window !== "undefined") {
161
162
  window.localStorage.removeItem(storageKey);
162
163
  }
163
- }, [storageKey, defaultEngine]);
164
+ }, [storageKey, defaultEngine, setBulkText]);
164
165
 
165
166
  useEffect(() => {
167
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- sync-from-props: resets engine selection when the provider/default engine changes
166
168
  setEngine(defaultEngine || DEFAULT_ENGINE);
167
169
  }, [defaultEngine, provider]);
168
170
 
@@ -16,6 +16,7 @@ export default function ChangelogModal({ isOpen, onClose }) {
16
16
 
17
17
  useEffect(() => {
18
18
  if (!isOpen || html) return;
19
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch-on-open: loading must flip synchronously before the async fetch resolves
19
20
  setLoading(true);
20
21
  setError("");
21
22
  // Prefer the locally-bundled CHANGELOG (works offline + private repos).
@@ -46,6 +46,7 @@ export default function CursorAuthModal({ isOpen, onSuccess, onClose }) {
46
46
  // Auto-detect tokens when modal opens
47
47
  useEffect(() => {
48
48
  if (!isOpen) return;
49
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch-on-open: runAutoDetect sets state only after await, which the rule flags conservatively
49
50
  runAutoDetect();
50
51
  }, [isOpen]);
51
52
 
@@ -29,6 +29,7 @@ export default function EditConnectionModal({ isOpen, connection, proxyPools, on
29
29
 
30
30
  useEffect(() => {
31
31
  if (connection) {
32
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- sync-from-props hybrid: pre-fills form from the connection being edited; user edits fields independently afterwards
32
33
  setFormData({
33
34
  name: connection.name || "",
34
35
  priority: connection.priority || 1,
@@ -19,6 +19,7 @@ export default function HeaderLanguage() {
19
19
  const [locale, setLocale] = useState("en");
20
20
 
21
21
  useEffect(() => {
22
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- syncs locale from cookie (external store) on mount and whenever the language modal closes
22
23
  setLocale(getLocaleFromCookie());
23
24
  }, [open]);
24
25
 
@@ -144,6 +144,7 @@ export default function KiroAuthModal({
144
144
  useEffect(() => {
145
145
  if (!isOpen) return;
146
146
  if (!initialSelectedMethod) return;
147
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- sync-from-props: applies the requested initial auth method when the modal flow changes
147
148
  setSelectedMethod(initialSelectedMethod);
148
149
  setImportMode(initialImportMode || "single-token");
149
150
  setBulkResult(null);
@@ -27,6 +27,7 @@ export default function KiroOAuthWrapper({
27
27
  useEffect(() => {
28
28
  if (!isOpen || !initialFlow) return;
29
29
  if (initialFlow.method === "builder-id") {
30
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- sync-from-props: restores the requested auth flow when the modal is opened with an initialFlow
30
31
  setAuthMethod("builder-id");
31
32
  return;
32
33
  }
@@ -71,6 +71,7 @@ export default function LanguageSwitcher({ className = "", isOpen: controlledOpe
71
71
  };
72
72
 
73
73
  useEffect(() => {
74
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- one-time mount initialization from locale cookie (external store), intentionally client-only
74
75
  setLocale(getLocaleFromCookie());
75
76
  }, []);
76
77
 
@@ -85,6 +86,7 @@ export default function LanguageSwitcher({ className = "", isOpen: controlledOpe
85
86
  document.addEventListener("mousedown", handleClickOutside);
86
87
  return () => document.removeEventListener("mousedown", handleClickOutside);
87
88
  }
89
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- react only to isOpen; setIsOpen only ever closes (idempotent) so a fresh closure isn't required
88
90
  }, [isOpen]);
89
91
 
90
92
  const handleSetLocale = async (nextLocale) => {
@@ -29,7 +29,7 @@ export default function McpMarketplaceModal({ isOpen, onClose, onAdd, addedNames
29
29
  })
30
30
  .catch((e) => setError(e.message))
31
31
  .finally(() => setLoading(false));
32
- }, [isOpen]);
32
+ }, [isOpen, servers.length]);
33
33
 
34
34
  const addedSet = useMemo(() => new Set(addedNames), [addedNames]);
35
35
 
@@ -59,6 +59,7 @@ export default function ModelSelectModal({
59
59
  };
60
60
 
61
61
  useEffect(() => {
62
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch-on-open: fetchCombos sets state only after await, which the rule flags conservatively
62
63
  if (isOpen) fetchCombos();
63
64
  }, [isOpen]);
64
65
 
@@ -75,6 +76,7 @@ export default function ModelSelectModal({
75
76
  };
76
77
 
77
78
  useEffect(() => {
79
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch-on-open: fetchProviderNodes sets state only after await, which the rule flags conservatively
78
80
  if (isOpen) fetchProviderNodes();
79
81
  }, [isOpen]);
80
82
 
@@ -91,6 +93,7 @@ export default function ModelSelectModal({
91
93
  };
92
94
 
93
95
  useEffect(() => {
96
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch-on-open: fetchCustomModels sets state only after await, which the rule flags conservatively
94
97
  if (isOpen) fetchCustomModels();
95
98
  }, [isOpen]);
96
99
 
@@ -107,6 +110,7 @@ export default function ModelSelectModal({
107
110
  };
108
111
 
109
112
  useEffect(() => {
113
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch-on-open: fetchDisabledModels sets state only after await, which the rule flags conservatively
110
114
  if (isOpen) fetchDisabledModels();
111
115
  }, [isOpen]);
112
116
 
@@ -319,16 +323,16 @@ export default function ModelSelectModal({
319
323
  }, [combos, searchQuery, kindFilter]);
320
324
 
321
325
  // Sort models alphabetically, with added models floated to top
322
- const sortModels = (models) => {
323
- const added = models.filter(m => addedModelValues.includes(m.value)).sort((a, b) => a.name.localeCompare(b.name));
324
- const rest = models.filter(m => !addedModelValues.includes(m.value)).sort((a, b) => a.name.localeCompare(b.name));
325
- return [...added, ...rest];
326
- };
327
-
328
326
  // Filter models by search query
329
327
  const filteredGroups = useMemo(() => {
330
328
  const query = searchQuery.trim().toLowerCase();
331
329
 
330
+ const sortModels = (models) => {
331
+ const added = models.filter(m => addedModelValues.includes(m.value)).sort((a, b) => a.name.localeCompare(b.name));
332
+ const rest = models.filter(m => !addedModelValues.includes(m.value)).sort((a, b) => a.name.localeCompare(b.name));
333
+ return [...added, ...rest];
334
+ };
335
+
332
336
  const filtered = {};
333
337
  Object.entries(groupedModels).forEach(([providerId, group]) => {
334
338
  let models = group.models;
@@ -30,6 +30,7 @@ export default function OAuthModal({ isOpen, provider, providerInfo, onSuccess,
30
30
  // Detect if running on localhost (client-side only)
31
31
  useEffect(() => {
32
32
  if (typeof window !== "undefined") {
33
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- one-time mount initialization from window.location (external source, client-only, avoids hydration mismatch)
33
34
  setIsLocalhost(
34
35
  window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1"
35
36
  );
@@ -64,7 +65,7 @@ export default function OAuthModal({ isOpen, provider, providerInfo, onSuccess,
64
65
  setError(err.message);
65
66
  setStep("error");
66
67
  }
67
- }, [authData, provider, onSuccess]);
68
+ }, [authData, provider, onSuccess, oauthMeta]);
68
69
 
69
70
  const completeXaiManualCode = useCallback(async (code) => {
70
71
  if (!authData?.state) return;
@@ -310,6 +311,7 @@ export default function OAuthModal({ isOpen, provider, providerInfo, onSuccess,
310
311
  // Reset state and start OAuth when modal opens
311
312
  useEffect(() => {
312
313
  if (isOpen && provider) {
314
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- reset-on-open: clears previous flow state before starting a new OAuth flow
313
315
  setAuthData(null);
314
316
  setCallbackUrl("");
315
317
  setError(null);
@@ -10,6 +10,7 @@ export default function PricingModal({ isOpen, onClose, onSave }) {
10
10
 
11
11
  useEffect(() => {
12
12
  if (isOpen) {
13
+ // eslint-disable-next-line react-hooks/immutability -- false positive: these are local fetch+setState helpers invoked once on effect fire (not during render); defined with const below because all invocations are deferred (effects/events), so no TDZ issue at runtime
13
14
  loadPricing();
14
15
  }
15
16
  }, [isOpen]);
@@ -1,6 +1,7 @@
1
1
  "use client";
2
+ /* eslint-disable @next/next/no-img-element -- dynamic/blob/external image src with onError fallback; next/image requires static dims + domain allowlist */
2
3
 
3
- import { useEffect, useState } from "react";
4
+ import { useState } from "react";
4
5
  import PropTypes from "prop-types";
5
6
 
6
7
  export default function ProviderIcon({
@@ -14,10 +15,14 @@ export default function ProviderIcon({
14
15
  const [errored, setErrored] = useState(false);
15
16
  const [imageSrc, setImageSrc] = useState(src);
16
17
 
17
- useEffect(() => {
18
+ // Reset error/fallback state when `src` changes by adjusting state during
19
+ // render (React docs pattern) instead of an effect + extra re-render.
20
+ const [prevSrc, setPrevSrc] = useState(src);
21
+ if (prevSrc !== src) {
22
+ setPrevSrc(src);
18
23
  setErrored(false);
19
24
  setImageSrc(src);
20
- }, [src]);
25
+ }
21
26
 
22
27
  if (!imageSrc || errored) {
23
28
  return (
@@ -9,6 +9,7 @@ export default function RequestLogger() {
9
9
  const [autoRefresh, setAutoRefresh] = useState(true);
10
10
 
11
11
  useEffect(() => {
12
+ // eslint-disable-next-line react-hooks/immutability -- false positive: these are local fetch+setState helpers invoked once on effect fire (not during render); defined with const below because all invocations are deferred (effects/events), so no TDZ issue at runtime
12
13
  fetchLogs();
13
14
  }, []);
14
15
 
@@ -84,6 +84,7 @@ export default function Sidebar({ onClose }) {
84
84
  }, []);
85
85
 
86
86
  useEffect(() => {
87
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- route-driven UI sync: auto-expands the Advanced section when navigating to an advanced page; user can still collapse it
87
88
  if (advancedActive) setAdvancedOpen(true);
88
89
  }, [advancedActive]);
89
90