zevairouter 1.0.43 → 1.0.44

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 (307) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +4 -4
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  31. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  32. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  33. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  40. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  41. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  42. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  43. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  44. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  45. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  47. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  48. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  60. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  61. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  62. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  63. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  64. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  65. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  66. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  67. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  68. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  69. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  70. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  71. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  72. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  73. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  74. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  75. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  76. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  78. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  79. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  80. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  81. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  82. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  83. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  84. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  85. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  86. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  87. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  88. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  89. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  90. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  91. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  92. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  93. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  94. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  95. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  96. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  97. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  98. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  99. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  100. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  101. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  102. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  103. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  104. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  105. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  106. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  107. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  108. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  109. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  110. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  111. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  112. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  113. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  114. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  115. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  116. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  117. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  118. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  119. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  120. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  121. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  122. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  123. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  124. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  125. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  126. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  127. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  128. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  129. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  130. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  131. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  132. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  133. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  134. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  135. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  136. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  137. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  138. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  139. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  140. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  141. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  142. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  143. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  144. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  145. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  146. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  147. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  148. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  149. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  150. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  151. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  152. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  153. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  154. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  155. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  156. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  157. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  158. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  159. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  160. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  161. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  162. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  163. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  164. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  165. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  166. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  167. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  168. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  169. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  170. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  171. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  172. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  173. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  174. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  175. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  176. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  177. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  178. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  179. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  180. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  181. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  182. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  183. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  184. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  185. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  186. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  187. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  188. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  189. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  190. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  191. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  192. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  193. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  194. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  195. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  196. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  197. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  198. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  199. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  200. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  201. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  202. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  203. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  204. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  205. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  206. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  207. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  208. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  209. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  210. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  211. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  212. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  213. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  214. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  215. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  216. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  217. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  218. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  220. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  221. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  222. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  223. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  224. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  225. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  226. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  227. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  228. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  229. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  230. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  231. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  232. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  233. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  234. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  235. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  236. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  237. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  238. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  239. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  240. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  241. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  242. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  243. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  244. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  245. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  246. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  247. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  248. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  249. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  251. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  252. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  253. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  254. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  255. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  256. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  257. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  258. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  259. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  260. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  261. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  262. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  263. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  264. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  265. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  266. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  267. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  268. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  269. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  270. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  271. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  272. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  273. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  274. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  275. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  276. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  277. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  278. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  279. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  280. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  281. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  282. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  283. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  284. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  285. package/cli/app/.next-cli-build/server/app-paths-manifest.json +4 -4
  286. package/cli/app/.next-cli-build/server/chunks/2777.js +1 -1
  287. package/cli/app/.next-cli-build/server/chunks/318.js +1 -1
  288. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  289. package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
  290. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  291. package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
  292. package/cli/app/.next-cli-build/server/chunks/7276.js +2 -2
  293. package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
  294. package/cli/app/.next-cli-build/server/chunks/8450.js +1 -1
  295. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  296. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  297. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  298. package/cli/app/.next-cli-build/static/chunks/{1321-3f408a698d9c9da9.js → 1321-a179ec9bacf35359.js} +1 -1
  299. package/cli/app/package.json +1 -1
  300. package/cli/package.json +1 -1
  301. package/open-sse/services/usage.js +309 -0
  302. package/package.json +1 -1
  303. package/src/app/api/providers/[id]/models/route.js +38 -0
  304. package/src/app/api/v1/models/route.js +20 -0
  305. package/src/shared/constants/providers.js +8 -0
  306. /package/cli/app/.next-cli-build/static/{fd5MEFhSt3dq0IoH1ok24 → bAJp2tRybHzjTO6gr0kf_}/_buildManifest.js +0 -0
  307. /package/cli/app/.next-cli-build/static/{fd5MEFhSt3dq0IoH1ok24 → bAJp2tRybHzjTO6gr0kf_}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.43",
3
+ "version": "1.0.44",
4
4
  "description": "ZevaiRouter - AI Router with provider automation, multi-account workflows, and quota tracking",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.0.43",
3
+ "version": "1.0.44",
4
4
  "description": "ZevaiRouter CLI - Start and manage ZevaiRouter server",
