@jheavenknows/bluerouter 5.3.51 → 5.3.52

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 (483) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +8 -8
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page.js.nft.json +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page.js.nft.json +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page.js.nft.json +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page.js.nft.json +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page_client-reference-manifest.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/page.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/page_client-reference-manifest.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  78. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  80. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  81. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  82. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  83. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  84. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  85. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  87. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  88. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  89. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  90. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
  91. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  92. package/app/.next-cli-build/server/app/api/audit-proxy/ca/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/audit-proxy/route.js +5 -5
  94. package/app/.next-cli-build/server/app/api/audit-proxy/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/view-mode/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cluster/config/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cluster/peers/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cluster/sync/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/cluster/test/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/dashboard/ai-power-index/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/config/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/live/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/oauth/grok-cli/device-code/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/oauth/grok-cli/poll/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/move/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/personal-cloud-providers/shares/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/pricing/catalog/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/provider-nodes/openai-compatible/manage/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  213. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +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.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/resource-monitor/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  241. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  285. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  290. package/app/.next-cli-build/server/app/callback.html +1 -1
  291. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  292. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  293. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  294. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
  295. package/app/.next-cli-build/server/app/dashboard/ai-power-index.html +1 -1
  296. package/app/.next-cli-build/server/app/dashboard/ai-power-index.rsc +6 -6
  297. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index/__PAGE__.segment.rsc +6 -6
  298. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_full.segment.rsc +6 -6
  299. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_tree.segment.rsc +1 -1
  300. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +9 -9
  302. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +9 -9
  303. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +9 -9
  304. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/audit-proxy.html +1 -1
  306. package/app/.next-cli-build/server/app/dashboard/audit-proxy.rsc +6 -6
  307. package/app/.next-cli-build/server/app/dashboard/audit-proxy.segments/!KGRhc2hib2FyZCk/dashboard/audit-proxy/__PAGE__.segment.rsc +6 -6
  308. package/app/.next-cli-build/server/app/dashboard/audit-proxy.segments/_full.segment.rsc +6 -6
  309. package/app/.next-cli-build/server/app/dashboard/audit-proxy.segments/_tree.segment.rsc +1 -1
  310. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  311. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
  312. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +7 -7
  313. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
  314. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  315. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.html +1 -1
  316. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.rsc +7 -7
  317. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles/__PAGE__.segment.rsc +7 -7
  318. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_full.segment.rsc +7 -7
  319. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_tree.segment.rsc +1 -1
  320. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  321. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  322. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +7 -7
  323. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  324. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  325. package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
  326. package/app/.next-cli-build/server/app/dashboard/cluster.rsc +6 -6
  327. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +6 -6
  328. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +6 -6
  329. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +1 -1
  330. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  331. package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
  332. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +7 -7
  333. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  334. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  335. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  337. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
  338. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  339. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  340. package/app/.next-cli-build/server/app/dashboard/local-ai-report.html +1 -1
  341. package/app/.next-cli-build/server/app/dashboard/local-ai-report.rsc +6 -6
  342. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report/__PAGE__.segment.rsc +6 -6
  343. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_full.segment.rsc +6 -6
  344. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_tree.segment.rsc +1 -1
  345. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  346. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
  347. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +7 -7
  348. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
  349. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  351. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +7 -7
  352. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +7 -7
  353. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -7
  354. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  356. package/app/.next-cli-build/server/app/dashboard/profile.rsc +7 -7
  357. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +7 -7
  358. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
  359. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  360. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  361. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
  362. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +6 -6
  363. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
  364. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
  367. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +6 -6
  368. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
  369. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
  370. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  371. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
  372. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +7 -7
  373. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  374. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
  377. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +7 -7
  378. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  379. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  381. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
  382. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +7 -7
  383. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  384. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  385. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
  387. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +8 -8
  388. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  389. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  390. package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
  391. package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +6 -6
  392. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +6 -6
  393. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +6 -6
  394. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +1 -1
  395. package/app/.next-cli-build/server/app/dashboard/routing-topology.html +1 -1
  396. package/app/.next-cli-build/server/app/dashboard/routing-topology.rsc +6 -6
  397. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/!KGRhc2hib2FyZCk/dashboard/routing-topology/__PAGE__.segment.rsc +6 -6
  398. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_full.segment.rsc +6 -6
  399. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_tree.segment.rsc +1 -1
  400. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  401. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
  402. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  403. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  404. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  405. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  406. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  407. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +7 -7
  408. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  409. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  410. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  411. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
  412. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
  413. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  414. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  415. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  416. package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
  417. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +7 -7
  418. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
  419. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  420. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/usage.rsc +7 -7
  422. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +7 -7
  423. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  424. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  425. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  426. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  427. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +7 -7
  428. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  429. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  430. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  431. package/app/.next-cli-build/server/app/index.html +1 -1
  432. package/app/.next-cli-build/server/app/index.rsc +5 -5
  433. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  434. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  435. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  436. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  437. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  438. package/app/.next-cli-build/server/app/landing.html +1 -1
  439. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  440. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  441. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  442. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
  443. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  444. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  445. package/app/.next-cli-build/server/app/login.html +1 -1
  446. package/app/.next-cli-build/server/app/login.rsc +6 -6
  447. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
  448. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  449. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  450. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  451. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  452. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  453. package/app/.next-cli-build/server/app-paths-manifest.json +8 -8
  454. package/app/.next-cli-build/server/chunks/1350.js +1 -1
  455. package/app/.next-cli-build/server/chunks/2664.js +1 -1
  456. package/app/.next-cli-build/server/chunks/2731.js +1 -1
  457. package/app/.next-cli-build/server/chunks/3031.js +1 -1
  458. package/app/.next-cli-build/server/chunks/3484.js +1 -1
  459. package/app/.next-cli-build/server/chunks/3958.js +61 -0
  460. package/app/.next-cli-build/server/chunks/3960.js +1 -0
  461. package/app/.next-cli-build/server/chunks/476.js +3 -3
  462. package/app/.next-cli-build/server/chunks/4790.js +2 -2
  463. package/app/.next-cli-build/server/chunks/5210.js +1 -1
  464. package/app/.next-cli-build/server/chunks/564.js +1 -1
  465. package/app/.next-cli-build/server/chunks/6118.js +1 -1
  466. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  467. package/app/.next-cli-build/server/chunks/6811.js +1 -1
  468. package/app/.next-cli-build/server/chunks/689.js +186 -2
  469. package/app/.next-cli-build/server/chunks/6992.js +1 -1
  470. package/app/.next-cli-build/server/chunks/7639.js +1 -1
  471. package/app/.next-cli-build/server/chunks/814.js +2 -2
  472. package/app/.next-cli-build/server/chunks/9483.js +1 -1
  473. package/app/.next-cli-build/server/instrumentation.js +1 -1
  474. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  475. package/app/.next-cli-build/server/pages/404.html +1 -1
  476. package/app/.next-cli-build/server/pages/500.html +1 -1
  477. package/app/.next-cli-build/static/chunks/{5263-a4be856dc2147222.js → 5263-35c73f0b817c46e3.js} +1 -1
  478. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.3.46-to-5.3.47-5.3.47-20260822-172255 → upgrade-5.3.49-to-5.3.50-5.3.50-20260822-195035}/data.sqlite +0 -0
  479. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
  480. package/app/package.json +1 -1
  481. package/package.json +1 -1
  482. /package/app/.next-cli-build/static/{PXcKGLgd2EewsleTzBWlp → cL_-1gM7FlzGO8vClv9AE}/_buildManifest.js +0 -0
  483. /package/app/.next-cli-build/static/{PXcKGLgd2EewsleTzBWlp → cL_-1gM7FlzGO8vClv9AE}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=6811,exports.ids=[6811],exports.modules={15626:(a,b,c)=>{c.d(b,{w$:()=>e});let d=c(39006).rE||"0.0.0";function e(a,b={}){let c,f=(c=function(a){if("string"!=typeof a)return"";let b=a.trim();return b?b.startsWith("workos:")?b:`workos:${b}`:""}(a))?`Bearer ${c}`:"",g={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","User-Agent":`Bluerouter/${d}`,"X-PLATFORM":process.platform||"unknown","X-PLATFORM-VERSION":process.version||"unknown","X-CLIENT-TYPE":"bluerouter","X-CLIENT-VERSION":d,"X-CORE-VERSION":d,"X-IS-MULTIROOT":"false",...b};return f&&(g.Authorization=f),g}},30869:(a,b,c)=>{c.d(b,{UY:()=>h,X3:()=>i,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g});var d=c(39006),e=c(75681),f=c(81329);d.rE;let g={npmPackageName:"@jheavenknows/bluerouter",installCmd:"npm i -g @jheavenknows/bluerouter",installCmdLatest:"npm install -g @jheavenknows/bluerouter@latest",shutdownCountdownSec:3,exitDelayMs:500,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,appPort:20128},h={maxLines:200,pollIntervalMs:1e3},i={openrouter:"https://openrouter.ai/api/v1/chat/completions",glm:"https://api.z.ai/api/anthropic/v1/messages","glm-cn":"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",kimi:"https://api.kimi.com/coding/v1/messages",minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages",alicode:"https://coding.dashscope.aliyuncs.com/v1/chat/completions","alicode-intl":"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions","alims-intl":"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions","volcengine-ark":"https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions",byteplus:"https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions",openai:"https://api.openai.com/v1/chat/completions","vercel-ai-gateway":"https://ai-gateway.vercel.sh/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages",gemini:"https://generativelanguage.googleapis.com/v1beta/models",ollama:"https://ollama.com/api/chat","ollama-local":"http://localhost:11434/api/chat"}},39006:a=>{a.exports={rE:"5.3.50"}},66811:(a,b,c)=>{c.d(b,{F:()=>s});var d=c(89718),e=c(39326),f=c(74926),g=c(75681),h=c(30869),i=c(44404),j=c(35024),k=c(92990),l=c(15626);let m={claude:{checkExpiry:!0,refreshable:!0},codex:{url:"https://chatgpt.com/backend-api/codex/responses",method:"POST",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"Content-Type":"application/json",originator:"codex-cli","User-Agent":"codex-cli/1.0.18 (macOS; arm64)"},body:JSON.stringify({model:"gpt-5.3-codex",input:[],stream:!1,store:!1}),acceptStatuses:[400],refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"Bluerouter",Accept:"application/vnd.github+json"}},iflow:{buildUrl:a=>`https://iflow.cn/api/oauth/getUserInfo?accessToken=${encodeURIComponent(a)}`,method:"GET",noAuth:!0},qwen:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0},"kimi-coding":{checkExpiry:!0,refreshable:!1},cursor:{tokenExists:!0},kilocode:{url:`${k.MZ.apiBaseUrl}/api/profile`,method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},cline:{refreshable:!0},gitlab:{url:"https://gitlab.com/api/v4/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},codebuddy:{tokenExists:!0}};async function n(a){return await fetch("https://api.cline.bot/api/v1/users/me",{method:"GET",headers:(0,l.w$)(a,{Accept:"application/json"})})}async function o(a){let b=a.provider,c=a.refreshToken;if(!c)return null;try{if("gemini-cli"===b||"antigravity"===b){let a="gemini-cli"===b?k.LT:k.YT,d=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:a.clientId,client_secret:a.clientSecret,grant_type:"refresh_token",refresh_token:c})});if(!d.ok)return null;let e=await d.json();return{accessToken:e.access_token,expiresIn:e.expires_in,refreshToken:e.refresh_token||c}}if("codex"===b){let a=await fetch(k.DI.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",client_id:k.DI.clientId,refresh_token:c})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("claude"===b){let a=await fetch(k.OV.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:c,client_id:k.OV.clientId})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("kiro"===b){let b=a.providerSpecificData||{},d=b.clientId||a.clientId,e=b.clientSecret||a.clientSecret,f=b.region||a.region;if(d&&e){let a=`https://oidc.${f||"us-east-1"}.amazonaws.com/token`,b=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:d,clientSecret:e,refreshToken:c,grantType:"refresh_token"})});if(!b.ok)return null;let g=await b.json();return{accessToken:g.accessToken,expiresIn:g.expiresIn||3600,refreshToken:g.refreshToken||c}}let g=await fetch(k.Tx.socialRefreshUrl,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"kiro-cli/1.0.0"},body:JSON.stringify({refreshToken:c})});if(!g.ok)return null;let h=await g.json();return{accessToken:h.accessToken,expiresIn:h.expiresIn||3600,refreshToken:h.refreshToken||c}}if("qwen"===b){let a=await fetch(k.Hp.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:c,client_id:k.Hp.clientId})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("cline"===b){let a=await fetch(k.lB.refreshUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:c,grantType:"refresh_token",clientType:"extension"})});if(!a.ok)return null;let b=await a.json(),d=b?.data||b,e=d?.expiresAt?Math.max(1,Math.floor((new Date(d.expiresAt).getTime()-Date.now())/1e3)):3600;return{accessToken:d?.accessToken,expiresIn:e,refreshToken:d?.refreshToken||c}}return null}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}async function p(a,b=null){var c;let d=m[a.provider];if(!d)return{valid:!1,error:"Provider test not supported",refreshed:!1};if(!a.accessToken)return{valid:!1,error:"No access token",refreshed:!1};if(d.tokenExists)return{valid:!0,error:null,refreshed:!1,newTokens:null};let e=a.accessToken,f=!1,g=null,h=!!(c=a).expiresAt&&new Date(c.expiresAt).getTime()<=Date.now()+3e5;if(d.refreshable&&h&&a.refreshToken){let b=await o(a);if(!b)return{valid:!1,error:"Token expired and refresh failed",refreshed:!1};e=b.accessToken,f=!0,g=b}if(d.checkExpiry)return f?{valid:!0,error:null,refreshed:f,newTokens:g}:h?{valid:!1,error:"Token expired",refreshed:!1}:{valid:!0,error:null,refreshed:!1,newTokens:null};if("cline"===a.provider){let b=async a=>{let b=await n(a);return b.ok?{valid:!0,error:null,refreshed:f,newTokens:g}:401===b.status?{valid:!1,error:"Token invalid or revoked",refreshed:f}:403===b.status?{valid:!1,error:"Access denied",refreshed:f}:{valid:!1,error:`API returned ${b.status}`,refreshed:f}},c=await b(e);if(c.valid||"Token invalid or revoked"!==c.error||!a.refreshToken)return c;let d=await o(a);return d?.accessToken?(f=!0,g=d,e=d.accessToken,await b(e)):{valid:!1,error:"Token invalid or revoked",refreshed:!1}}try{let c=d.buildUrl?d.buildUrl(e):d.url,h=d.noAuth?{...d.extraHeaders}:{[d.authHeader]:`${d.authPrefix}${e}`,...d.extraHeaders},i={method:d.method,headers:h};d.body&&(i.body=d.body);let j=await q(c,i,b);if(j.ok||d.acceptStatuses&&d.acceptStatuses.includes(j.status))return{valid:!0,error:null,refreshed:f,newTokens:g};if(401===j.status&&d.refreshable&&!f&&a.refreshToken){let e=await o(a);if(e){let a=d.buildUrl?d.buildUrl(e.accessToken):c,f=d.noAuth?{...d.extraHeaders}:{[d.authHeader]:`${d.authPrefix}${e.accessToken}`,...d.extraHeaders},g={method:d.method,headers:f};d.body&&(g.body=d.body);let h=await q(a,g,b);if(h.ok||d.acceptStatuses&&d.acceptStatuses.includes(h.status))return{valid:!0,error:null,refreshed:!0,newTokens:e}}return{valid:!1,error:"Token invalid or revoked",refreshed:!1}}if(401===j.status)return{valid:!1,error:"Token invalid or revoked",refreshed:f};if(403===j.status)return{valid:!1,error:"Access denied",refreshed:f};return{valid:!1,error:`API returned ${j.status}`,refreshed:f}}catch(a){return{valid:!1,error:a.message,refreshed:f}}}async function q(a,b={},d=null){if(d?.vercelRelayUrl){let{proxyAwareFetch:e}=await c.e(9609).then(c.bind(c,39609));return e(a,b,{vercelRelayUrl:d.vercelRelayUrl})}if(!d?.connectionProxyEnabled||!d?.connectionProxyUrl)return fetch(a,b);let{proxyAwareFetch:e}=await c.e(9609).then(c.bind(c,39609));return e(a,b,{connectionProxyEnabled:!0,connectionProxyUrl:d.connectionProxyUrl,connectionNoProxy:d.connectionNoProxy||""})}async function r(a,b=null){if((0,g.mq)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{let d=await q(`${c.replace(/\/$/,"")}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}if((0,g.gb)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{(c=c.replace(/\/$/,"")).endsWith("/messages")&&(c=c.slice(0,-9));let d=await q(`${c}/models`,{headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01",Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}try{switch(a.provider){case"cloudflare-ai":{let c=(a.providerSpecificData||{}).accountId;if(!c)return{valid:!1,error:"Missing Account ID"};let d=`https://api.cloudflare.com/client/v4/accounts/${c}/ai/v1/chat/completions`,e=await q(d,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({model:(0,i.fZ)("cloudflare-ai"),messages:[{role:"user",content:"test"}],max_tokens:1})},b),f=401!==e.status&&403!==e.status&&404!==e.status;return{valid:f,error:f?null:"Invalid API token or Account ID"}}case"azure":{let c=a.providerSpecificData||{},d=(c.azureEndpoint||"").replace(/\/$/,""),e=c.deployment||"gpt-4",f=c.apiVersion||"2024-10-01-preview",g=`${d}/openai/deployments/${e}/chat/completions?api-version=${f}`,h={"api-key":a.apiKey,"Content-Type":"application/json"};c.organization&&(h["OpenAI-Organization"]=c.organization);let i=await q(g,{method:"POST",headers:h,body:JSON.stringify({messages:[{role:"user",content:"test"}],max_completion_tokens:1})},b),j=401!==i.status&&403!==i.status;return{valid:j,error:j?null:"Invalid API key or Azure configuration"}}case"openai":{let c=await q("https://api.openai.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"vercel-ai-gateway":{let c=await q("https://ai-gateway.vercel.sh/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"anthropic":{let c=await q("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"claude-3-haiku-20240307",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"gemini":{let c=await q(`https://generativelanguage.googleapis.com/v1/models?key=${a.apiKey}`,{},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"openrouter":{let c=await q("https://openrouter.ai/api/v1/auth/key",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"glm":{let c=await q("https://api.z.ai/api/anthropic/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"glm-cn":{let c=await q("https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"minimax":case"minimax-cn":{let c=await q({minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages"}[a.provider],{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"minimax-m2",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"kimi":{let c=await q("https://api.kimi.com/coding/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"kimi-latest",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"alicode":case"alicode-intl":case"alims-intl":{let c="alicode-intl"===a.provider?"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions":"alims-intl"===a.provider?"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions":"https://coding.dashscope.aliyuncs.com/v1/chat/completions",d=await q(c,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,i.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),e=401!==d.status&&403!==d.status;return{valid:e,error:e?null:"Invalid API key"}}case"volcengine-ark":case"byteplus":{let c=await q(h.X3[a.provider],{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,i.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"deepseek":{let c=await q("https://api.deepseek.com/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"groq":{let c=await q("https://api.groq.com/openai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"mistral":{let c=await q("https://api.mistral.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"xai":{let c=await q("https://api.x.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nvidia":{let c=await q("https://integrate.api.nvidia.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"perplexity":{let c=await q("https://api.perplexity.ai/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"together":{let c=await q("https://api.together.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fireworks":{let c=await q("https://api.fireworks.ai/inference/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cerebras":{let c=await q("https://api.cerebras.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cohere":{let c=await q("https://api.cohere.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nebius":{let c=await q("https://api.studio.nebius.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"siliconflow":{let c=await q("https://api.siliconflow.cn/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"hyperbolic":{let c=await q("https://api.hyperbolic.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"ollama":{let b=await fetch("https://ollama.com/api/tags",{headers:{Authorization:`Bearer ${a.apiKey}`}});return{valid:b.ok,error:b.ok?null:"Invalid API key"}}case"ollama-local":{let b=(0,j.Ak)(a),c=await fetch(`${b}/api/tags`);return{valid:c.ok,error:c.ok?null:`Ollama not reachable at ${b}`}}case"deepgram":{let c=await q("https://api.deepgram.com/v1/projects",{headers:{Authorization:`Token ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"assemblyai":{let c=await q("https://api.assemblyai.com/v1/account",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nanobanana":{let c=await q("https://api.nanobananaapi.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fal-ai":{let c=await q("https://api.fal.ai/v1/models?limit=1",{headers:{Authorization:`Key ${a.apiKey}`}},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"chutes":{let c=await q("https://llm.chutes.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"grok-web":{let c=a.apiKey.startsWith("sso=")?a.apiKey.slice(4):a.apiKey,d=a=>Array.from(crypto.getRandomValues(new Uint8Array(a)),a=>a.toString(16).padStart(2,"0")).join(""),e=Buffer.from("e:TypeError: Cannot read properties of null (reading 'children')").toString("base64"),f=await q("https://grok.com/rest/app-chat/conversations/new",{method:"POST",headers:{Accept:"*/*","Content-Type":"application/json",Cookie:`sso=${c}`,Origin:"https://grok.com",Referer:"https://grok.com/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","x-statsig-id":e,"x-xai-request-id":crypto.randomUUID(),traceparent:`00-${d(16)}-${d(8)}-00`},body:JSON.stringify({temporary:!0,modelName:"grok-4",message:"ping",fileAttachments:[],imageAttachments:[],disableSearch:!1,enableImageGeneration:!1,sendFinalMetadata:!0})},b),g=401!==f.status&&403!==f.status;return{valid:g,error:g?null:"Invalid SSO cookie"}}case"perplexity-web":{let c=a.apiKey;c.startsWith("__Secure-next-auth.session-token=")&&(c=c.slice(33));let d=await q("https://www.perplexity.ai/api/auth/session",{method:"GET",headers:{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",Cookie:`__Secure-next-auth.session-token=${c}`}},b);if(!d.ok)return{valid:!1,error:"Invalid session cookie"};let e=await d.json().catch(()=>null),f=!!(e&&e.user);return{valid:f,error:f?null:"Session expired — re-paste cookie"}}default:return{valid:!1,error:"Provider test not supported"}}}catch(a){return{valid:!1,error:a.message}}}async function s(a){let b,c=await (0,d.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",latencyMs:0,testedAt:new Date().toISOString()};let g=await (0,e.B)(c.providerSpecificData||{});if(g.connectionProxyEnabled&&g.connectionProxyUrl&&!g.vercelRelayUrl){let b=await (0,f.C)({proxyUrl:g.connectionProxyUrl});if(!b.ok){let c=b.error||`Proxy test failed with status ${b.status}`;return await (0,d.updateProviderConnection)(a,{testStatus:"error",lastError:c,lastErrorAt:new Date().toISOString()}),{valid:!1,error:c,latencyMs:0,testedAt:new Date().toISOString()}}}let h=Date.now();b="apikey"===c.authType||"cookie"===c.authType?await r(c,g):await p(c,g);let i=Date.now()-h,j={testStatus:b.valid?"active":"error",lastError:b.valid?null:b.error,lastErrorAt:b.valid?null:new Date().toISOString()};return b.refreshed&&b.newTokens&&(j.accessToken=b.newTokens.accessToken,b.newTokens.refreshToken&&(j.refreshToken=b.newTokens.refreshToken),b.newTokens.expiresIn&&(j.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString())),await (0,d.updateProviderConnection)(a,j),{valid:b.valid,error:b.error,latencyMs:i,testedAt:new Date().toISOString()}}},74926:(a,b,c)=>{c.d(b,{C:()=>f});var d=c(47774);function e(a){return null==a?"":String(a).trim()}async function f({proxyUrl:a,testUrl:b,timeoutMs:c}={}){let g,h=e(a);if(!h)return{ok:!1,status:400,error:"proxyUrl is required"};let i=e(b)||"https://google.com/",j=Number(c),k=Number.isFinite(j)&&j>0?Math.min(j,3e4):8e3;try{try{g=new d.ProxyAgent({uri:h})}catch(a){return{ok:!1,status:400,error:`Invalid proxy URL: ${a?.message||String(a)}`}}let a=new AbortController,b=Date.now(),c=setTimeout(()=>a.abort(),k);try{let c=await (0,d.hd)(i,{method:"HEAD",dispatcher:g,signal:a.signal,headers:{"User-Agent":"Bluerouter"}});return{ok:c.ok,status:c.status,statusText:c.statusText,url:i,elapsedMs:Date.now()-b}}catch(b){let a=b?.name==="AbortError"?"Proxy test timed out":function(a){if(!a)return"Unknown error";let b=a?.message||String(a),c=a?.cause?.code||a?.code,d=a?.cause?.message;return d&&d!==b?c?`${b}: ${d} (${c})`:`${b}: ${d}`:c&&!b.includes(c)?`${b} (${c})`:b}(b);return{ok:!1,status:500,error:a}}finally{clearTimeout(c)}}finally{try{await g?.close?.()}catch{}}}},92990:(a,b,c)=>{c.d(b,{DI:()=>g,Hp:()=>i,LT:()=>h,MZ:()=>r,Nl:()=>u,Nu:()=>n,OV:()=>f,Tx:()=>o,WN:()=>p,Ww:()=>v,YT:()=>l,ZL:()=>k,cD:()=>m,f7:()=>t,hF:()=>j,lB:()=>s,t:()=>q});var d=c(21820);function e(){let a=(0,d.platform)(),b=(0,d.arch)();return"darwin"===a?"arm64"===b?2:1:"linux"===a?"arm64"===b?4:3:5*("win32"===a)}let f={clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",authorizeUrl:"https://claude.ai/oauth/authorize",tokenUrl:"https://api.anthropic.com/v1/oauth/token",scopes:["org:create_api_key","user:profile","user:inference"],codeChallengeMethod:"S256"},g={clientId:"app_EMoamEEZ73f0CkXaXp7hrann",authorizeUrl:"https://auth.openai.com/oauth/authorize",tokenUrl:"https://auth.openai.com/oauth/token",revocationUrl:"https://auth.openai.com/api/accounts/oauth/revoke",scope:"openid profile email offline_access",codeChallengeMethod:"S256",extraParams:{id_token_add_organizations:"true",codex_cli_simplified_flow:"true",originator:"codex_cli_rs"}},h={clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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",authorizeUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",userInfoUrl:"https://www.googleapis.com/oauth2/v1/userinfo",scopes:["https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile"]},i={clientId:"f0304373b74a44d2b584a3fb70ca9e56",deviceCodeUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",scope:"openid profile email model.completion",codeChallengeMethod:"S256"},j={apiBaseUrl:"https://api2.qoder.sh",deviceTokenUrl:"https://api2.qoder.sh/api/v1/deviceToken/poll",deviceRefreshUrl:"https://api2.qoder.sh/api/v1/deviceToken/refresh",refreshUrl:"https://api2.qoder.sh/api/v3/user/refresh_token",userInfoUrl:"https://api2.qoder.sh/api/v1/userinfo",statusUrl:"https://api2.qoder.sh/api/v3/user/status",loginUrl:"https://qoder.com/login"},k={clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",authorizeUrl:"https://iflow.cn/oauth",tokenUrl:"https://iflow.cn/oauth/token",userInfoUrl:"https://iflow.cn/api/oauth/getUserInfo",extraParams:{loginMethod:"phone",type:"phone"}},l={clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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",authorizeUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",revocationUrl:"https://oauth2.googleapis.com/revoke",userInfoUrl:"https://www.googleapis.com/oauth2/v1/userinfo",scopes:["https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile","https://www.googleapis.com/auth/cclog","https://www.googleapis.com/auth/experimentsandconfigs"],apiEndpoint:"https://cloudcode-pa.googleapis.com",apiVersion:"v1internal",loadCodeAssistEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",onboardUserEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:onboardUser",loadCodeAssistUserAgent:"google-api-nodejs-client/9.15.1",loadCodeAssistApiClient:"google-cloud-sdk vscode_cloudshelleditor/0.1",loadCodeAssistClientMetadata:JSON.stringify({ideType:9,platform:e(),pluginType:2})};function m(){return{ideType:9,platform:e(),pluginType:2}}let n={clientId:"Iv1.b507a08c87ecfe98",deviceCodeUrl:"https://github.com/login/device/code",tokenUrl:"https://github.com/login/oauth/access_token",userInfoUrl:"https://api.github.com/user",scopes:"read:user",apiVersion:"2022-11-28",copilotTokenUrl:"https://api.github.com/copilot_internal/v2/token",userAgent:"GitHubCopilotChat/0.26.7",editorVersion:"vscode/1.85.0",editorPluginVersion:"copilot-chat/0.26.7"},o={ssoOidcEndpoint:"https://oidc.us-east-1.amazonaws.com",registerClientUrl:"https://oidc.us-east-1.amazonaws.com/client/register",deviceAuthUrl:"https://oidc.us-east-1.amazonaws.com/device_authorization",tokenUrl:"https://oidc.us-east-1.amazonaws.com/token",startUrl:"https://view.awsapps.com/start",clientName:"kiro-oauth-client",clientType:"public",scopes:["codewhisperer:completions","codewhisperer:analysis","codewhisperer:conversations"],grantTypes:["urn:ietf:params:oauth:grant-type:device_code","refresh_token"],issuerUrl:"https://identitycenter.amazonaws.com/ssoins-722374e8c3c8e6c6",socialAuthEndpoint:"https://prod.us-east-1.auth.desktop.kiro.dev",socialLoginUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/login",socialTokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/oauth/token",socialRefreshUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authMethods:["builder-id","idc","google","github","import"]},p={apiEndpoint:"https://api2.cursor.sh",chatEndpoint:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",modelsEndpoint:"/aiserver.v1.AiService/GetDefaultModelNudgeData",api3Endpoint:"https://api3.cursor.sh",agentEndpoint:"https://agent.api5.cursor.sh",agentNonPrivacyEndpoint:"https://agentn.api5.cursor.sh",clientVersion:"3.1.0",clientType:"ide",tokenStoragePaths:{linux:"~/.config/Cursor/User/globalStorage/state.vscdb",macos:"/Users/<user>/Library/Application Support/Cursor/User/globalStorage/state.vscdb",windows:"%APPDATA%\\Cursor\\User\\globalStorage\\state.vscdb"},dbKeys:{accessToken:"cursorAuth/accessToken",machineId:"storage.serviceMachineId"}},q={clientId:process.env.KIMI_CODING_OAUTH_CLIENT_ID||"17e5f671-d194-4dfb-9706-5516cb48c098",deviceCodeUrl:"https://auth.kimi.com/api/oauth/device_authorization",tokenUrl:"https://auth.kimi.com/api/oauth/token"},r={apiBaseUrl:"https://api.kilo.ai",initiateUrl:"https://api.kilo.ai/api/device-auth/codes",pollUrlBase:"https://api.kilo.ai/api/device-auth/codes"},s={appBaseUrl:"https://app.cline.bot",apiBaseUrl:"https://api.cline.bot",authorizeUrl:"https://api.cline.bot/api/v1/auth/authorize",tokenExchangeUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh"},t={defaultBaseUrl:"https://gitlab.com",authorizeUrlPath:"/oauth/authorize",tokenUrlPath:"/oauth/token",userInfoUrlPath:"/api/v4/user",scope:"api read_user",codeChallengeMethod:"S256"},u={baseUrl:"https://copilot.tencent.com",stateUrl:"https://copilot.tencent.com/v2/plugin/auth/state",tokenUrl:"https://copilot.tencent.com/v2/plugin/auth/token",refreshUrl:"https://copilot.tencent.com/v2/plugin/auth/token/refresh",userAgent:"CLI/2.63.2 CodeBuddy/2.63.2",platform:"CLI",pollInterval:5e3},v=3e5}};
1
+ "use strict";exports.id=6811,exports.ids=[6811],exports.modules={15626:(a,b,c)=>{c.d(b,{w$:()=>e});let d=c(39006).rE||"0.0.0";function e(a,b={}){let c,f=(c=function(a){if("string"!=typeof a)return"";let b=a.trim();return b?b.startsWith("workos:")?b:`workos:${b}`:""}(a))?`Bearer ${c}`:"",g={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","User-Agent":`Bluerouter/${d}`,"X-PLATFORM":process.platform||"unknown","X-PLATFORM-VERSION":process.version||"unknown","X-CLIENT-TYPE":"bluerouter","X-CLIENT-VERSION":d,"X-CORE-VERSION":d,"X-IS-MULTIROOT":"false",...b};return f&&(g.Authorization=f),g}},30869:(a,b,c)=>{c.d(b,{UY:()=>h,X3:()=>i,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g});var d=c(39006),e=c(75681),f=c(81329);d.rE;let g={npmPackageName:"@jheavenknows/bluerouter",installCmd:"npm i -g @jheavenknows/bluerouter",installCmdLatest:"npm install -g @jheavenknows/bluerouter@latest",shutdownCountdownSec:3,exitDelayMs:500,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,appPort:20128},h={maxLines:200,pollIntervalMs:1e3},i={openrouter:"https://openrouter.ai/api/v1/chat/completions",glm:"https://api.z.ai/api/anthropic/v1/messages","glm-cn":"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",kimi:"https://api.kimi.com/coding/v1/messages",minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages",alicode:"https://coding.dashscope.aliyuncs.com/v1/chat/completions","alicode-intl":"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions","alims-intl":"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions","volcengine-ark":"https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions",byteplus:"https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions",openai:"https://api.openai.com/v1/chat/completions","vercel-ai-gateway":"https://ai-gateway.vercel.sh/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages",gemini:"https://generativelanguage.googleapis.com/v1beta/models",ollama:"https://ollama.com/api/chat","ollama-local":"http://localhost:11434/api/chat"}},39006:a=>{a.exports={rE:"5.3.51"}},66811:(a,b,c)=>{c.d(b,{F:()=>s});var d=c(89718),e=c(39326),f=c(74926),g=c(75681),h=c(30869),i=c(44404),j=c(35024),k=c(92990),l=c(15626);let m={claude:{checkExpiry:!0,refreshable:!0},codex:{url:"https://chatgpt.com/backend-api/codex/responses",method:"POST",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"Content-Type":"application/json",originator:"codex-cli","User-Agent":"codex-cli/1.0.18 (macOS; arm64)"},body:JSON.stringify({model:"gpt-5.3-codex",input:[],stream:!1,store:!1}),acceptStatuses:[400],refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"Bluerouter",Accept:"application/vnd.github+json"}},iflow:{buildUrl:a=>`https://iflow.cn/api/oauth/getUserInfo?accessToken=${encodeURIComponent(a)}`,method:"GET",noAuth:!0},qwen:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0},"kimi-coding":{checkExpiry:!0,refreshable:!1},cursor:{tokenExists:!0},kilocode:{url:`${k.MZ.apiBaseUrl}/api/profile`,method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},cline:{refreshable:!0},gitlab:{url:"https://gitlab.com/api/v4/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer "},codebuddy:{tokenExists:!0}};async function n(a){return await fetch("https://api.cline.bot/api/v1/users/me",{method:"GET",headers:(0,l.w$)(a,{Accept:"application/json"})})}async function o(a){let b=a.provider,c=a.refreshToken;if(!c)return null;try{if("gemini-cli"===b||"antigravity"===b){let a="gemini-cli"===b?k.LT:k.YT,d=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:a.clientId,client_secret:a.clientSecret,grant_type:"refresh_token",refresh_token:c})});if(!d.ok)return null;let e=await d.json();return{accessToken:e.access_token,expiresIn:e.expires_in,refreshToken:e.refresh_token||c}}if("codex"===b){let a=await fetch(k.DI.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",client_id:k.DI.clientId,refresh_token:c})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("claude"===b){let a=await fetch(k.OV.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:c,client_id:k.OV.clientId})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("kiro"===b){let b=a.providerSpecificData||{},d=b.clientId||a.clientId,e=b.clientSecret||a.clientSecret,f=b.region||a.region;if(d&&e){let a=`https://oidc.${f||"us-east-1"}.amazonaws.com/token`,b=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:d,clientSecret:e,refreshToken:c,grantType:"refresh_token"})});if(!b.ok)return null;let g=await b.json();return{accessToken:g.accessToken,expiresIn:g.expiresIn||3600,refreshToken:g.refreshToken||c}}let g=await fetch(k.Tx.socialRefreshUrl,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"kiro-cli/1.0.0"},body:JSON.stringify({refreshToken:c})});if(!g.ok)return null;let h=await g.json();return{accessToken:h.accessToken,expiresIn:h.expiresIn||3600,refreshToken:h.refreshToken||c}}if("qwen"===b){let a=await fetch(k.Hp.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:c,client_id:k.Hp.clientId})});if(!a.ok)return null;let b=await a.json();return{accessToken:b.access_token,expiresIn:b.expires_in,refreshToken:b.refresh_token||c}}if("cline"===b){let a=await fetch(k.lB.refreshUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:c,grantType:"refresh_token",clientType:"extension"})});if(!a.ok)return null;let b=await a.json(),d=b?.data||b,e=d?.expiresAt?Math.max(1,Math.floor((new Date(d.expiresAt).getTime()-Date.now())/1e3)):3600;return{accessToken:d?.accessToken,expiresIn:e,refreshToken:d?.refreshToken||c}}return null}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}async function p(a,b=null){var c;let d=m[a.provider];if(!d)return{valid:!1,error:"Provider test not supported",refreshed:!1};if(!a.accessToken)return{valid:!1,error:"No access token",refreshed:!1};if(d.tokenExists)return{valid:!0,error:null,refreshed:!1,newTokens:null};let e=a.accessToken,f=!1,g=null,h=!!(c=a).expiresAt&&new Date(c.expiresAt).getTime()<=Date.now()+3e5;if(d.refreshable&&h&&a.refreshToken){let b=await o(a);if(!b)return{valid:!1,error:"Token expired and refresh failed",refreshed:!1};e=b.accessToken,f=!0,g=b}if(d.checkExpiry)return f?{valid:!0,error:null,refreshed:f,newTokens:g}:h?{valid:!1,error:"Token expired",refreshed:!1}:{valid:!0,error:null,refreshed:!1,newTokens:null};if("cline"===a.provider){let b=async a=>{let b=await n(a);return b.ok?{valid:!0,error:null,refreshed:f,newTokens:g}:401===b.status?{valid:!1,error:"Token invalid or revoked",refreshed:f}:403===b.status?{valid:!1,error:"Access denied",refreshed:f}:{valid:!1,error:`API returned ${b.status}`,refreshed:f}},c=await b(e);if(c.valid||"Token invalid or revoked"!==c.error||!a.refreshToken)return c;let d=await o(a);return d?.accessToken?(f=!0,g=d,e=d.accessToken,await b(e)):{valid:!1,error:"Token invalid or revoked",refreshed:!1}}try{let c=d.buildUrl?d.buildUrl(e):d.url,h=d.noAuth?{...d.extraHeaders}:{[d.authHeader]:`${d.authPrefix}${e}`,...d.extraHeaders},i={method:d.method,headers:h};d.body&&(i.body=d.body);let j=await q(c,i,b);if(j.ok||d.acceptStatuses&&d.acceptStatuses.includes(j.status))return{valid:!0,error:null,refreshed:f,newTokens:g};if(401===j.status&&d.refreshable&&!f&&a.refreshToken){let e=await o(a);if(e){let a=d.buildUrl?d.buildUrl(e.accessToken):c,f=d.noAuth?{...d.extraHeaders}:{[d.authHeader]:`${d.authPrefix}${e.accessToken}`,...d.extraHeaders},g={method:d.method,headers:f};d.body&&(g.body=d.body);let h=await q(a,g,b);if(h.ok||d.acceptStatuses&&d.acceptStatuses.includes(h.status))return{valid:!0,error:null,refreshed:!0,newTokens:e}}return{valid:!1,error:"Token invalid or revoked",refreshed:!1}}if(401===j.status)return{valid:!1,error:"Token invalid or revoked",refreshed:f};if(403===j.status)return{valid:!1,error:"Access denied",refreshed:f};return{valid:!1,error:`API returned ${j.status}`,refreshed:f}}catch(a){return{valid:!1,error:a.message,refreshed:f}}}async function q(a,b={},d=null){if(d?.vercelRelayUrl){let{proxyAwareFetch:e}=await c.e(9609).then(c.bind(c,39609));return e(a,b,{vercelRelayUrl:d.vercelRelayUrl})}if(!d?.connectionProxyEnabled||!d?.connectionProxyUrl)return fetch(a,b);let{proxyAwareFetch:e}=await c.e(9609).then(c.bind(c,39609));return e(a,b,{connectionProxyEnabled:!0,connectionProxyUrl:d.connectionProxyUrl,connectionNoProxy:d.connectionNoProxy||""})}async function r(a,b=null){if((0,g.mq)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{let d=await q(`${c.replace(/\/$/,"")}/models`,{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}if((0,g.gb)(a.provider)){let c=a.providerSpecificData?.baseUrl;if(!c)return{valid:!1,error:"Missing base URL"};try{(c=c.replace(/\/$/,"")).endsWith("/messages")&&(c=c.slice(0,-9));let d=await q(`${c}/models`,{headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01",Authorization:`Bearer ${a.apiKey}`}},b);return{valid:d.ok,error:d.ok?null:"Invalid API key or base URL"}}catch(a){return{valid:!1,error:a.message}}}try{switch(a.provider){case"cloudflare-ai":{let c=(a.providerSpecificData||{}).accountId;if(!c)return{valid:!1,error:"Missing Account ID"};let d=`https://api.cloudflare.com/client/v4/accounts/${c}/ai/v1/chat/completions`,e=await q(d,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({model:(0,i.fZ)("cloudflare-ai"),messages:[{role:"user",content:"test"}],max_tokens:1})},b),f=401!==e.status&&403!==e.status&&404!==e.status;return{valid:f,error:f?null:"Invalid API token or Account ID"}}case"azure":{let c=a.providerSpecificData||{},d=(c.azureEndpoint||"").replace(/\/$/,""),e=c.deployment||"gpt-4",f=c.apiVersion||"2024-10-01-preview",g=`${d}/openai/deployments/${e}/chat/completions?api-version=${f}`,h={"api-key":a.apiKey,"Content-Type":"application/json"};c.organization&&(h["OpenAI-Organization"]=c.organization);let i=await q(g,{method:"POST",headers:h,body:JSON.stringify({messages:[{role:"user",content:"test"}],max_completion_tokens:1})},b),j=401!==i.status&&403!==i.status;return{valid:j,error:j?null:"Invalid API key or Azure configuration"}}case"openai":{let c=await q("https://api.openai.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"vercel-ai-gateway":{let c=await q("https://ai-gateway.vercel.sh/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"anthropic":{let c=await q("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"claude-3-haiku-20240307",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"gemini":{let c=await q(`https://generativelanguage.googleapis.com/v1/models?key=${a.apiKey}`,{},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"openrouter":{let c=await q("https://openrouter.ai/api/v1/auth/key",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"glm":{let c=await q("https://api.z.ai/api/anthropic/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"glm-cn":{let c=await q("https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:"glm-4.7",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"minimax":case"minimax-cn":{let c=await q({minimax:"https://api.minimax.io/anthropic/v1/messages","minimax-cn":"https://api.minimaxi.com/anthropic/v1/messages"}[a.provider],{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"minimax-m2",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"kimi":{let c=await q("https://api.kimi.com/coding/v1/messages",{method:"POST",headers:{"x-api-key":a.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:"kimi-latest",max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"alicode":case"alicode-intl":case"alims-intl":{let c="alicode-intl"===a.provider?"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions":"alims-intl"===a.provider?"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions":"https://coding.dashscope.aliyuncs.com/v1/chat/completions",d=await q(c,{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,i.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),e=401!==d.status&&403!==d.status;return{valid:e,error:e?null:"Invalid API key"}}case"volcengine-ark":case"byteplus":{let c=await q(h.X3[a.provider],{method:"POST",headers:{Authorization:`Bearer ${a.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:(0,i.fZ)(a.provider),max_tokens:1,messages:[{role:"user",content:"test"}]})},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"deepseek":{let c=await q("https://api.deepseek.com/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"groq":{let c=await q("https://api.groq.com/openai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"mistral":{let c=await q("https://api.mistral.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"xai":{let c=await q("https://api.x.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nvidia":{let c=await q("https://integrate.api.nvidia.com/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"perplexity":{let c=await q("https://api.perplexity.ai/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"together":{let c=await q("https://api.together.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fireworks":{let c=await q("https://api.fireworks.ai/inference/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cerebras":{let c=await q("https://api.cerebras.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"cohere":{let c=await q("https://api.cohere.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nebius":{let c=await q("https://api.studio.nebius.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"siliconflow":{let c=await q("https://api.siliconflow.cn/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"hyperbolic":{let c=await q("https://api.hyperbolic.xyz/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"ollama":{let b=await fetch("https://ollama.com/api/tags",{headers:{Authorization:`Bearer ${a.apiKey}`}});return{valid:b.ok,error:b.ok?null:"Invalid API key"}}case"ollama-local":{let b=(0,j.Ak)(a),c=await fetch(`${b}/api/tags`);return{valid:c.ok,error:c.ok?null:`Ollama not reachable at ${b}`}}case"deepgram":{let c=await q("https://api.deepgram.com/v1/projects",{headers:{Authorization:`Token ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"assemblyai":{let c=await q("https://api.assemblyai.com/v1/account",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"nanobanana":{let c=await q("https://api.nanobananaapi.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"fal-ai":{let c=await q("https://api.fal.ai/v1/models?limit=1",{headers:{Authorization:`Key ${a.apiKey}`}},b),d=401!==c.status&&403!==c.status;return{valid:d,error:d?null:"Invalid API key"}}case"chutes":{let c=await q("https://llm.chutes.ai/v1/models",{headers:{Authorization:`Bearer ${a.apiKey}`}},b);return{valid:c.ok,error:c.ok?null:"Invalid API key"}}case"grok-web":{let c=a.apiKey.startsWith("sso=")?a.apiKey.slice(4):a.apiKey,d=a=>Array.from(crypto.getRandomValues(new Uint8Array(a)),a=>a.toString(16).padStart(2,"0")).join(""),e=Buffer.from("e:TypeError: Cannot read properties of null (reading 'children')").toString("base64"),f=await q("https://grok.com/rest/app-chat/conversations/new",{method:"POST",headers:{Accept:"*/*","Content-Type":"application/json",Cookie:`sso=${c}`,Origin:"https://grok.com",Referer:"https://grok.com/","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","x-statsig-id":e,"x-xai-request-id":crypto.randomUUID(),traceparent:`00-${d(16)}-${d(8)}-00`},body:JSON.stringify({temporary:!0,modelName:"grok-4",message:"ping",fileAttachments:[],imageAttachments:[],disableSearch:!1,enableImageGeneration:!1,sendFinalMetadata:!0})},b),g=401!==f.status&&403!==f.status;return{valid:g,error:g?null:"Invalid SSO cookie"}}case"perplexity-web":{let c=a.apiKey;c.startsWith("__Secure-next-auth.session-token=")&&(c=c.slice(33));let d=await q("https://www.perplexity.ai/api/auth/session",{method:"GET",headers:{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",Cookie:`__Secure-next-auth.session-token=${c}`}},b);if(!d.ok)return{valid:!1,error:"Invalid session cookie"};let e=await d.json().catch(()=>null),f=!!(e&&e.user);return{valid:f,error:f?null:"Session expired — re-paste cookie"}}default:return{valid:!1,error:"Provider test not supported"}}}catch(a){return{valid:!1,error:a.message}}}async function s(a){let b,c=await (0,d.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",latencyMs:0,testedAt:new Date().toISOString()};let g=await (0,e.B)(c.providerSpecificData||{});if(g.connectionProxyEnabled&&g.connectionProxyUrl&&!g.vercelRelayUrl){let b=await (0,f.C)({proxyUrl:g.connectionProxyUrl});if(!b.ok){let c=b.error||`Proxy test failed with status ${b.status}`;return await (0,d.updateProviderConnection)(a,{testStatus:"error",lastError:c,lastErrorAt:new Date().toISOString()}),{valid:!1,error:c,latencyMs:0,testedAt:new Date().toISOString()}}}let h=Date.now();b="apikey"===c.authType||"cookie"===c.authType?await r(c,g):await p(c,g);let i=Date.now()-h,j={testStatus:b.valid?"active":"error",lastError:b.valid?null:b.error,lastErrorAt:b.valid?null:new Date().toISOString()};return b.refreshed&&b.newTokens&&(j.accessToken=b.newTokens.accessToken,b.newTokens.refreshToken&&(j.refreshToken=b.newTokens.refreshToken),b.newTokens.expiresIn&&(j.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString())),await (0,d.updateProviderConnection)(a,j),{valid:b.valid,error:b.error,latencyMs:i,testedAt:new Date().toISOString()}}},74926:(a,b,c)=>{c.d(b,{C:()=>f});var d=c(47774);function e(a){return null==a?"":String(a).trim()}async function f({proxyUrl:a,testUrl:b,timeoutMs:c}={}){let g,h=e(a);if(!h)return{ok:!1,status:400,error:"proxyUrl is required"};let i=e(b)||"https://google.com/",j=Number(c),k=Number.isFinite(j)&&j>0?Math.min(j,3e4):8e3;try{try{g=new d.ProxyAgent({uri:h})}catch(a){return{ok:!1,status:400,error:`Invalid proxy URL: ${a?.message||String(a)}`}}let a=new AbortController,b=Date.now(),c=setTimeout(()=>a.abort(),k);try{let c=await (0,d.hd)(i,{method:"HEAD",dispatcher:g,signal:a.signal,headers:{"User-Agent":"Bluerouter"}});return{ok:c.ok,status:c.status,statusText:c.statusText,url:i,elapsedMs:Date.now()-b}}catch(b){let a=b?.name==="AbortError"?"Proxy test timed out":function(a){if(!a)return"Unknown error";let b=a?.message||String(a),c=a?.cause?.code||a?.code,d=a?.cause?.message;return d&&d!==b?c?`${b}: ${d} (${c})`:`${b}: ${d}`:c&&!b.includes(c)?`${b} (${c})`:b}(b);return{ok:!1,status:500,error:a}}finally{clearTimeout(c)}}finally{try{await g?.close?.()}catch{}}}},92990:(a,b,c)=>{c.d(b,{DI:()=>g,Hp:()=>i,LT:()=>h,MZ:()=>r,Nl:()=>u,Nu:()=>n,OV:()=>f,Tx:()=>o,WN:()=>p,Ww:()=>v,YT:()=>l,ZL:()=>k,cD:()=>m,f7:()=>t,hF:()=>j,lB:()=>s,t:()=>q});var d=c(21820);function e(){let a=(0,d.platform)(),b=(0,d.arch)();return"darwin"===a?"arm64"===b?2:1:"linux"===a?"arm64"===b?4:3:5*("win32"===a)}let f={clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",authorizeUrl:"https://claude.ai/oauth/authorize",tokenUrl:"https://api.anthropic.com/v1/oauth/token",scopes:["org:create_api_key","user:profile","user:inference"],codeChallengeMethod:"S256"},g={clientId:"app_EMoamEEZ73f0CkXaXp7hrann",authorizeUrl:"https://auth.openai.com/oauth/authorize",tokenUrl:"https://auth.openai.com/oauth/token",revocationUrl:"https://auth.openai.com/api/accounts/oauth/revoke",scope:"openid profile email offline_access",codeChallengeMethod:"S256",extraParams:{id_token_add_organizations:"true",codex_cli_simplified_flow:"true",originator:"codex_cli_rs"}},h={clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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",authorizeUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",userInfoUrl:"https://www.googleapis.com/oauth2/v1/userinfo",scopes:["https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile"]},i={clientId:"f0304373b74a44d2b584a3fb70ca9e56",deviceCodeUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",scope:"openid profile email model.completion",codeChallengeMethod:"S256"},j={apiBaseUrl:"https://api2.qoder.sh",deviceTokenUrl:"https://api2.qoder.sh/api/v1/deviceToken/poll",deviceRefreshUrl:"https://api2.qoder.sh/api/v1/deviceToken/refresh",refreshUrl:"https://api2.qoder.sh/api/v3/user/refresh_token",userInfoUrl:"https://api2.qoder.sh/api/v1/userinfo",statusUrl:"https://api2.qoder.sh/api/v3/user/status",loginUrl:"https://qoder.com/login"},k={clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",authorizeUrl:"https://iflow.cn/oauth",tokenUrl:"https://iflow.cn/oauth/token",userInfoUrl:"https://iflow.cn/api/oauth/getUserInfo",extraParams:{loginMethod:"phone",type:"phone"}},l={clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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",authorizeUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",revocationUrl:"https://oauth2.googleapis.com/revoke",userInfoUrl:"https://www.googleapis.com/oauth2/v1/userinfo",scopes:["https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile","https://www.googleapis.com/auth/cclog","https://www.googleapis.com/auth/experimentsandconfigs"],apiEndpoint:"https://cloudcode-pa.googleapis.com",apiVersion:"v1internal",loadCodeAssistEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",onboardUserEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:onboardUser",loadCodeAssistUserAgent:"google-api-nodejs-client/9.15.1",loadCodeAssistApiClient:"google-cloud-sdk vscode_cloudshelleditor/0.1",loadCodeAssistClientMetadata:JSON.stringify({ideType:9,platform:e(),pluginType:2})};function m(){return{ideType:9,platform:e(),pluginType:2}}let n={clientId:"Iv1.b507a08c87ecfe98",deviceCodeUrl:"https://github.com/login/device/code",tokenUrl:"https://github.com/login/oauth/access_token",userInfoUrl:"https://api.github.com/user",scopes:"read:user",apiVersion:"2022-11-28",copilotTokenUrl:"https://api.github.com/copilot_internal/v2/token",userAgent:"GitHubCopilotChat/0.26.7",editorVersion:"vscode/1.85.0",editorPluginVersion:"copilot-chat/0.26.7"},o={ssoOidcEndpoint:"https://oidc.us-east-1.amazonaws.com",registerClientUrl:"https://oidc.us-east-1.amazonaws.com/client/register",deviceAuthUrl:"https://oidc.us-east-1.amazonaws.com/device_authorization",tokenUrl:"https://oidc.us-east-1.amazonaws.com/token",startUrl:"https://view.awsapps.com/start",clientName:"kiro-oauth-client",clientType:"public",scopes:["codewhisperer:completions","codewhisperer:analysis","codewhisperer:conversations"],grantTypes:["urn:ietf:params:oauth:grant-type:device_code","refresh_token"],issuerUrl:"https://identitycenter.amazonaws.com/ssoins-722374e8c3c8e6c6",socialAuthEndpoint:"https://prod.us-east-1.auth.desktop.kiro.dev",socialLoginUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/login",socialTokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/oauth/token",socialRefreshUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authMethods:["builder-id","idc","google","github","import"]},p={apiEndpoint:"https://api2.cursor.sh",chatEndpoint:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",modelsEndpoint:"/aiserver.v1.AiService/GetDefaultModelNudgeData",api3Endpoint:"https://api3.cursor.sh",agentEndpoint:"https://agent.api5.cursor.sh",agentNonPrivacyEndpoint:"https://agentn.api5.cursor.sh",clientVersion:"3.1.0",clientType:"ide",tokenStoragePaths:{linux:"~/.config/Cursor/User/globalStorage/state.vscdb",macos:"/Users/<user>/Library/Application Support/Cursor/User/globalStorage/state.vscdb",windows:"%APPDATA%\\Cursor\\User\\globalStorage\\state.vscdb"},dbKeys:{accessToken:"cursorAuth/accessToken",machineId:"storage.serviceMachineId"}},q={clientId:process.env.KIMI_CODING_OAUTH_CLIENT_ID||"17e5f671-d194-4dfb-9706-5516cb48c098",deviceCodeUrl:"https://auth.kimi.com/api/oauth/device_authorization",tokenUrl:"https://auth.kimi.com/api/oauth/token"},r={apiBaseUrl:"https://api.kilo.ai",initiateUrl:"https://api.kilo.ai/api/device-auth/codes",pollUrlBase:"https://api.kilo.ai/api/device-auth/codes"},s={appBaseUrl:"https://app.cline.bot",apiBaseUrl:"https://api.cline.bot",authorizeUrl:"https://api.cline.bot/api/v1/auth/authorize",tokenExchangeUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh"},t={defaultBaseUrl:"https://gitlab.com",authorizeUrlPath:"/oauth/authorize",tokenUrlPath:"/oauth/token",userInfoUrlPath:"/api/v4/user",scope:"api read_user",codeChallengeMethod:"S256"},u={baseUrl:"https://copilot.tencent.com",stateUrl:"https://copilot.tencent.com/v2/plugin/auth/state",tokenUrl:"https://copilot.tencent.com/v2/plugin/auth/token",refreshUrl:"https://copilot.tencent.com/v2/plugin/auth/token/refresh",userAgent:"CLI/2.63.2 CodeBuddy/2.63.2",platform:"CLI",pollInterval:5e3},v=3e5}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=689,exports.ids=[689],exports.modules={689:(a,b,c)=>{c.d(b,{Nn:()=>z,RT:()=>x,d9:()=>F}),c(55511);var d=c(41170),e=c(50743);let f=Number(process.env.OBSERVABILITY_MYSQL_MAX_JSON_BYTES||262144),g={expiresAt:0,value:null},h=!1,i=new Set;function j(a,b){i.has(a)||(i.add(a),console.warn(b))}function k(a){if(!a)return"";let b=[];return a.code&&b.push(`code=${a.code}`),a.errno&&b.push(`errno=${a.errno}`),a.sqlState&&b.push(`sqlState=${a.sqlState}`),a.sqlMessage?b.push(a.sqlMessage):a.message&&b.push(a.message),b.filter(Boolean).join(" | ")||String(a)}async function l(a,b){let[c]=await a.query("SELECT COLUMN_NAME AS name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?",[b]);return new Set((c||[]).map(a=>String(a.name||a.COLUMN_NAME||"")))}async function m(a,b){let[c]=await a.query("SELECT INDEX_NAME AS name FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?",[b]);return new Set((c||[]).map(a=>String(a.name||a.INDEX_NAME||"")))}async function n(a,b,c){let d=await l(a,b);for(let[e,f]of c)d.has(e)||(await a.query(`ALTER TABLE ${b} ADD COLUMN ${f}`),d.add(e))}async function o(a,b,c){let d=await m(a,b);for(let[e,f]of c)d.has(e)||(await a.query(`ALTER TABLE ${b} ADD ${f}`),d.add(e))}async function p(a){await n(a,"usage_events",[["dedupe_key","dedupe_key VARCHAR(96) NULL"],["created_at","created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["timestamp","timestamp DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["provider","provider VARCHAR(120) NULL"],["model","model VARCHAR(255) NULL"],["connection_id","connection_id VARCHAR(120) NULL"],["api_key_fingerprint","api_key_fingerprint VARCHAR(120) NULL"],["api_key_id","api_key_id VARCHAR(120) NULL"],["api_key_name","api_key_name VARCHAR(255) NULL"],["api_key_owner","api_key_owner VARCHAR(255) NULL"],["endpoint","endpoint TEXT NULL"],["request_id","request_id VARCHAR(120) NULL"],["session_id","session_id VARCHAR(255) NULL"],["client_ip","client_ip VARCHAR(64) NULL"],["client_ip_normalized","client_ip_normalized VARCHAR(64) NULL"],["client_host","client_host TEXT NULL"],["client_user_agent","client_user_agent TEXT NULL"],["source_tool","source_tool VARCHAR(80) NULL"],["source_tool_label","source_tool_label VARCHAR(120) NULL"],["source_host","source_host VARCHAR(255) NULL"],["latency_ms","latency_ms INT DEFAULT 0"],["ttft_ms","ttft_ms INT DEFAULT 0"],["status_code","status_code INT NULL"],["error_code","error_code VARCHAR(160) NULL"],["error_type","error_type VARCHAR(120) NULL"],["error_message_short","error_message_short TEXT NULL"],["is_streaming","is_streaming TINYINT DEFAULT 0"],["is_combo","is_combo TINYINT DEFAULT 0"],["combo_name","combo_name VARCHAR(255) NULL"],["prompt_tokens","prompt_tokens BIGINT DEFAULT 0"],["completion_tokens","completion_tokens BIGINT DEFAULT 0"],["total_tokens","total_tokens BIGINT DEFAULT 0"],["cached_tokens","cached_tokens BIGINT DEFAULT 0"],["reasoning_tokens","reasoning_tokens BIGINT DEFAULT 0"],["thinking_enabled","thinking_enabled TINYINT NULL"],["thinking_auto_off","thinking_auto_off TINYINT DEFAULT 0"],["thinking_auto_off_reason","thinking_auto_off_reason VARCHAR(120) NULL"],["prompt_chars","prompt_chars BIGINT DEFAULT 0"],["force_thinking_off_above_chars","force_thinking_off_above_chars BIGINT DEFAULT 0"],["cost","cost DECIMAL(18,8) DEFAULT 0"],["status","status VARCHAR(80) NULL"],["tokens_json","tokens_json JSON NULL"],["meta_json","meta_json JSON NULL"]]),await a.query("UPDATE usage_events SET dedupe_key = CONCAT('legacy:', id) WHERE dedupe_key IS NULL OR dedupe_key = ''").catch(()=>{}),await a.query("ALTER TABLE usage_events MODIFY COLUMN dedupe_key VARCHAR(96) NOT NULL").catch(()=>{}),await o(a,"usage_events",[["uq_usage_events_dedupe","UNIQUE KEY uq_usage_events_dedupe (dedupe_key)"],["idx_usage_events_ts","INDEX idx_usage_events_ts (timestamp)"],["idx_usage_events_provider_model","INDEX idx_usage_events_provider_model (provider, model, timestamp)"],["idx_usage_events_status","INDEX idx_usage_events_status (status, status_code, timestamp)"],["idx_usage_events_api_key","INDEX idx_usage_events_api_key (api_key_id, api_key_fingerprint, timestamp)"],["idx_usage_owner_time","INDEX idx_usage_owner_time (api_key_owner, timestamp, id)"],["idx_usage_events_client_ip","INDEX idx_usage_events_client_ip (client_ip_normalized, timestamp)"],["idx_usage_events_source_tool","INDEX idx_usage_events_source_tool (source_tool, timestamp)"],["idx_usage_events_session","INDEX idx_usage_events_session (session_id, timestamp)"],["idx_usage_events_thinking_auto_off","INDEX idx_usage_events_thinking_auto_off (thinking_auto_off, timestamp)"],["idx_usage_events_prompt_chars","INDEX idx_usage_events_prompt_chars (prompt_chars, timestamp)"]]),await n(a,"request_details",[["created_at","created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["timestamp","timestamp DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["provider","provider VARCHAR(120) NULL"],["model","model VARCHAR(255) NULL"],["connection_id","connection_id VARCHAR(120) NULL"],["status","status VARCHAR(80) NULL"],["data_json","data_json JSON NULL"],["data_size_bytes","data_size_bytes BIGINT DEFAULT 0"]]),await o(a,"request_details",[["idx_request_details_ts","INDEX idx_request_details_ts (timestamp)"],["idx_request_details_provider","INDEX idx_request_details_provider (provider, timestamp)"],["idx_request_details_model","INDEX idx_request_details_model (model, timestamp)"],["idx_request_details_connection","INDEX idx_request_details_connection (connection_id, timestamp)"],["idx_request_details_status","INDEX idx_request_details_status (status, timestamp)"]])}function q(a){return String(a??"").trim()}function r(a){let b=a?new Date(a):new Date;return(Number.isNaN(b.getTime())?new Date().toISOString():b.toISOString()).replace("T"," ").replace("Z","")}function s(a){if(null==a)return null;if("string"==typeof a)try{return JSON.parse(a),a}catch{return JSON.stringify(a)}return(0,e.s)(a)}function t(a){if(null==a)return{};let b=s(a)||"{}";return Buffer.byteLength(b,"utf8")<=f?a:{_truncated:!0,_originalSizeBytes:Buffer.byteLength(b,"utf8"),_preview:b.slice(0,1e3)}}async function u(){let a=Date.now();if(g.value&&g.expiresAt>a)return g.value;try{let b=(0,d.I6)(await (0,d.L7)());g={value:!0===b.enabled&&"mysql"===b.type&&"false"!==process.env.OBSERVABILITY_MYSQL_ENABLED?b:null,expiresAt:a+5e3}}catch(b){j("config",`[observability-mysql] Unable to read MySQL log config: ${b?.message||b}`),g={value:null,expiresAt:a+5e3}}return g.value}async function v(a){let b=await c.e(4790).then(c.t.bind(c,94790,19)),d=await b.createConnection({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,multipleStatements:!0,dateStrings:!0,connectTimeout:3e3,timezone:"Z"});return await d.query("SET time_zone = '+00:00'"),d}async function w(a){h||(await a.query(`
1
+ "use strict";exports.id=689,exports.ids=[689],exports.modules={689:(a,b,c)=>{c.d(b,{Nn:()=>z,RT:()=>x,d9:()=>F}),c(55511);var d=c(41170),e=c(50743);let f=Number(process.env.OBSERVABILITY_MYSQL_MAX_JSON_BYTES||262144),g={expiresAt:0,value:null},h=!1,i=new Set;function j(a,b){i.has(a)||(i.add(a),console.warn(b))}function k(a){if(!a)return"";let b=[];return a.code&&b.push(`code=${a.code}`),a.errno&&b.push(`errno=${a.errno}`),a.sqlState&&b.push(`sqlState=${a.sqlState}`),a.sqlMessage?b.push(a.sqlMessage):a.message&&b.push(a.message),b.filter(Boolean).join(" | ")||String(a)}async function l(a,b){let[c]=await a.query("SELECT COLUMN_NAME AS name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?",[b]);return new Set((c||[]).map(a=>String(a.name||a.COLUMN_NAME||"")))}async function m(a,b){let[c]=await a.query("SELECT INDEX_NAME AS name FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?",[b]);return new Set((c||[]).map(a=>String(a.name||a.INDEX_NAME||"")))}async function n(a,b,c){let d=await l(a,b);for(let[e,f]of c)d.has(e)||(await a.query(`ALTER TABLE ${b} ADD COLUMN ${f}`),d.add(e))}async function o(a,b,c){let d=await m(a,b);for(let[e,f]of c)d.has(e)||(await a.query(`ALTER TABLE ${b} ADD ${f}`),d.add(e))}async function p(a){await n(a,"usage_events",[["dedupe_key","dedupe_key VARCHAR(96) NULL"],["created_at","created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["timestamp","timestamp DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["provider","provider VARCHAR(120) NULL"],["model","model VARCHAR(255) NULL"],["connection_id","connection_id VARCHAR(120) NULL"],["api_key_fingerprint","api_key_fingerprint VARCHAR(120) NULL"],["api_key_id","api_key_id VARCHAR(120) NULL"],["api_key_name","api_key_name VARCHAR(255) NULL"],["api_key_owner","api_key_owner VARCHAR(255) NULL"],["endpoint","endpoint TEXT NULL"],["request_id","request_id VARCHAR(120) NULL"],["session_id","session_id VARCHAR(255) NULL"],["client_ip","client_ip VARCHAR(64) NULL"],["client_ip_normalized","client_ip_normalized VARCHAR(64) NULL"],["client_host","client_host TEXT NULL"],["client_user_agent","client_user_agent TEXT NULL"],["source_tool","source_tool VARCHAR(80) NULL"],["source_tool_label","source_tool_label VARCHAR(120) NULL"],["source_host","source_host VARCHAR(255) NULL"],["latency_ms","latency_ms INT DEFAULT 0"],["ttft_ms","ttft_ms INT DEFAULT 0"],["status_code","status_code INT NULL"],["error_code","error_code VARCHAR(160) NULL"],["error_type","error_type VARCHAR(120) NULL"],["error_message_short","error_message_short TEXT NULL"],["is_streaming","is_streaming TINYINT DEFAULT 0"],["is_combo","is_combo TINYINT DEFAULT 0"],["combo_name","combo_name VARCHAR(255) NULL"],["prompt_tokens","prompt_tokens BIGINT DEFAULT 0"],["completion_tokens","completion_tokens BIGINT DEFAULT 0"],["total_tokens","total_tokens BIGINT DEFAULT 0"],["cached_tokens","cached_tokens BIGINT DEFAULT 0"],["reasoning_tokens","reasoning_tokens BIGINT DEFAULT 0"],["thinking_enabled","thinking_enabled TINYINT NULL"],["thinking_auto_off","thinking_auto_off TINYINT DEFAULT 0"],["thinking_auto_off_reason","thinking_auto_off_reason VARCHAR(120) NULL"],["prompt_chars","prompt_chars BIGINT DEFAULT 0"],["force_thinking_off_above_chars","force_thinking_off_above_chars BIGINT DEFAULT 0"],["cost","cost DECIMAL(18,8) DEFAULT 0"],["status","status VARCHAR(80) NULL"],["tokens_json","tokens_json JSON NULL"],["meta_json","meta_json JSON NULL"]]),await a.query("UPDATE usage_events SET dedupe_key = CONCAT('legacy:', id) WHERE dedupe_key IS NULL OR dedupe_key = ''").catch(()=>{}),await a.query("ALTER TABLE usage_events MODIFY COLUMN dedupe_key VARCHAR(96) NOT NULL").catch(()=>{}),await o(a,"usage_events",[["uq_usage_events_dedupe","UNIQUE KEY uq_usage_events_dedupe (dedupe_key)"],["idx_usage_events_ts","INDEX idx_usage_events_ts (timestamp)"],["idx_usage_events_provider_model","INDEX idx_usage_events_provider_model (provider, model, timestamp)"],["idx_usage_events_status","INDEX idx_usage_events_status (status, status_code, timestamp)"],["idx_usage_events_api_key","INDEX idx_usage_events_api_key (api_key_id, api_key_fingerprint, timestamp)"],["idx_usage_owner_time","INDEX idx_usage_owner_time (api_key_owner, timestamp, id)"],["idx_usage_events_client_ip","INDEX idx_usage_events_client_ip (client_ip_normalized, timestamp)"],["idx_usage_events_source_tool","INDEX idx_usage_events_source_tool (source_tool, timestamp)"],["idx_usage_events_session","INDEX idx_usage_events_session (session_id, timestamp)"],["idx_usage_events_thinking_auto_off","INDEX idx_usage_events_thinking_auto_off (thinking_auto_off, timestamp)"],["idx_usage_events_prompt_chars","INDEX idx_usage_events_prompt_chars (prompt_chars, timestamp)"]]),await n(a,"request_details",[["created_at","created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["timestamp","timestamp DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)"],["provider","provider VARCHAR(120) NULL"],["model","model VARCHAR(255) NULL"],["connection_id","connection_id VARCHAR(120) NULL"],["status","status VARCHAR(80) NULL"],["data_json","data_json JSON NULL"],["data_size_bytes","data_size_bytes BIGINT DEFAULT 0"]]),await o(a,"request_details",[["idx_request_details_ts","INDEX idx_request_details_ts (timestamp)"],["idx_request_details_provider","INDEX idx_request_details_provider (provider, timestamp)"],["idx_request_details_model","INDEX idx_request_details_model (model, timestamp)"],["idx_request_details_connection","INDEX idx_request_details_connection (connection_id, timestamp)"],["idx_request_details_status","INDEX idx_request_details_status (status, timestamp)"]])}function q(a){return String(a??"").trim()}function r(a){let b=a?new Date(a):new Date;return(Number.isNaN(b.getTime())?new Date().toISOString():b.toISOString()).replace("T"," ").replace("Z","")}function s(a){if(null==a)return null;if("string"==typeof a)try{return JSON.parse(a),a}catch{return JSON.stringify(a)}return(0,e.s)(a)}function t(a){if(null==a)return{};let b=s(a)||"{}";return Buffer.byteLength(b,"utf8")<=f?a:{_truncated:!0,_originalSizeBytes:Buffer.byteLength(b,"utf8"),_preview:b.slice(0,1e3)}}async function u(){let a=Date.now();if(g.value&&g.expiresAt>a)return g.value;try{let b=(0,d.normalizeConfig)(await (0,d.getPromptLogDbConfig)());g={value:!0===b.enabled&&"mysql"===b.type&&"false"!==process.env.OBSERVABILITY_MYSQL_ENABLED?b:null,expiresAt:a+5e3}}catch(b){j("config",`[observability-mysql] Unable to read MySQL log config: ${b?.message||b}`),g={value:null,expiresAt:a+5e3}}return g.value}async function v(a){let b=await c.e(4790).then(c.t.bind(c,94790,19)),d=await b.createConnection({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,multipleStatements:!0,dateStrings:!0,connectTimeout:3e3,timezone:"Z"});return await d.query("SET time_zone = '+00:00'"),d}async function w(a){h||(await a.query(`
2
2
  CREATE TABLE IF NOT EXISTS usage_events (
3
3
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
4
4
  dedupe_key VARCHAR(96) NOT NULL,
@@ -188,7 +188,191 @@
188
188
  connection_id = VALUES(connection_id),
189
189
  status = VALUES(status),
190
190
  data_json = VALUES(data_json),
191
- data_size_bytes = VALUES(data_size_bytes)`,[q(a.id),r(a.timestamp),q(a.provider)||null,q(a.model)||null,q(a.connectionId)||null,q(a.status)||null,c,Buffer.byteLength(c,"utf8")])}return!0}catch(a){return j("request-details-write",`[observability-mysql] Failed to write request_details: ${k(a)}`),!1}finally{b&&await b.end().catch(()=>{})}}let y=0;async function z(a=1e3){let b;if(Date.now()-y<6e4)return;y=Date.now();let c=await u();if(c)try{b=await v(c);let[[d]]=await b.query("SELECT COUNT(*) AS c FROM request_details"),e=Number(d?.c||0)-a;if(e<=0)return;await b.query("DELETE FROM request_details ORDER BY created_at ASC LIMIT ?",[e])}catch(a){j("request-details-purge",`[observability-mysql] Failed to purge request_details: ${k(a)}`)}finally{b&&await b.end().catch(()=>{})}}let A=new Set(["requests","requestCount","totalRequests","successRequests","errorRequests","pendingRequests","promptTokens","completionTokens","totalTokens","cachedTokens","reasoningTokens","inputTokens","outputTokens","cost","totalCost","inputCost","outputCost","avgCost","latencyMs","ttftMs","avgLatencyMs","p50LatencyMs","p95LatencyMs","p99LatencyMs","statusCode","httpStatus","count","total","totalItems","totalPages","page","pageSize","errors","success","failures","errorRate","successRate","slowRequestRate","longInputRate","payloadSizeBytes","dataSizeBytes","sizeBytes"]),B=new Set(["timestamp","created_at","createdAt","created","updated_at","updatedAt","updated","lastUsed","lastSeen","firstSeen","minTs","maxTs"]);function C(a){return"string"!=typeof a?a:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(a)?r(a):a}function D(a){let b=String(a||"");return(b=(b=(b=(b=b.replace(/CAST\(status AS TEXT\)/g,"CAST(status AS CHAR)")).replace(/CAST\(strftime\('%s',\s*timestamp\) AS INTEGER\)/g,"UNIX_TIMESTAMP(timestamp)")).replace(/GLOB\s+'2\[0-9\]\[0-9\]\*'/g,"REGEXP '^2[0-9][0-9].*'")).replace(/GLOB\s+'([^']*)\*'/g,(a,b)=>`LIKE '${String(b).replace(/'/g,"''")}%'`)).replace(/\bAS\s+key\b/gi,"AS `key`")}async function E(a){let b=await v(a);return await w(b),await b.query("SET SESSION sql_mode = CONCAT_WS(',', REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''), 'PIPES_AS_CONCAT')").catch(()=>{}),b}async function F(){let a=await u();if(!a)return null;let b=await E(a);try{await b.query("SELECT 1 FROM usage_events LIMIT 1")}catch(a){return j("usage-events-read",`[observability-mysql] MySQL usage_events table is not readable: ${a?.message||a}`),await b.end().catch(()=>{}),null}let c=async(a,c=[])=>{let d;if((d=String(a||"").replace(/\s+/g," ").trim()).startsWith("SELECT id, timestamp, provider, model, connectionId, apiKey, apiKeyId, apiKeyFingerprint, apiKeyName, endpoint, clientIp, clientIpNormalized, sourceTool, sourceToolLabel, sessionId, latencyMs, ttftMs, statusCode, errorCode, errorType, displayTotalInputTokens AS promptTokens, completionTokens, cachedTokens, reasoningTokens, cost, status, tokens FROM usageHistory")&&(d.includes("ORDER BY timestamp DESC LIMIT ?")||d.includes("ORDER BY (COALESCE(displayTotalInputTokens, 0) + COALESCE(completionTokens, 0)) DESC, timestamp DESC LIMIT ?")))return[];let[e]=await b.query(D(a),(c||[]).map(C));return Array.isArray(e)?e.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a))return a;let b={...a};for(let a of Object.keys(b))b[a]=function(a,b){let c;if(null==b)return b;let d=function(a,b){if(!B.has(String(a||""))||"string"!=typeof b)return b;let c=b.trim();return/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d{1,6})?$/.test(c)?`${c.replace(" ","T")}Z`:b}(a,b);if(d!==b)return d;if("number"==typeof b)return Number.isFinite(b)?b:0;if("bigint"==typeof b)return Number(b);if("string"==typeof b&&(c=String(a||""),A.has(c)||/(?:Requests|Tokens|Cost|LatencyMs|Rate|Count|Bytes|SizeBytes|Items|Pages|Ms)$/i.test(c)||/^(?:p50|p95|p99|avg|min|max|sum|total|count)$/i.test(c))){let a=b.trim();if(/^-?\d+(?:\.\d+)?$/.test(a)){let b=Number(a);return Number.isFinite(b)?b:0}}return b}(a,b[a]);return b}):e};return{type:"mysql",all:async(a,b=[])=>await c(a,b),async get(a,b=[]){let d=await c(a,b);return d?.[0]||null},async run(a,c=[]){let[d]=await b.query(D(a),(c||[]).map(C));return d},async close(){await b.end().catch(()=>{})}}}},5957:(a,b,c)=>{c.d(b,{jQ:()=>i});let d=Object.freeze({enabled:!0,requestsPerMinute:20,promptCharsMax:12e4,maxOutputTokens:0,forceThinkingOff:!0,allowedIpCidrs:[],expiresAt:""}),e=new Set(Object.keys(d));function f(a,b=0){let c=Number(a);return Number.isFinite(c)?Math.max(0,Math.floor(c)):b}function g(a,b=!0){if(null==a||""===a)return b;if("boolean"==typeof a)return a;if("number"==typeof a)return 0!==a;let c=String(a).trim().toLowerCase();return!["false","0","no","off"].includes(c)&&(!!["true","1","yes","on"].includes(c)||b)}function h(a){return a&&"object"==typeof a&&!Array.isArray(a)}function i(a={}){var b;if(!(h(a)&&Object.keys(a).some(a=>e.has(a))))return{};let c=h(a)?a:{};return{enabled:g(c.enabled,d.enabled),requestsPerMinute:f(c.requestsPerMinute,0),promptCharsMax:f(c.promptCharsMax,0),maxOutputTokens:f(c.maxOutputTokens??c.outputTokensMax??c.maxTokens??c.max_tokens??c.max_completion_tokens,0),forceThinkingOff:g(c.forceThinkingOff,d.forceThinkingOff),allowedIpCidrs:Array.isArray(b=c.allowedIpCidrs)?[...new Set(b.map(a=>String(a||"").trim()).filter(Boolean))]:[],expiresAt:String(c.expiresAt||"").trim()}}},14938:(a,b,c)=>{c.d(b,{HI:()=>t,jT:()=>s,x8:()=>u});var d=c(55511),e=c.n(d),f=c(79748),g=c.n(f),h=c(21820),i=c.n(h),j=c(33873),k=c.n(j);let l=process.env.DATA_DIR||process.env.BLUEROUTER_DATA_DIR||k().join(i().homedir(),".bluerouter"),m=k().join(l,"resource-monitor-servers.json");async function n(){await g().mkdir(l,{recursive:!0});try{let a=JSON.parse(await g().readFile(m,"utf8"));return{servers:Array.isArray(a?.servers)?a.servers:[]}}catch{return{servers:[]}}}async function o(a){await g().mkdir(l,{recursive:!0});let b=`${m}.${process.pid}.${e().randomUUID()}.tmp`;try{await g().writeFile(b,JSON.stringify({servers:a.servers||[]},null,2)),await g().rename(b,m)}catch(a){throw await g().unlink(b).catch(()=>{}),a}}function p(){return new Date().toISOString()}function q(a,b,c,d=null){return Object.prototype.hasOwnProperty.call(a,c)?a[c]:Object.prototype.hasOwnProperty.call(b,c)?b[c]:d}function r(a={},b={}){let c=String(a.host??b.host??"").trim();return{id:b.id||a.id||e().randomUUID(),name:String(a.name??b.name??c??"Linux server").trim()||c||"Linux server",host:c,sshPort:Math.max(1,Number(a.sshPort??b.sshPort??22)||22),sshUser:String(a.sshUser??b.sshUser??"root").trim()||"root",useSudo:a.useSudo??b.useSudo??!0,agentPort:Math.max(1,Number(a.agentPort??b.agentPort??19998)||19998),agentToken:String(a.agentToken??b.agentToken??e().randomBytes(24).toString("hex")),enabled:a.enabled??b.enabled??!0,notes:String(a.notes??b.notes??"").trim(),lastStatus:q(a,b,"lastStatus"),lastStatusAt:q(a,b,"lastStatusAt"),lastError:q(a,b,"lastError"),lastErrorAt:q(a,b,"lastErrorAt"),lastInstallAt:q(a,b,"lastInstallAt"),lastInstallOk:q(a,b,"lastInstallOk",!1),lastInstallLog:q(a,b,"lastInstallLog",""),createdAt:b.createdAt||p(),updatedAt:p()}}function s(a){if(!a)return null;let{agentToken:b,...c}=a;return c}async function t({includeSecrets:a=!1}={}){let b=(await n()).servers.map(a=>r(a,a));return a?b:b.map(s)}async function u(a){if(!Array.isArray(a))throw Error("Invalid resource monitor servers payload");let b=new Set,c=a.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid resource monitor server entry");let c=String(a.id||"").trim();if(!c)throw Error("Resource monitor server ID is required");if(b.has(c))throw Error(`Duplicate resource monitor server ID: ${c}`);return b.add(c),r({...a,id:c},{...a,id:c})});return await o({servers:c}),c}},20437:(a,b,c)=>{c.d(b,{AL:()=>j,HG:()=>i,Jh:()=>m,KQ:()=>k,Or:()=>l});var d=c(76760),e=c.n(d),f=c(73024),g=c.n(f),h=c(53859);let i=e().join(h.n,"db"),j=e().join(i,"data.sqlite"),k=e().join(i,"backups"),l={main:e().join(h.n,"db.json"),usage:e().join(h.n,"usage.json"),disabled:e().join(h.n,"disabledModels.json"),details:e().join(h.n,"request-details.json")};function m(){for(let a of[h.n,i,k])g().existsSync(a)||g().mkdirSync(a,{recursive:!0})}},24081:(a,b,c)=>{c.d(b,{c:()=>k});var d=c(20437);global._dbAdapter||(global._dbAdapter={instance:null,initPromise:null,logged:!1});let e=global._dbAdapter;async function f(){if(!process.versions.bun)return null;try{let{createBunSqliteAdapter:a}=await c.e(8062).then(c.bind(c,38062));return await a(d.AL)}catch(a){return console.warn(`[DB] bun:sqlite unavailable: ${a.message}`),null}}async function g(){if(process.versions.bun||"1"===process.env.BLUEROUTER_SKIP_NATIVE_SQLITE)return null;try{let{createBetterSqliteAdapter:a}=await c.e(8469).then(c.bind(c,88469));return a(d.AL)}catch(a){return console.warn(`[DB] better-sqlite3 unavailable: ${a.message}`),null}}async function h(){if(process.versions.bun)return null;let[a,b]=process.versions.node.split(".").map(Number);if(a<22||22===a&&b<5)return null;try{let{createNodeSqliteAdapter:a}=await c.e(4803).then(c.bind(c,54803));return await a(d.AL)}catch(a){return console.warn(`[DB] node:sqlite unavailable: ${a.message}`),null}}async function i(){try{let{createSqlJsAdapter:a}=await c.e(6252).then(c.bind(c,66252));return await a(d.AL)}catch(a){return console.warn(`[DB] sql.js unavailable: ${a.message}`),null}}async function j(){(0,d.Jh)();let a=await f();if(a||(a=await g()),a||(a=await h()),a||(a=await i()),!a)throw Error("[DB] No SQLite driver available (bun/better/node/sql.js all failed)");e.logged||(console.log(`[DB] Driver: ${a.driver} | file: ${d.AL}`),e.logged=!0);let{runMigrationOnce:b}=await c.e(3824).then(c.bind(c,83824));return await b(a),a}async function k(){return e.instance?e.instance:(e.initPromise||(e.initPromise=j().then(a=>(e.instance=a,a))),e.initPromise)}},25346:(a,b,c)=>{var d=c(94735);c(689),global._pendingRequests||(global._pendingRequests={byModel:{},byAccount:{}}),global._lastErrorProvider||(global._lastErrorProvider={provider:"",ts:0}),global._statsEmitter||(global._statsEmitter=new d.EventEmitter,global._statsEmitter.setMaxListeners(50)),global._pendingTimers||(global._pendingTimers={}),global._usageStatsCache||(global._usageStatsCache=new Map),global._recentRing||(global._recentRing={items:[],initialized:!1}),global._connectionMapCache||(global._connectionMapCache={map:{},ts:0}),global._pendingRequests,global._usageStatsCache,global._lastErrorProvider,global._pendingTimers,global._recentRing,global._connectionMapCache,global._statsEmitter},41170:(a,b,c)=>{c.d(b,{I6:()=>g,L7:()=>h}),c(51455),c(76760),c(53859);var d=c(70321);let e=new Set(["mysql","postgres"]),f={enabled:!1,fileLoggingEnabled:!1,type:"mysql",host:"",port:"",database:"",username:"",password:"",ssl:!1,createDatabase:!1,logClientRequest:!0,logSourceRequest:!0,logTargetRequest:!0,logProviderResponse:!1,logErrors:!0,retentionDays:30,payloadRotationEnabled:!1,payloadRetentionDays:60,payloadRotationIntervalHours:24,payloadRotationBatchSize:500,payloadRotationMaxBatches:20};function g(a={},b={}){let c=String(a?.type||b?.type||f.type).trim().toLowerCase(),d=!!c&&!e.has(c),h=d?f.type:c,i={...f,...b||{},...a||{},type:h};i.enabled=!!i.enabled,i.fileLoggingEnabled=!0===i.fileLoggingEnabled,i.ssl=!!i.ssl,i.createDatabase=!!i.createDatabase,i.logClientRequest=!1!==i.logClientRequest,i.logSourceRequest=!1!==i.logSourceRequest,i.logTargetRequest=!1!==i.logTargetRequest,i.logProviderResponse=!0===i.logProviderResponse,i.logErrors=!1!==i.logErrors;let j=Number(i.retentionDays);i.retentionDays=Number.isFinite(j)&&j>0?Math.floor(j):30;let k=(a,b,c,d)=>{let e=Number(a);return Number.isFinite(e)?Math.min(d,Math.max(c,Math.floor(e))):b};return i.payloadRotationEnabled=!0===i.payloadRotationEnabled,i.payloadRetentionDays=k(i.payloadRetentionDays,60,1,3650),i.payloadRotationIntervalHours=k(i.payloadRotationIntervalHours,24,1,168),i.payloadRotationBatchSize=k(i.payloadRotationBatchSize,500,50,5e3),i.payloadRotationMaxBatches=k(i.payloadRotationMaxBatches,20,1,200),"********"===i.password&&(i.password=b?.password||""),i.host=String(i.host||"").trim(),i.port=String(i.port||("postgres"===i.type?"5432":"3306")).trim(),i.database=String(i.database||"").trim(),i.username=String(i.username||"").trim(),i.password=String(i.password||""),!d||i.host||i.database||i.username||(i.enabled=!1),delete i.sqlitePath,i}async function h(){let a=await (0,d.mt)();return g(a?.promptLogDb||{})}},42636:(a,b,c)=>{c.d(b,{t9:()=>h,tW:()=>i});let d="local",e="cloud",f="unknown";function g(a){return String(a??"").trim()}function h(a,b=f){let c=g(a).toLowerCase();return c===d?d:c===e?e:c===f?f:b}function i(a,b=f){let c,h=g(a);if(!h)return b;try{c=new URL(h.includes("://")?h:`http://${h}`)}catch{return b}let j=g(c.hostname).replace(/^\[|\]$/g,"").toLowerCase();return j?"localhost"===j||"::1"===j||"0.0.0.0"===j||j.endsWith(".localhost")||j.endsWith(".local")||function(a){let b=a.split(".").map(a=>Number(a));if(4!==b.length||b.some(a=>!Number.isInteger(a)||a<0||a>255))return!1;let[c,d]=b;return 10===c||127===c||169===c&&254===d||172===c&&!!(d>=16)&&!!(d<=31)||192===c&&168===d}(j)?d:e:b}},45874:(a,b,c)=>{c.d(b,{Xx:()=>j,exportSettings:()=>k,getSettings:()=>i});var d=c(24081),e=c(50743);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},providerSchedules:{},providerHealthChecks:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},requireApiKey:!0,requireLogin:!0,tunnelDashboardAccess:!0,authMode:"password",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",ldapMonitorAdminGroupDn:"",enableObservability:!0,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:20128",dnsToolEnabled:{},rtkEnabled:!0,cavemanEnabled:!1,cavemanLevel:"full",sidebarAdvancedToolsVisible:!0,personalOAuthProviderPermissions:{},userApiKeyLimit:5,userApiKeyLimitOverrides:{},personalOAuthConnectionsPerProviderLimit:3,personalOAuthConnectionsPerProviderLimitOverrides:{},siteTitle:"",siteShortName:"",siteDescription:"",brandingLogo:null,brandingFavicon:null,resourceMonitorAiModel:"",dashboardAnalyticsAiModel:"",dashboardAnalyticsVllmConfig:""};async function g(){let a=(await (0,d.c)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}function h(a){let b={...f,...a||{}};for(let[a,c]of Object.entries(f))void 0===b[a]&&("outboundProxyEnabled"===a&&"string"==typeof b.outboundProxyUrl&&b.outboundProxyUrl.trim()?b[a]=!0:b[a]=c);return b.requireApiKey=!0,b.requireLogin=!0,b}async function i(){return h(await g())}async function j(a){let b,c=await (0,d.c)();return c.transaction(()=>{let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a,requireApiKey:!0,requireLogin:!0},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])}),h(b)}async function k(){return await g()}},46363:(a,b,c)=>{c.d(b,{iE:()=>h.iE,PX:()=>l.PX,Uv:()=>n,Mc:()=>h.Mc,P:()=>h.getProviderConnections,Fh:()=>j,hr:()=>k,mt:()=>g.getSettings,K1:()=>D,rj:()=>h.rj,Xx:()=>g.Xx});var d=c(24081),e=c(50743),f=c(14938),g=c(45874),h=c(76087);function i(a){return a?{...(0,e.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}async function j(a={}){let b=await (0,d.c)(),c=[],e=[];a.type&&(c.push("type = ?"),e.push(a.type));let f=`SELECT * FROM providerNodes${c.length?` WHERE ${c.join(" AND ")}`:""}`;return b.all(f,e).map(i)}async function k(a){var b;return(b=(await (0,d.c)()).get("SELECT * FROM proxyPools WHERE id = ?",[a]))?{...(0,e.q)(b.data,{}),id:b.id,isActive:1===b.isActive||!0===b.isActive,testStatus:b.testStatus,createdAt:b.createdAt,updatedAt:b.updatedAt}:null}c(42636);var l=c(48315);function m(a){return a?{id:a.id,name:a.name,kind:a.kind,models:(0,e.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt}:null}async function n(){return(await (0,d.c)()).all("SELECT * FROM combos ORDER BY createdAt ASC").map(m)}var o=c(58609);(0,o.U)("modelAliases"),(0,o.U)("customModels"),(0,o.U)("mitmAlias"),c(90181),c(25346);var p=c(689);let q=null,r=0;async function s(){if(q&&Date.now()-r<5e3)return q;try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,45874)),b=await a(),d="false"!==process.env.OBSERVABILITY_ENABLED;q={enabled:"boolean"==typeof b.enableObservability?b.enableObservability:d,maxRecords:b.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:b.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:b.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(b.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))}}catch{q={enabled:!1,maxRecords:200,batchSize:20,flushIntervalMs:5e3,maxJsonSize:5120}}return r=Date.now(),q}let t=[],u=null,v=!1,w=!1,x=!1;function y(a,b){if("write"===a){if(w)return;w=!0}else{if(x)return;x=!0}console.error(`[requestDetailsRepo] MySQL observability ${a} unavailable; SQLite fallback is disabled.`,b?.message||b||"")}function z(a,b){let c=JSON.stringify(a||{});return c.length>b?{_truncated:!0,_originalSize:c.length,_preview:c.substring(0,200)}:a||{}}async function A(){if(!v&&0!==t.length){v=!0;try{for(;t.length>0;){let a=t.splice(0,t.length),b=await s(),c=[];for(let d of a){d.id||(d.id=function(a){let b=new Date().toISOString(),c=Math.random().toString(36).substring(2,8),d=a?a.replace(/[^a-zA-Z0-9-]/g,"-"):"unknown";return`${b}-${c}-${d}`}(d.model)),d.timestamp||(d.timestamp=new Date().toISOString()),d.request?.headers&&(d.request.headers=function(a){if(!a||"object"!=typeof a)return{};let b=["authorization","x-api-key","cookie","token","api-key"],c={...a};for(let a of Object.keys(c))b.some(b=>a.toLowerCase().includes(b))&&delete c[a];return c}(d.request.headers));let a={id:d.id,provider:d.provider||null,model:d.model||null,connectionId:d.connectionId||null,timestamp:d.timestamp,status:d.status||null,requestId:d.requestId||d.id||null,endpoint:d.endpoint||d.request?.endpoint||null,rtkStats:d.rtkStats||null,latency:d.latency||{},tokens:d.tokens||{},request:z(d.request,b.maxJsonSize),providerRequest:z(d.providerRequest,b.maxJsonSize),providerResponse:z(d.providerResponse,b.maxJsonSize),response:z(d.response,b.maxJsonSize)};c.push(a)}if(!(c.length>0)||await (0,p.RT)(c).catch(a=>(y("write",a),!1))){let a=await s();(0,p.Nn)(a.maxRecords).catch(()=>{})}else y("write","request_details write returned false")}}catch(a){console.error("[requestDetailsRepo] Batch write failed:",a)}finally{v=!1}}}let B=async()=>{u&&(clearTimeout(u),u=null),t.length>0&&await A()};async function C(){let a=await (0,d.c)(),{exportSettings:b}=await Promise.resolve().then(c.bind(c,45874)),{exportBrandingAssets:g}=await c.e(8023).then(c.bind(c,28023)),h={backup:{formatVersion:2,exportedAt:new Date().toISOString()},settings:await b(),providerConnections:a.all("SELECT * FROM providerConnections").map(a=>({...(0,e.q)(a.data,{}),id:a.id,provider:a.provider,authType:a.authType,name:a.name,email:a.email,priority:a.priority,isActive:1===a.isActive,scope:a.scope||"system",ownerUser:String(a.ownerUser||"").trim().toLowerCase(),createdByUser:String(a.createdByUser||"").trim().toLowerCase(),visibility:a.visibility||("personal"===a.scope?"private":"system"),createdAt:a.createdAt,updatedAt:a.updatedAt})),providerNodes:a.all("SELECT * FROM providerNodes").map(a=>({...(0,e.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt})),proxyPools:a.all("SELECT * FROM proxyPools").map(a=>({...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt})),apiKeys:a.all("SELECT * FROM apiKeys").map(a=>({id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive,adminDisabled:1===a.adminDisabled,ownerUser:a.ownerUser||"",createdByUser:a.createdByUser||"",cavemanMode:a.cavemanMode||"inherit",cavemanLevel:a.cavemanLevel||"lite",createdAt:a.createdAt,allowedModels:(0,e.q)(a.allowedModels,[]),limits:(0,e.q)(a.limits,{})})),combos:a.all("SELECT * FROM combos").map(a=>({id:a.id,name:a.name,kind:a.kind,models:(0,e.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt})),modelAliases:{},customModels:[],mitmAlias:{},pricing:{},resourceMonitor:{servers:await (0,f.HI)({includeSecrets:!0}),history:a.all("SELECT * FROM resourceMonitorHistory ORDER BY serverId, sampledAt").map(a=>({...a,gpus:(0,e.q)(a.gpus,[])}))},branding:await g()};for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'modelAliases'"))h.modelAliases[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'customModels'"))h.customModels.push((0,e.q)(b.value));for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'mitmAlias'"))h.mitmAlias[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'pricing'"))h.pricing[b.key]=(0,e.q)(b.value);return h}async function D(a,{returnExport:b=!0}={}){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid database payload");let g=await (0,d.c)(),{exportSettings:h}=await Promise.resolve().then(c.bind(c,45874)),{exportBrandingAssets:i,restoreBrandingAssets:j,validateBrandingBackup:k}=await c.e(8023).then(c.bind(c,28023)),l=Object.prototype.hasOwnProperty.call(a,"branding");l&&k(a.branding);let m=await h(),n=l?await i():null,o=a.settings&&"object"==typeof a.settings?{...a.settings}:a.settings;!l&&o&&(o.brandingLogo=m.brandingLogo||null,o.brandingFavicon=m.brandingFavicon||null);let p=Object.prototype.hasOwnProperty.call(a,"resourceMonitor"),q=p?a.resourceMonitor:null;if(p&&(!q||"object"!=typeof q||Array.isArray(q)||!Array.isArray(q.servers)||!Array.isArray(q.history)))throw Error("Invalid resource monitor backup payload");let r=p?q.history.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid resource monitor history entry");let b=String(a.serverId||"").trim(),c=Number(a.sampledAt);if(!b||!Number.isFinite(c))throw Error("Invalid resource monitor history entry");return{serverId:b,sampledAt:c,cpuUsage:Number(a.cpuUsage)||0,memoryUsage:Number(a.memoryUsage)||0,diskUsage:Number(a.diskUsage)||0,diskUsedBytes:Number(a.diskUsedBytes)||0,networkRxBps:Number(a.networkRxBps)||0,networkTxBps:Number(a.networkTxBps)||0,gpus:Array.isArray(a.gpus)?a.gpus:[]}}):[],s=null;p&&(s=await (0,f.HI)({includeSecrets:!0}),await (0,f.x8)(q.servers));try{g.transaction(()=>{for(let b of(g.run("DELETE FROM settings"),g.run("DELETE FROM providerConnections"),g.run("DELETE FROM providerNodes"),g.run("DELETE FROM proxyPools"),g.run("DELETE FROM apiKeys"),g.run("DELETE FROM combos"),g.run("DELETE FROM kv WHERE scope IN ('modelAliases', 'customModels', 'mitmAlias', 'pricing')"),p&&g.run("DELETE FROM resourceMonitorHistory"),o&&g.run(`INSERT INTO settings(id, data) VALUES(1, ?)
191
+ data_size_bytes = VALUES(data_size_bytes)`,[q(a.id),r(a.timestamp),q(a.provider)||null,q(a.model)||null,q(a.connectionId)||null,q(a.status)||null,c,Buffer.byteLength(c,"utf8")])}return!0}catch(a){return j("request-details-write",`[observability-mysql] Failed to write request_details: ${k(a)}`),!1}finally{b&&await b.end().catch(()=>{})}}let y=0;async function z(a=1e3){let b;if(Date.now()-y<6e4)return;y=Date.now();let c=await u();if(c)try{b=await v(c);let[[d]]=await b.query("SELECT COUNT(*) AS c FROM request_details"),e=Number(d?.c||0)-a;if(e<=0)return;await b.query("DELETE FROM request_details ORDER BY created_at ASC LIMIT ?",[e])}catch(a){j("request-details-purge",`[observability-mysql] Failed to purge request_details: ${k(a)}`)}finally{b&&await b.end().catch(()=>{})}}let A=new Set(["requests","requestCount","totalRequests","successRequests","errorRequests","pendingRequests","promptTokens","completionTokens","totalTokens","cachedTokens","reasoningTokens","inputTokens","outputTokens","cost","totalCost","inputCost","outputCost","avgCost","latencyMs","ttftMs","avgLatencyMs","p50LatencyMs","p95LatencyMs","p99LatencyMs","statusCode","httpStatus","count","total","totalItems","totalPages","page","pageSize","errors","success","failures","errorRate","successRate","slowRequestRate","longInputRate","payloadSizeBytes","dataSizeBytes","sizeBytes"]),B=new Set(["timestamp","created_at","createdAt","created","updated_at","updatedAt","updated","lastUsed","lastSeen","firstSeen","minTs","maxTs"]);function C(a){return"string"!=typeof a?a:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(a)?r(a):a}function D(a){let b=String(a||"");return(b=(b=(b=(b=b.replace(/CAST\(status AS TEXT\)/g,"CAST(status AS CHAR)")).replace(/CAST\(strftime\('%s',\s*timestamp\) AS INTEGER\)/g,"UNIX_TIMESTAMP(timestamp)")).replace(/GLOB\s+'2\[0-9\]\[0-9\]\*'/g,"REGEXP '^2[0-9][0-9].*'")).replace(/GLOB\s+'([^']*)\*'/g,(a,b)=>`LIKE '${String(b).replace(/'/g,"''")}%'`)).replace(/\bAS\s+key\b/gi,"AS `key`")}async function E(a){let b=await v(a);return await w(b),await b.query("SET SESSION sql_mode = CONCAT_WS(',', REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''), 'PIPES_AS_CONCAT')").catch(()=>{}),b}async function F(){let a=await u();if(!a)return null;let b=await E(a);try{await b.query("SELECT 1 FROM usage_events LIMIT 1")}catch(a){return j("usage-events-read",`[observability-mysql] MySQL usage_events table is not readable: ${a?.message||a}`),await b.end().catch(()=>{}),null}let c=async(a,c=[])=>{let d;if((d=String(a||"").replace(/\s+/g," ").trim()).startsWith("SELECT id, timestamp, provider, model, connectionId, apiKey, apiKeyId, apiKeyFingerprint, apiKeyName, endpoint, clientIp, clientIpNormalized, sourceTool, sourceToolLabel, sessionId, latencyMs, ttftMs, statusCode, errorCode, errorType, displayTotalInputTokens AS promptTokens, completionTokens, cachedTokens, reasoningTokens, cost, status, tokens FROM usageHistory")&&(d.includes("ORDER BY timestamp DESC LIMIT ?")||d.includes("ORDER BY (COALESCE(displayTotalInputTokens, 0) + COALESCE(completionTokens, 0)) DESC, timestamp DESC LIMIT ?")))return[];let[e]=await b.query(D(a),(c||[]).map(C));return Array.isArray(e)?e.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a))return a;let b={...a};for(let a of Object.keys(b))b[a]=function(a,b){let c;if(null==b)return b;let d=function(a,b){if(!B.has(String(a||""))||"string"!=typeof b)return b;let c=b.trim();return/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d{1,6})?$/.test(c)?`${c.replace(" ","T")}Z`:b}(a,b);if(d!==b)return d;if("number"==typeof b)return Number.isFinite(b)?b:0;if("bigint"==typeof b)return Number(b);if("string"==typeof b&&(c=String(a||""),A.has(c)||/(?:Requests|Tokens|Cost|LatencyMs|Rate|Count|Bytes|SizeBytes|Items|Pages|Ms)$/i.test(c)||/^(?:p50|p95|p99|avg|min|max|sum|total|count)$/i.test(c))){let a=b.trim();if(/^-?\d+(?:\.\d+)?$/.test(a)){let b=Number(a);return Number.isFinite(b)?b:0}}return b}(a,b[a]);return b}):e};return{type:"mysql",all:async(a,b=[])=>await c(a,b),async get(a,b=[]){let d=await c(a,b);return d?.[0]||null},async run(a,c=[]){let[d]=await b.query(D(a),(c||[]).map(C));return d},async close(){await b.end().catch(()=>{})}}}},5957:(a,b,c)=>{c.d(b,{jQ:()=>i});let d=Object.freeze({enabled:!0,requestsPerMinute:20,promptCharsMax:12e4,maxOutputTokens:0,forceThinkingOff:!0,allowedIpCidrs:[],expiresAt:""}),e=new Set(Object.keys(d));function f(a,b=0){let c=Number(a);return Number.isFinite(c)?Math.max(0,Math.floor(c)):b}function g(a,b=!0){if(null==a||""===a)return b;if("boolean"==typeof a)return a;if("number"==typeof a)return 0!==a;let c=String(a).trim().toLowerCase();return!["false","0","no","off"].includes(c)&&(!!["true","1","yes","on"].includes(c)||b)}function h(a){return a&&"object"==typeof a&&!Array.isArray(a)}function i(a={}){var b;if(!(h(a)&&Object.keys(a).some(a=>e.has(a))))return{};let c=h(a)?a:{};return{enabled:g(c.enabled,d.enabled),requestsPerMinute:f(c.requestsPerMinute,0),promptCharsMax:f(c.promptCharsMax,0),maxOutputTokens:f(c.maxOutputTokens??c.outputTokensMax??c.maxTokens??c.max_tokens??c.max_completion_tokens,0),forceThinkingOff:g(c.forceThinkingOff,d.forceThinkingOff),allowedIpCidrs:Array.isArray(b=c.allowedIpCidrs)?[...new Set(b.map(a=>String(a||"").trim()).filter(Boolean))]:[],expiresAt:String(c.expiresAt||"").trim()}}},14938:(a,b,c)=>{c.d(b,{HI:()=>t,jT:()=>s,x8:()=>u});var d=c(55511),e=c.n(d),f=c(79748),g=c.n(f),h=c(21820),i=c.n(h),j=c(33873),k=c.n(j);let l=process.env.DATA_DIR||process.env.BLUEROUTER_DATA_DIR||k().join(i().homedir(),".bluerouter"),m=k().join(l,"resource-monitor-servers.json");async function n(){await g().mkdir(l,{recursive:!0});try{let a=JSON.parse(await g().readFile(m,"utf8"));return{servers:Array.isArray(a?.servers)?a.servers:[]}}catch{return{servers:[]}}}async function o(a){await g().mkdir(l,{recursive:!0});let b=`${m}.${process.pid}.${e().randomUUID()}.tmp`;try{await g().writeFile(b,JSON.stringify({servers:a.servers||[]},null,2)),await g().rename(b,m)}catch(a){throw await g().unlink(b).catch(()=>{}),a}}function p(){return new Date().toISOString()}function q(a,b,c,d=null){return Object.prototype.hasOwnProperty.call(a,c)?a[c]:Object.prototype.hasOwnProperty.call(b,c)?b[c]:d}function r(a={},b={}){let c=String(a.host??b.host??"").trim();return{id:b.id||a.id||e().randomUUID(),name:String(a.name??b.name??c??"Linux server").trim()||c||"Linux server",host:c,sshPort:Math.max(1,Number(a.sshPort??b.sshPort??22)||22),sshUser:String(a.sshUser??b.sshUser??"root").trim()||"root",useSudo:a.useSudo??b.useSudo??!0,agentPort:Math.max(1,Number(a.agentPort??b.agentPort??19998)||19998),agentToken:String(a.agentToken??b.agentToken??e().randomBytes(24).toString("hex")),enabled:a.enabled??b.enabled??!0,notes:String(a.notes??b.notes??"").trim(),lastStatus:q(a,b,"lastStatus"),lastStatusAt:q(a,b,"lastStatusAt"),lastError:q(a,b,"lastError"),lastErrorAt:q(a,b,"lastErrorAt"),lastInstallAt:q(a,b,"lastInstallAt"),lastInstallOk:q(a,b,"lastInstallOk",!1),lastInstallLog:q(a,b,"lastInstallLog",""),createdAt:b.createdAt||p(),updatedAt:p()}}function s(a){if(!a)return null;let{agentToken:b,...c}=a;return c}async function t({includeSecrets:a=!1}={}){let b=(await n()).servers.map(a=>r(a,a));return a?b:b.map(s)}async function u(a){if(!Array.isArray(a))throw Error("Invalid resource monitor servers payload");let b=new Set,c=a.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid resource monitor server entry");let c=String(a.id||"").trim();if(!c)throw Error("Resource monitor server ID is required");if(b.has(c))throw Error(`Duplicate resource monitor server ID: ${c}`);return b.add(c),r({...a,id:c},{...a,id:c})});return await o({servers:c}),c}},20437:(a,b,c)=>{c.d(b,{AL:()=>j,HG:()=>i,Jh:()=>m,KQ:()=>k,Or:()=>l});var d=c(76760),e=c.n(d),f=c(73024),g=c.n(f),h=c(53859);let i=e().join(h.n,"db"),j=e().join(i,"data.sqlite"),k=e().join(i,"backups"),l={main:e().join(h.n,"db.json"),usage:e().join(h.n,"usage.json"),disabled:e().join(h.n,"disabledModels.json"),details:e().join(h.n,"request-details.json")};function m(){for(let a of[h.n,i,k])g().existsSync(a)||g().mkdirSync(a,{recursive:!0})}},24081:(a,b,c)=>{c.d(b,{c:()=>k});var d=c(20437);global._dbAdapter||(global._dbAdapter={instance:null,initPromise:null,logged:!1});let e=global._dbAdapter;async function f(){if(!process.versions.bun)return null;try{let{createBunSqliteAdapter:a}=await c.e(8062).then(c.bind(c,38062));return await a(d.AL)}catch(a){return console.warn(`[DB] bun:sqlite unavailable: ${a.message}`),null}}async function g(){if(process.versions.bun||"1"===process.env.BLUEROUTER_SKIP_NATIVE_SQLITE)return null;try{let{createBetterSqliteAdapter:a}=await c.e(8469).then(c.bind(c,88469));return a(d.AL)}catch(a){return console.warn(`[DB] better-sqlite3 unavailable: ${a.message}`),null}}async function h(){if(process.versions.bun)return null;let[a,b]=process.versions.node.split(".").map(Number);if(a<22||22===a&&b<5)return null;try{let{createNodeSqliteAdapter:a}=await c.e(4803).then(c.bind(c,54803));return await a(d.AL)}catch(a){return console.warn(`[DB] node:sqlite unavailable: ${a.message}`),null}}async function i(){try{let{createSqlJsAdapter:a}=await c.e(6252).then(c.bind(c,66252));return await a(d.AL)}catch(a){return console.warn(`[DB] sql.js unavailable: ${a.message}`),null}}async function j(){(0,d.Jh)();let a=await f();if(a||(a=await g()),a||(a=await h()),a||(a=await i()),!a)throw Error("[DB] No SQLite driver available (bun/better/node/sql.js all failed)");e.logged||(console.log(`[DB] Driver: ${a.driver} | file: ${d.AL}`),e.logged=!0);let{runMigrationOnce:b}=await c.e(3824).then(c.bind(c,83824));return await b(a),a}async function k(){return e.instance?e.instance:(e.initPromise||(e.initPromise=j().then(a=>(e.instance=a,a))),e.initPromise)}},25346:(a,b,c)=>{var d=c(94735);c(689),global._pendingRequests||(global._pendingRequests={byModel:{},byAccount:{}}),global._lastErrorProvider||(global._lastErrorProvider={provider:"",ts:0}),global._statsEmitter||(global._statsEmitter=new d.EventEmitter,global._statsEmitter.setMaxListeners(50)),global._pendingTimers||(global._pendingTimers={}),global._usageStatsCache||(global._usageStatsCache=new Map),global._recentRing||(global._recentRing={items:[],initialized:!1}),global._connectionMapCache||(global._connectionMapCache={map:{},ts:0}),global._pendingRequests,global._usageStatsCache,global._lastErrorProvider,global._pendingTimers,global._recentRing,global._connectionMapCache,global._statsEmitter},41170:(a,b,c)=>{c.r(b),c.d(b,{DEFAULT_PROMPT_LOG_DB_CONFIG:()=>l,getPromptLogDbConfig:()=>o,initializePromptLogDb:()=>A,maskConfig:()=>m,normalizeConfig:()=>n,savePromptLogDbConfig:()=>q,testPromptLogDb:()=>B});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(53859),i=c(70321);let j=new Set(["mysql","postgres"]),k="sqlitePath",l={enabled:!1,fileLoggingEnabled:!1,type:"mysql",host:"",port:"",database:"",username:"",password:"",ssl:!1,createDatabase:!1,logClientRequest:!0,logSourceRequest:!0,logTargetRequest:!0,logProviderResponse:!1,logErrors:!0,retentionDays:30,payloadRotationEnabled:!1,payloadRetentionDays:60,payloadRotationIntervalHours:24,payloadRotationBatchSize:500,payloadRotationMaxBatches:20};function m(a){let b={...a||{}};return b.password&&(b.password="********"),delete b[k],b}function n(a={},b={}){let c=String(a?.type||b?.type||l.type).trim().toLowerCase(),d=!!c&&!j.has(c),e=d?l.type:c,f={...l,...b||{},...a||{},type:e};f.enabled=!!f.enabled,f.fileLoggingEnabled=!0===f.fileLoggingEnabled,f.ssl=!!f.ssl,f.createDatabase=!!f.createDatabase,f.logClientRequest=!1!==f.logClientRequest,f.logSourceRequest=!1!==f.logSourceRequest,f.logTargetRequest=!1!==f.logTargetRequest,f.logProviderResponse=!0===f.logProviderResponse,f.logErrors=!1!==f.logErrors;let g=Number(f.retentionDays);f.retentionDays=Number.isFinite(g)&&g>0?Math.floor(g):30;let h=(a,b,c,d)=>{let e=Number(a);return Number.isFinite(e)?Math.min(d,Math.max(c,Math.floor(e))):b};return f.payloadRotationEnabled=!0===f.payloadRotationEnabled,f.payloadRetentionDays=h(f.payloadRetentionDays,60,1,3650),f.payloadRotationIntervalHours=h(f.payloadRotationIntervalHours,24,1,168),f.payloadRotationBatchSize=h(f.payloadRotationBatchSize,500,50,5e3),f.payloadRotationMaxBatches=h(f.payloadRotationMaxBatches,20,1,200),"********"===f.password&&(f.password=b?.password||""),f.host=String(f.host||"").trim(),f.port=String(f.port||("postgres"===f.type?"5432":"3306")).trim(),f.database=String(f.database||"").trim(),f.username=String(f.username||"").trim(),f.password=String(f.password||""),!d||f.host||f.database||f.username||(f.enabled=!1),delete f[k],f}async function o(){let a=await (0,i.mt)();return n(a?.promptLogDb||{})}async function p(a){let b=g().join(h.n,"mitm");await e().mkdir(b,{recursive:!0}),await e().writeFile(g().join(b,"logging.json"),JSON.stringify({fileLoggingEnabled:!0===a.fileLoggingEnabled},null,2),"utf-8")}async function q(a){let b=await (0,i.mt)(),c=n(a,b?.promptLogDb||{});return await (0,i.Xx)({promptLogDb:c}),await p(c),c}async function r(a,b=null){let d=new(await Promise.resolve().then(c.bind(c,64939))).Client({host:a.host,port:Number(a.port||5432),database:b||a.database,user:a.username,password:a.password,ssl:!!a.ssl&&{rejectUnauthorized:!1}});return await d.connect(),{type:"postgres",client:d,async exec(a){await d.query(a)},async close(){await d.end()}}}async function s(a,b=!0){let d=await c.e(4790).then(c.t.bind(c,94790,19)),e=await d.createConnection({host:a.host,port:Number(a.port||3306),database:b?a.database:void 0,user:a.username,password:a.password,ssl:a.ssl?{}:void 0,multipleStatements:!0,connectTimeout:3e3});return{type:"mysql",conn:e,async exec(a){await e.query(a)},async close(){await e.end()}}}async function t(a){await a.exec(`
192
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_ip TEXT;
193
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_port TEXT;
194
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_user_agent TEXT;
195
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS client_host TEXT;
196
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS source_tool TEXT;
197
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS source_tool_label TEXT;
198
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS source_host TEXT;
199
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS provider TEXT;
200
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS account_name TEXT;
201
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS connection_id TEXT;
202
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS display_model TEXT;
203
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS content_mode TEXT;
204
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS payload_hash TEXT;
205
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS payload_size_bytes BIGINT DEFAULT 0;
206
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS response_payload_hash TEXT;
207
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS response_payload_size_bytes BIGINT DEFAULT 0;
208
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS full_response_json JSONB;
209
+ ALTER TABLE prompt_logs ADD COLUMN IF NOT EXISTS combo_name TEXT GENERATED ALWAYS AS (meta_json->>'combo_name') STORED;
210
+
211
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip
212
+ ON prompt_logs(client_ip);
213
+
214
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool
215
+ ON prompt_logs(source_tool);
216
+
217
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_payload_hash
218
+ ON prompt_logs(payload_hash);
219
+
220
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_response_payload_hash
221
+ ON prompt_logs(response_payload_hash);
222
+
223
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_combo_name_created_at
224
+ ON prompt_logs(combo_name, created_at DESC);
225
+ `)}async function u(a,b,c,d){let[e]=await a.query(`
226
+ SELECT 1 AS found
227
+ FROM INFORMATION_SCHEMA.COLUMNS
228
+ WHERE TABLE_SCHEMA = ?
229
+ AND TABLE_NAME = ?
230
+ AND COLUMN_NAME = ?
231
+ LIMIT 1
232
+ `,[b,c,d]);return e.length>0}async function v(a,b,c,d){let[e]=await a.query(`
233
+ SELECT 1 AS found
234
+ FROM INFORMATION_SCHEMA.STATISTICS
235
+ WHERE TABLE_SCHEMA = ?
236
+ AND TABLE_NAME = ?
237
+ AND INDEX_NAME = ?
238
+ LIMIT 1
239
+ `,[b,c,d]);return e.length>0}async function w(a,b,c){let[d]=await a.query(`
240
+ SELECT 1 AS found
241
+ FROM INFORMATION_SCHEMA.TABLES
242
+ WHERE TABLE_SCHEMA = ?
243
+ AND TABLE_NAME = ?
244
+ AND TABLE_TYPE = 'BASE TABLE'
245
+ LIMIT 1
246
+ `,[b,c]);return d.length>0}async function x(a,b){if(!await w(a.conn,b.database,"usage_events"))return{checked:!1,created:!1};if(await v(a.conn,b.database,"usage_events","idx_usage_owner_time"))return{checked:!0,created:!1};try{return await a.conn.query("ALTER TABLE usage_events ADD INDEX idx_usage_owner_time (api_key_owner, timestamp, id)"),{checked:!0,created:!0}}catch(a){if(a?.code==="ER_DUP_KEYNAME"||1061===Number(a?.errno))return{checked:!0,created:!1};throw a}}async function y(a,b){let c=async(c,d)=>{await u(a.conn,b.database,"prompt_logs",c)||await a.conn.query(`ALTER TABLE prompt_logs ADD COLUMN ${c} ${d}`)};for(let[d,e]of(await c("client_ip","VARCHAR(64)"),await c("client_port","VARCHAR(32)"),await c("client_user_agent","TEXT"),await c("client_host","TEXT"),await c("source_tool","VARCHAR(80)"),await c("source_tool_label","VARCHAR(120)"),await c("source_host","VARCHAR(255)"),await c("provider","VARCHAR(120)"),await c("account_name","VARCHAR(255)"),await c("connection_id","VARCHAR(120)"),await c("display_model","VARCHAR(512)"),await c("content_mode","VARCHAR(32)"),await c("payload_hash","CHAR(64)"),await c("payload_size_bytes","BIGINT DEFAULT 0"),await c("response_payload_hash","CHAR(64)"),await c("response_payload_size_bytes","BIGINT DEFAULT 0"),await c("combo_name","VARCHAR(128) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(meta_json, '$.combo_name'))) STORED"),[["idx_prompt_logs_payload_hash","CREATE INDEX idx_prompt_logs_payload_hash ON prompt_logs(payload_hash)"],["idx_prompt_logs_response_payload_hash","CREATE INDEX idx_prompt_logs_response_payload_hash ON prompt_logs(response_payload_hash)"],["idx_prompt_logs_client_ip","CREATE INDEX idx_prompt_logs_client_ip ON prompt_logs(client_ip)"],["idx_prompt_logs_source_tool","CREATE INDEX idx_prompt_logs_source_tool ON prompt_logs(source_tool)"],["idx_prompt_logs_combo_name_created_at","CREATE INDEX idx_prompt_logs_combo_name_created_at ON prompt_logs(combo_name, created_at)"]]))await v(a.conn,b.database,"prompt_logs",d)||await a.conn.query(e);await a.conn.query(`CREATE TABLE IF NOT EXISTS prompt_log_payloads (
247
+ payload_hash CHAR(64) PRIMARY KEY,
248
+ created_at DATETIME(3) NOT NULL,
249
+ last_seen_at DATETIME(3) NOT NULL,
250
+ content_type VARCHAR(64),
251
+ payload_size_bytes BIGINT DEFAULT 0,
252
+ ref_count BIGINT DEFAULT 1,
253
+ payload_json JSON,
254
+ INDEX idx_prompt_log_payloads_created_at (created_at),
255
+ INDEX idx_prompt_log_payloads_last_seen_at (last_seen_at)
256
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`)}function z(a){if(!a.host||!a.database||!a.username){let b="postgres"===a.type?"PostgreSQL":"MySQL";throw Error(`${b} host, database, and username are required`)}}async function A(a=null){let b=n(a||await o());if("postgres"===b.type){if(z(b),b.createDatabase){let a=await r(b,"postgres");try{let c=await a.client.query("SELECT 1 FROM pg_database WHERE datname = $1",[b.database]);if(0===c.rowCount){let c=b.database.replace(/"/g,'""');await a.client.query(`CREATE DATABASE "${c}"`)}}finally{await a.close()}}let a=await r(b);try{return await a.exec(`
257
+ CREATE TABLE IF NOT EXISTS prompt_logs (
258
+ id TEXT PRIMARY KEY,
259
+ created_at TIMESTAMPTZ NOT NULL,
260
+ session_id TEXT,
261
+ source_format TEXT,
262
+ target_format TEXT,
263
+ model TEXT,
264
+ endpoint TEXT,
265
+ stage TEXT,
266
+ provider_url TEXT,
267
+ provider TEXT,
268
+ account_name TEXT,
269
+ connection_id TEXT,
270
+ display_model TEXT,
271
+ client_ip TEXT,
272
+ client_port TEXT,
273
+ client_user_agent TEXT,
274
+ client_host TEXT,
275
+ source_tool TEXT,
276
+ source_tool_label TEXT,
277
+ source_host TEXT,
278
+ content_mode TEXT,
279
+ payload_hash TEXT,
280
+ payload_size_bytes BIGINT DEFAULT 0,
281
+ response_payload_hash TEXT,
282
+ response_payload_size_bytes BIGINT DEFAULT 0,
283
+ prompt_text TEXT,
284
+ full_request_json JSONB,
285
+ full_response_json JSONB,
286
+ response_text TEXT,
287
+ status_code INTEGER,
288
+ error_text TEXT,
289
+ meta_json JSONB,
290
+ combo_name TEXT GENERATED ALWAYS AS (meta_json->>'combo_name') STORED
291
+ );
292
+
293
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_created_at
294
+ ON prompt_logs(created_at DESC);
295
+
296
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_model
297
+ ON prompt_logs(model);
298
+
299
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_stage
300
+ ON prompt_logs(stage);
301
+
302
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_session
303
+ ON prompt_logs(session_id);
304
+
305
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_client_ip
306
+ ON prompt_logs(client_ip);
307
+
308
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_source_tool
309
+ ON prompt_logs(source_tool);
310
+
311
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_payload_hash
312
+ ON prompt_logs(payload_hash);
313
+
314
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_response_payload_hash
315
+ ON prompt_logs(response_payload_hash);
316
+
317
+ CREATE INDEX IF NOT EXISTS idx_prompt_logs_combo_name_created_at
318
+ ON prompt_logs(combo_name, created_at DESC);
319
+ `),await t(a),{ok:!0,type:"postgres",message:"PostgreSQL prompt log schema is ready"}}finally{await a.close()}}if("mysql"===b.type){if(z(b),b.createDatabase){let a=await s(b,!1);try{let c=b.database.replace(/`/g,"``");await a.exec(`CREATE DATABASE IF NOT EXISTS \`${c}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`)}finally{await a.close()}}let a=await s(b,!0);try{await a.exec(`
320
+ CREATE TABLE IF NOT EXISTS prompt_logs (
321
+ id VARCHAR(80) PRIMARY KEY,
322
+ created_at DATETIME(3) NOT NULL,
323
+ session_id VARCHAR(255),
324
+ source_format VARCHAR(80),
325
+ target_format VARCHAR(80),
326
+ model VARCHAR(255),
327
+ endpoint TEXT,
328
+ stage VARCHAR(80),
329
+ provider_url TEXT,
330
+ provider VARCHAR(120),
331
+ account_name VARCHAR(255),
332
+ connection_id VARCHAR(120),
333
+ display_model VARCHAR(512),
334
+ client_ip VARCHAR(64),
335
+ client_port VARCHAR(32),
336
+ client_user_agent TEXT,
337
+ client_host TEXT,
338
+ source_tool VARCHAR(80),
339
+ source_tool_label VARCHAR(120),
340
+ source_host VARCHAR(255),
341
+ content_mode VARCHAR(32),
342
+ payload_hash CHAR(64),
343
+ payload_size_bytes BIGINT DEFAULT 0,
344
+ response_payload_hash CHAR(64),
345
+ response_payload_size_bytes BIGINT DEFAULT 0,
346
+ prompt_text LONGTEXT,
347
+ full_request_json JSON,
348
+ response_text LONGTEXT,
349
+ status_code INT,
350
+ error_text TEXT,
351
+ meta_json JSON,
352
+ combo_name VARCHAR(128) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(meta_json, '$.combo_name'))) STORED,
353
+ INDEX idx_prompt_logs_created_at (created_at),
354
+ INDEX idx_prompt_logs_model (model),
355
+ INDEX idx_prompt_logs_stage (stage),
356
+ INDEX idx_prompt_logs_session (session_id),
357
+ INDEX idx_prompt_logs_client_ip (client_ip),
358
+ INDEX idx_prompt_logs_source_tool (source_tool),
359
+ INDEX idx_prompt_logs_payload_hash (payload_hash),
360
+ INDEX idx_prompt_logs_response_payload_hash (response_payload_hash),
361
+ INDEX idx_prompt_logs_combo_name_created_at (combo_name, created_at)
362
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
363
+
364
+ CREATE TABLE IF NOT EXISTS prompt_log_payloads (
365
+ payload_hash CHAR(64) PRIMARY KEY,
366
+ created_at DATETIME(3) NOT NULL,
367
+ last_seen_at DATETIME(3) NOT NULL,
368
+ content_type VARCHAR(64),
369
+ payload_size_bytes BIGINT DEFAULT 0,
370
+ ref_count BIGINT DEFAULT 1,
371
+ payload_json JSON,
372
+ INDEX idx_prompt_log_payloads_created_at (created_at),
373
+ INDEX idx_prompt_log_payloads_last_seen_at (last_seen_at)
374
+ ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
375
+ `),await y(a,b);let c=await x(a,b);return{ok:!0,type:"mysql",message:"MySQL prompt log schema is ready",usageOwnerTimeIndex:c}}finally{await a.close()}}throw Error(`Unsupported prompt log database type: ${b.type}`)}async function B(a=null){let b=n(a||await o());if(z(b),"postgres"===b.type){let a=await r(b);try{return await a.exec("SELECT 1;"),{ok:!0,type:"postgres",message:"PostgreSQL connection OK"}}finally{await a.close()}}if("mysql"===b.type){let a=await s(b,!0);try{await a.exec("SELECT 1;");let c=await x(a,b);return{ok:!0,type:"mysql",message:c.created?"MySQL connection OK; usage owner index created":"MySQL connection OK",usageOwnerTimeIndex:c}}finally{await a.close()}}throw Error(`Unsupported prompt log database type: ${b.type}`)}},42636:(a,b,c)=>{c.d(b,{t9:()=>h,tW:()=>i});let d="local",e="cloud",f="unknown";function g(a){return String(a??"").trim()}function h(a,b=f){let c=g(a).toLowerCase();return c===d?d:c===e?e:c===f?f:b}function i(a,b=f){let c,h=g(a);if(!h)return b;try{c=new URL(h.includes("://")?h:`http://${h}`)}catch{return b}let j=g(c.hostname).replace(/^\[|\]$/g,"").toLowerCase();return j?"localhost"===j||"::1"===j||"0.0.0.0"===j||j.endsWith(".localhost")||j.endsWith(".local")||function(a){let b=a.split(".").map(a=>Number(a));if(4!==b.length||b.some(a=>!Number.isInteger(a)||a<0||a>255))return!1;let[c,d]=b;return 10===c||127===c||169===c&&254===d||172===c&&!!(d>=16)&&!!(d<=31)||192===c&&168===d}(j)?d:e:b}},45874:(a,b,c)=>{c.d(b,{Xx:()=>j,exportSettings:()=>k,getSettings:()=>i});var d=c(24081),e=c(50743);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},providerSchedules:{},providerHealthChecks:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},requireApiKey:!0,requireLogin:!0,tunnelDashboardAccess:!0,authMode:"password",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",ldapMonitorAdminGroupDn:"",enableObservability:!0,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:20128",dnsToolEnabled:{},rtkEnabled:!0,cavemanEnabled:!1,cavemanLevel:"full",sidebarAdvancedToolsVisible:!0,personalOAuthProviderPermissions:{},userApiKeyLimit:5,userApiKeyLimitOverrides:{},personalOAuthConnectionsPerProviderLimit:3,personalOAuthConnectionsPerProviderLimitOverrides:{},siteTitle:"",siteShortName:"",siteDescription:"",brandingLogo:null,brandingFavicon:null,resourceMonitorAiModel:"",dashboardAnalyticsAiModel:"",dashboardAnalyticsVllmConfig:""};async function g(){let a=(await (0,d.c)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}function h(a){let b={...f,...a||{}};for(let[a,c]of Object.entries(f))void 0===b[a]&&("outboundProxyEnabled"===a&&"string"==typeof b.outboundProxyUrl&&b.outboundProxyUrl.trim()?b[a]=!0:b[a]=c);return b.requireApiKey=!0,b.requireLogin=!0,b}async function i(){return h(await g())}async function j(a){let b,c=await (0,d.c)();return c.transaction(()=>{let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a,requireApiKey:!0,requireLogin:!0},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])}),h(b)}async function k(){return await g()}},46363:(a,b,c)=>{c.d(b,{iE:()=>h.iE,PX:()=>l.PX,Uv:()=>n,Mc:()=>h.Mc,P:()=>h.getProviderConnections,Fh:()=>j,hr:()=>k,mt:()=>g.getSettings,K1:()=>D,rj:()=>h.rj,Xx:()=>g.Xx});var d=c(24081),e=c(50743),f=c(14938),g=c(45874),h=c(76087);function i(a){return a?{...(0,e.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}async function j(a={}){let b=await (0,d.c)(),c=[],e=[];a.type&&(c.push("type = ?"),e.push(a.type));let f=`SELECT * FROM providerNodes${c.length?` WHERE ${c.join(" AND ")}`:""}`;return b.all(f,e).map(i)}async function k(a){var b;return(b=(await (0,d.c)()).get("SELECT * FROM proxyPools WHERE id = ?",[a]))?{...(0,e.q)(b.data,{}),id:b.id,isActive:1===b.isActive||!0===b.isActive,testStatus:b.testStatus,createdAt:b.createdAt,updatedAt:b.updatedAt}:null}c(42636);var l=c(48315);function m(a){return a?{id:a.id,name:a.name,kind:a.kind,models:(0,e.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt}:null}async function n(){return(await (0,d.c)()).all("SELECT * FROM combos ORDER BY createdAt ASC").map(m)}var o=c(58609);(0,o.U)("modelAliases"),(0,o.U)("customModels"),(0,o.U)("mitmAlias"),c(90181),c(25346);var p=c(689);let q=null,r=0;async function s(){if(q&&Date.now()-r<5e3)return q;try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,45874)),b=await a(),d="false"!==process.env.OBSERVABILITY_ENABLED;q={enabled:"boolean"==typeof b.enableObservability?b.enableObservability:d,maxRecords:b.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:b.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:b.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(b.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))}}catch{q={enabled:!1,maxRecords:200,batchSize:20,flushIntervalMs:5e3,maxJsonSize:5120}}return r=Date.now(),q}let t=[],u=null,v=!1,w=!1,x=!1;function y(a,b){if("write"===a){if(w)return;w=!0}else{if(x)return;x=!0}console.error(`[requestDetailsRepo] MySQL observability ${a} unavailable; SQLite fallback is disabled.`,b?.message||b||"")}function z(a,b){let c=JSON.stringify(a||{});return c.length>b?{_truncated:!0,_originalSize:c.length,_preview:c.substring(0,200)}:a||{}}async function A(){if(!v&&0!==t.length){v=!0;try{for(;t.length>0;){let a=t.splice(0,t.length),b=await s(),c=[];for(let d of a){d.id||(d.id=function(a){let b=new Date().toISOString(),c=Math.random().toString(36).substring(2,8),d=a?a.replace(/[^a-zA-Z0-9-]/g,"-"):"unknown";return`${b}-${c}-${d}`}(d.model)),d.timestamp||(d.timestamp=new Date().toISOString()),d.request?.headers&&(d.request.headers=function(a){if(!a||"object"!=typeof a)return{};let b=["authorization","x-api-key","cookie","token","api-key"],c={...a};for(let a of Object.keys(c))b.some(b=>a.toLowerCase().includes(b))&&delete c[a];return c}(d.request.headers));let a={id:d.id,provider:d.provider||null,model:d.model||null,connectionId:d.connectionId||null,timestamp:d.timestamp,status:d.status||null,requestId:d.requestId||d.id||null,endpoint:d.endpoint||d.request?.endpoint||null,rtkStats:d.rtkStats||null,latency:d.latency||{},tokens:d.tokens||{},request:z(d.request,b.maxJsonSize),providerRequest:z(d.providerRequest,b.maxJsonSize),providerResponse:z(d.providerResponse,b.maxJsonSize),response:z(d.response,b.maxJsonSize)};c.push(a)}if(!(c.length>0)||await (0,p.RT)(c).catch(a=>(y("write",a),!1))){let a=await s();(0,p.Nn)(a.maxRecords).catch(()=>{})}else y("write","request_details write returned false")}}catch(a){console.error("[requestDetailsRepo] Batch write failed:",a)}finally{v=!1}}}let B=async()=>{u&&(clearTimeout(u),u=null),t.length>0&&await A()};async function C(){let a=await (0,d.c)(),{exportSettings:b}=await Promise.resolve().then(c.bind(c,45874)),{exportBrandingAssets:g}=await c.e(8023).then(c.bind(c,28023)),h={backup:{formatVersion:2,exportedAt:new Date().toISOString()},settings:await b(),providerConnections:a.all("SELECT * FROM providerConnections").map(a=>({...(0,e.q)(a.data,{}),id:a.id,provider:a.provider,authType:a.authType,name:a.name,email:a.email,priority:a.priority,isActive:1===a.isActive,scope:a.scope||"system",ownerUser:String(a.ownerUser||"").trim().toLowerCase(),createdByUser:String(a.createdByUser||"").trim().toLowerCase(),visibility:a.visibility||("personal"===a.scope?"private":"system"),createdAt:a.createdAt,updatedAt:a.updatedAt})),providerNodes:a.all("SELECT * FROM providerNodes").map(a=>({...(0,e.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt})),proxyPools:a.all("SELECT * FROM proxyPools").map(a=>({...(0,e.q)(a.data,{}),id:a.id,isActive:1===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt})),apiKeys:a.all("SELECT * FROM apiKeys").map(a=>({id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive,adminDisabled:1===a.adminDisabled,ownerUser:a.ownerUser||"",createdByUser:a.createdByUser||"",cavemanMode:a.cavemanMode||"inherit",cavemanLevel:a.cavemanLevel||"lite",createdAt:a.createdAt,allowedModels:(0,e.q)(a.allowedModels,[]),limits:(0,e.q)(a.limits,{})})),combos:a.all("SELECT * FROM combos").map(a=>({id:a.id,name:a.name,kind:a.kind,models:(0,e.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt})),modelAliases:{},customModels:[],mitmAlias:{},pricing:{},resourceMonitor:{servers:await (0,f.HI)({includeSecrets:!0}),history:a.all("SELECT * FROM resourceMonitorHistory ORDER BY serverId, sampledAt").map(a=>({...a,gpus:(0,e.q)(a.gpus,[])}))},branding:await g()};for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'modelAliases'"))h.modelAliases[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'customModels'"))h.customModels.push((0,e.q)(b.value));for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'mitmAlias'"))h.mitmAlias[b.key]=(0,e.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'pricing'"))h.pricing[b.key]=(0,e.q)(b.value);return h}async function D(a,{returnExport:b=!0}={}){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid database payload");let g=await (0,d.c)(),{exportSettings:h}=await Promise.resolve().then(c.bind(c,45874)),{exportBrandingAssets:i,restoreBrandingAssets:j,validateBrandingBackup:k}=await c.e(8023).then(c.bind(c,28023)),l=Object.prototype.hasOwnProperty.call(a,"branding");l&&k(a.branding);let m=await h(),n=l?await i():null,o=a.settings&&"object"==typeof a.settings?{...a.settings}:a.settings;!l&&o&&(o.brandingLogo=m.brandingLogo||null,o.brandingFavicon=m.brandingFavicon||null);let p=Object.prototype.hasOwnProperty.call(a,"resourceMonitor"),q=p?a.resourceMonitor:null;if(p&&(!q||"object"!=typeof q||Array.isArray(q)||!Array.isArray(q.servers)||!Array.isArray(q.history)))throw Error("Invalid resource monitor backup payload");let r=p?q.history.map(a=>{if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid resource monitor history entry");let b=String(a.serverId||"").trim(),c=Number(a.sampledAt);if(!b||!Number.isFinite(c))throw Error("Invalid resource monitor history entry");return{serverId:b,sampledAt:c,cpuUsage:Number(a.cpuUsage)||0,memoryUsage:Number(a.memoryUsage)||0,diskUsage:Number(a.diskUsage)||0,diskUsedBytes:Number(a.diskUsedBytes)||0,networkRxBps:Number(a.networkRxBps)||0,networkTxBps:Number(a.networkTxBps)||0,gpus:Array.isArray(a.gpus)?a.gpus:[]}}):[],s=null;p&&(s=await (0,f.HI)({includeSecrets:!0}),await (0,f.x8)(q.servers));try{g.transaction(()=>{for(let b of(g.run("DELETE FROM settings"),g.run("DELETE FROM providerConnections"),g.run("DELETE FROM providerNodes"),g.run("DELETE FROM proxyPools"),g.run("DELETE FROM apiKeys"),g.run("DELETE FROM combos"),g.run("DELETE FROM kv WHERE scope IN ('modelAliases', 'customModels', 'mitmAlias', 'pricing')"),p&&g.run("DELETE FROM resourceMonitorHistory"),o&&g.run(`INSERT INTO settings(id, data) VALUES(1, ?)
192
376
  ON CONFLICT(id) DO UPDATE SET data = excluded.data`,[(0,e.s)(o)]),a.providerConnections||[])){let{id:a,provider:c,authType:d,name:f,email:h,priority:i,isActive:j,scope:k,ownerUser:l,createdByUser:m,visibility:n,createdAt:o,updatedAt:p,...q}=b,r="personal"===k?"personal":"system";g.run(`INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, scope, ownerUser, createdByUser, visibility, data, createdAt, updatedAt)
193
377
  VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[a,c,d||"oauth",f||null,h||null,i||null,+(!1!==j),r,String(l||"").trim().toLowerCase(),String(m||l||"").trim().toLowerCase(),n||("personal"===r?"private":"system"),(0,e.s)(q),o||new Date().toISOString(),p||new Date().toISOString()])}for(let b of a.providerNodes||[]){let{id:a,type:c,name:d,createdAt:f,updatedAt:h,...i}=b;g.run(`INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt)
194
378
  VALUES(?, ?, ?, ?, ?, ?)`,[a,c||null,d||null,(0,e.s)(i),f||new Date().toISOString(),h||new Date().toISOString()])}for(let b of a.proxyPools||[]){let{id:a,isActive:c,testStatus:d,createdAt:f,updatedAt:h,...i}=b;g.run(`INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)