@techysy/10router 1.6.4-test.1 → 1.6.4-test.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +35 -35
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  58. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  59. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  60. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  61. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  62. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  63. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/_not-found.html +2 -2
  66. package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
  67. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
  68. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  69. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  70. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js +1 -1
  76. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js +1 -1
  79. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/auth/verify-password/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/cli-tools/claude-profiles/route.js +1 -1
  88. package/app/.next-cli-build/server/app/api/cli-tools/claude-profiles/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/cli-tools/codex-profiles/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  107. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  109. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/external-quota/[source]/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/gateway-probe/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  114. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
  116. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  118. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
  120. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  125. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/keys/rotate/route.js +1 -1
  127. package/app/.next-cli-build/server/app/api/keys/rotate/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  129. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  134. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  136. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  138. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  140. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  142. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  144. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  146. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/models/caps/route.js +1 -1
  148. package/app/.next-cli-build/server/app/api/models/caps/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/models/custom/bulk/route.js +1 -1
  150. package/app/.next-cli-build/server/app/api/models/custom/bulk/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  152. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  154. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  156. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/network/egress-region/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/checkin/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/claim-compensation/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/export/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  166. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  168. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -1
  180. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/oauth/loomy/sms-login/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/oauth/loomy/sms-login/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/oauth/loomy/sms-send/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/oauth/qoder/checkin/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/oauth/qoder-cn/checkin/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/oauth/transfer/export/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/oauth/transfer/import/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/oauth/transfer/import/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  192. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
  194. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/desktop-kill/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/desktop-status/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  207. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  209. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  212. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  215. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  218. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  224. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  226. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  230. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
  232. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +1 -1
  238. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +1 -1
  241. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/security/status/route.js +1 -1
  244. package/app/.next-cli-build/server/app/api/security/status/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/settings/database/import-usage/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  249. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  251. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  255. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  257. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  261. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  263. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  274. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  276. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/usage/dashboard/route.js +1 -1
  280. package/app/.next-cli-build/server/app/api/usage/dashboard/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  282. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
  284. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  286. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/usage/quotas/route.js +1 -1
  288. package/app/.next-cli-build/server/app/api/usage/quotas/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  290. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  292. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  294. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  295. package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
  296. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  298. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  300. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  304. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  306. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  308. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  309. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  310. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  311. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/rerank/route.js +1 -1
  319. package/app/.next-cli-build/server/app/api/v1/rerank/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  321. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/systemone/route.js +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/systemone/route.js.nft.json +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
  332. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  339. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  340. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  341. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  342. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  343. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  344. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  345. package/app/.next-cli-build/server/app/api/version/shell-update/route.js.nft.json +1 -1
  346. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  347. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  349. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  350. package/app/.next-cli-build/server/app/callback.html +2 -2
  351. package/app/.next-cli-build/server/app/callback.rsc +6 -6
  352. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
  353. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  354. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
  355. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
  356. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +8 -8
  357. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +8 -8
  358. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
  359. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  360. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +2 -2
  361. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +8 -8
  362. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  363. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  364. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  365. package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
  366. package/app/.next-cli-build/server/app/dashboard/combos.rsc +8 -8
  367. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  368. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  369. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  370. package/app/.next-cli-build/server/app/dashboard/endpoint.html +2 -2
  371. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
  372. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  373. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  374. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  375. package/app/.next-cli-build/server/app/dashboard/experimental.html +2 -2
  376. package/app/.next-cli-build/server/app/dashboard/experimental.rsc +8 -8
  377. package/app/.next-cli-build/server/app/dashboard/experimental.segments/!KGRhc2hib2FyZCk/dashboard/experimental/__PAGE__.segment.rsc +8 -8
  378. package/app/.next-cli-build/server/app/dashboard/experimental.segments/_full.segment.rsc +8 -8
  379. package/app/.next-cli-build/server/app/dashboard/experimental.segments/_tree.segment.rsc +2 -2
  380. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
  381. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +8 -8
  382. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +8 -8
  383. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
  384. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  385. package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
  386. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +8 -8
  387. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +8 -8
  388. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
  389. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  390. package/app/.next-cli-build/server/app/dashboard/profile.html +2 -2
  391. package/app/.next-cli-build/server/app/dashboard/profile.rsc +8 -8
  392. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  393. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  394. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  395. package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
  396. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +8 -8
  397. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  398. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  399. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  400. package/app/.next-cli-build/server/app/dashboard/providers.html +2 -2
  401. package/app/.next-cli-build/server/app/dashboard/providers.rsc +8 -8
  402. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  403. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  404. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  405. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
  406. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +8 -8
  407. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  408. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  409. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  410. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
  411. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +8 -8
  412. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +8 -8
  413. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +8 -8
  414. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  415. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  416. package/app/.next-cli-build/server/app/dashboard/quota.rsc +9 -9
  417. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  418. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  419. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  420. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  422. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +2 -2
  423. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
  424. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  425. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  426. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  427. package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
  428. package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
  429. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
  430. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
  431. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  432. package/app/.next-cli-build/server/app/dashboard/token-saver.html +2 -2
  433. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +8 -8
  434. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +8 -8
  435. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
  436. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  437. package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
  438. package/app/.next-cli-build/server/app/dashboard/translator.rsc +8 -8
  439. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +8 -8
  440. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
  441. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  442. package/app/.next-cli-build/server/app/dashboard/usage.html +2 -2
  443. package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -8
  444. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  445. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  446. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  447. package/app/.next-cli-build/server/app/dashboard.html +2 -2
  448. package/app/.next-cli-build/server/app/dashboard.rsc +8 -8
  449. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  450. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +8 -8
  451. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  452. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  453. package/app/.next-cli-build/server/app/index.html +1 -1
  454. package/app/.next-cli-build/server/app/index.rsc +6 -6
  455. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  456. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
  457. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  458. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  459. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  460. package/app/.next-cli-build/server/app/landing.html +2 -2
  461. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  462. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  463. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  464. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
  465. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  466. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  467. package/app/.next-cli-build/server/app/login.html +2 -2
  468. package/app/.next-cli-build/server/app/login.rsc +7 -7
  469. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
  470. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  471. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +7 -7
  472. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  473. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  474. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  475. package/app/.next-cli-build/server/app-paths-manifest.json +35 -35
  476. package/app/.next-cli-build/server/chunks/1310.js +9 -0
  477. package/app/.next-cli-build/server/chunks/1622.js +1 -1
  478. package/app/.next-cli-build/server/chunks/1806.js +1 -1
  479. package/app/.next-cli-build/server/chunks/1819.js +1 -1
  480. package/app/.next-cli-build/server/chunks/2812.js +1 -1
  481. package/app/.next-cli-build/server/chunks/3662.js +1 -1
  482. package/app/.next-cli-build/server/chunks/3771.js +1 -1
  483. package/app/.next-cli-build/server/chunks/3792.js +1 -1
  484. package/app/.next-cli-build/server/chunks/3962.js +1 -1
  485. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  486. package/app/.next-cli-build/server/chunks/4906.js +1 -1
  487. package/app/.next-cli-build/server/chunks/4927.js +1 -1
  488. package/app/.next-cli-build/server/chunks/5527.js +1 -1
  489. package/app/.next-cli-build/server/chunks/5757.js +1 -1
  490. package/app/.next-cli-build/server/chunks/5781.js +1 -1
  491. package/app/.next-cli-build/server/chunks/5787.js +9 -0
  492. package/app/.next-cli-build/server/chunks/5837.js +1 -1
  493. package/app/.next-cli-build/server/chunks/594.js +1 -0
  494. package/app/.next-cli-build/server/chunks/6212.js +1 -1
  495. package/app/.next-cli-build/server/chunks/6960.js +1 -1
  496. package/app/.next-cli-build/server/chunks/7067.js +1 -1
  497. package/app/.next-cli-build/server/chunks/7209.js +1 -1
  498. package/app/.next-cli-build/server/chunks/7274.js +1 -1
  499. package/app/.next-cli-build/server/chunks/8145.js +1 -1
  500. package/app/.next-cli-build/server/chunks/8172.js +1 -1
  501. package/app/.next-cli-build/server/chunks/8318.js +1 -1
  502. package/app/.next-cli-build/server/chunks/8370.js +7 -7
  503. package/app/.next-cli-build/server/chunks/8410.js +1 -1
  504. package/app/.next-cli-build/server/chunks/8439.js +1 -1
  505. package/app/.next-cli-build/server/chunks/8595.js +1 -1
  506. package/app/.next-cli-build/server/chunks/8775.js +1 -1
  507. package/app/.next-cli-build/server/chunks/922.js +9 -0
  508. package/app/.next-cli-build/server/chunks/9489.js +1 -1
  509. package/app/.next-cli-build/server/chunks/9781.js +1 -0
  510. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  511. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  512. package/app/.next-cli-build/server/middleware.js +5 -5
  513. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  514. package/app/.next-cli-build/server/pages/404.html +2 -2
  515. package/app/.next-cli-build/server/pages/500.html +1 -1
  516. package/app/.next-cli-build/static/chunks/1321-b8be93bbd911ff4d.js +1 -0
  517. package/app/.next-cli-build/static/chunks/{5497-100281ed6ce1f83b.js → 5497-f6d548a4a9538453.js} +1 -1
  518. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-a2f5c1fa12df475b.js → page-7c4e389aed972469.js} +1 -1
  519. package/app/.next-cli-build/static/css/{63c4d9ca82aea954.css → 02a46e8ee21b7aaa.css} +1 -1
  520. package/app/package.json +1 -1
  521. package/app/public/i18n/changelog/en.md +4 -0
  522. package/app/public/i18n/changelog/zh-CN.md +4 -0
  523. package/app/public/i18n/changelog/zh-TW.md +4 -0
  524. package/app/public/i18n/literals/zh-CN.json +2 -0
  525. package/app/public/i18n/literals/zh-TW.json +2 -0
  526. package/package.json +1 -1
  527. package/app/.next-cli-build/server/chunks/1386.js +0 -9
  528. package/app/.next-cli-build/server/chunks/3389.js +0 -1
  529. package/app/.next-cli-build/server/chunks/9451.js +0 -9
  530. package/app/.next-cli-build/server/chunks/976.js +0 -9
  531. package/app/.next-cli-build/static/chunks/1321-25956f9bfbc2e6da.js +0 -1
  532. /package/app/.next-cli-build/static/{ilH6FH_DABFzbJ122SgT6 → 27KqZx4tyAU8IQDuc2h_r}/_buildManifest.js +0 -0
  533. /package/app/.next-cli-build/static/{ilH6FH_DABFzbJ122SgT6 → 27KqZx4tyAU8IQDuc2h_r}/_ssgManifest.js +0 -0
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "10router-app",
3
- "version": "1.6.4-test.1",
3
+ "version": "1.6.4-test.2",
4
4
  "description": "10Router web dashboard",
5
5
  "private": true,