5
5
  "bin": {
6
6
  "zevai": "./cli.js"
@@ -131,6 +131,15 @@ export async function getUsageForProvider(connection, proxyOptions = null) {
131
131
  return await getMiniMaxUsage(apiKey, provider, proxyOptions);
132
132
  case "grok-cli":
133
133
  return await getGrokCliUsage(accessToken, providerSpecificData, proxyOptions);
134
+ case "xai":
135
+ return await getXaiUsage(accessToken || apiKey, providerSpecificData, proxyOptions);
136
+ case "cline":
137
+ case "clinepass":
138
+ return await getClineUsage(accessToken || apiKey, provider, proxyOptions);
139
+ case "kimchi":
140
+ return await getKimchiUsage(accessToken || apiKey, providerSpecificData, proxyOptions);
141
+ case "cursor":
142
+ return await getCursorUsage(accessToken, providerSpecificData);
134
143
  default:
135
144
  return { message: `Usage API not implemented for ${provider}` };
136
145
  }
@@ -1976,3 +1985,303 @@ export async function getGrokCliUsage(accessToken, providerSpecificData = null,
1976
1985
  return { message: `Grok CLI usage error: ${error.message}` };
1977
1986
  }
1978
1987
  }
1988
+
1989
+ // ─── Shared: dig credit-like fields from arbitrary JSON ─────────────────────
1990
+
1991
+ function digCreditFields(obj, depth = 0, path = "") {
1992
+ if (!obj || typeof obj !== "object" || depth > 4) return null;
1993
+ const candidates = [];
1994
+ const keys = Object.entries(obj);
1995
+ for (const [k, v] of keys) {
1996
+ const lk = k.toLowerCase();
1997
+ if (v && typeof v === "object" && !Array.isArray(v)) {
1998
+ const nested = digCreditFields(v, depth + 1, path ? `${path}.${k}` : k);
1999
+ if (nested) candidates.push(nested);
2000
+ continue;
2001
+ }
2002
+ if (typeof v !== "number" && typeof v !== "string") continue;
2003
+ const n = toFiniteNumber(v, NaN);
2004
+ if (!Number.isFinite(n)) continue;
2005
+ if (/(remaining|balance|credit|quota|limit|allowance|cap|used|spent|consumed)/i.test(lk)) {
2006
+ candidates.push({ key: path ? `${path}.${k}` : k, name: k, value: n, kind: lk });
2007
+ }
2008
+ }
2009
+ if (!candidates.length) return null;
2010
+ // Prefer explicit remaining/balance pairs
2011
+ return candidates;
2012
+ }
2013
+
2014
+ function buildQuotaFromCreditFields(fields) {
2015
+ if (!fields?.length) return null;
2016
+ const by = (re) => fields.find((f) => re.test(f.kind) || re.test(f.name));
2017
+ const remaining = by(/remaining|balance|credit(?!s_used)/i);
2018
+ const total = by(/limit|cap|allowance|total|quota(?!_used)/i);
2019
+ const used = by(/used|spent|consumed/i);
2020
+ if (total && Number(total.value) > 0) {
2021
+ const u = used
2022
+ ? Math.max(0, Number(used.value))
2023
+ : remaining
2024
+ ? Math.max(0, Number(total.value) - Number(remaining.value))
2025
+ : 0;
2026
+ const rem = Math.max(0, Number(total.value) - u);
2027
+ return {
2028
+ used: u,
2029
+ total: Number(total.value),
2030
+ remainingPercentage: (rem / Number(total.value)) * 100,
2031
+ resetAt: null,
2032
+ unlimited: false,
2033
+ };
2034
+ }
2035
+ if (remaining && Number(remaining.value) >= 0) {
2036
+ const bal = Number(remaining.value);
2037
+ return {
2038
+ used: 0,
2039
+ total: bal > 0 ? bal : 1,
2040
+ remainingPercentage: bal > 0 ? 100 : 0,
2041
+ resetAt: null,
2042
+ unlimited: false,
2043
+ };
2044
+ }
2045
+ return null;
2046
+ }
2047
+
2048
+ // ─── Cline / ClinePass ──────────────────────────────────────────────────────
2049
+
2050
+ export async function getClineUsage(accessToken, provider = "cline", proxyOptions = null) {
2051
+ if (!accessToken) return { message: "Cline access token not available." };
2052
+ try {
2053
+ // Dynamic import avoids circular deps with package.json in browser bundles
2054
+ const { buildClineHeaders } = await import("../../src/shared/utils/clineAuth.js");
2055
+ const headers = buildClineHeaders(accessToken, { Accept: "application/json" });
2056
+ const res = await proxyAwareFetch("https://api.cline.bot/api/v1/users/me", {
2057
+ method: "GET",
2058
+ headers,
2059
+ }, proxyOptions);
2060
+
2061
+ if (res.status === 401 || res.status === 403) {
2062
+ return { message: "Cline authentication expired. Please re-authorize." };
2063
+ }
2064
+ if (!res.ok) {
2065
+ return { message: `Cline user API error (${res.status})` };
2066
+ }
2067
+
2068
+ const data = await res.json().catch(() => null);
2069
+ if (!data || typeof data !== "object") {
2070
+ return { message: "Cline user response was not JSON." };
2071
+ }
2072
+
2073
+ // Cline wraps payload in { data: {...} } sometimes
2074
+ const user = data.data && typeof data.data === "object" ? data.data : data;
2075
+ const email = user.email || user.user?.email || null;
2076
+ const plan =
2077
+ user.plan ||
2078
+ user.subscription?.plan ||
2079
+ user.subscription?.name ||
2080
+ user.organization?.plan ||
2081
+ user.organizations?.[0]?.plan ||
2082
+ (provider === "clinepass" ? "ClinePass" : "Cline") ;
2083
+
2084
+ const fields = digCreditFields(user) || [];
2085
+ const quota = buildQuotaFromCreditFields(fields);
2086
+ const quotas = {};
2087
+ if (quota) quotas.Credits = quota;
2088
+
2089
+ // Organization seats / orgs count as informational quota rows when no credits
2090
+ const orgs = user.organizations || user.organization;
2091
+ if (!Object.keys(quotas).length && orgs) {
2092
+ quotas.Account = {
2093
+ used: 0,
2094
+ total: 0,
2095
+ remainingPercentage: 100,
2096
+ resetAt: null,
2097
+ unlimited: true,
2098
+ };
2099
+ }
2100
+
2101
+ if (!Object.keys(quotas).length) {
2102
+ return {
2103
+ plan: typeof plan === "string" ? plan : "Cline",
2104
+ email,
2105
+ message: "Cline connected. No credit allotment was returned by the account API.",
2106
+ quotas: {},
2107
+ };
2108
+ }
2109
+
2110
+ return {
2111
+ plan: typeof plan === "string" ? plan : "Cline",
2112
+ email,
2113
+ quotas,
2114
+ };
2115
+ } catch (error) {
2116
+ return { message: `Cline usage error: ${error.message}` };
2117
+ }
2118
+ }
2119
+
2120
+ // ─── Kimchi ─────────────────────────────────────────────────────────────────
2121
+
2122
+ export async function getKimchiUsage(accessToken, providerSpecificData = null, proxyOptions = null) {
2123
+ if (!accessToken) return { message: "Kimchi access token not available." };
2124
+ try {
2125
+ const url = "https://app.kimchi.dev/api/v1/me";
2126
+ const res = await proxyAwareFetch(url, {
2127
+ method: "GET",
2128
+ headers: {
2129
+ Accept: "application/json",
2130
+ Authorization: `Bearer ${accessToken}`,
2131
+ "User-Agent": "kimchi/0.1.50",
2132
+ },
2133
+ }, proxyOptions);
2134
+
2135
+ if (res.status === 401 || res.status === 403) {
2136
+ return { message: "Kimchi authentication expired. Please re-authorize." };
2137
+ }
2138
+ if (!res.ok) {
2139
+ return { message: `Kimchi user API error (${res.status})` };
2140
+ }
2141
+
2142
+ const user = await res.json().catch(() => null);
2143
+ if (!user || typeof user !== "object") {
2144
+ return { message: "Kimchi user response was not JSON." };
2145
+ }
2146
+
2147
+ const email = user.email || providerSpecificData?.username || null;
2148
+ const plan = user.plan || user.tier || user.subscription?.name || "Kimchi";
2149
+ const fields = digCreditFields(user) || [];
2150
+ const quota = buildQuotaFromCreditFields(fields);
2151
+ const quotas = {};
2152
+ if (quota) quotas.Credits = quota;
2153
+ else {
2154
+ quotas.Account = {
2155
+ used: 0,
2156
+ total: 0,
2157
+ remainingPercentage: 100,
2158
+ resetAt: null,
2159
+ unlimited: true,
2160
+ };
2161
+ }
2162
+
2163
+ return {
2164
+ plan: typeof plan === "string" ? plan : "Kimchi",
2165
+ email,
2166
+ quotas,
2167
+ };
2168
+ } catch (error) {
2169
+ return { message: `Kimchi usage error: ${error.message}` };
2170
+ }
2171
+ }
2172
+
2173
+ // ─── xAI (API key or OAuth → api.x.ai) ──────────────────────────────────────
2174
+
2175
+ export async function getXaiUsage(token, providerSpecificData = null, proxyOptions = null) {
2176
+ if (!token) return { message: "xAI token not available." };
2177
+ try {
2178
+ const headers = {
2179
+ Authorization: `Bearer ${token}`,
2180
+ Accept: "application/json",
2181
+ };
2182
+
2183
+ // Prefer management-style key probe when available; fall back to models list.
2184
+ const probes = [
2185
+ "https://api.x.ai/v1/api-key",
2186
+ "https://api.x.ai/v1/models",
2187
+ ];
2188
+
2189
+ let lastStatus = 0;
2190
+ let body = null;
2191
+ let okUrl = null;
2192
+ for (const url of probes) {
2193
+ const res = await proxyAwareFetch(url, { method: "GET", headers }, proxyOptions);
2194
+ lastStatus = res.status;
2195
+ if (res.status === 401 || res.status === 403) {
2196
+ return { message: "xAI authentication expired. Please re-authorize or update the API key." };
2197
+ }
2198
+ if (res.ok) {
2199
+ body = await res.json().catch(() => null);
2200
+ okUrl = url;
2201
+ break;
2202
+ }
2203
+ }
2204
+
2205
+ if (!body) {
2206
+ return { message: `xAI API error (${lastStatus || "unknown"})` };
2207
+ }
2208
+
2209
+ const fields = digCreditFields(body) || [];
2210
+ const quota = buildQuotaFromCreditFields(fields);
2211
+ const quotas = {};
2212
+ if (quota) {
2213
+ quotas.Credits = quota;
2214
+ } else {
2215
+ // Connected / healthy without numeric allotment
2216
+ const modelCount = Array.isArray(body?.data) ? body.data.length : 0;
2217
+ quotas.API = {
2218
+ used: 0,
2219
+ total: 0,
2220
+ remainingPercentage: 100,
2221
+ resetAt: null,
2222
+ unlimited: true,
2223
+ };
2224
+ if (modelCount > 0) {
2225
+ // informational only via plan string
2226
+ }
2227
+ }
2228
+
2229
+ const email = providerSpecificData?.email || null;
2230
+ const plan =
2231
+ body.name ||
2232
+ body.api_key_name ||
2233
+ body.team?.name ||
2234
+ (okUrl?.includes("api-key") ? "xAI API Key" : "xAI");
2235
+
2236
+ return {
2237
+ plan: typeof plan === "string" ? plan : "xAI",
2238
+ email,
2239
+ quotas,
2240
+ };
2241
+ } catch (error) {
2242
+ return { message: `xAI usage error: ${error.message}` };
2243
+ }
2244
+ }
2245
+
2246
+ // ─── Cursor (session token — no public quota API) ───────────────────────────
2247
+
2248
+ export async function getCursorUsage(accessToken, providerSpecificData = null) {
2249
+ if (!accessToken) return { message: "Cursor access token not available." };
2250
+
2251
+ // Cursor uses a long-lived session JWT; there is no stable public quota endpoint.
2252
+ // Surface connection health + any plan hints from stored providerSpecificData / JWT claims.
2253
+ let plan = providerSpecificData?.plan || providerSpecificData?.membershipType || "Cursor";
2254
+ let email = providerSpecificData?.email || null;
2255
+
2256
+ try {
2257
+ const parts = String(accessToken).split(".");
2258
+ if (parts.length === 3) {
2259
+ const b64 = parts[1].replace(/-/g, "+").replace(/_/g, "/");
2260
+ const padded = b64 + "=".repeat((4 - (b64.length % 4)) % 4);
2261
+ const payload = JSON.parse(Buffer.from(padded, "base64").toString("utf8"));
2262
+ email = email || payload.email || payload.preferred_username || null;
2263
+ plan =
2264
+ payload.plan ||
2265
+ payload.subscription ||
2266
+ payload.membershipType ||
2267
+ payload.tier ||
2268
+ plan;
2269
+ }
2270
+ } catch {
2271
+ /* ignore JWT decode errors */
2272
+ }
2273
+
2274
+ return {
2275
+ plan: typeof plan === "string" ? plan : "Cursor",
2276
+ email,
2277
+ quotas: {
2278
+ Session: {
2279
+ used: 0,
2280
+ total: 0,
2281
+ remainingPercentage: 100,
2282
+ resetAt: null,
2283
+ unlimited: true,
2284
+ },
2285
+ },
2286
+ };
2287
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.43",
3
+ "version": "1.0.44",
4
4
  "description": "ZevaiRouter - AI Router with provider automation, multi-account workflows, and quota tracking",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
@@ -252,6 +252,44 @@ const PROVIDER_MODELS_CONFIG = {
252
252
  };
253
253
  }
