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,1724 @@
1
+ "use client";
2
+
3
+ import { useState, useEffect, useCallback, useMemo } from "react";
4
+ import PropTypes from "prop-types";
5
+ import { useParams, useRouter } from "next/navigation";
6
+ import Link from "next/link";
7
+ import Image from "next/image";
8
+ import { Card, Button, Badge, Input, Modal, CardSkeleton, OAuthModal, KiroOAuthWrapper, CursorAuthModal, Toggle, Select } from "@/shared/components";
9
+ import { OAUTH_PROVIDERS, APIKEY_PROVIDERS, FREE_PROVIDERS, getProviderAlias, isOpenAICompatibleProvider, isAnthropicCompatibleProvider } from "@/shared/constants/providers";
10
+ import { getModelsByProviderId } from "@/shared/constants/models";
11
+ import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard";
12
+
13
+ export default function ProviderDetailPage() {
14
+ const params = useParams();
15
+ const router = useRouter();
16
+ const providerId = params.id;
17
+ const [connections, setConnections] = useState([]);
18
+ const [loading, setLoading] = useState(true);
19
+ const [providerNode, setProviderNode] = useState(null);
20
+ const [showOAuthModal, setShowOAuthModal] = useState(false);
21
+ const [showAddApiKeyModal, setShowAddApiKeyModal] = useState(false);
22
+ const [showEditModal, setShowEditModal] = useState(false);
23
+ const [showEditNodeModal, setShowEditNodeModal] = useState(false);
24
+ const [selectedConnection, setSelectedConnection] = useState(null);
25
+ const [modelAliases, setModelAliases] = useState({});
26
+ const [remoteModels, setRemoteModels] = useState([]);
27
+ const [loadingRemoteModels, setLoadingRemoteModels] = useState(false);
28
+ const [selectedModelIds, setSelectedModelIds] = useState([]);
29
+ const [savingSelectedModels, setSavingSelectedModels] = useState(false);
30
+ const [modelSearchQuery, setModelSearchQuery] = useState("");
31
+ const [showSelectedOnly, setShowSelectedOnly] = useState(false);
32
+ const [headerImgError, setHeaderImgError] = useState(false);
33
+ const { copied, copy } = useCopyToClipboard();
34
+
35
+ const providerInfo = providerNode
36
+ ? {
37
+ id: providerNode.id,
38
+ name: providerNode.name || (providerNode.type === "anthropic-compatible" ? "Anthropic Compatible" : "OpenAI Compatible"),
39
+ color: providerNode.type === "anthropic-compatible" ? "#D97757" : "#10A37F",
40
+ textIcon: providerNode.type === "anthropic-compatible" ? "AC" : "OC",
41
+ apiType: providerNode.apiType,
42
+ baseUrl: providerNode.baseUrl,
43
+ type: providerNode.type,
44
+ }
45
+ : (OAUTH_PROVIDERS[providerId] || APIKEY_PROVIDERS[providerId] || FREE_PROVIDERS[providerId]);
46
+ const isOAuth = !!OAUTH_PROVIDERS[providerId] || !!FREE_PROVIDERS[providerId];
47
+ const models = useMemo(() => getModelsByProviderId(providerId), [providerId]);
48
+ const providerAlias = getProviderAlias(providerId);
49
+
50
+ const isOpenAICompatible = isOpenAICompatibleProvider(providerId);
51
+ const isAnthropicCompatible = isAnthropicCompatibleProvider(providerId);
52
+ const isCompatible = isOpenAICompatible || isAnthropicCompatible;
53
+
54
+ const providerStorageAlias = isCompatible ? providerId : providerAlias;
55
+ const providerDisplayAlias = isCompatible
56
+ ? (providerNode?.prefix || providerId)
57
+ : providerAlias;
58
+ const activeConnection = connections.find((conn) => conn.isActive !== false) || null;
59
+ const allProviderModels = models.length > 0 ? models : remoteModels;
60
+ const allProviderModelIds = useMemo(
61
+ () => allProviderModels.map((model) => model.id),
62
+ [allProviderModels]
63
+ );
64
+ const savedEnabledModels = useMemo(() => {
65
+ const enabled = activeConnection?.providerSpecificData?.enabledModels;
66
+ return Array.isArray(enabled)
67
+ ? enabled.filter((modelId) => allProviderModelIds.includes(modelId))
68
+ : [];
69
+ }, [activeConnection?.providerSpecificData?.enabledModels, allProviderModelIds]);
70
+ const savedEnabledModelsKey = useMemo(
71
+ () => savedEnabledModels.join("|"),
72
+ [savedEnabledModels]
73
+ );
74
+
75
+ // Define callbacks BEFORE the useEffect that uses them
76
+ const fetchAliases = useCallback(async () => {
77
+ try {
78
+ const res = await fetch("/api/models/alias");
79
+ const data = await res.json();
80
+ if (res.ok) {
81
+ setModelAliases(data.aliases || {});
82
+ }
83
+ } catch (error) {
84
+ console.log("Error fetching aliases:", error);
85
+ }
86
+ }, []);
87
+
88
+ const fetchConnections = useCallback(async () => {
89
+ try {
90
+ const [connectionsRes, nodesRes] = await Promise.all([
91
+ fetch("/api/providers", { cache: "no-store" }),
92
+ fetch("/api/provider-nodes", { cache: "no-store" }),
93
+ ]);
94
+ const connectionsData = await connectionsRes.json();
95
+ const nodesData = await nodesRes.json();
96
+ if (connectionsRes.ok) {
97
+ const filtered = (connectionsData.connections || []).filter(c => c.provider === providerId);
98
+ setConnections(filtered);
99
+ }
100
+ if (nodesRes.ok) {
101
+ let node = (nodesData.nodes || []).find((entry) => entry.id === providerId) || null;
102
+
103
+ // Newly created compatible nodes can be briefly unavailable on one worker.
104
+ // Retry a few times before showing "Provider not found".
105
+ if (!node && isCompatible) {
106
+ for (let attempt = 0; attempt < 3; attempt += 1) {
107
+ await new Promise((resolve) => setTimeout(resolve, 150));
108
+ const retryRes = await fetch("/api/provider-nodes", { cache: "no-store" });
109
+ if (!retryRes.ok) continue;
110
+ const retryData = await retryRes.json();
111
+ node = (retryData.nodes || []).find((entry) => entry.id === providerId) || null;
112
+ if (node) break;
113
+ }
114
+ }
115
+
116
+ setProviderNode(node);
117
+ }
118
+ } catch (error) {
119
+ console.log("Error fetching connections:", error);
120
+ } finally {
121
+ setLoading(false);
122
+ }
123
+ }, [providerId, isCompatible]);
124
+
125
+ const handleUpdateNode = async (formData) => {
126
+ try {
127
+ const res = await fetch(`/api/provider-nodes/${providerId}`, {
128
+ method: "PUT",
129
+ headers: { "Content-Type": "application/json" },
130
+ body: JSON.stringify(formData),
131
+ });
132
+ const data = await res.json();
133
+ if (res.ok) {
134
+ setProviderNode(data.node);
135
+ await fetchConnections();
136
+ setShowEditNodeModal(false);
137
+ }
138
+ } catch (error) {
139
+ console.log("Error updating provider node:", error);
140
+ }
141
+ };
142
+
143
+ const handleToggleModelSelected = (modelId) => {
144
+ setSelectedModelIds((prev) => (
145
+ prev.includes(modelId)
146
+ ? prev.filter((id) => id !== modelId)
147
+ : [...prev, modelId]
148
+ ));
149
+ };
150
+
151
+ const handleSaveSelectedModels = async () => {
152
+ if (!activeConnection || savingSelectedModels) return;
153
+ setSavingSelectedModels(true);
154
+ try {
155
+ const res = await fetch(`/api/providers/${activeConnection.id}`, {
156
+ method: "PUT",
157
+ headers: { "Content-Type": "application/json" },
158
+ body: JSON.stringify({
159
+ providerSpecificData: {
160
+ enabledModels: selectedModelIds,
161
+ },
162
+ }),
163
+ });
164
+
165
+ if (!res.ok) {
166
+ const data = await res.json();
167
+ alert(data.error || "Failed to save selected models");
168
+ return;
169
+ }
170
+
171
+ await fetchConnections();
172
+ } catch (error) {
173
+ console.log("Error saving selected models:", error);
174
+ alert("Failed to save selected models");
175
+ } finally {
176
+ setSavingSelectedModels(false);
177
+ }
178
+ };
179
+
180
+ useEffect(() => {
181
+ fetchConnections();
182
+ fetchAliases();
183
+ }, [fetchConnections, fetchAliases]);
184
+
185
+ useEffect(() => {
186
+ const nextSelectedModelIds = (isCompatible || providerInfo?.passthroughModels)
187
+ ? []
188
+ : savedEnabledModels;
189
+
190
+ setSelectedModelIds((prev) => {
191
+ if (
192
+ prev.length === nextSelectedModelIds.length
193
+ && prev.every((modelId, index) => modelId === nextSelectedModelIds[index])
194
+ ) {
195
+ return prev;
196
+ }
197
+ return nextSelectedModelIds;
198
+ });
199
+ }, [
200
+ isCompatible,
201
+ providerInfo?.passthroughModels,
202
+ activeConnection?.id,
203
+ savedEnabledModels
204
+ ]);
205
+
206
+ const fetchRemoteModels = useCallback(async () => {
207
+ if (isCompatible || providerInfo?.passthroughModels || models.length > 0) {
208
+ setRemoteModels([]);
209
+ return;
210
+ }
211
+
212
+ if (!activeConnection) {
213
+ setRemoteModels([]);
214
+ return;
215
+ }
216
+
217
+ setLoadingRemoteModels(true);
218
+ try {
219
+ const res = await fetch(`/api/providers/${activeConnection.id}/models`);
220
+ const data = await res.json();
221
+ if (!res.ok) {
222
+ setRemoteModels([]);
223
+ return;
224
+ }
225
+
226
+ const parsed = (data.models || [])
227
+ .map((item) => {
228
+ if (typeof item === "string") return { id: item, name: item };
229
+ const modelId = item?.id || item?.name || item?.model;
230
+ if (!modelId) return null;
231
+ return { id: modelId, name: item?.name || modelId };
232
+ })
233
+ .filter(Boolean);
234
+
235
+ const deduped = Array.from(
236
+ new Map(parsed.map((item) => [item.id, item])).values()
237
+ );
238
+
239
+ setRemoteModels(deduped);
240
+ } catch (error) {
241
+ console.log("Error fetching remote models:", error);
242
+ setRemoteModels([]);
243
+ } finally {
244
+ setLoadingRemoteModels(false);
245
+ }
246
+ }, [activeConnection, isCompatible, models.length, providerInfo?.passthroughModels]);
247
+
248
+ useEffect(() => {
249
+ fetchRemoteModels();
250
+ }, [fetchRemoteModels]);
251
+
252
+ const handleSetAlias = async (modelId, alias, providerAliasOverride = providerAlias) => {
253
+ const fullModel = `${providerAliasOverride}/${modelId}`;
254
+ try {
255
+ const res = await fetch("/api/models/alias", {
256
+ method: "PUT",
257
+ headers: { "Content-Type": "application/json" },
258
+ body: JSON.stringify({ model: fullModel, alias }),
259
+ });
260
+ if (res.ok) {
261
+ await fetchAliases();
262
+ } else {
263
+ const data = await res.json();
264
+ alert(data.error || "Failed to set alias");
265
+ }
266
+ } catch (error) {
267
+ console.log("Error setting alias:", error);
268
+ }
269
+ };
270
+
271
+ const handleDeleteAlias = async (alias) => {
272
+ try {
273
+ const res = await fetch(`/api/models/alias?alias=${encodeURIComponent(alias)}`, {
274
+ method: "DELETE",
275
+ });
276
+ if (res.ok) {
277
+ await fetchAliases();
278
+ }
279
+ } catch (error) {
280
+ console.log("Error deleting alias:", error);
281
+ }
282
+ };
283
+
284
+ const handleDelete = async (id) => {
285
+ if (!confirm("Delete this connection?")) return;
286
+ try {
287
+ const res = await fetch(`/api/providers/${id}`, { method: "DELETE" });
288
+ if (res.ok) {
289
+ setConnections(connections.filter(c => c.id !== id));
290
+ }
291
+ } catch (error) {
292
+ console.log("Error deleting connection:", error);
293
+ }
294
+ };
295
+
296
+ const handleOAuthSuccess = () => {
297
+ fetchConnections();
298
+ setShowOAuthModal(false);
299
+ };
300
+
301
+ const handleSaveApiKey = async (formData) => {
302
+ try {
303
+ const res = await fetch("/api/providers", {
304
+ method: "POST",
305
+ headers: { "Content-Type": "application/json" },
306
+ body: JSON.stringify({ provider: providerId, ...formData }),
307
+ });
308
+ if (res.ok) {
309
+ await fetchConnections();
310
+ setShowAddApiKeyModal(false);
311
+ }
312
+ } catch (error) {
313
+ console.log("Error saving connection:", error);
314
+ }
315
+ };
316
+
317
+ const handleUpdateConnection = async (formData) => {
318
+ try {
319
+ const res = await fetch(`/api/providers/${selectedConnection.id}`, {
320
+ method: "PUT",
321
+ headers: { "Content-Type": "application/json" },
322
+ body: JSON.stringify(formData),
323
+ });
324
+ if (res.ok) {
325
+ await fetchConnections();
326
+ setShowEditModal(false);
327
+ }
328
+ } catch (error) {
329
+ console.log("Error updating connection:", error);
330
+ }
331
+ };
332
+
333
+ const handleUpdateConnectionStatus = async (id, isActive) => {
334
+ try {
335
+ const res = await fetch(`/api/providers/${id}`, {
336
+ method: "PUT",
337
+ headers: { "Content-Type": "application/json" },
338
+ body: JSON.stringify({ isActive }),
339
+ });
340
+ if (res.ok) {
341
+ setConnections(prev => prev.map(c => c.id === id ? { ...c, isActive } : c));
342
+ }
343
+ } catch (error) {
344
+ console.log("Error updating connection status:", error);
345
+ }
346
+ };
347
+
348
+ const handleSwapPriority = async (conn1, conn2) => {
349
+ if (!conn1 || !conn2) return;
350
+ try {
351
+ // If they have the same priority, we need to ensure the one moving up
352
+ // gets a lower value than the one moving down.
353
+ // We use a small offset which the backend re-indexing will fix.
354
+ let p1 = conn2.priority;
355
+ let p2 = conn1.priority;
356
+
357
+ if (p1 === p2) {
358
+ // If moving conn1 "up" (index decreases)
359
+ const isConn1MovingUp = connections.indexOf(conn1) > connections.indexOf(conn2);
360
+ if (isConn1MovingUp) {
361
+ p1 = conn2.priority - 0.5;
362
+ } else {
363
+ p1 = conn2.priority + 0.5;
364
+ }
365
+ }
366
+
367
+ await Promise.all([
368
+ fetch(`/api/providers/${conn1.id}`, {
369
+ method: "PUT",
370
+ headers: { "Content-Type": "application/json" },
371
+ body: JSON.stringify({ priority: p1 }),
372
+ }),
373
+ fetch(`/api/providers/${conn2.id}`, {
374
+ method: "PUT",
375
+ headers: { "Content-Type": "application/json" },
376
+ body: JSON.stringify({ priority: p2 }),
377
+ }),
378
+ ]);
379
+ await fetchConnections();
380
+ } catch (error) {
381
+ console.log("Error swapping priority:", error);
382
+ }
383
+ };
384
+
385
+ const renderModelsSection = () => {
386
+ if (isCompatible) {
387
+ return (
388
+ <CompatibleModelsSection
389
+ providerStorageAlias={providerStorageAlias}
390
+ providerDisplayAlias={providerDisplayAlias}
391
+ modelAliases={modelAliases}
392
+ copied={copied}
393
+ onCopy={copy}
394
+ onSetAlias={handleSetAlias}
395
+ onDeleteAlias={handleDeleteAlias}
396
+ connections={connections}
397
+ isAnthropic={isAnthropicCompatible}
398
+ />
399
+ );
400
+ }
401
+ if (providerInfo.passthroughModels) {
402
+ return (
403
+ <PassthroughModelsSection
404
+ providerAlias={providerAlias}
405
+ modelAliases={modelAliases}
406
+ copied={copied}
407
+ onCopy={copy}
408
+ onSetAlias={handleSetAlias}
409
+ onDeleteAlias={handleDeleteAlias}
410
+ />
411
+ );
412
+ }
413
+
414
+ const availableModels = allProviderModels;
415
+ if (availableModels.length === 0) {
416
+ if (loadingRemoteModels) {
417
+ return <p className="text-sm text-text-muted">Loading models from provider...</p>;
418
+ }
419
+ return <p className="text-sm text-text-muted">No models configured</p>;
420
+ }
421
+
422
+ const selectedSet = new Set(selectedModelIds);
423
+ const filteredBySelection = showSelectedOnly
424
+ ? availableModels.filter((model) => selectedSet.has(model.id))
425
+ : availableModels;
426
+ const query = modelSearchQuery.trim().toLowerCase();
427
+ const visibleModels = query
428
+ ? filteredBySelection.filter((model) =>
429
+ model.id.toLowerCase().includes(query) ||
430
+ (model.name || "").toLowerCase().includes(query)
431
+ )
432
+ : filteredBySelection;
433
+ const hasSelectionChanges =
434
+ savedEnabledModels.length !== selectedModelIds.length ||
435
+ savedEnabledModels.some((modelId) => !selectedSet.has(modelId));
436
+
437
+ return (
438
+ <div className="flex flex-col gap-3">
439
+ <div className="flex flex-wrap items-center gap-2">
440
+ <div className="relative flex-1 min-w-55">
441
+ <Input
442
+ value={modelSearchQuery}
443
+ onChange={(e) => setModelSearchQuery(e.target.value)}
444
+ placeholder="Search model id"
445
+ className="pr-8"
446
+ />
447
+ {modelSearchQuery && (
448
+ <button
449
+ type="button"
450
+ onClick={() => setModelSearchQuery("")}
451
+ className="absolute right-2 top-1/2 -translate-y-1/2 text-text-muted hover:text-primary"
452
+ title="Clear search"
453
+ >
454
+ <span className="material-symbols-outlined text-[16px]">close</span>
455
+ </button>
456
+ )}
457
+ </div>
458
+ <Button
459
+ size="sm"
460
+ variant="secondary"
461
+ onClick={() => setSelectedModelIds(allProviderModelIds)}
462
+ disabled={allProviderModels.length === 0}
463
+ >
464
+ Select all
465
+ </Button>
466
+ <Button
467
+ size="sm"
468
+ variant="secondary"
469
+ onClick={() => setSelectedModelIds([])}
470
+ >
471
+ Unselect all
472
+ </Button>
473
+ <Button
474
+ size="sm"
475
+ onClick={handleSaveSelectedModels}
476
+ disabled={!activeConnection || savingSelectedModels || !hasSelectionChanges}
477
+ >
478
+ {savingSelectedModels ? "Saving..." : "Save selection"}
479
+ </Button>
480
+ <div className="flex items-center gap-1 pl-2">
481
+ <span className="text-xs text-text-muted">Selected only</span>
482
+ <Toggle
483
+ size="sm"
484
+ checked={showSelectedOnly}
485
+ onChange={setShowSelectedOnly}
486
+ title="Show only selected models"
487
+ />
488
+ </div>
489
+ </div>
490
+
491
+ <p className="text-xs text-text-muted">
492
+ {selectedModelIds.length > 0
493
+ ? `${selectedModelIds.length} selected`
494
+ : "All models enabled"}
495
+ </p>
496
+
497
+ {visibleModels.length === 0 ? (
498
+ <p className="text-sm text-text-muted">No models match your filter.</p>
499
+ ) : (
500
+ <div className="flex flex-wrap gap-3">
501
+ {visibleModels.map((model) => {
502
+ const fullModel = `${providerStorageAlias}/${model.id}`;
503
+ const oldFormatModel = `${providerId}/${model.id}`;
504
+ const existingAlias = Object.entries(modelAliases).find(
505
+ ([, m]) => m === fullModel || m === oldFormatModel
506
+ )?.[0];
507
+ return (
508
+ <ModelRow
509
+ key={model.id}
510
+ model={model}
511
+ fullModel={`${providerDisplayAlias}/${model.id}`}
512
+ alias={existingAlias}
513
+ copied={copied}
514
+ onCopy={copy}
515
+ selected={selectedSet.has(model.id)}
516
+ onToggleSelect={() => handleToggleModelSelected(model.id)}
517
+ onSetAlias={(alias) => handleSetAlias(model.id, alias, providerStorageAlias)}
518
+ onDeleteAlias={() => handleDeleteAlias(existingAlias)}
519
+ />
520
+ );
521
+ })}
522
+ </div>
523
+ )}
524
+ </div>
525
+ );
526
+ };
527
+
528
+ if (loading) {
529
+ return (
530
+ <div className="flex flex-col gap-8">
531
+ <CardSkeleton />
532
+ <CardSkeleton />
533
+ </div>
534
+ );
535
+ }
536
+
537
+ if (!providerInfo) {
538
+ return (
539
+ <div className="text-center py-20">
540
+ <p className="text-text-muted">Provider not found</p>
541
+ <Link href="/dashboard/providers" className="text-primary mt-4 inline-block">
542
+ Back to Providers
543
+ </Link>
544
+ </div>
545
+ );
546
+ }
547
+
548
+ // Determine icon path: OpenAI Compatible providers use specialized icons
549
+ const getHeaderIconPath = () => {
550
+ if (isOpenAICompatible && providerInfo.apiType) {
551
+ return providerInfo.apiType === "responses" ? "/providers/oai-r.png" : "/providers/oai-cc.png";
552
+ }
553
+ if (isAnthropicCompatible) {
554
+ return "/providers/anthropic-m.png";
555
+ }
556
+ return `/providers/${providerInfo.id}.png`;
557
+ };
558
+
559
+ return (
560
+ <div className="flex flex-col gap-8">
561
+ {/* Header */}
562
+ <div>
563
+ <Link
564
+ href="/dashboard/providers"
565
+ className="inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors mb-4"
566
+ >
567
+ <span className="material-symbols-outlined text-lg">arrow_back</span>
568
+ Back to Providers
569
+ </Link>
570
+ <div className="flex items-center gap-4">
571
+ <div
572
+ className="rounded-lg flex items-center justify-center"
573
+ style={{ backgroundColor: `${providerInfo.color}15` }}
574
+ >
575
+ {headerImgError ? (
576
+ <span className="text-sm font-bold" style={{ color: providerInfo.color }}>
577
+ {providerInfo.textIcon || providerInfo.id.slice(0, 2).toUpperCase()}
578
+ </span>
579
+ ) : (
580
+ <Image
581
+ src={getHeaderIconPath()}
582
+ alt={providerInfo.name}
583
+ width={48}
584
+ height={48}
585
+ className="object-contain rounded-lg max-w-[48px] max-h-[48px]"
586
+ sizes="48px"
587
+ onError={() => setHeaderImgError(true)}
588
+ />
589
+ )}
590
+ </div>
591
+ <div>
592
+ <h1 className="text-3xl font-semibold tracking-tight">{providerInfo.name}</h1>
593
+ <p className="text-text-muted">
594
+ {connections.length} connection{connections.length === 1 ? "" : "s"}
595
+ </p>
596
+ </div>
597
+ </div>
598
+ </div>
599
+
600
+ {isCompatible && providerNode && (
601
+ <Card>
602
+ <div className="flex items-center justify-between mb-4">
603
+ <div>
604
+ <h2 className="text-lg font-semibold">{isAnthropicCompatible ? "Anthropic Compatible Details" : "OpenAI Compatible Details"}</h2>
605
+ <p className="text-sm text-text-muted">
606
+ {isAnthropicCompatible ? "Messages API" : (providerNode.apiType === "responses" ? "Responses API" : "Chat Completions")} · {(providerNode.baseUrl || "").replace(/\/$/, "")}/
607
+ {isAnthropicCompatible ? "messages" : (providerNode.apiType === "responses" ? "responses" : "chat/completions")}
608
+ </p>
609
+ </div>
610
+ <div className="flex items-center gap-2">
611
+ <Button
612
+ size="sm"
613
+ icon="add"
614
+ onClick={() => setShowAddApiKeyModal(true)}
615
+ disabled={connections.length > 0}
616
+ >
617
+ Add
618
+ </Button>
619
+ <Button
620
+ size="sm"
621
+ variant="secondary"
622
+ icon="edit"
623
+ onClick={() => setShowEditNodeModal(true)}
624
+ >
625
+ Edit
626
+ </Button>
627
+ <Button
628
+ size="sm"
629
+ variant="secondary"
630
+ icon="delete"
631
+ onClick={async () => {
632
+ if (!confirm(`Delete this ${isAnthropicCompatible ? "Anthropic" : "OpenAI"} Compatible node?`)) return;
633
+ try {
634
+ const res = await fetch(`/api/provider-nodes/${providerId}`, { method: "DELETE" });
635
+ if (res.ok) {
636
+ router.push("/dashboard/providers");
637
+ }
638
+ } catch (error) {
639
+ console.log("Error deleting provider node:", error);
640
+ }
641
+ }}
642
+ >
643
+ Delete
644
+ </Button>
645
+ </div>
646
+ </div>
647
+ {connections.length > 0 && (
648
+ <p className="text-sm text-text-muted">
649
+ Only one connection is allowed per compatible node. Add another node if you need more connections.
650
+ </p>
651
+ )}
652
+ </Card>
653
+ )}
654
+
655
+ {/* Connections */}
656
+ <Card>
657
+ <div className="flex items-center justify-between mb-4">
658
+ <h2 className="text-lg font-semibold">Connections</h2>
659
+ {!isCompatible && (
660
+ <Button
661
+ size="sm"
662
+ icon="add"
663
+ onClick={() => isOAuth ? setShowOAuthModal(true) : setShowAddApiKeyModal(true)}
664
+ >
665
+ Add
666
+ </Button>
667
+ )}
668
+ </div>
669
+
670
+ {connections.length === 0 ? (
671
+ <div className="text-center py-12">
672
+ <div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4">
673
+ <span className="material-symbols-outlined text-[32px]">{isOAuth ? "lock" : "key"}</span>
674
+ </div>
675
+ <p className="text-text-main font-medium mb-1">No connections yet</p>
676
+ <p className="text-sm text-text-muted mb-4">Add your first connection to get started</p>
677
+ {!isCompatible && (
678
+ <Button icon="add" onClick={() => isOAuth ? setShowOAuthModal(true) : setShowAddApiKeyModal(true)}>
679
+ Add Connection
680
+ </Button>
681
+ )}
682
+ </div>
683
+ ) : (
684
+ <div className="flex flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03]">
685
+ {connections
686
+ .sort((a, b) => (a.priority || 0) - (b.priority || 0))
687
+ .map((conn, index) => (
688
+ <ConnectionRow
689
+ key={conn.id}
690
+ connection={conn}
691
+ isOAuth={isOAuth}
692
+ isFirst={index === 0}
693
+ isLast={index === connections.length - 1}
694
+ onMoveUp={() => handleSwapPriority(conn, connections[index - 1])}
695
+ onMoveDown={() => handleSwapPriority(conn, connections[index + 1])}
696
+ onToggleActive={(isActive) => handleUpdateConnectionStatus(conn.id, isActive)}
697
+ onEdit={() => {
698
+ setSelectedConnection(conn);
699
+ setShowEditModal(true);
700
+ }}
701
+ onDelete={() => handleDelete(conn.id)}
702
+ />
703
+ ))}
704
+ </div>
705
+ )}
706
+ </Card>
707
+
708
+ {/* Models */}
709
+ <Card>
710
+ <h2 className="text-lg font-semibold mb-4">
711
+ {providerInfo.passthroughModels ? "Model Aliases" : "Available Models"}
712
+ </h2>
713
+ {renderModelsSection()}
714
+
715
+ </Card>
716
+
717
+ {/* Modals */}
718
+ {providerId === "kiro" ? (
719
+ <KiroOAuthWrapper
720
+ isOpen={showOAuthModal}
721
+ providerInfo={providerInfo}
722
+ onSuccess={handleOAuthSuccess}
723
+ onClose={() => setShowOAuthModal(false)}
724
+ />
725
+ ) : providerId === "cursor" ? (
726
+ <CursorAuthModal
727
+ isOpen={showOAuthModal}
728
+ onSuccess={handleOAuthSuccess}
729
+ onClose={() => setShowOAuthModal(false)}
730
+ />
731
+ ) : (
732
+ <OAuthModal
733
+ isOpen={showOAuthModal}
734
+ provider={providerId}
735
+ providerInfo={providerInfo}
736
+ onSuccess={handleOAuthSuccess}
737
+ onClose={() => setShowOAuthModal(false)}
738
+ />
739
+ )}
740
+ <AddApiKeyModal
741
+ isOpen={showAddApiKeyModal}
742
+ provider={providerId}
743
+ providerName={providerInfo.name}
744
+ isCompatible={isCompatible}
745
+ isAnthropic={isAnthropicCompatible}
746
+ onSave={handleSaveApiKey}
747
+ onClose={() => setShowAddApiKeyModal(false)}
748
+ />
749
+ <EditConnectionModal
750
+ isOpen={showEditModal}
751
+ connection={selectedConnection}
752
+ onSave={handleUpdateConnection}
753
+ onClose={() => setShowEditModal(false)}
754
+ />
755
+ {isCompatible && (
756
+ <EditCompatibleNodeModal
757
+ isOpen={showEditNodeModal}
758
+ node={providerNode}
759
+ onSave={handleUpdateNode}
760
+ onClose={() => setShowEditNodeModal(false)}
761
+ isAnthropic={isAnthropicCompatible}
762
+ />
763
+ )}
764
+ </div>
765
+ );
766
+ }
767
+
768
+ function ModelRow({ model, fullModel, alias, selected, onToggleSelect, copied, onCopy }) {
769
+ return (
770
+ <div className="flex items-center gap-2 px-3 py-2 rounded-lg border border-border hover:bg-sidebar/50">
771
+ <button
772
+ type="button"
773
+ onClick={onToggleSelect}
774
+ className={`p-0.5 rounded ${selected ? "text-primary" : "text-text-muted hover:text-primary"}`}
775
+ title={selected ? "Deselect model" : "Select model"}
776
+ >
777
+ <span className="material-symbols-outlined text-[18px]">
778
+ {selected ? "check_box" : "check_box_outline_blank"}
779
+ </span>
780
+ </button>
781
+ <span className="material-symbols-outlined text-base text-text-muted">smart_toy</span>
782
+ <code className="text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded">{fullModel}</code>
783
+ <button
784
+ onClick={() => onCopy(fullModel, `model-${model.id}`)}
785
+ className="p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary"
786
+ title="Copy model"
787
+ >
788
+ <span className="material-symbols-outlined text-sm">
789
+ {copied === `model-${model.id}` ? "check" : "content_copy"}
790
+ </span>
791
+ </button>
792
+ </div>
793
+ );
794
+ }
795
+
796
+ ModelRow.propTypes = {
797
+ model: PropTypes.shape({
798
+ id: PropTypes.string.isRequired,
799
+ }).isRequired,
800
+ fullModel: PropTypes.string.isRequired,
801
+ alias: PropTypes.string,
802
+ selected: PropTypes.bool,
803
+ onToggleSelect: PropTypes.func,
804
+ copied: PropTypes.string,
805
+ onCopy: PropTypes.func.isRequired,
806
+ };
807
+
808
+ function PassthroughModelsSection({ providerAlias, modelAliases, copied, onCopy, onSetAlias, onDeleteAlias }) {
809
+ const [newModel, setNewModel] = useState("");
810
+ const [adding, setAdding] = useState(false);
811
+
812
+ // Filter aliases for this provider - models are persisted via alias
813
+ const providerAliases = Object.entries(modelAliases).filter(
814
+ ([, model]) => model.startsWith(`${providerAlias}/`)
815
+ );
816
+
817
+ const allModels = providerAliases.map(([alias, fullModel]) => ({
818
+ modelId: fullModel.replace(`${providerAlias}/`, ""),
819
+ fullModel,
820
+ alias,
821
+ }));
822
+
823
+ // Generate default alias from modelId (last part after /)
824
+ const generateDefaultAlias = (modelId) => {
825
+ const parts = modelId.split("/");
826
+ return parts[parts.length - 1];
827
+ };
828
+
829
+ const handleAdd = async () => {
830
+ if (!newModel.trim() || adding) return;
831
+ const modelId = newModel.trim();
832
+ const defaultAlias = generateDefaultAlias(modelId);
833
+
834
+ // Check if alias already exists
835
+ if (modelAliases[defaultAlias]) {
836
+ alert(`Alias "${defaultAlias}" already exists. Please use a different model or edit existing alias.`);
837
+ return;
838
+ }
839
+
840
+ setAdding(true);
841
+ try {
842
+ await onSetAlias(modelId, defaultAlias);
843
+ setNewModel("");
844
+ } catch (error) {
845
+ console.log("Error adding model:", error);
846
+ } finally {
847
+ setAdding(false);
848
+ }
849
+ };
850
+
851
+ return (
852
+ <div className="flex flex-col gap-4">
853
+ <p className="text-sm text-text-muted">
854
+ OpenRouter supports any model. Add models and create aliases for quick access.
855
+ </p>
856
+
857
+ {/* Add new model */}
858
+ <div className="flex items-end gap-2">
859
+ <div className="flex-1">
860
+ <label htmlFor="new-model-input" className="text-xs text-text-muted mb-1 block">Model ID (from OpenRouter)</label>
861
+ <input
862
+ id="new-model-input"
863
+ type="text"
864
+ value={newModel}
865
+ onChange={(e) => setNewModel(e.target.value)}
866
+ onKeyDown={(e) => e.key === "Enter" && handleAdd()}
867
+ placeholder="anthropic/claude-3-opus"
868
+ className="w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"
869
+ />
870
+ </div>
871
+ <Button size="sm" icon="add" onClick={handleAdd} disabled={!newModel.trim() || adding}>
872
+ {adding ? "Adding..." : "Add"}
873
+ </Button>
874
+ </div>
875
+
876
+ {/* Models list */}
877
+ {allModels.length > 0 && (
878
+ <div className="flex flex-col gap-3">
879
+ {allModels.map(({ modelId, fullModel, alias }) => (
880
+ <PassthroughModelRow
881
+ key={fullModel}
882
+ modelId={modelId}
883
+ fullModel={fullModel}
884
+ copied={copied}
885
+ onCopy={onCopy}
886
+ onDeleteAlias={() => onDeleteAlias(alias)}
887
+ />
888
+ ))}
889
+ </div>
890
+ )}
891
+ </div>
892
+ );
893
+ }
894
+
895
+ PassthroughModelsSection.propTypes = {
896
+ providerAlias: PropTypes.string.isRequired,
897
+ modelAliases: PropTypes.object.isRequired,
898
+ copied: PropTypes.string,
899
+ onCopy: PropTypes.func.isRequired,
900
+ onSetAlias: PropTypes.func.isRequired,
901
+ onDeleteAlias: PropTypes.func.isRequired,
902
+ };
903
+
904
+ function PassthroughModelRow({ modelId, fullModel, copied, onCopy, onDeleteAlias }) {
905
+ return (
906
+ <div className="flex items-center gap-3 p-3 rounded-lg border border-border hover:bg-sidebar/50">
907
+ <span className="material-symbols-outlined text-base text-text-muted">smart_toy</span>
908
+
909
+ <div className="flex-1 min-w-0">
910
+ <p className="text-sm font-medium truncate">{modelId}</p>
911
+
912
+ <div className="flex items-center gap-1 mt-1">
913
+ <code className="text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded">{fullModel}</code>
914
+ <button
915
+ onClick={() => onCopy(fullModel, `model-${modelId}`)}
916
+ className="p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary"
917
+ title="Copy model"
918
+ >
919
+ <span className="material-symbols-outlined text-sm">
920
+ {copied === `model-${modelId}` ? "check" : "content_copy"}
921
+ </span>
922
+ </button>
923
+ </div>
924
+ </div>
925
+
926
+ {/* Delete button */}
927
+ <button
928
+ onClick={onDeleteAlias}
929
+ className="p-1 hover:bg-red-50 rounded text-red-500"
930
+ title="Remove model"
931
+ >
932
+ <span className="material-symbols-outlined text-sm">delete</span>
933
+ </button>
934
+ </div>
935
+ );
936
+ }
937
+
938
+ PassthroughModelRow.propTypes = {
939
+ modelId: PropTypes.string.isRequired,
940
+ fullModel: PropTypes.string.isRequired,
941
+ copied: PropTypes.string,
942
+ onCopy: PropTypes.func.isRequired,
943
+ onDeleteAlias: PropTypes.func.isRequired,
944
+ };
945
+
946
+ function CompatibleModelsSection({ providerStorageAlias, providerDisplayAlias, modelAliases, copied, onCopy, onSetAlias, onDeleteAlias, connections, isAnthropic }) {
947
+ const [newModel, setNewModel] = useState("");
948
+ const [adding, setAdding] = useState(false);
949
+ const [importing, setImporting] = useState(false);
950
+
951
+ const providerAliases = Object.entries(modelAliases).filter(
952
+ ([, model]) => model.startsWith(`${providerStorageAlias}/`)
953
+ );
954
+
955
+ const allModels = providerAliases.map(([alias, fullModel]) => ({
956
+ modelId: fullModel.replace(`${providerStorageAlias}/`, ""),
957
+ fullModel,
958
+ alias,
959
+ }));
960
+
961
+ const generateDefaultAlias = (modelId) => {
962
+ const parts = modelId.split("/");
963
+ return parts[parts.length - 1];
964
+ };
965
+
966
+ const resolveAlias = (modelId) => {
967
+ const baseAlias = generateDefaultAlias(modelId);
968
+ if (!modelAliases[baseAlias]) return baseAlias;
969
+ const prefixedAlias = `${providerDisplayAlias}-${baseAlias}`;
970
+ if (!modelAliases[prefixedAlias]) return prefixedAlias;
971
+ return null;
972
+ };
973
+
974
+ const handleAdd = async () => {
975
+ if (!newModel.trim() || adding) return;
976
+ const modelId = newModel.trim();
977
+ const resolvedAlias = resolveAlias(modelId);
978
+ if (!resolvedAlias) {
979
+ alert("All suggested aliases already exist. Please choose a different model or remove conflicting aliases.");
980
+ return;
981
+ }
982
+
983
+ setAdding(true);
984
+ try {
985
+ await onSetAlias(modelId, resolvedAlias, providerStorageAlias);
986
+ setNewModel("");
987
+ } catch (error) {
988
+ console.log("Error adding model:", error);
989
+ } finally {
990
+ setAdding(false);
991
+ }
992
+ };
993
+
994
+ const handleImport = async () => {
995
+ if (importing) return;
996
+ const activeConnection = connections.find((conn) => conn.isActive !== false);
997
+ if (!activeConnection) return;
998
+
999
+ setImporting(true);
1000
+ try {
1001
+ const res = await fetch(`/api/providers/${activeConnection.id}/models`);
1002
+ const data = await res.json();
1003
+ if (!res.ok) {
1004
+ alert(data.error || "Failed to import models");
1005
+ return;
1006
+ }
1007
+ const models = data.models || [];
1008
+ if (models.length === 0) {
1009
+ alert("No models returned from /models.");
1010
+ return;
1011
+ }
1012
+ let importedCount = 0;
1013
+ for (const model of models) {
1014
+ const modelId = model.id || model.name || model.model;
1015
+ if (!modelId) continue;
1016
+ const resolvedAlias = resolveAlias(modelId);
1017
+ if (!resolvedAlias) continue;
1018
+ await onSetAlias(modelId, resolvedAlias, providerStorageAlias);
1019
+ importedCount += 1;
1020
+ }
1021
+ if (importedCount === 0) {
1022
+ alert("No new models were added.");
1023
+ }
1024
+ } catch (error) {
1025
+ console.log("Error importing models:", error);
1026
+ } finally {
1027
+ setImporting(false);
1028
+ }
1029
+ };
1030
+
1031
+ const canImport = connections.some((conn) => conn.isActive !== false);
1032
+
1033
+ return (
1034
+ <div className="flex flex-col gap-4">
1035
+ <p className="text-sm text-text-muted">
1036
+ Add {isAnthropic ? "Anthropic" : "OpenAI"}-compatible models manually or import them from the /models endpoint.
1037
+ </p>
1038
+
1039
+ <div className="flex items-end gap-2 flex-wrap">
1040
+ <div className="flex-1 min-w-[240px]">
1041
+ <label htmlFor="new-compatible-model-input" className="text-xs text-text-muted mb-1 block">Model ID</label>
1042
+ <input
1043
+ id="new-compatible-model-input"
1044
+ type="text"
1045
+ value={newModel}
1046
+ onChange={(e) => setNewModel(e.target.value)}
1047
+ onKeyDown={(e) => e.key === "Enter" && handleAdd()}
1048
+ placeholder={isAnthropic ? "claude-3-opus-20240229" : "gpt-4o"}
1049
+ className="w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"
1050
+ />
1051
+ </div>
1052
+ <Button size="sm" icon="add" onClick={handleAdd} disabled={!newModel.trim() || adding}>
1053
+ {adding ? "Adding..." : "Add"}
1054
+ </Button>
1055
+ <Button size="sm" variant="secondary" icon="download" onClick={handleImport} disabled={!canImport || importing}>
1056
+ {importing ? "Importing..." : "Import from /models"}
1057
+ </Button>
1058
+ </div>
1059
+
1060
+ {!canImport && (
1061
+ <p className="text-xs text-text-muted">
1062
+ Add a connection to enable importing models.
1063
+ </p>
1064
+ )}
1065
+
1066
+ {allModels.length > 0 && (
1067
+ <div className="flex flex-col gap-3">
1068
+ {allModels.map(({ modelId, fullModel, alias }) => (
1069
+ <PassthroughModelRow
1070
+ key={fullModel}
1071
+ modelId={modelId}
1072
+ fullModel={`${providerDisplayAlias}/${modelId}`}
1073
+ copied={copied}
1074
+ onCopy={onCopy}
1075
+ onDeleteAlias={() => onDeleteAlias(alias)}
1076
+ />
1077
+ ))}
1078
+ </div>
1079
+ )}
1080
+ </div>
1081
+ );
1082
+ }
1083
+
1084
+ CompatibleModelsSection.propTypes = {
1085
+ providerStorageAlias: PropTypes.string.isRequired,
1086
+ providerDisplayAlias: PropTypes.string.isRequired,
1087
+ modelAliases: PropTypes.object.isRequired,
1088
+ copied: PropTypes.string,
1089
+ onCopy: PropTypes.func.isRequired,
1090
+ onSetAlias: PropTypes.func.isRequired,
1091
+ onDeleteAlias: PropTypes.func.isRequired,
1092
+ connections: PropTypes.arrayOf(PropTypes.shape({
1093
+ id: PropTypes.string,
1094
+ isActive: PropTypes.bool,
1095
+ })).isRequired,
1096
+ isAnthropic: PropTypes.bool,
1097
+ };
1098
+
1099
+ function CooldownTimer({ until }) {
1100
+ const [remaining, setRemaining] = useState("");
1101
+
1102
+ useEffect(() => {
1103
+ const updateRemaining = () => {
1104
+ const diff = new Date(until).getTime() - Date.now();
1105
+ if (diff <= 0) {
1106
+ setRemaining("");
1107
+ return;
1108
+ }
1109
+ const secs = Math.floor(diff / 1000);
1110
+ if (secs < 60) {
1111
+ setRemaining(`${secs}s`);
1112
+ } else if (secs < 3600) {
1113
+ setRemaining(`${Math.floor(secs / 60)}m ${secs % 60}s`);
1114
+ } else {
1115
+ const hrs = Math.floor(secs / 3600);
1116
+ const mins = Math.floor((secs % 3600) / 60);
1117
+ setRemaining(`${hrs}h ${mins}m`);
1118
+ }
1119
+ };
1120
+
1121
+ updateRemaining();
1122
+ const interval = setInterval(updateRemaining, 1000);
1123
+ return () => clearInterval(interval);
1124
+ }, [until]);
1125
+
1126
+ if (!remaining) return null;
1127
+
1128
+ return (
1129
+ <span className="text-xs text-orange-500 font-mono">
1130
+ ⏱ {remaining}
1131
+ </span>
1132
+ );
1133
+ }
1134
+
1135
+ CooldownTimer.propTypes = {
1136
+ until: PropTypes.string.isRequired,
1137
+ };
1138
+
1139
+ function ConnectionRow({ connection, isOAuth, isFirst, isLast, onMoveUp, onMoveDown, onToggleActive, onEdit, onDelete }) {
1140
+ const displayName = isOAuth
1141
+ ? connection.name || connection.email || connection.displayName || "OAuth Account"
1142
+ : connection.name;
1143
+
1144
+ // Use useState + useEffect for impure Date.now() to avoid calling during render
1145
+ const [isCooldown, setIsCooldown] = useState(false);
1146
+
1147
+ const modelLockUntil = Object.entries(connection)
1148
+ .filter(([k]) => k.startsWith("modelLock_"))
1149
+ .map(([, v]) => v)
1150
+ .filter(v => v && new Date(v).getTime() > Date.now())
1151
+ .sort()[0] || null;
1152
+
1153
+ useEffect(() => {
1154
+ const checkCooldown = () => {
1155
+ const until = Object.entries(connection)
1156
+ .filter(([k]) => k.startsWith("modelLock_"))
1157
+ .map(([, v]) => v)
1158
+ .filter(v => v && new Date(v).getTime() > Date.now())
1159
+ .sort()[0] || null;
1160
+ setIsCooldown(!!until);
1161
+ };
1162
+
1163
+ checkCooldown();
1164
+ const interval = modelLockUntil ? setInterval(checkCooldown, 1000) : null;
1165
+ return () => {
1166
+ if (interval) clearInterval(interval);
1167
+ };
1168
+ }, [modelLockUntil]);
1169
+
1170
+ // Determine effective status (override unavailable if cooldown expired)
1171
+ const effectiveStatus = (connection.testStatus === "unavailable" && !isCooldown)
1172
+ ? "active" // Cooldown expired → treat as active
1173
+ : connection.testStatus;
1174
+
1175
+ const getStatusVariant = () => {
1176
+ if (connection.isActive === false) return "default";
1177
+ if (effectiveStatus === "active" || effectiveStatus === "success") return "success";
1178
+ if (effectiveStatus === "error" || effectiveStatus === "expired" || effectiveStatus === "unavailable") return "error";
1179
+ return "default";
1180
+ };
1181
+
1182
+ return (
1183
+ <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 ${connection.isActive === false ? "opacity-60" : ""}`}>
1184
+ <div className="flex items-center gap-3 flex-1 min-w-0">
1185
+ {/* Priority arrows */}
1186
+ <div className="flex flex-col">
1187
+ <button
1188
+ onClick={onMoveUp}
1189
+ disabled={isFirst}
1190
+ className={`p-0.5 rounded ${isFirst ? "text-text-muted/30 cursor-not-allowed" : "hover:bg-sidebar text-text-muted hover:text-primary"}`}
1191
+ >
1192
+ <span className="material-symbols-outlined text-sm">keyboard_arrow_up</span>
1193
+ </button>
1194
+ <button
1195
+ onClick={onMoveDown}
1196
+ disabled={isLast}
1197
+ className={`p-0.5 rounded ${isLast ? "text-text-muted/30 cursor-not-allowed" : "hover:bg-sidebar text-text-muted hover:text-primary"}`}
1198
+ >
1199
+ <span className="material-symbols-outlined text-sm">keyboard_arrow_down</span>
1200
+ </button>
1201
+ </div>
1202
+ <span className="material-symbols-outlined text-base text-text-muted">
1203
+ {isOAuth ? "lock" : "key"}
1204
+ </span>
1205
+ <div className="flex-1 min-w-0">
1206
+ <p className="text-sm font-medium truncate">{displayName}</p>
1207
+ <div className="flex items-center gap-2 mt-1">
1208
+ <Badge variant={getStatusVariant()} size="sm" dot>
1209
+ {connection.isActive === false ? "disabled" : (effectiveStatus || "Unknown")}
1210
+ </Badge>
1211
+ {isCooldown && connection.isActive !== false && <CooldownTimer until={modelLockUntil} />}
1212
+ {connection.lastError && connection.isActive !== false && (
1213
+ <span className="text-xs text-red-500 truncate max-w-[300px]" title={connection.lastError}>
1214
+ {connection.lastError}
1215
+ </span>
1216
+ )}
1217
+ <span className="text-xs text-text-muted">#{connection.priority}</span>
1218
+ {connection.globalPriority && (
1219
+ <span className="text-xs text-text-muted">Auto: {connection.globalPriority}</span>
1220
+ )}
1221
+ </div>
1222
+ </div>
1223
+ </div>
1224
+ <div className="flex items-center gap-2">
1225
+ <Toggle
1226
+ size="sm"
1227
+ checked={connection.isActive ?? true}
1228
+ onChange={onToggleActive}
1229
+ title={(connection.isActive ?? true) ? "Disable connection" : "Enable connection"}
1230
+ />
1231
+ <div className="flex gap-1 ml-1 opacity-0 group-hover:opacity-100 transition-opacity">
1232
+ <button onClick={onEdit} className="p-2 hover:bg-black/5 dark:hover:bg-white/5 rounded text-text-muted hover:text-primary">
1233
+ <span className="material-symbols-outlined text-[18px]">edit</span>
1234
+ </button>
1235
+ <button onClick={onDelete} className="p-2 hover:bg-red-500/10 rounded text-red-500">
1236
+ <span className="material-symbols-outlined text-[18px]">delete</span>
1237
+ </button>
1238
+ </div>
1239
+ </div>
1240
+ </div>
1241
+ );
1242
+ }
1243
+
1244
+ ConnectionRow.propTypes = {
1245
+ connection: PropTypes.shape({
1246
+ id: PropTypes.string,
1247
+ name: PropTypes.string,
1248
+ email: PropTypes.string,
1249
+ displayName: PropTypes.string,
1250
+ modelLockUntil: PropTypes.string,
1251
+ testStatus: PropTypes.string,
1252
+ isActive: PropTypes.bool,
1253
+ lastError: PropTypes.string,
1254
+ priority: PropTypes.number,
1255
+ globalPriority: PropTypes.number,
1256
+ }).isRequired,
1257
+ isOAuth: PropTypes.bool.isRequired,
1258
+ isFirst: PropTypes.bool.isRequired,
1259
+ isLast: PropTypes.bool.isRequired,
1260
+ onMoveUp: PropTypes.func.isRequired,
1261
+ onMoveDown: PropTypes.func.isRequired,
1262
+ onToggleActive: PropTypes.func.isRequired,
1263
+ onEdit: PropTypes.func.isRequired,
1264
+ onDelete: PropTypes.func.isRequired,
1265
+ };
1266
+
1267
+ function AddApiKeyModal({ isOpen, provider, providerName, isCompatible, isAnthropic, onSave, onClose }) {
1268
+ const [formData, setFormData] = useState({
1269
+ name: "",
1270
+ apiKey: "",
1271
+ priority: 1,
1272
+ });
1273
+ const [validating, setValidating] = useState(false);
1274
+ const [validationResult, setValidationResult] = useState(null);
1275
+ const [saving, setSaving] = useState(false);
1276
+
1277
+ const handleValidate = async () => {
1278
+ setValidating(true);
1279
+ try {
1280
+ const res = await fetch("/api/providers/validate", {
1281
+ method: "POST",
1282
+ headers: { "Content-Type": "application/json" },
1283
+ body: JSON.stringify({ provider, apiKey: formData.apiKey }),
1284
+ });
1285
+ const data = await res.json();
1286
+ setValidationResult(data.valid ? "success" : "failed");
1287
+ } catch {
1288
+ setValidationResult("failed");
1289
+ } finally {
1290
+ setValidating(false);
1291
+ }
1292
+ };
1293
+
1294
+ const handleSubmit = async () => {
1295
+ if (!provider || !formData.apiKey) return;
1296
+
1297
+ setSaving(true);
1298
+ try {
1299
+ let isValid = false;
1300
+ try {
1301
+ setValidating(true);
1302
+ setValidationResult(null);
1303
+ const res = await fetch("/api/providers/validate", {
1304
+ method: "POST",
1305
+ headers: { "Content-Type": "application/json" },
1306
+ body: JSON.stringify({ provider, apiKey: formData.apiKey }),
1307
+ });
1308
+ const data = await res.json();
1309
+ isValid = !!data.valid;
1310
+ setValidationResult(isValid ? "success" : "failed");
1311
+ } catch {
1312
+ setValidationResult("failed");
1313
+ } finally {
1314
+ setValidating(false);
1315
+ }
1316
+
1317
+ await onSave({
1318
+ name: formData.name,
1319
+ apiKey: formData.apiKey,
1320
+ priority: formData.priority,
1321
+ testStatus: isValid ? "active" : "unknown",
1322
+ });
1323
+ } finally {
1324
+ setSaving(false);
1325
+ }
1326
+ };
1327
+
1328
+ if (!provider) return null;
1329
+
1330
+ return (
1331
+ <Modal isOpen={isOpen} title={`Add ${providerName || provider} API Key`} onClose={onClose}>
1332
+ <div className="flex flex-col gap-4">
1333
+ <Input
1334
+ label="Name"
1335
+ value={formData.name}
1336
+ onChange={(e) => setFormData({ ...formData, name: e.target.value })}
1337
+ placeholder="Production Key"
1338
+ />
1339
+ <div className="flex gap-2">
1340
+ <Input
1341
+ label="API Key"
1342
+ type="password"
1343
+ value={formData.apiKey}
1344
+ onChange={(e) => setFormData({ ...formData, apiKey: e.target.value })}
1345
+ className="flex-1"
1346
+ />
1347
+ <div className="pt-6">
1348
+ <Button onClick={handleValidate} disabled={!formData.apiKey || validating || saving} variant="secondary">
1349
+ {validating ? "Checking..." : "Check"}
1350
+ </Button>
1351
+ </div>
1352
+ </div>
1353
+ {validationResult && (
1354
+ <Badge variant={validationResult === "success" ? "success" : "error"}>
1355
+ {validationResult === "success" ? "Valid" : "Invalid"}
1356
+ </Badge>
1357
+ )}
1358
+ {isCompatible && (
1359
+ <p className="text-xs text-text-muted">
1360
+ {isAnthropic
1361
+ ? `Validation checks ${providerName || "Anthropic Compatible"} by verifying the API key.`
1362
+ : `Validation checks ${providerName || "OpenAI Compatible"} via /models on your base URL.`
1363
+ }
1364
+ </p>
1365
+ )}
1366
+ <Input
1367
+ label="Priority"
1368
+ type="number"
1369
+ value={formData.priority}
1370
+ onChange={(e) => setFormData({ ...formData, priority: Number.parseInt(e.target.value) || 1 })}
1371
+ />
1372
+ <div className="flex gap-2">
1373
+ <Button onClick={handleSubmit} fullWidth disabled={!formData.name || !formData.apiKey || saving}>
1374
+ {saving ? "Saving..." : "Save"}
1375
+ </Button>
1376
+ <Button onClick={onClose} variant="ghost" fullWidth>
1377
+ Cancel
1378
+ </Button>
1379
+ </div>
1380
+ </div>
1381
+ </Modal>
1382
+ );
1383
+ }
1384
+
1385
+ AddApiKeyModal.propTypes = {
1386
+ isOpen: PropTypes.bool.isRequired,
1387
+ provider: PropTypes.string,
1388
+ providerName: PropTypes.string,
1389
+ isCompatible: PropTypes.bool,
1390
+ isAnthropic: PropTypes.bool,
1391
+ onSave: PropTypes.func.isRequired,
1392
+ onClose: PropTypes.func.isRequired,
1393
+ };
1394
+
1395
+ function EditConnectionModal({ isOpen, connection, onSave, onClose }) {
1396
+ const [formData, setFormData] = useState({
1397
+ name: "",
1398
+ priority: 1,
1399
+ apiKey: "",
1400
+ });
1401
+ const [testing, setTesting] = useState(false);
1402
+ const [testResult, setTestResult] = useState(null);
1403
+ const [validating, setValidating] = useState(false);
1404
+ const [validationResult, setValidationResult] = useState(null);
1405
+ const [saving, setSaving] = useState(false);
1406
+
1407
+ useEffect(() => {
1408
+ if (connection) {
1409
+ setFormData({
1410
+ name: connection.name || "",
1411
+ priority: connection.priority || 1,
1412
+ apiKey: "",
1413
+ });
1414
+ setTestResult(null);
1415
+ setValidationResult(null);
1416
+ }
1417
+ }, [connection]);
1418
+
1419
+ const handleTest = async () => {
1420
+ if (!connection?.provider) return;
1421
+ setTesting(true);
1422
+ setTestResult(null);
1423
+ try {
1424
+ const res = await fetch(`/api/providers/${connection.id}/test`, { method: "POST" });
1425
+ const data = await res.json();
1426
+ setTestResult(data.valid ? "success" : "failed");
1427
+ } catch {
1428
+ setTestResult("failed");
1429
+ } finally {
1430
+ setTesting(false);
1431
+ }
1432
+ };
1433
+
1434
+ const handleValidate = async () => {
1435
+ if (!connection?.provider || !formData.apiKey) return;
1436
+ setValidating(true);
1437
+ setValidationResult(null);
1438
+ try {
1439
+ const res = await fetch("/api/providers/validate", {
1440
+ method: "POST",
1441
+ headers: { "Content-Type": "application/json" },
1442
+ body: JSON.stringify({ provider: connection.provider, apiKey: formData.apiKey }),
1443
+ });
1444
+ const data = await res.json();
1445
+ setValidationResult(data.valid ? "success" : "failed");
1446
+ } catch {
1447
+ setValidationResult("failed");
1448
+ } finally {
1449
+ setValidating(false);
1450
+ }
1451
+ };
1452
+
1453
+ const handleSubmit = async () => {
1454
+ setSaving(true);
1455
+ try {
1456
+ const updates = { name: formData.name, priority: formData.priority };
1457
+ if (!isOAuth && formData.apiKey) {
1458
+ updates.apiKey = formData.apiKey;
1459
+ let isValid = validationResult === "success";
1460
+ if (!isValid) {
1461
+ try {
1462
+ setValidating(true);
1463
+ setValidationResult(null);
1464
+ const res = await fetch("/api/providers/validate", {
1465
+ method: "POST",
1466
+ headers: { "Content-Type": "application/json" },
1467
+ body: JSON.stringify({ provider: connection.provider, apiKey: formData.apiKey }),
1468
+ });
1469
+ const data = await res.json();
1470
+ isValid = !!data.valid;
1471
+ setValidationResult(isValid ? "success" : "failed");
1472
+ } catch {
1473
+ setValidationResult("failed");
1474
+ } finally {
1475
+ setValidating(false);
1476
+ }
1477
+ }
1478
+ if (isValid) {
1479
+ updates.testStatus = "active";
1480
+ updates.lastError = null;
1481
+ updates.lastErrorAt = null;
1482
+ }
1483
+ }
1484
+ await onSave(updates);
1485
+ } finally {
1486
+ setSaving(false);
1487
+ }
1488
+ };
1489
+
1490
+ if (!connection) return null;
1491
+
1492
+ const isOAuth = connection.authType === "oauth";
1493
+ const isCompatible = isOpenAICompatibleProvider(connection.provider) || isAnthropicCompatibleProvider(connection.provider);
1494
+
1495
+ return (
1496
+ <Modal isOpen={isOpen} title="Edit Connection" onClose={onClose}>
1497
+ <div className="flex flex-col gap-4">
1498
+ <Input
1499
+ label="Name"
1500
+ value={formData.name}
1501
+ onChange={(e) => setFormData({ ...formData, name: e.target.value })}
1502
+ placeholder={isOAuth ? "Account name" : "Production Key"}
1503
+ />
1504
+ {isOAuth && connection.email && (
1505
+ <div className="bg-sidebar/50 p-3 rounded-lg">
1506
+ <p className="text-sm text-text-muted mb-1">Email</p>
1507
+ <p className="font-medium">{connection.email}</p>
1508
+ </div>
1509
+ )}
1510
+ <Input
1511
+ label="Priority"
1512
+ type="number"
1513
+ value={formData.priority}
1514
+ onChange={(e) => setFormData({ ...formData, priority: Number.parseInt(e.target.value) || 1 })}
1515
+ />
1516
+ {!isOAuth && (
1517
+ <>
1518
+ <div className="flex gap-2">
1519
+ <Input
1520
+ label="API Key"
1521
+ type="password"
1522
+ value={formData.apiKey}
1523
+ onChange={(e) => setFormData({ ...formData, apiKey: e.target.value })}
1524
+ placeholder="Enter new API key"
1525
+ hint="Leave blank to keep the current API key."
1526
+ className="flex-1"
1527
+ />
1528
+ <div className="pt-6">
1529
+ <Button onClick={handleValidate} disabled={!formData.apiKey || validating || saving} variant="secondary">
1530
+ {validating ? "Checking..." : "Check"}
1531
+ </Button>
1532
+ </div>
1533
+ </div>
1534
+ {validationResult && (
1535
+ <Badge variant={validationResult === "success" ? "success" : "error"}>
1536
+ {validationResult === "success" ? "Valid" : "Invalid"}
1537
+ </Badge>
1538
+ )}
1539
+ </>
1540
+ )}
1541
+
1542
+ {/* Test Connection */}
1543
+ {!isCompatible && (
1544
+ <div className="flex items-center gap-3">
1545
+ <Button onClick={handleTest} variant="secondary" disabled={testing}>
1546
+ {testing ? "Testing..." : "Test Connection"}
1547
+ </Button>
1548
+ {testResult && (
1549
+ <Badge variant={testResult === "success" ? "success" : "error"}>
1550
+ {testResult === "success" ? "Valid" : "Failed"}
1551
+ </Badge>
1552
+ )}
1553
+ </div>
1554
+ )}
1555
+
1556
+ <div className="flex gap-2">
1557
+ <Button onClick={handleSubmit} fullWidth disabled={saving}>{saving ? "Saving..." : "Save"}</Button>
1558
+ <Button onClick={onClose} variant="ghost" fullWidth>Cancel</Button>
1559
+ </div>
1560
+ </div>
1561
+ </Modal>
1562
+ );
1563
+ }
1564
+
1565
+ EditConnectionModal.propTypes = {
1566
+ isOpen: PropTypes.bool.isRequired,
1567
+ connection: PropTypes.shape({
1568
+ id: PropTypes.string,
1569
+ name: PropTypes.string,
1570
+ email: PropTypes.string,
1571
+ priority: PropTypes.number,
1572
+ authType: PropTypes.string,
1573
+ provider: PropTypes.string,
1574
+ }),
1575
+ onSave: PropTypes.func.isRequired,
1576
+ onClose: PropTypes.func.isRequired,
1577
+ };
1578
+
1579
+ function EditCompatibleNodeModal({ isOpen, node, onSave, onClose, isAnthropic }) {
1580
+ const [formData, setFormData] = useState({
1581
+ name: "",
1582
+ prefix: "",
1583
+ apiType: "chat",
1584
+ baseUrl: "https://api.openai.com/v1",
1585
+ });
1586
+ const [saving, setSaving] = useState(false);
1587
+ const [checkKey, setCheckKey] = useState("");
1588
+ const [validating, setValidating] = useState(false);
1589
+ const [validationResult, setValidationResult] = useState(null);
1590
+
1591
+ useEffect(() => {
1592
+ if (node) {
1593
+ setFormData({
1594
+ name: node.name || "",
1595
+ prefix: node.prefix || "",
1596
+ apiType: node.apiType || "chat",
1597
+ baseUrl: node.baseUrl || (isAnthropic ? "https://api.anthropic.com/v1" : "https://api.openai.com/v1"),
1598
+ });
1599
+ }
1600
+ }, [node, isAnthropic]);
1601
+
1602
+ const apiTypeOptions = [
1603
+ { value: "chat", label: "Chat Completions" },
1604
+ { value: "responses", label: "Responses API" },
1605
+ ];
1606
+
1607
+ const handleSubmit = async () => {
1608
+ if (!formData.name.trim() || !formData.prefix.trim() || !formData.baseUrl.trim()) return;
1609
+ setSaving(true);
1610
+ try {
1611
+ const payload = {
1612
+ name: formData.name,
1613
+ prefix: formData.prefix,
1614
+ baseUrl: formData.baseUrl,
1615
+ };
1616
+ if (!isAnthropic) {
1617
+ payload.apiType = formData.apiType;
1618
+ }
1619
+ await onSave(payload);
1620
+ } finally {
1621
+ setSaving(false);
1622
+ }
1623
+ };
1624
+
1625
+ const handleValidate = async () => {
1626
+ setValidating(true);
1627
+ try {
1628
+ const res = await fetch("/api/provider-nodes/validate", {
1629
+ method: "POST",
1630
+ headers: { "Content-Type": "application/json" },
1631
+ body: JSON.stringify({
1632
+ baseUrl: formData.baseUrl,
1633
+ apiKey: checkKey,
1634
+ type: isAnthropic ? "anthropic-compatible" : "openai-compatible"
1635
+ }),
1636
+ });
1637
+ const data = await res.json();
1638
+ setValidationResult(data.valid ? "success" : "failed");
1639
+ } catch {
1640
+ setValidationResult("failed");
1641
+ } finally {
1642
+ setValidating(false);
1643
+ }
1644
+ };
1645
+
1646
+ if (!node) return null;
1647
+
1648
+ return (
1649
+ <Modal isOpen={isOpen} title={`Edit ${isAnthropic ? "Anthropic" : "OpenAI"} Compatible`} onClose={onClose}>
1650
+ <div className="flex flex-col gap-4">
1651
+ <Input
1652
+ label="Name"
1653
+ value={formData.name}
1654
+ onChange={(e) => setFormData({ ...formData, name: e.target.value })}
1655
+ placeholder={`${isAnthropic ? "Anthropic" : "OpenAI"} Compatible (Prod)`}
1656
+ hint="Required. A friendly label for this node."
1657
+ />
1658
+ <Input
1659
+ label="Prefix"
1660
+ value={formData.prefix}
1661
+ onChange={(e) => setFormData({ ...formData, prefix: e.target.value })}
1662
+ placeholder={isAnthropic ? "ac-prod" : "oc-prod"}
1663
+ hint="Required. Used as the provider prefix for model IDs."
1664
+ />
1665
+ {!isAnthropic && (
1666
+ <Select
1667
+ label="API Type"
1668
+ options={apiTypeOptions}
1669
+ value={formData.apiType}
1670
+ onChange={(e) => setFormData({ ...formData, apiType: e.target.value })}
1671
+ />
1672
+ )}
1673
+ <Input
1674
+ label="Base URL"
1675
+ value={formData.baseUrl}
1676
+ onChange={(e) => setFormData({ ...formData, baseUrl: e.target.value })}
1677
+ placeholder={isAnthropic ? "https://api.anthropic.com/v1" : "https://api.openai.com/v1"}
1678
+ hint={`Use the base URL (ending in /v1) for your ${isAnthropic ? "Anthropic" : "OpenAI"}-compatible API.`}
1679
+ />
1680
+ <div className="flex gap-2">
1681
+ <Input
1682
+ label="API Key (for Check)"
1683
+ type="password"
1684
+ value={checkKey}
1685
+ onChange={(e) => setCheckKey(e.target.value)}
1686
+ className="flex-1"
1687
+ />
1688
+ <div className="pt-6">
1689
+ <Button onClick={handleValidate} disabled={!checkKey || validating || !formData.baseUrl.trim()} variant="secondary">
1690
+ {validating ? "Checking..." : "Check"}
1691
+ </Button>
1692
+ </div>
1693
+ </div>
1694
+ {validationResult && (
1695
+ <Badge variant={validationResult === "success" ? "success" : "error"}>
1696
+ {validationResult === "success" ? "Valid" : "Invalid"}
1697
+ </Badge>
1698
+ )}
1699
+ <div className="flex gap-2">
1700
+ <Button onClick={handleSubmit} fullWidth disabled={!formData.name.trim() || !formData.prefix.trim() || !formData.baseUrl.trim() || saving}>
1701
+ {saving ? "Saving..." : "Save"}
1702
+ </Button>
1703
+ <Button onClick={onClose} variant="ghost" fullWidth>
1704
+ Cancel
1705
+ </Button>
1706
+ </div>
1707
+ </div>
1708
+ </Modal>
1709
+ );
1710
+ }
1711
+
1712
+ EditCompatibleNodeModal.propTypes = {
1713
+ isOpen: PropTypes.bool.isRequired,
1714
+ node: PropTypes.shape({
1715
+ id: PropTypes.string,
1716
+ name: PropTypes.string,
1717
+ prefix: PropTypes.string,
1718
+ apiType: PropTypes.string,
1719
+ baseUrl: PropTypes.string,
1720
+ }),
1721
+ onSave: PropTypes.func.isRequired,
1722
+ onClose: PropTypes.func.isRequired,
1723
+ isAnthropic: PropTypes.bool,
1724
+ };