vforclaude2 0.3.87

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 (1908) hide show
  1. package/.claude/.claude.json +5 -0
  2. package/.claude/backups/.claude.json.backup.1772012846605 +4 -0
  3. package/.claude/cowork_plugins/install-counts-cache.json +634 -0
  4. package/.claude/cowork_plugins/known_marketplaces.json +10 -0
  5. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/.claude-plugin/marketplace.json +115 -0
  6. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/LICENSE +202 -0
  7. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/README.md +80 -0
  8. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/.claude-plugin/plugin.json +8 -0
  9. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/.mcp.json +44 -0
  10. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/LICENSE +202 -0
  11. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/README.md +82 -0
  12. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/instrument-data-to-allotrope/LICENSE.txt +201 -0
  13. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/instrument-data-to-allotrope/requirements.txt +26 -0
  14. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/nextflow-development/LICENSE.txt +201 -0
  15. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/scientific-problem-selection/LICENSE.txt +201 -0
  16. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/scvi-tools/LICENSE.txt +201 -0
  17. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/bio-research/skills/single-cell-rna-qc/LICENSE.txt +201 -0
  18. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/.claude-plugin/plugin.json +8 -0
  19. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/LICENSE +202 -0
  20. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/skills/cowork-plugin-customizer/LICENSE.txt +202 -0
  21. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/cowork-plugin-management/skills/cowork-plugin-customizer/examples/customized-mcp.json +40 -0
  22. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/.claude-plugin/plugin.json +8 -0
  23. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/.mcp.json +40 -0
  24. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/LICENSE +202 -0
  25. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/customer-support/README.md +139 -0
  26. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/design/.claude-plugin/plugin.json +8 -0
  27. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/design/.mcp.json +40 -0
  28. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/design/README.md +116 -0
  29. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/engineering/.claude-plugin/plugin.json +8 -0
  30. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/engineering/.mcp.json +44 -0
  31. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/engineering/README.md +135 -0
  32. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/.claude-plugin/plugin.json +8 -0
  33. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/.mcp.json +36 -0
  34. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/LICENSE +202 -0
  35. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/enterprise-search/README.md +156 -0
  36. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/.claude-plugin/plugin.json +8 -0
  37. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/.mcp.json +32 -0
  38. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/LICENSE +202 -0
  39. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/finance/README.md +91 -0
  40. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/human-resources/.claude-plugin/plugin.json +8 -0
  41. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/human-resources/.mcp.json +28 -0
  42. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/human-resources/README.md +134 -0
  43. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/.claude-plugin/plugin.json +8 -0
  44. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/.mcp.json +36 -0
  45. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/LICENSE +202 -0
  46. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/legal/README.md +229 -0
  47. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/.claude-plugin/plugin.json +8 -0
  48. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/.mcp.json +48 -0
  49. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/LICENSE +202 -0
  50. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/marketing/README.md +88 -0
  51. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/operations/.claude-plugin/plugin.json +8 -0
  52. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/operations/.mcp.json +36 -0
  53. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/operations/README.md +134 -0
  54. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/.claude-plugin/plugin.json +13 -0
  55. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/.mcp.json +8 -0
  56. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/LICENSE +21 -0
  57. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/apollo/README.md +99 -0
  58. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/.claude-plugin/marketplace.json +20 -0
  59. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/.claude-plugin/plugin.json +9 -0
  60. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/.mcp.json +32 -0
  61. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/LICENSE +21 -0
  62. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/README.md +132 -0
  63. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/brand-voice/settings/brand-voice.local.md.example +42 -0
  64. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/.claude-plugin/plugin.json +9 -0
  65. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/.mcp.json +8 -0
  66. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/LICENSE +202 -0
  67. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/common-room/README.md +64 -0
  68. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/.claude-plugin/plugin.json +11 -0
  69. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/.mcp.json +12 -0
  70. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/LICENSE +21 -0
  71. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/partner-built/slack/README.md +108 -0
  72. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/.claude-plugin/plugin.json +8 -0
  73. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/.mcp.json +64 -0
  74. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/LICENSE +202 -0
  75. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/product-management/README.md +102 -0
  76. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/.claude-plugin/plugin.json +8 -0
  77. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/.mcp.json +44 -0
  78. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/LICENSE +202 -0
  79. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/README.md +96 -0
  80. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/productivity/skills/dashboard.html +3098 -0
  81. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/.claude-plugin/plugin.json +8 -0
  82. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/.mcp.json +60 -0
  83. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/LICENSE +202 -0
  84. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/README.md +143 -0
  85. package/.claude/cowork_plugins/marketplaces/knowledge-work-plugins/sales/skills/create-an-asset/README.md +169 -0
  86. package/.claude/cowork_settings.json +10 -0
  87. package/.claude/debug/93c847f7-9a51-4a5f-9a41-6fd84fab16d3.txt +37 -0
  88. package/.claude/settings.local.json +7 -0
  89. package/.next/BUILD_ID +1 -0
  90. package/.next/app-path-routes-manifest.json +104 -0
  91. package/.next/build-manifest.json +20 -0
  92. package/.next/diagnostics/build-diagnostics.json +6 -0
  93. package/.next/diagnostics/framework.json +1 -0
  94. package/.next/export-marker.json +6 -0
  95. package/.next/images-manifest.json +68 -0
  96. package/.next/next-minimal-server.js.nft.json +1 -0
  97. package/.next/next-server.js.nft.json +1 -0
  98. package/.next/package.json +1 -0
  99. package/.next/prerender-manifest.json +527 -0
  100. package/.next/react-loadable-manifest.json +8 -0
  101. package/.next/required-server-files.js +365 -0
  102. package/.next/required-server-files.json +365 -0
  103. package/.next/routes-manifest.json +709 -0
  104. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -0
  105. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -0
  106. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -0
  107. package/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -0
  108. package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -0
  109. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -0
  110. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -0
  111. package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -0
  112. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -0
  113. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -0
  114. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -0
  115. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -0
  116. package/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -0
  117. package/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -0
  118. package/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -0
  119. package/.next/server/app/(dashboard)/dashboard/page.js +2 -0
  120. package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -0
  121. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -0
  122. package/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -0
  123. package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -0
  124. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -0
  125. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -0
  126. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -0
  127. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -0
  128. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -0
  129. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -0
  130. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -0
  131. package/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -0
  132. package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -0
  133. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -0
  134. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -0
  135. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -0
  136. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -0
  137. package/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -0
  138. package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -0
  139. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -0
  140. package/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -0
  141. package/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -0
  142. package/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -0
  143. package/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -0
  144. package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -0
  145. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -0
  146. package/.next/server/app/_global-error/page.js +32 -0
  147. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  148. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  149. package/.next/server/app/_global-error.html +1 -0
  150. package/.next/server/app/_global-error.meta +16 -0
  151. package/.next/server/app/_global-error.rsc +14 -0
  152. package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  153. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  154. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  155. package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  156. package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  157. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  158. package/.next/server/app/_not-found/page.js +2 -0
  159. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  160. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  161. package/.next/server/app/_not-found.html +1 -0
  162. package/.next/server/app/_not-found.meta +16 -0
  163. package/.next/server/app/_not-found.rsc +20 -0
  164. package/.next/server/app/_not-found.segments/_full.segment.rsc +20 -0
  165. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  166. package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
  167. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  168. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  169. package/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -0
  170. package/.next/server/app/api/auth/login/route.js +1 -0
  171. package/.next/server/app/api/auth/login/route.js.nft.json +1 -0
  172. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
  173. package/.next/server/app/api/auth/logout/route.js +1 -0
  174. package/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  175. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
  176. package/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -0
  177. package/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -0
  178. package/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -0
  179. package/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -0
  180. package/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -0
  181. package/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -0
  182. package/.next/server/app/api/cli-tools/claude-settings/route.js +2 -0
  183. package/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -0
  184. package/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -0
  185. package/.next/server/app/api/cli-tools/codex-settings/route.js +32 -0
  186. package/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -0
  187. package/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -0
  188. package/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -0
  189. package/.next/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -0
  190. package/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -0
  191. package/.next/server/app/api/cli-tools/droid-settings/route.js +2 -0
  192. package/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -0
  193. package/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -0
  194. package/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -0
  195. package/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -0
  196. package/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -0
  197. package/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -0
  198. package/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -0
  199. package/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -0
  200. package/.next/server/app/api/cloud/auth/route.js +1 -0
  201. package/.next/server/app/api/cloud/auth/route.js.nft.json +1 -0
  202. package/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -0
  203. package/.next/server/app/api/cloud/credentials/update/route.js +1 -0
  204. package/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -0
  205. package/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -0
  206. package/.next/server/app/api/cloud/model/resolve/route.js +1 -0
  207. package/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -0
  208. package/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -0
  209. package/.next/server/app/api/cloud/models/alias/route.js +1 -0
  210. package/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -0
  211. package/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -0
  212. package/.next/server/app/api/combos/[id]/route.js +1 -0
  213. package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -0
  214. package/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -0
  215. package/.next/server/app/api/combos/route.js +1 -0
  216. package/.next/server/app/api/combos/route.js.nft.json +1 -0
  217. package/.next/server/app/api/combos/route_client-reference-manifest.js +1 -0
  218. package/.next/server/app/api/init/route.js +1 -0
  219. package/.next/server/app/api/init/route.js.nft.json +1 -0
  220. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -0
  221. package/.next/server/app/api/keys/[id]/route.js +1 -0
  222. package/.next/server/app/api/keys/[id]/route.js.nft.json +1 -0
  223. package/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -0
  224. package/.next/server/app/api/keys/route.js +1 -0
  225. package/.next/server/app/api/keys/route.js.nft.json +1 -0
  226. package/.next/server/app/api/keys/route_client-reference-manifest.js +1 -0
  227. package/.next/server/app/api/locale/route.js +1 -0
  228. package/.next/server/app/api/locale/route.js.nft.json +1 -0
  229. package/.next/server/app/api/locale/route_client-reference-manifest.js +1 -0
  230. package/.next/server/app/api/models/alias/route.js +1 -0
  231. package/.next/server/app/api/models/alias/route.js.nft.json +1 -0
  232. package/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -0
  233. package/.next/server/app/api/models/availability/route.js +1 -0
  234. package/.next/server/app/api/models/availability/route.js.nft.json +1 -0
  235. package/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -0
  236. package/.next/server/app/api/models/route.js +1 -0
  237. package/.next/server/app/api/models/route.js.nft.json +1 -0
  238. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  239. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -0
  240. package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -0
  241. package/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -0
  242. package/.next/server/app/api/oauth/cursor/auto-import/route.js +4 -0
  243. package/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -0
  244. package/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -0
  245. package/.next/server/app/api/oauth/cursor/import/route.js +1 -0
  246. package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -0
  247. package/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -0
  248. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -0
  249. package/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -0
  250. package/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -0
  251. package/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -0
  252. package/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -0
  253. package/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -0
  254. package/.next/server/app/api/oauth/kiro/import/route.js +1 -0
  255. package/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -0
  256. package/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -0
  257. package/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -0
  258. package/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -0
  259. package/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -0
  260. package/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -0
  261. package/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -0
  262. package/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -0
  263. package/.next/server/app/api/pricing/route.js +1 -0
  264. package/.next/server/app/api/pricing/route.js.nft.json +1 -0
  265. package/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -0
  266. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -0
  267. package/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -0
  268. package/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -0
  269. package/.next/server/app/api/provider-nodes/route.js +1 -0
  270. package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -0
  271. package/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -0
  272. package/.next/server/app/api/provider-nodes/validate/route.js +1 -0
  273. package/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -0
  274. package/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -0
  275. package/.next/server/app/api/providers/[id]/models/route.js +1 -0
  276. package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -0
  277. package/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -0
  278. package/.next/server/app/api/providers/[id]/route.js +1 -0
  279. package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
  280. package/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
  281. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -0
  282. package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -0
  283. package/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -0
  284. package/.next/server/app/api/providers/client/route.js +1 -0
  285. package/.next/server/app/api/providers/client/route.js.nft.json +1 -0
  286. package/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -0
  287. package/.next/server/app/api/providers/route.js +1 -0
  288. package/.next/server/app/api/providers/route.js.nft.json +1 -0
  289. package/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
  290. package/.next/server/app/api/providers/test-batch/route.js +1 -0
  291. package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -0
  292. package/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -0
  293. package/.next/server/app/api/providers/validate/route.js +1 -0
  294. package/.next/server/app/api/providers/validate/route.js.nft.json +1 -0
  295. package/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -0
  296. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -0
  297. package/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -0
  298. package/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -0
  299. package/.next/server/app/api/proxy-pools/route.js +1 -0
  300. package/.next/server/app/api/proxy-pools/route.js.nft.json +1 -0
  301. package/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -0
  302. package/.next/server/app/api/settings/database/route.js +1 -0
  303. package/.next/server/app/api/settings/database/route.js.nft.json +1 -0
  304. package/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -0
  305. package/.next/server/app/api/settings/proxy-test/route.js +1 -0
  306. package/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -0
  307. package/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -0
  308. package/.next/server/app/api/settings/require-login/route.js +1 -0
  309. package/.next/server/app/api/settings/require-login/route.js.nft.json +1 -0
  310. package/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -0
  311. package/.next/server/app/api/settings/route.js +1 -0
  312. package/.next/server/app/api/settings/route.js.nft.json +1 -0
  313. package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  314. package/.next/server/app/api/shutdown/route.js +1 -0
  315. package/.next/server/app/api/shutdown/route.js.nft.json +1 -0
  316. package/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -0
  317. package/.next/server/app/api/tags/route.js +1 -0
  318. package/.next/server/app/api/tags/route.js.nft.json +1 -0
  319. package/.next/server/app/api/tags/route_client-reference-manifest.js +1 -0
  320. package/.next/server/app/api/translator/console-logs/route.js +1 -0
  321. package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -0
  322. package/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -0
  323. package/.next/server/app/api/translator/console-logs/stream/route.js +7 -0
  324. package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -0
  325. package/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -0
  326. package/.next/server/app/api/translator/load/route.js +1 -0
  327. package/.next/server/app/api/translator/load/route.js.nft.json +1 -0
  328. package/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -0
  329. package/.next/server/app/api/translator/save/route.js +1 -0
  330. package/.next/server/app/api/translator/save/route.js.nft.json +1 -0
  331. package/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -0
  332. package/.next/server/app/api/translator/send/route.js +1 -0
  333. package/.next/server/app/api/translator/send/route.js.nft.json +1 -0
  334. package/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -0
  335. package/.next/server/app/api/translator/translate/route.js +1 -0
  336. package/.next/server/app/api/translator/translate/route.js.nft.json +1 -0
  337. package/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -0
  338. package/.next/server/app/api/tunnel/disable/route.js +1 -0
  339. package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -0
  340. package/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -0
  341. package/.next/server/app/api/tunnel/enable/route.js +1 -0
  342. package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -0
  343. package/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -0
  344. package/.next/server/app/api/tunnel/status/route.js +1 -0
  345. package/.next/server/app/api/tunnel/status/route.js.nft.json +1 -0
  346. package/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -0
  347. package/.next/server/app/api/usage/[connectionId]/route.js +1 -0
  348. package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -0
  349. package/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -0
  350. package/.next/server/app/api/usage/chart/route.js +1 -0
  351. package/.next/server/app/api/usage/chart/route.js.nft.json +1 -0
  352. package/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -0
  353. package/.next/server/app/api/usage/history/route.js +1 -0
  354. package/.next/server/app/api/usage/history/route.js.nft.json +1 -0
  355. package/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -0
  356. package/.next/server/app/api/usage/providers/route.js +1 -0
  357. package/.next/server/app/api/usage/providers/route.js.nft.json +1 -0
  358. package/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -0
  359. package/.next/server/app/api/usage/request-details/route.js +1 -0
  360. package/.next/server/app/api/usage/request-details/route.js.nft.json +1 -0
  361. package/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -0
  362. package/.next/server/app/api/usage/request-logs/route.js +1 -0
  363. package/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -0
  364. package/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -0
  365. package/.next/server/app/api/usage/stats/route.js +1 -0
  366. package/.next/server/app/api/usage/stats/route.js.nft.json +1 -0
  367. package/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -0
  368. package/.next/server/app/api/usage/stream/route.js +7 -0
  369. package/.next/server/app/api/usage/stream/route.js.nft.json +1 -0
  370. package/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -0
  371. package/.next/server/app/api/v1/api/chat/route.js +1 -0
  372. package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -0
  373. package/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -0
  374. package/.next/server/app/api/v1/chat/completions/route.js +1 -0
  375. package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -0
  376. package/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -0
  377. package/.next/server/app/api/v1/embeddings/route.js +1 -0
  378. package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -0
  379. package/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -0
  380. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -0
  381. package/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -0
  382. package/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -0
  383. package/.next/server/app/api/v1/messages/route.js +1 -0
  384. package/.next/server/app/api/v1/messages/route.js.nft.json +1 -0
  385. package/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -0
  386. package/.next/server/app/api/v1/models/route.js +1 -0
  387. package/.next/server/app/api/v1/models/route.js.nft.json +1 -0
  388. package/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -0
  389. package/.next/server/app/api/v1/responses/route.js +1 -0
  390. package/.next/server/app/api/v1/responses/route.js.nft.json +1 -0
  391. package/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -0
  392. package/.next/server/app/api/v1/route.js +1 -0
  393. package/.next/server/app/api/v1/route.js.nft.json +1 -0
  394. package/.next/server/app/api/v1/route_client-reference-manifest.js +1 -0
  395. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -0
  396. package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -0
  397. package/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -0
  398. package/.next/server/app/api/v1beta/models/route.js +1 -0
  399. package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -0
  400. package/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -0
  401. package/.next/server/app/api/version/route.js +1 -0
  402. package/.next/server/app/api/version/route.js.nft.json +1 -0
  403. package/.next/server/app/api/version/route_client-reference-manifest.js +1 -0
  404. package/.next/server/app/callback/page.js +2 -0
  405. package/.next/server/app/callback/page.js.nft.json +1 -0
  406. package/.next/server/app/callback/page_client-reference-manifest.js +1 -0
  407. package/.next/server/app/callback.html +1 -0
  408. package/.next/server/app/callback.meta +15 -0
  409. package/.next/server/app/callback.rsc +24 -0
  410. package/.next/server/app/callback.segments/_full.segment.rsc +24 -0
  411. package/.next/server/app/callback.segments/_head.segment.rsc +6 -0
  412. package/.next/server/app/callback.segments/_index.segment.rsc +8 -0
  413. package/.next/server/app/callback.segments/_tree.segment.rsc +4 -0
  414. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +9 -0
  415. package/.next/server/app/callback.segments/callback.segment.rsc +5 -0
  416. package/.next/server/app/dashboard/cli-tools.html +1 -0
  417. package/.next/server/app/dashboard/cli-tools.meta +17 -0
  418. package/.next/server/app/dashboard/cli-tools.rsc +24 -0
  419. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +6 -0
  420. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +5 -0
  421. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  422. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  423. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +24 -0
  424. package/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +6 -0
  425. package/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +8 -0
  426. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +5 -0
  427. package/.next/server/app/dashboard/combos.html +1 -0
  428. package/.next/server/app/dashboard/combos.meta +17 -0
  429. package/.next/server/app/dashboard/combos.rsc +26 -0
  430. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +9 -0
  431. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +5 -0
  432. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  433. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  434. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +26 -0
  435. package/.next/server/app/dashboard/combos.segments/_head.segment.rsc +6 -0
  436. package/.next/server/app/dashboard/combos.segments/_index.segment.rsc +8 -0
  437. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +5 -0
  438. package/.next/server/app/dashboard/endpoint.html +1 -0
  439. package/.next/server/app/dashboard/endpoint.meta +17 -0
  440. package/.next/server/app/dashboard/endpoint.rsc +24 -0
  441. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +6 -0
  442. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +5 -0
  443. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  444. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  445. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +24 -0
  446. package/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +6 -0
  447. package/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +8 -0
  448. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +5 -0
  449. package/.next/server/app/dashboard/mitm.html +1 -0
  450. package/.next/server/app/dashboard/mitm.meta +17 -0
  451. package/.next/server/app/dashboard/mitm.rsc +23 -0
  452. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +6 -0
  453. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +5 -0
  454. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  455. package/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  456. package/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +23 -0
  457. package/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +6 -0
  458. package/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +8 -0
  459. package/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +5 -0
  460. package/.next/server/app/dashboard/profile.html +1 -0
  461. package/.next/server/app/dashboard/profile.meta +17 -0
  462. package/.next/server/app/dashboard/profile.rsc +26 -0
  463. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +9 -0
  464. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +5 -0
  465. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  466. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  467. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +26 -0
  468. package/.next/server/app/dashboard/profile.segments/_head.segment.rsc +6 -0
  469. package/.next/server/app/dashboard/profile.segments/_index.segment.rsc +8 -0
  470. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +5 -0
  471. package/.next/server/app/dashboard/providers/new.html +1 -0
  472. package/.next/server/app/dashboard/providers/new.meta +18 -0
  473. package/.next/server/app/dashboard/providers/new.rsc +26 -0
  474. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +9 -0
  475. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +5 -0
  476. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  477. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  478. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  479. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +26 -0
  480. package/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +6 -0
  481. package/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +8 -0
  482. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +5 -0
  483. package/.next/server/app/dashboard/providers.html +1 -0
  484. package/.next/server/app/dashboard/providers.meta +17 -0
  485. package/.next/server/app/dashboard/providers.rsc +26 -0
  486. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +9 -0
  487. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  488. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  489. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  490. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +26 -0
  491. package/.next/server/app/dashboard/providers.segments/_head.segment.rsc +6 -0
  492. package/.next/server/app/dashboard/providers.segments/_index.segment.rsc +8 -0
  493. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +5 -0
  494. package/.next/server/app/dashboard/proxy-pools.html +1 -0
  495. package/.next/server/app/dashboard/proxy-pools.meta +17 -0
  496. package/.next/server/app/dashboard/proxy-pools.rsc +26 -0
  497. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +9 -0
  498. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +5 -0
  499. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  500. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  501. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +26 -0
  502. package/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +6 -0
  503. package/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +8 -0
  504. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +5 -0
  505. package/.next/server/app/dashboard/quota.html +1 -0
  506. package/.next/server/app/dashboard/quota.meta +17 -0
  507. package/.next/server/app/dashboard/quota.rsc +24 -0
  508. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +7 -0
  509. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +5 -0
  510. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  511. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  512. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +24 -0
  513. package/.next/server/app/dashboard/quota.segments/_head.segment.rsc +6 -0
  514. package/.next/server/app/dashboard/quota.segments/_index.segment.rsc +8 -0
  515. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +5 -0
  516. package/.next/server/app/dashboard/settings/pricing/page.js +2 -0
  517. package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -0
  518. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -0
  519. package/.next/server/app/dashboard/settings/pricing.html +1 -0
  520. package/.next/server/app/dashboard/settings/pricing.meta +17 -0
  521. package/.next/server/app/dashboard/settings/pricing.rsc +24 -0
  522. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +24 -0
  523. package/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +6 -0
  524. package/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +8 -0
  525. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +4 -0
  526. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +9 -0
  527. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +5 -0
  528. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +5 -0
  529. package/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +5 -0
  530. package/.next/server/app/dashboard/translator.html +1 -0
  531. package/.next/server/app/dashboard/translator.meta +17 -0
  532. package/.next/server/app/dashboard/translator.rsc +26 -0
  533. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +9 -0
  534. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +5 -0
  535. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  536. package/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  537. package/.next/server/app/dashboard/translator.segments/_full.segment.rsc +26 -0
  538. package/.next/server/app/dashboard/translator.segments/_head.segment.rsc +6 -0
  539. package/.next/server/app/dashboard/translator.segments/_index.segment.rsc +8 -0
  540. package/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +5 -0
  541. package/.next/server/app/dashboard/usage.html +1 -0
  542. package/.next/server/app/dashboard/usage.meta +17 -0
  543. package/.next/server/app/dashboard/usage.rsc +26 -0
  544. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +9 -0
  545. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +5 -0
  546. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  547. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  548. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +26 -0
  549. package/.next/server/app/dashboard/usage.segments/_head.segment.rsc +6 -0
  550. package/.next/server/app/dashboard/usage.segments/_index.segment.rsc +8 -0
  551. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +5 -0
  552. package/.next/server/app/dashboard.html +1 -0
  553. package/.next/server/app/dashboard.meta +16 -0
  554. package/.next/server/app/dashboard.rsc +24 -0
  555. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +6 -0
  556. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  557. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  558. package/.next/server/app/dashboard.segments/_full.segment.rsc +24 -0
  559. package/.next/server/app/dashboard.segments/_head.segment.rsc +6 -0
  560. package/.next/server/app/dashboard.segments/_index.segment.rsc +8 -0
  561. package/.next/server/app/dashboard.segments/_tree.segment.rsc +5 -0
  562. package/.next/server/app/favicon.ico/route.js +1 -0
  563. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  564. package/.next/server/app/favicon.ico.body +0 -0
  565. package/.next/server/app/favicon.ico.meta +1 -0
  566. package/.next/server/app/index.html +1 -0
  567. package/.next/server/app/index.meta +16 -0
  568. package/.next/server/app/index.rsc +19 -0
  569. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -0
  570. package/.next/server/app/index.segments/_full.segment.rsc +19 -0
  571. package/.next/server/app/index.segments/_head.segment.rsc +6 -0
  572. package/.next/server/app/index.segments/_index.segment.rsc +8 -0
  573. package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  574. package/.next/server/app/landing/page.js +2 -0
  575. package/.next/server/app/landing/page.js.nft.json +1 -0
  576. package/.next/server/app/landing/page_client-reference-manifest.js +1 -0
  577. package/.next/server/app/landing.html +1 -0
  578. package/.next/server/app/landing.meta +15 -0
  579. package/.next/server/app/landing.rsc +24 -0
  580. package/.next/server/app/landing.segments/_full.segment.rsc +24 -0
  581. package/.next/server/app/landing.segments/_head.segment.rsc +6 -0
  582. package/.next/server/app/landing.segments/_index.segment.rsc +8 -0
  583. package/.next/server/app/landing.segments/_tree.segment.rsc +4 -0
  584. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +9 -0
  585. package/.next/server/app/landing.segments/landing.segment.rsc +5 -0
  586. package/.next/server/app/login/page.js +2 -0
  587. package/.next/server/app/login/page.js.nft.json +1 -0
  588. package/.next/server/app/login/page_client-reference-manifest.js +1 -0
  589. package/.next/server/app/login.html +1 -0
  590. package/.next/server/app/login.meta +15 -0
  591. package/.next/server/app/login.rsc +25 -0
  592. package/.next/server/app/login.segments/_full.segment.rsc +25 -0
  593. package/.next/server/app/login.segments/_head.segment.rsc +6 -0
  594. package/.next/server/app/login.segments/_index.segment.rsc +8 -0
  595. package/.next/server/app/login.segments/_tree.segment.rsc +5 -0
  596. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +10 -0
  597. package/.next/server/app/login.segments/login.segment.rsc +5 -0
  598. package/.next/server/app/manifest.webmanifest/route.js +16 -0
  599. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  600. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
  601. package/.next/server/app/manifest.webmanifest.body +1 -0
  602. package/.next/server/app/manifest.webmanifest.meta +1 -0
  603. package/.next/server/app/page.js +2 -0
  604. package/.next/server/app/page.js.nft.json +1 -0
  605. package/.next/server/app/page_client-reference-manifest.js +1 -0
  606. package/.next/server/app-paths-manifest.json +104 -0
  607. package/.next/server/chunks/1130.js +1 -0
  608. package/.next/server/chunks/1220.js +3 -0
  609. package/.next/server/chunks/1424.js +1 -0
  610. package/.next/server/chunks/1705.js +1 -0
  611. package/.next/server/chunks/1813.js +1 -0
  612. package/.next/server/chunks/241.js +1 -0
  613. package/.next/server/chunks/2417.js +1 -0
  614. package/.next/server/chunks/289.js +1 -0
  615. package/.next/server/chunks/318.js +164 -0
  616. package/.next/server/chunks/3245.js +1 -0
  617. package/.next/server/chunks/3832.js +1 -0
  618. package/.next/server/chunks/412.js +7 -0
  619. package/.next/server/chunks/4124.js +1 -0
  620. package/.next/server/chunks/4642.js +1 -0
  621. package/.next/server/chunks/4689.js +1 -0
  622. package/.next/server/chunks/4741.js +18 -0
  623. package/.next/server/chunks/4755.js +1 -0
  624. package/.next/server/chunks/4989.js +2 -0
  625. package/.next/server/chunks/5270.js +1 -0
  626. package/.next/server/chunks/5296.js +1 -0
  627. package/.next/server/chunks/5297.js +1 -0
  628. package/.next/server/chunks/5573.js +1 -0
  629. package/.next/server/chunks/6108.js +1 -0
  630. package/.next/server/chunks/6182.js +5 -0
  631. package/.next/server/chunks/63.js +45 -0
  632. package/.next/server/chunks/6446.js +1 -0
  633. package/.next/server/chunks/649.js +15 -0
  634. package/.next/server/chunks/6649.js +1 -0
  635. package/.next/server/chunks/6844.js +1 -0
  636. package/.next/server/chunks/7341.js +1 -0
  637. package/.next/server/chunks/7774.js +120 -0
  638. package/.next/server/chunks/7861.js +1 -0
  639. package/.next/server/chunks/7890.js +3 -0
  640. package/.next/server/chunks/7898.js +1 -0
  641. package/.next/server/chunks/7924.js +1 -0
  642. package/.next/server/chunks/8332.js +1 -0
  643. package/.next/server/chunks/8895.js +4 -0
  644. package/.next/server/chunks/9201.js +1 -0
  645. package/.next/server/chunks/9609.js +1 -0
  646. package/.next/server/chunks/9713.js +1 -0
  647. package/.next/server/chunks/9718.js +1 -0
  648. package/.next/server/functions-config-manifest.json +18 -0
  649. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  650. package/.next/server/middleware-build-manifest.js +1 -0
  651. package/.next/server/middleware-manifest.json +6 -0
  652. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  653. package/.next/server/middleware.js +56 -0
  654. package/.next/server/middleware.js.nft.json +1 -0
  655. package/.next/server/next-font-manifest.js +1 -0
  656. package/.next/server/next-font-manifest.json +1 -0
  657. package/.next/server/pages/404.html +1 -0
  658. package/.next/server/pages/500.html +1 -0
  659. package/.next/server/pages-manifest.json +4 -0
  660. package/.next/server/prefetch-hints.json +1 -0
  661. package/.next/server/server-reference-manifest.js +1 -0
  662. package/.next/server/server-reference-manifest.json +1 -0
  663. package/.next/server/webpack-runtime.js +1 -0
  664. package/.next/standalone/.next/BUILD_ID +1 -0
  665. package/.next/standalone/.next/app-path-routes-manifest.json +104 -0
  666. package/.next/standalone/.next/build-manifest.json +20 -0
  667. package/.next/standalone/.next/package.json +1 -0
  668. package/.next/standalone/.next/prerender-manifest.json +527 -0
  669. package/.next/standalone/.next/react-loadable-manifest.json +8 -0
  670. package/.next/standalone/.next/required-server-files.json +365 -0
  671. package/.next/standalone/.next/routes-manifest.json +709 -0
  672. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -0
  673. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -0
  674. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -0
  675. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -0
  676. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -0
  677. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -0
  678. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -0
  679. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -0
  680. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -0
  681. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -0
  682. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -0
  683. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -0
  684. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -0
  685. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -0
  686. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -0
  687. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page.js +2 -0
  688. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -0
  689. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -0
  690. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -0
  691. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -0
  692. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -0
  693. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -0
  694. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -0
  695. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -0
  696. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -0
  697. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -0
  698. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -0
  699. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -0
  700. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -0
  701. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -0
  702. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -0
  703. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -0
  704. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -0
  705. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -0
  706. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -0
  707. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -0
  708. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -0
  709. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -0
  710. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -0
  711. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -0
  712. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -0
  713. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -0
  714. package/.next/standalone/.next/server/app/_global-error/page.js +32 -0
  715. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -0
  716. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  717. package/.next/standalone/.next/server/app/_global-error.html +1 -0
  718. package/.next/standalone/.next/server/app/_global-error.meta +16 -0
  719. package/.next/standalone/.next/server/app/_global-error.rsc +14 -0
  720. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  721. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  722. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  723. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  724. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  725. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  726. package/.next/standalone/.next/server/app/_not-found/page.js +2 -0
  727. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -0
  728. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  729. package/.next/standalone/.next/server/app/_not-found.html +1 -0
  730. package/.next/standalone/.next/server/app/_not-found.meta +16 -0
  731. package/.next/standalone/.next/server/app/_not-found.rsc +20 -0
  732. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +20 -0
  733. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  734. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
  735. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  736. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  737. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -0
  738. package/.next/standalone/.next/server/app/api/auth/login/route.js +1 -0
  739. package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -0
  740. package/.next/standalone/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
  741. package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -0
  742. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  743. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
  744. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -0
  745. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -0
  746. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -0
  747. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -0
  748. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -0
  749. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -0
  750. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route.js +2 -0
  751. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -0
  752. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -0
  753. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route.js +32 -0
  754. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -0
  755. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -0
  756. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -0
  757. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -0
  758. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -0
  759. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route.js +2 -0
  760. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -0
  761. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -0
  762. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -0
  763. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -0
  764. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -0
  765. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -0
  766. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -0
  767. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -0
  768. package/.next/standalone/.next/server/app/api/cloud/auth/route.js +1 -0
  769. package/.next/standalone/.next/server/app/api/cloud/auth/route.js.nft.json +1 -0
  770. package/.next/standalone/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -0
  771. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route.js +1 -0
  772. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -0
  773. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -0
  774. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route.js +1 -0
  775. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -0
  776. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -0
  777. package/.next/standalone/.next/server/app/api/cloud/models/alias/route.js +1 -0
  778. package/.next/standalone/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -0
  779. package/.next/standalone/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -0
  780. package/.next/standalone/.next/server/app/api/combos/[id]/route.js +1 -0
  781. package/.next/standalone/.next/server/app/api/combos/[id]/route.js.nft.json +1 -0
  782. package/.next/standalone/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -0
  783. package/.next/standalone/.next/server/app/api/combos/route.js +1 -0
  784. package/.next/standalone/.next/server/app/api/combos/route.js.nft.json +1 -0
  785. package/.next/standalone/.next/server/app/api/combos/route_client-reference-manifest.js +1 -0
  786. package/.next/standalone/.next/server/app/api/init/route.js +1 -0
  787. package/.next/standalone/.next/server/app/api/init/route.js.nft.json +1 -0
  788. package/.next/standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -0
  789. package/.next/standalone/.next/server/app/api/keys/[id]/route.js +1 -0
  790. package/.next/standalone/.next/server/app/api/keys/[id]/route.js.nft.json +1 -0
  791. package/.next/standalone/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -0
  792. package/.next/standalone/.next/server/app/api/keys/route.js +1 -0
  793. package/.next/standalone/.next/server/app/api/keys/route.js.nft.json +1 -0
  794. package/.next/standalone/.next/server/app/api/keys/route_client-reference-manifest.js +1 -0
  795. package/.next/standalone/.next/server/app/api/locale/route.js +1 -0
  796. package/.next/standalone/.next/server/app/api/locale/route.js.nft.json +1 -0
  797. package/.next/standalone/.next/server/app/api/locale/route_client-reference-manifest.js +1 -0
  798. package/.next/standalone/.next/server/app/api/models/alias/route.js +1 -0
  799. package/.next/standalone/.next/server/app/api/models/alias/route.js.nft.json +1 -0
  800. package/.next/standalone/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -0
  801. package/.next/standalone/.next/server/app/api/models/availability/route.js +1 -0
  802. package/.next/standalone/.next/server/app/api/models/availability/route.js.nft.json +1 -0
  803. package/.next/standalone/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -0
  804. package/.next/standalone/.next/server/app/api/models/route.js +1 -0
  805. package/.next/standalone/.next/server/app/api/models/route.js.nft.json +1 -0
  806. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  807. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -0
  808. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -0
  809. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -0
  810. package/.next/standalone/.next/server/app/api/oauth/cursor/auto-import/route.js +4 -0
  811. package/.next/standalone/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -0
  812. package/.next/standalone/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -0
  813. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route.js +1 -0
  814. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -0
  815. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -0
  816. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route.js +1 -0
  817. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -0
  818. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -0
  819. package/.next/standalone/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -0
  820. package/.next/standalone/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -0
  821. package/.next/standalone/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -0
  822. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route.js +1 -0
  823. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -0
  824. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -0
  825. package/.next/standalone/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -0
  826. package/.next/standalone/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -0
  827. package/.next/standalone/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -0
  828. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -0
  829. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -0
  830. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -0
  831. package/.next/standalone/.next/server/app/api/pricing/route.js +1 -0
  832. package/.next/standalone/.next/server/app/api/pricing/route.js.nft.json +1 -0
  833. package/.next/standalone/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -0
  834. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route.js +1 -0
  835. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -0
  836. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -0
  837. package/.next/standalone/.next/server/app/api/provider-nodes/route.js +1 -0
  838. package/.next/standalone/.next/server/app/api/provider-nodes/route.js.nft.json +1 -0
  839. package/.next/standalone/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -0
  840. package/.next/standalone/.next/server/app/api/provider-nodes/validate/route.js +1 -0
  841. package/.next/standalone/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -0
  842. package/.next/standalone/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -0
  843. package/.next/standalone/.next/server/app/api/providers/[id]/models/route.js +1 -0
  844. package/.next/standalone/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -0
  845. package/.next/standalone/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -0
  846. package/.next/standalone/.next/server/app/api/providers/[id]/route.js +1 -0
  847. package/.next/standalone/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
  848. package/.next/standalone/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
  849. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route.js +1 -0
  850. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -0
  851. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -0
  852. package/.next/standalone/.next/server/app/api/providers/client/route.js +1 -0
  853. package/.next/standalone/.next/server/app/api/providers/client/route.js.nft.json +1 -0
  854. package/.next/standalone/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -0
  855. package/.next/standalone/.next/server/app/api/providers/route.js +1 -0
  856. package/.next/standalone/.next/server/app/api/providers/route.js.nft.json +1 -0
  857. package/.next/standalone/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
  858. package/.next/standalone/.next/server/app/api/providers/test-batch/route.js +1 -0
  859. package/.next/standalone/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -0
  860. package/.next/standalone/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -0
  861. package/.next/standalone/.next/server/app/api/providers/validate/route.js +1 -0
  862. package/.next/standalone/.next/server/app/api/providers/validate/route.js.nft.json +1 -0
  863. package/.next/standalone/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -0
  864. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route.js +1 -0
  865. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -0
  866. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -0
  867. package/.next/standalone/.next/server/app/api/proxy-pools/route.js +1 -0
  868. package/.next/standalone/.next/server/app/api/proxy-pools/route.js.nft.json +1 -0
  869. package/.next/standalone/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -0
  870. package/.next/standalone/.next/server/app/api/settings/database/route.js +1 -0
  871. package/.next/standalone/.next/server/app/api/settings/database/route.js.nft.json +1 -0
  872. package/.next/standalone/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -0
  873. package/.next/standalone/.next/server/app/api/settings/proxy-test/route.js +1 -0
  874. package/.next/standalone/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -0
  875. package/.next/standalone/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -0
  876. package/.next/standalone/.next/server/app/api/settings/require-login/route.js +1 -0
  877. package/.next/standalone/.next/server/app/api/settings/require-login/route.js.nft.json +1 -0
  878. package/.next/standalone/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -0
  879. package/.next/standalone/.next/server/app/api/settings/route.js +1 -0
  880. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -0
  881. package/.next/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  882. package/.next/standalone/.next/server/app/api/shutdown/route.js +1 -0
  883. package/.next/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -0
  884. package/.next/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -0
  885. package/.next/standalone/.next/server/app/api/tags/route.js +1 -0
  886. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -0
  887. package/.next/standalone/.next/server/app/api/tags/route_client-reference-manifest.js +1 -0
  888. package/.next/standalone/.next/server/app/api/translator/console-logs/route.js +1 -0
  889. package/.next/standalone/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -0
  890. package/.next/standalone/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -0
  891. package/.next/standalone/.next/server/app/api/translator/console-logs/stream/route.js +7 -0
  892. package/.next/standalone/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -0
  893. package/.next/standalone/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -0
  894. package/.next/standalone/.next/server/app/api/translator/load/route.js +1 -0
  895. package/.next/standalone/.next/server/app/api/translator/load/route.js.nft.json +1 -0
  896. package/.next/standalone/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -0
  897. package/.next/standalone/.next/server/app/api/translator/save/route.js +1 -0
  898. package/.next/standalone/.next/server/app/api/translator/save/route.js.nft.json +1 -0
  899. package/.next/standalone/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -0
  900. package/.next/standalone/.next/server/app/api/translator/send/route.js +1 -0
  901. package/.next/standalone/.next/server/app/api/translator/send/route.js.nft.json +1 -0
  902. package/.next/standalone/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -0
  903. package/.next/standalone/.next/server/app/api/translator/translate/route.js +1 -0
  904. package/.next/standalone/.next/server/app/api/translator/translate/route.js.nft.json +1 -0
  905. package/.next/standalone/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -0
  906. package/.next/standalone/.next/server/app/api/tunnel/disable/route.js +1 -0
  907. package/.next/standalone/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -0
  908. package/.next/standalone/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -0
  909. package/.next/standalone/.next/server/app/api/tunnel/enable/route.js +1 -0
  910. package/.next/standalone/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -0
  911. package/.next/standalone/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -0
  912. package/.next/standalone/.next/server/app/api/tunnel/status/route.js +1 -0
  913. package/.next/standalone/.next/server/app/api/tunnel/status/route.js.nft.json +1 -0
  914. package/.next/standalone/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -0
  915. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route.js +1 -0
  916. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -0
  917. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -0
  918. package/.next/standalone/.next/server/app/api/usage/chart/route.js +1 -0
  919. package/.next/standalone/.next/server/app/api/usage/chart/route.js.nft.json +1 -0
  920. package/.next/standalone/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -0
  921. package/.next/standalone/.next/server/app/api/usage/history/route.js +1 -0
  922. package/.next/standalone/.next/server/app/api/usage/history/route.js.nft.json +1 -0
  923. package/.next/standalone/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -0
  924. package/.next/standalone/.next/server/app/api/usage/providers/route.js +1 -0
  925. package/.next/standalone/.next/server/app/api/usage/providers/route.js.nft.json +1 -0
  926. package/.next/standalone/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -0
  927. package/.next/standalone/.next/server/app/api/usage/request-details/route.js +1 -0
  928. package/.next/standalone/.next/server/app/api/usage/request-details/route.js.nft.json +1 -0
  929. package/.next/standalone/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -0
  930. package/.next/standalone/.next/server/app/api/usage/request-logs/route.js +1 -0
  931. package/.next/standalone/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -0
  932. package/.next/standalone/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -0
  933. package/.next/standalone/.next/server/app/api/usage/stats/route.js +1 -0
  934. package/.next/standalone/.next/server/app/api/usage/stats/route.js.nft.json +1 -0
  935. package/.next/standalone/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -0
  936. package/.next/standalone/.next/server/app/api/usage/stream/route.js +7 -0
  937. package/.next/standalone/.next/server/app/api/usage/stream/route.js.nft.json +1 -0
  938. package/.next/standalone/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -0
  939. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js +1 -0
  940. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -0
  941. package/.next/standalone/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -0
  942. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js +1 -0
  943. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -0
  944. package/.next/standalone/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -0
  945. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js +1 -0
  946. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -0
  947. package/.next/standalone/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -0
  948. package/.next/standalone/.next/server/app/api/v1/messages/count_tokens/route.js +1 -0
  949. package/.next/standalone/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -0
  950. package/.next/standalone/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -0
  951. package/.next/standalone/.next/server/app/api/v1/messages/route.js +1 -0
  952. package/.next/standalone/.next/server/app/api/v1/messages/route.js.nft.json +1 -0
  953. package/.next/standalone/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -0
  954. package/.next/standalone/.next/server/app/api/v1/models/route.js +1 -0
  955. package/.next/standalone/.next/server/app/api/v1/models/route.js.nft.json +1 -0
  956. package/.next/standalone/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -0
  957. package/.next/standalone/.next/server/app/api/v1/responses/route.js +1 -0
  958. package/.next/standalone/.next/server/app/api/v1/responses/route.js.nft.json +1 -0
  959. package/.next/standalone/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -0
  960. package/.next/standalone/.next/server/app/api/v1/route.js +1 -0
  961. package/.next/standalone/.next/server/app/api/v1/route.js.nft.json +1 -0
  962. package/.next/standalone/.next/server/app/api/v1/route_client-reference-manifest.js +1 -0
  963. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js +1 -0
  964. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -0
  965. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -0
  966. package/.next/standalone/.next/server/app/api/v1beta/models/route.js +1 -0
  967. package/.next/standalone/.next/server/app/api/v1beta/models/route.js.nft.json +1 -0
  968. package/.next/standalone/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -0
  969. package/.next/standalone/.next/server/app/api/version/route.js +1 -0
  970. package/.next/standalone/.next/server/app/api/version/route.js.nft.json +1 -0
  971. package/.next/standalone/.next/server/app/api/version/route_client-reference-manifest.js +1 -0
  972. package/.next/standalone/.next/server/app/callback/page.js +2 -0
  973. package/.next/standalone/.next/server/app/callback/page.js.nft.json +1 -0
  974. package/.next/standalone/.next/server/app/callback/page_client-reference-manifest.js +1 -0
  975. package/.next/standalone/.next/server/app/callback.html +1 -0
  976. package/.next/standalone/.next/server/app/callback.meta +15 -0
  977. package/.next/standalone/.next/server/app/callback.rsc +24 -0
  978. package/.next/standalone/.next/server/app/callback.segments/_full.segment.rsc +24 -0
  979. package/.next/standalone/.next/server/app/callback.segments/_head.segment.rsc +6 -0
  980. package/.next/standalone/.next/server/app/callback.segments/_index.segment.rsc +8 -0
  981. package/.next/standalone/.next/server/app/callback.segments/_tree.segment.rsc +4 -0
  982. package/.next/standalone/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +9 -0
  983. package/.next/standalone/.next/server/app/callback.segments/callback.segment.rsc +5 -0
  984. package/.next/standalone/.next/server/app/dashboard/cli-tools.html +1 -0
  985. package/.next/standalone/.next/server/app/dashboard/cli-tools.meta +17 -0
  986. package/.next/standalone/.next/server/app/dashboard/cli-tools.rsc +24 -0
  987. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +6 -0
  988. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +5 -0
  989. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  990. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  991. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +24 -0
  992. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +6 -0
  993. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +8 -0
  994. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +5 -0
  995. package/.next/standalone/.next/server/app/dashboard/combos.html +1 -0
  996. package/.next/standalone/.next/server/app/dashboard/combos.meta +17 -0
  997. package/.next/standalone/.next/server/app/dashboard/combos.rsc +26 -0
  998. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +9 -0
  999. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +5 -0
  1000. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1001. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1002. package/.next/standalone/.next/server/app/dashboard/combos.segments/_full.segment.rsc +26 -0
  1003. package/.next/standalone/.next/server/app/dashboard/combos.segments/_head.segment.rsc +6 -0
  1004. package/.next/standalone/.next/server/app/dashboard/combos.segments/_index.segment.rsc +8 -0
  1005. package/.next/standalone/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +5 -0
  1006. package/.next/standalone/.next/server/app/dashboard/endpoint.html +1 -0
  1007. package/.next/standalone/.next/server/app/dashboard/endpoint.meta +17 -0
  1008. package/.next/standalone/.next/server/app/dashboard/endpoint.rsc +24 -0
  1009. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +6 -0
  1010. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +5 -0
  1011. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1012. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1013. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +24 -0
  1014. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +6 -0
  1015. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +8 -0
  1016. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +5 -0
  1017. package/.next/standalone/.next/server/app/dashboard/mitm.html +1 -0
  1018. package/.next/standalone/.next/server/app/dashboard/mitm.meta +17 -0
  1019. package/.next/standalone/.next/server/app/dashboard/mitm.rsc +23 -0
  1020. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +6 -0
  1021. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +5 -0
  1022. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1023. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1024. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +23 -0
  1025. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +6 -0
  1026. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +8 -0
  1027. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +5 -0
  1028. package/.next/standalone/.next/server/app/dashboard/profile.html +1 -0
  1029. package/.next/standalone/.next/server/app/dashboard/profile.meta +17 -0
  1030. package/.next/standalone/.next/server/app/dashboard/profile.rsc +26 -0
  1031. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +9 -0
  1032. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +5 -0
  1033. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1034. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1035. package/.next/standalone/.next/server/app/dashboard/profile.segments/_full.segment.rsc +26 -0
  1036. package/.next/standalone/.next/server/app/dashboard/profile.segments/_head.segment.rsc +6 -0
  1037. package/.next/standalone/.next/server/app/dashboard/profile.segments/_index.segment.rsc +8 -0
  1038. package/.next/standalone/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +5 -0
  1039. package/.next/standalone/.next/server/app/dashboard/providers/new.html +1 -0
  1040. package/.next/standalone/.next/server/app/dashboard/providers/new.meta +18 -0
  1041. package/.next/standalone/.next/server/app/dashboard/providers/new.rsc +26 -0
  1042. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +9 -0
  1043. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +5 -0
  1044. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  1045. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1046. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1047. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +26 -0
  1048. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +6 -0
  1049. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +8 -0
  1050. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +5 -0
  1051. package/.next/standalone/.next/server/app/dashboard/providers.html +1 -0
  1052. package/.next/standalone/.next/server/app/dashboard/providers.meta +17 -0
  1053. package/.next/standalone/.next/server/app/dashboard/providers.rsc +26 -0
  1054. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +9 -0
  1055. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +5 -0
  1056. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1057. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1058. package/.next/standalone/.next/server/app/dashboard/providers.segments/_full.segment.rsc +26 -0
  1059. package/.next/standalone/.next/server/app/dashboard/providers.segments/_head.segment.rsc +6 -0
  1060. package/.next/standalone/.next/server/app/dashboard/providers.segments/_index.segment.rsc +8 -0
  1061. package/.next/standalone/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +5 -0
  1062. package/.next/standalone/.next/server/app/dashboard/proxy-pools.html +1 -0
  1063. package/.next/standalone/.next/server/app/dashboard/proxy-pools.meta +17 -0
  1064. package/.next/standalone/.next/server/app/dashboard/proxy-pools.rsc +26 -0
  1065. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +9 -0
  1066. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +5 -0
  1067. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1068. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1069. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +26 -0
  1070. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +6 -0
  1071. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +8 -0
  1072. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +5 -0
  1073. package/.next/standalone/.next/server/app/dashboard/quota.html +1 -0
  1074. package/.next/standalone/.next/server/app/dashboard/quota.meta +17 -0
  1075. package/.next/standalone/.next/server/app/dashboard/quota.rsc +24 -0
  1076. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +7 -0
  1077. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +5 -0
  1078. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1079. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1080. package/.next/standalone/.next/server/app/dashboard/quota.segments/_full.segment.rsc +24 -0
  1081. package/.next/standalone/.next/server/app/dashboard/quota.segments/_head.segment.rsc +6 -0
  1082. package/.next/standalone/.next/server/app/dashboard/quota.segments/_index.segment.rsc +8 -0
  1083. package/.next/standalone/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +5 -0
  1084. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page.js +2 -0
  1085. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -0
  1086. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -0
  1087. package/.next/standalone/.next/server/app/dashboard/settings/pricing.html +1 -0
  1088. package/.next/standalone/.next/server/app/dashboard/settings/pricing.meta +17 -0
  1089. package/.next/standalone/.next/server/app/dashboard/settings/pricing.rsc +24 -0
  1090. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +24 -0
  1091. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +6 -0
  1092. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +8 -0
  1093. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +4 -0
  1094. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +9 -0
  1095. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +5 -0
  1096. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +5 -0
  1097. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +5 -0
  1098. package/.next/standalone/.next/server/app/dashboard/translator.html +1 -0
  1099. package/.next/standalone/.next/server/app/dashboard/translator.meta +17 -0
  1100. package/.next/standalone/.next/server/app/dashboard/translator.rsc +26 -0
  1101. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +9 -0
  1102. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +5 -0
  1103. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1104. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1105. package/.next/standalone/.next/server/app/dashboard/translator.segments/_full.segment.rsc +26 -0
  1106. package/.next/standalone/.next/server/app/dashboard/translator.segments/_head.segment.rsc +6 -0
  1107. package/.next/standalone/.next/server/app/dashboard/translator.segments/_index.segment.rsc +8 -0
  1108. package/.next/standalone/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +5 -0
  1109. package/.next/standalone/.next/server/app/dashboard/usage.html +1 -0
  1110. package/.next/standalone/.next/server/app/dashboard/usage.meta +17 -0
  1111. package/.next/standalone/.next/server/app/dashboard/usage.rsc +26 -0
  1112. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +9 -0
  1113. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +5 -0
  1114. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1115. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1116. package/.next/standalone/.next/server/app/dashboard/usage.segments/_full.segment.rsc +26 -0
  1117. package/.next/standalone/.next/server/app/dashboard/usage.segments/_head.segment.rsc +6 -0
  1118. package/.next/standalone/.next/server/app/dashboard/usage.segments/_index.segment.rsc +8 -0
  1119. package/.next/standalone/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +5 -0
  1120. package/.next/standalone/.next/server/app/dashboard.html +1 -0
  1121. package/.next/standalone/.next/server/app/dashboard.meta +16 -0
  1122. package/.next/standalone/.next/server/app/dashboard.rsc +24 -0
  1123. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +6 -0
  1124. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +5 -0
  1125. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +6 -0
  1126. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +24 -0
  1127. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +6 -0
  1128. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +8 -0
  1129. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +5 -0
  1130. package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -0
  1131. package/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  1132. package/.next/standalone/.next/server/app/favicon.ico.body +0 -0
  1133. package/.next/standalone/.next/server/app/favicon.ico.meta +1 -0
  1134. package/.next/standalone/.next/server/app/index.html +1 -0
  1135. package/.next/standalone/.next/server/app/index.meta +16 -0
  1136. package/.next/standalone/.next/server/app/index.rsc +19 -0
  1137. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -0
  1138. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +19 -0
  1139. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +6 -0
  1140. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +8 -0
  1141. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  1142. package/.next/standalone/.next/server/app/landing/page.js +2 -0
  1143. package/.next/standalone/.next/server/app/landing/page.js.nft.json +1 -0
  1144. package/.next/standalone/.next/server/app/landing/page_client-reference-manifest.js +1 -0
  1145. package/.next/standalone/.next/server/app/landing.html +1 -0
  1146. package/.next/standalone/.next/server/app/landing.meta +15 -0
  1147. package/.next/standalone/.next/server/app/landing.rsc +24 -0
  1148. package/.next/standalone/.next/server/app/landing.segments/_full.segment.rsc +24 -0
  1149. package/.next/standalone/.next/server/app/landing.segments/_head.segment.rsc +6 -0
  1150. package/.next/standalone/.next/server/app/landing.segments/_index.segment.rsc +8 -0
  1151. package/.next/standalone/.next/server/app/landing.segments/_tree.segment.rsc +4 -0
  1152. package/.next/standalone/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +9 -0
  1153. package/.next/standalone/.next/server/app/landing.segments/landing.segment.rsc +5 -0
  1154. package/.next/standalone/.next/server/app/login/page.js +2 -0
  1155. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -0
  1156. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -0
  1157. package/.next/standalone/.next/server/app/login.html +1 -0
  1158. package/.next/standalone/.next/server/app/login.meta +15 -0
  1159. package/.next/standalone/.next/server/app/login.rsc +25 -0
  1160. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +25 -0
  1161. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +6 -0
  1162. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +8 -0
  1163. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +5 -0
  1164. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +10 -0
  1165. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +5 -0
  1166. package/.next/standalone/.next/server/app/manifest.webmanifest/route.js +16 -0
  1167. package/.next/standalone/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  1168. package/.next/standalone/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
  1169. package/.next/standalone/.next/server/app/manifest.webmanifest.body +1 -0
  1170. package/.next/standalone/.next/server/app/manifest.webmanifest.meta +1 -0
  1171. package/.next/standalone/.next/server/app/page.js +2 -0
  1172. package/.next/standalone/.next/server/app/page.js.nft.json +1 -0
  1173. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -0
  1174. package/.next/standalone/.next/server/app-paths-manifest.json +104 -0
  1175. package/.next/standalone/.next/server/chunks/1130.js +1 -0
  1176. package/.next/standalone/.next/server/chunks/1220.js +3 -0
  1177. package/.next/standalone/.next/server/chunks/1424.js +1 -0
  1178. package/.next/standalone/.next/server/chunks/1705.js +1 -0
  1179. package/.next/standalone/.next/server/chunks/1813.js +1 -0
  1180. package/.next/standalone/.next/server/chunks/241.js +1 -0
  1181. package/.next/standalone/.next/server/chunks/2417.js +1 -0
  1182. package/.next/standalone/.next/server/chunks/289.js +1 -0
  1183. package/.next/standalone/.next/server/chunks/318.js +164 -0
  1184. package/.next/standalone/.next/server/chunks/3245.js +1 -0
  1185. package/.next/standalone/.next/server/chunks/3832.js +1 -0
  1186. package/.next/standalone/.next/server/chunks/412.js +7 -0
  1187. package/.next/standalone/.next/server/chunks/4124.js +1 -0
  1188. package/.next/standalone/.next/server/chunks/4642.js +1 -0
  1189. package/.next/standalone/.next/server/chunks/4689.js +1 -0
  1190. package/.next/standalone/.next/server/chunks/4741.js +18 -0
  1191. package/.next/standalone/.next/server/chunks/4755.js +1 -0
  1192. package/.next/standalone/.next/server/chunks/4989.js +2 -0
  1193. package/.next/standalone/.next/server/chunks/5270.js +1 -0
  1194. package/.next/standalone/.next/server/chunks/5296.js +1 -0
  1195. package/.next/standalone/.next/server/chunks/5297.js +1 -0
  1196. package/.next/standalone/.next/server/chunks/5573.js +1 -0
  1197. package/.next/standalone/.next/server/chunks/6108.js +1 -0
  1198. package/.next/standalone/.next/server/chunks/6182.js +5 -0
  1199. package/.next/standalone/.next/server/chunks/63.js +45 -0
  1200. package/.next/standalone/.next/server/chunks/6446.js +1 -0
  1201. package/.next/standalone/.next/server/chunks/649.js +15 -0
  1202. package/.next/standalone/.next/server/chunks/6649.js +1 -0
  1203. package/.next/standalone/.next/server/chunks/6844.js +1 -0
  1204. package/.next/standalone/.next/server/chunks/7341.js +1 -0
  1205. package/.next/standalone/.next/server/chunks/7774.js +120 -0
  1206. package/.next/standalone/.next/server/chunks/7861.js +1 -0
  1207. package/.next/standalone/.next/server/chunks/7890.js +3 -0
  1208. package/.next/standalone/.next/server/chunks/7898.js +1 -0
  1209. package/.next/standalone/.next/server/chunks/7924.js +1 -0
  1210. package/.next/standalone/.next/server/chunks/8332.js +1 -0
  1211. package/.next/standalone/.next/server/chunks/8895.js +4 -0
  1212. package/.next/standalone/.next/server/chunks/9201.js +1 -0
  1213. package/.next/standalone/.next/server/chunks/9609.js +1 -0
  1214. package/.next/standalone/.next/server/chunks/9713.js +1 -0
  1215. package/.next/standalone/.next/server/chunks/9718.js +1 -0
  1216. package/.next/standalone/.next/server/functions-config-manifest.json +18 -0
  1217. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -0
  1218. package/.next/standalone/.next/server/middleware-manifest.json +6 -0
  1219. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -0
  1220. package/.next/standalone/.next/server/middleware.js +56 -0
  1221. package/.next/standalone/.next/server/next-font-manifest.js +1 -0
  1222. package/.next/standalone/.next/server/next-font-manifest.json +1 -0
  1223. package/.next/standalone/.next/server/pages/404.html +1 -0
  1224. package/.next/standalone/.next/server/pages/500.html +1 -0
  1225. package/.next/standalone/.next/server/pages-manifest.json +4 -0
  1226. package/.next/standalone/.next/server/prefetch-hints.json +1 -0
  1227. package/.next/standalone/.next/server/server-reference-manifest.js +1 -0
  1228. package/.next/standalone/.next/server/server-reference-manifest.json +1 -0
  1229. package/.next/standalone/.next/server/webpack-runtime.js +1 -0
  1230. package/.next/standalone/package.json +68 -0
  1231. package/.next/standalone/server.js +38 -0
  1232. package/.next/standalone/src/mitm/server.js +233 -0
  1233. package/.next/standalone/src/shared/utils/apiKey.js +98 -0
  1234. package/.next/static/2ZXkRcWLgj32_7M6Za4Gl/_buildManifest.js +1 -0
  1235. package/.next/static/2ZXkRcWLgj32_7M6Za4Gl/_ssgManifest.js +1 -0
  1236. package/.next/static/chunks/123-2df5178dd6863198.js +1 -0
  1237. package/.next/static/chunks/1a258343-4af2572c60ed5a11.js +1 -0
  1238. package/.next/static/chunks/2652-9390de91ba4d998f.js +1 -0
  1239. package/.next/static/chunks/3794-123fdf632563f469.js +32 -0
  1240. package/.next/static/chunks/4007-4208afb61e702563.js +3 -0
  1241. package/.next/static/chunks/4bd1b696-e356ca5ba0218e27.js +1 -0
  1242. package/.next/static/chunks/5497-b4d17d3cec4555c6.js +7 -0
  1243. package/.next/static/chunks/5772-81f907ca6ec17897.js +3 -0
  1244. package/.next/static/chunks/8202.1ffc6ce531e066ce.js +1 -0
  1245. package/.next/static/chunks/9242-f68cd69d27fb178b.js +15 -0
  1246. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-36c60da33f0ce9c4.js +1 -0
  1247. package/.next/static/chunks/app/(dashboard)/dashboard/combos/page-4bdb0cadb949e4c1.js +1 -0
  1248. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-361c438ee7bf7fe0.js +1 -0
  1249. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-e8a8912b2e1c9349.js +1 -0
  1250. package/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-89d121ff185bee59.js +1 -0
  1251. package/.next/static/chunks/app/(dashboard)/dashboard/page-1daa9c7d16bfa9fc.js +1 -0
  1252. package/.next/static/chunks/app/(dashboard)/dashboard/profile/page-7c0d1d4d4402ec80.js +1 -0
  1253. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-c3d0d307be6d0e43.js +1 -0
  1254. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-893168550a4af7e2.js +1 -0
  1255. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-4db55fc79a3b45eb.js +1 -0
  1256. package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-d19487b5634c925f.js +2 -0
  1257. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-283b404ae2c56609.js +1 -0
  1258. package/.next/static/chunks/app/(dashboard)/dashboard/translator/page-05a40a08f82c93d8.js +1 -0
  1259. package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-1374719e2cd7805e.js +1 -0
  1260. package/.next/static/chunks/app/(dashboard)/layout-7b5c73fdeec705a5.js +1 -0
  1261. package/.next/static/chunks/app/_global-error/page-5e254d0ad05b8e8a.js +1 -0
  1262. package/.next/static/chunks/app/_not-found/page-89be6743514e5f9f.js +1 -0
  1263. package/.next/static/chunks/app/api/auth/login/route-5e254d0ad05b8e8a.js +1 -0
  1264. package/.next/static/chunks/app/api/auth/logout/route-5e254d0ad05b8e8a.js +1 -0
  1265. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-5e254d0ad05b8e8a.js +1 -0
  1266. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-5e254d0ad05b8e8a.js +1 -0
  1267. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-5e254d0ad05b8e8a.js +1 -0
  1268. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-5e254d0ad05b8e8a.js +1 -0
  1269. package/.next/static/chunks/app/api/cli-tools/copilot-settings/route-5e254d0ad05b8e8a.js +1 -0
  1270. package/.next/static/chunks/app/api/cli-tools/droid-settings/route-5e254d0ad05b8e8a.js +1 -0
  1271. package/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-5e254d0ad05b8e8a.js +1 -0
  1272. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-5e254d0ad05b8e8a.js +1 -0
  1273. package/.next/static/chunks/app/api/cloud/auth/route-5e254d0ad05b8e8a.js +1 -0
  1274. package/.next/static/chunks/app/api/cloud/credentials/update/route-5e254d0ad05b8e8a.js +1 -0
  1275. package/.next/static/chunks/app/api/cloud/model/resolve/route-5e254d0ad05b8e8a.js +1 -0
  1276. package/.next/static/chunks/app/api/cloud/models/alias/route-5e254d0ad05b8e8a.js +1 -0
  1277. package/.next/static/chunks/app/api/combos/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1278. package/.next/static/chunks/app/api/combos/route-5e254d0ad05b8e8a.js +1 -0
  1279. package/.next/static/chunks/app/api/init/route-5e254d0ad05b8e8a.js +1 -0
  1280. package/.next/static/chunks/app/api/keys/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1281. package/.next/static/chunks/app/api/keys/route-5e254d0ad05b8e8a.js +1 -0
  1282. package/.next/static/chunks/app/api/locale/route-5e254d0ad05b8e8a.js +1 -0
  1283. package/.next/static/chunks/app/api/models/alias/route-5e254d0ad05b8e8a.js +1 -0
  1284. package/.next/static/chunks/app/api/models/availability/route-5e254d0ad05b8e8a.js +1 -0
  1285. package/.next/static/chunks/app/api/models/route-5e254d0ad05b8e8a.js +1 -0
  1286. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-5e254d0ad05b8e8a.js +1 -0
  1287. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-5e254d0ad05b8e8a.js +1 -0
  1288. package/.next/static/chunks/app/api/oauth/cursor/import/route-5e254d0ad05b8e8a.js +1 -0
  1289. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-5e254d0ad05b8e8a.js +1 -0
  1290. package/.next/static/chunks/app/api/oauth/kiro/auto-import/route-5e254d0ad05b8e8a.js +1 -0
  1291. package/.next/static/chunks/app/api/oauth/kiro/import/route-5e254d0ad05b8e8a.js +1 -0
  1292. package/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-5e254d0ad05b8e8a.js +1 -0
  1293. package/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-5e254d0ad05b8e8a.js +1 -0
  1294. package/.next/static/chunks/app/api/pricing/route-5e254d0ad05b8e8a.js +1 -0
  1295. package/.next/static/chunks/app/api/provider-nodes/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1296. package/.next/static/chunks/app/api/provider-nodes/route-5e254d0ad05b8e8a.js +1 -0
  1297. package/.next/static/chunks/app/api/provider-nodes/validate/route-5e254d0ad05b8e8a.js +1 -0
  1298. package/.next/static/chunks/app/api/providers/[id]/models/route-5e254d0ad05b8e8a.js +1 -0
  1299. package/.next/static/chunks/app/api/providers/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1300. package/.next/static/chunks/app/api/providers/[id]/test-models/route-5e254d0ad05b8e8a.js +1 -0
  1301. package/.next/static/chunks/app/api/providers/client/route-5e254d0ad05b8e8a.js +1 -0
  1302. package/.next/static/chunks/app/api/providers/route-5e254d0ad05b8e8a.js +1 -0
  1303. package/.next/static/chunks/app/api/providers/test-batch/route-5e254d0ad05b8e8a.js +1 -0
  1304. package/.next/static/chunks/app/api/providers/validate/route-5e254d0ad05b8e8a.js +1 -0
  1305. package/.next/static/chunks/app/api/proxy-pools/[id]/route-5e254d0ad05b8e8a.js +1 -0
  1306. package/.next/static/chunks/app/api/proxy-pools/route-5e254d0ad05b8e8a.js +1 -0
  1307. package/.next/static/chunks/app/api/settings/database/route-5e254d0ad05b8e8a.js +1 -0
  1308. package/.next/static/chunks/app/api/settings/proxy-test/route-5e254d0ad05b8e8a.js +1 -0
  1309. package/.next/static/chunks/app/api/settings/require-login/route-5e254d0ad05b8e8a.js +1 -0
  1310. package/.next/static/chunks/app/api/settings/route-5e254d0ad05b8e8a.js +1 -0
  1311. package/.next/static/chunks/app/api/shutdown/route-5e254d0ad05b8e8a.js +1 -0
  1312. package/.next/static/chunks/app/api/tags/route-5e254d0ad05b8e8a.js +1 -0
  1313. package/.next/static/chunks/app/api/translator/console-logs/route-5e254d0ad05b8e8a.js +1 -0
  1314. package/.next/static/chunks/app/api/translator/console-logs/stream/route-5e254d0ad05b8e8a.js +1 -0
  1315. package/.next/static/chunks/app/api/translator/load/route-5e254d0ad05b8e8a.js +1 -0
  1316. package/.next/static/chunks/app/api/translator/save/route-5e254d0ad05b8e8a.js +1 -0
  1317. package/.next/static/chunks/app/api/translator/send/route-5e254d0ad05b8e8a.js +1 -0
  1318. package/.next/static/chunks/app/api/translator/translate/route-5e254d0ad05b8e8a.js +1 -0
  1319. package/.next/static/chunks/app/api/tunnel/disable/route-5e254d0ad05b8e8a.js +1 -0
  1320. package/.next/static/chunks/app/api/tunnel/enable/route-5e254d0ad05b8e8a.js +1 -0
  1321. package/.next/static/chunks/app/api/tunnel/status/route-5e254d0ad05b8e8a.js +1 -0
  1322. package/.next/static/chunks/app/api/usage/[connectionId]/route-5e254d0ad05b8e8a.js +1 -0
  1323. package/.next/static/chunks/app/api/usage/chart/route-5e254d0ad05b8e8a.js +1 -0
  1324. package/.next/static/chunks/app/api/usage/history/route-5e254d0ad05b8e8a.js +1 -0
  1325. package/.next/static/chunks/app/api/usage/providers/route-5e254d0ad05b8e8a.js +1 -0
  1326. package/.next/static/chunks/app/api/usage/request-details/route-5e254d0ad05b8e8a.js +1 -0
  1327. package/.next/static/chunks/app/api/usage/request-logs/route-5e254d0ad05b8e8a.js +1 -0
  1328. package/.next/static/chunks/app/api/usage/stats/route-5e254d0ad05b8e8a.js +1 -0
  1329. package/.next/static/chunks/app/api/usage/stream/route-5e254d0ad05b8e8a.js +1 -0
  1330. package/.next/static/chunks/app/api/v1/api/chat/route-5e254d0ad05b8e8a.js +1 -0
  1331. package/.next/static/chunks/app/api/v1/chat/completions/route-5e254d0ad05b8e8a.js +1 -0
  1332. package/.next/static/chunks/app/api/v1/embeddings/route-5e254d0ad05b8e8a.js +1 -0
  1333. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-5e254d0ad05b8e8a.js +1 -0
  1334. package/.next/static/chunks/app/api/v1/messages/route-5e254d0ad05b8e8a.js +1 -0
  1335. package/.next/static/chunks/app/api/v1/models/route-5e254d0ad05b8e8a.js +1 -0
  1336. package/.next/static/chunks/app/api/v1/responses/route-5e254d0ad05b8e8a.js +1 -0
  1337. package/.next/static/chunks/app/api/v1/route-5e254d0ad05b8e8a.js +1 -0
  1338. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-5e254d0ad05b8e8a.js +1 -0
  1339. package/.next/static/chunks/app/api/v1beta/models/route-5e254d0ad05b8e8a.js +1 -0
  1340. package/.next/static/chunks/app/api/version/route-5e254d0ad05b8e8a.js +1 -0
  1341. package/.next/static/chunks/app/callback/page-e98c5f2afe1b798f.js +1 -0
  1342. package/.next/static/chunks/app/dashboard/settings/pricing/page-4c6fd0ccbb51bb83.js +1 -0
  1343. package/.next/static/chunks/app/landing/page-9b546784307784bd.js +1 -0
  1344. package/.next/static/chunks/app/layout-57aeb5f3175a0cc5.js +1 -0
  1345. package/.next/static/chunks/app/login/page-008d17f2ddd1c0e0.js +1 -0
  1346. package/.next/static/chunks/app/manifest.webmanifest/route-5e254d0ad05b8e8a.js +1 -0
  1347. package/.next/static/chunks/app/page-5e254d0ad05b8e8a.js +1 -0
  1348. package/.next/static/chunks/framework-711ef29bc66f648c.js +1 -0
  1349. package/.next/static/chunks/main-414816c17bbd344f.js +5 -0
  1350. package/.next/static/chunks/main-app-bdbe0c27f86d4694.js +1 -0
  1351. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  1352. package/.next/static/chunks/webpack-819d2440cd722d0f.js +1 -0
  1353. package/.next/static/css/4a48b8c90d7cf506.css +3 -0
  1354. package/.next/static/css/599369d853c61df7.css +31 -0
  1355. package/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  1356. package/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
  1357. package/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  1358. package/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  1359. package/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  1360. package/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  1361. package/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  1362. package/.next/trace +8 -0
  1363. package/.next/trace-build +1 -0
  1364. package/.next/types/app/(dashboard)/dashboard/cli-tools/page.ts +87 -0
  1365. package/.next/types/app/(dashboard)/dashboard/combos/page.ts +87 -0
  1366. package/.next/types/app/(dashboard)/dashboard/console-log/page.ts +87 -0
  1367. package/.next/types/app/(dashboard)/dashboard/endpoint/page.ts +87 -0
  1368. package/.next/types/app/(dashboard)/dashboard/mitm/page.ts +87 -0
  1369. package/.next/types/app/(dashboard)/dashboard/page.ts +87 -0
  1370. package/.next/types/app/(dashboard)/dashboard/profile/page.ts +87 -0
  1371. package/.next/types/app/(dashboard)/dashboard/providers/[id]/page.ts +87 -0
  1372. package/.next/types/app/(dashboard)/dashboard/providers/new/page.ts +87 -0
  1373. package/.next/types/app/(dashboard)/dashboard/providers/page.ts +87 -0
  1374. package/.next/types/app/(dashboard)/dashboard/proxy-pools/page.ts +87 -0
  1375. package/.next/types/app/(dashboard)/dashboard/quota/page.ts +87 -0
  1376. package/.next/types/app/(dashboard)/dashboard/translator/page.ts +87 -0
  1377. package/.next/types/app/(dashboard)/dashboard/usage/page.ts +87 -0
  1378. package/.next/types/app/api/auth/login/route.ts +351 -0
  1379. package/.next/types/app/api/auth/logout/route.ts +351 -0
  1380. package/.next/types/app/api/cli-tools/antigravity-mitm/alias/route.ts +351 -0
  1381. package/.next/types/app/api/cli-tools/antigravity-mitm/route.ts +351 -0
  1382. package/.next/types/app/api/cli-tools/claude-settings/route.ts +351 -0
  1383. package/.next/types/app/api/cli-tools/codex-settings/route.ts +351 -0
  1384. package/.next/types/app/api/cli-tools/copilot-settings/route.ts +351 -0
  1385. package/.next/types/app/api/cli-tools/droid-settings/route.ts +351 -0
  1386. package/.next/types/app/api/cli-tools/openclaw-settings/route.ts +351 -0
  1387. package/.next/types/app/api/cli-tools/opencode-settings/route.ts +351 -0
  1388. package/.next/types/app/api/cloud/auth/route.ts +351 -0
  1389. package/.next/types/app/api/cloud/credentials/update/route.ts +351 -0
  1390. package/.next/types/app/api/cloud/model/resolve/route.ts +351 -0
  1391. package/.next/types/app/api/cloud/models/alias/route.ts +351 -0
  1392. package/.next/types/app/api/combos/[id]/route.ts +351 -0
  1393. package/.next/types/app/api/combos/route.ts +351 -0
  1394. package/.next/types/app/api/init/route.ts +351 -0
  1395. package/.next/types/app/api/keys/[id]/route.ts +351 -0
  1396. package/.next/types/app/api/keys/route.ts +351 -0
  1397. package/.next/types/app/api/locale/route.ts +351 -0
  1398. package/.next/types/app/api/models/alias/route.ts +351 -0
  1399. package/.next/types/app/api/models/availability/route.ts +351 -0
  1400. package/.next/types/app/api/models/route.ts +351 -0
  1401. package/.next/types/app/api/oauth/[provider]/[action]/route.ts +351 -0
  1402. package/.next/types/app/api/oauth/cursor/auto-import/route.ts +351 -0
  1403. package/.next/types/app/api/oauth/cursor/import/route.ts +351 -0
  1404. package/.next/types/app/api/oauth/iflow/cookie/route.ts +351 -0
  1405. package/.next/types/app/api/oauth/kiro/auto-import/route.ts +351 -0
  1406. package/.next/types/app/api/oauth/kiro/import/route.ts +351 -0
  1407. package/.next/types/app/api/oauth/kiro/social-authorize/route.ts +351 -0
  1408. package/.next/types/app/api/oauth/kiro/social-exchange/route.ts +351 -0
  1409. package/.next/types/app/api/pricing/route.ts +351 -0
  1410. package/.next/types/app/api/provider-nodes/[id]/route.ts +351 -0
  1411. package/.next/types/app/api/provider-nodes/route.ts +351 -0
  1412. package/.next/types/app/api/provider-nodes/validate/route.ts +351 -0
  1413. package/.next/types/app/api/providers/[id]/models/route.ts +351 -0
  1414. package/.next/types/app/api/providers/[id]/route.ts +351 -0
  1415. package/.next/types/app/api/providers/[id]/test-models/route.ts +351 -0
  1416. package/.next/types/app/api/providers/client/route.ts +351 -0
  1417. package/.next/types/app/api/providers/route.ts +351 -0
  1418. package/.next/types/app/api/providers/test-batch/route.ts +351 -0
  1419. package/.next/types/app/api/providers/validate/route.ts +351 -0
  1420. package/.next/types/app/api/proxy-pools/[id]/route.ts +351 -0
  1421. package/.next/types/app/api/proxy-pools/route.ts +351 -0
  1422. package/.next/types/app/api/settings/database/route.ts +351 -0
  1423. package/.next/types/app/api/settings/proxy-test/route.ts +351 -0
  1424. package/.next/types/app/api/settings/require-login/route.ts +351 -0
  1425. package/.next/types/app/api/settings/route.ts +351 -0
  1426. package/.next/types/app/api/shutdown/route.ts +351 -0
  1427. package/.next/types/app/api/tags/route.ts +351 -0
  1428. package/.next/types/app/api/translator/console-logs/route.ts +351 -0
  1429. package/.next/types/app/api/translator/console-logs/stream/route.ts +351 -0
  1430. package/.next/types/app/api/translator/load/route.ts +351 -0
  1431. package/.next/types/app/api/translator/save/route.ts +351 -0
  1432. package/.next/types/app/api/translator/send/route.ts +351 -0
  1433. package/.next/types/app/api/translator/translate/route.ts +351 -0
  1434. package/.next/types/app/api/tunnel/disable/route.ts +351 -0
  1435. package/.next/types/app/api/tunnel/enable/route.ts +351 -0
  1436. package/.next/types/app/api/tunnel/status/route.ts +351 -0
  1437. package/.next/types/app/api/usage/[connectionId]/route.ts +351 -0
  1438. package/.next/types/app/api/usage/chart/route.ts +351 -0
  1439. package/.next/types/app/api/usage/history/route.ts +351 -0
  1440. package/.next/types/app/api/usage/providers/route.ts +351 -0
  1441. package/.next/types/app/api/usage/request-details/route.ts +351 -0
  1442. package/.next/types/app/api/usage/request-logs/route.ts +351 -0
  1443. package/.next/types/app/api/usage/stats/route.ts +351 -0
  1444. package/.next/types/app/api/usage/stream/route.ts +351 -0
  1445. package/.next/types/app/api/v1/api/chat/route.ts +351 -0
  1446. package/.next/types/app/api/v1/chat/completions/route.ts +351 -0
  1447. package/.next/types/app/api/v1/embeddings/route.ts +351 -0
  1448. package/.next/types/app/api/v1/messages/count_tokens/route.ts +351 -0
  1449. package/.next/types/app/api/v1/messages/route.ts +351 -0
  1450. package/.next/types/app/api/v1/models/route.ts +351 -0
  1451. package/.next/types/app/api/v1/responses/route.ts +351 -0
  1452. package/.next/types/app/api/v1/route.ts +351 -0
  1453. package/.next/types/app/api/v1beta/models/[...path]/route.ts +351 -0
  1454. package/.next/types/app/api/v1beta/models/route.ts +351 -0
  1455. package/.next/types/app/api/version/route.ts +351 -0
  1456. package/.next/types/app/callback/page.ts +87 -0
  1457. package/.next/types/app/dashboard/settings/pricing/page.ts +87 -0
  1458. package/.next/types/app/landing/page.ts +87 -0
  1459. package/.next/types/app/login/page.ts +87 -0
  1460. package/.next/types/app/page.ts +87 -0
  1461. package/.next/types/package.json +1 -0
  1462. package/.next/types/routes.d.ts +156 -0
  1463. package/.next/types/validator.ts +17 -0
  1464. package/LICENSE +21 -0
  1465. package/cloud/README.md +25 -0
  1466. package/cloud/migrations/0001_init.sql +9 -0
  1467. package/cloud/package.json +17 -0
  1468. package/cloud/src/handlers/cache.js +37 -0
  1469. package/cloud/src/handlers/chat.js +305 -0
  1470. package/cloud/src/handlers/cleanup.js +34 -0
  1471. package/cloud/src/handlers/countTokens.js +46 -0
  1472. package/cloud/src/handlers/embeddings.js +285 -0
  1473. package/cloud/src/handlers/forward.js +75 -0
  1474. package/cloud/src/handlers/forwardRaw.js +173 -0
  1475. package/cloud/src/handlers/sync.js +227 -0
  1476. package/cloud/src/handlers/verify.js +60 -0
  1477. package/cloud/src/index.js +233 -0
  1478. package/cloud/src/services/landingPage.js +27 -0
  1479. package/cloud/src/services/storage.js +88 -0
  1480. package/cloud/src/services/tokenRefresh.js +11 -0
  1481. package/cloud/src/stubs/usageDb.js +8 -0
  1482. package/cloud/src/utils/apiKey.js +72 -0
  1483. package/cloud/src/utils/logger.js +84 -0
  1484. package/cloud/wrangler.toml +17 -0
  1485. package/open-sse/config/appConstants.js +130 -0
  1486. package/open-sse/config/codexInstructions.js +120 -0
  1487. package/open-sse/config/constants.js +4 -0
  1488. package/open-sse/config/defaultThinkingSignature.js +7 -0
  1489. package/open-sse/config/ollamaModels.js +19 -0
  1490. package/open-sse/config/providerModels.js +390 -0
  1491. package/open-sse/config/providers.js +313 -0
  1492. package/open-sse/config/runtimeConfig.js +92 -0
  1493. package/open-sse/executors/antigravity.js +261 -0
  1494. package/open-sse/executors/base.js +130 -0
  1495. package/open-sse/executors/codex.js +108 -0
  1496. package/open-sse/executors/cursor.js +742 -0
  1497. package/open-sse/executors/default.js +213 -0
  1498. package/open-sse/executors/gemini-cli.js +67 -0
  1499. package/open-sse/executors/github.js +305 -0
  1500. package/open-sse/executors/iflow.js +104 -0
  1501. package/open-sse/executors/index.js +45 -0
  1502. package/open-sse/executors/kiro.js +448 -0
  1503. package/open-sse/executors/vertex.js +120 -0
  1504. package/open-sse/handlers/chatCore/nonStreamingHandler.js +204 -0
  1505. package/open-sse/handlers/chatCore/requestDetail.js +102 -0
  1506. package/open-sse/handlers/chatCore/sseToJsonHandler.js +161 -0
  1507. package/open-sse/handlers/chatCore/streamingHandler.js +99 -0
  1508. package/open-sse/handlers/chatCore.js +213 -0
  1509. package/open-sse/handlers/embeddingsCore.js +302 -0
  1510. package/open-sse/handlers/responsesHandler.js +103 -0
  1511. package/open-sse/index.js +74 -0
  1512. package/open-sse/services/accountFallback.js +251 -0
  1513. package/open-sse/services/combo.js +111 -0
  1514. package/open-sse/services/compact.js +71 -0
  1515. package/open-sse/services/model.js +169 -0
  1516. package/open-sse/services/projectId.js +307 -0
  1517. package/open-sse/services/provider.js +356 -0
  1518. package/open-sse/services/tokenRefresh.js +731 -0
  1519. package/open-sse/services/usage.js +708 -0
  1520. package/open-sse/transformer/responsesTransformer.js +439 -0
  1521. package/open-sse/transformer/streamToJsonConverter.js +103 -0
  1522. package/open-sse/translator/formats.js +31 -0
  1523. package/open-sse/translator/helpers/claudeHelper.js +198 -0
  1524. package/open-sse/translator/helpers/geminiHelper.js +337 -0
  1525. package/open-sse/translator/helpers/maxTokensHelper.js +25 -0
  1526. package/open-sse/translator/helpers/openaiHelper.js +127 -0
  1527. package/open-sse/translator/helpers/responsesApiHelper.js +129 -0
  1528. package/open-sse/translator/helpers/toolCallHelper.js +111 -0
  1529. package/open-sse/translator/index.js +204 -0
  1530. package/open-sse/translator/request/antigravity-to-openai.js +223 -0
  1531. package/open-sse/translator/request/claude-to-openai.js +232 -0
  1532. package/open-sse/translator/request/gemini-to-openai.js +147 -0
  1533. package/open-sse/translator/request/openai-responses.js +277 -0
  1534. package/open-sse/translator/request/openai-to-claude.js +348 -0
  1535. package/open-sse/translator/request/openai-to-cursor.js +181 -0
  1536. package/open-sse/translator/request/openai-to-gemini.js +431 -0
  1537. package/open-sse/translator/request/openai-to-kiro.js +306 -0
  1538. package/open-sse/translator/request/openai-to-kiro.old.js +278 -0
  1539. package/open-sse/translator/request/openai-to-ollama.js +159 -0
  1540. package/open-sse/translator/response/claude-to-openai.js +206 -0
  1541. package/open-sse/translator/response/cursor-to-openai.js +30 -0
  1542. package/open-sse/translator/response/gemini-to-openai.js +240 -0
  1543. package/open-sse/translator/response/kiro-to-openai.js +189 -0
  1544. package/open-sse/translator/response/ollama-to-openai.js +152 -0
  1545. package/open-sse/translator/response/openai-responses.js +571 -0
  1546. package/open-sse/translator/response/openai-to-antigravity.js +120 -0
  1547. package/open-sse/translator/response/openai-to-claude.js +223 -0
  1548. package/open-sse/utils/bypassHandler.js +298 -0
  1549. package/open-sse/utils/claudeCloaking.js +60 -0
  1550. package/open-sse/utils/cursorChecksum.js +149 -0
  1551. package/open-sse/utils/cursorProtobuf.js +904 -0
  1552. package/open-sse/utils/error.js +185 -0
  1553. package/open-sse/utils/ollamaTransform.js +85 -0
  1554. package/open-sse/utils/proxyFetch.js +258 -0
  1555. package/open-sse/utils/requestLogger.js +260 -0
  1556. package/open-sse/utils/sessionManager.js +82 -0
  1557. package/open-sse/utils/stream.js +392 -0
  1558. package/open-sse/utils/streamHandler.js +138 -0
  1559. package/open-sse/utils/streamHelpers.js +122 -0
  1560. package/open-sse/utils/usageTracking.js +325 -0
  1561. package/package.json +68 -0
  1562. package/public/favicon.svg +11 -0
  1563. package/public/file.svg +1 -0
  1564. package/public/globe.svg +1 -0
  1565. package/public/i18n/literals/ar.json +196 -0
  1566. package/public/i18n/literals/az.json +196 -0
  1567. package/public/i18n/literals/bn.json +196 -0
  1568. package/public/i18n/literals/cs.json +196 -0
  1569. package/public/i18n/literals/da.json +196 -0
  1570. package/public/i18n/literals/de.json +196 -0
  1571. package/public/i18n/literals/el.json +196 -0
  1572. package/public/i18n/literals/es.json +196 -0
  1573. package/public/i18n/literals/fi.json +196 -0
  1574. package/public/i18n/literals/fr.json +196 -0
  1575. package/public/i18n/literals/he.json +196 -0
  1576. package/public/i18n/literals/hi.json +196 -0
  1577. package/public/i18n/literals/hu.json +196 -0
  1578. package/public/i18n/literals/id.json +196 -0
  1579. package/public/i18n/literals/it.json +196 -0
  1580. package/public/i18n/literals/ja.json +196 -0
  1581. package/public/i18n/literals/ko.json +196 -0
  1582. package/public/i18n/literals/nl.json +196 -0
  1583. package/public/i18n/literals/no.json +196 -0
  1584. package/public/i18n/literals/pl.json +196 -0
  1585. package/public/i18n/literals/pt-BR.json +196 -0
  1586. package/public/i18n/literals/pt-PT.json +196 -0
  1587. package/public/i18n/literals/ro.json +196 -0
  1588. package/public/i18n/literals/ru.json +196 -0
  1589. package/public/i18n/literals/sv.json +196 -0
  1590. package/public/i18n/literals/th.json +196 -0
  1591. package/public/i18n/literals/tl.json +196 -0
  1592. package/public/i18n/literals/tr.json +196 -0
  1593. package/public/i18n/literals/uk.json +196 -0
  1594. package/public/i18n/literals/ur.json +196 -0
  1595. package/public/i18n/literals/vi.json +196 -0
  1596. package/public/i18n/literals/zh-CN.json +515 -0
  1597. package/public/i18n/literals/zh-TW.json +196 -0
  1598. package/public/icons/icon-192.svg +10 -0
  1599. package/public/icons/icon-512.svg +10 -0
  1600. package/public/next.svg +1 -0
  1601. package/public/providers/alicode-intl.png +0 -0
  1602. package/public/providers/alicode.png +0 -0
  1603. package/public/providers/anthropic-m.png +0 -0
  1604. package/public/providers/anthropic.png +0 -0
  1605. package/public/providers/antigravity.png +0 -0
  1606. package/public/providers/cerebras.png +0 -0
  1607. package/public/providers/chutes.png +0 -0
  1608. package/public/providers/claude.png +0 -0
  1609. package/public/providers/cline.png +0 -0
  1610. package/public/providers/codex.png +0 -0
  1611. package/public/providers/cohere.png +0 -0
  1612. package/public/providers/continue.png +0 -0
  1613. package/public/providers/copilot.png +0 -0
  1614. package/public/providers/cursor.png +0 -0
  1615. package/public/providers/deepseek.png +0 -0
  1616. package/public/providers/droid.png +0 -0
  1617. package/public/providers/fireworks.png +0 -0
  1618. package/public/providers/gemini-cli.png +0 -0
  1619. package/public/providers/gemini.png +0 -0
  1620. package/public/providers/github.png +0 -0
  1621. package/public/providers/glm-cn.png +0 -0
  1622. package/public/providers/glm.png +0 -0
  1623. package/public/providers/groq.png +0 -0
  1624. package/public/providers/iflow.png +0 -0
  1625. package/public/providers/kilocode.png +0 -0
  1626. package/public/providers/kimi-coding.png +0 -0
  1627. package/public/providers/kimi.png +0 -0
  1628. package/public/providers/kiro.png +0 -0
  1629. package/public/providers/minimax-cn.png +0 -0
  1630. package/public/providers/minimax.png +0 -0
  1631. package/public/providers/mistral.png +0 -0
  1632. package/public/providers/nebius.png +0 -0
  1633. package/public/providers/nvidia.png +0 -0
  1634. package/public/providers/oai-cc.png +0 -0
  1635. package/public/providers/oai-r.png +0 -0
  1636. package/public/providers/ollama-local.png +0 -0
  1637. package/public/providers/ollama.png +0 -0
  1638. package/public/providers/openai.png +0 -0
  1639. package/public/providers/openclaw.png +0 -0
  1640. package/public/providers/opencode.png +0 -0
  1641. package/public/providers/openrouter.png +0 -0
  1642. package/public/providers/perplexity.png +0 -0
  1643. package/public/providers/qwen.png +0 -0
  1644. package/public/providers/roo.png +0 -0
  1645. package/public/providers/siliconflow.png +0 -0
  1646. package/public/providers/together.png +0 -0
  1647. package/public/providers/vertex-partner.png +0 -0
  1648. package/public/providers/vertex.png +0 -0
  1649. package/public/providers/xai.png +0 -0
  1650. package/public/sw.js +22 -0
  1651. package/public/vercel.svg +1 -0
  1652. package/public/window.svg +1 -0
  1653. package/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.js +206 -0
  1654. package/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js +478 -0
  1655. package/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js +388 -0
  1656. package/src/app/(dashboard)/dashboard/cli-tools/components/CodexToolCard.js +336 -0
  1657. package/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js +295 -0
  1658. package/src/app/(dashboard)/dashboard/cli-tools/components/DefaultToolCard.js +293 -0
  1659. package/src/app/(dashboard)/dashboard/cli-tools/components/DroidToolCard.js +339 -0
  1660. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmServerCard.js +241 -0
  1661. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js +299 -0
  1662. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenClawToolCard.js +352 -0
  1663. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js +308 -0
  1664. package/src/app/(dashboard)/dashboard/cli-tools/components/index.js +11 -0
  1665. package/src/app/(dashboard)/dashboard/cli-tools/page.js +7 -0
  1666. package/src/app/(dashboard)/dashboard/combos/page.js +470 -0
  1667. package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.js +91 -0
  1668. package/src/app/(dashboard)/dashboard/console-log/page.js +8 -0
  1669. package/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js +772 -0
  1670. package/src/app/(dashboard)/dashboard/endpoint/page.js +7 -0
  1671. package/src/app/(dashboard)/dashboard/mitm/MitmPageClient.js +108 -0
  1672. package/src/app/(dashboard)/dashboard/mitm/page.js +5 -0
  1673. package/src/app/(dashboard)/dashboard/page.js +7 -0
  1674. package/src/app/(dashboard)/dashboard/profile/page.js +631 -0
  1675. package/src/app/(dashboard)/dashboard/providers/[id]/page.js +2235 -0
  1676. package/src/app/(dashboard)/dashboard/providers/[id]/page.new.js +1724 -0
  1677. package/src/app/(dashboard)/dashboard/providers/components/ModelAvailabilityBadge.js +185 -0
  1678. package/src/app/(dashboard)/dashboard/providers/new/page.js +220 -0
  1679. package/src/app/(dashboard)/dashboard/providers/page.js +454 -0
  1680. package/src/app/(dashboard)/dashboard/proxy-pools/page.js +489 -0
  1681. package/src/app/(dashboard)/dashboard/quota/page.js +11 -0
  1682. package/src/app/(dashboard)/dashboard/translator/page.js +300 -0
  1683. package/src/app/(dashboard)/dashboard/usage/components/OverviewCards.js +35 -0
  1684. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.js +190 -0
  1685. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.js +127 -0
  1686. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.js +160 -0
  1687. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js +416 -0
  1688. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.js +201 -0
  1689. package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.js +266 -0
  1690. package/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js +425 -0
  1691. package/src/app/(dashboard)/dashboard/usage/components/UsageChart.js +141 -0
  1692. package/src/app/(dashboard)/dashboard/usage/components/UsageTable.js +247 -0
  1693. package/src/app/(dashboard)/dashboard/usage/page.js +64 -0
  1694. package/src/app/(dashboard)/layout.js +6 -0
  1695. package/src/app/api/auth/login/route.js +54 -0
  1696. package/src/app/api/auth/logout/route.js +8 -0
  1697. package/src/app/api/cli-tools/antigravity-mitm/alias/route.js +51 -0
  1698. package/src/app/api/cli-tools/antigravity-mitm/route.js +133 -0
  1699. package/src/app/api/cli-tools/claude-settings/route.js +194 -0
  1700. package/src/app/api/cli-tools/codex-settings/route.js +218 -0
  1701. package/src/app/api/cli-tools/copilot-settings/route.js +148 -0
  1702. package/src/app/api/cli-tools/droid-settings/route.js +175 -0
  1703. package/src/app/api/cli-tools/openclaw-settings/route.js +180 -0
  1704. package/src/app/api/cli-tools/opencode-settings/route.js +153 -0
  1705. package/src/app/api/cloud/auth/route.js +50 -0
  1706. package/src/app/api/cloud/credentials/update/route.js +57 -0
  1707. package/src/app/api/cloud/model/resolve/route.js +50 -0
  1708. package/src/app/api/cloud/models/alias/route.js +72 -0
  1709. package/src/app/api/combos/[id]/route.js +71 -0
  1710. package/src/app/api/combos/route.js +48 -0
  1711. package/src/app/api/init/route.js +7 -0
  1712. package/src/app/api/keys/[id]/route.js +58 -0
  1713. package/src/app/api/keys/route.js +42 -0
  1714. package/src/app/api/locale/route.js +30 -0
  1715. package/src/app/api/models/alias/route.js +53 -0
  1716. package/src/app/api/models/availability/route.js +121 -0
  1717. package/src/app/api/models/route.js +55 -0
  1718. package/src/app/api/oauth/[provider]/[action]/route.js +166 -0
  1719. package/src/app/api/oauth/cursor/auto-import/route.js +186 -0
  1720. package/src/app/api/oauth/cursor/import/route.js +100 -0
  1721. package/src/app/api/oauth/iflow/cookie/route.js +137 -0
  1722. package/src/app/api/oauth/kiro/auto-import/route.js +85 -0
  1723. package/src/app/api/oauth/kiro/import/route.js +56 -0
  1724. package/src/app/api/oauth/kiro/social-authorize/route.js +43 -0
  1725. package/src/app/api/oauth/kiro/social-exchange/route.js +67 -0
  1726. package/src/app/api/pricing/route.js +134 -0
  1727. package/src/app/api/provider-nodes/[id]/route.js +93 -0
  1728. package/src/app/api/provider-nodes/route.js +83 -0
  1729. package/src/app/api/provider-nodes/validate/route.js +171 -0
  1730. package/src/app/api/providers/[id]/models/route.js +445 -0
  1731. package/src/app/api/providers/[id]/route.js +189 -0
  1732. package/src/app/api/providers/[id]/test-models/route.js +111 -0
  1733. package/src/app/api/providers/client/route.js +20 -0
  1734. package/src/app/api/providers/route.js +186 -0
  1735. package/src/app/api/providers/test-batch/route.js +131 -0
  1736. package/src/app/api/providers/validate/route.js +255 -0
  1737. package/src/app/api/proxy-pools/[id]/route.js +118 -0
  1738. package/src/app/api/proxy-pools/route.js +90 -0
  1739. package/src/app/api/settings/database/route.js +36 -0
  1740. package/src/app/api/settings/proxy-test/route.js +23 -0
  1741. package/src/app/api/settings/require-login/route.js +12 -0
  1742. package/src/app/api/settings/route.js +74 -0
  1743. package/src/app/api/shutdown/route.js +12 -0
  1744. package/src/app/api/tags/route.js +18 -0
  1745. package/src/app/api/translator/console-logs/route.js +24 -0
  1746. package/src/app/api/translator/console-logs/stream/route.js +70 -0
  1747. package/src/app/api/translator/load/route.js +45 -0
  1748. package/src/app/api/translator/save/route.js +44 -0
  1749. package/src/app/api/translator/send/route.js +58 -0
  1750. package/src/app/api/translator/translate/route.js +90 -0
  1751. package/src/app/api/tunnel/disable/route.js +12 -0
  1752. package/src/app/api/tunnel/enable/route.js +16 -0
  1753. package/src/app/api/tunnel/status/route.js +12 -0
  1754. package/src/app/api/usage/[connectionId]/route.js +152 -0
  1755. package/src/app/api/usage/chart/route.js +21 -0
  1756. package/src/app/api/usage/history/route.js +12 -0
  1757. package/src/app/api/usage/providers/route.js +42 -0
  1758. package/src/app/api/usage/request-details/route.js +57 -0
  1759. package/src/app/api/usage/request-logs/route.js +13 -0
  1760. package/src/app/api/usage/stats/route.js +23 -0
  1761. package/src/app/api/usage/stream/route.js +81 -0
  1762. package/src/app/api/v1/api/chat/route.js +38 -0
  1763. package/src/app/api/v1/chat/completions/route.js +54 -0
  1764. package/src/app/api/v1/embeddings/route.js +21 -0
  1765. package/src/app/api/v1/messages/count_tokens/route.js +52 -0
  1766. package/src/app/api/v1/messages/route.js +37 -0
  1767. package/src/app/api/v1/models/route.js +149 -0
  1768. package/src/app/api/v1/responses/route.js +31 -0
  1769. package/src/app/api/v1/route.js +32 -0
  1770. package/src/app/api/v1beta/models/[...path]/route.js +329 -0
  1771. package/src/app/api/v1beta/models/route.js +44 -0
  1772. package/src/app/api/version/route.js +45 -0
  1773. package/src/app/callback/page.js +138 -0
  1774. package/src/app/dashboard/settings/pricing/page.js +173 -0
  1775. package/src/app/favicon.ico +0 -0
  1776. package/src/app/globals.css +219 -0
  1777. package/src/app/landing/components/AnimatedBackground.js +57 -0
  1778. package/src/app/landing/components/Features.js +133 -0
  1779. package/src/app/landing/components/FlowAnimation.js +121 -0
  1780. package/src/app/landing/components/Footer.js +61 -0
  1781. package/src/app/landing/components/GetStarted.js +99 -0
  1782. package/src/app/landing/components/HeroSection.js +47 -0
  1783. package/src/app/landing/components/HowItWorks.js +66 -0
  1784. package/src/app/landing/components/Navigation.js +72 -0
  1785. package/src/app/landing/page.js +106 -0
  1786. package/src/app/layout.js +50 -0
  1787. package/src/app/login/page.js +124 -0
  1788. package/src/app/manifest.js +30 -0
  1789. package/src/app/page.js +7 -0
  1790. package/src/dashboardGuard.js +128 -0
  1791. package/src/i18n/RuntimeI18nProvider.js +27 -0
  1792. package/src/i18n/config.js +150 -0
  1793. package/src/i18n/runtime.js +162 -0
  1794. package/src/lib/consoleLogBuffer.js +79 -0
  1795. package/src/lib/initCloudSync.js +22 -0
  1796. package/src/lib/license/manager.js +36 -0
  1797. package/src/lib/localDb.js +1138 -0
  1798. package/src/lib/network/connectionProxy.js +58 -0
  1799. package/src/lib/network/initOutboundProxy.js +22 -0
  1800. package/src/lib/network/outboundProxy.js +68 -0
  1801. package/src/lib/network/proxyTest.js +91 -0
  1802. package/src/lib/oauth/constants/oauth.js +236 -0
  1803. package/src/lib/oauth/providers.js +999 -0
  1804. package/src/lib/oauth/services/antigravity.js +325 -0
  1805. package/src/lib/oauth/services/claude.js +136 -0
  1806. package/src/lib/oauth/services/codex.js +145 -0
  1807. package/src/lib/oauth/services/cursor.js +179 -0
  1808. package/src/lib/oauth/services/gemini.js +240 -0
  1809. package/src/lib/oauth/services/github.js +225 -0
  1810. package/src/lib/oauth/services/iflow.js +202 -0
  1811. package/src/lib/oauth/services/index.js +16 -0
  1812. package/src/lib/oauth/services/kiro.js +313 -0
  1813. package/src/lib/oauth/services/oauth.js +157 -0
  1814. package/src/lib/oauth/services/openai.js +123 -0
  1815. package/src/lib/oauth/services/qwen.js +170 -0
  1816. package/src/lib/oauth/utils/banner.js +63 -0
  1817. package/src/lib/oauth/utils/pkce.js +38 -0
  1818. package/src/lib/oauth/utils/server.js +116 -0
  1819. package/src/lib/oauth/utils/ui.js +48 -0
  1820. package/src/lib/requestDetailsDb.js +278 -0
  1821. package/src/lib/tunnel/cloudflared.js +326 -0
  1822. package/src/lib/tunnel/state.js +53 -0
  1823. package/src/lib/tunnel/tunnelManager.js +169 -0
  1824. package/src/lib/usage/fetcher.js +208 -0
  1825. package/src/lib/usageDb.js +809 -0
  1826. package/src/mitm/cert/generate.js +32 -0
  1827. package/src/mitm/cert/install.js +176 -0
  1828. package/src/mitm/cert/rootCA.js +173 -0
  1829. package/src/mitm/config.js +27 -0
  1830. package/src/mitm/dns/dnsConfig.js +218 -0
  1831. package/src/mitm/handlers/antigravity.js +20 -0
  1832. package/src/mitm/handlers/base.js +50 -0
  1833. package/src/mitm/handlers/copilot.js +35 -0
  1834. package/src/mitm/handlers/cursor.js +15 -0
  1835. package/src/mitm/handlers/kiro.js +20 -0
  1836. package/src/mitm/logger.js +8 -0
  1837. package/src/mitm/manager.js +618 -0
  1838. package/src/mitm/paths.js +16 -0
  1839. package/src/mitm/server.js +233 -0
  1840. package/src/models/index.js +35 -0
  1841. package/src/proxy.js +5 -0
  1842. package/src/server-init.js +17 -0
  1843. package/src/shared/components/Avatar.js +88 -0
  1844. package/src/shared/components/Badge.js +55 -0
  1845. package/src/shared/components/Button.js +56 -0
  1846. package/src/shared/components/Card.js +122 -0
  1847. package/src/shared/components/CursorAuthModal.js +215 -0
  1848. package/src/shared/components/Drawer.js +89 -0
  1849. package/src/shared/components/Footer.js +132 -0
  1850. package/src/shared/components/Header.js +153 -0
  1851. package/src/shared/components/IFlowCookieModal.js +132 -0
  1852. package/src/shared/components/Input.js +69 -0
  1853. package/src/shared/components/KiroAuthModal.js +383 -0
  1854. package/src/shared/components/KiroOAuthWrapper.js +103 -0
  1855. package/src/shared/components/KiroSocialOAuthModal.js +205 -0
  1856. package/src/shared/components/LanguageSwitcher.js +181 -0
  1857. package/src/shared/components/Loading.js +77 -0
  1858. package/src/shared/components/ManualConfigModal.js +46 -0
  1859. package/src/shared/components/Modal.js +143 -0
  1860. package/src/shared/components/ModelSelectModal.js +356 -0
  1861. package/src/shared/components/OAuthModal.js +476 -0
  1862. package/src/shared/components/Pagination.js +146 -0
  1863. package/src/shared/components/PricingModal.js +208 -0
  1864. package/src/shared/components/RequestLogger.js +121 -0
  1865. package/src/shared/components/SegmentedControl.js +48 -0
  1866. package/src/shared/components/Select.js +70 -0
  1867. package/src/shared/components/Sidebar.js +267 -0
  1868. package/src/shared/components/ThemeProvider.js +15 -0
  1869. package/src/shared/components/ThemeToggle.js +47 -0
  1870. package/src/shared/components/Toggle.js +90 -0
  1871. package/src/shared/components/Tooltip.js +19 -0
  1872. package/src/shared/components/UsageStats.js +465 -0
  1873. package/src/shared/components/index.js +33 -0
  1874. package/src/shared/components/layouts/AuthLayout.js +29 -0
  1875. package/src/shared/components/layouts/DashboardLayout.js +102 -0
  1876. package/src/shared/components/layouts/index.js +4 -0
  1877. package/src/shared/constants/cliTools.js +249 -0
  1878. package/src/shared/constants/colors.js +77 -0
  1879. package/src/shared/constants/config.js +67 -0
  1880. package/src/shared/constants/index.js +4 -0
  1881. package/src/shared/constants/models.js +35 -0
  1882. package/src/shared/constants/pricing.js +876 -0
  1883. package/src/shared/constants/providers.js +120 -0
  1884. package/src/shared/hooks/index.js +2 -0
  1885. package/src/shared/hooks/useCopyToClipboard.js +29 -0
  1886. package/src/shared/hooks/useTheme.js +60 -0
  1887. package/src/shared/services/cloudSyncScheduler.js +122 -0
  1888. package/src/shared/services/initializeApp.js +249 -0
  1889. package/src/shared/services/initializeCloudSync.js +37 -0
  1890. package/src/shared/utils/api.js +93 -0
  1891. package/src/shared/utils/apiKey.js +98 -0
  1892. package/src/shared/utils/clineAuth.js +37 -0
  1893. package/src/shared/utils/cloud.js +40 -0
  1894. package/src/shared/utils/cn.js +11 -0
  1895. package/src/shared/utils/index.js +40 -0
  1896. package/src/shared/utils/machine.js +18 -0
  1897. package/src/shared/utils/machineId.js +60 -0
  1898. package/src/sse/handlers/chat.js +215 -0
  1899. package/src/sse/handlers/embeddings.js +142 -0
  1900. package/src/sse/services/auth.js +267 -0
  1901. package/src/sse/services/model.js +68 -0
  1902. package/src/sse/services/tokenRefresh.js +288 -0
  1903. package/src/sse/utils/logger.js +75 -0
  1904. package/src/store/index.js +6 -0
  1905. package/src/store/notificationStore.js +45 -0
  1906. package/src/store/providerStore.js +48 -0
  1907. package/src/store/themeStore.js +54 -0
  1908. package/src/store/userStore.js +20 -0