254
254
  },
255
+ cline: {
256
+ customResolver: async (connection) => {
257
+ // Cline catalog is the full Cline gateway list (not just cline-pass/*)
258
+ const result = await resolveClinepassModels({
259
+ accessToken: connection.accessToken,
260
+ apiKey: connection.apiKey,
261
+ });
262
+ // resolveClinepassModels filters to cline-pass/* — for Cline use OpenAI models endpoint via probe fallback
263
+ const token = connection.apiKey || connection.accessToken;
264
+ if (!token) {
265
+ return { models: getModelsByProviderId("cline") };
266
+ }
267
+ try {
268
+ const { buildClineHeaders } = await import("@/shared/utils/clineAuth");
269
+ const res = await fetch("https://api.cline.bot/api/v1/models", {
270
+ headers: buildClineHeaders(token, { Accept: "application/json" }),
271
+ });
272
+ if (res.ok) {
273
+ const json = await res.json();
274
+ const raw = Array.isArray(json) ? json : json?.data;
275
+ if (Array.isArray(raw) && raw.length) {
276
+ return {
277
+ models: raw
278
+ .filter((m) => typeof m?.id === "string")
279
+ .map((m) => ({ id: m.id, name: m.name || m.id })),
280
+ };
281
+ }
282
+ }
283
+ } catch {
284
+ /* fall through */
285
+ }
286
+ if (result?.models?.length) return { models: result.models };
287
+ return {
288
+ models: getModelsByProviderId("cline"),
289
+ warning: "Cline returned no live models; falling back to static catalog.",
290
+ };
291
+ }
292
+ },
255
293
  github: {
256
294
  customResolver: async (connection) => {
257
295
  const result = await resolveCopilotModels({
@@ -54,6 +54,26 @@ const LIVE_MODEL_RESOLVERS = {
54
54
  });
55
55
  return result?.models?.length ? { models: result.models } : null;
56
56
  },
57
+ cline: async (conn) => {
58
+ const token = conn.apiKey || conn.accessToken;
59
+ if (!token) return null;
60
+ try {
61
+ const { buildClineHeaders } = await import("@/shared/utils/clineAuth");
62
+ const res = await fetch("https://api.cline.bot/api/v1/models", {
63
+ headers: buildClineHeaders(token, { Accept: "application/json" }),
64
+ });
65
+ if (!res.ok) return null;
66
+ const json = await res.json();
67
+ const raw = Array.isArray(json) ? json : json?.data;
68
+ if (!Array.isArray(raw) || raw.length === 0) return null;
69
+ const models = raw
70
+ .filter((m) => typeof m?.id === "string")
71
+ .map((m) => ({ id: m.id, name: m.name || m.id }));
72
+ return models.length ? { models } : null;
73
+ } catch {
74
+ return null;
75
+ }
76
+ },
57
77
  github: async (conn) => {
58
78
  const result = await resolveCopilotModels({
59
79
  accessToken: conn.accessToken,
@@ -426,6 +426,12 @@ export const USAGE_SUPPORTED_PROVIDERS = [
426
426
  "iflow",
427
427
  // Wave 2: Grok CLI / Grok Build billing
428
428
  "grok-cli",
429
+ // Multi-account quota expansion
430
+ "xai",
431
+ "cline",
432
+ "clinepass",
433
+ "kimchi",
434
+ "cursor",
429
435
  ];
430
436
 
431
437
  // Subset that uses apikey auth (still surfaced on quota page)
@@ -436,4 +442,6 @@ export const USAGE_APIKEY_PROVIDERS = [
436
442
  "minimax-cn",
437
443
  "codebuddy",
438
444
  "codebuddy-cn",
445
+ "xai",
446
+ "clinepass",
439
447
  ];