zevairouter 1.0.42 → 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 (505) hide show
  1. package/CHANGELOG.md +18 -7
  2. package/README.md +1 -1
  3. package/cli/LICENSE +1 -1
  4. package/cli/README.md +28 -28
  5. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  6. package/cli/app/.next-cli-build/app-path-routes-manifest.json +5 -5
  7. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  39. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  40. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  41. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  42. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  43. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  44. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  45. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  47. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  48. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  49. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  50. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  51. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
  53. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  62. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  63. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  64. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  65. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  66. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  67. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  68. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
  69. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  70. package/cli/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  71. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
  72. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  73. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  74. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  75. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  76. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  77. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  78. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  97. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  98. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  99. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  100. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  101. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  102. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  103. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  104. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  105. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  106. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  107. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  108. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  109. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  110. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  111. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  112. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  113. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  114. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  115. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  116. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  117. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  118. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  119. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  120. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  121. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  122. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  123. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  124. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  125. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  126. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  127. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  128. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  129. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  130. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  131. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  132. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  133. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  134. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  135. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  136. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  137. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  138. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  139. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  140. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  141. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  142. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  143. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  144. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  145. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  146. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  147. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  148. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  149. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  150. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  151. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  152. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  153. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  154. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  155. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  156. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  157. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  158. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  159. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  160. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  161. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  162. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  163. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  164. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  165. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  166. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  167. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  168. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  169. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  170. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  171. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  172. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  173. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  174. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  175. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  176. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  177. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  178. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  179. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  180. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  181. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  182. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  183. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  184. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  185. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  186. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  187. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  188. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  189. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  190. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  191. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  192. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  193. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  194. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  195. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  196. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  197. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  198. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  199. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  200. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  201. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  202. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  203. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  204. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  205. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  206. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  207. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  208. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  209. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  210. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  211. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  212. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  213. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  214. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  215. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  216. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  217. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  218. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  220. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  221. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  222. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  223. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  224. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  225. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  226. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  227. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  228. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  229. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  230. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  231. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  232. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  233. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  234. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  235. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  236. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  237. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  238. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  239. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  240. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  241. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  242. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  243. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  244. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  245. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  246. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  247. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  248. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  249. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  251. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  252. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  253. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  254. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  255. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  256. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  257. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  258. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  259. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  260. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  261. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  262. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  263. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  264. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  265. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  266. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  267. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  268. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  269. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  270. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  271. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  272. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  273. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  274. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  275. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  276. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  277. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  278. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  279. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  280. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  281. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  282. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  283. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  284. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  285. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  286. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  287. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  288. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  289. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  290. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  291. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  292. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  293. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  294. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  295. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  297. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  298. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  299. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  300. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  301. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  302. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  303. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  304. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  305. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  306. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  307. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  308. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  309. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  310. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  311. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  312. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  313. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  314. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  315. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  316. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  317. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  318. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  319. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  320. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  321. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  322. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  323. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  324. package/cli/app/.next-cli-build/server/app-paths-manifest.json +5 -5
  325. package/cli/app/.next-cli-build/server/chunks/1939.js +1 -1
  326. package/cli/app/.next-cli-build/server/chunks/2722.js +16 -16
  327. package/cli/app/.next-cli-build/server/chunks/2777.js +1 -1
  328. package/cli/app/.next-cli-build/server/chunks/3104.js +1 -1
  329. package/cli/app/.next-cli-build/server/chunks/3110.js +1 -1
  330. package/cli/app/.next-cli-build/server/chunks/3159.js +1 -1
  331. package/cli/app/.next-cli-build/server/chunks/318.js +2 -2
  332. package/cli/app/.next-cli-build/server/chunks/4746.js +3 -3
  333. package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
  334. package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
  335. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  336. package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
  337. package/cli/app/.next-cli-build/server/chunks/7276.js +2 -2
  338. package/cli/app/.next-cli-build/server/chunks/8242.js +1 -1
  339. package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
  340. package/cli/app/.next-cli-build/server/chunks/8450.js +1 -1
  341. package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
  342. package/cli/app/.next-cli-build/server/chunks/915.js +7 -7
  343. package/cli/app/.next-cli-build/server/chunks/9489.js +1 -1
  344. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  345. package/cli/app/.next-cli-build/server/middleware.js +2 -2
  346. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  347. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  348. package/cli/app/.next-cli-build/static/chunks/{1321-89d6a896f3dae03e.js → 1321-a179ec9bacf35359.js} +1 -1
  349. package/cli/app/.next-cli-build/static/chunks/6069-f8381e3d2db222bb.js +54 -0
  350. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-c8d0727b97defe81.js +1 -0
  351. package/cli/app/package.json +1 -1
  352. package/cli/app/public/i18n/literals/ar.json +4 -4
  353. package/cli/app/public/i18n/literals/bn.json +4 -4
  354. package/cli/app/public/i18n/literals/cs.json +4 -4
  355. package/cli/app/public/i18n/literals/da.json +4 -4
  356. package/cli/app/public/i18n/literals/de.json +4 -4
  357. package/cli/app/public/i18n/literals/el.json +4 -4
  358. package/cli/app/public/i18n/literals/es.json +4 -4
  359. package/cli/app/public/i18n/literals/fi.json +4 -4
  360. package/cli/app/public/i18n/literals/fr.json +4 -4
  361. package/cli/app/public/i18n/literals/he.json +4 -4
  362. package/cli/app/public/i18n/literals/hi.json +4 -4
  363. package/cli/app/public/i18n/literals/hu.json +4 -4
  364. package/cli/app/public/i18n/literals/id.json +4 -4
  365. package/cli/app/public/i18n/literals/it.json +4 -4
  366. package/cli/app/public/i18n/literals/ja.json +4 -4
  367. package/cli/app/public/i18n/literals/ko.json +4 -4
  368. package/cli/app/public/i18n/literals/nl.json +4 -4
  369. package/cli/app/public/i18n/literals/no.json +4 -4
  370. package/cli/app/public/i18n/literals/pl.json +4 -4
  371. package/cli/app/public/i18n/literals/pt-BR.json +4 -4
  372. package/cli/app/public/i18n/literals/pt-PT.json +4 -4
  373. package/cli/app/public/i18n/literals/ro.json +4 -4
  374. package/cli/app/public/i18n/literals/ru.json +4 -4
  375. package/cli/app/public/i18n/literals/sv.json +4 -4
  376. package/cli/app/public/i18n/literals/th.json +4 -4
  377. package/cli/app/public/i18n/literals/tl.json +4 -4
  378. package/cli/app/public/i18n/literals/tr.json +4 -4
  379. package/cli/app/public/i18n/literals/uk.json +4 -4
  380. package/cli/app/public/i18n/literals/ur.json +4 -4
  381. package/cli/app/public/i18n/literals/vi.json +4 -4
  382. package/cli/app/public/i18n/literals/zh-CN.json +15 -15
  383. package/cli/app/public/i18n/literals/zh-TW.json +4 -4
  384. package/cli/app/src/mitm/server.js +2 -2
  385. package/cli/cli.js +9 -9
  386. package/cli/package.json +1 -1
  387. package/cli/src/cli/api/client.js +3 -3
  388. package/cli/src/cli/menus/cliTools.js +18 -15
  389. package/cli/src/cli/menus/settings.js +1 -1
  390. package/cli/src/cli/tray/autostart.js +6 -6
  391. package/cli/src/cli/tray/tray.js +2 -2
  392. package/cli/src/cli/tray/tray.ps1 +1 -1
  393. package/open-sse/config/appConstants.js +1 -1
  394. package/open-sse/config/kiroConstants.js +5 -5
  395. package/open-sse/config/providerModels.js +1 -1
  396. package/open-sse/executors/codebuddy-cn.js +1 -1
  397. package/open-sse/executors/commandcode.js +1 -1
  398. package/open-sse/rtk/headroom.js +1 -1
  399. package/open-sse/services/antigravityObfuscation.js +1 -1
  400. package/open-sse/services/kiroModels.js +4 -4
  401. package/open-sse/services/usage.js +310 -1
  402. package/open-sse/translator/request/openai-to-kiro.js +1 -1
  403. package/open-sse/translator/response/commandcode-to-openai.js +1 -1
  404. package/open-sse/utils/sessionManager.js +2 -2
  405. package/open-sse/utils/thinkingSuffix.js +1 -1
  406. package/package.json +1 -1
  407. package/public/i18n/literals/ar.json +4 -4
  408. package/public/i18n/literals/bn.json +4 -4
  409. package/public/i18n/literals/cs.json +4 -4
  410. package/public/i18n/literals/da.json +4 -4
  411. package/public/i18n/literals/de.json +4 -4
  412. package/public/i18n/literals/el.json +4 -4
  413. package/public/i18n/literals/es.json +4 -4
  414. package/public/i18n/literals/fi.json +4 -4
  415. package/public/i18n/literals/fr.json +4 -4
  416. package/public/i18n/literals/he.json +4 -4
  417. package/public/i18n/literals/hi.json +4 -4
  418. package/public/i18n/literals/hu.json +4 -4
  419. package/public/i18n/literals/id.json +4 -4
  420. package/public/i18n/literals/it.json +4 -4
  421. package/public/i18n/literals/ja.json +4 -4
  422. package/public/i18n/literals/ko.json +4 -4
  423. package/public/i18n/literals/nl.json +4 -4
  424. package/public/i18n/literals/no.json +4 -4
  425. package/public/i18n/literals/pl.json +4 -4
  426. package/public/i18n/literals/pt-BR.json +4 -4
  427. package/public/i18n/literals/pt-PT.json +4 -4
  428. package/public/i18n/literals/ro.json +4 -4
  429. package/public/i18n/literals/ru.json +4 -4
  430. package/public/i18n/literals/sv.json +4 -4
  431. package/public/i18n/literals/th.json +4 -4
  432. package/public/i18n/literals/tl.json +4 -4
  433. package/public/i18n/literals/tr.json +4 -4
  434. package/public/i18n/literals/uk.json +4 -4
  435. package/public/i18n/literals/ur.json +4 -4
  436. package/public/i18n/literals/vi.json +4 -4
  437. package/public/i18n/literals/zh-CN.json +15 -15
  438. package/public/i18n/literals/zh-TW.json +4 -4
  439. package/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js +2 -2
  440. package/src/app/(dashboard)/dashboard/cli-tools/components/ApiKeySelect.js +1 -1
  441. package/src/app/(dashboard)/dashboard/cli-tools/components/BaseUrlSelect.js +1 -1
  442. package/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js +5 -5
  443. package/src/app/(dashboard)/dashboard/cli-tools/components/ClineToolCard.js +4 -4
  444. package/src/app/(dashboard)/dashboard/cli-tools/components/CodexToolCard.js +8 -8
  445. package/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js +7 -7
  446. package/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js +4 -4
  447. package/src/app/(dashboard)/dashboard/cli-tools/components/DeepSeekTuiToolCard.js +4 -4
  448. package/src/app/(dashboard)/dashboard/cli-tools/components/DefaultToolCard.js +1 -1
  449. package/src/app/(dashboard)/dashboard/cli-tools/components/DroidToolCard.js +16 -11
  450. package/src/app/(dashboard)/dashboard/cli-tools/components/EndpointPresetControl.js +1 -1
  451. package/src/app/(dashboard)/dashboard/cli-tools/components/HermesToolCard.js +3 -3
  452. package/src/app/(dashboard)/dashboard/cli-tools/components/JcodeToolCard.js +16 -16
  453. package/src/app/(dashboard)/dashboard/cli-tools/components/KiloToolCard.js +4 -4
  454. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmServerCard.js +2 -2
  455. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenClawToolCard.js +11 -11
  456. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js +18 -13
  457. package/src/app/(dashboard)/dashboard/cli-tools/components/ToolSummaryCard.js +1 -1
  458. package/src/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  459. package/src/app/api/cli-tools/claude-settings/route.js +2 -2
  460. package/src/app/api/cli-tools/cline-settings/route.js +4 -4
  461. package/src/app/api/cli-tools/codex-settings/route.js +16 -16
  462. package/src/app/api/cli-tools/copilot-settings/route.js +19 -14
  463. package/src/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  464. package/src/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  465. package/src/app/api/cli-tools/cowork-settings/route.js +4 -4
  466. package/src/app/api/cli-tools/deepseek-tui-settings/route.js +7 -7
  467. package/src/app/api/cli-tools/droid-settings/route.js +12 -12
  468. package/src/app/api/cli-tools/hermes-settings/route.js +4 -4
  469. package/src/app/api/cli-tools/jcode-settings/route.js +13 -13
  470. package/src/app/api/cli-tools/kilo-settings/route.js +7 -7
  471. package/src/app/api/cli-tools/openclaw-settings/route.js +26 -26
  472. package/src/app/api/cli-tools/opencode-settings/route.js +27 -27
  473. package/src/app/api/headroom/restart/route.js +1 -1
  474. package/src/app/api/headroom/start/route.js +1 -1
  475. package/src/app/api/models/test/ping.js +2 -2
  476. package/src/app/api/providers/[id]/models/route.js +38 -0
  477. package/src/app/api/v1/models/route.js +20 -0
  478. package/src/app/globals.css +1 -1
  479. package/src/dashboardGuard.js +2 -2
  480. package/src/lib/appUpdater.js +4 -4
  481. package/src/lib/db/dataDirMigration.js +18 -26
  482. package/src/lib/headroom/detect.js +1 -1
  483. package/src/lib/mcp/stdioSseBridge.js +5 -5
  484. package/src/lib/network/proxyTest.js +1 -1
  485. package/src/lib/oauth/constants/xai.js +1 -1
  486. package/src/lib/oauth/services/codebuddyBulkImportManager.js +1 -1
  487. package/src/mitm/cert/install.js +11 -6
  488. package/src/mitm/cert/rootCA.js +2 -2
  489. package/src/mitm/config.js +1 -1
  490. package/src/mitm/handlers/base.js +4 -4
  491. package/src/mitm/handlers/copilot.js +2 -2
  492. package/src/mitm/handlers/kiro.js +3 -3
  493. package/src/mitm/manager.js +22 -17
  494. package/src/mitm/paths.js +1 -1
  495. package/src/mitm/server.js +1 -1
  496. package/src/shared/constants/cliTools.js +8 -8
  497. package/src/shared/constants/providers.js +10 -2
  498. package/src/shared/services/initializeApp.js +1 -1
  499. package/src/shared/utils/clineAuth.js +2 -2
  500. package/src/shared/utils/machineId.js +1 -1
  501. package/src/sse/services/codexGateway.js +4 -4
  502. package/cli/app/.next-cli-build/static/chunks/6069-3a19c2e23280b9f4.js +0 -54
  503. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-95c0533e8dd61515.js +0 -1
  504. /package/cli/app/.next-cli-build/static/{WPP0ARz-9ieVVo7WDF86q → bAJp2tRybHzjTO6gr0kf_}/_buildManifest.js +0 -0
  505. /package/cli/app/.next-cli-build/static/{WPP0ARz-9ieVVo7WDF86q → bAJp2tRybHzjTO6gr0kf_}/_ssgManifest.js +0 -0
