@yina-npm/openrouterx 0.4.20 → 0.4.21

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 (561) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +6 -3
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/routes-manifest.json +18 -0
  5. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js +2 -2
  6. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js.nft.json +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js +2 -2
  9. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js.nft.json +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  12. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  15. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  18. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  21. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  24. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
  27. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  30. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  33. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  36. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  39. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  42. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  45. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  48. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  51. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  54. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  55. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
  57. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  58. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  60. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  61. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  63. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  64. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  66. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  67. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  69. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  70. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/user/page.js +3 -3
  72. package/app/.next/server/app/(dashboard)/dashboard/user/page.js.nft.json +1 -1
  73. package/app/.next/server/app/(dashboard)/dashboard/user/page_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/_global-error/page.js +3 -3
  75. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/_global-error.html +1 -1
  77. package/app/.next/server/app/_global-error.rsc +1 -1
  78. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  79. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  80. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  81. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  82. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  83. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  84. package/app/.next/server/app/_not-found/page.js +2 -2
  85. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/_not-found.html +1 -1
  87. package/app/.next/server/app/_not-found.rsc +4 -4
  88. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  89. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  90. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  91. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  92. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  93. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  94. package/app/.next/server/app/api/auth/login/route.js +1 -1
  95. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  96. package/app/.next/server/app/api/auth/me/route.js +1 -1
  97. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  98. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  99. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  100. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  101. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  102. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -0
  103. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -0
  104. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route_client-reference-manifest.js +1 -0
  105. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  106. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  107. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +1 -1
  108. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  109. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  110. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  111. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  112. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  113. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  114. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  115. package/app/.next/server/app/api/combos/route.js +1 -1
  116. package/app/.next/server/app/api/health/route.js +1 -1
  117. package/app/.next/server/app/api/init/route.js +1 -1
  118. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  119. package/app/.next/server/app/api/keys/route.js +1 -1
  120. package/app/.next/server/app/api/locale/route.js +1 -1
  121. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  122. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  123. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  124. package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  125. package/app/.next/server/app/api/models/alias/route.js +1 -1
  126. package/app/.next/server/app/api/models/availability/route.js +1 -1
  127. package/app/.next/server/app/api/models/custom/route.js +1 -1
  128. package/app/.next/server/app/api/models/disabled/route.js +1 -1
  129. package/app/.next/server/app/api/models/route.js +1 -1
  130. package/app/.next/server/app/api/models/test/route.js +1 -1
  131. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  132. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  133. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  134. package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  135. package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  136. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  137. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  138. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  139. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  140. package/app/.next/server/app/api/pricing/route.js +1 -1
  141. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  142. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  143. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  144. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  145. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  146. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  147. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  148. package/app/.next/server/app/api/providers/client/route.js +1 -1
  149. package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  150. package/app/.next/server/app/api/providers/route.js +1 -1
  151. package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
  152. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  153. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  154. package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  155. package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  156. package/app/.next/server/app/api/proxy-pools/route.js +1 -1
  157. package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  158. package/app/.next/server/app/api/settings/database/route.js +1 -1
  159. package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
  160. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  161. package/app/.next/server/app/api/settings/route.js +1 -1
  162. package/app/.next/server/app/api/shutdown/route.js +1 -1
  163. package/app/.next/server/app/api/tags/route.js +1 -1
  164. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  165. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  166. package/app/.next/server/app/api/translator/load/route.js +1 -1
  167. package/app/.next/server/app/api/translator/save/route.js +1 -1
  168. package/app/.next/server/app/api/translator/send/route.js +1 -1
  169. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  170. package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
  171. package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
  172. package/app/.next/server/app/api/tunnel/status/route.js +1 -1
  173. package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  174. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  175. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  176. package/app/.next/server/app/api/tunnel/tailscale-install/route.js +3 -3
  177. package/app/.next/server/app/api/tunnel/tailscale-login/route.js +1 -1
  178. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  179. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  180. package/app/.next/server/app/api/usage/api-keys/route.js +1 -1
  181. package/app/.next/server/app/api/usage/chart/route.js +1 -1
  182. package/app/.next/server/app/api/usage/history/route.js +1 -1
  183. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  184. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  185. package/app/.next/server/app/api/usage/request-details/route.js +1 -1
  186. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  187. package/app/.next/server/app/api/usage/stats/route.js +1 -1
  188. package/app/.next/server/app/api/usage/stream/route.js +2 -2
  189. package/app/.next/server/app/api/users/[id]/route.js +1 -1
  190. package/app/.next/server/app/api/users/route.js +1 -1
  191. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  192. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  193. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  194. package/app/.next/server/app/api/v1/audio/voices/route.js +1 -0
  195. package/app/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -0
  196. package/app/.next/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -0
  197. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  198. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  199. package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
  200. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  201. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  202. package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
  203. package/app/.next/server/app/api/v1/models/info/route.js +1 -0
  204. package/app/.next/server/app/api/v1/models/info/route.js.nft.json +1 -0
  205. package/app/.next/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -0
  206. package/app/.next/server/app/api/v1/models/route.js +1 -1
  207. package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
  208. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  209. package/app/.next/server/app/api/v1/route.js +1 -1
  210. package/app/.next/server/app/api/v1/search/route.js +1 -1
  211. package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
  212. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  213. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  214. package/app/.next/server/app/api/version/route.js +1 -1
  215. package/app/.next/server/app/api/version/update/route.js +1 -1
  216. package/app/.next/server/app/callback/page.js +2 -2
  217. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  218. package/app/.next/server/app/callback.html +1 -1
  219. package/app/.next/server/app/callback.rsc +4 -4
  220. package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
  221. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  222. package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  223. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  224. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  225. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  226. package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  227. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  228. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  229. package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
  230. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  231. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  232. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  233. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  234. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  235. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  236. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  237. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  238. package/app/.next/server/app/favicon.ico/route.js +1 -1
  239. package/app/.next/server/app/index.html +1 -1
  240. package/app/.next/server/app/index.rsc +4 -4
  241. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  242. package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
  243. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  244. package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
  245. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  246. package/app/.next/server/app/landing/page.js +2 -2
  247. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  248. package/app/.next/server/app/landing.html +1 -1
  249. package/app/.next/server/app/landing.rsc +4 -4
  250. package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
  251. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  252. package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  253. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  254. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  255. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  256. package/app/.next/server/app/login/page.js +2 -2
  257. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  258. package/app/.next/server/app/login.html +1 -1
  259. package/app/.next/server/app/login.rsc +5 -5
  260. package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
  261. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  262. package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
  263. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  264. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  265. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  266. package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
  267. package/app/.next/server/app/page.js +2 -2
  268. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  269. package/app/.next/server/app-paths-manifest.json +6 -3
  270. package/app/.next/server/chunks/2343.js +1 -1
  271. package/app/.next/server/chunks/3855.js +1 -1
  272. package/app/.next/server/chunks/3913.js +1 -1
  273. package/app/.next/server/chunks/412.js +6 -6
  274. package/app/.next/server/chunks/4122.js +1 -1
  275. package/app/.next/server/chunks/4989.js +1 -1
  276. package/app/.next/server/chunks/5627.js +2 -2
  277. package/app/.next/server/chunks/5681.js +1 -1
  278. package/app/.next/server/chunks/6182.js +3 -3
  279. package/app/.next/server/chunks/6774.js +1 -0
  280. package/app/.next/server/chunks/7595.js +1 -1
  281. package/app/.next/server/chunks/7937.js +3 -3
  282. package/app/.next/server/chunks/9547.js +23 -0
  283. package/app/.next/server/middleware-build-manifest.js +1 -1
  284. package/app/.next/server/middleware.js +1 -1
  285. package/app/.next/server/pages/404.html +1 -1
  286. package/app/.next/server/pages/500.html +1 -1
  287. package/app/.next/server/server-reference-manifest.js +1 -1
  288. package/app/.next/server/server-reference-manifest.json +1 -1
  289. package/app/.next/static/2TCKT7FIN7PE7ZJ20oAeb/_buildManifest.js +1 -0
  290. package/app/.next/static/chunks/{1321-764b2073673fc333.js → 1321-b84130cd27e8b78c.js} +1 -1
  291. package/app/.next/static/chunks/1a258343-5938f676ed376386.js +1 -0
  292. package/app/.next/static/chunks/2336-5b3617dc05c223ff.js +23 -0
  293. package/app/.next/static/chunks/5497-a2d728c63029180e.js +7 -0
  294. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-ba226c8b3c01dd8d.js → page-bd677c182bc2aae9.js} +1 -1
  295. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-cee4e0a7455b73ca.js → page-32b908ea6b23f583.js} +1 -1
  296. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-28a10e3cb86b9581.js → page-82cfc464b5e01f4f.js} +2 -2
  297. package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/{page-99260106103e6a4e.js → page-4473f52ad379b661.js} +1 -1
  298. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-d1c369e2c3fb727b.js +1 -0
  299. package/app/.next/static/chunks/app/(dashboard)/layout-7ea5a7abc543b04d.js +1 -0
  300. package/app/.next/static/chunks/app/_global-error/page-d1c369e2c3fb727b.js +1 -0
  301. package/app/.next/static/chunks/app/api/auth/login/route-d1c369e2c3fb727b.js +1 -0
  302. package/app/.next/static/chunks/app/api/auth/logout/route-d1c369e2c3fb727b.js +1 -0
  303. package/app/.next/static/chunks/app/api/auth/me/route-d1c369e2c3fb727b.js +1 -0
  304. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-d1c369e2c3fb727b.js +1 -0
  305. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-d1c369e2c3fb727b.js +1 -0
  306. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-d1c369e2c3fb727b.js +1 -0
  307. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-d1c369e2c3fb727b.js +1 -0
  308. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-d1c369e2c3fb727b.js +1 -0
  309. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-d1c369e2c3fb727b.js +1 -0
  310. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-d1c369e2c3fb727b.js +1 -0
  311. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-d1c369e2c3fb727b.js +1 -0
  312. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-d1c369e2c3fb727b.js +1 -0
  313. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-d1c369e2c3fb727b.js +1 -0
  314. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-d1c369e2c3fb727b.js +1 -0
  315. package/app/.next/static/chunks/app/api/cloud/auth/route-d1c369e2c3fb727b.js +1 -0
  316. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-d1c369e2c3fb727b.js +1 -0
  317. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-d1c369e2c3fb727b.js +1 -0
  318. package/app/.next/static/chunks/app/api/cloud/models/alias/route-d1c369e2c3fb727b.js +1 -0
  319. package/app/.next/static/chunks/app/api/combos/[id]/route-d1c369e2c3fb727b.js +1 -0
  320. package/app/.next/static/chunks/app/api/combos/route-d1c369e2c3fb727b.js +1 -0
  321. package/app/.next/static/chunks/app/api/health/route-d1c369e2c3fb727b.js +1 -0
  322. package/app/.next/static/chunks/app/api/init/route-d1c369e2c3fb727b.js +1 -0
  323. package/app/.next/static/chunks/app/api/keys/[id]/route-d1c369e2c3fb727b.js +1 -0
  324. package/app/.next/static/chunks/app/api/keys/route-d1c369e2c3fb727b.js +1 -0
  325. package/app/.next/static/chunks/app/api/locale/route-d1c369e2c3fb727b.js +1 -0
  326. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-d1c369e2c3fb727b.js +1 -0
  327. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-d1c369e2c3fb727b.js +1 -0
  328. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-d1c369e2c3fb727b.js +1 -0
  329. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-d1c369e2c3fb727b.js +1 -0
  330. package/app/.next/static/chunks/app/api/models/alias/route-d1c369e2c3fb727b.js +1 -0
  331. package/app/.next/static/chunks/app/api/models/availability/route-d1c369e2c3fb727b.js +1 -0
  332. package/app/.next/static/chunks/app/api/models/custom/route-d1c369e2c3fb727b.js +1 -0
  333. package/app/.next/static/chunks/app/api/models/disabled/route-d1c369e2c3fb727b.js +1 -0
  334. package/app/.next/static/chunks/app/api/models/route-d1c369e2c3fb727b.js +1 -0
  335. package/app/.next/static/chunks/app/api/models/test/route-d1c369e2c3fb727b.js +1 -0
  336. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-d1c369e2c3fb727b.js +1 -0
  337. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-d1c369e2c3fb727b.js +1 -0
  338. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-d1c369e2c3fb727b.js +1 -0
  339. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-d1c369e2c3fb727b.js +1 -0
  340. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-d1c369e2c3fb727b.js +1 -0
  341. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-d1c369e2c3fb727b.js +1 -0
  342. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-d1c369e2c3fb727b.js +1 -0
  343. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-d1c369e2c3fb727b.js +1 -0
  344. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-d1c369e2c3fb727b.js +1 -0
  345. package/app/.next/static/chunks/app/api/pricing/route-d1c369e2c3fb727b.js +1 -0
  346. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-d1c369e2c3fb727b.js +1 -0
  347. package/app/.next/static/chunks/app/api/provider-nodes/route-d1c369e2c3fb727b.js +1 -0
  348. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-d1c369e2c3fb727b.js +1 -0
  349. package/app/.next/static/chunks/app/api/providers/[id]/models/route-d1c369e2c3fb727b.js +1 -0
  350. package/app/.next/static/chunks/app/api/providers/[id]/route-d1c369e2c3fb727b.js +1 -0
  351. package/app/.next/static/chunks/app/api/providers/[id]/test/route-d1c369e2c3fb727b.js +1 -0
  352. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-d1c369e2c3fb727b.js +1 -0
  353. package/app/.next/static/chunks/app/api/providers/client/route-d1c369e2c3fb727b.js +1 -0
  354. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-d1c369e2c3fb727b.js +1 -0
  355. package/app/.next/static/chunks/app/api/providers/route-d1c369e2c3fb727b.js +1 -0
  356. package/app/.next/static/chunks/app/api/providers/suggested-models/route-d1c369e2c3fb727b.js +1 -0
  357. package/app/.next/static/chunks/app/api/providers/test-batch/route-d1c369e2c3fb727b.js +1 -0
  358. package/app/.next/static/chunks/app/api/providers/validate/route-d1c369e2c3fb727b.js +1 -0
  359. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-d1c369e2c3fb727b.js +1 -0
  360. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-d1c369e2c3fb727b.js +1 -0
  361. package/app/.next/static/chunks/app/api/proxy-pools/route-d1c369e2c3fb727b.js +1 -0
  362. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-d1c369e2c3fb727b.js +1 -0
  363. package/app/.next/static/chunks/app/api/settings/database/route-d1c369e2c3fb727b.js +1 -0
  364. package/app/.next/static/chunks/app/api/settings/proxy-test/route-d1c369e2c3fb727b.js +1 -0
  365. package/app/.next/static/chunks/app/api/settings/require-login/route-d1c369e2c3fb727b.js +1 -0
  366. package/app/.next/static/chunks/app/api/settings/route-d1c369e2c3fb727b.js +1 -0
  367. package/app/.next/static/chunks/app/api/shutdown/route-d1c369e2c3fb727b.js +1 -0
  368. package/app/.next/static/chunks/app/api/tags/route-d1c369e2c3fb727b.js +1 -0
  369. package/app/.next/static/chunks/app/api/translator/console-logs/route-d1c369e2c3fb727b.js +1 -0
  370. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-d1c369e2c3fb727b.js +1 -0
  371. package/app/.next/static/chunks/app/api/translator/load/route-d1c369e2c3fb727b.js +1 -0
  372. package/app/.next/static/chunks/app/api/translator/save/route-d1c369e2c3fb727b.js +1 -0
  373. package/app/.next/static/chunks/app/api/translator/send/route-d1c369e2c3fb727b.js +1 -0
  374. package/app/.next/static/chunks/app/api/translator/translate/route-d1c369e2c3fb727b.js +1 -0
  375. package/app/.next/static/chunks/app/api/tunnel/disable/route-d1c369e2c3fb727b.js +1 -0
  376. package/app/.next/static/chunks/app/api/tunnel/enable/route-d1c369e2c3fb727b.js +1 -0
  377. package/app/.next/static/chunks/app/api/tunnel/status/route-d1c369e2c3fb727b.js +1 -0
  378. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-d1c369e2c3fb727b.js +1 -0
  379. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-d1c369e2c3fb727b.js +1 -0
  380. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-d1c369e2c3fb727b.js +1 -0
  381. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-d1c369e2c3fb727b.js +1 -0
  382. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-d1c369e2c3fb727b.js +1 -0
  383. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-d1c369e2c3fb727b.js +1 -0
  384. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-d1c369e2c3fb727b.js +1 -0
  385. package/app/.next/static/chunks/app/api/usage/api-keys/route-d1c369e2c3fb727b.js +1 -0
  386. package/app/.next/static/chunks/app/api/usage/chart/route-d1c369e2c3fb727b.js +1 -0
  387. package/app/.next/static/chunks/app/api/usage/history/route-d1c369e2c3fb727b.js +1 -0
  388. package/app/.next/static/chunks/app/api/usage/logs/route-d1c369e2c3fb727b.js +1 -0
  389. package/app/.next/static/chunks/app/api/usage/providers/route-d1c369e2c3fb727b.js +1 -0
  390. package/app/.next/static/chunks/app/api/usage/request-details/route-d1c369e2c3fb727b.js +1 -0
  391. package/app/.next/static/chunks/app/api/usage/request-logs/route-d1c369e2c3fb727b.js +1 -0
  392. package/app/.next/static/chunks/app/api/usage/stats/route-d1c369e2c3fb727b.js +1 -0
  393. package/app/.next/static/chunks/app/api/usage/stream/route-d1c369e2c3fb727b.js +1 -0
  394. package/app/.next/static/chunks/app/api/users/[id]/route-d1c369e2c3fb727b.js +1 -0
  395. package/app/.next/static/chunks/app/api/users/route-d1c369e2c3fb727b.js +1 -0
  396. package/app/.next/static/chunks/app/api/v1/api/chat/route-d1c369e2c3fb727b.js +1 -0
  397. package/app/.next/static/chunks/app/api/v1/audio/speech/route-d1c369e2c3fb727b.js +1 -0
  398. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-d1c369e2c3fb727b.js +1 -0
  399. package/app/.next/static/chunks/app/api/v1/audio/voices/route-d1c369e2c3fb727b.js +1 -0
  400. package/app/.next/static/chunks/app/api/v1/chat/completions/route-d1c369e2c3fb727b.js +1 -0
  401. package/app/.next/static/chunks/app/api/v1/embeddings/route-d1c369e2c3fb727b.js +1 -0
  402. package/app/.next/static/chunks/app/api/v1/images/generations/route-d1c369e2c3fb727b.js +1 -0
  403. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-d1c369e2c3fb727b.js +1 -0
  404. package/app/.next/static/chunks/app/api/v1/messages/route-d1c369e2c3fb727b.js +1 -0
  405. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-d1c369e2c3fb727b.js +1 -0
  406. package/app/.next/static/chunks/app/api/v1/models/info/route-d1c369e2c3fb727b.js +1 -0
  407. package/app/.next/static/chunks/app/api/v1/models/route-d1c369e2c3fb727b.js +1 -0
  408. package/app/.next/static/chunks/app/api/v1/responses/compact/route-d1c369e2c3fb727b.js +1 -0
  409. package/app/.next/static/chunks/app/api/v1/responses/route-d1c369e2c3fb727b.js +1 -0
  410. package/app/.next/static/chunks/app/api/v1/route-d1c369e2c3fb727b.js +1 -0
  411. package/app/.next/static/chunks/app/api/v1/search/route-d1c369e2c3fb727b.js +1 -0
  412. package/app/.next/static/chunks/app/api/v1/web/fetch/route-d1c369e2c3fb727b.js +1 -0
  413. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-d1c369e2c3fb727b.js +1 -0
  414. package/app/.next/static/chunks/app/api/v1beta/models/route-d1c369e2c3fb727b.js +1 -0
  415. package/app/.next/static/chunks/app/api/version/route-d1c369e2c3fb727b.js +1 -0
  416. package/app/.next/static/chunks/app/api/version/update/route-d1c369e2c3fb727b.js +1 -0
  417. package/app/.next/static/chunks/app/manifest.webmanifest/route-d1c369e2c3fb727b.js +1 -0
  418. package/app/.next/static/chunks/app/page-d1c369e2c3fb727b.js +1 -0
  419. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-d1c369e2c3fb727b.js +1 -0
  420. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-d1c369e2c3fb727b.js +1 -0
  421. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-d1c369e2c3fb727b.js +1 -0
  422. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d1c369e2c3fb727b.js +1 -0
  423. package/app/.next/static/css/48caf49054c81db9.css +1 -0
  424. package/app/package.json +1 -1
  425. package/app/src/lib/updater/updater.js +6 -2
  426. package/app/src/mitm/dns/dnsConfig.js +1 -1
  427. package/app/src/mitm/handlers/kiro.js +385 -6
  428. package/app/src/mitm/manager.js +12 -3
  429. package/app/src/mitm/paths.js +7 -3
  430. package/cli.js +4 -3
  431. package/package.json +1 -1
  432. package/app/.next/server/chunks/212.js +0 -1
  433. package/app/.next/server/chunks/2238.js +0 -23
  434. package/app/.next/static/V2uXdl1SgLstSOcrQU5I9/_buildManifest.js +0 -1
  435. package/app/.next/static/chunks/1a258343-4878413fb430abba.js +0 -1
  436. package/app/.next/static/chunks/4295-99e90be71bb8d50c.js +0 -23
  437. package/app/.next/static/chunks/5497-27af7f632895d68e.js +0 -7
  438. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-badb7034e478a358.js +0 -1
  439. package/app/.next/static/chunks/app/(dashboard)/layout-edd266e7233eb314.js +0 -1
  440. package/app/.next/static/chunks/app/_global-error/page-badb7034e478a358.js +0 -1
  441. package/app/.next/static/chunks/app/api/auth/login/route-badb7034e478a358.js +0 -1
  442. package/app/.next/static/chunks/app/api/auth/logout/route-badb7034e478a358.js +0 -1
  443. package/app/.next/static/chunks/app/api/auth/me/route-badb7034e478a358.js +0 -1
  444. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-badb7034e478a358.js +0 -1
  445. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-badb7034e478a358.js +0 -1
  446. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-badb7034e478a358.js +0 -1
  447. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-badb7034e478a358.js +0 -1
  448. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-badb7034e478a358.js +0 -1
  449. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-badb7034e478a358.js +0 -1
  450. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-badb7034e478a358.js +0 -1
  451. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-badb7034e478a358.js +0 -1
  452. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-badb7034e478a358.js +0 -1
  453. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-badb7034e478a358.js +0 -1
  454. package/app/.next/static/chunks/app/api/cloud/auth/route-badb7034e478a358.js +0 -1
  455. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-badb7034e478a358.js +0 -1
  456. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-badb7034e478a358.js +0 -1
  457. package/app/.next/static/chunks/app/api/cloud/models/alias/route-badb7034e478a358.js +0 -1
  458. package/app/.next/static/chunks/app/api/combos/[id]/route-badb7034e478a358.js +0 -1
  459. package/app/.next/static/chunks/app/api/combos/route-badb7034e478a358.js +0 -1
  460. package/app/.next/static/chunks/app/api/health/route-badb7034e478a358.js +0 -1
  461. package/app/.next/static/chunks/app/api/init/route-badb7034e478a358.js +0 -1
  462. package/app/.next/static/chunks/app/api/keys/[id]/route-badb7034e478a358.js +0 -1
  463. package/app/.next/static/chunks/app/api/keys/route-badb7034e478a358.js +0 -1
  464. package/app/.next/static/chunks/app/api/locale/route-badb7034e478a358.js +0 -1
  465. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-badb7034e478a358.js +0 -1
  466. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-badb7034e478a358.js +0 -1
  467. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-badb7034e478a358.js +0 -1
  468. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-badb7034e478a358.js +0 -1
  469. package/app/.next/static/chunks/app/api/models/alias/route-badb7034e478a358.js +0 -1
  470. package/app/.next/static/chunks/app/api/models/availability/route-badb7034e478a358.js +0 -1
  471. package/app/.next/static/chunks/app/api/models/custom/route-badb7034e478a358.js +0 -1
  472. package/app/.next/static/chunks/app/api/models/disabled/route-badb7034e478a358.js +0 -1
  473. package/app/.next/static/chunks/app/api/models/route-badb7034e478a358.js +0 -1
  474. package/app/.next/static/chunks/app/api/models/test/route-badb7034e478a358.js +0 -1
  475. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-badb7034e478a358.js +0 -1
  476. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-badb7034e478a358.js +0 -1
  477. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-badb7034e478a358.js +0 -1
  478. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-badb7034e478a358.js +0 -1
  479. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-badb7034e478a358.js +0 -1
  480. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-badb7034e478a358.js +0 -1
  481. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-badb7034e478a358.js +0 -1
  482. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-badb7034e478a358.js +0 -1
  483. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-badb7034e478a358.js +0 -1
  484. package/app/.next/static/chunks/app/api/pricing/route-badb7034e478a358.js +0 -1
  485. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-badb7034e478a358.js +0 -1
  486. package/app/.next/static/chunks/app/api/provider-nodes/route-badb7034e478a358.js +0 -1
  487. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-badb7034e478a358.js +0 -1
  488. package/app/.next/static/chunks/app/api/providers/[id]/models/route-badb7034e478a358.js +0 -1
  489. package/app/.next/static/chunks/app/api/providers/[id]/route-badb7034e478a358.js +0 -1
  490. package/app/.next/static/chunks/app/api/providers/[id]/test/route-badb7034e478a358.js +0 -1
  491. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-badb7034e478a358.js +0 -1
  492. package/app/.next/static/chunks/app/api/providers/client/route-badb7034e478a358.js +0 -1
  493. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-badb7034e478a358.js +0 -1
  494. package/app/.next/static/chunks/app/api/providers/route-badb7034e478a358.js +0 -1
  495. package/app/.next/static/chunks/app/api/providers/suggested-models/route-badb7034e478a358.js +0 -1
  496. package/app/.next/static/chunks/app/api/providers/test-batch/route-badb7034e478a358.js +0 -1
  497. package/app/.next/static/chunks/app/api/providers/validate/route-badb7034e478a358.js +0 -1
  498. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-badb7034e478a358.js +0 -1
  499. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-badb7034e478a358.js +0 -1
  500. package/app/.next/static/chunks/app/api/proxy-pools/route-badb7034e478a358.js +0 -1
  501. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-badb7034e478a358.js +0 -1
  502. package/app/.next/static/chunks/app/api/settings/database/route-badb7034e478a358.js +0 -1
  503. package/app/.next/static/chunks/app/api/settings/proxy-test/route-badb7034e478a358.js +0 -1
  504. package/app/.next/static/chunks/app/api/settings/require-login/route-badb7034e478a358.js +0 -1
  505. package/app/.next/static/chunks/app/api/settings/route-badb7034e478a358.js +0 -1
  506. package/app/.next/static/chunks/app/api/shutdown/route-badb7034e478a358.js +0 -1
  507. package/app/.next/static/chunks/app/api/tags/route-badb7034e478a358.js +0 -1
  508. package/app/.next/static/chunks/app/api/translator/console-logs/route-badb7034e478a358.js +0 -1
  509. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-badb7034e478a358.js +0 -1
  510. package/app/.next/static/chunks/app/api/translator/load/route-badb7034e478a358.js +0 -1
  511. package/app/.next/static/chunks/app/api/translator/save/route-badb7034e478a358.js +0 -1
  512. package/app/.next/static/chunks/app/api/translator/send/route-badb7034e478a358.js +0 -1
  513. package/app/.next/static/chunks/app/api/translator/translate/route-badb7034e478a358.js +0 -1
  514. package/app/.next/static/chunks/app/api/tunnel/disable/route-badb7034e478a358.js +0 -1
  515. package/app/.next/static/chunks/app/api/tunnel/enable/route-badb7034e478a358.js +0 -1
  516. package/app/.next/static/chunks/app/api/tunnel/status/route-badb7034e478a358.js +0 -1
  517. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-badb7034e478a358.js +0 -1
  518. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-badb7034e478a358.js +0 -1
  519. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-badb7034e478a358.js +0 -1
  520. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-badb7034e478a358.js +0 -1
  521. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-badb7034e478a358.js +0 -1
  522. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-badb7034e478a358.js +0 -1
  523. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-badb7034e478a358.js +0 -1
  524. package/app/.next/static/chunks/app/api/usage/api-keys/route-badb7034e478a358.js +0 -1
  525. package/app/.next/static/chunks/app/api/usage/chart/route-badb7034e478a358.js +0 -1
  526. package/app/.next/static/chunks/app/api/usage/history/route-badb7034e478a358.js +0 -1
  527. package/app/.next/static/chunks/app/api/usage/logs/route-badb7034e478a358.js +0 -1
  528. package/app/.next/static/chunks/app/api/usage/providers/route-badb7034e478a358.js +0 -1
  529. package/app/.next/static/chunks/app/api/usage/request-details/route-badb7034e478a358.js +0 -1
  530. package/app/.next/static/chunks/app/api/usage/request-logs/route-badb7034e478a358.js +0 -1
  531. package/app/.next/static/chunks/app/api/usage/stats/route-badb7034e478a358.js +0 -1
  532. package/app/.next/static/chunks/app/api/usage/stream/route-badb7034e478a358.js +0 -1
  533. package/app/.next/static/chunks/app/api/users/[id]/route-badb7034e478a358.js +0 -1
  534. package/app/.next/static/chunks/app/api/users/route-badb7034e478a358.js +0 -1
  535. package/app/.next/static/chunks/app/api/v1/api/chat/route-badb7034e478a358.js +0 -1
  536. package/app/.next/static/chunks/app/api/v1/audio/speech/route-badb7034e478a358.js +0 -1
  537. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-badb7034e478a358.js +0 -1
  538. package/app/.next/static/chunks/app/api/v1/chat/completions/route-badb7034e478a358.js +0 -1
  539. package/app/.next/static/chunks/app/api/v1/embeddings/route-badb7034e478a358.js +0 -1
  540. package/app/.next/static/chunks/app/api/v1/images/generations/route-badb7034e478a358.js +0 -1
  541. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-badb7034e478a358.js +0 -1
  542. package/app/.next/static/chunks/app/api/v1/messages/route-badb7034e478a358.js +0 -1
  543. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-badb7034e478a358.js +0 -1
  544. package/app/.next/static/chunks/app/api/v1/models/route-badb7034e478a358.js +0 -1
  545. package/app/.next/static/chunks/app/api/v1/responses/compact/route-badb7034e478a358.js +0 -1
  546. package/app/.next/static/chunks/app/api/v1/responses/route-badb7034e478a358.js +0 -1
  547. package/app/.next/static/chunks/app/api/v1/route-badb7034e478a358.js +0 -1
  548. package/app/.next/static/chunks/app/api/v1/search/route-badb7034e478a358.js +0 -1
  549. package/app/.next/static/chunks/app/api/v1/web/fetch/route-badb7034e478a358.js +0 -1
  550. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-badb7034e478a358.js +0 -1
  551. package/app/.next/static/chunks/app/api/v1beta/models/route-badb7034e478a358.js +0 -1
  552. package/app/.next/static/chunks/app/api/version/route-badb7034e478a358.js +0 -1
  553. package/app/.next/static/chunks/app/api/version/update/route-badb7034e478a358.js +0 -1
  554. package/app/.next/static/chunks/app/manifest.webmanifest/route-badb7034e478a358.js +0 -1
  555. package/app/.next/static/chunks/app/page-badb7034e478a358.js +0 -1
  556. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-badb7034e478a358.js +0 -1
  557. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-badb7034e478a358.js +0 -1
  558. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-badb7034e478a358.js +0 -1
  559. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-badb7034e478a358.js +0 -1
  560. package/app/.next/static/css/76d369cc5468e708.css +0 -1
  561. /package/app/.next/static/{V2uXdl1SgLstSOcrQU5I9 → 2TCKT7FIN7PE7ZJ20oAeb}/_ssgManifest.js +0 -0
