9router 0.3.66 → 0.3.68

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 (329) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +43 -43
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/_global-error.html +2 -2
  22. package/app/.next/server/app/_global-error.rsc +1 -1
  23. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  24. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  25. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  26. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  27. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  28. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  29. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/_not-found.html +1 -1
  31. package/app/.next/server/app/_not-found.rsc +3 -3
  32. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  33. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  34. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  35. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  36. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  37. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  38. package/app/.next/server/app/api/9remote/install/route_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/api/9remote/start/route_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/api/9remote/status/route_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/locale/route_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/models/route.js +1 -1
  64. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/oauth/gitlab/pat/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  78. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  84. package/app/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/providers/route.js +1 -1
  87. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  90. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  101. package/app/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  103. package/app/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  115. package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  117. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/v1/models/route.js +1 -1
  126. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  131. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/version/route.js +1 -1
  133. package/app/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/callback.html +1 -1
  136. package/app/.next/server/app/callback.rsc +3 -3
  137. package/app/.next/server/app/callback.segments/_full.segment.rsc +3 -3
  138. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  139. package/app/.next/server/app/callback.segments/_index.segment.rsc +3 -3
  140. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  141. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  142. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  143. package/app/.next/server/app/dashboard/basic-chat.html +1 -1
  144. package/app/.next/server/app/dashboard/basic-chat.rsc +5 -5
  145. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  146. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  147. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  148. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  149. package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  150. package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  151. package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  152. package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  153. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  154. package/app/.next/server/app/dashboard/cli-tools.rsc +5 -5
  155. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  156. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  157. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  158. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  159. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  160. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  161. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  162. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  163. package/app/.next/server/app/dashboard/combos.html +1 -1
  164. package/app/.next/server/app/dashboard/combos.rsc +5 -5
  165. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  166. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  167. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  168. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  169. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  170. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  171. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  172. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  173. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  174. package/app/.next/server/app/dashboard/endpoint.rsc +5 -5
  175. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  176. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  177. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  178. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  179. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  180. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  181. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  182. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  183. package/app/.next/server/app/dashboard/mitm.html +1 -1
  184. package/app/.next/server/app/dashboard/mitm.rsc +5 -5
  185. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  186. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  187. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  188. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  189. package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  190. package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  191. package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  192. package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  193. package/app/.next/server/app/dashboard/profile.html +1 -1
  194. package/app/.next/server/app/dashboard/profile.rsc +5 -5
  195. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  196. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  197. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  198. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  199. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  200. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  201. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  202. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  203. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  204. package/app/.next/server/app/dashboard/providers/new.rsc +5 -5
  205. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  206. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  207. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  208. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  209. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  210. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  211. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  212. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  213. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  214. package/app/.next/server/app/dashboard/providers.html +1 -1
  215. package/app/.next/server/app/dashboard/providers.rsc +5 -5
  216. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  217. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  218. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  219. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  220. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  221. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  222. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  223. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  224. package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
  225. package/app/.next/server/app/dashboard/proxy-pools.rsc +5 -5
  226. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  227. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  228. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  229. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  230. package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  231. package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  232. package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  233. package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  234. package/app/.next/server/app/dashboard/quota.html +2 -2
  235. package/app/.next/server/app/dashboard/quota.rsc +6 -6
  236. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  237. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  238. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  239. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  240. package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  241. package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  242. package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  243. package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  244. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  245. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  246. package/app/.next/server/app/dashboard/settings/pricing.rsc +3 -3
  247. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  248. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  249. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  250. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  251. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  252. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  253. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  254. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  255. package/app/.next/server/app/dashboard/translator.html +1 -1
  256. package/app/.next/server/app/dashboard/translator.rsc +5 -5
  257. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  258. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  259. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  260. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  261. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  262. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  263. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  264. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  265. package/app/.next/server/app/dashboard/usage.html +1 -1
  266. package/app/.next/server/app/dashboard/usage.rsc +5 -5
  267. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  268. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  269. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  270. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  271. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  272. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  273. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  274. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  275. package/app/.next/server/app/dashboard.html +1 -1
  276. package/app/.next/server/app/dashboard.rsc +5 -5
  277. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  278. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  279. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  280. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
  281. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  282. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +3 -3
  283. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  284. package/app/.next/server/app/index.html +1 -1
  285. package/app/.next/server/app/index.rsc +3 -3
  286. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  287. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  288. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  289. package/app/.next/server/app/index.segments/_index.segment.rsc +3 -3
  290. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  291. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  292. package/app/.next/server/app/landing.html +1 -1
  293. package/app/.next/server/app/landing.rsc +3 -3
  294. package/app/.next/server/app/landing.segments/_full.segment.rsc +3 -3
  295. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  296. package/app/.next/server/app/landing.segments/_index.segment.rsc +3 -3
  297. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  298. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  299. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  300. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  301. package/app/.next/server/app/login.html +1 -1
  302. package/app/.next/server/app/login.rsc +4 -4
  303. package/app/.next/server/app/login.segments/_full.segment.rsc +4 -4
  304. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  305. package/app/.next/server/app/login.segments/_index.segment.rsc +3 -3
  306. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  307. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  308. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  309. package/app/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  310. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  311. package/app/.next/server/app-paths-manifest.json +43 -43
  312. package/app/.next/server/chunks/1114.js +1 -1
  313. package/app/.next/server/chunks/318.js +1 -1
  314. package/app/.next/server/chunks/5297.js +1 -1
  315. package/app/.next/server/chunks/8220.js +1 -1
  316. package/app/.next/server/pages/404.html +1 -1
  317. package/app/.next/server/pages/500.html +2 -2
  318. package/app/.next/server/server-reference-manifest.js +1 -1
  319. package/app/.next/server/server-reference-manifest.json +1 -1
  320. package/app/.next/static/chunks/{2652-1cec1a4ce4b30684.js → 2652-9fad730d6b420feb.js} +1 -1
  321. package/app/.next/static/chunks/{5497-62aa3a7d46402bf6.js → 5497-983154f9a1ace852.js} +1 -1
  322. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-417c97691da5f47e.js +1 -0
  323. package/app/.next/static/chunks/app/{layout-d924aeffa5288d2c.js → layout-5ac8428914e817ae.js} +1 -1
  324. package/app/package.json +1 -1
  325. package/app/src/mitm/server.js +1 -1
  326. package/package.json +1 -1
  327. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-4a00fa0f4325f176.js +0 -1
  328. /package/app/.next/static/{sD5oyZuYvgG52wS8HNJvm → I8UM92DyjZ9dFbXDFv91-}/_buildManifest.js +0 -0
  329. /package/app/.next/static/{sD5oyZuYvgG52wS8HNJvm → I8UM92DyjZ9dFbXDFv91-}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2134],{52397:(e,t,i)=>{Promise.resolve().then(i.bind(i,91992))},91992:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>g});var s=i(95155),a=i(12115),r=i(14051),n=i.n(r),o=i(73321),l=i(98500),d=i.n(l),c=i(5772),p=i(35497),x=i(52679),m=i(28777),u=i(11059);let h=new Map,y={"openrouter-free":e=>e.filter(e=>e.pricing?.prompt==="0"&&e.pricing?.completion==="0"&&e.context_length>=2e5).map(e=>({id:e.id,name:e.name,contextLength:e.context_length})).sort((e,t)=>t.contextLength-e.contextLength)};async function f(e){if(!e?.url||!e?.type)return[];let t=h.get(e.url);if(t&&Date.now()<t.expiresAt)return t.data;try{let t=await fetch(e.url);if(!t.ok)return[];let i=await t.json(),s=i.data??i.models??i,a=y[e.type],r=a?a(Array.isArray(s)?s:[]):[];return h.set(e.url,{data:r,expiresAt:Date.now()+6e5}),r}catch{return[]}}function g(){let e=(0,o.useParams)(),t=(0,o.useRouter)(),i=e.id,[r,n]=(0,a.useState)([]),[l,h]=(0,a.useState)(!0),[y,g]=(0,a.useState)(null),[v,N]=(0,a.useState)([]),[$,P]=(0,a.useState)(!1),[T,O]=(0,a.useState)(!1),[E,R]=(0,a.useState)(!1),[_,I]=(0,a.useState)(!1),[D,q]=(0,a.useState)(!1),[U,K]=(0,a.useState)(!1),[M,L]=(0,a.useState)(null),[J,z]=(0,a.useState)({}),[F,W]=(0,a.useState)(!1),[V,B]=(0,a.useState)({}),[G,Z]=(0,a.useState)(""),[Q,H]=(0,a.useState)(null),[X,Y]=(0,a.useState)(!1),[ee,et]=(0,a.useState)([]),[ei,es]=(0,a.useState)("__none__"),[ea,er]=(0,a.useState)(!1),[en,eo]=(0,a.useState)(null),[el,ed]=(0,a.useState)(""),[ec,ep]=(0,a.useState)([]),{copied:ex,copy:em}=(0,u.C)(),eu=y?{id:y.id,name:y.name||("anthropic-compatible"===y.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===y.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===y.type?"AC":"OC",apiType:y.apiType,baseUrl:y.baseUrl,type:y.type}:x.zN[i]||x.fg[i]||x.IS[i]||x.nJ[i],eh=!!x.zN[i]||!!x.IS[i],ey=(0,m.KC)(i),ef=(0,x.wG)(i),eg=(0,x.mq)(i),eb=(0,x.gb)(i),ev=eg||eb,ej=ev?i:ef,eN=ev?y?.prefix||i:ef,ek=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&z(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]),ew=(0,a.useCallback)(async()=>{try{let[e,t,s,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/provider-nodes",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),r=await e.json(),o=await t.json(),l=await s.json(),d=a.ok?await a.json():{};if(e.ok){let e=(r.connections||[]).filter(e=>e.provider===i);n(e)}s.ok&&N(l.proxyPools||[]);let c=(d.providerStrategies||{})[i]||{};if(eo(c.fallbackStrategy||null),ed(null!=c.stickyRoundRobinLimit?String(c.stickyRoundRobinLimit):"1"),t.ok){let e=(o.nodes||[]).find(e=>e.id===i)||null;if(!e&&ev)for(let t=0;t<3;t+=1){await new Promise(e=>setTimeout(e,150));let t=await fetch("/api/provider-nodes",{cache:"no-store"});if(t.ok&&(e=((await t.json()).nodes||[]).find(e=>e.id===i)||null))break}g(e)}}catch(e){console.log("Error fetching connections:",e)}finally{h(!1)}},[i,ev]),eC=async e=>{try{let t=await fetch(`/api/provider-nodes/${i}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok&&(g(s.node),await ew(),q(!1))}catch(e){console.log("Error updating provider node:",e)}},eS=async(e,t)=>{try{let s=await fetch("/api/settings",{cache:"no-store"}),a=(s.ok?await s.json():{}).providerStrategies||{},r={};e&&(r.fallbackStrategy=e),"round-robin"===e&&""!==t&&(r.stickyRoundRobinLimit=Number(t)||3);let n={...a};0===Object.keys(r).length?delete n[i]:n[i]=r,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:n})})}catch(e){console.log("Error saving provider strategy:",e)}};(0,a.useEffect)(()=>{ew(),ek()},[ew,ek]),(0,a.useEffect)(()=>{let e=(x.zN[i]||x.fg[i]||x.IS[i]||x.nJ[i])?.modelsFetcher;e&&f(e).then(ep)},[i]);let eA=async(e,t,i=ef)=>{let s=`${i}/${e}`;try{let e=await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:s,alias:t})});if(e.ok)await ek();else{let t=await e.json();alert(t.error||"Failed to set alias")}}catch(e){console.log("Error setting alias:",e)}},e$=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await ek()}catch(e){console.log("Error deleting alias:",e)}},eP=async e=>{if(confirm("Delete this connection?"))try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&n(r.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}},eT=()=>{ew(),P(!1)},eO=async e=>{try{let t=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:i,...e})}),s=await t.json();console.log("[handleSaveApiKey] status:",t.status,"body:",s),t.ok&&(await ew(),R(!1))}catch(e){console.log("Error saving connection:",e)}},eE=async e=>{try{(await fetch(`/api/providers/${M.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await ew(),I(!1))}catch(e){console.log("Error updating connection:",e)}},eR=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&n(i=>i.map(i=>i.id===e?{...i,isActive:t}:i))}catch(e){console.log("Error updating connection status:",e)}},e_=async(e,t)=>{let i=[...r];[i[e],i[t]]=[i[t],i[e]],n(i);try{await Promise.all([fetch(`/api/providers/${i[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${i[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch(e){console.log("Error swapping priority:",e),await ew()}},eI=r.filter(e=>ee.includes(e.id));r.length>0&&(ee.length,r.length),(0,a.useEffect)(()=>{et(e=>e.filter(e=>r.some(t=>t.id===e)))},[r]);let eD=(()=>{if(0===eI.length)return"";let e=new Set(eI.map(e=>e.providerSpecificData?.proxyPoolId||"__none__"));if(1===e.size){let t=[...e][0];if("__none__"===t)return"All selected currently unbound";let i=v.find(e=>e.id===t);return`All selected currently bound to ${i?.name||t}`}return"Selected connections have mixed proxy bindings"})(),eq=()=>{ea||K(!1)},eU=async()=>{if(0===ee.length)return;let e="__none__"===ei?null:ei;er(!0);try{let t=[];for(let i of ee)try{let s=await fetch(`/api/providers/${i}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:e})});t.push(s.ok)}catch(e){console.log("Error applying bulk proxy pool for",i,e),t.push(!1)}let i=t.filter(e=>!e).length;i>0&&alert(`Updated with ${i} failed request(s).`),await ew(),et([]),es("__none__"),K(!1)}catch(e){console.log("Error applying bulk proxy pool:",e)}finally{er(!1)}},eK=(0,s.jsx)("div",{className:"flex flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03]",children:r.map((e,t)=>(0,s.jsx)("div",{className:"flex items-stretch",children:(0,s.jsx)("div",{className:"flex-1 min-w-0",children:(0,s.jsx)(k,{connection:e,proxyPools:v,isOAuth:eh,isFirst:0===t,isLast:t===r.length-1,onMoveUp:()=>e_(t,t-1),onMoveDown:()=>e_(t,t+1),onToggleActive:t=>eR(e.id,t),onUpdateProxy:async t=>{try{(await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&n(i=>i.map(i=>i.id===e.id?{...i,providerSpecificData:{...i.providerSpecificData,proxyPoolId:t||null}}:i))}catch(e){console.log("Error updating proxy:",e)}},onEdit:()=>{L(e),I(!0)},onDelete:()=>eP(e.id)})})},e.id))}),eM=[{value:"__none__",label:"None"},...v.map(e=>({value:e.id,label:e.name}))],eL=0===ee.length?"Select one or more connections, then click Proxy Action.":eD,eJ=ee.length>0&&!ea,ez=(0,s.jsx)(p.aF,{isOpen:U,onClose:eq,title:`Proxy Action (${ee.length} selected)`,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.l6,{label:"Proxy Pool",value:ei,onChange:e=>es(e.target.value),options:eM,placeholder:"None"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:eL}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Selecting None will unbind selected connections from proxy pool."}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:eU,fullWidth:!0,disabled:!eJ,children:ea?"Applying...":"Apply"}),(0,s.jsx)(p.$n,{onClick:eq,variant:"ghost",fullWidth:!0,disabled:ea,children:"Cancel"})]})]})}),eF=async e=>{if(!Q){H(e);try{let t=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${ej}/${e}`})}),i=await t.json();B(t=>({...t,[e]:i.ok?"ok":"error"})),Z(i.ok?"":i.error||"Model not reachable")}catch{B(t=>({...t,[e]:"error"})),Z("Network error")}finally{H(null)}}};return l?(0,s.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,s.jsx)(p.Qv,{}),(0,s.jsx)(p.Qv,{})]}):eu?(0,s.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,s.jsxs)("div",{children:[(0,s.jsxs)(d(),{href:"/dashboard/providers",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors mb-4",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),(0,s.jsxs)("div",{className:"flex items-center gap-4",children:[(0,s.jsx)("div",{className:"rounded-lg flex items-center justify-center",style:{backgroundColor:`${eu.color}15`},children:F?(0,s.jsx)("span",{className:"text-sm font-bold",style:{color:eu.color},children:eu.textIcon||eu.id.slice(0,2).toUpperCase()}):(0,s.jsx)(c.default,{src:eg&&eu.apiType?"responses"===eu.apiType?"/providers/oai-r.png":"/providers/oai-cc.png":eb?"/providers/anthropic-m.png":`/providers/${eu.id}.png`,alt:eu.name,width:48,height:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",sizes:"48px",onError:()=>W(!0)})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-3xl font-semibold tracking-tight",children:eu.name}),(0,s.jsxs)("p",{className:"text-text-muted",children:[r.length," connection",1===r.length?"":"s"]})]})]})]}),eu.deprecated&&(0,s.jsxs)("div",{className:"flex items-start gap-2 px-3 py-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02] border border-black/[0.05] dark:border-white/[0.05]",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted mt-0.5 shrink-0",children:"info"}),(0,s.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:eu.deprecationNotice})]}),eu.notice&&!eu.deprecated&&(0,s.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02] border border-black/[0.05] dark:border-white/[0.05]",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted shrink-0",children:"info"}),(0,s.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:eu.notice.text}),eu.notice.apiKeyUrl&&(0,s.jsx)("a",{href:eu.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline shrink-0",children:"Get API Key →"})]}),ev&&y&&(0,s.jsxs)(p.Zp,{children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:eb?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,s.jsxs)("p",{className:"text-sm text-text-muted",children:[eb?"Messages API":"responses"===y.apiType?"Responses API":"Chat Completions"," \xb7 ",(y.baseUrl||"").replace(/\/$/,""),"/",eb?"messages":"responses"===y.apiType?"responses":"chat/completions"]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(p.$n,{size:"sm",icon:"add",onClick:()=>R(!0),disabled:r.length>0,children:"Add"}),(0,s.jsx)(p.$n,{size:"sm",variant:"secondary",icon:"edit",onClick:()=>q(!0),children:"Edit"}),(0,s.jsx)(p.$n,{size:"sm",variant:"secondary",icon:"delete",onClick:async()=>{if(confirm(`Delete this ${eb?"Anthropic":"OpenAI"} Compatible node?`))try{(await fetch(`/api/provider-nodes/${i}`,{method:"DELETE"})).ok&&t.push("/dashboard/providers")}catch(e){console.log("Error deleting provider node:",e)}},children:"Delete"})]})]}),r.length>0&&(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Only one connection is allowed per compatible node. Add another node if you need more connections."})]}),(0,s.jsxs)(p.Zp,{children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-xs text-text-muted font-medium",children:"Round Robin"}),(0,s.jsx)(p.lM,{checked:"round-robin"===en,onChange:e=>{let t=e?"round-robin":null,i=e?el||"1":el;e&&!el&&ed("1"),eo(t),eS(t,i)}}),"round-robin"===en&&(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{className:"text-xs text-text-muted",children:"Sticky:"}),(0,s.jsx)("input",{type:"number",min:1,value:el,onChange:e=>{var t;ed(t=e.target.value),eS("round-robin",t)},placeholder:"1",className:"w-14 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]}),0===r.length?(0,s.jsxs)("div",{className:"text-center py-12",children:[(0,s.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:eh?"lock":"key"})}),(0,s.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No connections yet"}),(0,s.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Add your first connection to get started"}),!ev&&(0,s.jsxs)("div",{className:"flex gap-2 justify-center",children:["iflow"===i&&(0,s.jsx)(p.$n,{icon:"cookie",variant:"secondary",onClick:()=>O(!0),children:"Cookie Auth"}),(0,s.jsx)(p.$n,{icon:"add",onClick:()=>eh?P(!0):R(!0),children:"iflow"===i?"OAuth":"Add Connection"})]})]}):(0,s.jsxs)(s.Fragment,{children:[eK,!ev&&(0,s.jsxs)("div",{className:"flex gap-2 mt-4",children:["iflow"===i&&(0,s.jsx)(p.$n,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>O(!0),title:"Add connection using browser cookie",children:"Cookie"}),(0,s.jsx)(p.$n,{size:"sm",icon:"add",onClick:()=>eh?P(!0):R(!0),children:"Add"})]})]})]}),(0,s.jsxs)(p.Zp,{children:[(0,s.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"Available Models"})}),!!G&&(0,s.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:G}),(()=>{let e,t;if(ev)return(0,s.jsx)(j,{providerStorageAlias:ej,providerDisplayAlias:eN,modelAliases:J,copied:ex,onCopy:em,onSetAlias:eA,onDeleteAlias:e$,connections:r,isAnthropic:eb});let a=Object.entries(J).filter(([e,t])=>{let i=`${ej}/`;if(!t.startsWith(i))return!1;let s=t.slice(i.length);return eu.passthroughModels?!ey.some(e=>e.id===s):!ey.some(e=>e.id===s)&&e===s}).map(([e,t])=>({id:t.slice(`${ej}/`.length),alias:e,fullModel:t}));return(0,s.jsxs)("div",{className:"flex flex-wrap gap-3",children:[ey.map(e=>{let t=`${ej}/${e.id}`,a=`${i}/${e.id}`,n=Object.entries(J).find(([,e])=>e===t||e===a)?.[0];return(0,s.jsx)(b,{model:e,fullModel:`${eN}/${e.id}`,alias:n,copied:ex,onCopy:em,onSetAlias:t=>eA(e.id,t,ej),onDeleteAlias:()=>e$(n),testStatus:V[e.id],onTest:r.length>0?()=>eF(e.id):void 0,isTesting:Q===e.id},e.id)}),a.map(e=>(0,s.jsx)(b,{model:{id:e.id},fullModel:`${eN}/${e.id}`,alias:e.alias,copied:ex,onCopy:em,onSetAlias:()=>{},onDeleteAlias:()=>e$(e.alias),testStatus:V[e.id],onTest:r.length>0?()=>eF(e.id):void 0,isTesting:Q===e.id,isCustom:!0},e.id)),(0,s.jsxs)("button",{onClick:()=>Y(!0),className:"flex items-center gap-1.5 px-3 py-2 rounded-lg border border-dashed border-black/15 dark:border-white/15 text-xs text-text-muted hover:text-primary hover:border-primary/40 transition-colors",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"add"}),"Add Model"]}),ec.length>0&&(e=new Set(Object.values(J)),0===(t=ec.filter(t=>!e.has(`${ej}/${t.id}`))).length?null:(0,s.jsxs)("div",{className:"w-full mt-2",children:[(0,s.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"Suggested free models (≥200k context):"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:t.map(e=>(0,s.jsxs)("button",{onClick:async()=>{let t=e.id.split("/").pop();await eA(e.id,t,ej)},className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-black/10 dark:border-white/10 text-xs text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",title:`${e.name} \xb7 ${(e.contextLength/1e3).toFixed(0)}k ctx`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"add"}),e.id.split("/").pop()]},e.id))})]}))]})})()]}),ez,"kiro"===i?(0,s.jsx)(p.Mh,{isOpen:$,providerInfo:eu,onSuccess:eT,onClose:()=>P(!1)}):"cursor"===i?(0,s.jsx)(p.G9,{isOpen:$,onSuccess:eT,onClose:()=>P(!1)}):"gitlab"===i?(0,s.jsx)(p.vj,{isOpen:$,providerInfo:eu,onSuccess:eT,onClose:()=>P(!1)}):(0,s.jsx)(p.LF,{isOpen:$,provider:i,providerInfo:eu,onSuccess:eT,onClose:()=>P(!1)}),"iflow"===i&&(0,s.jsx)(p.vE,{isOpen:T,onSuccess:()=>{ew(),O(!1)},onClose:()=>O(!1)}),(0,s.jsx)(w,{isOpen:E,provider:i,providerName:eu.name,isCompatible:ev,isAnthropic:eb,proxyPools:v,onSave:eO,onClose:()=>R(!1)}),(0,s.jsx)(C,{isOpen:_,connection:M,proxyPools:v,onSave:eE,onClose:()=>I(!1)}),ev&&(0,s.jsx)(S,{isOpen:D,node:y,onSave:eC,onClose:()=>q(!1),isAnthropic:eb}),!ev&&(0,s.jsx)(A,{isOpen:X,providerAlias:ej,providerDisplayAlias:eN,onSave:async e=>{let t=eu?.passthroughModels?e.split("/").pop():e;await eA(e,t,ej),Y(!1)},onClose:()=>Y(!1)})]}):(0,s.jsxs)("div",{className:"text-center py-20",children:[(0,s.jsx)("p",{className:"text-text-muted",children:"Provider not found"}),(0,s.jsx)(d(),{href:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]})}function b({model:e,fullModel:t,alias:i,copied:a,onCopy:r,testStatus:n,isCustom:o,onDeleteAlias:l,onTest:d,isTesting:c}){let p="ok"===n?"#22c55e":"error"===n?"#ef4444":void 0;return(0,s.jsx)("div",{className:`group px-3 py-2 rounded-lg border ${"ok"===n?"border-green-500/40":"error"===n?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base",style:p?{color:p}:void 0,children:"ok"===n?"check_circle":"error"===n?"cancel":"smart_toy"}),(0,s.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),d&&(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:d,disabled:c,className:`p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-opacity ${c?"opacity-100":"opacity-0 group-hover:opacity-100"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:c?{animation:"spin 1s linear infinite"}:void 0,children:c?"progress_activity":"science"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:c?"Testing...":"Test"})]}),(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:()=>r(t,`model-${e.id}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:a===`model-${e.id}`?"check":"content_copy"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:a===`model-${e.id}`?"Copied!":"Copy"})]}),o&&(0,s.jsx)("button",{onClick:l,className:"p-0.5 hover:bg-red-500/10 rounded text-text-muted hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity ml-auto",title:"Remove custom model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"close"})})]})})}function v({modelId:e,fullModel:t,copied:i,onCopy:a,onDeleteAlias:r,onTest:n,testStatus:o,isTesting:l}){let d="ok"===o?"#22c55e":"error"===o?"#ef4444":void 0;return(0,s.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${"ok"===o?"border-green-500/40":"error"===o?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",style:d?{color:d}:void 0,children:"ok"===o?"check_circle":"error"===o?"cancel":"smart_toy"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("p",{className:"text-sm font-medium truncate",children:e}),(0,s.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,s.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:()=>a(t,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:i===`model-${e}`?"check":"content_copy"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:i===`model-${e}`?"Copied!":"Copy"})]}),n&&(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:n,disabled:l,className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-colors",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:l?{animation:"spin 1s linear infinite"}:void 0,children:l?"progress_activity":"science"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:l?"Testing...":"Test"})]})]})]}),(0,s.jsx)("button",{onClick:r,className:"p-1 hover:bg-red-50 rounded text-red-500",title:"Remove model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"delete"})})]})}function j({providerStorageAlias:e,providerDisplayAlias:t,modelAliases:i,copied:r,onCopy:n,onSetAlias:o,onDeleteAlias:l,connections:d,isAnthropic:c}){let[x,m]=(0,a.useState)(""),[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(!1),[g,b]=(0,a.useState)(null),[j,N]=(0,a.useState)({}),k=async t=>{if(!g){b(t);try{let i=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${e}/${t}`})}),s=await i.json();N(e=>({...e,[t]:s.ok?"ok":"error"}))}catch{N(e=>({...e,[t]:"error"}))}finally{b(null)}}},w=Object.entries(i).filter(([,t])=>t.startsWith(`${e}/`)).map(([t,i])=>({modelId:i.replace(`${e}/`,""),fullModel:i,alias:t})),C=s=>{let a,r=`${e}/${s}`;if(Object.values(i).includes(r))return null;let n=(a=s.split("/"))[a.length-1];if(!i[n])return n;let o=`${t}-${n}`;return i[o]?null:o},S=async()=>{if(!x.trim()||u)return;let t=x.trim(),i=C(t);if(!i)return void alert("All suggested aliases already exist. Please choose a different model or remove conflicting aliases.");h(!0);try{await o(t,i,e),m("")}catch(e){console.log("Error adding model:",e)}finally{h(!1)}},A=async()=>{if(y)return;let t=d.find(e=>!1!==e.isActive);if(t){f(!0);try{let i=await fetch(`/api/providers/${t.id}/models`),s=await i.json();if(!i.ok)return void alert(s.error||"Failed to import models");let a=s.models||[];if(0===a.length)return void alert("No models returned from /models.");let r=0;for(let t of a){let i=t.id||t.name||t.model;if(!i)continue;let s=C(i);s&&(await o(i,s,e),r+=1)}0===r&&alert("No new models were added.")}catch(e){console.log("Error importing models:",e)}finally{f(!1)}}},$=d.some(e=>!1!==e.isActive);return(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("p",{className:"text-sm text-text-muted",children:["Add ",c?"Anthropic":"OpenAI","-compatible models manually or import them from the /models endpoint."]}),(0,s.jsxs)("div",{className:"flex items-end gap-2 flex-wrap",children:[(0,s.jsxs)("div",{className:"flex-1 min-w-[240px]",children:[(0,s.jsx)("label",{htmlFor:"new-compatible-model-input",className:"text-xs text-text-muted mb-1 block",children:"Model ID"}),(0,s.jsx)("input",{id:"new-compatible-model-input",type:"text",value:x,onChange:e=>m(e.target.value),onKeyDown:e=>"Enter"===e.key&&S(),placeholder:c?"claude-3-opus-20240229":"gpt-4o",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})]}),(0,s.jsx)(p.$n,{size:"sm",icon:"add",onClick:S,disabled:!x.trim()||u,children:u?"Adding...":"Add"}),(0,s.jsx)(p.$n,{size:"sm",variant:"secondary",icon:"download",onClick:A,disabled:!$||y,children:y?"Importing...":"Import from /models"})]}),!$&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Add a connection to enable importing models."}),w.length>0&&(0,s.jsx)("div",{className:"flex flex-col gap-3",children:w.map(({modelId:e,fullModel:i,alias:a})=>(0,s.jsx)(v,{modelId:e,fullModel:`${t}/${e}`,copied:r,onCopy:n,onDeleteAlias:()=>l(a),onTest:d.length>0?()=>k(e):void 0,testStatus:j[e],isTesting:g===e},i))})]})}function N({until:e}){let[t,i]=(0,a.useState)("");return((0,a.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void i("");let s=Math.floor(t/1e3);if(s<60)i(`${s}s`);else if(s<3600)i(`${Math.floor(s/60)}m ${s%60}s`);else{let e=Math.floor(s/3600),t=Math.floor(s%3600/60);i(`${e}h ${t}m`)}};t();let s=setInterval(t,1e3);return()=>clearInterval(s)},[e]),t)?(0,s.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",t]}):null}function k({connection:e,proxyPools:t,isOAuth:i,isFirst:r,isLast:n,onMoveUp:o,onMoveDown:l,onToggleActive:d,onUpdateProxy:c,onEdit:x,onDelete:m}){let[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(!1),g=(0,a.useRef)(null),b=new Map((t||[]).map(e=>[e.id,e])),v=e.providerSpecificData?.proxyPoolId||null,j=v?b.get(v):null,k=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,w=!!v||k,C=j?`Pool: ${j.name}`:v?`Pool: ${v} (inactive/missing)`:k?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",S="";if(j?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=j?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);S=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{S=t}}let A=j?.noProxy||e.providerSpecificData?.connectionNoProxy||"",$="default";j?.isActive===!0?$="success":(v||k)&&($="error"),(0,a.useEffect)(()=>{if(!u)return;let e=e=>{g.current&&!g.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[u]);let P=async e=>{f(!0);try{await c("__none__"===e?null:e)}finally{f(!1),h(!1)}},T=i?e.name||e.email||e.displayName||"OAuth Account":e.name,[O,E]=(0,a.useState)(!1),R=Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>!!e).sort()[0]||null;(0,a.useEffect)(()=>{let t=()=>{E(!!Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>e&&new Date(e).getTime()>Date.now()).sort()[0])};t();let i=R?setInterval(t,1e3):null;return()=>{i&&clearInterval(i)}},[R]);let _="unavailable"!==e.testStatus||O?e.testStatus:"active";return(0,s.jsxs)("div",{className:`group flex items-center justify-between p-3 rounded-lg hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors ${!1===e.isActive?"opacity-60":""}`,children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("button",{onClick:o,disabled:r,className:`p-0.5 rounded ${r?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_up"})}),(0,s.jsx)("button",{onClick:l,disabled:n,className:`p-0.5 rounded ${n?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_down"})})]}),(0,s.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",children:i?"lock":"key"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("p",{className:"text-sm font-medium truncate",children:T}),(0,s.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,s.jsx)(p.Ex,{variant:!1===e.isActive?"default":"active"===_||"success"===_?"success":"error"===_||"expired"===_||"unavailable"===_?"error":"default",size:"sm",dot:!0,children:!1===e.isActive?"disabled":_||"Unknown"}),w&&(0,s.jsx)(p.Ex,{variant:$,size:"sm",children:"Proxy"}),O&&!1!==e.isActive&&(0,s.jsx)(N,{until:R}),e.lastError&&!1!==e.isActive&&(0,s.jsx)("span",{className:"text-xs text-red-500 truncate max-w-[300px]",title:e.lastError,children:e.lastError}),(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["#",e.priority]}),e.globalPriority&&(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["Auto: ",e.globalPriority]})]}),w&&(0,s.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,s.jsx)("span",{className:"text-[11px] text-text-muted truncate max-w-[420px]",title:C,children:C}),S&&(0,s.jsx)("code",{className:"text-[10px] font-mono bg-black/5 dark:bg-white/5 px-1 py-0.5 rounded text-text-muted",children:S}),A&&(0,s.jsxs)("span",{className:"text-[11px] text-text-muted truncate max-w-[320px]",title:A,children:["no_proxy: ",A]})]})]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)("div",{className:"flex gap-1",children:[(t||[]).length>0&&(0,s.jsxs)("div",{className:"relative",ref:g,children:[(0,s.jsxs)("button",{onClick:()=>h(e=>!e),className:`flex flex-col items-center px-2 py-1 rounded hover:bg-black/5 dark:hover:bg-white/5 transition-colors ${w?"text-primary":"text-text-muted hover:text-primary"}`,disabled:y,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:y?"progress_activity":"lan"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),u&&(0,s.jsxs)("div",{className:"absolute right-0 top-full mt-1 z-50 bg-bg border border-border rounded-lg shadow-lg py-1 min-w-[160px]",children:[(0,s.jsx)("button",{onClick:()=>P("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!v?"text-primary font-medium":"text-text-main"}`,children:"None"}),(t||[]).map(e=>(0,s.jsx)("button",{onClick:()=>P(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${v===e.id?"text-primary font-medium":"text-text-main"}`,children:e.name},e.id))]})]}),(0,s.jsxs)("button",{onClick:x,className:"flex flex-col items-center px-2 py-1 rounded hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,s.jsxs)("button",{onClick:m,className:"flex flex-col items-center px-2 py-1 rounded hover:bg-red-500/10 text-red-500",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,s.jsx)(p.lM,{size:"sm",checked:e.isActive??!0,onChange:d,title:e.isActive??!0?"Disable connection":"Enable connection"})]})]})}function w({isOpen:e,provider:t,providerName:i,isCompatible:r,isAnthropic:n,proxyPools:o,onSave:l,onClose:d}){let c="__none__",[x,m]=(0,a.useState)({name:"",apiKey:"",priority:1,proxyPoolId:c}),[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(null),[g,b]=(0,a.useState)(!1),v=async()=>{h(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:x.apiKey})}),i=await e.json();f(i.valid?"success":"failed")}catch{f("failed")}finally{h(!1)}},j=async()=>{if(t&&x.apiKey){b(!0);try{let e=!1;try{h(!0),f(null);let i=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:x.apiKey})});e=!!(await i.json()).valid,f(e?"success":"failed")}catch{f("failed")}finally{h(!1)}await l({name:x.name,apiKey:x.apiKey,priority:x.priority,proxyPoolId:x.proxyPoolId===c?null:x.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:void 0})}finally{b(!1)}}};return t?(0,s.jsx)(p.aF,{isOpen:e,title:`Add ${i||t} API Key`,onClose:d,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.pd,{label:"Name",value:x.name,onChange:e=>m({...x,name:e.target.value}),placeholder:"Production Key"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.pd,{label:"API Key",type:"password",value:x.apiKey,onChange:e=>m({...x,apiKey:e.target.value}),className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:v,disabled:!x.apiKey||u||g,variant:"secondary",children:u?"Checking...":"Check"})})]}),y&&(0,s.jsx)(p.Ex,{variant:"success"===y?"success":"error",children:"success"===y?"Valid":"Invalid"}),r&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:n?`Validation checks ${i||"Anthropic Compatible"} by verifying the API key.`:`Validation checks ${i||"OpenAI Compatible"} via /models on your base URL.`}),(0,s.jsx)(p.pd,{label:"Priority",type:"number",value:x.priority,onChange:e=>m({...x,priority:Number.parseInt(e.target.value)||1})}),(0,s.jsx)(p.l6,{label:"Proxy Pool",value:x.proxyPoolId,onChange:e=>m({...x,proxyPoolId:e.target.value}),options:[{value:c,label:"None"},...(o||[]).map(e=>({value:e.id,label:e.name}))],placeholder:"None"}),0===(o||[]).length&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"No active proxy pools available. Create one in Proxy Pools page first."}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:j,fullWidth:!0,disabled:!x.name||!x.apiKey||g,children:g?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:d,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function C({isOpen:e,connection:t,proxyPools:i,onSave:r,onClose:n}){let[o,l]=(0,a.useState)({name:"",priority:1,apiKey:""}),[d,c]=(0,a.useState)(!1),[m,u]=(0,a.useState)(null),[h,y]=(0,a.useState)(!1),[f,g]=(0,a.useState)(null),[b,v]=(0,a.useState)(!1);(0,a.useEffect)(()=>{t&&(l({name:t.name||"",priority:t.priority||1,apiKey:""}),u(null),g(null))},[t]);let j=async()=>{if(t?.provider){c(!0),u(null);try{let e=await fetch(`/api/providers/${t.id}/test`,{method:"POST"}),i=await e.json();u(i.valid?"success":"failed")}catch{u("failed")}finally{c(!1)}}},N=async()=>{if(t?.provider&&o.apiKey){y(!0),g(null);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:o.apiKey})}),i=await e.json();g(i.valid?"success":"failed")}catch{g("failed")}finally{y(!1)}}},k=async()=>{v(!0);try{let e={name:o.name,priority:o.priority};if(!w&&o.apiKey){e.apiKey=o.apiKey;let i="success"===f;if(!i)try{y(!0),g(null);let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:o.apiKey})});i=!!(await e.json()).valid,g(i?"success":"failed")}catch{g("failed")}finally{y(!1)}i&&(e.testStatus="active",e.lastError=null,e.lastErrorAt=null)}await r(e)}finally{v(!1)}};if(!t)return null;let w="oauth"===t.authType,C=(0,x.mq)(t.provider)||(0,x.gb)(t.provider);return(0,s.jsx)(p.aF,{isOpen:e,title:"Edit Connection",onClose:n,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.pd,{label:"Name",value:o.name,onChange:e=>l({...o,name:e.target.value}),placeholder:w?"Account name":"Production Key"}),w&&t.email&&(0,s.jsxs)("div",{className:"bg-sidebar/50 p-3 rounded-lg",children:[(0,s.jsx)("p",{className:"text-sm text-text-muted mb-1",children:"Email"}),(0,s.jsx)("p",{className:"font-medium",children:t.email})]}),(0,s.jsx)(p.pd,{label:"Priority",type:"number",value:o.priority,onChange:e=>l({...o,priority:Number.parseInt(e.target.value)||1})}),!w&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.pd,{label:"API Key",type:"password",value:o.apiKey,onChange:e=>l({...o,apiKey:e.target.value}),placeholder:"Enter new API key",hint:"Leave blank to keep the current API key.",className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:N,disabled:!o.apiKey||h||b,variant:"secondary",children:h?"Checking...":"Check"})})]}),f&&(0,s.jsx)(p.Ex,{variant:"success"===f?"success":"error",children:"success"===f?"Valid":"Invalid"})]}),!C&&(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)(p.$n,{onClick:j,variant:"secondary",disabled:d,children:d?"Testing...":"Test Connection"}),m&&(0,s.jsx)(p.Ex,{variant:"success"===m?"success":"error",children:"success"===m?"Valid":"Failed"})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:k,fullWidth:!0,disabled:b,children:b?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:n,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}function S({isOpen:e,node:t,onSave:i,onClose:r,isAnthropic:n}){let[o,l]=(0,a.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[d,c]=(0,a.useState)(!1),[x,m]=(0,a.useState)(""),[u,h]=(0,a.useState)(""),[y,f]=(0,a.useState)(!1),[g,b]=(0,a.useState)(null);(0,a.useEffect)(()=>{t&&l({name:t.name||"",prefix:t.prefix||"",apiType:t.apiType||"chat",baseUrl:t.baseUrl||(n?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[t,n]);let v=async()=>{if(o.name.trim()&&o.prefix.trim()&&o.baseUrl.trim()){c(!0);try{let e={name:o.name,prefix:o.prefix,baseUrl:o.baseUrl};n||(e.apiType=o.apiType),await i(e)}finally{c(!1)}}},j=async()=>{f(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:o.baseUrl,apiKey:x,type:n?"anthropic-compatible":"openai-compatible",modelId:u.trim()||void 0})}),t=await e.json();b(t.valid?"success":"failed")}catch{b("failed")}finally{f(!1)}};return t?(0,s.jsx)(p.aF,{isOpen:e,title:`Edit ${n?"Anthropic":"OpenAI"} Compatible`,onClose:r,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.pd,{label:"Name",value:o.name,onChange:e=>l({...o,name:e.target.value}),placeholder:`${n?"Anthropic":"OpenAI"} Compatible (Prod)`,hint:"Required. A friendly label for this node."}),(0,s.jsx)(p.pd,{label:"Prefix",value:o.prefix,onChange:e=>l({...o,prefix:e.target.value}),placeholder:n?"ac-prod":"oc-prod",hint:"Required. Used as the provider prefix for model IDs."}),!n&&(0,s.jsx)(p.l6,{label:"API Type",options:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}],value:o.apiType,onChange:e=>l({...o,apiType:e.target.value})}),(0,s.jsx)(p.pd,{label:"Base URL",value:o.baseUrl,onChange:e=>l({...o,baseUrl:e.target.value}),placeholder:n?"https://api.anthropic.com/v1":"https://api.openai.com/v1",hint:`Use the base URL (ending in /v1) for your ${n?"Anthropic":"OpenAI"}-compatible API.`}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.pd,{label:"API Key (for Check)",type:"password",value:x,onChange:e=>m(e.target.value),className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:j,disabled:!x||y||!o.baseUrl.trim(),variant:"secondary",children:y?"Checking...":"Check"})})]}),(0,s.jsx)(p.pd,{label:"Model ID (optional)",value:u,onChange:e=>h(e.target.value),placeholder:"e.g. my-model-id",hint:"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead."}),g&&(0,s.jsx)(p.Ex,{variant:"success"===g?"success":"error",children:"success"===g?"Valid":"Invalid"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:v,fullWidth:!0,disabled:!o.name.trim()||!o.prefix.trim()||!o.baseUrl.trim()||d,children:d?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:r,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function A({isOpen:e,providerAlias:t,providerDisplayAlias:i,onSave:r,onClose:n}){let[o,l]=(0,a.useState)(""),[d,c]=(0,a.useState)(null),[x,m]=(0,a.useState)(""),[u,h]=(0,a.useState)(!1);(0,a.useEffect)(()=>{e&&(l(""),c(null),m(""))},[e]);let y=async()=>{if(o.trim()){c("testing"),m("");try{let e=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${t}/${o.trim()}`})}),i=await e.json();c(i.ok?"ok":"error"),m(i.error||"")}catch(e){c("error"),m(e.message)}}},f=async()=>{if(o.trim()&&!u){h(!0);try{await r(o.trim())}finally{h(!1)}}};return(0,s.jsx)(p.aF,{isOpen:e,onClose:n,title:"Add Custom Model",children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Model ID"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:o,onChange:e=>{l(e.target.value),c(null),m("")},onKeyDown:e=>{"Enter"===e.key&&y()},placeholder:"e.g. claude-opus-4-5",className:"flex-1 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",autoFocus:!0}),(0,s.jsx)(p.$n,{variant:"secondary",icon:"science",loading:"testing"===d,onClick:y,disabled:!o.trim()||"testing"===d,children:"testing"===d?"Testing...":"Test"})]}),(0,s.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Sent to provider as: ",(0,s.jsx)("code",{className:"font-mono bg-sidebar px-1 rounded",children:o.trim()||"model-id"})]})]}),"ok"===d&&(0,s.jsxs)("div",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base",children:"check_circle"}),"Model is reachable"]}),"error"===d&&(0,s.jsxs)("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base shrink-0",children:"cancel"}),(0,s.jsx)("span",{children:x||"Model not reachable"})]}),(0,s.jsxs)("div",{className:"flex gap-2 pt-1",children:[(0,s.jsx)(p.$n,{onClick:n,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,s.jsx)(p.$n,{onClick:f,fullWidth:!0,size:"sm",disabled:!o.trim()||u,children:u?"Adding...":"Add Model"})]})]})})}b.propTypes={model:n().shape({id:n().string.isRequired}).isRequired,fullModel:n().string.isRequired,alias:n().string,copied:n().string,onCopy:n().func.isRequired,testStatus:n().oneOf(["ok","error"]),isCustom:n().bool,onDeleteAlias:n().func,onTest:n().func,isTesting:n().bool},n().string.isRequired,n().object.isRequired,n().string,n().func.isRequired,n().func.isRequired,n().func.isRequired,v.propTypes={modelId:n().string.isRequired,fullModel:n().string.isRequired,copied:n().string,onCopy:n().func.isRequired,onDeleteAlias:n().func.isRequired,onTest:n().func,testStatus:n().oneOf(["ok","error"]),isTesting:n().bool},j.propTypes={providerStorageAlias:n().string.isRequired,providerDisplayAlias:n().string.isRequired,modelAliases:n().object.isRequired,copied:n().string,onCopy:n().func.isRequired,onSetAlias:n().func.isRequired,onDeleteAlias:n().func.isRequired,connections:n().arrayOf(n().shape({id:n().string,isActive:n().bool})).isRequired,isAnthropic:n().bool},N.propTypes={until:n().string.isRequired},k.propTypes={connection:n().shape({id:n().string,name:n().string,email:n().string,displayName:n().string,modelLockUntil:n().string,testStatus:n().string,isActive:n().bool,lastError:n().string,priority:n().number,globalPriority:n().number}).isRequired,proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string,proxyUrl:n().string,noProxy:n().string,isActive:n().bool})),isOAuth:n().bool.isRequired,isFirst:n().bool.isRequired,isLast:n().bool.isRequired,onMoveUp:n().func.isRequired,onMoveDown:n().func.isRequired,onToggleActive:n().func.isRequired,onUpdateProxy:n().func,onEdit:n().func.isRequired,onDelete:n().func.isRequired},w.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerName:n().string,isCompatible:n().bool,isAnthropic:n().bool,proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string})),onSave:n().func.isRequired,onClose:n().func.isRequired},C.propTypes={isOpen:n().bool.isRequired,connection:n().shape({id:n().string,name:n().string,email:n().string,priority:n().number,authType:n().string,provider:n().string,providerSpecificData:n().object}),proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string})),onSave:n().func.isRequired,onClose:n().func.isRequired},S.propTypes={isOpen:n().bool.isRequired,node:n().shape({id:n().string,name:n().string,prefix:n().string,apiType:n().string,baseUrl:n().string}),onSave:n().func.isRequired,onClose:n().func.isRequired,isAnthropic:n().bool},A.propTypes={isOpen:n().bool.isRequired,providerAlias:n().string.isRequired,providerDisplayAlias:n().string.isRequired,onSave:n().func.isRequired,onClose:n().func.isRequired}}},e=>{e.O(0,[5370,4335,619,5772,2652,5497,8441,3794,7358],()=>e(e.s=52397)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>i});var n=r(12115);let a=e=>{let t,r=new Set,n=(e,n)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,o={setState:n,getState:a,getInitialState:()=>i,subscribe:e=>(r.add(e),()=>r.delete(e))},i=t=e(n,a,o);return o},o=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},i=e=>e?o(e):o},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>i});var n=r(95155),a=r(12115),o=r(90085);function i({children:e}){let{initTheme:t}=(0,o.A)();return(0,a.useEffect)(()=>{t()},[t]),(0,n.jsx)(n.Fragment,{children:e})}},28777:(e,t,r)=>{"use strict";r.d(t,{KC:()=>n.KC,Xg:()=>n.Xg});var n=r(45564);Object.entries(r(52679).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})))},31692:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},a=(e,t)=>(r,a,o)=>{let i,s={storage:function(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var t;let n=e=>null===e?null:JSON.parse(e,void 0),a=null!=(t=r.getItem(e))?t:null;return a instanceof Promise?a.then(n):n(a)},setItem:(e,t)=>r.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>r.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},u=!1,l=0,c=new Set,d=new Set,m=s.storage;if(!m)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),r(...e)},a,o);let f=()=>{let e=s.partialize({...a()});return m.setItem(s.name,{state:e,version:s.version})},h=o.setState;o.setState=(e,t)=>(h(e,t),f());let p=e((...e)=>(r(...e),f()),a,o);o.getInitialState=()=>p;let v=()=>{var e,t;if(!m)return;let o=++l;u=!1,c.forEach(e=>{var t;return e(null!=(t=a())?t:p)});let h=(null==(t=s.onRehydrateStorage)?void 0:t.call(s,null!=(e=a())?e:p))||void 0;return n(m.getItem.bind(m))(s.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===s.version)return[!1,e.state];else{if(s.migrate){let t=s.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(o!==l)return;let[n,u]=e;if(r(i=s.merge(u,null!=(t=a())?t:p),!0),n)return f()}).then(()=>{o===l&&(null==h||h(i,void 0),i=a(),u=!0,d.forEach(e=>e(i)))}).catch(e=>{o===l&&(null==h||h(void 0,e))})};return o.persist={setOptions:e=>{s={...s,...e},e.storage&&(m=e.storage)},clearStorage:()=>{null==m||m.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>v(),hasHydrated:()=>u,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},s.skipHydration||v(),i||p}},35154:e=>{e.exports={style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}},51743:()=>{},54642:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},64206:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,35154,23)),Promise.resolve().then(r.t.bind(r,51743,23)),Promise.resolve().then(r.bind(r,94635)),Promise.resolve().then(r.bind(r,21110))},73006:(e,t,r)=>{"use strict";r.d(t,{FE:()=>m,Tl:()=>l,wn:()=>f});var n=r(93308);let a={},o=n.Xn,i=[];function s(){if("u"<typeof document)return n.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):n.Xn;return(0,n.QC)(t)}async function u(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function l(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==o&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let r=t;for(;r;){if(r.hasAttribute&&r.hasAttribute("data-i18n-skip"))return;r=r.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let n=l(e._originalText);n!==e.nodeValue&&(e.nodeValue=n)}function d(e){let t;if(!e)return;let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),n=[];for(;t=r.nextNode();)n.push(t);n.forEach(c)}async function m(){o=s(),await u(o),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function f(){o=s(),await u(o),i.forEach(e=>e()),d(document.body)}},73321:(e,t,r)=>{"use strict";var n=r(74645);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},90085:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(1934),a=r(31692),o=r(90620);function i(e){let t=document.documentElement,r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?r:e)?t.classList.add("dark"):t.classList.remove("dark")}let s=(0,n.v)((0,a.Zr)((e,t)=>({theme:o.B2.defaultTheme,setTheme:t=>{e({theme:t}),i(t)},toggleTheme:()=>{let r="dark"===t().theme?"light":"dark";e({theme:r}),i(r)},initTheme:()=>{i(t().theme)}}),{name:o.B2.storageKey}))},90620:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>n.Q2,fg:()=>n.fg,vQ:()=>a,MA:()=>n.MA,UY:()=>i,zN:()=>n.zN,B2:()=>o});var n=r(52679);r(28777);let a={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.66"},o={storageKey:"theme",defaultTheme:"system"},i={maxLines:200,pollIntervalMs:1e3}},93308:(e,t,r)=>{"use strict";r.d(t,{CL:()=>o,QC:()=>i,Xn:()=>a,YZ:()=>n});let n=["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no"],a="en",o="locale";function i(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":a}},94635:(e,t,r)=>{"use strict";r.d(t,{RuntimeI18nProvider:()=>s});var n=r(95155),a=r(12115),o=r(73321),i=r(73006);function s({children:e}){let t=(0,o.usePathname)();return(0,a.useEffect)(()=>{(0,i.FE)()},[]),(0,a.useEffect)(()=>{t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{(0,i.wn)()})})},[t]),(0,n.jsx)(n.Fragment,{children:e})}}},e=>{e.O(0,[1405,3334,2652,8441,3794,7358],()=>e(e.s=64206)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>i});var n=r(12115);let a=e=>{let t,r=new Set,n=(e,n)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,o={setState:n,getState:a,getInitialState:()=>i,subscribe:e=>(r.add(e),()=>r.delete(e))},i=t=e(n,a,o);return o},o=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},i=e=>e?o(e):o},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>i});var n=r(95155),a=r(12115),o=r(90085);function i({children:e}){let{initTheme:t}=(0,o.A)();return(0,a.useEffect)(()=>{t()},[t]),(0,n.jsx)(n.Fragment,{children:e})}},28777:(e,t,r)=>{"use strict";r.d(t,{KC:()=>n.KC,Xg:()=>n.Xg});var n=r(45564);Object.entries(r(52679).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})))},31692:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},a=(e,t)=>(r,a,o)=>{let i,s={storage:function(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var t;let n=e=>null===e?null:JSON.parse(e,void 0),a=null!=(t=r.getItem(e))?t:null;return a instanceof Promise?a.then(n):n(a)},setItem:(e,t)=>r.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>r.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},u=!1,l=0,c=new Set,d=new Set,m=s.storage;if(!m)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),r(...e)},a,o);let f=()=>{let e=s.partialize({...a()});return m.setItem(s.name,{state:e,version:s.version})},h=o.setState;o.setState=(e,t)=>(h(e,t),f());let p=e((...e)=>(r(...e),f()),a,o);o.getInitialState=()=>p;let v=()=>{var e,t;if(!m)return;let o=++l;u=!1,c.forEach(e=>{var t;return e(null!=(t=a())?t:p)});let h=(null==(t=s.onRehydrateStorage)?void 0:t.call(s,null!=(e=a())?e:p))||void 0;return n(m.getItem.bind(m))(s.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===s.version)return[!1,e.state];else{if(s.migrate){let t=s.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(o!==l)return;let[n,u]=e;if(r(i=s.merge(u,null!=(t=a())?t:p),!0),n)return f()}).then(()=>{o===l&&(null==h||h(i,void 0),i=a(),u=!0,d.forEach(e=>e(i)))}).catch(e=>{o===l&&(null==h||h(void 0,e))})};return o.persist={setOptions:e=>{s={...s,...e},e.storage&&(m=e.storage)},clearStorage:()=>{null==m||m.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>v(),hasHydrated:()=>u,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},s.skipHydration||v(),i||p}},35154:e=>{e.exports={style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}},51743:()=>{},54642:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},64206:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,35154,23)),Promise.resolve().then(r.t.bind(r,51743,23)),Promise.resolve().then(r.bind(r,94635)),Promise.resolve().then(r.bind(r,21110))},73006:(e,t,r)=>{"use strict";r.d(t,{FE:()=>m,Tl:()=>l,wn:()=>f});var n=r(93308);let a={},o=n.Xn,i=[];function s(){if("u"<typeof document)return n.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):n.Xn;return(0,n.QC)(t)}async function u(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function l(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==o&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let r=t;for(;r;){if(r.hasAttribute&&r.hasAttribute("data-i18n-skip"))return;r=r.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let n=l(e._originalText);n!==e.nodeValue&&(e.nodeValue=n)}function d(e){let t;if(!e)return;let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),n=[];for(;t=r.nextNode();)n.push(t);n.forEach(c)}async function m(){o=s(),await u(o),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function f(){o=s(),await u(o),i.forEach(e=>e()),d(document.body)}},73321:(e,t,r)=>{"use strict";var n=r(74645);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},90085:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(1934),a=r(31692),o=r(90620);function i(e){let t=document.documentElement,r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?r:e)?t.classList.add("dark"):t.classList.remove("dark")}let s=(0,n.v)((0,a.Zr)((e,t)=>({theme:o.B2.defaultTheme,setTheme:t=>{e({theme:t}),i(t)},toggleTheme:()=>{let r="dark"===t().theme?"light":"dark";e({theme:r}),i(r)},initTheme:()=>{i(t().theme)}}),{name:o.B2.storageKey}))},90620:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>n.Q2,fg:()=>n.fg,vQ:()=>a,MA:()=>n.MA,UY:()=>i,zN:()=>n.zN,B2:()=>o});var n=r(52679);r(28777);let a={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.68"},o={storageKey:"theme",defaultTheme:"system"},i={maxLines:200,pollIntervalMs:1e3}},93308:(e,t,r)=>{"use strict";r.d(t,{CL:()=>o,QC:()=>i,Xn:()=>a,YZ:()=>n});let n=["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no"],a="en",o="locale";function i(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":a}},94635:(e,t,r)=>{"use strict";r.d(t,{RuntimeI18nProvider:()=>s});var n=r(95155),a=r(12115),o=r(73321),i=r(73006);function s({children:e}){let t=(0,o.usePathname)();return(0,a.useEffect)(()=>{(0,i.FE)()},[]),(0,a.useEffect)(()=>{t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{(0,i.wn)()})})},[t]),(0,n.jsx)(n.Fragment,{children:e})}}},e=>{e.O(0,[1405,3334,2652,8441,3794,7358],()=>e(e.s=64206)),_N_E=e.O()}]);
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router-app",
3
- "version": "0.3.66",
3
+ "version": "0.3.68",
4
4
  "description": "9Router web dashboard",
5
5
  "private": true,
6
6
  "scripts": {
@@ -1 +1 @@
1
- const a0_0x2408cb=a0_0x1e5c;(function(_0x4a0fe5,_0x825a53){const _0x1a8af=a0_0x1e5c,_0x23a00b=_0x4a0fe5();while(!![]){try{const _0x573d2c=parseInt(_0x1a8af(0x200))/0x1*(-parseInt(_0x1a8af(0x27e))/0x2)+parseInt(_0x1a8af(0x24a))/0x3+-parseInt(_0x1a8af(0x20a))/0x4+-parseInt(_0x1a8af(0x21b))/0x5*(parseInt(_0x1a8af(0x250))/0x6)+parseInt(_0x1a8af(0x223))/0x7+parseInt(_0x1a8af(0x231))/0x8*(parseInt(_0x1a8af(0x251))/0x9)+parseInt(_0x1a8af(0x209))/0xa*(parseInt(_0x1a8af(0x245))/0xb);if(_0x573d2c===_0x825a53)break;else _0x23a00b['push'](_0x23a00b['shift']());}catch(_0x4b0b03){_0x23a00b['push'](_0x23a00b['shift']());}}}(a0_0x1692,0xb947b));var __getOwnPropNames=Object[a0_0x2408cb(0x1d8)],__commonJS=(_0x351c76,_0x2ecb61)=>function _0x147d97(){return _0x2ecb61||(0x0,_0x351c76[__getOwnPropNames(_0x351c76)[0x0]])((_0x2ecb61={'exports':{}})['exports'],_0x2ecb61),_0x2ecb61['exports'];},require_logger=__commonJS({'../app/src/mitm/logger.js'(_0x2c16a6,_0x37c768){const _0x15a213=a0_0x2408cb;function _0x16cce2(){const _0x41405b=a0_0x1e5c;return new Date()['toLocaleTimeString'](_0x41405b(0x26d),{'hour12':![]});}var _0x4e003b=_0x5e9fc8=>console['log']('['+_0x16cce2()+_0x15a213(0x199)+_0x5e9fc8),_0x1613a6=_0x30f7e4=>console[_0x15a213(0x1f4)]('['+_0x16cce2()+']\x20❌\x20[MITM]\x20'+_0x30f7e4);_0x37c768[_0x15a213(0x256)]={'log':_0x4e003b,'err':_0x1613a6};}}),require_config=__commonJS({'../app/src/mitm/config.js'(_0x449a63,_0x39f732){const _0x3272d4=a0_0x2408cb;var _0x4db618=[_0x3272d4(0x1c6),_0x3272d4(0x1c9),_0x3272d4(0x1d2),'q.us-east-1.amazonaws.com',_0x3272d4(0x1d3)],_0x45ede2={'antigravity':[_0x3272d4(0x215),_0x3272d4(0x235)],'copilot':[_0x3272d4(0x246),_0x3272d4(0x267),_0x3272d4(0x1a2)],'kiro':['/generateAssistantResponse'],'cursor':[_0x3272d4(0x23d),_0x3272d4(0x1b3),_0x3272d4(0x1dd),_0x3272d4(0x1c5)]};function _0x5253fa(_0x1e03f8){const _0x455917=_0x3272d4,_0x534c1d=(_0x1e03f8||'')['split'](':')[0x0];if(_0x534c1d===_0x455917(0x1d2))return _0x455917(0x23a);if(_0x534c1d===_0x455917(0x1c6)||_0x534c1d===_0x455917(0x1c9))return _0x455917(0x273);if(_0x534c1d===_0x455917(0x1e4))return'kiro';if(_0x534c1d===_0x455917(0x1d3))return _0x455917(0x1a4);return null;}_0x39f732[_0x3272d4(0x256)]={'TARGET_HOSTS':_0x4db618,'URL_PATTERNS':_0x45ede2,'getToolForHost':_0x5253fa};}}),require_paths=__commonJS({'../app/src/mitm/paths.js'(_0x280dba,_0x21c4ae){const _0x45131d=a0_0x2408cb;var _0x45c777=require('path'),_0x3df890=require('os');function _0x7c8db1(){const _0x3ed6b7=a0_0x1e5c;if(process.env.DATA_DIR)return process.env.DATA_DIR;if(process[_0x3ed6b7(0x1ba)]===_0x3ed6b7(0x1ea))return _0x45c777[_0x3ed6b7(0x237)](process.env.APPDATA||_0x45c777[_0x3ed6b7(0x237)](_0x3df890[_0x3ed6b7(0x1b1)](),'AppData',_0x3ed6b7(0x234)),_0x3ed6b7(0x214));return _0x45c777[_0x3ed6b7(0x237)](_0x3df890[_0x3ed6b7(0x1b1)](),_0x3ed6b7(0x272));}var _0x1e77d8=_0x7c8db1(),_0x1aef3e=_0x45c777['join'](_0x1e77d8,_0x45131d(0x27f));_0x21c4ae[_0x45131d(0x256)]={'DATA_DIR':_0x1e77d8,'MITM_DIR':_0x1aef3e};}}),require_rootCA=__commonJS({'../app/src/mitm/cert/rootCA.js'(_0x342c55,_0x4defca){const _0x2c3a00=a0_0x2408cb;var _0x99e66d=require(_0x2c3a00(0x276)),_0x2e047e=require('fs'),_0x32836d=require(_0x2c3a00(0x1eb)),{MITM_DIR:_0x4b9fa8}=require_paths(),_0x356e98=_0x99e66d[_0x2c3a00(0x237)](_0x4b9fa8,'rootCA.key'),_0x123e40=_0x99e66d[_0x2c3a00(0x237)](_0x4b9fa8,'rootCA.crt');function _0x4f6de7(_0x52c5b8){const _0x17436a=_0x2c3a00;try{const _0x59dff4=_0x32836d[_0x17436a(0x229)][_0x17436a(0x255)](_0x2e047e[_0x17436a(0x1b9)](_0x52c5b8,_0x17436a(0x262))),_0x3f6ae5=new Date(Date[_0x17436a(0x241)]()+0x1e*0x18*0x3c*0x3c*0x3e8);return _0x59dff4[_0x17436a(0x1f7)]['notAfter']<_0x3f6ae5;}catch{return!![];}}async function _0x770086(){const _0x2a741b=_0x2c3a00,_0xb2d6c4=_0x2e047e[_0x2a741b(0x1f9)](_0x356e98)&&_0x2e047e['existsSync'](_0x123e40);if(_0xb2d6c4&&!_0x4f6de7(_0x123e40))return console[_0x2a741b(0x277)](_0x2a741b(0x1bd)),{'key':_0x356e98,'cert':_0x123e40};if(_0xb2d6c4){console[_0x2a741b(0x277)](_0x2a741b(0x1bb));try{_0x2e047e['unlinkSync'](_0x356e98);}catch{}try{_0x2e047e[_0x2a741b(0x219)](_0x123e40);}catch{}}!_0x2e047e[_0x2a741b(0x1f9)](_0x4b9fa8)&&_0x2e047e[_0x2a741b(0x225)](_0x4b9fa8,{'recursive':!![]});console[_0x2a741b(0x277)](_0x2a741b(0x265));const _0x84efc3=_0x32836d[_0x2a741b(0x229)]['rsa']['generateKeyPair'](0x800),_0x2488e1=_0x32836d[_0x2a741b(0x229)][_0x2a741b(0x1ee)]();_0x2488e1[_0x2a741b(0x257)]=_0x84efc3[_0x2a741b(0x257)],_0x2488e1[_0x2a741b(0x1ce)]='01',_0x2488e1[_0x2a741b(0x1f7)][_0x2a741b(0x27c)]=new Date(),_0x2488e1[_0x2a741b(0x1f7)][_0x2a741b(0x1e0)]=new Date(),_0x2488e1[_0x2a741b(0x1f7)]['notAfter']['setFullYear'](_0x2488e1[_0x2a741b(0x1f7)][_0x2a741b(0x27c)][_0x2a741b(0x1e9)]()+0xa);const _0x230071=[{'name':_0x2a741b(0x19c),'value':_0x2a741b(0x196)},{'name':_0x2a741b(0x1b4),'value':_0x2a741b(0x259)},{'name':'countryName','value':'US'}];_0x2488e1[_0x2a741b(0x1e8)](_0x230071),_0x2488e1[_0x2a741b(0x1b7)](_0x230071),_0x2488e1['setExtensions']([{'name':_0x2a741b(0x203),'cA':!![],'critical':!![]},{'name':_0x2a741b(0x1e1),'keyCertSign':!![],'cRLSign':!![],'critical':!![]},{'name':_0x2a741b(0x1d5)}]),_0x2488e1[_0x2a741b(0x25b)](_0x84efc3[_0x2a741b(0x228)],_0x32836d['md'][_0x2a741b(0x1e3)][_0x2a741b(0x23c)]());const _0x565405=_0x32836d[_0x2a741b(0x229)][_0x2a741b(0x1bf)](_0x84efc3['privateKey']),_0xb9de68=_0x32836d['pki'][_0x2a741b(0x253)](_0x2488e1);return _0x2e047e[_0x2a741b(0x1a5)](_0x356e98,_0x565405),_0x2e047e['writeFileSync'](_0x123e40,_0xb9de68),console[_0x2a741b(0x277)](_0x2a741b(0x242)),{'key':_0x356e98,'cert':_0x123e40};}function _0xbf216b(){const _0x189a74=_0x2c3a00;if(!_0x2e047e[_0x189a74(0x1f9)](_0x356e98)||!_0x2e047e[_0x189a74(0x1f9)](_0x123e40))throw new Error(_0x189a74(0x1da));const _0x37aeb9=_0x2e047e[_0x189a74(0x1b9)](_0x356e98,'utf8'),_0x503588=_0x2e047e[_0x189a74(0x1b9)](_0x123e40,'utf8');return{'key':_0x32836d['pki'][_0x189a74(0x1e7)](_0x37aeb9),'cert':_0x32836d[_0x189a74(0x229)][_0x189a74(0x255)](_0x503588)};}function _0x5beb09(_0x1f1756,_0x217547){const _0x38c9d1=_0x2c3a00,_0x37184b=_0x32836d['pki']['rsa'][_0x38c9d1(0x190)](0x800),_0x9ece6b=_0x32836d[_0x38c9d1(0x229)]['createCertificate']();return _0x9ece6b[_0x38c9d1(0x257)]=_0x37184b['publicKey'],_0x9ece6b['serialNumber']=Math[_0x38c9d1(0x189)](Math[_0x38c9d1(0x1d0)]()*0xf4240)['toString'](),_0x9ece6b[_0x38c9d1(0x1f7)][_0x38c9d1(0x27c)]=new Date(),_0x9ece6b[_0x38c9d1(0x1f7)][_0x38c9d1(0x1e0)]=new Date(),_0x9ece6b[_0x38c9d1(0x1f7)][_0x38c9d1(0x1e0)][_0x38c9d1(0x1ef)](_0x9ece6b[_0x38c9d1(0x1f7)][_0x38c9d1(0x27c)]['getFullYear']()+0x1),_0x9ece6b[_0x38c9d1(0x1e8)]([{'name':_0x38c9d1(0x19c),'value':_0x1f1756}]),_0x9ece6b[_0x38c9d1(0x1b7)](_0x217547[_0x38c9d1(0x280)][_0x38c9d1(0x1ad)][_0x38c9d1(0x240)]),_0x9ece6b[_0x38c9d1(0x260)]([{'name':'basicConstraints','cA':![]},{'name':_0x38c9d1(0x1e1),'digitalSignature':!![],'keyEncipherment':!![]},{'name':_0x38c9d1(0x194),'serverAuth':!![],'clientAuth':!![]},{'name':_0x38c9d1(0x220),'altNames':[{'type':0x2,'value':_0x1f1756},{'type':0x2,'value':'*.'+_0x1f1756}]}]),_0x9ece6b[_0x38c9d1(0x25b)](_0x217547[_0x38c9d1(0x1fa)],_0x32836d['md'][_0x38c9d1(0x1e3)][_0x38c9d1(0x23c)]()),{'key':_0x32836d[_0x38c9d1(0x229)][_0x38c9d1(0x1bf)](_0x37184b[_0x38c9d1(0x228)]),'cert':_0x32836d[_0x38c9d1(0x229)][_0x38c9d1(0x253)](_0x9ece6b)};}_0x4defca['exports']={'generateRootCA':_0x770086,'loadRootCA':_0xbf216b,'generateLeafCert':_0x5beb09,'isCertExpired':_0x4f6de7,'ROOT_CA_CERT_PATH':_0x123e40,'ROOT_CA_KEY_PATH':_0x356e98};}}),require_generate=__commonJS({'../app/src/mitm/cert/generate.js'(_0x39f23f,_0x378656){const _0x1876b5=a0_0x2408cb;var _0x22335b=require(_0x1876b5(0x276)),_0x385de5=require('fs'),{MITM_DIR:_0x4e5077}=require_paths(),{generateRootCA:_0x2fd526,loadRootCA:_0xcf92fa,generateLeafCert:_0x2d8fbe}=require_rootCA();async function _0x4df7f6(){return await _0x2fd526();}function _0x174b05(_0x3f8890){const _0x40d071=_0x1876b5;try{const _0x3cab83=_0xcf92fa(),_0x45b84f=_0x2d8fbe(_0x3f8890,_0x3cab83);return{'key':_0x45b84f[_0x40d071(0x1fa)],'cert':_0x45b84f[_0x40d071(0x280)]};}catch(_0x103308){return console[_0x40d071(0x1f4)](_0x40d071(0x201)+_0x3f8890+':',_0x103308[_0x40d071(0x1c8)]),null;}}_0x378656[_0x1876b5(0x256)]={'generateCert':_0x4df7f6,'getCertForDomain':_0x174b05};}}),require_base=__commonJS({'../app/src/mitm/handlers/base.js'(_0x502bc7,_0x1d1968){const _0x257dcf=a0_0x2408cb;var {log:_0x12bc09,err:_0x534756}=require_logger(),_0x253189=_0x257dcf(0x22a),_0x26fefd=process.env.ROUTER_API_KEY;async function _0x1d1d33(_0x49926b,_0x37dd7b=_0x257dcf(0x202)){const _0x480f3e=_0x257dcf,_0x30db70=await fetch(''+_0x253189+_0x37dd7b,{'method':'POST','headers':{'Content-Type':_0x480f3e(0x19b),..._0x26fefd&&{'Authorization':_0x480f3e(0x19d)+_0x26fefd}},'body':JSON[_0x480f3e(0x1f3)](_0x49926b)});if(!_0x30db70['ok']){const _0x426279=await _0x30db70['text']()[_0x480f3e(0x192)](()=>'');throw new Error('['+_0x30db70[_0x480f3e(0x22b)]+_0x480f3e(0x188)+_0x426279);}return _0x30db70;}async function _0x4ed9bd(_0x1c6706,_0x496b0e){const _0x3c7294=_0x257dcf,_0x9bc52c=_0x1c6706[_0x3c7294(0x217)][_0x3c7294(0x1b6)](_0x3c7294(0x213))||_0x3c7294(0x19b),_0x295eb4={'Content-Type':_0x9bc52c,'Cache-Control':_0x3c7294(0x27a),'Connection':_0x3c7294(0x282)};if(_0x9bc52c['includes'](_0x3c7294(0x1fb)))_0x295eb4[_0x3c7294(0x18c)]='no';_0x496b0e['writeHead'](0xc8,_0x295eb4);if(!_0x1c6706['body']){_0x496b0e[_0x3c7294(0x1ca)](await _0x1c6706[_0x3c7294(0x1cc)]()['catch'](()=>''));return;}const _0x53c4d9=_0x1c6706['body'][_0x3c7294(0x21a)](),_0x26a9c8=new TextDecoder();while(!![]){const {done:_0x16c468,value:_0x408852}=await _0x53c4d9['read']();if(_0x16c468){_0x496b0e[_0x3c7294(0x1ca)]();break;}_0x496b0e[_0x3c7294(0x247)](_0x26a9c8['decode'](_0x408852,{'stream':!![]}));}}_0x1d1968[_0x257dcf(0x256)]={'fetchRouter':_0x1d1d33,'pipeSSE':_0x4ed9bd};}}),require_antigravity=__commonJS({'../app/src/mitm/handlers/antigravity.js'(_0x57af63,_0x4fc556){const _0x5df4fe=a0_0x2408cb;var {err:_0x3eb0de}=require_logger(),{fetchRouter:_0x316b75,pipeSSE:_0x150239}=require_base();async function _0x3a9622(_0x13b0ad,_0x34a8c6,_0x3ad1b5,_0x3ca245){const _0x6c692c=a0_0x1e5c;try{const _0x12bc1e=JSON['parse'](_0x3ad1b5[_0x6c692c(0x1be)]());_0x12bc1e['model']=_0x3ca245;const _0x5aac80=await _0x316b75(_0x12bc1e);await _0x150239(_0x5aac80,_0x34a8c6);}catch(_0x3d3493){_0x3eb0de(_0x6c692c(0x1fe)+_0x3d3493[_0x6c692c(0x1c8)]);if(!_0x34a8c6['headersSent'])_0x34a8c6[_0x6c692c(0x1cb)](0x1f4,{'Content-Type':'application/json'});_0x34a8c6['end'](JSON[_0x6c692c(0x1f3)]({'error':{'message':_0x3d3493[_0x6c692c(0x1c8)],'type':_0x6c692c(0x1ec)}}));}}_0x4fc556[_0x5df4fe(0x256)]={'intercept':_0x3a9622};}}),require_copilot=__commonJS({'../app/src/mitm/handlers/copilot.js'(_0x20a4f6,_0x270a46){const _0x57b025=a0_0x2408cb;var {err:_0x50f419}=require_logger(),{fetchRouter:_0x54dd43,pipeSSE:_0x33dbbb}=require_base(),_0x2f1d1f={'/chat/completions':_0x57b025(0x202),'/v1/messages':_0x57b025(0x267),'/responses':_0x57b025(0x222)};function _0x593c98(_0x5763c2){const _0x81a281=_0x57b025;for(const [_0x3c23c6,_0x11151f]of Object[_0x81a281(0x233)](_0x2f1d1f)){if(_0x5763c2[_0x81a281(0x26f)](_0x3c23c6))return _0x11151f;}return _0x81a281(0x202);}async function _0x3f942b(_0x292aef,_0x23966f,_0x48b8de,_0x362956){const _0x218202=_0x57b025;try{const _0x49763c=JSON[_0x218202(0x1f6)](_0x48b8de[_0x218202(0x1be)]());_0x49763c['model']=_0x362956;const _0x197335=_0x593c98(_0x292aef[_0x218202(0x1af)]),_0x5b5e80=await _0x54dd43(_0x49763c,_0x197335);await _0x33dbbb(_0x5b5e80,_0x23966f);}catch(_0x13c3d2){_0x50f419(_0x218202(0x258)+_0x13c3d2[_0x218202(0x1c8)]);if(!_0x23966f['headersSent'])_0x23966f['writeHead'](0x1f4,{'Content-Type':'application/json'});_0x23966f['end'](JSON[_0x218202(0x1f3)]({'error':{'message':_0x13c3d2['message'],'type':_0x218202(0x1ec)}}));}}_0x270a46[_0x57b025(0x256)]={'intercept':_0x3f942b};}}),require_kiro=__commonJS({'../app/src/mitm/dev/kiro.js'(_0x4d115b,_0xf922f0){const _0x5384d3=a0_0x2408cb;var _0x446631=require(_0x5384d3(0x243)),{log:_0x2a251b,err:_0x57eb97}=require_logger(),{fetchRouter:_0x42c076}=require_base();function _0x118605(_0x25f323){const _0x356ab5=_0x5384d3;if(typeof _0x25f323!=='string')return![];return _0x25f323[_0x356ab5(0x26f)](_0x356ab5(0x218))||_0x25f323[_0x356ab5(0x26f)](_0x356ab5(0x1f2));}function _0x50df25(_0x3beb5b,_0x534d9e){const _0x371c3f=_0x5384d3,_0x14de10=_0x3beb5b[_0x371c3f(0x264)]||{},_0x39cb82=_0x14de10[_0x371c3f(0x205)]||[],_0x1c00e6=_0x14de10[_0x371c3f(0x24c)]?.[_0x371c3f(0x23e)],_0x1ffed3=[];let _0x850246=![];for(const _0x478148 of _0x39cb82){if(_0x478148[_0x371c3f(0x23e)]){const _0x270619=_0x478148[_0x371c3f(0x23e)],_0xea2dc7=(_0x270619[_0x371c3f(0x19f)]||'')['trim'](),_0x16f607=_0x270619[_0x371c3f(0x281)]?.[_0x371c3f(0x25e)];if(!_0x850246&&_0x118605(_0xea2dc7)){_0x1ffed3[_0x371c3f(0x1d4)]({'role':_0x371c3f(0x244),'content':_0xea2dc7}),_0x850246=!![];if(_0x16f607?.[_0x371c3f(0x1f5)]>0x0)for(const _0x8c4aa of _0x16f607){_0x1ffed3['push']({'role':_0x371c3f(0x204),'tool_call_id':_0x8c4aa[_0x371c3f(0x263)],'content':_0x8c4aa['content']?.[_0x371c3f(0x25f)](_0x590f56=>_0x590f56[_0x371c3f(0x1cc)])[_0x371c3f(0x237)]('\x0a')||''});}continue;}if(_0x16f607?.[_0x371c3f(0x1f5)]>0x0)for(const _0x275ec3 of _0x16f607){_0x1ffed3[_0x371c3f(0x1d4)]({'role':_0x371c3f(0x204),'tool_call_id':_0x275ec3[_0x371c3f(0x263)],'content':_0x275ec3[_0x371c3f(0x19f)]?.[_0x371c3f(0x25f)](_0xab7904=>_0xab7904[_0x371c3f(0x1cc)])[_0x371c3f(0x237)]('\x0a')||''});}if(_0xea2dc7)_0x1ffed3['push']({'role':'user','content':_0xea2dc7});}else{if(_0x478148[_0x371c3f(0x207)]){const _0x243210=_0x478148[_0x371c3f(0x207)],_0x5705b1={'role':_0x371c3f(0x20d),'content':_0x243210[_0x371c3f(0x19f)]||''};_0x243210[_0x371c3f(0x1b0)]?.[_0x371c3f(0x1f5)]>0x0&&(_0x5705b1[_0x371c3f(0x1de)]=_0x243210[_0x371c3f(0x1b0)][_0x371c3f(0x25f)](_0x4d25c7=>({'id':_0x4d25c7['toolUseId'],'type':_0x371c3f(0x1c0),'function':{'name':_0x4d25c7[_0x371c3f(0x22d)],'arguments':JSON[_0x371c3f(0x1f3)](_0x4d25c7[_0x371c3f(0x1ff)]||{})}}))),_0x1ffed3[_0x371c3f(0x1d4)](_0x5705b1);}}}if(_0x1c00e6){const _0x173b63=_0x1c00e6[_0x371c3f(0x281)]?.[_0x371c3f(0x25e)];if(_0x173b63?.['length']>0x0)for(const _0x2b2f8f of _0x173b63){_0x1ffed3[_0x371c3f(0x1d4)]({'role':'tool','tool_call_id':_0x2b2f8f['toolUseId'],'content':_0x2b2f8f[_0x371c3f(0x19f)]?.[_0x371c3f(0x25f)](_0x4b2916=>_0x4b2916[_0x371c3f(0x1cc)])[_0x371c3f(0x237)]('\x0a')||''});}const _0x2e7ad6=(_0x1c00e6[_0x371c3f(0x19f)]||'')['trim']();if(_0x2e7ad6)_0x1ffed3['push']({'role':'user','content':_0x2e7ad6});}const _0x376280={'model':_0x534d9e,'messages':_0x1ffed3,'stream':!![],'stream_options':{'include_usage':!![]}},_0x2c4dab=_0x1c00e6?.[_0x371c3f(0x281)]?.['tools'];return _0x2c4dab?.['length']>0x0&&(_0x376280['tools']=_0x2c4dab[_0x371c3f(0x25f)](_0x175516=>({'type':_0x371c3f(0x1c0),'function':{'name':_0x175516[_0x371c3f(0x193)][_0x371c3f(0x22d)],'description':_0x175516[_0x371c3f(0x193)]['description']||_0x175516[_0x371c3f(0x193)][_0x371c3f(0x22d)],'parameters':_0x175516[_0x371c3f(0x193)][_0x371c3f(0x275)]?.[_0x371c3f(0x1c1)]||{'type':_0x371c3f(0x1b8),'properties':{}}}}))),_0x376280;}function _0x29276b(_0x5408cc,_0x32f3e4){const _0x5b2fcf=_0x5384d3,_0x119640=Buffer[_0x5b2fcf(0x24d)](JSON[_0x5b2fcf(0x1f3)](_0x32f3e4),_0x5b2fcf(0x262)),_0x16889a=[[':event-type',_0x5408cc],[_0x5b2fcf(0x191),_0x5b2fcf(0x19b)],[_0x5b2fcf(0x249),'event']],_0x578929=[];for(const [_0x4b16d4,_0x525ea6]of _0x16889a){const _0x14a065=Buffer[_0x5b2fcf(0x24d)](_0x4b16d4,'utf8'),_0x9a654f=Buffer[_0x5b2fcf(0x24d)](_0x525ea6,_0x5b2fcf(0x262)),_0x4e25f2=Buffer[_0x5b2fcf(0x25a)](0x1+_0x14a065[_0x5b2fcf(0x1f5)]+0x1+0x2+_0x9a654f[_0x5b2fcf(0x1f5)]);let _0x3a16f9=0x0;_0x4e25f2[_0x3a16f9++]=_0x14a065[_0x5b2fcf(0x1f5)],_0x14a065['copy'](_0x4e25f2,_0x3a16f9),_0x3a16f9+=_0x14a065[_0x5b2fcf(0x1f5)],_0x4e25f2[_0x3a16f9++]=0x7,_0x4e25f2[_0x5b2fcf(0x25d)](_0x9a654f[_0x5b2fcf(0x1f5)],_0x3a16f9),_0x3a16f9+=0x2,_0x9a654f['copy'](_0x4e25f2,_0x3a16f9),_0x578929[_0x5b2fcf(0x1d4)](_0x4e25f2);}const _0x31538a=Buffer['concat'](_0x578929),_0x102851=0x4+0x4+0x4+_0x31538a['length']+_0x119640[_0x5b2fcf(0x1f5)]+0x4,_0x17729b=Buffer[_0x5b2fcf(0x25a)](_0x102851);let _0x3060b5=0x0;_0x17729b[_0x5b2fcf(0x248)](_0x102851,_0x3060b5),_0x3060b5+=0x4,_0x17729b['writeUInt32BE'](_0x31538a[_0x5b2fcf(0x1f5)],_0x3060b5),_0x3060b5+=0x4;const _0x533b8d=_0x446631[_0x5b2fcf(0x1f1)](_0x17729b[_0x5b2fcf(0x274)](0x0,0x8));_0x17729b[_0x5b2fcf(0x248)](_0x533b8d,_0x3060b5),_0x3060b5+=0x4,_0x31538a['copy'](_0x17729b,_0x3060b5),_0x3060b5+=_0x31538a[_0x5b2fcf(0x1f5)],_0x119640[_0x5b2fcf(0x236)](_0x17729b,_0x3060b5),_0x3060b5+=_0x119640[_0x5b2fcf(0x1f5)];const _0x3b7898=_0x446631[_0x5b2fcf(0x1f1)](_0x17729b[_0x5b2fcf(0x274)](0x0,_0x102851-0x4));return _0x17729b['writeUInt32BE'](_0x3b7898,_0x3060b5),_0x17729b;}async function _0x39b78b(_0x17e2c9,_0x160c62,_0x4a6ab5,_0x1f8976,_0xc07046){const _0x5704ea=_0x5384d3;try{const _0x2d1aba=JSON[_0x5704ea(0x1f6)](_0x4a6ab5[_0x5704ea(0x1be)]()),_0x5dd905=_0x2d1aba[_0x5704ea(0x264)]?.[_0x5704ea(0x230)]||_0x5704ea(0x1a8);_0x2a251b(_0x5704ea(0x1b5)+_0x5dd905+_0x5704ea(0x24b)+_0x1f8976);const _0x1df56f=_0x50df25(_0x2d1aba,_0x1f8976);_0x2a251b(_0x5704ea(0x1f8)+_0x1df56f[_0x5704ea(0x1a0)][_0x5704ea(0x1f5)]+'\x20|\x20tools='+(_0x1df56f[_0x5704ea(0x19e)]?.[_0x5704ea(0x1f5)]||0x0));_0x1df56f[_0x5704ea(0x19e)]?.[_0x5704ea(0x1f5)]&&_0x2a251b('🔷\x20[KIRO]\x20tools:\x20'+_0x1df56f[_0x5704ea(0x19e)][_0x5704ea(0x25f)](_0x3aa91d=>_0x3aa91d[_0x5704ea(0x1c0)][_0x5704ea(0x22d)])['join'](',\x20'));if(!_0x1df56f[_0x5704ea(0x1a0)]['length'])return _0x57eb97(_0x5704ea(0x1a9)),_0xc07046(_0x17e2c9,_0x160c62,_0x4a6ab5);const _0x3dd210=await _0x42c076(_0x1df56f);_0x160c62['writeHead'](0xc8,{'Content-Type':_0x5704ea(0x20e),'Cache-Control':_0x5704ea(0x27a),'Connection':_0x5704ea(0x282),'Transfer-Encoding':'chunked','x-amzn-RequestId':_0x17e2c9[_0x5704ea(0x217)][_0x5704ea(0x27b)]||_0x5dd905,'x-amzn-codewhisperer-conversation-id':_0x5dd905,'X-XSS-Protection':'1;\x20mode=block','X-Frame-Options':_0x5704ea(0x269),'X-Content-Type-Options':_0x5704ea(0x195)});const _0x4a41f3=_0x3dd210[_0x5704ea(0x1e2)][_0x5704ea(0x21a)](),_0x360058=new TextDecoder();let _0x882de7='',_0x516944=![];const _0x2bfbb2={};let _0x438897=null;while(!![]){const {done:_0x11792a,value:_0x33650d}=await _0x4a41f3[_0x5704ea(0x26a)]();if(_0x11792a)break;_0x882de7+=_0x360058['decode'](_0x33650d,{'stream':!![]});const _0x29c0e0=_0x882de7['split']('\x0a');_0x882de7=_0x29c0e0[_0x5704ea(0x252)]();for(const _0x1b68c5 of _0x29c0e0){if(!_0x1b68c5[_0x5704ea(0x254)]('data:\x20'))continue;const _0x5801e3=_0x1b68c5[_0x5704ea(0x274)](0x6)['trim']();if(_0x5801e3===_0x5704ea(0x232))continue;let _0x1fd750;try{_0x1fd750=JSON[_0x5704ea(0x1f6)](_0x5801e3);}catch{continue;}if(_0x1fd750[_0x5704ea(0x1c2)])_0x438897=_0x1fd750['usage'];const _0x1ffb4f=_0x1fd750[_0x5704ea(0x238)]?.[0x0];if(!_0x1ffb4f)continue;const _0x137358=_0x1ffb4f[_0x5704ea(0x1ac)]||{},_0x1e070c=_0x1ffb4f['finish_reason'];_0x137358[_0x5704ea(0x19f)]&&_0x160c62[_0x5704ea(0x247)](_0x29276b(_0x5704ea(0x1c4),{'content':_0x137358[_0x5704ea(0x19f)],'modelId':_0x1f8976}));if(_0x137358[_0x5704ea(0x1de)]){_0x516944=!![];for(const _0x9cac8b of _0x137358[_0x5704ea(0x1de)]){const _0x578c6f=_0x9cac8b[_0x5704ea(0x20f)]??0x0;if(!_0x2bfbb2[_0x578c6f])_0x2bfbb2[_0x578c6f]={'id':'','name':'','args':''};if(_0x9cac8b['id'])_0x2bfbb2[_0x578c6f]['id']=_0x9cac8b['id'];if(_0x9cac8b[_0x5704ea(0x1c0)]?.[_0x5704ea(0x22d)])_0x2bfbb2[_0x578c6f]['name']=_0x9cac8b['function']['name'];if(_0x9cac8b[_0x5704ea(0x1c0)]?.[_0x5704ea(0x211)])_0x2bfbb2[_0x578c6f][_0x5704ea(0x1df)]+=_0x9cac8b[_0x5704ea(0x1c0)]['arguments'];}}if(_0x1e070c){if(_0x516944){for(const _0x162881 of Object[_0x5704ea(0x20b)](_0x2bfbb2)){_0x2a251b(_0x5704ea(0x20c)+_0x162881['id']+'\x20name='+_0x162881['name']),_0x160c62[_0x5704ea(0x247)](_0x29276b(_0x5704ea(0x18b),{'name':_0x162881[_0x5704ea(0x22d)],'toolUseId':_0x162881['id']}));const _0x4ce3da=_0x162881[_0x5704ea(0x1df)]||'{}',_0x5cbbb2=0x20;for(let _0x35915a=0x0;_0x35915a<_0x4ce3da[_0x5704ea(0x1f5)];_0x35915a+=_0x5cbbb2){_0x160c62[_0x5704ea(0x247)](_0x29276b('toolUseEvent',{'input':_0x4ce3da[_0x5704ea(0x274)](_0x35915a,_0x35915a+_0x5cbbb2),'name':_0x162881['name'],'toolUseId':_0x162881['id']}));}_0x160c62[_0x5704ea(0x247)](_0x29276b(_0x5704ea(0x18b),{'name':_0x162881['name'],'stop':!![],'toolUseId':_0x162881['id']}));}_0x160c62[_0x5704ea(0x247)](_0x29276b('assistantResponseEvent',{'content':'','modelId':_0x1f8976}));}const _0x320fd8=_0x438897?.[_0x5704ea(0x24e)]||0x0,_0x578a7e=_0x438897?.[_0x5704ea(0x221)]||0x0,_0xf04408=_0x320fd8>0x0?_0x320fd8/0x30d40*0x64:1.5,_0x53053f=_0x578a7e>0x0?_0x578a7e*0.000004:0.001;_0x160c62[_0x5704ea(0x247)](_0x29276b(_0x5704ea(0x19a),{'contextUsagePercentage':_0xf04408})),_0x160c62[_0x5704ea(0x247)](_0x29276b(_0x5704ea(0x226),{'unit':'credit','unitPlural':_0x5704ea(0x224),'usage':_0x53053f})),_0x2a251b(_0x5704ea(0x279)+_0x1e070c+_0x5704ea(0x278)+_0x516944);}}}_0x160c62[_0x5704ea(0x1ca)]();}catch(_0x10487b){_0x57eb97(_0x5704ea(0x1e6)+_0x10487b['message']);if(!_0x160c62[_0x5704ea(0x208)])_0x160c62[_0x5704ea(0x1cb)](0x1f4,{'Content-Type':_0x5704ea(0x19b)});_0x160c62[_0x5704ea(0x1ca)](JSON[_0x5704ea(0x1f3)]({'error':{'message':_0x10487b[_0x5704ea(0x1c8)],'type':_0x5704ea(0x1ec)}}));}}_0xf922f0[_0x5384d3(0x256)]={'intercept':_0x39b78b};}}),https=require(a0_0x2408cb(0x1d9)),fs=require('fs'),path=require(a0_0x2408cb(0x276)),dns=require(a0_0x2408cb(0x1fd)),{promisify}=require('util'),{log,err}=require_logger(),{TARGET_HOSTS,URL_PATTERNS,getToolForHost}=require_config(),{DATA_DIR,MITM_DIR}=require_paths(),{getCertForDomain}=require_generate(),DB_FILE=path[a0_0x2408cb(0x237)](DATA_DIR,a0_0x2408cb(0x21e)),LOCAL_PORT=0x1bb,ENABLE_FILE_LOG=![],LOG_DIR=path[a0_0x2408cb(0x237)](DATA_DIR,a0_0x2408cb(0x18f),a0_0x2408cb(0x27f)),INTERNAL_REQUEST_HEADER={'name':a0_0x2408cb(0x206),'value':'local'};if(ENABLE_FILE_LOG&&!fs[a0_0x2408cb(0x1f9)](LOG_DIR))fs[a0_0x2408cb(0x225)](LOG_DIR,{'recursive':!![]});var handlers={'antigravity':require_antigravity(),'copilot':require_copilot(),'kiro':require_kiro()},certCache=new Map();function sniCallback(_0x44cbb8,_0x451404){const _0x38eb95=a0_0x2408cb;try{if(certCache['has'](_0x44cbb8))return _0x451404(null,certCache[_0x38eb95(0x1b6)](_0x44cbb8));const _0x77b3a0=getCertForDomain(_0x44cbb8);if(!_0x77b3a0)return _0x451404(new Error(_0x38eb95(0x201)+_0x44cbb8));const _0x239d04=require(_0x38eb95(0x25c))[_0x38eb95(0x26b)]({'key':_0x77b3a0[_0x38eb95(0x1fa)],'cert':_0x77b3a0[_0x38eb95(0x280)]});certCache[_0x38eb95(0x27d)](_0x44cbb8,_0x239d04),log(_0x38eb95(0x1c7)+_0x44cbb8),_0x451404(null,_0x239d04);}catch(_0x1f7a31){err(_0x38eb95(0x1d6)+_0x44cbb8+':\x20'+_0x1f7a31[_0x38eb95(0x1c8)]),_0x451404(_0x1f7a31);}}var sslOptions;try{sslOptions={'key':fs['readFileSync'](path['join'](MITM_DIR,a0_0x2408cb(0x1bc))),'cert':fs['readFileSync'](path[a0_0x2408cb(0x237)](MITM_DIR,a0_0x2408cb(0x1a6))),'SNICallback':sniCallback};}catch(a0_0x42d8c7){err(a0_0x2408cb(0x22e)+a0_0x42d8c7['message']),process['exit'](0x1);}var cachedTargetIPs={},CACHE_TTL_MS=0x5*0x3c*0x3e8;async function resolveTargetIP(_0x3e3d73){const _0x203f75=a0_0x2408cb,_0x13b94f=cachedTargetIPs[_0x3e3d73];if(_0x13b94f&&Date['now']()-_0x13b94f['ts']<CACHE_TTL_MS)return _0x13b94f['ip'];const _0x131f78=new dns[(_0x203f75(0x227))]();_0x131f78[_0x203f75(0x261)]([_0x203f75(0x22c)]);const _0x4737df=promisify(_0x131f78[_0x203f75(0x23b)][_0x203f75(0x1fc)](_0x131f78)),_0x4dc92a=await _0x4737df(_0x3e3d73);return cachedTargetIPs[_0x3e3d73]={'ip':_0x4dc92a[0x0],'ts':Date[_0x203f75(0x241)]()},cachedTargetIPs[_0x3e3d73]['ip'];}function collectBodyRaw(_0x4d5591){return new Promise((_0x532ce6,_0x408a9a)=>{const _0x422ca7=a0_0x1e5c,_0x3ef363=[];_0x4d5591['on']('data',_0x7fe9e1=>_0x3ef363[_0x422ca7(0x1d4)](_0x7fe9e1)),_0x4d5591['on'](_0x422ca7(0x1ca),()=>_0x532ce6(Buffer[_0x422ca7(0x23f)](_0x3ef363))),_0x4d5591['on'](_0x422ca7(0x1f4),_0x408a9a);});}function extractModel(_0x8e9364,_0x31909c){const _0x359d7c=a0_0x2408cb,_0x371797=_0x8e9364[_0x359d7c(0x18a)](/\/models\/([^/:]+)/);if(_0x371797)return _0x371797[0x1];try{const _0x4c2877=JSON[_0x359d7c(0x1f6)](_0x31909c[_0x359d7c(0x1be)]());if(_0x4c2877['conversationState'])return _0x4c2877[_0x359d7c(0x264)][_0x359d7c(0x24c)]?.[_0x359d7c(0x23e)]?.[_0x359d7c(0x21d)]||null;return _0x4c2877[_0x359d7c(0x1db)]||null;}catch{return null;}}function getMappedModel(_0x6b52f8,_0x2c1218){const _0x37c9d4=a0_0x2408cb;if(!_0x2c1218)return null;try{if(!fs[_0x37c9d4(0x1f9)](DB_FILE))return null;const _0x5f344e=JSON[_0x37c9d4(0x1f6)](fs[_0x37c9d4(0x1b9)](DB_FILE,'utf-8')),_0x1470ef=_0x5f344e[_0x37c9d4(0x1e5)]?.[_0x6b52f8];if(!_0x1470ef)return null;if(_0x1470ef[_0x2c1218])return _0x1470ef[_0x2c1218];const _0x457889=Object[_0x37c9d4(0x268)](_0x1470ef)[_0x37c9d4(0x21c)](_0xcfdcdb=>_0xcfdcdb&&_0x1470ef[_0xcfdcdb]&&(_0x2c1218[_0x37c9d4(0x254)](_0xcfdcdb)||_0xcfdcdb[_0x37c9d4(0x254)](_0x2c1218)));return _0x457889?_0x1470ef[_0x457889]:null;}catch{return null;}}function saveRequestLog(_0x1bbac7,_0x48ea71){const _0x5b5163=a0_0x2408cb;if(!ENABLE_FILE_LOG)return;try{const _0x11e3ac=new Date()[_0x5b5163(0x1cf)]()[_0x5b5163(0x26e)](/[:.]/g,'-'),_0x5acc58=_0x1bbac7['replace'](/[^a-zA-Z0-9]/g,'_')['substring'](0x0,0x3c),_0x45ccbe=JSON[_0x5b5163(0x1f6)](_0x48ea71[_0x5b5163(0x1be)]());fs[_0x5b5163(0x1a5)](path['join'](LOG_DIR,_0x11e3ac+'_'+_0x5acc58+_0x5b5163(0x1ed)),JSON[_0x5b5163(0x1f3)](_0x45ccbe,null,0x2));}catch{}}function a0_0x1692(){const _0x5d0792=['Dg9VBfvZzxm','Ag9TzwrPCG','qMfKieDHDgv3yxK','l1j1BLntrq','B3jNyw5PEMf0Aw9UtMfTzq','8j+uTYbBs0Lst10GAw50zxjJzxb0ihWGy29UDMvYC2f0Aw9Uswq9','z2v0','C2v0sxnZDwvY','B2jQzwn0','CMvHzezPBgvtEw5J','CgXHDgzVCM0','8j+uKcbsB290ienbigv4CgLYzwqGB3iGzxHWAxjPBMCGC29VBIdIGjqGCMvNzw5LCMf0Aw5NlI4U','CM9VDenblMTLEq','4PYfifjVB3qGq0eGywXYzwfKEsbLEgLZDhm','Dg9tDhjPBMC','ChjPDMf0zuTLEvrVugvT','zNvUy3rPB24','ANnVBG','DxnHz2u','ihWG','yxnZAxn0yw50uMvZCg9UC2vfDMvUDa','l1j1BG','zgfPBhKTy2XVDwrJB2rLlxbHlMDVB2DSzwfWAxmUy29T','8j+uKcbdzxj0igDLBMvYyxrLzdOG','BwvZC2fNzq','y2XVDwrJB2rLlxbHlMDVB2DSzwfWAxmUy29T','zw5K','D3jPDgvizwfK','Dgv4Da','iokgKIa','C2vYAwfStNvTyMvY','Dg9ju09tDhjPBMC','CMfUzg9T','xsbTB2rLBd0I','yxbPlMLUzgL2Awr1ywWUz2L0AhvIy29WAwXVDc5JB20','yxbPmI5JDxjZB3iUC2G','ChvZAa','C3vIAMvJDeTLEuLKzw50AwzPzxi','u05jigvYCM9YigzVCIa','y2XVC2u','z2v0t3DUuhjVCgvYDhLoyw1LCW','Ahr0Chm','uM9VDcbdqsbUB3qGzM91BMqUieDLBMvYyxrLigL0igzPCNn0lG','Bw9KzwW','ugfZC3rOCM91z2GGzxjYB3i6ia','l1j1BLbVBgW','Dg9VBf9JywXSCW','yxjNCW','BM90qwz0zxi','A2v5vxnHz2u','yM9KEq','C2HHmJu2','Cs51CY1Lyxn0lteUyw1HEM9UyxDZlMnVBq','BwL0BufSAwfZ','w0TjuK9Dia','ChjPDMf0zuTLEuzYB21qzw0','C2v0u3vIAMvJDa','z2v0rNvSBfLLyxi','D2LUmZi','BM9Kzs1MB3jNzq','BwL0Bv9LCNjVCG','lMPZB24','y3jLyxrLq2vYDgLMAwnHDgu','C2v0rNvSBfLLyxi','C3bSAxq','y3jJmZi','ww91igfYzsbHBIbPBNrLBNqGy2XHC3nPzMLLCG','C3rYAw5NAwz5','zxjYB3i','BgvUz3rO','CgfYC2u','DMfSAwrPDhK','8j+uTYbBs0Lst10Gy29UDMvYDgvKihWGBwvZC2fNzxm9','zxHPC3rZu3LUyW','A2v5','Dgv4Dc9LDMvUDc1ZDhjLyw0','yMLUza','zg5Z','w2fUDgLNCMf2Axr5xsa','Aw5WDxq','mxvTyKPoDa','rMfPBgvKihrVigDLBMvYyxrLignLCNqGzM9Yia','l3yXl2nOyxqVy29TCgXLDgLVBNm','yMfZAwndB25ZDhjHAw50CW','Dg9VBa','AgLZDg9YEq','Ec1Yzxf1zxn0lxnVDxjJzq','yxnZAxn0yw50uMvZCg9UC2vnzxnZywDL','AgvHzgvYC1nLBNq','mtGXmda2mefWzLjfsW','mtu0ode5nKrysvPpDq','DMfSDwvZ','8j+uTYbBs0Lst10GDg9VBfvZzuv2zw50ihWGAwq9','yxnZAxn0yw50','yxbWBgLJyxrPB24VDM5KlMfTyxPVBI5LDMvUDhn0CMvHBq','Aw5KzxG','igfSCMvHzhKGAw4GDxnL','yxjNDw1LBNrZ','CMvXDwvZDa','y29UDgvUDc10ExbL','oxjVDxrLCG','oMDLBMvYyxrLq29UDgvUDa','zgf0yq','AgvHzgvYCW','pgLKzw50Axr5pG','Dw5SAw5Ru3LUyW','z2v0uMvHzgvY','mJm1uwjbzg90','zMLUza','Bw9KzwXjza','zgiUANnVBG','rufdq0vt','C3vIAMvJDefSDe5HBwu','Dg90ywXFDg9Rzw5Z','l3yXl3jLC3bVBNnLCW','mJiXody1n1HdwMjOuW','y3jLzgL0CW','BwTKAxjtEw5J','Bwv0zxjPBMDfDMvUDa','uMvZB2X2zxi','ChjPDMf0zuTLEq','CgTP','Ahr0CdOVl2XVy2fSAg9ZDdOYmdeYoa','C3rHDhvZ','oc44lJGUoa','BMfTzq','uM9VDcbdqsbUB3qGzM91BMq6ia','ug9YDca','y29UDMvYC2f0Aw9Uswq','mti1nNzeCxzgqG','w0rptKvD','zw50CMLLCW','uM9HBwLUzW','oNn0CMvHBuDLBMvYyxrLq29UDgvUDa','y29WEq','AM9PBG','y2HVAwnLCW','ihWGyM9KEuXLBJ0','y29WAwXVDa','CMvZB2X2ztq','y3jLyxrL','l0jPzgLbChbLBMq','DxnLCKLUChv0twvZC2fNzq','y29Uy2f0','yxr0CMLIDxrLCW','BM93','4PYfifjVB3qGq0eGz2vUzxjHDgvKihn1y2nLC3nMDwXSEq','EMXPyG','C3LZDgvT','ndrnvhPNtLy','l2nOyxqVy29TCgXLDgLVBNm','D3jPDgu','D3jPDgvvsw50mZjcrq','oM1LC3nHz2uTDhLWzq','mZK0mZG5ouj6uMPiqq','ihWGBw9KzwW9','y3vYCMvUDe1LC3nHz2u','zNjVBq','ChjVBxb0x3rVA2vUCW','y3jLyxrLu2vYDMvY','ntu3ntHWv1jJy2W','mZm4nfDrC2LtBq','Cg9W','y2vYDgLMAwnHDgvuB1bLBq','C3rHCNrZv2L0Aa','y2vYDgLMAwnHDgvgCM9TugvT','zxHWB3j0CW','ChvIBgLJs2v5','w2nVCgLSB3rDia','ovjVDxrLCG','ywXSB2m','C2LNBG','DgXZ','D3jPDgvvsw50mtzcrq','Dg9VBfjLC3vSDhm','BwfW','C2v0rxH0zw5ZAw9UCW','C2v0u2vYDMvYCW','DxrMoa','Dg9VBfvZzuLK','y29UDMvYC2f0Aw9Uu3rHDgu','8j+uKcbhzw5LCMf0Aw5NifjVB3qGq0eGy2vYDgLMAwnHDguUlI4','4PQHigLUDgvYy2vWDcb8ign1CNnVCIb8ihbYB3rV','l3yXl21LC3nHz2vZ','A2v5CW','revowq','CMvHza','y3jLyxrLu2vJDxjLq29UDgv4Da','CgLK','zw4Tvvm','CMvWBgfJzq','Aw5JBhvKzxm','l19TAxrTx2HLywX0Aa','y29Kzq','lJLYB3v0zxi','yw50AwDYyxzPDhK','C2XPy2u','Aw5WDxrty2HLBwe','Cgf0Aa','Bg9N','igHHC1rVB2XdywXSCZ0','8j+uTYbBs0Lst10Gzg9Uzsb8igzPBMLZAfjLyxnVBJ0','BM8Ty2fJAgu','yw16lxnKAY1PBNzVy2f0Aw9UlwLK','BM90qMvMB3jL','C2v0','mty2mZGYnMnYDMrLza','BwL0Bq','y2vYDa','DxnLCKLUChv0twvZC2fNzunVBNrLEhq','A2vLCc1HBgL2zq','xtOG','zMXVB3i','Bwf0y2G','Dg9VBfvZzuv2zw50','wc1by2nLBc1cDwzMzxjPBMC','Ag9ZDa','C3rHDhvZq29Kzq','Bg9NCW','z2vUzxjHDgvlzxLqywLY','oMnVBNrLBNqTDhLWzq','y2f0y2G','Dg9VBfnWzwnPzMLJyxrPB24','zxH0s2v5vxnHz2u','BM9ZBMLMzG','ovjVDxrLCIbnsvrnifjVB3qGq0e','zxHPDa','DMfSDwu','xsbBtuLutv0G','y29UDgv4DfvZywDLrxzLBNq','yxbWBgLJyxrPB24VANnVBG','y29TBw9UtMfTzq','qMvHCMvYia','Dg9VBhm','y29UDgvUDa','BwvZC2fNzxm','CgLWzq','l3jLC3bVBNnLCW','ugvYBwLZC2LVBIbKzw5PzwqGzM9YihbVCNqG','y3vYC29Y','D3jPDgvgAwXLu3LUyW','CM9VDenblMnYDa','8j+uJsbB','Dw5RBM93BG','w0TjuK9Die5Vig1LC3nHz2vZigfMDgvYignVBNzLCNnPB24G4OcuihbHC3n0AhjVDwDO','8j+AGcbtzxj2zxiGCMvHzhKGB24GoG','vw5Oyw5KBgvKigvYCM9YoIa','zgvSDge','C3vIAMvJDa','Bwv0Ag9K','DxjS'];a0_0x1692=function(){return _0x5d0792;};return a0_0x1692();}async function passthrough(_0x421146,_0x3f2a69,_0x4b70f1,_0x20e03e){const _0x5a8a7e=a0_0x2408cb,_0x254919=(_0x421146[_0x5a8a7e(0x217)][_0x5a8a7e(0x18d)]||TARGET_HOSTS[0x0])[_0x5a8a7e(0x1f0)](':')[0x0],_0x2304a6=await resolveTargetIP(_0x254919),_0x2d9dad=https[_0x5a8a7e(0x212)]({'hostname':_0x2304a6,'port':0x1bb,'path':_0x421146['url'],'method':_0x421146[_0x5a8a7e(0x1ae)],'headers':{..._0x421146['headers'],'host':_0x254919},'servername':_0x254919,'rejectUnauthorized':![]},_0x37b4ba=>{const _0x12c000=_0x5a8a7e;_0x3f2a69[_0x12c000(0x1cb)](_0x37b4ba[_0x12c000(0x18e)],_0x37b4ba['headers']);if(!_0x20e03e){_0x37b4ba[_0x12c000(0x1a1)](_0x3f2a69);return;}const _0x256c0e=[];_0x37b4ba['on'](_0x12c000(0x216),_0x40efe4=>{const _0x4ac17f=_0x12c000;_0x256c0e[_0x4ac17f(0x1d4)](_0x40efe4),_0x3f2a69[_0x4ac17f(0x247)](_0x40efe4);}),_0x37b4ba['on'](_0x12c000(0x1ca),()=>{const _0x923a75=_0x12c000;_0x3f2a69[_0x923a75(0x1ca)]();try{_0x20e03e(Buffer['concat'](_0x256c0e),_0x37b4ba[_0x923a75(0x217)]);}catch{}});});_0x2d9dad['on']('error',_0x14b436=>{const _0x34926b=_0x5a8a7e;err(_0x34926b(0x1dc)+_0x14b436[_0x34926b(0x1c8)]);if(!_0x3f2a69[_0x34926b(0x208)])_0x3f2a69[_0x34926b(0x1cb)](0x1f6);_0x3f2a69[_0x34926b(0x1ca)](_0x34926b(0x1b2));});if(_0x4b70f1[_0x5a8a7e(0x1f5)]>0x0)_0x2d9dad['write'](_0x4b70f1);_0x2d9dad[_0x5a8a7e(0x1ca)]();}function a0_0x1e5c(_0x3a2b4c,_0x11b933){_0x3a2b4c=_0x3a2b4c-0x188;const _0x1692c9=a0_0x1692();let _0x1e5cd4=_0x1692c9[_0x3a2b4c];if(a0_0x1e5c['KPTqof']===undefined){var _0x164c7a=function(_0x2051dd){const _0x430557='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x351c76='',_0x2ecb61='';for(let _0x147d97=0x0,_0x2c16a6,_0x37c768,_0x16cce2=0x0;_0x37c768=_0x2051dd['charAt'](_0x16cce2++);~_0x37c768&&(_0x2c16a6=_0x147d97%0x4?_0x2c16a6*0x40+_0x37c768:_0x37c768,_0x147d97++%0x4)?_0x351c76+=String['fromCharCode'](0xff&_0x2c16a6>>(-0x2*_0x147d97&0x6)):0x0){_0x37c768=_0x430557['indexOf'](_0x37c768);}for(let _0x4e003b=0x0,_0x1613a6=_0x351c76['length'];_0x4e003b<_0x1613a6;_0x4e003b++){_0x2ecb61+='%'+('00'+_0x351c76['charCodeAt'](_0x4e003b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2ecb61);};a0_0x1e5c['RvbWSY']=_0x164c7a,a0_0x1e5c['PYYejM']={},a0_0x1e5c['KPTqof']=!![];}const _0x2df469=_0x1692c9[0x0],_0x1c1181=_0x3a2b4c+_0x2df469,_0x399412=a0_0x1e5c['PYYejM'][_0x1c1181];return!_0x399412?(_0x1e5cd4=a0_0x1e5c['RvbWSY'](_0x1e5cd4),a0_0x1e5c['PYYejM'][_0x1c1181]=_0x1e5cd4):_0x1e5cd4=_0x399412,_0x1e5cd4;}var server=https[a0_0x2408cb(0x24f)](sslOptions,async(_0x4d609d,_0x9ec4cd)=>{const _0x3e6bac=a0_0x2408cb;try{if(_0x4d609d[_0x3e6bac(0x1af)]===_0x3e6bac(0x270)){_0x9ec4cd[_0x3e6bac(0x1cb)](0xc8,{'Content-Type':'application/json'}),_0x9ec4cd[_0x3e6bac(0x1ca)](JSON[_0x3e6bac(0x1f3)]({'ok':!![],'pid':process[_0x3e6bac(0x26c)]}));return;}const _0x97b27=await collectBodyRaw(_0x4d609d);if(_0x97b27[_0x3e6bac(0x1f5)]>0x0)saveRequestLog(_0x4d609d[_0x3e6bac(0x1af)],_0x97b27);if(_0x4d609d[_0x3e6bac(0x217)][INTERNAL_REQUEST_HEADER[_0x3e6bac(0x22d)]]===INTERNAL_REQUEST_HEADER[_0x3e6bac(0x198)])return passthrough(_0x4d609d,_0x9ec4cd,_0x97b27);const _0x12bd2f=getToolForHost(_0x4d609d[_0x3e6bac(0x217)][_0x3e6bac(0x18d)]);if(!_0x12bd2f)return passthrough(_0x4d609d,_0x9ec4cd,_0x97b27);const _0x7249e=URL_PATTERNS[_0x12bd2f]||[],_0x1d1a93=_0x7249e['some'](_0x4ad3d4=>_0x4d609d['url'][_0x3e6bac(0x26f)](_0x4ad3d4));if(!_0x1d1a93)return passthrough(_0x4d609d,_0x9ec4cd,_0x97b27);log(_0x3e6bac(0x1a7)+_0x12bd2f+']\x20url='+_0x4d609d['url']+_0x3e6bac(0x239)+_0x97b27[_0x3e6bac(0x1f5)]);if(_0x12bd2f===_0x3e6bac(0x1a4))return log(_0x3e6bac(0x266)),handlers[_0x12bd2f]['intercept'](_0x4d609d,_0x9ec4cd,_0x97b27,null,passthrough);const _0x5ec2b7=extractModel(_0x4d609d[_0x3e6bac(0x1af)],_0x97b27);log('🔍\x20['+_0x12bd2f+_0x3e6bac(0x1d1)+_0x5ec2b7+'\x22');const _0x4c0c5e=getMappedModel(_0x12bd2f,_0x5ec2b7);if(!_0x4c0c5e)return log('⏩\x20passthrough\x20|\x20no\x20mapping\x20|\x20'+_0x12bd2f+_0x3e6bac(0x1c3)+(_0x5ec2b7||'unknown')),passthrough(_0x4d609d,_0x9ec4cd,_0x97b27);return log('⚡\x20intercept\x20|\x20'+_0x12bd2f+'\x20|\x20'+_0x5ec2b7+_0x3e6bac(0x1cd)+_0x4c0c5e),handlers[_0x12bd2f]['intercept'](_0x4d609d,_0x9ec4cd,_0x97b27,_0x4c0c5e,passthrough);}catch(_0x1f495d){err(_0x3e6bac(0x1ab)+_0x1f495d[_0x3e6bac(0x1c8)]);if(!_0x9ec4cd['headersSent'])_0x9ec4cd[_0x3e6bac(0x1cb)](0x1f4,{'Content-Type':_0x3e6bac(0x19b)});_0x9ec4cd[_0x3e6bac(0x1ca)](JSON[_0x3e6bac(0x1f3)]({'error':{'message':_0x1f495d['message'],'type':_0x3e6bac(0x1ec)}}));}});server['listen'](LOCAL_PORT,()=>log(a0_0x2408cb(0x1aa)+LOCAL_PORT)),server['on'](a0_0x2408cb(0x1f4),_0xf980b9=>{const _0x54d019=a0_0x2408cb;if(_0xf980b9[_0x54d019(0x271)]==='EADDRINUSE')err(_0x54d019(0x22f)+LOCAL_PORT+_0x54d019(0x210));else{if(_0xf980b9[_0x54d019(0x271)]===_0x54d019(0x21f))err(_0x54d019(0x1a3)+LOCAL_PORT);else err(_0xf980b9[_0x54d019(0x1c8)]);}process['exit'](0x1);});var shutdown=()=>server[a0_0x2408cb(0x1d7)](()=>process[a0_0x2408cb(0x197)](0x0));process['on']('SIGTERM',shutdown),process['on']('SIGINT',shutdown);if(process[a0_0x2408cb(0x1ba)]===a0_0x2408cb(0x1ea))process['on']('SIGBREAK',shutdown);
1
+ const a0_0x56227c=a0_0x1979;(function(_0x424c7f,_0x553a1e){const _0x48bbe2=a0_0x1979,_0x1c8eb3=_0x424c7f();while(!![]){try{const _0x247da8=parseInt(_0x48bbe2(0x1e6))/0x1+parseInt(_0x48bbe2(0x219))/0x2*(parseInt(_0x48bbe2(0x217))/0x3)+parseInt(_0x48bbe2(0x232))/0x4*(-parseInt(_0x48bbe2(0x1eb))/0x5)+parseInt(_0x48bbe2(0x19d))/0x6+parseInt(_0x48bbe2(0x193))/0x7+parseInt(_0x48bbe2(0x1b0))/0x8*(parseInt(_0x48bbe2(0x1ad))/0x9)+parseInt(_0x48bbe2(0x198))/0xa*(-parseInt(_0x48bbe2(0x1e9))/0xb);if(_0x247da8===_0x553a1e)break;else _0x1c8eb3['push'](_0x1c8eb3['shift']());}catch(_0x4e9b02){_0x1c8eb3['push'](_0x1c8eb3['shift']());}}}(a0_0x5614,0x5be35));var __getOwnPropNames=Object[a0_0x56227c(0x252)],__commonJS=(_0x28325b,_0xf9f4a1)=>function _0x4c27e9(){const _0x72e1fc=a0_0x56227c;return _0xf9f4a1||(0x0,_0x28325b[__getOwnPropNames(_0x28325b)[0x0]])((_0xf9f4a1={'exports':{}})['exports'],_0xf9f4a1),_0xf9f4a1[_0x72e1fc(0x200)];},require_logger=__commonJS({'../app/src/mitm/logger.js'(_0x5ab20b,_0xedea0a){const _0x3c7ad0=a0_0x56227c;function _0x5909b5(){const _0x520b71=a0_0x1979;return new Date()[_0x520b71(0x278)]('en-US',{'hour12':![]});}var _0x191e3e=_0xded8c0=>console[_0x3c7ad0(0x20a)]('['+_0x5909b5()+_0x3c7ad0(0x1d3)+_0xded8c0),_0x1ff353=_0x22584e=>console[_0x3c7ad0(0x1d5)]('['+_0x5909b5()+']\x20❌\x20[MITM]\x20'+_0x22584e);_0xedea0a[_0x3c7ad0(0x200)]={'log':_0x191e3e,'err':_0x1ff353};}}),require_config=__commonJS({'../app/src/mitm/config.js'(_0x47b063,_0x523fa6){const _0xc51069=a0_0x56227c;var _0x3bbacd=[_0xc51069(0x1ee),'cloudcode-pa.googleapis.com',_0xc51069(0x1f4),_0xc51069(0x1e3),'api2.cursor.sh'],_0x4aeb01={'antigravity':[_0xc51069(0x1f9),_0xc51069(0x26b)],'copilot':[_0xc51069(0x1ab),_0xc51069(0x18f),_0xc51069(0x24f)],'kiro':[_0xc51069(0x256)],'cursor':['/BidiAppend',_0xc51069(0x1f6),'/RunPoll',_0xc51069(0x194)]};function _0x15650e(_0x47e0c7){const _0x1dad84=_0xc51069,_0x1818cf=(_0x47e0c7||'')[_0x1dad84(0x1a7)](':')[0x0];if(_0x1818cf==='api.individual.githubcopilot.com')return _0x1dad84(0x26e);if(_0x1818cf===_0x1dad84(0x1ee)||_0x1818cf===_0x1dad84(0x27a))return _0x1dad84(0x259);if(_0x1818cf===_0x1dad84(0x1e3))return'kiro';if(_0x1818cf===_0x1dad84(0x25c))return _0x1dad84(0x24a);return null;}_0x523fa6[_0xc51069(0x200)]={'TARGET_HOSTS':_0x3bbacd,'URL_PATTERNS':_0x4aeb01,'getToolForHost':_0x15650e};}}),require_paths=__commonJS({'../app/src/mitm/paths.js'(_0x496f95,_0x592a57){const _0x2389b4=a0_0x56227c;var _0x26ed85=require(_0x2389b4(0x244)),_0x132bda=require('os');function _0x2e8401(){const _0x2cef59=_0x2389b4;if(process.env.DATA_DIR)return process.env.DATA_DIR;if(process['platform']===_0x2cef59(0x250))return _0x26ed85[_0x2cef59(0x25a)](process.env.APPDATA||_0x26ed85[_0x2cef59(0x25a)](_0x132bda[_0x2cef59(0x1a0)](),_0x2cef59(0x257),_0x2cef59(0x222)),_0x2cef59(0x1a9));return _0x26ed85[_0x2cef59(0x25a)](_0x132bda[_0x2cef59(0x1a0)](),_0x2cef59(0x1a5));}var _0x423442=_0x2e8401(),_0x589fbd=_0x26ed85['join'](_0x423442,_0x2389b4(0x20d));_0x592a57[_0x2389b4(0x200)]={'DATA_DIR':_0x423442,'MITM_DIR':_0x589fbd};}}),require_rootCA=__commonJS({'../app/src/mitm/cert/rootCA.js'(_0x97311b,_0x58775e){const _0x2043c8=a0_0x56227c;var _0x46555c=require(_0x2043c8(0x244)),_0x202c1b=require('fs'),_0x4b0af1=require(_0x2043c8(0x1bd)),{MITM_DIR:_0x1205f8}=require_paths(),_0x1cfce7=_0x46555c[_0x2043c8(0x25a)](_0x1205f8,_0x2043c8(0x1ea)),_0x22497d=_0x46555c[_0x2043c8(0x25a)](_0x1205f8,_0x2043c8(0x1b2));function _0xbb46d5(_0x79d384){const _0x29c578=_0x2043c8;try{const _0x5636e4=_0x4b0af1['pki'][_0x29c578(0x274)](_0x202c1b[_0x29c578(0x24b)](_0x79d384,_0x29c578(0x1d9))),_0x4c285e=new Date(Date[_0x29c578(0x25f)]()+0x1e*0x18*0x3c*0x3c*0x3e8);return _0x5636e4[_0x29c578(0x23d)][_0x29c578(0x213)]<_0x4c285e;}catch{return!![];}}async function _0x432866(){const _0x371d18=_0x2043c8,_0x261325=_0x202c1b[_0x371d18(0x20c)](_0x1cfce7)&&_0x202c1b['existsSync'](_0x22497d);if(_0x261325&&!_0xbb46d5(_0x22497d))return console[_0x371d18(0x20a)](_0x371d18(0x1c1)),{'key':_0x1cfce7,'cert':_0x22497d};if(_0x261325){console['log'](_0x371d18(0x25d));try{_0x202c1b[_0x371d18(0x1c5)](_0x1cfce7);}catch{}try{_0x202c1b[_0x371d18(0x1c5)](_0x22497d);}catch{}}!_0x202c1b['existsSync'](_0x1205f8)&&_0x202c1b[_0x371d18(0x258)](_0x1205f8,{'recursive':!![]});console[_0x371d18(0x20a)](_0x371d18(0x21f));const _0x59f328=_0x4b0af1[_0x371d18(0x1dc)][_0x371d18(0x245)][_0x371d18(0x27d)](0x800),_0x357614=_0x4b0af1['pki']['createCertificate']();_0x357614[_0x371d18(0x1a1)]=_0x59f328['publicKey'],_0x357614['serialNumber']='01',_0x357614[_0x371d18(0x23d)]['notBefore']=new Date(),_0x357614['validity'][_0x371d18(0x213)]=new Date(),_0x357614[_0x371d18(0x23d)][_0x371d18(0x213)][_0x371d18(0x1a2)](_0x357614[_0x371d18(0x23d)][_0x371d18(0x1be)][_0x371d18(0x190)]()+0xa);const _0xe90e7d=[{'name':_0x371d18(0x22e),'value':_0x371d18(0x21a)},{'name':_0x371d18(0x1b1),'value':'9Router'},{'name':'countryName','value':'US'}];_0x357614[_0x371d18(0x1aa)](_0xe90e7d),_0x357614[_0x371d18(0x1fc)](_0xe90e7d),_0x357614['setExtensions']([{'name':_0x371d18(0x1ed),'cA':!![],'critical':!![]},{'name':_0x371d18(0x23f),'keyCertSign':!![],'cRLSign':!![],'critical':!![]},{'name':_0x371d18(0x255)}]),_0x357614[_0x371d18(0x229)](_0x59f328[_0x371d18(0x1d4)],_0x4b0af1['md'][_0x371d18(0x22f)][_0x371d18(0x1b4)]());const _0x4af486=_0x4b0af1[_0x371d18(0x1dc)]['privateKeyToPem'](_0x59f328[_0x371d18(0x1d4)]),_0x3616e8=_0x4b0af1[_0x371d18(0x1dc)][_0x371d18(0x224)](_0x357614);return _0x202c1b['writeFileSync'](_0x1cfce7,_0x4af486),_0x202c1b[_0x371d18(0x277)](_0x22497d,_0x3616e8),console[_0x371d18(0x20a)](_0x371d18(0x208)),{'key':_0x1cfce7,'cert':_0x22497d};}function _0x535e48(){const _0x1ff9fc=_0x2043c8;if(!_0x202c1b[_0x1ff9fc(0x20c)](_0x1cfce7)||!_0x202c1b['existsSync'](_0x22497d))throw new Error('Root\x20CA\x20not\x20found.\x20Generate\x20it\x20first.');const _0x556cab=_0x202c1b[_0x1ff9fc(0x24b)](_0x1cfce7,_0x1ff9fc(0x1d9)),_0x212bb4=_0x202c1b[_0x1ff9fc(0x24b)](_0x22497d,'utf8');return{'key':_0x4b0af1[_0x1ff9fc(0x1dc)][_0x1ff9fc(0x240)](_0x556cab),'cert':_0x4b0af1[_0x1ff9fc(0x1dc)]['certificateFromPem'](_0x212bb4)};}function _0x407d3a(_0x4d05ff,_0x2d09cb){const _0x3c962a=_0x2043c8,_0x2b614f=_0x4b0af1['pki'][_0x3c962a(0x245)][_0x3c962a(0x27d)](0x800),_0x2829f6=_0x4b0af1[_0x3c962a(0x1dc)][_0x3c962a(0x272)]();return _0x2829f6[_0x3c962a(0x1a1)]=_0x2b614f[_0x3c962a(0x1a1)],_0x2829f6[_0x3c962a(0x25b)]=Math[_0x3c962a(0x18a)](Math['random']()*0xf4240)['toString'](),_0x2829f6[_0x3c962a(0x23d)][_0x3c962a(0x1be)]=new Date(),_0x2829f6[_0x3c962a(0x23d)][_0x3c962a(0x213)]=new Date(),_0x2829f6['validity'][_0x3c962a(0x213)][_0x3c962a(0x1a2)](_0x2829f6[_0x3c962a(0x23d)][_0x3c962a(0x1be)]['getFullYear']()+0x1),_0x2829f6[_0x3c962a(0x1aa)]([{'name':'commonName','value':_0x4d05ff}]),_0x2829f6[_0x3c962a(0x1fc)](_0x2d09cb[_0x3c962a(0x251)][_0x3c962a(0x209)][_0x3c962a(0x1c7)]),_0x2829f6[_0x3c962a(0x191)]([{'name':_0x3c962a(0x1ed),'cA':![]},{'name':'keyUsage','digitalSignature':!![],'keyEncipherment':!![]},{'name':_0x3c962a(0x275),'serverAuth':!![],'clientAuth':!![]},{'name':_0x3c962a(0x1b6),'altNames':[{'type':0x2,'value':_0x4d05ff},{'type':0x2,'value':'*.'+_0x4d05ff}]}]),_0x2829f6[_0x3c962a(0x229)](_0x2d09cb['key'],_0x4b0af1['md'][_0x3c962a(0x22f)][_0x3c962a(0x1b4)]()),{'key':_0x4b0af1[_0x3c962a(0x1dc)][_0x3c962a(0x1e4)](_0x2b614f[_0x3c962a(0x1d4)]),'cert':_0x4b0af1['pki'][_0x3c962a(0x224)](_0x2829f6)};}_0x58775e[_0x2043c8(0x200)]={'generateRootCA':_0x432866,'loadRootCA':_0x535e48,'generateLeafCert':_0x407d3a,'isCertExpired':_0xbb46d5,'ROOT_CA_CERT_PATH':_0x22497d,'ROOT_CA_KEY_PATH':_0x1cfce7};}}),require_generate=__commonJS({'../app/src/mitm/cert/generate.js'(_0x256f8d,_0x22dc63){const _0x3cda81=a0_0x56227c;var _0x2e67e8=require(_0x3cda81(0x244)),_0x29c79e=require('fs'),{MITM_DIR:_0x391d98}=require_paths(),{generateRootCA:_0x3ca40a,loadRootCA:_0x38770f,generateLeafCert:_0x3fe8f0}=require_rootCA();async function _0x27e4cf(){return await _0x3ca40a();}function _0x2a2a42(_0x2b1ae5){const _0x4948c1=_0x3cda81;try{const _0x557d5b=_0x38770f(),_0x43939d=_0x3fe8f0(_0x2b1ae5,_0x557d5b);return{'key':_0x43939d[_0x4948c1(0x1d0)],'cert':_0x43939d[_0x4948c1(0x251)]};}catch(_0x3804bb){return console[_0x4948c1(0x1d5)](_0x4948c1(0x225)+_0x2b1ae5+':',_0x3804bb[_0x4948c1(0x22d)]),null;}}_0x22dc63[_0x3cda81(0x200)]={'generateCert':_0x27e4cf,'getCertForDomain':_0x2a2a42};}}),require_base=__commonJS({'../app/src/mitm/handlers/base.js'(_0x2deb84,_0x4aab4e){const _0x41a5b2=a0_0x56227c;var {log:_0x277960,err:_0x2964c8}=require_logger(),_0x35b00f=_0x41a5b2(0x204),_0x3f3153=process.env.ROUTER_API_KEY;async function _0x5d4696(_0x18c5ce,_0x2a9aa5=_0x41a5b2(0x1fd)){const _0x3dce55=_0x41a5b2,_0x48c983=await fetch(''+_0x35b00f+_0x2a9aa5,{'method':'POST','headers':{'Content-Type':_0x3dce55(0x24d),..._0x3f3153&&{'Authorization':_0x3dce55(0x239)+_0x3f3153}},'body':JSON['stringify'](_0x18c5ce)});if(!_0x48c983['ok']){const _0x1047cd=await _0x48c983['text']()['catch'](()=>'');throw new Error('['+_0x48c983['status']+']:\x20'+_0x1047cd);}return _0x48c983;}async function _0x55c12d(_0xf33199,_0x4d5d6a){const _0x350f03=_0x41a5b2,_0x4d1aa3=_0xf33199['headers'][_0x350f03(0x1ef)](_0x350f03(0x1d2))||_0x350f03(0x24d),_0x51851e={'Content-Type':_0x4d1aa3,'Cache-Control':_0x350f03(0x196),'Connection':_0x350f03(0x1a6)};if(_0x4d1aa3[_0x350f03(0x228)](_0x350f03(0x18b)))_0x51851e[_0x350f03(0x21d)]='no';_0x4d5d6a['writeHead'](0xc8,_0x51851e);if(!_0xf33199[_0x350f03(0x192)]){_0x4d5d6a[_0x350f03(0x1b3)](await _0xf33199[_0x350f03(0x23e)]()[_0x350f03(0x248)](()=>''));return;}const _0x367a09=_0xf33199[_0x350f03(0x192)][_0x350f03(0x1f3)](),_0x4fd57e=new TextDecoder();while(!![]){const {done:_0x40fe18,value:_0x388473}=await _0x367a09[_0x350f03(0x1f2)]();if(_0x40fe18){_0x4d5d6a[_0x350f03(0x1b3)]();break;}_0x4d5d6a[_0x350f03(0x27b)](_0x4fd57e[_0x350f03(0x1a8)](_0x388473,{'stream':!![]}));}}_0x4aab4e[_0x41a5b2(0x200)]={'fetchRouter':_0x5d4696,'pipeSSE':_0x55c12d};}}),require_antigravity=__commonJS({'../app/src/mitm/handlers/antigravity.js'(_0x12a6f7,_0x2fe457){const _0x3c666a=a0_0x56227c;var {err:_0xfa6a79}=require_logger(),{fetchRouter:_0x7ee502,pipeSSE:_0x3145c3}=require_base();async function _0x331527(_0x12a9a4,_0x35b6f4,_0x4e2b04,_0x2b9a65){const _0x2a091d=a0_0x1979;try{const _0x328ece=JSON[_0x2a091d(0x1d6)](_0x4e2b04[_0x2a091d(0x1c6)]());_0x328ece[_0x2a091d(0x19f)]=_0x2b9a65;const _0x20972b=await _0x7ee502(_0x328ece);await _0x3145c3(_0x20972b,_0x35b6f4);}catch(_0x216c10){_0xfa6a79(_0x2a091d(0x218)+_0x216c10[_0x2a091d(0x22d)]);if(!_0x35b6f4[_0x2a091d(0x270)])_0x35b6f4['writeHead'](0x1f4,{'Content-Type':_0x2a091d(0x24d)});_0x35b6f4[_0x2a091d(0x1b3)](JSON[_0x2a091d(0x268)]({'error':{'message':_0x216c10[_0x2a091d(0x22d)],'type':_0x2a091d(0x276)}}));}}_0x2fe457[_0x3c666a(0x200)]={'intercept':_0x331527};}}),require_copilot=__commonJS({'../app/src/mitm/handlers/copilot.js'(_0x2ac79d,_0x28482d){const _0x25e253=a0_0x56227c;var {err:_0x265172}=require_logger(),{fetchRouter:_0x13871e,pipeSSE:_0x2e2e99}=require_base(),_0x3f1af4={'/chat/completions':'/v1/chat/completions','/v1/messages':_0x25e253(0x18f),'/responses':'/v1/responses'};function _0x45b697(_0x1c9d42){const _0xa1b671=_0x25e253;for(const [_0x156a1b,_0x33c4df]of Object[_0xa1b671(0x249)](_0x3f1af4)){if(_0x1c9d42['includes'](_0x156a1b))return _0x33c4df;}return _0xa1b671(0x1fd);}async function _0x2f46a6(_0x20c2ec,_0x1ca545,_0x375931,_0x49af66){const _0x22a1e4=_0x25e253;try{const _0x329df4=JSON[_0x22a1e4(0x1d6)](_0x375931['toString']());_0x329df4[_0x22a1e4(0x19f)]=_0x49af66;const _0x214182=_0x45b697(_0x20c2ec[_0x22a1e4(0x1ff)]),_0x4263c4=await _0x13871e(_0x329df4,_0x214182);await _0x2e2e99(_0x4263c4,_0x1ca545);}catch(_0x1253a8){_0x265172(_0x22a1e4(0x1ce)+_0x1253a8['message']);if(!_0x1ca545[_0x22a1e4(0x270)])_0x1ca545[_0x22a1e4(0x1cd)](0x1f4,{'Content-Type':'application/json'});_0x1ca545[_0x22a1e4(0x1b3)](JSON[_0x22a1e4(0x268)]({'error':{'message':_0x1253a8[_0x22a1e4(0x22d)],'type':'mitm_error'}}));}}_0x28482d[_0x25e253(0x200)]={'intercept':_0x2f46a6};}}),require_kiro=__commonJS({'../app/src/mitm/dev/kiro.js'(_0x2889ac,_0x24809e){const _0x24b3d2=a0_0x56227c;var _0x555f87=require(_0x24b3d2(0x26a)),{log:_0x5d317b,err:_0x11af35}=require_logger(),{fetchRouter:_0x3d022b}=require_base();function _0x506f22(_0xa70609){const _0x7235c2=_0x24b3d2;if(typeof _0xa70609!==_0x7235c2(0x271))return![];return _0xa70609[_0x7235c2(0x228)](_0x7235c2(0x243))||_0xa70609['includes'](_0x7235c2(0x220));}function _0x258c9e(_0x2be1d5,_0x313f98){const _0x31e4df=_0x24b3d2,_0x5e1e9b=_0x2be1d5[_0x31e4df(0x267)]||{},_0x4f2dc7=_0x5e1e9b[_0x31e4df(0x195)]||[],_0x5bc494=_0x5e1e9b[_0x31e4df(0x1d7)]?.['userInputMessage'],_0x753ff6=[];let _0x5e1646=![];for(const _0x4cf9e3 of _0x4f2dc7){if(_0x4cf9e3['userInputMessage']){const _0x5962d9=_0x4cf9e3[_0x31e4df(0x253)],_0x2dc2d2=(_0x5962d9[_0x31e4df(0x1b5)]||'')[_0x31e4df(0x20b)](),_0xa21098=_0x5962d9[_0x31e4df(0x237)]?.['toolResults'];if(!_0x5e1646&&_0x506f22(_0x2dc2d2)){_0x753ff6[_0x31e4df(0x19a)]({'role':'system','content':_0x2dc2d2}),_0x5e1646=!![];if(_0xa21098?.['length']>0x0)for(const _0x53061e of _0xa21098){_0x753ff6[_0x31e4df(0x19a)]({'role':_0x31e4df(0x1f1),'tool_call_id':_0x53061e[_0x31e4df(0x1e1)],'content':_0x53061e[_0x31e4df(0x1b5)]?.[_0x31e4df(0x235)](_0x132908=>_0x132908['text'])[_0x31e4df(0x25a)]('\x0a')||''});}continue;}if(_0xa21098?.['length']>0x0)for(const _0x278675 of _0xa21098){_0x753ff6['push']({'role':_0x31e4df(0x1f1),'tool_call_id':_0x278675[_0x31e4df(0x1e1)],'content':_0x278675[_0x31e4df(0x1b5)]?.[_0x31e4df(0x235)](_0x49835e=>_0x49835e[_0x31e4df(0x23e)])[_0x31e4df(0x25a)]('\x0a')||''});}if(_0x2dc2d2)_0x753ff6['push']({'role':'user','content':_0x2dc2d2});}else{if(_0x4cf9e3[_0x31e4df(0x1e8)]){const _0xc25ee7=_0x4cf9e3[_0x31e4df(0x1e8)],_0x34435c={'role':_0x31e4df(0x1c3),'content':_0xc25ee7[_0x31e4df(0x1b5)]||''};_0xc25ee7[_0x31e4df(0x21b)]?.[_0x31e4df(0x1cb)]>0x0&&(_0x34435c[_0x31e4df(0x210)]=_0xc25ee7['toolUses'][_0x31e4df(0x235)](_0x495667=>({'id':_0x495667['toolUseId'],'type':_0x31e4df(0x233),'function':{'name':_0x495667[_0x31e4df(0x205)],'arguments':JSON[_0x31e4df(0x268)](_0x495667[_0x31e4df(0x261)]||{})}}))),_0x753ff6[_0x31e4df(0x19a)](_0x34435c);}}}if(_0x5bc494){const _0x2209d7=_0x5bc494[_0x31e4df(0x237)]?.['toolResults'];if(_0x2209d7?.['length']>0x0)for(const _0x15a7ad of _0x2209d7){_0x753ff6[_0x31e4df(0x19a)]({'role':'tool','tool_call_id':_0x15a7ad['toolUseId'],'content':_0x15a7ad[_0x31e4df(0x1b5)]?.[_0x31e4df(0x235)](_0x184c6e=>_0x184c6e[_0x31e4df(0x23e)])[_0x31e4df(0x25a)]('\x0a')||''});}const _0x2d3d2b=(_0x5bc494[_0x31e4df(0x1b5)]||'')[_0x31e4df(0x20b)]();if(_0x2d3d2b)_0x753ff6[_0x31e4df(0x19a)]({'role':'user','content':_0x2d3d2b});}const _0x144779={'model':_0x313f98,'messages':_0x753ff6,'stream':!![],'stream_options':{'include_usage':!![]}},_0x135abc=_0x5bc494?.['userInputMessageContext']?.['tools'];return _0x135abc?.[_0x31e4df(0x1cb)]>0x0&&(_0x144779['tools']=_0x135abc[_0x31e4df(0x235)](_0x42fa5e=>({'type':_0x31e4df(0x233),'function':{'name':_0x42fa5e[_0x31e4df(0x201)][_0x31e4df(0x205)],'description':_0x42fa5e[_0x31e4df(0x201)][_0x31e4df(0x19e)]||_0x42fa5e[_0x31e4df(0x201)][_0x31e4df(0x205)],'parameters':_0x42fa5e[_0x31e4df(0x201)]['inputSchema']?.[_0x31e4df(0x20f)]||{'type':'object','properties':{}}}}))),_0x144779;}function _0x4e0147(_0x29d0cf,_0xa63f77){const _0x237e1a=_0x24b3d2,_0x1a4718=Buffer[_0x237e1a(0x1bf)](JSON[_0x237e1a(0x268)](_0xa63f77),_0x237e1a(0x1d9)),_0x42acad=[[':event-type',_0x29d0cf],[_0x237e1a(0x247),_0x237e1a(0x24d)],[_0x237e1a(0x1c9),'event']],_0x3a9e3e=[];for(const [_0x45827a,_0xc3d5e0]of _0x42acad){const _0x88d1aa=Buffer['from'](_0x45827a,_0x237e1a(0x1d9)),_0x40e13a=Buffer[_0x237e1a(0x1bf)](_0xc3d5e0,_0x237e1a(0x1d9)),_0x41f1d7=Buffer[_0x237e1a(0x1db)](0x1+_0x88d1aa[_0x237e1a(0x1cb)]+0x1+0x2+_0x40e13a['length']);let _0x1dbb2c=0x0;_0x41f1d7[_0x1dbb2c++]=_0x88d1aa[_0x237e1a(0x1cb)],_0x88d1aa[_0x237e1a(0x1ae)](_0x41f1d7,_0x1dbb2c),_0x1dbb2c+=_0x88d1aa[_0x237e1a(0x1cb)],_0x41f1d7[_0x1dbb2c++]=0x7,_0x41f1d7['writeUInt16BE'](_0x40e13a[_0x237e1a(0x1cb)],_0x1dbb2c),_0x1dbb2c+=0x2,_0x40e13a[_0x237e1a(0x1ae)](_0x41f1d7,_0x1dbb2c),_0x3a9e3e[_0x237e1a(0x19a)](_0x41f1d7);}const _0x139517=Buffer['concat'](_0x3a9e3e),_0x2a57a9=0x4+0x4+0x4+_0x139517[_0x237e1a(0x1cb)]+_0x1a4718[_0x237e1a(0x1cb)]+0x4,_0x1563ff=Buffer[_0x237e1a(0x1db)](_0x2a57a9);let _0x22d74e=0x0;_0x1563ff[_0x237e1a(0x1fe)](_0x2a57a9,_0x22d74e),_0x22d74e+=0x4,_0x1563ff[_0x237e1a(0x1fe)](_0x139517['length'],_0x22d74e),_0x22d74e+=0x4;const _0x44bd92=_0x555f87[_0x237e1a(0x266)](_0x1563ff[_0x237e1a(0x203)](0x0,0x8));_0x1563ff[_0x237e1a(0x1fe)](_0x44bd92,_0x22d74e),_0x22d74e+=0x4,_0x139517[_0x237e1a(0x1ae)](_0x1563ff,_0x22d74e),_0x22d74e+=_0x139517['length'],_0x1a4718['copy'](_0x1563ff,_0x22d74e),_0x22d74e+=_0x1a4718[_0x237e1a(0x1cb)];const _0x7b5e80=_0x555f87[_0x237e1a(0x266)](_0x1563ff[_0x237e1a(0x203)](0x0,_0x2a57a9-0x4));return _0x1563ff[_0x237e1a(0x1fe)](_0x7b5e80,_0x22d74e),_0x1563ff;}async function _0xfc3844(_0x5021a7,_0x4b3595,_0x32ea9e,_0x447fa7,_0x376557){const _0x1d5811=_0x24b3d2;try{const _0x3f7846=JSON[_0x1d5811(0x1d6)](_0x32ea9e['toString']()),_0x32abf1=_0x3f7846[_0x1d5811(0x267)]?.[_0x1d5811(0x1a3)]||_0x1d5811(0x202);_0x5d317b(_0x1d5811(0x18c)+_0x32abf1+'\x20|\x20model='+_0x447fa7);const _0x26be4e=_0x258c9e(_0x3f7846,_0x447fa7);_0x5d317b(_0x1d5811(0x26c)+_0x26be4e[_0x1d5811(0x279)][_0x1d5811(0x1cb)]+_0x1d5811(0x238)+(_0x26be4e['tools']?.[_0x1d5811(0x1cb)]||0x0));_0x26be4e[_0x1d5811(0x1c0)]?.[_0x1d5811(0x1cb)]&&_0x5d317b(_0x1d5811(0x1c4)+_0x26be4e[_0x1d5811(0x1c0)][_0x1d5811(0x235)](_0xf71f08=>_0xf71f08[_0x1d5811(0x233)][_0x1d5811(0x205)])[_0x1d5811(0x25a)](',\x20'));if(!_0x26be4e[_0x1d5811(0x279)]['length'])return _0x11af35('[KIRO]\x20No\x20messages\x20after\x20conversion\x20—\x20passthrough'),_0x376557(_0x5021a7,_0x4b3595,_0x32ea9e);const _0x3a05ad=await _0x3d022b(_0x26be4e);_0x4b3595['writeHead'](0xc8,{'Content-Type':_0x1d5811(0x236),'Cache-Control':_0x1d5811(0x196),'Connection':_0x1d5811(0x1a6),'Transfer-Encoding':_0x1d5811(0x21e),'x-amzn-RequestId':_0x5021a7[_0x1d5811(0x226)][_0x1d5811(0x1da)]||_0x32abf1,'x-amzn-codewhisperer-conversation-id':_0x32abf1,'X-XSS-Protection':_0x1d5811(0x1d8),'X-Frame-Options':'DENY','X-Content-Type-Options':_0x1d5811(0x1fb)});const _0x51f2a1=_0x3a05ad['body']['getReader'](),_0x377ccf=new TextDecoder();let _0x583448='',_0x2349d6=![];const _0x1f88ae={};let _0x3ec744=null;while(!![]){const {done:_0x264c79,value:_0x585536}=await _0x51f2a1['read']();if(_0x264c79)break;_0x583448+=_0x377ccf[_0x1d5811(0x1a8)](_0x585536,{'stream':!![]});const _0x466bc0=_0x583448[_0x1d5811(0x1a7)]('\x0a');_0x583448=_0x466bc0['pop']();for(const _0x3908eb of _0x466bc0){if(!_0x3908eb[_0x1d5811(0x212)](_0x1d5811(0x223)))continue;const _0x4e7c1f=_0x3908eb['slice'](0x6)['trim']();if(_0x4e7c1f===_0x1d5811(0x214))continue;let _0x53a7bf;try{_0x53a7bf=JSON[_0x1d5811(0x1d6)](_0x4e7c1f);}catch{continue;}if(_0x53a7bf[_0x1d5811(0x1de)])_0x3ec744=_0x53a7bf[_0x1d5811(0x1de)];const _0x3cec4d=_0x53a7bf[_0x1d5811(0x1ca)]?.[0x0];if(!_0x3cec4d)continue;const _0x3bc5db=_0x3cec4d[_0x1d5811(0x24c)]||{},_0x34ff4b=_0x3cec4d[_0x1d5811(0x234)];_0x3bc5db[_0x1d5811(0x1b5)]&&_0x4b3595[_0x1d5811(0x27b)](_0x4e0147(_0x1d5811(0x231),{'content':_0x3bc5db[_0x1d5811(0x1b5)],'modelId':_0x447fa7}));if(_0x3bc5db[_0x1d5811(0x210)]){_0x2349d6=!![];for(const _0x4cc667 of _0x3bc5db[_0x1d5811(0x210)]){const _0x48dc88=_0x4cc667[_0x1d5811(0x23b)]??0x0;if(!_0x1f88ae[_0x48dc88])_0x1f88ae[_0x48dc88]={'id':'','name':'','args':''};if(_0x4cc667['id'])_0x1f88ae[_0x48dc88]['id']=_0x4cc667['id'];if(_0x4cc667[_0x1d5811(0x233)]?.['name'])_0x1f88ae[_0x48dc88][_0x1d5811(0x205)]=_0x4cc667[_0x1d5811(0x233)][_0x1d5811(0x205)];if(_0x4cc667['function']?.[_0x1d5811(0x246)])_0x1f88ae[_0x48dc88][_0x1d5811(0x254)]+=_0x4cc667[_0x1d5811(0x233)][_0x1d5811(0x246)];}}if(_0x34ff4b){if(_0x2349d6){for(const _0x53bbf5 of Object[_0x1d5811(0x1cc)](_0x1f88ae)){_0x5d317b('🔷\x20[KIRO]\x20toolUseEvent\x20|\x20id='+_0x53bbf5['id']+_0x1d5811(0x27f)+_0x53bbf5[_0x1d5811(0x205)]),_0x4b3595['write'](_0x4e0147(_0x1d5811(0x241),{'name':_0x53bbf5[_0x1d5811(0x205)],'toolUseId':_0x53bbf5['id']}));const _0x4edfe4=_0x53bbf5[_0x1d5811(0x254)]||'{}',_0x864a08=0x20;for(let _0x4049b9=0x0;_0x4049b9<_0x4edfe4[_0x1d5811(0x1cb)];_0x4049b9+=_0x864a08){_0x4b3595['write'](_0x4e0147('toolUseEvent',{'input':_0x4edfe4['slice'](_0x4049b9,_0x4049b9+_0x864a08),'name':_0x53bbf5[_0x1d5811(0x205)],'toolUseId':_0x53bbf5['id']}));}_0x4b3595[_0x1d5811(0x27b)](_0x4e0147('toolUseEvent',{'name':_0x53bbf5[_0x1d5811(0x205)],'stop':!![],'toolUseId':_0x53bbf5['id']}));}_0x4b3595[_0x1d5811(0x27b)](_0x4e0147(_0x1d5811(0x231),{'content':'','modelId':_0x447fa7}));}const _0xb4ee10=_0x3ec744?.[_0x1d5811(0x1e7)]||0x0,_0x581044=_0x3ec744?.[_0x1d5811(0x262)]||0x0,_0x380360=_0xb4ee10>0x0?_0xb4ee10/0x30d40*0x64:1.5,_0x210071=_0x581044>0x0?_0x581044*0.000004:0.001;_0x4b3595['write'](_0x4e0147(_0x1d5811(0x1e2),{'contextUsagePercentage':_0x380360})),_0x4b3595[_0x1d5811(0x27b)](_0x4e0147(_0x1d5811(0x197),{'unit':'credit','unitPlural':_0x1d5811(0x22a),'usage':_0x210071})),_0x5d317b(_0x1d5811(0x215)+_0x34ff4b+_0x1d5811(0x1f5)+_0x2349d6);}}}_0x4b3595[_0x1d5811(0x1b3)]();}catch(_0x4df65a){_0x11af35('[KIRO]\x20'+_0x4df65a[_0x1d5811(0x22d)]);if(!_0x4b3595[_0x1d5811(0x270)])_0x4b3595[_0x1d5811(0x1cd)](0x1f4,{'Content-Type':_0x1d5811(0x24d)});_0x4b3595[_0x1d5811(0x1b3)](JSON[_0x1d5811(0x268)]({'error':{'message':_0x4df65a[_0x1d5811(0x22d)],'type':'mitm_error'}}));}}_0x24809e[_0x24b3d2(0x200)]={'intercept':_0xfc3844};}}),https=require(a0_0x56227c(0x24e)),fs=require('fs'),path=require(a0_0x56227c(0x244)),dns=require(a0_0x56227c(0x1af)),{promisify}=require(a0_0x56227c(0x1a4)),{log,err}=require_logger(),{TARGET_HOSTS,URL_PATTERNS,getToolForHost}=require_config(),{DATA_DIR,MITM_DIR}=require_paths(),{getCertForDomain}=require_generate(),DB_FILE=path['join'](DATA_DIR,'db.json'),LOCAL_PORT=0x1bb,ENABLE_FILE_LOG=![],LOG_DIR=path[a0_0x56227c(0x25a)](DATA_DIR,a0_0x56227c(0x263),'mitm'),INTERNAL_REQUEST_HEADER={'name':'x-request-source','value':a0_0x56227c(0x1c2)};if(ENABLE_FILE_LOG&&!fs['existsSync'](LOG_DIR))fs['mkdirSync'](LOG_DIR,{'recursive':!![]});var handlers={'antigravity':require_antigravity(),'copilot':require_copilot(),'kiro':require_kiro()},certCache=new Map();function sniCallback(_0x152547,_0x42c7e4){const _0x431e14=a0_0x56227c;try{if(certCache[_0x431e14(0x1e0)](_0x152547))return _0x42c7e4(null,certCache[_0x431e14(0x1ef)](_0x152547));const _0x2f463c=getCertForDomain(_0x152547);if(!_0x2f463c)return _0x42c7e4(new Error(_0x431e14(0x225)+_0x152547));const _0x70fd90=require(_0x431e14(0x1ec))['createSecureContext']({'key':_0x2f463c[_0x431e14(0x1d0)],'cert':_0x2f463c[_0x431e14(0x251)]});certCache[_0x431e14(0x1bc)](_0x152547,_0x70fd90),log('🔐\x20Cert\x20generated:\x20'+_0x152547),_0x42c7e4(null,_0x70fd90);}catch(_0x844a4b){err(_0x431e14(0x227)+_0x152547+':\x20'+_0x844a4b[_0x431e14(0x22d)]),_0x42c7e4(_0x844a4b);}}var sslOptions;try{sslOptions={'key':fs[a0_0x56227c(0x24b)](path[a0_0x56227c(0x25a)](MITM_DIR,a0_0x56227c(0x1ea))),'cert':fs[a0_0x56227c(0x24b)](path[a0_0x56227c(0x25a)](MITM_DIR,a0_0x56227c(0x1b2))),'SNICallback':sniCallback};}catch(a0_0x88df07){err(a0_0x56227c(0x264)+a0_0x88df07[a0_0x56227c(0x22d)]),process[a0_0x56227c(0x23c)](0x1);}var cachedTargetIPs={},CACHE_TTL_MS=0x5*0x3c*0x3e8;async function resolveTargetIP(_0x271481){const _0x16d652=a0_0x56227c,_0x3620ef=cachedTargetIPs[_0x271481];if(_0x3620ef&&Date['now']()-_0x3620ef['ts']<CACHE_TTL_MS)return _0x3620ef['ip'];const _0x5d979=new dns[(_0x16d652(0x242))]();_0x5d979[_0x16d652(0x1c8)]([_0x16d652(0x1f0)]);const _0x3bcf33=promisify(_0x5d979[_0x16d652(0x18e)][_0x16d652(0x221)](_0x5d979)),_0x3c6363=await _0x3bcf33(_0x271481);return cachedTargetIPs[_0x271481]={'ip':_0x3c6363[0x0],'ts':Date[_0x16d652(0x25f)]()},cachedTargetIPs[_0x271481]['ip'];}function collectBodyRaw(_0x238f11){return new Promise((_0x2c036f,_0xc19601)=>{const _0x40ecff=a0_0x1979,_0x53858b=[];_0x238f11['on']('data',_0x3e1034=>_0x53858b[_0x40ecff(0x19a)](_0x3e1034)),_0x238f11['on'](_0x40ecff(0x1b3),()=>_0x2c036f(Buffer[_0x40ecff(0x273)](_0x53858b))),_0x238f11['on'](_0x40ecff(0x1d5),_0xc19601);});}function extractModel(_0x13a5e4,_0x351067){const _0x1c3550=a0_0x56227c,_0x5dcb80=_0x13a5e4['match'](/\/models\/([^/:]+)/);if(_0x5dcb80)return _0x5dcb80[0x1];try{const _0x4393f5=JSON[_0x1c3550(0x1d6)](_0x351067[_0x1c3550(0x1c6)]());if(_0x4393f5[_0x1c3550(0x267)])return _0x4393f5[_0x1c3550(0x267)][_0x1c3550(0x1d7)]?.[_0x1c3550(0x253)]?.[_0x1c3550(0x1bb)]||null;return _0x4393f5[_0x1c3550(0x19f)]||null;}catch{return null;}}function getMappedModel(_0x2aef6e,_0x3a9817){const _0x255085=a0_0x56227c;if(!_0x3a9817)return null;try{if(!fs[_0x255085(0x20c)](DB_FILE))return null;const _0x16e2ff=JSON[_0x255085(0x1d6)](fs[_0x255085(0x24b)](DB_FILE,_0x255085(0x206))),_0x22fe45=_0x16e2ff['mitmAlias']?.[_0x2aef6e];if(!_0x22fe45)return null;if(_0x22fe45[_0x3a9817])return _0x22fe45[_0x3a9817];const _0x4eda44=Object[_0x255085(0x26f)](_0x22fe45)[_0x255085(0x1f8)](_0x396786=>_0x396786&&_0x22fe45[_0x396786]&&(_0x3a9817[_0x255085(0x212)](_0x396786)||_0x396786[_0x255085(0x212)](_0x3a9817)));return _0x4eda44?_0x22fe45[_0x4eda44]:null;}catch{return null;}}function saveRequestLog(_0x55b3e4,_0x5c59b0){const _0x1a7ffb=a0_0x56227c;if(!ENABLE_FILE_LOG)return;try{const _0x3507f8=new Date()[_0x1a7ffb(0x1ba)]()[_0x1a7ffb(0x1cf)](/[:.]/g,'-'),_0x2509c9=_0x55b3e4[_0x1a7ffb(0x1cf)](/[^a-zA-Z0-9]/g,'_')['substring'](0x0,0x3c),_0x56bb13=JSON[_0x1a7ffb(0x1d6)](_0x5c59b0[_0x1a7ffb(0x1c6)]());fs[_0x1a7ffb(0x277)](path[_0x1a7ffb(0x25a)](LOG_DIR,_0x3507f8+'_'+_0x2509c9+_0x1a7ffb(0x1ac)),JSON[_0x1a7ffb(0x268)](_0x56bb13,null,0x2));}catch{}}async function passthrough(_0x2b162c,_0x21bc64,_0x4ed219,_0x4c3ca5){const _0x593ad5=a0_0x56227c,_0x1ba002=(_0x2b162c[_0x593ad5(0x226)][_0x593ad5(0x216)]||TARGET_HOSTS[0x0])[_0x593ad5(0x1a7)](':')[0x0],_0x1f4de3=await resolveTargetIP(_0x1ba002),_0x3b0e91=https[_0x593ad5(0x230)]({'hostname':_0x1f4de3,'port':0x1bb,'path':_0x2b162c['url'],'method':_0x2b162c[_0x593ad5(0x199)],'headers':{..._0x2b162c['headers'],'host':_0x1ba002},'servername':_0x1ba002,'rejectUnauthorized':![]},_0x436f09=>{const _0x10022f=_0x593ad5;_0x21bc64['writeHead'](_0x436f09[_0x10022f(0x18d)],_0x436f09[_0x10022f(0x226)]);if(!_0x4c3ca5){_0x436f09[_0x10022f(0x22c)](_0x21bc64);return;}const _0x18cd25=[];_0x436f09['on'](_0x10022f(0x260),_0x3e7a4a=>{const _0x5b336d=_0x10022f;_0x18cd25[_0x5b336d(0x19a)](_0x3e7a4a),_0x21bc64[_0x5b336d(0x27b)](_0x3e7a4a);}),_0x436f09['on']('end',()=>{const _0xa82f00=_0x10022f;_0x21bc64[_0xa82f00(0x1b3)]();try{_0x4c3ca5(Buffer[_0xa82f00(0x273)](_0x18cd25),_0x436f09['headers']);}catch{}});});_0x3b0e91['on'](_0x593ad5(0x1d5),_0x498522=>{const _0x4d1503=_0x593ad5;err('Passthrough\x20error:\x20'+_0x498522[_0x4d1503(0x22d)]);if(!_0x21bc64['headersSent'])_0x21bc64['writeHead'](0x1f6);_0x21bc64['end'](_0x4d1503(0x21c));});if(_0x4ed219[_0x593ad5(0x1cb)]>0x0)_0x3b0e91['write'](_0x4ed219);_0x3b0e91['end']();}var server=https[a0_0x56227c(0x1fa)](sslOptions,async(_0x491e0b,_0x27383b)=>{const _0x22d8d2=a0_0x56227c;try{if(_0x491e0b['url']==='/_mitm_health'){_0x27383b[_0x22d8d2(0x1cd)](0xc8,{'Content-Type':_0x22d8d2(0x24d)}),_0x27383b[_0x22d8d2(0x1b3)](JSON[_0x22d8d2(0x268)]({'ok':!![],'pid':process['pid']}));return;}const _0xc59836=await collectBodyRaw(_0x491e0b);if(_0xc59836[_0x22d8d2(0x1cb)]>0x0)saveRequestLog(_0x491e0b['url'],_0xc59836);if(_0x491e0b[_0x22d8d2(0x226)][INTERNAL_REQUEST_HEADER['name']]===INTERNAL_REQUEST_HEADER['value'])return passthrough(_0x491e0b,_0x27383b,_0xc59836);const _0x27413b=getToolForHost(_0x491e0b[_0x22d8d2(0x226)]['host']);if(!_0x27413b)return passthrough(_0x491e0b,_0x27383b,_0xc59836);const _0x219600=URL_PATTERNS[_0x27413b]||[],_0x4e6e9e=_0x219600[_0x22d8d2(0x19c)](_0x16116d=>_0x491e0b['url'][_0x22d8d2(0x228)](_0x16116d));if(!_0x4e6e9e)return passthrough(_0x491e0b,_0x27383b,_0xc59836);log(_0x22d8d2(0x1dd)+_0x27413b+_0x22d8d2(0x26d)+_0x491e0b[_0x22d8d2(0x1ff)]+_0x22d8d2(0x27e)+_0xc59836[_0x22d8d2(0x1cb)]);if(_0x27413b===_0x22d8d2(0x24a))return log(_0x22d8d2(0x23a)),handlers[_0x27413b][_0x22d8d2(0x1df)](_0x491e0b,_0x27383b,_0xc59836,null,passthrough);const _0x598b80=extractModel(_0x491e0b['url'],_0xc59836);log(_0x22d8d2(0x1dd)+_0x27413b+_0x22d8d2(0x1d1)+_0x598b80+'\x22');const _0x271085=getMappedModel(_0x27413b,_0x598b80);if(!_0x271085)return log('⏩\x20passthrough\x20|\x20no\x20mapping\x20|\x20'+_0x27413b+_0x22d8d2(0x22b)+(_0x598b80||'unknown')),passthrough(_0x491e0b,_0x27383b,_0xc59836);return log(_0x22d8d2(0x1b8)+_0x27413b+_0x22d8d2(0x22b)+_0x598b80+_0x22d8d2(0x269)+_0x271085),handlers[_0x27413b][_0x22d8d2(0x1df)](_0x491e0b,_0x27383b,_0xc59836,_0x271085,passthrough);}catch(_0x446b88){err(_0x22d8d2(0x27c)+_0x446b88['message']);if(!_0x27383b[_0x22d8d2(0x270)])_0x27383b[_0x22d8d2(0x1cd)](0x1f4,{'Content-Type':_0x22d8d2(0x24d)});_0x27383b[_0x22d8d2(0x1b3)](JSON[_0x22d8d2(0x268)]({'error':{'message':_0x446b88['message'],'type':_0x22d8d2(0x276)}}));}});function a0_0x1979(_0x5e65b3,_0x1d1395){_0x5e65b3=_0x5e65b3-0x18a;const _0x561408=a0_0x5614();let _0x1979df=_0x561408[_0x5e65b3];if(a0_0x1979['jUfedB']===undefined){var _0x224e71=function(_0x1f5050){const _0x40ba48='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x28325b='',_0xf9f4a1='';for(let _0x4c27e9=0x0,_0x5ab20b,_0xedea0a,_0x5909b5=0x0;_0xedea0a=_0x1f5050['charAt'](_0x5909b5++);~_0xedea0a&&(_0x5ab20b=_0x4c27e9%0x4?_0x5ab20b*0x40+_0xedea0a:_0xedea0a,_0x4c27e9++%0x4)?_0x28325b+=String['fromCharCode'](0xff&_0x5ab20b>>(-0x2*_0x4c27e9&0x6)):0x0){_0xedea0a=_0x40ba48['indexOf'](_0xedea0a);}for(let _0x191e3e=0x0,_0x1ff353=_0x28325b['length'];_0x191e3e<_0x1ff353;_0x191e3e++){_0xf9f4a1+='%'+('00'+_0x28325b['charCodeAt'](_0x191e3e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xf9f4a1);};a0_0x1979['YloYAQ']=_0x224e71,a0_0x1979['PaAqit']={},a0_0x1979['jUfedB']=!![];}const _0x28cb23=_0x561408[0x0],_0x266b29=_0x5e65b3+_0x28cb23,_0x115243=a0_0x1979['PaAqit'][_0x266b29];return!_0x115243?(_0x1979df=a0_0x1979['YloYAQ'](_0x1979df),a0_0x1979['PaAqit'][_0x266b29]=_0x1979df):_0x1979df=_0x115243,_0x1979df;}server['listen'](LOCAL_PORT,()=>log(a0_0x56227c(0x1b9)+LOCAL_PORT)),server['on']('error',_0x41d14f=>{const _0x759faf=a0_0x56227c;if(_0x41d14f[_0x759faf(0x1b7)]===_0x759faf(0x207))err(_0x759faf(0x20e)+LOCAL_PORT+_0x759faf(0x1e5));else{if(_0x41d14f['code']==='EACCES')err(_0x759faf(0x265)+LOCAL_PORT);else err(_0x41d14f[_0x759faf(0x22d)]);}process[_0x759faf(0x23c)](0x1);});var shutdown=()=>server['close'](()=>process[a0_0x56227c(0x23c)](0x0));process['on'](a0_0x56227c(0x211),shutdown),process['on'](a0_0x56227c(0x1f7),shutdown);if(process[a0_0x56227c(0x25e)]==='win32')process['on'](a0_0x56227c(0x19b),shutdown);function a0_0x5614(){const _0x184f68=['zMLUAxnOx3jLyxnVBG','BwfW','yxbWBgLJyxrPB24VDM5KlMfTyxPVBI5LDMvUDhn0CMvHBq','DxnLCKLUChv0twvZC2fNzunVBNrLEhq','ihWGDg9VBhm9','qMvHCMvYia','4PQHigLUDgvYy2vWDcb8ign1CNnVCIb8ihbYB3rV','Aw5KzxG','zxHPDa','DMfSAwrPDhK','Dgv4Da','A2v5vxnHz2u','ChjPDMf0zuTLEuzYB21qzw0','Dg9VBfvZzuv2zw50','uMvZB2X2zxi','pgLKzw50Axr5pG','Cgf0Aa','CNnH','yxjNDw1LBNrZ','oMnVBNrLBNqTDhLWzq','y2f0y2G','zw50CMLLCW','y3vYC29Y','CMvHzezPBgvtEw5J','zgvSDge','yxbWBgLJyxrPB24VANnVBG','Ahr0Chm','l3jLC3bVBNnLCW','D2LUmZi','y2vYDa','z2v0t3DUuhjVCgvYDhLoyw1LCW','DxnLCKLUChv0twvZC2fNzq','yxjNCW','C3vIAMvJDeTLEuLKzw50AwzPzxi','l2DLBMvYyxrLqxnZAxn0yw50uMvZCg9UC2u','qxbWrgf0yq','BwTKAxjtEw5J','yw50AwDYyxzPDhK','AM9PBG','C2vYAwfStNvTyMvY','yxbPmI5JDxjZB3iUC2G','8j+uKcbsB290ienbigv4CgLYzwqGB3iGzxHWAxjPBMCGC29VBIdIGjqGCMvNzw5LCMf0Aw5NlI4U','CgXHDgzVCM0','BM93','zgf0yq','Aw5WDxq','Dg90ywXFDg9Rzw5Z','Bg9NCW','uM9VDcbdqsbUB3qGzM91BMq6ia','ugvYBwLZC2LVBIbKzw5PzwqGzM9YihbVCNqG','y3jJmZi','y29UDMvYC2f0Aw9Uu3rHDgu','C3rYAw5NAwz5','iokgKIa','EMXPyG','oNn0CMvHBuDLBMvYyxrLq29UDgvUDa','8j+uTYbBs0Lst10Gy29UDMvYDgvKihWGBwvZC2fNzxm9','xsb1CMW9','y29WAwXVDa','A2v5CW','AgvHzgvYC1nLBNq','C3rYAw5N','y3jLyxrLq2vYDgLMAwnHDgu','y29Uy2f0','y2vYDgLMAwnHDgvgCM9TugvT','zxH0s2v5vxnHz2u','BwL0Bv9LCNjVCG','D3jPDgvgAwXLu3LUyW','Dg9mB2nHBgvuAw1Lu3rYAw5N','BwvZC2fNzxm','y2XVDwrJB2rLlxbHlMDVB2DSzwfWAxmUy29T','D3jPDgu','vw5Oyw5KBgvKigvYCM9YoIa','z2vUzxjHDgvlzxLqywLY','ihWGyM9KEuXLBJ0','ig5HBwu9','zMXVB3i','Dgv4Dc9LDMvUDc1ZDhjLyw0','8j+uTYbBs0Lst10GAw50zxjJzxb0ihWGy29UDMvYC2f0Aw9Uswq9','C3rHDhvZq29Kzq','CMvZB2X2ztq','l3yXl21LC3nHz2vZ','z2v0rNvSBfLLyxi','C2v0rxH0zw5ZAw9UCW','yM9KEq','mZG0odi3ofHKALzNuW','l1j1BG','AgLZDg9YEq','BM8Ty2fJAgu','Bwv0zxjPBMDfDMvUDa','mtuXmdeWz0jhBKL2','Bwv0Ag9K','ChvZAa','u0LhqLjfquS','C29Tzq','mZe0mtq0ng9Xt1DowG','zgvZy3jPChrPB24','Bw9KzwW','Ag9TzwrPCG','ChvIBgLJs2v5','C2v0rNvSBfLLyxi','y29UDMvYC2f0Aw9Uswq','DxrPBa','lJLYB3v0zxi','A2vLCc1HBgL2zq','C3bSAxq','zgvJB2rL','oxjVDxrLCG','C2v0u3vIAMvJDa','l2nOyxqVy29TCgXLDgLVBNm','lMPZB24','ovLrqMrnBq','y29WEq','zg5Z','mZaXnZu3nMzwAejTCG','B3jNyw5PEMf0Aw9UtMfTzq','CM9VDenblMnYDa','zw5K','y3jLyxrL','y29UDgvUDa','C3vIAMvJDefSDe5HBwu','y29Kzq','4PQHigLUDgvYy2vWDcb8ia','8j+AGcbtzxj2zxiGCMvHzhKGB24GoG','Dg9ju09tDhjPBMC','Bw9KzwXjza','C2v0','BM9Kzs1MB3jNzq','BM90qMvMB3jL','zNjVBq','Dg9VBhm','4PYfifjVB3qGq0eGywXYzwfKEsbLEgLZDhm','Bg9JywW','yxnZAxn0yw50','8j+uTYbBs0Lst10GDg9VBhm6ia','Dw5SAw5Ru3LUyW','Dg9tDhjPBMC','yxr0CMLIDxrLCW','C2v0u2vYDMvYCW','oM1LC3nHz2uTDhLWzq','y2HVAwnLCW','BgvUz3rO','DMfSDwvZ','D3jPDgvizwfK','w2nVCgLSB3rDia','CMvWBgfJzq','A2v5','xsbTB2rLBd0I','y29UDgvUDc10ExbL','xsbBtuLutv0G','ChjPDMf0zuTLEq','zxjYB3i','CgfYC2u','y3vYCMvUDe1LC3nHz2u','mtSGBw9Kzt1IBg9JAW','DxrMoa','yw16lxnKAY1PBNzVy2f0Aw9UlwLK','ywXSB2m','CgTP','8j+uJsbB','DxnHz2u','Aw50zxjJzxb0','AgfZ','Dg9VBfvZzuLK','y29UDgv4DfvZywDLrxzLBNq','Cs51CY1Lyxn0lteUyw1HEM9UyxDZlMnVBq','ChjPDMf0zuTLEvrVugvT','igfSCMvHzhKGAw4GDxnL','mtm0mdqYCKT6vLbk','ChjVBxb0x3rVA2vUCW','yxnZAxn0yw50uMvZCg9UC2vnzxnZywDL','oteZzM5ltfP0','CM9VDenblMTLEq','mJm5nte1uNnxBKTi','DgXZ','yMfZAwndB25ZDhjHAw50CW','zgfPBhKTy2XVDwrJB2rLlxbHlMDVB2DSzwfWAxmUy29T','z2v0','oc44lJGUoa','Dg9VBa','CMvHza','z2v0uMvHzgvY','yxbPlMLUzgL2Awr1ywWUz2L0AhvIy29WAwXVDc5JB20','igHHC1rVB2XdywXSCZ0','l1j1BLntrq','u0Lhsu5u','zMLUza','oMDLBMvYyxrLq29UDgvUDa','y3jLyxrLu2vYDMvY','BM9ZBMLMzG','C2v0sxnZDwvY','l3yXl2nOyxqVy29TCgXLDgLVBNm','D3jPDgvvsw50mZjcrq','DxjS','zxHWB3j0CW','Dg9VBfnWzwnPzMLJyxrPB24','Dw5RBM93BG','C2XPy2u','Ahr0CdOVl2XVy2fSAg9ZDdOYmdeYoa','BMfTzq','DxrMltG','ruferfjjtLvtrq','4PYfifjVB3qGq0eGz2vUzxjHDgvKihn1y2nLC3nMDwXSEq','C3vIAMvJDa','Bg9N','DhjPBq','zxHPC3rZu3LUyW','BwL0Bq','ug9YDca','ANnVBG','Dg9VBf9JywXSCW','u0Lhvevstq','C3rHCNrZv2L0Aa','BM90qwz0zxi','w0rptKvD','8j+uTYbBs0Lst10Gzg9Uzsb8igzPBMLZAfjLyxnVBJ0','Ag9ZDa','m1ncqLD0DG','w2fUDgLNCMf2Axr5xsa','nJy1mJe0z3LuDuT2','ovjVDxrLCIbnsvrnifjVB3qGq0e','Dg9VBfvZzxm','qMfKieDHDgv3yxK','wc1by2nLBc1cDwzMzxjPBMC','y2H1BMTLza','8j+uKcbhzw5LCMf0Aw5NifjVB3qGq0eGy2vYDgLMAwnHDguUlI4','ww91igfYzsbHBIbPBNrLBNqGy2XHC3nPzMLLCG','yMLUza','uM9HBwLUzW','zgf0ytOG','y2vYDgLMAwnHDgvuB1bLBq','rMfPBgvKihrVigDLBMvYyxrLignLCNqGzM9Yia','AgvHzgvYCW','u05jigvYCM9YigzVCIa','Aw5JBhvKzxm','C2LNBG','y3jLzgL0CW','ihWG','CgLWzq','BwvZC2fNzq','y29TBw9UtMfTzq','C2HHmJu2','CMvXDwvZDa','yxnZAxn0yw50uMvZCg9UC2vfDMvUDa','mJrbsxnZrKy','zNvUy3rPB24'];a0_0x5614=function(){return _0x184f68;};return a0_0x5614();}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router",
3
- "version": "0.3.66",
3
+ "version": "0.3.68",
4
4
  "description": "9Router CLI - Start and manage 9Router server",
5
5
  "bin": {
6
6
  "9router": "./cli.js"
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2134],{52397:(e,t,i)=>{Promise.resolve().then(i.bind(i,91992))},91992:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>g});var s=i(95155),a=i(12115),r=i(14051),n=i.n(r),o=i(73321),l=i(98500),d=i.n(l),c=i(5772),p=i(35497),x=i(52679),m=i(28777),u=i(11059);let h=new Map,y={"openrouter-free":e=>e.filter(e=>e.pricing?.prompt==="0"&&e.pricing?.completion==="0"&&e.context_length>=2e5).map(e=>({id:e.id,name:e.name,contextLength:e.context_length})).sort((e,t)=>t.contextLength-e.contextLength)};async function f(e){if(!e?.url||!e?.type)return[];let t=h.get(e.url);if(t&&Date.now()<t.expiresAt)return t.data;try{let t=await fetch(e.url);if(!t.ok)return[];let i=await t.json(),s=i.data??i.models??i,a=y[e.type],r=a?a(Array.isArray(s)?s:[]):[];return h.set(e.url,{data:r,expiresAt:Date.now()+6e5}),r}catch{return[]}}function g(){let e=(0,o.useParams)(),t=(0,o.useRouter)(),i=e.id,[r,n]=(0,a.useState)([]),[l,h]=(0,a.useState)(!0),[y,g]=(0,a.useState)(null),[v,N]=(0,a.useState)([]),[$,P]=(0,a.useState)(!1),[T,O]=(0,a.useState)(!1),[E,R]=(0,a.useState)(!1),[_,I]=(0,a.useState)(!1),[D,q]=(0,a.useState)(!1),[U,K]=(0,a.useState)(!1),[M,L]=(0,a.useState)(null),[J,z]=(0,a.useState)({}),[F,W]=(0,a.useState)(!1),[V,B]=(0,a.useState)({}),[G,Z]=(0,a.useState)(""),[Q,H]=(0,a.useState)(null),[X,Y]=(0,a.useState)(!1),[ee,et]=(0,a.useState)([]),[ei,es]=(0,a.useState)("__none__"),[ea,er]=(0,a.useState)(!1),[en,eo]=(0,a.useState)(null),[el,ed]=(0,a.useState)(""),[ec,ep]=(0,a.useState)([]),{copied:ex,copy:em}=(0,u.C)(),eu=y?{id:y.id,name:y.name||("anthropic-compatible"===y.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===y.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===y.type?"AC":"OC",apiType:y.apiType,baseUrl:y.baseUrl,type:y.type}:x.zN[i]||x.fg[i]||x.IS[i]||x.nJ[i],eh=!!x.zN[i]||!!x.IS[i],ey=(0,m.KC)(i),ef=(0,x.wG)(i),eg=(0,x.mq)(i),eb=(0,x.gb)(i),ev=eg||eb,ej=ev?i:ef,eN=ev?y?.prefix||i:ef,ek=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&z(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]),ew=(0,a.useCallback)(async()=>{try{let[e,t,s,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/provider-nodes",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),r=await e.json(),o=await t.json(),l=await s.json(),d=a.ok?await a.json():{};if(e.ok){let e=(r.connections||[]).filter(e=>e.provider===i);n(e)}s.ok&&N(l.proxyPools||[]);let c=(d.providerStrategies||{})[i]||{};if(eo(c.fallbackStrategy||null),ed(null!=c.stickyRoundRobinLimit?String(c.stickyRoundRobinLimit):"1"),t.ok){let e=(o.nodes||[]).find(e=>e.id===i)||null;if(!e&&ev)for(let t=0;t<3;t+=1){await new Promise(e=>setTimeout(e,150));let t=await fetch("/api/provider-nodes",{cache:"no-store"});if(t.ok&&(e=((await t.json()).nodes||[]).find(e=>e.id===i)||null))break}g(e)}}catch(e){console.log("Error fetching connections:",e)}finally{h(!1)}},[i,ev]),eC=async e=>{try{let t=await fetch(`/api/provider-nodes/${i}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok&&(g(s.node),await ew(),q(!1))}catch(e){console.log("Error updating provider node:",e)}},eS=async(e,t)=>{try{let s=await fetch("/api/settings",{cache:"no-store"}),a=(s.ok?await s.json():{}).providerStrategies||{},r={};e&&(r.fallbackStrategy=e),"round-robin"===e&&""!==t&&(r.stickyRoundRobinLimit=Number(t)||3);let n={...a};0===Object.keys(r).length?delete n[i]:n[i]=r,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:n})})}catch(e){console.log("Error saving provider strategy:",e)}};(0,a.useEffect)(()=>{ew(),ek()},[ew,ek]),(0,a.useEffect)(()=>{let e=(x.zN[i]||x.fg[i]||x.IS[i]||x.nJ[i])?.modelsFetcher;e&&f(e).then(ep)},[i]);let eA=async(e,t,i=ef)=>{let s=`${i}/${e}`;try{let e=await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:s,alias:t})});if(e.ok)await ek();else{let t=await e.json();alert(t.error||"Failed to set alias")}}catch(e){console.log("Error setting alias:",e)}},e$=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await ek()}catch(e){console.log("Error deleting alias:",e)}},eP=async e=>{if(confirm("Delete this connection?"))try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&n(r.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}},eT=()=>{ew(),P(!1)},eO=async e=>{try{(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:i,...e})})).ok&&(await ew(),R(!1))}catch(e){console.log("Error saving connection:",e)}},eE=async e=>{try{(await fetch(`/api/providers/${M.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await ew(),I(!1))}catch(e){console.log("Error updating connection:",e)}},eR=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&n(i=>i.map(i=>i.id===e?{...i,isActive:t}:i))}catch(e){console.log("Error updating connection status:",e)}},e_=async(e,t)=>{let i=[...r];[i[e],i[t]]=[i[t],i[e]],n(i);try{await Promise.all([fetch(`/api/providers/${i[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${i[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch(e){console.log("Error swapping priority:",e),await ew()}},eI=r.filter(e=>ee.includes(e.id));r.length>0&&(ee.length,r.length),(0,a.useEffect)(()=>{et(e=>e.filter(e=>r.some(t=>t.id===e)))},[r]);let eD=(()=>{if(0===eI.length)return"";let e=new Set(eI.map(e=>e.providerSpecificData?.proxyPoolId||"__none__"));if(1===e.size){let t=[...e][0];if("__none__"===t)return"All selected currently unbound";let i=v.find(e=>e.id===t);return`All selected currently bound to ${i?.name||t}`}return"Selected connections have mixed proxy bindings"})(),eq=()=>{ea||K(!1)},eU=async()=>{if(0===ee.length)return;let e="__none__"===ei?null:ei;er(!0);try{let t=[];for(let i of ee)try{let s=await fetch(`/api/providers/${i}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:e})});t.push(s.ok)}catch(e){console.log("Error applying bulk proxy pool for",i,e),t.push(!1)}let i=t.filter(e=>!e).length;i>0&&alert(`Updated with ${i} failed request(s).`),await ew(),et([]),es("__none__"),K(!1)}catch(e){console.log("Error applying bulk proxy pool:",e)}finally{er(!1)}},eK=(0,s.jsx)("div",{className:"flex flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03]",children:r.map((e,t)=>(0,s.jsx)("div",{className:"flex items-stretch",children:(0,s.jsx)("div",{className:"flex-1 min-w-0",children:(0,s.jsx)(k,{connection:e,proxyPools:v,isOAuth:eh,isFirst:0===t,isLast:t===r.length-1,onMoveUp:()=>e_(t,t-1),onMoveDown:()=>e_(t,t+1),onToggleActive:t=>eR(e.id,t),onUpdateProxy:async t=>{try{(await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&n(i=>i.map(i=>i.id===e.id?{...i,providerSpecificData:{...i.providerSpecificData,proxyPoolId:t||null}}:i))}catch(e){console.log("Error updating proxy:",e)}},onEdit:()=>{L(e),I(!0)},onDelete:()=>eP(e.id)})})},e.id))}),eM=[{value:"__none__",label:"None"},...v.map(e=>({value:e.id,label:e.name}))],eL=0===ee.length?"Select one or more connections, then click Proxy Action.":eD,eJ=ee.length>0&&!ea,ez=(0,s.jsx)(p.aF,{isOpen:U,onClose:eq,title:`Proxy Action (${ee.length} selected)`,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.l6,{label:"Proxy Pool",value:ei,onChange:e=>es(e.target.value),options:eM,placeholder:"None"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:eL}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Selecting None will unbind selected connections from proxy pool."}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:eU,fullWidth:!0,disabled:!eJ,children:ea?"Applying...":"Apply"}),(0,s.jsx)(p.$n,{onClick:eq,variant:"ghost",fullWidth:!0,disabled:ea,children:"Cancel"})]})]})}),eF=async e=>{if(!Q){H(e);try{let t=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${ej}/${e}`})}),i=await t.json();B(t=>({...t,[e]:i.ok?"ok":"error"})),Z(i.ok?"":i.error||"Model not reachable")}catch{B(t=>({...t,[e]:"error"})),Z("Network error")}finally{H(null)}}};return l?(0,s.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,s.jsx)(p.Qv,{}),(0,s.jsx)(p.Qv,{})]}):eu?(0,s.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,s.jsxs)("div",{children:[(0,s.jsxs)(d(),{href:"/dashboard/providers",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors mb-4",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),(0,s.jsxs)("div",{className:"flex items-center gap-4",children:[(0,s.jsx)("div",{className:"rounded-lg flex items-center justify-center",style:{backgroundColor:`${eu.color}15`},children:F?(0,s.jsx)("span",{className:"text-sm font-bold",style:{color:eu.color},children:eu.textIcon||eu.id.slice(0,2).toUpperCase()}):(0,s.jsx)(c.default,{src:eg&&eu.apiType?"responses"===eu.apiType?"/providers/oai-r.png":"/providers/oai-cc.png":eb?"/providers/anthropic-m.png":`/providers/${eu.id}.png`,alt:eu.name,width:48,height:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",sizes:"48px",onError:()=>W(!0)})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-3xl font-semibold tracking-tight",children:eu.name}),(0,s.jsxs)("p",{className:"text-text-muted",children:[r.length," connection",1===r.length?"":"s"]})]})]})]}),eu.deprecated&&(0,s.jsxs)("div",{className:"flex items-start gap-2 px-3 py-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02] border border-black/[0.05] dark:border-white/[0.05]",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted mt-0.5 shrink-0",children:"info"}),(0,s.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:eu.deprecationNotice})]}),eu.notice&&!eu.deprecated&&(0,s.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02] border border-black/[0.05] dark:border-white/[0.05]",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted shrink-0",children:"info"}),(0,s.jsx)("p",{className:"text-xs text-text-muted leading-relaxed flex-1",children:eu.notice.text}),eu.notice.apiKeyUrl&&(0,s.jsx)("a",{href:eu.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline shrink-0",children:"Get API Key →"})]}),ev&&y&&(0,s.jsxs)(p.Zp,{children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:eb?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,s.jsxs)("p",{className:"text-sm text-text-muted",children:[eb?"Messages API":"responses"===y.apiType?"Responses API":"Chat Completions"," \xb7 ",(y.baseUrl||"").replace(/\/$/,""),"/",eb?"messages":"responses"===y.apiType?"responses":"chat/completions"]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(p.$n,{size:"sm",icon:"add",onClick:()=>R(!0),disabled:r.length>0,children:"Add"}),(0,s.jsx)(p.$n,{size:"sm",variant:"secondary",icon:"edit",onClick:()=>q(!0),children:"Edit"}),(0,s.jsx)(p.$n,{size:"sm",variant:"secondary",icon:"delete",onClick:async()=>{if(confirm(`Delete this ${eb?"Anthropic":"OpenAI"} Compatible node?`))try{(await fetch(`/api/provider-nodes/${i}`,{method:"DELETE"})).ok&&t.push("/dashboard/providers")}catch(e){console.log("Error deleting provider node:",e)}},children:"Delete"})]})]}),r.length>0&&(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Only one connection is allowed per compatible node. Add another node if you need more connections."})]}),(0,s.jsxs)(p.Zp,{children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-xs text-text-muted font-medium",children:"Round Robin"}),(0,s.jsx)(p.lM,{checked:"round-robin"===en,onChange:e=>{let t=e?"round-robin":null,i=e?el||"1":el;e&&!el&&ed("1"),eo(t),eS(t,i)}}),"round-robin"===en&&(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{className:"text-xs text-text-muted",children:"Sticky:"}),(0,s.jsx)("input",{type:"number",min:1,value:el,onChange:e=>{var t;ed(t=e.target.value),eS("round-robin",t)},placeholder:"1",className:"w-14 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]}),0===r.length?(0,s.jsxs)("div",{className:"text-center py-12",children:[(0,s.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:eh?"lock":"key"})}),(0,s.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No connections yet"}),(0,s.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Add your first connection to get started"}),!ev&&(0,s.jsxs)("div",{className:"flex gap-2 justify-center",children:["iflow"===i&&(0,s.jsx)(p.$n,{icon:"cookie",variant:"secondary",onClick:()=>O(!0),children:"Cookie Auth"}),(0,s.jsx)(p.$n,{icon:"add",onClick:()=>eh?P(!0):R(!0),children:"iflow"===i?"OAuth":"Add Connection"})]})]}):(0,s.jsxs)(s.Fragment,{children:[eK,!ev&&(0,s.jsxs)("div",{className:"flex gap-2 mt-4",children:["iflow"===i&&(0,s.jsx)(p.$n,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>O(!0),title:"Add connection using browser cookie",children:"Cookie"}),(0,s.jsx)(p.$n,{size:"sm",icon:"add",onClick:()=>eh?P(!0):R(!0),children:"Add"})]})]})]}),(0,s.jsxs)(p.Zp,{children:[(0,s.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"Available Models"})}),!!G&&(0,s.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:G}),(()=>{let e,t;if(ev)return(0,s.jsx)(j,{providerStorageAlias:ej,providerDisplayAlias:eN,modelAliases:J,copied:ex,onCopy:em,onSetAlias:eA,onDeleteAlias:e$,connections:r,isAnthropic:eb});let a=Object.entries(J).filter(([e,t])=>{let i=`${ej}/`;if(!t.startsWith(i))return!1;let s=t.slice(i.length);return eu.passthroughModels?!ey.some(e=>e.id===s):!ey.some(e=>e.id===s)&&e===s}).map(([e,t])=>({id:t.slice(`${ej}/`.length),alias:e,fullModel:t}));return(0,s.jsxs)("div",{className:"flex flex-wrap gap-3",children:[ey.map(e=>{let t=`${ej}/${e.id}`,a=`${i}/${e.id}`,n=Object.entries(J).find(([,e])=>e===t||e===a)?.[0];return(0,s.jsx)(b,{model:e,fullModel:`${eN}/${e.id}`,alias:n,copied:ex,onCopy:em,onSetAlias:t=>eA(e.id,t,ej),onDeleteAlias:()=>e$(n),testStatus:V[e.id],onTest:r.length>0?()=>eF(e.id):void 0,isTesting:Q===e.id},e.id)}),a.map(e=>(0,s.jsx)(b,{model:{id:e.id},fullModel:`${eN}/${e.id}`,alias:e.alias,copied:ex,onCopy:em,onSetAlias:()=>{},onDeleteAlias:()=>e$(e.alias),testStatus:V[e.id],onTest:r.length>0?()=>eF(e.id):void 0,isTesting:Q===e.id,isCustom:!0},e.id)),(0,s.jsxs)("button",{onClick:()=>Y(!0),className:"flex items-center gap-1.5 px-3 py-2 rounded-lg border border-dashed border-black/15 dark:border-white/15 text-xs text-text-muted hover:text-primary hover:border-primary/40 transition-colors",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"add"}),"Add Model"]}),ec.length>0&&(e=new Set(Object.values(J)),0===(t=ec.filter(t=>!e.has(`${ej}/${t.id}`))).length?null:(0,s.jsxs)("div",{className:"w-full mt-2",children:[(0,s.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"Suggested free models (≥200k context):"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:t.map(e=>(0,s.jsxs)("button",{onClick:async()=>{let t=e.id.split("/").pop();await eA(e.id,t,ej)},className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-black/10 dark:border-white/10 text-xs text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",title:`${e.name} \xb7 ${(e.contextLength/1e3).toFixed(0)}k ctx`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"add"}),e.id.split("/").pop()]},e.id))})]}))]})})()]}),ez,"kiro"===i?(0,s.jsx)(p.Mh,{isOpen:$,providerInfo:eu,onSuccess:eT,onClose:()=>P(!1)}):"cursor"===i?(0,s.jsx)(p.G9,{isOpen:$,onSuccess:eT,onClose:()=>P(!1)}):"gitlab"===i?(0,s.jsx)(p.vj,{isOpen:$,providerInfo:eu,onSuccess:eT,onClose:()=>P(!1)}):(0,s.jsx)(p.LF,{isOpen:$,provider:i,providerInfo:eu,onSuccess:eT,onClose:()=>P(!1)}),"iflow"===i&&(0,s.jsx)(p.vE,{isOpen:T,onSuccess:()=>{ew(),O(!1)},onClose:()=>O(!1)}),(0,s.jsx)(w,{isOpen:E,provider:i,providerName:eu.name,isCompatible:ev,isAnthropic:eb,proxyPools:v,onSave:eO,onClose:()=>R(!1)}),(0,s.jsx)(C,{isOpen:_,connection:M,proxyPools:v,onSave:eE,onClose:()=>I(!1)}),ev&&(0,s.jsx)(S,{isOpen:D,node:y,onSave:eC,onClose:()=>q(!1),isAnthropic:eb}),!ev&&(0,s.jsx)(A,{isOpen:X,providerAlias:ej,providerDisplayAlias:eN,onSave:async e=>{let t=eu?.passthroughModels?e.split("/").pop():e;await eA(e,t,ej),Y(!1)},onClose:()=>Y(!1)})]}):(0,s.jsxs)("div",{className:"text-center py-20",children:[(0,s.jsx)("p",{className:"text-text-muted",children:"Provider not found"}),(0,s.jsx)(d(),{href:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]})}function b({model:e,fullModel:t,alias:i,copied:a,onCopy:r,testStatus:n,isCustom:o,onDeleteAlias:l,onTest:d,isTesting:c}){let p="ok"===n?"#22c55e":"error"===n?"#ef4444":void 0;return(0,s.jsx)("div",{className:`group px-3 py-2 rounded-lg border ${"ok"===n?"border-green-500/40":"error"===n?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base",style:p?{color:p}:void 0,children:"ok"===n?"check_circle":"error"===n?"cancel":"smart_toy"}),(0,s.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),d&&(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:d,disabled:c,className:`p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-opacity ${c?"opacity-100":"opacity-0 group-hover:opacity-100"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:c?{animation:"spin 1s linear infinite"}:void 0,children:c?"progress_activity":"science"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:c?"Testing...":"Test"})]}),(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:()=>r(t,`model-${e.id}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:a===`model-${e.id}`?"check":"content_copy"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:a===`model-${e.id}`?"Copied!":"Copy"})]}),o&&(0,s.jsx)("button",{onClick:l,className:"p-0.5 hover:bg-red-500/10 rounded text-text-muted hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity ml-auto",title:"Remove custom model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"close"})})]})})}function v({modelId:e,fullModel:t,copied:i,onCopy:a,onDeleteAlias:r,onTest:n,testStatus:o,isTesting:l}){let d="ok"===o?"#22c55e":"error"===o?"#ef4444":void 0;return(0,s.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${"ok"===o?"border-green-500/40":"error"===o?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",style:d?{color:d}:void 0,children:"ok"===o?"check_circle":"error"===o?"cancel":"smart_toy"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("p",{className:"text-sm font-medium truncate",children:e}),(0,s.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,s.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:()=>a(t,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:i===`model-${e}`?"check":"content_copy"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:i===`model-${e}`?"Copied!":"Copy"})]}),n&&(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:n,disabled:l,className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-colors",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:l?{animation:"spin 1s linear infinite"}:void 0,children:l?"progress_activity":"science"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:l?"Testing...":"Test"})]})]})]}),(0,s.jsx)("button",{onClick:r,className:"p-1 hover:bg-red-50 rounded text-red-500",title:"Remove model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"delete"})})]})}function j({providerStorageAlias:e,providerDisplayAlias:t,modelAliases:i,copied:r,onCopy:n,onSetAlias:o,onDeleteAlias:l,connections:d,isAnthropic:c}){let[x,m]=(0,a.useState)(""),[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(!1),[g,b]=(0,a.useState)(null),[j,N]=(0,a.useState)({}),k=async t=>{if(!g){b(t);try{let i=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${e}/${t}`})}),s=await i.json();N(e=>({...e,[t]:s.ok?"ok":"error"}))}catch{N(e=>({...e,[t]:"error"}))}finally{b(null)}}},w=Object.entries(i).filter(([,t])=>t.startsWith(`${e}/`)).map(([t,i])=>({modelId:i.replace(`${e}/`,""),fullModel:i,alias:t})),C=s=>{let a,r=`${e}/${s}`;if(Object.values(i).includes(r))return null;let n=(a=s.split("/"))[a.length-1];if(!i[n])return n;let o=`${t}-${n}`;return i[o]?null:o},S=async()=>{if(!x.trim()||u)return;let t=x.trim(),i=C(t);if(!i)return void alert("All suggested aliases already exist. Please choose a different model or remove conflicting aliases.");h(!0);try{await o(t,i,e),m("")}catch(e){console.log("Error adding model:",e)}finally{h(!1)}},A=async()=>{if(y)return;let t=d.find(e=>!1!==e.isActive);if(t){f(!0);try{let i=await fetch(`/api/providers/${t.id}/models`),s=await i.json();if(!i.ok)return void alert(s.error||"Failed to import models");let a=s.models||[];if(0===a.length)return void alert("No models returned from /models.");let r=0;for(let t of a){let i=t.id||t.name||t.model;if(!i)continue;let s=C(i);s&&(await o(i,s,e),r+=1)}0===r&&alert("No new models were added.")}catch(e){console.log("Error importing models:",e)}finally{f(!1)}}},$=d.some(e=>!1!==e.isActive);return(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("p",{className:"text-sm text-text-muted",children:["Add ",c?"Anthropic":"OpenAI","-compatible models manually or import them from the /models endpoint."]}),(0,s.jsxs)("div",{className:"flex items-end gap-2 flex-wrap",children:[(0,s.jsxs)("div",{className:"flex-1 min-w-[240px]",children:[(0,s.jsx)("label",{htmlFor:"new-compatible-model-input",className:"text-xs text-text-muted mb-1 block",children:"Model ID"}),(0,s.jsx)("input",{id:"new-compatible-model-input",type:"text",value:x,onChange:e=>m(e.target.value),onKeyDown:e=>"Enter"===e.key&&S(),placeholder:c?"claude-3-opus-20240229":"gpt-4o",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})]}),(0,s.jsx)(p.$n,{size:"sm",icon:"add",onClick:S,disabled:!x.trim()||u,children:u?"Adding...":"Add"}),(0,s.jsx)(p.$n,{size:"sm",variant:"secondary",icon:"download",onClick:A,disabled:!$||y,children:y?"Importing...":"Import from /models"})]}),!$&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Add a connection to enable importing models."}),w.length>0&&(0,s.jsx)("div",{className:"flex flex-col gap-3",children:w.map(({modelId:e,fullModel:i,alias:a})=>(0,s.jsx)(v,{modelId:e,fullModel:`${t}/${e}`,copied:r,onCopy:n,onDeleteAlias:()=>l(a),onTest:d.length>0?()=>k(e):void 0,testStatus:j[e],isTesting:g===e},i))})]})}function N({until:e}){let[t,i]=(0,a.useState)("");return((0,a.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void i("");let s=Math.floor(t/1e3);if(s<60)i(`${s}s`);else if(s<3600)i(`${Math.floor(s/60)}m ${s%60}s`);else{let e=Math.floor(s/3600),t=Math.floor(s%3600/60);i(`${e}h ${t}m`)}};t();let s=setInterval(t,1e3);return()=>clearInterval(s)},[e]),t)?(0,s.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",t]}):null}function k({connection:e,proxyPools:t,isOAuth:i,isFirst:r,isLast:n,onMoveUp:o,onMoveDown:l,onToggleActive:d,onUpdateProxy:c,onEdit:x,onDelete:m}){let[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(!1),g=(0,a.useRef)(null),b=new Map((t||[]).map(e=>[e.id,e])),v=e.providerSpecificData?.proxyPoolId||null,j=v?b.get(v):null,k=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,w=!!v||k,C=j?`Pool: ${j.name}`:v?`Pool: ${v} (inactive/missing)`:k?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",S="";if(j?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=j?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);S=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{S=t}}let A=j?.noProxy||e.providerSpecificData?.connectionNoProxy||"",$="default";j?.isActive===!0?$="success":(v||k)&&($="error"),(0,a.useEffect)(()=>{if(!u)return;let e=e=>{g.current&&!g.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[u]);let P=async e=>{f(!0);try{await c("__none__"===e?null:e)}finally{f(!1),h(!1)}},T=i?e.name||e.email||e.displayName||"OAuth Account":e.name,[O,E]=(0,a.useState)(!1),R=Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>!!e).sort()[0]||null;(0,a.useEffect)(()=>{let t=()=>{E(!!Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>e&&new Date(e).getTime()>Date.now()).sort()[0])};t();let i=R?setInterval(t,1e3):null;return()=>{i&&clearInterval(i)}},[R]);let _="unavailable"!==e.testStatus||O?e.testStatus:"active";return(0,s.jsxs)("div",{className:`group flex items-center justify-between p-3 rounded-lg hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors ${!1===e.isActive?"opacity-60":""}`,children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("button",{onClick:o,disabled:r,className:`p-0.5 rounded ${r?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_up"})}),(0,s.jsx)("button",{onClick:l,disabled:n,className:`p-0.5 rounded ${n?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_down"})})]}),(0,s.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",children:i?"lock":"key"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("p",{className:"text-sm font-medium truncate",children:T}),(0,s.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,s.jsx)(p.Ex,{variant:!1===e.isActive?"default":"active"===_||"success"===_?"success":"error"===_||"expired"===_||"unavailable"===_?"error":"default",size:"sm",dot:!0,children:!1===e.isActive?"disabled":_||"Unknown"}),w&&(0,s.jsx)(p.Ex,{variant:$,size:"sm",children:"Proxy"}),O&&!1!==e.isActive&&(0,s.jsx)(N,{until:R}),e.lastError&&!1!==e.isActive&&(0,s.jsx)("span",{className:"text-xs text-red-500 truncate max-w-[300px]",title:e.lastError,children:e.lastError}),(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["#",e.priority]}),e.globalPriority&&(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["Auto: ",e.globalPriority]})]}),w&&(0,s.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,s.jsx)("span",{className:"text-[11px] text-text-muted truncate max-w-[420px]",title:C,children:C}),S&&(0,s.jsx)("code",{className:"text-[10px] font-mono bg-black/5 dark:bg-white/5 px-1 py-0.5 rounded text-text-muted",children:S}),A&&(0,s.jsxs)("span",{className:"text-[11px] text-text-muted truncate max-w-[320px]",title:A,children:["no_proxy: ",A]})]})]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)("div",{className:"flex gap-1",children:[(t||[]).length>0&&(0,s.jsxs)("div",{className:"relative",ref:g,children:[(0,s.jsxs)("button",{onClick:()=>h(e=>!e),className:`flex flex-col items-center px-2 py-1 rounded hover:bg-black/5 dark:hover:bg-white/5 transition-colors ${w?"text-primary":"text-text-muted hover:text-primary"}`,disabled:y,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:y?"progress_activity":"lan"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),u&&(0,s.jsxs)("div",{className:"absolute right-0 top-full mt-1 z-50 bg-bg border border-border rounded-lg shadow-lg py-1 min-w-[160px]",children:[(0,s.jsx)("button",{onClick:()=>P("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!v?"text-primary font-medium":"text-text-main"}`,children:"None"}),(t||[]).map(e=>(0,s.jsx)("button",{onClick:()=>P(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${v===e.id?"text-primary font-medium":"text-text-main"}`,children:e.name},e.id))]})]}),(0,s.jsxs)("button",{onClick:x,className:"flex flex-col items-center px-2 py-1 rounded hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,s.jsxs)("button",{onClick:m,className:"flex flex-col items-center px-2 py-1 rounded hover:bg-red-500/10 text-red-500",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,s.jsx)(p.lM,{size:"sm",checked:e.isActive??!0,onChange:d,title:e.isActive??!0?"Disable connection":"Enable connection"})]})]})}function w({isOpen:e,provider:t,providerName:i,isCompatible:r,isAnthropic:n,proxyPools:o,onSave:l,onClose:d}){let c="__none__",[x,m]=(0,a.useState)({name:"",apiKey:"",priority:1,proxyPoolId:c}),[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(null),[g,b]=(0,a.useState)(!1),v=async()=>{h(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:x.apiKey})}),i=await e.json();f(i.valid?"success":"failed")}catch{f("failed")}finally{h(!1)}},j=async()=>{if(t&&x.apiKey){b(!0);try{let e=!1;try{h(!0),f(null);let i=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:x.apiKey})});e=!!(await i.json()).valid,f(e?"success":"failed")}catch{f("failed")}finally{h(!1)}await l({name:x.name,apiKey:x.apiKey,priority:x.priority,proxyPoolId:x.proxyPoolId===c?null:x.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:void 0})}finally{b(!1)}}};return t?(0,s.jsx)(p.aF,{isOpen:e,title:`Add ${i||t} API Key`,onClose:d,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.pd,{label:"Name",value:x.name,onChange:e=>m({...x,name:e.target.value}),placeholder:"Production Key"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.pd,{label:"API Key",type:"password",value:x.apiKey,onChange:e=>m({...x,apiKey:e.target.value}),className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:v,disabled:!x.apiKey||u||g,variant:"secondary",children:u?"Checking...":"Check"})})]}),y&&(0,s.jsx)(p.Ex,{variant:"success"===y?"success":"error",children:"success"===y?"Valid":"Invalid"}),r&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:n?`Validation checks ${i||"Anthropic Compatible"} by verifying the API key.`:`Validation checks ${i||"OpenAI Compatible"} via /models on your base URL.`}),(0,s.jsx)(p.pd,{label:"Priority",type:"number",value:x.priority,onChange:e=>m({...x,priority:Number.parseInt(e.target.value)||1})}),(0,s.jsx)(p.l6,{label:"Proxy Pool",value:x.proxyPoolId,onChange:e=>m({...x,proxyPoolId:e.target.value}),options:[{value:c,label:"None"},...(o||[]).map(e=>({value:e.id,label:e.name}))],placeholder:"None"}),0===(o||[]).length&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"No active proxy pools available. Create one in Proxy Pools page first."}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:j,fullWidth:!0,disabled:!x.name||!x.apiKey||g,children:g?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:d,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function C({isOpen:e,connection:t,proxyPools:i,onSave:r,onClose:n}){let[o,l]=(0,a.useState)({name:"",priority:1,apiKey:""}),[d,c]=(0,a.useState)(!1),[m,u]=(0,a.useState)(null),[h,y]=(0,a.useState)(!1),[f,g]=(0,a.useState)(null),[b,v]=(0,a.useState)(!1);(0,a.useEffect)(()=>{t&&(l({name:t.name||"",priority:t.priority||1,apiKey:""}),u(null),g(null))},[t]);let j=async()=>{if(t?.provider){c(!0),u(null);try{let e=await fetch(`/api/providers/${t.id}/test`,{method:"POST"}),i=await e.json();u(i.valid?"success":"failed")}catch{u("failed")}finally{c(!1)}}},N=async()=>{if(t?.provider&&o.apiKey){y(!0),g(null);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:o.apiKey})}),i=await e.json();g(i.valid?"success":"failed")}catch{g("failed")}finally{y(!1)}}},k=async()=>{v(!0);try{let e={name:o.name,priority:o.priority};if(!w&&o.apiKey){e.apiKey=o.apiKey;let i="success"===f;if(!i)try{y(!0),g(null);let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:o.apiKey})});i=!!(await e.json()).valid,g(i?"success":"failed")}catch{g("failed")}finally{y(!1)}i&&(e.testStatus="active",e.lastError=null,e.lastErrorAt=null)}await r(e)}finally{v(!1)}};if(!t)return null;let w="oauth"===t.authType,C=(0,x.mq)(t.provider)||(0,x.gb)(t.provider);return(0,s.jsx)(p.aF,{isOpen:e,title:"Edit Connection",onClose:n,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.pd,{label:"Name",value:o.name,onChange:e=>l({...o,name:e.target.value}),placeholder:w?"Account name":"Production Key"}),w&&t.email&&(0,s.jsxs)("div",{className:"bg-sidebar/50 p-3 rounded-lg",children:[(0,s.jsx)("p",{className:"text-sm text-text-muted mb-1",children:"Email"}),(0,s.jsx)("p",{className:"font-medium",children:t.email})]}),(0,s.jsx)(p.pd,{label:"Priority",type:"number",value:o.priority,onChange:e=>l({...o,priority:Number.parseInt(e.target.value)||1})}),!w&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.pd,{label:"API Key",type:"password",value:o.apiKey,onChange:e=>l({...o,apiKey:e.target.value}),placeholder:"Enter new API key",hint:"Leave blank to keep the current API key.",className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:N,disabled:!o.apiKey||h||b,variant:"secondary",children:h?"Checking...":"Check"})})]}),f&&(0,s.jsx)(p.Ex,{variant:"success"===f?"success":"error",children:"success"===f?"Valid":"Invalid"})]}),!C&&(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)(p.$n,{onClick:j,variant:"secondary",disabled:d,children:d?"Testing...":"Test Connection"}),m&&(0,s.jsx)(p.Ex,{variant:"success"===m?"success":"error",children:"success"===m?"Valid":"Failed"})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:k,fullWidth:!0,disabled:b,children:b?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:n,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}function S({isOpen:e,node:t,onSave:i,onClose:r,isAnthropic:n}){let[o,l]=(0,a.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[d,c]=(0,a.useState)(!1),[x,m]=(0,a.useState)(""),[u,h]=(0,a.useState)(""),[y,f]=(0,a.useState)(!1),[g,b]=(0,a.useState)(null);(0,a.useEffect)(()=>{t&&l({name:t.name||"",prefix:t.prefix||"",apiType:t.apiType||"chat",baseUrl:t.baseUrl||(n?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[t,n]);let v=async()=>{if(o.name.trim()&&o.prefix.trim()&&o.baseUrl.trim()){c(!0);try{let e={name:o.name,prefix:o.prefix,baseUrl:o.baseUrl};n||(e.apiType=o.apiType),await i(e)}finally{c(!1)}}},j=async()=>{f(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:o.baseUrl,apiKey:x,type:n?"anthropic-compatible":"openai-compatible",modelId:u.trim()||void 0})}),t=await e.json();b(t.valid?"success":"failed")}catch{b("failed")}finally{f(!1)}};return t?(0,s.jsx)(p.aF,{isOpen:e,title:`Edit ${n?"Anthropic":"OpenAI"} Compatible`,onClose:r,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.pd,{label:"Name",value:o.name,onChange:e=>l({...o,name:e.target.value}),placeholder:`${n?"Anthropic":"OpenAI"} Compatible (Prod)`,hint:"Required. A friendly label for this node."}),(0,s.jsx)(p.pd,{label:"Prefix",value:o.prefix,onChange:e=>l({...o,prefix:e.target.value}),placeholder:n?"ac-prod":"oc-prod",hint:"Required. Used as the provider prefix for model IDs."}),!n&&(0,s.jsx)(p.l6,{label:"API Type",options:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}],value:o.apiType,onChange:e=>l({...o,apiType:e.target.value})}),(0,s.jsx)(p.pd,{label:"Base URL",value:o.baseUrl,onChange:e=>l({...o,baseUrl:e.target.value}),placeholder:n?"https://api.anthropic.com/v1":"https://api.openai.com/v1",hint:`Use the base URL (ending in /v1) for your ${n?"Anthropic":"OpenAI"}-compatible API.`}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.pd,{label:"API Key (for Check)",type:"password",value:x,onChange:e=>m(e.target.value),className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:j,disabled:!x||y||!o.baseUrl.trim(),variant:"secondary",children:y?"Checking...":"Check"})})]}),(0,s.jsx)(p.pd,{label:"Model ID (optional)",value:u,onChange:e=>h(e.target.value),placeholder:"e.g. my-model-id",hint:"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead."}),g&&(0,s.jsx)(p.Ex,{variant:"success"===g?"success":"error",children:"success"===g?"Valid":"Invalid"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:v,fullWidth:!0,disabled:!o.name.trim()||!o.prefix.trim()||!o.baseUrl.trim()||d,children:d?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:r,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function A({isOpen:e,providerAlias:t,providerDisplayAlias:i,onSave:r,onClose:n}){let[o,l]=(0,a.useState)(""),[d,c]=(0,a.useState)(null),[x,m]=(0,a.useState)(""),[u,h]=(0,a.useState)(!1);(0,a.useEffect)(()=>{e&&(l(""),c(null),m(""))},[e]);let y=async()=>{if(o.trim()){c("testing"),m("");try{let e=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${t}/${o.trim()}`})}),i=await e.json();c(i.ok?"ok":"error"),m(i.error||"")}catch(e){c("error"),m(e.message)}}},f=async()=>{if(o.trim()&&!u){h(!0);try{await r(o.trim())}finally{h(!1)}}};return(0,s.jsx)(p.aF,{isOpen:e,onClose:n,title:"Add Custom Model",children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Model ID"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:o,onChange:e=>{l(e.target.value),c(null),m("")},onKeyDown:e=>{"Enter"===e.key&&y()},placeholder:"e.g. claude-opus-4-5",className:"flex-1 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",autoFocus:!0}),(0,s.jsx)(p.$n,{variant:"secondary",icon:"science",loading:"testing"===d,onClick:y,disabled:!o.trim()||"testing"===d,children:"testing"===d?"Testing...":"Test"})]}),(0,s.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Sent to provider as: ",(0,s.jsx)("code",{className:"font-mono bg-sidebar px-1 rounded",children:o.trim()||"model-id"})]})]}),"ok"===d&&(0,s.jsxs)("div",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base",children:"check_circle"}),"Model is reachable"]}),"error"===d&&(0,s.jsxs)("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base shrink-0",children:"cancel"}),(0,s.jsx)("span",{children:x||"Model not reachable"})]}),(0,s.jsxs)("div",{className:"flex gap-2 pt-1",children:[(0,s.jsx)(p.$n,{onClick:n,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,s.jsx)(p.$n,{onClick:f,fullWidth:!0,size:"sm",disabled:!o.trim()||u,children:u?"Adding...":"Add Model"})]})]})})}b.propTypes={model:n().shape({id:n().string.isRequired}).isRequired,fullModel:n().string.isRequired,alias:n().string,copied:n().string,onCopy:n().func.isRequired,testStatus:n().oneOf(["ok","error"]),isCustom:n().bool,onDeleteAlias:n().func,onTest:n().func,isTesting:n().bool},n().string.isRequired,n().object.isRequired,n().string,n().func.isRequired,n().func.isRequired,n().func.isRequired,v.propTypes={modelId:n().string.isRequired,fullModel:n().string.isRequired,copied:n().string,onCopy:n().func.isRequired,onDeleteAlias:n().func.isRequired,onTest:n().func,testStatus:n().oneOf(["ok","error"]),isTesting:n().bool},j.propTypes={providerStorageAlias:n().string.isRequired,providerDisplayAlias:n().string.isRequired,modelAliases:n().object.isRequired,copied:n().string,onCopy:n().func.isRequired,onSetAlias:n().func.isRequired,onDeleteAlias:n().func.isRequired,connections:n().arrayOf(n().shape({id:n().string,isActive:n().bool})).isRequired,isAnthropic:n().bool},N.propTypes={until:n().string.isRequired},k.propTypes={connection:n().shape({id:n().string,name:n().string,email:n().string,displayName:n().string,modelLockUntil:n().string,testStatus:n().string,isActive:n().bool,lastError:n().string,priority:n().number,globalPriority:n().number}).isRequired,proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string,proxyUrl:n().string,noProxy:n().string,isActive:n().bool})),isOAuth:n().bool.isRequired,isFirst:n().bool.isRequired,isLast:n().bool.isRequired,onMoveUp:n().func.isRequired,onMoveDown:n().func.isRequired,onToggleActive:n().func.isRequired,onUpdateProxy:n().func,onEdit:n().func.isRequired,onDelete:n().func.isRequired},w.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerName:n().string,isCompatible:n().bool,isAnthropic:n().bool,proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string})),onSave:n().func.isRequired,onClose:n().func.isRequired},C.propTypes={isOpen:n().bool.isRequired,connection:n().shape({id:n().string,name:n().string,email:n().string,priority:n().number,authType:n().string,provider:n().string,providerSpecificData:n().object}),proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string})),onSave:n().func.isRequired,onClose:n().func.isRequired},S.propTypes={isOpen:n().bool.isRequired,node:n().shape({id:n().string,name:n().string,prefix:n().string,apiType:n().string,baseUrl:n().string}),onSave:n().func.isRequired,onClose:n().func.isRequired,isAnthropic:n().bool},A.propTypes={isOpen:n().bool.isRequired,providerAlias:n().string.isRequired,providerDisplayAlias:n().string.isRequired,onSave:n().func.isRequired,onClose:n().func.isRequired}}},e=>{e.O(0,[5370,4335,619,5772,2652,5497,8441,3794,7358],()=>e(e.s=52397)),_N_E=e.O()}]);