@@ -0,0 +1,15 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9242],{3534:(e,t,s)=>{s.d(t,{dM:()=>a,wn:()=>l});let l={antigravity:{id:"antigravity",name:"Antigravity",image:"/providers/antigravity.png",color:"#4285F4",description:"Google Antigravity IDE with MITM",configType:"mitm",mitmDomain:"daily-cloudcode-pa.googleapis.com",modelAliases:["claude-opus-4-6-thinking","claude-sonnet-4-6","gemini-3-flash","gpt-oss-120b-medium","gemini-3-pro-high","gemini-3-pro-low"],defaultModels:[{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro High",alias:"gemini-3.1-pro-high"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low",alias:"gemini-3.1-pro-low"},{id:"gemini-3-flash",name:"Gemini 3 Flash",alias:"gemini-3-flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",alias:"claude-sonnet-4-6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",alias:"claude-opus-4-6-thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium",alias:"gpt-oss-120b-medium"}]},copilot:{id:"copilot",name:"GitHub Copilot",image:"/providers/copilot.png",color:"#1F6FEB",description:"GitHub Copilot IDE with MITM",configType:"mitm",mitmDomain:"api.individual.githubcopilot.com",modelAliases:["gpt-4o-mini","claude-haiku-4.5","gpt-4o","gpt-5-mini"],defaultModels:[{id:"gpt-4o",name:"GPT-4o",alias:"gpt-4o"},{id:"gpt-4.1",name:"GPT-4.1",alias:"gpt-4.1"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5",alias:"claude-haiku-4.5"}]},kiro:{id:"kiro",name:"Kiro",image:"/providers/kiro.png",color:"#FF6B00",description:"Kiro IDE with MITM",configType:"mitm",mitmDomain:"q.us-east-1.amazonaws.com",defaultModels:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5",alias:"claude-sonnet-4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4",alias:"claude-sonnet-4"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5",alias:"claude-haiku-4.5"},{id:"deepseek-3.2",name:"DeepSeek 3.2",alias:"deepseek-3.2"},{id:"minimax-m2.1",name:"MiniMax M2.1",alias:"minimax-m2.1"},{id:"simple-task",name:"Qwen3 Coder Next",alias:"simple-task"}]}},a={claude:{id:"claude",name:"Claude Code",icon:"terminal",color:"#D97757",description:"Anthropic Claude Code CLI",configType:"env",envVars:{baseUrl:"ANTHROPIC_BASE_URL",model:"ANTHROPIC_MODEL",opusModel:"ANTHROPIC_DEFAULT_OPUS_MODEL",sonnetModel:"ANTHROPIC_DEFAULT_SONNET_MODEL",haikuModel:"ANTHROPIC_DEFAULT_HAIKU_MODEL"},modelAliases:["default","sonnet","opus","haiku","opusplan"],settingsFile:"~/.claude/settings.json",defaultModels:[{id:"opus",name:"Claude Opus",alias:"opus",envKey:"ANTHROPIC_DEFAULT_OPUS_MODEL",defaultValue:"cc/claude-opus-4-6"},{id:"sonnet",name:"Claude Sonnet",alias:"sonnet",envKey:"ANTHROPIC_DEFAULT_SONNET_MODEL",defaultValue:"cc/claude-sonnet-4-6"},{id:"haiku",name:"Claude Haiku",alias:"haiku",envKey:"ANTHROPIC_DEFAULT_HAIKU_MODEL",defaultValue:"cc/claude-haiku-4-5-20251001"}]},openclaw:{id:"openclaw",name:"Open Claw",image:"/providers/openclaw.png",color:"#FF6B35",description:"Open Claw AI Assistant",configType:"custom"},codex:{id:"codex",name:"OpenAI Codex CLI",image:"/providers/codex.png",color:"#10A37F",description:"OpenAI Codex CLI",configType:"custom"},opencode:{id:"opencode",name:"OpenCode",image:"/providers/opencode.png",color:"#E87040",description:"OpenCode AI Terminal Assistant",configType:"custom"},droid:{id:"droid",name:"Factory Droid",image:"/providers/droid.png",color:"#00D4FF",description:"Factory Droid AI Assistant",configType:"custom"},cursor:{id:"cursor",name:"Cursor",image:"/providers/cursor.png",color:"#000000",description:"Cursor AI Code Editor",configType:"guide",requiresExternalUrl:!0,notes:[{type:"warning",text:"Requires Cursor Pro account to use this feature."},{type:"cloudCheck",text:"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Tunnel or Cloud Endpoint in Settings."}],guideSteps:[{step:1,title:"Open Settings",desc:"Go to Settings → Models"},{step:2,title:"Enable OpenAI API",desc:'Enable "OpenAI API key" option'},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Add Custom Model",desc:'Click "View All Model" → "Add Custom Model"'},{step:6,title:"Select Model",type:"modelSelector"}]},cline:{id:"cline",name:"Cline",image:"/providers/cline.png",color:"#00D1B2",description:"Cline AI Coding Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Cline Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},kilo:{id:"kilo",name:"Kilo Code",image:"/providers/kilocode.png",color:"#FF6B6B",description:"Kilo Code AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Kilo Code Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},roo:{id:"roo",name:"Roo",image:"/providers/roo.png",color:"#FF6B6B",description:"Roo AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Roo Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → Ollama"},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},continue:{id:"continue",name:"Continue",image:"/providers/continue.png",color:"#7C3AED",description:"Continue AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Config",desc:"Open Continue configuration file"},{step:2,title:"API Key",type:"apiKeySelector"},{step:3,title:"Select Model",type:"modelSelector"},{step:4,title:"Add Model Config",desc:"Add the following configuration to your models array:"}],codeBlock:{language:"json",code:`{
2
+ "apiBase": "{{baseUrl}}",
3
+ "title": "{{model}}",
4
+ "model": "{{model}}",
5
+ "provider": "openai",
6
+ "apiKey": "{{apiKey}}"
7
+ }`}}}},97397:(e,t,s)=>{s.d(t,{Tk:()=>o,Ah:()=>d,a7:()=>p,ZM:()=>x,tA:()=>h,kn:()=>g,yZ:()=>m,qO:()=>u});var l=s(95155),a=s(12115),r=s(35497),i=s(5772);let n=s(41463).env.NEXT_PUBLIC_CLOUD_URL;function o({tool:e,isExpanded:t,onToggle:s,activeProviders:d,modelMappings:c,onModelMappingChange:x,baseUrl:m,hasActiveProviders:p,apiKeys:u,cloudEnabled:h,initialStatus:g}){let f,y,b,[j,N]=(0,a.useState)(g||null),[v,w]=(0,a.useState)(!1),[k,C]=(0,a.useState)(!1),[S,_]=(0,a.useState)(!1),[A,E]=(0,a.useState)(null),[O,I]=(0,a.useState)(!1),[M,P]=(0,a.useState)(!1),[R,T]=(0,a.useState)(null),[$,L]=(0,a.useState)(""),[K,U]=(0,a.useState)({}),[D,F]=(0,a.useState)(!1),[z,H]=(0,a.useState)(""),[B,q]=(0,a.useState)(!1),W=(0,a.useRef)(!1),G=(()=>{if(!j?.installed)return null;let e=j.settings?.env?.ANTHROPIC_BASE_URL;if(!e)return"not_configured";let t=e.includes("localhost")||e.includes("127.0.0.1"),s=h&&n&&e.startsWith(n),l=m&&e.startsWith(m);return t||s||l?"configured":"other"})();(0,a.useEffect)(()=>{u?.length>0&&!$&&L(u[0].key)},[u,$]),(0,a.useEffect)(()=>{g&&N(g)},[g]),(0,a.useEffect)(()=>{t&&!j&&(Y(),Z()),t&&Z()},[t]),(0,a.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{q(!!e.ccFilterNaming)}).catch(()=>{})},[]);let J=async e=>{let t=e.target.checked;q(t),await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({ccFilterNaming:t})}).catch(()=>{})},Z=async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&U(t.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(j?.installed&&!W.current){W.current=!0;let t=j.settings?.env||{};e.defaultModels.forEach(e=>{if(e.envKey){let s=t[e.envKey]||e.defaultValue||"";s&&x(e.alias,s)}});let s=t.ANTHROPIC_AUTH_TOKEN;s&&u?.some(e=>e.key===s)&&L(s)}},[j,u,e.defaultModels,x]);let Y=async()=>{w(!0);try{let e=await fetch("/api/cli-tools/claude-settings"),t=await e.json();N(t)}catch(e){N({installed:!1,error:e.message})}finally{w(!1)}},V=()=>{let e=z||m;return e.endsWith("/v1")?e:`${e}/v1`},X=async()=>{C(!0),E(null);try{let t={ANTHROPIC_BASE_URL:V()},s=$?.trim()||(u?.length>0?u[0].key:null)||(h?null:"sk_vforclaude");s&&(t.ANTHROPIC_AUTH_TOKEN=s),e.defaultModels.forEach(e=>{let s=c[e.alias];s&&e.envKey&&(t[e.envKey]=s)});let l=await fetch("/api/cli-tools/claude-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({env:t})}),a=await l.json();l.ok?(E({type:"success",text:"Settings applied successfully!"}),N(e=>({...e,hasBackup:!0,settings:{...e?.settings,env:t}}))):E({type:"error",text:a.error||"Failed to apply settings"})}catch(e){E({type:"error",text:e.message})}finally{C(!1)}},Q=async()=>{_(!0),E(null);try{let t=await fetch("/api/cli-tools/claude-settings",{method:"DELETE"}),s=await t.json();t.ok?(E({type:"success",text:"Settings reset successfully!"}),e.defaultModels.forEach(e=>x(e.alias,e.defaultValue||"")),L("")):E({type:"error",text:s.error||"Failed to reset settings"})}catch(e){E({type:"error",text:e.message})}finally{_(!1)}};return(0,l.jsxs)(r.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(i.default,{src:"/providers/claude.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===G&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===G&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===G&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,l.jsx)("p",{className:"text-xs text-text-muted truncate",children:e.description})]})]}),(0,l.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${t?"rotate-180":""}`,children:"expand_more"})]}),t&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[v&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,l.jsx)("span",{children:"Checking Claude CLI..."})]}),!v&&j&&!j.installed&&(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Claude CLI not installed"}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Claude CLI to use this feature."})]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:()=>I(!O),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:O?"expand_less":"help"}),O?"Hide":"How to Install"]})]}),O&&(0,l.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,l.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,l.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux / Windows:"}),(0,l.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @anthropic-ai/claude-code"})]}),(0,l.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"claude"})," to verify."]})]})]})]}),!v&&j?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[j?.settings?.env?.ANTHROPIC_BASE_URL&&(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:j.settings.env.ANTHROPIC_BASE_URL})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:(f=z||m).endsWith("/v1")?f:`${f}/v1`,onChange:e=>H(e.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),z&&z!==m&&(0,l.jsx)("button",{onClick:()=>H(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),u.length>0?(0,l.jsx)("select",{value:$,onChange:e=>L(e.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:u.map(e=>(0,l.jsx)("option",{value:e.key,children:e.key},e.id))}):(0,l.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:h?"No API keys - Create one in Keys page":"sk_vforclaude (default)"})]}),e.defaultModels.map(e=>(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:e.name}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:c[e.alias]||"",onChange:t=>x(e.alias,t.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsx)("button",{onClick:()=>{T(e.alias),P(!0)},disabled:!p,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${p?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),c[e.alias]&&(0,l.jsx)("button",{onClick:()=>x(e.alias,""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]},e.alias)),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Filter naming"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,l.jsx)("input",{type:"checkbox",checked:B,onChange:J,className:"w-3.5 h-3.5 accent-primary cursor-pointer"}),(0,l.jsx)("span",{className:"text-xs text-text-muted",children:"Filter naming requests"})]}),(0,l.jsx)(r.m_,{text:"Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens.",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] cursor-help",children:"info"})})]})]}),A&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===A.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===A.type?"check_circle":"error"}),(0,l.jsx)("span",{children:A.text})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(r.$n,{variant:"primary",size:"sm",onClick:X,disabled:!p,loading:k,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:Q,disabled:!j?.has9Router,loading:S,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,l.jsxs)(r.$n,{variant:"ghost",size:"sm",onClick:()=>F(!0),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,l.jsx)(r.rq,{isOpen:M,onClose:()=>P(!1),onSelect:e=>{R&&x(R,e.value)},selectedModel:R?c[R]:null,activeProviders:d,modelAliases:K,title:`Select model for ${R}`}),(0,l.jsx)(r.uR,{isOpen:D,onClose:()=>F(!1),title:"Claude CLI - Manual Configuration",configs:(y=$&&$.trim()?$:h?"<API_KEY_FROM_DASHBOARD>":"sk_vforclaude",b={ANTHROPIC_BASE_URL:V(),ANTHROPIC_AUTH_TOKEN:y},e.defaultModels.forEach(e=>{let t=c[e.alias];t&&e.envKey&&(b[e.envKey]=t)}),[{filename:"~/.claude/settings.json",content:JSON.stringify({env:b},null,2)}])})]})}function d({tool:e,isExpanded:t,onToggle:s,baseUrl:n,apiKeys:o,activeProviders:c,cloudEnabled:x,initialStatus:m}){let p,u,h,[g,f]=(0,a.useState)(m||null),[y,b]=(0,a.useState)(!1),[j,N]=(0,a.useState)(!1),[v,w]=(0,a.useState)(!1),[k,C]=(0,a.useState)(null),[S,_]=(0,a.useState)(!1),[A,E]=(0,a.useState)(""),[O,I]=(0,a.useState)(""),[M,P]=(0,a.useState)(!1),[R,T]=(0,a.useState)({}),[$,L]=(0,a.useState)(!1),[K,U]=(0,a.useState)("");(0,a.useEffect)(()=>{o?.length>0&&!A&&E(o[0].key)},[o,A]),(0,a.useEffect)(()=>{m&&f(m)},[m]),(0,a.useEffect)(()=>{t&&!g&&(H(),D()),t&&D()},[t]);let D=async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&T(t.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(g?.config){let e=g.config.match(/^model\s*=\s*"([^"]+)"/m);e&&I(e[1])}},[g]);let F=g?.installed?g.config?g.config.includes(n)||g.config.includes("localhost")||g.config.includes("127.0.0.1")?"configured":"other":"not_configured":null,z=()=>{let e=K||`${n}/v1`;return e.endsWith("/v1")?e:`${e}/v1`},H=async()=>{b(!0);try{let e=await fetch("/api/cli-tools/codex-settings"),t=await e.json();f(t)}catch(e){f({installed:!1,error:e.message})}finally{b(!1)}},B=async()=>{N(!0),C(null);try{let e=A&&A.trim()||x?A:"sk_vforclaude",t=await fetch("/api/cli-tools/codex-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:z(),apiKey:e,model:O})}),s=await t.json();t.ok?(C({type:"success",text:"Settings applied successfully!"}),H()):C({type:"error",text:s.error||"Failed to apply settings"})}catch(e){C({type:"error",text:e.message})}finally{N(!1)}},q=async()=>{w(!0),C(null);try{let e=await fetch("/api/cli-tools/codex-settings",{method:"DELETE"}),t=await e.json();e.ok?(C({type:"success",text:"Settings reset successfully!"}),I(""),H()):C({type:"error",text:t.error||"Failed to reset settings"})}catch(e){C({type:"error",text:e.message})}finally{w(!1)}};return(0,l.jsxs)(r.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(i.default,{src:"/providers/codex.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===F&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===F&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===F&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,l.jsx)("p",{className:"text-xs text-text-muted truncate",children:e.description})]})]}),(0,l.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${t?"rotate-180":""}`,children:"expand_more"})]}),t&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[y&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,l.jsx)("span",{children:"Checking Codex CLI..."})]}),!y&&g&&!g.installed&&(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Codex CLI not installed"}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Codex CLI to use auto-apply feature."})]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:()=>_(!S),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:S?"expand_less":"help"}),S?"Hide":"How to Install"]})]}),S&&(0,l.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,l.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,l.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux / Windows:"}),(0,l.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @openai/codex"})]}),(0,l.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"codex"})," to verify."]}),(0,l.jsx)("div",{className:"pt-2 border-t border-border",children:(0,l.jsxs)("p",{className:"text-text-muted text-xs",children:["Codex uses ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"~/.codex/auth.json"})," with ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"OPENAI_API_KEY"}),'. Click "Apply" to auto-configure.']})})]})]})]}),!y&&g?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[g?.config&&((u=(p=g.config.match(/base_url\s*=\s*"([^"]+)"/))?p[1]:null)?(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:u})]}):null),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:K||`${n}/v1`,onChange:e=>U(e.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),K&&K!==`${n}/v1`&&(0,l.jsx)("button",{onClick:()=>U(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),o.length>0?(0,l.jsx)("select",{value:A,onChange:e=>E(e.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:o.map(e=>(0,l.jsx)("option",{value:e.key,children:e.key},e.id))}):(0,l.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:x?"No API keys - Create one in Keys page":"sk_vforclaude (default)"})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Model"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:O,onChange:e=>I(e.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsx)("button",{onClick:()=>P(!0),disabled:!c?.length,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${c?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),O&&(0,l.jsx)("button",{onClick:()=>I(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),k&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===k.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===k.type?"check_circle":"error"}),(0,l.jsx)("span",{children:k.text})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(r.$n,{variant:"primary",size:"sm",onClick:B,disabled:!A||!O,loading:j,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:q,disabled:!g.has9Router,loading:v,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,l.jsxs)(r.$n,{variant:"ghost",size:"sm",onClick:()=>L(!0),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,l.jsx)(r.rq,{isOpen:M,onClose:()=>P(!1),onSelect:e=>{I(e.value),P(!1)},selectedModel:O,activeProviders:c,modelAliases:R,title:"Select Model for Codex"}),(0,l.jsx)(r.uR,{isOpen:$,onClose:()=>L(!1),title:"Codex CLI - Manual Configuration",configs:(h=A&&A.trim()?A:x?"<API_KEY_FROM_DASHBOARD>":"sk_vforclaude",[{filename:"~/.codex/config.toml",content:`# 9Router Configuration for Codex CLI
8
+ model = "${O}"
9
+ model_provider = "vforclaude"
10
+
11
+ [model_providers.vforclaude]
12
+ name = "9Router"
13
+ base_url = "${z()}"
14
+ wire_api = "responses"
15
+ `},{filename:"~/.codex/auth.json",content:JSON.stringify({OPENAI_API_KEY:h},null,2)}])})]})}let c=s(41463).env.NEXT_PUBLIC_CLOUD_URL;function x({tool:e,isExpanded:t,onToggle:s,baseUrl:n,hasActiveProviders:o,apiKeys:d,activeProviders:m,cloudEnabled:p,initialStatus:u}){let h,g,f,y,[b,j]=(0,a.useState)(u||null),[N,v]=(0,a.useState)(!1),[w,k]=(0,a.useState)(!1),[C,S]=(0,a.useState)(!1),[_,A]=(0,a.useState)(null),[E,O]=(0,a.useState)(""),[I,M]=(0,a.useState)(""),[P,R]=(0,a.useState)(!1),[T,$]=(0,a.useState)({}),[L,K]=(0,a.useState)(!1),[U,D]=(0,a.useState)(""),F=(0,a.useRef)(!1),z=(()=>{if(!b?.installed)return null;let e=b.settings?.customModels?.find(e=>"custom:9Router-0"===e.id);if(!e)return"not_configured";let t=e.baseUrl?.includes("localhost")||e.baseUrl?.includes("127.0.0.1"),s=p&&c&&e.baseUrl?.startsWith(c),l=n&&e.baseUrl?.startsWith(n);return t||s||l?"configured":"other"})();(0,a.useEffect)(()=>{d?.length>0&&!E&&O(d[0].key)},[d,E]),(0,a.useEffect)(()=>{u&&j(u)},[u]),(0,a.useEffect)(()=>{t&&!b&&(B(),H()),t&&H()},[t]);let H=async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&$(t.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(b?.installed&&!F.current){F.current=!0;let e=b.settings?.customModels?.find(e=>"custom:9Router-0"===e.id);e&&(e.model&&M(e.model),e.apiKey&&d?.some(t=>t.key===e.apiKey)&&O(e.apiKey))}},[b,d]);let B=async()=>{v(!0);try{let e=await fetch("/api/cli-tools/droid-settings"),t=await e.json();j(t)}catch(e){j({installed:!1,error:e.message})}finally{v(!1)}},q=()=>{let e=U||n;return e.endsWith("/v1")?e:`${e}/v1`},W=async()=>{k(!0),A(null);try{let e=E?.trim()||(d?.length>0?d[0].key:null)||(p?null:"sk_vforclaude"),t=await fetch("/api/cli-tools/droid-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:q(),apiKey:e,model:I})}),s=await t.json();t.ok?(A({type:"success",text:"Settings applied successfully!"}),B()):A({type:"error",text:s.error||"Failed to apply settings"})}catch(e){A({type:"error",text:e.message})}finally{k(!1)}},G=async()=>{S(!0),A(null);try{let e=await fetch("/api/cli-tools/droid-settings",{method:"DELETE"}),t=await e.json();e.ok?(A({type:"success",text:"Settings reset successfully!"}),M(""),O(""),B()):A({type:"error",text:t.error||"Failed to reset settings"})}catch(e){A({type:"error",text:e.message})}finally{S(!1)}};return(0,l.jsxs)(r.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(i.default,{src:"/providers/droid.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===z&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===z&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===z&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,l.jsx)("p",{className:"text-xs text-text-muted truncate",children:e.description})]})]}),(0,l.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${t?"rotate-180":""}`,children:"expand_more"})]}),t&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[N&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,l.jsx)("span",{children:"Checking Factory Droid CLI..."})]}),!N&&b&&!b.installed&&(0,l.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Factory Droid CLI not installed"}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Factory Droid CLI to use this feature."})]})]}),!N&&b?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[b?.settings?.customModels?.find(e=>"custom:9Router-0"===e.id)?.baseUrl&&(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:b.settings.customModels.find(e=>"custom:9Router-0"===e.id).baseUrl})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:(h=U||n).endsWith("/v1")?h:`${h}/v1`,onChange:e=>D(e.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),U&&U!==n&&(0,l.jsx)("button",{onClick:()=>D(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),d.length>0?(0,l.jsx)("select",{value:E,onChange:e=>O(e.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:d.map(e=>(0,l.jsx)("option",{value:e.key,children:e.key},e.id))}):(0,l.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:p?"No API keys - Create one in Keys page":"sk_vforclaude (default)"})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Model"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:I,onChange:e=>M(e.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsx)("button",{onClick:()=>R(!0),disabled:!o,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${o?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),I&&(0,l.jsx)("button",{onClick:()=>M(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),_&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===_.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===_.type?"check_circle":"error"}),(0,l.jsx)("span",{children:_.text})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(r.$n,{variant:"primary",size:"sm",onClick:W,disabled:!I,loading:w,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:G,disabled:!b?.has9Router,loading:C,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,l.jsxs)(r.$n,{variant:"ghost",size:"sm",onClick:()=>K(!0),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,l.jsx)(r.rq,{isOpen:P,onClose:()=>R(!1),onSelect:e=>{M(e.value),R(!1)},selectedModel:I,activeProviders:m,modelAliases:T,title:"Select Model for Factory Droid"}),(0,l.jsx)(r.uR,{isOpen:L,onClose:()=>K(!1),title:"Factory Droid - Manual Configuration",configs:(g=E&&E.trim()?E:p?"<API_KEY_FROM_DASHBOARD>":"sk_vforclaude",f={customModels:[{model:I||"provider/model-id",id:"custom:9Router-0",index:0,baseUrl:q(),apiKey:g,displayName:I||"provider/model-id",maxOutputTokens:131072,noImageSupport:!1,provider:"openai"}]},y="u">typeof navigator&&navigator.platform,[{filename:y?.toLowerCase().includes("win")?"%USERPROFILE%\\.factory\\settings.json":"~/.factory/settings.json",content:JSON.stringify(f,null,2)}])})]})}function m({tool:e,isExpanded:t,onToggle:s,baseUrl:n,hasActiveProviders:o,apiKeys:d,activeProviders:c,cloudEnabled:x,initialStatus:p}){let u,h,[g,f]=(0,a.useState)(p||null),[y,b]=(0,a.useState)(!1),[j,N]=(0,a.useState)(!1),[v,w]=(0,a.useState)(!1),[k,C]=(0,a.useState)(null),[S,_]=(0,a.useState)(""),[A,E]=(0,a.useState)(""),[O,I]=(0,a.useState)(!1),[M,P]=(0,a.useState)({}),[R,T]=(0,a.useState)(!1),[$,L]=(0,a.useState)(""),K=(0,a.useRef)(!1),U=(()=>{if(!g?.installed)return null;let e=g.settings?.models?.providers?.vforclaude;if(!e)return"not_configured";let t=e.baseUrl?.includes("localhost")||e.baseUrl?.includes("127.0.0.1")||e.baseUrl?.includes("0.0.0.0"),s=n&&e.baseUrl?.startsWith(n);return t||s?"configured":"other"})();(0,a.useEffect)(()=>{d?.length>0&&!S&&_(d[0].key)},[d,S]),(0,a.useEffect)(()=>{p&&f(p)},[p]),(0,a.useEffect)(()=>{t&&!g&&(F(),D()),t&&D()},[t]);let D=async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&P(t.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(g?.installed&&!K.current){K.current=!0;let e=g.settings?.models?.providers?.vforclaude;if(e){let t=g.settings?.agents?.defaults?.model?.primary;t&&E(t.replace("vforclaude/","")),e.apiKey&&d?.some(t=>t.key===e.apiKey)&&_(e.apiKey)}}},[g,d]);let F=async()=>{b(!0);try{let e=await fetch("/api/cli-tools/openclaw-settings"),t=await e.json();f(t)}catch(e){f({installed:!1,error:e.message})}finally{b(!1)}},z=()=>window.location.origin.replace("://localhost","://127.0.0.1"),H=()=>{let e=$||z();return e.endsWith("/v1")?e:`${e}/v1`},B=async()=>{N(!0),C(null);try{let e=S?.trim()||(d?.length>0?d[0].key:null)||(x?null:"sk_vforclaude"),t=await fetch("/api/cli-tools/openclaw-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:H(),apiKey:e,model:A})}),s=await t.json();t.ok?(C({type:"success",text:"Settings applied successfully!"}),F()):C({type:"error",text:s.error||"Failed to apply settings"})}catch(e){C({type:"error",text:e.message})}finally{N(!1)}},q=async()=>{w(!0),C(null);try{let e=await fetch("/api/cli-tools/openclaw-settings",{method:"DELETE"}),t=await e.json();e.ok?(C({type:"success",text:"Settings reset successfully!"}),E(""),_(""),F()):C({type:"error",text:t.error||"Failed to reset settings"})}catch(e){C({type:"error",text:e.message})}finally{w(!1)}};return(0,l.jsxs)(r.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(i.default,{src:"/providers/openclaw.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===U&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===U&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===U&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,l.jsx)("p",{className:"text-xs text-text-muted truncate",children:e.description})]})]}),(0,l.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${t?"rotate-180":""}`,children:"expand_more"})]}),t&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[y&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,l.jsx)("span",{children:"Checking Open Claw CLI..."})]}),!y&&g&&!g.installed&&(0,l.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Open Claw CLI not installed"}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Open Claw CLI to use this feature."})]})]}),!y&&g?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[g?.settings?.models?.providers?.["9router"]?.baseUrl&&(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:g.settings.models.providers["9router"].baseUrl})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:(u=$||z()).endsWith("/v1")?u:`${u}/v1`,onChange:e=>L(e.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),$&&$!==n&&(0,l.jsx)("button",{onClick:()=>L(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),d.length>0?(0,l.jsx)("select",{value:S,onChange:e=>_(e.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:d.map(e=>(0,l.jsx)("option",{value:e.key,children:e.key},e.id))}):(0,l.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:x?"No API keys - Create one in Keys page":"sk_vforclaude (default)"})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Model"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:A,onChange:e=>E(e.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsx)("button",{onClick:()=>I(!0),disabled:!o,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${o?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),A&&(0,l.jsx)("button",{onClick:()=>E(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),k&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===k.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===k.type?"check_circle":"error"}),(0,l.jsx)("span",{children:k.text})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(r.$n,{variant:"primary",size:"sm",onClick:B,disabled:!A,loading:j,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:q,disabled:!g?.has9Router,loading:v,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,l.jsxs)(r.$n,{variant:"ghost",size:"sm",onClick:()=>T(!0),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,l.jsx)(r.rq,{isOpen:O,onClose:()=>I(!1),onSelect:e=>{E(e.value),I(!1)},selectedModel:A,activeProviders:c,modelAliases:M,title:"Select Model for Open Claw"}),(0,l.jsx)(r.uR,{isOpen:R,onClose:()=>T(!1),title:"Open Claw - Manual Configuration",configs:(h=S&&S.trim()?S:x?"<API_KEY_FROM_DASHBOARD>":"sk_vforclaude",[{filename:"~/.openclaw/openclaw.json",content:JSON.stringify({agents:{defaults:{model:{primary:`9router/${A||"provider/model-id"}`}}},models:{providers:{"9router":{baseUrl:H(),apiKey:h,api:"openai-completions",models:[{id:A||"provider/model-id",name:(A||"provider/model-id").split("/").pop()}]}}}},null,2)}])})]})}function p({toolId:e,tool:t,isExpanded:s,onToggle:n,baseUrl:o,apiKeys:d,activeProviders:c=[],cloudEnabled:x=!1,tunnelEnabled:m=!1}){let[u,h]=(0,a.useState)(null),[g,f]=(0,a.useState)(!1),[y,b]=(0,a.useState)(""),[j,N]=(0,a.useState)(()=>d?.length>0?d[0].key:""),v=e=>{let t=j&&j.trim()?j:x?"your-api-key":"sk_vforclaude",s=o||"http://localhost:20128",l=s.endsWith("/v1")?s:`${s}/v1`;return e.replace(/\{\{baseUrl\}\}/g,l).replace(/\{\{apiKey\}\}/g,t).replace(/\{\{model\}\}/g,y||"provider/model-id")},w=async(e,t)=>{await navigator.clipboard.writeText(v(e)),h(t),setTimeout(()=>h(null),2e3)},k=c.length>0,C=()=>(!t.requiresExternalUrl||!!x||!!m)&&(!t.requiresCloud||!!x);return(0,l.jsxs)(r.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:n,children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 rounded-lg flex items-center justify-center shrink-0",children:t.image?(0,l.jsx)(i.default,{src:t.image,alt:t.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}}):t.icon?(0,l.jsx)("span",{className:"material-symbols-outlined text-xl",style:{color:t.color},children:t.icon}):(0,l.jsx)(i.default,{src:`/providers/${e}.png`,alt:t.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:t.name}),(0,l.jsx)("p",{className:"text-xs text-text-muted truncate",children:t.description})]})]}),(0,l.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${s?"rotate-180":""}`,children:"expand_more"})]}),s&&(0,l.jsx)("div",{className:"mt-6 pt-6 border-t border-border",children:t.guideSteps?(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[t.notes&&0!==t.notes.length?(0,l.jsx)("div",{className:"flex flex-col gap-2 mb-4",children:t.notes.map((e,t)=>{if("cloudCheck"===e.type&&(x||m))return null;let s="warning"===e.type,a="cloudCheck"===e.type&&!x&&!m,r="bg-blue-500/10 border-blue-500/30",i="text-blue-600 dark:text-blue-400",n="text-blue-500",o="info";return s?(r="bg-yellow-500/10 border-yellow-500/30",i="text-yellow-600 dark:text-yellow-400",n="text-yellow-500",o="warning"):a&&(r="bg-red-500/10 border-red-500/30",i="text-red-600 dark:text-red-400",n="text-red-500",o="error"),(0,l.jsxs)("div",{className:`flex items-start gap-3 p-3 rounded-lg border ${r}`,children:[(0,l.jsx)("span",{className:`material-symbols-outlined text-lg ${n}`,children:o}),(0,l.jsx)("p",{className:`text-sm ${i}`,children:e.text})]},t)})}):null,C()&&t.guideSteps.map(e=>(0,l.jsxs)("div",{className:"flex items-start gap-4",children:[(0,l.jsx)("div",{className:"size-8 rounded-full flex items-center justify-center shrink-0 text-sm font-semibold text-white",style:{backgroundColor:t.color},children:e.step}),(0,l.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,l.jsx)("p",{className:"font-medium text-text",children:e.title}),e.desc&&(0,l.jsx)("p",{className:"text-sm text-text-muted mt-0.5",children:e.desc}),"apiKeySelector"===e.type&&(0,l.jsx)("div",{className:"mt-2 flex items-center gap-2",children:d&&d.length>0?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("select",{value:j,onChange:e=>N(e.target.value),className:"flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:d.map(e=>(0,l.jsx)("option",{value:e.key,children:e.key},e.id))}),(0,l.jsx)("button",{onClick:()=>w(j,"apiKey"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-lg",children:"apiKey"===u?"check":"content_copy"})})]}):(0,l.jsx)("span",{className:"text-sm text-text-muted",children:x?"No API keys - Create one in Keys page":"sk_vforclaude"})}),"modelSelector"===e.type&&(0,l.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,l.jsx)("input",{type:"text",value:y,onChange:e=>b(e.target.value),placeholder:"provider/model-id",className:"flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsx)("button",{onClick:()=>f(!0),disabled:!k,className:`shrink-0 px-3 py-2 rounded-lg border text-sm transition-colors ${k?"bg-bg-secondary border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),y&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{onClick:()=>w(y,"model"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-lg",children:"model"===u?"check":"content_copy"})}),(0,l.jsx)("button",{onClick:()=>b(""),className:"p-2 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-lg",children:"close"})})]})]}),e.value&&(0,l.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,l.jsx)("code",{className:"flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm font-mono border border-border truncate",children:v(e.value)}),e.copyable&&(0,l.jsx)("button",{onClick:()=>w(e.value,`${e.step}-${e.title}`),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-lg",children:u===`${e.step}-${e.title}`?"check":"content_copy"})})]})]})]},e.step)),C()&&t.codeBlock&&(0,l.jsxs)("div",{className:"mt-2",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,l.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wide",children:t.codeBlock.language}),(0,l.jsxs)("button",{onClick:()=>w(t.codeBlock.code,"codeblock"),className:"flex items-center gap-1 px-2 py-1 text-xs bg-bg-secondary hover:bg-bg-tertiary rounded border border-border transition-colors",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-sm",children:"codeblock"===u?"check":"content_copy"}),"codeblock"===u?"Copied!":"Copy"]})]}),(0,l.jsx)("pre",{className:"p-4 bg-bg-secondary rounded-lg border border-border overflow-x-auto",children:(0,l.jsx)("code",{className:"text-sm font-mono whitespace-pre",children:v(t.codeBlock.code)})})]})]}):(0,l.jsx)("p",{className:"text-text-muted text-sm",children:"Coming soon..."})}),(0,l.jsx)(r.rq,{isOpen:g,onClose:()=>f(!1),onSelect:e=>{b(e.value)},selectedModel:y,activeProviders:c,title:"Select Model"})]})}function u({tool:e,isExpanded:t,onToggle:s,baseUrl:n,apiKeys:o,activeProviders:d,cloudEnabled:c,initialStatus:x}){let m,[p,h]=(0,a.useState)(x||null),[g,f]=(0,a.useState)(!1),[y,b]=(0,a.useState)(!1),[j,N]=(0,a.useState)(!1),[v,w]=(0,a.useState)(null),[k,C]=(0,a.useState)(!1),[S,_]=(0,a.useState)(""),[A,E]=(0,a.useState)(""),[O,I]=(0,a.useState)(!1),[M,P]=(0,a.useState)({}),[R,T]=(0,a.useState)(!1),[$,L]=(0,a.useState)("");(0,a.useEffect)(()=>{o?.length>0&&!S&&_(o[0].key)},[o,S]),(0,a.useEffect)(()=>{x&&h(x)},[x]),(0,a.useEffect)(()=>{t&&!p&&(F(),K()),t&&K()},[t]),(0,a.useEffect)(()=>{p?.config?.model?.startsWith("vforclaude/")&&E(p.config.model.replace("vforclaude/",""))},[p]);let K=async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&P(t.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}},U=(()=>{if(!p?.installed)return null;if(!p.config)return"not_configured";let e=p.config?.provider?.vforclaude?.options?.baseURL||"",t=e.includes("localhost")||e.includes("127.0.0.1");return p.has9Router&&(t||e.includes(n))?"configured":p.has9Router?"other":"not_configured"})(),D=()=>{let e=$||n;return e.endsWith("/v1")?e:`${e}/v1`},F=async()=>{f(!0);try{let e=await fetch("/api/cli-tools/opencode-settings"),t=await e.json();h(t)}catch(e){h({installed:!1,error:e.message})}finally{f(!1)}},z=async()=>{b(!0),w(null);try{let e=S&&S.trim()||c?S:"sk_vforclaude",t=await fetch("/api/cli-tools/opencode-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:D(),apiKey:e,model:A})}),s=await t.json();t.ok?(w({type:"success",text:"Settings applied successfully!"}),F()):w({type:"error",text:s.error||"Failed to apply settings"})}catch(e){w({type:"error",text:e.message})}finally{b(!1)}},H=async()=>{N(!0),w(null);try{let e=await fetch("/api/cli-tools/opencode-settings",{method:"DELETE"}),t=await e.json();e.ok?(w({type:"success",text:"Settings reset successfully!"}),E(""),F()):w({type:"error",text:t.error||"Failed to reset settings"})}catch(e){w({type:"error",text:e.message})}finally{N(!1)}};return(0,l.jsxs)(r.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(i.default,{src:"/providers/opencode.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===U&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===U&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===U&&(0,l.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,l.jsx)("p",{className:"text-xs text-text-muted truncate",children:e.description})]})]}),(0,l.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${t?"rotate-180":""}`,children:"expand_more"})]}),t&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[g&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,l.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,l.jsx)("span",{children:"Checking OpenCode CLI..."})]}),!g&&p&&!p.installed&&(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"OpenCode CLI not installed"}),(0,l.jsx)("p",{className:"text-sm text-text-muted",children:"Please install OpenCode CLI to use auto-apply feature."})]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:()=>C(!k),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:k?"expand_less":"help"}),k?"Hide":"How to Install"]})]}),k&&(0,l.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,l.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,l.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux:"}),(0,l.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g opencode-ai"})]}),(0,l.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"opencode"})," to verify."]})]})]})]}),!g&&p?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[p?.config?.provider?.vforclaude?.options?.baseURL&&(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:p.config.provider.vforclaude.options.baseURL})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:$||`${n}/v1`,onChange:e=>L(e.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),$&&$!==`${n}/v1`&&(0,l.jsx)("button",{onClick:()=>L(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),o.length>0?(0,l.jsx)("select",{value:S,onChange:e=>_(e.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:o.map(e=>(0,l.jsx)("option",{value:e.key,children:e.key},e.id))}):(0,l.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:c?"No API keys - Create one in Keys page":"sk_vforclaude (default)"})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Model"}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:A,onChange:e=>E(e.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsx)("button",{onClick:()=>I(!0),disabled:!d?.length,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${d?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),A&&(0,l.jsx)("button",{onClick:()=>E(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),v&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===v.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===v.type?"check_circle":"error"}),(0,l.jsx)("span",{children:v.text})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(r.$n,{variant:"primary",size:"sm",onClick:z,disabled:!A,loading:y,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,l.jsxs)(r.$n,{variant:"outline",size:"sm",onClick:H,disabled:!p.has9Router,loading:j,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,l.jsxs)(r.$n,{variant:"ghost",size:"sm",onClick:()=>T(!0),children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,l.jsx)(r.rq,{isOpen:O,onClose:()=>I(!1),onSelect:e=>{E(e.value),I(!1)},selectedModel:A,activeProviders:d,modelAliases:M,title:"Select Model for OpenCode"}),(0,l.jsx)(r.uR,{isOpen:R,onClose:()=>T(!1),title:"OpenCode - Manual Configuration",configs:(m=S&&S.trim()?S:c?"<API_KEY_FROM_DASHBOARD>":"sk_vforclaude",[{filename:"~/.config/opencode/opencode.json",content:JSON.stringify({provider:{vforclaude:{npm:"@ai-sdk/openai-compatible",options:{baseURL:D(),apiKey:m},models:{[A||"provider/model-id"]:{name:A||"provider/model-id"}}}},model:`vforclaude/${A||"provider/model-id"}`},null,2)}])})]})}function h({apiKeys:e,cloudEnabled:t,onStatusChange:s}){let[i,n]=(0,a.useState)(null),[o,d]=(0,a.useState)(!1),[c,x]=(0,a.useState)(!1),[m,p]=(0,a.useState)(""),[u,g]=(0,a.useState)(""),[f,y]=(0,a.useState)(null),[b,j]=(0,a.useState)(null),N="u">typeof navigator&&navigator.userAgent?.includes("Windows"),v=i?.isAdmin!==!1;(0,a.useEffect)(()=>{e?.length>0&&!u&&g(e[0].key)},[e,u]),(0,a.useEffect)(()=>{w()},[]);let w=async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm");if(e.ok){let t=await e.json();n(t),s?.(t)}}catch{n({running:!1,certExists:!1,dnsStatus:{}})}},k=e=>{N||i?.hasCachedPassword?C(e,""):(y(e),x(!0),j(null))},C=async(s,l)=>{d(!0);try{if("trust-cert"===s)await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:l})});else if("start"===s){let s=u?.trim()||(e?.length>0?e[0].key:null)||(t?null:"sk_vforclaude");await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:s,sudoPassword:l})})}else await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:l})});x(!1),p(""),await w()}catch{}finally{d(!1),y(null)}},S=()=>{m.trim()?C(f,m):j("Sudo password is required")},_=i?.running;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(r.Zp,{padding:"sm",className:"border-primary/20 bg-primary/5",children:(0,l.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"security"}),(0,l.jsx)("span",{className:"font-semibold text-sm text-text-main",children:"MITM Server"}),_?(0,l.jsx)(r.Ex,{variant:"success",size:"sm",children:"Running"}):(0,l.jsx)(r.Ex,{variant:"default",size:"sm",children:"Stopped"})]}),(0,l.jsx)("div",{className:"flex items-center gap-1 text-xs text-text-muted","data-i18n-skip":"true",children:[{label:"Cert",ok:i?.certExists},{label:"Trusted",ok:i?.certTrusted},{label:"Server",ok:_}].map(({label:e,ok:t})=>(0,l.jsxs)("span",{className:`flex items-center gap-0.5 px-1.5 py-0.5 rounded ${t?"text-green-600":"text-text-muted"}`,children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:t?"check_circle":"cancel"}),e]},e))})]}),(0,l.jsxs)("div",{className:"px-2 py-2 rounded-lg bg-surface/50 border border-border/50 flex flex-col gap-2",children:[(0,l.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Purpose:"})," Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router"]}),(0,l.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"How it works:"})," Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot"]})]}),!_&&(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"text-xs text-text-muted shrink-0",children:"API Key"}),e?.length>0?(0,l.jsx)("select",{value:u,onChange:e=>g(e.target.value),className:"flex-1 px-2 py-1 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:e.map(e=>(0,l.jsx)("option",{value:e.key,children:e.key},e.id))}):(0,l.jsx)("span",{className:"text-xs text-text-muted",children:t?"No API keys — create one in Keys page":"sk_vforclaude (default)"})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 flex-wrap","data-i18n-skip":"true",children:[i?.certExists&&!i?.certTrusted&&(0,l.jsxs)("button",{onClick:()=>k("trust-cert"),disabled:o,className:"px-4 py-1.5 rounded-lg bg-yellow-500/10 border border-yellow-500/30 text-yellow-600 font-medium text-xs flex items-center gap-1.5 hover:bg-yellow-500/20 transition-colors disabled:opacity-50",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"verified_user"}),"Trust Cert"]}),_?(0,l.jsxs)("button",{onClick:()=>k("stop"),disabled:o,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop Server"]}):(0,l.jsxs)("button",{onClick:()=>k("start"),disabled:o||N&&!v,className:"px-4 py-1.5 rounded-lg bg-primary/10 border border-primary/30 text-primary font-medium text-xs flex items-center gap-1.5 hover:bg-primary/20 transition-colors disabled:opacity-50",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start Server"]}),_&&(0,l.jsx)("p",{className:"text-xs text-text-muted",children:"Enable DNS per tool below to activate interception"})]}),N&&!v&&(0,l.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"shield_lock"}),(0,l.jsx)("span",{children:"Administrator required — restart 9Router as Administrator to use MITM"})]})]})}),c&&(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,l.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,l.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,l.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,l.jsx)("p",{className:"text-xs text-text-muted",children:"Required for SSL certificate and server startup"})]}),(0,l.jsx)(r.pd,{type:"password",placeholder:"Enter sudo password",value:m,onChange:e=>p(e.target.value),onKeyDown:e=>{"Enter"!==e.key||o||S()}}),b&&(0,l.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,l.jsx)("span",{children:b})]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,l.jsx)(r.$n,{variant:"ghost",size:"sm",onClick:()=>{x(!1),p(""),j(null)},disabled:o,children:"Cancel"}),(0,l.jsx)(r.$n,{variant:"primary",size:"sm",onClick:S,loading:o,children:"Confirm"})]})]})})]})}function g({tool:e,isExpanded:t,onToggle:s,serverRunning:n,dnsActive:o,hasCachedPassword:d,apiKeys:c,activeProviders:x,hasActiveProviders:m,modelAliases:p={},cloudEnabled:u,onDnsChange:h}){let[f,y]=(0,a.useState)(!1),[b,j]=(0,a.useState)(null),[N,v]=(0,a.useState)(!1),[w,k]=(0,a.useState)(""),[C,S]=(0,a.useState)(null),[_,A]=(0,a.useState)(null),[E,O]=(0,a.useState)({}),[I,M]=(0,a.useState)(!1),[P,R]=(0,a.useState)(null),T="u">typeof navigator&&navigator.userAgent?.includes("Windows");(0,a.useEffect)(()=>{t&&$()},[t]);let $=async()=>{try{let t=await fetch(`/api/cli-tools/antigravity-mitm/alias?tool=${e.id}`);if(t.ok){let e=await t.json();Object.keys(e.aliases||{}).length>0&&O(e.aliases)}}catch{}},L=(0,a.useCallback)(async t=>{try{await fetch("/api/cli-tools/antigravity-mitm/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:e.id,mappings:t})})}catch{}},[e.id]),K=(e,t)=>{O(s=>({...s,[e]:t}))},U=()=>{if(!n)return;let e=o?"disable":"enable";T||d?D(e,""):(S(e),v(!0),A(null))},D=async(t,s)=>{y(!0),j(null);try{let l=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:e.id,action:t,sudoPassword:s})}),a=await l.json();if(!l.ok)throw Error(a.error||"Failed to toggle DNS");"enable"===t&&j(`Restart ${e.name} to apply changes`),v(!1),k(""),h?.(a)}catch{}finally{y(!1),S(null)}},F=()=>{w.trim()?D(C,w):A("Sudo password is required")};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(r.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(i.default,{src:e.image,alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),n?o?(0,l.jsx)(r.Ex,{variant:"success",size:"sm",children:"Active"}):(0,l.jsx)(r.Ex,{variant:"warning",size:"sm",children:"DNS off"}):(0,l.jsx)(r.Ex,{variant:"default",size:"sm",children:"Server off"})]}),(0,l.jsxs)("p",{className:"text-xs text-text-muted",children:["Intercept ",e.name," requests via MITM proxy"]})]})]}),(0,l.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${t?"rotate-180":""}`,children:"expand_more"})]}),t&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-0.5 text-[11px] text-text-muted px-1",children:[(0,l.jsxs)("p",{children:["Toggle DNS to redirect ",e.name," traffic through 9Router via MITM."]}),!o&&(0,l.jsx)("p",{className:"text-amber-600 text-[10px] mt-1",children:"⚠️ Enable DNS to edit model mappings"})]}),e.defaultModels?.length>0&&(0,l.jsx)("div",{className:"flex flex-col gap-2",children:e.defaultModels.map(e=>(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"w-36 shrink-0 text-xs font-semibold text-text-main text-right",children:e.name}),(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,l.jsx)("input",{type:"text",value:E[e.alias]||"",onChange:t=>K(e.alias,t.target.value),onBlur:t=>{var s,l;return s=e.alias,l=t.target.value,void L({...E,[s]:l})},placeholder:"provider/model-id",disabled:!o,className:`flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 ${!o?"opacity-50 cursor-not-allowed":""}`}),(0,l.jsx)("button",{onClick:()=>{R(e.alias),M(!0)},disabled:!m||!o,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 ${m&&o?"bg-surface border-border hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select"}),E[e.alias]&&(0,l.jsx)("button",{onClick:()=>{K(e.alias,""),L({...E,[e.alias]:""})},className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]},e.alias))}),e.defaultModels?.length===0&&(0,l.jsx)("p",{className:"text-xs text-text-muted px-1",children:"Model mappings will be available soon."}),(0,l.jsxs)("div",{className:"flex flex-col gap-2 items-start",children:[o?(0,l.jsxs)("button",{onClick:U,disabled:!n||f,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop DNS"]}):(0,l.jsxs)("button",{onClick:U,disabled:!n||f,className:"px-4 py-1.5 rounded-lg bg-primary/10 border border-primary/30 text-primary font-medium text-xs flex items-center gap-1.5 hover:bg-primary/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start DNS"]}),b&&(0,l.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-amber-500/10 text-amber-600 border border-amber-500/20",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"warning"}),(0,l.jsx)("span",{children:b})]})]})]})]}),N&&(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,l.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,l.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,l.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,l.jsx)("p",{className:"text-xs text-text-muted",children:"Required to modify /etc/hosts and flush DNS cache"})]}),(0,l.jsx)(r.pd,{type:"password",placeholder:"Enter sudo password",value:w,onChange:e=>k(e.target.value),onKeyDown:e=>{"Enter"!==e.key||f||F()}}),_&&(0,l.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,l.jsx)("span",{children:_})]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,l.jsx)(r.$n,{variant:"ghost",size:"sm",onClick:()=>{v(!1),k(""),A(null)},disabled:f,children:"Cancel"}),(0,l.jsx)(r.$n,{variant:"primary",size:"sm",onClick:F,loading:f,children:"Confirm"})]})]})}),(0,l.jsx)(r.rq,{isOpen:I,onClose:()=>M(!1),onSelect:e=>{if(!P||e.isPlaceholder)return;let t={...E,[P]:e.value};O(t),L(t)},selectedModel:P?E[P]:null,activeProviders:x,modelAliases:p,title:`Select model for ${P}`})]})}}}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{1010:(e,t,a)=>{Promise.resolve().then(a.bind(a,75228))},75228:(e,t,a)=>{"use strict";a.d(t,{default:()=>u});var s=a(95155),l=a(12115),i=a(35497),o=a(3534),r=a(28777),n=a(97397);let c=a(41463).env.NEXT_PUBLIC_CLOUD_URL,d={claude:"/api/cli-tools/claude-settings",codex:"/api/cli-tools/codex-settings",opencode:"/api/cli-tools/opencode-settings",droid:"/api/cli-tools/droid-settings",openclaw:"/api/cli-tools/openclaw-settings"};function u({machineId:e}){let t,a,p,[v,h]=(0,l.useState)([]),[x,f]=(0,l.useState)(!0),[g,j]=(0,l.useState)(null),[w,m]=(0,l.useState)({}),[b,y]=(0,l.useState)(!1),[E,P]=(0,l.useState)(!1),[S,k]=(0,l.useState)(""),[N,_]=(0,l.useState)([]),[C,O]=(0,l.useState)({});(0,l.useEffect)(()=>{U(),I(),M(),A()},[]);let A=async()=>{try{let e=await Promise.all(Object.entries(d).map(async([e,t])=>{try{let a=await fetch(t),s=await a.json();return[e,s]}catch{return[e,null]}}));O(Object.fromEntries(e))}catch(e){console.log("Error fetching tool statuses:",e)}},I=async()=>{try{let[e,t]=await Promise.all([fetch("/api/settings"),fetch("/api/tunnel/status")]);if(e.ok){let t=await e.json();y(t.cloudEnabled||!1)}if(t.ok){let e=await t.json();P(e.enabled||!1),k(e.tunnelUrl||"")}}catch(e){console.log("Error loading settings:",e)}},M=async()=>{try{let e=await fetch("/api/keys");if(e.ok){let t=await e.json();_(t.keys||[])}}catch(e){console.log("Error fetching API keys:",e)}},U=async()=>{try{let e=await fetch("/api/providers"),t=await e.json();e.ok&&h(t.connections||[])}catch(e){console.log("Error fetching connections:",e)}finally{f(!1)}},L=()=>v.filter(e=>!1!==e.isActive),$=(0,l.useCallback)((e,t,a)=>{m(s=>s[e]?.[t]===a?s:{...s,[e]:{...s[e],[t]:a}})},[]);if(x)return(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(i.Qv,{}),(0,s.jsx)(i.Qv,{}),(0,s.jsx)(i.Qv,{})]});let Q=(t=L(),a=[],p=new Set,t.forEach(e=>{let t=r.Xg[e.provider]||e.provider;(0,r.KC)(e.provider).forEach(s=>{let l=`${t}/${s.id}`;p.has(l)||(p.add(l),a.push({value:l,label:`${t}/${s.id}`,provider:e.provider,alias:t,connectionName:e.name,modelId:s.id}))})}),a).length>0,T=Object.entries(o.dM);return(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[!Q&&(0,s.jsx)(i.Zp,{className:"border-yellow-500/50 bg-yellow-500/5",children:(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"No active providers"}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Please add and connect providers first to configure CLI tools."})]})]})}),(0,s.jsx)("div",{className:"flex flex-col gap-4",children:T.map(([e,t])=>((e,t)=>{let a={tool:t,isExpanded:g===e,onToggle:()=>j(g===e?null:e),baseUrl:E&&S?S:b&&c?c:window.location.origin,apiKeys:N};switch(e){case"claude":return(0,s.jsx)(n.Tk,{...a,activeProviders:L(),modelMappings:w[e]||{},onModelMappingChange:(t,a)=>$(e,t,a),hasActiveProviders:Q,cloudEnabled:b,initialStatus:C.claude},e);case"codex":return(0,s.jsx)(n.Ah,{...a,activeProviders:L(),cloudEnabled:b,initialStatus:C.codex},e);case"opencode":return(0,s.jsx)(n.qO,{...a,activeProviders:L(),cloudEnabled:b,initialStatus:C.opencode},e);case"droid":return(0,s.jsx)(n.ZM,{...a,activeProviders:L(),hasActiveProviders:Q,cloudEnabled:b,initialStatus:C.droid},e);case"openclaw":return(0,s.jsx)(n.yZ,{...a,activeProviders:L(),hasActiveProviders:Q,cloudEnabled:b,initialStatus:C.openclaw},e);default:return(0,s.jsx)(n.a7,{toolId:e,...a,activeProviders:L(),cloudEnabled:b,tunnelEnabled:E},e)}})(e,t))})]})}}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,9242,8441,3794,7358],()=>e(e.s=1010)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{22888:(e,t,s)=>{Promise.resolve().then(s.bind(s,47295))},47295:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>n});var a=s(95155),l=s(12115),o=s(35497),r=s(11059);s(52679);let i=/^[a-zA-Z0-9_.\-]+$/;function n(){let[e,t]=(0,l.useState)([]),[s,i]=(0,l.useState)(!0),[n,c]=(0,l.useState)(!1),[x,h]=(0,l.useState)(null),[p,u]=(0,l.useState)([]),{copied:b,copy:j}=(0,r.C)();(0,l.useEffect)(()=>{f()},[]);let f=async()=>{try{let[e,s]=await Promise.all([fetch("/api/combos"),fetch("/api/providers")]),a=await e.json(),l=await s.json();e.ok&&t(a.combos||[]),s.ok&&u(l.connections||[])}catch(e){console.log("Error fetching data:",e)}finally{i(!1)}},v=async e=>{try{let t=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(t.ok)await f(),c(!1);else{let e=await t.json();alert(e.error||"Failed to create combo")}}catch(e){console.log("Error creating combo:",e)}},g=async(e,t)=>{try{let s=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(s.ok)await f(),h(null);else{let e=await s.json();alert(e.error||"Failed to update combo")}}catch(e){console.log("Error updating combo:",e)}},y=async s=>{if(confirm("Delete this combo?"))try{(await fetch(`/api/combos/${s}`,{method:"DELETE"})).ok&&t(e.filter(e=>e.id!==s))}catch(e){console.log("Error deleting combo:",e)}};return s?(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsx)(o.Qv,{}),(0,a.jsx)(o.Qv,{})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-semibold",children:"Combos"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Create model combos with fallback support"})]}),(0,a.jsx)(o.$n,{icon:"add",onClick:()=>c(!0),children:"Create Combo"})]}),0===e.length?(0,a.jsx)(o.Zp,{children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"layers"})}),(0,a.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No combos yet"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create model combos with fallback support"}),(0,a.jsx)(o.$n,{icon:"add",onClick:()=>c(!0),children:"Create Combo"})]})}):(0,a.jsx)("div",{className:"flex flex-col gap-4",children:e.map(e=>(0,a.jsx)(d,{combo:e,copied:b,onCopy:j,onEdit:()=>h(e),onDelete:()=>y(e.id)},e.id))}),(0,a.jsx)(m,{isOpen:n,onClose:()=>c(!1),onSave:v,activeProviders:p},"create"),(0,a.jsx)(m,{isOpen:!!x,combo:x,onClose:()=>h(null),onSave:e=>g(x.id,e),activeProviders:p},x?.id||"new")]})}function d({combo:e,copied:t,onCopy:s,onEdit:l,onDelete:r}){return(0,a.jsx)(o.Zp,{padding:"sm",className:"group",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[(0,a.jsx)("div",{className:"size-8 rounded-lg bg-primary/10 flex items-center justify-center shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"layers"})}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("code",{className:"text-sm font-medium font-mono truncate",children:e.name}),(0,a.jsx)("button",{onClick:t=>{t.stopPropagation(),s(e.name,`combo-${e.id}`)},className:"p-0.5 hover:bg-black/5 dark:hover:bg-white/5 rounded text-text-muted hover:text-primary transition-colors opacity-0 group-hover:opacity-100",title:"Copy combo name",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:t===`combo-${e.id}`?"check":"content_copy"})})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1 mt-0.5 flex-wrap",children:[0===e.models.length?(0,a.jsx)("span",{className:"text-xs text-text-muted italic",children:"No models"}):e.models.slice(0,3).map((e,t)=>(0,a.jsx)("code",{className:"text-[10px] font-mono bg-black/5 dark:bg-white/5 px-1.5 py-0.5 rounded text-text-muted",children:e},t)),e.models.length>3&&(0,a.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",e.models.length-3," more"]})]})]})]}),(0,a.jsxs)("div",{className:"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",children:[(0,a.jsx)("button",{onClick:l,className:"p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded text-text-muted hover:text-primary transition-colors",title:"Edit",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"edit"})}),(0,a.jsx)("button",{onClick:r,className:"p-1.5 hover:bg-red-500/10 rounded text-red-500 transition-colors",title:"Delete",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"delete"})})]})]})})}function c({index:e,model:t,isFirst:s,isLast:o,onEdit:r,onMoveUp:i,onMoveDown:n,onRemove:d}){let[m,x]=(0,l.useState)(!1),[h,p]=(0,l.useState)(t),u=()=>{let e=h.trim();e&&e!==t?r(e):p(t),x(!1)};return(0,a.jsxs)("div",{className:"group flex items-center gap-1.5 px-2 py-1 rounded-md bg-black/[0.02] dark:bg-white/[0.02] hover:bg-black/[0.04] dark:hover:bg-white/[0.04] transition-colors",children:[(0,a.jsx)("span",{className:"text-[10px] font-medium text-text-muted w-3 text-center shrink-0",children:e+1}),m?(0,a.jsx)("input",{autoFocus:!0,value:h,onChange:e=>p(e.target.value),onBlur:u,onKeyDown:e=>{"Enter"===e.key&&u(),"Escape"===e.key&&(p(t),x(!1))},className:"flex-1 min-w-0 px-1.5 py-0.5 text-xs font-mono bg-white dark:bg-black/20 border border-primary/40 rounded outline-none text-text-main"}):(0,a.jsx)("div",{className:"flex-1 min-w-0 px-1.5 py-0.5 text-xs font-mono text-text-main truncate cursor-text hover:bg-black/5 dark:hover:bg-white/5 rounded",onClick:()=>x(!0),title:"Click to edit",children:t}),(0,a.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,a.jsx)("button",{onClick:i,disabled:s,className:`p-0.5 rounded ${s?"text-text-muted/20 cursor-not-allowed":"text-text-muted hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,title:"Move up",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"arrow_upward"})}),(0,a.jsx)("button",{onClick:n,disabled:o,className:`p-0.5 rounded ${o?"text-text-muted/20 cursor-not-allowed":"text-text-muted hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,title:"Move down",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"arrow_downward"})})]}),(0,a.jsx)("button",{onClick:d,className:"p-0.5 hover:bg-red-500/10 rounded text-text-muted hover:text-red-500 transition-all",title:"Remove",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]})}function m({isOpen:e,combo:t,onClose:s,onSave:r,activeProviders:n}){let[d,x]=(0,l.useState)(t?.name||""),[h,p]=(0,l.useState)(t?.models||[]),[u,b]=(0,l.useState)(!1),[j,f]=(0,l.useState)(!1),[v,g]=(0,l.useState)(""),[y,N]=(0,l.useState)({}),k=async()=>{try{let e=await fetch("/api/models/alias");if(!e.ok)return;let t=await e.json();N(t.aliases||{})}catch(e){console.error("Error fetching modal data:",e)}};(0,l.useEffect)(()=>{e&&k()},[e]);let w=e=>e.trim()?i.test(e)?(g(""),!0):(g("Only letters, numbers, -, _ and . allowed"),!1):(g("Name is required"),!1),C=async()=>{w(d)&&(f(!0),await r({name:d.trim(),models:h}),f(!1))},S=!!t;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.aF,{isOpen:e,onClose:s,title:S?"Edit Combo":"Create Combo",children:(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(o.pd,{label:"Combo Name",value:d,onChange:e=>{let t=e.target.value;x(t),t?w(t):g("")},placeholder:"my-combo",error:v}),(0,a.jsx)("p",{className:"text-[10px] text-text-muted mt-0.5",children:"Only letters, numbers, -, _ and . allowed"})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Models"}),0===h.length?(0,a.jsxs)("div",{className:"text-center py-4 border border-dashed border-black/10 dark:border-white/10 rounded-lg bg-black/[0.01] dark:bg-white/[0.01]",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-xl mb-1",children:"layers"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No models added yet"})]}):(0,a.jsx)("div",{className:"flex flex-col gap-1 max-h-[200px] overflow-y-auto",children:h.map((e,t)=>(0,a.jsx)(c,{index:t,model:e,isFirst:0===t,isLast:t===h.length-1,onEdit:e=>{let s=[...h];s[t]=e,p(s)},onMoveUp:()=>(e=>{if(0===e)return;let t=[...h];[t[e-1],t[e]]=[t[e],t[e-1]],p(t)})(t),onMoveDown:()=>(e=>{if(e===h.length-1)return;let t=[...h];[t[e],t[e+1]]=[t[e+1],t[e]],p(t)})(t),onRemove:()=>{p(h.filter((e,s)=>s!==t))}},t))}),(0,a.jsxs)("button",{onClick:()=>b(!0),className:"w-full mt-2 py-2 border border-dashed border-black/10 dark:border-white/10 rounded-lg text-xs text-text-muted hover:text-primary hover:border-primary/30 transition-colors flex items-center justify-center gap-1",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"add"}),"Add Model"]})]}),(0,a.jsxs)("div",{className:"flex gap-2 pt-1",children:[(0,a.jsx)(o.$n,{onClick:s,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,a.jsx)(o.$n,{onClick:C,fullWidth:!0,size:"sm",disabled:!d.trim()||!!v||j,children:j?"Saving...":S?"Save":"Create"})]})]})}),(0,a.jsx)(o.rq,{isOpen:u,onClose:()=>b(!1),onSelect:e=>{h.includes(e.value)||p([...h,e.value])},activeProviders:n,modelAliases:y,title:"Add Model to Combo"})]})}}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,8441,3794,7358],()=>e(e.s=22888)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{44493:(e,t,l)=>{"use strict";l.d(t,{default:()=>o});var s=l(95155),n=l(12115),r=l(35497),a=l(90620);let c={LOG:"text-green-400",INFO:"text-blue-400",WARN:"text-yellow-400",ERROR:"text-red-400",DEBUG:"text-purple-400"};function o(){let[e,t]=(0,n.useState)([]),[l,o]=(0,n.useState)(!1),i=(0,n.useRef)(null),u=async()=>{try{await fetch("/api/translator/console-logs",{method:"DELETE"})}catch(e){console.error("Failed to clear console logs:",e)}};return(0,n.useEffect)(()=>{let e=new EventSource("/api/translator/console-logs/stream");return e.onopen=()=>o(!0),e.onmessage=e=>{let l=JSON.parse(e.data);"init"===l.type?t(l.logs.slice(-a.UY.maxLines)):"line"===l.type?t(e=>{let t=[...e,l.line];return t.length>a.UY.maxLines?t.slice(-a.UY.maxLines):t}):"clear"===l.type&&t([])},e.onerror=()=>o(!1),()=>e.close()},[]),(0,n.useEffect)(()=>{i.current&&(i.current.scrollTop=i.current.scrollHeight)},[e]),(0,s.jsx)("div",{className:"",children:(0,s.jsxs)(r.Zp,{children:[(0,s.jsx)("div",{className:"flex items-center justify-end px-4 pt-3 pb-2",children:(0,s.jsx)(r.$n,{size:"sm",variant:"outline",icon:"delete",onClick:u,children:"Clear"})}),(0,s.jsx)("div",{ref:i,className:"bg-black rounded-b-lg p-4 text-xs font-mono h-[calc(100vh-220px)] overflow-y-auto",children:0===e.length?(0,s.jsx)("span",{className:"text-text-muted",children:"No console logs yet."}):(0,s.jsx)("div",{className:"space-y-0.5",children:e.map((e,t)=>{let l,n;return(0,s.jsx)("div",{children:(n=c[(l=e.match(/\[(\w+)\]/g))?l[1]?.replace(/\[|\]/g,""):null]||"text-green-400",(0,s.jsx)("span",{className:n,children:e}))},t)})})})]})})}},91135:(e,t,l)=>{Promise.resolve().then(l.bind(l,44493))}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,8441,3794,7358],()=>e(e.s=91135)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099],{},_=>{_.O(0,[2574,3862,5772,123,2652,5497,4007,8441,3794,7358],()=>_(_.s=14007)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6607],{4403:(e,s,t)=>{Promise.resolve().then(t.bind(t,23879))},23879:(e,s,t)=>{"use strict";t.d(s,{default:()=>d});var a=t(95155),n=t(12115),i=t(3534),l=t(28777),c=t(52679),o=t(97397);function d(){let[e,s]=(0,n.useState)([]),[t,d]=(0,n.useState)([]),[r,u]=(0,n.useState)({}),[h,f]=(0,n.useState)(!1),[p,v]=(0,n.useState)(null),[w,g]=(0,n.useState)({running:!1,certExists:!1,dnsStatus:{},hasCachedPassword:!1});(0,n.useEffect)(()=>{y(),S(),k(),x()},[]);let y=async()=>{try{let e=await fetch("/api/providers");if(e.ok){let t=await e.json();s(t.connections||[])}}catch{}},S=async()=>{try{let e=await fetch("/api/keys");if(e.ok){let s=await e.json();d(s.keys||[])}}catch{}},k=async()=>{try{let e=await fetch("/api/models/alias");if(e.ok){let s=await e.json();u(s.aliases||{})}}catch{}},x=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let s=await e.json();f(s.cloudEnabled||!1)}}catch{}},j=()=>e.filter(e=>!1!==e.isActive),E=Object.entries(i.wn);return(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsx)(o.tA,{apiKeys:t,cloudEnabled:h,onStatusChange:g}),(0,a.jsx)("div",{className:"flex flex-col gap-2",children:E.map(([e,s])=>(0,a.jsx)(o.kn,{tool:s,isExpanded:p===e,onToggle:()=>v(p===e?null:e),serverRunning:w.running,dnsActive:w.dnsStatus?.[e]||!1,hasCachedPassword:w.hasCachedPassword||!1,apiKeys:t,activeProviders:j(),hasActiveProviders:j().some(e=>(0,l.KC)(e.provider).length>0||(0,c.mq)(e.provider)||(0,c.gb)(e.provider)),modelAliases:r,cloudEnabled:h,onDnsChange:e=>g(s=>({...s,dnsStatus:e.dnsStatus??s.dnsStatus}))},e))})]})}}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,9242,8441,3794,7358],()=>e(e.s=4403)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6337],{},_=>{_.O(0,[2574,3862,5772,123,2652,5497,4007,8441,3794,7358],()=>_(_.s=14007)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3471],{64561:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>d});var a=s(95155),r=s(12115),o=s(35497),n=s(1620),l=s(31474),i=s(90620);function d(){let{theme:e,setTheme:t,isDark:s}=(0,n.D)(),[d,c]=(0,r.useState)({fallbackStrategy:"fill-first"}),[x,m]=(0,r.useState)(!0),[p,u]=(0,r.useState)({current:"",new:"",confirm:""}),[h,b]=(0,r.useState)({type:"",message:""}),[y,g]=(0,r.useState)(!1),[f,j]=(0,r.useState)(!1),[N,v]=(0,r.useState)({type:"",message:""}),w=(0,r.useRef)(null),[P,k]=(0,r.useState)({outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:""}),[C,S]=(0,r.useState)({type:"",message:""}),[E,O]=(0,r.useState)(!1),[R,L]=(0,r.useState)(!1);(0,r.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{c(e),k({outboundProxyEnabled:e?.outboundProxyEnabled===!0,outboundProxyUrl:e?.outboundProxyUrl||"",outboundNoProxy:e?.outboundNoProxy||""}),m(!1)}).catch(e=>{console.error("Failed to fetch settings:",e),m(!1)})},[]);let T=async e=>{if(e.preventDefault(),!0===d.outboundProxyEnabled){O(!0),S({type:"",message:""});try{let e=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({outboundProxyUrl:P.outboundProxyUrl,outboundNoProxy:P.outboundNoProxy})}),t=await e.json();e.ok?(c(e=>({...e,...t})),S({type:"success",message:"Proxy settings applied"})):S({type:"error",message:t.error||"Failed to update proxy settings"})}catch(e){S({type:"error",message:"An error occurred"})}finally{O(!1)}}},F=async()=>{if(!0!==d.outboundProxyEnabled)return;let e=(P.outboundProxyUrl||"").trim();if(!e)return void S({type:"error",message:"Please enter a Proxy URL to test"});L(!0),S({type:"",message:""});try{let t=await fetch("/api/settings/proxy-test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyUrl:e})}),s=await t.json();t.ok&&s?.ok?S({type:"success",message:`Proxy test OK (${s.status}) in ${s.elapsedMs}ms`}):S({type:"error",message:s?.error||"Proxy test failed"})}catch(e){S({type:"error",message:"An error occurred"})}finally{L(!1)}},U=async e=>{O(!0),S({type:"",message:""});try{let t=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({outboundProxyEnabled:e})}),s=await t.json();t.ok?(c(e=>({...e,...s})),k(e=>({...e,outboundProxyEnabled:s?.outboundProxyEnabled===!0})),S({type:"success",message:e?"Proxy enabled":"Proxy disabled"})):S({type:"error",message:s.error||"Failed to update proxy settings"})}catch(e){S({type:"error",message:"An error occurred"})}finally{O(!1)}},A=async e=>{if(e.preventDefault(),p.new!==p.confirm)return void b({type:"error",message:"Passwords do not match"});g(!0),b({type:"",message:""});try{let e=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPassword:p.current,newPassword:p.new})}),t=await e.json();e.ok?(b({type:"success",message:"Password updated successfully"}),u({current:"",new:"",confirm:""})):b({type:"error",message:t.error||"Failed to update password"})}catch(e){b({type:"error",message:"An error occurred"})}finally{g(!1)}},q=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({fallbackStrategy:e})})).ok&&c(t=>({...t,fallbackStrategy:e}))}catch(e){console.error("Failed to update settings:",e)}},$=async e=>{let t=parseInt(e);if(!isNaN(t)&&!(t<1))try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({stickyRoundRobinLimit:t})})).ok&&c(e=>({...e,stickyRoundRobinLimit:t}))}catch(e){console.error("Failed to update sticky limit:",e)}},J=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireLogin:e})})).ok&&c(t=>({...t,requireLogin:e}))}catch(e){console.error("Failed to update require login:",e)}},D=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({observabilityEnabled:e})})).ok&&c(t=>({...t,observabilityEnabled:e}))}catch(e){console.error("Failed to update observabilityEnabled:",e)}},_=async()=>{try{let e=await fetch("/api/settings");if(!e.ok)return;let t=await e.json();c(t)}catch(e){console.error("Failed to reload settings:",e)}},H=async()=>{j(!0),v({type:"",message:""});try{let e=await fetch("/api/settings/database");if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error||"Failed to export database")}let t=await e.json(),s=JSON.stringify(t,null,2),a=new Blob([s],{type:"application/json"}),r=URL.createObjectURL(a),o=document.createElement("a"),n=new Date().toISOString().replace(/[.:]/g,"-");o.href=r,o.download=`vforclaude-backup-${n}.json`,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(r),v({type:"success",message:"Database backup downloaded"})}catch(e){v({type:"error",message:e.message||"Failed to export database"})}finally{j(!1)}},M=async e=>{let t=e.target.files?.[0];if(t){j(!0),v({type:"",message:""});try{let e=await t.text(),s=JSON.parse(e),a=await fetch("/api/settings/database",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}),r=await a.json().catch(()=>({}));if(!a.ok)throw Error(r.error||"Failed to import database");await _(),v({type:"success",message:"Database imported successfully"})}catch(e){v({type:"error",message:e.message||"Invalid backup file"})}finally{w.current&&(w.current.value=""),j(!1)}}},Z=!0===d.observabilityEnabled;return(0,a.jsx)("div",{className:"max-w-2xl mx-auto",children:(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsx)("div",{className:"size-12 rounded-lg bg-green-500/10 text-green-500 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-2xl",children:"computer"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold",children:"Local Mode"}),(0,a.jsx)("p",{className:"text-text-muted",children:"Running on your machine"})]})]}),(0,a.jsx)("div",{className:"inline-flex p-1 rounded-lg bg-black/5 dark:bg-white/5",children:["light","dark","system"].map(s=>(0,a.jsxs)("button",{type:"button",onClick:()=>t(s),className:(0,l.cn)("flex items-center gap-1.5 px-3 py-1.5 rounded-md font-medium transition-all",e===s?"bg-white dark:bg-white/10 text-text-main shadow-sm":"text-text-muted hover:text-text-main"),children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"light"===s?"light_mode":"dark"===s?"dark_mode":"contrast"}),(0,a.jsx)("span",{className:"capitalize text-sm",children:s})]},s))})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 pt-4 border-t border-border",children:[(0,a.jsx)("div",{className:"flex items-center justify-between p-3 rounded-lg bg-bg border border-border",children:(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Database Location"}),(0,a.jsx)("p",{className:"text-sm text-text-muted font-mono",children:"~/.vforclaude/db.json"})]})}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(o.$n,{variant:"secondary",icon:"download",onClick:H,loading:f,children:"Download Backup"}),(0,a.jsx)(o.$n,{variant:"outline",icon:"upload",onClick:()=>w.current?.click(),disabled:f,children:"Import Backup"}),(0,a.jsx)("input",{ref:w,type:"file",accept:"application/json,.json",className:"hidden",onChange:M})]}),N.message&&(0,a.jsx)("p",{className:`text-sm ${"error"===N.type?"text-red-500":"text-green-600 dark:text-green-400"}`,children:N.message})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"p-2 rounded-lg bg-primary/10 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"shield"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"Security"})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Require login"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"When ON, dashboard requires password. When OFF, access without login."})]}),(0,a.jsx)(o.lM,{checked:!0===d.requireLogin,onChange:()=>J(!d.requireLogin),disabled:x})]}),!0===d.requireLogin&&(0,a.jsxs)("form",{onSubmit:A,className:"flex flex-col gap-4 pt-4 border-t border-border/50",children:[d.hasPassword&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium",children:"Current Password"}),(0,a.jsx)(o.pd,{type:"password",placeholder:"Enter current password",value:p.current,onChange:e=>u({...p,current:e.target.value}),required:!0})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium",children:"New Password"}),(0,a.jsx)(o.pd,{type:"password",placeholder:"Enter new password",value:p.new,onChange:e=>u({...p,new:e.target.value}),required:!0})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"text-sm font-medium",children:"Confirm New Password"}),(0,a.jsx)(o.pd,{type:"password",placeholder:"Confirm new password",value:p.confirm,onChange:e=>u({...p,confirm:e.target.value}),required:!0})]})]}),h.message&&(0,a.jsx)("p",{className:`text-sm ${"error"===h.type?"text-red-500":"text-green-500"}`,children:h.message}),(0,a.jsx)("div",{className:"pt-2",children:(0,a.jsx)(o.$n,{type:"submit",variant:"primary",loading:y,children:d.hasPassword?"Update Password":"Set Password"})})]})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"p-2 rounded-lg bg-blue-500/10 text-blue-500",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"route"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"Routing Strategy"})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Round Robin"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Cycle through accounts to distribute load"})]}),(0,a.jsx)(o.lM,{checked:"round-robin"===d.fallbackStrategy,onChange:()=>q("round-robin"===d.fallbackStrategy?"fill-first":"round-robin"),disabled:x})]}),"round-robin"===d.fallbackStrategy&&(0,a.jsxs)("div",{className:"flex items-center justify-between pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Sticky Limit"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Calls per account before switching"})]}),(0,a.jsx)(o.pd,{type:"number",min:"1",max:"10",value:d.stickyRoundRobinLimit||3,onChange:e=>$(e.target.value),disabled:x,className:"w-20 text-center"})]}),(0,a.jsx)("p",{className:"text-xs text-text-muted italic pt-2 border-t border-border/50",children:"round-robin"===d.fallbackStrategy?`Currently distributing requests across all available accounts with ${d.stickyRoundRobinLimit||3} calls per account.`:"Currently using accounts in priority order (Fill First)."})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"p-2 rounded-lg bg-purple-500/10 text-purple-500",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"wifi"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"Network"})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Outbound Proxy"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Enable proxy for OAuth + provider outbound requests."})]}),(0,a.jsx)(o.lM,{checked:!0===d.outboundProxyEnabled,onChange:()=>U(!0!==d.outboundProxyEnabled),disabled:x||E})]}),!0===d.outboundProxyEnabled&&(0,a.jsxs)("form",{onSubmit:T,className:"flex flex-col gap-4 pt-2 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)("label",{className:"font-medium",children:"Proxy URL"}),(0,a.jsx)(o.pd,{placeholder:"http://127.0.0.1:7897",value:P.outboundProxyUrl,onChange:e=>k(t=>({...t,outboundProxyUrl:e.target.value})),disabled:x||E}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Leave empty to inherit existing env proxy (if any)."})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 pt-2 border-t border-border/50",children:[(0,a.jsx)("label",{className:"font-medium",children:"No Proxy"}),(0,a.jsx)(o.pd,{placeholder:"localhost,127.0.0.1",value:P.outboundNoProxy,onChange:e=>k(t=>({...t,outboundNoProxy:e.target.value})),disabled:x||E}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Comma-separated hostnames/domains to bypass the proxy."})]}),(0,a.jsxs)("div",{className:"pt-2 border-t border-border/50 flex items-center gap-2",children:[(0,a.jsx)(o.$n,{type:"button",variant:"secondary",loading:R,disabled:x||E,onClick:F,children:"Test proxy URL"}),(0,a.jsx)(o.$n,{type:"submit",variant:"primary",loading:E,children:"Apply"})]})]}),C.message&&(0,a.jsx)("p",{className:`text-sm ${"error"===C.type?"text-red-500":"text-green-500"} pt-2 border-t border-border/50`,children:C.message})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"p-2 rounded-lg bg-orange-500/10 text-orange-500",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"monitoring"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"Observability"})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Enable Observability"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Record request details for inspection in the logs view"})]}),(0,a.jsx)(o.lM,{checked:Z,onChange:D,disabled:x})]})]}),(0,a.jsxs)("div",{className:"text-center text-sm text-text-muted py-4",children:[(0,a.jsxs)("p",{children:[i.vQ.name," v",i.vQ.version]}),(0,a.jsx)("p",{className:"mt-1",children:"Local Mode - All data stored on your machine"})]})]})})}},69492:(e,t,s)=>{Promise.resolve().then(s.bind(s,64561))}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,8441,3794,7358],()=>e(e.s=69492)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2134],{31043:(e,t,i)=>{Promise.resolve().then(i.bind(i,97162))},97162:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>h});var s=i(95155),a=i(12115),r=i(14051),l=i.n(r),o=i(73321),n=i(98500),d=i.n(n),c=i(5772),p=i(35497),m=i(52679),x=i(28777),u=i(11059);function h(){let e=(0,o.useParams)(),t=(0,o.useRouter)(),i=e.id,[r,l]=(0,a.useState)([]),[n,h]=(0,a.useState)(!0),[g,b]=(0,a.useState)(null),[S,A]=(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),[z,J]=(0,a.useState)({}),[F,W]=(0,a.useState)(!1),[V,B]=(0,a.useState)({}),[Z,G]=(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),[el,eo]=(0,a.useState)(null),[en,ed]=(0,a.useState)(""),{copied:ec,copy:ep}=(0,u.C)(),em=g?{id:g.id,name:g.name||("anthropic-compatible"===g.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===g.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===g.type?"AC":"OC",apiType:g.apiType,baseUrl:g.baseUrl,type:g.type}:m.zN[i]||m.fg[i]||m.IS[i],ex=!!m.zN[i]||!!m.IS[i],eu=(0,x.KC)(i),eh=(0,m.wG)(i),ey=(0,m.mq)(i),ef=(0,m.gb)(i),eg=ey||ef,ev=eg?i:eh,eb=eg?g?.prefix||i:eh,ej=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&J(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]),eN=(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(),n=await s.json(),d=a.ok?await a.json():{};if(e.ok){let e=(r.connections||[]).filter(e=>e.provider===i);l(e)}s.ok&&A(n.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&&eg)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}b(e)}}catch(e){console.log("Error fetching connections:",e)}finally{h(!1)}},[i,eg]),ek=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&&(b(s.node),await eN(),q(!1))}catch(e){console.log("Error updating provider node:",e)}},eC=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 l={...a};0===Object.keys(r).length?delete l[i]:l[i]=r,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:l})})}catch(e){console.log("Error saving provider strategy:",e)}};(0,a.useEffect)(()=>{eN(),ej()},[eN,ej]);let ew=async(e,t,i=eh)=>{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 ej();else{let t=await e.json();alert(t.error||"Failed to set alias")}}catch(e){console.log("Error setting alias:",e)}},eS=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await ej()}catch(e){console.log("Error deleting alias:",e)}},eA=async e=>{if(confirm("Delete this connection?"))try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&l(r.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}},e$=()=>{eN(),P(!1)},eP=async e=>{try{(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:i,...e})})).ok&&(await eN(),R(!1))}catch(e){console.log("Error saving connection:",e)}},eT=async e=>{try{(await fetch(`/api/providers/${M.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await eN(),_(!1))}catch(e){console.log("Error updating connection:",e)}},eO=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&l(i=>i.map(i=>i.id===e?{...i,isActive:t}:i))}catch(e){console.log("Error updating connection status:",e)}},eE=async(e,t)=>{let i=[...r];[i[e],i[t]]=[i[t],i[e]],l(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 eN()}},eR=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 eI=(()=>{if(0===eR.length)return"";let e=new Set(eR.map(e=>e.providerSpecificData?.proxyPoolId||"__none__"));if(1===e.size){let t=[...e][0];if("__none__"===t)return"All selected currently unbound";let i=S.find(e=>e.id===t);return`All selected currently bound to ${i?.name||t}`}return"Selected connections have mixed proxy bindings"})(),e_=()=>{ea||K(!1)},eD=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 eN(),et([]),es("__none__"),K(!1)}catch(e){console.log("Error applying bulk proxy pool:",e)}finally{er(!1)}},eq=(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)(j,{connection:e,proxyPools:S,isOAuth:ex,isFirst:0===t,isLast:t===r.length-1,onMoveUp:()=>eE(t,t-1),onMoveDown:()=>eE(t,t+1),onToggleActive:t=>eO(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&&l(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),_(!0)},onDelete:()=>eA(e.id)})})},e.id))}),eU=[{value:"__none__",label:"None"},...S.map(e=>({value:e.id,label:e.name}))],eK=0===ee.length?"Select one or more connections, then click Proxy Action.":eI,eM=ee.length>0&&!ea,eL=(0,s.jsx)(p.aF,{isOpen:U,onClose:e_,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:eU,placeholder:"None"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:eK}),(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:eD,fullWidth:!0,disabled:!eM,children:ea?"Applying...":"Apply"}),(0,s.jsx)(p.$n,{onClick:e_,variant:"ghost",fullWidth:!0,disabled:ea,children:"Cancel"})]})]})}),ez=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:`${ev}/${e}`})}),i=await t.json();B(t=>({...t,[e]:i.ok?"ok":"error"})),G(i.ok?"":i.error||"Model not reachable")}catch{B(t=>({...t,[e]:"error"})),G("Network error")}finally{H(null)}}};return n?(0,s.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,s.jsx)(p.Qv,{}),(0,s.jsx)(p.Qv,{})]}):em?(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:`${em.color}15`},children:F?(0,s.jsx)("span",{className:"text-sm font-bold",style:{color:em.color},children:em.textIcon||em.id.slice(0,2).toUpperCase()}):(0,s.jsx)(c.default,{src:ey&&em.apiType?"responses"===em.apiType?"/providers/oai-r.png":"/providers/oai-cc.png":ef?"/providers/anthropic-m.png":`/providers/${em.id}.png`,alt:em.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:em.name}),(0,s.jsxs)("p",{className:"text-text-muted",children:[r.length," connection",1===r.length?"":"s"]})]})]})]}),eg&&g&&(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:ef?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,s.jsxs)("p",{className:"text-sm text-text-muted",children:[ef?"Messages API":"responses"===g.apiType?"Responses API":"Chat Completions"," \xb7 ",(g.baseUrl||"").replace(/\/$/,""),"/",ef?"messages":"responses"===g.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 ${ef?"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"===el,onChange:e=>{let t=e?"round-robin":null,i=e?en||"1":en;e&&!en&&ed("1"),eo(t),eC(t,i)}}),"round-robin"===el&&(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:en,onChange:e=>{var t;ed(t=e.target.value),eC("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:ex?"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"}),!eg&&(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:()=>ex?P(!0):R(!0),children:"iflow"===i?"OAuth":"Add Connection"})]})]}):(0,s.jsxs)(s.Fragment,{children:[eq,!eg&&(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:()=>ex?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:em.passthroughModels?"Model Aliases":"Available Models"})}),!!Z&&(0,s.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:Z}),(()=>{if(eg)return(0,s.jsx)(v,{providerStorageAlias:ev,providerDisplayAlias:eb,modelAliases:z,copied:ec,onCopy:ep,onSetAlias:ew,onDeleteAlias:eS,connections:r,isAnthropic:ef});if(em.passthroughModels)return(0,s.jsx)(f,{providerAlias:eh,modelAliases:z,copied:ec,onCopy:ep,onSetAlias:ew,onDeleteAlias:eS});let e=Object.entries(z).filter(([e,t])=>{let i=`${ev}/`;if(!t.startsWith(i))return!1;let s=t.slice(i.length);return!eu.some(e=>e.id===s)&&e===s}).map(([e,t])=>({id:t.slice(`${ev}/`.length),alias:e,fullModel:t}));return(0,s.jsxs)("div",{className:"flex flex-wrap gap-3",children:[eu.map(e=>{let t=`${ev}/${e.id}`,a=`${i}/${e.id}`,l=Object.entries(z).find(([,e])=>e===t||e===a)?.[0];return(0,s.jsx)(y,{model:e,fullModel:`${eb}/${e.id}`,alias:l,copied:ec,onCopy:ep,onSetAlias:t=>ew(e.id,t,ev),onDeleteAlias:()=>eS(l),testStatus:V[e.id],onTest:r.length>0?()=>ez(e.id):void 0,isTesting:Q===e.id},e.id)}),e.map(e=>(0,s.jsx)(y,{model:{id:e.id},fullModel:`${eb}/${e.id}`,alias:e.alias,copied:ec,onCopy:ep,onSetAlias:()=>{},onDeleteAlias:()=>eS(e.alias),testStatus:V[e.id],onTest:r.length>0?()=>ez(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"]})]})})()]}),eL,"kiro"===i?(0,s.jsx)(p.Mh,{isOpen:$,providerInfo:em,onSuccess:e$,onClose:()=>P(!1)}):"cursor"===i?(0,s.jsx)(p.G9,{isOpen:$,onSuccess:e$,onClose:()=>P(!1)}):(0,s.jsx)(p.LF,{isOpen:$,provider:i,providerInfo:em,onSuccess:e$,onClose:()=>P(!1)}),"iflow"===i&&(0,s.jsx)(p.vE,{isOpen:T,onSuccess:()=>{eN(),O(!1)},onClose:()=>O(!1)}),(0,s.jsx)(N,{isOpen:E,provider:i,providerName:em.name,isCompatible:eg,isAnthropic:ef,proxyPools:S,onSave:eP,onClose:()=>R(!1)}),(0,s.jsx)(k,{isOpen:I,connection:M,proxyPools:S,onSave:eT,onClose:()=>_(!1)}),eg&&(0,s.jsx)(C,{isOpen:D,node:g,onSave:ek,onClose:()=>q(!1),isAnthropic:ef}),!eg&&!em?.passthroughModels&&(0,s.jsx)(w,{isOpen:X,providerAlias:ev,providerDisplayAlias:eb,onSave:async e=>{await ew(e,e,ev),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 y({model:e,fullModel:t,alias:i,copied:a,onCopy:r,testStatus:l,isCustom:o,onDeleteAlias:n,onTest:d,isTesting:c}){let p="ok"===l?"#22c55e":"error"===l?"#ef4444":void 0;return(0,s.jsx)("div",{className:`group px-3 py-2 rounded-lg border ${"ok"===l?"border-green-500/40":"error"===l?"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"===l?"check_circle":"error"===l?"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.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"}`,title:"Test model",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)("button",{onClick:()=>r(t,`model-${e.id}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",title:"Copy model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:a===`model-${e.id}`?"check":"content_copy"})}),o&&(0,s.jsx)("button",{onClick:n,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 f({providerAlias:e,modelAliases:t,copied:i,onCopy:r,onSetAlias:l,onDeleteAlias:o}){let[n,d]=(0,a.useState)(""),[c,m]=(0,a.useState)(!1),x=Object.entries(t).filter(([,t])=>t.startsWith(`${e}/`)).map(([t,i])=>({modelId:i.replace(`${e}/`,""),fullModel:i,alias:t})),u=async()=>{let e;if(!n.trim()||c)return;let i=n.trim(),s=(e=i.split("/"))[e.length-1];if(t[s])return void alert(`Alias "${s}" already exists. Please use a different model or edit existing alias.`);m(!0);try{await l(i,s),d("")}catch(e){console.log("Error adding model:",e)}finally{m(!1)}};return(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"OpenRouter supports any model. Add models and create aliases for quick access."}),(0,s.jsxs)("div",{className:"flex items-end gap-2",children:[(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsx)("label",{htmlFor:"new-model-input",className:"text-xs text-text-muted mb-1 block",children:"Model ID (from OpenRouter)"}),(0,s.jsx)("input",{id:"new-model-input",type:"text",value:n,onChange:e=>d(e.target.value),onKeyDown:e=>"Enter"===e.key&&u(),placeholder:"anthropic/claude-3-opus",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:u,disabled:!n.trim()||c,children:c?"Adding...":"Add"})]}),x.length>0&&(0,s.jsx)("div",{className:"flex flex-col gap-3",children:x.map(({modelId:e,fullModel:t,alias:a})=>(0,s.jsx)(g,{modelId:e,fullModel:t,copied:i,onCopy:r,onDeleteAlias:()=>o(a)},t))})]})}function g({modelId:e,fullModel:t,copied:i,onCopy:a,onDeleteAlias:r,onTest:l,testStatus:o,isTesting:n}){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.jsx)("button",{onClick:()=>a(t,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",title:"Copy model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:i===`model-${e}`?"check":"content_copy"})}),l&&(0,s.jsx)("button",{onClick:l,disabled:n,className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-colors",title:"Test model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:n?{animation:"spin 1s linear infinite"}:void 0,children:n?"progress_activity":"science"})})]})]}),(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 v({providerStorageAlias:e,providerDisplayAlias:t,modelAliases:i,copied:r,onCopy:l,onSetAlias:o,onDeleteAlias:n,connections:d,isAnthropic:c}){let[m,x]=(0,a.useState)(""),[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(!1),[b,j]=(0,a.useState)(null),[N,k]=(0,a.useState)({}),C=async t=>{if(!b){j(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();k(e=>({...e,[t]:s.ok?"ok":"error"}))}catch{k(e=>({...e,[t]:"error"}))}finally{j(null)}}},w=Object.entries(i).filter(([,t])=>t.startsWith(`${e}/`)).map(([t,i])=>({modelId:i.replace(`${e}/`,""),fullModel:i,alias:t})),S=e=>{let s,a=(s=e.split("/"))[s.length-1];if(!i[a])return a;let r=`${t}-${a}`;return i[r]?null:r},A=async()=>{if(!m.trim()||u)return;let t=m.trim(),i=S(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),x("")}catch(e){console.log("Error adding model:",e)}finally{h(!1)}},$=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=S(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)}}},P=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:m,onChange:e=>x(e.target.value),onKeyDown:e=>"Enter"===e.key&&A(),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:A,disabled:!m.trim()||u,children:u?"Adding...":"Add"}),(0,s.jsx)(p.$n,{size:"sm",variant:"secondary",icon:"download",onClick:$,disabled:!P||y,children:y?"Importing...":"Import from /models"})]}),!P&&(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)(g,{modelId:e,fullModel:`${t}/${e}`,copied:r,onCopy:l,onDeleteAlias:()=>n(a),onTest:d.length>0?()=>C(e):void 0,testStatus:N[e],isTesting:b===e},i))})]})}function b({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 j({connection:e,proxyPools:t,isOAuth:i,isFirst:r,isLast:l,onMoveUp:o,onMoveDown:n,onToggleActive:d,onUpdateProxy:c,onEdit:m,onDelete:x}){let[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(!1),g=(0,a.useRef)(null),v=new Map((t||[]).map(e=>[e.id,e])),N=e.providerSpecificData?.proxyPoolId||null,k=N?v.get(N):null,C=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,w=!!N||C,S=k?`Pool: ${k.name}`:N?`Pool: ${N} (inactive/missing)`:C?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",A="";if(k?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=k?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);A=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{A=t}}let $=k?.noProxy||e.providerSpecificData?.connectionNoProxy||"",P="default";k?.isActive===!0?P="success":(N||C)&&(P="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 T=async e=>{f(!0);try{await c("__none__"===e?null:e)}finally{f(!1),h(!1)}},O=i?e.name||e.email||e.displayName||"OAuth Account":e.name,[E,R]=(0,a.useState)(!1),I=Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>!!e).sort()[0]||null;(0,a.useEffect)(()=>{let t=()=>{R(!!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=I?setInterval(t,1e3):null;return()=>{i&&clearInterval(i)}},[I]);let _="unavailable"!==e.testStatus||E?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:n,disabled:l,className:`p-0.5 rounded ${l?"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:O}),(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:P,size:"sm",children:"Proxy"}),E&&!1!==e.isActive&&(0,s.jsx)(b,{until:I}),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:S,children:S}),A&&(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:A}),$&&(0,s.jsxs)("span",{className:"text-[11px] text-text-muted truncate max-w-[320px]",title:$,children:["no_proxy: ",$]})]})]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",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:()=>T("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!N?"text-primary font-medium":"text-text-main"}`,children:"None"}),(t||[]).map(e=>(0,s.jsx)("button",{onClick:()=>T(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${N===e.id?"text-primary font-medium":"text-text-main"}`,children:e.name},e.id))]})]}),(0,s.jsxs)("button",{onClick:m,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:x,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 N({isOpen:e,provider:t,providerName:i,isCompatible:r,isAnthropic:l,proxyPools:o,onSave:n,onClose:d}){let c="__none__",[m,x]=(0,a.useState)({name:"",apiKey:"",priority:1,proxyPoolId:c}),[u,h]=(0,a.useState)(!1),[y,f]=(0,a.useState)(null),[g,v]=(0,a.useState)(!1),b=async()=>{h(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:m.apiKey})}),i=await e.json();f(i.valid?"success":"failed")}catch{f("failed")}finally{h(!1)}},j=async()=>{if(t&&m.apiKey){v(!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:m.apiKey})});e=!!(await i.json()).valid,f(e?"success":"failed")}catch{f("failed")}finally{h(!1)}await n({name:m.name,apiKey:m.apiKey,priority:m.priority,proxyPoolId:m.proxyPoolId===c?null:m.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:void 0})}finally{v(!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:m.name,onChange:e=>x({...m,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:m.apiKey,onChange:e=>x({...m,apiKey:e.target.value}),className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:b,disabled:!m.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:l?`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:m.priority,onChange:e=>x({...m,priority:Number.parseInt(e.target.value)||1})}),(0,s.jsx)(p.l6,{label:"Proxy Pool",value:m.proxyPoolId,onChange:e=>x({...m,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:!m.name||!m.apiKey||g,children:g?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:d,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function k({isOpen:e,connection:t,proxyPools:i,onSave:r,onClose:l}){let[o,n]=(0,a.useState)({name:"",priority:1,apiKey:""}),[d,c]=(0,a.useState)(!1),[x,u]=(0,a.useState)(null),[h,y]=(0,a.useState)(!1),[f,g]=(0,a.useState)(null),[v,b]=(0,a.useState)(!1);(0,a.useEffect)(()=>{t&&(n({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)}}},C=async()=>{b(!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{b(!1)}};if(!t)return null;let w="oauth"===t.authType,S=(0,m.mq)(t.provider)||(0,m.gb)(t.provider);return(0,s.jsx)(p.aF,{isOpen:e,title:"Edit Connection",onClose:l,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(p.pd,{label:"Name",value:o.name,onChange:e=>n({...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=>n({...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=>n({...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||v,variant:"secondary",children:h?"Checking...":"Check"})})]}),f&&(0,s.jsx)(p.Ex,{variant:"success"===f?"success":"error",children:"success"===f?"Valid":"Invalid"})]}),!S&&(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"}),x&&(0,s.jsx)(p.Ex,{variant:"success"===x?"success":"error",children:"success"===x?"Valid":"Failed"})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(p.$n,{onClick:C,fullWidth:!0,disabled:v,children:v?"Saving...":"Save"}),(0,s.jsx)(p.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}function C({isOpen:e,node:t,onSave:i,onClose:r,isAnthropic:l}){let[o,n]=(0,a.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[d,c]=(0,a.useState)(!1),[m,x]=(0,a.useState)(""),[u,h]=(0,a.useState)(""),[y,f]=(0,a.useState)(!1),[g,v]=(0,a.useState)(null);(0,a.useEffect)(()=>{t&&n({name:t.name||"",prefix:t.prefix||"",apiType:t.apiType||"chat",baseUrl:t.baseUrl||(l?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[t,l]);let b=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};l||(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:m,type:l?"anthropic-compatible":"openai-compatible",modelId:u.trim()||void 0})}),t=await e.json();v(t.valid?"success":"failed")}catch{v("failed")}finally{f(!1)}};return t?(0,s.jsx)(p.aF,{isOpen:e,title:`Edit ${l?"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=>n({...o,name:e.target.value}),placeholder:`${l?"Anthropic":"OpenAI"} Compatible (Prod)`,hint:"Required. A friendly label for this node."}),(0,s.jsx)(p.pd,{label:"Prefix",value:o.prefix,onChange:e=>n({...o,prefix:e.target.value}),placeholder:l?"ac-prod":"oc-prod",hint:"Required. Used as the provider prefix for model IDs."}),!l&&(0,s.jsx)(p.l6,{label:"API Type",options:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}],value:o.apiType,onChange:e=>n({...o,apiType:e.target.value})}),(0,s.jsx)(p.pd,{label:"Base URL",value:o.baseUrl,onChange:e=>n({...o,baseUrl:e.target.value}),placeholder:l?"https://api.anthropic.com/v1":"https://api.openai.com/v1",hint:`Use the base URL (ending in /v1) for your ${l?"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:m,onChange:e=>x(e.target.value),className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(p.$n,{onClick:j,disabled:!m||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:b,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 w({isOpen:e,providerAlias:t,providerDisplayAlias:i,onSave:r,onClose:l}){let[o,n]=(0,a.useState)(""),[d,c]=(0,a.useState)(null),[m,x]=(0,a.useState)(""),[u,h]=(0,a.useState)(!1);(0,a.useEffect)(()=>{e&&(n(""),c(null),x(""))},[e]);let y=async()=>{if(o.trim()){c("testing"),x("");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"),x(i.error||"")}catch(e){c("error"),x(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:l,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=>{n(e.target.value),c(null),x("")},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:m||"Model not reachable"})]}),(0,s.jsxs)("div",{className:"flex gap-2 pt-1",children:[(0,s.jsx)(p.$n,{onClick:l,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"})]})]})})}y.propTypes={model:l().shape({id:l().string.isRequired}).isRequired,fullModel:l().string.isRequired,alias:l().string,copied:l().string,onCopy:l().func.isRequired,testStatus:l().oneOf(["ok","error"]),isCustom:l().bool,onDeleteAlias:l().func,onTest:l().func,isTesting:l().bool},f.propTypes={providerAlias:l().string.isRequired,modelAliases:l().object.isRequired,copied:l().string,onCopy:l().func.isRequired,onSetAlias:l().func.isRequired,onDeleteAlias:l().func.isRequired},g.propTypes={modelId:l().string.isRequired,fullModel:l().string.isRequired,copied:l().string,onCopy:l().func.isRequired,onDeleteAlias:l().func.isRequired,onTest:l().func,testStatus:l().oneOf(["ok","error"]),isTesting:l().bool},v.propTypes={providerStorageAlias:l().string.isRequired,providerDisplayAlias:l().string.isRequired,modelAliases:l().object.isRequired,copied:l().string,onCopy:l().func.isRequired,onSetAlias:l().func.isRequired,onDeleteAlias:l().func.isRequired,connections:l().arrayOf(l().shape({id:l().string,isActive:l().bool})).isRequired,isAnthropic:l().bool},b.propTypes={until:l().string.isRequired},j.propTypes={connection:l().shape({id:l().string,name:l().string,email:l().string,displayName:l().string,modelLockUntil:l().string,testStatus:l().string,isActive:l().bool,lastError:l().string,priority:l().number,globalPriority:l().number}).isRequired,proxyPools:l().arrayOf(l().shape({id:l().string,name:l().string,proxyUrl:l().string,noProxy:l().string,isActive:l().bool})),isOAuth:l().bool.isRequired,isFirst:l().bool.isRequired,isLast:l().bool.isRequired,onMoveUp:l().func.isRequired,onMoveDown:l().func.isRequired,onToggleActive:l().func.isRequired,onUpdateProxy:l().func,onEdit:l().func.isRequired,onDelete:l().func.isRequired},N.propTypes={isOpen:l().bool.isRequired,provider:l().string,providerName:l().string,isCompatible:l().bool,isAnthropic:l().bool,proxyPools:l().arrayOf(l().shape({id:l().string,name:l().string})),onSave:l().func.isRequired,onClose:l().func.isRequired},k.propTypes={isOpen:l().bool.isRequired,connection:l().shape({id:l().string,name:l().string,email:l().string,priority:l().number,authType:l().string,provider:l().string,providerSpecificData:l().object}),proxyPools:l().arrayOf(l().shape({id:l().string,name:l().string})),onSave:l().func.isRequired,onClose:l().func.isRequired},C.propTypes={isOpen:l().bool.isRequired,node:l().shape({id:l().string,name:l().string,prefix:l().string,apiType:l().string,baseUrl:l().string}),onSave:l().func.isRequired,onClose:l().func.isRequired,isAnthropic:l().bool},w.propTypes={isOpen:l().bool.isRequired,providerAlias:l().string.isRequired,providerDisplayAlias:l().string.isRequired,onSave:l().func.isRequired,onClose:l().func.isRequired}}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,8441,3794,7358],()=>e(e.s=31043)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9089],{15615:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>u});var a=t(95155),s=t(12115),i=t(73321),l=t(98500),d=t.n(l),o=t(35497),n=t(90620);let c=Object.values(n.Q2).map(e=>({value:e.id,label:e.name})),p=Object.values(n.MA).map(e=>({value:e.id,label:e.name}));function u(){let e=(0,i.useRouter)(),[r,t]=(0,s.useState)(!1),[l,u]=(0,s.useState)({provider:"",authMethod:"api_key",apiKey:"",displayName:"",isActive:!0}),[h,m]=(0,s.useState)({}),x=(e,r)=>{u(t=>({...t,[e]:r})),h[e]&&m(r=>({...r,[e]:null}))},b=async r=>{let a;if(r.preventDefault(),a={},l.provider||(a.provider="Please select a provider"),"api_key"!==l.authMethod||l.apiKey||(a.apiKey="API Key is required"),m(a),0===Object.keys(a).length){t(!0);try{let r=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(r.ok)e.push("/dashboard/providers");else{let e=await r.json();m({submit:e.error||"Failed to create provider"})}}catch(e){m({submit:"An error occurred. Please try again."})}finally{t(!1)}}},v=n.Q2[l.provider];return(0,a.jsxs)("div",{className:"max-w-2xl mx-auto",children:[(0,a.jsxs)("div",{className:"mb-8",children:[(0,a.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,a.jsx)("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),(0,a.jsx)("h1",{className:"text-3xl font-semibold tracking-tight",children:"Add New Provider"}),(0,a.jsx)("p",{className:"text-text-muted mt-2",children:"Configure a new AI provider to use with your applications."})]}),(0,a.jsx)(o.Zp,{children:(0,a.jsxs)("form",{onSubmit:b,className:"flex flex-col gap-6",children:[(0,a.jsx)(o.l6,{label:"Provider",options:c,value:l.provider,onChange:e=>x("provider",e.target.value),placeholder:"Select a provider",error:h.provider,required:!0}),v&&(0,a.jsxs)(o.Zp.Section,{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-bg border border-border",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-xl",style:{color:v.color},children:v.icon})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:v.name}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Selected provider"})]})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("label",{className:"text-sm font-medium",children:["Authentication Method ",(0,a.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,a.jsx)("div",{className:"flex gap-3",children:p.map(e=>(0,a.jsxs)("button",{type:"button",onClick:()=>x("authMethod",e.value),className:`flex-1 flex items-center justify-center gap-2 p-4 rounded-lg border transition-all ${l.authMethod===e.value?"border-primary bg-primary/5 text-primary":"border-border hover:border-primary/50"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined",children:"api_key"===e.value?"key":"lock"}),(0,a.jsx)("span",{className:"font-medium",children:e.label})]},e.value))})]}),"api_key"===l.authMethod&&(0,a.jsx)(o.pd,{label:"API Key",type:"password",placeholder:"Enter your API key",value:l.apiKey,onChange:e=>x("apiKey",e.target.value),error:h.apiKey,hint:"Your API key will be encrypted and stored securely.",required:!0}),"oauth2"===l.authMethod&&(0,a.jsxs)(o.Zp.Section,{children:[(0,a.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Connect your account using OAuth2 authentication."}),(0,a.jsx)(o.$n,{type:"button",variant:"secondary",icon:"link",children:"Connect with OAuth2"})]}),(0,a.jsx)(o.pd,{label:"Display Name",placeholder:"e.g., Production API, Dev Environment",value:l.displayName,onChange:e=>x("displayName",e.target.value),hint:"Optional. A friendly name to identify this configuration."}),(0,a.jsx)(o.lM,{checked:l.isActive,onChange:e=>x("isActive",e),label:"Active",description:"Enable this provider for use in your applications"}),h.submit&&(0,a.jsx)("div",{className:"p-4 rounded-lg bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 text-red-600 dark:text-red-400 text-sm",children:h.submit}),(0,a.jsxs)("div",{className:"flex gap-3 pt-4 border-t border-border",children:[(0,a.jsx)(d(),{href:"/dashboard/providers",className:"flex-1",children:(0,a.jsx)(o.$n,{type:"button",variant:"ghost",fullWidth:!0,children:"Cancel"})}),(0,a.jsx)(o.$n,{type:"submit",loading:r,fullWidth:!0,className:"flex-1",children:"Create Provider"})]})]})})]})}},75468:(e,r,t)=>{Promise.resolve().then(t.bind(t,15615))}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,8441,3794,7358],()=>e(e.s=75468)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8460],{52154:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>f});var s=r(95155),l=r(12115),a=r(5772),i=r(14051),n=r.n(i),o=r(35497),d=r(90620),c=r(52679),m=r(98500),u=r.n(m),x=r(65921);let p={available:{icon:"check_circle",color:"#22c55e",label:"Available"},cooldown:{icon:"schedule",color:"#f59e0b",label:"Cooldown"},unavailable:{icon:"error",color:"#ef4444",label:"Unavailable"},unknown:{icon:"help",color:"#6b7280",label:"Unknown"}};function h(){let[e,t]=(0,l.useState)(null),[r,a]=(0,l.useState)(!0),[i,n]=(0,l.useState)(!1),[d,c]=(0,l.useState)(null),m=(0,l.useRef)(null),u=(0,x.i)(),h=(0,l.useCallback)(async()=>{try{let e=await fetch("/api/models/availability");if(e.ok){let r=await e.json();t(r)}}catch{}finally{a(!1)}},[]);(0,l.useEffect)(()=>{h();let e=setInterval(h,3e4);return()=>clearInterval(e)},[h]),(0,l.useEffect)(()=>{let e=e=>{m.current&&!m.current.contains(e.target)&&n(!1)};return i&&document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[i]);let f=async(e,t)=>{c(`${e}:${t}`);try{(await fetch("/api/models/availability",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clearCooldown",provider:e,model:t})})).ok?(u.success(`Cooldown cleared for ${t}`),await h()):u.error("Failed to clear cooldown")}catch{u.error("Failed to clear cooldown")}finally{c(null)}};if(r)return null;let b=e?.models||[],v=0===(e?.unavailableCount||b.filter(e=>"available"!==e.status).length),g={};return b.forEach(e=>{if("available"===e.status)return;let t=e.provider||"unknown";g[t]||(g[t]=[]),g[t].push(e)}),(0,s.jsx)("div",{className:"relative",ref:m,children:i&&(0,s.jsxs)("div",{className:"absolute top-full right-0 mt-2 w-80 bg-surface border border-border rounded-xl shadow-2xl z-50 overflow-hidden",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border bg-bg",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",style:{color:v?"#22c55e":"#f59e0b"},children:v?"verified":"warning"}),(0,s.jsx)("span",{className:"text-sm font-semibold text-text-main",children:"Model Status"})]}),(0,s.jsx)("button",{onClick:h,className:"p-1 rounded-lg hover:bg-surface text-text-muted hover:text-text-main transition-colors",title:"Refresh",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"refresh"})})]}),(0,s.jsx)("div",{className:"px-4 py-3 max-h-60 overflow-y-auto",children:v?(0,s.jsx)("p",{className:"text-sm text-text-muted text-center py-2",children:"All models are responding normally."}):(0,s.jsx)("div",{className:"flex flex-col gap-2.5",children:Object.entries(g).map(([e,t])=>(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-xs font-semibold text-text-main mb-1.5 capitalize",children:e}),(0,s.jsx)("div",{className:"flex flex-col gap-1",children:t.map(e=>{let t=p[e.status]||p.unknown,r=d===`${e.provider}:${e.model}`;return(0,s.jsxs)("div",{className:"flex items-center justify-between px-2.5 py-1.5 rounded-lg bg-surface/30",children:[(0,s.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] shrink-0",style:{color:t.color},children:t.icon}),(0,s.jsx)("span",{className:"font-mono text-xs text-text-main truncate",children:e.model})]}),"cooldown"===e.status&&(0,s.jsx)(o.$n,{size:"sm",variant:"ghost",onClick:()=>f(e.provider,e.model),disabled:r,className:"text-[10px] px-1.5! py-0.5! ml-2",children:r?"...":"Clear"})]},`${e.provider}-${e.model}`)})})]},e))})})]})})}function f(){let[e,t]=(0,l.useState)([]),[r,a]=(0,l.useState)(!0),[i,n]=(0,l.useState)(null),[o,m]=(0,l.useState)(null),u=(0,x.i)();(0,l.useEffect)(()=>{(async()=>{try{let e=await fetch("/api/providers"),r=await e.json();e.ok&&t(r.connections||[])}catch(e){console.log("Error fetching data:",e)}finally{a(!1)}})()},[]);let p=(t,r)=>{let s=e.filter(e=>e.provider===t&&e.authType===r),l=e=>{let t=Object.entries(e).some(([e,t])=>e.startsWith("modelLock_")&&t&&new Date(t).getTime()>Date.now());return"unavailable"!==e.testStatus||t?e.testStatus:"active"},a=s.filter(e=>{let t=l(e);return"active"===t||"success"===t}).length,i=s.filter(e=>{let t=l(e);return"error"===t||"expired"===t||"unavailable"===t}),n=i.length,o=s.length,d=o>0&&s.every(e=>!1===e.isActive),c=i.sort((e,t)=>new Date(t.lastErrorAt||0)-new Date(e.lastErrorAt||0))[0];return{connected:a,error:n,total:o,errorCode:c?function(e){if(!e)return null;let t=e.lastErrorType;if("runtime_error"===t)return"RUNTIME";if("upstream_auth_error"===t||"auth_missing"===t||"token_refresh_failed"===t||"token_expired"===t)return"AUTH";if("upstream_rate_limited"===t)return"429";if("upstream_unavailable"===t)return"5XX";if("network_error"===t)return"NET";let r=Number(e.errorCode);if(Number.isFinite(r)&&r>=400)return String(r);let s=function(e){if(!e)return null;let t=e.match(/\b([45]\d{2})\b/);return t?t[1]:"ERR"}(e.lastError);if("401"===s||"403"===s)return"AUTH";if(s&&"ERR"!==s)return s;let l=(e.lastError||"").toLowerCase();return l.includes("runtime")||l.includes("not runnable")||l.includes("not installed")?"RUNTIME":l.includes("invalid api key")||l.includes("token invalid")||l.includes("revoked")||l.includes("unauthorized")?"AUTH":"ERR"}(c):null,errorTime:c?.lastErrorAt?function(e){if(!e)return"";let t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<1)return"just now";if(t<60)return`${t}m ago`;let r=Math.floor(t/60);if(r<24)return`${r}h ago`;let s=Math.floor(r/24);return`${s}d ago`}(c.lastErrorAt):null,allDisabled:d}},f=async(r,s,l)=>{let a=e.filter(e=>e.provider===r&&e.authType===s);t(e=>e.map(e=>e.provider===r&&e.authType===s?{...e,isActive:l}:e)),await Promise.allSettled(a.map(e=>fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:l})})))},g=async(e,t=null)=>{if(!i){n("provider"===e?t:e),m(null);try{let r=await fetch("/api/providers/test-batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:e,providerId:t})}),s=await r.json();if(m(s),s.summary){let{passed:e,failed:t,total:r}=s.summary;0===t?u.success(`All ${r} tests passed`):u.warning(`${e}/${r} passed, ${t} failed`)}}catch(e){m({error:"Test request failed"}),u.error("Provider test failed")}finally{n(null)}}};return(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("h2",{className:"text-xl font-semibold flex items-center gap-2",children:"OAuth Providers"}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(h,{}),(0,s.jsxs)("button",{onClick:()=>g("oauth"),disabled:!!i,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium border transition-colors ${"oauth"===i?"bg-primary/20 border-primary/40 text-primary animate-pulse":"bg-bg border-border text-text-muted hover:text-text-main hover:border-primary/40"}`,title:"Test all OAuth connections","aria-label":"Test all OAuth connections",children:[(0,s.jsx)("span",{className:`material-symbols-outlined text-[14px]${"oauth"===i?" animate-spin":""}`,children:"oauth"===i?"sync":"play_arrow"}),"oauth"===i?"Testing...":"Test All"]})]})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",children:Object.entries(d.zN).map(([e,t])=>(0,s.jsx)(b,{providerId:e,provider:t,stats:p(e,"oauth"),authType:"oauth",onToggle:t=>f(e,"oauth",t)},e))})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("h2",{className:"text-xl font-semibold flex items-center gap-2",children:"Free Providers"}),(0,s.jsxs)("button",{onClick:()=>g("free"),disabled:!!i,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium border transition-colors ${"free"===i?"bg-primary/20 border-primary/40 text-primary animate-pulse":"bg-bg border-border text-text-muted hover:text-text-main hover:border-primary/40"}`,title:"Test all Free connections","aria-label":"Test all Free provider connections",children:[(0,s.jsx)("span",{className:`material-symbols-outlined text-[14px]${"free"===i?" animate-spin":""}`,children:"free"===i?"sync":"play_arrow"}),"free"===i?"Testing...":"Test All"]})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",children:Object.entries(c.IS).map(([e,t])=>(0,s.jsx)(b,{providerId:e,provider:t,stats:p(e,"oauth"),authType:"free",onToggle:t=>f(e,"oauth",t)},e))})]}),o&&(0,s.jsxs)("div",{className:"fixed inset-0 z-50 flex items-start justify-center pt-[10vh]",onClick:()=>m(null),children:[(0,s.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm"}),(0,s.jsxs)("div",{className:"relative bg-surface border border-border rounded-xl w-full max-w-[600px] max-h-[80vh] overflow-y-auto shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"sticky top-0 z-10 flex items-center justify-between px-5 py-3 border-b border-border bg-surface/95 backdrop-blur-sm rounded-t-xl",children:[(0,s.jsx)("h3",{className:"font-semibold",children:"Test Results"}),(0,s.jsx)("button",{onClick:()=>m(null),className:"p-1 rounded-lg hover:bg-bg text-text-muted hover:text-text-main transition-colors","aria-label":"Close test results",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-lg",children:"close"})})]}),(0,s.jsx)("div",{className:"p-5",children:(0,s.jsx)(v,{results:o})})]})]})]})}function b({providerId:e,provider:t,stats:r,authType:i,onToggle:n}){let{connected:d,error:c,errorCode:m,errorTime:x,allDisabled:p}=r,[h,f]=(0,l.useState)(!1);return(0,s.jsx)(u(),{href:`/dashboard/providers/${e}`,className:"group",children:(0,s.jsx)(o.Zp,{padding:"xs",className:`h-full hover:bg-black/[0.01] dark:hover:bg-white/[0.01] transition-colors cursor-pointer ${p?"opacity-50":""}`,children:(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("div",{className:"size-8 rounded-lg flex items-center justify-center",style:{backgroundColor:`${t.color?.length>7?t.color:t.color+"15"}`},children:h?(0,s.jsx)("span",{className:"text-xs font-bold",style:{color:t.color},children:t.textIcon||t.id.slice(0,2).toUpperCase()}):(0,s.jsx)(a.default,{src:`/providers/${t.id}.png`,alt:t.name,width:30,height:30,className:"object-contain rounded-lg max-w-[32px] max-h-[32px]",sizes:"32px",onError:()=>f(!0)})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"font-semibold",children:t.name}),(0,s.jsx)("div",{className:"flex items-center gap-2 text-xs flex-wrap",children:p?(0,s.jsx)(o.Ex,{variant:"default",size:"sm",children:(0,s.jsxs)("span",{className:"flex items-center gap-1",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"pause_circle"}),"Disabled"]})}):(0,s.jsxs)(s.Fragment,{children:[function(e,t,r){let l=[];if(e>0&&l.push((0,s.jsxs)(o.Ex,{variant:"success",size:"sm",dot:!0,children:[e," Connected"]},"connected")),t>0){let e=r?`${t} Error (${r})`:`${t} Error`;l.push((0,s.jsx)(o.Ex,{variant:"error",size:"sm",dot:!0,children:e},"error"))}return 0===l.length?(0,s.jsx)("span",{className:"text-text-muted",children:"No connections"}):l}(d,c,m),x&&(0,s.jsx)("span",{className:"text-text-muted",children:x})]})})]})]}),(0,s.jsx)("div",{className:"flex items-center gap-2",children:r.total>0&&(0,s.jsx)("div",{className:"opacity-0 group-hover:opacity-100 transition-opacity",onClick:e=>{e.preventDefault(),e.stopPropagation(),n(!!p)},children:(0,s.jsx)(o.lM,{size:"sm",checked:!p,onChange:()=>{},title:p?"Enable provider":"Disable provider"})})})]})})})}function v({results:e}){if(e.error&&!e.results)return(0,s.jsxs)("div",{className:"text-center py-6",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-red-500 text-[32px] mb-2 block",children:"error"}),(0,s.jsx)("p",{className:"text-sm text-red-400",children:e.error})]});let{summary:t,mode:r}=e,l=e.results||[];return(0,s.jsxs)("div",{className:"flex flex-col gap-3",children:[t&&(0,s.jsxs)("div",{className:"flex items-center gap-3 text-xs mb-1",children:[(0,s.jsxs)("span",{className:"text-text-muted",children:[{oauth:"OAuth",free:"Free",apikey:"API Key",provider:"Provider",all:"All"}[r]||r," Test"]}),(0,s.jsxs)("span",{className:"px-2 py-0.5 rounded bg-emerald-500/15 text-emerald-400 font-medium",children:[t.passed," passed"]}),t.failed>0&&(0,s.jsxs)("span",{className:"px-2 py-0.5 rounded bg-red-500/15 text-red-400 font-medium",children:[t.failed," failed"]}),(0,s.jsxs)("span",{className:"text-text-muted ml-auto",children:[t.total," tested"]})]}),l.map((e,t)=>(0,s.jsxs)("div",{className:"flex items-center gap-2 text-xs px-3 py-2 rounded-lg bg-black/[0.03] dark:bg-white/[0.03]",children:[(0,s.jsx)("span",{className:`material-symbols-outlined text-[16px] ${e.valid?"text-emerald-500":"text-red-500"}`,children:e.valid?"check_circle":"error"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("span",{className:"font-medium",children:e.connectionName}),(0,s.jsxs)("span",{className:"text-text-muted ml-1.5",children:["(",e.provider,")"]})]}),void 0!==e.latencyMs&&(0,s.jsxs)("span",{className:"text-text-muted font-mono tabular-nums",children:[e.latencyMs,"ms"]}),(0,s.jsx)("span",{className:`text-[10px] uppercase font-bold px-1.5 py-0.5 rounded ${e.valid?"bg-emerald-500/15 text-emerald-400":"bg-red-500/15 text-red-400"}`,children:e.valid?"OK":e.diagnosis?.type||"ERROR"})]},e.connectionId||t)),0===l.length&&(0,s.jsx)("div",{className:"text-center py-4 text-text-muted text-sm",children:"No active connections found for this group."})]})}b.propTypes={providerId:n().string.isRequired,provider:n().shape({id:n().string.isRequired,name:n().string.isRequired,color:n().string,textIcon:n().string}).isRequired,stats:n().shape({connected:n().number,error:n().number,errorCode:n().string,errorTime:n().string}).isRequired,authType:n().string,onToggle:n().func},v.propTypes={results:n().shape({mode:n().string,results:n().array,summary:n().shape({total:n().number,passed:n().number,failed:n().number}),error:n().string}).isRequired}},53491:(e,t,r)=>{Promise.resolve().then(r.bind(r,52154))}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,8441,3794,7358],()=>e(e.s=53491)),_N_E=e.O()}]);
@@ -0,0 +1,2 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6812],{6215:(e,t,r)=>{Promise.resolve().then(r.bind(r,57076))},57076:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});var s=r(95155),o=r(12115),i=r(35497),l=r(65921);function a(e={}){return{name:e.name||"",proxyUrl:e.proxyUrl||"",noProxy:e.noProxy||"",isActive:!1!==e.isActive,strictProxy:!0===e.strictProxy}}function n(){let[e,t]=(0,o.useState)([]),[r,n]=(0,o.useState)(!0),[c,d]=(0,o.useState)(!1),[x,p]=(0,o.useState)(!1),[m,h]=(0,o.useState)(null),[u,y]=(0,o.useState)(a()),[f,v]=(0,o.useState)(""),[j,g]=(0,o.useState)(!1),[b,N]=(0,o.useState)(!1),[P,w]=(0,o.useState)(null),k=(0,l.i)(),C=(0,o.useCallback)(async()=>{try{let e=await fetch("/api/proxy-pools?includeUsage=true",{cache:"no-store"}),r=await e.json();e.ok&&t(r.proxyPools||[])}catch(e){console.log("Error fetching proxy pools:",e)}finally{n(!1)}},[]);(0,o.useEffect)(()=>{C()},[C]);let $=()=>{h(null),y(a())},S=()=>{$(),d(!0)},E=()=>{d(!1),$()},U=async()=>{let e={name:u.name.trim(),proxyUrl:u.proxyUrl.trim(),noProxy:u.noProxy.trim(),isActive:!0===u.isActive,strictProxy:!0===u.strictProxy};if(e.name&&e.proxyUrl){g(!0);try{let t=!!m,r=await fetch(t?`/api/proxy-pools/${m.id}`:"/api/proxy-pools",{method:t?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(r.ok)await C(),E(),k.success(m?"Proxy pool updated":"Proxy pool created");else{let e=await r.json();k.error(e.error||"Failed to save proxy pool")}}catch(e){console.log("Error saving proxy pool:",e)}finally{g(!1)}}},A=async e=>{if(confirm(`Delete proxy pool "${e.name}"?`))try{let r=await fetch(`/api/proxy-pools/${e.id}`,{method:"DELETE"});if(r.ok){t(t=>t.filter(t=>t.id!==e.id)),k.success("Proxy pool deleted");return}let s=await r.json();409===r.status?k.warning(`Cannot delete: ${s.boundConnectionCount||0} connection(s) are still using this pool.`):k.error(s.error||"Failed to delete proxy pool")}catch(e){console.log("Error deleting proxy pool:",e),k.error("Failed to delete proxy pool")}},I=async e=>{w(e);try{let t=await fetch(`/api/proxy-pools/${e}/test`,{method:"POST"}),r=await t.json();if(!t.ok)return void k.error(r.error||"Failed to test proxy");await C(),k.success(r.ok?"Proxy test passed":"Proxy test failed")}catch(e){console.log("Error testing proxy pool:",e),k.error("Failed to test proxy")}finally{w(null)}},O=()=>{b||p(!1)},T=async()=>{let t=f.split(/\r?\n/).map(e=>e.trim()).filter(Boolean);if(0===t.length)return void k.warning("Please paste at least one proxy line.");let r=[],s=[];if(t.forEach((e,t)=>{try{let s=(e=>{let t=e.trim();if(!t)return null;if(t.includes("://")){let e=new URL(t),r=e.port?`${e.hostname}:${e.port}`:e.hostname;return{proxyUrl:e.toString(),name:`Imported ${r}`}}let r=t.split(":");if(4===r.length){let[e,t,s,o]=r;if(!e||!t||!s||!o)throw Error("Invalid host:port:user:pass format");return{proxyUrl:new URL(`http://${encodeURIComponent(s)}:${encodeURIComponent(o)}@${e}:${t}`).toString(),name:`Imported ${e}:${t}`}}throw Error("Unsupported format")})(e);s&&r.push({...s,lineNumber:t+1})}catch(e){s.push(`Line ${t+1}: ${e.message}`)}}),s.length>0)return void k.error(`Invalid proxy format:
2
+ ${s.join("\n")}`);N(!0);try{let t=new Set(e.map(e=>`${(e.proxyUrl||"").trim()}|||${(e.noProxy||"").trim()}`)),s=0,o=0,i=0;for(let e of r){let r=`${e.proxyUrl}|||`;if(t.has(r)){o+=1;continue}(await fetch("/api/proxy-pools",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,proxyUrl:e.proxyUrl,noProxy:"",isActive:!0})})).ok?(s+=1,t.add(r)):i+=1}await C(),p(!1),k.success(`Batch import completed: Created ${s}, Skipped ${o}, Failed ${i}`)}catch(e){console.log("Error batch importing proxies:",e),k.error("Batch import failed")}finally{N(!1)}},F=(0,o.useMemo)(()=>e.filter(e=>!0===e.isActive).length,[e]);return r?(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)(i.Qv,{}),(0,s.jsx)(i.Qv,{})]}):(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-2xl font-semibold",children:"Proxy Pools"}),(0,s.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Manage reusable per-connection proxies and bind them to provider connections."})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(i.$n,{variant:"secondary",icon:"upload",onClick:()=>{v(""),p(!0)},children:"Batch Import Proxies"}),(0,s.jsx)(i.$n,{icon:"add",onClick:S,children:"Add Proxy Pool"})]})]}),(0,s.jsxs)(i.Zp,{children:[(0,s.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)(i.Ex,{variant:"default",children:["Total: ",e.length]}),(0,s.jsxs)(i.Ex,{variant:"success",children:["Active: ",F]})]})}),0===e.length?(0,s.jsxs)("div",{className:"text-center py-10",children:[(0,s.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No proxy pool entries yet"}),(0,s.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create a proxy pool entry, then assign it to connections."}),(0,s.jsx)(i.$n,{icon:"add",onClick:S,children:"Add Proxy Pool"})]}):(0,s.jsx)("div",{className:"flex flex-col divide-y divide-black/[0.04] dark:divide-white/[0.05]",children:e.map(e=>{var t;return(0,s.jsxs)("div",{className:"py-3 flex items-center justify-between gap-3 group",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,s.jsx)("p",{className:"text-sm font-medium truncate",children:e.name}),(0,s.jsx)(i.Ex,{variant:"active"===(t=e.testStatus)?"success":"error"===t?"error":"default",size:"sm",dot:!0,children:e.testStatus||"unknown"}),(0,s.jsx)(i.Ex,{variant:e.isActive?"success":"default",size:"sm",children:e.isActive?"active":"inactive"}),(0,s.jsxs)(i.Ex,{variant:"default",size:"sm",children:[e.boundConnectionCount||0," bound"]})]}),(0,s.jsx)("p",{className:"text-xs text-text-muted truncate mt-1",children:e.proxyUrl}),e.noProxy?(0,s.jsxs)("p",{className:"text-xs text-text-muted truncate",children:["No proxy: ",e.noProxy]}):null,(0,s.jsxs)("p",{className:"text-[11px] text-text-muted mt-1",children:["Last tested: ",function(e){if(!e)return"Never";let t=new Date(e);return Number.isNaN(t.getTime())?"Never":t.toLocaleString()}(e.lastTestedAt),e.lastError?` \xb7 ${e.lastError}`:""]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[(0,s.jsx)("button",{onClick:()=>I(e.id),className:"p-2 rounded hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary",title:"Test proxy",disabled:P===e.id,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:P===e.id?{animation:"spin 1s linear infinite"}:void 0,children:P===e.id?"progress_activity":"science"})}),(0,s.jsx)("button",{onClick:()=>{h(e),y(a(e)),d(!0)},className:"p-2 rounded hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary",title:"Edit",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})}),(0,s.jsx)("button",{onClick:()=>A(e),className:"p-2 rounded hover:bg-red-500/10 text-red-500",title:"Delete",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"})})]})]},e.id)})})]}),(0,s.jsx)(i.aF,{isOpen:x,title:"Batch Import Proxies",onClose:O,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 text-text-main mb-1 block",children:"Paste Proxy List (One per line)"}),(0,s.jsx)("textarea",{value:f,onChange:e=>v(e.target.value),placeholder:"http://user:pass@127.0.0.1:7897\n127.0.0.1:7897:user:pass",className:"w-full min-h-[180px] py-2 px-3 text-sm text-text-main bg-white dark:bg-white/5 border border-black/10 dark:border-white/10 rounded-md focus:ring-1 focus:ring-primary/30 focus:border-primary/50 focus:outline-none transition-all"}),(0,s.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"Supported formats: protocol://user:pass@host:port, host:port:user:pass"})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(i.$n,{fullWidth:!0,onClick:T,disabled:!f.trim()||b,children:b?"Importing...":"Import"}),(0,s.jsx)(i.$n,{fullWidth:!0,variant:"ghost",onClick:O,disabled:b,children:"Cancel"})]})]})}),(0,s.jsx)(i.aF,{isOpen:c,title:m?"Edit Proxy Pool":"Add Proxy Pool",onClose:E,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(i.pd,{label:"Name",value:u.name,onChange:e=>y(t=>({...t,name:e.target.value})),placeholder:"Office Proxy"}),(0,s.jsx)(i.pd,{label:"Proxy URL",value:u.proxyUrl,onChange:e=>y(t=>({...t,proxyUrl:e.target.value})),placeholder:"http://127.0.0.1:7897"}),(0,s.jsx)(i.pd,{label:"No Proxy",value:u.noProxy,onChange:e=>y(t=>({...t,noProxy:e.target.value})),placeholder:"localhost,127.0.0.1,.internal",hint:"Comma-separated hosts/domains to bypass proxy"}),(0,s.jsxs)("div",{className:"rounded-lg border border-border/50 p-3 flex items-center justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"font-medium text-sm",children:"Active"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Inactive pools are ignored by runtime resolution."})]}),(0,s.jsx)(i.lM,{checked:!0===u.isActive,onChange:()=>y(e=>({...e,isActive:!e.isActive})),disabled:j})]}),(0,s.jsxs)("div",{className:"rounded-lg border border-border/50 p-3 flex items-center justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"font-medium text-sm",children:"Strict Proxy"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Fail request if proxy is unreachable instead of falling back to direct."})]}),(0,s.jsx)(i.lM,{checked:!0===u.strictProxy,onChange:()=>y(e=>({...e,strictProxy:!e.strictProxy})),disabled:j})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(i.$n,{fullWidth:!0,onClick:U,disabled:!u.name.trim()||!u.proxyUrl.trim()||j,children:j?"Saving...":"Save"}),(0,s.jsx)(i.$n,{fullWidth:!0,variant:"ghost",onClick:E,disabled:j,children:"Cancel"})]})]})})]})}}},e=>{e.O(0,[2574,3862,5772,123,2652,5497,8441,3794,7358],()=>e(e.s=6215)),_N_E=e.O()}]);