@@ -1,18 +1,397 @@
1
1
  const { err } = require("../logger");
2
- const { fetchRouter, pipeSSE } = require("./base");
2
+ const { fetchRouter } = require("./base");
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+
6
+ // Debug trace log — written to data/logs/mitm/kiro-debug.log
7
+ const DEBUG_LOG = path.join(__dirname, "../../../data/logs/mitm/kiro-debug.log");
8
+ function dbg(msg) {
9
+ try {
10
+ fs.appendFileSync(DEBUG_LOG, `${new Date().toISOString()} ${msg}\n`);
11
+ } catch {}
12
+ }
13
+
14
+ // ─── CRC32 (standard, polynomial 0xEDB88320 — same as AWS EventStream) ───────
15
+ const CRC32_TABLE = (() => {
16
+ const t = new Uint32Array(256);
17
+ for (let n = 0; n < 256; n++) {
18
+ let c = n;
19
+ for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
20
+ t[n] = c;
21
+ }
22
+ return t;
23
+ })();
24
+
25
+ function crc32(buf) {
26
+ let crc = 0xffffffff;
27
+ for (let i = 0; i < buf.length; i++) {
28
+ crc = (crc >>> 8) ^ CRC32_TABLE[(crc ^ buf[i]) & 0xff];
29
+ }
30
+ return (crc ^ 0xffffffff) >>> 0;
31
+ }
32
+
33
+ // ─── AWS EventStream frame builder ────────────────────────────────────────────
34
+ /**
35
+ * Encode a single string header into the AWS EventStream binary format.
36
+ * Header wire format: [nameLen 1B][name][type=7 1B][valueLen 2B][value]
37
+ */
38
+ function encodeHeader(name, value) {
39
+ const nameBuf = Buffer.from(name, "utf8");
40
+ const valueBuf = Buffer.from(value, "utf8");
41
+ const buf = Buffer.alloc(1 + nameBuf.length + 1 + 2 + valueBuf.length);
42
+ let o = 0;
43
+ buf[o++] = nameBuf.length;
44
+ nameBuf.copy(buf, o); o += nameBuf.length;
45
+ buf[o++] = 7; // string type
46
+ buf.writeUInt16BE(valueBuf.length, o); o += 2;
47
+ valueBuf.copy(buf, o);
48
+ return buf;
49
+ }
50
+
51
+ /**
52
+ * Build a single AWS EventStream binary frame with all Smithy-required headers.
53
+ *
54
+ * Frame layout (big-endian):
55
+ * [totalLen 4B][headersLen 4B][preludeCRC 4B]
56
+ * [headers ...][payload JSON ...][messageCRC 4B]
57
+ *
58
+ * The SmithyMessageDecoderStream layer requires three system headers on every frame:
59
+ * :message-type = "event" (or "exception" / "error")
60
+ * :event-type = e.g. "assistantResponseEvent"
61
+ * :content-type = "application/json"
62
+ */
63
+ function buildEventStreamFrame(eventType, payload) {
64
+ const payloadBuf = Buffer.from(
65
+ typeof payload === "string" ? payload : JSON.stringify(payload),
66
+ "utf8"
67
+ );
68
+
69
+ // All three Smithy system headers are required
70
+ const headersBuf = Buffer.concat([
71
+ encodeHeader(":message-type", "event"),
72
+ encodeHeader(":event-type", eventType),
73
+ encodeHeader(":content-type", "application/json"),
74
+ ]);
75
+ const headersLen = headersBuf.length;
76
+
77
+ const totalLen = 4 + 4 + 4 + headersLen + payloadBuf.length + 4;
78
+ const frame = Buffer.alloc(totalLen);
79
+
80
+ frame.writeUInt32BE(totalLen, 0);
81
+ frame.writeUInt32BE(headersLen, 4);
82
+ frame.writeUInt32BE(crc32(frame.slice(0, 8)), 8); // prelude CRC
83
+ headersBuf.copy(frame, 12);
84
+ payloadBuf.copy(frame, 12 + headersLen);
85
+ frame.writeUInt32BE(crc32(frame.slice(0, totalLen - 4)), totalLen - 4); // message CRC
86
+
87
+ return frame;
88
+ }
89
+
90
+ // ─── CodeWhisperer → OpenAI conversion ───────────────────────────────────────
3
91
 
