tokenhop 1.0.0 → 1.0.1

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 (599) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +7 -7
  3. package/app/.next-cli-build/build-manifest.json +3 -3
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/react-loadable-manifest.json +43 -43
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js.nft.json +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page_client-reference-manifest.js +1 -1
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  87. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  95. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  97. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  98. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  99. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  100. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
  101. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  102. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/cli-tool-settings/[toolId]/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tool-settings/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  116. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  118. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  121. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  123. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +2 -2
  125. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  127. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  135. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js +2 -2
  137. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  143. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +3 -3
  145. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  149. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  151. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js +1 -1
  153. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  155. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  159. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/gateway/status/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/home/live-routes/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/home/quota/route.js +1 -1
  170. package/app/.next-cli-build/server/app/api/home/quota/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/home/summary/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  180. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  204. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
  216. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  224. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  234. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/settings/config/export/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/settings/config/import/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/settings/config/import/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  258. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/settings/environment/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/shell/savings-milestone/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/shell/summary/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/shell/summary/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  271. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  275. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  277. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  285. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/usage/last-activity/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/usage/savings/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  304. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  306. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  308. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  309. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  310. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  311. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  319. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  321. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/search/route.js +2 -2
  332. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  339. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
  340. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  341. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  342. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  343. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  344. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  345. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  346. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  347. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  349. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  351. package/app/.next-cli-build/server/app/callback.html +1 -1
  352. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  353. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  354. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
  356. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
  357. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +10 -10
  358. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +10 -10
  359. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +10 -10
  360. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  361. package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
  362. package/app/.next-cli-build/server/app/dashboard/combos.rsc +10 -10
  363. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +10 -10
  364. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +10 -10
  365. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  367. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  368. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
  369. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  370. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  371. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
  372. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +10 -10
  373. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +10 -10
  374. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +10 -10
  375. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/media-providers.html +1 -1
  377. package/app/.next-cli-build/server/app/dashboard/media-providers.rsc +9 -9
  378. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/__PAGE__.segment.rsc +9 -9
  379. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_full.segment.rsc +9 -9
  380. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_tree.segment.rsc +1 -1
  381. package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
  382. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +10 -10
  383. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +10 -10
  384. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +10 -10
  385. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  387. package/app/.next-cli-build/server/app/dashboard/profile.rsc +9 -9
  388. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +9 -9
  389. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +9 -9
  390. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  391. package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
  392. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +10 -10
  393. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +10 -10
  394. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +10 -10
  395. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  396. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
  397. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +9 -9
  398. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +9 -9
  399. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +9 -9
  400. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  401. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
  402. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +9 -9
  403. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +9 -9
  404. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +9 -9
  405. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  406. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  407. package/app/.next-cli-build/server/app/dashboard/quota.rsc +10 -10
  408. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +10 -10
  409. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +10 -10
  410. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  411. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  412. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  413. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  415. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  416. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  417. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  418. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
  419. package/app/.next-cli-build/server/app/dashboard/settings.html +2 -2
  420. package/app/.next-cli-build/server/app/dashboard/settings.rsc +10 -10
  421. package/app/.next-cli-build/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +10 -10
  422. package/app/.next-cli-build/server/app/dashboard/settings.segments/_full.segment.rsc +10 -10
  423. package/app/.next-cli-build/server/app/dashboard/settings.segments/_tree.segment.rsc +1 -1
  424. package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
  425. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  426. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +7 -7
  427. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  428. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  429. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +10 -10
  431. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +10 -10
  432. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +10 -10
  433. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  434. package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
  435. package/app/.next-cli-build/server/app/dashboard/translator.rsc +10 -10
  436. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +10 -10
  437. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +10 -10
  438. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  439. package/app/.next-cli-build/server/app/dashboard/ui-kit.html +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/ui-kit.rsc +9 -9
  441. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/!KGRhc2hib2FyZCk/dashboard/ui-kit/__PAGE__.segment.rsc +9 -9
  442. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_full.segment.rsc +9 -9
  443. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_tree.segment.rsc +1 -1
  444. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  445. package/app/.next-cli-build/server/app/dashboard/usage.rsc +10 -10
  446. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +10 -10
  447. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +10 -10
  448. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  449. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  450. package/app/.next-cli-build/server/app/dashboard.rsc +10 -10
  451. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +10 -10
  452. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +10 -10
  453. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  454. package/app/.next-cli-build/server/app/index.html +1 -1
  455. package/app/.next-cli-build/server/app/index.rsc +4 -4
  456. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  457. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  458. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  459. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  460. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  461. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  462. package/app/.next-cli-build/server/app/landing.html +1 -1
  463. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  464. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  465. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  466. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
  467. package/app/.next-cli-build/server/app/login/page.js +1 -1
  468. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  469. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  470. package/app/.next-cli-build/server/app/login.html +1 -1
  471. package/app/.next-cli-build/server/app/login.rsc +4 -4
  472. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  473. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  474. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  475. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  476. package/app/.next-cli-build/server/app/page.js +1 -1
  477. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  478. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  479. package/app/.next-cli-build/server/app/skills/[...slug]/route.js.nft.json +1 -1
  480. package/app/.next-cli-build/server/app-paths-manifest.json +7 -7
  481. package/app/.next-cli-build/server/chunks/1152.js +1 -1
  482. package/app/.next-cli-build/server/chunks/1336.js +1 -1
  483. package/app/.next-cli-build/server/chunks/1432.js +1 -1
  484. package/app/.next-cli-build/server/chunks/1533.js +1 -1
  485. package/app/.next-cli-build/server/chunks/1764.js +1 -1
  486. package/app/.next-cli-build/server/chunks/1854.js +1 -0
  487. package/app/.next-cli-build/server/chunks/2380.js +7 -7
  488. package/app/.next-cli-build/server/chunks/24.js +1 -1
  489. package/app/.next-cli-build/server/chunks/2460.js +1 -1
  490. package/app/.next-cli-build/server/chunks/2592.js +1 -1
  491. package/app/.next-cli-build/server/chunks/318.js +10 -9
  492. package/app/.next-cli-build/server/chunks/3558.js +1 -1
  493. package/app/.next-cli-build/server/chunks/3593.js +1 -1
  494. package/app/.next-cli-build/server/chunks/3676.js +1 -1
  495. package/app/.next-cli-build/server/chunks/368.js +1 -0
  496. package/app/.next-cli-build/server/chunks/3919.js +1 -1
  497. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  498. package/app/.next-cli-build/server/chunks/4037.js +1 -1
  499. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  500. package/app/.next-cli-build/server/chunks/4125.js +1 -1
  501. package/app/.next-cli-build/server/chunks/4199.js +1 -1
  502. package/app/.next-cli-build/server/chunks/4334.js +1 -1
  503. package/app/.next-cli-build/server/chunks/4406.js +2 -2
  504. package/app/.next-cli-build/server/chunks/4521.js +1 -1
  505. package/app/.next-cli-build/server/chunks/4730.js +1 -1
  506. package/app/.next-cli-build/server/chunks/4780.js +1 -1
  507. package/app/.next-cli-build/server/chunks/4903.js +1 -0
  508. package/app/.next-cli-build/server/chunks/5055.js +1 -0
  509. package/app/.next-cli-build/server/chunks/5260.js +1 -0
  510. package/app/.next-cli-build/server/chunks/5335.js +1 -0
  511. package/app/.next-cli-build/server/chunks/5765.js +1 -0
  512. package/app/.next-cli-build/server/chunks/5827.js +1 -0
  513. package/app/.next-cli-build/server/chunks/6000.js +1 -0
  514. package/app/.next-cli-build/server/chunks/620.js +1 -0
  515. package/app/.next-cli-build/server/chunks/6252.js +1 -1
  516. package/app/.next-cli-build/server/chunks/6328.js +1 -0
  517. package/app/.next-cli-build/server/chunks/6403.js +1 -0
  518. package/app/.next-cli-build/server/chunks/6496.js +1 -1
  519. package/app/.next-cli-build/server/chunks/6565.js +1 -0
  520. package/app/.next-cli-build/server/chunks/6734.js +1 -1
  521. package/app/.next-cli-build/server/chunks/7211.js +1 -1
  522. package/app/.next-cli-build/server/chunks/7616.js +1 -1
  523. package/app/.next-cli-build/server/chunks/7716.js +1 -1
  524. package/app/.next-cli-build/server/chunks/7819.js +1 -1
  525. package/app/.next-cli-build/server/chunks/7828.js +1 -1
  526. package/app/.next-cli-build/server/chunks/7901.js +1 -1
  527. package/app/.next-cli-build/server/chunks/8171.js +1 -1
  528. package/app/.next-cli-build/server/chunks/8255.js +1 -1
  529. package/app/.next-cli-build/server/chunks/8372.js +1 -1
  530. package/app/.next-cli-build/server/chunks/8416.js +1 -1
  531. package/app/.next-cli-build/server/chunks/8895.js +12 -12
  532. package/app/.next-cli-build/server/chunks/8988.js +1 -0
  533. package/app/.next-cli-build/server/chunks/9219.js +1 -0
  534. package/app/.next-cli-build/server/chunks/9243.js +1 -0
  535. package/app/.next-cli-build/server/chunks/9326.js +1 -0
  536. package/app/.next-cli-build/server/chunks/9343.js +1 -1
  537. package/app/.next-cli-build/server/chunks/9489.js +3 -0
  538. package/app/.next-cli-build/server/chunks/9578.js +1 -1
  539. package/app/.next-cli-build/server/chunks/9594.js +1 -0
  540. package/app/.next-cli-build/server/chunks/965.js +1 -1
  541. package/app/.next-cli-build/server/chunks/9899.js +1 -1
  542. package/app/.next-cli-build/server/instrumentation.js +1 -1
  543. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  544. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  545. package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
  546. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  547. package/app/.next-cli-build/server/pages/404.html +1 -1
  548. package/app/.next-cli-build/server/pages/500.html +1 -1
  549. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  550. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  551. package/app/.next-cli-build/static/chunks/{198-145d0ed2ec3c54f5.js → 198-0c7f5eadfd257db1.js} +1 -1
  552. package/app/.next-cli-build/static/chunks/{3670-e7a22341025498f8.js → 3670-90f5cd325f460eb5.js} +1 -1
  553. package/app/.next-cli-build/static/chunks/5014-a5d960f4c6bc6297.js +1 -0
  554. package/app/.next-cli-build/static/chunks/{6174.18e2c57e892d721a.js → 6174.f1da2912aec81c15.js} +1 -1
  555. package/app/.next-cli-build/static/chunks/6448-71a8c2ac8d9ecc09.js +1 -0
  556. package/app/.next-cli-build/static/chunks/7899-83edd7bbf1a98c4a.js +1 -0
  557. package/app/.next-cli-build/static/chunks/8105-bdd81b911fed8537.js +1 -0
  558. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-8147ae8fa9c04381.js → page-42bfc760fbea3b96.js} +1 -1
  559. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-9cbf62f78701882a.js → page-084fc21b1dbae00d.js} +1 -1
  560. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-5f91e148400a241b.js → page-59ee0b412f972940.js} +3 -3
  561. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-dac4ab98fc595054.js → page-de53f51d191eec46.js} +1 -1
  562. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-463f9fa33be9426a.js +1 -0
  563. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-06f4e52ee3b63f82.js → page-243d3da0a2c6cbe9.js} +1 -1
  564. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ui-kit/{page-6c982cc50b6af101.js → page-998f8c5a36dac961.js} +1 -1
  565. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-923f864ec0be0fc8.js +1 -0
  566. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-dd9d1e49b2f69197.js → layout-96ebd2b46f1f8d39.js} +1 -1
  567. package/app/.next-cli-build/static/chunks/app/landing/{page-02b7bfebd65c41f1.js → page-bcaea5febe1c68c0.js} +1 -1
  568. package/app/.next-cli-build/static/chunks/webpack-8693ccf029e9af63.js +1 -0
  569. package/app/custom-server.js +0 -37
  570. package/app/package.json +1 -1
  571. package/app/src/lib/db/adapters/sqljsAdapter.js +39 -4
  572. package/app/src/lib/oauth/services/xai.js +19 -12
  573. package/app/src/shared/services/quotaAutoPing.js +43 -8
  574. package/app/src/shared/services/quotaSnapshotPoller.js +2 -1
  575. package/app/src/sse/services/backgroundTokenRefresh.js +13 -1
  576. package/package.json +1 -1
  577. package/src/cli/menus/combos.js +3 -1
  578. package/app/.next-cli-build/server/chunks/1026.js +0 -1
  579. package/app/.next-cli-build/server/chunks/2384.js +0 -1
  580. package/app/.next-cli-build/server/chunks/3093.js +0 -1
  581. package/app/.next-cli-build/server/chunks/331.js +0 -1
  582. package/app/.next-cli-build/server/chunks/3414.js +0 -1
  583. package/app/.next-cli-build/server/chunks/3586.js +0 -1
  584. package/app/.next-cli-build/server/chunks/4278.js +0 -1
  585. package/app/.next-cli-build/server/chunks/6158.js +0 -1
  586. package/app/.next-cli-build/server/chunks/6354.js +0 -1
  587. package/app/.next-cli-build/server/chunks/6769.js +0 -1
  588. package/app/.next-cli-build/server/chunks/7261.js +0 -1
  589. package/app/.next-cli-build/server/chunks/8635.js +0 -3
  590. package/app/.next-cli-build/server/chunks/994.js +0 -1
  591. package/app/.next-cli-build/static/chunks/5014-a441cde708542153.js +0 -1
  592. package/app/.next-cli-build/static/chunks/6448-4eabf683083596e6.js +0 -1
  593. package/app/.next-cli-build/static/chunks/7899-e6a70cb9d3684f7f.js +0 -1
  594. package/app/.next-cli-build/static/chunks/8105-5c7e7c73b4bd532d.js +0 -1
  595. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-9fadf2c38665c20c.js +0 -1
  596. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-7571538830147099.js +0 -1
  597. package/app/.next-cli-build/static/chunks/webpack-187fa25c98ba99f3.js +0 -1
  598. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → J4xdfHpBUAMOCO5dsemSj}/_buildManifest.js +0 -0
  599. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → J4xdfHpBUAMOCO5dsemSj}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/landing/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"4823":{"*":{"id":"50585","name":"*","chunks":[],"async":false}},"6587":{"*":{"id":"51175","name":"*","chunks":[],"async":false}},"9911":{"*":{"id":"54579","name":"*","chunks":[],"async":false}},"10185":{"*":{"id":"67635","name":"*","chunks":[],"async":false}},"11910":{"*":{"id":"83552","name":"*","chunks":[],"async":false}},"15615":{"*":{"id":"14731","name":"*","chunks":[],"async":false}},"15729":{"*":{"id":"21951","name":"*","chunks":[],"async":false}},"16144":{"*":{"id":"40410","name":"*","chunks":[],"async":false}},"16369":{"*":{"id":"22811","name":"*","chunks":[],"async":false}},"19021":{"*":{"id":"40639","name":"*","chunks":[],"async":false}},"19123":{"*":{"id":"24279","name":"*","chunks":[],"async":false}},"20446":{"*":{"id":"25994","name":"*","chunks":[],"async":false}},"21110":{"*":{"id":"19308","name":"*","chunks":[],"async":false}},"21341":{"*":{"id":"86461","name":"*","chunks":[],"async":false}},"21931":{"*":{"id":"267","name":"*","chunks":[],"async":false}},"22577":{"*":{"id":"27737","name":"*","chunks":[],"async":false}},"23936":{"*":{"id":"79488","name":"*","chunks":[],"async":false}},"24597":{"*":{"id":"86817","name":"*","chunks":[],"async":false}},"25086":{"*":{"id":"74812","name":"*","chunks":[],"async":false}},"25908":{"*":{"id":"47392","name":"*","chunks":[],"async":false}},"26506":{"*":{"id":"38120","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"27132":{"*":{"id":"27558","name":"*","chunks":[],"async":false}},"28058":{"*":{"id":"20084","name":"*","chunks":[],"async":false}},"28067":{"*":{"id":"91099","name":"*","chunks":[],"async":false}},"28164":{"*":{"id":"28304","name":"*","chunks":[],"async":false}},"28815":{"*":{"id":"39645","name":"*","chunks":[],"async":false}},"29155":{"*":{"id":"516","name":"*","chunks":[],"async":false}},"29366":{"*":{"id":"38930","name":"*","chunks":[],"async":false}},"29480":{"*":{"id":"59285","name":"*","chunks":[],"async":false}},"29499":{"*":{"id":"40435","name":"*","chunks":[],"async":false}},"29678":{"*":{"id":"1519","name":"*","chunks":[],"async":false}},"30815":{"*":{"id":"51109","name":"*","chunks":[],"async":false}},"32612":{"*":{"id":"65353","name":"*","chunks":[],"async":false}},"34070":{"*":{"id":"18598","name":"*","chunks":[],"async":false}},"34912":{"*":{"id":"87366","name":"*","chunks":[],"async":false}},"37894":{"*":{"id":"49211","name":"*","chunks":[],"async":false}},"38578":{"*":{"id":"29832","name":"*","chunks":[],"async":false}},"38587":{"*":{"id":"53845","name":"*","chunks":[],"async":false}},"38794":{"*":{"id":"50366","name":"*","chunks":[],"async":false}},"40684":{"*":{"id":"24622","name":"*","chunks":[],"async":false}},"41392":{"*":{"id":"77547","name":"*","chunks":[],"async":false}},"42266":{"*":{"id":"74008","name":"*","chunks":[],"async":false}},"42586":{"*":{"id":"21939","name":"*","chunks":[],"async":false}},"42755":{"*":{"id":"19415","name":"*","chunks":[],"async":false}},"44394":{"*":{"id":"81284","name":"*","chunks":[],"async":false}},"44807":{"*":{"id":"75379","name":"*","chunks":[],"async":false}},"44863":{"*":{"id":"65181","name":"*","chunks":[],"async":false}},"45027":{"*":{"id":"50155","name":"*","chunks":[],"async":false}},"45455":{"*":{"id":"62727","name":"*","chunks":[],"async":false}},"46318":{"*":{"id":"939","name":"*","chunks":[],"async":false}},"46791":{"*":{"id":"83521","name":"*","chunks":[],"async":false}},"47701":{"*":{"id":"40082","name":"*","chunks":[],"async":false}},"47928":{"*":{"id":"24328","name":"*","chunks":[],"async":false}},"49864":{"*":{"id":"15247","name":"*","chunks":[],"async":false}},"50239":{"*":{"id":"70135","name":"*","chunks":[],"async":false}},"50611":{"*":{"id":"65365","name":"*","chunks":[],"async":false}},"50744":{"*":{"id":"3090","name":"*","chunks":[],"async":false}},"51825":{"*":{"id":"11633","name":"*","chunks":[],"async":false}},"52024":{"*":{"id":"44928","name":"*","chunks":[],"async":false}},"52789":{"*":{"id":"23155","name":"*","chunks":[],"async":false}},"53655":{"*":{"id":"37661","name":"*","chunks":[],"async":false}},"56006":{"*":{"id":"216","name":"*","chunks":[],"async":false}},"56061":{"*":{"id":"75171","name":"*","chunks":[],"async":false}},"56071":{"*":{"id":"78197","name":"*","chunks":[],"async":false}},"56349":{"*":{"id":"35111","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"58897":{"*":{"id":"41489","name":"*","chunks":[],"async":false}},"59884":{"*":{"id":"19598","name":"*","chunks":[],"async":false}},"61002":{"*":{"id":"1582","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"61640":{"*":{"id":"69814","name":"*","chunks":[],"async":false}},"62899":{"*":{"id":"5291","name":"*","chunks":[],"async":false}},"64371":{"*":{"id":"33597","name":"*","chunks":[],"async":false}},"64561":{"*":{"id":"61377","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"67025":{"*":{"id":"9622","name":"*","chunks":[],"async":false}},"71088":{"*":{"id":"16316","name":"*","chunks":[],"async":false}},"71252":{"*":{"id":"94248","name":"*","chunks":[],"async":false}},"71470":{"*":{"id":"96558","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"75228":{"*":{"id":"50692","name":"*","chunks":[],"async":false}},"77671":{"*":{"id":"73655","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"80752":{"*":{"id":"3236","name":"*","chunks":[],"async":false}},"81127":{"*":{"id":"95145","name":"*","chunks":[],"async":false}},"82534":{"*":{"id":"36882","name":"*","chunks":[],"async":false}},"84588":{"*":{"id":"17660","name":"*","chunks":[],"async":false}},"85309":{"*":{"id":"29499","name":"*","chunks":[],"async":false}},"86465":{"*":{"id":"6011","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}},"91348":{"*":{"id":"97968","name":"*","chunks":[],"async":false}},"92542":{"*":{"id":"99070","name":"*","chunks":[],"async":false}},"92622":{"*":{"id":"42196","name":"*","chunks":[],"async":false}},"93921":{"*":{"id":"63069","name":"*","chunks":[],"async":false}},"94230":{"*":{"id":"56110","name":"*","chunks":[],"async":false}},"94238":{"*":{"id":"91057","name":"*","chunks":[],"async":false}},"94535":{"*":{"id":"27107","name":"*","chunks":[],"async":false}},"94635":{"*":{"id":"5211","name":"*","chunks":[],"async":false}},"95088":{"*":{"id":"43182","name":"*","chunks":[],"async":false}},"96238":{"*":{"id":"64521","name":"*","chunks":[],"async":false}},"96748":{"*":{"id":"67738","name":"*","chunks":[],"async":false}},"96975":{"*":{"id":"83035","name":"*","chunks":[],"async":false}},"97515":{"*":{"id":"38023","name":"*","chunks":[],"async":false}},"97556":{"*":{"id":"54510","name":"*","chunks":[],"async":false}},"97677":{"*":{"id":"32971","name":"*","chunks":[],"async":false}},"98542":{"*":{"id":"95514","name":"*","chunks":[],"async":false}},"98582":{"*":{"id":"27444","name":"*","chunks":[],"async":false}},"99312":{"*":{"id":"26584","name":"*","chunks":[],"async":false}},"99380":{"*":{"id":"31023","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"Bricolage_Grotesque\",\"arguments\":[{\"subsets\":[\"latin\",\"latin-ext\"],\"display\":\"swap\",\"variable\":\"--font-bricolage\"}],\"variableName\":\"bricolage\"}":{"id":44735,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"Geist\",\"arguments\":[{\"subsets\":[\"latin\",\"latin-ext\"],\"display\":\"swap\",\"variable\":\"--font-geist\"}],\"variableName\":\"geist\"}":{"id":61837,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"Geist_Mono\",\"arguments\":[{\"subsets\":[\"latin\",\"latin-ext\"],\"display\":\"swap\",\"variable\":\"--font-geist-mono\"}],\"variableName\":\"geistMono\"}":{"id":42654,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/local/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"\",\"arguments\":[{\"src\":\"./fonts/material-symbols-subset.woff2\",\"display\":\"block\",\"variable\":\"--font-icons\",\"adjustFontFallback\":false}],\"variableName\":\"materialSymbols\"}":{"id":29344,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/globals.css":{"id":51743,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/i18n/RuntimeI18nProvider.js":{"id":94635,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/DensityApplier.js":{"id":24597,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ThemeProvider.js":{"id":21110,"name":"*","chunks":["3670","static/chunks/3670-e7a22341025498f8.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/callback/page.js":{"id":59884,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/dashboard/settings/pricing/page.js":{"id":38578,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/landing/page.js":{"id":42586,"name":"*","chunks":["1610","static/chunks/1610-54cdd36a7d983e62.js","2903","static/chunks/2903-5612a657f163e2fe.js","7018","static/chunks/app/landing/page-02b7bfebd65c41f1.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/login/page.js":{"id":97515,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/layouts/DashboardLayout.js":{"id":22577,"name":"*","chunks":["1610","static/chunks/1610-54cdd36a7d983e62.js","4808","static/chunks/4808-27b555af738dbe19.js","9671","static/chunks/9671-13bf0a1dd082ad39.js","2903","static/chunks/2903-5612a657f163e2fe.js","2577","static/chunks/2577-fc8581b39b97c9e7.js","9305","static/chunks/app/(dashboard)/layout-dd9d1e49b2f69197.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/error.js":{"id":44394,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Loading.js":{"id":25086,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Button.js":{"id":92542,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/EmptyState.js":{"id":99312,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.js":{"id":41392,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.js":{"id":85309,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.js":{"id":75228,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js":{"id":50239,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/mitm/MitmPageClient.js":{"id":52789,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/home/HomePageClient.js":{"id":32612,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/AddCustomEmbeddingModal.js":{"id":96748,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Badge.js":{"id":56061,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Callout.js":{"id":56006,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CapacityBadges.js":{"id":29366,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Card.js":{"id":84588,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CardLink.js":{"id":28164,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ChangelogModal.js":{"id":97556,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Checkbox.js":{"id":9911,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ComboFormModal.js":{"id":45455,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CommandPalette.js":{"id":82534,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CommandPaletteProvider.js":{"id":42755,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CommandPaletteTrigger.js":{"id":26506,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CopyField.js":{"id":10185,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CopyStatus.js":{"id":58897,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CountUp.js":{"id":29155,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CursorAuthModal.js":{"id":30815,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Drawer.js":{"id":29499,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/EditConnectionModal.js":{"id":71252,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Field.js":{"id":98582,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/GatewayStatusCard.js":{"id":53655,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/GitLabAuthModal.js":{"id":95088,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Header.js":{"id":29480,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/HeaderMenu.js":{"id":80752,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/IconButton.js":{"id":6587,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/IFlowCookieModal.js":{"id":23936,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Input.js":{"id":11910,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Kbd.js":{"id":15729,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/KiroAuthModal.js":{"id":46318,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/KiroOAuthWrapper.js":{"id":62899,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/KiroSocialOAuthModal.js":{"id":94230,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/LanguageSwitcher.js":{"id":21931,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ManualConfigModal.js":{"id":28815,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/McpMarketplaceModal.js":{"id":28058,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Menu.js":{"id":93921,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Meter.js":{"id":44863,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Modal.js":{"id":81127,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ModelChip.js":{"id":86465,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ModelSelectModal.js":{"id":96238,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/NoAuthProxyCard.js":{"id":4823,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/NumberStepper.js":{"id":61640,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/OAuthModal.js":{"id":91348,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/PeriodControl.js":{"id":34912,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Popover.js":{"id":50611,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ProviderInfoCard.js":{"id":51825,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ProviderTile.js":{"id":96975,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/QuietPeriod.js":{"id":46791,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SectionCard.js":{"id":56071,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SegmentedControl.js":{"id":28067,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Select.js":{"id":99380,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SettingRow.js":{"id":61002,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Sidebar.js":{"id":92622,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SidebarNav.js":{"id":44807,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SidebarUserRow.js":{"id":45027,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/StateViews.js":{"id":77671,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/StatTile.js":{"id":25908,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/StatusPill.js":{"id":19123,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Tabs.js":{"id":20446,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Terminal.js":{"id":38794,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Textarea.js":{"id":52024,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ThemeToggle.js":{"id":38587,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Toggle.js":{"id":98542,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ToolbarSearch.js":{"id":64371,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Tooltip.js":{"id":97677,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/UnitInput.js":{"id":50744,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/XiaomiMimoAuthModal.js":{"id":40684,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/profile/page.js":{"id":64561,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/providers/new/page.js":{"id":15615,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/pxpipe/PxpipeClient.js":{"id":71470,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/quota/QuotaPageClient.js":{"id":19021,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/settings/page.js":{"id":27132,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/skills/SkillsPageClient.js":{"id":37894,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/token-saver/TokenSaverPageClient.js":{"id":29678,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/translator/page.js":{"id":49864,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/ui-kit/KitClient.js":{"id":21341,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/usage/page.js":{"id":16369,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/layout.js":{"id":34070,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/[kind]/page.js":{"id":16144,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js":{"id":67025,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/web/page.js":{"id":71088,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/combos/CombosPageClient.js":{"id":47701,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.js":{"id":42266,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/providers/detail/ProviderDetailPage.js":{"id":94535,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/providers/ProvidersListShell.js":{"id":47928,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js":{"id":94238,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/proxy-pools/page.js":{"id":56349,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/tokenhop/tokenhop/src/":[],"/home/runner/work/tokenhop/tokenhop/src/app/layout":[{"inlined":false,"path":"static/css/9f0b95a0d0bc5e51.css"}],"/home/runner/work/tokenhop/tokenhop/src/app/page":[],"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/layout":[],"/home/runner/work/tokenhop/tokenhop/src/app/landing/page":[]},"rscModuleMapping":{"4823":{"*":{"id":"5843","name":"*","chunks":[],"async":false}},"6587":{"*":{"id":"8229","name":"*","chunks":[],"async":false}},"9911":{"*":{"id":"71189","name":"*","chunks":[],"async":false}},"10185":{"*":{"id":"98337","name":"*","chunks":[],"async":false}},"11910":{"*":{"id":"71230","name":"*","chunks":[],"async":false}},"15615":{"*":{"id":"24885","name":"*","chunks":[],"async":false}},"15729":{"*":{"id":"34465","name":"*","chunks":[],"async":false}},"16144":{"*":{"id":"6452","name":"*","chunks":[],"async":false}},"16369":{"*":{"id":"87149","name":"*","chunks":[],"async":false}},"19021":{"*":{"id":"50119","name":"*","chunks":[],"async":false}},"19123":{"*":{"id":"8653","name":"*","chunks":[],"async":false}},"20446":{"*":{"id":"83960","name":"*","chunks":[],"async":false}},"21110":{"*":{"id":"89886","name":"*","chunks":[],"async":false}},"21341":{"*":{"id":"53405","name":"*","chunks":[],"async":false}},"21931":{"*":{"id":"45205","name":"*","chunks":[],"async":false}},"22577":{"*":{"id":"61780","name":"*","chunks":[],"async":false}},"23936":{"*":{"id":"80342","name":"*","chunks":[],"async":false}},"24597":{"*":{"id":"20355","name":"*","chunks":[],"async":false}},"25086":{"*":{"id":"92082","name":"*","chunks":[],"async":false}},"25908":{"*":{"id":"50650","name":"*","chunks":[],"async":false}},"26506":{"*":{"id":"62870","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"27132":{"*":{"id":"74669","name":"*","chunks":[],"async":false}},"28058":{"*":{"id":"962","name":"*","chunks":[],"async":false}},"28067":{"*":{"id":"54065","name":"*","chunks":[],"async":false}},"28164":{"*":{"id":"52734","name":"*","chunks":[],"async":false}},"28815":{"*":{"id":"70603","name":"*","chunks":[],"async":false}},"29155":{"*":{"id":"66020","name":"*","chunks":[],"async":false}},"29366":{"*":{"id":"4996","name":"*","chunks":[],"async":false}},"29480":{"*":{"id":"92669","name":"*","chunks":[],"async":false}},"29499":{"*":{"id":"24069","name":"*","chunks":[],"async":false}},"29678":{"*":{"id":"84966","name":"*","chunks":[],"async":false}},"30815":{"*":{"id":"40167","name":"*","chunks":[],"async":false}},"32612":{"*":{"id":"77539","name":"*","chunks":[],"async":false}},"34070":{"*":{"id":"11868","name":"*","chunks":[],"async":false}},"34912":{"*":{"id":"92252","name":"*","chunks":[],"async":false}},"37894":{"*":{"id":"97473","name":"*","chunks":[],"async":false}},"38578":{"*":{"id":"93870","name":"*","chunks":[],"async":false}},"38587":{"*":{"id":"40515","name":"*","chunks":[],"async":false}},"38794":{"*":{"id":"26252","name":"*","chunks":[],"async":false}},"40684":{"*":{"id":"18060","name":"*","chunks":[],"async":false}},"41392":{"*":{"id":"79286","name":"*","chunks":[],"async":false}},"42266":{"*":{"id":"99259","name":"*","chunks":[],"async":false}},"42586":{"*":{"id":"852","name":"*","chunks":[],"async":false}},"42755":{"*":{"id":"19489","name":"*","chunks":[],"async":false}},"44394":{"*":{"id":"79346","name":"*","chunks":[],"async":false}},"44807":{"*":{"id":"66285","name":"*","chunks":[],"async":false}},"44863":{"*":{"id":"66915","name":"*","chunks":[],"async":false}},"45027":{"*":{"id":"32537","name":"*","chunks":[],"async":false}},"45455":{"*":{"id":"20493","name":"*","chunks":[],"async":false}},"46318":{"*":{"id":"82448","name":"*","chunks":[],"async":false}},"46791":{"*":{"id":"52819","name":"*","chunks":[],"async":false}},"47701":{"*":{"id":"86051","name":"*","chunks":[],"async":false}},"47928":{"*":{"id":"57553","name":"*","chunks":[],"async":false}},"49864":{"*":{"id":"38308","name":"*","chunks":[],"async":false}},"50239":{"*":{"id":"51747","name":"*","chunks":[],"async":false}},"50611":{"*":{"id":"78903","name":"*","chunks":[],"async":false}},"50744":{"*":{"id":"8604","name":"*","chunks":[],"async":false}},"51743":{"*":{"id":"61135","name":"*","chunks":[],"async":false}},"51825":{"*":{"id":"81923","name":"*","chunks":[],"async":false}},"52024":{"*":{"id":"65298","name":"*","chunks":[],"async":false}},"52789":{"*":{"id":"8523","name":"*","chunks":[],"async":false}},"53655":{"*":{"id":"28956","name":"*","chunks":[],"async":false}},"56006":{"*":{"id":"690","name":"*","chunks":[],"async":false}},"56061":{"*":{"id":"33893","name":"*","chunks":[],"async":false}},"56071":{"*":{"id":"13607","name":"*","chunks":[],"async":false}},"56349":{"*":{"id":"23450","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"58897":{"*":{"id":"92231","name":"*","chunks":[],"async":false}},"59884":{"*":{"id":"3604","name":"*","chunks":[],"async":false}},"61002":{"*":{"id":"44020","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"61640":{"*":{"id":"10524","name":"*","chunks":[],"async":false}},"62899":{"*":{"id":"14285","name":"*","chunks":[],"async":false}},"64371":{"*":{"id":"637","name":"*","chunks":[],"async":false}},"64561":{"*":{"id":"50047","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"67025":{"*":{"id":"50254","name":"*","chunks":[],"async":false}},"71088":{"*":{"id":"93918","name":"*","chunks":[],"async":false}},"71252":{"*":{"id":"70139","name":"*","chunks":[],"async":false}},"71470":{"*":{"id":"26702","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"75228":{"*":{"id":"79518","name":"*","chunks":[],"async":false}},"77671":{"*":{"id":"11741","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"80752":{"*":{"id":"29354","name":"*","chunks":[],"async":false}},"81127":{"*":{"id":"10079","name":"*","chunks":[],"async":false}},"82534":{"*":{"id":"46516","name":"*","chunks":[],"async":false}},"84588":{"*":{"id":"7290","name":"*","chunks":[],"async":false}},"85309":{"*":{"id":"99005","name":"*","chunks":[],"async":false}},"86465":{"*":{"id":"99069","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}},"91348":{"*":{"id":"3080","name":"*","chunks":[],"async":false}},"92542":{"*":{"id":"45512","name":"*","chunks":[],"async":false}},"92622":{"*":{"id":"26866","name":"*","chunks":[],"async":false}},"93921":{"*":{"id":"32583","name":"*","chunks":[],"async":false}},"94230":{"*":{"id":"87228","name":"*","chunks":[],"async":false}},"94238":{"*":{"id":"69296","name":"*","chunks":[],"async":false}},"94535":{"*":{"id":"84472","name":"*","chunks":[],"async":false}},"94635":{"*":{"id":"85117","name":"*","chunks":[],"async":false}},"95088":{"*":{"id":"64148","name":"*","chunks":[],"async":false}},"96238":{"*":{"id":"94582","name":"*","chunks":[],"async":false}},"96748":{"*":{"id":"18200","name":"*","chunks":[],"async":false}},"96975":{"*":{"id":"14321","name":"*","chunks":[],"async":false}},"97515":{"*":{"id":"65674","name":"*","chunks":[],"async":false}},"97556":{"*":{"id":"33811","name":"*","chunks":[],"async":false}},"97677":{"*":{"id":"18421","name":"*","chunks":[],"async":false}},"98542":{"*":{"id":"70092","name":"*","chunks":[],"async":false}},"98582":{"*":{"id":"55826","name":"*","chunks":[],"async":false}},"99312":{"*":{"id":"41970","name":"*","chunks":[],"async":false}},"99380":{"*":{"id":"83784","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/landing/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"4823":{"*":{"id":"50585","name":"*","chunks":[],"async":false}},"6587":{"*":{"id":"51175","name":"*","chunks":[],"async":false}},"9911":{"*":{"id":"54579","name":"*","chunks":[],"async":false}},"10185":{"*":{"id":"67635","name":"*","chunks":[],"async":false}},"11910":{"*":{"id":"83552","name":"*","chunks":[],"async":false}},"15615":{"*":{"id":"14731","name":"*","chunks":[],"async":false}},"15729":{"*":{"id":"21951","name":"*","chunks":[],"async":false}},"16144":{"*":{"id":"40410","name":"*","chunks":[],"async":false}},"16369":{"*":{"id":"22811","name":"*","chunks":[],"async":false}},"19021":{"*":{"id":"40639","name":"*","chunks":[],"async":false}},"19123":{"*":{"id":"24279","name":"*","chunks":[],"async":false}},"20446":{"*":{"id":"25994","name":"*","chunks":[],"async":false}},"21110":{"*":{"id":"19308","name":"*","chunks":[],"async":false}},"21341":{"*":{"id":"86461","name":"*","chunks":[],"async":false}},"21931":{"*":{"id":"267","name":"*","chunks":[],"async":false}},"22577":{"*":{"id":"27737","name":"*","chunks":[],"async":false}},"23936":{"*":{"id":"79488","name":"*","chunks":[],"async":false}},"24597":{"*":{"id":"86817","name":"*","chunks":[],"async":false}},"25086":{"*":{"id":"74812","name":"*","chunks":[],"async":false}},"25908":{"*":{"id":"47392","name":"*","chunks":[],"async":false}},"26506":{"*":{"id":"38120","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"27132":{"*":{"id":"27558","name":"*","chunks":[],"async":false}},"28058":{"*":{"id":"20084","name":"*","chunks":[],"async":false}},"28067":{"*":{"id":"91099","name":"*","chunks":[],"async":false}},"28164":{"*":{"id":"28304","name":"*","chunks":[],"async":false}},"28815":{"*":{"id":"39645","name":"*","chunks":[],"async":false}},"29155":{"*":{"id":"516","name":"*","chunks":[],"async":false}},"29366":{"*":{"id":"38930","name":"*","chunks":[],"async":false}},"29480":{"*":{"id":"59285","name":"*","chunks":[],"async":false}},"29499":{"*":{"id":"40435","name":"*","chunks":[],"async":false}},"29678":{"*":{"id":"1519","name":"*","chunks":[],"async":false}},"30815":{"*":{"id":"51109","name":"*","chunks":[],"async":false}},"32612":{"*":{"id":"65353","name":"*","chunks":[],"async":false}},"34070":{"*":{"id":"18598","name":"*","chunks":[],"async":false}},"34912":{"*":{"id":"87366","name":"*","chunks":[],"async":false}},"37894":{"*":{"id":"49211","name":"*","chunks":[],"async":false}},"38578":{"*":{"id":"29832","name":"*","chunks":[],"async":false}},"38587":{"*":{"id":"53845","name":"*","chunks":[],"async":false}},"38794":{"*":{"id":"50366","name":"*","chunks":[],"async":false}},"40684":{"*":{"id":"24622","name":"*","chunks":[],"async":false}},"41392":{"*":{"id":"77547","name":"*","chunks":[],"async":false}},"42266":{"*":{"id":"74008","name":"*","chunks":[],"async":false}},"42586":{"*":{"id":"21939","name":"*","chunks":[],"async":false}},"42755":{"*":{"id":"19415","name":"*","chunks":[],"async":false}},"44394":{"*":{"id":"81284","name":"*","chunks":[],"async":false}},"44807":{"*":{"id":"75379","name":"*","chunks":[],"async":false}},"44863":{"*":{"id":"65181","name":"*","chunks":[],"async":false}},"45027":{"*":{"id":"50155","name":"*","chunks":[],"async":false}},"45455":{"*":{"id":"62727","name":"*","chunks":[],"async":false}},"46318":{"*":{"id":"939","name":"*","chunks":[],"async":false}},"46791":{"*":{"id":"83521","name":"*","chunks":[],"async":false}},"47701":{"*":{"id":"40082","name":"*","chunks":[],"async":false}},"47928":{"*":{"id":"24328","name":"*","chunks":[],"async":false}},"49864":{"*":{"id":"15247","name":"*","chunks":[],"async":false}},"50239":{"*":{"id":"70135","name":"*","chunks":[],"async":false}},"50611":{"*":{"id":"65365","name":"*","chunks":[],"async":false}},"50744":{"*":{"id":"3090","name":"*","chunks":[],"async":false}},"51825":{"*":{"id":"11633","name":"*","chunks":[],"async":false}},"52024":{"*":{"id":"44928","name":"*","chunks":[],"async":false}},"52789":{"*":{"id":"23155","name":"*","chunks":[],"async":false}},"53655":{"*":{"id":"37661","name":"*","chunks":[],"async":false}},"56006":{"*":{"id":"216","name":"*","chunks":[],"async":false}},"56061":{"*":{"id":"75171","name":"*","chunks":[],"async":false}},"56071":{"*":{"id":"78197","name":"*","chunks":[],"async":false}},"56349":{"*":{"id":"35111","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"58897":{"*":{"id":"41489","name":"*","chunks":[],"async":false}},"59884":{"*":{"id":"19598","name":"*","chunks":[],"async":false}},"61002":{"*":{"id":"1582","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"61640":{"*":{"id":"69814","name":"*","chunks":[],"async":false}},"62899":{"*":{"id":"5291","name":"*","chunks":[],"async":false}},"64371":{"*":{"id":"33597","name":"*","chunks":[],"async":false}},"64561":{"*":{"id":"61377","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"67025":{"*":{"id":"9622","name":"*","chunks":[],"async":false}},"71088":{"*":{"id":"16316","name":"*","chunks":[],"async":false}},"71252":{"*":{"id":"94248","name":"*","chunks":[],"async":false}},"71470":{"*":{"id":"96558","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"75228":{"*":{"id":"50692","name":"*","chunks":[],"async":false}},"77671":{"*":{"id":"73655","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"80752":{"*":{"id":"3236","name":"*","chunks":[],"async":false}},"81127":{"*":{"id":"95145","name":"*","chunks":[],"async":false}},"82534":{"*":{"id":"36882","name":"*","chunks":[],"async":false}},"84588":{"*":{"id":"17660","name":"*","chunks":[],"async":false}},"85309":{"*":{"id":"29499","name":"*","chunks":[],"async":false}},"86465":{"*":{"id":"6011","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}},"91348":{"*":{"id":"97968","name":"*","chunks":[],"async":false}},"92542":{"*":{"id":"99070","name":"*","chunks":[],"async":false}},"92622":{"*":{"id":"42196","name":"*","chunks":[],"async":false}},"93921":{"*":{"id":"63069","name":"*","chunks":[],"async":false}},"94230":{"*":{"id":"56110","name":"*","chunks":[],"async":false}},"94238":{"*":{"id":"91057","name":"*","chunks":[],"async":false}},"94535":{"*":{"id":"27107","name":"*","chunks":[],"async":false}},"94635":{"*":{"id":"5211","name":"*","chunks":[],"async":false}},"95088":{"*":{"id":"43182","name":"*","chunks":[],"async":false}},"96238":{"*":{"id":"64521","name":"*","chunks":[],"async":false}},"96748":{"*":{"id":"67738","name":"*","chunks":[],"async":false}},"96975":{"*":{"id":"83035","name":"*","chunks":[],"async":false}},"97515":{"*":{"id":"38023","name":"*","chunks":[],"async":false}},"97556":{"*":{"id":"54510","name":"*","chunks":[],"async":false}},"97677":{"*":{"id":"32971","name":"*","chunks":[],"async":false}},"98542":{"*":{"id":"95514","name":"*","chunks":[],"async":false}},"98582":{"*":{"id":"27444","name":"*","chunks":[],"async":false}},"99312":{"*":{"id":"26584","name":"*","chunks":[],"async":false}},"99380":{"*":{"id":"31023","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"Bricolage_Grotesque\",\"arguments\":[{\"subsets\":[\"latin\",\"latin-ext\"],\"display\":\"swap\",\"variable\":\"--font-bricolage\"}],\"variableName\":\"bricolage\"}":{"id":44735,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"Geist\",\"arguments\":[{\"subsets\":[\"latin\",\"latin-ext\"],\"display\":\"swap\",\"variable\":\"--font-geist\"}],\"variableName\":\"geist\"}":{"id":61837,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"Geist_Mono\",\"arguments\":[{\"subsets\":[\"latin\",\"latin-ext\"],\"display\":\"swap\",\"variable\":\"--font-geist-mono\"}],\"variableName\":\"geistMono\"}":{"id":42654,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/node_modules/next/font/local/target.css?{\"path\":\"src/app/layout.js\",\"import\":\"\",\"arguments\":[{\"src\":\"./fonts/material-symbols-subset.woff2\",\"display\":\"block\",\"variable\":\"--font-icons\",\"adjustFontFallback\":false}],\"variableName\":\"materialSymbols\"}":{"id":29344,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/globals.css":{"id":51743,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/i18n/RuntimeI18nProvider.js":{"id":94635,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/DensityApplier.js":{"id":24597,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ThemeProvider.js":{"id":21110,"name":"*","chunks":["3670","static/chunks/3670-90f5cd325f460eb5.js","7177","static/chunks/app/layout-c266f1acedfb4651.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/callback/page.js":{"id":59884,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/dashboard/settings/pricing/page.js":{"id":38578,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/landing/page.js":{"id":42586,"name":"*","chunks":["1610","static/chunks/1610-54cdd36a7d983e62.js","2903","static/chunks/2903-5612a657f163e2fe.js","7018","static/chunks/app/landing/page-bcaea5febe1c68c0.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/login/page.js":{"id":97515,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/layouts/DashboardLayout.js":{"id":22577,"name":"*","chunks":["1610","static/chunks/1610-54cdd36a7d983e62.js","4808","static/chunks/4808-27b555af738dbe19.js","9671","static/chunks/9671-13bf0a1dd082ad39.js","2903","static/chunks/2903-5612a657f163e2fe.js","2577","static/chunks/2577-fc8581b39b97c9e7.js","9305","static/chunks/app/(dashboard)/layout-96ebd2b46f1f8d39.js"],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/error.js":{"id":44394,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Loading.js":{"id":25086,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Button.js":{"id":92542,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/EmptyState.js":{"id":99312,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.js":{"id":41392,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.js":{"id":85309,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.js":{"id":75228,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js":{"id":50239,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/mitm/MitmPageClient.js":{"id":52789,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/home/HomePageClient.js":{"id":32612,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/AddCustomEmbeddingModal.js":{"id":96748,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Badge.js":{"id":56061,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Callout.js":{"id":56006,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CapacityBadges.js":{"id":29366,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Card.js":{"id":84588,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CardLink.js":{"id":28164,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ChangelogModal.js":{"id":97556,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Checkbox.js":{"id":9911,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ComboFormModal.js":{"id":45455,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CommandPalette.js":{"id":82534,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CommandPaletteProvider.js":{"id":42755,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CommandPaletteTrigger.js":{"id":26506,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CopyField.js":{"id":10185,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CopyStatus.js":{"id":58897,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CountUp.js":{"id":29155,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/CursorAuthModal.js":{"id":30815,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Drawer.js":{"id":29499,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/EditConnectionModal.js":{"id":71252,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Field.js":{"id":98582,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/GatewayStatusCard.js":{"id":53655,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/GitLabAuthModal.js":{"id":95088,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Header.js":{"id":29480,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/HeaderMenu.js":{"id":80752,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/IconButton.js":{"id":6587,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/IFlowCookieModal.js":{"id":23936,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Input.js":{"id":11910,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Kbd.js":{"id":15729,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/KiroAuthModal.js":{"id":46318,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/KiroOAuthWrapper.js":{"id":62899,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/KiroSocialOAuthModal.js":{"id":94230,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/LanguageSwitcher.js":{"id":21931,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ManualConfigModal.js":{"id":28815,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/McpMarketplaceModal.js":{"id":28058,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Menu.js":{"id":93921,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Meter.js":{"id":44863,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Modal.js":{"id":81127,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ModelChip.js":{"id":86465,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ModelSelectModal.js":{"id":96238,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/NoAuthProxyCard.js":{"id":4823,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/NumberStepper.js":{"id":61640,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/OAuthModal.js":{"id":91348,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/PeriodControl.js":{"id":34912,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Popover.js":{"id":50611,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ProviderInfoCard.js":{"id":51825,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ProviderTile.js":{"id":96975,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/QuietPeriod.js":{"id":46791,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SectionCard.js":{"id":56071,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SegmentedControl.js":{"id":28067,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Select.js":{"id":99380,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SettingRow.js":{"id":61002,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Sidebar.js":{"id":92622,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SidebarNav.js":{"id":44807,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/SidebarUserRow.js":{"id":45027,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/StateViews.js":{"id":77671,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/StatTile.js":{"id":25908,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/StatusPill.js":{"id":19123,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Tabs.js":{"id":20446,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Terminal.js":{"id":38794,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Textarea.js":{"id":52024,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ThemeToggle.js":{"id":38587,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Toggle.js":{"id":98542,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/ToolbarSearch.js":{"id":64371,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/Tooltip.js":{"id":97677,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/UnitInput.js":{"id":50744,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/shared/components/XiaomiMimoAuthModal.js":{"id":40684,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/profile/page.js":{"id":64561,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/providers/new/page.js":{"id":15615,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/pxpipe/PxpipeClient.js":{"id":71470,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/quota/QuotaPageClient.js":{"id":19021,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/settings/page.js":{"id":27132,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/skills/SkillsPageClient.js":{"id":37894,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/token-saver/TokenSaverPageClient.js":{"id":29678,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/translator/page.js":{"id":49864,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/ui-kit/KitClient.js":{"id":21341,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/usage/page.js":{"id":16369,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/layout.js":{"id":34070,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/[kind]/page.js":{"id":16144,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js":{"id":67025,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/web/page.js":{"id":71088,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/combos/CombosPageClient.js":{"id":47701,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.js":{"id":42266,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/providers/detail/ProviderDetailPage.js":{"id":94535,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/providers/ProvidersListShell.js":{"id":47928,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js":{"id":94238,"name":"*","chunks":[],"async":false},"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/dashboard/proxy-pools/page.js":{"id":56349,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/tokenhop/tokenhop/src/":[],"/home/runner/work/tokenhop/tokenhop/src/app/layout":[{"inlined":false,"path":"static/css/9f0b95a0d0bc5e51.css"}],"/home/runner/work/tokenhop/tokenhop/src/app/page":[],"/home/runner/work/tokenhop/tokenhop/src/app/(dashboard)/layout":[],"/home/runner/work/tokenhop/tokenhop/src/app/landing/page":[]},"rscModuleMapping":{"4823":{"*":{"id":"5843","name":"*","chunks":[],"async":false}},"6587":{"*":{"id":"8229","name":"*","chunks":[],"async":false}},"9911":{"*":{"id":"71189","name":"*","chunks":[],"async":false}},"10185":{"*":{"id":"98337","name":"*","chunks":[],"async":false}},"11910":{"*":{"id":"71230","name":"*","chunks":[],"async":false}},"15615":{"*":{"id":"24885","name":"*","chunks":[],"async":false}},"15729":{"*":{"id":"34465","name":"*","chunks":[],"async":false}},"16144":{"*":{"id":"6452","name":"*","chunks":[],"async":false}},"16369":{"*":{"id":"87149","name":"*","chunks":[],"async":false}},"19021":{"*":{"id":"50119","name":"*","chunks":[],"async":false}},"19123":{"*":{"id":"8653","name":"*","chunks":[],"async":false}},"20446":{"*":{"id":"83960","name":"*","chunks":[],"async":false}},"21110":{"*":{"id":"89886","name":"*","chunks":[],"async":false}},"21341":{"*":{"id":"53405","name":"*","chunks":[],"async":false}},"21931":{"*":{"id":"45205","name":"*","chunks":[],"async":false}},"22577":{"*":{"id":"61780","name":"*","chunks":[],"async":false}},"23936":{"*":{"id":"80342","name":"*","chunks":[],"async":false}},"24597":{"*":{"id":"20355","name":"*","chunks":[],"async":false}},"25086":{"*":{"id":"92082","name":"*","chunks":[],"async":false}},"25908":{"*":{"id":"50650","name":"*","chunks":[],"async":false}},"26506":{"*":{"id":"62870","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"27132":{"*":{"id":"74669","name":"*","chunks":[],"async":false}},"28058":{"*":{"id":"962","name":"*","chunks":[],"async":false}},"28067":{"*":{"id":"54065","name":"*","chunks":[],"async":false}},"28164":{"*":{"id":"52734","name":"*","chunks":[],"async":false}},"28815":{"*":{"id":"70603","name":"*","chunks":[],"async":false}},"29155":{"*":{"id":"66020","name":"*","chunks":[],"async":false}},"29366":{"*":{"id":"4996","name":"*","chunks":[],"async":false}},"29480":{"*":{"id":"92669","name":"*","chunks":[],"async":false}},"29499":{"*":{"id":"24069","name":"*","chunks":[],"async":false}},"29678":{"*":{"id":"84966","name":"*","chunks":[],"async":false}},"30815":{"*":{"id":"40167","name":"*","chunks":[],"async":false}},"32612":{"*":{"id":"77539","name":"*","chunks":[],"async":false}},"34070":{"*":{"id":"11868","name":"*","chunks":[],"async":false}},"34912":{"*":{"id":"92252","name":"*","chunks":[],"async":false}},"37894":{"*":{"id":"97473","name":"*","chunks":[],"async":false}},"38578":{"*":{"id":"93870","name":"*","chunks":[],"async":false}},"38587":{"*":{"id":"40515","name":"*","chunks":[],"async":false}},"38794":{"*":{"id":"26252","name":"*","chunks":[],"async":false}},"40684":{"*":{"id":"18060","name":"*","chunks":[],"async":false}},"41392":{"*":{"id":"79286","name":"*","chunks":[],"async":false}},"42266":{"*":{"id":"99259","name":"*","chunks":[],"async":false}},"42586":{"*":{"id":"852","name":"*","chunks":[],"async":false}},"42755":{"*":{"id":"19489","name":"*","chunks":[],"async":false}},"44394":{"*":{"id":"79346","name":"*","chunks":[],"async":false}},"44807":{"*":{"id":"66285","name":"*","chunks":[],"async":false}},"44863":{"*":{"id":"66915","name":"*","chunks":[],"async":false}},"45027":{"*":{"id":"32537","name":"*","chunks":[],"async":false}},"45455":{"*":{"id":"20493","name":"*","chunks":[],"async":false}},"46318":{"*":{"id":"82448","name":"*","chunks":[],"async":false}},"46791":{"*":{"id":"52819","name":"*","chunks":[],"async":false}},"47701":{"*":{"id":"86051","name":"*","chunks":[],"async":false}},"47928":{"*":{"id":"57553","name":"*","chunks":[],"async":false}},"49864":{"*":{"id":"38308","name":"*","chunks":[],"async":false}},"50239":{"*":{"id":"51747","name":"*","chunks":[],"async":false}},"50611":{"*":{"id":"78903","name":"*","chunks":[],"async":false}},"50744":{"*":{"id":"8604","name":"*","chunks":[],"async":false}},"51743":{"*":{"id":"61135","name":"*","chunks":[],"async":false}},"51825":{"*":{"id":"81923","name":"*","chunks":[],"async":false}},"52024":{"*":{"id":"65298","name":"*","chunks":[],"async":false}},"52789":{"*":{"id":"8523","name":"*","chunks":[],"async":false}},"53655":{"*":{"id":"28956","name":"*","chunks":[],"async":false}},"56006":{"*":{"id":"690","name":"*","chunks":[],"async":false}},"56061":{"*":{"id":"33893","name":"*","chunks":[],"async":false}},"56071":{"*":{"id":"13607","name":"*","chunks":[],"async":false}},"56349":{"*":{"id":"23450","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"58897":{"*":{"id":"92231","name":"*","chunks":[],"async":false}},"59884":{"*":{"id":"3604","name":"*","chunks":[],"async":false}},"61002":{"*":{"id":"44020","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"61640":{"*":{"id":"10524","name":"*","chunks":[],"async":false}},"62899":{"*":{"id":"14285","name":"*","chunks":[],"async":false}},"64371":{"*":{"id":"637","name":"*","chunks":[],"async":false}},"64561":{"*":{"id":"50047","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"67025":{"*":{"id":"50254","name":"*","chunks":[],"async":false}},"71088":{"*":{"id":"93918","name":"*","chunks":[],"async":false}},"71252":{"*":{"id":"70139","name":"*","chunks":[],"async":false}},"71470":{"*":{"id":"26702","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"75228":{"*":{"id":"79518","name":"*","chunks":[],"async":false}},"77671":{"*":{"id":"11741","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"80752":{"*":{"id":"29354","name":"*","chunks":[],"async":false}},"81127":{"*":{"id":"10079","name":"*","chunks":[],"async":false}},"82534":{"*":{"id":"46516","name":"*","chunks":[],"async":false}},"84588":{"*":{"id":"7290","name":"*","chunks":[],"async":false}},"85309":{"*":{"id":"99005","name":"*","chunks":[],"async":false}},"86465":{"*":{"id":"99069","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}},"91348":{"*":{"id":"3080","name":"*","chunks":[],"async":false}},"92542":{"*":{"id":"45512","name":"*","chunks":[],"async":false}},"92622":{"*":{"id":"26866","name":"*","chunks":[],"async":false}},"93921":{"*":{"id":"32583","name":"*","chunks":[],"async":false}},"94230":{"*":{"id":"87228","name":"*","chunks":[],"async":false}},"94238":{"*":{"id":"69296","name":"*","chunks":[],"async":false}},"94535":{"*":{"id":"84472","name":"*","chunks":[],"async":false}},"94635":{"*":{"id":"85117","name":"*","chunks":[],"async":false}},"95088":{"*":{"id":"64148","name":"*","chunks":[],"async":false}},"96238":{"*":{"id":"94582","name":"*","chunks":[],"async":false}},"96748":{"*":{"id":"18200","name":"*","chunks":[],"async":false}},"96975":{"*":{"id":"14321","name":"*","chunks":[],"async":false}},"97515":{"*":{"id":"65674","name":"*","chunks":[],"async":false}},"97556":{"*":{"id":"33811","name":"*","chunks":[],"async":false}},"97677":{"*":{"id":"18421","name":"*","chunks":[],"async":false}},"98542":{"*":{"id":"70092","name":"*","chunks":[],"async":false}},"98582":{"*":{"id":"55826","name":"*","chunks":[],"async":false}},"99312":{"*":{"id":"41970","name":"*","chunks":[],"async":false}},"99380":{"*":{"id":"83784","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="__variable_ac327c __variable_ebdb69 __variable_db7957 __variable_614881"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/2b5b02fc7e511755-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7d4881bb7e1bf84d-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/9d5a263311222317-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/a3e6e8037ffa1953.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/aa016aab0e6d1295-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/c7e0cf6c760983e7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9f0b95a0d0bc5e51.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-187fa25c98ba99f3.js"/><script src="/_next/static/chunks/4bd1b696-8a4ab4fdf0ae305a.js" async=""></script><script src="/_next/static/chunks/3794-0a1186eb85c3950f.js" async=""></script><script src="/_next/static/chunks/main-app-cf38df0bac48d0de.js" async=""></script><script src="/_next/static/chunks/3670-e7a22341025498f8.js" async=""></script><script src="/_next/static/chunks/app/layout-c266f1acedfb4651.js" async=""></script><script src="/_next/static/chunks/1610-54cdd36a7d983e62.js" async=""></script><script src="/_next/static/chunks/2903-5612a657f163e2fe.js" async=""></script><script src="/_next/static/chunks/app/landing/page-02b7bfebd65c41f1.js" async=""></script><meta name="theme-color" content="#f3f1ea" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#0d0e12" media="(prefers-color-scheme: dark)"/><title>tokenhop - AI infrastructure management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/brand/favicon.svg" type="image/svg+xml"/><link rel="icon" href="/brand/favicon.ico"/><meta name="next-size-adjust" content=""/><script>(function(){var r=document.documentElement;try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'dark';t=t||'dark';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'&&m)){r.classList.add('dark')}else{r.classList.remove('dark')}}catch(e){r.classList.add('dark')}try{var c=document.cookie.match(/(?:^|; )locale=([^;]*)/);var l=c?decodeURIComponent(c[1]):'en';if(l==='zh')l='zh-CN';if(["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","km","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no","fa"].indexOf(l)<0)l='en';r.lang=l;if(["ar","he","fa","ur"].indexOf(l)>=0)r.dir='rtl'}catch(e){}})();</script><script>(function(){try{var m=document.cookie.match(/(?:^|; )nr-density=([^;]*)/);if(m&&decodeURIComponent(m[1])==='compact'){document.documentElement.classList.add('compact-density')}}catch(e){}})();</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div class="relative overflow-x-hidden bg-bg font-sans text-text antialiased"><div aria-hidden="true" class="landing-grid pointer-events-none fixed inset-0"></div><header class="fixed inset-x-0 top-0 z-50 border-b border-line bg-panel/80 backdrop-blur-md"><nav aria-label="Primary" class="mx-auto flex h-16 max-w-7xl items-center justify-between px-4 sm:px-6"><a aria-label="tokenhop home" class="flex min-h-[44px] items-center gap-3 rounded-lg" href="/"><span class="flex items-center gap-2.5 "><svg aria-hidden="true" viewBox="0 0 64 64" width="36" height="36" class="" focusable="false"><rect width="64" height="64" rx="16" fill="var(--signal-coral)"></rect><path d="M25 11V41.5C25 48.5 28.8 52 35.5 52H40" fill="none" stroke="currentColor" stroke-width="7.5" stroke-linecap="round"></path><path d="M14 26.5C22 18.5 34 18 42 24" fill="none" stroke="currentColor" stroke-width="6.5" stroke-linecap="round"></path><path d="M43 29a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0-13 0z" fill="currentColor"></path></svg><span class="font-display font-bold tracking-[-0.02em] text-text" style="font-size:22px">tokenhop</span></span></a><div class="hidden items-center gap-1 md:flex"><a href="#features" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">Features</a><a href="#how-it-works" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">How it Works</a><a href="https://github.com/tokenhop/tokenhop#readme" target="_blank" rel="noopener noreferrer" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">Docs</a><a href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">GitHub<span class="material-symbols-outlined text-[14px]" aria-hidden="true">open_in_new</span></a></div><div class="flex items-center gap-2"><button class="flex items-center justify-center size-10 rounded-full text-muted hover:text-text hover:bg-raised transition-colors min-h-[44px] min-w-[44px]" aria-label="Switch to light mode" title="Switch to light mode"><span class="material-symbols-outlined text-[22px]">light_mode</span></button><a class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95 h-11 px-4 text-sm rounded-lg hidden sm:inline-flex" href="/dashboard">Get started</a><button aria-expanded="false" aria-controls="landing-mobile-menu" type="button" aria-label="Open menu" class="inline-flex size-10 shrink-0 items-center justify-center rounded-lg border border-line bg-raised text-muted transition-colors duration-150 hover:bg-line/60 hover:text-text focus-visible:outline-none focus-visible:shadow-focus disabled:cursor-not-allowed disabled:opacity-50 min-h-[44px] min-w-[44px] md:hidden"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">menu</span></button></div></nav></header><main class="relative"><div class="relative"><section class="relative flex min-h-[90vh] flex-col items-center justify-center overflow-hidden px-4 pt-32 pb-20 sm:px-6"><div aria-hidden="true" class="pointer-events-none absolute inset-x-0 top-0 h-[420px] bg-coral-bg [mask-image:radial-gradient(ellipse_60%_100%_at_50%_0%,black,transparent)]"></div><div class="relative z-10 flex w-full max-w-4xl flex-col items-center gap-8 text-center"><span class="inline-flex items-center gap-1.5 rounded-full font-semibold whitespace-nowrap bg-raised text-muted shadow-[inset_0_0_0_1px_var(--signal-line)] h-6 px-2.5 text-xs"><span aria-hidden="true" class="size-2 rounded-full bg-current"></span>Open source · MIT</span><h1 class="font-display text-[42px] leading-[1.05] font-bold tracking-[-0.02em] text-balance text-text sm:text-5xl md:text-6xl">One endpoint for <br/><span class="text-coral">all AI providers</span></h1><p class="mx-auto max-w-2xl text-lg font-light text-muted md:text-xl">AI endpoint proxy with web dashboard - A JavaScript port of CLIProxyAPI. Works seamlessly with Claude Code, OpenAI Codex, Cline, RooCode, and other CLI tools.</p><div class="w-full max-w-md"><div class="flex h-11 items-center gap-2 rounded-lg border border-line bg-raised ps-3 pe-1.5 transition-colors focus-within:border-coral focus-within:shadow-focus"><code title="http://localhost:20128/v1" class="min-w-0 flex-1 truncate font-mono text-sm text-text">http://localhost:20128/v1</code><button type="button" aria-label="Copy endpoint URL" class="inline-flex size-8 shrink-0 items-center justify-center rounded-md text-muted transition-colors hover:bg-line/60 hover:text-text focus-visible:shadow-focus"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">content_copy</span></button><span aria-live="polite" class="sr-only"></span></div></div><div class="flex w-full flex-wrap items-center justify-center gap-4"><a class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95 h-11 px-4 text-sm rounded-lg" href="/dashboard"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">rocket_launch</span>Get started</a><a href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-raised text-text border border-line hover:bg-line/60 h-11 px-4 text-sm rounded-lg"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">code</span>View on GitHub</a></div></div></section><div class="flex justify-center pb-20"><div class="w-full max-w-4xl"><ul class="sr-only"><li>Requests from Claude Code, OpenAI Codex, Cline and Cursor go to the tokenhop hub.</li><li>The hub routes each request to OpenAI, Anthropic, Gemini or GitHub Copilot.</li></ul><div aria-hidden="true" class="mx-auto flex max-w-md flex-col gap-2 px-4 md:hidden"><div class="grid grid-cols-2 gap-2"><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">Claude Code</span><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">OpenAI Codex</span><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">Cline</span><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">Cursor</span></div><span class="material-symbols-outlined self-center text-[22px] text-subtle" aria-hidden="true">arrow_downward</span><span class="rounded-xl border-2 border-coral bg-panel px-4 py-3 text-center font-display text-base font-bold text-text">tokenhop hub</span><span class="material-symbols-outlined self-center text-[22px] text-lime-ink" aria-hidden="true">arrow_downward</span><div class="grid grid-cols-2 gap-2"><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-lime-ink bg-lime-bg text-lime-ink ring-2 ring-lime-ink">OpenAI</span><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-line bg-raised text-text">Anthropic</span><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-line bg-raised text-text">Gemini</span><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-line bg-raised text-text">GitHub Copilot</span></div></div><div aria-hidden="true" class="relative mt-16 hidden h-[360px] w-full items-center justify-center md:flex"><div class="relative z-20 flex size-32 flex-col items-center justify-center gap-1 rounded-full border-2 border-coral bg-panel shadow-card"><span class="material-symbols-outlined text-4xl text-coral">hub</span><span class="text-xs font-bold tracking-widest text-text uppercase">tokenhop</span><span class="absolute inset-0 rounded-full border border-coral opacity-40 motion-safe:animate-ping"></span></div><div class="absolute start-0 top-1/2 flex -translate-y-1/2 flex-col gap-7"><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/claude.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/codex.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/cline.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/cursor.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div></div><svg aria-hidden="true" class="pointer-events-none absolute inset-0 z-10 size-full rtl:-scale-x-100" viewBox="0 0 896 360" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg"><path d="M 60 50 C 250 70, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 60 140 C 250 140, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 60 210 C 250 210, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 60 300 C 250 280, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 440 180 C 550 180, 550 50, 740 50" fill="none" stroke-dasharray="5 9" stroke-width="3" class="stroke-lime-ink motion-safe:animate-flow"></path><path d="M 440 180 C 550 180, 550 130, 740 130" fill="none" stroke-width="2" class="stroke-line"></path><path d="M 440 180 C 550 180, 550 230, 740 230" fill="none" stroke-width="2" class="stroke-line"></path><path d="M 440 180 C 550 180, 550 310, 740 310" fill="none" stroke-width="2" class="stroke-line"></path></svg><div class="absolute end-0 top-0 bottom-0 flex flex-col justify-between py-6"><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-lime-ink bg-lime-bg text-lime-ink ring-2 ring-lime-ink">OpenAI</span><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-line bg-raised text-text">Anthropic</span><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-line bg-raised text-text">Gemini</span><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-line bg-raised text-text">GitHub Copilot</span></div></div></div></div></div><section class="px-4 py-24 sm:px-6" id="get-started"><div class="mx-auto max-w-7xl"><div class="flex flex-col items-start gap-16 lg:flex-row"><div class="flex-1"><p class="mb-2 text-xs font-semibold tracking-[0.08em] text-subtle uppercase">Get started</p><h2 class="mb-6 font-display text-3xl font-bold tracking-[-0.02em] text-text md:text-4xl">Get started in 30 seconds</h2><p class="mb-8 text-lg text-muted">Install tokenhop, configure your providers via web dashboard, and start routing AI requests.</p><ol class="flex list-none flex-col gap-6 p-0"><li class="flex gap-4"><span aria-hidden="true" class="flex size-8 flex-none items-center justify-center rounded-full bg-coral-bg font-semibold text-coral-ink">1</span><div><h3 class="text-lg font-bold text-text">Install tokenhop</h3><p class="mt-1 text-sm text-muted">Run the Docker image to start the server instantly</p></div></li><li class="flex gap-4"><span aria-hidden="true" class="flex size-8 flex-none items-center justify-center rounded-full bg-coral-bg font-semibold text-coral-ink">2</span><div><h3 class="text-lg font-bold text-text">Open dashboard</h3><p class="mt-1 text-sm text-muted">Configure providers and API keys via web interface</p></div></li><li class="flex gap-4"><span aria-hidden="true" class="flex size-8 flex-none items-center justify-center rounded-full bg-coral-bg font-semibold text-coral-ink">3</span><div><h3 class="text-lg font-bold text-text">Route requests</h3><p class="mt-1 text-sm text-muted">Point your CLI tools to http://localhost:20128</p></div></li></ol></div><div class="dark w-full min-w-0 flex-1"><div class="signal-terminal overflow-hidden rounded-2xl border border-line shadow-card"><div class="flex items-center gap-2 border-b border-line px-4 py-3"><span aria-hidden="true" class="flex gap-2"><span class="size-3 rounded-full bg-line"></span><span class="size-3 rounded-full bg-line"></span><span class="size-3 rounded-full bg-line"></span></span><span class="ms-2 font-mono text-xs text-muted">terminal</span></div><div class="overflow-x-auto p-6 font-mono text-sm leading-relaxed"><div class="flex h-11 items-center gap-2 rounded-lg border border-line bg-raised ps-3 pe-1.5 transition-colors focus-within:border-coral focus-within:shadow-focus mb-6"><code title="docker run -d -p 20128:20128 -v ~/.tokenhop:/app/data -e INITIAL_PASSWORD=change-me ghcr.io/tokenhop/tokenhop" class="min-w-0 flex-1 truncate font-mono text-sm text-text">$ docker run -d -p 20128:20128 -v ~/.tokenhop:/app/data -e INITIAL_PASSWORD=change-me ghcr.io/tokenhop/tokenhop</code><button type="button" aria-label="Copy install command" class="inline-flex size-8 shrink-0 items-center justify-center rounded-md text-muted transition-colors hover:bg-line/60 hover:text-text focus-visible:shadow-focus"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">content_copy</span></button><span aria-live="polite" class="sr-only"></span></div><p class="sr-only">Starting tokenhop. Server running on http://localhost:20128. Dashboard at http://localhost:20128/dashboard. Ready to route.</p><div aria-hidden="true" class="mb-6 flex flex-col gap-1"><span class="signal-terminal-log"><span class="signal-terminal-time me-2">&gt;</span>Starting tokenhop...</span><span class="signal-terminal-info"><span class="signal-terminal-time me-2">&gt;</span>Server running on http://localhost:20128</span><span class="signal-terminal-info"><span class="signal-terminal-time me-2">&gt;</span>Dashboard: http://localhost:20128/dashboard</span><span class="signal-terminal-log"><span class="signal-terminal-time me-2">&gt;</span>Ready to route</span></div><p class="mb-2 border-t border-line pt-4 text-xs"><span class="material-symbols-outlined me-1 inline-block align-[-2px] text-[14px]" aria-hidden="true">edit_note</span>Configure providers in dashboard or use environment variables</p><p class="text-xs"><span class="signal-terminal-debug">Data location:</span><br/><span class="signal-terminal-time">macOS/Linux:</span> <!-- -->~/.tokenhop/db/data.sqlite<br/><span class="signal-terminal-time">Windows:</span> <!-- -->%APPDATA%/tokenhop/db/data.sqlite</p></div></div></div></div></div></section><section class="border-y border-line bg-raised/40 py-24" id="how-it-works"><div class="mx-auto max-w-7xl px-4 sm:px-6"><div class="mb-16"><p class="mb-2 text-xs font-semibold tracking-[0.08em] text-subtle uppercase">How it works</p><h2 class="mb-4 font-display text-3xl font-bold tracking-[-0.02em] text-text md:text-4xl">How tokenhop works</h2><p class="max-w-xl text-lg text-muted">Data flows seamlessly from your application through our intelligent routing layer to the best provider for the job.</p></div><div class="relative grid grid-cols-1 gap-8 md:grid-cols-3"><div aria-hidden="true" class="absolute top-12 start-[16%] end-[16%] hidden h-[2px] bg-line md:block"></div><div class="relative flex flex-col gap-6"><div class="z-10 mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border border-line bg-panel shadow-card md:mx-0"><span class="material-symbols-outlined text-4xl text-muted" aria-hidden="true">terminal</span></div><div class="text-start"><h3 class="mb-2 text-xl font-bold text-text">1. CLI &amp; SDKs</h3><p class="text-sm text-muted">Your requests start from your favorite tools or our unified SDK. Just change the base URL.</p></div></div><div class="relative flex flex-col gap-6 md:items-center md:text-center"><div class="z-10 mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border-2 border-coral bg-panel shadow-card"><span class="material-symbols-outlined text-4xl text-coral motion-safe:animate-pulse motion-reduce:animate-none" aria-hidden="true">hub</span></div><div class="text-start md:text-center"><h3 class="mb-2 text-xl font-bold text-coral">2. tokenhop hub</h3><p class="text-sm text-muted">Our engine analyzes the prompt, checks provider health, and routes for lowest latency or cost.</p></div></div><div class="relative flex flex-col gap-6 md:items-end md:text-end"><div class="z-10 mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border border-line bg-panel shadow-card md:mx-0"><span class="material-symbols-outlined text-4xl text-muted" aria-hidden="true">cloud</span></div><div class="text-start md:text-end"><h3 class="mb-2 text-xl font-bold text-text">3. AI providers</h3><p class="text-sm text-muted">The request is fulfilled by OpenAI, Anthropic, Gemini, or others instantly.</p></div></div></div></div></section><section class="px-4 py-24 sm:px-6" id="features"><div class="mx-auto max-w-7xl"><div class="mb-16"><p class="mb-2 text-xs font-semibold tracking-[0.08em] text-subtle uppercase">Features</p><h2 class="mb-4 font-display text-3xl font-bold tracking-[-0.02em] text-text md:text-4xl">Powerful features</h2><p class="max-w-xl text-lg text-muted">Everything you need to manage your AI infrastructure in one place, built for scale.</p></div><div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">link</span></div><h3 class="mb-2 text-base font-semibold text-text">Unified endpoint</h3><p class="text-sm leading-relaxed text-muted">Access all providers via a single standard API URL.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">bolt</span></div><h3 class="mb-2 text-base font-semibold text-text">Easy setup</h3><p class="text-sm leading-relaxed text-muted">Get up and running in minutes with one Docker command.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">shield_with_heart</span></div><h3 class="mb-2 text-base font-semibold text-text">Model fallback</h3><p class="text-sm leading-relaxed text-muted">Automatically switch providers on failure or high latency.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">monitoring</span></div><h3 class="mb-2 text-base font-semibold text-text">Usage tracking</h3><p class="text-sm leading-relaxed text-muted">Detailed analytics and cost monitoring across all models.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">key</span></div><h3 class="mb-2 text-base font-semibold text-text">OAuth &amp; API keys</h3><p class="text-sm leading-relaxed text-muted">Securely manage credentials in one vault.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">cloud_sync</span></div><h3 class="mb-2 text-base font-semibold text-text">Cloud sync</h3><p class="text-sm leading-relaxed text-muted">Sync your configurations across devices instantly.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">terminal</span></div><h3 class="mb-2 text-base font-semibold text-text">CLI support</h3><p class="text-sm leading-relaxed text-muted">Works with Claude Code, Codex, Cline, Cursor, and more.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">dashboard</span></div><h3 class="mb-2 text-base font-semibold text-text">Dashboard</h3><p class="text-sm leading-relaxed text-muted">Visual dashboard for real-time traffic analysis.</p></article></div></div></section><section class="relative overflow-hidden px-4 py-24 sm:px-6" aria-labelledby="cta-title"><div aria-hidden="true" class="pointer-events-none absolute inset-0 bg-coral-bg [mask-image:radial-gradient(ellipse_70%_100%_at_50%_100%,black,transparent)]"></div><div class="relative z-10 mx-auto max-w-4xl text-center"><h2 id="cta-title" class="mb-6 font-display text-4xl font-bold tracking-[-0.02em] text-text md:text-5xl">Ready to simplify your AI infrastructure?</h2><p class="mx-auto mb-10 max-w-2xl text-xl text-muted">Join developers who are streamlining their AI integrations with tokenhop. Open source and free to start.</p><div class="flex flex-col items-center justify-center gap-4 sm:flex-row"><a class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95 h-11 px-4 text-sm rounded-lg w-full sm:w-auto" href="/dashboard">Start free</a><a href="https://github.com/tokenhop/tokenhop#readme" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-raised text-text border border-line hover:bg-line/60 h-11 px-4 text-sm rounded-lg w-full sm:w-auto">Read documentation</a></div></div></section></main><footer class="border-t border-line bg-raised/30 px-4 pt-16 pb-8 sm:px-6"><div class="mx-auto max-w-7xl"><div class="mb-16 grid grid-cols-2 gap-8 md:grid-cols-4 lg:grid-cols-5"><div class="col-span-2 lg:col-span-2"><a aria-label="tokenhop home" class="mb-6 inline-flex min-h-[44px] items-center gap-3 rounded-lg" href="/"><span class="flex items-center gap-2.5 "><svg aria-hidden="true" viewBox="0 0 64 64" width="36" height="36" class="" focusable="false"><rect width="64" height="64" rx="16" fill="var(--signal-coral)"></rect><path d="M25 11V41.5C25 48.5 28.8 52 35.5 52H40" fill="none" stroke="currentColor" stroke-width="7.5" stroke-linecap="round"></path><path d="M14 26.5C22 18.5 34 18 42 24" fill="none" stroke="currentColor" stroke-width="6.5" stroke-linecap="round"></path><path d="M43 29a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0-13 0z" fill="currentColor"></path></svg><span class="font-display font-bold tracking-[-0.02em] text-text" style="font-size:22px">tokenhop</span></span></a><p class="mb-6 max-w-xs text-sm leading-relaxed text-muted">The unified endpoint for AI generation. Connect, route, and manage your AI providers with ease.</p><div class="flex gap-4"><a class="inline-flex min-h-[44px] min-w-[44px] items-center justify-center rounded-lg text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer"><span class="sr-only">tokenhop on GitHub</span><span class="material-symbols-outlined text-[20px]" aria-hidden="true">code</span></a></div></div><div class="flex flex-col gap-4"><h2 class="font-sans text-sm font-semibold text-text">Product</h2><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="#features">Features</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="/dashboard">Dashboard</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer">Changelog</a></div><div class="flex flex-col gap-4"><h2 class="font-sans text-sm font-semibold text-text">Resources</h2><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop#readme" target="_blank" rel="noopener noreferrer">Documentation</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer">GitHub</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop/pkgs/container/tokenhop" target="_blank" rel="noopener noreferrer">Docker</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://www.npmjs.com/package/tokenhop" target="_blank" rel="noopener noreferrer">npm</a></div><div class="flex flex-col gap-4"><h2 class="font-sans text-sm font-semibold text-text">Legal</h2><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">MIT License</a></div></div><div class="flex flex-col items-center justify-between gap-4 border-t border-line pt-8 sm:flex-row"><div class="flex flex-col gap-1"><p class="text-sm text-muted">© 2025 tokenhop. All rights reserved.</p><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/decolua/9router" target="_blank" rel="noopener noreferrer">Based on 9Router by decolua</a></div><div class="flex gap-6"><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer">GitHub</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop/pkgs/container/tokenhop" target="_blank" rel="noopener noreferrer">Docker</a></div></div></div></footer></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-187fa25c98ba99f3.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[24597,[\"3670\",\"static/chunks/3670-e7a22341025498f8.js\",\"7177\",\"static/chunks/app/layout-c266f1acedfb4651.js\"],\"default\"]\n3:I[21110,[\"3670\",\"static/chunks/3670-e7a22341025498f8.js\",\"7177\",\"static/chunks/app/layout-c266f1acedfb4651.js\"],\"ThemeProvider\"]\n4:I[94635,[\"3670\",\"static/chunks/3670-e7a22341025498f8.js\",\"7177\",\"static/chunks/app/layout-c266f1acedfb4651.js\"],\"RuntimeI18nProvider\"]\n5:I[57121,[],\"\"]\n6:I[74581,[],\"\"]\n7:I[61304,[],\"ClientPageRoot\"]\n8:I[42586,[\"1610\",\"static/chunks/1610-54cdd36a7d983e62.js\",\"2903\",\"static/chunks/2903-5612a657f163e2fe.js\",\"7018\",\"static/chunks/app/landing/page-02b7bfebd65c41f1.js\"],\"default\"]\nb:I[90484,[],\"OutletBoundary\"]\nc:\"$Sreact.suspense\"\nf:I[90484,[],\"ViewportBoundary\"]\n11:I[90484,[],\"MetadataBoundary\"]\n13:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/2b5b02fc7e511755-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/7d4881bb7e1bf84d-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/9d5a263311222317-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/a3e6e8037ffa1953.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/aa016aab0e6d1295-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/c7e0cf6c760983e7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/9f0b95a0d0bc5e51.css\",\"style\"]\ne:X\n0:{\"P\":null,\"c\":[\"\",\"landing\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"landing\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9f0b95a0d0bc5e51.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_ac327c __variable_ebdb69 __variable_db7957 __variable_614881\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){var r=document.documentElement;try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'dark';t=t||'dark';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'\u0026\u0026m)){r.classList.add('dark')}else{r.classList.remove('dark')}}catch(e){r.classList.add('dark')}try{var c=document.cookie.match(/(?:^|; )locale=([^;]*)/);var l=c?decodeURIComponent(c[1]):'en';if(l==='zh')l='zh-CN';if([\\\"en\\\",\\\"vi\\\",\\\"zh-CN\\\",\\\"zh-TW\\\",\\\"ja\\\",\\\"pt-BR\\\",\\\"pt-PT\\\",\\\"ko\\\",\\\"es\\\",\\\"de\\\",\\\"fr\\\",\\\"he\\\",\\\"ar\\\",\\\"ru\\\",\\\"pl\\\",\\\"cs\\\",\\\"nl\\\",\\\"tr\\\",\\\"uk\\\",\\\"tl\\\",\\\"id\\\",\\\"km\\\",\\\"th\\\",\\\"hi\\\",\\\"bn\\\",\\\"ur\\\",\\\"ro\\\",\\\"sv\\\",\\\"it\\\",\\\"el\\\",\\\"hu\\\",\\\"fi\\\",\\\"da\\\",\\\"no\\\",\\\"fa\\\"].indexOf(l)\u003c0)l='en';r.lang=l;if([\\\"ar\\\",\\\"he\\\",\\\"fa\\\",\\\"ur\\\"].indexOf(l)\u003e=0)r.dir='rtl'}catch(e){}})();\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var m=document.cookie.match(/(?:^|; )nr-density=([^;]*)/);if(m\u0026\u0026decodeURIComponent(m[1])==='compact'){document.documentElement.classList.add('compact-density')}}catch(e){}})();\"}}]]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{\"Component\":\"$8\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@9\",\"$@a\"]}}],null,[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@d\"}]}]]}],{},null,false,null]},null,false,\"$e\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"children\":\"$L10\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L11\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L12\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"3Qm_WgU2xvFJ9U_G7SKhT\"}\ne:C\n9:{}\na:\"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params\"\n10:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#f3f1ea\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#0d0e12\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n14:I[86869,[],\"IconMark\"]\nd:null\n12:[[\"$\",\"title\",\"0\",{\"children\":\"tokenhop - AI infrastructure management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/brand/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/brand/favicon.ico\"}],[\"$\",\"$L14\",\"5\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="__variable_ac327c __variable_ebdb69 __variable_db7957 __variable_614881"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/2b5b02fc7e511755-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7d4881bb7e1bf84d-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/9d5a263311222317-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/a3e6e8037ffa1953.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/aa016aab0e6d1295-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/c7e0cf6c760983e7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/9f0b95a0d0bc5e51.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-8693ccf029e9af63.js"/><script src="/_next/static/chunks/4bd1b696-8a4ab4fdf0ae305a.js" async=""></script><script src="/_next/static/chunks/3794-0a1186eb85c3950f.js" async=""></script><script src="/_next/static/chunks/main-app-cf38df0bac48d0de.js" async=""></script><script src="/_next/static/chunks/3670-90f5cd325f460eb5.js" async=""></script><script src="/_next/static/chunks/app/layout-c266f1acedfb4651.js" async=""></script><script src="/_next/static/chunks/1610-54cdd36a7d983e62.js" async=""></script><script src="/_next/static/chunks/2903-5612a657f163e2fe.js" async=""></script><script src="/_next/static/chunks/app/landing/page-bcaea5febe1c68c0.js" async=""></script><meta name="theme-color" content="#f3f1ea" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#0d0e12" media="(prefers-color-scheme: dark)"/><title>tokenhop - AI infrastructure management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/brand/favicon.svg" type="image/svg+xml"/><link rel="icon" href="/brand/favicon.ico"/><meta name="next-size-adjust" content=""/><script>(function(){var r=document.documentElement;try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'dark';t=t||'dark';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'&&m)){r.classList.add('dark')}else{r.classList.remove('dark')}}catch(e){r.classList.add('dark')}try{var c=document.cookie.match(/(?:^|; )locale=([^;]*)/);var l=c?decodeURIComponent(c[1]):'en';if(l==='zh')l='zh-CN';if(["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","km","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no","fa"].indexOf(l)<0)l='en';r.lang=l;if(["ar","he","fa","ur"].indexOf(l)>=0)r.dir='rtl'}catch(e){}})();</script><script>(function(){try{var m=document.cookie.match(/(?:^|; )nr-density=([^;]*)/);if(m&&decodeURIComponent(m[1])==='compact'){document.documentElement.classList.add('compact-density')}}catch(e){}})();</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div class="relative overflow-x-hidden bg-bg font-sans text-text antialiased"><div aria-hidden="true" class="landing-grid pointer-events-none fixed inset-0"></div><header class="fixed inset-x-0 top-0 z-50 border-b border-line bg-panel/80 backdrop-blur-md"><nav aria-label="Primary" class="mx-auto flex h-16 max-w-7xl items-center justify-between px-4 sm:px-6"><a aria-label="tokenhop home" class="flex min-h-[44px] items-center gap-3 rounded-lg" href="/"><span class="flex items-center gap-2.5 "><svg aria-hidden="true" viewBox="0 0 64 64" width="36" height="36" class="" focusable="false"><rect width="64" height="64" rx="16" fill="var(--signal-coral)"></rect><path d="M25 11V41.5C25 48.5 28.8 52 35.5 52H40" fill="none" stroke="currentColor" stroke-width="7.5" stroke-linecap="round"></path><path d="M14 26.5C22 18.5 34 18 42 24" fill="none" stroke="currentColor" stroke-width="6.5" stroke-linecap="round"></path><path d="M43 29a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0-13 0z" fill="currentColor"></path></svg><span class="font-display font-bold tracking-[-0.02em] text-text" style="font-size:22px">tokenhop</span></span></a><div class="hidden items-center gap-1 md:flex"><a href="#features" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">Features</a><a href="#how-it-works" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">How it Works</a><a href="https://github.com/tokenhop/tokenhop#readme" target="_blank" rel="noopener noreferrer" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">Docs</a><a href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer" class="inline-flex min-h-[44px] items-center gap-1 rounded-lg px-3 text-sm font-medium text-muted transition-colors hover:text-text">GitHub<span class="material-symbols-outlined text-[14px]" aria-hidden="true">open_in_new</span></a></div><div class="flex items-center gap-2"><button class="flex items-center justify-center size-10 rounded-full text-muted hover:text-text hover:bg-raised transition-colors min-h-[44px] min-w-[44px]" aria-label="Switch to light mode" title="Switch to light mode"><span class="material-symbols-outlined text-[22px]">light_mode</span></button><a class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95 h-11 px-4 text-sm rounded-lg hidden sm:inline-flex" href="/dashboard">Get started</a><button aria-expanded="false" aria-controls="landing-mobile-menu" type="button" aria-label="Open menu" class="inline-flex size-10 shrink-0 items-center justify-center rounded-lg border border-line bg-raised text-muted transition-colors duration-150 hover:bg-line/60 hover:text-text focus-visible:outline-none focus-visible:shadow-focus disabled:cursor-not-allowed disabled:opacity-50 min-h-[44px] min-w-[44px] md:hidden"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">menu</span></button></div></nav></header><main class="relative"><div class="relative"><section class="relative flex min-h-[90vh] flex-col items-center justify-center overflow-hidden px-4 pt-32 pb-20 sm:px-6"><div aria-hidden="true" class="pointer-events-none absolute inset-x-0 top-0 h-[420px] bg-coral-bg [mask-image:radial-gradient(ellipse_60%_100%_at_50%_0%,black,transparent)]"></div><div class="relative z-10 flex w-full max-w-4xl flex-col items-center gap-8 text-center"><span class="inline-flex items-center gap-1.5 rounded-full font-semibold whitespace-nowrap bg-raised text-muted shadow-[inset_0_0_0_1px_var(--signal-line)] h-6 px-2.5 text-xs"><span aria-hidden="true" class="size-2 rounded-full bg-current"></span>Open source · MIT</span><h1 class="font-display text-[42px] leading-[1.05] font-bold tracking-[-0.02em] text-balance text-text sm:text-5xl md:text-6xl">One endpoint for <br/><span class="text-coral">all AI providers</span></h1><p class="mx-auto max-w-2xl text-lg font-light text-muted md:text-xl">AI endpoint proxy with web dashboard - A JavaScript port of CLIProxyAPI. Works seamlessly with Claude Code, OpenAI Codex, Cline, RooCode, and other CLI tools.</p><div class="w-full max-w-md"><div class="flex h-11 items-center gap-2 rounded-lg border border-line bg-raised ps-3 pe-1.5 transition-colors focus-within:border-coral focus-within:shadow-focus"><code title="http://localhost:20128/v1" class="min-w-0 flex-1 truncate font-mono text-sm text-text">http://localhost:20128/v1</code><button type="button" aria-label="Copy endpoint URL" class="inline-flex size-8 shrink-0 items-center justify-center rounded-md text-muted transition-colors hover:bg-line/60 hover:text-text focus-visible:shadow-focus"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">content_copy</span></button><span aria-live="polite" class="sr-only"></span></div></div><div class="flex w-full flex-wrap items-center justify-center gap-4"><a class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95 h-11 px-4 text-sm rounded-lg" href="/dashboard"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">rocket_launch</span>Get started</a><a href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-raised text-text border border-line hover:bg-line/60 h-11 px-4 text-sm rounded-lg"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">code</span>View on GitHub</a></div></div></section><div class="flex justify-center pb-20"><div class="w-full max-w-4xl"><ul class="sr-only"><li>Requests from Claude Code, OpenAI Codex, Cline and Cursor go to the tokenhop hub.</li><li>The hub routes each request to OpenAI, Anthropic, Gemini or GitHub Copilot.</li></ul><div aria-hidden="true" class="mx-auto flex max-w-md flex-col gap-2 px-4 md:hidden"><div class="grid grid-cols-2 gap-2"><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">Claude Code</span><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">OpenAI Codex</span><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">Cline</span><span class="rounded-lg border border-line bg-raised px-3 py-2 text-center text-sm font-medium text-text">Cursor</span></div><span class="material-symbols-outlined self-center text-[22px] text-subtle" aria-hidden="true">arrow_downward</span><span class="rounded-xl border-2 border-coral bg-panel px-4 py-3 text-center font-display text-base font-bold text-text">tokenhop hub</span><span class="material-symbols-outlined self-center text-[22px] text-lime-ink" aria-hidden="true">arrow_downward</span><div class="grid grid-cols-2 gap-2"><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-lime-ink bg-lime-bg text-lime-ink ring-2 ring-lime-ink">OpenAI</span><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-line bg-raised text-text">Anthropic</span><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-line bg-raised text-text">Gemini</span><span class="rounded-lg border px-3 py-2 text-center text-sm font-semibold border-line bg-raised text-text">GitHub Copilot</span></div></div><div aria-hidden="true" class="relative mt-16 hidden h-[360px] w-full items-center justify-center md:flex"><div class="relative z-20 flex size-32 flex-col items-center justify-center gap-1 rounded-full border-2 border-coral bg-panel shadow-card"><span class="material-symbols-outlined text-4xl text-coral">hub</span><span class="text-xs font-bold tracking-widest text-text uppercase">tokenhop</span><span class="absolute inset-0 rounded-full border border-coral opacity-40 motion-safe:animate-ping"></span></div><div class="absolute start-0 top-1/2 flex -translate-y-1/2 flex-col gap-7"><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/claude.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/codex.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/cline.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div><div class="flex size-16 items-center justify-center overflow-hidden rounded-2xl border border-line bg-raised p-2"><img src="/providers/cursor.webp" alt="" width="48" height="48" class="max-h-12 max-w-12 rounded-xl object-contain" loading="lazy" decoding="async"/></div></div><svg aria-hidden="true" class="pointer-events-none absolute inset-0 z-10 size-full rtl:-scale-x-100" viewBox="0 0 896 360" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg"><path d="M 60 50 C 250 70, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 60 140 C 250 140, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 60 210 C 250 210, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 60 300 C 250 280, 250 180, 360 180" fill="none" stroke-dasharray="5 9" stroke-width="2" class="stroke-subtle motion-safe:animate-flow"></path><path d="M 440 180 C 550 180, 550 50, 740 50" fill="none" stroke-dasharray="5 9" stroke-width="3" class="stroke-lime-ink motion-safe:animate-flow"></path><path d="M 440 180 C 550 180, 550 130, 740 130" fill="none" stroke-width="2" class="stroke-line"></path><path d="M 440 180 C 550 180, 550 230, 740 230" fill="none" stroke-width="2" class="stroke-line"></path><path d="M 440 180 C 550 180, 550 310, 740 310" fill="none" stroke-width="2" class="stroke-line"></path></svg><div class="absolute end-0 top-0 bottom-0 flex flex-col justify-between py-6"><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-lime-ink bg-lime-bg text-lime-ink ring-2 ring-lime-ink">OpenAI</span><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-line bg-raised text-text">Anthropic</span><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-line bg-raised text-text">Gemini</span><span class="flex min-w-[140px] items-center justify-center rounded-lg border px-4 py-2 text-xs font-bold transition-colors border-line bg-raised text-text">GitHub Copilot</span></div></div></div></div></div><section class="px-4 py-24 sm:px-6" id="get-started"><div class="mx-auto max-w-7xl"><div class="flex flex-col items-start gap-16 lg:flex-row"><div class="flex-1"><p class="mb-2 text-xs font-semibold tracking-[0.08em] text-subtle uppercase">Get started</p><h2 class="mb-6 font-display text-3xl font-bold tracking-[-0.02em] text-text md:text-4xl">Get started in 30 seconds</h2><p class="mb-8 text-lg text-muted">Install tokenhop, configure your providers via web dashboard, and start routing AI requests.</p><ol class="flex list-none flex-col gap-6 p-0"><li class="flex gap-4"><span aria-hidden="true" class="flex size-8 flex-none items-center justify-center rounded-full bg-coral-bg font-semibold text-coral-ink">1</span><div><h3 class="text-lg font-bold text-text">Install tokenhop</h3><p class="mt-1 text-sm text-muted">Run the Docker image to start the server instantly</p></div></li><li class="flex gap-4"><span aria-hidden="true" class="flex size-8 flex-none items-center justify-center rounded-full bg-coral-bg font-semibold text-coral-ink">2</span><div><h3 class="text-lg font-bold text-text">Open dashboard</h3><p class="mt-1 text-sm text-muted">Configure providers and API keys via web interface</p></div></li><li class="flex gap-4"><span aria-hidden="true" class="flex size-8 flex-none items-center justify-center rounded-full bg-coral-bg font-semibold text-coral-ink">3</span><div><h3 class="text-lg font-bold text-text">Route requests</h3><p class="mt-1 text-sm text-muted">Point your CLI tools to http://localhost:20128</p></div></li></ol></div><div class="dark w-full min-w-0 flex-1"><div class="signal-terminal overflow-hidden rounded-2xl border border-line shadow-card"><div class="flex items-center gap-2 border-b border-line px-4 py-3"><span aria-hidden="true" class="flex gap-2"><span class="size-3 rounded-full bg-line"></span><span class="size-3 rounded-full bg-line"></span><span class="size-3 rounded-full bg-line"></span></span><span class="ms-2 font-mono text-xs text-muted">terminal</span></div><div class="overflow-x-auto p-6 font-mono text-sm leading-relaxed"><div class="flex h-11 items-center gap-2 rounded-lg border border-line bg-raised ps-3 pe-1.5 transition-colors focus-within:border-coral focus-within:shadow-focus mb-6"><code title="docker run -d -p 20128:20128 -v ~/.tokenhop:/app/data -e INITIAL_PASSWORD=change-me ghcr.io/tokenhop/tokenhop" class="min-w-0 flex-1 truncate font-mono text-sm text-text">$ docker run -d -p 20128:20128 -v ~/.tokenhop:/app/data -e INITIAL_PASSWORD=change-me ghcr.io/tokenhop/tokenhop</code><button type="button" aria-label="Copy install command" class="inline-flex size-8 shrink-0 items-center justify-center rounded-md text-muted transition-colors hover:bg-line/60 hover:text-text focus-visible:shadow-focus"><span class="material-symbols-outlined text-[18px]" aria-hidden="true">content_copy</span></button><span aria-live="polite" class="sr-only"></span></div><p class="sr-only">Starting tokenhop. Server running on http://localhost:20128. Dashboard at http://localhost:20128/dashboard. Ready to route.</p><div aria-hidden="true" class="mb-6 flex flex-col gap-1"><span class="signal-terminal-log"><span class="signal-terminal-time me-2">&gt;</span>Starting tokenhop...</span><span class="signal-terminal-info"><span class="signal-terminal-time me-2">&gt;</span>Server running on http://localhost:20128</span><span class="signal-terminal-info"><span class="signal-terminal-time me-2">&gt;</span>Dashboard: http://localhost:20128/dashboard</span><span class="signal-terminal-log"><span class="signal-terminal-time me-2">&gt;</span>Ready to route</span></div><p class="mb-2 border-t border-line pt-4 text-xs"><span class="material-symbols-outlined me-1 inline-block align-[-2px] text-[14px]" aria-hidden="true">edit_note</span>Configure providers in dashboard or use environment variables</p><p class="text-xs"><span class="signal-terminal-debug">Data location:</span><br/><span class="signal-terminal-time">macOS/Linux:</span> <!-- -->~/.tokenhop/db/data.sqlite<br/><span class="signal-terminal-time">Windows:</span> <!-- -->%APPDATA%/tokenhop/db/data.sqlite</p></div></div></div></div></div></section><section class="border-y border-line bg-raised/40 py-24" id="how-it-works"><div class="mx-auto max-w-7xl px-4 sm:px-6"><div class="mb-16"><p class="mb-2 text-xs font-semibold tracking-[0.08em] text-subtle uppercase">How it works</p><h2 class="mb-4 font-display text-3xl font-bold tracking-[-0.02em] text-text md:text-4xl">How tokenhop works</h2><p class="max-w-xl text-lg text-muted">Data flows seamlessly from your application through our intelligent routing layer to the best provider for the job.</p></div><div class="relative grid grid-cols-1 gap-8 md:grid-cols-3"><div aria-hidden="true" class="absolute top-12 start-[16%] end-[16%] hidden h-[2px] bg-line md:block"></div><div class="relative flex flex-col gap-6"><div class="z-10 mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border border-line bg-panel shadow-card md:mx-0"><span class="material-symbols-outlined text-4xl text-muted" aria-hidden="true">terminal</span></div><div class="text-start"><h3 class="mb-2 text-xl font-bold text-text">1. CLI &amp; SDKs</h3><p class="text-sm text-muted">Your requests start from your favorite tools or our unified SDK. Just change the base URL.</p></div></div><div class="relative flex flex-col gap-6 md:items-center md:text-center"><div class="z-10 mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border-2 border-coral bg-panel shadow-card"><span class="material-symbols-outlined text-4xl text-coral motion-safe:animate-pulse motion-reduce:animate-none" aria-hidden="true">hub</span></div><div class="text-start md:text-center"><h3 class="mb-2 text-xl font-bold text-coral">2. tokenhop hub</h3><p class="text-sm text-muted">Our engine analyzes the prompt, checks provider health, and routes for lowest latency or cost.</p></div></div><div class="relative flex flex-col gap-6 md:items-end md:text-end"><div class="z-10 mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border border-line bg-panel shadow-card md:mx-0"><span class="material-symbols-outlined text-4xl text-muted" aria-hidden="true">cloud</span></div><div class="text-start md:text-end"><h3 class="mb-2 text-xl font-bold text-text">3. AI providers</h3><p class="text-sm text-muted">The request is fulfilled by OpenAI, Anthropic, Gemini, or others instantly.</p></div></div></div></div></section><section class="px-4 py-24 sm:px-6" id="features"><div class="mx-auto max-w-7xl"><div class="mb-16"><p class="mb-2 text-xs font-semibold tracking-[0.08em] text-subtle uppercase">Features</p><h2 class="mb-4 font-display text-3xl font-bold tracking-[-0.02em] text-text md:text-4xl">Powerful features</h2><p class="max-w-xl text-lg text-muted">Everything you need to manage your AI infrastructure in one place, built for scale.</p></div><div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">link</span></div><h3 class="mb-2 text-base font-semibold text-text">Unified endpoint</h3><p class="text-sm leading-relaxed text-muted">Access all providers via a single standard API URL.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">bolt</span></div><h3 class="mb-2 text-base font-semibold text-text">Easy setup</h3><p class="text-sm leading-relaxed text-muted">Get up and running in minutes with one Docker command.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">shield_with_heart</span></div><h3 class="mb-2 text-base font-semibold text-text">Model fallback</h3><p class="text-sm leading-relaxed text-muted">Automatically switch providers on failure or high latency.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">monitoring</span></div><h3 class="mb-2 text-base font-semibold text-text">Usage tracking</h3><p class="text-sm leading-relaxed text-muted">Detailed analytics and cost monitoring across all models.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">key</span></div><h3 class="mb-2 text-base font-semibold text-text">OAuth &amp; API keys</h3><p class="text-sm leading-relaxed text-muted">Securely manage credentials in one vault.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">cloud_sync</span></div><h3 class="mb-2 text-base font-semibold text-text">Cloud sync</h3><p class="text-sm leading-relaxed text-muted">Sync your configurations across devices instantly.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">terminal</span></div><h3 class="mb-2 text-base font-semibold text-text">CLI support</h3><p class="text-sm leading-relaxed text-muted">Works with Claude Code, Codex, Cline, Cursor, and more.</p></article><article class="rounded-2xl border border-line bg-panel p-6 shadow-card transition-colors hover:border-coral/40"><div class="mb-4 flex size-10 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink"><span class="material-symbols-outlined text-[20px]" aria-hidden="true">dashboard</span></div><h3 class="mb-2 text-base font-semibold text-text">Dashboard</h3><p class="text-sm leading-relaxed text-muted">Visual dashboard for real-time traffic analysis.</p></article></div></div></section><section class="relative overflow-hidden px-4 py-24 sm:px-6" aria-labelledby="cta-title"><div aria-hidden="true" class="pointer-events-none absolute inset-0 bg-coral-bg [mask-image:radial-gradient(ellipse_70%_100%_at_50%_100%,black,transparent)]"></div><div class="relative z-10 mx-auto max-w-4xl text-center"><h2 id="cta-title" class="mb-6 font-display text-4xl font-bold tracking-[-0.02em] text-text md:text-5xl">Ready to simplify your AI infrastructure?</h2><p class="mx-auto mb-10 max-w-2xl text-xl text-muted">Join developers who are streamlining their AI integrations with tokenhop. Open source and free to start.</p><div class="flex flex-col items-center justify-center gap-4 sm:flex-row"><a class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-lime text-on-lime border border-transparent shadow-[inset_0_0_0_1px_rgba(0,0,0,0.14)] hover:brightness-95 h-11 px-4 text-sm rounded-lg w-full sm:w-auto" href="/dashboard">Start free</a><a href="https://github.com/tokenhop/tokenhop#readme" target="_blank" rel="noopener noreferrer" class="inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer active:scale-[0.97] focus-visible:outline-none focus-visible:shadow-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100 aria-disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:active:scale-100 bg-raised text-text border border-line hover:bg-line/60 h-11 px-4 text-sm rounded-lg w-full sm:w-auto">Read documentation</a></div></div></section></main><footer class="border-t border-line bg-raised/30 px-4 pt-16 pb-8 sm:px-6"><div class="mx-auto max-w-7xl"><div class="mb-16 grid grid-cols-2 gap-8 md:grid-cols-4 lg:grid-cols-5"><div class="col-span-2 lg:col-span-2"><a aria-label="tokenhop home" class="mb-6 inline-flex min-h-[44px] items-center gap-3 rounded-lg" href="/"><span class="flex items-center gap-2.5 "><svg aria-hidden="true" viewBox="0 0 64 64" width="36" height="36" class="" focusable="false"><rect width="64" height="64" rx="16" fill="var(--signal-coral)"></rect><path d="M25 11V41.5C25 48.5 28.8 52 35.5 52H40" fill="none" stroke="currentColor" stroke-width="7.5" stroke-linecap="round"></path><path d="M14 26.5C22 18.5 34 18 42 24" fill="none" stroke="currentColor" stroke-width="6.5" stroke-linecap="round"></path><path d="M43 29a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0-13 0z" fill="currentColor"></path></svg><span class="font-display font-bold tracking-[-0.02em] text-text" style="font-size:22px">tokenhop</span></span></a><p class="mb-6 max-w-xs text-sm leading-relaxed text-muted">The unified endpoint for AI generation. Connect, route, and manage your AI providers with ease.</p><div class="flex gap-4"><a class="inline-flex min-h-[44px] min-w-[44px] items-center justify-center rounded-lg text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer"><span class="sr-only">tokenhop on GitHub</span><span class="material-symbols-outlined text-[20px]" aria-hidden="true">code</span></a></div></div><div class="flex flex-col gap-4"><h2 class="font-sans text-sm font-semibold text-text">Product</h2><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="#features">Features</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="/dashboard">Dashboard</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer">Changelog</a></div><div class="flex flex-col gap-4"><h2 class="font-sans text-sm font-semibold text-text">Resources</h2><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop#readme" target="_blank" rel="noopener noreferrer">Documentation</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer">GitHub</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop/pkgs/container/tokenhop" target="_blank" rel="noopener noreferrer">Docker</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://www.npmjs.com/package/tokenhop" target="_blank" rel="noopener noreferrer">npm</a></div><div class="flex flex-col gap-4"><h2 class="font-sans text-sm font-semibold text-text">Legal</h2><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-coral focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">MIT License</a></div></div><div class="flex flex-col items-center justify-between gap-4 border-t border-line pt-8 sm:flex-row"><div class="flex flex-col gap-1"><p class="text-sm text-muted">© 2025 tokenhop. All rights reserved.</p><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/decolua/9router" target="_blank" rel="noopener noreferrer">Based on 9Router by decolua</a></div><div class="flex gap-6"><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop" target="_blank" rel="noopener noreferrer">GitHub</a><a class="inline-flex min-h-[44px] items-center text-sm text-muted transition-colors hover:text-text focus-visible:shadow-focus" href="https://github.com/tokenhop/tokenhop/pkgs/container/tokenhop" target="_blank" rel="noopener noreferrer">Docker</a></div></div></div></footer></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-8693ccf029e9af63.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[24597,[\"3670\",\"static/chunks/3670-90f5cd325f460eb5.js\",\"7177\",\"static/chunks/app/layout-c266f1acedfb4651.js\"],\"default\"]\n3:I[21110,[\"3670\",\"static/chunks/3670-90f5cd325f460eb5.js\",\"7177\",\"static/chunks/app/layout-c266f1acedfb4651.js\"],\"ThemeProvider\"]\n4:I[94635,[\"3670\",\"static/chunks/3670-90f5cd325f460eb5.js\",\"7177\",\"static/chunks/app/layout-c266f1acedfb4651.js\"],\"RuntimeI18nProvider\"]\n5:I[57121,[],\"\"]\n6:I[74581,[],\"\"]\n7:I[61304,[],\"ClientPageRoot\"]\n8:I[42586,[\"1610\",\"static/chunks/1610-54cdd36a7d983e62.js\",\"2903\",\"static/chunks/2903-5612a657f163e2fe.js\",\"7018\",\"static/chunks/app/landing/page-bcaea5febe1c68c0.js\"],\"default\"]\nb:I[90484,[],\"OutletBoundary\"]\nc:\"$Sreact.suspense\"\nf:I[90484,[],\"ViewportBoundary\"]\n11:I[90484,[],\"MetadataBoundary\"]\n13:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/2b5b02fc7e511755-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/7d4881bb7e1bf84d-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/9d5a263311222317-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/a3e6e8037ffa1953.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/aa016aab0e6d1295-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/c7e0cf6c760983e7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/9f0b95a0d0bc5e51.css\",\"style\"]\ne:X\n0:{\"P\":null,\"c\":[\"\",\"landing\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"landing\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9f0b95a0d0bc5e51.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_ac327c __variable_ebdb69 __variable_db7957 __variable_614881\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){var r=document.documentElement;try{var s=localStorage.getItem('theme');var t=s?(JSON.parse(s).state||{}).theme:'dark';t=t||'dark';var m=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'\u0026\u0026m)){r.classList.add('dark')}else{r.classList.remove('dark')}}catch(e){r.classList.add('dark')}try{var c=document.cookie.match(/(?:^|; )locale=([^;]*)/);var l=c?decodeURIComponent(c[1]):'en';if(l==='zh')l='zh-CN';if([\\\"en\\\",\\\"vi\\\",\\\"zh-CN\\\",\\\"zh-TW\\\",\\\"ja\\\",\\\"pt-BR\\\",\\\"pt-PT\\\",\\\"ko\\\",\\\"es\\\",\\\"de\\\",\\\"fr\\\",\\\"he\\\",\\\"ar\\\",\\\"ru\\\",\\\"pl\\\",\\\"cs\\\",\\\"nl\\\",\\\"tr\\\",\\\"uk\\\",\\\"tl\\\",\\\"id\\\",\\\"km\\\",\\\"th\\\",\\\"hi\\\",\\\"bn\\\",\\\"ur\\\",\\\"ro\\\",\\\"sv\\\",\\\"it\\\",\\\"el\\\",\\\"hu\\\",\\\"fi\\\",\\\"da\\\",\\\"no\\\",\\\"fa\\\"].indexOf(l)\u003c0)l='en';r.lang=l;if([\\\"ar\\\",\\\"he\\\",\\\"fa\\\",\\\"ur\\\"].indexOf(l)\u003e=0)r.dir='rtl'}catch(e){}})();\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var m=document.cookie.match(/(?:^|; )nr-density=([^;]*)/);if(m\u0026\u0026decodeURIComponent(m[1])==='compact'){document.documentElement.classList.add('compact-density')}}catch(e){}})();\"}}]]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{\"Component\":\"$8\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@9\",\"$@a\"]}}],null,[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@d\"}]}]]}],{},null,false,null]},null,false,\"$e\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"children\":\"$L10\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L11\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L12\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"J4xdfHpBUAMOCO5dsemSj\"}\ne:C\n9:{}\na:\"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params\"\n10:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#f3f1ea\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#0d0e12\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n14:I[86869,[],\"IconMark\"]\nd:null\n12:[[\"$\",\"title\",\"0\",{\"children\":\"tokenhop - AI infrastructure management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/brand/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/brand/favicon.ico\"}],[\"$\",\"$L14\",\"5\",{}]]\n"])</script></body></html>