9router 0.3.15 → 0.3.17

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 (513) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +40 -38
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/routes-manifest.json +12 -0
  5. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  6. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  9. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  12. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  15. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  18. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  21. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  27. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  30. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  33. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/_global-error.html +2 -2
  37. package/app/.next/server/app/_global-error.rsc +1 -1
  38. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  39. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  40. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  41. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  42. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  44. package/app/.next/server/app/_not-found/page.js +2 -2
  45. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  46. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/_not-found.html +1 -1
  48. package/app/.next/server/app/_not-found.rsc +2 -2
  49. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  50. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  51. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  52. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  53. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  54. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  55. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  58. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  65. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  67. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  69. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  71. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/models/alias/route.js +1 -1
  78. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/models/route.js +1 -1
  80. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  81. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/models/test/route.js +1 -0
  83. package/app/.next/server/app/api/models/test/route.js.nft.json +1 -0
  84. package/app/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -0
  85. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  86. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  87. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  90. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  93. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  96. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  99. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  101. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  104. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  105. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  107. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  109. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  110. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  112. package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  113. package/app/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/providers/route.js +1 -1
  116. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  117. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  119. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  122. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  123. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/settings/database/route.js +1 -1
  125. package/app/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/settings/proxy-test/route.js +1 -0
  127. package/app/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -0
  128. package/app/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -0
  129. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/settings/route.js +1 -1
  131. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  142. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  143. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  147. package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  152. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  153. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  155. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  156. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  158. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  159. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  162. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  163. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/v1/models/route.js +1 -1
  165. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  166. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  168. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  169. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  172. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  173. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  175. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  176. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/callback/page.js +2 -2
  178. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  179. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/callback.html +1 -1
  181. package/app/.next/server/app/callback.rsc +2 -2
  182. package/app/.next/server/app/callback.segments/_full.segment.rsc +2 -2
  183. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  184. package/app/.next/server/app/callback.segments/_index.segment.rsc +2 -2
  185. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  186. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  187. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  188. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  189. package/app/.next/server/app/dashboard/cli-tools.rsc +4 -4
  190. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  191. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  192. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  193. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  194. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +4 -4
  195. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  196. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +2 -2
  197. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  198. package/app/.next/server/app/dashboard/combos.html +1 -1
  199. package/app/.next/server/app/dashboard/combos.rsc +4 -4
  200. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  201. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  202. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  203. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  204. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +4 -4
  205. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  206. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +2 -2
  207. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  208. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  209. package/app/.next/server/app/dashboard/endpoint.rsc +4 -4
  210. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  211. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  212. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  213. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  214. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +4 -4
  215. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  216. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +2 -2
  217. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  218. package/app/.next/server/app/dashboard/profile.html +1 -1
  219. package/app/.next/server/app/dashboard/profile.rsc +4 -4
  220. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  221. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  222. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  223. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  224. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +4 -4
  225. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  226. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +2 -2
  227. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  228. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  229. package/app/.next/server/app/dashboard/providers/new.rsc +4 -4
  230. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  231. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  232. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  233. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  234. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  235. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +4 -4
  236. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  237. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +2 -2
  238. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  239. package/app/.next/server/app/dashboard/providers.html +1 -1
  240. package/app/.next/server/app/dashboard/providers.rsc +4 -4
  241. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  242. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  243. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  244. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  245. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +4 -4
  246. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  247. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +2 -2
  248. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  249. package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  250. package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  251. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  252. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  253. package/app/.next/server/app/dashboard/settings/pricing.rsc +2 -2
  254. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +2 -2
  255. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  256. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +2 -2
  257. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  258. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  259. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  260. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  261. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  262. package/app/.next/server/app/dashboard/translator.html +1 -1
  263. package/app/.next/server/app/dashboard/translator.rsc +4 -4
  264. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  265. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  266. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  267. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  268. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +4 -4
  269. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  270. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +2 -2
  271. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  272. package/app/.next/server/app/dashboard/usage.html +1 -1
  273. package/app/.next/server/app/dashboard/usage.rsc +4 -4
  274. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  275. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  276. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  277. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  278. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +4 -4
  279. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  280. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +2 -2
  281. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  282. package/app/.next/server/app/dashboard.html +1 -1
  283. package/app/.next/server/app/dashboard.rsc +4 -4
  284. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  285. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  286. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  287. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +4 -4
  288. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  289. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +2 -2
  290. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  291. package/app/.next/server/app/index.html +1 -1
  292. package/app/.next/server/app/index.rsc +2 -2
  293. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  294. package/app/.next/server/app/index.segments/_full.segment.rsc +2 -2
  295. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  296. package/app/.next/server/app/index.segments/_index.segment.rsc +2 -2
  297. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  298. package/app/.next/server/app/landing/page.js +2 -2
  299. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  300. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  301. package/app/.next/server/app/landing.html +1 -1
  302. package/app/.next/server/app/landing.rsc +2 -2
  303. package/app/.next/server/app/landing.segments/_full.segment.rsc +2 -2
  304. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  305. package/app/.next/server/app/landing.segments/_index.segment.rsc +2 -2
  306. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  307. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  308. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  309. package/app/.next/server/app/login/page.js +2 -2
  310. package/app/.next/server/app/login/page.js.nft.json +1 -1
  311. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  312. package/app/.next/server/app/login.html +1 -1
  313. package/app/.next/server/app/login.rsc +3 -3
  314. package/app/.next/server/app/login.segments/_full.segment.rsc +3 -3
  315. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  316. package/app/.next/server/app/login.segments/_index.segment.rsc +2 -2
  317. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  318. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  319. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  320. package/app/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  321. package/app/.next/server/app/page.js +2 -2
  322. package/app/.next/server/app/page.js.nft.json +1 -1
  323. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  324. package/app/.next/server/app-paths-manifest.json +40 -38
  325. package/app/.next/server/chunks/1424.js +1 -1
  326. package/app/.next/server/chunks/2280.js +1 -0
  327. package/app/.next/server/chunks/3832.js +1 -0
  328. package/app/.next/server/chunks/412.js +1 -1
  329. package/app/.next/server/chunks/4989.js +1 -1
  330. package/app/.next/server/chunks/{7189.js → 5330.js} +3 -3
  331. package/app/.next/server/chunks/6186.js +3 -3
  332. package/app/.next/server/chunks/7774.js +120 -0
  333. package/app/.next/server/chunks/8031.js +1 -0
  334. package/app/.next/server/chunks/{7828.js → 8756.js} +1 -1
  335. package/app/.next/server/chunks/8895.js +4 -0
  336. package/app/.next/server/chunks/9339.js +1 -0
  337. package/app/.next/server/chunks/9718.js +1 -1
  338. package/app/.next/server/functions-config-manifest.json +1 -15
  339. package/app/.next/server/pages/404.html +1 -1
  340. package/app/.next/server/pages/500.html +2 -2
  341. package/app/.next/server/server-reference-manifest.js +1 -1
  342. package/app/.next/server/server-reference-manifest.json +1 -1
  343. package/app/.next/server/webpack-runtime.js +1 -1
  344. package/app/.next/static/VsGR9-JVpgoWrBQMD5rc_/_buildManifest.js +1 -0
  345. package/app/.next/static/chunks/{5497-b0d3bb86e5099a7b.js → 5497-0caed5661cc768a7.js} +1 -1
  346. package/app/.next/static/chunks/{8729-76bd6c422b4a210b.js → 8729-971e8942337a94a5.js} +1 -1
  347. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-0b44731dc56d8ebd.js +1 -0
  348. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-340ac73f534fc285.js +1 -0
  349. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-8bde1753972175fd.js +1 -0
  350. package/app/.next/static/chunks/app/_global-error/page-c53f8629b3d600b9.js +1 -0
  351. package/app/.next/static/chunks/app/api/auth/login/route-c53f8629b3d600b9.js +1 -0
  352. package/app/.next/static/chunks/app/api/auth/logout/route-c53f8629b3d600b9.js +1 -0
  353. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-c53f8629b3d600b9.js +1 -0
  354. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-c53f8629b3d600b9.js +1 -0
  355. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-c53f8629b3d600b9.js +1 -0
  356. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-c53f8629b3d600b9.js +1 -0
  357. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-c53f8629b3d600b9.js +1 -0
  358. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-c53f8629b3d600b9.js +1 -0
  359. package/app/.next/static/chunks/app/api/cloud/auth/route-c53f8629b3d600b9.js +1 -0
  360. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-c53f8629b3d600b9.js +1 -0
  361. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-c53f8629b3d600b9.js +1 -0
  362. package/app/.next/static/chunks/app/api/cloud/models/alias/route-c53f8629b3d600b9.js +1 -0
  363. package/app/.next/static/chunks/app/api/combos/[id]/route-c53f8629b3d600b9.js +1 -0
  364. package/app/.next/static/chunks/app/api/combos/route-c53f8629b3d600b9.js +1 -0
  365. package/app/.next/static/chunks/app/api/init/route-c53f8629b3d600b9.js +1 -0
  366. package/app/.next/static/chunks/app/api/keys/[id]/route-c53f8629b3d600b9.js +1 -0
  367. package/app/.next/static/chunks/app/api/keys/route-c53f8629b3d600b9.js +1 -0
  368. package/app/.next/static/chunks/app/api/models/alias/route-c53f8629b3d600b9.js +1 -0
  369. package/app/.next/static/chunks/app/api/models/route-c53f8629b3d600b9.js +1 -0
  370. package/app/.next/static/chunks/app/api/models/test/route-c53f8629b3d600b9.js +1 -0
  371. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-c53f8629b3d600b9.js +1 -0
  372. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-c53f8629b3d600b9.js +1 -0
  373. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-c53f8629b3d600b9.js +1 -0
  374. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-c53f8629b3d600b9.js +1 -0
  375. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-c53f8629b3d600b9.js +1 -0
  376. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-c53f8629b3d600b9.js +1 -0
  377. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-c53f8629b3d600b9.js +1 -0
  378. package/app/.next/static/chunks/app/api/pricing/route-c53f8629b3d600b9.js +1 -0
  379. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-c53f8629b3d600b9.js +1 -0
  380. package/app/.next/static/chunks/app/api/provider-nodes/route-c53f8629b3d600b9.js +1 -0
  381. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-c53f8629b3d600b9.js +1 -0
  382. package/app/.next/static/chunks/app/api/providers/[id]/models/route-c53f8629b3d600b9.js +1 -0
  383. package/app/.next/static/chunks/app/api/providers/[id]/route-c53f8629b3d600b9.js +1 -0
  384. package/app/.next/static/chunks/app/api/providers/[id]/test/route-c53f8629b3d600b9.js +1 -0
  385. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-c53f8629b3d600b9.js +1 -0
  386. package/app/.next/static/chunks/app/api/providers/client/route-c53f8629b3d600b9.js +1 -0
  387. package/app/.next/static/chunks/app/api/providers/route-c53f8629b3d600b9.js +1 -0
  388. package/app/.next/static/chunks/app/api/providers/test-batch/route-c53f8629b3d600b9.js +1 -0
  389. package/app/.next/static/chunks/app/api/providers/validate/route-c53f8629b3d600b9.js +1 -0
  390. package/app/.next/static/chunks/app/api/settings/database/route-c53f8629b3d600b9.js +1 -0
  391. package/app/.next/static/chunks/app/api/settings/proxy-test/route-c53f8629b3d600b9.js +1 -0
  392. package/app/.next/static/chunks/app/api/settings/require-login/route-c53f8629b3d600b9.js +1 -0
  393. package/app/.next/static/chunks/app/api/settings/route-c53f8629b3d600b9.js +1 -0
  394. package/app/.next/static/chunks/app/api/shutdown/route-c53f8629b3d600b9.js +1 -0
  395. package/app/.next/static/chunks/app/api/tags/route-c53f8629b3d600b9.js +1 -0
  396. package/app/.next/static/chunks/app/api/translator/load/route-c53f8629b3d600b9.js +1 -0
  397. package/app/.next/static/chunks/app/api/translator/save/route-c53f8629b3d600b9.js +1 -0
  398. package/app/.next/static/chunks/app/api/translator/send/route-c53f8629b3d600b9.js +1 -0
  399. package/app/.next/static/chunks/app/api/translator/translate/route-c53f8629b3d600b9.js +1 -0
  400. package/app/.next/static/chunks/app/api/tunnel/disable/route-c53f8629b3d600b9.js +1 -0
  401. package/app/.next/static/chunks/app/api/tunnel/enable/route-c53f8629b3d600b9.js +1 -0
  402. package/app/.next/static/chunks/app/api/tunnel/status/route-c53f8629b3d600b9.js +1 -0
  403. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-c53f8629b3d600b9.js +1 -0
  404. package/app/.next/static/chunks/app/api/usage/chart/route-c53f8629b3d600b9.js +1 -0
  405. package/app/.next/static/chunks/app/api/usage/history/route-c53f8629b3d600b9.js +1 -0
  406. package/app/.next/static/chunks/app/api/usage/providers/route-c53f8629b3d600b9.js +1 -0
  407. package/app/.next/static/chunks/app/api/usage/request-details/route-c53f8629b3d600b9.js +1 -0
  408. package/app/.next/static/chunks/app/api/usage/request-logs/route-c53f8629b3d600b9.js +1 -0
  409. package/app/.next/static/chunks/app/api/usage/stream/route-c53f8629b3d600b9.js +1 -0
  410. package/app/.next/static/chunks/app/api/v1/api/chat/route-c53f8629b3d600b9.js +1 -0
  411. package/app/.next/static/chunks/app/api/v1/chat/completions/route-c53f8629b3d600b9.js +1 -0
  412. package/app/.next/static/chunks/app/api/v1/embeddings/route-c53f8629b3d600b9.js +1 -0
  413. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-c53f8629b3d600b9.js +1 -0
  414. package/app/.next/static/chunks/app/api/v1/messages/route-c53f8629b3d600b9.js +1 -0
  415. package/app/.next/static/chunks/app/api/v1/models/route-c53f8629b3d600b9.js +1 -0
  416. package/app/.next/static/chunks/app/api/v1/responses/route-c53f8629b3d600b9.js +1 -0
  417. package/app/.next/static/chunks/app/api/v1/route-c53f8629b3d600b9.js +1 -0
  418. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-c53f8629b3d600b9.js +1 -0
  419. package/app/.next/static/chunks/app/api/v1beta/models/route-c53f8629b3d600b9.js +1 -0
  420. package/app/.next/static/chunks/app/manifest.webmanifest/route-c53f8629b3d600b9.js +1 -0
  421. package/app/.next/static/chunks/app/page-c53f8629b3d600b9.js +1 -0
  422. package/app/.next/static/chunks/{main-aab9e1b069a77e0f.js → main-d7c65caed43cf6c9.js} +3 -3
  423. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-c53f8629b3d600b9.js +1 -0
  424. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-c53f8629b3d600b9.js +1 -0
  425. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-c53f8629b3d600b9.js +1 -0
  426. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c53f8629b3d600b9.js +1 -0
  427. package/app/package.json +1 -2
  428. package/app/src/mitm/manager.js +5 -5
  429. package/package.json +1 -1
  430. package/app/.next/server/chunks/1304.js +0 -1
  431. package/app/.next/server/chunks/175.js +0 -1
  432. package/app/.next/server/chunks/8694.js +0 -1
  433. package/app/.next/server/chunks/9489.js +0 -4
  434. package/app/.next/server/middleware.js +0 -15
  435. package/app/.next/static/By8ZDZ-Wav6upL_rgdwME/_buildManifest.js +0 -1
  436. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-84b3e7d276d0bc02.js +0 -1
  437. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-c5601085e32c3f3d.js +0 -1
  438. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-fe2b4cd225a8a444.js +0 -1
  439. package/app/.next/static/chunks/app/_global-error/page-262198f19d98c2a2.js +0 -1
  440. package/app/.next/static/chunks/app/api/auth/login/route-262198f19d98c2a2.js +0 -1
  441. package/app/.next/static/chunks/app/api/auth/logout/route-262198f19d98c2a2.js +0 -1
  442. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-262198f19d98c2a2.js +0 -1
  443. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-262198f19d98c2a2.js +0 -1
  444. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-262198f19d98c2a2.js +0 -1
  445. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-262198f19d98c2a2.js +0 -1
  446. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-262198f19d98c2a2.js +0 -1
  447. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-262198f19d98c2a2.js +0 -1
  448. package/app/.next/static/chunks/app/api/cloud/auth/route-262198f19d98c2a2.js +0 -1
  449. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-262198f19d98c2a2.js +0 -1
  450. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-262198f19d98c2a2.js +0 -1
  451. package/app/.next/static/chunks/app/api/cloud/models/alias/route-262198f19d98c2a2.js +0 -1
  452. package/app/.next/static/chunks/app/api/combos/[id]/route-262198f19d98c2a2.js +0 -1
  453. package/app/.next/static/chunks/app/api/combos/route-262198f19d98c2a2.js +0 -1
  454. package/app/.next/static/chunks/app/api/init/route-262198f19d98c2a2.js +0 -1
  455. package/app/.next/static/chunks/app/api/keys/[id]/route-262198f19d98c2a2.js +0 -1
  456. package/app/.next/static/chunks/app/api/keys/route-262198f19d98c2a2.js +0 -1
  457. package/app/.next/static/chunks/app/api/models/alias/route-262198f19d98c2a2.js +0 -1
  458. package/app/.next/static/chunks/app/api/models/route-262198f19d98c2a2.js +0 -1
  459. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-262198f19d98c2a2.js +0 -1
  460. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-262198f19d98c2a2.js +0 -1
  461. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-262198f19d98c2a2.js +0 -1
  462. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-262198f19d98c2a2.js +0 -1
  463. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-262198f19d98c2a2.js +0 -1
  464. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-262198f19d98c2a2.js +0 -1
  465. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-262198f19d98c2a2.js +0 -1
  466. package/app/.next/static/chunks/app/api/pricing/route-262198f19d98c2a2.js +0 -1
  467. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-262198f19d98c2a2.js +0 -1
  468. package/app/.next/static/chunks/app/api/provider-nodes/route-262198f19d98c2a2.js +0 -1
  469. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-262198f19d98c2a2.js +0 -1
  470. package/app/.next/static/chunks/app/api/providers/[id]/models/route-262198f19d98c2a2.js +0 -1
  471. package/app/.next/static/chunks/app/api/providers/[id]/route-262198f19d98c2a2.js +0 -1
  472. package/app/.next/static/chunks/app/api/providers/[id]/test/route-262198f19d98c2a2.js +0 -1
  473. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-262198f19d98c2a2.js +0 -1
  474. package/app/.next/static/chunks/app/api/providers/client/route-262198f19d98c2a2.js +0 -1
  475. package/app/.next/static/chunks/app/api/providers/route-262198f19d98c2a2.js +0 -1
  476. package/app/.next/static/chunks/app/api/providers/test-batch/route-262198f19d98c2a2.js +0 -1
  477. package/app/.next/static/chunks/app/api/providers/validate/route-262198f19d98c2a2.js +0 -1
  478. package/app/.next/static/chunks/app/api/settings/database/route-262198f19d98c2a2.js +0 -1
  479. package/app/.next/static/chunks/app/api/settings/require-login/route-262198f19d98c2a2.js +0 -1
  480. package/app/.next/static/chunks/app/api/settings/route-262198f19d98c2a2.js +0 -1
  481. package/app/.next/static/chunks/app/api/shutdown/route-262198f19d98c2a2.js +0 -1
  482. package/app/.next/static/chunks/app/api/tags/route-262198f19d98c2a2.js +0 -1
  483. package/app/.next/static/chunks/app/api/translator/load/route-262198f19d98c2a2.js +0 -1
  484. package/app/.next/static/chunks/app/api/translator/save/route-262198f19d98c2a2.js +0 -1
  485. package/app/.next/static/chunks/app/api/translator/send/route-262198f19d98c2a2.js +0 -1
  486. package/app/.next/static/chunks/app/api/translator/translate/route-262198f19d98c2a2.js +0 -1
  487. package/app/.next/static/chunks/app/api/tunnel/disable/route-262198f19d98c2a2.js +0 -1
  488. package/app/.next/static/chunks/app/api/tunnel/enable/route-262198f19d98c2a2.js +0 -1
  489. package/app/.next/static/chunks/app/api/tunnel/status/route-262198f19d98c2a2.js +0 -1
  490. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-262198f19d98c2a2.js +0 -1
  491. package/app/.next/static/chunks/app/api/usage/chart/route-262198f19d98c2a2.js +0 -1
  492. package/app/.next/static/chunks/app/api/usage/history/route-262198f19d98c2a2.js +0 -1
  493. package/app/.next/static/chunks/app/api/usage/providers/route-262198f19d98c2a2.js +0 -1
  494. package/app/.next/static/chunks/app/api/usage/request-details/route-262198f19d98c2a2.js +0 -1
  495. package/app/.next/static/chunks/app/api/usage/request-logs/route-262198f19d98c2a2.js +0 -1
  496. package/app/.next/static/chunks/app/api/usage/stream/route-262198f19d98c2a2.js +0 -1
  497. package/app/.next/static/chunks/app/api/v1/api/chat/route-262198f19d98c2a2.js +0 -1
  498. package/app/.next/static/chunks/app/api/v1/chat/completions/route-262198f19d98c2a2.js +0 -1
  499. package/app/.next/static/chunks/app/api/v1/embeddings/route-262198f19d98c2a2.js +0 -1
  500. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-262198f19d98c2a2.js +0 -1
  501. package/app/.next/static/chunks/app/api/v1/messages/route-262198f19d98c2a2.js +0 -1
  502. package/app/.next/static/chunks/app/api/v1/models/route-262198f19d98c2a2.js +0 -1
  503. package/app/.next/static/chunks/app/api/v1/responses/route-262198f19d98c2a2.js +0 -1
  504. package/app/.next/static/chunks/app/api/v1/route-262198f19d98c2a2.js +0 -1
  505. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-262198f19d98c2a2.js +0 -1
  506. package/app/.next/static/chunks/app/api/v1beta/models/route-262198f19d98c2a2.js +0 -1
  507. package/app/.next/static/chunks/app/manifest.webmanifest/route-262198f19d98c2a2.js +0 -1
  508. package/app/.next/static/chunks/app/page-262198f19d98c2a2.js +0 -1
  509. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-262198f19d98c2a2.js +0 -1
  510. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-262198f19d98c2a2.js +0 -1
  511. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-262198f19d98c2a2.js +0 -1
  512. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-262198f19d98c2a2.js +0 -1
  513. /package/app/.next/static/{By8ZDZ-Wav6upL_rgdwME → VsGR9-JVpgoWrBQMD5rc_}/_ssgManifest.js +0 -0
@@ -4,4 +4,4 @@
4
4
  `,children:a.name},a.id)})})]}),Object.entries(w).map(([a,b])=>(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,d.jsx)("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:b.color}}),(0,d.jsx)("span",{className:"text-xs font-medium text-primary",children:b.name}),(0,d.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",b.models.length,")"]})]}),(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5",children:b.models.map(a=>{let b=f===a.value;return(0,d.jsx)("button",{onClick:()=>x(a),className:`
5
5
  px-2 py-1 rounded-xl text-xs font-medium transition-all border hover:cursor-pointer
6
6
  ${b?"bg-primary text-white border-primary":"bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5"}