@@ -1,4 +1,6 @@
1
1
  const api = require("../api/client");
2
+ const LEGACY_BRAND = String.fromCharCode(57) + "Router";
3
+ const LEGACY_BRAND_LC = LEGACY_BRAND.toLowerCase();
2
4
  const { pause, confirm } = require("../utils/input");
3
5
  const { showStatus } = require("../utils/display");
4
6
  const { selectModelFromList } = require("../utils/modelSelector");
@@ -179,10 +181,10 @@ async function buildCodexHeader() {
179
181
  const result = await api.getCliToolSettings("codex");
180
182
  if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
181
183
 
182
- const { installed, has9Router, config } = result.data;
184
+ const { installed, hasZevai, config } = result.data;
183
185
  if (!installed) return `Status: ${COLORS.red}✗ Codex CLI not installed${COLORS.reset}`;
184
186
 
185
- if (!has9Router) {
187
+ if (!hasZevai) {
186
188
  return [
187
189
  `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
188
190
  `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
@@ -267,18 +269,18 @@ async function buildDroidHeader() {
267
269
  const result = await api.getCliToolSettings("droid");
268
270
  if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
269
271
 
270
- const { installed, has9Router, settings } = result.data;
272
+ const { installed, hasZevai, settings } = result.data;
271
273
  if (!installed) return `Status: ${COLORS.red}✗ Factory Droid not installed${COLORS.reset}`;
272
274
 
273
- if (!has9Router) {
275
+ if (!hasZevai) {
274
276
  return [
275
277
  `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
276
278
  `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
277
279
  ].join("\n");
278
280
  }
279
281
 
280
- // Extract 9Router custom model config
281
- const custom = settings?.customModels?.find(m => m.id === "custom:9Router-0");
282
+ // Extract ZevaiRouter custom model config
283
+ const custom = settings?.customModels?.find(m => (m.id === "custom:Zevai-0" || m.id === `custom:${LEGACY_BRAND}-0`));
282
284
  const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
283
285
  if (custom?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${custom.baseUrl}${COLORS.reset}`);
284
286
  if (custom?.model) lines.push(`Model: ${COLORS.dim}${custom.model}${COLORS.reset}`);
@@ -350,20 +352,21 @@ async function buildOpenClawHeader() {
350
352
  const result = await api.getCliToolSettings("openclaw");
351
353
  if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
352
354
 
353
- const { installed, has9Router, settings } = result.data;
355
+ const { installed, hasZevai, settings } = result.data;
354
356
  if (!installed) return `Status: ${COLORS.red}✗ Open Claw not installed${COLORS.reset}`;
355
357
 
356
- if (!has9Router) {
358
+ if (!hasZevai) {
357
359
  return [
358
360
  `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
359
361
  `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
360
362
  ].join("\n");
361
363
  }
362
364
 
363
- // Extract 9Router provider config
364
- const provider = settings?.models?.providers?.["9router"];
365
+ // Extract ZevaiRouter provider config
366
+ const _providers = settings?.models?.providers || {};
367
+ const provider = _providers["zevai"] || _providers[LEGACY_BRAND_LC];
365
368
  const primary = settings?.agents?.defaults?.model?.primary || "";
366
- const model = primary.startsWith("9router/") ? primary.replace("9router/", "") : (provider?.models?.[0]?.id || "");
369
+ const model = (primary.startsWith("zevai/") || primary.startsWith(LEGACY_BRAND_LC + "/")) ? primary.replace(new RegExp("^zevai/|^" + LEGACY_BRAND_LC + "/"), "") : (provider?.models?.[0]?.id || "");
367
370
  const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
368
371
  if (provider?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${provider.baseUrl}${COLORS.reset}`);
369
372
  if (model) lines.push(`Model: ${COLORS.dim}${model}${COLORS.reset}`);
@@ -431,10 +434,10 @@ async function buildOpenCodeHeader() {
431
434
  const result = await api.getCliToolSettings("opencode");
432
435
  if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
433
436
 
434
- const { installed, has9Router, opencode } = result.data;
437
+ const { installed, hasZevai, opencode } = result.data;
435
438
  if (!installed) return `Status: ${COLORS.red}✗ OpenCode CLI not installed${COLORS.reset}`;
436
439
 
437
- if (!has9Router) {
440
+ if (!hasZevai) {
438
441
  return [
439
442
  `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
440
443
  `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
@@ -519,10 +522,10 @@ async function buildHermesHeader() {
519
522
  const result = await api.getCliToolSettings("hermes");
520
523
  if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
521
524
 
522
- const { installed, has9Router, settings } = result.data;
525
+ const { installed, hasZevai, settings } = result.data;
523
526
  if (!installed) return `Status: ${COLORS.red}✗ Hermes Agent not installed${COLORS.reset}`;
524
527
 
525
- if (!has9Router) {
528
+ if (!hasZevai) {
526
529
  return [
527
530
  `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
528
531
  `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
@@ -100,7 +100,7 @@ async function showSettingsMenu(breadcrumb = []) {
100
100
 
101
101
  /**
102
102
  * Reset authMode to "password" via API. Used when OIDC is misconfigured
103
- * and user is locked out of dashboard. CLI bypasses auth via x-9r-cli-token.
103
+ * and user is locked out of dashboard. CLI bypasses auth via x-zevai-cli-token.
104
104
  */
105
105
  async function resetAuthMode() {
106
106
  const ok = await confirm("Reset auth mode to PASSWORD (disable OIDC)?");
@@ -4,7 +4,7 @@ const os = require("os");
4
4
  const { execSync } = require("child_process");
5
5
 
6
6
  const APP_NAME = "zevai";
7
- const APP_LABEL = "com.9router.autostart";
7
+ const APP_LABEL = "com.zevairouter.autostart";
8
8
 
9
9
  /**
10
10
  * Resolve the absolute path to this package's cli.js.
@@ -12,7 +12,7 @@ const APP_LABEL = "com.9router.autostart";
12
12
  * Order of preference:
13
13
  * 1. Explicit `cliPath` argument — cleanest, used when called from running
14
14
  * cli.js with `__filename`.
15
- * 2. `process.argv[1]` if it's our cli.js — true when 9router is currently
15
+ * 2. `process.argv[1]` if it's our cli.js — true when zevairouter is currently
16
16
  * running and the tray menu fires this code path.
17
17
  * 3. Compute relative to this file's own location. autostart.js lives at
18
18
  * `<pkg>/src/cli/tray/autostart.js`, so cli.js is three levels up.
@@ -115,7 +115,7 @@ function isAutoStartEnabled() {
115
115
  * launchd is managing under our agent label.
116
116
  *
117
117
  * `launchctl unload <plist>` (and `load`) for an Aqua user-domain agent sends
118
- * SIGTERM to the running process. When the running 9router cli.js was itself
118
+ * SIGTERM to the running process. When the running zevairouter cli.js was itself
119
119
  * spawned by the autostart launchd agent (i.e. user enabled autostart at
120
120
  * some point, then rebooted, then clicked the tray icon's "Disable
121
121
  * Auto-start" menu item), an unload would kill the very process executing
@@ -182,9 +182,9 @@ function enableMacOS(cliPath) {
182
182
  <key>KeepAlive</key>
183
183
  <false/>
184
184
  <key>StandardOutPath</key>
185
- <string>/tmp/9router.log</string>
185
+ <string>/tmp/zevairouter.log</string>
186
186
  <key>StandardErrorPath</key>
187
- <string>/tmp/9router.error.log</string>
187
+ <string>/tmp/zevairouter.error.log</string>
188
188
  </dict>
189
189
  </plist>`;
190
190
 
@@ -247,7 +247,7 @@ function enableWindows(cliPath) {
247
247
  if (!routerScript) return false;
248
248
 
249
249
  // Run node + cli.js directly, hidden window. Avoids the fragile
250
- // `9router.cmd` lookup that depended on the npm prefix path.
250
+ // `zevairouter.cmd` lookup that depended on the npm prefix path.
251
251
  const vbsContent = `Set WshShell = CreateObject("WScript.Shell")
252
252
  WshShell.Run """${nodePath}"" ""${routerScript}"" --tray --skip-update", 0, False
253
253
  `;
@@ -230,7 +230,7 @@ function initUnixTray(options) {
230
230
  // failures (binary crash, EACCES, etc.) so users can see why the icon
231
231
  // didn't appear instead of getting a misleading "running in tray" log.
232
232
  trayInstance.ready().catch((err) => {
233
- process.stderr.write(`[9router] tray failed to start: ${err && err.message ? err.message : err}\n`);
233
+ process.stderr.write(`[zevairouter] tray failed to start: ${err && err.message ? err.message : err}\n`);
234
234
  });
235
235
  } else {
236
236
  trayInstance.onReady(() => {});
@@ -239,7 +239,7 @@ function initUnixTray(options) {
239
239
 
240
240
  return trayInstance;
241
241
  } catch (err) {
242
- process.stderr.write(`[9router] tray init error: ${err.message}\n`);
242
+ process.stderr.write(`[zevairouter] tray init error: ${err.message}\n`);
243
243
  return null;
244
244
  }
245
245
  }
@@ -1,4 +1,4 @@
1
- # 9Router tray icon for Windows using NotifyIcon
1
+ # ZevaiRouter tray icon for Windows using NotifyIcon
2
2
  # IPC: stdin JSON commands, stdout JSON events
3
3
  param([string]$IconPath, [string]$Tooltip)
4
4
 
@@ -222,7 +222,7 @@ export const OAUTH_ENDPOINTS = {
222
222
  // Generate Kimi OAuth custom headers
223
223
  export function buildKimiHeaders() {
224
224
  return {
225
- "X-Msh-Platform": "9router",
225
+ "X-Msh-Platform": "zevairouter",
226
226
  "X-Msh-Version": "2.1.2",
227
227
  "X-Msh-Device-Model": typeof process !== "undefined" ? `${process.platform} ${process.arch}` : "unknown",
228
228
  "X-Msh-Device-Id": `kimi-${Date.now()}`
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Mirrors the behaviour of `internal/translator/kiro/common/constants.go` and
5
5
  * `internal/translator/kiro/claude/kiro_claude_request.go` from the
6
- * CLIProxyAPIPlus reference implementation, scoped down to what 9router needs:
6
+ * CLIProxyAPIPlus reference implementation, scoped down to what zevairouter needs:
7
7
  *
8
8
  * - `-agentic` model suffix detection + chunked-write system prompt
9
9
  * - reasoning / thinking trigger detection (Anthropic-Beta header,
@@ -11,7 +11,7 @@
11
11
  * - the `<thinking_mode>enabled</thinking_mode>` system-prompt injection
12
12
  * that turns Kiro reasoning on
13
13
  *
14
- * Kiro upstream does not advertise `-agentic` model IDs; they are a 9router
14
+ * Kiro upstream does not advertise `-agentic` model IDs; they are a zevairouter
15
15
  * fiction. The suffix is stripped before the request leaves this process.
16
16
  */
17
17
 
@@ -176,7 +176,7 @@ export function shouldExposeKiroReasoning(body) {
176
176
  }
177
177
 
178
178
  /**
179
- * Detect whether a model id refers to a 9router synthetic agentic variant.
179
+ * Detect whether a model id refers to a zevairouter synthetic agentic variant.
180
180
  * Agentic variants share the same upstream model as the base; the only
181
181
  * difference is the chunked-write system prompt this module injects.
182
182
  *
@@ -199,7 +199,7 @@ export function stripAgenticSuffix(model) {
199
199
  }
200
200
 
201
201
  /**
202
- * Detect whether a model id is a 9router synthetic thinking variant
202
+ * Detect whether a model id is a zevairouter synthetic thinking variant
203
203
  * (e.g. `claude-sonnet-4.5-thinking`). Same upstream model as the base; the
204
204
  * only difference is `<thinking_mode>enabled</thinking_mode>` injection.
205
205
  *
@@ -226,7 +226,7 @@ export function stripThinkingSuffix(model) {
226
226
  }
227
227
 
228
228
  /**
229
- * Resolve a 9router model id to the real upstream Kiro model id, plus flags
229
+ * Resolve a zevairouter model id to the real upstream Kiro model id, plus flags
230
230
  * describing which behaviours the suffixes implied.
231
231
  *
232
232
  * resolveKiroModel("claude-sonnet-4.5-thinking-agentic")
@@ -584,7 +584,7 @@ export const PROVIDER_MODELS = {
584
584
  { id: "accounts/fireworks/models/qwen3-235b-a22b", name: "Qwen3 235B" },
585
585
  { id: "nomic-ai/nomic-embed-text-v1.5", name: "Nomic Embed Text v1.5", type: "embedding" },
586
586
  ],
587
- // Wave-1 ports from 9router (keys = provider alias used by getModelsByProviderId)
587
+ // Wave-1 ports from zevairouter (keys = provider alias used by getModelsByProviderId)
588
588
  mmf: [
589
589
  { id: "mimo-auto", name: "MiMo Auto" },
590
590
  ],
@@ -7,7 +7,7 @@ import { DefaultExecutor } from "./default.js";
7
7
  * attaches reasoning_summary when the client asked for reasoning_effort
8
8
  * (forcing reasoning on plain requests trips content filters).
9
9
  *
10
- * Ported from 9router executors/codebuddy-cn.js.
10
+ * Ported from zevairouter executors/codebuddy-cn.js.
11
11
  */
12
12
  export class CodeBuddyCnExecutor extends DefaultExecutor {
13
13
  constructor() {
@@ -12,7 +12,7 @@ import { convertCommandCodeToOpenAI } from "../translator/response/commandcode-t
12
12
  * Upstream returns AI SDK v5 NDJSON (one JSON event per line, no `data:` prefix).
13
13
  * We translate each event to an OpenAI chat.completion.chunk and emit it as SSE so
14
14
  * both the streaming and non-streaming (forced SSE → JSON) downstream handlers in
15
- * 9router can consume it without further format translation.
15
+ * zevairouter can consume it without further format translation.
16
16
  */
17
17
  export class CommandCodeExecutor extends BaseExecutor {
18
18
  constructor() {
@@ -230,7 +230,7 @@ async function callCompress(url, messages, model, timeoutMs, compressUserMessage
230
230
 
231
231
  // Compress request body via Headroom proxy. Fail-open: returns null on any error.
232
232
  // /v1/compress only understands OpenAI shape, so Claude bodies are translated
233
- // to OpenAI, compressed, then translated back using 9Router's own translators.
233
+ // to OpenAI, compressed, then translated back using ZevaiRouter's own translators.
234
234
  export async function compressWithHeadroom(body, { enabled, url, model, format, compressUserMessages, timeoutMs = DEFAULT_TIMEOUT_MS, diagnostics = null } = {}) {
235
235
  if (!enabled) {
236
236
  setDiagnostic(diagnostics, "disabled");
@@ -31,7 +31,7 @@ const DEFAULT_WORDS = [
31
31
  "kilo code",
32
32
  "kilocode",
33
33
  "zevairouter",
34
- "9router",
34
+ "zevairouter",
35
35
  ];
36
36
 
37
37
  let words = [...DEFAULT_WORDS];
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Calls AWS CodeWhisperer's `ListAvailableModels` endpoint to get the live
5
5
  * catalog for an authenticated Kiro account, then expands each upstream model
6
- * into 9router-shaped variants:
6
+ * into zevairouter-shaped variants:
7
7
  *
8
8
  * {upstream} - base model
9
9
  * {upstream}-thinking - same model, thinking on at request time
@@ -11,7 +11,7 @@
11
11
  * {upstream}-thinking-agentic - both
12
12
  *
13
13
  * The `-thinking` and `-agentic` suffixes do not exist on the Kiro upstream
14
- * API. They are 9router fictions and the `openai-to-kiro` translator strips
14
+ * API. They are zevairouter fictions and the `openai-to-kiro` translator strips
15
15
  * them before the request leaves this process.
16
16
  *
17
17
  * The runtime UA is built to match what Kiro IDE itself sends, because the
@@ -93,7 +93,7 @@ function buildKiroFingerprintHeaders(credentials) {
93
93
  }
94
94
 
95
95
  /**
96
- * Build the synthetic 9router variant set for a single upstream Kiro model.
96
+ * Build the synthetic zevairouter variant set for a single upstream Kiro model.
97
97
  *
98
98
  * Returns objects shaped for `PROVIDER_MODELS` (`{ id, name }`) so they can
99
99
  * be slotted directly into the existing model registry.
@@ -218,7 +218,7 @@ function cacheKey(credentials) {
218
218
 
219
219
  /**
220
220
  * Resolve the live Kiro model catalog for a credential and expand each entry
221
- * into 9router variants (`-thinking`, `-agentic`, `-thinking-agentic`).
221
+ * into zevairouter variants (`-thinking`, `-agentic`, `-thinking-agentic`).
222
222
  *
223
223
  * On any error (network, 4xx, 5xx), returns `null` so callers can fall back
224
224
  * to the static catalog without taking down the dashboard or `/v1/models`.
@@ -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
  }
@@ -346,7 +355,7 @@ function parseCodeBuddyUsage(payload) {
346
355
  }
347
356
 
348
357
  // Split refill packs (monthly cycle resets) vs one-shot bonus packs so the UI
349
- // does not imply bonus credits replenish every month (ported from 9router).
358
+ // does not imply bonus credits replenish every month (ported from zevairouter).
350
359
  const REFILL_GAP_MS = 2 * 24 * 60 * 60 * 1000;
351
360
  const cycleEndMs = (acc) => {
352
361
  const r = parseResetTime(acc.CycleEndTime);
@@ -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
+ }
@@ -531,7 +531,7 @@ function convertMessages(messages, tools, model) {
531
531
  /**
532
532
  * Build Kiro payload from OpenAI format
533
533
  *
534
- * Two 9router-specific behaviours implemented here:
534
+ * Two zevairouter-specific behaviours implemented here:
535
535
  *
536
536
  * 1. `-agentic` model suffix. Synthetic variant — same upstream model, but we
537
537
  * inject a chunked-write system prompt to keep large file writes under
@@ -13,7 +13,7 @@
13
13
  * {"type":"finish",...}
14
14
  *
15
15
  * Each upstream "event" arrives as one JSON object per line — we receive it as a string chunk
16
- * already split per line by the upstream SSE/JSON-line reader in 9router.
16
+ * already split per line by the upstream SSE/JSON-line reader in zevairouter.
17
17
  */
18
18
  import { register } from "../index.js";
19
19
  import { FORMATS } from "../formats.js";