4
92
  /**
5
- * Intercept Kiro request replace model and forward to router
93
+ * Safely stringify a tool-call input value.
94
+ * OpenAI expects `function.arguments` to be a JSON string, never an object.
95
+ * If 9router's Anthropic→OpenAI conversion passes the input as a pre-parsed object,
96
+ * this prevents the "" + object → "[object Object]" corruption.
97
+ */
98
+ function safeArgsString(value) {
99
+ if (typeof value === "string") return value;
100
+ if (value == null) return "{}";
101
+ try { return JSON.stringify(value); } catch { return "{}"; }
102
+ }
103
+
104
+ /**
105
+ * Convert a CodeWhisperer userInputMessage to one or more OpenAI messages.
106
+ *
107
+ * A user turn can contain:
108
+ * - plain text content → { role:"user", content }
109
+ * - toolResults only → one { role:"tool", tool_call_id, content } per result
110
+ * - both → tool messages first, then the user text message
111
+ */
112
+ function convertUserInputMessage(uim) {
113
+ const out = [];
114
+ const toolResults = uim.userInputMessageContext?.toolResults || [];
115
+
116
+ // Emit one "tool" message per tool result (OpenAI multi-tool format)
117
+ for (const tr of toolResults) {
118
+ const text = (tr.content || []).map(c => c.text || "").join("\n");
119
+ out.push({
120
+ role: "tool",
121
+ tool_call_id: tr.toolUseId || "",
122
+ content: text,
123
+ });
124
+ }
125
+
126
+ // Emit user text only if it exists alongside OR when there are no tool results
127
+ const text = (uim.content || "").trim();
128
+ if (text || toolResults.length === 0) {
129
+ out.push({ role: "user", content: text });
130
+ }
131
+
132
+ return out;
133
+ }
134
+
135
+ /**
136
+ * Convert a CodeWhisperer assistantResponseMessage to an OpenAI assistant message.
137
+ *
138
+ * The assistant turn can contain:
139
+ * - plain text content
140
+ * - toolUses (tool calls) → tool_calls[] on the assistant message
141
+ */
142
+ function convertAssistantResponseMessage(arm) {
143
+ const toolUses = arm.toolUses || [];
144
+
145
+ if (toolUses.length > 0) {
146
+ return {
147
+ role: "assistant",
148
+ content: arm.content || null,
149
+ tool_calls: toolUses.map(tu => ({
150
+ id: tu.toolUseId || `call_${Date.now()}`,
151
+ type: "function",
152
+ function: {
153
+ name: tu.name || "",
154
+ arguments: safeArgsString(tu.input),
155
+ },
156
+ })),
157
+ };
158
+ }
159
+
160
+ return { role: "assistant", content: arm.content || "" };
161
+ }
162
+
163
+ /**
164
+ * Convert AWS CodeWhisperer conversationState to an OpenAI messages array.
165
+ *
166
+ * Full multi-turn shape:
167
+ * history: [
168
+ * { userInputMessage: { content, userInputMessageContext?: { toolResults?, tools? } } },
169
+ * { assistantResponseMessage: { content, toolUses?: [...] } },
170
+ * ...
171
+ * ]
172
+ * currentMessage: { userInputMessage: { content, userInputMessageContext?: { toolResults? } } }
173
+ */
174
+ function codeWhispererToMessages(body) {
175
+ const cs = body.conversationState || {};
176
+ const history = cs.history || [];
177
+ const currentMsg = cs.currentMessage;
178
+ const messages = [];
179
+
180
+ for (const item of history) {
181
+ if (item.userInputMessage) {
182
+ messages.push(...convertUserInputMessage(item.userInputMessage));
183
+ } else if (item.assistantResponseMessage) {
184
+ messages.push(convertAssistantResponseMessage(item.assistantResponseMessage));
185
+ }
186
+ }
187
+
188
+ // Append the current (latest) turn
189
+ if (currentMsg?.userInputMessage) {
190
+ messages.push(...convertUserInputMessage(currentMsg.userInputMessage));
191
+ }
192
+
193
+ return messages;
194
+ }
195
+
196
+ /**
197
+ * Extract tool definitions from a CodeWhisperer request and convert to OpenAI format.
198
+ *
199
+ * CodeWhisperer tools live in:
200
+ * conversationState.currentMessage.userInputMessage.userInputMessageContext.tools
201
+ * OR (in multi-turn) the first history item's userInputMessageContext.tools
202
+ *
203
+ * CodeWhisperer tool shape:
204
+ * { toolSpecification: { name, description, inputSchema: { json: <schema> } } }
205
+ *
206
+ * OpenAI tool shape:
207
+ * { type: "function", function: { name, description, parameters: <schema> } }
208
+ */
209
+ function extractTools(body) {
210
+ const cs = body.conversationState || {};
211
+
212
+ // Tools are typically on the currentMessage; may also appear on the first history item
213
+ const fromCurrent = cs.currentMessage?.userInputMessage?.userInputMessageContext?.tools || [];
214
+ const fromHistory = cs.history?.find(h => h.userInputMessage?.userInputMessageContext?.tools)
215
+ ?.userInputMessage?.userInputMessageContext?.tools || [];
216
+ const cwTools = fromCurrent.length > 0 ? fromCurrent : fromHistory;
217
+
218
+ if (!cwTools.length) return [];
219
+
220
+ return cwTools.map(item => {
221
+ const spec = item.toolSpecification || item;
222
+ return {
223
+ type: "function",
224
+ function: {
225
+ name: spec.name || "",
226
+ description: spec.description || `Tool: ${spec.name || "unknown"}`,
227
+ parameters: spec.inputSchema?.json || { type: "object", properties: {}, required: [] },
228
+ },
229
+ };
230
+ });
231
+ }
232
+
233
+ // ─── OpenAI SSE → EventStream binary conversion ───────────────────────────────
234
+ /**
235
+ * Read 9router's OpenAI SSE response and re-encode it as AWS EventStream binary
236
+ * frames that Kiro's Smithy SDK expects.
237
+ *
238
+ * OpenAI SSE format: data: { choices:[{ delta:{ content:"..." } }] }\n\n
239
+ * EventStream events emitted:
240
+ * assistantResponseEvent { content: "..." } — one per SSE chunk with text
241
+ * toolUseEvent { toolUseId, name, input } — for tool calls
242
+ * messageStopEvent {} — on finish
243
+ */
244
+ async function pipeOpenAIasEventStream(routerRes, res) {
245
+ if (!routerRes.body) {
246
+ res.end(buildEventStreamFrame("messageStopEvent", {}));
247
+ return;
248
+ }
249
+
250
+ const reader = routerRes.body.getReader();
251
+ const decoder = new TextDecoder();
252
+ let sseBuffer = "";
253
+ let stopSent = false;
254
+
255
+ // Accumulated tool-call state keyed by index
256
+ const toolCallAccum = {};
257
+
258
+ const sendStop = () => {
259
+ if (!stopSent) {
260
+ stopSent = true;
261
+ res.write(buildEventStreamFrame("messageStopEvent", {}));
262
+ }
263
+ };
264
+
265
+ try {
266
+ while (true) {
267
+ const { done, value } = await reader.read();
268
+ if (done) break;
269
+
270
+ sseBuffer += decoder.decode(value, { stream: true });
271
+
272
+ // Split on newlines; keep the last (possibly incomplete) line in the buffer
273
+ const lines = sseBuffer.split("\n");
274
+ sseBuffer = lines.pop() ?? "";
275
+
276
+ for (const line of lines) {
277
+ const trimmed = line.trim();
278
+ if (!trimmed.startsWith("data:")) continue;
279
+
280
+ const raw = trimmed.slice(5).trim();
281
+ if (raw === "[DONE]") {
282
+ sendStop();
283
+ continue;
284
+ }
285
+
286
+ let chunk;
287
+ try { chunk = JSON.parse(raw); } catch { continue; }
288
+
289
+ const delta = chunk?.choices?.[0]?.delta;
290
+ if (!delta) continue;
291
+
292
+ // ── Text content ───────────────────────────────────────────────────────
293
+ if (delta.content) {
294
+ res.write(buildEventStreamFrame("assistantResponseEvent", { content: delta.content }));
295
+ }
296
+
297
+ // ── Tool calls (streamed in pieces by OpenAI SSE) ──────────────────────
298
+ if (delta.tool_calls) {
299
+ dbg(`TOOL_CALLS delta: ${JSON.stringify(delta.tool_calls).slice(0, 300)}`);
300
+ for (const tc of delta.tool_calls) {
301
+ const idx = tc.index ?? 0;
302
+ if (!toolCallAccum[idx]) {
303
+ toolCallAccum[idx] = { id: tc.id ?? "", name: "", args: "" };
304
+ }
305
+ const acc = toolCallAccum[idx];
306
+ if (tc.id) acc.id = tc.id;
307
+ if (tc.function?.name) acc.name += tc.function.name;
308
+ // safeArgsString prevents `"" + object` → "[object Object]" corruption
309
+ // when 9router's Anthropic→OpenAI conversion passes a pre-parsed object
310
+ const argType = typeof tc.function?.arguments;
311
+ if (tc.function?.arguments != null) {
312
+ acc.args += safeArgsString(tc.function.arguments);
313
+ }
314
+ dbg(` tc[${idx}] argType=${argType} id=${acc.id} name=${acc.name} args_so_far=${acc.args.slice(0, 100)}`);
315
+ }
316
+ }
317
+
318
+ // ── Finish ─────────────────────────────────────────────────────────────
319
+ const finish = chunk?.choices?.[0]?.finish_reason;
320
+ if (finish) {
321
+ dbg(`FINISH finish_reason=${finish} toolCallKeys=${JSON.stringify(Object.keys(toolCallAccum))}`);
322
+ // Flush accumulated tool calls before stop
323
+ if (finish === "tool_calls") {
324
+ for (const acc of Object.values(toolCallAccum)) {
325
+ // IMPORTANT: Kiro's internal tool dispatcher expects `input` to be a JSON string
326
+ // (not a parsed object). The real CodeWhisperer server sends:
327
+ // { toolUseId, name, input: "{\"key\":\"value\"}" } ← input is a string
328
+ // Kiro then JSON.parses that string to get the tool arguments.
329
+ // If we send input as a parsed object, Kiro does String(obj) → "[object Object]".
330
+ const inputStr = acc.args || "{}";
331
+ dbg(` toolUseEvent: id=${acc.id} name=${acc.name} inputStr=${inputStr.slice(0, 200)}`);
332
+ res.write(buildEventStreamFrame("toolUseEvent", {
333
+ toolUseId: acc.id,
334
+ name: acc.name,
335
+ input: inputStr, // Must be a JSON STRING, not a parsed object
336
+ }));
337
+ }
338
+ }
339
+ sendStop();
340
+ }
341
+ }
342
+ }
343
+ } finally {
344
+ sendStop();
345
+ res.end();
346
+ }
347
+ }
348
+
349
+ // ─── MITM intercept entry point ───────────────────────────────────────────────
350
+ /**
351
+ * Intercept Kiro IDE CodeWhisperer request:
352
+ * 1. Parse CodeWhisperer binary/JSON body
353
+ * 2. Convert to OpenAI messages[] format
354
+ * 3. Forward to 9router /v1/chat/completions (OpenAI SSE)
355
+ * 4. Convert OpenAI SSE response → AWS EventStream binary frames
356
+ * 5. Stream binary frames back to Kiro
6
357
  */