7
- `,children:a.name},a.id)})})]},a)),0===Object.keys(w).length&&0===v.length&&(0,d.jsxs)("div",{className:"text-center py-4 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-2xl mb-1 block",children:"search_off"}),(0,d.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})}l.propTypes={isOpen:g().bool.isRequired,onClose:g().func.isRequired,onSelect:g().func.isRequired,selectedModel:g().string,activeProviders:g().arrayOf(g().shape({provider:g().string.isRequired})),title:g().string,modelAliases:g().object}},83552:(a,b,c)=>{c.d(b,{default:()=>f});var d=c(48249),e=c(71404);function f({label:a,type:b="text",placeholder:c,value:f,onChange:g,error:h,hint:i,icon:j,disabled:k=!1,required:l=!1,className:m,inputClassName:n,...o}){return(0,d.jsxs)("div",{className:(0,e.cn)("flex flex-col gap-1.5",m),children:[a&&(0,d.jsxs)("label",{className:"text-sm font-medium text-text-main",children:[a,l&&(0,d.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),(0,d.jsxs)("div",{className:"relative",children:[j&&(0,d.jsx)("div",{className:"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none text-text-muted",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:j})}),(0,d.jsx)("input",{type:b,placeholder:c,value:f,onChange:g,disabled:k,className:(0,e.cn)("w-full py-2 px-3 text-sm text-text-main","bg-white dark:bg-white/5 border border-black/10 dark:border-white/10 rounded-md","placeholder-text-muted/60","focus:ring-1 focus:ring-primary/30 focus:border-primary/50 focus:outline-none","transition-all shadow-inner disabled:opacity-50 disabled:cursor-not-allowed","text-[16px] sm:text-sm",j&&"pl-10",h?"border-red-500 focus:border-red-500 focus:ring-red-500/20":"",n),...o})]}),h&&(0,d.jsxs)("p",{className:"text-xs text-red-500 flex items-center gap-1",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),h]}),i&&!h&&(0,d.jsx)("p",{className:"text-xs text-text-muted",children:i})]})}},85306:(a,b,c)=>{c.d(b,{default:()=>h});var d=c(48249),e=c(67484),f=c(42196),g=c(86739);function h({children:a}){let[b,c]=(0,e.useState)(!1);return(0,d.jsxs)("div",{className:"flex h-screen w-full overflow-hidden bg-bg",children:[b&&(0,d.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20 lg:hidden",onClick:()=>c(!1)}),(0,d.jsx)("div",{className:"hidden lg:flex",children:(0,d.jsx)(f.default,{})}),(0,d.jsx)("div",{className:`fixed inset-y-0 left-0 z-50 transform lg:hidden transition-transform duration-300 ease-in-out ${b?"translate-x-0":"-translate-x-full"}`,children:(0,d.jsx)(f.default,{onClose:()=>c(!1)})}),(0,d.jsxs)("main",{className:"flex flex-col flex-1 h-full min-w-0 relative transition-colors duration-300",children:[(0,d.jsx)(g.default,{onMenuClick:()=>c(!0)}),(0,d.jsx)("div",{className:"flex-1 overflow-y-auto custom-scrollbar p-6 lg:p-10",children:(0,d.jsx)("div",{className:"max-w-7xl mx-auto",children:a})})]})]})}},86209:(a,b,c)=>{c.d(b,{default:()=>i});var d=c(48249),e=c(67484),f=c(49885),g=c.n(f),h=c(50412);function i({isOpen:a,onMethodSelect:b,onClose:c}){let[f,g]=(0,e.useState)(null),[i,j]=(0,e.useState)(""),[k,l]=(0,e.useState)("us-east-1"),[m,n]=(0,e.useState)(""),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(!1),w=a=>{g(a),p(null)},x=()=>{g(null),p(null)},y=async()=>{if(!m.trim())return void p("Please enter a refresh token");r(!0),p(null);try{let a=await fetch("/api/oauth/kiro/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:m.trim()})}),c=await a.json();if(!a.ok)throw Error(c.error||"Import failed");b("import")}catch(a){p(a.message)}finally{r(!1)}},z=a=>{b("social",{provider:a})};return(0,d.jsx)(h.aF,{isOpen:a,title:"Connect Kiro",onClose:c,size:"lg",children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[!f&&(0,d.jsxs)("div",{className:"space-y-3",children:[(0,d.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Choose your authentication method:"}),(0,d.jsx)("button",{onClick:()=>b("builder-id"),className:"w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"shield"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"AWS Builder ID"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Recommended for most users. Free AWS account required."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("idc"),className:"hidden w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"business"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"AWS IAM Identity Center"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"For enterprise users with custom AWS IAM Identity Center."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("social-google"),className:"hidden w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"account_circle"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"Google Account"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Login with your Google account (manual callback)."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("social-github"),className:"hidden w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"code"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"GitHub Account"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Login with your GitHub account (manual callback)."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("import"),className:"w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"file_upload"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"Import Token"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Paste refresh token from Kiro IDE."})]})]})})]}),"idc"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["IDC Start URL ",(0,d.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,d.jsx)(h.pd,{value:i,onChange:a=>j(a.target.value),placeholder:"https://your-org.awsapps.com/start",className:"font-mono text-sm"}),(0,d.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"Your organization's AWS IAM Identity Center URL"})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{className:"block text-sm font-medium mb-2",children:"AWS Region"}),(0,d.jsx)(h.pd,{value:k,onChange:a=>l(a.target.value),placeholder:"us-east-1",className:"font-mono text-sm"}),(0,d.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"AWS region for your Identity Center (default: us-east-1)"})]}),o&&(0,d.jsx)("p",{className:"text-sm text-red-600",children:o}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:()=>{i.trim()?b("idc",{startUrl:i.trim(),region:k}):p("Please enter your IDC start URL")},fullWidth:!0,children:"Continue"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"social-google"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg border border-amber-200 dark:border-amber-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-amber-600 dark:text-amber-400",children:"info"}),(0,d.jsxs)("div",{className:"flex-1 text-sm",children:[(0,d.jsx)("p",{className:"font-medium text-amber-900 dark:text-amber-100 mb-1",children:"Manual Callback Required"}),(0,d.jsx)("p",{className:"text-amber-800 dark:text-amber-200",children:"After login, you'll need to copy the callback URL from your browser and paste it back here."})]})]})}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:()=>z("google"),fullWidth:!0,children:"Continue with Google"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"social-github"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg border border-amber-200 dark:border-amber-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-amber-600 dark:text-amber-400",children:"info"}),(0,d.jsxs)("div",{className:"flex-1 text-sm",children:[(0,d.jsx)("p",{className:"font-medium text-amber-900 dark:text-amber-100 mb-1",children:"Manual Callback Required"}),(0,d.jsx)("p",{className:"text-amber-800 dark:text-amber-200",children:"After login, you'll need to copy the callback URL from your browser and paste it back here."})]})]})}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:()=>z("github"),fullWidth:!0,children:"Continue with GitHub"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"import"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[s&&(0,d.jsxs)("div",{className:"text-center py-6",children:[(0,d.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,d.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Auto-detecting token..."}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Reading from AWS SSO cache"})]}),!s&&(0,d.jsxs)(d.Fragment,{children:[u&&(0,d.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-green-600 dark:text-green-400",children:"check_circle"}),(0,d.jsx)("p",{className:"text-sm text-green-800 dark:text-green-200",children:"Token auto-detected from Kiro IDE successfully!"})]})}),!u&&!o&&(0,d.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-blue-600 dark:text-blue-400",children:"info"}),(0,d.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:"Kiro IDE not detected. Please paste your refresh token manually."})]})}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Refresh Token ",(0,d.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,d.jsx)(h.pd,{value:m,onChange:a=>n(a.target.value),placeholder:"Token will be auto-filled...",className:"font-mono text-sm"})]}),o&&(0,d.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,d.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:o})}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:y,fullWidth:!0,disabled:q||!m.trim(),children:q?"Importing...":"Import Token"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]})]})]})})}i.propTypes={isOpen:g().bool.isRequired,onMethodSelect:g().func.isRequired,onClose:g().func.isRequired}},86739:(a,b,c)=>{c.d(b,{default:()=>m});var d=c(48249),e=c(19099),f=c(2116),g=c.n(f),h=c(81220),i=c(49885),j=c.n(i),k=c(50412),l=c(12020);function m({onMenuClick:a,showMenuButton:b=!0}){let c=(0,e.usePathname)(),f=(0,e.useRouter)(),{title:i,description:j,breadcrumbs:m}=(a=>{if(!a)return{title:"",description:"",breadcrumbs:[]};let b=a.match(/\/providers\/([^/]+)$/);if(b){let a=b[1],c=l.zN[a]||l.fg[a];if(c)return{title:c.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:c.name,image:`/providers/${c.id}.png`}]}}return a.includes("/providers")?{title:"Providers",description:"Manage your AI provider connections",breadcrumbs:[]}:a.includes("/combos")?{title:"Combos",description:"Model combos with fallback",breadcrumbs:[]}:a.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",breadcrumbs:[]}:a.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",breadcrumbs:[]}:a.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:a.includes("/profile")?{title:"Settings",description:"Manage your preferences",breadcrumbs:[]}:"/dashboard"===a?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(c),n=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&(f.push("/login"),f.refresh())}catch(a){console.error("Failed to logout:",a)}};return(0,d.jsxs)("header",{className:"flex items-center justify-between px-8 py-5 border-b border-black/5 dark:border-white/5 bg-bg/80 backdrop-blur-xl z-10 sticky top-0",children:[(0,d.jsx)("div",{className:"flex items-center gap-3 lg:hidden",children:b&&(0,d.jsx)("button",{onClick:a,className:"text-text-main hover:text-primary transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined",children:"menu"})})}),(0,d.jsx)("div",{className:"hidden lg:flex flex-col",children:m.length>0?(0,d.jsx)("div",{className:"flex items-center gap-2",children:m.map((a,b)=>(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[b>0&&(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-base",children:"chevron_right"}),a.href?(0,d.jsx)(g(),{href:a.href,className:"text-text-muted hover:text-primary transition-colors",children:a.label}):(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[a.image&&(0,d.jsx)(h.default,{src:a.image,alt:a.label,width:28,height:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",sizes:"28px",onError:a=>{a.currentTarget.style.display="none"}}),(0,d.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:a.label})]})]},`${a.label}-${a.href||"current"}`))}):i?(0,d.jsxs)("div",{children:[(0,d.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:i}),j&&(0,d.jsx)("p",{className:"text-sm text-text-muted",children:j})]}):null}),(0,d.jsxs)("div",{className:"flex items-center gap-3 ml-auto",children:[(0,d.jsx)(k.UW,{}),(0,d.jsx)("button",{onClick:n,className:"flex items-center justify-center p-2 rounded-lg text-text-muted hover:text-red-500 hover:bg-red-500/10 transition-all",title:"Logout",children:(0,d.jsx)("span",{className:"material-symbols-outlined",children:"logout"})})]})]})}m.propTypes={onMenuClick:j().func,showMenuButton:j().bool}},87226:(a,b,c)=>{c.d(b,{default:()=>T});var d=c(48249),e=c(67484),f=c(19099),g=c(74812),h=c(75171),i=c(17660),j=c(49885),k=c.n(j);let l=a=>new Intl.NumberFormat().format(a||0);function m({stats:a}){let b;return(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Requests"}),(0,d.jsx)("span",{className:"text-2xl font-bold",children:l(a.totalRequests)})]}),(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Input Tokens"}),(0,d.jsx)("span",{className:"text-2xl font-bold text-primary",children:l(a.totalPromptTokens)})]}),(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Output Tokens"}),(0,d.jsx)("span",{className:"text-2xl font-bold text-success",children:l(a.totalCompletionTokens)})]}),(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Est. Cost"}),(0,d.jsxs)("span",{className:"text-2xl font-bold text-warning",children:["~",(b=a.totalCost,`$${(b||0).toFixed(2)}`)]}),(0,d.jsx)("span",{className:"text-[10px] text-text-muted",children:"Estimated, not actual billing"})]})]})}m.propTypes={stats:k().object.isRequired};let n=a=>new Intl.NumberFormat().format(a||0),o=a=>`$${(a||0).toFixed(2)}`;function p(a){if(!a)return"Never";let b=Math.floor((Date.now()-new Date(a))/6e4);return b<1?"Just now":b<60?`${b}m ago`:b<1440?`${Math.floor(b/60)}h ago`:new Date(a).toLocaleDateString()}function q({field:a,currentSort:b,currentOrder:c}){return b!==a?(0,d.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,d.jsx)("span",{className:"ml-1",children:"asc"===c?"↑":"↓"})}function r({item:a,viewMode:b,isSummary:c=!1}){return"tokens"===b?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.promptTokens?"—":n(a.promptTokens)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.completionTokens?"—":n(a.completionTokens)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right font-medium",children:n(a.totalTokens)})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.inputCost?"—":o(a.inputCost)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.outputCost?"—":o(a.outputCost)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right font-medium text-warning",children:o(a.totalCost||a.cost)})]})}function s({title:a,columns:b,groupedData:c,tableType:f,sortBy:g,sortOrder:h,onToggleSort:j,viewMode:k,storageKey:l,renderDetailCells:m,renderSummaryCells:n,emptyMessage:o}){let[p,s]=(0,e.useState)(new Set),t=(0,e.useCallback)(a=>{s(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),u=(0,e.useMemo)(()=>"tokens"===k?[{field:"promptTokens",label:"Input Tokens"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"promptTokens",label:"Input Cost"},{field:"completionTokens",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[k]),v=b.length+u.length;return(0,d.jsxs)(i.default,{className:"overflow-hidden",children:[(0,d.jsx)("div",{className:"p-4 border-b border-border bg-bg-subtle/50",children:(0,d.jsx)("h3",{className:"font-semibold",children:a})}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,d.jsx)("thead",{className:"bg-bg-subtle/30 text-text-muted uppercase text-xs",children:(0,d.jsxs)("tr",{children:[b.map(a=>(0,d.jsxs)("th",{className:`px-6 py-3 cursor-pointer hover:bg-bg-subtle/50 ${"right"===a.align?"text-right":""}`,onClick:()=>j(f,a.field),children:[a.label," ",(0,d.jsx)(q,{field:a.field,currentSort:g,currentOrder:h})]},a.field)),u.map(a=>(0,d.jsxs)("th",{className:"px-6 py-3 text-right cursor-pointer hover:bg-bg-subtle/50",onClick:()=>j(f,a.field),children:[a.label," ",(0,d.jsx)(q,{field:a.field,currentSort:g,currentOrder:h})]},a.field))]})}),(0,d.jsxs)("tbody",{className:"divide-y divide-border",children:[c.map(a=>(0,d.jsxs)(e.Fragment,{children:[(0,d.jsxs)("tr",{className:"group-summary cursor-pointer hover:bg-bg-subtle/50 transition-colors",onClick:()=>t(a.groupKey),children:[(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted transition-transform ${p.has(a.groupKey)?"rotate-90":""}`,children:"chevron_right"}),(0,d.jsx)("span",{className:`font-medium transition-colors ${a.summary.pending>0?"text-primary":""}`,children:a.groupKey})]})}),n(a),(0,d.jsx)(r,{item:a.summary,viewMode:k,isSummary:!0})]}),p.has(a.groupKey)&&a.items.map(a=>(0,d.jsxs)("tr",{className:"group-detail hover:bg-bg-subtle/20 transition-colors",children:[m(a),(0,d.jsx)(r,{item:a,viewMode:k})]},`detail-${a.key}`))]},a.groupKey)),0===c.length&&(0,d.jsx)("tr",{children:(0,d.jsx)("td",{colSpan:v,className:"px-6 py-8 text-center text-text-muted",children:o})})]})]})})]})}q.propTypes={field:k().string.isRequired,currentSort:k().string.isRequired,currentOrder:k().string.isRequired},r.propTypes={item:k().object.isRequired,viewMode:k().string.isRequired,isSummary:k().bool},s.propTypes={title:k().string.isRequired,columns:k().arrayOf(k().shape({field:k().string.isRequired,label:k().string.isRequired,align:k().string})).isRequired,groupedData:k().array.isRequired,tableType:k().string.isRequired,sortBy:k().string.isRequired,sortOrder:k().string.isRequired,onToggleSort:k().func.isRequired,viewMode:k().string.isRequired,storageKey:k().string.isRequired,renderDetailCells:k().func.isRequired,renderSummaryCells:k().func.isRequired,emptyMessage:k().string.isRequired};var t=c(61869),u=c(16913);c(63433);var v=c(96919);function w({data:a}){let{label:b,color:c,imageUrl:f,textIcon:g,active:h}=a,[i,j]=(0,e.useState)(!1);return(0,d.jsxs)("div",{className:"flex items-center gap-2.5 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:h?c:"var(--color-border)",boxShadow:h?`0 0 16px ${c}40`:"none",minWidth:"150px"},children:[(0,d.jsx)(t.h7,{type:"target",position:u.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"target",position:u.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"target",position:u.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"target",position:u.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)("div",{className:"w-8 h-8 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${c}15`},children:i?(0,d.jsx)("span",{className:"text-sm font-bold",style:{color:c},children:g}):(0,d.jsx)("img",{src:f,alt:b,className:"w-6 h-6 rounded-sm object-contain",onError:()=>j(!0)})}),(0,d.jsx)("span",{className:"text-base font-medium truncate",style:{color:h?c:"var(--color-text)"},children:b}),h&&(0,d.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,d.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:c}}),(0,d.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:c}})]})]})}function x({data:a}){return(0,d.jsxs)("div",{className:"flex items-center justify-center px-5 py-3 rounded-xl border-2 border-primary bg-primary/5 shadow-md min-w-[130px]",children:[(0,d.jsx)(t.h7,{type:"source",position:u.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"source",position:u.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"source",position:u.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"source",position:u.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)("img",{src:"/favicon.svg",alt:"9Router",className:"w-6 h-6 mr-2"}),(0,d.jsx)("span",{className:"text-sm font-bold text-primary",children:"9Router"}),a.activeCount>0&&(0,d.jsx)("span",{className:"ml-2 px-1.5 py-0.5 rounded-full bg-primary text-white text-xs font-bold",children:a.activeCount})]})}w.propTypes={data:k().object.isRequired},x.propTypes={data:k().object.isRequired};let y={provider:w,router:x};function z({providers:a=[],activeRequests:b=[],lastProvider:c="",errorProvider:f=""}){let g=(0,e.useMemo)(()=>b.map(a=>a.provider?.toLowerCase()).filter(Boolean).sort().join(","),[b]),h=c?.toLowerCase()||"",i=f?.toLowerCase()||"",j=(0,e.useMemo)(()=>new Set(g?g.split(","):[]),[g]),k=(0,e.useMemo)(()=>new Set(h?[h]:[]),[h]),l=(0,e.useMemo)(()=>new Set(i?[i]:[]),[i]),{nodes:m,edges:n}=(0,e.useMemo)(()=>(function(a,b,c,d){let e=a.length,f=Math.max(320,204*e/(2*Math.PI)),g=Math.max(200,.55*f);if(0===e)return{nodes:[{id:"router",type:"router",position:{x:0,y:0},data:{activeCount:0},draggable:!1}],edges:[]};let h=[],i=[];return h.push({id:"router",type:"router",position:{x:-60,y:-22},data:{activeCount:b.size},draggable:!1}),a.forEach((a,j)=>{var k,l;let m,n,o=(k=a.provider,v.Q2[k]||{color:"#6b7280",name:k}),p=b.has(a.provider?.toLowerCase()),q=!p&&c.has(a.provider?.toLowerCase()),r=!p&&d.has(a.provider?.toLowerCase()),s=`provider-${a.provider}`,t={label:o.name||a.name||a.provider,color:o.color||"#6b7280",imageUrl:(l=a.provider,`/providers/${l}.png`),textIcon:o.textIcon||(a.provider||"?").slice(0,2).toUpperCase(),active:p},u=-Math.PI/2+2*Math.PI*j/e,w=f*Math.cos(u),x=g*Math.sin(u);Math.abs(u+Math.PI/2)<Math.PI/4||Math.abs(u-3*Math.PI/2)<Math.PI/4?(m="top",n="bottom"):Math.abs(u-Math.PI/2)<Math.PI/4?(m="bottom",n="top"):w>0?(m="right",n="left"):(m="left",n="right"),h.push({id:s,type:"provider",position:{x:w-90,y:x-15},data:t,draggable:!1}),i.push({id:`e-${s}`,source:"router",sourceHandle:m,target:s,targetHandle:n,animated:p,style:(o.color,r?{stroke:"#ef4444",strokeWidth:2.5,opacity:.9}:p?{stroke:"#22c55e",strokeWidth:2.5,opacity:.9}:q?{stroke:"#f59e0b",strokeWidth:2,opacity:.7}:{stroke:"var(--color-border)",strokeWidth:1,opacity:.3})})}),{nodes:h,edges:i}})(a,j,k,l),[a,g,h,i]),o=(0,e.useMemo)(()=>a.map(a=>a.provider).sort().join(","),[a]),p=(0,e.useRef)(null),q=(0,e.useCallback)(a=>{p.current=a,setTimeout(()=>a.fitView({padding:.3}),50)},[]);return(0,d.jsx)("div",{className:"w-full rounded-lg border border-border bg-bg-subtle/30",style:{height:480},children:0===a.length?(0,d.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-sm",children:"No providers connected"}):(0,d.jsx)(t.Gc,{nodes:m,edges:n,nodeTypes:y,fitView:!0,fitViewOptions:{padding:.3},onInit:q,proOptions:{hideAttribution:!0},panOnDrag:!1,zoomOnScroll:!1,zoomOnPinch:!1,zoomOnDoubleClick:!1,preventScrolling:!1,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1},o)})}z.propTypes={providers:k().arrayOf(k().shape({id:k().string,provider:k().string,name:k().string})),activeRequests:k().arrayOf(k().shape({provider:k().string,model:k().string,account:k().string})),lastProvider:k().string,errorProvider:k().string};var A=c(24823),B=c(29204),C=c(74652),D=c(43575),E=c(43012),F=c(13324),G=c(89558);let H=[{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"}],I=a=>a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:String(a||0),J=a=>`$${(a||0).toFixed(4)}`;function K(){let[a,b]=(0,e.useState)("7d"),[c,f]=(0,e.useState)([]),[g,h]=(0,e.useState)(!0),[j,k]=(0,e.useState)("tokens");(0,e.useCallback)(async()=>{h(!0);try{let b=await fetch(`/api/usage/chart?period=${a}`);if(b.ok){let a=await b.json();f(a)}}catch(a){console.error("Failed to fetch chart data:",a)}finally{h(!1)}},[a]);let l=c.some(a=>a.tokens>0||a.cost>0);return(0,d.jsxs)(i.default,{className:"p-4 flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between flex-wrap gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[(0,d.jsx)("button",{onClick:()=>k("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===j?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"}),(0,d.jsx)("button",{onClick:()=>k("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===j?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Cost"})]}),(0,d.jsx)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:H.map(c=>(0,d.jsx)("button",{onClick:()=>b(c.value),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${a===c.value?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:c.label},c.value))})]}),g?(0,d.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"Loading..."}):l?(0,d.jsx)(A.u,{width:"100%",height:200,children:(0,d.jsxs)(B.Q,{data:c,margin:{top:4,right:8,left:0,bottom:0},children:[(0,d.jsxs)("defs",{children:[(0,d.jsxs)("linearGradient",{id:"gradTokens",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"5%",stopColor:"#6366f1",stopOpacity:.25}),(0,d.jsx)("stop",{offset:"95%",stopColor:"#6366f1",stopOpacity:0})]}),(0,d.jsxs)("linearGradient",{id:"gradCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"5%",stopColor:"#f59e0b",stopOpacity:.25}),(0,d.jsx)("stop",{offset:"95%",stopColor:"#f59e0b",stopOpacity:0})]})]}),(0,d.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,d.jsx)(D.W,{dataKey:"label",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd"}),(0,d.jsx)(E.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"tokens"===j?I:J,width:50}),(0,d.jsx)(F.m,{contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px"},formatter:(a,b)=>"tokens"===b?[I(a),"Tokens"]:[J(a),"Cost"]}),"tokens"===j?(0,d.jsx)(G.Gk,{type:"monotone",dataKey:"tokens",stroke:"#6366f1",strokeWidth:2,fill:"url(#gradTokens)",dot:!1,activeDot:{r:4}}):(0,d.jsx)(G.Gk,{type:"monotone",dataKey:"cost",stroke:"#f59e0b",strokeWidth:2,fill:"url(#gradCost)",dot:!1,activeDot:{r:4}})]})}):(0,d.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"No data for this period"})]})}function L({requests:a=[]}){return(0,d.jsxs)(i.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,d.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,d.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),a.length?(0,d.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,d.jsxs)("table",{className:"w-full text-xs border-collapse",children:[(0,d.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,d.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,d.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,d.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,d.jsx)("tbody",{className:"divide-y divide-border/50",children:a.map((a,b)=>{var c;let e,f=!a.status||"ok"===a.status||"success"===a.status;return(0,d.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,d.jsx)("td",{className:"py-1.5",children:(0,d.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${f?"bg-success":"bg-error"}`})}),(0,d.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:a.model,children:a.model}),(0,d.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,d.jsxs)("span",{className:"text-primary",children:[n(a.promptTokens),"↑"]})," ",(0,d.jsxs)("span",{className:"text-success",children:[n(a.completionTokens),"↓"]})]}),(0,d.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(c=a.timestamp,(e=Math.floor((Date.now()-new Date(c))/1e3))<60?`${e}s ago`:e<3600?`${Math.floor(e/60)}m ago`:e<86400?`${Math.floor(e/3600)}h ago`:`${Math.floor(e/86400)}d ago`)})]},b)})})]})}):(0,d.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}function M(a,b={},c,d){return Object.entries(a||{}).map(([a,c])=>{let d=(c.promptTokens||0)+(c.completionTokens||0),e=c.cost||0,f=d>0?(c.promptTokens||0)*(e/d):0,g=d>0?(c.completionTokens||0)*(e/d):0;return{...c,key:a,totalTokens:d,totalCost:e,inputCost:f,outputCost:g,pending:b[a]||0}}).sort((a,b)=>{let e=a[c],f=b[c];return("string"==typeof e&&(e=e.toLowerCase()),"string"==typeof f&&(f=f.toLowerCase()),e<f)?"asc"===d?-1:1:e>f?"asc"===d?1:-1:0})}function N(a,b){if(!Array.isArray(a))return[];let c={};return a.forEach(a=>{let d=function(a,b){switch(b){case"rawModel":return a.rawModel||"Unknown Model";case"accountName":return a.accountName||`Account ${a.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return a.keyName||"Unknown Key";case"endpoint":return a.endpoint||"Unknown Endpoint";default:return a[b]||"Unknown"}}(a,b);c[d]||(c[d]={groupKey:d,summary:{requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cost:0,inputCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let e=c[d].summary;e.requests+=a.requests||0,e.promptTokens+=a.promptTokens||0,e.completionTokens+=a.completionTokens||0,e.totalTokens+=a.totalTokens||0,e.cost+=a.cost||0,e.inputCost+=a.inputCost||0,e.outputCost+=a.outputCost||0,e.pending+=a.pending||0,a.lastUsed&&(!e.lastUsed||new Date(a.lastUsed)>new Date(e.lastUsed))&&(e.lastUsed=a.lastUsed),c[d].items.push(a)}),Object.values(c)}K.propTypes={};let O=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],P=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"accountName",label:"Account"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],Q=[{field:"keyName",label:"API Key Name"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],R=[{field:"endpoint",label:"Endpoint"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],S=[{value:"model",label:"Usage by Model"},{value:"account",label:"Usage by Account"},{value:"apiKey",label:"Usage by API Key"},{value:"endpoint",label:"Usage by Endpoint"}];function T(){let a=(0,f.useRouter)(),b=(0,f.useSearchParams)(),c=b.get("sortBy")||"rawModel",i=b.get("sortOrder")||"asc",[j,k]=(0,e.useState)(null),[l,o]=(0,e.useState)(!0),[q,r]=(0,e.useState)("model"),[t,u]=(0,e.useState)([]),v=(0,e.useCallback)((c,d)=>{let e=new URLSearchParams(b.toString());e.get("sortBy")===d?e.set("sortOrder","asc"===e.get("sortOrder")?"desc":"asc"):(e.set("sortBy",d),e.set("sortOrder","asc")),a.replace(`?${e.toString()}`,{scroll:!1})},[b,a]),w=(0,e.useMemo)(()=>{if(!j)return null;switch(q){case"model":{let a=j.pending?.byModel||{};return{columns:O,groupedData:N(M(j.byModel,a,c,i),"rawModel"),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:a.pending>0?"primary":"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})}}case"account":{let a={};return j?.pending?.byAccount&&Object.entries(j.byAccount||{}).forEach(([b,c])=>{let d=j.pending.byAccount[c.connectionId];if(d){let e=c.provider?`${c.rawModel} (${c.provider})`:c.rawModel;a[b]=d[e]||0}}),{columns:P,groupedData:N(M(j.byAccount,a,c,i),"accountName"),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.accountName||`Account ${a.connectionId?.slice(0,8)}...`}),(0,d.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:a.pending>0?"primary":"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})}}case"apiKey":return{columns:Q,groupedData:N(M(j.byApiKey,{},c,i),"keyName"),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 font-medium",children:a.keyName}),(0,d.jsx)("td",{className:"px-6 py-3",children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})};default:return{columns:R,groupedData:N(M(j.byEndpoint,{},c,i),"endpoint"),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 font-medium font-mono text-sm",children:a.endpoint}),(0,d.jsx)("td",{className:"px-6 py-3",children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})}}},[j,q,c,i]);return l?(0,d.jsx)(g.CardSkeleton,{}):j?(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(m,{stats:j}),(0,d.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-[2fr_1fr] gap-2 items-stretch",children:[(0,d.jsx)(z,{providers:t,activeRequests:j.activeRequests||[],lastProvider:j.recentRequests?.[0]?.provider||"",errorProvider:j.errorProvider||""}),(0,d.jsx)(L,{requests:j.recentRequests||[]})]}),(0,d.jsx)(K,{}),(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsx)("div",{className:"flex items-center justify-between",children:(0,d.jsx)("select",{value:q,onChange:a=>r(a.target.value),className:"px-3 py-1.5 rounded-lg border border-border bg-bg-subtle text-sm font-medium text-text focus:outline-none focus:ring-2 focus:ring-primary/50",children:S.map(a=>(0,d.jsx)("option",{value:a.value,children:a.label},a.value))})}),w&&(0,d.jsx)(s,{title:"",columns:w.columns,groupedData:w.groupedData,tableType:q,sortBy:c,sortOrder:i,onToggleSort:v,storageKey:w.storageKey,renderSummaryCells:w.renderSummaryCells,renderDetailCells:w.renderDetailCells,emptyMessage:w.emptyMessage})]})]}):(0,d.jsx)("div",{className:"text-text-muted",children:"Failed to load usage statistics."})}},91099:(a,b,c)=>{c.d(b,{default:()=>f});var d=c(48249),e=c(71404);function f({options:a=[],value:b,onChange:c,size:f="md",className:g}){let h={sm:"h-7 text-xs",md:"h-9 text-sm",lg:"h-11 text-base"};return(0,d.jsx)("div",{className:(0,e.cn)("inline-flex items-center p-1 rounded-lg","bg-black/5 dark:bg-white/5",g),children:a.map(a=>(0,d.jsxs)("button",{onClick:()=>c(a.value),className:(0,e.cn)("px-4 rounded-md font-medium transition-all",h[f],b===a.value?"bg-white dark:bg-white/10 text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:[a.icon&&(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] mr-1.5",children:a.icon}),a.label]},a.value))})}},91809:(a,b,c)=>{c.d(b,{default:()=>g});var d=c(48249),e=c(67484),f=c(17660);function g(){let[a,b]=(0,e.useState)([]),[c,g]=(0,e.useState)(!0),[h,i]=(0,e.useState)(!0);return(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:"Request Logs"}),(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("label",{className:"text-sm font-medium text-text-muted flex items-center gap-2 cursor-pointer",children:[(0,d.jsx)("span",{children:"Auto Refresh (3s)"}),(0,d.jsx)("div",{onClick:()=>i(!h),className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus:outline-none ${h?"bg-primary":"bg-bg-subtle border border-border"}`,children:(0,d.jsx)("span",{className:`inline-block h-3 w-3 transform rounded-full bg-white transition-transform ${h?"translate-x-5":"translate-x-1"}`})})]})})]}),(0,d.jsx)(f.default,{className:"overflow-hidden bg-black/5 dark:bg-black/20",children:(0,d.jsx)("div",{className:"p-0 overflow-x-auto max-h-[600px] overflow-y-auto font-mono text-xs",children:c&&0===a.length?(0,d.jsx)("div",{className:"p-8 text-center text-text-muted",children:"Loading logs..."}):0===a.length?(0,d.jsx)("div",{className:"p-8 text-center text-text-muted",children:"No logs recorded yet."}):(0,d.jsxs)("table",{className:"w-full text-left border-collapse whitespace-nowrap",children:[(0,d.jsx)("thead",{className:"sticky top-0 bg-bg-subtle border-b border-border z-10",children:(0,d.jsxs)("tr",{children:[(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"DateTime"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Model"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Provider"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Account"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"In"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Out"}),(0,d.jsx)("th",{className:"px-3 py-2",children:"Status"})]})}),(0,d.jsx)("tbody",{className:"divide-y divide-border/50",children:a.map((a,b)=>{let c=a.split(" | ");if(c.length<7)return null;let e=c[6],f=e.includes("PENDING"),g=e.includes("FAILED"),h=e.includes("OK");return(0,d.jsxs)("tr",{className:`hover:bg-primary/5 transition-colors ${f?"bg-primary/5":""}`,children:[(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-text-muted",children:c[0]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border font-medium",children:c[1]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border",children:(0,d.jsx)("span",{className:"px-1.5 py-0.5 rounded bg-bg-subtle border border-border text-[10px] uppercase font-bold",children:c[2]})}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border truncate max-w-[150px]",title:c[3],children:c[3]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-primary",children:c[4]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-success",children:c[5]}),(0,d.jsx)("td",{className:`px-3 py-1.5 font-bold ${h?"text-success":g?"text-error":"text-primary animate-pulse"}`,children:e})]},b)})})]})})}),(0,d.jsx)("div",{className:"text-[10px] text-text-muted italic",children:"Logs are saved to log.txt in the application data directory."})]})}},95145:(a,b,c)=>{c.d(b,{ConfirmModal:()=>h,default:()=>g});var d=c(48249);c(67484);var e=c(71404),f=c(99070);function g({isOpen:a,onClose:b,title:c,children:f,footer:g,size:h="md",closeOnOverlay:i=!0,showCloseButton:j=!0,className:k}){return a?(0,d.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,d.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:i?b:void 0}),(0,d.jsxs)("div",{className:(0,e.cn)("relative w-full bg-surface","border border-black/10 dark:border-white/10","rounded-xl shadow-2xl","animate-in fade-in zoom-in-95 duration-200",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[h],k),children:[(c||j)&&(0,d.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-black/5 dark:border-white/5",children:[(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mr-4",children:[(0,d.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,d.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,d.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),c&&(0,d.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:c})]}),j&&(0,d.jsx)("button",{onClick:b,className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,d.jsx)("div",{className:"p-6 max-h-[calc(80vh-140px)] overflow-y-auto",children:f}),g&&(0,d.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-black/5 dark:border-white/5",children:g})]})]}):null}function h({isOpen:a,onClose:b,onConfirm:c,title:e="Confirm",message:h,confirmText:i="Confirm",cancelText:j="Cancel",variant:k="danger",loading:l=!1}){return(0,d.jsx)(g,{isOpen:a,onClose:b,title:e,size:"sm",footer:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.default,{variant:"ghost",onClick:b,disabled:l,children:j}),(0,d.jsx)(f.default,{variant:k,onClick:c,loading:l,children:i})]}),children:(0,d.jsx)("p",{className:"text-text-muted",children:h})})}},95514:(a,b,c)=>{c.d(b,{default:()=>f});var d=c(48249),e=c(71404);function f({checked:a=!1,onChange:b,label:c,description:f,disabled:g=!1,size:h="md",className:i}){let j={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,d.jsxs)("div",{className:(0,e.cn)("flex items-center gap-3",g&&"opacity-50 cursor-not-allowed",i),children:[(0,d.jsx)("button",{type:"button",role:"switch","aria-checked":a,disabled:g,onClick:()=>{!g&&b&&b(!a)},className:(0,e.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-1 focus:ring-primary/30",a?"bg-primary":"bg-black/10 dark:bg-white/20",j[h].track,g&&"cursor-not-allowed"),children:(0,d.jsx)("span",{className:(0,e.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",a?j[h].translate:"translate-x-0.5",j[h].thumb,"mt-0.5")})}),(c||f)&&(0,d.jsxs)("div",{className:"flex flex-col",children:[c&&(0,d.jsx)("span",{className:"text-sm font-medium text-text-main",children:c}),f&&(0,d.jsx)("span",{className:"text-xs text-text-muted",children:f})]})]})}},99070:(a,b,c)=>{c.d(b,{default:()=>h});var d=c(48249),e=c(71404);let f={primary:"bg-gradient-to-b from-primary to-primary-hover text-white shadow-sm",secondary:"bg-white dark:bg-white/10 border border-black/10 dark:border-white/10 text-text-main hover:bg-black/5 dark:hover:bg-white/5",outline:"border border-black/15 dark:border-white/15 text-text-main hover:bg-black/5",ghost:"text-text-muted hover:bg-black/5 dark:hover:bg-white/5 hover:text-text-main",danger:"bg-red-500 text-white hover:bg-red-600 shadow-sm"},g={sm:"h-7 px-3 text-xs rounded-md",md:"h-9 px-4 text-sm rounded-lg",lg:"h-11 px-6 text-sm rounded-lg"};function h({children:a,variant:b="primary",size:c="md",icon:h,iconRight:i,disabled:j=!1,loading:k=!1,fullWidth:l=!1,className:m,...n}){return(0,d.jsxs)("button",{className:(0,e.cn)("inline-flex items-center justify-center gap-2 font-medium transition-all duration-200 cursor-pointer","active:scale-[0.99] disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100",f[b],g[c],l&&"w-full",m),disabled:j||k,...n,children:[k?(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}):h?(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:h}):null,a,i&&!k&&(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:i})]})}}};
7
+ `,children:a.name},a.id)})})]},a)),0===Object.keys(w).length&&0===v.length&&(0,d.jsxs)("div",{className:"text-center py-4 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-2xl mb-1 block",children:"search_off"}),(0,d.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})}l.propTypes={isOpen:g().bool.isRequired,onClose:g().func.isRequired,onSelect:g().func.isRequired,selectedModel:g().string,activeProviders:g().arrayOf(g().shape({provider:g().string.isRequired})),title:g().string,modelAliases:g().object}},83552:(a,b,c)=>{c.d(b,{default:()=>f});var d=c(48249),e=c(71404);function f({label:a,type:b="text",placeholder:c,value:f,onChange:g,error:h,hint:i,icon:j,disabled:k=!1,required:l=!1,className:m,inputClassName:n,...o}){return(0,d.jsxs)("div",{className:(0,e.cn)("flex flex-col gap-1.5",m),children:[a&&(0,d.jsxs)("label",{className:"text-sm font-medium text-text-main",children:[a,l&&(0,d.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),(0,d.jsxs)("div",{className:"relative",children:[j&&(0,d.jsx)("div",{className:"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none text-text-muted",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:j})}),(0,d.jsx)("input",{type:b,placeholder:c,value:f,onChange:g,disabled:k,className:(0,e.cn)("w-full py-2 px-3 text-sm text-text-main","bg-white dark:bg-white/5 border border-black/10 dark:border-white/10 rounded-md","placeholder-text-muted/60","focus:ring-1 focus:ring-primary/30 focus:border-primary/50 focus:outline-none","transition-all shadow-inner disabled:opacity-50 disabled:cursor-not-allowed","text-[16px] sm:text-sm",j&&"pl-10",h?"border-red-500 focus:border-red-500 focus:ring-red-500/20":"",n),...o})]}),h&&(0,d.jsxs)("p",{className:"text-xs text-red-500 flex items-center gap-1",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),h]}),i&&!h&&(0,d.jsx)("p",{className:"text-xs text-text-muted",children:i})]})}},85306:(a,b,c)=>{c.d(b,{default:()=>h});var d=c(48249),e=c(67484),f=c(42196),g=c(86739);function h({children:a}){let[b,c]=(0,e.useState)(!1);return(0,d.jsxs)("div",{className:"flex h-screen w-full overflow-hidden bg-bg",children:[b&&(0,d.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20 lg:hidden",onClick:()=>c(!1)}),(0,d.jsx)("div",{className:"hidden lg:flex",children:(0,d.jsx)(f.default,{})}),(0,d.jsx)("div",{className:`fixed inset-y-0 left-0 z-50 transform lg:hidden transition-transform duration-300 ease-in-out ${b?"translate-x-0":"-translate-x-full"}`,children:(0,d.jsx)(f.default,{onClose:()=>c(!1)})}),(0,d.jsxs)("main",{className:"flex flex-col flex-1 h-full min-w-0 relative transition-colors duration-300",children:[(0,d.jsx)(g.default,{onMenuClick:()=>c(!0)}),(0,d.jsx)("div",{className:"flex-1 overflow-y-auto custom-scrollbar p-6 lg:p-10",children:(0,d.jsx)("div",{className:"max-w-7xl mx-auto",children:a})})]})]})}},86209:(a,b,c)=>{c.d(b,{default:()=>i});var d=c(48249),e=c(67484),f=c(49885),g=c.n(f),h=c(50412);function i({isOpen:a,onMethodSelect:b,onClose:c}){let[f,g]=(0,e.useState)(null),[i,j]=(0,e.useState)(""),[k,l]=(0,e.useState)("us-east-1"),[m,n]=(0,e.useState)(""),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(!1),w=a=>{g(a),p(null)},x=()=>{g(null),p(null)},y=async()=>{if(!m.trim())return void p("Please enter a refresh token");r(!0),p(null);try{let a=await fetch("/api/oauth/kiro/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:m.trim()})}),c=await a.json();if(!a.ok)throw Error(c.error||"Import failed");b("import")}catch(a){p(a.message)}finally{r(!1)}},z=a=>{b("social",{provider:a})};return(0,d.jsx)(h.aF,{isOpen:a,title:"Connect Kiro",onClose:c,size:"lg",children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[!f&&(0,d.jsxs)("div",{className:"space-y-3",children:[(0,d.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Choose your authentication method:"}),(0,d.jsx)("button",{onClick:()=>b("builder-id"),className:"w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"shield"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"AWS Builder ID"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Recommended for most users. Free AWS account required."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("idc"),className:"hidden w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"business"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"AWS IAM Identity Center"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"For enterprise users with custom AWS IAM Identity Center."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("social-google"),className:"hidden w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"account_circle"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"Google Account"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Login with your Google account (manual callback)."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("social-github"),className:"hidden w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"code"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"GitHub Account"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Login with your GitHub account (manual callback)."})]})]})}),(0,d.jsx)("button",{onClick:()=>w("import"),className:"w-full p-4 text-left border border-border rounded-lg hover:bg-sidebar transition-colors",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary mt-0.5",children:"file_upload"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold mb-1",children:"Import Token"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Paste refresh token from Kiro IDE."})]})]})})]}),"idc"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["IDC Start URL ",(0,d.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,d.jsx)(h.pd,{value:i,onChange:a=>j(a.target.value),placeholder:"https://your-org.awsapps.com/start",className:"font-mono text-sm"}),(0,d.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"Your organization's AWS IAM Identity Center URL"})]}),(0,d.jsxs)("div",{children:[(0,d.jsx)("label",{className:"block text-sm font-medium mb-2",children:"AWS Region"}),(0,d.jsx)(h.pd,{value:k,onChange:a=>l(a.target.value),placeholder:"us-east-1",className:"font-mono text-sm"}),(0,d.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"AWS region for your Identity Center (default: us-east-1)"})]}),o&&(0,d.jsx)("p",{className:"text-sm text-red-600",children:o}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:()=>{i.trim()?b("idc",{startUrl:i.trim(),region:k}):p("Please enter your IDC start URL")},fullWidth:!0,children:"Continue"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"social-google"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg border border-amber-200 dark:border-amber-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-amber-600 dark:text-amber-400",children:"info"}),(0,d.jsxs)("div",{className:"flex-1 text-sm",children:[(0,d.jsx)("p",{className:"font-medium text-amber-900 dark:text-amber-100 mb-1",children:"Manual Callback Required"}),(0,d.jsx)("p",{className:"text-amber-800 dark:text-amber-200",children:"After login, you'll need to copy the callback URL from your browser and paste it back here."})]})]})}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:()=>z("google"),fullWidth:!0,children:"Continue with Google"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"social-github"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg border border-amber-200 dark:border-amber-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-amber-600 dark:text-amber-400",children:"info"}),(0,d.jsxs)("div",{className:"flex-1 text-sm",children:[(0,d.jsx)("p",{className:"font-medium text-amber-900 dark:text-amber-100 mb-1",children:"Manual Callback Required"}),(0,d.jsx)("p",{className:"text-amber-800 dark:text-amber-200",children:"After login, you'll need to copy the callback URL from your browser and paste it back here."})]})]})}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:()=>z("github"),fullWidth:!0,children:"Continue with GitHub"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"import"===f&&(0,d.jsxs)("div",{className:"space-y-4",children:[s&&(0,d.jsxs)("div",{className:"text-center py-6",children:[(0,d.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,d.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Auto-detecting token..."}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Reading from AWS SSO cache"})]}),!s&&(0,d.jsxs)(d.Fragment,{children:[u&&(0,d.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-green-600 dark:text-green-400",children:"check_circle"}),(0,d.jsx)("p",{className:"text-sm text-green-800 dark:text-green-200",children:"Token auto-detected from Kiro IDE successfully!"})]})}),!u&&!o&&(0,d.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-blue-600 dark:text-blue-400",children:"info"}),(0,d.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:"Kiro IDE not detected. Please paste your refresh token manually."})]})}),(0,d.jsxs)("div",{children:[(0,d.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Refresh Token ",(0,d.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,d.jsx)(h.pd,{value:m,onChange:a=>n(a.target.value),placeholder:"Token will be auto-filled...",className:"font-mono text-sm"})]}),o&&(0,d.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,d.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:o})}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:y,fullWidth:!0,disabled:q||!m.trim(),children:q?"Importing...":"Import Token"}),(0,d.jsx)(h.$n,{onClick:x,variant:"ghost",fullWidth:!0,children:"Back"})]})]})]})]})})}i.propTypes={isOpen:g().bool.isRequired,onMethodSelect:g().func.isRequired,onClose:g().func.isRequired}},86739:(a,b,c)=>{c.d(b,{default:()=>m});var d=c(48249),e=c(19099),f=c(2116),g=c.n(f),h=c(81220),i=c(49885),j=c.n(i),k=c(50412),l=c(12020);function m({onMenuClick:a,showMenuButton:b=!0}){let c=(0,e.usePathname)(),f=(0,e.useRouter)(),{title:i,description:j,breadcrumbs:m}=(a=>{if(!a)return{title:"",description:"",breadcrumbs:[]};let b=a.match(/\/providers\/([^/]+)$/);if(b){let a=b[1],c=l.zN[a]||l.fg[a];if(c)return{title:c.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:c.name,image:`/providers/${c.id}.png`}]}}return a.includes("/providers")?{title:"Providers",description:"Manage your AI provider connections",breadcrumbs:[]}:a.includes("/combos")?{title:"Combos",description:"Model combos with fallback",breadcrumbs:[]}:a.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",breadcrumbs:[]}:a.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",breadcrumbs:[]}:a.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:a.includes("/profile")?{title:"Settings",description:"Manage your preferences",breadcrumbs:[]}:"/dashboard"===a?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(c),n=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&(f.push("/login"),f.refresh())}catch(a){console.error("Failed to logout:",a)}};return(0,d.jsxs)("header",{className:"flex items-center justify-between px-8 py-5 border-b border-black/5 dark:border-white/5 bg-bg/80 backdrop-blur-xl z-10 sticky top-0",children:[(0,d.jsx)("div",{className:"flex items-center gap-3 lg:hidden",children:b&&(0,d.jsx)("button",{onClick:a,className:"text-text-main hover:text-primary transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined",children:"menu"})})}),(0,d.jsx)("div",{className:"hidden lg:flex flex-col",children:m.length>0?(0,d.jsx)("div",{className:"flex items-center gap-2",children:m.map((a,b)=>(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[b>0&&(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-base",children:"chevron_right"}),a.href?(0,d.jsx)(g(),{href:a.href,className:"text-text-muted hover:text-primary transition-colors",children:a.label}):(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[a.image&&(0,d.jsx)(h.default,{src:a.image,alt:a.label,width:28,height:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",sizes:"28px",onError:a=>{a.currentTarget.style.display="none"}}),(0,d.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:a.label})]})]},`${a.label}-${a.href||"current"}`))}):i?(0,d.jsxs)("div",{children:[(0,d.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:i}),j&&(0,d.jsx)("p",{className:"text-sm text-text-muted",children:j})]}):null}),(0,d.jsxs)("div",{className:"flex items-center gap-3 ml-auto",children:[(0,d.jsx)(k.UW,{}),(0,d.jsx)("button",{onClick:n,className:"flex items-center justify-center p-2 rounded-lg text-text-muted hover:text-red-500 hover:bg-red-500/10 transition-all",title:"Logout",children:(0,d.jsx)("span",{className:"material-symbols-outlined",children:"logout"})})]})]})}m.propTypes={onMenuClick:j().func,showMenuButton:j().bool}},87226:(a,b,c)=>{c.d(b,{default:()=>T});var d=c(48249),e=c(67484),f=c(19099),g=c(74812),h=c(75171),i=c(17660),j=c(49885),k=c.n(j);let l=a=>new Intl.NumberFormat().format(a||0);function m({stats:a}){let b;return(0,d.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Requests"}),(0,d.jsx)("span",{className:"text-2xl font-bold",children:l(a.totalRequests)})]}),(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Input Tokens"}),(0,d.jsx)("span",{className:"text-2xl font-bold text-primary",children:l(a.totalPromptTokens)})]}),(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Output Tokens"}),(0,d.jsx)("span",{className:"text-2xl font-bold text-success",children:l(a.totalCompletionTokens)})]}),(0,d.jsxs)(i.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,d.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Est. Cost"}),(0,d.jsxs)("span",{className:"text-2xl font-bold text-warning",children:["~",(b=a.totalCost,`$${(b||0).toFixed(2)}`)]}),(0,d.jsx)("span",{className:"text-[10px] text-text-muted",children:"Estimated, not actual billing"})]})]})}m.propTypes={stats:k().object.isRequired};let n=a=>new Intl.NumberFormat().format(a||0),o=a=>`$${(a||0).toFixed(2)}`;function p(a){if(!a)return"Never";let b=Math.floor((Date.now()-new Date(a))/6e4);return b<1?"Just now":b<60?`${b}m ago`:b<1440?`${Math.floor(b/60)}h ago`:new Date(a).toLocaleDateString()}function q({field:a,currentSort:b,currentOrder:c}){return b!==a?(0,d.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,d.jsx)("span",{className:"ml-1",children:"asc"===c?"↑":"↓"})}function r({item:a,viewMode:b,isSummary:c=!1}){return"tokens"===b?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.promptTokens?"—":n(a.promptTokens)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.completionTokens?"—":n(a.completionTokens)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right font-medium",children:n(a.totalTokens)})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.inputCost?"—":o(a.inputCost)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted",children:c&&void 0===a.outputCost?"—":o(a.outputCost)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right font-medium text-warning",children:o(a.totalCost||a.cost)})]})}function s({title:a,columns:b,groupedData:c,tableType:f,sortBy:g,sortOrder:h,onToggleSort:j,viewMode:k,storageKey:l,renderDetailCells:m,renderSummaryCells:n,emptyMessage:o}){let[p,s]=(0,e.useState)(new Set),t=(0,e.useCallback)(a=>{s(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),u=(0,e.useMemo)(()=>"tokens"===k?[{field:"promptTokens",label:"Input Tokens"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"promptTokens",label:"Input Cost"},{field:"completionTokens",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[k]),v=b.length+u.length;return(0,d.jsxs)(i.default,{className:"overflow-hidden",children:[(0,d.jsx)("div",{className:"p-4 border-b border-border bg-bg-subtle/50",children:(0,d.jsx)("h3",{className:"font-semibold",children:a})}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,d.jsx)("thead",{className:"bg-bg-subtle/30 text-text-muted uppercase text-xs",children:(0,d.jsxs)("tr",{children:[b.map(a=>(0,d.jsxs)("th",{className:`px-6 py-3 cursor-pointer hover:bg-bg-subtle/50 ${"right"===a.align?"text-right":""}`,onClick:()=>j(f,a.field),children:[a.label," ",(0,d.jsx)(q,{field:a.field,currentSort:g,currentOrder:h})]},a.field)),u.map(a=>(0,d.jsxs)("th",{className:"px-6 py-3 text-right cursor-pointer hover:bg-bg-subtle/50",onClick:()=>j(f,a.field),children:[a.label," ",(0,d.jsx)(q,{field:a.field,currentSort:g,currentOrder:h})]},a.field))]})}),(0,d.jsxs)("tbody",{className:"divide-y divide-border",children:[c.map(a=>(0,d.jsxs)(e.Fragment,{children:[(0,d.jsxs)("tr",{className:"group-summary cursor-pointer hover:bg-bg-subtle/50 transition-colors",onClick:()=>t(a.groupKey),children:[(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted transition-transform ${p.has(a.groupKey)?"rotate-90":""}`,children:"chevron_right"}),(0,d.jsx)("span",{className:`font-medium transition-colors ${a.summary.pending>0?"text-primary":""}`,children:a.groupKey})]})}),n(a),(0,d.jsx)(r,{item:a.summary,viewMode:k,isSummary:!0})]}),p.has(a.groupKey)&&a.items.map(a=>(0,d.jsxs)("tr",{className:"group-detail hover:bg-bg-subtle/20 transition-colors",children:[m(a),(0,d.jsx)(r,{item:a,viewMode:k})]},`detail-${a.key}`))]},a.groupKey)),0===c.length&&(0,d.jsx)("tr",{children:(0,d.jsx)("td",{colSpan:v,className:"px-6 py-8 text-center text-text-muted",children:o})})]})]})})]})}q.propTypes={field:k().string.isRequired,currentSort:k().string.isRequired,currentOrder:k().string.isRequired},r.propTypes={item:k().object.isRequired,viewMode:k().string.isRequired,isSummary:k().bool},s.propTypes={title:k().string.isRequired,columns:k().arrayOf(k().shape({field:k().string.isRequired,label:k().string.isRequired,align:k().string})).isRequired,groupedData:k().array.isRequired,tableType:k().string.isRequired,sortBy:k().string.isRequired,sortOrder:k().string.isRequired,onToggleSort:k().func.isRequired,viewMode:k().string.isRequired,storageKey:k().string.isRequired,renderDetailCells:k().func.isRequired,renderSummaryCells:k().func.isRequired,emptyMessage:k().string.isRequired};var t=c(61869),u=c(16913);c(63433);var v=c(96919);function w({data:a}){let{label:b,color:c,imageUrl:f,textIcon:g,active:h}=a,[i,j]=(0,e.useState)(!1);return(0,d.jsxs)("div",{className:"flex items-center gap-2.5 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:h?c:"var(--color-border)",boxShadow:h?`0 0 16px ${c}40`:"none",minWidth:"150px"},children:[(0,d.jsx)(t.h7,{type:"target",position:u.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"target",position:u.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"target",position:u.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"target",position:u.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)("div",{className:"w-8 h-8 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${c}15`},children:i?(0,d.jsx)("span",{className:"text-sm font-bold",style:{color:c},children:g}):(0,d.jsx)("img",{src:f,alt:b,className:"w-6 h-6 rounded-sm object-contain",onError:()=>j(!0)})}),(0,d.jsx)("span",{className:"text-base font-medium truncate",style:{color:h?c:"var(--color-text)"},children:b}),h&&(0,d.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,d.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:c}}),(0,d.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:c}})]})]})}function x({data:a}){return(0,d.jsxs)("div",{className:"flex items-center justify-center px-5 py-3 rounded-xl border-2 border-primary bg-primary/5 shadow-md min-w-[130px]",children:[(0,d.jsx)(t.h7,{type:"source",position:u.yX.Top,id:"top",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"source",position:u.yX.Bottom,id:"bottom",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"source",position:u.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)(t.h7,{type:"source",position:u.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,d.jsx)("img",{src:"/favicon.svg",alt:"9Router",className:"w-6 h-6 mr-2"}),(0,d.jsx)("span",{className:"text-sm font-bold text-primary",children:"9Router"}),a.activeCount>0&&(0,d.jsx)("span",{className:"ml-2 px-1.5 py-0.5 rounded-full bg-primary text-white text-xs font-bold",children:a.activeCount})]})}w.propTypes={data:k().object.isRequired},x.propTypes={data:k().object.isRequired};let y={provider:w,router:x};function z({providers:a=[],activeRequests:b=[],lastProvider:c="",errorProvider:f=""}){let g=(0,e.useMemo)(()=>b.map(a=>a.provider?.toLowerCase()).filter(Boolean).sort().join(","),[b]),h=c?.toLowerCase()||"",i=f?.toLowerCase()||"",j=(0,e.useMemo)(()=>new Set(g?g.split(","):[]),[g]),k=(0,e.useMemo)(()=>new Set(h?[h]:[]),[h]),l=(0,e.useMemo)(()=>new Set(i?[i]:[]),[i]),{nodes:m,edges:n}=(0,e.useMemo)(()=>(function(a,b,c,d){let e=a.length,f=Math.max(320,204*e/(2*Math.PI)),g=Math.max(200,.55*f);if(0===e)return{nodes:[{id:"router",type:"router",position:{x:0,y:0},data:{activeCount:0},draggable:!1}],edges:[]};let h=[],i=[];return h.push({id:"router",type:"router",position:{x:-60,y:-22},data:{activeCount:b.size},draggable:!1}),a.forEach((a,j)=>{var k,l;let m,n,o=(k=a.provider,v.Q2[k]||{color:"#6b7280",name:k}),p=b.has(a.provider?.toLowerCase()),q=!p&&c.has(a.provider?.toLowerCase()),r=!p&&d.has(a.provider?.toLowerCase()),s=`provider-${a.provider}`,t={label:(o.name!==a.provider?o.name:null)||a.name||a.provider,color:o.color||"#6b7280",imageUrl:(l=a.provider,`/providers/${l}.png`),textIcon:o.textIcon||(a.provider||"?").slice(0,2).toUpperCase(),active:p},u=-Math.PI/2+2*Math.PI*j/e,w=f*Math.cos(u),x=g*Math.sin(u);Math.abs(u+Math.PI/2)<Math.PI/4||Math.abs(u-3*Math.PI/2)<Math.PI/4?(m="top",n="bottom"):Math.abs(u-Math.PI/2)<Math.PI/4?(m="bottom",n="top"):w>0?(m="right",n="left"):(m="left",n="right"),h.push({id:s,type:"provider",position:{x:w-90,y:x-15},data:t,draggable:!1}),i.push({id:`e-${s}`,source:"router",sourceHandle:m,target:s,targetHandle:n,animated:p,style:(o.color,r?{stroke:"#ef4444",strokeWidth:2.5,opacity:.9}:p?{stroke:"#22c55e",strokeWidth:2.5,opacity:.9}:q?{stroke:"#f59e0b",strokeWidth:2,opacity:.7}:{stroke:"var(--color-border)",strokeWidth:1,opacity:.3})})}),{nodes:h,edges:i}})(a,j,k,l),[a,g,h,i]),o=(0,e.useMemo)(()=>a.map(a=>a.provider).sort().join(","),[a]),p=(0,e.useRef)(null),q=(0,e.useCallback)(a=>{p.current=a,setTimeout(()=>a.fitView({padding:.3}),50)},[]);return(0,d.jsx)("div",{className:"w-full rounded-lg border border-border bg-bg-subtle/30",style:{height:480},children:0===a.length?(0,d.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-sm",children:"No providers connected"}):(0,d.jsx)(t.Gc,{nodes:m,edges:n,nodeTypes:y,fitView:!0,fitViewOptions:{padding:.3},onInit:q,proOptions:{hideAttribution:!0},panOnDrag:!1,zoomOnScroll:!1,zoomOnPinch:!1,zoomOnDoubleClick:!1,preventScrolling:!1,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1},o)})}z.propTypes={providers:k().arrayOf(k().shape({id:k().string,provider:k().string,name:k().string})),activeRequests:k().arrayOf(k().shape({provider:k().string,model:k().string,account:k().string})),lastProvider:k().string,errorProvider:k().string};var A=c(24823),B=c(29204),C=c(74652),D=c(43575),E=c(43012),F=c(13324),G=c(89558);let H=[{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"}],I=a=>a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:String(a||0),J=a=>`$${(a||0).toFixed(4)}`;function K(){let[a,b]=(0,e.useState)("7d"),[c,f]=(0,e.useState)([]),[g,h]=(0,e.useState)(!0),[j,k]=(0,e.useState)("tokens");(0,e.useCallback)(async()=>{h(!0);try{let b=await fetch(`/api/usage/chart?period=${a}`);if(b.ok){let a=await b.json();f(a)}}catch(a){console.error("Failed to fetch chart data:",a)}finally{h(!1)}},[a]);let l=c.some(a=>a.tokens>0||a.cost>0);return(0,d.jsxs)(i.default,{className:"p-4 flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between flex-wrap gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[(0,d.jsx)("button",{onClick:()=>k("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===j?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"}),(0,d.jsx)("button",{onClick:()=>k("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===j?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Cost"})]}),(0,d.jsx)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:H.map(c=>(0,d.jsx)("button",{onClick:()=>b(c.value),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${a===c.value?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:c.label},c.value))})]}),g?(0,d.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"Loading..."}):l?(0,d.jsx)(A.u,{width:"100%",height:200,children:(0,d.jsxs)(B.Q,{data:c,margin:{top:4,right:8,left:0,bottom:0},children:[(0,d.jsxs)("defs",{children:[(0,d.jsxs)("linearGradient",{id:"gradTokens",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"5%",stopColor:"#6366f1",stopOpacity:.25}),(0,d.jsx)("stop",{offset:"95%",stopColor:"#6366f1",stopOpacity:0})]}),(0,d.jsxs)("linearGradient",{id:"gradCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"5%",stopColor:"#f59e0b",stopOpacity:.25}),(0,d.jsx)("stop",{offset:"95%",stopColor:"#f59e0b",stopOpacity:0})]})]}),(0,d.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,d.jsx)(D.W,{dataKey:"label",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd"}),(0,d.jsx)(E.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"tokens"===j?I:J,width:50}),(0,d.jsx)(F.m,{contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px"},formatter:(a,b)=>"tokens"===b?[I(a),"Tokens"]:[J(a),"Cost"]}),"tokens"===j?(0,d.jsx)(G.Gk,{type:"monotone",dataKey:"tokens",stroke:"#6366f1",strokeWidth:2,fill:"url(#gradTokens)",dot:!1,activeDot:{r:4}}):(0,d.jsx)(G.Gk,{type:"monotone",dataKey:"cost",stroke:"#f59e0b",strokeWidth:2,fill:"url(#gradCost)",dot:!1,activeDot:{r:4}})]})}):(0,d.jsx)("div",{className:"h-48 flex items-center justify-center text-text-muted text-sm",children:"No data for this period"})]})}function L({requests:a=[]}){return(0,d.jsxs)(i.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,d.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,d.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),a.length?(0,d.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,d.jsxs)("table",{className:"w-full text-xs border-collapse",children:[(0,d.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,d.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,d.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,d.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,d.jsx)("tbody",{className:"divide-y divide-border/50",children:a.map((a,b)=>{var c;let e,f=!a.status||"ok"===a.status||"success"===a.status;return(0,d.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,d.jsx)("td",{className:"py-1.5",children:(0,d.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${f?"bg-success":"bg-error"}`})}),(0,d.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:a.model,children:a.model}),(0,d.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,d.jsxs)("span",{className:"text-primary",children:[n(a.promptTokens),"↑"]})," ",(0,d.jsxs)("span",{className:"text-success",children:[n(a.completionTokens),"↓"]})]}),(0,d.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(c=a.timestamp,(e=Math.floor((Date.now()-new Date(c))/1e3))<60?`${e}s ago`:e<3600?`${Math.floor(e/60)}m ago`:e<86400?`${Math.floor(e/3600)}h ago`:`${Math.floor(e/86400)}d ago`)})]},b)})})]})}):(0,d.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}function M(a,b={},c,d){return Object.entries(a||{}).map(([a,c])=>{let d=(c.promptTokens||0)+(c.completionTokens||0),e=c.cost||0,f=d>0?(c.promptTokens||0)*(e/d):0,g=d>0?(c.completionTokens||0)*(e/d):0;return{...c,key:a,totalTokens:d,totalCost:e,inputCost:f,outputCost:g,pending:b[a]||0}}).sort((a,b)=>{let e=a[c],f=b[c];return("string"==typeof e&&(e=e.toLowerCase()),"string"==typeof f&&(f=f.toLowerCase()),e<f)?"asc"===d?-1:1:e>f?"asc"===d?1:-1:0})}function N(a,b){if(!Array.isArray(a))return[];let c={};return a.forEach(a=>{let d=function(a,b){switch(b){case"rawModel":return a.rawModel||"Unknown Model";case"accountName":return a.accountName||`Account ${a.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return a.keyName||"Unknown Key";case"endpoint":return a.endpoint||"Unknown Endpoint";default:return a[b]||"Unknown"}}(a,b);c[d]||(c[d]={groupKey:d,summary:{requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cost:0,inputCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let e=c[d].summary;e.requests+=a.requests||0,e.promptTokens+=a.promptTokens||0,e.completionTokens+=a.completionTokens||0,e.totalTokens+=a.totalTokens||0,e.cost+=a.cost||0,e.inputCost+=a.inputCost||0,e.outputCost+=a.outputCost||0,e.pending+=a.pending||0,a.lastUsed&&(!e.lastUsed||new Date(a.lastUsed)>new Date(e.lastUsed))&&(e.lastUsed=a.lastUsed),c[d].items.push(a)}),Object.values(c)}K.propTypes={};let O=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],P=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"accountName",label:"Account"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],Q=[{field:"keyName",label:"API Key Name"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],R=[{field:"endpoint",label:"Endpoint"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],S=[{value:"model",label:"Usage by Model"},{value:"account",label:"Usage by Account"},{value:"apiKey",label:"Usage by API Key"},{value:"endpoint",label:"Usage by Endpoint"}];function T(){let a=(0,f.useRouter)(),b=(0,f.useSearchParams)(),c=b.get("sortBy")||"rawModel",i=b.get("sortOrder")||"asc",[j,k]=(0,e.useState)(null),[l,o]=(0,e.useState)(!0),[q,r]=(0,e.useState)("model"),[t,u]=(0,e.useState)([]),v=(0,e.useCallback)((c,d)=>{let e=new URLSearchParams(b.toString());e.get("sortBy")===d?e.set("sortOrder","asc"===e.get("sortOrder")?"desc":"asc"):(e.set("sortBy",d),e.set("sortOrder","asc")),a.replace(`?${e.toString()}`,{scroll:!1})},[b,a]),w=(0,e.useMemo)(()=>{if(!j)return null;switch(q){case"model":{let a=j.pending?.byModel||{};return{columns:O,groupedData:N(M(j.byModel,a,c,i),"rawModel"),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:a.pending>0?"primary":"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})}}case"account":{let a={};return j?.pending?.byAccount&&Object.entries(j.byAccount||{}).forEach(([b,c])=>{let d=j.pending.byAccount[c.connectionId];if(d){let e=c.provider?`${c.rawModel} (${c.provider})`:c.rawModel;a[b]=d[e]||0}}),{columns:P,groupedData:N(M(j.byAccount,a,c,i),"accountName"),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.accountName||`Account ${a.connectionId?.slice(0,8)}...`}),(0,d.jsx)("td",{className:`px-6 py-3 font-medium transition-colors ${a.pending>0?"text-primary":""}`,children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:a.pending>0?"primary":"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})}}case"apiKey":return{columns:Q,groupedData:N(M(j.byApiKey,{},c,i),"keyName"),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 font-medium",children:a.keyName}),(0,d.jsx)("td",{className:"px-6 py-3",children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})};default:return{columns:R,groupedData:N(M(j.byEndpoint,{},c,i),"endpoint"),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-text-muted",children:"—"}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.summary.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.summary.lastUsed)})]}),renderDetailCells:a=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("td",{className:"px-6 py-3 font-medium font-mono text-sm",children:a.endpoint}),(0,d.jsx)("td",{className:"px-6 py-3",children:a.rawModel}),(0,d.jsx)("td",{className:"px-6 py-3",children:(0,d.jsx)(h.default,{variant:"neutral",size:"sm",children:a.provider})}),(0,d.jsx)("td",{className:"px-6 py-3 text-right",children:n(a.requests)}),(0,d.jsx)("td",{className:"px-6 py-3 text-right text-text-muted whitespace-nowrap",children:p(a.lastUsed)})]})}}},[j,q,c,i]);return l?(0,d.jsx)(g.CardSkeleton,{}):j?(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(m,{stats:j}),(0,d.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-[2fr_1fr] gap-2 items-stretch",children:[(0,d.jsx)(z,{providers:t,activeRequests:j.activeRequests||[],lastProvider:j.recentRequests?.[0]?.provider||"",errorProvider:j.errorProvider||""}),(0,d.jsx)(L,{requests:j.recentRequests||[]})]}),(0,d.jsx)(K,{}),(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsx)("div",{className:"flex items-center justify-between",children:(0,d.jsx)("select",{value:q,onChange:a=>r(a.target.value),className:"px-3 py-1.5 rounded-lg border border-border bg-bg-subtle text-sm font-medium text-text focus:outline-none focus:ring-2 focus:ring-primary/50",children:S.map(a=>(0,d.jsx)("option",{value:a.value,children:a.label},a.value))})}),w&&(0,d.jsx)(s,{title:"",columns:w.columns,groupedData:w.groupedData,tableType:q,sortBy:c,sortOrder:i,onToggleSort:v,storageKey:w.storageKey,renderSummaryCells:w.renderSummaryCells,renderDetailCells:w.renderDetailCells,emptyMessage:w.emptyMessage})]})]}):(0,d.jsx)("div",{className:"text-text-muted",children:"Failed to load usage statistics."})}},91099:(a,b,c)=>{c.d(b,{default:()=>f});var d=c(48249),e=c(71404);function f({options:a=[],value:b,onChange:c,size:f="md",className:g}){let h={sm:"h-7 text-xs",md:"h-9 text-sm",lg:"h-11 text-base"};return(0,d.jsx)("div",{className:(0,e.cn)("inline-flex items-center p-1 rounded-lg","bg-black/5 dark:bg-white/5",g),children:a.map(a=>(0,d.jsxs)("button",{onClick:()=>c(a.value),className:(0,e.cn)("px-4 rounded-md font-medium transition-all",h[f],b===a.value?"bg-white dark:bg-white/10 text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:[a.icon&&(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] mr-1.5",children:a.icon}),a.label]},a.value))})}},91809:(a,b,c)=>{c.d(b,{default:()=>g});var d=c(48249),e=c(67484),f=c(17660);function g(){let[a,b]=(0,e.useState)([]),[c,g]=(0,e.useState)(!0),[h,i]=(0,e.useState)(!0);return(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:"Request Logs"}),(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("label",{className:"text-sm font-medium text-text-muted flex items-center gap-2 cursor-pointer",children:[(0,d.jsx)("span",{children:"Auto Refresh (3s)"}),(0,d.jsx)("div",{onClick:()=>i(!h),className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus:outline-none ${h?"bg-primary":"bg-bg-subtle border border-border"}`,children:(0,d.jsx)("span",{className:`inline-block h-3 w-3 transform rounded-full bg-white transition-transform ${h?"translate-x-5":"translate-x-1"}`})})]})})]}),(0,d.jsx)(f.default,{className:"overflow-hidden bg-black/5 dark:bg-black/20",children:(0,d.jsx)("div",{className:"p-0 overflow-x-auto max-h-[600px] overflow-y-auto font-mono text-xs",children:c&&0===a.length?(0,d.jsx)("div",{className:"p-8 text-center text-text-muted",children:"Loading logs..."}):0===a.length?(0,d.jsx)("div",{className:"p-8 text-center text-text-muted",children:"No logs recorded yet."}):(0,d.jsxs)("table",{className:"w-full text-left border-collapse whitespace-nowrap",children:[(0,d.jsx)("thead",{className:"sticky top-0 bg-bg-subtle border-b border-border z-10",children:(0,d.jsxs)("tr",{children:[(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"DateTime"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Model"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Provider"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Account"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"In"}),(0,d.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Out"}),(0,d.jsx)("th",{className:"px-3 py-2",children:"Status"})]})}),(0,d.jsx)("tbody",{className:"divide-y divide-border/50",children:a.map((a,b)=>{let c=a.split(" | ");if(c.length<7)return null;let e=c[6],f=e.includes("PENDING"),g=e.includes("FAILED"),h=e.includes("OK");return(0,d.jsxs)("tr",{className:`hover:bg-primary/5 transition-colors ${f?"bg-primary/5":""}`,children:[(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-text-muted",children:c[0]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border font-medium",children:c[1]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border",children:(0,d.jsx)("span",{className:"px-1.5 py-0.5 rounded bg-bg-subtle border border-border text-[10px] uppercase font-bold",children:c[2]})}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border truncate max-w-[150px]",title:c[3],children:c[3]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-primary",children:c[4]}),(0,d.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-success",children:c[5]}),(0,d.jsx)("td",{className:`px-3 py-1.5 font-bold ${h?"text-success":g?"text-error":"text-primary animate-pulse"}`,children:e})]},b)})})]})})}),(0,d.jsx)("div",{className:"text-[10px] text-text-muted italic",children:"Logs are saved to log.txt in the application data directory."})]})}},95145:(a,b,c)=>{c.d(b,{ConfirmModal:()=>h,default:()=>g});var d=c(48249);c(67484);var e=c(71404),f=c(99070);function g({isOpen:a,onClose:b,title:c,children:f,footer:g,size:h="md",closeOnOverlay:i=!0,showCloseButton:j=!0,className:k}){return a?(0,d.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,d.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:i?b:void 0}),(0,d.jsxs)("div",{className:(0,e.cn)("relative w-full bg-surface","border border-black/10 dark:border-white/10","rounded-xl shadow-2xl","animate-in fade-in zoom-in-95 duration-200",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[h],k),children:[(c||j)&&(0,d.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-black/5 dark:border-white/5",children:[(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mr-4",children:[(0,d.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,d.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,d.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),c&&(0,d.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:c})]}),j&&(0,d.jsx)("button",{onClick:b,className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,d.jsx)("div",{className:"p-6 max-h-[calc(80vh-140px)] overflow-y-auto",children:f}),g&&(0,d.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-black/5 dark:border-white/5",children:g})]})]}):null}function h({isOpen:a,onClose:b,onConfirm:c,title:e="Confirm",message:h,confirmText:i="Confirm",cancelText:j="Cancel",variant:k="danger",loading:l=!1}){return(0,d.jsx)(g,{isOpen:a,onClose:b,title:e,size:"sm",footer:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.default,{variant:"ghost",onClick:b,disabled:l,children:j}),(0,d.jsx)(f.default,{variant:k,onClick:c,loading:l,children:i})]}),children:(0,d.jsx)("p",{className:"text-text-muted",children:h})})}},95514:(a,b,c)=>{c.d(b,{default:()=>f});var d=c(48249),e=c(71404);function f({checked:a=!1,onChange:b,label:c,description:f,disabled:g=!1,size:h="md",className:i}){let j={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,d.jsxs)("div",{className:(0,e.cn)("flex items-center gap-3",g&&"opacity-50 cursor-not-allowed",i),children:[(0,d.jsx)("button",{type:"button",role:"switch","aria-checked":a,disabled:g,onClick:()=>{!g&&b&&b(!a)},className:(0,e.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-1 focus:ring-primary/30",a?"bg-primary":"bg-black/10 dark:bg-white/20",j[h].track,g&&"cursor-not-allowed"),children:(0,d.jsx)("span",{className:(0,e.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",a?j[h].translate:"translate-x-0.5",j[h].thumb,"mt-0.5")})}),(c||f)&&(0,d.jsxs)("div",{className:"flex flex-col",children:[c&&(0,d.jsx)("span",{className:"text-sm font-medium text-text-main",children:c}),f&&(0,d.jsx)("span",{className:"text-xs text-text-muted",children:f})]})]})}},99070:(a,b,c)=>{c.d(b,{default:()=>h});var d=c(48249),e=c(71404);let f={primary:"bg-gradient-to-b from-primary to-primary-hover text-white shadow-sm",secondary:"bg-white dark:bg-white/10 border border-black/10 dark:border-white/10 text-text-main hover:bg-black/5 dark:hover:bg-white/5",outline:"border border-black/15 dark:border-white/15 text-text-main hover:bg-black/5",ghost:"text-text-muted hover:bg-black/5 dark:hover:bg-white/5 hover:text-text-main",danger:"bg-red-500 text-white hover:bg-red-600 shadow-sm"},g={sm:"h-7 px-3 text-xs rounded-md",md:"h-9 px-4 text-sm rounded-lg",lg:"h-11 px-6 text-sm rounded-lg"};function h({children:a,variant:b="primary",size:c="md",icon:h,iconRight:i,disabled:j=!1,loading:k=!1,fullWidth:l=!1,className:m,...n}){return(0,d.jsxs)("button",{className:(0,e.cn)("inline-flex items-center justify-center gap-2 font-medium transition-all duration-200 cursor-pointer","active:scale-[0.99] disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100",f[b],g[c],l&&"w-full",m),disabled:j||k,...n,children:[k?(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}):h?(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:h}):null,a,i&&!k&&(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:i})]})}}};
@@ -1,5 +1,5 @@
1
1
  "use strict";exports.id=4989,exports.ids=[4989],exports.modules={47370:(a,b,c)=>{c.d(b,{BY:()=>E,E5:()=>B,SL:()=>n.SL,Zx:()=>C,_V:()=>w,j$:()=>F,ox:()=>n.ox,rg:()=>y,sZ:()=>A,uw:()=>x});var d=c(82996),e=c(11259),f=c(94735),g=c(33873),h=c.n(g),i=c(21820),j=c.n(i),k=c(29021),l=c.n(k),m=c(1932),n=c(90336);let o="u">typeof caches||"object"==typeof caches,p=function(){if(o)return"/tmp";if(process.env.DATA_DIR)return process.env.DATA_DIR;try{let a=process.platform,b=j().homedir(),c=function(){if(o)return"9router";let a=h().dirname((0,m.fileURLToPath)("file:///Users/Working/router4/app/src/lib/usageDb.js")),b=h().resolve(a,"../../../package.json");try{let a=JSON.parse(l().readFileSync(b,"utf-8"));return a.config?.appName||"9router"}catch{return"9router"}}();if("win32"===a)return h().join(process.env.APPDATA||h().join(b,"AppData","Roaming"),c);return h().join(b,`.${c}`)}catch(a){return console.error("[usageDb] Failed to get user data directory:",a.message),h().join(process.cwd(),".9router")}}(),q=o?null:h().join(p,"usage.json"),r=o?null:h().join(p,"log.txt");if(!o&&l()&&"function"==typeof l().existsSync)try{l().existsSync(p)||(l().mkdirSync(p,{recursive:!0}),console.log(`[usageDb] Created data directory: ${p}`))}catch(a){console.error("[usageDb] Failed to create data directory:",a.message)}let s={history:[]},t=null;global._pendingRequests||(global._pendingRequests={byModel:{},byAccount:{}});let u=global._pendingRequests;global._lastErrorProvider||(global._lastErrorProvider={provider:"",ts:0});let v=global._lastErrorProvider;global._statsEmitter||(global._statsEmitter=new f.EventEmitter,global._statsEmitter.setMaxListeners(50));let w=global._statsEmitter;function x(a,b,c,d,e=!1){let f=b?`${a} (${b})`:a;u.byModel[f]||(u.byModel[f]=0),u.byModel[f]=Math.max(0,u.byModel[f]+(d?1:-1)),c&&(u.byAccount[c]||(u.byAccount[c]={}),u.byAccount[c][f]||(u.byAccount[c][f]=0),u.byAccount[c][f]=Math.max(0,u.byAccount[c][f]+(d?1:-1))),!d&&e&&b&&(v.provider=b.toLowerCase(),v.ts=Date.now()),console.log(`[PENDING] ${d?"START":"END"}${e?" (ERROR)":""} | provider=${b} | model=${a} | emitter listeners=${w.listenerCount("pending")}`),w.emit("pending")}async function y(){let a=[],b={};try{let{getProviderConnections:a}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718));for(let c of(await a()))b[c.id]=c.name||c.email||c.id}catch{}for(let[c,d]of Object.entries(u.byAccount))for(let[e,f]of Object.entries(d))if(f>0){let d=b[c]||`Account ${c.slice(0,8)}...`,g=e.match(/^(.*) \((.*)\)$/),h=g?g[1]:e,i=g?g[2]:"unknown";a.push({model:h,provider:i,account:d,count:f})}let d=await z();await d.read();let e=d.data.history||[],f=new Set;return{activeRequests:a,recentRequests:[...e].sort((a,b)=>new Date(b.timestamp)-new Date(a.timestamp)).map(a=>{let b=a.tokens||{},c=b.prompt_tokens||b.input_tokens||0,d=b.completion_tokens||b.output_tokens||0;return{timestamp:a.timestamp,model:a.model,provider:a.provider||"",promptTokens:c,completionTokens:d,status:a.status||"ok"}}).filter(a=>{if(0===a.promptTokens&&0===a.completionTokens)return!1;let b=a.timestamp?a.timestamp.slice(0,16):"",c=`${a.model}|${a.provider}|${a.promptTokens}|${a.completionTokens}|${b}`;return!f.has(c)&&(f.add(c),!0)}).slice(0,20),errorProvider:Date.now()-v.ts<1e4?v.provider:""}}async function z(){if(o)return t||((t=new d.t({read:async()=>{},write:async()=>{}},s)).data=s),t;if(!t){let a=new e.Pv(q);t=new d.t(a,s);try{await t.read()}catch(a){if(a instanceof SyntaxError)console.warn("[DB] Corrupt Usage JSON detected, resetting to defaults..."),t.data=s,await t.write();else throw a}t.data||(t.data=s,await t.write())}return t}async function A(a){if(!o)try{let b=await z();a.timestamp||(a.timestamp=new Date().toISOString()),Array.isArray(b.data.history)||(b.data.history=[]);let c=await D(a.provider,a.model,a.tokens);a.cost=c,b.data.history.push(a),await b.write(),w.emit("update")}catch(a){console.error("Failed to save usage stats:",a)}}async function B({model:a,provider:b,connectionId:d,tokens:e,status:f}){if(!o)try{let g=function(a=new Date){let b=a=>String(a).padStart(2,"0"),c=b(a.getDate()),d=b(a.getMonth()+1),e=a.getFullYear(),f=b(a.getHours()),g=b(a.getMinutes()),h=b(a.getSeconds());return`${c}-${d}-${e} ${f}:${g}:${h}`}(),h=b?.toUpperCase()||"-",i=d?d.slice(0,8):"-";try{let{getProviderConnections:a}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718)),b=(await a()).find(a=>a.id===d);b&&(i=b.name||b.email||i)}catch{}let j=e?.prompt_tokens!==void 0?e.prompt_tokens:"-",k=e?.completion_tokens!==void 0?e.completion_tokens:"-",m=`${g} | ${a||"-"} | ${h} | ${i} | ${j} | ${k} | ${f}
2
- `;l().appendFileSync(r,m);let n=l().readFileSync(r,"utf-8").trim().split("\n");n.length>200&&l().writeFileSync(r,n.slice(-200).join("\n")+"\n")}catch(a){console.error("Failed to append to log.txt:",a.message)}}async function C(a=200){if(o)return[];if(!l()||"function"!=typeof l().existsSync)return console.error("[usageDb] fs module not available in this environment"),[];if(!r)return console.error("[usageDb] LOG_FILE path not defined"),[];if(!l().existsSync(r))return console.log(`[usageDb] Log file does not exist: ${r}`),[];try{return l().readFileSync(r,"utf-8").trim().split("\n").slice(-a).reverse()}catch(a){return console.error("[usageDb] Failed to read log.txt:",a.message),console.error("[usageDb] LOG_FILE path:",r),[]}}async function D(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718)),f=await e(a,b);if(!f)return 0;let g=0,h=d.prompt_tokens||d.input_tokens||0,i=d.cached_tokens||d.cache_read_input_tokens||0,j=Math.max(0,h-i);if(g+=j*(f.input/1e6),i>0){let a=f.cached||f.input;g+=a/1e6*i}let k=d.completion_tokens||d.output_tokens||0;g+=k*(f.output/1e6);let l=d.reasoning_tokens||0;if(l>0){let a=f.reasoning||f.output;g+=a/1e6*l}let m=d.cache_creation_input_tokens||0;if(m>0){let a=f.cache_creation||f.input;g+=a/1e6*m}return g}catch(a){return console.error("Error calculating cost:",a),0}}async function E(){let a=(await z()).data.history||[],{getProviderConnections:b,getApiKeys:d}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718)),e=[];try{e=await b()}catch(a){console.warn("Could not fetch provider connections for usage stats:",a.message)}let f={};for(let a of e)f[a.id]=a.name||a.email||a.id;let g=[];try{g=await d()}catch(a){console.warn("Could not fetch API keys for usage stats:",a.message)}let h={};for(let a of g)h[a.key]={name:a.name,id:a.id,createdAt:a.createdAt};let i=new Set,j=[...a].sort((a,b)=>new Date(b.timestamp)-new Date(a.timestamp)).map(a=>{let b=a.tokens||{},c=b.prompt_tokens||b.input_tokens||0,d=b.completion_tokens||b.output_tokens||0;return{timestamp:a.timestamp,model:a.model,provider:a.provider||"",promptTokens:c,completionTokens:d,status:a.status||"ok"}}).filter(a=>{if(0===a.promptTokens&&0===a.completionTokens)return!1;let b=a.timestamp?a.timestamp.slice(0,16):"",c=`${a.model}|${a.provider}|${a.promptTokens}|${a.completionTokens}|${b}`;return!i.has(c)&&(i.add(c),!0)}).slice(0,20),k={totalRequests:a.length,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{},last10Minutes:[],pending:u,activeRequests:[],recentRequests:j,errorProvider:Date.now()-v.ts<1e4?v.provider:""};for(let[a,b]of Object.entries(u.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=f[a]||`Account ${a.slice(0,8)}...`,e=c.match(/^(.*) \((.*)\)$/),g=e?e[1]:c,h=e?e[2]:"unknown";k.activeRequests.push({model:g,provider:h,account:b,count:d})}let l=new Date,m=new Date(6e4*Math.floor(l.getTime()/6e4)),n=new Date(m.getTime()-54e4),o={};for(let a=0;a<10;a++){let b=new Date(m.getTime()-(9-a)*6e4).getTime();o[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},k.last10Minutes.push(o[b])}for(let b of a){let a=b.tokens?.prompt_tokens||0,c=b.tokens?.completion_tokens||0,d=new Date(b.timestamp),e=await D(b.provider,b.model,b.tokens);if(k.totalPromptTokens+=a,k.totalCompletionTokens+=c,k.totalCost+=e,d>=n&&d<=l){let b=6e4*Math.floor(d.getTime()/6e4);o[b]&&(o[b].requests++,o[b].promptTokens+=a,o[b].completionTokens+=c,o[b].cost+=e)}k.byProvider[b.provider]||(k.byProvider[b.provider]={requests:0,promptTokens:0,completionTokens:0,cost:0}),k.byProvider[b.provider].requests++,k.byProvider[b.provider].promptTokens+=a,k.byProvider[b.provider].completionTokens+=c,k.byProvider[b.provider].cost+=e;let g=b.provider?`${b.model} (${b.provider})`:b.model;if(k.byModel[g]||(k.byModel[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,lastUsed:b.timestamp}),k.byModel[g].requests++,k.byModel[g].promptTokens+=a,k.byModel[g].completionTokens+=c,k.byModel[g].cost+=e,new Date(b.timestamp)>new Date(k.byModel[g].lastUsed)&&(k.byModel[g].lastUsed=b.timestamp),b.connectionId){let d=f[b.connectionId]||`Account ${b.connectionId.slice(0,8)}...`,g=`${b.model} (${b.provider} - ${d})`;k.byAccount[g]||(k.byAccount[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,connectionId:b.connectionId,accountName:d,lastUsed:b.timestamp}),k.byAccount[g].requests++,k.byAccount[g].promptTokens+=a,k.byAccount[g].completionTokens+=c,k.byAccount[g].cost+=e,new Date(b.timestamp)>new Date(k.byAccount[g].lastUsed)&&(k.byAccount[g].lastUsed=b.timestamp)}if(b.apiKey&&"string"==typeof b.apiKey){let d=h[b.apiKey],f=d?.name||b.apiKey.slice(0,8)+"...",g=b.apiKey,i=`${g}|${b.model}|${b.provider||"unknown"}`;k.byApiKey[i]||(k.byApiKey[i]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,apiKey:b.apiKey,keyName:f,apiKeyKey:g,lastUsed:b.timestamp});let j=k.byApiKey[i];j.requests++,j.promptTokens+=a,j.completionTokens+=c,j.cost+=e,new Date(b.timestamp)>new Date(j.lastUsed)&&(j.lastUsed=b.timestamp)}else{let d="local-no-key";k.byApiKey[d]||(k.byApiKey[d]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,apiKey:null,keyName:"Local (No API Key)",apiKeyKey:d,lastUsed:b.timestamp});let f=k.byApiKey[d];f.requests++,f.promptTokens+=a,f.completionTokens+=c,f.cost+=e,new Date(b.timestamp)>new Date(f.lastUsed)&&(f.lastUsed=b.timestamp)}let i=b.endpoint||"Unknown",j=`${i}|${b.model}|${b.provider||"unknown"}`;k.byEndpoint[j]||(k.byEndpoint[j]={requests:0,promptTokens:0,completionTokens:0,cost:0,endpoint:i,rawModel:b.model,provider:b.provider,lastUsed:b.timestamp});let m=k.byEndpoint[j];m.requests++,m.promptTokens+=a,m.completionTokens+=c,m.cost+=e,new Date(b.timestamp)>new Date(m.lastUsed)&&(m.lastUsed=b.timestamp)}return k}async function F(a="7d"){let b,c,d,e=(await z()).data.history||[],f=Date.now();"24h"===a?(b=24,c=36e5,d=a=>new Date(a).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1})):"7d"===a?(b=7,c=864e5,d=a=>new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric"})):"30d"===a?(b=30,c=864e5,d=a=>new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric"})):(b=60,c=864e5,d=a=>new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric"}));let g=f-b*c,h=Array.from({length:b},(a,b)=>{let e=g+b*c;return{label:d(e),tokens:0,cost:0,_ts:e}});for(let a of e){let d=new Date(a.timestamp).getTime();if(d<g||d>f)continue;let e=Math.min(Math.floor((d-g)/c),b-1),i=a.tokens?.prompt_tokens||0,j=a.tokens?.completion_tokens||0;h[e].tokens+=i+j,h[e].cost+=a.cost||0}return h.map(({label:a,tokens:b,cost:c})=>({label:a,tokens:b,cost:c}))}},90336:(a,b,c)=>{c.d(b,{SL:()=>B,ox:()=>z,yU:()=>w});var d=c(87550),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h),j=c(29021),k=c.n(j);let l="u">typeof caches||"object"==typeof caches;async function m(){try{let{getSettings:a}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718)),b=await a(),d="false"!==process.env.OBSERVABILITY_ENABLED;return{enabled:"boolean"==typeof b.observabilityEnabled?b.observabilityEnabled:d,maxRecords:b.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||"1000",10),batchSize:b.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||"20",10),flushIntervalMs:b.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||"5000",10),maxJsonSize:1024*(b.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"1024",10))}}catch(a){return console.error("[requestDetailsDb] Failed to load observability config:",a),{enabled:!0,maxRecords:1e3,batchSize:20,flushIntervalMs:5e3,maxJsonSize:1048576}}}let n=null,o=0;async function p(){return(!n||Date.now()-o>5e3)&&(n=await m(),o=Date.now()),n}let q=null,r=function(){if(l)return"/tmp";if(process.env.DATA_DIR)return process.env.DATA_DIR;try{let a=process.platform,b=i().homedir(),c="9router";if("win32"===a)return g().join(process.env.APPDATA||g().join(b,"AppData","Roaming"),c);return g().join(b,`.${c}`)}catch(a){return console.error("[requestDetailsDb] Failed to get user data directory:",a.message),g().join(process.cwd(),".9router")}}(),s=l?null:g().join(r,"request-details.sqlite");if(!l&&k()&&"function"==typeof k().existsSync)try{k().existsSync(r)||k().mkdirSync(r,{recursive:!0})}catch(a){console.error("[requestDetailsDb] Failed to create data directory:",a.message)}let t=[],u=null,v=!1;async function w(){if(l)return q||(q={prepare:()=>({run:()=>{},get:()=>null,all:()=>[]}),exec:()=>{},pragma:()=>{}}),q;if(!q){let a=new(e())(s);a.pragma("journal_mode = WAL"),a.pragma("synchronous = NORMAL"),a.pragma("cache_size = -64000"),a.pragma("temp_store = MEMORY"),a.exec(`
2
+ `;l().appendFileSync(r,m);let n=l().readFileSync(r,"utf-8").trim().split("\n");n.length>200&&l().writeFileSync(r,n.slice(-200).join("\n")+"\n")}catch(a){console.error("Failed to append to log.txt:",a.message)}}async function C(a=200){if(o)return[];if(!l()||"function"!=typeof l().existsSync)return console.error("[usageDb] fs module not available in this environment"),[];if(!r)return console.error("[usageDb] LOG_FILE path not defined"),[];if(!l().existsSync(r))return console.log(`[usageDb] Log file does not exist: ${r}`),[];try{return l().readFileSync(r,"utf-8").trim().split("\n").slice(-a).reverse()}catch(a){return console.error("[usageDb] Failed to read log.txt:",a.message),console.error("[usageDb] LOG_FILE path:",r),[]}}async function D(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718)),f=await e(a,b);if(!f)return 0;let g=0,h=d.prompt_tokens||d.input_tokens||0,i=d.cached_tokens||d.cache_read_input_tokens||0,j=Math.max(0,h-i);if(g+=j*(f.input/1e6),i>0){let a=f.cached||f.input;g+=a/1e6*i}let k=d.completion_tokens||d.output_tokens||0;g+=k*(f.output/1e6);let l=d.reasoning_tokens||0;if(l>0){let a=f.reasoning||f.output;g+=a/1e6*l}let m=d.cache_creation_input_tokens||0;if(m>0){let a=f.cache_creation||f.input;g+=a/1e6*m}return g}catch(a){return console.error("Error calculating cost:",a),0}}async function E(){let a=(await z()).data.history||[],{getProviderConnections:b,getApiKeys:d,getProviderNodes:e}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718)),f=[];try{f=await b()}catch(a){console.warn("Could not fetch provider connections for usage stats:",a.message)}let g={};for(let a of f)g[a.id]=a.name||a.email||a.id;let h={};try{for(let a of(await e()))a.id&&a.name&&(h[a.id]=a.name)}catch{}let i=[];try{i=await d()}catch(a){console.warn("Could not fetch API keys for usage stats:",a.message)}let j={};for(let a of i)j[a.key]={name:a.name,id:a.id,createdAt:a.createdAt};let k=new Set,l=[...a].sort((a,b)=>new Date(b.timestamp)-new Date(a.timestamp)).map(a=>{let b=a.tokens||{},c=b.prompt_tokens||b.input_tokens||0,d=b.completion_tokens||b.output_tokens||0;return{timestamp:a.timestamp,model:a.model,provider:a.provider||"",promptTokens:c,completionTokens:d,status:a.status||"ok"}}).filter(a=>{if(0===a.promptTokens&&0===a.completionTokens)return!1;let b=a.timestamp?a.timestamp.slice(0,16):"",c=`${a.model}|${a.provider}|${a.promptTokens}|${a.completionTokens}|${b}`;return!k.has(c)&&(k.add(c),!0)}).slice(0,20),m={totalRequests:a.length,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{},last10Minutes:[],pending:u,activeRequests:[],recentRequests:l,errorProvider:Date.now()-v.ts<1e4?v.provider:""};for(let[a,b]of Object.entries(u.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=g[a]||`Account ${a.slice(0,8)}...`,e=c.match(/^(.*) \((.*)\)$/),f=e?e[1]:c,h=e?e[2]:"unknown";m.activeRequests.push({model:f,provider:h,account:b,count:d})}let n=new Date,o=new Date(6e4*Math.floor(n.getTime()/6e4)),p=new Date(o.getTime()-54e4),q={};for(let a=0;a<10;a++){let b=new Date(o.getTime()-(9-a)*6e4).getTime();q[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},m.last10Minutes.push(q[b])}for(let b of a){let a=b.tokens?.prompt_tokens||0,c=b.tokens?.completion_tokens||0,d=new Date(b.timestamp),e=await D(b.provider,b.model,b.tokens);if(m.totalPromptTokens+=a,m.totalCompletionTokens+=c,m.totalCost+=e,d>=p&&d<=n){let b=6e4*Math.floor(d.getTime()/6e4);q[b]&&(q[b].requests++,q[b].promptTokens+=a,q[b].completionTokens+=c,q[b].cost+=e)}m.byProvider[b.provider]||(m.byProvider[b.provider]={requests:0,promptTokens:0,completionTokens:0,cost:0}),m.byProvider[b.provider].requests++,m.byProvider[b.provider].promptTokens+=a,m.byProvider[b.provider].completionTokens+=c,m.byProvider[b.provider].cost+=e;let f=b.provider?`${b.model} (${b.provider})`:b.model,i=h[b.provider]||b.provider;if(m.byModel[f]||(m.byModel[f]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:i,lastUsed:b.timestamp}),m.byModel[f].requests++,m.byModel[f].promptTokens+=a,m.byModel[f].completionTokens+=c,m.byModel[f].cost+=e,new Date(b.timestamp)>new Date(m.byModel[f].lastUsed)&&(m.byModel[f].lastUsed=b.timestamp),b.connectionId){let d=g[b.connectionId]||`Account ${b.connectionId.slice(0,8)}...`,f=`${b.model} (${b.provider} - ${d})`;m.byAccount[f]||(m.byAccount[f]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:i,connectionId:b.connectionId,accountName:d,lastUsed:b.timestamp}),m.byAccount[f].requests++,m.byAccount[f].promptTokens+=a,m.byAccount[f].completionTokens+=c,m.byAccount[f].cost+=e,new Date(b.timestamp)>new Date(m.byAccount[f].lastUsed)&&(m.byAccount[f].lastUsed=b.timestamp)}if(b.apiKey&&"string"==typeof b.apiKey){let d=j[b.apiKey],f=d?.name||b.apiKey.slice(0,8)+"...",g=b.apiKey,h=`${g}|${b.model}|${b.provider||"unknown"}`;m.byApiKey[h]||(m.byApiKey[h]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:i,apiKey:b.apiKey,keyName:f,apiKeyKey:g,lastUsed:b.timestamp});let k=m.byApiKey[h];k.requests++,k.promptTokens+=a,k.completionTokens+=c,k.cost+=e,new Date(b.timestamp)>new Date(k.lastUsed)&&(k.lastUsed=b.timestamp)}else{let d="local-no-key";m.byApiKey[d]||(m.byApiKey[d]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:i,apiKey:null,keyName:"Local (No API Key)",apiKeyKey:d,lastUsed:b.timestamp});let f=m.byApiKey[d];f.requests++,f.promptTokens+=a,f.completionTokens+=c,f.cost+=e,new Date(b.timestamp)>new Date(f.lastUsed)&&(f.lastUsed=b.timestamp)}let k=b.endpoint||"Unknown",l=`${k}|${b.model}|${b.provider||"unknown"}`;m.byEndpoint[l]||(m.byEndpoint[l]={requests:0,promptTokens:0,completionTokens:0,cost:0,endpoint:k,rawModel:b.model,provider:i,lastUsed:b.timestamp});let o=m.byEndpoint[l];o.requests++,o.promptTokens+=a,o.completionTokens+=c,o.cost+=e,new Date(b.timestamp)>new Date(o.lastUsed)&&(o.lastUsed=b.timestamp)}return m}async function F(a="7d"){let b,c,d,e=(await z()).data.history||[],f=Date.now();"24h"===a?(b=24,c=36e5,d=a=>new Date(a).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1})):"7d"===a?(b=7,c=864e5,d=a=>new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric"})):"30d"===a?(b=30,c=864e5,d=a=>new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric"})):(b=60,c=864e5,d=a=>new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric"}));let g=f-b*c,h=Array.from({length:b},(a,b)=>{let e=g+b*c;return{label:d(e),tokens:0,cost:0,_ts:e}});for(let a of e){let d=new Date(a.timestamp).getTime();if(d<g||d>f)continue;let e=Math.min(Math.floor((d-g)/c),b-1),i=a.tokens?.prompt_tokens||0,j=a.tokens?.completion_tokens||0;h[e].tokens+=i+j,h[e].cost+=a.cost||0}return h.map(({label:a,tokens:b,cost:c})=>({label:a,tokens:b,cost:c}))}},90336:(a,b,c)=>{c.d(b,{SL:()=>B,ox:()=>z,yU:()=>w});var d=c(87550),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h),j=c(29021),k=c.n(j);let l="u">typeof caches||"object"==typeof caches;async function m(){try{let{getSettings:a}=await Promise.all([c.e(9718),c.e(4755)]).then(c.bind(c,89718)),b=await a(),d="false"!==process.env.OBSERVABILITY_ENABLED;return{enabled:"boolean"==typeof b.observabilityEnabled?b.observabilityEnabled:d,maxRecords:b.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||"1000",10),batchSize:b.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||"20",10),flushIntervalMs:b.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||"5000",10),maxJsonSize:1024*(b.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"1024",10))}}catch(a){return console.error("[requestDetailsDb] Failed to load observability config:",a),{enabled:!0,maxRecords:1e3,batchSize:20,flushIntervalMs:5e3,maxJsonSize:1048576}}}let n=null,o=0;async function p(){return(!n||Date.now()-o>5e3)&&(n=await m(),o=Date.now()),n}let q=null,r=function(){if(l)return"/tmp";if(process.env.DATA_DIR)return process.env.DATA_DIR;try{let a=process.platform,b=i().homedir(),c="9router";if("win32"===a)return g().join(process.env.APPDATA||g().join(b,"AppData","Roaming"),c);return g().join(b,`.${c}`)}catch(a){return console.error("[requestDetailsDb] Failed to get user data directory:",a.message),g().join(process.cwd(),".9router")}}(),s=l?null:g().join(r,"request-details.sqlite");if(!l&&k()&&"function"==typeof k().existsSync)try{k().existsSync(r)||k().mkdirSync(r,{recursive:!0})}catch(a){console.error("[requestDetailsDb] Failed to create data directory:",a.message)}let t=[],u=null,v=!1;async function w(){if(l)return q||(q={prepare:()=>({run:()=>{},get:()=>null,all:()=>[]}),exec:()=>{},pragma:()=>{}}),q;if(!q){let a=new(e())(s);a.pragma("journal_mode = WAL"),a.pragma("synchronous = NORMAL"),a.pragma("cache_size = -64000"),a.pragma("temp_store = MEMORY"),a.exec(`
3
3
  CREATE TABLE IF NOT EXISTS request_details (
4
4
  id TEXT PRIMARY KEY,
5
5
  provider TEXT,
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=7189,exports.ids=[7189],exports.modules={9024:(a,b,c)=>{c.d(b,{A4:()=>g,c2:()=>f,tV:()=>e,v8:()=>h});var d=c(14170);function e(a){if(!a||100!==a.charCodeAt(0))return null;let b=a.slice(5).trim();if("[DONE]"===b)return{done:!0};try{return JSON.parse(b)}catch(a){return b.length>0&&b.length<1e3&&console.log(`[WARN] Failed to parse SSE line (${b.length} chars): ${b.substring(0,100)}...`),null}}function f(a,b){if(b===d.h.OPENAI&&a.choices?.[0]?.delta){let b=a.choices[0].delta;return b.content&&""!==b.content||b.reasoning_content&&""!==b.reasoning_content||b.tool_calls&&b.tool_calls.length>0||a.choices[0].finish_reason||b.role}if(b===d.h.CLAUDE){let b="content_block_delta"===a.type,c=a.delta?.text&&""!==a.delta.text,d=a.delta?.thinking&&""!==a.delta.thinking,e=a.delta?.partial_json&&""!==a.delta.partial_json;if(b&&!c&&!d&&!e)return!1}return!0}function g(a){if(a.id&&("chat"===a.id||"completion"===a.id||a.id.length<8)){let b=a.extend_fields?.requestId||a.extend_fields?.traceId||Date.now().toString(36);return a.id=`chatcmpl-${b}`,!0}return!1}function h(a,b){if(null==a)return"data: null\n\n";if(a&&a.done)return"data: [DONE]\n\n";if(a&&a.event&&a.data)return`event: ${a.event}
1
+ "use strict";exports.id=5330,exports.ids=[5330],exports.modules={9024:(a,b,c)=>{c.d(b,{A4:()=>g,c2:()=>f,tV:()=>e,v8:()=>h});var d=c(14170);function e(a){if(!a||100!==a.charCodeAt(0))return null;let b=a.slice(5).trim();if("[DONE]"===b)return{done:!0};try{return JSON.parse(b)}catch(a){return b.length>0&&b.length<1e3&&console.log(`[WARN] Failed to parse SSE line (${b.length} chars): ${b.substring(0,100)}...`),null}}function f(a,b){if(b===d.h.OPENAI&&a.choices?.[0]?.delta){let b=a.choices[0].delta;return b.content&&""!==b.content||b.reasoning_content&&""!==b.reasoning_content||b.tool_calls&&b.tool_calls.length>0||a.choices[0].finish_reason||b.role}if(b===d.h.CLAUDE){let b="content_block_delta"===a.type,c=a.delta?.text&&""!==a.delta.text,d=a.delta?.thinking&&""!==a.delta.thinking,e=a.delta?.partial_json&&""!==a.delta.partial_json;if(b&&!c&&!d&&!e)return!1}return!0}function g(a){if(a.id&&("chat"===a.id||"completion"===a.id||a.id.length<8)){let b=a.extend_fields?.requestId||a.extend_fields?.traceId||Date.now().toString(36);return a.id=`chatcmpl-${b}`,!0}return!1}function h(a,b){if(null==a)return"data: null\n\n";if(a&&a.done)return"data: [DONE]\n\n";if(a&&a.event&&a.data)return`event: ${a.event}
2
2
  data: ${JSON.stringify(a.data)}
3
3
 
4
4
  `;if(b===d.h.CLAUDE&&a&&a.type){if(a.usage&&"object"==typeof a.usage&&null===a.usage.perf_metrics){let{perf_metrics:b,...c}=a.usage;a={...a,usage:c}}return`event: ${a.type}
@@ -6,7 +6,7 @@ data: ${JSON.stringify(a)}
6
6
 
7
7
  `}if(a?.usage&&"object"==typeof a.usage&&null===a.usage.perf_metrics){let{perf_metrics:b,...c}=a.usage;a={...a,usage:c}}return`data: ${JSON.stringify(a)}
8
8
 
9
- `}},11655:(a,b,c)=>{c.d(b,{x:()=>l});var d=c(74957),e=c(2255),f=c(65377),g=c(4845),h=c(33110),i=c(9024),j=c(55511),k=c.n(j);class l extends d.H{constructor(){super("github",e.xq.github),this.knownCodexModels=new Set}buildUrl(a,b,c=0){return this.config.baseUrl}buildHeaders(a,b=!0){let c=a.copilotToken||a.accessToken;return{Authorization:`Bearer ${c}`,"Content-Type":"application/json","copilot-integration-id":"vscode-chat","editor-version":`vscode/${e.x0.VSCODE_VERSION}`,"editor-plugin-version":`copilot-chat/${e.x0.COPILOT_CHAT_VERSION}`,"user-agent":e.x0.USER_AGENT,"openai-intent":"conversation-panel","x-github-api-version":e.x0.API_VERSION,"x-request-id":k().randomUUID?.()||`${Date.now()}-${Math.random().toString(36).slice(2)}`,"x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:b?"text/event-stream":"application/json"}}async execute(a){let{model:b,log:c}=a;if(this.knownCodexModels.has(b))return c?.debug("GITHUB",`Using cached /responses route for ${b}`),this.executeWithResponsesEndpoint(a);let d=await super.execute(a);return d.response.status===e.gx.BAD_REQUEST&&(await d.response.clone().text()).includes("not accessible via the /chat/completions endpoint")?(c?.warn("GITHUB",`Model ${b} requires /responses. Switching...`),this.knownCodexModels.add(b),this.executeWithResponsesEndpoint(a)):d}async executeWithResponsesEndpoint({model:a,body:b,stream:c,credentials:d,signal:e,log:j}){let k=this.config.responsesUrl,l=this.buildHeaders(d,c),m=(0,f.openaiToOpenAIResponsesRequest)(a,b,c,d);j?.debug("GITHUB","Sending translated request to /responses");let n=await fetch(k,{method:"POST",headers:l,body:JSON.stringify(m),signal:e});if(!n.ok)return{response:n,url:k,headers:l,transformedBody:m};let o=(0,h.Ws)("openai-responses");o.model=a;let p=new TextDecoder,q="",r=new TransformStream({async transform(a,b){let c=(q+=p.decode(a,{stream:!0})).split("\n");for(let a of(q=c.pop()||"",c)){let c=a.trim();if(!c)continue;let d=(0,i.tV)(c);if(!d)continue;if(d.done){b.enqueue(new TextEncoder().encode("data: [DONE]\n\n"));continue}let e=(0,g.openaiResponsesToOpenAIResponse)(d,o);if(e){let a=(0,i.v8)(e,"openai");b.enqueue(new TextEncoder().encode(a))}}},flush(a){if(q.trim()){let b=(0,i.tV)(q.trim());if(b&&!b.done){let c=(0,g.openaiResponsesToOpenAIResponse)(b,o);c&&a.enqueue(new TextEncoder().encode((0,i.v8)(c,"openai")))}}}});return{response:new Response(n.body.pipeThrough(r),{status:n.status,statusText:n.statusText,headers:n.headers}),url:k,headers:l,transformedBody:m}}async refreshCopilotToken(a,b){try{let c=await fetch("https://api.github.com/copilot_internal/v2/token",{headers:{Authorization:`token ${a}`,"User-Agent":e.x0.USER_AGENT,"Editor-Version":`vscode/${e.x0.VSCODE_VERSION}`,"Editor-Plugin-Version":`copilot-chat/${e.x0.COPILOT_CHAT_VERSION}`,Accept:"application/json","x-github-api-version":e.x0.API_VERSION}});if(!c.ok){let a=await c.text();return b?.error?.("TOKEN",`Copilot token refresh failed: ${c.status} ${a}`),null}let d=await c.json();return b?.info?.("TOKEN","Copilot token refreshed"),{token:d.token,expiresAt:d.expires_at}}catch(a){return b?.error?.("TOKEN",`Copilot refresh error: ${a.message}`),null}}async refreshGitHubToken(a,b){try{let c=await fetch(e.NA.github.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:this.config.clientId,client_secret:this.config.clientSecret})});if(!c.ok)return null;let d=await c.json();return b?.info?.("TOKEN","GitHub token refreshed"),{accessToken:d.access_token,refreshToken:d.refresh_token||a,expiresIn:d.expires_in}}catch(a){return b?.error?.("TOKEN",`GitHub refresh error: ${a.message}`),null}}async refreshCredentials(a,b){let c=await this.refreshCopilotToken(a.accessToken,b);if(!c&&a.refreshToken){let d=await this.refreshGitHubToken(a.refreshToken,b);if(d?.accessToken)return(c=await this.refreshCopilotToken(d.accessToken,b))?{...d,copilotToken:c.token,copilotTokenExpiresAt:c.expiresAt}:d}return c?{accessToken:a.accessToken,refreshToken:a.refreshToken,copilotToken:c.token,copilotTokenExpiresAt:c.expiresAt}:null}needsRefresh(a){if(!a.copilotToken)return!0;if(a.copilotTokenExpiresAt){let b=a.copilotTokenExpiresAt;if("number"==typeof b&&b<1e12?b*=1e3:"string"==typeof b&&(b=new Date(b).getTime()),b-Date.now()<3e5)return!0}return super.needsRefresh(a)}}},19225:(a,b,c)=>{a.exports=c(44870)},19946:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{o:()=>r});var e=c(74957),f=c(2255),g=c(55456),h=c(73483),i=c(14170),j=c(13595),k=c(55511),l=c.n(k),m=c(85081),n=c(74075),o=c.n(n);let a=null;if(!("u">typeof caches&&"object"==typeof caches||"u">typeof EdgeRuntime))try{a=await Promise.resolve().then(c.t.bind(c,73496,23))}catch{}function p(a,b){if(2&b)return a;if(1===b)try{return o().gunzipSync(a)}catch(c){console.log(`[DECOMPRESS ERROR] flags=${b}, payloadSize=${a.length}, error=${c.message}`)}return a}function q(a){let b=a?.error?.details?.[0]?.debug?.details?.title||a?.error?.details?.[0]?.debug?.details?.detail||a?.error?.message||"API Error",c=a?.error?.code==="resource_exhausted";return new Response(JSON.stringify({error:{message:b,type:c?"rate_limit_error":"api_error",code:a?.error?.details?.[0]?.debug?.error||"unknown"}}),{status:c?f.gx.RATE_LIMITED:f.gx.BAD_REQUEST,headers:{"Content-Type":"application/json"}})}class r extends e.H{constructor(){super("cursor",f.xq.cursor)}buildUrl(){return`${this.config.baseUrl}${this.config.chatPath}`}generateChecksum(a){let b=Math.floor(Date.now()/1e6),c=new Uint8Array([b>>40&255,b>>32&255,b>>24&255,b>>16&255,b>>8&255,255&b]),d=165;for(let a=0;a<c.length;a++)c[a]=(c[a]^d)+a%256&255,d=c[a];let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",f="";for(let a=0;a<c.length;a+=3){let b=c[a],d=a+1<c.length?c[a+1]:0,g=a+2<c.length?c[a+2]:0;f+=e[b>>2],f+=e[(3&b)<<4|d>>4],a+1<c.length&&(f+=e[(15&d)<<2|g>>6]),a+2<c.length&&(f+=e[63&g])}return`${f}${a}`}buildHeaders(a){let b=a.accessToken,c=a.providerSpecificData?.machineId,d=a.providerSpecificData?.ghostMode!==!1;if(!c)throw Error("Machine ID is required for Cursor API");let e=b.includes("::")?b.split("::")[1]:b;return{authorization:`Bearer ${e}`,"connect-accept-encoding":"gzip","connect-protocol-version":"1","content-type":"application/connect+proto","user-agent":"connect-es/1.6.1","x-amzn-trace-id":`Root=${l().randomUUID()}`,"x-client-key":l().createHash("sha256").update(e).digest("hex"),"x-cursor-checksum":this.generateChecksum(c),"x-cursor-client-version":"2.3.41","x-cursor-client-type":"ide","x-cursor-client-os":"win32"===process.platform?"windows":"darwin"===process.platform?"macos":"linux","x-cursor-client-arch":"arm64"===process.arch?"aarch64":"x64","x-cursor-client-device-type":"desktop","x-cursor-config-version":l().randomUUID(),"x-cursor-timezone":Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC","x-ghost-mode":d?"true":"false","x-request-id":l().randomUUID(),"x-session-id":(0,m.Ay)(e,m.Ay.DNS)}}transformRequest(a,b,c,d){let e=(0,j.buildCursorRequest)(a,b,c,d),f=e.messages||[],h=e.tools||b.tools||[],i=b.reasoning_effort||null;return(0,g.yI)(f,a,h,i)}async makeFetchRequest(a,b,c,d){let e=await fetch(a,{method:"POST",headers:b,body:c,signal:d});return{status:e.status,headers:Object.fromEntries(e.headers.entries()),body:Buffer.from(await e.arrayBuffer())}}makeHttp2Request(b,c,d,e){if(!a)throw Error("http2 module not available");return new Promise((f,g)=>{let h=new URL(b),i=a.connect(`https://${h.host}`),j=[],k={};i.on("error",g);let l=i.request({":method":"POST",":path":h.pathname,":authority":h.host,":scheme":"https",...c});l.on("response",a=>{k=a}),l.on("data",a=>{j.push(a)}),l.on("end",()=>{i.close(),f({status:k[":status"],headers:k,body:Buffer.concat(j)})}),l.on("error",a=>{i.close(),g(a)}),e&&e.addEventListener("abort",()=>{l.close(),i.close(),g(Error("Request aborted"))}),l.write(d),l.end()})}async execute({model:b,body:c,stream:d,credentials:e,signal:g,log:h}){let i=this.buildUrl(),j=this.buildHeaders(e),k=this.transformRequest(b,c,d,e);try{let e=a?await this.makeHttp2Request(i,j,k,g):await this.makeFetchRequest(i,j,k,g);if(200!==e.status){let a=e.body?.toString()||"Unknown error";return{response:new Response(JSON.stringify({error:{message:`[${e.status}]: ${a}`,type:"invalid_request_error",code:""}}),{status:e.status,headers:{"Content-Type":"application/json"}}),url:i,headers:j,transformedBody:c}}return{response:!1!==d?this.transformProtobufToSSE(e.body,b,c):this.transformProtobufToJSON(e.body,b,c),url:i,headers:j,transformedBody:c}}catch(a){return{response:new Response(JSON.stringify({error:{message:a.message,type:"connection_error",code:""}}),{status:f.gx.SERVER_ERROR,headers:{"Content-Type":"application/json"}}),url:i,headers:j,transformedBody:c}}}transformProtobufToJSON(a,b,c){let d=`chatcmpl-cursor-${Date.now()}`,e=Math.floor(Date.now()/1e3),j=0,k="",l=[],m=new Map;for(;j<a.length&&!(j+5>a.length);){let b=a[j],c=a.readUInt32BE(j+1);if(j+5+c>a.length)break;let d=a.slice(j+5,j+5+c);if(j+=5+c,2&b)break;if(!(d=p(d,b)))continue;try{let a=d.toString("utf-8");if(a.startsWith("{")&&a.includes('"error"'))return q(JSON.parse(a))}catch{}let e=(0,g.CP)(new Uint8Array(d));if(e.error)return new Response(JSON.stringify({error:{message:e.error,type:"rate_limit_error",code:"rate_limited"}}),{status:f.gx.RATE_LIMITED,headers:{"Content-Type":"application/json"}});if(e.toolCall){let a=e.toolCall;if(m.has(a.id)){let b=m.get(a.id);b.function.arguments+=a.function.arguments,b.isLast=a.isLast}else m.set(a.id,{...a});if(a.isLast){let b=m.get(a.id);l.push({id:b.id,type:b.type,function:{name:b.function.name,arguments:b.function.arguments}})}}e.text&&(k+=e.text)}for(let[a,b]of m.entries())l.find(b=>b.id===a)||l.push({id:b.id,type:b.type,function:{name:b.function.name,arguments:b.function.arguments}});let n={role:"assistant",content:k||null};l.length>0&&(n.tool_calls=l);let o=(0,h.OF)(c,k.length,i.h.OPENAI),r={id:d,object:"chat.completion",created:e,model:b,choices:[{index:0,message:n,finish_reason:l.length>0?"tool_calls":"stop"}],usage:o};return new Response(JSON.stringify(r),{status:200,headers:{"Content-Type":"application/json"}})}transformProtobufToSSE(a,b,c){let d=`chatcmpl-cursor-${Date.now()}`,e=Math.floor(Date.now()/1e3),j=[],k=0,l="",m=[],n=new Map;for(;k<a.length&&!(k+5>a.length);){let c=a[k],h=a.readUInt32BE(k+1);if(k+5+h>a.length)break;let i=a.slice(k+5,k+5+h);if(k+=5+h,2&c)break;if(!(i=p(i,c)))continue;try{let a=i.toString("utf-8");if(a.startsWith("{")&&a.includes('"error"'))return q(JSON.parse(a))}catch{}let o=(0,g.CP)(new Uint8Array(i));if(o.error)return new Response(JSON.stringify({error:{message:o.error,type:"rate_limit_error",code:"rate_limited"}}),{status:f.gx.RATE_LIMITED,headers:{"Content-Type":"application/json"}});if(o.toolCall){let a=o.toolCall;if(0===j.length&&j.push(`data: ${JSON.stringify({id:d,object:"chat.completion.chunk",created:e,model:b,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}
9
+ `}},11655:(a,b,c)=>{c.d(b,{x:()=>l});var d=c(74957),e=c(2255),f=c(65377),g=c(4845),h=c(33110),i=c(9024),j=c(55511),k=c.n(j);class l extends d.H{constructor(){super("github",e.xq.github),this.knownCodexModels=new Set}buildUrl(a,b,c=0){return this.config.baseUrl}buildHeaders(a,b=!0){let c=a.copilotToken||a.accessToken;return{Authorization:`Bearer ${c}`,"Content-Type":"application/json","copilot-integration-id":"vscode-chat","editor-version":`vscode/${e.x0.VSCODE_VERSION}`,"editor-plugin-version":`copilot-chat/${e.x0.COPILOT_CHAT_VERSION}`,"user-agent":e.x0.USER_AGENT,"openai-intent":"conversation-panel","x-github-api-version":e.x0.API_VERSION,"x-request-id":k().randomUUID?.()||`${Date.now()}-${Math.random().toString(36).slice(2)}`,"x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:b?"text/event-stream":"application/json"}}async execute(a){let{model:b,log:c}=a;if(this.knownCodexModels.has(b))return c?.debug("GITHUB",`Using cached /responses route for ${b}`),this.executeWithResponsesEndpoint(a);let d=await super.execute(a);return d.response.status===e.gx.BAD_REQUEST&&(await d.response.clone().text()).includes("not accessible via the /chat/completions endpoint")?(c?.warn("GITHUB",`Model ${b} requires /responses. Switching...`),this.knownCodexModels.add(b),this.executeWithResponsesEndpoint(a)):d}async executeWithResponsesEndpoint({model:a,body:b,stream:c,credentials:d,signal:e,log:j}){let k=this.config.responsesUrl,l=this.buildHeaders(d,c),m=(0,f.openaiToOpenAIResponsesRequest)(a,b,c,d);j?.debug("GITHUB","Sending translated request to /responses");let n=await fetch(k,{method:"POST",headers:l,body:JSON.stringify(m),signal:e});if(!n.ok)return{response:n,url:k,headers:l,transformedBody:m};let o=(0,h.Ws)("openai-responses");o.model=a;let p=new TextDecoder,q="",r=new TransformStream({async transform(a,b){let c=(q+=p.decode(a,{stream:!0})).split("\n");for(let a of(q=c.pop()||"",c)){let c=a.trim();if(!c)continue;let d=(0,i.tV)(c);if(!d)continue;if(d.done){b.enqueue(new TextEncoder().encode("data: [DONE]\n\n"));continue}let e=(0,g.openaiResponsesToOpenAIResponse)(d,o);if(e){let a=(0,i.v8)(e,"openai");b.enqueue(new TextEncoder().encode(a))}}},flush(a){if(q.trim()){let b=(0,i.tV)(q.trim());if(b&&!b.done){let c=(0,g.openaiResponsesToOpenAIResponse)(b,o);c&&a.enqueue(new TextEncoder().encode((0,i.v8)(c,"openai")))}}}});return{response:new Response(n.body.pipeThrough(r),{status:n.status,statusText:n.statusText,headers:n.headers}),url:k,headers:l,transformedBody:m}}async refreshCopilotToken(a,b){try{let c=await fetch("https://api.github.com/copilot_internal/v2/token",{headers:{Authorization:`token ${a}`,"User-Agent":e.x0.USER_AGENT,"Editor-Version":`vscode/${e.x0.VSCODE_VERSION}`,"Editor-Plugin-Version":`copilot-chat/${e.x0.COPILOT_CHAT_VERSION}`,Accept:"application/json","x-github-api-version":e.x0.API_VERSION}});if(!c.ok){let a=await c.text();return b?.error?.("TOKEN",`Copilot token refresh failed: ${c.status} ${a}`),null}let d=await c.json();return b?.info?.("TOKEN","Copilot token refreshed"),{token:d.token,expiresAt:d.expires_at}}catch(a){return b?.error?.("TOKEN",`Copilot refresh error: ${a.message}`),null}}async refreshGitHubToken(a,b){try{let c=await fetch(e.NA.github.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:this.config.clientId,client_secret:this.config.clientSecret})});if(!c.ok)return null;let d=await c.json();return b?.info?.("TOKEN","GitHub token refreshed"),{accessToken:d.access_token,refreshToken:d.refresh_token||a,expiresIn:d.expires_in}}catch(a){return b?.error?.("TOKEN",`GitHub refresh error: ${a.message}`),null}}async refreshCredentials(a,b){let c=await this.refreshCopilotToken(a.accessToken,b);if(!c&&a.refreshToken){let d=await this.refreshGitHubToken(a.refreshToken,b);if(d?.accessToken)return(c=await this.refreshCopilotToken(d.accessToken,b))?{...d,copilotToken:c.token,copilotTokenExpiresAt:c.expiresAt}:d}return c?{accessToken:a.accessToken,refreshToken:a.refreshToken,copilotToken:c.token,copilotTokenExpiresAt:c.expiresAt}:null}needsRefresh(a){if(!a.copilotToken)return!0;if(a.copilotTokenExpiresAt){let b=a.copilotTokenExpiresAt;if("number"==typeof b&&b<1e12?b*=1e3:"string"==typeof b&&(b=new Date(b).getTime()),b-Date.now()<3e5)return!0}return super.needsRefresh(a)}}},19946:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{o:()=>r});var e=c(74957),f=c(2255),g=c(55456),h=c(73483),i=c(14170),j=c(13595),k=c(55511),l=c.n(k),m=c(85081),n=c(74075),o=c.n(n);let a=null;if(!("u">typeof caches&&"object"==typeof caches||"u">typeof EdgeRuntime))try{a=await Promise.resolve().then(c.t.bind(c,73496,23))}catch{}function p(a,b){if(2&b)return a;if(1===b)try{return o().gunzipSync(a)}catch(c){console.log(`[DECOMPRESS ERROR] flags=${b}, payloadSize=${a.length}, error=${c.message}`)}return a}function q(a){let b=a?.error?.details?.[0]?.debug?.details?.title||a?.error?.details?.[0]?.debug?.details?.detail||a?.error?.message||"API Error",c=a?.error?.code==="resource_exhausted";return new Response(JSON.stringify({error:{message:b,type:c?"rate_limit_error":"api_error",code:a?.error?.details?.[0]?.debug?.error||"unknown"}}),{status:c?f.gx.RATE_LIMITED:f.gx.BAD_REQUEST,headers:{"Content-Type":"application/json"}})}class r extends e.H{constructor(){super("cursor",f.xq.cursor)}buildUrl(){return`${this.config.baseUrl}${this.config.chatPath}`}generateChecksum(a){let b=Math.floor(Date.now()/1e6),c=new Uint8Array([b>>40&255,b>>32&255,b>>24&255,b>>16&255,b>>8&255,255&b]),d=165;for(let a=0;a<c.length;a++)c[a]=(c[a]^d)+a%256&255,d=c[a];let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",f="";for(let a=0;a<c.length;a+=3){let b=c[a],d=a+1<c.length?c[a+1]:0,g=a+2<c.length?c[a+2]:0;f+=e[b>>2],f+=e[(3&b)<<4|d>>4],a+1<c.length&&(f+=e[(15&d)<<2|g>>6]),a+2<c.length&&(f+=e[63&g])}return`${f}${a}`}buildHeaders(a){let b=a.accessToken,c=a.providerSpecificData?.machineId,d=a.providerSpecificData?.ghostMode!==!1;if(!c)throw Error("Machine ID is required for Cursor API");let e=b.includes("::")?b.split("::")[1]:b;return{authorization:`Bearer ${e}`,"connect-accept-encoding":"gzip","connect-protocol-version":"1","content-type":"application/connect+proto","user-agent":"connect-es/1.6.1","x-amzn-trace-id":`Root=${l().randomUUID()}`,"x-client-key":l().createHash("sha256").update(e).digest("hex"),"x-cursor-checksum":this.generateChecksum(c),"x-cursor-client-version":"2.3.41","x-cursor-client-type":"ide","x-cursor-client-os":"win32"===process.platform?"windows":"darwin"===process.platform?"macos":"linux","x-cursor-client-arch":"arm64"===process.arch?"aarch64":"x64","x-cursor-client-device-type":"desktop","x-cursor-config-version":l().randomUUID(),"x-cursor-timezone":Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC","x-ghost-mode":d?"true":"false","x-request-id":l().randomUUID(),"x-session-id":(0,m.Ay)(e,m.Ay.DNS)}}transformRequest(a,b,c,d){let e=(0,j.buildCursorRequest)(a,b,c,d),f=e.messages||[],h=e.tools||b.tools||[],i=b.reasoning_effort||null;return(0,g.yI)(f,a,h,i)}async makeFetchRequest(a,b,c,d){let e=await fetch(a,{method:"POST",headers:b,body:c,signal:d});return{status:e.status,headers:Object.fromEntries(e.headers.entries()),body:Buffer.from(await e.arrayBuffer())}}makeHttp2Request(b,c,d,e){if(!a)throw Error("http2 module not available");return new Promise((f,g)=>{let h=new URL(b),i=a.connect(`https://${h.host}`),j=[],k={};i.on("error",g);let l=i.request({":method":"POST",":path":h.pathname,":authority":h.host,":scheme":"https",...c});l.on("response",a=>{k=a}),l.on("data",a=>{j.push(a)}),l.on("end",()=>{i.close(),f({status:k[":status"],headers:k,body:Buffer.concat(j)})}),l.on("error",a=>{i.close(),g(a)}),e&&e.addEventListener("abort",()=>{l.close(),i.close(),g(Error("Request aborted"))}),l.write(d),l.end()})}async execute({model:b,body:c,stream:d,credentials:e,signal:g,log:h}){let i=this.buildUrl(),j=this.buildHeaders(e),k=this.transformRequest(b,c,d,e);try{let e=a?await this.makeHttp2Request(i,j,k,g):await this.makeFetchRequest(i,j,k,g);if(200!==e.status){let a=e.body?.toString()||"Unknown error";return{response:new Response(JSON.stringify({error:{message:`[${e.status}]: ${a}`,type:"invalid_request_error",code:""}}),{status:e.status,headers:{"Content-Type":"application/json"}}),url:i,headers:j,transformedBody:c}}return{response:!1!==d?this.transformProtobufToSSE(e.body,b,c):this.transformProtobufToJSON(e.body,b,c),url:i,headers:j,transformedBody:c}}catch(a){return{response:new Response(JSON.stringify({error:{message:a.message,type:"connection_error",code:""}}),{status:f.gx.SERVER_ERROR,headers:{"Content-Type":"application/json"}}),url:i,headers:j,transformedBody:c}}}transformProtobufToJSON(a,b,c){let d=`chatcmpl-cursor-${Date.now()}`,e=Math.floor(Date.now()/1e3),j=0,k="",l=[],m=new Map;for(;j<a.length&&!(j+5>a.length);){let b=a[j],c=a.readUInt32BE(j+1);if(j+5+c>a.length)break;let d=a.slice(j+5,j+5+c);if(j+=5+c,2&b)break;if(!(d=p(d,b)))continue;try{let a=d.toString("utf-8");if(a.startsWith("{")&&a.includes('"error"'))return q(JSON.parse(a))}catch{}let e=(0,g.CP)(new Uint8Array(d));if(e.error)return new Response(JSON.stringify({error:{message:e.error,type:"rate_limit_error",code:"rate_limited"}}),{status:f.gx.RATE_LIMITED,headers:{"Content-Type":"application/json"}});if(e.toolCall){let a=e.toolCall;if(m.has(a.id)){let b=m.get(a.id);b.function.arguments+=a.function.arguments,b.isLast=a.isLast}else m.set(a.id,{...a});if(a.isLast){let b=m.get(a.id);l.push({id:b.id,type:b.type,function:{name:b.function.name,arguments:b.function.arguments}})}}e.text&&(k+=e.text)}for(let[a,b]of m.entries())l.find(b=>b.id===a)||l.push({id:b.id,type:b.type,function:{name:b.function.name,arguments:b.function.arguments}});let n={role:"assistant",content:k||null};l.length>0&&(n.tool_calls=l);let o=(0,h.OF)(c,k.length,i.h.OPENAI),r={id:d,object:"chat.completion",created:e,model:b,choices:[{index:0,message:n,finish_reason:l.length>0?"tool_calls":"stop"}],usage:o};return new Response(JSON.stringify(r),{status:200,headers:{"Content-Type":"application/json"}})}transformProtobufToSSE(a,b,c){let d=`chatcmpl-cursor-${Date.now()}`,e=Math.floor(Date.now()/1e3),j=[],k=0,l="",m=[],n=new Map;for(;k<a.length&&!(k+5>a.length);){let c=a[k],h=a.readUInt32BE(k+1);if(k+5+h>a.length)break;let i=a.slice(k+5,k+5+h);if(k+=5+h,2&c)break;if(!(i=p(i,c)))continue;try{let a=i.toString("utf-8");if(a.startsWith("{")&&a.includes('"error"'))return q(JSON.parse(a))}catch{}let o=(0,g.CP)(new Uint8Array(i));if(o.error)return new Response(JSON.stringify({error:{message:o.error,type:"rate_limit_error",code:"rate_limited"}}),{status:f.gx.RATE_LIMITED,headers:{"Content-Type":"application/json"}});if(o.toolCall){let a=o.toolCall;if(0===j.length&&j.push(`data: ${JSON.stringify({id:d,object:"chat.completion.chunk",created:e,model:b,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}
10
10
 
11
11
  `),n.has(a.id)){let c=n.get(a.id);c.function.arguments.length,c.function.arguments+=a.function.arguments,c.isLast=a.isLast,a.function.arguments&&j.push(`data: ${JSON.stringify({id:d,object:"chat.completion.chunk",created:e,model:b,choices:[{index:0,delta:{tool_calls:[{index:c.index,id:a.id,type:"function",function:{name:a.function.name,arguments:a.function.arguments}}]},finish_reason:null}]})}
12
12
 
@@ -148,4 +148,4 @@ You are producing plain text that will later be styled by the CLI. Follow these
148
148
 
149
149
  `))}}j>=1e3&&console.warn("[Kiro] Max iterations reached in event parsing")},flush(a){if(!g.finishEmitted){g.finishEmitted=!0;let c={id:e,object:"chat.completion.chunk",created:f,model:b,choices:[{index:0,delta:{},finish_reason:g.hasToolCalls?"tool_calls":"stop"}]};a.enqueue(new TextEncoder().encode(`data: ${JSON.stringify(c)}
150
150
 
151
- `))}a.enqueue(new TextEncoder().encode("data: [DONE]\n\n"))}});return new Response(a.body.pipeThrough(h),{status:a.status,statusText:a.statusText,headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}async refreshCredentials(a,b){if(!a.refreshToken)return null;try{return await (0,g.Ql)(a.refreshToken,a.providerSpecificData,b)}catch(a){return b?.error?.("TOKEN",`Kiro refresh error: ${a.message}`),null}}}},85081:(a,b,c)=>{c.d(b,{Ay:()=>j});var d=c(77598);let e=function(a){return Array.isArray(a)?a=Buffer.from(a):"string"==typeof a&&(a=Buffer.from(a,"utf8")),(0,d.createHash)("sha1").update(a).digest()},f=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i,g=function(a){let b;if(!("string"==typeof a&&f.test(a)))throw TypeError("Invalid UUID");return Uint8Array.of((b=parseInt(a.slice(0,8),16))>>>24,b>>>16&255,b>>>8&255,255&b,(b=parseInt(a.slice(9,13),16))>>>8,255&b,(b=parseInt(a.slice(14,18),16))>>>8,255&b,(b=parseInt(a.slice(19,23),16))>>>8,255&b,(b=parseInt(a.slice(24,36),16))/0x10000000000&255,b/0x100000000&255,b>>>24&255,b>>>16&255,b>>>8&255,255&b)};var h=c(50122);function i(a,b,c,d){var f=b,i=d;let j="string"==typeof a?function(a){let b=new Uint8Array((a=unescape(encodeURIComponent(a))).length);for(let c=0;c<a.length;++c)b[c]=a.charCodeAt(c);return b}(a):a,k="string"==typeof f?g(f):f;if("string"==typeof f&&(f=g(f)),f?.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+j.length);if(l.set(k),l.set(j,k.length),(l=e(l))[6]=15&l[6]|80,l[8]=63&l[8]|128,c){i=i||0;for(let a=0;a<16;++a)c[i+a]=l[a];return c}return(0,h.k)(l)}i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8";let j=i},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},95128:(a,b,c)=>{c.d(b,{V:()=>f});var d=c(74957),e=c(2255);class f extends d.H{constructor(){super("gemini-cli",e.xq["gemini-cli"])}buildUrl(a,b,c=0){return`${this.config.baseUrl}:${b?"streamGenerateContent?alt=sse":"generateContent"}`}buildHeaders(a,b=!0){return{"Content-Type":"application/json",Authorization:`Bearer ${a.accessToken}`,...b&&{Accept:"text/event-stream"}}}transformRequest(a,b,c,d){return!b.project&&d?.projectId&&(b.project=d.projectId),b}async refreshCredentials(a,b){if(!a.refreshToken)return null;try{let c=await fetch(e.NA.google.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:this.config.clientId,client_secret:this.config.clientSecret})});if(!c.ok)return null;let d=await c.json();return b?.info?.("TOKEN","Gemini CLI refreshed"),{accessToken:d.access_token,refreshToken:d.refresh_token||a.refreshToken,expiresIn:d.expires_in,projectId:a.projectId}}catch(a){return b?.error?.("TOKEN",`Gemini CLI refresh error: ${a.message}`),null}}}},96179:(a,b,c)=>{c.d(b,{L:()=>f});var d=c(74957),e=c(2255);class f extends d.H{constructor(a){super(a,e.xq[a]||e.xq.openai)}buildUrl(a,b,c=0,d=null){if(this.provider?.startsWith?.("openai-compatible-")){let a=(d?.providerSpecificData?.baseUrl||"https://api.openai.com/v1").replace(/\/$/,""),b=this.provider.includes("responses")?"/responses":"/chat/completions";return`${a}${b}`}if(this.provider?.startsWith?.("anthropic-compatible-")){let a=(d?.providerSpecificData?.baseUrl||"https://api.anthropic.com/v1").replace(/\/$/,"");return`${a}/messages`}switch(this.provider){case"claude":case"glm":case"kimi":case"kimi-coding":case"cline":case"minimax":case"minimax-cn":return`${this.config.baseUrl}?beta=true`;case"gemini":return`${this.config.baseUrl}/${a}:${b?"streamGenerateContent?alt=sse":"generateContent"}`;default:return this.config.baseUrl}}buildHeaders(a,b=!0){let c={"Content-Type":"application/json",...this.config.headers};switch(this.provider){case"gemini":a.apiKey?c["x-goog-api-key"]=a.apiKey:c.Authorization=`Bearer ${a.accessToken}`;break;case"claude":a.apiKey?c["x-api-key"]=a.apiKey:c.Authorization=`Bearer ${a.accessToken}`;break;case"glm":case"kimi":case"kimi-coding":case"cline":case"minimax":case"minimax-cn":c["x-api-key"]=a.apiKey||a.accessToken;break;default:this.provider?.startsWith?.("anthropic-compatible-")?(a.apiKey?c["x-api-key"]=a.apiKey:a.accessToken&&(c.Authorization=`Bearer ${a.accessToken}`),c["anthropic-version"]||(c["anthropic-version"]="2023-06-01")):c.Authorization=`Bearer ${a.apiKey||a.accessToken}`}return b&&(c.Accept="text/event-stream"),c}async refreshCredentials(a,b){if(!a.refreshToken)return null;let c={claude:()=>this.refreshWithJSON(e.NA.anthropic.token,{grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:e.xq.claude.clientId}),codex:()=>this.refreshWithForm(e.NA.openai.token,{grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:e.xq.codex.clientId,scope:"openid profile email offline_access"}),qwen:()=>this.refreshWithForm(e.NA.qwen.token,{grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:e.xq.qwen.clientId}),iflow:()=>this.refreshIflow(a.refreshToken),gemini:()=>this.refreshGoogle(a.refreshToken),kiro:()=>this.refreshKiro(a.refreshToken),cline:()=>this.refreshCline(a.refreshToken),"kimi-coding":()=>this.refreshKimiCoding(a.refreshToken),kilocode:()=>this.refreshKilocode(a.refreshToken)}[this.provider];if(!c)return null;try{let a=await c();return a&&b?.info?.("TOKEN",`${this.provider} refreshed`),a}catch(a){return b?.error?.("TOKEN",`${this.provider} refresh error: ${a.message}`),null}}async refreshWithJSON(a,b){let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(b)});if(!c.ok)return null;let d=await c.json();return{accessToken:d.access_token,refreshToken:d.refresh_token||b.refresh_token,expiresIn:d.expires_in}}async refreshWithForm(a,b){let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams(b)});if(!c.ok)return null;let d=await c.json();return{accessToken:d.access_token,refreshToken:d.refresh_token||b.refresh_token,expiresIn:d.expires_in}}async refreshIflow(a){let b=btoa(`${e.xq.iflow.clientId}:${e.xq.iflow.clientSecret}`),c=await fetch(e.NA.iflow.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json",Authorization:`Basic ${b}`},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:e.xq.iflow.clientId,client_secret:e.xq.iflow.clientSecret})});if(!c.ok)return null;let d=await c.json();return{accessToken:d.access_token,refreshToken:d.refresh_token||a,expiresIn:d.expires_in}}async refreshGoogle(a){let b=await fetch(e.NA.google.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:this.config.clientId,client_secret:this.config.clientSecret})});if(!b.ok)return null;let c=await b.json();return{accessToken:c.access_token,refreshToken:c.refresh_token||a,expiresIn:c.expires_in}}async refreshKiro(a){let b=await fetch(e.xq.kiro.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","User-Agent":"kiro-cli/1.0.0"},body:JSON.stringify({refreshToken:a})});if(!b.ok)return null;let c=await b.json();return{accessToken:c.accessToken,refreshToken:c.refreshToken||a,expiresIn:c.expiresIn}}async refreshCline(a){console.log("[DEBUG] Refreshing Cline token, refreshToken length:",a?.length);let b=await fetch("https://api.cline.bot/api/v1/auth/refresh",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:a,grantType:"refresh_token",clientType:"extension"})});if(console.log("[DEBUG] Cline refresh response status:",b.status),!b.ok)return console.log("[DEBUG] Cline refresh error:",await b.text()),null;let c=await b.json();console.log("[DEBUG] Cline refresh payload:",JSON.stringify(c).substring(0,200));let d=c?.data||c,e=d?.expiresAt,f=e?Math.max(1,Math.floor((new Date(e).getTime()-Date.now())/1e3)):void 0;return console.log("[DEBUG] Cline refresh success, expiresIn:",f),{accessToken:d?.accessToken,refreshToken:d?.refreshToken||a,expiresIn:f}}async refreshKimiCoding(a){let b=await fetch("https://auth.kimi.com/api/oauth/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:"17e5f671-d194-4dfb-9706-5516cb48c098"})});if(!b.ok)return null;let c=await b.json();return{accessToken:c.access_token,refreshToken:c.refresh_token||a,expiresIn:c.expires_in}}async refreshKilocode(a){return null}}}};
151
+ `))}a.enqueue(new TextEncoder().encode("data: [DONE]\n\n"))}});return new Response(a.body.pipeThrough(h),{status:a.status,statusText:a.statusText,headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}async refreshCredentials(a,b){if(!a.refreshToken)return null;try{return await (0,g.Ql)(a.refreshToken,a.providerSpecificData,b)}catch(a){return b?.error?.("TOKEN",`Kiro refresh error: ${a.message}`),null}}}},85081:(a,b,c)=>{c.d(b,{Ay:()=>j});var d=c(77598);let e=function(a){return Array.isArray(a)?a=Buffer.from(a):"string"==typeof a&&(a=Buffer.from(a,"utf8")),(0,d.createHash)("sha1").update(a).digest()},f=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i,g=function(a){let b;if(!("string"==typeof a&&f.test(a)))throw TypeError("Invalid UUID");return Uint8Array.of((b=parseInt(a.slice(0,8),16))>>>24,b>>>16&255,b>>>8&255,255&b,(b=parseInt(a.slice(9,13),16))>>>8,255&b,(b=parseInt(a.slice(14,18),16))>>>8,255&b,(b=parseInt(a.slice(19,23),16))>>>8,255&b,(b=parseInt(a.slice(24,36),16))/0x10000000000&255,b/0x100000000&255,b>>>24&255,b>>>16&255,b>>>8&255,255&b)};var h=c(50122);function i(a,b,c,d){var f=b,i=d;let j="string"==typeof a?function(a){let b=new Uint8Array((a=unescape(encodeURIComponent(a))).length);for(let c=0;c<a.length;++c)b[c]=a.charCodeAt(c);return b}(a):a,k="string"==typeof f?g(f):f;if("string"==typeof f&&(f=g(f)),f?.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+j.length);if(l.set(k),l.set(j,k.length),(l=e(l))[6]=15&l[6]|80,l[8]=63&l[8]|128,c){i=i||0;for(let a=0;a<16;++a)c[i+a]=l[a];return c}return(0,h.k)(l)}i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8";let j=i},95128:(a,b,c)=>{c.d(b,{V:()=>f});var d=c(74957),e=c(2255);class f extends d.H{constructor(){super("gemini-cli",e.xq["gemini-cli"])}buildUrl(a,b,c=0){return`${this.config.baseUrl}:${b?"streamGenerateContent?alt=sse":"generateContent"}`}buildHeaders(a,b=!0){return{"Content-Type":"application/json",Authorization:`Bearer ${a.accessToken}`,...b&&{Accept:"text/event-stream"}}}transformRequest(a,b,c,d){return!b.project&&d?.projectId&&(b.project=d.projectId),b}async refreshCredentials(a,b){if(!a.refreshToken)return null;try{let c=await fetch(e.NA.google.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:this.config.clientId,client_secret:this.config.clientSecret})});if(!c.ok)return null;let d=await c.json();return b?.info?.("TOKEN","Gemini CLI refreshed"),{accessToken:d.access_token,refreshToken:d.refresh_token||a.refreshToken,expiresIn:d.expires_in,projectId:a.projectId}}catch(a){return b?.error?.("TOKEN",`Gemini CLI refresh error: ${a.message}`),null}}}},96179:(a,b,c)=>{c.d(b,{L:()=>f});var d=c(74957),e=c(2255);class f extends d.H{constructor(a){super(a,e.xq[a]||e.xq.openai)}buildUrl(a,b,c=0,d=null){if(this.provider?.startsWith?.("openai-compatible-")){let a=(d?.providerSpecificData?.baseUrl||"https://api.openai.com/v1").replace(/\/$/,""),b=this.provider.includes("responses")?"/responses":"/chat/completions";return`${a}${b}`}if(this.provider?.startsWith?.("anthropic-compatible-")){let a=(d?.providerSpecificData?.baseUrl||"https://api.anthropic.com/v1").replace(/\/$/,"");return`${a}/messages`}switch(this.provider){case"claude":case"glm":case"kimi":case"kimi-coding":case"cline":case"minimax":case"minimax-cn":return`${this.config.baseUrl}?beta=true`;case"gemini":return`${this.config.baseUrl}/${a}:${b?"streamGenerateContent?alt=sse":"generateContent"}`;default:return this.config.baseUrl}}buildHeaders(a,b=!0){let c={"Content-Type":"application/json",...this.config.headers};switch(this.provider){case"gemini":a.apiKey?c["x-goog-api-key"]=a.apiKey:c.Authorization=`Bearer ${a.accessToken}`;break;case"claude":a.apiKey?c["x-api-key"]=a.apiKey:c.Authorization=`Bearer ${a.accessToken}`;break;case"glm":case"kimi":case"kimi-coding":case"cline":case"minimax":case"minimax-cn":c["x-api-key"]=a.apiKey||a.accessToken;break;default:this.provider?.startsWith?.("anthropic-compatible-")?(a.apiKey?c["x-api-key"]=a.apiKey:a.accessToken&&(c.Authorization=`Bearer ${a.accessToken}`),c["anthropic-version"]||(c["anthropic-version"]="2023-06-01")):c.Authorization=`Bearer ${a.apiKey||a.accessToken}`}return b&&(c.Accept="text/event-stream"),c}async refreshCredentials(a,b){if(!a.refreshToken)return null;let c={claude:()=>this.refreshWithJSON(e.NA.anthropic.token,{grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:e.xq.claude.clientId}),codex:()=>this.refreshWithForm(e.NA.openai.token,{grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:e.xq.codex.clientId,scope:"openid profile email offline_access"}),qwen:()=>this.refreshWithForm(e.NA.qwen.token,{grant_type:"refresh_token",refresh_token:a.refreshToken,client_id:e.xq.qwen.clientId}),iflow:()=>this.refreshIflow(a.refreshToken),gemini:()=>this.refreshGoogle(a.refreshToken),kiro:()=>this.refreshKiro(a.refreshToken),cline:()=>this.refreshCline(a.refreshToken),"kimi-coding":()=>this.refreshKimiCoding(a.refreshToken),kilocode:()=>this.refreshKilocode(a.refreshToken)}[this.provider];if(!c)return null;try{let a=await c();return a&&b?.info?.("TOKEN",`${this.provider} refreshed`),a}catch(a){return b?.error?.("TOKEN",`${this.provider} refresh error: ${a.message}`),null}}async refreshWithJSON(a,b){let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(b)});if(!c.ok)return null;let d=await c.json();return{accessToken:d.access_token,refreshToken:d.refresh_token||b.refresh_token,expiresIn:d.expires_in}}async refreshWithForm(a,b){let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams(b)});if(!c.ok)return null;let d=await c.json();return{accessToken:d.access_token,refreshToken:d.refresh_token||b.refresh_token,expiresIn:d.expires_in}}async refreshIflow(a){let b=btoa(`${e.xq.iflow.clientId}:${e.xq.iflow.clientSecret}`),c=await fetch(e.NA.iflow.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json",Authorization:`Basic ${b}`},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:e.xq.iflow.clientId,client_secret:e.xq.iflow.clientSecret})});if(!c.ok)return null;let d=await c.json();return{accessToken:d.access_token,refreshToken:d.refresh_token||a,expiresIn:d.expires_in}}async refreshGoogle(a){let b=await fetch(e.NA.google.token,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:this.config.clientId,client_secret:this.config.clientSecret})});if(!b.ok)return null;let c=await b.json();return{accessToken:c.access_token,refreshToken:c.refresh_token||a,expiresIn:c.expires_in}}async refreshKiro(a){let b=await fetch(e.xq.kiro.tokenUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","User-Agent":"kiro-cli/1.0.0"},body:JSON.stringify({refreshToken:a})});if(!b.ok)return null;let c=await b.json();return{accessToken:c.accessToken,refreshToken:c.refreshToken||a,expiresIn:c.expiresIn}}async refreshCline(a){console.log("[DEBUG] Refreshing Cline token, refreshToken length:",a?.length);let b=await fetch("https://api.cline.bot/api/v1/auth/refresh",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({refreshToken:a,grantType:"refresh_token",clientType:"extension"})});if(console.log("[DEBUG] Cline refresh response status:",b.status),!b.ok)return console.log("[DEBUG] Cline refresh error:",await b.text()),null;let c=await b.json();console.log("[DEBUG] Cline refresh payload:",JSON.stringify(c).substring(0,200));let d=c?.data||c,e=d?.expiresAt,f=e?Math.max(1,Math.floor((new Date(e).getTime()-Date.now())/1e3)):void 0;return console.log("[DEBUG] Cline refresh success, expiresIn:",f),{accessToken:d?.accessToken,refreshToken:d?.refreshToken||a,expiresIn:f}}async refreshKimiCoding(a){let b=await fetch("https://auth.kimi.com/api/oauth/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:"17e5f671-d194-4dfb-9706-5516cb48c098"})});if(!b.ok)return null;let c=await b.json();return{accessToken:c.access_token,refreshToken:c.refresh_token||a,expiresIn:c.expires_in}}async refreshKilocode(a){return null}}}};
@@ -1,15 +1,15 @@
1
1
  exports.id=6186,exports.ids=[6186],exports.modules={9631:(a,b,c)=>{"use strict";let d=c(29021),e=c(55511),{exec:f}=c(79646),{execWithPassword:g}=c(66936),h="win32"===process.platform,i="darwin"===process.platform,j="/usr/local/share/ca-certificates";function k(a){let b=d.readFileSync(a,"utf-8"),c=Buffer.from(b.replace(/-----[^-]+-----/g,"").replace(/\s/g,""),"base64");return e.createHash("sha1").update(c).digest("hex").toUpperCase().match(/.{2}/g).join(":")}async function l(a){var b;let c;return h?new Promise(a=>{f("certutil -store Root daily-cloudcode-pa.googleapis.com",b=>{a(!b)})}):i?(b=a,new Promise(a=>{try{let c=k(b);f(`security find-certificate -a -Z /Library/Keychains/System.keychain | grep -i "${c}"`,b=>{a(!b)})}catch{a(!1)}})):(c=`${j}/9router-mitm.crt`,Promise.resolve(d.existsSync(c)))}async function m(a,b){let c=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${b}"`;try{await g(c,a),console.log(`✅ Installed certificate to system keychain: ${b}`)}catch(a){throw Error(a.message?.includes("canceled")?"User canceled authorization":"Certificate install failed")}}async function n(a){let b=a.replace(/'/g,"''"),c=`Start-Process certutil -ArgumentList '-addstore','Root','${b}' -Verb RunAs -Wait -WindowStyle Hidden`;return new Promise((a,b)=>{f(`powershell -NonInteractive -WindowStyle Hidden -Command "${c}"`,{windowsHide:!0},c=>{c?b(Error(`Failed to install certificate: ${c.message}`)):(console.log("✅ Installed certificate to Windows Root store"),a())})})}async function o(a,b){let c=k(b).replace(/:/g,""),d=`security delete-certificate -Z "${c}" /Library/Keychains/System.keychain`;try{await g(d,a),console.log("✅ Uninstalled certificate from system keychain")}catch(a){throw Error("Failed to uninstall certificate")}}async function p(){return new Promise((a,b)=>{f("powershell -NonInteractive -WindowStyle Hidden -Command \"Start-Process certutil -ArgumentList '-delstore','Root','daily-cloudcode-pa.googleapis.com' -Verb RunAs -Wait -WindowStyle Hidden\"",{windowsHide:!0},c=>{c?b(Error(`Failed to uninstall certificate: ${c.message}`)):(console.log("✅ Uninstalled certificate from Windows Root store"),a())})})}async function q(a,b){let c=`${j}/9router-mitm.crt`,d=`cp "${b}" "${c}" && (update-ca-certificates 2>/dev/null || update-ca-trust 2>/dev/null || true)`;try{await g(d,a),console.log("✅ Installed certificate to Linux trust store")}catch(a){throw Error("Certificate install failed")}}async function r(a){let b=`${j}/9router-mitm.crt`,c=`rm -f "${b}" && (update-ca-certificates 2>/dev/null || update-ca-trust 2>/dev/null || true)`;try{await g(c,a),console.log("✅ Uninstalled certificate from Linux trust store")}catch(a){throw Error("Failed to uninstall certificate")}}a.exports={installCert:async function a(a,b){if(!d.existsSync(b))throw Error(`Certificate file not found: ${b}`);await l(b)?console.log("✅ Certificate already installed"):h?await n(b):i?await m(a,b):await q(a,b)},uninstallCert:async function a(a,b){await l(b)?h?await p():i?await o(a,b):await r(a):console.log("Certificate not found in system store")},checkCertInstalled:l}},26033:(a,b,c)=>{"use strict";let d=c(33873),e=c(29021),{MITM_DIR:f}=c(82193),g="daily-cloudcode-pa.googleapis.com";a.exports={generateCert:async function(){let a=d.join(f,"server.key"),b=d.join(f,"server.crt");if(e.existsSync(a)&&e.existsSync(b))return console.log("✅ SSL certificate already exists"),{key:a,cert:b};e.existsSync(f)||e.mkdirSync(f,{recursive:!0});let h=c(12044),i=[{name:"commonName",value:g}],j=new Date;j.setFullYear(j.getFullYear()+1);let k=await h.generate(i,{keySize:2048,algorithm:"sha256",notAfterDate:j,extensions:[{name:"subjectAltName",altNames:[{type:2,value:g}]}]});return e.writeFileSync(a,k.private),e.writeFileSync(b,k.cert),console.log(`✅ Generated SSL certificate for ${g}`),{key:a,cert:b}}}},66936:(a,b,c)=>{"use strict";let{exec:d,spawn:e}=c(79646),f=c(29021),g=c(33873),h=c(21820),i=["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com"],j="win32"===process.platform,k="darwin"===process.platform,l=j?g.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function m(a,b){return new Promise((c,d)=>{let f=e("sudo",["-S","sh","-c",a],{stdio:["pipe","pipe","pipe"]}),g="",h="";f.stdout.on("data",a=>{g+=a}),f.stderr.on("data",a=>{h+=a}),f.on("close",a=>{0===a?c(g):d(Error(h||`Exit code ${a}`))}),f.stdin.write(`${b}
2
2
  `),f.stdin.end()})}function n(a=null){try{let b=f.readFileSync(l,"utf8");if(a)return b.includes(a);return i.every(a=>b.includes(a))}catch{return!1}}a.exports={addDNSEntry:async function(a){let b=i.filter(a=>!n(a));if(0===b.length)return void console.log("DNS entries for all target hosts already exist");let c=b.map(a=>`127.0.0.1 ${a}`).join("\n");try{if(j){let a=l.replace(/'/g,"''"),c=b.map(b=>`$hc = Get-Content -Path '${a}' -Raw -ErrorAction SilentlyContinue; if ($hc -notmatch '${b}') { Add-Content -Path '${a}' -Value '127.0.0.1 ${b}' -Encoding UTF8 }`).join("; "),e=`${c}; ipconfig /flushdns | Out-Null`;await new Promise((a,b)=>{let c=e.replace(/"/g,'\\"');d(`powershell -NonInteractive -WindowStyle Hidden -Command "Start-Process powershell -ArgumentList '-NonInteractive -WindowStyle Hidden -Command \\"${c}\\"' -Verb RunAs -Wait"`,{windowsHide:!0},c=>{c?b(Error(`Failed to add DNS: ${c.message}`)):a()})})}else await m(`echo "${c}" >> ${l}`,a);j||(k?await m("dscacheutil -flushcache && killall -HUP mDNSResponder",a):await m("resolvectl flush-caches 2>/dev/null || true",a)),console.log(`✅ Added DNS entries: ${b.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":"Failed to add DNS entry")}},removeDNSEntry:async function(a){let b=i.filter(a=>n(a));if(0===b.length)return void console.log("DNS entries for target hosts do not exist");try{if(j){let a=f.readFileSync(l,"utf8"),b=a.split(/\r?\n/).filter(a=>!i.some(b=>a.includes(b))).join("\r\n");if(!b.trim()&&a.trim())throw Error("Filtered hosts content is empty, aborting to prevent data loss");let c=g.join(h.tmpdir(),"hosts_filtered.tmp");f.writeFileSync(c,b,"utf8");let e=c.replace(/'/g,"''"),j=l.replace(/'/g,"''"),k=`Copy-Item -Path '${e}' -Destination '${j}' -Force; ipconfig /flushdns | Out-Null; Remove-Item '${e}' -ErrorAction SilentlyContinue`;await new Promise((a,b)=>{let e=k.replace(/"/g,'\\"');d(`powershell -NonInteractive -WindowStyle Hidden -Command "Start-Process powershell -ArgumentList '-NonInteractive -WindowStyle Hidden -Command \\"${e}\\"' -Verb RunAs -Wait"`,{windowsHide:!0},d=>{try{f.unlinkSync(c)}catch{}d?b(Error(`Failed to remove DNS entry: ${d.message}`)):a()})})}else for(let c of b){let b=k?`sed -i '' '/${c}/d' ${l}`:`sed -i '/${c}/d' ${l}`;await m(b,a)}j||(k?await m("dscacheutil -flushcache && killall -HUP mDNSResponder",a):await m("resolvectl flush-caches 2>/dev/null || true",a)),console.log(`✅ Removed DNS entries for ${b.join(", ")}`)}catch(a){throw Error(a.message?.includes("incorrect password")?"Wrong sudo password":"Failed to remove DNS entry")}},execWithPassword:m,checkDNSEntry:n}},78335:()=>{},82193:(a,b,c)=>{"use strict";let d=c(33873),e=c(21820),f=process.env.DATA_DIR?process.env.DATA_DIR:"win32"===process.platform?d.join(process.env.APPDATA||d.join(e.homedir(),"AppData","Roaming"),"9router"):d.join(e.homedir(),".9router"),g=d.join(f,"mitm");a.exports={DATA_DIR:f,MITM_DIR:g}},96182:(a,b,c)=>{"use strict";let{exec:d,spawn:e,execSync:f}=c(79646),g=c(33873),h=c(29021),i=c(21820),j=c(91645),k=c(55591),l=c(55511),{addDNSEntry:m,removeDNSEntry:n,checkDNSEntry:o}=c(66936),p="win32"===process.platform,{generateCert:q}=c(26033),{installCert:r}=c(9631),{MITM_DIR:s}=c(82193),t=g.join(s,".mitm.pid"),u=function(){if(process.env.MITM_SERVER_PATH)return process.env.MITM_SERVER_PATH;let a=g.join(__dirname,"server.js");if(h.existsSync(a))return a;let b=g.join(process.cwd(),"src","mitm","server.js");if(h.existsSync(b))return b;let c=g.join(process.cwd(),"..","src","mitm","server.js");return h.existsSync(c)?c:b}(),v="aes-256-gcm",w="9router-mitm-pwd",x=null,y=null;function z(a){globalThis.__mitmSudoPassword=a}function A(a){try{return process.kill(a,0),!0}catch(a){return"EACCES"===a.code}}function B(a,b=!1){if(p)d(`taskkill ${b?"/F ":""}/PID ${a}`,()=>{});else{let c=b?"SIGKILL":"SIGTERM";d(`pkill -${c} -P ${a} 2>/dev/null; kill -${c} ${a} 2>/dev/null`,()=>{})}}function C(){try{let{machineIdSync:a}=c(19713),b=a();return l.createHash("sha256").update(b+w).digest()}catch{return l.createHash("sha256").update(w).digest()}}let D=null,E=null;async function F(a,b){if(!E)return void console.log("[MITM] DB hooks not initialized, skipping save");try{let c,d,e,f,g,h={mitmEnabled:a};b&&(c=C(),d=l.randomBytes(12),e=l.createCipheriv(v,c,d),f=Buffer.concat([e.update(b,"utf8"),e.final()]),g=e.getAuthTag(),h.mitmSudoEncrypted=`${d.toString("hex")}:${g.toString("hex")}:${f.toString("hex")}`),await E(h)}catch(a){console.log("[MITM] Failed to save settings:",a.message)}}async function G(a){if(x&&!x.killed){try{x.kill("SIGKILL")}catch{}x=null,y=null}try{if(h.existsSync(t)){let a=parseInt(h.readFileSync(t,"utf-8").trim(),10);a&&A(a)&&(B(a,!0),await new Promise(a=>setTimeout(a,500))),h.unlinkSync(t)}}catch{}if(!p&&u)try{let b=u.replace(/'/g,"'\\''");if(a){let{execWithPassword:d}=c(66936);await d(`pkill -SIGKILL -f "${b}" 2>/dev/null || true`,a).catch(()=>{})}else d(`pkill -SIGKILL -f "${b}" 2>/dev/null || true`,()=>{});await new Promise(a=>setTimeout(a,500))}catch{}}a.exports={getMitmStatus:async function(){let a=null!==x&&!x.killed,b=y;if(!a)try{if(h.existsSync(t)){let c=parseInt(h.readFileSync(t,"utf-8").trim(),10);c&&A(c)?(a=!0,b=c):h.unlinkSync(t)}}catch{}return{running:a,pid:b,dnsConfigured:o(),certExists:h.existsSync(g.join(s,"server.crt"))}},startMitm:async function(a,b){if(!x||x.killed)try{if(h.existsSync(t)){let a=parseInt(h.readFileSync(t,"utf-8").trim(),10);if(a&&A(a))return y=a,console.log(`[MITM] Reusing existing process PID ${a}`),await F(!0,b),b&&z(b),{running:!0,pid:a};h.unlinkSync(t)}}catch{}if(x&&!x.killed)throw Error("MITM proxy is already running");if(await G(b),!p){let a=await new Promise(a=>{let b=j.createServer();b.once("error",b=>{"EADDRINUSE"===b.code?a("in-use"):a("no-permission")}),b.once("listening",()=>{b.close(()=>a("free"))}),b.listen(443,"127.0.0.1")});if("in-use"===a||"no-permission"===a){let a=await new Promise(a=>{p?d('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{windowsHide:!0},(b,c)=>{if(b)return a(null);let e=parseInt(c.trim(),10);if(!e||e<=4)return a(null);d(`tasklist /FI "PID eq ${e}" /FO CSV /NH`,{windowsHide:!0},(b,c)=>{let d=c?.match(/"([^"]+)"/);a({pid:e,name:d?d[1]:"unknown"})})}):d('ps aux | grep "[s]erver.js"',(b,c)=>{if(!c?.trim())return a(null);for(let b of c.split("\n")){let c=parseInt(b.trim().split(/\s+/)[1],10);if(!isNaN(c))return a({pid:c,name:"node"})}a(null)})});if(a&&"node"===a.name){console.log(`[MITM] Killing orphan node process on port 443 (PID ${a.pid})...`);try{let{execWithPassword:d}=c(66936);await d(`kill -9 ${a.pid}`,b),await new Promise(a=>setTimeout(a,800))}catch{}}else if(a){let b=a.name.includes("/")?a.name.split("/").filter(Boolean).pop():a.name;throw Error(`Port 443 is already in use by "${b}" (PID ${a.pid}). Stop that process first, then retry.`)}}}let l=g.join(s,"server.crt");if(h.existsSync(l)||(console.log("Generating SSL certificate..."),await q()),console.log("Starting MITM server..."),p){let b=g.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"),c=g.join(i.tmpdir(),`mitm_ready_${Date.now()}.flag`),d=l.replace(/'/g,"''"),f=b.replace(/'/g,"''"),j=process.execPath.replace(/'/g,"''"),k=u.replace(/'/g,"''"),m=c.replace(/'/g,"''"),n=["# 0. Kill any orphan node process on port 443\n$conn = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1\nif ($conn -and $conn.OwningProcess -gt 4) { Stop-Process -Id $conn.OwningProcess -Force -ErrorAction SilentlyContinue }\nStart-Sleep -Milliseconds 500\n\n# 1. Install SSL cert to Windows Root store (always run to ensure trust)",`& certutil -addstore Root '${d}' | Out-Null`,"\n# 2. Add DNS entries to hosts file",["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com"].map(a=>`$hc = Get-Content -Path '${f}' -Raw -ErrorAction SilentlyContinue
3
- if ($hc -notmatch [regex]::Escape('${a}')) { Add-Content -Path '${f}' -Value '127.0.0.1 ${a}' -Encoding UTF8 }`).join("\n"),"& ipconfig /flushdns | Out-Null\n\n# 3. Start node MITM server elevated (required to bind port 443)",`$env:ROUTER_API_KEY = '${a.replace(/'/g,"''")}'`,"$env:NODE_ENV = 'production'",`Start-Process -FilePath '${j}' -ArgumentList '${k}' -WindowStyle Hidden`,"\n# 4. Signal ready\nStart-Sleep -Milliseconds 500",`Set-Content -Path '${m}' -Value 'ready' -Encoding UTF8`].join("\n"),o=g.join(i.tmpdir(),`mitm_start_${Date.now()}.ps1`);h.writeFileSync(o,n,"utf8");let p=`Set oShell = CreateObject("Shell.Application")\r
3
+ if ($hc -notmatch [regex]::Escape('${a}')) { Add-Content -Path '${f}' -Value '127.0.0.1 ${a}' -Encoding UTF8 }`).join("\n"),"& ipconfig /flushdns | Out-Null\n\n# 3. Start node MITM server elevated (required to bind port 443)",`# Use cmd /c to pass env vars inline — Start-Process does not inherit current env`,`$nodeCmd = 'set ROUTER_API_KEY=${a.replace(/'/g,"''")}&& set NODE_ENV=production&& "${j}" "${k}"'`,"Start-Process cmd -ArgumentList '/c',$nodeCmd -WindowStyle Hidden\n\n# 4. Signal ready\nStart-Sleep -Milliseconds 500",`Set-Content -Path '${m}' -Value 'ready' -Encoding UTF8`].join("\n"),o=g.join(i.tmpdir(),`mitm_start_${Date.now()}.ps1`);h.writeFileSync(o,n,"utf8");let p=`Set oShell = CreateObject("Shell.Application")\r
4
4
  Dim ps\r
5
5
  ps = Chr(34) & "powershell.exe" & Chr(34)\r
6
6
  Dim args\r
7
- args = "-NoProfile -ExecutionPolicy Bypass -File " & Chr(34) & "${o.replace(/\\/g,"\\\\")}" & Chr(34)\r
7
+ args = "-NoProfile -ExecutionPolicy Bypass -File " & Chr(34) & "${o}" & Chr(34)\r
8
8
  oShell.ShellExecute ps, args, "", "runas", 1`,q=g.join(i.tmpdir(),`mitm_uac_${Date.now()}.vbs`);h.writeFileSync(q,p,"utf8"),e("wscript.exe",[q],{stdio:"ignore",windowsHide:!1,detached:!0}).unref(),await new Promise((a,b)=>{let d=Date.now()+9e4,e=()=>{if(h.existsSync(c)){try{h.unlinkSync(c),h.unlinkSync(o),h.unlinkSync(q)}catch{}return a()}if(Date.now()>d)return b(Error("Timed out waiting for UAC confirmation. Please try again."));setTimeout(e,500)};e()}),E&&await E({mitmCertInstalled:!0}).catch(()=>{})}else!((D?await D().catch(()=>({})):{}).mitmCertInstalled&&h.existsSync(l))&&(await r(b,l),E&&await E({mitmCertInstalled:!0}).catch(()=>{})),console.log("Adding DNS entry..."),await m(b),(x=e("sudo",["-S","-E","sh","-c",`ROUTER_API_KEY='${a}' NODE_ENV='production' '${process.execPath}' '${u}'`],{detached:!1,stdio:["pipe","pipe","pipe"]})).stdin.write(`${b}
9
9
  `),x.stdin.end();!p&&x&&(y=x.pid,h.writeFileSync(t,String(y)));let o=null;p||(x.stdout.on("data",a=>{console.log(`[MITM Server] ${a.toString().trim()}`)}),x.stderr.on("data",a=>{let b=a.toString().trim();!b||b.includes("Password:")||b.includes("password for")||(console.error(`[MITM Server Error] ${b}`),o=b)}),x.on("exit",a=>{console.log(`MITM server exited with code ${a}`),x=null,y=null;try{h.unlinkSync(t)}catch{}}));let v=await function(a,b=443){return new Promise(c=>{let d=Date.now()+a,e=()=>{let a=k.request({hostname:"127.0.0.1",port:b,path:"/_mitm_health",method:"GET",rejectUnauthorized:!1},a=>{let b="";a.on("data",a=>{b+=a}),a.on("end",()=>{try{let a=JSON.parse(b);c(!0===a.ok?{ok:!0,pid:a.pid||null}:null)}catch{c(null)}})});a.on("error",()=>{Date.now()<d?setTimeout(e,500):c(null)}),a.end()};e()})}(p?15e3:8e3,443);if(!v){p&&(x=null);try{await n(b)}catch{}let a=function(){try{if(p){let a=f('powershell -NonInteractive -WindowStyle Hidden -Command "$c = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($c) { $c.OwningProcess } else { 0 }"',{encoding:"utf8",windowsHide:!0}).trim(),b=parseInt(a,10);if(b&&b>4){let a=f(`tasklist /FI "PID eq ${b}" /FO CSV /NH`,{encoding:"utf8",windowsHide:!0}).match(/"([^"]+)"/);if(a)return a[1].replace(".exe","")}}else{let a=f("lsof -i :443",{encoding:"utf8"}).trim().split("\n");if(a.length>1)return a[1].split(/\s+/)[0]}}catch(a){}return null}(),c=a?` Port 443 already in use by ${a}.`:"",d=o||`Check sudo password or port 443 access.${c}`;throw Error(`MITM server failed to start. ${d}`)}return p&&E&&await E({mitmCertInstalled:!0}).catch(()=>{}),p&&v.pid&&(y=v.pid,h.writeFileSync(t,String(y))),await F(!0,b),b&&z(b),{running:!0,pid:y}},stopMitm:async function(a){let b=x;if(b&&!b.killed)console.log("Stopping MITM server..."),B(b.pid,!1),await new Promise(a=>setTimeout(a,1e3)),A(b.pid)&&B(b.pid,!0),x=null,y=null;else{try{if(h.existsSync(t)){let a=parseInt(h.readFileSync(t,"utf-8").trim(),10);a&&A(a)&&(console.log(`Killing MITM server (PID: ${a})...`),B(a,!1),await new Promise(a=>setTimeout(a,1e3)),A(a)&&B(a,!0))}}catch{}x=null,y=null}if(p){let a=g.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"),b=["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com"],c="";try{c=h.readFileSync(a,"utf8")}catch{}let d=c.split(/\r?\n/).filter(a=>!b.some(b=>a.includes(b))).join("\r\n"),f=g.join(i.tmpdir(),"mitm_hosts_clean.tmp");h.writeFileSync(f,d,"utf8");let j=g.join(i.tmpdir(),"mitm_stop_done.flag"),k=`Copy-Item -Path '${f.replace(/'/g,"''")}' -Destination '${a.replace(/'/g,"''")}' -Force
10
10
  & ipconfig /flushdns | Out-Null
11
11
  Remove-Item '${f.replace(/'/g,"''")}' -ErrorAction SilentlyContinue
12
12
  Set-Content -Path '${j.replace(/'/g,"''")}' -Value 'done' -Encoding UTF8`,l=g.join(i.tmpdir(),"mitm_stop.ps1");h.writeFileSync(l,k,"utf8");let m=`Set oShell = CreateObject("Shell.Application")\r
13
13
  Dim args\r
14
- args = "-NoProfile -ExecutionPolicy Bypass -File " & Chr(34) & "${l.replace(/\\/g,"\\\\")}" & Chr(34)\r
14
+ args = "-NoProfile -ExecutionPolicy Bypass -File " & Chr(34) & "${l}" & Chr(34)\r
15
15
  oShell.ShellExecute "powershell.exe", args, "", "runas", 1`,n=g.join(i.tmpdir(),"mitm_stop_uac.vbs");h.writeFileSync(n,m,"utf8"),e("wscript.exe",[n],{stdio:"ignore",windowsHide:!1,detached:!0}).unref(),await new Promise(a=>{let b=Date.now()+3e4,c=()=>{if(h.existsSync(j)){try{h.unlinkSync(j),h.unlinkSync(l),h.unlinkSync(n)}catch{}return a()}if(Date.now()>b)return a();setTimeout(c,500)};c()})}else console.log("Removing DNS entry..."),await n(a);try{h.unlinkSync(t)}catch{}return await F(!1,null),{running:!1,pid:null}},getCachedPassword:function(){return globalThis.__mitmSudoPassword||null},setCachedPassword:z,loadEncryptedPassword:async function a(){if(!D)return null;try{let a=await D();if(!a.mitmSudoEncrypted)return null;return function(a){try{let[b,c,d]=a.split(":");if(!b||!c||!d)return null;let e=C(),f=l.createDecipheriv(v,e,Buffer.from(b,"hex"));return f.setAuthTag(Buffer.from(c,"hex")),f.update(Buffer.from(d,"hex"))+f.final("utf8")}catch{return null}}(a.mitmSudoEncrypted)}catch{return null}},initDbHooks:function(a,b){D=a,E=b}}},96487:()=>{}};