@techysy/10router 1.0.6 → 1.0.7

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 (565) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +6 -6
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/prerender-manifest.json +1 -1
  5. package/app/.next-cli-build/required-server-files.json +3 -0
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  78. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  79. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  80. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  81. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  82. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  83. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  85. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  86. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  87. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  88. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
  89. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  90. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  91. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  94. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  96. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  98. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js +1 -1
  100. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js +1 -1
  102. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +3 -3
  112. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  116. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  123. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  135. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  137. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  140. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
  142. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  144. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
  146. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  151. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  153. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  158. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  162. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  164. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  167. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  177. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  179. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/checkin/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/export/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/export/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  188. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  191. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  200. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -1
  202. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  207. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  209. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  211. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  213. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/providers/[id]/json-models/route.js +1 -1
  215. package/app/.next-cli-build/server/app/api/providers/[id]/json-models/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  221. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  223. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  225. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  235. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  241. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  243. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +1 -1
  251. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +1 -1
  254. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/settings/database/import-usage/route.js +1 -1
  257. package/app/.next-cli-build/server/app/api/settings/database/import-usage/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  259. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  262. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  264. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  274. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  276. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  280. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  282. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  284. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  286. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  288. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  290. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  292. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  294. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  295. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  296. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
  298. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  300. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  304. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  306. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
  308. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  309. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  310. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  311. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  319. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  321. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
  339. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  340. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
  341. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  342. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
  343. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
  345. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  346. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  347. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  349. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  351. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  352. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  353. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  355. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  356. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  357. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  358. package/app/.next-cli-build/server/app/callback.html +1 -1
  359. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  360. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  361. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  362. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
  363. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  364. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  365. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +6 -6
  366. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  367. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  368. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
  370. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +6 -6
  371. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  372. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  374. package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  375. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +6 -6
  376. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  377. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  378. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  379. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
  380. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +6 -6
  381. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
  382. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  383. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  384. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  385. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +6 -6
  386. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  387. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  388. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  389. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  390. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +6 -6
  391. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  392. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  393. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  394. package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  395. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +6 -6
  396. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  397. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  398. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  399. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  400. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +6 -6
  401. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  402. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  403. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  404. package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  405. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +6 -6
  406. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  407. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  408. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  409. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  410. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +6 -6
  411. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  412. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  413. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +6 -6
  415. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +6 -6
  416. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
  417. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  418. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  419. package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  420. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +7 -7
  421. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  422. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  423. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  424. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  425. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  426. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  427. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  428. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  429. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
  431. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  432. package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
  433. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +6 -6
  434. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  435. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  436. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  437. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
  438. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
  439. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  440. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  441. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  442. package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  443. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +6 -6
  444. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  445. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  446. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  448. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +6 -6
  449. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  450. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  451. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  452. package/app/.next-cli-build/server/app/dashboard.rsc +6 -6
  453. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +6 -6
  454. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
  455. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  456. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  457. package/app/.next-cli-build/server/app/index.html +1 -1
  458. package/app/.next-cli-build/server/app/index.rsc +4 -4
  459. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  460. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  461. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  462. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  463. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  464. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  465. package/app/.next-cli-build/server/app/landing.html +1 -1
  466. package/app/.next-cli-build/server/app/landing.rsc +4 -4
  467. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  468. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
  470. package/app/.next-cli-build/server/app/login/page.js +1 -1
  471. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  472. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  473. package/app/.next-cli-build/server/app/login.html +1 -1
  474. package/app/.next-cli-build/server/app/login.rsc +5 -5
  475. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  476. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  477. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
  478. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  479. package/app/.next-cli-build/server/app/page.js +1 -1
  480. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  481. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  482. package/app/.next-cli-build/server/app-paths-manifest.json +6 -6
  483. package/app/.next-cli-build/server/chunks/1377.js +1 -1
  484. package/app/.next-cli-build/server/chunks/1937.js +1 -1
  485. package/app/.next-cli-build/server/chunks/2179.js +1 -1
  486. package/app/.next-cli-build/server/chunks/295.js +1 -1
  487. package/app/.next-cli-build/server/chunks/318.js +7 -7
  488. package/app/.next-cli-build/server/chunks/3212.js +1 -1
  489. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  490. package/app/.next-cli-build/server/chunks/4037.js +1 -1
  491. package/app/.next-cli-build/server/chunks/4049.js +1 -0
  492. package/app/.next-cli-build/server/chunks/412.js +1 -1
  493. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  494. package/app/.next-cli-build/server/chunks/4293.js +1 -0
  495. package/app/.next-cli-build/server/chunks/4985.js +1 -0
  496. package/app/.next-cli-build/server/chunks/5615.js +1 -1
  497. package/app/.next-cli-build/server/chunks/5781.js +1 -1
  498. package/app/.next-cli-build/server/chunks/6306.js +1 -1
  499. package/app/.next-cli-build/server/chunks/6326.js +1 -1
  500. package/app/.next-cli-build/server/chunks/6763.js +1 -1
  501. package/app/.next-cli-build/server/chunks/6922.js +1 -0
  502. package/app/.next-cli-build/server/chunks/7211.js +1 -1
  503. package/app/.next-cli-build/server/chunks/7598.js +1 -1
  504. package/app/.next-cli-build/server/chunks/7828.js +1 -1
  505. package/app/.next-cli-build/server/chunks/{8038.js → 7913.js} +8 -8
  506. package/app/.next-cli-build/server/chunks/8363.js +1 -0
  507. package/app/.next-cli-build/server/chunks/8444.js +1 -1
  508. package/app/.next-cli-build/server/chunks/8499.js +7 -7
  509. package/app/.next-cli-build/server/chunks/869.js +1 -1
  510. package/app/.next-cli-build/server/chunks/8895.js +3 -3
  511. package/app/.next-cli-build/server/chunks/8910.js +1 -1
  512. package/app/.next-cli-build/server/chunks/8920.js +1 -1
  513. package/app/.next-cli-build/server/chunks/9140.js +19 -3
  514. package/app/.next-cli-build/server/chunks/9463.js +1 -1
  515. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  516. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  517. package/app/.next-cli-build/server/middleware.js +1 -1
  518. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  519. package/app/.next-cli-build/server/pages/404.html +1 -1
  520. package/app/.next-cli-build/server/pages/500.html +1 -1
  521. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  522. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  523. package/app/.next-cli-build/static/chunks/1321-a54e76efdf16ea12.js +1 -0
  524. package/app/.next-cli-build/static/chunks/{5116-4618105f24431c4a.js → 3346-0ae97d50d86ac1f7.js} +10 -10
  525. package/app/.next-cli-build/static/chunks/5497-cd84151680071f1d.js +7 -0
  526. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-272386fb26fd75c3.js +1 -0
  527. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-f098adefd36910e1.js +1 -0
  528. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-d4b67cdea67b89d0.js +1 -0
  529. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-75cd720b6edf6d23.js +1 -0
  530. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-d3c784cd4a50bef9.js +14 -0
  531. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-c1757ed34595dcdb.js +1 -0
  532. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-7b9bde3902dca2bb.js +1 -0
  533. package/app/package.json +1 -1
  534. package/app/public/i18n/changelog/en.md +133 -114
  535. package/app/public/i18n/changelog/zh-CN.md +131 -112
  536. package/app/public/i18n/changelog/zh-TW.md +133 -114
  537. package/app/public/i18n/literals/zh-CN.json +1521 -1518
  538. package/app/public/i18n/literals/zh-TW.json +309 -307
  539. package/app/server.js +1 -1
  540. package/app/src/sse/services/backgroundTokenRefresh.js +35 -32
  541. package/package.json +52 -52
  542. package/src/cli/i18n/index.js +29 -5
  543. package/src/cli/tray/icon-mono-black.ico +0 -0
  544. package/src/cli/tray/icon-mono-white.ico +0 -0
  545. package/src/cli/tray/icon-template.png +0 -0
  546. package/src/cli/tray/tray.js +13 -8
  547. package/src/cli/tray/trayWin.js +39 -2
  548. package/app/.next-cli-build/server/chunks/1129.js +0 -4
  549. package/app/.next-cli-build/server/chunks/1332.js +0 -1
  550. package/app/.next-cli-build/server/chunks/3350.js +0 -1
  551. package/app/.next-cli-build/server/chunks/4452.js +0 -1
  552. package/app/.next-cli-build/server/chunks/7914.js +0 -1
  553. package/app/.next-cli-build/server/chunks/8162.js +0 -6
  554. package/app/.next-cli-build/server/chunks/9703.js +0 -17
  555. package/app/.next-cli-build/static/chunks/1321-656ff6a3f06c59ae.js +0 -1
  556. package/app/.next-cli-build/static/chunks/5497-7b21d4160c9e592e.js +0 -7
  557. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-a217fda9e3b75a4c.js +0 -1
  558. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-5db6b536a4ab4991.js +0 -1
  559. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-56ceed313e85c919.js +0 -1
  560. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-ddb08251c0405731.js +0 -1
  561. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-a2431d795923337a.js +0 -14
  562. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-595256b6306fa952.js +0 -1
  563. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-568a544f8e220d5b.js +0 -1
  564. /package/app/.next-cli-build/static/{rPl9WrF0GIBOKSW3yAMMs → aKCEN8jaWm631dVqBrSte}/_buildManifest.js +0 -0
  565. /package/app/.next-cli-build/static/{rPl9WrF0GIBOKSW3yAMMs → aKCEN8jaWm631dVqBrSte}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{26048:(e,t,r)=>{Promise.resolve().then(r.bind(r,75095)),Promise.resolve().then(r.bind(r,25086))},75095:(e,t,r)=>{"use strict";r.d(t,{default:()=>F});var a=r(95155),i=r(12115),s=r(57250),n=r(45564);let l="quotaCacheData",o="quotaAutoRefresh",d=[10,20,50,100],c=[{value:"all",label:"All accounts"},{value:"active",label:"Active"},{value:"inactive",label:"Turned off"}],u=[{value:"default",label:"Default quota order"},{value:"remaining-asc",label:"% quota: low to high"},{value:"remaining-desc",label:"% quota: high to low"}];function m(e){return e.name?.trim()||e.email?.trim()||e.displayName?.trim()||null}function x(e,t){let r=t[e.id]?.quotas?.[0];return r&&"number"==typeof r.remaining?r.remaining:1/0}function h(e){let t={};return e.forEach(e=>{t[e.id]=!0}),t}function p(e,t){let r=new Set(t.map(e=>e.id));return Object.fromEntries(Object.entries(e).filter(([e])=>r.has(e)))}async function b(e,t){return await e(t)}function g(){try{let e=window.localStorage.getItem(l);return e?JSON.parse(e):{}}catch(e){return console.error("Error reading quota cache:",e),{}}}function f(e,t){try{let r=g();r[e]={...t,cachedAt:new Date().toISOString()},window.localStorage.setItem(l,JSON.stringify(r))}catch(e){console.error("Error writing quota cache:",e)}}function y(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function v(e){return e&&"object"==typeof e?String(e.modelKey||e.name||"").trim():""}function k(e,t,r,a=[]){let i=null,s=t?.[e]?.hidden;if(Array.isArray(s))i=s.map(String);else if(r&&r!==e){let e=t?.[r]?.hidden;Array.isArray(e)&&(i=e.map(String))}return i?new Set(Array.isArray(a)&&a.length>0?function(e=[],t=[]){if(!Array.isArray(e)||0===e.length)return[];let r=new Set(t.map(v).filter(Boolean));return[...new Set(e.map(e=>String(e).trim()).filter(e=>r.has(e)))]}(i,a):i):new Set}var w=r(73006);function j(e){let t=/^Bonus Pack (\d+)$/.exec(String(e||"").trim());return t?`${(0,w.Tl)("Bonus Pack")} ${t[1]}`:(0,w.Tl)(e)}function N({quotas:e=[],compact:t=!1,sortMode:r="default",showSortLabel:s=!1,onHideQuota:n=null}){let[l,o]=(0,i.useState)(1),d=(0,i.useMemo)(()=>e.map((e,t)=>({...e,index:t,remaining:e?.remaining!==void 0?Math.max(0,Math.round(e.remaining)):e?.remainingPercentage!==void 0?Math.round(e.remainingPercentage):y(e?.used,e?.total)})),[e]),c=(0,i.useMemo)(()=>"remaining-asc"===r?[...d].sort((e,t)=>e.remaining-t.remaining||e.name.localeCompare(t.name)):"remaining-desc"===r?[...d].sort((e,t)=>t.remaining-e.remaining||e.name.localeCompare(t.name)):d,[d,r]),u=Math.max(1,Math.ceil(c.length/10));if((0,i.useEffect)(()=>{o(1)},[r,e]),(0,i.useEffect)(()=>{o(e=>Math.min(e,u))},[u]),!e||0===e.length)return null;let m=c.slice((l-1)*10,10*l),x=0===c.length?0:(l-1)*10+1,h=Math.min(10*l,c.length),p=t?"py-1 px-1.5":"py-2 px-3",b=t?"text-[11px]":"text-sm",g=t?"text-[11px]":"text-sm",f=t?"text-[10px] leading-tight":"text-xs",v="function"==typeof n;return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"text-[10px] text-text-muted",children:[c.length," quota",c.length>1?"s":""]}),s&&(0,a.jsx)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1 text-[10px] text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:"Sorted by account remaining"})]}),(0,a.jsx)("div",{className:"space-y-px",children:m.map(e=>{var r;let i=(r=e.remaining)>70?{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"}:r>=30?{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"}:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"},s=function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,r=new Date,a=t-r;if(a<=0)return"-";let i=Math.ceil(a/6e4);if(i<60)return`${i}m`;let s=Math.floor(i/60),n=i%60;if(s<24)return`${s}h ${n}m`;let l=Math.floor(s/24);return`${l}d ${s%24}h ${n}m`}catch(e){return"-"}}(e.resetAt),l=function(e){if(!e)return null;try{let t=new Date(e),r=new Date,a=new Date(r.getFullYear(),r.getMonth(),r.getDate()),i=new Date(a);i.setDate(i.getDate()+1);let s="";s=t>=a&&t<i?"Today":t>=i&&t<new Date(i.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let n=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${s}, ${n}`}catch{return null}}(e.resetAt),o=!1!==e.recurring?`in ${s}`:`expires in ${s}`;return(0,a.jsxs)("div",{className:`flex items-center gap-2 border-b border-black/5 dark:border-white/5 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors ${p}`,children:[(0,a.jsxs)("div",{className:"flex w-36 min-w-0 items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-[10px] shrink-0",children:i.emoji}),(0,a.jsx)("span",{className:`${b} font-medium text-text-primary truncate`,children:j(e.name)})]}),(0,a.jsxs)("div",{className:`min-w-0 flex-1 ${t?"space-y-1":"space-y-1.5"}`,children:[(0,a.jsx)("div",{className:`${t?"h-1":"h-1.5"} rounded-full overflow-hidden border ${i.bgLight} ${0===e.remaining?"border-black/10 dark:border-white/10":"border-transparent"}`,children:(0,a.jsx)("div",{className:`h-full transition-all duration-300 ${i.bg}`,style:{width:`${Math.min(e.remaining,100)}%`}})}),(0,a.jsxs)("div",{className:`flex items-center justify-between gap-1 min-w-0 ${t?"text-[10px]":"text-xs"}`,children:[(0,a.jsxs)("span",{className:"text-text-muted truncate",title:`${e.used.toLocaleString()} / ${e.total>0?e.total.toLocaleString():"∞"}`,children:[e.used.toLocaleString()," / ",e.total>0?e.total.toLocaleString():"∞"]}),(0,a.jsxs)("span",{className:`font-medium ${i.text} shrink-0`,children:[e.remaining,"%"]})]})]}),(0,a.jsx)("div",{className:"min-w-0 shrink",children:"-"!==s||l?t?(0,a.jsx)("div",{className:`${g} text-text-primary font-medium truncate`,title:l||"",children:"-"!==s?o:l}):(0,a.jsxs)("div",{className:"min-w-0 space-y-0.5",children:["-"!==s&&(0,a.jsx)("div",{className:`${g} text-text-primary font-medium truncate`,children:o}),l&&(0,a.jsx)("div",{className:`${f} text-text-muted truncate`,children:l})]}):(0,a.jsx)("div",{className:`${g} text-text-muted italic`,children:"N/A"})}),v&&(0,a.jsx)("button",{type:"button",onClick:()=>n(e),className:"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-black/5 hover:text-text-primary dark:hover:bg-white/5",title:"Hide this quota row","aria-label":`Hide quota ${e.name}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[15px]",children:"visibility_off"})})]},`${e.name}-${e.index}`)})}),u>1&&(0,a.jsxs)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1.5 dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 text-[10px] text-text-muted",children:[(0,a.jsxs)("span",{children:["Showing ",x,"-",h," of ",c.length]}),(0,a.jsxs)("span",{children:["Page ",l," / ",u]})]}),(0,a.jsxs)("div",{className:"mt-1.5 flex items-center justify-end gap-1",children:[(0,a.jsx)("button",{type:"button",onClick:()=>o(e=>Math.max(1,e-1)),disabled:1===l,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Prev"}),(0,a.jsx)("button",{type:"button",onClick:()=>o(e=>Math.min(u,e+1)),disabled:l===u,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Next"})]})]})]})}var S=r(98542),C=r(97677),A=r(84588),$=r(35497),P=r(88105),q=r(11059);let E={"builder-id":"AWS Builder ID",idc:"IAM Identity Center",google:"Google",github:"GitHub",imported:"Imported Token",api_key:"API Key"},T={claude:"claudeAutoPing",codex:"codexAutoPing"},D={claude:"When your 5h quota runs out, auto-sends a request the moment it resets so a new window starts right away.",codex:"Auto-starts the next 5h Codex window after reset by sending a tiny gpt-5.5 request. Consumes a small amount of quota."};function M(e){return e.name?.trim()&&e.email?.trim()&&e.name.trim()!==e.email.trim()?e.email.trim():e.name?.trim()&&e.displayName?.trim()&&e.name.trim()!==e.displayName.trim()?e.displayName.trim():null}function O(e){let t=e.providerSpecificData?.region;if(t)return t;let r=e.providerSpecificData?.profileArn;return("string"==typeof r?r.split(":")[3]:"")||""}function I(e){if(!e)return"N/A";let t=new Date(e);return Number.isFinite(t.getTime())?t.toLocaleString(void 0,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}):"N/A"}function F(){let{copied:e,copy:t}=(0,q.C)(),[r,F]=(0,i.useState)([]),[_,L]=(0,i.useState)({}),[z,R]=(0,i.useState)({}),[U,W]=(0,i.useState)({}),[H,K]=(0,i.useState)(!0),[J,B]=(0,i.useState)({claude:{},codex:{}}),[G,V]=(0,i.useState)(null),[Q,Y]=(0,i.useState)(!1),[X,Z]=(0,i.useState)(!1),[ee,et]=(0,i.useState)(60),[er,ea]=(0,i.useState)(!0),[ei,es]=(0,i.useState)(null),[en,el]=(0,i.useState)(null),[eo,ed]=(0,i.useState)(null),[ec,eu]=(0,i.useState)(null),[em,ex]=(0,i.useState)(null),[eh,ep]=(0,i.useState)(!1),[eb,eg]=(0,i.useState)(null),[ef,ey]=(0,i.useState)([]),[ev,ek]=(0,i.useState)(()=>window.localStorage.getItem("quotaProviderFilter")||"all"),[ew,ej]=(0,i.useState)([]),[eN,eS]=(0,i.useState)(()=>window.localStorage.getItem("quotaAccountFilter")||"all");(0,i.useEffect)(()=>{window.localStorage.setItem("quotaProviderFilter",ev)},[ev]),(0,i.useEffect)(()=>{window.localStorage.setItem("quotaAccountFilter",eN)},[eN]);let[eC,eA]=(0,i.useState)("default"),[e$,eP]=(0,i.useState)({}),[eq,eE]=(0,i.useState)(!1),[eT,eD]=(0,i.useState)(!1),[eM,eO]=(0,i.useState)(!1),[eI,eF]=(0,i.useState)(1),[e_,eL]=(0,i.useState)(20),[ez,eR]=(0,i.useState)(String(20)),[eU,eW]=(0,i.useState)({page:1,pageSize:20,total:0,totalPages:1}),[eH,eK]=(0,i.useState)({eligibleConnections:0,providerFilteredConnections:0}),eJ=(0,i.useRef)(null),eB=(0,i.useRef)(null),eG=(0,i.useRef)(0),eV=(0,i.useCallback)(async(e=eI)=>{try{var t,r;let a=new URLSearchParams({page:String(e),pageSize:String(e_),accountStatus:eN,sort:"priority"});"all"!==ev&&a.set("provider",ev);let i=await fetch(`/api/providers/client?${a.toString()}`);if(!i.ok)throw Error("Failed to fetch connections");let s=await i.json(),n=s.connections||[],l=(t=s.pagination,t||{page:1,pageSize:e_,total:0,totalPages:1}),o=function(e,t=0){return e||{eligibleConnections:t,providerFilteredConnections:t}}(s.totals,n.length);return F(n),ej(s.providerOptions||[]),eW(l),eK(o),eF((r=s.pagination,r?.page||e)),n}catch(e){return console.error("Error fetching connections:",e),F([]),ej([]),eW({page:1,pageSize:e_,total:0,totalPages:1}),eK({eligibleConnections:0,providerFilteredConnections:0}),[]}},[eN,eq,eI,e_,ev]),eQ=(0,i.useCallback)(async(e,t,{force:r=!1}={})=>{R(t=>({...t,[e]:!0})),W(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let a=`/api/usage/${e}${r?"?force=1":""}`,i=await fetch(a);if(!i.ok){let r=(await i.json().catch(()=>({}))).error||i.statusText;if(404===i.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===i.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,r);let a={quotas:[],message:r};L(t=>({...t,[e]:a})),f(e,a);return}throw Error(`HTTP ${i.status}: ${r}`)}let s=await i.json();console.log(`[ProviderLimits] Got quota for ${t}:`,s);let l={quotas:function(e,t){if(!t||"object"!=typeof t)return[];let r=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":if(t.quotas){let e=Object.entries(t.quotas),a=e.filter(([e])=>e.startsWith("gemini-")&&!e.includes("image")),i=e.filter(([e])=>e.startsWith("claude-")),s=e.filter(([e])=>e.includes("image")),n=e.filter(([e])=>!e.startsWith("gemini-")&&!e.startsWith("claude-")&&!e.includes("image"));if(a.length>0){let e=a.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1];r.push({name:"Gemini (Flash / Pro)",modelKey:"gemini",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage})}if(i.length>0){let e=i.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1];r.push({name:"Claude (Sonnet / Opus)",modelKey:"claude",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage})}s.forEach(([e,t])=>{r.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})}),n.forEach(([e,t])=>{r.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})})}break;case"codex":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,remaining:t.remaining,resetAt:t.resetAt||null})});break;case"kiro":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"qoder":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{("organization"!==e||t&&0!==(Number(t.total)||0))&&r.push({name:"user"===e?"Personal":"organization"===e?"Organization":e,used:t.used||0,total:t.total||0,unit:t.unit,resetAt:t.resetAt||null})});break;case"claude":t.message?r.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,remaining:void 0!==t.remaining?t.remaining:Math.max(0,(t.total||100)-(t.used||0)),remainingPercentage:void 0!==t.remainingPercentage?t.remainingPercentage:y(t.used,t.total),resetAt:t.resetAt||null})});break;case"vercel-ai-gateway":case"ollama":case"deepseek":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"codebuddy-cn":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,recurring:!1!==t.recurring})});break;case"grok-cli":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"kimi":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}if(e?.toLowerCase()==="claude"){let e={"session (5h)":0,"weekly (7d)":1,"weekly fable (7d)":2,"weekly opus (7d)":3,"weekly sonnet (7d)":4};return r.sort((t,r)=>(e[t.name]??99)-(e[r.name]??99)),r}let a=(0,n.KC)(e);if(a.length>0){let e=new Map(a.map((e,t)=>[e.id,t]));r.sort((t,r)=>{let a=t.modelKey||t.name,i=r.modelKey||r.name;return(e.get(a)??999)-(e.get(i)??999)})}return r}(t,s),plan:s.plan||null,message:s.message||null,raw:s};L(t=>({...t,[e]:l})),f(e,l)}catch(r){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,r),W(t=>({...t,[e]:r.message||"Failed to fetch quota"}))}finally{R(t=>({...t,[e]:!1}))}},[]),eY=(0,i.useCallback)(async(e,t)=>{await eQ(e,t,{force:!0}),V(new Date)},[eQ]),eX=(0,i.useCallback)(async(e,t)=>{if("codex"===t&&!eo){ed(e),W(t=>({...t,[e]:null}));try{let r=await fetch(`/api/usage/${e}/codex-reset-credits`,{method:"POST"}),a=await r.json().catch(()=>({}));if(!r.ok)throw Error(a.message||a.error||a.code||"Failed to reset Codex limit");await eQ(e,t),V(new Date)}catch(t){W(r=>({...r,[e]:t.message||"Failed to reset Codex limit"}))}finally{ed(null)}}},[eQ,eo]),eZ=(0,i.useCallback)(async e=>{ex({connection:e,loading:!0,error:null,data:null});try{let t=await fetch(`/api/usage/${e.id}/codex-reset-credits`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r.error||r.message||"Failed to load Codex reset credits");let a=Array.isArray(r.credits)?[...r.credits]:[];a.sort((e,t)=>{let r=e.expiresAt?new Date(e.expiresAt).getTime():1/0,a=t.expiresAt?new Date(t.expiresAt).getTime():1/0;return r-a}),ex({connection:e,loading:!1,error:null,data:{...r,credits:a}})}catch(t){ex({connection:e,loading:!1,error:t.message||"Failed to load Codex reset credits",data:null})}},[]),e0=(0,i.useCallback)(async e=>{if(confirm("Delete this connection?")){es(e);try{if((await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok){L(t=>{let r={...t};return delete r[e],r}),R(t=>{let r={...t};return delete r[e],r}),W(t=>{let r={...t};return delete r[e],r});try{let t=g();t[e]&&(delete t[e],window.localStorage.setItem(l,JSON.stringify(t)))}catch(e){console.error("Error deleting cache entry:",e)}await b(eV,eI)}}catch(e){console.error("Error deleting connection:",e)}finally{es(null)}}},[eV,eI]),e1=(0,i.useCallback)(async(e,t)=>{el(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&(L(e=>({...e})),await b(eV,eI))}catch(e){console.error("Error updating connection status:",e)}finally{el(null)}},[eV,eI]),e5=(0,i.useCallback)(async e=>{if(!eb?.id)return;let t=eb.id,r=eb.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await eV(),ep(!1),eg(null),P.wb.includes(r)&&await eQ(t,r))}catch(e){console.error("Error saving connection:",e)}},[eb,eV,eQ]);(0,i.useEffect)(()=>{let e=!1;return fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}).then(e=>e.json()).then(t=>{!e&&t?.proxyPools&&ey(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let e2=(0,i.useCallback)(async(e=!1)=>{if(X)return;Z(!0),et(60);let t=eG.current+=1,r=Math.round(10);try{let a=await eV(eI);R(h(a)),W(e=>p(e,a)),L(e=>p(e,a)),await Promise.all(a.filter(a=>e||"claude"!==a.provider||t%r==0).map(e=>eQ(e.id,e.provider))),V(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{Z(!1)}},[X,eV,eQ,eI]);(0,i.useEffect)(()=>{(async()=>{ea(!0);let e=await eV(eI);ea(!1),R(h(e)),W(t=>p(t,e)),L(t=>p(t,e)),await Promise.all(e.map(e=>eQ(e.id,e.provider))),V(new Date)})()},[eV,eQ,eI]),(0,i.useEffect)(()=>{let e=window.localStorage.getItem(o);K(null===e||"true"===e),Y(!0)},[]),(0,i.useEffect)(()=>{Q&&window.localStorage.setItem(o,String(H))},[H,Q]),(0,i.useEffect)(()=>{fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():{}).then(e=>{B({claude:e?.claudeAutoPing?.connections||{},codex:e?.codexAutoPing?.connections||{}}),eP(e?.quotaVisibility||{})}).catch(()=>{})},[]);let e3=(0,i.useCallback)(async(e,t,r)=>{let a=T[t];if(!a)return;let i={...J[t]||{},[e]:r};B({...J,[t]:i});try{let e=await fetch("/api/settings",{cache:"no-store"}),t={...(e.ok?await e.json():{})[a]||{},connections:i};await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[a]:t})})}catch{B(J)}},[J]),e4=(0,i.useCallback)(async(e,t)=>{eP(e);try{if(!(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaVisibility:e})})).ok)throw Error("Failed to update quota visibility")}catch(e){console.error("Error updating quota visibility:",e),eP(t)}},[]),e8=(0,i.useCallback)((e,t,r)=>{let a=v(t);if(!e||!a)return;let i=e$[e]||{},s=new Set(i.hidden||[]);if(s.add(a),"antigravity"===r){if("gemini"===a)for(let e of s)e.startsWith("gemini-")&&!e.includes("image")&&s.delete(e);else if("claude"===a)for(let e of s)e.startsWith("claude-")&&s.delete(e)}e4({...e$,[e]:{...i,hidden:[...s]}},e$)},[e$,e4]),e6=(0,i.useCallback)((e,t,r)=>{let a=v(t);if(!e||!a)return;let i=e$[e]||{},s=new Set(i.hidden||[]);if(s.delete(a),"antigravity"===r){if("gemini"===a)for(let e of s)e.startsWith("gemini-")&&!e.includes("image")&&s.delete(e);else if("claude"===a)for(let e of s)e.startsWith("claude-")&&s.delete(e)}e4({...e$,[e]:{...i,hidden:[...s]}},e$)},[e$,e4]);(0,i.useEffect)(()=>{if(!Q||!H){eJ.current&&(clearInterval(eJ.current),eJ.current=null),eB.current&&(clearInterval(eB.current),eB.current=null);return}return eJ.current=setInterval(()=>{e2()},6e4),eB.current=setInterval(()=>{et(e=>e<=1?60:e-1)},1e3),()=>{eJ.current&&clearInterval(eJ.current),eB.current&&clearInterval(eB.current)}},[H,e2,Q]),(0,i.useEffect)(()=>{let e=()=>{document.hidden?(eJ.current&&(clearInterval(eJ.current),eJ.current=null),eB.current&&(clearInterval(eB.current),eB.current=null)):H&&Q&&(eJ.current=setInterval(()=>e2(),6e4),eB.current=setInterval(()=>{et(e=>e<=1?60:e-1)},1e3))};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[H,e2,Q]);let e9=(0,i.useMemo)(()=>(function(e,t,r,a,i){if("codex"===a&&"default"!==i)return[...e].sort((e,r)=>{let a=x(e,t),s=x(r,t),n="remaining-asc"===i?a-s:s-a;return 0!==n?n:(m(e)||"").localeCompare(m(r)||"")});if(!r){let t=new Map;for(let r of e){let e=r.provider||"";t.has(e)||t.set(e,[]),t.get(e).push(r)}return Array.from(t.values()).flat()}let s=e=>{let r=(t[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return r.length>0?Math.min(...r):1/0};return[...e].sort((e,t)=>{let r=s(e)-s(t);return 0!==r?r:(e.provider||"").localeCompare(t.provider||"")||(m(e)||"").localeCompare(m(t)||"")})})(r,_,eq,ev,eC),[r,_,eq,ev,eC]),e7=(0,i.useCallback)(()=>{let e={...e$},t=!1;for(let r of e9){let a=e[r.id]||{},i=[...function(e){let t=new Set;if(!Array.isArray(e))return t;for(let r of e){let e=v(r);if(!e||!0===r.unlimited)continue;let a=r.total||0;(a<=0||(r.used||0)>=a)&&t.add(e)}return t}(_[r.id]?.quotas||[])],s=a.hidden||[];(i.length!==s.length||i.some((e,t)=>e!==s[t]))&&(e[r.id]={...a,hidden:i},t=!0)}t&&e4(e,e$)},[e$,e4,e9,_]),te=(0,i.useCallback)(()=>{let e={...e$},t=!1;for(let r of e9)e[r.id]?.hidden?.length&&(e[r.id]={...e[r.id],hidden:[]},t=!0);t&&e4(e,e$)},[e$,e4,e9]),tt=e=>{let t=_[e.id]?.quotas;if(!t?.length)return!1;let r=t.filter(e=>!0!==e.unlimited);return 0!==r.length&&r.every(e=>{let t=e.total||0;return t<=0||(e.used||0)>=t})},tr=(0,i.useCallback)(async(e,t)=>{if(e.length&&!eM){eO(!0);try{await Promise.all(e.map(e=>fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})}))),await b(eV,eI)}catch(e){console.error("Error bulk toggling connections:",e)}finally{eO(!1)}}},[eM,eV,eI]),ta="all"===ev?"All providers":ev,ti=eH.eligibleConnections>0,ts=e9.length>0,tn=eH.eligibleConnections?eH.providerFilteredConnections?{icon:"filter_alt_off",title:"No Accounts On This Page",description:"Try moving to another page or refreshing the current filters."}:{icon:"filter_alt_off",title:"No Accounts Match Current Filters",description:"all"===ev?"Try changing the account status filter to see more quota trackers.":`No ${"inactive"===eN?"turned off":"active"===eN?"active":"matching"} accounts found for ${ev}.`}:{icon:"cloud_off",title:"No Providers Connected",description:"Connect to providers with OAuth to track your API quota limits and usage."},tl=function(e){var t;let{start:r,end:a}=(t=e).total?{start:(t.page-1)*t.pageSize+1,end:Math.min(t.page*t.pageSize,t.total)}:{start:0,end:0};return`Showing ${r}-${a} of ${e.total}`}(eU),to=!d.includes(e_),td=er||ti?er||ts?null:(0,a.jsx)(A.default,{padding:"lg",children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:tn.icon}),(0,a.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:tn.title}),(0,a.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:tn.description})]})}):(0,a.jsx)(A.default,{padding:"lg",children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,a.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:"No Providers Connected"}),(0,a.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:"Connect to providers with OAuth to track your API quota limits and usage."})]})});return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-end",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>eD(e=>!e),className:"flex h-8 items-center justify-between gap-1 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-haspopup":"menu","aria-expanded":eT,title:"Filter quota providers",children:[(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:["all"===ev?(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"apps"}):(0,a.jsx)(s.A,{src:`/providers/${ev}.png`,alt:ev,size:18,className:"size-[18px] rounded object-contain",fallbackText:ev.slice(0,2).toUpperCase()}),(0,a.jsx)("span",{className:"truncate capitalize hidden lg:inline",children:ta})]}),(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"expand_more"})]}),eT&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button",className:"fixed inset-0 z-30 bg-transparent","aria-label":"Close provider filter",onClick:()=>eD(!1)}),(0,a.jsxs)("div",{className:"absolute left-0 z-40 mt-2 w-64 overflow-hidden rounded-2xl border border-black/10 bg-surface/95 p-1.5 shadow-xl shadow-black/10 backdrop-blur dark:border-white/10 dark:bg-surface/95 sm:w-72",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>{"all"!==ev&&eF(1),ek("all"),eD(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${"all"===ev?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:"apps"}),(0,a.jsx)("span",{className:"font-medium",children:"All providers"}),"all"===ev&&(0,a.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]}),(0,a.jsx)("div",{className:"my-1 h-px bg-black/10 dark:bg-white/10"}),(0,a.jsx)("div",{className:"max-h-72 overflow-y-auto pr-1",children:ew.map(e=>(0,a.jsxs)("button",{type:"button",onClick:()=>{ev!==e&&eF(1),ek(e),eD(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${ev===e?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,a.jsx)(s.A,{src:`/providers/${e}.png`,alt:e,size:24,className:"size-6 rounded-md object-contain",fallbackText:e.slice(0,2).toUpperCase()}),(0,a.jsx)("span",{className:"font-medium capitalize",children:e}),ev===e&&(0,a.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]},e))})]})]})]}),(0,a.jsx)("select",{value:eN,onChange:e=>{let t=e.target.value;eN!==t&&eF(1),eS(t)},className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Filter accounts by status",children:c.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))}),"codex"===ev&&(0,a.jsx)("select",{value:eC,onChange:e=>eA(e.target.value),className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Sort Codex quotas by remaining",children:u.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,a.jsxs)("button",{type:"button",onClick:()=>eE(e=>!e),"aria-pressed":eq,className:`flex h-8 shrink-0 items-center gap-1 rounded-lg border px-2 text-xs transition-colors ${eq?"border-amber-500/40 bg-amber-500/10 text-amber-500":"border-black/10 text-text-primary hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5"}`,title:"Sort accounts by earliest quota reset time",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"hourglass_top"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:"Expiring first"})]}),(0,a.jsxs)("button",{type:"button",onClick:()=>{tr(e9.filter(e=>(e.isActive??!0)&&tt(e)).map(e=>e.id),!1)},disabled:eM,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-red-500/30 px-2 text-xs text-red-500 transition-colors hover:bg-red-500/10 disabled:opacity-50",title:"Disable connections with depleted quota on the current page",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"block"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:(0,w.Tl)("Turn off Empty")})]}),(0,a.jsxs)("button",{type:"button",onClick:()=>{tr(e9.filter(e=>!(e.isActive??!0)&&!tt(e)).map(e=>e.id),!0)},disabled:eM,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-emerald-500/30 px-2 text-xs text-emerald-500 transition-colors hover:bg-emerald-500/10 disabled:opacity-50",title:"Enable connections that still have quota on the current page",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"check_circle"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:(0,w.Tl)("Turn on Available")})]}),(0,a.jsxs)("button",{type:"button",onClick:e7,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-blue-500/30 px-2 text-xs text-blue-500 transition-colors hover:bg-blue-500/10",title:"Hide depleted (zero-balance) quota packs across current connections",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"visibility"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:(0,w.Tl)("Only with balance")})]}),(0,a.jsxs)("button",{type:"button",onClick:te,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5",title:"Show all quota packs across current connections",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"visibility_off"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:(0,w.Tl)("Show all")})]}),(0,a.jsxs)("button",{onClick:()=>K(e=>!e),className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5",title:H?"Disable auto-refresh":"Enable auto-refresh",children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] ${H?"text-primary":"text-text-muted"}`,children:H?"toggle_on":"toggle_off"}),(0,a.jsx)("span",{className:"hidden text-text-primary sm:inline",children:"Auto-refresh"}),H&&(0,a.jsxs)("span",{className:"text-[10px] text-text-muted tabular-nums",children:["(",ee,"s)"]})]}),(0,a.jsx)("button",{type:"button",onClick:()=>e2(!0),disabled:X,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5 disabled:opacity-50",title:"Refresh all",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] ${X?"animate-spin":""}`,children:"refresh"})})]})}),"all"!==eN&&(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-xl border border-amber-500/20 bg-amber-500/10 px-3 py-2 text-xs text-amber-700 dark:text-amber-300",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] shrink-0",children:"filter_alt"}),(0,a.jsx)("span",{children:(0,w.Tl)("Account filter is active and persists across visits")})]}),eq&&(0,a.jsx)("div",{className:"rounded-xl border border-amber-500/20 bg-amber-500/10 px-3 py-2 text-xs text-amber-700 dark:text-amber-300",children:"Expiring-first currently reorders accounts inside the current page. Cross-page ordering still follows backend pagination."}),td&&(0,a.jsx)("div",{className:"pt-2",children:td}),!td&&(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:e9.map(r=>{let i,n,l,o=_[r.id],d=z[r.id],c=U[r.id],u=!1===r.isActive,x="codex"===r.provider,h=Number.isFinite(n="number"==typeof(i=o?.raw?.resetCredits?.availableCount)?i:Number(i))?Math.max(0,n):0,p=eo===r.id,b=ei===r.id||en===r.id||p,g=o?.quotas||[],f=function(e,t=[],r={},a){if(!Array.isArray(t)||0===t.length)return[];let i=k(e,r,a,t);return 0===i.size?t:t.filter(e=>!i.has(v(e)))}(r.id,g,e$,r.provider),y=function(e,t=[],r={},a){if(!Array.isArray(t)||0===t.length)return[];let i=k(e,r,a,t);return 0===i.size?[]:t.filter(e=>i.has(v(e)))}(r.id,g,e$,r.provider);return(0,a.jsxs)(A.default,{padding:"none",className:`min-w-0 ${u?"opacity-60":""}`,children:[(0,a.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,a.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,a.jsx)(s.A,{src:`/providers/${r.provider}.png`,alt:r.provider,size:32,className:"object-contain",fallbackText:r.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold text-text-primary capitalize truncate",children:r.provider}),m(r)?(0,a.jsx)("p",{className:"text-xs text-text-muted truncate",children:m(r)}):null,M(r)?(0,a.jsx)("p",{className:"text-[11px] text-text-muted/80 truncate",children:M(r)}):null,"kiro"===r.provider&&(0,a.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-1",children:[(0,a.jsx)("span",{className:"rounded-full bg-brand-500/10 px-2 py-0.5 text-[10px] font-semibold text-brand-600 dark:text-brand-300",children:(l=r.providerSpecificData?.authMethod)&&E[l]?E[l]:"api_key"===r.authType?"API Key":"OAuth"}),O(r)&&(0,a.jsx)("span",{className:"rounded-full bg-blue-500/10 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:text-blue-400",children:O(r)}),(0,a.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${u?"bg-surface-2 text-text-muted":"active"===r.testStatus||"success"===r.testStatus?"bg-green-500/10 text-green-600 dark:text-green-400":"error"===r.testStatus||"expired"===r.testStatus||"unavailable"===r.testStatus?"bg-red-500/10 text-red-600 dark:text-red-400":"bg-surface-2 text-text-muted"}`,children:u?"disabled":r.testStatus||"unknown"}),r.providerSpecificData?.profileArn&&(0,a.jsxs)("button",{type:"button",onClick:()=>t(r.providerSpecificData.profileArn,r.id),title:r.providerSpecificData.profileArn,className:"inline-flex max-w-full items-center gap-1 rounded-full border border-border-subtle px-2 py-0.5 text-[10px] text-text-muted transition-colors hover:text-primary",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:e===r.id?"check":"content_copy"}),(0,a.jsx)("code",{className:"truncate font-mono",children:r.providerSpecificData.profileArn})]})]})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[x&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C.default,{text:h>0?`Use one Codex reset credit. Available: ${h}`:"No Codex reset credits available",children:(0,a.jsxs)("button",{type:"button",onClick:()=>eu({connection:r,resetCreditCount:h}),disabled:h<=0||d||b,"aria-label":h>0?`Use one Codex reset credit. ${h} available.`:"No Codex reset credits available",className:`flex h-8 min-w-10 items-center justify-center gap-1 rounded-lg border px-2 text-[11px] font-medium tabular-nums transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary/60 disabled:cursor-not-allowed disabled:opacity-60 ${h>0?"border-primary/30 bg-primary/5 text-primary hover:bg-primary/10":"border-black/10 bg-black/[0.02] text-text-muted dark:border-white/10 dark:bg-white/[0.03]"}`,children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[15px] ${p?"animate-spin":""}`,children:p?"progress_activity":"restart_alt"}),(0,a.jsx)("span",{children:h})]})}),(0,a.jsx)(C.default,{text:"View Codex reset credit expiry",children:(0,a.jsx)("button",{type:"button",onClick:()=>eZ(r),disabled:d||b,"aria-label":"View Codex reset credit expiry",className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-muted transition-colors hover:bg-black/5 hover:text-primary disabled:cursor-not-allowed disabled:opacity-50 dark:border-white/10 dark:hover:bg-white/5",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[17px]",children:"schedule"})})})]}),T[r.provider]&&"oauth"===r.authType&&(0,a.jsx)(C.default,{text:D[r.provider],children:(0,a.jsx)("button",{type:"button",onClick:()=>e3(r.id,r.provider,J[r.provider]?.[r.id]!==!0),"aria-label":"Toggle auto-ping",className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${J[r.provider]?.[r.id]===!0?"text-primary":"text-text-muted"}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"bolt"})})}),(0,a.jsx)(C.default,{text:"Refresh quota",children:(0,a.jsx)("button",{type:"button",onClick:()=>eY(r.id,r.provider),disabled:d||b,"aria-label":"Refresh quota",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-black/5 dark:hover:bg-white/5 transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${d?"animate-spin":""}`,children:"refresh"})})}),(0,a.jsx)(C.default,{text:"Edit connection",children:(0,a.jsx)("button",{type:"button",onClick:()=>{eg(r),ep(!0)},disabled:b,"aria-label":"Edit connection",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})})}),(0,a.jsx)(C.default,{text:"Delete connection",children:(0,a.jsx)("button",{type:"button",onClick:()=>e0(r.id),disabled:b,"aria-label":"Delete connection",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-red-500/10 text-red-500 transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] ${ei===r.id?"animate-pulse":""}`,children:"delete"})})}),(0,a.jsx)("div",{className:"inline-flex items-center pl-0.5",title:r.isActive??!0?"Disable connection":"Enable connection",children:(0,a.jsx)(S.default,{size:"sm",checked:r.isActive??!0,disabled:b,onChange:e=>e1(r.id,e)})})]})]})}),(0,a.jsxs)("div",{className:"px-2 py-1.5",children:[d?(0,a.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):c?(0,a.jsxs)("div",{className:"text-center py-5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,a.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:c})]}):o?.message?(0,a.jsx)("div",{className:"text-center py-5",children:(0,a.jsx)("p",{className:"text-xs text-text-muted",children:o.message})}):(0,a.jsx)(N,{quotas:f,compact:!0,sortMode:"default",showSortLabel:"codex"===r.provider&&"default"!==eC,onHideQuota:e=>e8(r.id,e,r.provider)}),y.length>0&&(0,a.jsxs)("div",{className:"mt-2 flex min-w-0 items-center gap-1 border-t border-black/5 pt-2 text-[10px] text-text-muted dark:border-white/5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined shrink-0 text-[14px]",children:"visibility_off"}),(0,a.jsx)("span",{className:"shrink-0",children:"Hidden:"}),(0,a.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto whitespace-nowrap pb-2",children:y.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>e6(r.id,e,r.provider),className:"shrink-0 rounded-md border border-black/10 px-1.5 py-0.5 transition-colors hover:bg-black/5 hover:text-text-primary dark:border-white/10 dark:hover:bg-white/5",title:"Show this quota row",children:j(e.name)},v(e)))})]})]})]},r.id)})}),(0,a.jsx)("div",{className:"rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 dark:border-white/10 dark:bg-white/[0.03]",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted",children:tl}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("select",{value:to?"custom":String(e_),onChange:e=>{let t=e.target.value;if("custom"===t)return;let r=Number.parseInt(t,10);Number.isFinite(r)&&(eF(1),eL(r),eR(String(r)))},className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Accounts per page",children:[d.map(e=>(0,a.jsxs)("option",{value:String(e),children:[e," / page"]},e)),(0,a.jsx)("option",{value:"custom",children:"Custom"})]}),(0,a.jsx)("input",{type:"number",min:"1",max:String(500),inputMode:"numeric",value:ez,onChange:e=>eR(e.target.value),onBlur:()=>{let e=Number.parseInt(ez,10);if(!Number.isFinite(e))return void eR(String(e_));let t=Math.min(500,Math.max(1,e));eF(1),eL(t),eR(String(t))},onKeyDown:e=>{if("Enter"!==e.key)return;let t=Number.parseInt(ez,10);if(!Number.isFinite(t))return void eR(String(e_));let r=Math.min(500,Math.max(1,t));eF(1),eL(r),eR(String(r))},className:"h-8 w-20 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Custom accounts per page",placeholder:"Custom"}),(0,a.jsxs)("span",{className:"text-xs text-text-muted",children:["Page ",eU.page," / ",eU.totalPages]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("button",{type:"button",onClick:()=>eF(1),disabled:eU.page<=1||er||X,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"First Page"}),(0,a.jsx)("button",{type:"button",onClick:()=>eF(e=>Math.max(1,e-1)),disabled:eU.page<=1||er||X,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Previous accounts page",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_left"})}),(0,a.jsx)("button",{type:"button",onClick:()=>eF(e=>Math.min(eU.totalPages,e+1)),disabled:eU.page>=eU.totalPages||er||X,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Next accounts page",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_right"})}),(0,a.jsx)("button",{type:"button",onClick:()=>eF(eU.totalPages),disabled:eU.page>=eU.totalPages||er||X,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Last Page"})]})]})}),(0,a.jsx)($.uo,{isOpen:!!ec,onClose:()=>{eo||eu(null)},onConfirm:async()=>{let e=ec?.connection;e&&(await eX(e.id,e.provider),eu(null))},title:"Reset Codex limit?",message:`Use 1 Codex reset credit for ${m(ec?.connection||{})||"this account"}. This cannot be undone. Remaining credits: ${ec?.resetCreditCount??0}.`,confirmText:"Reset limit",cancelText:"Cancel",variant:"danger",loading:!!eo}),em&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 px-4 backdrop-blur-sm",children:(0,a.jsxs)("div",{className:"w-full max-w-2xl overflow-hidden rounded-2xl border border-black/15 bg-white shadow-2xl ring-1 ring-black/10 dark:border-white/15 dark:bg-neutral-950 dark:ring-white/10",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3 border-b border-black/10 bg-black/[0.03] px-4 py-3 dark:border-white/10 dark:bg-white/[0.04]",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-base font-semibold text-text-primary",children:"Codex Reset Credit Expiry"}),(0,a.jsx)("p",{className:"mt-0.5 truncate text-xs text-text-muted",children:m(em.connection)||"Codex account"})]}),(0,a.jsx)("button",{type:"button",onClick:()=>ex(null),className:"flex h-8 w-8 items-center justify-center rounded-lg text-text-muted transition-colors hover:bg-black/5 hover:text-text-primary dark:hover:bg-white/5","aria-label":"Close reset credit expiry modal",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]}),(0,a.jsx)("div",{className:"max-h-[70vh] overflow-auto bg-white p-4 dark:bg-neutral-950",children:em.loading?(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),"Loading reset credits..."]}):em.error?(0,a.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-3 py-2 text-sm text-red-600 dark:text-red-300",children:em.error}):em.data?.credits?.length?(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("span",{children:[em.data.credits.length," reset credit",1===em.data.credits.length?"":"s"]}),(0,a.jsxs)("span",{children:[em.data.availableCount??0," available"]})]}),(0,a.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,a.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,a.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Status"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Granted At"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Expires At"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,a.jsx)("tbody",{children:em.data.credits.map((e,t)=>(0,a.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,a.jsx)("td",{className:"px-3 py-2",children:(0,a.jsx)("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:e.status||"unknown"})}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-muted",children:I(e.grantedAt)}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-primary",children:I(e.expiresAt)}),(0,a.jsx)("td",{className:"px-3 py-2 font-medium text-text-primary",children:function(e){if(!e)return"N/A";let t=new Date(e).getTime()-Date.now();if(!Number.isFinite(t))return"N/A";if(t<=0)return"Expired";let r=Math.ceil(t/36e5),a=Math.floor(r/24),i=r%24;return a>0?`${a}d ${i}h`:`${i}h`}(e.expiresAt)})]},`${e.status}-${e.expiresAt||t}`))})]})})]}):(0,a.jsx)("div",{className:"rounded-xl border border-black/10 bg-black/[0.02] px-3 py-8 text-center text-sm text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:"No reset credit details returned for this account."})})]})}),(0,a.jsx)($.wI,{isOpen:eh,connection:eb,proxyPools:ef,onSave:e5,onClose:()=>{ep(!1),eg(null)}})]})}}},e=>{e.O(0,[4614,1321,5497,8441,3794,7358],()=>e(e.s=26048)),_N_E=e.O()}]);
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "10router-app",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "10Router web dashboard",
5
5
  "private": true,
6
6
  "scripts": {
@@ -1,114 +1,133 @@
1
- # Changelog
2
-
3
- User-facing highlights per release. See [CHANGELOG.md](https://github.com/techysy/10router/blob/main/CHANGELOG.md) for the full developer log.
4
-
5
- ## v1.0.6 (2026-09-05)
6
-
7
- ### ✨ New
8
-
9
- - **CodeBuddy CN auto daily check-in** (experimental, off by default): with "CodeBuddy CN auto daily check-in" enabled under Settings Experimental, the Import / Export buttons on the CodeBuddy CN page are replaced by an automatic daily check-in (each account checks in at a random 00:00–06:00 local time to renew free quota; failures never interrupt the service and a 401 triggers one token refresh + retry) plus a manual "Check in now" button
10
- - **Antigravity quota aligned with the official site (5h + weekly dual window)**: Antigravity quotas on the usage page now use the official retrieveUserQuotaSummary RPC as the primary source, showing exactly **4 cards** per account (Gemini Models / Claude and GPT models × {5-hour, weekly}), normalized to a 0–100 scale; falls back to the old per-model parse when the RPC is unavailable
11
- - **OpenCode Free catalog aligned with the official free list**: adds Big Pickle / MiMo-V2.5 / Ling 3.0 Flash Fin / Nemotron 3 Ultra / Nemotron 3.5 Lightning; deliberately excludes the DeepSeek / Laguna free tiers the official docs have dropped (avoids accidental paid calls)
12
-
13
- ### 🐛 Fixes
14
- - **Antigravity `ag/gemini-3.8-flash-*` 404**: model addressing now uses per-tier tiered entities and the IDE fingerprint is bumped to 2.11.0 (bare ids 404 with "Requested entity was not found"); adds the un-tiered `ag/gemini-3.8-flash` (routed to the medium tier)
15
- - **"Only with balance" misses newly-checked-in quota packs**: fixed a case where CodeBuddy CN's daily full packs were hidden after older packs were renumbered and the persistent hide never cleared — the hidden set is now recomputed live so any pack with remaining balance (including fresh full packs) always shows
16
- - **Friendly message for free-model 429 rate limits**: when a free-tier model (`oc/*-free`, `contributor-free`, APInex `free/`-prefixed, etc.) hits an upstream rate limit and returns 429, the raw English `rate_limit_exceeded` is no longer passed through — instead a friendly Chinese message is returned showing an estimated wait ("try again in ~N sec/min/hr") when the upstream supplied a reset time, otherwise advising to retry later or switch to a paid tier. Paid models and multi-account fallback are untouched
17
-
18
- ## v1.0.5 (2026-09-03)
19
-
20
- ### New
21
-
22
- - **Desktop tray app (Windows / macOS)**: an install-and-go desktop app — system tray menu (open console / start / restart / stop / launch at login) plus an embedded window; closing the window minimizes to the tray. Shares data, keys and port with the npm CLI (the two forms run exclusively). Windows ships an NSIS installer (silent `/S` supported) and a portable exe; macOS ships separate Intel + Apple Silicon dmgs
23
- - **CLI / desktop UI localization**: the npm CLI and the desktop tray now follow the system language (Simplified Chinese / Traditional Chinese / English); override with the `TENROUTER_LANG` env var (`zh-CN` / `zh-TW` / `en`)
24
- - **Self-serve custom providers + new Skills-page skill**: register a custom OpenAI/Anthropic-compatible endpoint (baseUrl + upstream key + models) at runtime with a dashboard LLM key — no source change, no repackage. The Dashboard **Skills** page gains a **10router-add-provider** card and now links to the `main` branch (previously `master`, which 404'd)
25
- - **CodeBuddy CN account JSON bulk import / export** (experimental, off by default): after enabling "CodeBuddy CN OAuth import / export" under Settings → Providers, the CodeBuddy CN detail page shows Import / Export buttons to bulk-import or export account credentials in the third-party (wb) JSON format (import dedupes by identity and skips non-CodeBuddy issuers). Import / export now require a dashboard-password confirmation (prevents anonymous token export in no-login mode)
26
- - **Community welfare providers show by default**: GoRouter / TaBiAI now appear by default (no need to toggle them on), consistent across the provider list / Profile toggle / usage topology
27
- - **Community welfare providers sort into one group**: in the Free Tier list, community providers (GoRouter / TaBiAI) now cluster into one adjacent block per rank group instead of interleaving with regular freeTier providers by priority/name
28
- - **New Agnes AI dual-site providers**: international **Agnes AI** (com) + **Agnes AI (CN)** each with Agnes 2.5 Flash / 2.5 Pro text models (512K / 1M context, vision + reasoning), plus Agnes Image 2.x Flash image models (standard images/generations endpoint; image-to-image / editing)
29
- - **New "Experimental" settings group**: Profile gains a dedicated Experimental card gathering the developer-oriented default-off toggles (Fetch models from GitHub JSON + CodeBuddy CN import/export) for easy future expansion
30
- - **New provider APInex (apinex.bond)**: prepaid USD-credit third-party gateway (OpenAI-compatible) with 18 models (13 paid + 5 `free/`-prefixed free models); provider pages show a copyable invite-code chip (APInex: `SLEWP68C`)
31
- - **Upstream v0.5.65 catalog sync + new search providers**: adds GLM-5.3-Flash(Vision), GLM-4.6V, DeepSeek-V4-Flash-Vision-Exp, Grok-4.6, Claude-Fable-5.1 and more; new search providers Ollama-Search (reuses your local Ollama key) and Xquik (X/Twitter search)
32
-
33
- ### 🐛 Fixes
34
- - **Usage table corruption after Cost/Token switch**: toggling the display mode and sorting no longer reverts some rows to currency values; Traditional Chinese usage-table headers are now fully translated
35
- - **Usage table sorting semantics**: token / cost columns now sort model groups by their totals, matching the header arrow direction
36
-
37
- ## v1.0.4 (2026-09-01)
38
-
39
- ### ✨ New
40
- - **3 new providers**: **TokenBom** (decentralized token marketplace — idle API keys earn credits, credits call many models; 79-model online catalog), **GoRouter** (free gateway, no recharge entry), **TaBiAI** (free gateway, no recharge entry)
41
- - **Usage history import**: import usage data from 9Router backups (SQLite files) merged into stats without touching config
42
- - **Notification overhaul**: global toasts moved to top-center; browser-native alert() dialogs replaced with friendly notifications
43
- - **Community welfare providers**: GoRouter / TaBiAI are hidden by default with a "community" badge; toggle them on in **Settings Providers Show community welfare providers**
44
-
45
- ### 🐛 Fixes
46
- - **Provider ordering fixed**: connected providers first, disabled sink to bottom no longer scrambled by priority
47
- - **JSON catalog models invisible after enabling**: stale disable records are now cleared ("enabled but not listed" resolved)
48
- - **B.AI / CodeBuddy CN model catalogs completed**: missing models that caused "not found" when switching are added
49
- - **Friendly maintenance hints on connection tests**: endpoint down / Cloudflare-blocked shows a maintenance note instead of a misleading "Invalid API key"
50
- - **Account filter reminder**: quota-pack account filter persists; an amber reminder bar shows when a non-default filter is active
51
- - **CodeBuddy CN DeepSeek 11150**: DeepSeek-series calls no longer fail with 400 on the reasoning-effort param (auto/off); coding agents (dsh, etc.) work normally
52
- - **CodeBuddy empty tool name (11133 / unknown tool)**: empty `function.name` in streaming tool calls is normalized, so standard clients no longer mis-detect the tool name
53
- - **Topology still shows hidden community providers**: the usage topology now honors the "Show community providers" toggle community welfare sites (GoRouter/TaBiAI) are hidden when it's off
54
- - **Skills page i18n + Chinese links**: Skills page text is now localized; in Chinese (zh-CN) the links point to the Chinese skill files
55
-
56
- ## v1.0.3 (2026-08-30)
57
-
58
- ### ✨ New
59
- - **4 new providers**: **LongCat** (Meituan), **SenseNova** (SenseTime, free beta), **Dots** (Xiaohongshu Dots Studio, free beta), **B.AI** (aggregator one key for GPT / Claude / Gemini / DeepSeek / GLM / Kimi / Qwen and more)
60
- - **Model JSON catalogs for custom providers**: custom nodes can pull an online model list, toggle models on/off individually, and manage them in bulk
61
- - **fpk update check goes straight to Releases**: fnOS installs jump directly to the matching release download
62
-
63
- ### 🔒 Security
64
- - **Progressive login rate-limit**: 5 failed password attempts → 30s / 2m / 10m / 30m lockout
65
- - **Reject placeholder JWT keys**: copying the public `.env.example` key is ignored; a random key is generated instead
66
- - **Fix npm package leaking build-machine secrets**: no more keys / machine IDs / data snapshots in the build artifact
67
-
68
- ### ⚠️ Notes
69
- - npm package renamed to **`@techysy/10router`** (the old `10router` is an unrelated fork). If you installed `10router-cli`, switch to the new package; data directory unchanged.
70
-
71
- ## v1.0.2 (2026-08-29)
72
-
73
- ### 🐛 Fixes
74
- - **Update check no longer points at a third-party package** (affected 1.0.1): version check, update command, and sidebar install command all target the correct package
75
- - **postinstall no longer aborts install**: npm install no longer fails from the warm-up script on WSL paths
76
-
77
- ### ⚙️ Engineering
78
- - **Test CI added**: tests + regression gate run automatically on push / PR
79
-
80
- > ⚠️ **1.0.1 users should upgrade**: its built-in "check for updates" points to an unrelated third-party package.
81
-
82
- ## v1.0.1 (unreleased; delivered with v1.0.2)
83
-
84
- > 1.0.1 was never published as a release (only the npm `10router-cli@1.0.1` briefly existed). The following reached Docker / fpk / standalone users with **v1.0.2**.
85
-
86
- ### 🔒 Security
87
- - **4 MITM security fixes**: upstream TLS cert validation restored, root CA private key locked to 0600, no longer blindly killing the process on port 443, auto-cleanup of leftover hosts entries (MITM is off by default)
88
-
89
- ### ✨ New
90
- - **Disabled providers sink to the bottom** via a settings toggle
91
- - **Collapsible desktop sidebar**
92
- - **OpenCode Go quota usage**
93
- - **Gitee mirror fallback for model catalogs** (faster in CN)
94
-
95
- ### 🐛 Fixes
96
- - **/v1/models no longer returns orphan custom models**
97
- - **Custom node prefix uniqueness check**
98
- - **Fix CodeBuddy executor dropping the Agent system prompt**
99
-
100
- ### ⚙️ Engineering
101
- - **New npm distribution channel**: `npm i -g 10router-cli`
102
- - **Generic "fetch models from GitHub JSON" capability** (Fetch Models)
103
-
104
- ## v1.0.0 (2026-08-26)
105
-
106
- ### ⚠️ Notes
107
- 1. **Data directory renamed**: `~/.9router/` → `~/.10router/` (Windows: `%APPDATA%\10router`), auto-migrated on first start
108
- 2. **SAML entityID changed**: default issuer is now `urn:10router:sp`; re-register in your IdP
109
- 3. **MITM CA renamed**: re-trust the new CA
110
-
111
- ### New
112
- - **Rebrand**: 9Router 10Router
113
- - **i18n multi-region currency**: en / pt-BR / pt-PT / es / de
114
- - **Multi-platform distribution**: Docker (amd64 / arm64), fnOS fpk (x86 / arm × url / iframe), Standalone
1
+ # Changelog
2
+
3
+ User-facing highlights per release. See [CHANGELOG.md](https://github.com/techysy/10router/blob/main/CHANGELOG.md) for the full developer log.
4
+
5
+ ## v1.0.7 (2026-09-06)
6
+
7
+ ### ✨ New
8
+ - **CodeBuddy CN built-in "Total Points" quota row**: the CodeBuddy CN card now leads with a Total Points row summing the live balance of every pack (monthly refills + bonus packs) — no more adding them up yourself; it auto-hides under the "Only with balance" filter once drained; "Bonus Pack" row names are now localized
9
+ - **ZCode usage sync plugin (10router-sync)**: import ZCode's local model-usage ledger into 10Router in one step providers pointed at 10Router are auto-excluded to prevent double counting; re-runs are idempotent via dedup; imported usage shows up in the usage page and the details tab
10
+ - **Upstream v0.5.69 selective port**: Google-family multi-account background refresh → serial + tiered jitter to dodge anti-abuse risk control; Anthropic-compatible nodes on real Claude auto-add context-management beta headers (no more silent model-swap); opencode-go stable sessions (free pool no longer trips risk control); Responses parallel tool-call fix (no longer merges N calls into one); Claude Fable weekly-quota tracking; codex adds gpt-6-astra etc.; ⑦ codebuddy-cn model catalog aligned to server contract
11
+ - **qoder catalog refresh + image passthrough**: model list aligned to server, base64 image direct send; dashboard Antigravity quota grouped by family (per-connection isolation, better than upstream)
12
+ - **Desktop tray update path + leaner menu**: desktop update banner now points to GitHub Releases; tray menu merges check-update / about / start-stop into one compact flow
13
+ - **copilot switched to VS Code extension guide**: no more MITM intercept — three-step extension config (engine layer retained, manually revertible)
14
+ - **Tray icon monochrome**: macOS template icon + Windows dark/light theme black-white adaptive
15
+
16
+ ### 🐛 Fixed
17
+ - **`/responses` root-path auth gap (security)**: prefix added, path now enforces API-key check
18
+ - **Foreign `server_tool_use` poisoning history after Claude combo fallback (400)**: validate `srvtoolu_` prefix and drop foreign tool blocks
19
+ - **MCP deferred tool breaking cache anchors (400)**: anchor now pinned to the last cacheable tool
20
+ - **gemini schema tuple validation 400**: `prefixItems` conversion + array missing `items` placeholder
21
+ - **antigravity system-prompt competitor brand-clean generalization**: OpenCode naming no longer triggers 429
22
+ - **Free-model background-refresh noise + connection-test hang**: de-noised + 15s timeout
23
+
24
+ ## v1.0.6 (2026-09-05)
25
+
26
+ ### New
27
+
28
+ - **CodeBuddy CN auto daily check-in** (experimental, off by default): with "CodeBuddy CN auto daily check-in" enabled under Settings Experimental, the Import / Export buttons on the CodeBuddy CN page are replaced by an automatic daily check-in (each account checks in at a random 00:00–06:00 local time to renew free quota; failures never interrupt the service and a 401 triggers one token refresh + retry) plus a manual "Check in now" button
29
+ - **Antigravity quota aligned with the official site (5h + weekly dual window)**: Antigravity quotas on the usage page now use the official retrieveUserQuotaSummary RPC as the primary source, showing exactly **4 cards** per account (Gemini Models / Claude and GPT models × {5-hour, weekly}), normalized to a 0–100 scale; falls back to the old per-model parse when the RPC is unavailable
30
+ - **OpenCode Free catalog aligned with the official free list**: adds Big Pickle / MiMo-V2.5 / Ling 3.0 Flash Fin / Nemotron 3 Ultra / Nemotron 3.5 Lightning; deliberately excludes the DeepSeek / Laguna free tiers the official docs have dropped (avoids accidental paid calls)
31
+
32
+ ### 🐛 Fixes
33
+ - **Antigravity `ag/gemini-3.8-flash-*` 404**: model addressing now uses per-tier tiered entities and the IDE fingerprint is bumped to 2.11.0 (bare ids 404 with "Requested entity was not found"); adds the un-tiered `ag/gemini-3.8-flash` (routed to the medium tier)
34
+ - **"Only with balance" misses newly-checked-in quota packs**: fixed a case where CodeBuddy CN's daily full packs were hidden after older packs were renumbered and the persistent hide never cleared — the hidden set is now recomputed live so any pack with remaining balance (including fresh full packs) always shows
35
+ - **Friendly message for free-model 429 rate limits**: when a free-tier model (`oc/*-free`, `contributor-free`, APInex `free/`-prefixed, etc.) hits an upstream rate limit and returns 429, the raw English `rate_limit_exceeded` is no longer passed through — instead a friendly Chinese message is returned showing an estimated wait ("try again in ~N sec/min/hr") when the upstream supplied a reset time, otherwise advising to retry later or switch to a paid tier. Paid models and multi-account fallback are untouched
36
+
37
+ ## v1.0.5 (2026-09-03)
38
+
39
+ ### ✨ New
40
+
41
+ - **Desktop tray app (Windows / macOS)**: an install-and-go desktop app — system tray menu (open console / start / restart / stop / launch at login) plus an embedded window; closing the window minimizes to the tray. Shares data, keys and port with the npm CLI (the two forms run exclusively). Windows ships an NSIS installer (silent `/S` supported) and a portable exe; macOS ships separate Intel + Apple Silicon dmgs
42
+ - **CLI / desktop UI localization**: the npm CLI and the desktop tray now follow the system language (Simplified Chinese / Traditional Chinese / English); override with the `TENROUTER_LANG` env var (`zh-CN` / `zh-TW` / `en`)
43
+ - **Self-serve custom providers + new Skills-page skill**: register a custom OpenAI/Anthropic-compatible endpoint (baseUrl + upstream key + models) at runtime with a dashboard LLM key no source change, no repackage. The Dashboard **Skills** page gains a **10router-add-provider** card and now links to the `main` branch (previously `master`, which 404'd)
44
+ - **CodeBuddy CN account JSON bulk import / export** (experimental, off by default): after enabling "CodeBuddy CN OAuth import / export" under Settings → Providers, the CodeBuddy CN detail page shows Import / Export buttons to bulk-import or export account credentials in the third-party (wb) JSON format (import dedupes by identity and skips non-CodeBuddy issuers). Import / export now require a dashboard-password confirmation (prevents anonymous token export in no-login mode)
45
+ - **Community welfare providers show by default**: GoRouter / TaBiAI now appear by default (no need to toggle them on), consistent across the provider list / Profile toggle / usage topology
46
+ - **Community welfare providers sort into one group**: in the Free Tier list, community providers (GoRouter / TaBiAI) now cluster into one adjacent block per rank group instead of interleaving with regular freeTier providers by priority/name
47
+ - **New Agnes AI dual-site providers**: international **Agnes AI** (com) + **Agnes AI (CN)** — each with Agnes 2.5 Flash / 2.5 Pro text models (512K / 1M context, vision + reasoning), plus Agnes Image 2.x Flash image models (standard images/generations endpoint; image-to-image / editing)
48
+ - **New "Experimental" settings group**: Profile gains a dedicated Experimental card gathering the developer-oriented default-off toggles (Fetch models from GitHub JSON + CodeBuddy CN import/export) for easy future expansion
49
+ - **New provider APInex (apinex.bond)**: prepaid USD-credit third-party gateway (OpenAI-compatible) with 18 models (13 paid + 5 `free/`-prefixed free models); provider pages show a copyable invite-code chip (APInex: `SLEWP68C`)
50
+ - **Upstream v0.5.65 catalog sync + new search providers**: adds GLM-5.3-Flash(Vision), GLM-4.6V, DeepSeek-V4-Flash-Vision-Exp, Grok-4.6, Claude-Fable-5.1 and more; new search providers Ollama-Search (reuses your local Ollama key) and Xquik (X/Twitter search)
51
+
52
+ ### 🐛 Fixes
53
+ - **Usage table corruption after Cost/Token switch**: toggling the display mode and sorting no longer reverts some rows to currency values; Traditional Chinese usage-table headers are now fully translated
54
+ - **Usage table sorting semantics**: token / cost columns now sort model groups by their totals, matching the header arrow direction
55
+
56
+ ## v1.0.4 (2026-09-01)
57
+
58
+ ### ✨ New
59
+ - **3 new providers**: **TokenBom** (decentralized token marketplace idle API keys earn credits, credits call many models; 79-model online catalog), **GoRouter** (free gateway, no recharge entry), **TaBiAI** (free gateway, no recharge entry)
60
+ - **Usage history import**: import usage data from 9Router backups (SQLite files) merged into stats without touching config
61
+ - **Notification overhaul**: global toasts moved to top-center; browser-native alert() dialogs replaced with friendly notifications
62
+ - **Community welfare providers**: GoRouter / TaBiAI are hidden by default with a "community" badge; toggle them on in **Settings → Providers → Show community welfare providers**
63
+
64
+ ### 🐛 Fixes
65
+ - **Provider ordering fixed**: connected providers first, disabled sink to bottom no longer scrambled by priority
66
+ - **JSON catalog models invisible after enabling**: stale disable records are now cleared ("enabled but not listed" resolved)
67
+ - **B.AI / CodeBuddy CN model catalogs completed**: missing models that caused "not found" when switching are added
68
+ - **Friendly maintenance hints on connection tests**: endpoint down / Cloudflare-blocked shows a maintenance note instead of a misleading "Invalid API key"
69
+ - **Account filter reminder**: quota-pack account filter persists; an amber reminder bar shows when a non-default filter is active
70
+ - **CodeBuddy CN DeepSeek 11150**: DeepSeek-series calls no longer fail with 400 on the reasoning-effort param (auto/off); coding agents (dsh, etc.) work normally
71
+ - **CodeBuddy empty tool name (11133 / unknown tool)**: empty `function.name` in streaming tool calls is normalized, so standard clients no longer mis-detect the tool name
72
+ - **Topology still shows hidden community providers**: the usage topology now honors the "Show community providers" toggle — community welfare sites (GoRouter/TaBiAI) are hidden when it's off
73
+ - **Skills page i18n + Chinese links**: Skills page text is now localized; in Chinese (zh-CN) the links point to the Chinese skill files
74
+
75
+ ## v1.0.3 (2026-08-30)
76
+
77
+ ### New
78
+ - **4 new providers**: **LongCat** (Meituan), **SenseNova** (SenseTime, free beta), **Dots** (Xiaohongshu Dots Studio, free beta), **B.AI** (aggregator — one key for GPT / Claude / Gemini / DeepSeek / GLM / Kimi / Qwen and more)
79
+ - **Model JSON catalogs for custom providers**: custom nodes can pull an online model list, toggle models on/off individually, and manage them in bulk
80
+ - **fpk update check goes straight to Releases**: fnOS installs jump directly to the matching release download
81
+
82
+ ### 🔒 Security
83
+ - **Progressive login rate-limit**: 5 failed password attempts → 30s / 2m / 10m / 30m lockout
84
+ - **Reject placeholder JWT keys**: copying the public `.env.example` key is ignored; a random key is generated instead
85
+ - **Fix npm package leaking build-machine secrets**: no more keys / machine IDs / data snapshots in the build artifact
86
+
87
+ ### ⚠️ Notes
88
+ - npm package renamed to **`@techysy/10router`** (the old `10router` is an unrelated fork). If you installed `10router-cli`, switch to the new package; data directory unchanged.
89
+
90
+ ## v1.0.2 (2026-08-29)
91
+
92
+ ### 🐛 Fixes
93
+ - **Update check no longer points at a third-party package** (affected 1.0.1): version check, update command, and sidebar install command all target the correct package
94
+ - **postinstall no longer aborts install**: npm install no longer fails from the warm-up script on WSL paths
95
+
96
+ ### ⚙️ Engineering
97
+ - **Test CI added**: tests + regression gate run automatically on push / PR
98
+
99
+ > ⚠️ **1.0.1 users should upgrade**: its built-in "check for updates" points to an unrelated third-party package.
100
+
101
+ ## v1.0.1 (unreleased; delivered with v1.0.2)
102
+
103
+ > 1.0.1 was never published as a release (only the npm `10router-cli@1.0.1` briefly existed). The following reached Docker / fpk / standalone users with **v1.0.2**.
104
+
105
+ ### 🔒 Security
106
+ - **4 MITM security fixes**: upstream TLS cert validation restored, root CA private key locked to 0600, no longer blindly killing the process on port 443, auto-cleanup of leftover hosts entries (MITM is off by default)
107
+
108
+ ### New
109
+ - **Disabled providers sink to the bottom** via a settings toggle
110
+ - **Collapsible desktop sidebar**
111
+ - **OpenCode Go quota usage**
112
+ - **Gitee mirror fallback for model catalogs** (faster in CN)
113
+
114
+ ### 🐛 Fixes
115
+ - **/v1/models no longer returns orphan custom models**
116
+ - **Custom node prefix uniqueness check**
117
+ - **Fix CodeBuddy executor dropping the Agent system prompt**
118
+
119
+ ### ⚙️ Engineering
120
+ - **New npm distribution channel**: `npm i -g 10router-cli`
121
+ - **Generic "fetch models from GitHub JSON" capability** (Fetch Models)
122
+
123
+ ## v1.0.0 (2026-08-26)
124
+
125
+ ### ⚠️ Notes
126
+ 1. **Data directory renamed**: `~/.9router/` → `~/.10router/` (Windows: `%APPDATA%\10router`), auto-migrated on first start
127
+ 2. **SAML entityID changed**: default issuer is now `urn:10router:sp`; re-register in your IdP
128
+ 3. **MITM CA renamed**: re-trust the new CA
129
+
130
+ ### ✨ New
131
+ - **Rebrand**: 9Router → 10Router
132
+ - **i18n multi-region currency**: en / pt-BR / pt-PT / es / de
133
+ - **Multi-platform distribution**: Docker (amd64 / arm64), fnOS fpk (x86 / arm × url / iframe), Standalone