7
358
  async function intercept(req, res, bodyBuffer, mappedModel) {
8
359
  try {
9
360
  const body = JSON.parse(bodyBuffer.toString());
10
- body.model = mappedModel;
11
- const routerRes = await fetchRouter(body, "/v1/chat/completions", req.headers);
12
- await pipeSSE(routerRes, res);
361
+
362
+ // 1 + 2: CodeWhisperer OpenAI messages + tools
363
+ const messages = codeWhispererToMessages(body);
364
+ if (messages.length === 0) {
365
+ throw new Error("codeWhispererToMessages produced 0 messages — check request body");
366
+ }
367
+
368
+ const tools = extractTools(body);
369
+
370
+ const openaiBody = {
371
+ model: mappedModel,
372
+ messages,
373
+ stream: true,
374
+ // Forward tools so Claude uses structured tool_calls instead of XML text fallback
375
+ ...(tools.length > 0 && { tools, tool_choice: "auto" }),
376
+ };
377
+
378
+ // 3: Forward to 9router
379
+ const routerRes = await fetchRouter(openaiBody, "/v1/chat/completions", req.headers);
380
+
381
+ // 4 + 5: Re-encode response as AWS EventStream binary
382
+ res.writeHead(routerRes.status, {
383
+ "Content-Type": "application/vnd.amazon.eventstream",
384
+ "x-amzn-requestid": `mitm-${Date.now()}`,
385
+ "x-amz-id-2": "mitm",
386
+ "Transfer-Encoding": "chunked",
387
+ });
388
+
389
+ await pipeOpenAIasEventStream(routerRes, res);
13
390
  } catch (error) {
14
391
  err(`[Kiro] ${error.message}`);
15
- if (!res.headersSent) res.writeHead(500, { "Content-Type": "application/json" });
392
+ if (!res.headersSent) {
393
+ res.writeHead(500, { "Content-Type": "application/json" });
394
+ }
16
395
  res.end(JSON.stringify({ error: { message: error.message, type: "mitm_error" } }));
17
396
  }
18
397
  }