6
6
  "scripts": {
@@ -18,6 +18,10 @@ User-facing highlights per release. See [CHANGELOG.md](https://github.com/techys
18
18
  - Added OpenAI GPT-6.1 Terra (500k context) and Nace Drex decision engine.
19
19
  - CommandCode CLI 1.88.0 headers and Gemini Protobuf Schema type constraint enforcement.
20
20
 
21
+ - **iFlytek Loomy built-in + SMS login + points card**: Loomy ships natively in the free-tier section (8 live-verified models); log in with a phone code without the desktop client; connections show a points card (permanent + daily gift points).
22
+ - **Combo entry enable/disable + billing fast-fail (#91)**: disable a combo entry without removing it (greyed out, order preserved, scheduler skips instantly); 402 payment-required cooldown raised to 30 minutes.
23
+ - **Per-endpoint custom auth headers for compatible nodes (#92)**: upstreams whose /models auth differs from chat auth (e.g. Loomy) accept a header template — one-click model import works out of the box.
24
+ - **Privacy redaction pipeline (#90)**: outbound secret redaction + inbound restore, per-connection explicit switch (off by default).
21
25
  ### 🐛 Fixed
22
26
 
23
27
  - **Desktop build files packaging fix**: packaged installers now reliably include `updateScheduler.js` to avoid runtime startup crashes.
@@ -17,6 +17,10 @@
17
17
  - 接入 GPT-6.1 Terra 与 Nace Drex 决策平台;
18
18
  - 强化 Gemini Protobuf Schema 转换与 CommandCode CLI 1.88.0 会话头支持。
19
19
 
20
+ - **讯飞 Loomy 内置 + 手机验证码直登 + 积分额度卡**:免费额度区块原生收录 Loomy(8 个实测模型),手机号收码直登免客户端,连接自动出积分卡(永久积分 + 每日赠送积分)。
21
+ - **组合条目一键禁用 + 欠费快速避让(#91)**:组合编辑器条目可禁用(置灰保留排序位,调度零耗时跳过);402 欠费渠道冷却升为 30 分钟,不再反复必败探测。
22
+ - **兼容节点自定义鉴权头(#92)**:/models 发现与 chat 鉴权不一致的上游可配模板鉴权头,模型一键导入开箱即用。
23
+ - **隐私脱敏管道(#90)**:出站密钥脱敏 + 入站还原全链路,连接级显式开关默认关闭。
20
24
  ### 🐛 修复
21
25
 
22
26
  - **桌面打包白名单修复**:修复安装包遗漏后台调度模块导致的启动异常。
@@ -17,6 +17,10 @@
17
17
  - 接入 GPT-6.1 Terra 與 Nace Drex 決策平台;
18
18
  - 強化 Gemini Protobuf Schema 轉換與 CommandCode CLI 1.88.0 會話標頭支援。
19
19
 
20
+ - **訊飛 Loomy 內建 + 手機簡訊登入 + 積分額度卡**:免費額度區塊原生收錄 Loomy(8 個實測模型),手機號收碼直登免用戶端,連線自動出積分卡(永久積分 + 每日贈送積分)。
21
+ - **組合條目一鍵停用 + 欠費快速避讓(#91)**:組合編輯器條目可停用(灰階保留排序位,排程零耗時跳過);402 欠費渠道冷卻升為 30 分鐘,不再反覆必敗探測。
22
+ - **相容節點自訂鑑權標頭(#92)**:/models 發現與 chat 鑑權不一致的上游可配範本鑑權標頭,模型一鍵匯入開箱即用。
23
+ - **隱私脫敏管線(#90)**:出站密鑰脫敏 + 入站還原全鏈路,連線級顯式開關預設關閉。
20
24
  ### 🐛 修復
21
25
 
22
26
  - **桌面打包白名單修復**:修復安裝包遺漏背景排程模組導致的啟動異常。
@@ -290,6 +290,8 @@
290
290
  "Connection Details": "连接详情",
291
291
  "Connection Failed": "连接失败",
292
292
  "Connections": "连接",
293
+ "Disabled — scheduler skips this entry (click to enable)": "已禁用——调度器将跳过该条目(点击启用)",
294
+ "Enabled (click to disable without removing)": "已启用(点击禁用,无需删除)",
293
295
  "Loomy SMS Login": "Loomy 手机验证码登录",
294
296
  "Log in with your iFlytek phone number — no Loomy client needed. The session lasts about 14 days and is added as a connection automatically.": "使用讯飞手机号验证码直接登录——无需安装 Loomy 客户端。会话约 14 天有效,登录后自动添加为连接。",
295
297
  "Phone Number": "手机号",
@@ -1,4 +1,6 @@
1
1
  {
2
+ "Disabled — scheduler skips this entry (click to enable)": "已停用——排程器將跳過該條目(點擊啟用)",
3
+ "Enabled (click to disable without removing)": "已啟用(點擊停用,無需移除)",
2
4
  "Loomy SMS Login": "Loomy 手機簡訊登入",
3
5
  "Log in with your iFlytek phone number — no Loomy client needed. The session lasts about 14 days and is added as a connection automatically.": "使用訊飛手機號碼驗證碼直接登入——無需安裝 Loomy 用戶端。工作階段約 14 天有效,登入後自動新增為連線。",
4
6
  "Phone Number": "手機號碼",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techysy/10router",
3
- "version": "1.6.4-test.1",
3
+ "version": "1.6.4-test.2",
4
4
  "description": "10Router CLI - Start and manage 10Router server",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,9 +0,0 @@
1
- "use strict";exports.id=1386,exports.ids=[1386],exports.modules={21386:(a,b,c)=>{c.d(b,{runMigrationOnce:()=>G});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(20437),i=c(34050);let j="stepfun",k="stepfun-cn";var l=c(71707),m=c(43556);let n=["mimoPassToken","mimoUserId","mimoCUserId"],o=new Set(["Xiaomi MiMo Desktop","Xiaomi MiMo Desktop Session"]),p="mimo-desktop-session";function q(a){if(!(0,l.isEncrypted)(a))return{ok:!0,value:a};try{return{ok:!0,value:(0,l.decryptSecret)(a)}}catch{return{ok:!1,value:a}}}function r(a){try{return JSON.parse(a.data||"{}")}catch{return null}}function s(a,b=null){let c=a?.providerSpecificData||{},d=q("string"==typeof a?.accessToken?a.accessToken:null),e="string"==typeof c.uid||"number"==typeof c.uid?String(c.uid):null,f="string"==typeof c.mimoUserId||"number"==typeof c.mimoUserId?String(c.mimoUserId):null,g=c.mimoPassToken;return{token:d.ok?d.value:null,uid:e,mu:f,email:"string"==typeof b&&b?b:null,hasSession:null!=g&&""!==g&&q(g).ok}}let t=[{version:1,name:"initial",up(a){for(let[b,c]of Object.entries(i.CG))for(let d of(a.exec((0,i.zE)(b,c)),c.indexes||[]))a.exec(d)}},{version:2,name:"stepfun-cn-rename",up(a){let b;for(let b of(a.run("UPDATE providerConnections SET provider = ? WHERE provider = ?",[k,j]),a.run("UPDATE kv SET key = ? WHERE scope = 'disabledModels' AND key = ?",[k,j]),["modelCaps","customModels"]))a.run("UPDATE kv SET key = ? || substr(key, ?) WHERE scope = ? AND key LIKE ?",[k,j.length+1,b,`${j}|%`]);let c=a.get("SELECT data FROM settings WHERE id = 1");if(!c?.data)return;try{b=JSON.parse(c.data)}catch{return}if(!b||"object"!=typeof b)return;let d=!1;if(Array.isArray(b.providerCardOrder)){let a=b.providerCardOrder.map(a=>a===j?k:a);a.some((a,c)=>a!==b.providerCardOrder[c])&&(b.providerCardOrder=a,d=!0)}for(let a of["topologyVisibility","providerStrategies"]){let c=b[a];c&&"object"==typeof c&&Object.prototype.hasOwnProperty.call(c,j)&&(k in c||(c[k]=c[j]),delete c[j],d=!0)}d&&a.run("UPDATE settings SET data = ? WHERE id = 1",[JSON.stringify(b)])}},{version:3,name:"encrypt-credentials",up(a){let b;try{b=a.all("SELECT id, data FROM providerConnections")}catch(a){console.warn("[migration] encrypt-credentials: could not read connections:",a?.message||a);return}let c=0,d=0;for(let e of b){let b;try{b=JSON.parse(e.data||"{}")}catch{continue}if((0,l.connectionDataHasPlaintextSecrets)(b))try{a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify((0,l.encryptConnectionData)(b)),e.id]),c+=1}catch(a){1===(d+=1)&&console.warn("[migration] encrypt-credentials: could not encrypt a connection — credentials stay in plain text until they are rewritten:",a?.message||a)}}c&&console.log(`[migration] encrypt-credentials: encrypted ${c} connection row(s)`),d&&console.warn(`[migration] encrypt-credentials: ${d} row(s) left in plain text`)}},{version:4,name:"usage-apikey-digest",up(a){try{a.all("PRAGMA table_info(usageHistory)").map(a=>a.name).includes("apiKeyHash")||(a.exec("ALTER TABLE usageHistory ADD COLUMN apiKeyHash TEXT"),console.log("[migration] usage-apikey-digest: added usageHistory.apiKeyHash")),a.exec("CREATE INDEX IF NOT EXISTS idx_uh_apikey_hash ON usageHistory(apiKeyHash)")}catch(a){console.warn("[migration] usage-apikey-digest: could not ensure apiKeyHash column:",a?.message||a)}let b=0;try{for(let c of a.all("SELECT id, apiKey FROM usageHistory WHERE apiKey IS NOT NULL AND apiKey != ''"))(0,m.f0)(c.apiKey)||(a.run("UPDATE usageHistory SET apiKey = ?, apiKeyHash = ? WHERE id = ?",[(0,m.oO)(c.apiKey),(0,m.kk)(c.apiKey),c.id]),b+=1)}catch(a){console.warn("[migration] usage-apikey-digest: history rows skipped:",a?.message||a)}let c=0;try{for(let b of a.all("SELECT dateKey, data FROM usageDaily")){let d;try{d=JSON.parse(b.data||"{}")}catch{continue}let e=d?.byApiKey;if(!e||"object"!=typeof e)continue;let f={},g=!1;for(let[a,b]of Object.entries(e)){if(!b||"object"!=typeof b){f[a]=b;continue}let c="string"==typeof b.apiKey?b.apiKey:null;if(!c&&b.apiKeyHash||!c){f[a]=b;continue}let{apiKey:d,...e}=b,h=(0,m.kk)(c),i=a.split("|"),j=i.length>1?"|"+i.slice(1).join("|"):"";f[`${h||"local-no-key"}${j}`]={...e,apiKeyHash:h,apiKeyMasked:(0,m.oO)(c)},g=!0}g&&(a.run("UPDATE usageDaily SET data = ? WHERE dateKey = ?",[JSON.stringify({...d,byApiKey:f}),b.dateKey]),c+=1)}}catch(a){console.warn("[migration] usage-apikey-digest: daily aggregates skipped:",a?.message||a)}(b||c)&&console.log(`[migration] usage-apikey-digest: rewrote ${b} history row(s), ${c} day aggregate(s)`)}},{version:5,name:"strip-mimo-main-card-session",up(a){let b,c;try{b=a.all("SELECT id, email, data FROM providerConnections WHERE provider = 'xiaomi-mimo'"),c=a.all("SELECT id, email, data FROM providerConnections WHERE provider = 'mimo-desktop'")}catch(a){console.warn("[migration] strip-mimo-main-card-session: could not read connections:",a?.message||a);return}let d=c.map(a=>{let b=r(a);return b?s(b,a.email):null}).filter(Boolean),e=0,f=0,g=0,h=0;for(let c of b){let b=r(c);if(!b||"object"!=typeof b)continue;let i=b.providerSpecificData&&"object"==typeof b.providerSpecificData?b.providerSpecificData:{};if(!(n.some(a=>void 0!==i[a]&&null!==i[a]&&""!==i[a])||o.has(i.provider)||"desktop-session"===i.authMethod||"string"==typeof b.accessToken&&b.accessToken.startsWith(p)))continue;let j=q("string"==typeof b.accessToken?b.accessToken:null);if(!j.ok||i.mimoPassToken&&!q(i.mimoPassToken).ok){h+=1;continue}if(!("string"!=typeof j.value||""===j.value||j.value.startsWith(p))){let d=function(a){let b={...a};for(let a of n)delete b[a];return o.has(b.provider)&&delete b.provider,b}(i);"desktop-session"===d.authMethod&&(d.authMethod="api_key"),a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify((0,l.encryptConnectionData)({...b,providerSpecificData:d})),c.id]),e+=1;continue}let k=s(b,c.email);if(d.find(a=>(!!a.token&&!!k.token&&a.token===k.token||!!a.uid&&!!k.uid&&a.uid===k.uid||!!a.mu&&!!k.mu&&a.mu===k.mu||!!a.uid&&!!k.mu&&a.uid===k.mu||!!a.mu&&!!k.uid&&a.mu===k.uid||!!a.email&&!!k.email&&a.email===k.email||!1)&&a.hasSession)){a.run("DELETE FROM providerConnections WHERE id = ?",[c.id]),g+=1;continue}a.run("UPDATE providerConnections SET provider = 'mimo-desktop', data = ? WHERE id = ?",[JSON.stringify((0,l.encryptConnectionData)(b)),c.id]),f+=1}(e||f||g||h)&&console.log(`[migration] strip-mimo-main-card-session: stripped ${e} cloud row(s), moved ${f} session-only row(s) to mimo-desktop, removed ${g} duplicate row(s)`+(h?`, ${h} row(s) left untouched (undecryptable credentials)`:""))}},{version:6,name:"mimo-desktop-session-active",up(a){let b;try{b=a.all("SELECT id, data FROM providerConnections WHERE provider = 'mimo-desktop'")}catch(a){console.warn("[migration] mimo-desktop-session-active: could not read connections:",a?.message||a);return}for(let c of b)try{let b=JSON.parse(c.data);if("untested"!==b.testStatus)continue;b.testStatus="active",a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify(b),c.id])}catch{}}}].sort((a,b)=>a.version-b.version);var u=c(8677);let v=null;function w(){if(v)return v;try{let a=g().join(process.cwd(),"package.json");v=JSON.parse(e().readFileSync(a,"utf-8")).version||"0.0.0"}catch{v="0.0.0"}return v}let x=["requestDetails"];function y(a){(0,h.Jh)();let b=w(),c=`${a}-${b}-${function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}${b(a.getMonth()+1)}${b(a.getDate())}-${b(a.getHours())}${b(a.getMinutes())}${b(a.getSeconds())}`}()}`,d=g().join(h.KQ,c);return e().mkdirSync(d,{recursive:!0}),d}function z(){if(e().existsSync(h.KQ))for(let a of e().readdirSync(h.KQ,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>({name:a.name,full:g().join(h.KQ,a.name),mtime:e().statSync(g().join(h.KQ,a.name)).mtimeMs})).sort((a,b)=>b.mtime-a.mtime).slice(3))try{e().rmSync(a.full,{recursive:!0,force:!0})}catch{}}var A=c(50743);let B=g().join(h.HG,".migrated-from-json"),C=new WeakSet;class D extends Error{constructor(a,b){super(a),this.name="MigrationAborted",this.droppedRows=b}}function E(a,b,c,d,e){let f=[];for(let a of c)try{d(a)}catch(b){f.push({...e(a),reason:b.message})}let g=a.get(`SELECT COUNT(*) as c FROM ${b}`)?.c??0;if(g!==c.length)throw console.warn(`[DB][migrate] ${b} row-count mismatch: expected ${c.length}, got ${g}. Dropped:`,f),new D(`${b} row-count mismatch: expected ${c.length}, got ${g}`,f)}function F(a){if(!e().existsSync(a))return null;try{return JSON.parse(e().readFileSync(a,"utf-8"))}catch{return null}}async function G(a){if(C.has(a))return;C.add(a);let b=function(a){try{let b=a.get("SELECT COUNT(*) as c FROM _meta");return!b||0===b.c}catch{return!0}}(a);z(),a.exec((0,i.zE)("_meta",i.CG._meta));let c=parseInt((0,u.dy)(a,"backupSchemaVersion","0"),10)||0;if(!b&&c<i.f$)try{let b=y(`schema-${c}-to-${i.f$}`);!function(a,b,c="data.sqlite"){let d=g().join(b,c);try{e().rmSync(d,{force:!0})}catch{}let f=d.replace(/'/g,"''");a.exec(`ATTACH DATABASE '${f}' AS bak`);try{let b=new Set(x),c=a.all("SELECT name, sql FROM main.sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'").filter(a=>!b.has(a.name));a.transaction(()=>{for(let b of c){let c=b.sql.replace(/CREATE TABLE\s+/i,"CREATE TABLE bak.");a.exec(c),a.exec(`INSERT INTO bak.${b.name} SELECT * FROM main.${b.name}`)}})}finally{try{a.exec("DETACH DATABASE bak")}catch{}}}(a,b),z(),console.log(`[DB][migrate] pre-schema backup ${c} → ${i.f$}: ${b}`)}catch(a){console.warn(`[DB][migrate] pre-schema backup failed (continuing): ${a.message}`)}!function(a){a.exec((0,i.zE)("_meta",i.CG._meta));let b=parseInt((0,u.dy)(a,"schemaVersion","0"),10)||0;if(b>=(t.length?t[t.length-1].version:0))return;let c=t.filter(a=>a.version>b);for(let b of c)a.transaction(()=>{b.up(a),(0,u.np)(a,"schemaVersion",b.version)}),b.version,console.log(`[DB][migrate] applied #${b.version} ${b.name}`);c.length}(a);for(let[b,c]of Object.entries(i.CG)){a.exec((0,i.zE)(b,c));let d=new Set(a.all(`PRAGMA table_info(${b})`).map(a=>a.name));for(let[e,f]of Object.entries(c.columns))if(!d.has(e)){let c=f.replace(/PRIMARY KEY( AUTOINCREMENT)?/i,"").replace(/UNIQUE/i,"").trim();try{a.exec(`ALTER TABLE ${b} ADD COLUMN ${e} ${c}`),console.log(`[DB][sync] +column ${b}.${e}`)}catch(a){console.warn(`[DB][sync] add column ${b}.${e} failed: ${a.message}`)}}for(let b of c.indexes||[])try{a.exec(b)}catch{}}(0,u.np)(a,"backupSchemaVersion",i.f$);let d=e().existsSync(B),f=F(h.Or.main),j=F(h.Or.usage),k=F(h.Or.disabled),m=F(h.Or.details);if(b&&(f||j||k||m)&&!d){let b=Date.now(),c=y("migrate-from-json");for(let a of Object.values(h.Or))!function(a,b,c=null){if(!e().existsSync(a))return;let d=c||g().basename(a),f=g().join(b,d);e().copyFileSync(a,f)}(a,c);try{a.transaction(()=>{if(f&&"object"==typeof f){for(let[b,c]of(f.settings&&a.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,A.s)(f.settings)]),E(a,"providerConnections",f.providerConnections||[],b=>{let{id:c,provider:d,authType:e,name:f,email:g,priority:h,isActive:i,createdAt:j,updatedAt:k,...m}=b;a.run("INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[c,d,e||"oauth",f||null,g||null,h||null,+(!1!==i),(0,A.s)((0,l.encryptConnectionData)(m)),j||new Date().toISOString(),k||new Date().toISOString()])},a=>({id:a.id??null,provider:a.provider??null,name:a.name??null})),E(a,"providerNodes",f.providerNodes||[],b=>{let{id:c,type:d,name:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,d||null,e||null,(0,A.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null,type:a.type??null,name:a.name??null})),E(a,"proxyPools",f.proxyPools||[],b=>{let{id:c,isActive:d,testStatus:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,+(!1!==d),e||"unknown",(0,A.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null})),E(a,"apiKeys",f.apiKeys||[],b=>{a.run("INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)",[b.id,b.key,b.name||null,b.machineId||null,+(!1!==b.isActive),b.createdAt||new Date().toISOString()])},a=>({id:a.id??null,name:a.name??null})),E(a,"combos",f.combos||[],b=>{a.run("INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[b.id,b.name,b.kind||null,(0,A.s)(b.models||[]),b.createdAt||new Date().toISOString(),b.updatedAt||new Date().toISOString()])},a=>({id:a.id??null,name:a.name??null})),Object.entries(f.modelAliases||{})))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)",[b,(0,A.s)(c)]);for(let b of f.customModels||[]){let c=`${b.providerAlias}|${b.id}|${b.type||"llm"}`;a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[c,(0,A.s)(b)])}for(let[b,c]of Object.entries(f.mitmAlias||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)",[b,(0,A.s)(c||{})]);for(let[b,c]of Object.entries(f.pricing||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)",[b,(0,A.s)(c||{})])}if(j&&"object"==typeof j){for(let b of j.history||[]){let c=b.tokens||{};a.run("INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[b.timestamp||new Date().toISOString(),b.provider||null,b.model||null,b.connectionId||null,b.apiKey||null,b.endpoint||null,c.prompt_tokens||c.input_tokens||0,c.completion_tokens||c.output_tokens||0,b.cost||0,b.status||"ok",(0,A.s)(c),(0,A.s)({})])}for(let[b,c]of Object.entries(j.dailySummary||{}))a.run("INSERT OR REPLACE INTO usageDaily(dateKey, data) VALUES(?, ?)",[b,(0,A.s)(c)]);"number"==typeof j.totalRequestsLifetime&&(0,u.np)(a,"totalRequestsLifetime",j.totalRequestsLifetime)}if(k&&"object"==typeof k.disabled)for(let[b,c]of Object.entries(k.disabled))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('disabledModels', ?, ?)",[b,(0,A.s)(c||[])]);if(m&&Array.isArray(m.records))for(let b of m.records)a.run("INSERT OR REPLACE INTO requestDetails(id, timestamp, provider, model, connectionId, status, data) VALUES(?, ?, ?, ?, ?, ?, ?)",[b.id,b.timestamp||new Date().toISOString(),b.provider||null,b.model||null,b.connectionId||null,b.status||null,(0,A.s)(b)]);(0,u.np)(a,"appVersion",w()),(0,u.np)(a,"backupSchemaVersion",i.f$),(0,u.np)(a,"migratedAt",new Date().toISOString())})}catch(a){if(a instanceof D)return void console.error(`[DB][migrate] aborted: ${a.message} | legacy JSON kept | backup: ${c}`);throw a}try{e().writeFileSync(B,new Date().toISOString())}catch{}z(),console.log(`[DB][migrate] JSON → SQLite in ${Date.now()-b}ms | legacy JSON kept at DATA_DIR | backup: ${c}`);return}let n=w();(0,u.dy)(a,"appVersion",null)!==n&&(0,u.np)(a,"appVersion",n)}},34050:(a,b,c)=>{c.d(b,{CG:()=>f,f$:()=>d,oG:()=>e,zE:()=>g});let d=3,e=`
2
- PRAGMA journal_mode = WAL;
3
- PRAGMA synchronous = NORMAL;
4
- PRAGMA temp_store = MEMORY;
5
- PRAGMA mmap_size = 30000000;
6
- PRAGMA cache_size = -64000;
7
- PRAGMA foreign_keys = ON;
8
- PRAGMA busy_timeout = 5000;
9
- `,f={_meta:{columns:{key:"TEXT PRIMARY KEY",value:"TEXT NOT NULL"}},settings:{columns:{id:"INTEGER PRIMARY KEY CHECK (id = 1)",data:"TEXT NOT NULL"}},providerConnections:{columns:{id:"TEXT PRIMARY KEY",provider:"TEXT NOT NULL",authType:"TEXT NOT NULL",name:"TEXT",email:"TEXT",priority:"INTEGER",isActive:"INTEGER DEFAULT 1",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)","CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)","CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"]},providerNodes:{columns:{id:"TEXT PRIMARY KEY",type:"TEXT",name:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"]},proxyPools:{columns:{id:"TEXT PRIMARY KEY",isActive:"INTEGER DEFAULT 1",testStatus:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)","CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"]},apiKeys:{columns:{id:"TEXT PRIMARY KEY",key:"TEXT UNIQUE NOT NULL",name:"TEXT",machineId:"TEXT",isActive:"INTEGER DEFAULT 1",dailyTokenLimit:"INTEGER",allowedModels:"TEXT",allowedCombos:"TEXT",createdAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"]},combos:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT UNIQUE NOT NULL",kind:"TEXT",models:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"]},kv:{columns:{scope:"TEXT NOT NULL",key:"TEXT NOT NULL",value:"TEXT NOT NULL"},primaryKey:"PRIMARY KEY (scope, key)",indexes:["CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"]},usageHistory:{columns:{id:"INTEGER PRIMARY KEY AUTOINCREMENT",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",apiKey:"TEXT",apiKeyHash:"TEXT",endpoint:"TEXT",promptTokens:"INTEGER DEFAULT 0",completionTokens:"INTEGER DEFAULT 0",cost:"REAL DEFAULT 0",status:"TEXT",tokens:"TEXT",meta:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)","CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)","CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)","CREATE INDEX IF NOT EXISTS idx_uh_apikey_hash ON usageHistory(apiKeyHash)"]},usageDaily:{columns:{dateKey:"TEXT PRIMARY KEY",data:"TEXT NOT NULL"}},requestDetails:{columns:{id:"TEXT PRIMARY KEY",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",status:"TEXT",data:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)","CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)","CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)"]}};function g(a,b){let c=Object.entries(b.columns).map(([a,b])=>`${a} ${b}`);return b.primaryKey&&c.push(b.primaryKey),`CREATE TABLE IF NOT EXISTS ${a} (${c.join(", ")})`}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=3389,exports.ids=[1998,3389],exports.modules={6551:(a,b,c)=>{c.d(b,{RO:()=>m,Tl:()=>k,Yt:()=>l});var d=c(39609),e=c(24295);let f={usageUrl:(0,e.U)("codex").url,resetCreditsUrl:(0,e.U)("codex").resetCreditsUrl,resetCreditsConsumeUrl:(0,e.U)("codex").resetCreditsConsumeUrl};function g(a){if(!a)return null;let b=a instanceof Date?a:new Date("number"==typeof a&&a<1e12?1e3*a:a);return Number.isFinite(b.getTime())?b.toISOString():null}function h(a){return!a||"object"!=typeof a||Array.isArray(a)?null:a.rate_limit&&"object"==typeof a.rate_limit?a.rate_limit:a}function i(a){let b=Math.max(0,Math.min(100,(0,e.IQ)(a?.used_percent??a?.percent_used,0)));return{used:b,total:100,remaining:Math.max(0,100-b),resetAt:(0,e.eZ)(a?.reset_at??a?.resets_at??a?.resetAt??null),unlimited:!1}}function j(a,b,c){let d=h(c);if(!d)return!1;let e=d.primary_window||d.primary||c.primary_window||c.primary,f=d.secondary_window||d.secondary||c.secondary_window||c.secondary,g=!1;return e&&(a[b?`${b}_session`:"session"]=i(e),g=!0),f&&(a[b?`${b}_weekly`:"weekly"]=i(f),g=!0),g}async function k(a,b=null){try{let c=await (0,d.proxyAwareFetch)(f.usageUrl,{method:"GET",headers:{Authorization:`Bearer ${a}`,Accept:"application/json"}},b);if(!c.ok)return{message:`Codex connected. Usage API temporarily unavailable (${c.status}).`};let g=await c.json(),i=g.rate_limit||g.rate_limits||g.rate_limits_by_limit_id?.codex||{},k=function(a){if(a.code_review_rate_limit||a.review_rate_limit)return a.code_review_rate_limit||a.review_rate_limit;let b=a.rate_limits_by_limit_id;return b&&"object"==typeof b&&!Array.isArray(b)?b.code_review||b.codex_review||b.review||null:(Array.isArray(a.additional_rate_limits)?a.additional_rate_limits:[]).find(a=>{let b=String(a?.limit_name||a?.metered_feature||a?.id||"").toLowerCase();return"code_review"===b||"codex_review"===b||"review"===b||b.includes("review")})||null}(g),l=Math.max(0,(0,e.IQ)(g.rate_limit_reset_credits?.available_count,0)),m={};return j(m,"",i),j(m,"review",k),{plan:g.plan_type||g.summary?.plan||"unknown",limitReached:h(i)?.limit_reached||!1,reviewLimitReached:h(k)?.limit_reached||!1,resetCredits:{availableCount:l},quotas:m}}catch(a){throw Error(`Failed to fetch Codex usage: ${a.message}`)}}async function l(a,b=null,c=null){var h,i;if(!a)throw Error("No Codex access token available. Please re-authorize the connection.");let j=c?.workspaceId||c?.accountId||c?.chatgptAccountId||null,k={Authorization:`Bearer ${a}`,Accept:"application/json","OpenAI-Beta":"codex-1",originator:"codex_cli_rs"};j&&(k["ChatGPT-Account-ID"]=j);let m=await (0,d.proxyAwareFetch)(f.resetCreditsUrl,{method:"GET",headers:k},b),n=null;try{n=await m.json()}catch{n=null}if(!m.ok)throw Error((h=n?.message||n?.error||n?.detail,i=`Codex reset credits API unavailable (${m.status}).`,h?"string"==typeof h?h:"string"==typeof h.message?h.message:JSON.stringify(h):i));let o=Array.isArray(n?.credits)?n.credits:[];return{availableCount:Math.max(0,(0,e.IQ)(n?.available_count??n?.availableCount,0)),credits:o.map(a=>({status:String(a?.status||"unknown"),grantedAt:g(a?.granted_at??a?.grantedAt),expiresAt:g(a?.expires_at??a?.expiresAt)}))}}async function m(a,b,c=null){let g;if(!a)throw Error("No Codex access token available. Please re-authorize the connection.");if(!b||"string"!=typeof b)throw Error("A redeem request id is required to consume a Codex reset credit.");let h=null;try{g=await (0,d.proxyAwareFetch)(f.resetCreditsConsumeUrl,{method:"POST",headers:{Authorization:`Bearer ${a}`,Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({redeem_request_id:b})},c);let e=await g.text();h=e?JSON.parse(e):null}catch(a){throw Error(`Failed to consume Codex reset credit: ${a.message}`)}let i=h?.code||null,j=(0,e.IQ)(h?.windows_reset,0);return{ok:g.ok&&("reset"===i||j>0),noCredit:g.ok&&"no_credit"===i,status:g.status,code:i,windowsReset:j,message:h?.message||null,raw:h}}},12132:(a,b,c)=>{c.d(b,{$6:()=>G,Fp:()=>I,ND:()=>p,Nv:()=>F,XX:()=>x,getMimoAccountCookie:()=>H,readDesktopPassToken:()=>A});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c.n(j),l=c(39609);let m={cn:"https://mimo-server-cn.xiaomimimo.com",sgp:"https://mimo-server-sgp.xiaomimimo.com",ams:"https://mimo-server-ams.xiaomimimo.com",ru:"https://mimo-server-ru.xiaomimimo.com",in:"https://mimo-server-in.xiaomimimo.com"},n={cn:"mimopc",sgp:"mimosgp",ams:"mimoams",ru:"mimoru",in:"mimoin"};function o(a=null){return String(a?.region||"").toLowerCase()}function p(a=null){return m[o(a)]||m.cn}m.cn;let q="account.xiaomi.com",r="miNative PC/Normal Windows_NT/10.0.19045 SDKV/1.0.0 DEVT/PC DEVS/Windows APP/miaccount_desktop APPV/0.1.0",s="MiClaw/1.0",t=new Set(["EBUSY","EPERM","EACCES"]),u=new Map,v=new Map,w="Xiaomi MiMo";function x(){let a=g().homedir(),b=i().join(a,".local","share","mimocode"),c=process.env.XDG_DATA_HOME,d=c?i().join(c,"mimocode"):b;return(d===b?[d]:[d,b]).map(a=>i().join(a,"auth.json"))}async function y(){let a,b=i().join((a=g().homedir(),"win32"===process.platform?i().join(process.env.APPDATA||i().join(a,"AppData","Roaming"),w):"darwin"===process.platform?i().join(a,"Library","Application Support",w):i().join(process.env.XDG_CONFIG_HOME||i().join(a,".config"),w)),"Partitions","xiaomi-account","Network","Cookies");if(!e().existsSync(b))return null;let d=i().join(g().tmpdir(),`10router-mimo-cookies-${process.pid}-${k().randomBytes(4).toString("hex")}.db`);try{e().copyFileSync(b,d)}catch(a){if(t.has(a?.code)){let a=Error("Xiaomi MiMo Desktop is holding its cookie store (quit the app and retry)");throw a.code="DESKTOP_LOCKED",a}return null}try{e().chmodSync(d,384)}catch{}try{let{DatabaseSync:a}=await Promise.resolve().then(c.t.bind(c,80099,23)),b=null;try{let c=(b=new a(d,{readOnly:!0})).prepare("SELECT name, value FROM cookies WHERE host_key = ?").all("."+q),e=Object.fromEntries(c.map(a=>[a.name,a.value]));return e.passToken?e:null}finally{try{b?.close()}catch{}}}catch{return null}finally{await z(d)}}async function z(a){for(let b=0;b<3;b++)try{e().unlinkSync(a);return}catch(a){if("ENOENT"===a.code)return;b<2&&await new Promise(a=>setTimeout(a,20))}}async function A(){try{let a=await y();if(!a?.passToken)return null;return{passToken:a.passToken,userId:a.userId||null,cUserId:a.cUserId||null}}catch(a){if(a?.code==="DESKTOP_LOCKED")throw a;return null}}function B(a,b){for(let c of b.headers.getSetCookie?.()||[]){let b=/^([^=]+)=([^;]*)/.exec(c.trim());b&&b[2]&&(a[b[1]]=b[2])}}function C(a){return Object.entries(a).filter(([,a])=>a).map(([a,b])=>`${a}=${b}`).join("; ")}async function D(a,b,c=null){var d;let e,f={...a},g=p(c),h=function(a=null){return n[o(a)]||n.cn}(c),i=(await (0,l.proxyAwareFetch)(`${g}/api/user/xiaomi/me`,{redirect:"manual",headers:{"User-Agent":r,Cookie:C(f)},signal:AbortSignal.timeout(1e4)},b)).headers.get("location");if(!i)return null;let j=new URL(i).searchParams.get("callback");if(!j)return null;let m=await (0,l.proxyAwareFetch)(`https://${q}/pass/serviceLogin?sid=passportapi&_json=true`,{headers:{Cookie:C(f),"User-Agent":s,Accept:"application/json"},signal:AbortSignal.timeout(1e4)},b),t=JSON.parse((await m.text()).replace(/^&&&START&&&/,"")),u=t.nonce||(t.location?new URL(t.location).searchParams.get("nonce"):null);if(!u||!t.location)return null;let v=await (0,l.proxyAwareFetch)(`${t.location}&clientSign=${(e=`nonce=${u}`+((d=t.ssecurity)&&d.trim()?`&${d}`:""),encodeURIComponent(k().createHash("sha1").update(e).digest("base64")))}`,{redirect:"manual",headers:{Cookie:C(f),"User-Agent":s},signal:AbortSignal.timeout(1e4)},b);B(f,v);let w=await (0,l.proxyAwareFetch)(`https://${q}/pass/serviceLogin?sid=${encodeURIComponent(h)}&callback=${encodeURIComponent(j)}&_json=true`,{headers:{Cookie:C(f),"User-Agent":s,Accept:"application/json"},signal:AbortSignal.timeout(1e4)},b),x=JSON.parse((await w.text()).replace(/^&&&START&&&/,""));if(B(f,w),!x?.location||!/\/api\/sts/.test(x.location))return null;let y=await (0,l.proxyAwareFetch)(x.location,{redirect:"manual",headers:{"User-Agent":r,Cookie:C(f)},signal:AbortSignal.timeout(1e4)},b);if(B(f,y),!f.serviceToken)return null;let z={};for(let a of["serviceToken","mimopc_ph","mimopc_slh","userId"])f[a]&&(z[a]=f[a]);return C(z)}async function E(a,b){let c=a?.mimoPassToken?{passToken:a.mimoPassToken,userId:a.mimoUserId,cUserId:a.mimoCUserId}:null;if(!c)try{c=await y()}catch(a){if(a?.code==="DESKTOP_LOCKED")return{cookie:null,reason:"desktop-locked"};throw a}if(!c)return{cookie:null,reason:"no-pass-token"};let d=k().createHash("sha256").update(`${c.passToken}|${o(a)}`).digest("hex"),e=u.get(d);if(e&&Date.now()-e.at<18e5)return{cookie:e.cookie};let f=v.get(d);if(f){let a=await f;return a?{cookie:a}:{cookie:null,reason:"sso-failed"}}let g=(async()=>{try{return await D(c,b,a)}catch{return null}finally{v.delete(d)}})();v.set(d,g);let h=await g;return h?(u.set(d,{cookie:h,at:Date.now()}),{cookie:h}):{cookie:null,reason:"sso-failed"}}function F(){u.clear()}let G=r;async function H(a=null,b=null){try{let{cookie:c}=await E(a,b);return c}catch{return null}}async function I(a=null,b=null){let{cookie:c,reason:d}=await E(a,b);if(!c)return{error:"no-pass-token"===d||"desktop-locked"===d?"no-session":"session-failed"};try{let d=await (0,l.proxyAwareFetch)(`${p(a)}/api/user/usage`,{headers:{"User-Agent":r,Cookie:c,Accept:"application/json"},signal:AbortSignal.timeout(1e4)},b);if(!d.ok)return{error:`http-${d.status}`};let e=await d.json().catch(()=>null);if(!e||0!==e.code||!e.data)return{error:"bad-response"};return{percent:e.data.percent,resetDate:e.data.resetDate,resetAt:e.data.resetAt}}catch(a){return{error:a.message}}}},24295:(a,b,c)=>{c.d(b,{IQ:()=>h,U:()=>f,eZ:()=>g,gD:()=>i,u9:()=>j});var d=c(26070),e=c(39609);let f=a=>d.xq[a]?.usage||{};function g(a){if(!a)return null;try{if(a instanceof Date)return a.toISOString();if("number"==typeof a)return new Date(a<1e12?1e3*a:a).toISOString();if("string"==typeof a){if(/^\d+$/.test(a)){let b=Number(a);return new Date(b<1e12?1e3*b:b).toISOString()}return new Date(a).toISOString()}return null}catch(b){return console.warn(`Failed to parse reset time: ${a}`,b),null}}function h(a,b=0){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&a.trim()){let b=Number(a);if(Number.isFinite(b))return b}return b}function i(a){return"string"==typeof a?a.trim()||null:a&&"object"==typeof a&&"string"==typeof a.id&&a.id.trim()||null}async function j(a,b,c=1e4,d=null){let f=new AbortController,g=setTimeout(()=>f.abort(),c);try{return await (0,e.proxyAwareFetch)(a,{...b,signal:f.signal},d)}finally{clearTimeout(g)}}},39326:(a,b,c)=>{c.d(b,{B:()=>j,p:()=>i});var d=c(71998),e=c(72082);function f(a){return null==a?"":String(a).trim()}function g(a){let b=f(a);if(!b)return"";if((0,e.isEncrypted)(b))try{return f((0,e.decryptSecret)(b))}catch(a){console.warn(`[ConnectionProxy] Could not decrypt proxy URL: ${a?.message||a}`)}return b}let h=new Map;function i(a,b,c){if(!a||0===a.length)return null;if(1===a.length)return a[0];if("round-robin"===b){let b=h.get(c)||{index:-1};return b.index=(b.index+1)%a.length,h.set(c,b),a[b.index]}return"random"===b?a[Math.floor(Math.random()*a.length)]:a[0]}async function j(a={}){try{let b=f(a?.proxyPoolId),c="__none__"===b?"":b,e=function(a={}){let b=a?.connectionProxyEnabled===!0,c=g(a?.connectionProxyUrl),d=f(a?.connectionNoProxy);return{connectionProxyEnabled:b,connectionProxyUrl:c,connectionNoProxy:d,strictProxy:a?.strictProxy===!0}}(a),h=!1;if(c){let a=await (0,d.hr)(c);h=a?.strictProxy===!0;let b=g(a?.proxyUrl),e=f(a?.noProxy);if(a&&!0===a.isActive&&b){if("vercel"===a.type||"cloudflare"===a.type||"deno"===a.type)return{source:a.type,proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:e,strictProxy:!0===a.strictProxy,vercelRelayUrl:b};return{source:"pool",proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!0,connectionProxyUrl:b,connectionNoProxy:e,strictProxy:!0===a.strictProxy}}}if(e.connectionProxyEnabled&&e.connectionProxyUrl)return{source:"legacy",proxyPoolId:c||null,proxyPool:null,...e,strictProxy:h||e.strictProxy};return{source:"none",proxyPoolId:c||null,proxyPool:null,...e,strictProxy:h||e.strictProxy}}catch(a){return console.error("[resolveConnectionProxyConfig] Failed to resolve proxy config:",a),{source:"error",proxyPoolId:null,proxyPool:null,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:"",strictProxy:!1}}}},44725:(a,b,c)=>{c.d(b,{K$:()=>m,zP:()=>l});var d=c(77598),e=c(39609);let f="I*7Cf%WZ#S&%1RlZJ&C2",g={"minimax-code":{agent:"https://agent.minimaxi.com",platform:"https://www.minimaxi.com",lang:"zh"},"minimax-code-global":{agent:"https://agent.minimax.io",platform:"https://platform.minimax.io",lang:"en"}},h=a=>(0,d.createHash)("md5").update(a).digest("hex"),i=a=>a&&"object"==typeof a&&!Array.isArray(a)?a:void 0,j=a=>"number"==typeof a&&Number.isFinite(a)?a:void 0,k=(a,b)=>"string"==typeof a?.[b]&&a[b].trim()?a[b].trim():void 0;function l(a,b,{access:c,userID:d,body:e,now:g=Date.now(),tzOffsetSec:i=-60*new Date().getTimezoneOffset()}={}){let j=new URL(b,a.agent);j.search=new URLSearchParams({device_platform:"mcode",biz_id:"3",app_id:"3001",version_code:"22201",unix:String(g),timezone_offset:String(i),sys_language:a.lang,lang:a.lang,device_id:"0",os_name:process.platform,browser_name:"mcode",user_id:String(d??"").trim()||"0",client:"mcode"}).toString();let k=j.pathname+j.search,m=Math.floor(g/1e3),n=void 0===e?void 0:JSON.stringify(e),o={Accept:"application/json","Content-Type":"application/json","User-Agent":"MiniMaxCode",Authorization:`Bearer ${c}`,yy:void 0===n?h(`${encodeURIComponent(k)}_{}${h(String(g))}ooui`):h(`${encodeURIComponent(k)}_${n}${h(String(g))}ooui`),"x-timestamp":String(m),"x-signature":void 0===n?h(`${m}${f}`):h(`${m}${f}${n}`)};return{url:j.toString(),init:{method:void 0===n?"GET":"POST",headers:o,...void 0===n?{}:{body:n}}}}async function m(a,b,c=null,d=null){let f=g[b];if(!f||!a)return{message:`Usage API not implemented for ${b}`};let h={},n=null;try{let b=d?.opGroupId,g=await (0,e.proxyAwareFetch)(`${f.platform}/v1/api/openplatform/coding_plan/remains`,{headers:{Accept:"application/json",Authorization:`Bearer ${a}`,...b?{"X-Group-Id":b}:{}},signal:AbortSignal.timeout(15e3)},c);if(401===g.status||403===g.status)return{message:"MiniMax Code session expired or unauthorized. Please re-authenticate."};if(g.ok){let a=await g.json().catch(()=>null);for(let b of function(a){let b=i(a?.base_resp);if(b&&"number"==typeof b.status_code&&0!==b.status_code)throw Error(k(b,"status_msg")??`MiniMax said ${b.status_code}`);if(!b&&!Array.isArray(a?.model_remains))throw Error("no plan in the reply");let c=a=>a<1e12?1e3*a:a,d=a=>0===j(a),e=[];for(let b of Array.isArray(a.model_remains)?a.model_remains:[]){let a=String(b?.model_name??"").trim();if(!a||3===j(b.current_interval_status)&&3===j(b.current_weekly_status)&&d(b.current_interval_total_count)&&d(b.current_weekly_total_count))continue;let f="general"===a.toLowerCase();for(let d of[{left:j(b.current_interval_remaining_percent),status:j(b.current_interval_status)??0,start:j(b.start_time)??0,end:j(b.end_time)??0,week:!1},{left:j(b.current_weekly_remaining_percent),status:j(b.current_weekly_status)??0,start:j(b.weekly_start_time)??0,end:j(b.weekly_end_time)??0,week:!0}]){if(3===d.status||void 0===d.left&&2!==d.status)continue;let b=2===d.status?0:Math.max(0,Math.min(100,d.left)),g=0;d.start>0&&d.end>d.start?g=c(d.end)-c(d.start):d.week&&(g=6048e5);let h=d.week?"7 days":g>864e5&&g%864e5==0?`${g/864e5} days`:g>=36e5&&g%36e5==0?`${g/36e5} hours`:g>0?`${Math.floor(g/6e4)} minutes`:"Allowance",i=f?h:`${a[0].toUpperCase()+a.slice(1)} \xb7 ${h}`;e.push({name:i,used:100-b,total:100,remaining:b,remainingPercentage:b,resetAt:d.end>0?new Date(c(d.end)).toISOString():null,recurring:!0})}}return e}(a))h[b.name]=b}}catch(a){n=a}try{let b=d?.realUserID,{url:g,init:j}=l(f,"/matrix/api/v1/commerce/get_membership_info",{access:a,userID:b,body:{}}),m=await (0,e.proxyAwareFetch)(g,j,c);if(m.ok){let a=await m.json().catch(()=>null),b=i(a?.data),c=i(a?.op_credit_summary)??i(b?.op_credit_summary),d=k(c,"total_remaining_amount")??k(a,"opcredit_balance")??k(b,"opcredit_balance");if(void 0!==d){let a=Number(d);h.Credits={name:"Credits",used:0,total:Number.isFinite(a)?a:0,remaining:Number.isFinite(a)?a:0,isCreditBalance:!0,currency:"credits"}}}}catch{}return 0===Object.keys(h).length?n?{message:`MiniMax Code usage fetch failed: ${n.message}`}:{message:"No active MiniMax Code subscription found."}:{quotas:h}}},67978:(a,b,c)=>{c.d(b,{Ut:()=>k.Ut,RO:()=>l.RO,Yt:()=>l.Yt,my:()=>aB});var d=c(39609),e=c(26070),f=c(24295);let g={apiVersion:e.sr.github?.apiVersion,userAgent:e.sr.github?.userAgent};async function h(a,b,c=null){try{if(!a)throw Error("No GitHub access token available. Please re-authorize the connection.");let b=await (0,d.proxyAwareFetch)((0,f.U)("github").url,{headers:{Authorization:`token ${a}`,Accept:"application/json","X-GitHub-Api-Version":g.apiVersion,"User-Agent":g.userAgent,"Editor-Version":"vscode/1.100.0","Editor-Plugin-Version":"copilot-chat/0.26.7"}},c);if(!b.ok){let a=await b.text();throw Error(`GitHub API error: ${a}`)}let e=await b.json();if(e.quota_snapshots){let a=e.quota_snapshots,b=(0,f.eZ)(e.quota_reset_date);return{plan:e.copilot_plan,resetDate:e.quota_reset_date,quotas:{chat:{...i(a.chat),resetAt:b},completions:{...i(a.completions),resetAt:b},premium_interactions:{...i(a.premium_interactions),resetAt:b}}}}if(e.monthly_quotas||e.limited_user_quotas){let a=e.monthly_quotas||{},b=e.limited_user_quotas||{},c=(0,f.eZ)(e.limited_user_reset_date);return{plan:e.copilot_plan||e.access_type_sku,resetDate:e.limited_user_reset_date,quotas:{chat:{used:b.chat||0,total:a.chat||0,unlimited:!1,resetAt:c},completions:{used:b.completions||0,total:a.completions||0,unlimited:!1,resetAt:c}}}}return{message:"GitHub Copilot connected. Unable to parse quota data."}}catch(a){throw Error(`Failed to fetch GitHub usage: ${a.message}`)}}function i(a){return a?{used:a.entitlement-a.remaining,total:a.entitlement,remaining:a.remaining,unlimited:a.unlimited||!1}:{used:0,total:0,unlimited:!0}}var j=c(87283),k=c(69788),l=c(6551),m=c(6382);async function n(a,b,c=null){let e=b?.authMethod||"builder-id",g="api_key"===e,h=g?{tokentype:"API_KEY"}:{},i="external_idp"===e?{TokenType:"EXTERNAL_IDP"}:{},j=g?b?.profileArn||"":b?.profileArn||(0,m.We)(e),k=new URLSearchParams({isEmailRequired:"true",origin:"AI_EDITOR",resourceType:"AGENTIC_REQUEST"}),l=!1,o=[];for(let b of[{name:"codewhisperer-get",run:async()=>(0,d.proxyAwareFetch)(`${(0,f.U)("kiro").cwHost}${(0,f.U)("kiro").limitsPath}?${k.toString()}`,{method:"GET",headers:{Authorization:`Bearer ${a}`,Accept:"application/json","x-amz-user-agent":"aws-sdk-js/1.0.0 KiroIDE","user-agent":"aws-sdk-js/1.0.0 KiroIDE",...h,...i}},c)},{name:"codewhisperer-post",run:async()=>(0,d.proxyAwareFetch)((0,f.U)("kiro").cwHost,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/x-amz-json-1.0","x-amz-target":"AmazonCodeWhispererService.GetUsageLimits",Accept:"application/json",...h,...i},body:JSON.stringify({origin:"AI_EDITOR",...j?{profileArn:j}:{},resourceType:"AGENTIC_REQUEST"})},c)},{name:"q-get",run:async()=>{let b=new URLSearchParams({origin:"AI_EDITOR",...j?{profileArn:j}:{},resourceType:"AGENTIC_REQUEST"});return(0,d.proxyAwareFetch)(`${(0,f.U)("kiro").qHost}${(0,f.U)("kiro").limitsPath}?${b}`,{method:"GET",headers:{Authorization:`Bearer ${a}`,Accept:"application/json",...h,...i}},c)}}])try{let a=await b.run();if(!a.ok){let c=await a.text().catch(()=>"");(401===a.status||403===a.status)&&(l=!0),o.push(`${b.name}:${a.status}${c?`:${c}`:""}`);continue}let c=await a.json();return function(a){let b=a.usageBreakdownList||[],c={},d=(0,f.eZ)(a.nextDateReset||a.resetDate);return b.forEach(a=>{let b=a.resourceType?.toLowerCase()||"unknown",e=a.currentUsageWithPrecision||0,g=a.usageLimitWithPrecision||0;if(c[b]={used:e,total:g,remaining:g-e,resetAt:d,unlimited:!1},a.freeTrialInfo){let e=a.freeTrialInfo.currentUsageWithPrecision||0,g=a.freeTrialInfo.usageLimitWithPrecision||0;c[`${b}_freetrial`]={used:e,total:g,remaining:g-e,resetAt:(0,f.eZ)(a.freeTrialInfo.freeTrialExpiry||d),unlimited:!1}}}),{plan:a.subscriptionInfo?.subscriptionTitle||"Kiro",quotas:c}}(c)}catch(a){o.push(`${b.name}:${a.message}`)}return l&&"idc"===e?{message:"Kiro quota API is unavailable for the current AWS IAM Identity Center session. Chat may still work. If this persists after renewing your session, reconnect Kiro.",quotas:{}}:l&&("google"===e||"github"===e)?{message:"Kiro quota API authentication expired. Chat may still work.",quotas:{}}:l?{message:"Kiro quota API rejected the current token. Chat may still work.",quotas:{}}:{message:o.length>0?`Unable to fetch Kiro usage right now. (${o[o.length-1]})`:"Unable to fetch Kiro usage right now.",quotas:{}}}let o={minimax:(0,f.U)("minimax").urls,"minimax-cn":(0,f.U)("minimax-cn").urls};function p(a,b,c){return a&&"object"==typeof a?a[b]??a[c]??null:null}function q(a,b,c){if(!a||"object"!=typeof a)return null;let d=a[b]??a[c];if(null==d)return null;let e=Number(d);return Number.isFinite(e)?Math.max(0,Math.min(100,e)):null}function r(a){return Math.max(0,Number(p(a,"current_interval_total_count","currentIntervalTotalCount"))||0)}function s(a){return Math.max(0,Number(p(a,"current_weekly_total_count","currentWeeklyTotalCount"))||0)}function t(a){return!!(r(a)>0||s(a)>0)||null!==q(a,"current_interval_remaining_percent","currentIntervalRemainingPercent")||null!==q(a,"current_weekly_remaining_percent","currentWeeklyRemainingPercent")}function u(a,b,c,d,e,g,h,i,j,k){let l=d(c),m=q(c,h,i);if(l<=0&&null===m)return;let n=Math.max(0,Number(p(c,e,g))||0),o=l,r=n;l<=0&&(o=100,r=k?Math.round(m/100*o):Math.round(o*(1-m/100))),a[b]=function(a,b,c,d,e=null){var f,g,h;let i=Math.max(0,a),j=d?Math.max(i-b,0):Math.min(Math.max(0,b),i),k=Math.max(i-j,0),l=(f=e,g=k,h=i,null!=f&&Number.isFinite(f)?Math.max(0,Math.min(100,f)):h>0?Math.max(0,Math.min(100,g/h*100)):0);return{used:j,total:i,remaining:k,remainingPercentage:l,resetAt:c,unlimited:!1}}(o,r,function(a,b,c,d,e,g){let h=Number(p(a,c,d))||0;return h>0?new Date(b+h).toISOString():(0,f.eZ)(p(a,e,g))}(c,...j),k,m)}async function v(a,b,c=null){if(!a)return{message:"MiniMax API key not available."};let e=o[b]||[],f="";for(let b=0;b<e.length;b+=1){let g=e[b],h=b<e.length-1;try{let b=await (0,d.proxyAwareFetch)(g,{method:"GET",headers:{Authorization:`Bearer ${a}`,Accept:"application/json","Content-Type":"application/json"}},c),e=await b.text(),i={};if(e)try{i=JSON.parse(e)}catch{i={}}let j=(i?.base_resp??i?.baseResp)||{},k=Number(j.status_code??j.statusCode)||0,l=String(j.status_msg??j.statusMsg??"").trim(),m=`${l} ${e}`.trim(),n=/token plan|coding plan|invalid api key|invalid key|unauthorized|inactive/i;if(401===b.status||403===b.status||1004===k||n.test(m))return{message:"MiniMax API key invalid or inactive. Use an active Token/Coding Plan key."};if(!b.ok){if(f=`MiniMax usage endpoint error (${b.status})`,(404===b.status||405===b.status||b.status>=500)&&h)continue;return{message:`MiniMax connected. ${f}`}}if(0!==k)return{message:`MiniMax connected. ${l||"Upstream quota API error"}`};let o=i?.model_remains??i?.modelRemains,q=(Array.isArray(o)?o:[]).filter(t);if(0===q.length)return{message:"MiniMax connected. No quota data was returned."};let v=Date.now(),w=g.includes("/coding_plan/remains"),x={};for(let a of q){let b=function(a){let b=String(p(a,"model_name","modelName")||"").trim();return b?"MiniMax-M*"===b||"general"===b?"M-series":b.replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,a=>a.toUpperCase()).replace(/\bTo\b/g,"to").replace(/\bTts\b/g,"TTS").replace(/\bHd\b/g,"HD"):"MiniMax"}(a);u(x,`${b} (5h)`,a,r,"current_interval_usage_count","currentIntervalUsageCount","current_interval_remaining_percent","currentIntervalRemainingPercent",[v,"remains_time","remainsTime","end_time","endTime"],w),u(x,`${b} (7d)`,a,s,"current_weekly_usage_count","currentWeeklyUsageCount","current_weekly_remaining_percent","currentWeeklyRemainingPercent",[v,"weekly_remains_time","weeklyRemainsTime","weekly_end_time","weeklyEndTime"],w)}if(0===Object.keys(x).length)return{message:"MiniMax connected. Unable to extract quota usage."};return{quotas:x}}catch(a){if(f=a.message,!h)break}}return{message:f?`MiniMax connected. Unable to fetch usage: ${f}`:"MiniMax connected. Unable to fetch usage."}}function w(a,b){let c=Number(a??b);return Number.isFinite(c)?c:0}async function x(a,b,c,g,h=null){let i=b||c;if(!i)return{message:`CodeBuddy (${a}) credential not available.`};try{let b=await (0,d.proxyAwareFetch)((0,f.U)(a).url,{method:"POST",headers:{...e.xq[a]?.headers||{},Authorization:`Bearer ${i}`,"Content-Type":"application/json",Accept:"application/json"},body:"{}"},h);if(401===b.status||403===b.status)return{message:"CodeBuddy CN credential invalid or expired."};if(!b.ok)return{message:`CodeBuddy CN quota API error (${b.status}).`};let c=await b.json();if(c?.code!==0)return{message:`CodeBuddy CN quota error: ${c?.msg||"unknown"}`};let g=c?.data?.Response?.Data||{},j=Array.isArray(g.Accounts)?g.Accounts:[];if(0===j.length)return{message:"CodeBuddy CN connected. No credit package found."};let k=a=>{let b=(0,f.eZ)(a.CycleEndTime);return b?new Date(b).getTime():1/0},l=a=>{let b=k(a),c=Number(a.DeductionEndTime);return Number.isFinite(b)&&Number.isFinite(c)&&c-b>1728e5},m=(a,b)=>k(a)-k(b),n=j.filter(l).sort(m),o=j.filter(a=>!l(a)).sort(m),p={},q=0,r=0;n.forEach(a=>{q+=w(a.CycleCapacityUsedPrecise,a.CycleCapacityUsed),r+=w(a.CycleCapacitySizePrecise,a.CycleCapacitySize)}),o.forEach(a=>{q+=w(a.CapacityUsedPrecise,a.CapacityUsed),r+=w(a.CapacitySizePrecise,a.CapacitySize)}),p["Total Points"]={used:Math.round(100*q)/100,total:Math.round(100*r)/100,resetAt:null,unlimited:!1,recurring:!1};let s={};n.forEach(a=>{let b=function(a){let b=(0,f.eZ)(a.CycleStartTime),c=(0,f.eZ)(a.CycleEndTime);if(b&&c){let a=(new Date(c).getTime()-new Date(b).getTime())/864e5;if(a<=1.5)return"Daily";if(a<=10)return"Weekly"}return"Monthly"}(a);s[b]=(s[b]||0)+1,p[s[b]>1?`${b} ${s[b]}`:b]={used:w(a.CycleCapacityUsedPrecise,a.CycleCapacityUsed),total:w(a.CycleCapacitySizePrecise,a.CycleCapacitySize),resetAt:(0,f.eZ)(a.CycleEndTime),unlimited:!1,recurring:!0,giftPack:!0}}),o.forEach((a,b)=>{p[`Bonus Pack ${b+1}`]={used:w(a.CapacityUsedPrecise,a.CapacityUsed),total:w(a.CapacitySizePrecise,a.CapacitySize),resetAt:(0,f.eZ)(a.CycleEndTime),unlimited:!1,recurring:!1}});let t=Date.now(),u=j.some(a=>{let b=Number(a.CycleStartTime);if(!b)return!1;let c=new Date(b<1e12?1e3*b:b),d=new Date(t);return c.getFullYear()===d.getFullYear()&&c.getMonth()===d.getMonth()&&c.getDate()===d.getDate()}),v=n[0]||j[0]||{};return{plan:v.PackageName||v.SubProductName||"CodeBuddy",quotas:p,checkinToday:u}}catch(b){return{message:`CodeBuddy (${a}) error: ${b.message}`}}}async function y(a,b,c,d=null){return x("codebuddy-cn",a,b,c,d)}async function z(a,b,c,d=null){return x("codebuddy-intl",a,b,c,d)}var A=c(90737);function B(a,b=0){if(!Buffer.isBuffer(a)||b<0||a.length-b<5)return null;let c=a[b];if(0!==c&&1!==c&&128!==c&&129!==c)return null;let d=b+5,e=a.readUInt32BE(b+1);return e>a.length-d?null:{flag:c,payloadStart:d,payloadLength:e}}function C(a,b){let c=0n,d=0n,e=b;for(;;){if(e>=a.length)return null;let b=a[e];if(c|=BigInt(127&b)<<d,e+=1,(128&b)==0)break;if((d+=7n)>70n)return null}return{value:Number(c),next:e}}function D(a,b,c,d){return b+c>a.length?null:{field:{wireType:d,bytes:a.subarray(b,b+c)},next:b+c}}function E(a){let b=new Map,c=0;for(;c<a.length;){let d=function(a,b){let c=C(a,b);if(!c)return null;let d=c.value>>>3,e=7&c.value;if(0===d)return null;if(0===e){let b=C(a,c.next);return b?{fieldNumber:d,field:{wireType:0,value:b.value},next:b.next}:null}if(2===e){let b=function(a,b){let c=C(a,b);if(!c)return null;let{value:d,next:e}=c;return d<0||e+d>a.length?null:{field:{wireType:2,bytes:a.subarray(e,e+d)},next:e+d}}(a,c.next);return b?{fieldNumber:d,field:b.field,next:b.next}:null}if(1===e){let b=D(a,c.next,8,1);return b?{fieldNumber:d,field:b.field,next:b.next}:null}if(5===e){let b=D(a,c.next,4,5);return b?{fieldNumber:d,field:b.field,next:b.next}:null}return null}(a,c);if(!d)return null;b.set(d.fieldNumber,d.field),c=d.next}return b}let F=(0,f.U)("grok-cli"),G=F.url||"https://cli-chat-proxy.grok.com/v1/billing?format=credits",H=F.userUrl||"https://cli-chat-proxy.grok.com/v1/user?include=subscription",I=Buffer.from([0,0,0,0,0]);function J(a,b=0){return null==a?b:"object"==typeof a&&!Array.isArray(a)&&"val"in a?(0,f.IQ)(a.val,b):(0,f.IQ)(a,b)}function K(a,b){let c=a?.subscriptionTier??a?.subscription_tier??a?.subscription?.tier??b?.subscriptionTier??b?.subscription_tier;return"string"==typeof c?c.trim():""}function L({used:a,total:b,resetAt:c,unlimited:d=!1}){let e=Math.max(0,(0,f.IQ)(b,0)),g=Math.max(0,(0,f.IQ)(a,0));if(d||0===e)return{used:g,total:0,remainingPercentage:100*!!d,resetAt:c||null,unlimited:!0};let h=Math.max(0,e-g);return{used:g,total:e,remainingPercentage:h/e*100,resetAt:c||null,unlimited:!1}}async function M(a,b=null){if(!a)return null;try{let c=await (0,d.proxyAwareFetch)("https://grok.com/grok_api_v2.GrokBuildBilling/GetGrokCreditsConfig",{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/grpc-web+proto","X-Grpc-Web":"1",Accept:"application/grpc-web+proto"},body:I},b);if(!c?.ok)return null;let e=await c.arrayBuffer().catch(()=>null);if(!e)return null;return function(a){if(!a||!Buffer.isBuffer(a)||0===a.length)return null;try{var b,c;let d=null!==B(a,0)?function(a){let b=0;for(;b<a.length;){let c=B(a,b);if(!c)break;let d=c.payloadStart+c.payloadLength;if((128&c.flag)==0)return a.subarray(c.payloadStart,d);b=d}return null}(a):a;if(!d)return null;let e=E(d);if(!e)return null;let f=(b=e.get(1))&&2===b.wireType?E(b.bytes):null;if(!f)return null;let g=(c=f.get(1))?5===c.wireType?c.bytes.readFloatLE(0):1===c.wireType?c.bytes.readDoubleLE(0):null:0;if(null===g||!Number.isFinite(g)||g<0)return null;return{percentUsed:Math.min(100,100*g),resetAt:function(a){if(!a||2!==a.wireType)return null;let b=E(a.bytes);if(!b)return null;let c=b.get(1),d=b.get(2),e=c?.wireType===0?c.value:0,f=new Date(1e3*e+Math.round((d?.wireType===0?d.value:0)/1e6));return Number.isNaN(f.getTime())?null:f.toISOString()}(f.get(5))}}catch{return null}}(Buffer.from(e))}catch{return null}}async function N(a,b=null,c=null){if(!a)return{message:"Grok CLI access token not available."};let e=function(a,b={}){let c=b||{},d={Authorization:`Bearer ${a}`,Accept:"application/json","User-Agent":A.fZ,"x-xai-token-auth":"xai-grok-cli","x-grok-client-identifier":A.rK,"x-grok-client-version":A.uG,"x-grok-client-mode":"headless"},e=c.email,f=c.userId||c.principalId;return e&&(d["x-email"]=e),f&&(d["x-userid"]=f),d}(a,b);try{let[b,h]=await Promise.all([(0,d.proxyAwareFetch)(G,{method:"GET",headers:e},c),(0,d.proxyAwareFetch)(H,{method:"GET",headers:e},c).catch(()=>null)]);if(401===b.status||403===b.status)return{message:"Grok CLI authentication expired. Please re-authorize."};if(!b.ok){let a=await b.text().catch(()=>""),c=a?`: ${a.slice(0,200)}`:"";return{message:`Grok CLI billing API error (${b.status})${c}`}}let i=await b.json().catch(()=>null);if(!i||"object"!=typeof i)return{message:"Grok CLI billing response was not JSON."};let j=null;h?.ok&&(j=await h.json().catch(()=>null));let k=function(a,b=null){let c,d=a&&"object"==typeof a?a:{},e=d.config&&"object"==typeof d.config&&!Array.isArray(d.config)?d.config:d,g=(0,f.eZ)(e.billingPeriodEnd)||(0,f.eZ)(e.billing_period_end)||(0,f.eZ)(e.currentPeriod?.end)||(0,f.eZ)(e.resetAt||e.resetsAt||e.periodEnd)||(0,f.eZ)(d.billingPeriodEnd)||(0,f.eZ)(d.billing_period_end)||(0,f.eZ)(d.resetAt||d.resetsAt||d.periodEnd)||null,h={},i=K(b,e),j=!!i&&!/^(free|none|null)$/i.test(i),k=J(e.monthlyLimit??e.monthly_limit??d.monthlyLimit??d.monthly_limit,NaN),l=J(e.includedUsed??e.included_used??d.includedUsed??d.included_used,NaN),m=J(e.totalUsed??e.total_used??d.totalUsed??d.total_used,NaN);Number.isFinite(k)&&k>0&&(h["Monthly included"]=L({used:Number.isFinite(l)?l:Number.isFinite(m)?m:0,total:k,resetAt:g}));let n=J(e.onDemandCap??d.onDemandCap,NaN),o=J(e.onDemandUsed??d.onDemandUsed,NaN);if(Number.isFinite(n)&&n>0){let a=Number.isFinite(o)?Math.max(0,o):0;h["On-demand"]=L({used:a,total:n,resetAt:g})}else!j&&Number.isFinite(n)&&0===n&&Number.isFinite(o)&&(h["On-demand"]={used:1,total:1,remainingPercentage:0,resetAt:g,unlimited:!1});let p=J(e.prepaidBalance??d.prepaidBalance,NaN);Number.isFinite(p)&&p>0&&(h.Prepaid={used:0,total:p,remainingPercentage:100,resetAt:null,unlimited:!1});let q=J(e.creditUsagePercent??e.credit_usage_percent??d.creditUsagePercent,NaN);for(let a of(Number.isFinite(q)&&q>=0&&(h["Weekly SuperGrok"]=L({used:Math.max(0,Math.min(100,q)),total:100,resetAt:g})),[d.credits,d.creditBalance,d.usage,e.credits,e.includedCredits,e.subscriptionCredits].filter(a=>a&&"object"==typeof a&&!Array.isArray(a)))){let b=J(a.total??a.limit??a.cap??a.allocation??a.amount,NaN),c=J(a.used??a.spent??a.consumed,NaN),d=J(a.remaining??a.balance??a.left,NaN);if(Number.isFinite(b)&&b>0){let e=Number.isFinite(c)?c:Number.isFinite(d)?Math.max(0,b-d):0;h.Credits||(h.Credits=L({used:e,total:b,resetAt:(0,f.eZ)(a.resetAt||a.resetsAt||a.end)||g}))}else Number.isFinite(d)&&d>=0&&!h.Credits&&(h.Credits={used:0,total:d>0?d:1,remainingPercentage:100*(d>0),resetAt:g,unlimited:!1})}let r=Object.keys(h).length>0&&Object.values(h).every(a=>!0!==a.unlimited&&(a.remainingPercentage??100)<=0);return{plan:(c=K(b,e))?c.replace(/[_-]+/g," ").replace(/\b\w/g,a=>a.toUpperCase()):b?.hasGrokCodeAccess===!0?"Grok Code":(e?.isUnifiedBillingUser,"Grok Build"),quotas:h,periodEnd:g,exhausted:r,subscriptionAccess:j,rawConfig:e}}(i,j);if(k.plan=function(a){try{return({0:"Free",1:"SuperGrok",2:"X Basic",3:"X Premium",4:"X Premium Plus",5:"SuperGrok Heavy",6:"SuperGrok Lite"})[JSON.parse(Buffer.from(a.split(".")[1],"base64url")).tier]||""}catch{return""}}(a)||k.plan,!k.quotas||0===Object.keys(k.quotas).length){var g;let b=(g=await M(a,c))&&Number.isFinite(g.percentUsed)?{"Weekly SuperGrok":L({used:Math.round(Math.max(0,Math.min(100,g.percentUsed))),total:100,resetAt:g.resetAt||null})}:null;if(b)return{plan:k.plan,quotas:b};return{plan:k.plan,message:k.subscriptionAccess?"Subscription access is active; Grok does not expose a numeric included quota.":"Grok Build connected, but no credit allotment was returned. Free promo may be exhausted.",quotas:{}}}return{plan:k.plan,quotas:k.quotas}}catch(a){return{message:`Grok CLI usage error: ${a.message}`}}}var O=c(75924);let P={LEVEL_BASIC:"Moderato",LEVEL_INTERMEDIATE:"Allegretto",LEVEL_ADVANCED:"Allegro",LEVEL_STANDARD:"Vivace"};function Q({used:a,total:b,remaining:c,resetAt:d}){let e,g=Math.max(0,(0,f.IQ)(b,0)),h=Math.max(0,(0,f.IQ)(a,0));return e=g>0&&null!=c&&Number.isFinite(Number(c))?Math.max(0,Number(c))/g*100:g>0?Math.max(0,g-h)/g*100:0,{used:h,total:g,remainingPercentage:e,resetAt:d||null,unlimited:!1}}async function R(a=null,b=null,c=null,e=null){let g="string"==typeof b&&b.length>0,h=!g&&"string"==typeof a&&a.length>0;if(!g&&!h)return{message:"Kimi access token or API key not available."};let i=g?{"x-api-key":b}:{Authorization:`Bearer ${a}`,...(0,O.buildKimiHeaders)(e?.deviceId)};try{let a,b=await (0,d.proxyAwareFetch)("https://api.kimi.com/coding/v1/usages",{method:"GET",headers:{...i,"Content-Type":"application/json",Accept:"application/json"}},c),e=await b.text().catch(()=>"");if(!b.ok)return{plan:"Kimi Coding",message:function(a,b){let c=null;try{c=JSON.parse(b||"")}catch{}let d=Array.isArray(c?.details)?c.details[0]:null,e=d?.debug||c?.debug||null,f=e?.reason||c?.reason||"",g=e?.localizedMessage?.message||d?.localizedMessage?.message||c?.message||"";if(401===a)return"Kimi authentication expired. Please re-authorize.";if(403===a&&("REASON_FEATURE_NO_PERMISSION"===f||/permission_denied|do not have permission|subscribe/i.test(`${c?.code||""} ${g} ${b||""}`)))return g||"Kimi connected, but this account has no permission to view usage. Subscribe to Kimi Code to access quota.";let h=(g||b||"").slice(0,100);return h?`Kimi Coding connected. API Error ${a}: ${h}`:`Kimi Coding connected. API Error ${a}`}(b.status,e)};try{a=JSON.parse(e||"{}")}catch{return{plan:"Kimi Coding",message:"Kimi Coding connected. Invalid JSON response from API."}}let g={},h=a?.usage&&"object"==typeof a.usage?a.usage:{},j=(0,f.IQ)(h.limit??h.Limit,0),k=(0,f.IQ)(h.used??h.Used,0),l=h.remaining??h.Remaining,m=null!=l&&""!==l?(0,f.IQ)(l,NaN):NaN,n=h.resetTime||h.ResetTime||h.reset_at||h.resetAt;for(let b of(j>0&&(g.Weekly=Q({used:k,total:j,remaining:Number.isFinite(m)?m:null,resetAt:(0,f.eZ)(n)})),Array.isArray(a?.limits)?a.limits:[])){if(!b||"object"!=typeof b)continue;let a=b.detail&&"object"==typeof b.detail?b.detail:{},c=(0,f.IQ)(a.limit??a.Limit,0),d=(0,f.IQ)(a.remaining??a.Remaining,NaN),e=a.resetTime||a.reset_at||a.resetAt;if(c>0){let a=Number.isFinite(d)?d:Math.max(0,c);g.Ratelimit=Q({used:Math.max(0,c-a),total:c,remaining:a,resetAt:(0,f.eZ)(e)})}}let o=a?.user?.membership?.level,p=function(a){if(!a)return"";let b=String(a);return P[b]?P[b]:b.replace(/^LEVEL_/,"").toLowerCase()}(o)||"Kimi Coding";if(Object.keys(g).length>0)return{plan:p,quotas:g};return{plan:p,message:"Kimi Coding connected. Usage tracked per request."}}catch(a){return{message:`Kimi Coding connected. Unable to fetch usage: ${a.message}`}}}async function S(a=null,b=null){if(!a||"string"!=typeof a||!a.trim())return{message:"DeepSeek API key not available. Add a key to view usage."};try{let c=await (0,d.proxyAwareFetch)("https://api.deepseek.com/user/balance",{method:"GET",headers:{Authorization:`Bearer ${a.trim()}`,"Content-Type":"application/json",Accept:"application/json"}},b);if(401===c.status||403===c.status)return{plan:"DeepSeek",message:"DeepSeek authentication failed. Check the API key."};if(!c.ok){let a=await c.text().catch(()=>"");return{plan:"DeepSeek",message:`DeepSeek balance API error (${c.status})${a?`: ${a.slice(0,120)}`:""}`}}let e=await c.json().catch(()=>null);if(!e||"object"!=typeof e)return{message:"DeepSeek balance response was not JSON."};let g=function(a){let b=Array.isArray(a?.balance_infos)?a.balance_infos:[],c=[];for(let a of b){if(!a||"object"!=typeof a)continue;let b="string"==typeof a.currency?a.currency.toUpperCase():"";if(!b)continue;let d=(0,f.IQ)(a.total_balance??a.totalBalance,0);c.push({currency:b,totalBalance:d,grantedBalance:(0,f.IQ)(a.granted_balance??a.grantedBalance,0),toppedUpBalance:(0,f.IQ)(a.topped_up_balance??a.toppedUpBalance,0)})}return c}(e);if(0===g.length)return{plan:"DeepSeek",message:"DeepSeek connected. No balance data returned."};let h=!0===e.is_available||!0===e.isAvailable,i={};for(let a of g){let b=Math.max(0,a.totalBalance);i[`Balance (${a.currency})`]={used:0,total:b,remainingPercentage:100*(b>0),resetAt:null,unlimited:b>0}}return{plan:h?"DeepSeek":"DeepSeek (Insufficient Balance)",quotas:i}}catch(a){return{message:`DeepSeek error: ${a.message}`}}}async function T(a=null,b=null){let c=(a||"").trim();if(!c)return{message:"OpenCode Go API key not available. Add a key to view usage."};try{let a=await (0,d.proxyAwareFetch)("https://opencode.ai/zen/go/v1/usage",{method:"GET",headers:{Authorization:`Bearer ${c}`,Accept:"application/json"}},b);if(401===a.status||403===a.status)return{plan:"OpenCode Go",message:"OpenCode Go authentication failed. Check the API key."};if(!a.ok){let b=await a.text().catch(()=>"");return{plan:"OpenCode Go",message:`OpenCode Go usage API error (${a.status})${b?`: ${b.slice(0,120)}`:""}`}}let e=await a.json().catch(()=>null);if(!e||"object"!=typeof e)return{message:"OpenCode Go usage response was not JSON."};let g=e.usage&&"object"==typeof e.usage?e.usage:{},h={};for(let[a,b]of[["rolling","Rolling"],["weekly","Weekly"],["monthly","Monthly"]])if(g[a]&&"object"==typeof g[a]){let c=function(a,b){if(!b||"object"!=typeof b)return null;let c=Math.min(100,Math.max(0,(0,f.IQ)(b.percent,0))),d=Math.round(100-c),e=(0,f.eZ)(b.resetsAt);return void 0!==b.percent||e?{used:c,total:100,remainingPercentage:d,resetAt:e||null,recurring:!1,name:a}:null}(b,g[a]);c&&(h[b]=c)}if(0===Object.keys(h).length)return{plan:"OpenCode Go",message:"OpenCode Go connected. No quota data returned."};let i=String(g.status||e.status||"").toLowerCase();return{plan:"ok"===i?"OpenCode Go":`OpenCode Go (${g.status||e.status||""})`,quotas:h}}catch(a){return{message:`OpenCode Go error: ${a.message}`}}}let U={rolling:"Rolling",weekly:"Weekly",monthly:"Monthly"};async function V(a=null,b=null){if(!a||"string"!=typeof a||!a.trim())return{message:"OpenCode Zen API key not available. Add a key to view usage."};try{let c=await (0,d.proxyAwareFetch)("https://opencode.ai/zen/v1/usage",{method:"GET",headers:{Authorization:`Bearer ${a.trim()}`,Accept:"application/json"}},b);if(401===c.status)return{plan:"OpenCode Zen",message:"OpenCode Zen authentication failed. Check the API key."};if(403===c.status){let a=await c.json().catch(()=>null),b=a?.error?.type==="EntitlementError";return{plan:"OpenCode Zen",message:b?"OpenCode Zen billing required for this API key.":"OpenCode Zen access forbidden for this API key."}}if(!c.ok)return{plan:"OpenCode Zen",message:`OpenCode Zen usage API error (${c.status}).`};let e=await c.json().catch(()=>null);if(!e?.usage||"object"!=typeof e.usage)return{plan:"OpenCode Zen",message:"OpenCode Zen usage response did not contain quota data."};let g={};for(let[a,b]of Object.entries(U)){let c=e.usage[a];if(!c||"object"!=typeof c)continue;let d=function(a){if("number"==typeof a&&Number.isFinite(a))return a;if("string"==typeof a&&a.trim()){let b=Number(a);if(Number.isFinite(b))return b}return null}(c.percent);if(null===d)continue;let h=Math.max(0,Math.min(100,(0,f.IQ)(d,0)));g[b]={used:h,total:100,remainingPercentage:100-h,resetAt:(0,f.eZ)(c.resetsAt),recurring:!1,name:b}}if(0===Object.keys(g).length)return{plan:"OpenCode Zen",message:"OpenCode Zen usage response did not contain valid quota data."};return{plan:"OpenCode Zen",quotas:g}}catch(a){return{message:`OpenCode Zen error: ${a.message}`}}}var W=c(12132);async function X(a=null,b=null,c=null,{allowMachineSession:e=!0}={}){if(!e)return{plan:"Xiaomi MiMo",message:"Billed at standard API / plan rates — no separate quota to display."};let f=await (0,W.Fp)(b,c);if("number"==typeof f.percent&&Number.isFinite(f.percent))return{plan:"Xiaomi MiMo Desktop",quotas:{Weekly:Z(f.percent,f.resetAt,f.resetDate)}};let g=a||b?.apiKey,h="string"==typeof g?g.trim():"";if(h.startsWith("mimo-desktop-session"))return{plan:"Xiaomi MiMo Desktop",message:"MiMo Desktop is not signed in on this machine — sign in to it to read the weekly quota."};if(!h)return{message:"Xiaomi MiMo Desktop not connected. Add credentials to view usage."};try{let a=await (0,d.proxyAwareFetch)("https://aistudio.xiaomimimo.com/open-apis/v1/user/usage",{method:"GET",headers:{Authorization:`Bearer ${h}`,"X-Mimo-Source":"mimocode-cli",Accept:"application/json"},signal:AbortSignal.timeout(1e4)},c);if(401===a.status)return{plan:"Xiaomi MiMo Desktop",message:"Weekly quota requires Xiaomi account session. API key alone is insufficient."};if(!a.ok)return{plan:"Xiaomi MiMo Desktop",message:`Usage API error (${a.status})`};let b=await a.json().catch(()=>null);if(!b||0!==b.code||!b.data)return{plan:"Xiaomi MiMo Desktop",message:"Usage endpoint returned unexpected response."};let{percent:e,resetDate:f,resetAt:g}=b.data;if("number"!=typeof e||!Number.isFinite(e))return{plan:"Xiaomi MiMo Desktop",message:"Usage data missing percent field."};return{plan:"Xiaomi MiMo Desktop",quotas:{Weekly:Z(e,g,f)}}}catch(a){return{message:`Xiaomi MiMo Desktop usage error: ${a.message}`}}}async function Y(a=null,b=null,c=null){if(b?.mimoPassToken){let a=await (0,W.Fp)(b,c);if("number"==typeof a.percent&&Number.isFinite(a.percent))return{plan:"MiMo Token Plan",quotas:{Weekly:Z(a.percent,a.resetAt,a.resetDate)}}}return a&&"string"==typeof a&&a.trim()?{plan:"MiMo Token Plan",message:"Token Plan does not expose a quota API for standalone keys — check your plan usage in the MiMo console."}:{message:"API key not available. Add a key to view usage."}}function Z(a,b,c){let d=Math.max(0,Math.min(100,Math.round(a))),e=null;if("number"==typeof b&&b>0)e=new Date(1e3*b).toISOString();else if("string"==typeof c&&c){let a=new Date(`${c}T00:00:00Z`);Number.isNaN(a.getTime())||(e=a.toISOString())}return{used:100-d,total:100,remainingPercentage:d,resetAt:e,unlimited:!1,recurring:!0}}let $={baseUrl:"https://api.stepfun.ai",currency:"USD",brand:"StepFun"},_={baseUrl:"https://api.stepfun.com",currency:"CNY",brand:"StepFun CN"};async function aa(a=null,b=null,c={}){let{baseUrl:e="https://api.stepfun.com",currency:g="CNY",brand:h="StepFun"}=c;if(!a||"string"!=typeof a||!a.trim())return{message:`${h} API key not available. Add a key to view usage.`};let i=`${e.replace(/\/$/,"")}/v1/accounts`;try{let c=await (0,d.proxyAwareFetch)(i,{method:"GET",headers:{Authorization:`Bearer ${a.trim()}`,"Content-Type":"application/json",Accept:"application/json"}},b);if(401===c.status||403===c.status)return{plan:h,message:`${h} authentication failed. Check the API key.`};if(!c.ok){let a=await c.text().catch(()=>"");return{plan:h,message:`${h} account API error (${c.status})${a?`: ${a.slice(0,120)}`:""}`}}let e=await c.json().catch(()=>null);if(!e||"object"!=typeof e)return{message:`${h} account response was not JSON.`};let j=(0,f.IQ)(e.balance,0),k=(0,f.IQ)(e.total_cash_balance,0),l=(0,f.IQ)(e.total_voucher_balance,0),m=j>0,n={},o=a=>({used:0,total:Math.max(0,a),remainingPercentage:100*(a>0),resetAt:null,displayRemaining:!0,unlimited:!1});return n[`Balance (${g})`]=o(j),l>0&&k>0?(n[`Cash (${g})`]=o(k),n[`Voucher (${g})`]=o(l)):l>0&&(n[`Voucher (${g})`]=o(l)),{plan:m?h:`${h} (Insufficient Balance)`,quotas:n}}catch(a){return{message:`${h} error: ${a.message}`}}}var ab=c(53225),ac=c(69704);let ad=(0,f.U)("vercel-ai-gateway").url;async function ae(a){try{return{message:"iFlow connected. Usage tracked per request."}}catch(a){return{message:"Unable to fetch iFlow usage."}}}let af={session:"Session (5h)",weekly:"Weekly (7d)",monthly:"Monthly"};async function ag(a,b,c=null){if(!a)return{message:"Ollama Cloud API key not available."};try{let b,e=await (0,d.proxyAwareFetch)("https://ollama.com/api/usage",{headers:{Authorization:`Bearer ${a}`,Accept:"application/json"}},c);if(401===e.status||403===e.status)return{message:"Ollama Cloud API key invalid or expired."};if(!e.ok)return{message:`Ollama Cloud usage API error (${e.status}).`};try{b=await e.json()}catch{return{message:"Ollama Cloud usage response was not JSON."}}let f=await (0,d.proxyAwareFetch)("https://ollama.com/api/me",{method:"POST",headers:{Authorization:`Bearer ${a}`,Accept:"application/json","Content-Length":"0"}},c).then(a=>a.ok?a.json():null).catch(()=>null),g="string"==typeof f?.Plan?f.Plan:"",h=g?g.charAt(0).toUpperCase()+g.slice(1).toLowerCase():"Ollama Cloud",i=b?.limits&&"object"==typeof b.limits?b.limits:{},j="free"===g.toLowerCase()&&f?.CreatedAt?function(a,b=new Date){let c=new Date(a);if(Number.isNaN(c.getTime()))return null;let d=(b.getUTCFullYear()-c.getUTCFullYear())*12+(b.getUTCMonth()-c.getUTCMonth());for(let a=Math.max(0,d);a<=d+1;a++){let d=function(a,b){let c=a.getUTCMonth()+b,d=a.getUTCFullYear()+Math.floor(c/12),e=(c%12+12)%12,f=new Date(Date.UTC(d,e+1,0)).getUTCDate();return new Date(Date.UTC(d,e,Math.min(a.getUTCDate(),f),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds()))}(c,a);if(d>b)return d.toISOString()}return null}(f.CreatedAt):null,k={};for(let[a,b]of Object.entries(af)){let c=i[a]?.usage;if(null==c)continue;let d=Number(c);Number.isNaN(d)||(k[b]=function(a,b=null){let c=Math.max(0,Math.min(1,Number(a)||0)),d=Math.round(100*c);return{used:d,total:100,remainingPercentage:100-d,resetAt:b,unlimited:!1}}(d,"monthly"===a?j:null))}if(0===Object.keys(k).length)return{plan:h,message:"Ollama Cloud connected. No usage limits reported.",quotas:{}};return{plan:h,quotas:k}}catch(a){return{message:`Ollama Cloud error: ${a.message}`}}}async function ah(a,b=null){if(!a)return{message:"Vercel AI Gateway API key not available."};try{let c=await (0,d.proxyAwareFetch)(ad,{method:"GET",headers:{Authorization:`Bearer ${a}`,Accept:"application/json"}},b);if(401===c.status||403===c.status)return{message:"Vercel AI Gateway API key invalid or expired."};if(!c.ok){let a=await c.text().catch(()=>""),b=a?`: ${a.slice(0,200)}`:"";return{message:`Vercel AI Gateway credits API error (${c.status})${b}`}}let e=await c.json(),f=Number(e?.balance)||0,g=Number(e?.total_used)||0;if(f<=0&&g<=0)return{plan:"Pay-as-you-go",message:"Vercel AI Gateway connected. No credit allocation found (BYOK or unfunded account).",quotas:{}};return{plan:"Pay-as-you-go",quotas:{"Used (USD)":{used:g,total:0,remaining:0,remainingPercentage:100,unlimited:!0},"Remaining (USD)":{used:f,total:5,remaining:f,remainingPercentage:f/5*100,unlimited:!1}}}}catch(a){return{message:`Vercel AI Gateway error: ${a.message}`}}}async function ai(a,b="qoder",c=null){if(!a||"string"!=typeof a)return null;try{let e="qoder-cn"===b?ac.VD:ac.Dg,f=await (0,d.proxyAwareFetch)(`${e}/api/v2/me/usages/big_model_credits`,{method:"GET",headers:{Cookie:a,Accept:"application/json",Referer:`${e}/account/usage`,"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}},c);if(!f.ok)return null;let g=await f.json().catch(()=>null);if(!g||!g.user_id)return null;let h=a=>{let b=g?.[a]?.quota_detail;return Array.isArray(b)?b.map(a=>({total:Number(a?.limit_value)||0,used:Number(a?.used_value)||0,remaining:Number(a?.remaining_value)||0,expiresAt:Number(a?.expires_at)>0?new Date(Number(a.expires_at)).toISOString():null,source:a?.source||null})).filter(a=>a.total>0).sort((a,b)=>(a.expiresAt||"9999").localeCompare(b.expiresAt||"9999")):[]},i=h("resource_package_quota"),j=h("plan_quota"),k=h("dedicated_resource_package_quota");if(!i.length&&!j.length&&!k.length)return null;return{packs:i,planRows:j,orgRows:k,resetAt:i[0]?.expiresAt||null,sourceUserId:g.user_id}}catch{return null}}async function aj(a,b=null,c="qoder",e=null){if(!a)return{message:"Qoder usage unavailable: no access token"};try{let g=(0,f.U)(c).url||(0,f.U)("qoder").url,h=await (0,d.proxyAwareFetch)(g,{method:"GET",headers:{Authorization:`Bearer ${a}`,Accept:"application/json"}},b);if(!h.ok)return{message:`Qoder connected. Usage fetch returned ${h.status}.`};let i=await h.json().catch(()=>null);if(!i)return{message:"Qoder connected. Usage response was not JSON."};let j=i.userQuota||{},k=i.addOnQuota||{},l=i.orgResourcePackage||{},m=Number.isFinite(Number(i.expiresAt))&&Number(i.expiresAt)>0?Number(i.expiresAt):null,n=m&&(m>=2534e11||new Date(m).getFullYear()>2099),o=m&&!n?new Date(m).toISOString():null,p=null,q=[],r=null,s=null,t=a=>{if(!Array.isArray(a)||0===a.length)return null;let b=b=>a.reduce((a,c)=>a+(Number(c[b])||0),0);return{total:b("total"),used:b("used"),remaining:b("remaining"),resetAt:a.find(a=>a.expiresAt)?.expiresAt||null}},u=e?.creditDaddyWebSession,v=!1;if(u?.cookie){let a=await ai(u.cookie,c,b),d=e?.userId||null;!a||d&&a.sourceUserId&&d!==a.sourceUserId||(v=!0,q=[...a.planRows.map(a=>({...a,name:"Plan Credits"})),...a.packs].sort((a,b)=>String(a.expiresAt||"9999").localeCompare(String(b.expiresAt||"9999"))),p=q[0]?.expiresAt||null,r=t(a.planRows),s=t(a.orgRows))}if(!(q.length>0))try{let e="qoder-cn"===c?ac.jJ:ac.L7,f=`${e}/sash/api/v1/me/campaigns?clientType=10`,g=await (0,d.proxyAwareFetch)(f,{method:"GET",headers:{Authorization:`Bearer ${a}`,"Cosy-ClientType":"10","Cosy-Version":"0.3.3","User-Agent":"Qoder",Accept:"application/json"}},b);if(g.ok){let a=await g.json().catch(()=>null),b=function({campaigns:a=[],used:b=0,total:c=0,now:d=Date.now()}={}){let e=a.filter(a=>a?.claimStatus==="CLAIMED"&&a?.benefit?.kind==="CREDITS"),f=[];for(let a of e){let b=a.benefit?.validity,c=null;b?.mode==="FIXED_END"&&b.fixedEnd?c=new Date(b.fixedEnd).getTime():b?.mode==="RELATIVE_DAYS"&&b.days&&a.startAt&&(c=1e3*a.startAt+864e5*b.days);let e=Number(a.benefit?.amount)||0;!Number.isFinite(c)||c<=d||e<=0||f.push({total:e,expiresAt:new Date(c).toISOString()})}f.sort((a,b)=>new Date(a.expiresAt)-new Date(b.expiresAt));let g=Math.max(0,Number(b)||0);for(let a of f){let b=Math.min(g,a.total);a.used=b,a.remaining=a.total-b,g-=b}let h=f.reduce((a,b)=>a+b.total,0),i=(Number(c)||0)-h;if(f.length>0&&i>0){let a=Math.min(g,i);f.push({total:i,expiresAt:null,used:a,remaining:i-a,unitemized:!0})}return{packs:f,resetAt:f.length>0&&f[0].expiresAt||null}}({campaigns:a?.campaigns||[],used:Number(k.used)||0,total:Number(k.total)||0});q=b.packs,p=b.resetAt}}catch{}let w=r||{total:Number(j.total)||0,used:Number(j.used)||0,remaining:Number(j.remaining)||0},x=s||{total:Number(l.total)||0,used:Number(l.used)||0,remaining:Number(l.remaining)||0},y=a=>q.reduce((b,c)=>b+(Number(c[a])||0),0),z=q.length>0?{total:y("total"),used:y("used"),remaining:y("remaining")}:{total:Number(k.total)||0,used:Number(k.used)||0,remaining:Number(k.remaining)||0};return{quotas:{user:{total:w.total,used:w.used,remaining:w.remaining,unit:j.unit||"credits",resetAt:w.resetAt||o,unlimited:!1},addOn:{total:z.total,used:z.used,remaining:z.remaining,unit:k.unit||"credits",resetAt:p,unlimited:!1,packs:q},organization:{total:x.total,used:x.used,remaining:x.remaining,unit:l.unit||"credits",resetAt:x.resetAt||o,unlimited:!1}},totalUsagePercentage:Number(i.totalUsagePercentage)||0,isQuotaExceeded:!!i.isQuotaExceeded,expiresAt:m,...u?.cookie&&!v?{webSessionExpired:!0}:{}}}catch(a){return{message:`Qoder connected. Unable to fetch usage: ${a.message}`}}}function ak(a="alitp-intl"){let b="alitp-cn"===a;return{plan:b?"Alibaba Token Plan (CN)":"Alibaba Token Plan (Intl)",quotas:{},message:`Alibaba Token Plan ${b?"国内版(cn-beijing)":"国际版(ap-southeast-1)"} 的额度只能在百炼控制台查看:${b?"https://bailian.console.aliyun.com/cn-beijing/subscription/overview":"https://modelstudio.console.alibabacloud.com/"} → 「免费额度」,按模型列出剩余/总量与到期时间。该产品没有公开的额度 API(实测 20+ 条路径全部 404,推理响应也不带额度字段),所以这里无法自动读取。`+(b?"":" 注意:国际版与国内版是两套 key,互不通用,用错区域会回 401 InvalidApiKey。")}}let al={international:(0,f.U)("glm").url,china:(0,f.U)("glm-cn").url};async function am(a,b,c=null){if(!a)return{message:"GLM API key not available."};let e=al["glm-cn"===b?"china":"international"];try{let b=await (0,d.proxyAwareFetch)(e,{headers:{Authorization:`Bearer ${a}`,Accept:"application/json"}},c);if(!b.ok){if(401===b.status)return{message:"GLM API key invalid or expired."};return{message:`GLM quota API error (${b.status}).`}}let f=await b.json(),{plan:g,quotas:h}=function(a){let b=a?.data&&"object"==typeof a.data?a.data:{},c=Array.isArray(b.limits)?b.limits:[],d={};for(let a of c){if(!a||"TOKENS_LIMIT"!==a.type&&"CREDIT_LIMIT"!==a.type)continue;let b=Number(a.percentage)||0,c=Number(a.nextResetTime)||0,e=Math.max(0,100-b);d[3===a.unit?`Session (${a.number}h)`:6===a.unit?"Weekly (7d)":"TOKENS_LIMIT"===a.type?"Tokens":`Limit (${a.number})`]={used:b,total:100,remaining:e,remainingPercentage:e,resetAt:c>0?new Date(c).toISOString():null,unlimited:!1}}let e="string"==typeof b.level?b.level:"";return{plan:e?e.charAt(0).toUpperCase()+e.slice(1).toLowerCase():"Unknown",quotas:d}}(f);return{plan:g,quotas:h}}catch(a){return{message:`GLM error: ${a.message}`}}}var an=c(10263);let ao={"individual-go":"Go","individual-goat":"GOAT","individual-pro":"Pro","individual-pro-v1":"Pro (Legacy)","individual-provider":"BYOK","individual-max":"Max 10x","individual-ultra":"Max 20x","teams-pro":"Team Pro"},ap={"individual-go":10,"individual-goat":70,"individual-pro":30,"individual-pro-v1":80,"individual-max":150,"individual-ultra":300,"teams-pro":40};function aq(a){return Math.round(1e4*(0,f.IQ)(a,0))/1e4}async function ar(a,b=null){if(!a||"string"!=typeof a)return{message:"Command Code API key not configured."};let c=(0,f.U)("commandcode"),e=c?.creditsUrl||"https://api.commandcode.ai/alpha/billing/credits",g=c?.subscriptionsUrl||"https://api.commandcode.ai/alpha/billing/subscriptions",h=(0,an.$j)({apiKey:a.trim(),accept:"application/json"});try{let a=(0,d.proxyAwareFetch)(e,{method:"GET",headers:h},b),c=Promise.resolve().then(()=>(0,d.proxyAwareFetch)(g,{method:"GET",headers:h},b)).catch(()=>null),[i,j]=await Promise.all([a,c]);if(401===i.status||403===i.status)return{message:"Command Code API key invalid or expired."};if(!i.ok)return{message:`Command Code credits API error (${i.status}).`};let k=await i.json(),l=null;if(j&&j.ok)try{l=await j.json()}catch{l=null}let m=l?.data?.planId||null,n=ao[m]||(m?m.replace(/^individual-/,""):"Command Code"),o=l?.data?.currentPeriodEnd||null,p=k?.windowLimits||{},q=k?.credits||{},r={};if(p.fiveHour){let a=(0,f.IQ)(p.fiveHour.cap,0),b=aq(p.fiveHour.used),c=Math.max(0,aq(a-b)),d=a>0?Math.max(0,Math.min(100,Math.round(c/a*100))):100;r["session (5h)"]={used:b,total:a,remaining:c,remainingPercentage:d,resetAt:(0,f.eZ)(p.fiveHour.resetAt),unlimited:!1,recurring:!0}}if(p.weekly){let a=(0,f.IQ)(p.weekly.cap,0),b=aq(p.weekly.used),c=Math.max(0,aq(a-b)),d=a>0?Math.max(0,Math.min(100,Math.round(c/a*100))):100;r["weekly (7d)"]={used:b,total:a,remaining:c,remainingPercentage:d,resetAt:(0,f.eZ)(p.weekly.resetAt),unlimited:!1,recurring:!0}}if(void 0!==q.monthlyCredits&&null!==q.monthlyCredits){let a=aq(q.monthlyCredits),b=(0,f.IQ)(q.monthlyCreditsGranted)||ap[m]||Math.ceil(a)||10,c=Math.max(0,aq(b-a)),d=b>0?Math.max(0,Math.min(100,Math.round(a/b*100))):100;r["Monthly Credits"]={used:c,total:b,remaining:a,remainingPercentage:d,resetAt:(0,f.eZ)(o),unlimited:!1,recurring:!0}}if(q.purchasedCredits&&q.purchasedCredits>0){let a=aq(q.purchasedCredits);r["Purchased Credits"]={used:0,total:a,remaining:a,remainingPercentage:100,resetAt:null,unlimited:!1,recurring:!1}}return{plan:n,quotas:r}}catch(a){return{message:`Command Code usage fetch failed: ${a.message}`}}}var as=c(44725),at=c(81756);let au=(0,f.U)("cursor");function av(a){return Number(((0,f.IQ)(a,0)/100).toFixed(2))}function aw(a){return Math.max(0,100-Math.max(0,Math.min(100,(0,f.IQ)(a,0))))}async function ax(a,b,c,e){return(0,d.proxyAwareFetch)(a,{method:"POST",headers:{...(0,at.JA)(b,c||null,!0),"content-type":"application/json",accept:"application/json"},body:"{}"},e)}async function ay(a){try{return await a.json()}catch{return null}}async function az(a,b={},c=null){if(!a||"string"!=typeof a||!a.trim())return{message:"Cursor access token not available. Reconnect Cursor to view quota."};let e=a.trim(),g=b?.machineId||null,h=au.url,i=au.planInfoUrl,j=au.authUsageUrl;if(!h)return{message:"Cursor usage endpoint is not configured."};try{let a=await ax(h,e,g,c);if(401===a.status||403===a.status)return{plan:"Cursor",message:"Cursor authentication failed. Reconnect the Cursor provider."};let b={},k=null;if(a.ok&&(k=await ay(a),!function(a,b){let c=b?.planUsage;if(!c||"object"!=typeof c)return;let d=(0,f.IQ)(c.limit,0),e=(0,f.IQ)(c.includedSpend??c.totalSpend,0),g=(0,f.IQ)(c.remaining,Math.max(0,d-e)),h=(0,f.eZ)(b.billingCycleEnd);if(d>0){let b=av(d),f=av(e),i=av(g);a["Plan (USD)"]={used:f,total:b,remainingPercentage:null!=c.totalPercentUsed?aw(c.totalPercentUsed):b>0?i/b*100:0,resetAt:h}}else if(null!=c.totalPercentUsed){let b=(0,f.IQ)(c.totalPercentUsed,0);a["Included usage"]={used:b,total:100,remainingPercentage:aw(b),resetAt:h}}if(null!=c.autoPercentUsed){let b=(0,f.IQ)(c.autoPercentUsed,0);a["Auto models (%)"]={used:b,total:100,remainingPercentage:aw(b),resetAt:h}}if(null!=c.apiPercentUsed){let b=(0,f.IQ)(c.apiPercentUsed,0);a["Named models (%)"]={used:b,total:100,remainingPercentage:aw(b),resetAt:h}}Object.keys(a).length}(b,k),!function(a,b){let c=b?.spendLimitUsage;if(!c||"object"!=typeof c)return;let d=(0,f.IQ)(c.individualLimit,0),e=(0,f.IQ)(c.pooledLimit,0),g=(0,f.eZ)(b.billingCycleEnd);if(d>0){let b=av(c.individualUsed),e=av(d),h=av(c.individualRemaining??Math.max(0,d-(0,f.IQ)(c.individualUsed,0)));a["On-demand (USD)"]={used:b,total:e,remainingPercentage:e>0?h/e*100:0,resetAt:g};return}if(e>0){let b=av(c.pooledUsed),d=av(e),h=av(c.pooledRemaining??Math.max(0,e-(0,f.IQ)(c.pooledUsed,0)));a["Team on-demand (USD)"]={used:b,total:d,remainingPercentage:d>0?h/d*100:0,resetAt:g}}}(b,k)),0===Object.keys(b).length&&j){let g=await (0,d.proxyAwareFetch)(j,{method:"GET",headers:{Authorization:`Bearer ${e.includes("::")?e.split("::")[1]:e}`,Accept:"application/json"}},c);if(g.ok)!function(a,b){if(!b||"object"!=typeof b)return;let c=(0,f.eZ)(b.startOfMonth);for(let[d,e]of Object.entries(b)){if(!e||"object"!=typeof e||Array.isArray(e))continue;let b=(0,f.IQ)(e.maxRequestUsage,0);if(b<=0)continue;let g=(0,f.IQ)(e.numRequests,0);a[`${d} requests`]={used:g,total:b,remainingPercentage:b>0?Math.max(0,(b-g)/b*100):0,resetAt:c}}}(b,await ay(g));else if(!a.ok){let b=await a.text().catch(()=>"");return{plan:"Cursor",message:`Cursor usage API error (${a.status})${b?`: ${b.slice(0,120)}`:""}`}}}if(0===Object.keys(b).length)return{plan:"Cursor",message:k?.displayMessage||"Cursor connected. No quota data returned for this plan."};let l="Cursor";if(i){let a=await ax(i,e,g,c).catch(()=>null);if(a?.ok){let b=await ay(a),c=b?.planInfo?.planName;"string"==typeof c&&c.trim()&&(l=`Cursor ${c.trim()}`)}}return{plan:l,quotas:b}}catch(a){return{message:`Cursor error: ${a.message}`}}}c(78661);let aA={github:a=>h(a.accessToken,a.providerSpecificData,a.proxyOptions),"gemini-cli":a=>(0,j.N)(a.accessToken,a.providerDataWithProjectId,a.proxyOptions),antigravity:a=>(0,j.c)(a.accessToken,a.providerSpecificData,a.proxyOptions,{force:a.force}),claude:a=>(0,k.gl)(a.accessToken,a.proxyOptions,{force:a.force}),codex:a=>(0,l.Tl)(a.accessToken,a.proxyOptions),kiro:a=>n(a.accessToken,a.providerSpecificData,a.proxyOptions),qoder:async a=>{let b=await (0,ab._M)(a,a.proxyOptions).catch(()=>null);return aj(b?.accessToken||a.accessToken,a.proxyOptions,"qoder",a.providerSpecificData)},"qoder-cn":async a=>{let b=await (0,ab._M)(a,a.proxyOptions).catch(()=>null);return aj(b?.accessToken||a.accessToken,a.proxyOptions,"qoder-cn",a.providerSpecificData)},iflow:a=>ae(a.accessToken),ollama:a=>ag(a.apiKey,a.providerSpecificData,a.proxyOptions),glm:a=>am(a.apiKey||a.accessToken,a.provider,a.proxyOptions),"glm-cn":a=>am(a.apiKey||a.accessToken,a.provider,a.proxyOptions),minimax:a=>v(a.apiKey,a.provider,a.proxyOptions),"minimax-cn":a=>v(a.apiKey,a.provider,a.proxyOptions),"vercel-ai-gateway":a=>ah(a.apiKey,a.proxyOptions),"codebuddy-cn":a=>y(a.accessToken,a.apiKey,a.providerSpecificData,a.proxyOptions),"codebuddy-intl":a=>z(a.accessToken,a.apiKey,a.providerSpecificData,a.proxyOptions),"grok-cli":a=>N(a.accessToken,a.providerSpecificData,a.proxyOptions),kimi:a=>R(a.accessToken,a.apiKey,a.proxyOptions,a.providerSpecificData),deepseek:a=>S(a.apiKey,a.proxyOptions),"opencode-go":a=>T(a.apiKey,a.proxyOptions),"opencode-zen":a=>V(a.apiKey,a.proxyOptions),"xiaomi-mimo":a=>X(a.accessToken,a.providerSpecificData,a.proxyOptions,{allowMachineSession:!1}),"mimo-desktop":a=>X(a.accessToken,a.providerSpecificData,a.proxyOptions),"xiaomi-tokenplan":a=>Y(a.apiKey,a.providerSpecificData,a.proxyOptions),stepfun:a=>aa(a.apiKey,a.proxyOptions,$),"stepfun-cn":a=>aa(a.apiKey,a.proxyOptions,_),commandcode:a=>ar(a.apiKey,a.proxyOptions),"minimax-code":a=>(0,as.K$)(a.accessToken,"minimax-code",a.proxyOptions,a.providerSpecificData),"minimax-code-global":a=>(0,as.K$)(a.accessToken,"minimax-code-global",a.proxyOptions,a.providerSpecificData),"alitp-intl":a=>ak("alitp-intl"),"alitp-cn":a=>ak("alitp-cn"),cursor:a=>az(a.accessToken,a.providerSpecificData,a.proxyOptions)};async function aB(a,b=null,c={}){let{provider:d,accessToken:e,apiKey:f,providerSpecificData:g,projectId:h}=a,i={...g||{},...h?{projectId:h}:{}},j=aA[d];return j?await j({provider:d,accessToken:e,apiKey:f,providerSpecificData:g,providerDataWithProjectId:i,proxyOptions:b,force:!0===c.force}):{message:`Usage API not implemented for ${d}`}}},69788:(a,b,c)=>{c.d(b,{Ut:()=>l,gl:()=>j});var d=c(39609),e=c(74129),f=c(24295);let g={oauthUsageUrl:(0,f.U)("claude").oauthUrl,usageUrl:(0,f.U)("claude").orgUrl,settingsUrl:(0,f.U)("claude").settingsUrl,profileUrl:(0,f.U)("claude").profileUrl,resetUrl:(0,f.U)("claude").resetUrl,apiVersion:e.b8,userAgent:`claude-cli/${e.t4} (external, cli)`},h=new Map,i=new Map;async function j(a,b=null,c={}){let d=c?.force===!0;if(!d&&a){let b=i.get(a);if(b?.promise)return b.promise;if(b&&b.expiresAt>Date.now())return b.result}let e=!d&&a&&i.get(a)?.result||null,f=(async()=>{let c=await k(a,b);return a&&c?.quotas?(i.set(a,{result:c,expiresAt:Date.now()+3e5}),c):e||c})();return a&&i.set(a,{promise:f}),f}async function k(a,b=null){try{let c=h.get(a);if(c&&Date.now()<c)return await m(a,b);let e=await (0,d.proxyAwareFetch)(`${g.oauthUsageUrl}?cedar_ember=1`,{method:"GET",headers:{Authorization:`Bearer ${a}`,"anthropic-beta":"oauth-2025-04-20","anthropic-version":g.apiVersion,"User-Agent":g.userAgent}},b);if(e.ok){let a=await e.json(),b={},c=a=>a&&"object"==typeof a&&"number"==typeof a.utilization,d=a=>{let b=a.utilization,c=Math.max(0,100-b);return{used:b,total:100,remaining:c,remainingPercentage:c,resetAt:(0,f.eZ)(a.resets_at),unlimited:!1}};c(a.five_hour)&&(b["session (5h)"]=d(a.five_hour)),c(a.seven_day)&&(b["weekly (7d)"]=d(a.seven_day));let g={fable_5_1:"fable",fable_5:"fable"};for(let[e,f]of Object.entries(a))if(e.startsWith("seven_day_")&&"seven_day"!==e&&c(f)){let a=e.replace("seven_day_",""),c=g[a]||a;b[`weekly ${c} (7d)`]=d(f)}else("fable"===e||"fable_5"===e||"fable_5_1"===e)&&c(f)&&(b["weekly fable (7d)"]=d(f));return!b["weekly fable (7d)"]&&c(a.seven_day)&&(b["weekly fable (7d)"]={used:0,total:100,remaining:100,remainingPercentage:100,resetAt:(0,f.eZ)(a.seven_day.resets_at),unlimited:!1}),{plan:"Claude Code",extraUsage:a.extra_usage??null,resetCredits:function(a){if(!a?.eligible||!Array.isArray(a.grants))return null;let b=a.grants.filter(a=>a?.id&&!a.paused&&Number(a.resets_left)>0),c=b.find(b=>b.id===a.next_grant_id)||b[0]||null;return{availableCount:b.reduce((a,b)=>a+Number(b.resets_left),0),nextGrantId:c?.id||null,expiresAt:c?.ends_at||null,clears:c?.clears||[],cooldownUntil:a.cooldown_until||null,weeklyResetsAt:a.weekly_resets_at||null,grants:a.grants.filter(a=>a?.id).map(a=>({id:a.id,label:a.label||"",resetsLeft:Number(a.resets_left)||0,resetsTotal:Number(a.resets_total)||0,startsAt:a.starts_at||null,endsAt:a.ends_at||null,clears:Array.isArray(a.clears)?a.clears:[],paused:!0===a.paused,usableNow:!0===a.usable_now,useRequiresLimit:!1!==a.use_requires_limit}))}}(a.cedar_ember),quotas:b}}return 429===e.status&&h.set(a,Date.now()+18e4),console.warn(`[Claude Usage] OAuth endpoint returned ${e.status}, falling back to legacy`),await m(a,b)}catch(a){return{message:`Claude connected. Unable to fetch usage: ${a.message}`}}}async function l(a,b,c=null){if(!a)throw Error("No Claude access token available. Please re-authorize the connection.");if(!/^[a-z0-9_-]{1,40}$/.test(b||""))throw Error("Invalid reset grant id.");let e={Authorization:`Bearer ${a}`,"anthropic-beta":"oauth-2025-04-20","anthropic-version":g.apiVersion,"User-Agent":g.userAgent,"Content-Type":"application/json"},f=await (0,d.proxyAwareFetch)(g.profileUrl,{method:"GET",headers:e},c),h=await f.json().catch(()=>null),j=h?.organization?.uuid;if(!f.ok||!j)throw Error(`Cannot resolve Claude organization (${f.status}).`);let k=await (0,d.proxyAwareFetch)(g.resetUrl.replace("{org_id}",j),{method:"POST",headers:e,body:JSON.stringify({program:"cedar_ember",grant_id:b,request_id:crypto.randomUUID()})},c),m=await k.json().catch(()=>null);return i.delete(a),{ok:k.ok&&m?.result==="reset",status:k.status,result:m?.result||null,reason:m?.reason||null,resetsLeft:m?.resets_left??null,message:m?.error?.message||null}}async function m(a,b=null){try{let c=await (0,d.proxyAwareFetch)(g.settingsUrl,{method:"GET",headers:{Authorization:`Bearer ${a}`,"anthropic-version":g.apiVersion}},b);if(c.ok){let e=await c.json();if(e.organization_id){let c=await (0,d.proxyAwareFetch)(g.usageUrl.replace("{org_id}",e.organization_id),{method:"GET",headers:{Authorization:`Bearer ${a}`,"anthropic-version":g.apiVersion}},b);if(c.ok){let a=await c.json();return{plan:e.plan||"Unknown",organization:e.organization_name,quotas:a}}}return{plan:e.plan||"Unknown",organization:e.organization_name,message:"Claude connected. Usage details require admin access."}}return{message:"Claude connected. Usage API requires admin permissions."}}catch(a){return{message:`Claude connected. Unable to fetch usage: ${a.message}`}}}},71998:(a,b,c)=>{c.d(b,{Fh:()=>d.Fh,L9:()=>d.L9,Mc:()=>d.Mc,OM:()=>d.OM,Pc:()=>d.Pc,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,Yd:()=>d.Yd,ZO:()=>d.ZO,c:()=>d.c,createProviderConnection:()=>d.iE,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.getProviderConnections,h1:()=>d.h1,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,o5:()=>d.o5,op:()=>d.op,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.updateProviderConnection,uv:()=>d.uv});var d=c(89718)},78661:(a,b,c)=>{function d(a){return"number"==typeof a&&Number.isFinite(a)?a<5?"red":a<20?"yellow":"green":"green"}c.d(b,{YO:()=>g});let e={green:0,yellow:1,red:2};function f(a){let b=String(a||"").toLowerCase();return b.includes("claude")||b.includes("gpt")?"claude_gpt":b.includes("gemini")?"gemini":null}function g(a,b={}){if(!a||"object"!=typeof a||!a.quotas)return null;let c=b?.family||null,h=Date.now(),i=1/0,j=null,k=null,l=1/0,m={period:1/0,remaining:null},n={period:-1/0,remaining:null},o={period:1/0,remaining:null},p={period:-1/0,remaining:null},q=0,r=0,s=(a,b)=>{let d,e;if(!b||"object"!=typeof b)return;if(c){let d=f(a)||f(b.name)||f(b.displayName);if(d&&d!==c)return}let g=b.resetAt??b.expiresAt,s=g?new Date(g).getTime():NaN,t=Number.isFinite(s),u=t&&s>h&&2099>=new Date(s).getFullYear();if((!0!==b.recurring||!0===b.giftPack)&&(d=Number(b.used??0),(e=Number(b.total??0))>0&&d>=e||void 0!==b.remaining&&0>=Number(b.remaining)||void 0!==b.remainingPercentage&&0>=Number(b.remainingPercentage)||0)||t&&!u)return;let v=function(a){if(!0===a.isCreditBalance)return null;if("number"==typeof a.remainingPercentage&&Number.isFinite(a.remainingPercentage))return a.remainingPercentage;let b=Number(a.used??0),c=Number(a.total??0);return c>0?100*Math.max(0,(c-b)/c):"number"==typeof a.remaining&&Number.isFinite(a.remaining)?a.remaining:null}(b),w=function(a){if(!a||!0===a.isCreditBalance)return!0;let b=a.resetAt??a.expiresAt;if(null==b||""===b)return!0;let c=new Date(b).getTime();return!Number.isFinite(c)||new Date(c).getFullYear()>2099}(b);if(!w&&u&&s<i&&(i=s,j=a,k=g instanceof Date?g.toISOString():String(g)),w||!u||null===v)return;q++;let x=!0===b.recurring&&"number"==typeof b.periodMs&&b.periodMs>0?b.periodMs:(b.recurring,Math.max(1,s-h));b?.recurring===!0?(r++,x<m.period&&(m.period=x,m.remaining=v),x>n.period&&(n.period=x,n.remaining=v)):(x<o.period&&(o.period=x,o.remaining=v),x>p.period&&(p.period=x,p.remaining=v)),v<l&&(l=v)};for(let[b,c]of Object.entries(a.quotas)){if(!c||"object"!=typeof c)continue;let a=b.toLowerCase();if(!(a.includes("total")||a.includes("aggregate")||a.includes("summary"))){if(Array.isArray(c.packs)&&c.packs.length>0){for(let a of c.packs)s(a?.name?`${b} \xb7 ${a.name}`:b,a);continue}s(b,c)}}if(i<1/0||Number.isFinite(l)||q>0){let a=r>0,b=a?m:o,f=a?n:p,g=b.remaining,h=f.remaining,s=null===g?null:d(g),t=null===h?null:d(h);return{expiry:k,name:j,timestamp:i<1/0?i:null,...Number.isFinite(l)?{remainingPercentage:l}:{},shortRemainingPct:g,longRemainingPct:h,shortZone:s,longZone:t,zone:null===s&&null===t?null:(e[s]??0)>=(e[t]??0)?s||"green":t||"green",windowCount:q,recurringWindowCount:r,windowSource:a?"recurring":"packs",family:c}}return null}},81756:(a,b,c)=>{c.d(b,{JA:()=>h});var d=c(55511),e=c.n(d),f=c(85081);function g(a,b=""){return e().createHash("sha256").update(a+b).digest("hex")}function h(a,b=null,c=!0){let d=a.includes("::")?a.split("::")[1]:a,i=b||g(d,"machineId"),j=(0,f.Ay)(d,f.Ay.DNS),k=g(d),l=function(a){let b=Math.floor(Date.now()/1e6),c=new Uint8Array([b>>40&255,b>>32&255,b>>24&255,b>>16&255,b>>8&255,255&b]),d=165;for(let a=0;a<c.length;a++)c[a]=(c[a]^d)+a%256&255,d=c[a];let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",f="";for(let a=0;a<c.length;a+=3){let b=c[a],d=a+1<c.length?c[a+1]:0,g=a+2<c.length?c[a+2]:0;f+=e[b>>2],f+=e[(3&b)<<4|d>>4],a+1<c.length&&(f+=e[(15&d)<<2|g>>6]),a+2<c.length&&(f+=e[63&g])}return`${f}${a}`}(i),m="linux";"u">typeof process&&("win32"===process.platform?m="windows":"darwin"===process.platform&&(m="macos"));let n="x64";return"u">typeof process&&"arm64"===process.arch&&(n="aarch64"),{authorization:`Bearer ${d}`,"connect-accept-encoding":"gzip","connect-protocol-version":"1","content-type":"application/connect+proto","user-agent":"connect-es/1.6.1","x-amzn-trace-id":`Root=${e().randomUUID()}`,"x-client-key":k,"x-cursor-checksum":l,"x-cursor-client-version":"3.12.17","x-cursor-client-commit":"0fb762053c34788bb7760d5673f8a6d4c8589d50","x-cursor-client-type":"ide","x-cursor-client-os":m,"x-cursor-client-arch":n,"x-cursor-client-device-type":"desktop","x-cursor-config-version":e().randomUUID(),"x-cursor-timezone":Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC","x-ghost-mode":c?"true":"false","x-request-id":e().randomUUID(),"x-session-id":j}}},87283:(a,b,c)=>{c.d(b,{c:()=>p,N:()=>n});var d=c(75924),e=c(74129),f=c(24295);let g=new Map,h=new Map;function i(a){let b=a||{};if(Array.isArray(b.groups))return b.groups;let c=b.quotaSummary?.groups;return Array.isArray(c)?c:[]}async function j(a,b,c,d,e=null,k={}){let l=(Array.isArray(c)?c:[c]).filter(Boolean);if(!a||!b||0===l.length)return null;let m=`${a.substring(0,16)}:${b||"default"}`,n=async c=>{let i=`${m}:${c}`,j=g.get(i);if(!k.forceRefresh&&j&&Date.now()-j.fetchedAt<6e4)return j.data;let l=h.get(i);if(void 0!==l)return l;let n=(async()=>{try{let h=await (0,f.u9)(c,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json","User-Agent":d,"X-Client-Name":"antigravity","X-Client-Version":d?.match(/antigravity\/ide\/([\d.]+)/)?.[1]||"2.11.0"},body:JSON.stringify({project:b})},1e4,e);if(!h.ok)return null;let j=await h.json();return g.set(i,{data:j,fetchedAt:Date.now()}),j}catch{return null}})().finally(()=>{h.delete(i)});return h.set(i,n),n};for(let a of l){let b=await n(a);if(b&&i(b).length>0)return b}return null}function k(a){let b=String(a?.window||"").toLowerCase().trim(),c=`${String(a?.bucketId||"")} ${String(a?.displayName||"")}`.toLowerCase(),d=a=>{let b=String(a||"").toLowerCase();return/5h|five[\s_-]?hour|hourly/.test(b)?"5h":/weekly|week/.test(b)?"weekly":null};return d(b)||d(c)}async function l(a,b,c,d,e=null,g={}){let h;return h={},i(await j(a,b,c,d,e,g)).forEach((a,b)=>{var c;if(!a||"object"!=typeof a)return;let d=Array.isArray(a.buckets)?a.buckets:[],e=(c=a.displayName,String(c||"").trim()||`Quota Group ${b+1}`),g=String(e||"").toLowerCase().replace(/\bmodels?\b/g,"").replace(/\band\b/g," ").replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||`group_${b+1}`,i=a=>{let b=k(a);return"5h"===b?0:"weekly"===b?1:2},j=new Set;for(let[a,b]of[...d].filter(a=>a&&"object"==typeof a).sort((a,b)=>i(a)-i(b)).entries()){let a=k(b);if(!a||j.has(a))continue;j.add(a);let c=function(a,b,c){let d=function(a){let b=Number(a?.remainingFraction);if(Number.isFinite(b))return b;let c=a?.remaining&&"object"==typeof a.remaining?Number(a.remaining.remainingFraction):NaN;return Number.isFinite(c)?c:NaN}(a);if(!Number.isFinite(d)||d<0||a?.disabled===!0)return null;let e=Math.max(0,Math.min(1,d)),g=(0,f.eZ)(a?.resetTime),h=!g&&e>=1,i=Math.round(100*e);return{used:h?0:Math.max(0,100-i),total:100*!h,resetAt:g,remainingPercentage:h?100:100*e,unlimited:h,recurring:!0,percentScale:!0,displayName:`${b} \xb7 ${"5h"===c?"5h Window":"Weekly Window"}`}}(b,e,a);c&&(h[`${g}_${a}`]=c)}}),h}let m={...(0,f.U)("antigravity"),...e.XP,userAgent:e.Of};async function n(a,b,c=null){if(!a)return{plan:"Free",message:"Gemini CLI access token not available."};try{let d=(0,f.gD)(b?.projectId),e="Free";if(!d){let b=await o(a,c);d=(0,f.gD)(b?.cloudaicompanionProject),e=b?.currentTier?.name||e}if(!d)return{plan:e,message:"Gemini CLI project ID not available. Reconnect Gemini CLI, or configure a Google Cloud project with Gemini Code Assist access before checking quota."};let g=await (0,f.u9)((0,f.U)("gemini-cli").quotaUrl,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify({project:d})},1e4,c);if(!g.ok)return{plan:e,message:`Gemini CLI quota error (${g.status}).`};let h=await g.json(),i={};if(Array.isArray(h.buckets))for(let a of h.buckets){if(!a.modelId||null==a.remainingFraction)continue;let b=Number(a.remainingFraction)||0,c=Math.round(1e3*b),d=Math.max(0,1e3-c);i[a.modelId]={used:d,total:1e3,resetAt:(0,f.eZ)(a.resetTime),remainingPercentage:100*b,unlimited:!1}}return{plan:e,quotas:i}}catch(a){return{message:`Gemini CLI error: ${a.message}`}}}async function o(a,b=null){try{let c=await (0,f.u9)((0,f.U)("gemini-cli").loadCodeAssistUrl,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify({metadata:d.Cn})},1e4,b);if(!c.ok)return null;return await c.json()}catch{return null}}async function p(a,b,c=null,d={}){try{let g=await q(a,c),h=(0,f.gD)(b?.projectId);h||(h=(0,f.gD)(g?.cloudaicompanionProject));let i=g?.currentTier?.name||"Antigravity";if(a&&h)try{let b=await l(a,h,(0,f.U)("antigravity").quotaSummaryApiUrls,m.userAgent,c,{forceRefresh:!0===d.force||!0===d.forceRefresh});if(b&&Object.keys(b).length>0)return{plan:i,quotas:b,subscriptionInfo:g}}catch(a){console.warn("[Antigravity Usage] Quota summary unavailable, falling back to models:",a?.message)}let j=await (0,f.u9)(m.quotaApiUrl,{method:"POST",headers:{Authorization:`Bearer ${a}`,"User-Agent":m.userAgent,"Content-Type":"application/json","X-Client-Name":"antigravity","X-Client-Version":e.Tr},body:JSON.stringify({...h?{project:h}:{}})},1e4,c);if(403===j.status)return{message:"Antigravity quota API access forbidden. Chat may still work.",quotas:{}};if(401===j.status)return{message:"Antigravity quota API authentication expired. Chat may still work.",quotas:{}};if(!j.ok)throw Error(`Antigravity API error: ${j.status}`);let k=await j.json(),n={};if(k.models){let a=["gemini-3.8-flash-high","gemini-3.8-flash-medium","gemini-3.8-flash-low","gemini-3.7-flash-high","gemini-3.7-flash-medium","gemini-3.7-flash-low","gemini-3.6-flash-high","gemini-3.6-flash-medium","gemini-3.6-flash-low","gemini-3.1-pro-high","gemini-pro-agent","gemini-3.1-pro-low","claude-sonnet-5-5-high","claude-sonnet-5-5-medium","claude-sonnet-5-5-low","claude-sonnet-5-5","claude-opus-5-5-high","claude-opus-5-5-medium","claude-opus-5-5-low","claude-opus-5-5","claude-sonnet-4-6","claude-opus-4-6-thinking","gpt-oss-120b-medium","gemini-3.1-flash-image","gemini-3-pro-image","gemini-2.5-flash-image","imagen-3.0-generate-002"];for(let[b,c]of Object.entries(k.models)){if(!c.quotaInfo||c.isInternal||!a.includes(b))continue;let d=c.quotaInfo.remainingFraction||0,e=100*d,g=Math.round(1e3*d),h=1e3-g;n[b]={used:h,total:1e3,resetAt:(0,f.eZ)(c.quotaInfo.resetTime),remainingPercentage:e,unlimited:!1,displayName:c.displayName||b}}}return{plan:i,quotas:n,subscriptionInfo:g}}catch(a){return console.error("[Antigravity Usage] Error:",a.message,a.cause),{message:`Antigravity error: ${a.message}`}}}async function q(a,b=null){try{let c=await (0,f.u9)(m.loadProjectApiUrl,{method:"POST",headers:{Authorization:`Bearer ${a}`,"User-Agent":m.userAgent,"Content-Type":"application/json"},body:JSON.stringify({metadata:d.Cn,mode:1})},1e4,b);if(!c.ok)return null;return await c.json()}catch(a){return console.error("[Antigravity Subscription] Error:",a.message),null}}}};
@@ -1,9 +0,0 @@
1
- "use strict";exports.id=9451,exports.ids=[9451],exports.modules={39451:(a,b,c)=>{c.d(b,{runMigrationOnce:()=>G});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(7841),i=c(76040);let j="stepfun",k="stepfun-cn";var l=c(34393),m=c(69128);let n=["mimoPassToken","mimoUserId","mimoCUserId"],o=new Set(["Xiaomi MiMo Desktop","Xiaomi MiMo Desktop Session"]),p="mimo-desktop-session";function q(a){if(!(0,l.ph)(a))return{ok:!0,value:a};try{return{ok:!0,value:(0,l.wu)(a)}}catch{return{ok:!1,value:a}}}function r(a){try{return JSON.parse(a.data||"{}")}catch{return null}}function s(a,b=null){let c=a?.providerSpecificData||{},d=q("string"==typeof a?.accessToken?a.accessToken:null),e="string"==typeof c.uid||"number"==typeof c.uid?String(c.uid):null,f="string"==typeof c.mimoUserId||"number"==typeof c.mimoUserId?String(c.mimoUserId):null,g=c.mimoPassToken;return{token:d.ok?d.value:null,uid:e,mu:f,email:"string"==typeof b&&b?b:null,hasSession:null!=g&&""!==g&&q(g).ok}}let t=[{version:1,name:"initial",up(a){for(let[b,c]of Object.entries(i.CG))for(let d of(a.exec((0,i.zE)(b,c)),c.indexes||[]))a.exec(d)}},{version:2,name:"stepfun-cn-rename",up(a){let b;for(let b of(a.run("UPDATE providerConnections SET provider = ? WHERE provider = ?",[k,j]),a.run("UPDATE kv SET key = ? WHERE scope = 'disabledModels' AND key = ?",[k,j]),["modelCaps","customModels"]))a.run("UPDATE kv SET key = ? || substr(key, ?) WHERE scope = ? AND key LIKE ?",[k,j.length+1,b,`${j}|%`]);let c=a.get("SELECT data FROM settings WHERE id = 1");if(!c?.data)return;try{b=JSON.parse(c.data)}catch{return}if(!b||"object"!=typeof b)return;let d=!1;if(Array.isArray(b.providerCardOrder)){let a=b.providerCardOrder.map(a=>a===j?k:a);a.some((a,c)=>a!==b.providerCardOrder[c])&&(b.providerCardOrder=a,d=!0)}for(let a of["topologyVisibility","providerStrategies"]){let c=b[a];c&&"object"==typeof c&&Object.prototype.hasOwnProperty.call(c,j)&&(k in c||(c[k]=c[j]),delete c[j],d=!0)}d&&a.run("UPDATE settings SET data = ? WHERE id = 1",[JSON.stringify(b)])}},{version:3,name:"encrypt-credentials",up(a){let b;try{b=a.all("SELECT id, data FROM providerConnections")}catch(a){console.warn("[migration] encrypt-credentials: could not read connections:",a?.message||a);return}let c=0,d=0;for(let e of b){let b;try{b=JSON.parse(e.data||"{}")}catch{continue}if((0,l.HG)(b))try{a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify((0,l.Wl)(b)),e.id]),c+=1}catch(a){1===(d+=1)&&console.warn("[migration] encrypt-credentials: could not encrypt a connection — credentials stay in plain text until they are rewritten:",a?.message||a)}}c&&console.log(`[migration] encrypt-credentials: encrypted ${c} connection row(s)`),d&&console.warn(`[migration] encrypt-credentials: ${d} row(s) left in plain text`)}},{version:4,name:"usage-apikey-digest",up(a){try{a.all("PRAGMA table_info(usageHistory)").map(a=>a.name).includes("apiKeyHash")||(a.exec("ALTER TABLE usageHistory ADD COLUMN apiKeyHash TEXT"),console.log("[migration] usage-apikey-digest: added usageHistory.apiKeyHash")),a.exec("CREATE INDEX IF NOT EXISTS idx_uh_apikey_hash ON usageHistory(apiKeyHash)")}catch(a){console.warn("[migration] usage-apikey-digest: could not ensure apiKeyHash column:",a?.message||a)}let b=0;try{for(let c of a.all("SELECT id, apiKey FROM usageHistory WHERE apiKey IS NOT NULL AND apiKey != ''"))(0,m.f0)(c.apiKey)||(a.run("UPDATE usageHistory SET apiKey = ?, apiKeyHash = ? WHERE id = ?",[(0,m.oO)(c.apiKey),(0,m.kk)(c.apiKey),c.id]),b+=1)}catch(a){console.warn("[migration] usage-apikey-digest: history rows skipped:",a?.message||a)}let c=0;try{for(let b of a.all("SELECT dateKey, data FROM usageDaily")){let d;try{d=JSON.parse(b.data||"{}")}catch{continue}let e=d?.byApiKey;if(!e||"object"!=typeof e)continue;let f={},g=!1;for(let[a,b]of Object.entries(e)){if(!b||"object"!=typeof b){f[a]=b;continue}let c="string"==typeof b.apiKey?b.apiKey:null;if(!c&&b.apiKeyHash||!c){f[a]=b;continue}let{apiKey:d,...e}=b,h=(0,m.kk)(c),i=a.split("|"),j=i.length>1?"|"+i.slice(1).join("|"):"";f[`${h||"local-no-key"}${j}`]={...e,apiKeyHash:h,apiKeyMasked:(0,m.oO)(c)},g=!0}g&&(a.run("UPDATE usageDaily SET data = ? WHERE dateKey = ?",[JSON.stringify({...d,byApiKey:f}),b.dateKey]),c+=1)}}catch(a){console.warn("[migration] usage-apikey-digest: daily aggregates skipped:",a?.message||a)}(b||c)&&console.log(`[migration] usage-apikey-digest: rewrote ${b} history row(s), ${c} day aggregate(s)`)}},{version:5,name:"strip-mimo-main-card-session",up(a){let b,c;try{b=a.all("SELECT id, email, data FROM providerConnections WHERE provider = 'xiaomi-mimo'"),c=a.all("SELECT id, email, data FROM providerConnections WHERE provider = 'mimo-desktop'")}catch(a){console.warn("[migration] strip-mimo-main-card-session: could not read connections:",a?.message||a);return}let d=c.map(a=>{let b=r(a);return b?s(b,a.email):null}).filter(Boolean),e=0,f=0,g=0,h=0;for(let c of b){let b=r(c);if(!b||"object"!=typeof b)continue;let i=b.providerSpecificData&&"object"==typeof b.providerSpecificData?b.providerSpecificData:{};if(!(n.some(a=>void 0!==i[a]&&null!==i[a]&&""!==i[a])||o.has(i.provider)||"desktop-session"===i.authMethod||"string"==typeof b.accessToken&&b.accessToken.startsWith(p)))continue;let j=q("string"==typeof b.accessToken?b.accessToken:null);if(!j.ok||i.mimoPassToken&&!q(i.mimoPassToken).ok){h+=1;continue}if(!("string"!=typeof j.value||""===j.value||j.value.startsWith(p))){let d=function(a){let b={...a};for(let a of n)delete b[a];return o.has(b.provider)&&delete b.provider,b}(i);"desktop-session"===d.authMethod&&(d.authMethod="api_key"),a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify((0,l.Wl)({...b,providerSpecificData:d})),c.id]),e+=1;continue}let k=s(b,c.email);if(d.find(a=>(!!a.token&&!!k.token&&a.token===k.token||!!a.uid&&!!k.uid&&a.uid===k.uid||!!a.mu&&!!k.mu&&a.mu===k.mu||!!a.uid&&!!k.mu&&a.uid===k.mu||!!a.mu&&!!k.uid&&a.mu===k.uid||!!a.email&&!!k.email&&a.email===k.email||!1)&&a.hasSession)){a.run("DELETE FROM providerConnections WHERE id = ?",[c.id]),g+=1;continue}a.run("UPDATE providerConnections SET provider = 'mimo-desktop', data = ? WHERE id = ?",[JSON.stringify((0,l.Wl)(b)),c.id]),f+=1}(e||f||g||h)&&console.log(`[migration] strip-mimo-main-card-session: stripped ${e} cloud row(s), moved ${f} session-only row(s) to mimo-desktop, removed ${g} duplicate row(s)`+(h?`, ${h} row(s) left untouched (undecryptable credentials)`:""))}},{version:6,name:"mimo-desktop-session-active",up(a){let b;try{b=a.all("SELECT id, data FROM providerConnections WHERE provider = 'mimo-desktop'")}catch(a){console.warn("[migration] mimo-desktop-session-active: could not read connections:",a?.message||a);return}for(let c of b)try{let b=JSON.parse(c.data);if("untested"!==b.testStatus)continue;b.testStatus="active",a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify(b),c.id])}catch{}}}].sort((a,b)=>a.version-b.version);var u=c(91117);let v=null;function w(){if(v)return v;try{let a=g().join(process.cwd(),"package.json");v=JSON.parse(e().readFileSync(a,"utf-8")).version||"0.0.0"}catch{v="0.0.0"}return v}let x=["requestDetails"];function y(a){(0,h.Jh)();let b=w(),c=`${a}-${b}-${function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}${b(a.getMonth()+1)}${b(a.getDate())}-${b(a.getHours())}${b(a.getMinutes())}${b(a.getSeconds())}`}()}`,d=g().join(h.KQ,c);return e().mkdirSync(d,{recursive:!0}),d}function z(){if(e().existsSync(h.KQ))for(let a of e().readdirSync(h.KQ,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>({name:a.name,full:g().join(h.KQ,a.name),mtime:e().statSync(g().join(h.KQ,a.name)).mtimeMs})).sort((a,b)=>b.mtime-a.mtime).slice(3))try{e().rmSync(a.full,{recursive:!0,force:!0})}catch{}}var A=c(33323);let B=g().join(h.HG,".migrated-from-json"),C=new WeakSet;class D extends Error{constructor(a,b){super(a),this.name="MigrationAborted",this.droppedRows=b}}function E(a,b,c,d,e){let f=[];for(let a of c)try{d(a)}catch(b){f.push({...e(a),reason:b.message})}let g=a.get(`SELECT COUNT(*) as c FROM ${b}`)?.c??0;if(g!==c.length)throw console.warn(`[DB][migrate] ${b} row-count mismatch: expected ${c.length}, got ${g}. Dropped:`,f),new D(`${b} row-count mismatch: expected ${c.length}, got ${g}`,f)}function F(a){if(!e().existsSync(a))return null;try{return JSON.parse(e().readFileSync(a,"utf-8"))}catch{return null}}async function G(a){if(C.has(a))return;C.add(a);let b=function(a){try{let b=a.get("SELECT COUNT(*) as c FROM _meta");return!b||0===b.c}catch{return!0}}(a);z(),a.exec((0,i.zE)("_meta",i.CG._meta));let c=parseInt((0,u.dy)(a,"backupSchemaVersion","0"),10)||0;if(!b&&c<i.f$)try{let b=y(`schema-${c}-to-${i.f$}`);!function(a,b,c="data.sqlite"){let d=g().join(b,c);try{e().rmSync(d,{force:!0})}catch{}let f=d.replace(/'/g,"''");a.exec(`ATTACH DATABASE '${f}' AS bak`);try{let b=new Set(x),c=a.all("SELECT name, sql FROM main.sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'").filter(a=>!b.has(a.name));a.transaction(()=>{for(let b of c){let c=b.sql.replace(/CREATE TABLE\s+/i,"CREATE TABLE bak.");a.exec(c),a.exec(`INSERT INTO bak.${b.name} SELECT * FROM main.${b.name}`)}})}finally{try{a.exec("DETACH DATABASE bak")}catch{}}}(a,b),z(),console.log(`[DB][migrate] pre-schema backup ${c} → ${i.f$}: ${b}`)}catch(a){console.warn(`[DB][migrate] pre-schema backup failed (continuing): ${a.message}`)}!function(a){a.exec((0,i.zE)("_meta",i.CG._meta));let b=parseInt((0,u.dy)(a,"schemaVersion","0"),10)||0;if(b>=(t.length?t[t.length-1].version:0))return;let c=t.filter(a=>a.version>b);for(let b of c)a.transaction(()=>{b.up(a),(0,u.np)(a,"schemaVersion",b.version)}),b.version,console.log(`[DB][migrate] applied #${b.version} ${b.name}`);c.length}(a);for(let[b,c]of Object.entries(i.CG)){a.exec((0,i.zE)(b,c));let d=new Set(a.all(`PRAGMA table_info(${b})`).map(a=>a.name));for(let[e,f]of Object.entries(c.columns))if(!d.has(e)){let c=f.replace(/PRIMARY KEY( AUTOINCREMENT)?/i,"").replace(/UNIQUE/i,"").trim();try{a.exec(`ALTER TABLE ${b} ADD COLUMN ${e} ${c}`),console.log(`[DB][sync] +column ${b}.${e}`)}catch(a){console.warn(`[DB][sync] add column ${b}.${e} failed: ${a.message}`)}}for(let b of c.indexes||[])try{a.exec(b)}catch{}}(0,u.np)(a,"backupSchemaVersion",i.f$);let d=e().existsSync(B),f=F(h.Or.main),j=F(h.Or.usage),k=F(h.Or.disabled),m=F(h.Or.details);if(b&&(f||j||k||m)&&!d){let b=Date.now(),c=y("migrate-from-json");for(let a of Object.values(h.Or))!function(a,b,c=null){if(!e().existsSync(a))return;let d=c||g().basename(a),f=g().join(b,d);e().copyFileSync(a,f)}(a,c);try{a.transaction(()=>{if(f&&"object"==typeof f){for(let[b,c]of(f.settings&&a.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,A.s)(f.settings)]),E(a,"providerConnections",f.providerConnections||[],b=>{let{id:c,provider:d,authType:e,name:f,email:g,priority:h,isActive:i,createdAt:j,updatedAt:k,...m}=b;a.run("INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[c,d,e||"oauth",f||null,g||null,h||null,+(!1!==i),(0,A.s)((0,l.Wl)(m)),j||new Date().toISOString(),k||new Date().toISOString()])},a=>({id:a.id??null,provider:a.provider??null,name:a.name??null})),E(a,"providerNodes",f.providerNodes||[],b=>{let{id:c,type:d,name:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,d||null,e||null,(0,A.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null,type:a.type??null,name:a.name??null})),E(a,"proxyPools",f.proxyPools||[],b=>{let{id:c,isActive:d,testStatus:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,+(!1!==d),e||"unknown",(0,A.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null})),E(a,"apiKeys",f.apiKeys||[],b=>{a.run("INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)",[b.id,b.key,b.name||null,b.machineId||null,+(!1!==b.isActive),b.createdAt||new Date().toISOString()])},a=>({id:a.id??null,name:a.name??null})),E(a,"combos",f.combos||[],b=>{a.run("INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[b.id,b.name,b.kind||null,(0,A.s)(b.models||[]),b.createdAt||new Date().toISOString(),b.updatedAt||new Date().toISOString()])},a=>({id:a.id??null,name:a.name??null})),Object.entries(f.modelAliases||{})))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)",[b,(0,A.s)(c)]);for(let b of f.customModels||[]){let c=`${b.providerAlias}|${b.id}|${b.type||"llm"}`;a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[c,(0,A.s)(b)])}for(let[b,c]of Object.entries(f.mitmAlias||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)",[b,(0,A.s)(c||{})]);for(let[b,c]of Object.entries(f.pricing||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)",[b,(0,A.s)(c||{})])}if(j&&"object"==typeof j){for(let b of j.history||[]){let c=b.tokens||{};a.run("INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[b.timestamp||new Date().toISOString(),b.provider||null,b.model||null,b.connectionId||null,b.apiKey||null,b.endpoint||null,c.prompt_tokens||c.input_tokens||0,c.completion_tokens||c.output_tokens||0,b.cost||0,b.status||"ok",(0,A.s)(c),(0,A.s)({})])}for(let[b,c]of Object.entries(j.dailySummary||{}))a.run("INSERT OR REPLACE INTO usageDaily(dateKey, data) VALUES(?, ?)",[b,(0,A.s)(c)]);"number"==typeof j.totalRequestsLifetime&&(0,u.np)(a,"totalRequestsLifetime",j.totalRequestsLifetime)}if(k&&"object"==typeof k.disabled)for(let[b,c]of Object.entries(k.disabled))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('disabledModels', ?, ?)",[b,(0,A.s)(c||[])]);if(m&&Array.isArray(m.records))for(let b of m.records)a.run("INSERT OR REPLACE INTO requestDetails(id, timestamp, provider, model, connectionId, status, data) VALUES(?, ?, ?, ?, ?, ?, ?)",[b.id,b.timestamp||new Date().toISOString(),b.provider||null,b.model||null,b.connectionId||null,b.status||null,(0,A.s)(b)]);(0,u.np)(a,"appVersion",w()),(0,u.np)(a,"backupSchemaVersion",i.f$),(0,u.np)(a,"migratedAt",new Date().toISOString())})}catch(a){if(a instanceof D)return void console.error(`[DB][migrate] aborted: ${a.message} | legacy JSON kept | backup: ${c}`);throw a}try{e().writeFileSync(B,new Date().toISOString())}catch{}z(),console.log(`[DB][migrate] JSON → SQLite in ${Date.now()-b}ms | legacy JSON kept at DATA_DIR | backup: ${c}`);return}let n=w();(0,u.dy)(a,"appVersion",null)!==n&&(0,u.np)(a,"appVersion",n)}},76040:(a,b,c)=>{c.d(b,{CG:()=>f,f$:()=>d,oG:()=>e,zE:()=>g});let d=3,e=`
2
- PRAGMA journal_mode = WAL;
3
- PRAGMA synchronous = NORMAL;
4
- PRAGMA temp_store = MEMORY;
5
- PRAGMA mmap_size = 30000000;
6
- PRAGMA cache_size = -64000;
7
- PRAGMA foreign_keys = ON;
8
- PRAGMA busy_timeout = 5000;
9
- `,f={_meta:{columns:{key:"TEXT PRIMARY KEY",value:"TEXT NOT NULL"}},settings:{columns:{id:"INTEGER PRIMARY KEY CHECK (id = 1)",data:"TEXT NOT NULL"}},providerConnections:{columns:{id:"TEXT PRIMARY KEY",provider:"TEXT NOT NULL",authType:"TEXT NOT NULL",name:"TEXT",email:"TEXT",priority:"INTEGER",isActive:"INTEGER DEFAULT 1",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)","CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)","CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"]},providerNodes:{columns:{id:"TEXT PRIMARY KEY",type:"TEXT",name:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"]},proxyPools:{columns:{id:"TEXT PRIMARY KEY",isActive:"INTEGER DEFAULT 1",testStatus:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)","CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"]},apiKeys:{columns:{id:"TEXT PRIMARY KEY",key:"TEXT UNIQUE NOT NULL",name:"TEXT",machineId:"TEXT",isActive:"INTEGER DEFAULT 1",dailyTokenLimit:"INTEGER",allowedModels:"TEXT",allowedCombos:"TEXT",createdAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"]},combos:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT UNIQUE NOT NULL",kind:"TEXT",models:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"]},kv:{columns:{scope:"TEXT NOT NULL",key:"TEXT NOT NULL",value:"TEXT NOT NULL"},primaryKey:"PRIMARY KEY (scope, key)",indexes:["CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"]},usageHistory:{columns:{id:"INTEGER PRIMARY KEY AUTOINCREMENT",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",apiKey:"TEXT",apiKeyHash:"TEXT",endpoint:"TEXT",promptTokens:"INTEGER DEFAULT 0",completionTokens:"INTEGER DEFAULT 0",cost:"REAL DEFAULT 0",status:"TEXT",tokens:"TEXT",meta:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)","CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)","CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)","CREATE INDEX IF NOT EXISTS idx_uh_apikey_hash ON usageHistory(apiKeyHash)"]},usageDaily:{columns:{dateKey:"TEXT PRIMARY KEY",data:"TEXT NOT NULL"}},requestDetails:{columns:{id:"TEXT PRIMARY KEY",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",status:"TEXT",data:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)","CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)","CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)"]}};function g(a,b){let c=Object.entries(b.columns).map(([a,b])=>`${a} ${b}`);return b.primaryKey&&c.push(b.primaryKey),`CREATE TABLE IF NOT EXISTS ${a} (${c.join(", ")})`}}};
@@ -1,9 +0,0 @@
1
- "use strict";exports.id=976,exports.ids=[976],exports.modules={2521:(a,b,c)=>{c.d(b,{f0:()=>h,kk:()=>g,oO:()=>f});var d=c(77598),e=c.n(d);function f(a){if(!a||"string"!=typeof a)return null;let b=a.trim();return b.length<=12?b.charAt(0)+"***":b.slice(0,8)+"***"+b.slice(-4)}function g(a){return a&&"string"==typeof a?e().createHash("sha256").update(a.trim()).digest("hex"):null}function h(a){return"string"==typeof a&&a.includes("***")}},20976:(a,b,c)=>{c.d(b,{runMigrationOnce:()=>G});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(95658),i=c(63775);let j="stepfun",k="stepfun-cn";var l=c(72082),m=c(2521);let n=["mimoPassToken","mimoUserId","mimoCUserId"],o=new Set(["Xiaomi MiMo Desktop","Xiaomi MiMo Desktop Session"]),p="mimo-desktop-session";function q(a){if(!(0,l.isEncrypted)(a))return{ok:!0,value:a};try{return{ok:!0,value:(0,l.decryptSecret)(a)}}catch{return{ok:!1,value:a}}}function r(a){try{return JSON.parse(a.data||"{}")}catch{return null}}function s(a,b=null){let c=a?.providerSpecificData||{},d=q("string"==typeof a?.accessToken?a.accessToken:null),e="string"==typeof c.uid||"number"==typeof c.uid?String(c.uid):null,f="string"==typeof c.mimoUserId||"number"==typeof c.mimoUserId?String(c.mimoUserId):null,g=c.mimoPassToken;return{token:d.ok?d.value:null,uid:e,mu:f,email:"string"==typeof b&&b?b:null,hasSession:null!=g&&""!==g&&q(g).ok}}let t=[{version:1,name:"initial",up(a){for(let[b,c]of Object.entries(i.CG))for(let d of(a.exec((0,i.zE)(b,c)),c.indexes||[]))a.exec(d)}},{version:2,name:"stepfun-cn-rename",up(a){let b;for(let b of(a.run("UPDATE providerConnections SET provider = ? WHERE provider = ?",[k,j]),a.run("UPDATE kv SET key = ? WHERE scope = 'disabledModels' AND key = ?",[k,j]),["modelCaps","customModels"]))a.run("UPDATE kv SET key = ? || substr(key, ?) WHERE scope = ? AND key LIKE ?",[k,j.length+1,b,`${j}|%`]);let c=a.get("SELECT data FROM settings WHERE id = 1");if(!c?.data)return;try{b=JSON.parse(c.data)}catch{return}if(!b||"object"!=typeof b)return;let d=!1;if(Array.isArray(b.providerCardOrder)){let a=b.providerCardOrder.map(a=>a===j?k:a);a.some((a,c)=>a!==b.providerCardOrder[c])&&(b.providerCardOrder=a,d=!0)}for(let a of["topologyVisibility","providerStrategies"]){let c=b[a];c&&"object"==typeof c&&Object.prototype.hasOwnProperty.call(c,j)&&(k in c||(c[k]=c[j]),delete c[j],d=!0)}d&&a.run("UPDATE settings SET data = ? WHERE id = 1",[JSON.stringify(b)])}},{version:3,name:"encrypt-credentials",up(a){let b;try{b=a.all("SELECT id, data FROM providerConnections")}catch(a){console.warn("[migration] encrypt-credentials: could not read connections:",a?.message||a);return}let c=0,d=0;for(let e of b){let b;try{b=JSON.parse(e.data||"{}")}catch{continue}if((0,l.connectionDataHasPlaintextSecrets)(b))try{a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify((0,l.encryptConnectionData)(b)),e.id]),c+=1}catch(a){1===(d+=1)&&console.warn("[migration] encrypt-credentials: could not encrypt a connection — credentials stay in plain text until they are rewritten:",a?.message||a)}}c&&console.log(`[migration] encrypt-credentials: encrypted ${c} connection row(s)`),d&&console.warn(`[migration] encrypt-credentials: ${d} row(s) left in plain text`)}},{version:4,name:"usage-apikey-digest",up(a){try{a.all("PRAGMA table_info(usageHistory)").map(a=>a.name).includes("apiKeyHash")||(a.exec("ALTER TABLE usageHistory ADD COLUMN apiKeyHash TEXT"),console.log("[migration] usage-apikey-digest: added usageHistory.apiKeyHash")),a.exec("CREATE INDEX IF NOT EXISTS idx_uh_apikey_hash ON usageHistory(apiKeyHash)")}catch(a){console.warn("[migration] usage-apikey-digest: could not ensure apiKeyHash column:",a?.message||a)}let b=0;try{for(let c of a.all("SELECT id, apiKey FROM usageHistory WHERE apiKey IS NOT NULL AND apiKey != ''"))(0,m.f0)(c.apiKey)||(a.run("UPDATE usageHistory SET apiKey = ?, apiKeyHash = ? WHERE id = ?",[(0,m.oO)(c.apiKey),(0,m.kk)(c.apiKey),c.id]),b+=1)}catch(a){console.warn("[migration] usage-apikey-digest: history rows skipped:",a?.message||a)}let c=0;try{for(let b of a.all("SELECT dateKey, data FROM usageDaily")){let d;try{d=JSON.parse(b.data||"{}")}catch{continue}let e=d?.byApiKey;if(!e||"object"!=typeof e)continue;let f={},g=!1;for(let[a,b]of Object.entries(e)){if(!b||"object"!=typeof b){f[a]=b;continue}let c="string"==typeof b.apiKey?b.apiKey:null;if(!c&&b.apiKeyHash||!c){f[a]=b;continue}let{apiKey:d,...e}=b,h=(0,m.kk)(c),i=a.split("|"),j=i.length>1?"|"+i.slice(1).join("|"):"";f[`${h||"local-no-key"}${j}`]={...e,apiKeyHash:h,apiKeyMasked:(0,m.oO)(c)},g=!0}g&&(a.run("UPDATE usageDaily SET data = ? WHERE dateKey = ?",[JSON.stringify({...d,byApiKey:f}),b.dateKey]),c+=1)}}catch(a){console.warn("[migration] usage-apikey-digest: daily aggregates skipped:",a?.message||a)}(b||c)&&console.log(`[migration] usage-apikey-digest: rewrote ${b} history row(s), ${c} day aggregate(s)`)}},{version:5,name:"strip-mimo-main-card-session",up(a){let b,c;try{b=a.all("SELECT id, email, data FROM providerConnections WHERE provider = 'xiaomi-mimo'"),c=a.all("SELECT id, email, data FROM providerConnections WHERE provider = 'mimo-desktop'")}catch(a){console.warn("[migration] strip-mimo-main-card-session: could not read connections:",a?.message||a);return}let d=c.map(a=>{let b=r(a);return b?s(b,a.email):null}).filter(Boolean),e=0,f=0,g=0,h=0;for(let c of b){let b=r(c);if(!b||"object"!=typeof b)continue;let i=b.providerSpecificData&&"object"==typeof b.providerSpecificData?b.providerSpecificData:{};if(!(n.some(a=>void 0!==i[a]&&null!==i[a]&&""!==i[a])||o.has(i.provider)||"desktop-session"===i.authMethod||"string"==typeof b.accessToken&&b.accessToken.startsWith(p)))continue;let j=q("string"==typeof b.accessToken?b.accessToken:null);if(!j.ok||i.mimoPassToken&&!q(i.mimoPassToken).ok){h+=1;continue}if(!("string"!=typeof j.value||""===j.value||j.value.startsWith(p))){let d=function(a){let b={...a};for(let a of n)delete b[a];return o.has(b.provider)&&delete b.provider,b}(i);"desktop-session"===d.authMethod&&(d.authMethod="api_key"),a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify((0,l.encryptConnectionData)({...b,providerSpecificData:d})),c.id]),e+=1;continue}let k=s(b,c.email);if(d.find(a=>(!!a.token&&!!k.token&&a.token===k.token||!!a.uid&&!!k.uid&&a.uid===k.uid||!!a.mu&&!!k.mu&&a.mu===k.mu||!!a.uid&&!!k.mu&&a.uid===k.mu||!!a.mu&&!!k.uid&&a.mu===k.uid||!!a.email&&!!k.email&&a.email===k.email||!1)&&a.hasSession)){a.run("DELETE FROM providerConnections WHERE id = ?",[c.id]),g+=1;continue}a.run("UPDATE providerConnections SET provider = 'mimo-desktop', data = ? WHERE id = ?",[JSON.stringify((0,l.encryptConnectionData)(b)),c.id]),f+=1}(e||f||g||h)&&console.log(`[migration] strip-mimo-main-card-session: stripped ${e} cloud row(s), moved ${f} session-only row(s) to mimo-desktop, removed ${g} duplicate row(s)`+(h?`, ${h} row(s) left untouched (undecryptable credentials)`:""))}},{version:6,name:"mimo-desktop-session-active",up(a){let b;try{b=a.all("SELECT id, data FROM providerConnections WHERE provider = 'mimo-desktop'")}catch(a){console.warn("[migration] mimo-desktop-session-active: could not read connections:",a?.message||a);return}for(let c of b)try{let b=JSON.parse(c.data);if("untested"!==b.testStatus)continue;b.testStatus="active",a.run("UPDATE providerConnections SET data = ? WHERE id = ?",[JSON.stringify(b),c.id])}catch{}}}].sort((a,b)=>a.version-b.version);var u=c(62674);let v=null;function w(){if(v)return v;try{let a=g().join(process.cwd(),"package.json");v=JSON.parse(e().readFileSync(a,"utf-8")).version||"0.0.0"}catch{v="0.0.0"}return v}let x=["requestDetails"];function y(a){(0,h.Jh)();let b=w(),c=`${a}-${b}-${function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}${b(a.getMonth()+1)}${b(a.getDate())}-${b(a.getHours())}${b(a.getMinutes())}${b(a.getSeconds())}`}()}`,d=g().join(h.KQ,c);return e().mkdirSync(d,{recursive:!0}),d}function z(){if(e().existsSync(h.KQ))for(let a of e().readdirSync(h.KQ,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>({name:a.name,full:g().join(h.KQ,a.name),mtime:e().statSync(g().join(h.KQ,a.name)).mtimeMs})).sort((a,b)=>b.mtime-a.mtime).slice(3))try{e().rmSync(a.full,{recursive:!0,force:!0})}catch{}}var A=c(644);let B=g().join(h.HG,".migrated-from-json"),C=new WeakSet;class D extends Error{constructor(a,b){super(a),this.name="MigrationAborted",this.droppedRows=b}}function E(a,b,c,d,e){let f=[];for(let a of c)try{d(a)}catch(b){f.push({...e(a),reason:b.message})}let g=a.get(`SELECT COUNT(*) as c FROM ${b}`)?.c??0;if(g!==c.length)throw console.warn(`[DB][migrate] ${b} row-count mismatch: expected ${c.length}, got ${g}. Dropped:`,f),new D(`${b} row-count mismatch: expected ${c.length}, got ${g}`,f)}function F(a){if(!e().existsSync(a))return null;try{return JSON.parse(e().readFileSync(a,"utf-8"))}catch{return null}}async function G(a){if(C.has(a))return;C.add(a);let b=function(a){try{let b=a.get("SELECT COUNT(*) as c FROM _meta");return!b||0===b.c}catch{return!0}}(a);z(),a.exec((0,i.zE)("_meta",i.CG._meta));let c=parseInt((0,u.dy)(a,"backupSchemaVersion","0"),10)||0;if(!b&&c<i.f$)try{let b=y(`schema-${c}-to-${i.f$}`);!function(a,b,c="data.sqlite"){let d=g().join(b,c);try{e().rmSync(d,{force:!0})}catch{}let f=d.replace(/'/g,"''");a.exec(`ATTACH DATABASE '${f}' AS bak`);try{let b=new Set(x),c=a.all("SELECT name, sql FROM main.sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'").filter(a=>!b.has(a.name));a.transaction(()=>{for(let b of c){let c=b.sql.replace(/CREATE TABLE\s+/i,"CREATE TABLE bak.");a.exec(c),a.exec(`INSERT INTO bak.${b.name} SELECT * FROM main.${b.name}`)}})}finally{try{a.exec("DETACH DATABASE bak")}catch{}}}(a,b),z(),console.log(`[DB][migrate] pre-schema backup ${c} → ${i.f$}: ${b}`)}catch(a){console.warn(`[DB][migrate] pre-schema backup failed (continuing): ${a.message}`)}!function(a){a.exec((0,i.zE)("_meta",i.CG._meta));let b=parseInt((0,u.dy)(a,"schemaVersion","0"),10)||0;if(b>=(t.length?t[t.length-1].version:0))return;let c=t.filter(a=>a.version>b);for(let b of c)a.transaction(()=>{b.up(a),(0,u.np)(a,"schemaVersion",b.version)}),b.version,console.log(`[DB][migrate] applied #${b.version} ${b.name}`);c.length}(a);for(let[b,c]of Object.entries(i.CG)){a.exec((0,i.zE)(b,c));let d=new Set(a.all(`PRAGMA table_info(${b})`).map(a=>a.name));for(let[e,f]of Object.entries(c.columns))if(!d.has(e)){let c=f.replace(/PRIMARY KEY( AUTOINCREMENT)?/i,"").replace(/UNIQUE/i,"").trim();try{a.exec(`ALTER TABLE ${b} ADD COLUMN ${e} ${c}`),console.log(`[DB][sync] +column ${b}.${e}`)}catch(a){console.warn(`[DB][sync] add column ${b}.${e} failed: ${a.message}`)}}for(let b of c.indexes||[])try{a.exec(b)}catch{}}(0,u.np)(a,"backupSchemaVersion",i.f$);let d=e().existsSync(B),f=F(h.Or.main),j=F(h.Or.usage),k=F(h.Or.disabled),m=F(h.Or.details);if(b&&(f||j||k||m)&&!d){let b=Date.now(),c=y("migrate-from-json");for(let a of Object.values(h.Or))!function(a,b,c=null){if(!e().existsSync(a))return;let d=c||g().basename(a),f=g().join(b,d);e().copyFileSync(a,f)}(a,c);try{a.transaction(()=>{if(f&&"object"==typeof f){for(let[b,c]of(f.settings&&a.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,A.s)(f.settings)]),E(a,"providerConnections",f.providerConnections||[],b=>{let{id:c,provider:d,authType:e,name:f,email:g,priority:h,isActive:i,createdAt:j,updatedAt:k,...m}=b;a.run("INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[c,d,e||"oauth",f||null,g||null,h||null,+(!1!==i),(0,A.s)((0,l.encryptConnectionData)(m)),j||new Date().toISOString(),k||new Date().toISOString()])},a=>({id:a.id??null,provider:a.provider??null,name:a.name??null})),E(a,"providerNodes",f.providerNodes||[],b=>{let{id:c,type:d,name:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,d||null,e||null,(0,A.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null,type:a.type??null,name:a.name??null})),E(a,"proxyPools",f.proxyPools||[],b=>{let{id:c,isActive:d,testStatus:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,+(!1!==d),e||"unknown",(0,A.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null})),E(a,"apiKeys",f.apiKeys||[],b=>{a.run("INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)",[b.id,b.key,b.name||null,b.machineId||null,+(!1!==b.isActive),b.createdAt||new Date().toISOString()])},a=>({id:a.id??null,name:a.name??null})),E(a,"combos",f.combos||[],b=>{a.run("INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[b.id,b.name,b.kind||null,(0,A.s)(b.models||[]),b.createdAt||new Date().toISOString(),b.updatedAt||new Date().toISOString()])},a=>({id:a.id??null,name:a.name??null})),Object.entries(f.modelAliases||{})))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)",[b,(0,A.s)(c)]);for(let b of f.customModels||[]){let c=`${b.providerAlias}|${b.id}|${b.type||"llm"}`;a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[c,(0,A.s)(b)])}for(let[b,c]of Object.entries(f.mitmAlias||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)",[b,(0,A.s)(c||{})]);for(let[b,c]of Object.entries(f.pricing||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)",[b,(0,A.s)(c||{})])}if(j&&"object"==typeof j){for(let b of j.history||[]){let c=b.tokens||{};a.run("INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[b.timestamp||new Date().toISOString(),b.provider||null,b.model||null,b.connectionId||null,b.apiKey||null,b.endpoint||null,c.prompt_tokens||c.input_tokens||0,c.completion_tokens||c.output_tokens||0,b.cost||0,b.status||"ok",(0,A.s)(c),(0,A.s)({})])}for(let[b,c]of Object.entries(j.dailySummary||{}))a.run("INSERT OR REPLACE INTO usageDaily(dateKey, data) VALUES(?, ?)",[b,(0,A.s)(c)]);"number"==typeof j.totalRequestsLifetime&&(0,u.np)(a,"totalRequestsLifetime",j.totalRequestsLifetime)}if(k&&"object"==typeof k.disabled)for(let[b,c]of Object.entries(k.disabled))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('disabledModels', ?, ?)",[b,(0,A.s)(c||[])]);if(m&&Array.isArray(m.records))for(let b of m.records)a.run("INSERT OR REPLACE INTO requestDetails(id, timestamp, provider, model, connectionId, status, data) VALUES(?, ?, ?, ?, ?, ?, ?)",[b.id,b.timestamp||new Date().toISOString(),b.provider||null,b.model||null,b.connectionId||null,b.status||null,(0,A.s)(b)]);(0,u.np)(a,"appVersion",w()),(0,u.np)(a,"backupSchemaVersion",i.f$),(0,u.np)(a,"migratedAt",new Date().toISOString())})}catch(a){if(a instanceof D)return void console.error(`[DB][migrate] aborted: ${a.message} | legacy JSON kept | backup: ${c}`);throw a}try{e().writeFileSync(B,new Date().toISOString())}catch{}z(),console.log(`[DB][migrate] JSON → SQLite in ${Date.now()-b}ms | legacy JSON kept at DATA_DIR | backup: ${c}`);return}let n=w();(0,u.dy)(a,"appVersion",null)!==n&&(0,u.np)(a,"appVersion",n)}},62674:(a,b,c)=>{c.d(b,{IQ:()=>e,RI:()=>h,dy:()=>i,iZ:()=>f,np:()=>j,vq:()=>g});var d=c(36366);async function e(a,b=null){let c=(await (0,d.cK)()).get("SELECT value FROM _meta WHERE key = ?",[a]);return c?c.value:b}async function f(a,b){(await (0,d.cK)()).run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[a,String(b)])}async function g(a){(await (0,d.cK)()).run("DELETE FROM _meta WHERE key = ?",[a])}async function h(a){return(await (0,d.cK)()).all("SELECT key, value FROM _meta WHERE key LIKE ?",[`${a}%`])}function i(a,b,c=null){let d=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return d?d.value:c}function j(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}},63775:(a,b,c)=>{c.d(b,{CG:()=>f,f$:()=>d,oG:()=>e,zE:()=>g});let d=3,e=`
2
- PRAGMA journal_mode = WAL;
3
- PRAGMA synchronous = NORMAL;
4
- PRAGMA temp_store = MEMORY;
5
- PRAGMA mmap_size = 30000000;
6
- PRAGMA cache_size = -64000;
7
- PRAGMA foreign_keys = ON;
8
- PRAGMA busy_timeout = 5000;
9
- `,f={_meta:{columns:{key:"TEXT PRIMARY KEY",value:"TEXT NOT NULL"}},settings:{columns:{id:"INTEGER PRIMARY KEY CHECK (id = 1)",data:"TEXT NOT NULL"}},providerConnections:{columns:{id:"TEXT PRIMARY KEY",provider:"TEXT NOT NULL",authType:"TEXT NOT NULL",name:"TEXT",email:"TEXT",priority:"INTEGER",isActive:"INTEGER DEFAULT 1",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)","CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)","CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"]},providerNodes:{columns:{id:"TEXT PRIMARY KEY",type:"TEXT",name:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"]},proxyPools:{columns:{id:"TEXT PRIMARY KEY",isActive:"INTEGER DEFAULT 1",testStatus:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)","CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"]},apiKeys:{columns:{id:"TEXT PRIMARY KEY",key:"TEXT UNIQUE NOT NULL",name:"TEXT",machineId:"TEXT",isActive:"INTEGER DEFAULT 1",dailyTokenLimit:"INTEGER",allowedModels:"TEXT",allowedCombos:"TEXT",createdAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"]},combos:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT UNIQUE NOT NULL",kind:"TEXT",models:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"]},kv:{columns:{scope:"TEXT NOT NULL",key:"TEXT NOT NULL",value:"TEXT NOT NULL"},primaryKey:"PRIMARY KEY (scope, key)",indexes:["CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"]},usageHistory:{columns:{id:"INTEGER PRIMARY KEY AUTOINCREMENT",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",apiKey:"TEXT",apiKeyHash:"TEXT",endpoint:"TEXT",promptTokens:"INTEGER DEFAULT 0",completionTokens:"INTEGER DEFAULT 0",cost:"REAL DEFAULT 0",status:"TEXT",tokens:"TEXT",meta:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)","CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)","CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)","CREATE INDEX IF NOT EXISTS idx_uh_apikey_hash ON usageHistory(apiKeyHash)"]},usageDaily:{columns:{dateKey:"TEXT PRIMARY KEY",data:"TEXT NOT NULL"}},requestDetails:{columns:{id:"TEXT PRIMARY KEY",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",status:"TEXT",data:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)","CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)","CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)"]}};function g(a,b){let c=Object.entries(b.columns).map(([a,b])=>`${a} ${b}`);return b.primaryKey&&c.push(b.primaryKey),`CREATE TABLE IF NOT EXISTS ${a} (${c.join(", ")})`}},72082:(a,b,c)=>{c.r(b),c.d(b,{CONNECTION_SECRET_FIELDS:()=>n,CredentialCryptoError:()=>q,UNREADABLE_CREDENTIALS_KEY:()=>z,connectionDataHasPlaintextSecrets:()=>D,decryptConnectionData:()=>B,decryptSecret:()=>v,encryptConnectionData:()=>y,encryptSecret:()=>u,getCredentialKey:()=>s,hasUnreadableCredentials:()=>A,isEncrypted:()=>r,resetCredentialKeyCache:()=>t,restoreUnreadableCredentials:()=>C});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(49120),k=c(77134);let l="enc:v1:",m="aes-256-gcm",n=["accessToken","refreshToken","idToken","apiKey"],o=/(token|secret|password|cookie|credential|api[-_]?key|proxyurl)/i,p=null;class q extends Error{constructor(a){super(a),this.name="CredentialCryptoError"}}function r(a){return"string"==typeof a&&a.startsWith(l)}function s(){if(p)return p;let a=process.env.CREDENTIAL_SECRET;if("string"==typeof a&&a.trim())return p=e().createHash("sha256").update(a.trim()).digest();let b=i().join(j.nJ,"credential-key");try{let a=g().readFileSync(b,"utf8").trim();if(a)return p=e().createHash("sha256").update(a).digest()}catch{}g().mkdirSync(j.nJ,{recursive:!0});let c=e().randomBytes(32).toString("hex");return g().writeFileSync(b,c,{mode:384}),(0,k.E)(b),p=e().createHash("sha256").update(c).digest()}function t(){p=null}function u(a){if("string"!=typeof a||""===a||r(a))return a;let b=e().randomBytes(12),c=e().createCipheriv(m,s(),b),d=Buffer.concat([c.update(a,"utf8"),c.final()]);return`${l}${b.toString("base64url")}:${c.getAuthTag().toString("base64url")}:${d.toString("base64url")}`}function v(a){if("string"!=typeof a||!r(a))return a;let b=a.slice(l.length).split(":");if(3!==b.length)throw new q("stored credential is malformed");let[c,d,f]=b;try{let a=e().createDecipheriv(m,s(),Buffer.from(c,"base64url"));return a.setAuthTag(Buffer.from(d,"base64url")),Buffer.concat([a.update(Buffer.from(f,"base64url")),a.final()]).toString("utf8")}catch{throw new q("stored credential cannot be decrypted with the current key")}}function w(a){return a&&"object"==typeof a?Object.keys(a).filter(b=>o.test(b)&&"string"==typeof a[b]):[]}function x(a){return w(a).filter(b=>""!==a[b])}function y(a){if(!a||"object"!=typeof a)return a;let b={...a};for(let a of n)"string"==typeof b[a]&&(b[a]=u(b[a]));let c=w(b.providerSpecificData);if(c.length){let a={...b.providerSpecificData};for(let b of c)a[b]=u(a[b]);b.providerSpecificData=a}return b}let z="__unreadableCredentials";function A(a){return!!(a&&"object"==typeof a&&a[z])}function B(a){if(!a||"object"!=typeof a)return{data:a,error:null,unreadable:null};let b={...a},c=null,d=null,e=(a,b,c)=>{d||(d={}),d[a]||(d[a]={}),d[a][b]=c};for(let a of n)if(r(b[a]))try{b[a]=v(b[a])}catch(d){e("fields",a,b[a]),delete b[a],c=d.message}let f=x(b.providerSpecificData).filter(a=>r(b.providerSpecificData[a]));if(f.length){let a={...b.providerSpecificData};for(let b of f)try{a[b]=v(a[b])}catch(d){e("providerSpecificData",b,a[b]),delete a[b],c=d.message}b.providerSpecificData=a}return{data:b,error:c,unreadable:d}}function C(a){if(!a||"object"!=typeof a||!a[z])return a;let{[z]:b,...c}=a,d=a=>null==a||""===a;for(let[a,e]of Object.entries(b.fields||{}))d(c[a])&&(c[a]=e);let e=b.providerSpecificData||{};if(Object.keys(e).length){let a={...c.providerSpecificData||{}};for(let[b,c]of Object.entries(e))d(a[b])&&(a[b]=c);c.providerSpecificData=a}let f=b.synthesized;return f&&(c.testStatus===f.testStatus&&delete c.testStatus,c.lastError===f.lastError&&delete c.lastError),c}function D(a){if(!a||"object"!=typeof a)return!1;for(let b of n)if("string"==typeof a[b]&&""!==a[b]&&!r(a[b]))return!0;return x(a.providerSpecificData).some(b=>!r(a.providerSpecificData[b]))}},77134:(a,b,c)=>{c.d(b,{E:()=>i});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(31421);function i(a){if(a){if("win32"===process.platform){try{let b=[process.env.USERDOMAIN,process.env.USERNAME].filter(Boolean).join("\\")||g().userInfo().username;(0,h.execFileSync)("icacls",[a,"/inheritance:r","/grant:r",`${b}:(F)`],{stdio:"ignore",windowsHide:!0})}catch(b){console.warn(`⚠️ Could not restrict ACLs on ${a}: ${b.message}`)}return}try{e().chmodSync(a,384)}catch(b){console.warn(`⚠️ Could not restrict permissions on ${a}: ${b.message}`)}}}}};