@@ -518,6 +518,15 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
518
518
  }
519
519
 
520
520
  // Step 2: Spawn server (Root CA already installed in Step 1.5)
521
+ // Verify server.js exists — recopy if runtime file was deleted (antivirus/cleanup)
522
+ let effectiveServerPath = SERVER_PATH;
523
+ if (!effectiveServerPath || !fs.existsSync(effectiveServerPath)) {
524
+ log(`[MITM] server.js missing at ${effectiveServerPath} → recopying`);
525
+ effectiveServerPath = ensureRuntimeServer(resolveBundledServerPath());
526
+ if (!effectiveServerPath || !fs.existsSync(effectiveServerPath)) {
527
+ throw new Error(`MITM server.js not found at ${effectiveServerPath}. Reinstall 9router.`);
528
+ }
529
+ }
521
530
  const mitmRouterBase = await resolveMitmRouterBaseUrl();
522
531
  log(`🚀 Starting server... (router: ${mitmRouterBase})`);
523
532
  if (IS_WIN) {
@@ -538,7 +547,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
538
547
  // Spawn directly — process already has admin rights
539
548
  serverProcess = spawn(
540
549
  process.execPath,
541
- [SERVER_PATH],
550
+ [effectiveServerPath],
542
551
  {
543
552
  detached: false,
544
553
  windowsHide: true,
@@ -562,7 +571,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
562
571
  `MITM_ROUTER_BASE=${shellQuoteSingle(mitmRouterBase)}`,
563
572
  "NODE_ENV=production",
564
573
  shellQuoteSingle(process.execPath),
565
- shellQuoteSingle(SERVER_PATH),
574
+ shellQuoteSingle(effectiveServerPath),
566
575
  ].join(" ");
567
576
  serverProcess = spawn(
568
577
  "sudo", ["-S", "-E", "sh", "-c", inlineCmd],
@@ -572,7 +581,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
572
581
  serverProcess.stdin.end();
573
582
  } else {
574
583
  // Docker/minimal images: no sudo — same as Windows-style direct spawn
575
- serverProcess = spawn(process.execPath, [SERVER_PATH], {
584
+ serverProcess = spawn(process.execPath, [effectiveServerPath], {
576
585
  detached: false,
577
586
  windowsHide: true,
578
587
  stdio: ["ignore", "pipe", "pipe"],
@@ -1,13 +1,17 @@
1
1
  const path = require("path");
2
2
  const os = require("os");
3
3
 
4
- // Single source of truth for data directory — matches localDb.js logic
4
+ const APP_DATA_DIR_NAME = "openrouterx";
5
+
5
6
  function getDataDir() {
6
7
  if (process.env.DATA_DIR) return process.env.DATA_DIR;
7
8
  if (process.platform === "win32") {
8
- return path.join(process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"), "9router");
9
+ return path.join(
10
+ process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"),
11
+ APP_DATA_DIR_NAME
12
+ );
9
13
  }
10
- return path.join(os.homedir(), ".9router");
14
+ return path.join(os.homedir(), `.${APP_DATA_DIR_NAME}`);
11
15
  }
12
16
 
13
17
  const DATA_DIR = getDataDir();
package/cli.js CHANGED
@@ -8,10 +8,11 @@ const net = require("node:net");
8
8
 
9
9
  const pkg = require("./package.json");
10
10
 
11
- const APP_NAME = pkg.name || "9router";
11
+ const APP_NAME = "openrouterX";
12
+ const APP_DATA_DIR_NAME = "openrouterx";
12
13
  const DATA_DIR = process.platform === "win32"
13
- ? path.join(process.env.APPDATA || os.homedir(), APP_NAME)
14
- : path.join(os.homedir(), `.${APP_NAME}`);
14
+ ? path.join(process.env.APPDATA || os.homedir(), APP_DATA_DIR_NAME)
15
+ : path.join(os.homedir(), `.${APP_DATA_DIR_NAME}`);
15
16
  const PID_FILE = path.join(DATA_DIR, "server.pid");
16
17
  const META_FILE = path.join(DATA_DIR, "server.json");
17
18
  const LOG_FILE = path.join(DATA_DIR, "server.log");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yina-npm/openrouterx",
3
- "version": "0.4.20",
3
+ "version": "0.4.21",
4
4
  "description": "openrouterX CLI - Start and manage 9Router server",
5
5
  "bin": {
6
6
  "openrouterX": "./cli.js"
@@ -1 +0,0 @@
1
- exports.id=212,exports.ids=[212],exports.modules={2422:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/UsageStats.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UsageStats.js","default")},3080:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/OAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/OAuthModal.js","default")},5843:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/NoAuthProxyCard.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/NoAuthProxyCard.js","default")},7290:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Card.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Card.js","default")},10079:(a,b,c)=>{"use strict";c.d(b,{ConfirmModal:()=>f,default:()=>e});var d=c(77943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Modal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Modal.js","default"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call ConfirmModal() from the server but ConfirmModal is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Modal.js","ConfirmModal")},10926:(a,b,c)=>{Promise.resolve().then(c.bind(c,18200)),Promise.resolve().then(c.bind(c,26288)),Promise.resolve().then(c.bind(c,70061)),Promise.resolve().then(c.bind(c,33893)),Promise.resolve().then(c.bind(c,45512)),Promise.resolve().then(c.bind(c,7290)),Promise.resolve().then(c.bind(c,33811)),Promise.resolve().then(c.bind(c,40167)),Promise.resolve().then(c.bind(c,70139)),Promise.resolve().then(c.bind(c,49123)),Promise.resolve().then(c.bind(c,64148)),Promise.resolve().then(c.bind(c,92669)),Promise.resolve().then(c.bind(c,29354)),Promise.resolve().then(c.bind(c,80342)),Promise.resolve().then(c.bind(c,71230)),Promise.resolve().then(c.bind(c,82448)),Promise.resolve().then(c.bind(c,14285)),Promise.resolve().then(c.bind(c,87228)),Promise.resolve().then(c.bind(c,45205)),Promise.resolve().then(c.bind(c,64420)),Promise.resolve().then(c.bind(c,61780)),Promise.resolve().then(c.bind(c,92082)),Promise.resolve().then(c.bind(c,70603)),Promise.resolve().then(c.bind(c,10079)),Promise.resolve().then(c.bind(c,94582)),Promise.resolve().then(c.bind(c,29674)),Promise.resolve().then(c.bind(c,5843)),Promise.resolve().then(c.bind(c,3080)),Promise.resolve().then(c.bind(c,81923)),Promise.resolve().then(c.bind(c,19083)),Promise.resolve().then(c.bind(c,54065)),Promise.resolve().then(c.bind(c,83784)),Promise.resolve().then(c.bind(c,26866)),Promise.resolve().then(c.bind(c,89886)),Promise.resolve().then(c.bind(c,40515)),Promise.resolve().then(c.bind(c,70092)),Promise.resolve().then(c.bind(c,18421)),Promise.resolve().then(c.bind(c,2422)),Promise.resolve().then(c.bind(c,76978))},14285:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/KiroOAuthWrapper.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/KiroOAuthWrapper.js","default")},18200:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/AddCustomEmbeddingModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/AddCustomEmbeddingModal.js","default")},18421:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Tooltip.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Tooltip.js","default")},19083:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/RequestLogger.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/RequestLogger.js","default")},26288:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/AddCustomImageModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/AddCustomImageModal.js","default")},26866:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Sidebar.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Sidebar.js","default")},29354:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/HeaderMenu.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/HeaderMenu.js","default")},29674:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/NineRemoteButton.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/NineRemoteButton.js","default")},30508:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>k});var d=c(5735),e=c(65573),f=c(69614);c(45512),c(71230),c(83784),c(7290),c(10079),c(92082),c(70061),c(33893),c(70092),c(40515),c(89886),c(26866),c(92669),c(49123),c(3080),c(94582),c(70603),c(2422),c(45205),c(29674),c(29354),c(33811),c(19083),c(82448),c(14285),c(87228),c(40167),c(80342),c(64148),c(70139),c(18200),c(26288),c(5843),c(54065),c(18421),c(81923);var g=c(61780);c(64420);var h=c(76978);let i=new TextEncoder().encode(process.env.JWT_SECRET||"9router-default-secret-change-me");async function j(){try{let a=await (0,e.UL)(),b=a.get("auth_token")?.value;if(!b)return null;let{payload:c}=await (0,f.V)(b,i);return{role:c.role||null,userId:c.userId||null,displayName:c.displayName||null}}catch{return null}}async function k({children:a}){let b=await j();return(0,d.jsx)(h.UserRoleProvider,{role:b?.role,userId:b?.userId,displayName:b?.displayName,children:(0,d.jsx)(g.default,{children:a})})}},33811:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ChangelogModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ChangelogModal.js","default")},33893:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Badge.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Badge.js","default")},40167:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/CursorAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/CursorAuthModal.js","default")},40515:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ThemeToggle.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ThemeToggle.js","default")},45205:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/LanguageSwitcher.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/LanguageSwitcher.js","default")},45512:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Button.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Button.js","default")},49123:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Footer.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Footer.js","default")},54065:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/SegmentedControl.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/SegmentedControl.js","default")},61780:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/layouts/DashboardLayout.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/layouts/DashboardLayout.js","default")},64148:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/GitLabAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/GitLabAuthModal.js","default")},64420:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/layouts/AuthLayout.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/layouts/AuthLayout.js","default")},70061:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Avatar.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Avatar.js","default")},70092:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Toggle.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Toggle.js","default")},70139:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/EditConnectionModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/EditConnectionModal.js","default")},70603:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ManualConfigModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ManualConfigModal.js","default")},71230:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Input.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Input.js","default")},73974:(a,b,c)=>{Promise.resolve().then(c.bind(c,67738)),Promise.resolve().then(c.bind(c,31402)),Promise.resolve().then(c.bind(c,25919)),Promise.resolve().then(c.bind(c,75171)),Promise.resolve().then(c.bind(c,99070)),Promise.resolve().then(c.bind(c,17660)),Promise.resolve().then(c.bind(c,11229)),Promise.resolve().then(c.bind(c,51109)),Promise.resolve().then(c.bind(c,51585)),Promise.resolve().then(c.bind(c,48781)),Promise.resolve().then(c.bind(c,43182)),Promise.resolve().then(c.bind(c,86739)),Promise.resolve().then(c.bind(c,3236)),Promise.resolve().then(c.bind(c,79488)),Promise.resolve().then(c.bind(c,83552)),Promise.resolve().then(c.bind(c,86209)),Promise.resolve().then(c.bind(c,5291)),Promise.resolve().then(c.bind(c,56110)),Promise.resolve().then(c.bind(c,267)),Promise.resolve().then(c.bind(c,53838)),Promise.resolve().then(c.bind(c,85306)),Promise.resolve().then(c.bind(c,74812)),Promise.resolve().then(c.bind(c,39645)),Promise.resolve().then(c.bind(c,95145)),Promise.resolve().then(c.bind(c,83352)),Promise.resolve().then(c.bind(c,23048)),Promise.resolve().then(c.bind(c,50585)),Promise.resolve().then(c.bind(c,79346)),Promise.resolve().then(c.bind(c,11633)),Promise.resolve().then(c.bind(c,91809)),Promise.resolve().then(c.bind(c,91099)),Promise.resolve().then(c.bind(c,4770)),Promise.resolve().then(c.bind(c,42196)),Promise.resolve().then(c.bind(c,19308)),Promise.resolve().then(c.bind(c,53845)),Promise.resolve().then(c.bind(c,95514)),Promise.resolve().then(c.bind(c,32971)),Promise.resolve().then(c.bind(c,28403)),Promise.resolve().then(c.bind(c,37900))},76978:(a,b,c)=>{"use strict";c.d(b,{UserRoleProvider:()=>e});var d=c(77943);(0,d.registerClientReference)(function(){throw Error("Attempted to call UserRoleContext() from the server but UserRoleContext is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","UserRoleContext");let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call UserRoleProvider() from the server but UserRoleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","UserRoleProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useUserRole() from the server but useUserRole is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","useUserRole"),(0,d.registerClientReference)(function(){throw Error("Attempted to call useIsSuperAdmin() from the server but useIsSuperAdmin is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/UserRoleProvider.js","useIsSuperAdmin")},80342:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/IFlowCookieModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/IFlowCookieModal.js","default")},81923:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ProviderInfoCard.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ProviderInfoCard.js","default")},82448:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/KiroAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/KiroAuthModal.js","default")},83784:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Select.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Select.js","default")},87228:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/KiroSocialOAuthModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/KiroSocialOAuthModal.js","default")},92082:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>h,PageLoading:()=>f,Skeleton:()=>g,Spinner:()=>e,default:()=>i});var d=c(77943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call Spinner() from the server but Spinner is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","Spinner"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call PageLoading() from the server but PageLoading is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","PageLoading"),g=(0,d.registerClientReference)(function(){throw Error("Attempted to call Skeleton() from the server but Skeleton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","Skeleton"),h=(0,d.registerClientReference)(function(){throw Error("Attempted to call CardSkeleton() from the server but CardSkeleton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","CardSkeleton"),i=(0,d.registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Loading.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Loading.js","default")},92669:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/Header.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/Header.js","default")},94582:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/bytedance/Documents/9router/src/shared/components/ModelSelectModal.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/bytedance/Documents/9router/src/shared/components/ModelSelectModal.js","default")}};