@jheavenknows/bluerouter 1.0.53 → 1.0.55

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 (894) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +5 -5
  3. package/app/.next-cli-build/build-manifest.json +3 -3
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/required-server-files.json +4 -4
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page.js +2 -2
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +2 -2
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +2 -2
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page.js +2 -2
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page_client-reference-manifest.js +1 -1
  81. package/app/.next-cli-build/server/app/_global-error/page.js +3 -3
  82. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  84. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  85. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  86. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  87. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  88. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  89. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  92. package/app/.next-cli-build/server/app/_not-found/page.js +2 -2
  93. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  95. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  96. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  97. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  98. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  99. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
  100. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  101. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  102. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  103. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/ldap/test/route_client-reference-manifest.js +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/ldap/users/route_client-reference-manifest.js +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  115. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  116. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route_client-reference-manifest.js +1 -1
  118. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  119. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/auth/oidc/start/route_client-reference-manifest.js +1 -1
  121. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  122. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/auth/oidc/test/route_client-reference-manifest.js +1 -1
  124. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  125. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  128. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route_client-reference-manifest.js +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  131. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route_client-reference-manifest.js +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +1 -1
  137. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route_client-reference-manifest.js +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js +2 -2
  140. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route_client-reference-manifest.js +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  143. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  145. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  146. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  148. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  149. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  151. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  152. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  154. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  155. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
  157. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  158. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route_client-reference-manifest.js +1 -1
  160. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  161. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route_client-reference-manifest.js +1 -1
  163. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  164. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route_client-reference-manifest.js +1 -1
  166. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  167. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route_client-reference-manifest.js +1 -1
  169. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  170. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  172. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  173. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route_client-reference-manifest.js +1 -1
  175. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  176. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route_client-reference-manifest.js +1 -1
  178. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  179. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  181. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  182. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  184. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  185. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
  187. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  188. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  190. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  191. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/combos/route_client-reference-manifest.js +1 -1
  193. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +2 -2
  194. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route_client-reference-manifest.js +1 -1
  196. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +2 -2
  197. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route_client-reference-manifest.js +1 -1
  199. package/app/.next-cli-build/server/app/api/health/route.js +1 -1
  200. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/health/route_client-reference-manifest.js +1 -1
  202. package/app/.next-cli-build/server/app/api/init/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/init/route_client-reference-manifest.js +1 -1
  205. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  206. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  208. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  209. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/keys/route_client-reference-manifest.js +1 -1
  211. package/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  212. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/locale/route_client-reference-manifest.js +1 -1
  214. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
  215. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route_client-reference-manifest.js +1 -1
  217. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +5 -5
  218. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route_client-reference-manifest.js +1 -1
  220. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  221. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route_client-reference-manifest.js +1 -1
  223. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  224. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route_client-reference-manifest.js +1 -1
  226. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route_client-reference-manifest.js +1 -1
  229. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  230. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +1 -1
  232. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route_client-reference-manifest.js +1 -1
  235. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  236. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  238. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  241. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  242. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/models/custom/route_client-reference-manifest.js +1 -1
  244. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/models/disabled/route_client-reference-manifest.js +1 -1
  247. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  248. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/models/route_client-reference-manifest.js +1 -1
  250. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  251. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/models/test/route_client-reference-manifest.js +1 -1
  253. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  254. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  256. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  257. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -1
  259. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  260. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  262. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  263. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  265. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  266. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route_client-reference-manifest.js +1 -1
  268. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -1
  271. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  274. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  275. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  277. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  280. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  281. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  283. package/app/.next-cli-build/server/app/api/ollama-model-memory/route.js +1 -1
  284. package/app/.next-cli-build/server/app/api/ollama-model-memory/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/ollama-model-memory/route_client-reference-manifest.js +1 -1
  286. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route.js +147 -16
  287. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route_client-reference-manifest.js +1 -1
  289. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/reservations/route.js +1 -1
  290. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/reservations/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/reservations/route_client-reference-manifest.js +1 -1
  292. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route.js +1 -1
  293. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route_client-reference-manifest.js +1 -1
  295. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route.js +1 -1
  296. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route_client-reference-manifest.js +1 -1
  298. package/app/.next-cli-build/server/app/api/ollama-nodes/route.js +1 -1
  299. package/app/.next-cli-build/server/app/api/ollama-nodes/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/ollama-nodes/route_client-reference-manifest.js +1 -1
  301. package/app/.next-cli-build/server/app/api/ollama-routing-targets/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/ollama-routing-targets/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/ollama-routing-targets/route_client-reference-manifest.js +1 -1
  304. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  305. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  307. package/app/.next-cli-build/server/app/api/provider-health/route.js +1 -1
  308. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  309. package/app/.next-cli-build/server/app/api/provider-health/route_client-reference-manifest.js +1 -1
  310. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  313. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  314. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  316. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  317. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  319. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  320. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  321. package/app/.next-cli-build/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  322. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  323. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  324. package/app/.next-cli-build/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  325. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  328. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  331. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  332. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  333. package/app/.next-cli-build/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  334. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route_client-reference-manifest.js +1 -1
  337. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  338. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  339. package/app/.next-cli-build/server/app/api/providers/route_client-reference-manifest.js +1 -1
  340. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  341. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  342. package/app/.next-cli-build/server/app/api/providers/suggested-models/route_client-reference-manifest.js +1 -1
  343. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  344. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  345. package/app/.next-cli-build/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  346. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  347. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  349. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  350. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  351. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -1
  352. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  353. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -1
  355. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  356. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  357. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -1
  358. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  359. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  360. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -1
  361. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  362. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  363. package/app/.next-cli-build/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -1
  364. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  365. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  366. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route_client-reference-manifest.js +1 -1
  367. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  368. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  369. package/app/.next-cli-build/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  370. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  371. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  372. package/app/.next-cli-build/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
  373. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  374. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  375. package/app/.next-cli-build/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  376. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  377. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  378. package/app/.next-cli-build/server/app/api/settings/route_client-reference-manifest.js +1 -1
  379. package/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  380. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  381. package/app/.next-cli-build/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  382. package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  383. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  384. package/app/.next-cli-build/server/app/api/tags/route_client-reference-manifest.js +1 -1
  385. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  386. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  387. package/app/.next-cli-build/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -1
  388. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  389. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  390. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
  391. package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  392. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  393. package/app/.next-cli-build/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  394. package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  395. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  396. package/app/.next-cli-build/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  397. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  398. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  399. package/app/.next-cli-build/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  400. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  401. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  402. package/app/.next-cli-build/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  403. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  404. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  405. package/app/.next-cli-build/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  406. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  407. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  408. package/app/.next-cli-build/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  409. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  410. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  411. package/app/.next-cli-build/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  412. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  413. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  414. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route_client-reference-manifest.js +1 -1
  415. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  416. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  417. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route_client-reference-manifest.js +1 -1
  418. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  419. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  420. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route_client-reference-manifest.js +1 -1
  421. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  422. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  423. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route_client-reference-manifest.js +1 -1
  424. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js +1 -1
  425. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  426. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route_client-reference-manifest.js +1 -1
  427. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  428. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  429. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route_client-reference-manifest.js +1 -1
  430. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  431. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  432. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  433. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  434. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  435. package/app/.next-cli-build/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  436. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  437. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  438. package/app/.next-cli-build/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  439. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  440. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  441. package/app/.next-cli-build/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  442. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  443. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  444. package/app/.next-cli-build/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  445. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  446. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  447. package/app/.next-cli-build/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  448. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  449. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  450. package/app/.next-cli-build/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
  451. package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  452. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  453. package/app/.next-cli-build/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  454. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  455. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  456. package/app/.next-cli-build/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  457. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  458. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  459. package/app/.next-cli-build/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  460. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  461. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  462. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  463. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  464. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  465. package/app/.next-cli-build/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -1
  466. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  467. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  468. package/app/.next-cli-build/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  469. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  470. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  471. package/app/.next-cli-build/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  472. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  473. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  474. package/app/.next-cli-build/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  475. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  476. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  477. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  478. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  479. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  480. package/app/.next-cli-build/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  481. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  482. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  483. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route_client-reference-manifest.js +1 -1
  484. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  485. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  486. package/app/.next-cli-build/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -1
  487. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  488. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  489. package/app/.next-cli-build/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  490. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  491. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  492. package/app/.next-cli-build/server/app/api/v1/responses/compact/route_client-reference-manifest.js +1 -1
  493. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  494. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  495. package/app/.next-cli-build/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  496. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  497. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  498. package/app/.next-cli-build/server/app/api/v1/route_client-reference-manifest.js +1 -1
  499. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  500. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  501. package/app/.next-cli-build/server/app/api/v1/search/route_client-reference-manifest.js +1 -1
  502. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  503. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  504. package/app/.next-cli-build/server/app/api/v1/web/fetch/route_client-reference-manifest.js +1 -1
  505. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  506. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  507. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  508. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  509. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  510. package/app/.next-cli-build/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  511. package/app/.next-cli-build/server/app/api/version/restart/route.js +1 -1
  512. package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
  513. package/app/.next-cli-build/server/app/api/version/restart/route_client-reference-manifest.js +1 -1
  514. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  515. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  516. package/app/.next-cli-build/server/app/api/version/route_client-reference-manifest.js +1 -1
  517. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  518. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  519. package/app/.next-cli-build/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -1
  520. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  521. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  522. package/app/.next-cli-build/server/app/api/version/update/route_client-reference-manifest.js +1 -1
  523. package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route.js +1 -1
  524. package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route.js.nft.json +1 -1
  525. package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route_client-reference-manifest.js +1 -1
  526. package/app/.next-cli-build/server/app/api/virtual-combos/route.js +1 -1
  527. package/app/.next-cli-build/server/app/api/virtual-combos/route.js.nft.json +1 -1
  528. package/app/.next-cli-build/server/app/api/virtual-combos/route_client-reference-manifest.js +1 -1
  529. package/app/.next-cli-build/server/app/callback/page.js +2 -2
  530. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  531. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  532. package/app/.next-cli-build/server/app/callback.html +1 -1
  533. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  534. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  535. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  536. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
  537. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  538. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +2 -2
  539. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  540. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  541. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  542. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  543. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  544. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  545. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  546. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  547. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  548. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  549. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  550. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  551. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  552. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  553. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  554. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  555. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  556. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  557. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  558. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  559. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  560. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  561. package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  562. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  563. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  564. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  565. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  566. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  567. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  568. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  569. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  570. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  571. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
  572. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  573. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  574. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  575. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  576. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  577. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  578. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  579. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  580. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  581. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  582. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  583. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  584. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  585. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  586. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  587. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  588. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  589. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  590. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  591. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  592. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  593. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  594. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  595. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  596. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  597. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  598. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  599. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  600. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  601. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.html +1 -1
  602. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.rsc +6 -6
  603. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes/__PAGE__.segment.rsc +2 -2
  604. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes.segment.rsc +1 -1
  605. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  606. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  607. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_full.segment.rsc +6 -6
  608. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_head.segment.rsc +1 -1
  609. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_index.segment.rsc +4 -4
  610. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_tree.segment.rsc +2 -2
  611. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  612. package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  613. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  614. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  615. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  616. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  617. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  618. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  619. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  620. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  621. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  622. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
  623. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +2 -2
  624. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  625. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  626. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  627. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
  628. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  629. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +4 -4
  630. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
  631. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  632. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
  633. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +2 -2
  634. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  635. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  636. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  637. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
  638. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  639. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +4 -4
  640. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
  641. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  642. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  643. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  644. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  645. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  646. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  647. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  648. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  649. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  650. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  651. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  652. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  653. package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  654. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  655. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  656. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  657. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  658. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  659. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  660. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  661. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  662. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  663. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  664. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  665. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  666. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  667. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  668. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  669. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  670. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  671. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  672. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  673. package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  674. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  675. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  676. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  677. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  678. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  679. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  680. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  681. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  682. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  683. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  684. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  685. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  686. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
  687. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  688. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  689. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  690. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  691. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +2 -2
  692. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  693. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  694. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  695. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  696. package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
  697. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  698. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  699. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  700. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  701. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  702. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  703. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
  704. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  705. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  706. package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  707. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  708. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  709. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  710. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  711. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  712. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  713. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  714. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  715. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  716. package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  717. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  718. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  719. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  720. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  721. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  722. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  723. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  724. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  725. package/app/.next-cli-build/server/app/dashboard/virtual-combos.html +2 -2
  726. package/app/.next-cli-build/server/app/dashboard/virtual-combos.rsc +6 -6
  727. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos/__PAGE__.segment.rsc +2 -2
  728. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos.segment.rsc +1 -1
  729. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  730. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  731. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_full.segment.rsc +6 -6
  732. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_head.segment.rsc +1 -1
  733. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_index.segment.rsc +4 -4
  734. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_tree.segment.rsc +2 -2
  735. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  736. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  737. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  738. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  739. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  740. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  741. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  742. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
  743. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  744. package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
  745. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  746. package/app/.next-cli-build/server/app/index.html +1 -1
  747. package/app/.next-cli-build/server/app/index.rsc +4 -4
  748. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  749. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  750. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  751. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
  752. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  753. package/app/.next-cli-build/server/app/landing/page.js +2 -2
  754. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  755. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  756. package/app/.next-cli-build/server/app/landing.html +1 -1
  757. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  758. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  759. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  760. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
  761. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  762. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  763. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  764. package/app/.next-cli-build/server/app/login/page.js +2 -2
  765. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  766. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  767. package/app/.next-cli-build/server/app/login.html +1 -1
  768. package/app/.next-cli-build/server/app/login.rsc +5 -5
  769. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  770. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  771. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
  772. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  773. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  774. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  775. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
  776. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  777. package/app/.next-cli-build/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  778. package/app/.next-cli-build/server/app/page.js +2 -2
  779. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  780. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  781. package/app/.next-cli-build/server/app-paths-manifest.json +5 -5
  782. package/app/.next-cli-build/server/chunks/2769.js +1 -1
  783. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  784. package/app/.next-cli-build/server/chunks/319.js +3 -3
  785. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  786. package/app/.next-cli-build/server/chunks/5852.js +1 -1
  787. package/app/.next-cli-build/server/chunks/6604.js +7 -0
  788. package/app/.next-cli-build/server/chunks/7130.js +1 -0
  789. package/app/.next-cli-build/server/chunks/7153.js +1 -1
  790. package/app/.next-cli-build/server/chunks/7197.js +1 -1
  791. package/app/.next-cli-build/server/chunks/7774.js +6 -6
  792. package/app/.next-cli-build/server/chunks/7965.js +1 -1
  793. package/app/.next-cli-build/server/chunks/8491.js +2 -2
  794. package/app/.next-cli-build/server/chunks/8520.js +1 -1
  795. package/app/.next-cli-build/server/chunks/8895.js +1 -1
  796. package/app/.next-cli-build/server/chunks/9253.js +1 -0
  797. package/app/.next-cli-build/server/chunks/9447.js +1 -1
  798. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  799. package/app/.next-cli-build/server/middleware.js +4 -4
  800. package/app/.next-cli-build/server/pages/404.html +1 -1
  801. package/app/.next-cli-build/server/pages/500.html +1 -1
  802. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  803. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  804. package/app/.next-cli-build/static/chunks/{1321-5ef553cf7914ae11.js → 1321-54d54959192b8d3e.js} +1 -1
  805. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-0337bade7cc4bb54.js → page-1b2283499089d7dc.js} +1 -1
  806. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-1adaf9be4107d227.js +1 -0
  807. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-d8b42a4e1ae60f65.js → page-85cb2bafe0526c5d.js} +1 -1
  808. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-fa7f1ff2429b81f1.js +1 -0
  809. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-c3640ed1577b33be.js → page-d26b9256cf41fb19.js} +1 -1
  810. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/{page-3154819acdf116e6.js → page-e0b4284d8e973996.js} +1 -1
  811. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-d943cf31dab4f2ca.js → page-4377fb8d824f5bde.js} +2 -2
  812. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-95c158c771a04cee.js → page-0c0be38249c23b67.js} +1 -1
  813. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-784e3c876b7be38f.js → page-b2b612e7dedabef1.js} +2 -2
  814. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/{page-d797bc6e0016a832.js → page-356120709e5a1a94.js} +1 -1
  815. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-161edd90803b7184.js +1 -0
  816. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ollama-nodes/page-3e97343c80613dec.js +1 -0
  817. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/page-5e2bec66810c6089.js +1 -0
  818. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-e4e65b72b72489e7.js +1 -0
  819. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/prompt-logs/{page-d92181d9443fbccc.js → page-51f32ade40c03a33.js} +1 -1
  820. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/provider-health/{page-362bbf660a9b7a90.js → page-1ad19698b1534460.js} +1 -1
  821. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-70cb77100361d775.js → page-322409a7d067a9ba.js} +1 -1
  822. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-75089627b58b62a8.js → page-009821d1edc5606b.js} +1 -1
  823. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-ac3c52c3590019b2.js → page-0cf8abbb69a8a288.js} +1 -1
  824. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-7b8d25d6ac984272.js → page-0e356884dbb16e9e.js} +2 -2
  825. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-383255c4b63ebf3b.js +1 -0
  826. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/{page-84e359aafb683d81.js → page-de03c9c19092784e.js} +1 -1
  827. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-ceeba7e47ca79a6e.js → page-fdac9423efa73ccd.js} +1 -1
  828. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/{page-738b345152864d51.js → page-a4e4500cdae96c24.js} +1 -1
  829. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/virtual-combos/{page-5c280ae46214bd5a.js → page-3175d0b06abbb400.js} +1 -1
  830. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-4d4168ada31e1c18.js → layout-3a946e00857971ef.js} +1 -1
  831. package/app/.next-cli-build/static/chunks/app/_not-found/{page-49d97bcbe2f44252.js → page-858db954e7c2a6ea.js} +1 -1
  832. package/app/.next-cli-build/static/chunks/app/callback/{page-9b9bbcd8b2b1992b.js → page-92792dba9359010b.js} +1 -1
  833. package/app/.next-cli-build/static/chunks/app/dashboard/settings/pricing/page-7f531843e0dca84d.js +1 -0
  834. package/app/.next-cli-build/static/chunks/app/landing/{page-7d550a4fdc74c753.js → page-657d33ccb95c2759.js} +1 -1
  835. package/app/.next-cli-build/static/chunks/app/{layout-bd4974e3335b6dc6.js → layout-39f1f36912db26e1.js} +1 -1
  836. package/app/.next-cli-build/static/chunks/app/login/{page-00b62bdd78002be3.js → page-5134676839e72d1b.js} +1 -1
  837. package/app/.next-cli-build/static/chunks/{framework-711ef29bc66f648c.js → framework-b8f729f35b3f9ad7.js} +1 -1
  838. package/app/.next-cli-build/static/chunks/main-app-0a27584eea53a4b0.js +1 -0
  839. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/global-error-ee20097265e1e7ed.js +1 -0
  840. package/app/.next-cli-build/static/css/7c50b64c9b7c7390.css +1 -0
  841. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.54-to-1.0.55-1.0.55-20260527-201319/data.sqlite +0 -0
  842. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  843. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  844. package/app/cli/.build-home/AppData/Roaming/bluerouter/jwt-secret +1 -1
  845. package/app/cli/.build-home/AppData/Roaming/bluerouter/machine-id +1 -1
  846. package/app/cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json +3 -3
  847. package/app/node_modules/react/cjs/react.development.js +1 -1
  848. package/app/node_modules/react/cjs/react.production.js +1 -1
  849. package/app/node_modules/react/package.json +1 -1
  850. package/app/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
  851. package/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
  852. package/app/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
  853. package/app/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
  854. package/app/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
  855. package/app/node_modules/react-dom/cjs/react-dom.production.js +1 -1
  856. package/app/node_modules/react-dom/package.json +2 -2
  857. package/app/package.json +2 -2
  858. package/app/public/sw.js +22 -22
  859. package/app/server.js +1 -1
  860. package/app/src/lib/db/adapters/betterSqliteAdapter.js +55 -55
  861. package/app/src/lib/db/adapters/bunSqliteAdapter.js +63 -63
  862. package/app/src/lib/db/adapters/nodeSqliteAdapter.js +84 -84
  863. package/app/src/lib/db/adapters/sqljsAdapter.js +115 -115
  864. package/app/src/lib/db/migrate.js +286 -286
  865. package/app/src/lib/oauth/services/xai.js +238 -238
  866. package/app/src/shared/utils/apiKey.js +98 -98
  867. package/package.json +1 -1
  868. package/src/cli/menus/apiKeys.js +233 -233
  869. package/src/cli/menus/combos.js +477 -477
  870. package/src/cli/menus/providers.js +845 -845
  871. package/src/cli/tray/trayWin.js +89 -89
  872. package/src/cli/utils/clipboard.js +30 -30
  873. package/src/cli/utils/display.js +156 -156
  874. package/src/cli/utils/endpoint.js +32 -32
  875. package/src/cli/utils/format.js +125 -125
  876. package/src/cli/utils/input.js +156 -156
  877. package/src/cli/utils/menuHelper.js +156 -156
  878. package/src/cli/utils/modelSelector.js +136 -136
  879. package/app/.next-cli-build/server/chunks/476.js +0 -7
  880. package/app/.next-cli-build/server/chunks/9526.js +0 -1
  881. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-db7807f40ca534e6.js +0 -1
  882. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-390aa31a6095d7ce.js +0 -1
  883. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-702e0cf44d2ad7e5.js +0 -1
  884. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ollama-nodes/page-bac475308728333b.js +0 -1
  885. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/page-4cdbbceec96a49fe.js +0 -1
  886. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-b223dca149e57c72.js +0 -1
  887. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-eb63022ded49a729.js +0 -1
  888. package/app/.next-cli-build/static/chunks/app/dashboard/settings/pricing/page-1c664ab9c6951012.js +0 -1
  889. package/app/.next-cli-build/static/chunks/main-app-2f687e2b0501c574.js +0 -1
  890. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/global-error-c3196a49c3084faa.js +0 -1
  891. package/app/.next-cli-build/static/css/faf8f3171226b301.css +0 -1
  892. /package/app/.next-cli-build/static/{QSbdGxh8toy2LcHGBDqR0 → Sf2XrTrWZAuhKhG2sk1KW}/_buildManifest.js +0 -0
  893. /package/app/.next-cli-build/static/{QSbdGxh8toy2LcHGBDqR0 → Sf2XrTrWZAuhKhG2sk1KW}/_ssgManifest.js +0 -0
  894. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-1.0.52-to-1.0.53-1.0.53-20260527-171653 → upgrade-1.0.53-to-1.0.54-1.0.54-20260527-190346}/data.sqlite +0 -0
@@ -1,845 +1,845 @@
1
- const api = require("../api/client");
2
- const { prompt, confirm, pause } = require("../utils/input");
3
- const { clearScreen, showStatus, showHeader } = require("../utils/display");
4
- const { formatDate, getRelativeTime } = require("../utils/format");
5
- const { showMenuWithBack } = require("../utils/menuHelper");
6
- const { copyToClipboard } = require("../utils/clipboard");
7
-
8
- // ANSI colors for styling
9
- const COLORS = {
10
- reset: "\x1b[0m",
11
- bold: "\x1b[1m",
12
- cyan: "\x1b[36m",
13
- dim: "\x1b[2m"
14
- };
15
-
16
- // Provider models - static config (synced from open-sse/config/providerModels.js)
17
- const PROVIDER_MODELS = {
18
- cc: [
19
- { id: "claude-opus-4-5-20251101" },
20
- { id: "claude-sonnet-4-5-20250929" },
21
- { id: "claude-haiku-4-5-20251001" },
22
- ],
23
- cx: [
24
- { id: "gpt-5.2-codex" },
25
- { id: "gpt-5.2" },
26
- { id: "gpt-5.1-codex-max" },
27
- { id: "gpt-5.1-codex" },
28
- { id: "gpt-5.1-codex-mini" },
29
- { id: "gpt-5.1" },
30
- { id: "gpt-5-codex" },
31
- { id: "gpt-5-codex-mini" },
32
- ],
33
- gc: [
34
- { id: "gemini-3-flash-preview" },
35
- { id: "gemini-3-pro-preview" },
36
- { id: "gemini-2.5-pro" },
37
- { id: "gemini-2.5-flash" },
38
- { id: "gemini-2.5-flash-lite" },
39
- ],
40
- qw: [
41
- { id: "qwen3-coder-plus" },
42
- { id: "qwen3-coder-flash" },
43
- { id: "vision-model" },
44
- ],
45
- if: [
46
- { id: "qwen3-coder-plus" },
47
- { id: "kimi-k2" },
48
- { id: "kimi-k2-thinking" },
49
- { id: "deepseek-r1" },
50
- { id: "deepseek-v3.2-chat" },
51
- { id: "deepseek-v3.2-reasoner" },
52
- { id: "minimax-m2" },
53
- { id: "glm-4.7" },
54
- ],
55
- ag: [
56
- { id: "gemini-3-flash-agent" },
57
- { id: "gemini-3.5-flash-low" },
58
- { id: "gemini-pro-agent" },
59
- { id: "gemini-3.1-pro-low" },
60
- { id: "claude-sonnet-4-6" },
61
- { id: "claude-opus-4-6-thinking" },
62
- { id: "gpt-oss-120b-medium" },
63
- { id: "gemini-3-flash" },
64
- ],
65
- gh: [
66
- { id: "gpt-5" },
67
- { id: "gpt-5-mini" },
68
- { id: "gpt-5.1-codex" },
69
- { id: "gpt-5.1-codex-max" },
70
- { id: "gpt-4.1" },
71
- { id: "claude-4.5-sonnet" },
72
- { id: "claude-4.5-opus" },
73
- { id: "claude-4.5-haiku" },
74
- { id: "gemini-3-pro" },
75
- { id: "gemini-3-flash" },
76
- { id: "gemini-2.5-pro" },
77
- { id: "grok-code-fast-1" },
78
- ],
79
- kr: [
80
- { id: "claude-sonnet-4.5" },
81
- { id: "claude-haiku-4.5" },
82
- ],
83
- openai: [
84
- { id: "gpt-4o" },
85
- { id: "gpt-4o-mini" },
86
- { id: "gpt-4-turbo" },
87
- { id: "o1" },
88
- { id: "o1-mini" },
89
- ],
90
- anthropic: [
91
- { id: "claude-sonnet-4-20250514" },
92
- { id: "claude-opus-4-20250514" },
93
- { id: "claude-3-5-sonnet-20241022" },
94
- ],
95
- gemini: [
96
- { id: "gemini-3-pro-preview" },
97
- { id: "gemini-2.5-pro" },
98
- { id: "gemini-2.5-flash" },
99
- { id: "gemini-2.5-flash-lite" },
100
- ],
101
- openrouter: [
102
- { id: "auto" },
103
- ],
104
- glm: [
105
- { id: "glm-4.7" },
106
- { id: "glm-4.6v" },
107
- ],
108
- kimi: [
109
- { id: "kimi-latest" },
110
- ],
111
- minimax: [
112
- { id: "MiniMax-M2.1" },
113
- ],
114
- };
115
-
116
- // Provider definitions
117
- const OAUTH_PROVIDERS = {
118
- claude: { id: "claude", alias: "cc", name: "Claude Code" },
119
- codex: { id: "codex", alias: "cx", name: "OpenAI Codex" },
120
- "gemini-cli": { id: "gemini-cli", alias: "gc", name: "Gemini CLI" },
121
- github: { id: "github", alias: "gh", name: "GitHub Copilot" },
122
- antigravity: { id: "antigravity", alias: "ag", name: "Antigravity" },
123
- iflow: { id: "iflow", alias: "if", name: "iFlow AI" },
124
- qwen: { id: "qwen", alias: "qw", name: "Qwen Code" },
125
- kiro: { id: "kiro", alias: "kr", name: "Kiro AI" },
126
- };
127
-
128
- const APIKEY_PROVIDERS = {
129
- openrouter: { id: "openrouter", name: "OpenRouter" },
130
- glm: { id: "glm", name: "GLM Coding" },
131
- minimax: { id: "minimax", name: "Minimax Coding" },
132
- kimi: { id: "kimi", name: "Kimi Coding" },
133
- openai: { id: "openai", name: "OpenAI" },
134
- anthropic: { id: "anthropic", name: "Anthropic" },
135
- gemini: { id: "gemini", name: "Gemini" },
136
- };
137
-
138
- const ALL_PROVIDERS = { ...OAUTH_PROVIDERS, ...APIKEY_PROVIDERS };
139
-
140
- /**
141
- * Get auth type for provider
142
- * @param {string} providerId - Provider ID
143
- * @returns {string} "oauth" or "apikey"
144
- */
145
- function getAuthType(providerId) {
146
- return OAUTH_PROVIDERS[providerId] ? "oauth" : "apikey";
147
- }
148
-
149
- /**
150
- * Count connections by provider
151
- * @param {Array} connections - Array of connection objects
152
- * @returns {Object} Map of providerId -> count
153
- */
154
- function countConnectionsByProvider(connections) {
155
- const counts = {};
156
- connections.forEach(conn => {
157
- const providerId = conn.provider || conn.providerId;
158
- counts[providerId] = (counts[providerId] || 0) + 1;
159
- });
160
- return counts;
161
- }
162
-
163
- /**
164
- * Show main providers menu
165
- * @param {Array<string>} breadcrumb - Breadcrumb path
166
- */
167
- async function showProvidersMenu(breadcrumb = []) {
168
- // Build provider items list
169
- const providerItems = [];
170
-
171
- Object.values(OAUTH_PROVIDERS).forEach(provider => {
172
- providerItems.push({
173
- provider,
174
- authType: "oauth",
175
- label: (data) => {
176
- const count = data.counts[provider.id] || 0;
177
- return `${provider.name} (OAuth) - ${count} Connected`;
178
- },
179
- action: async (data) => {
180
- await showProviderDetail(provider.id, "oauth", data.connections, [...breadcrumb, provider.name]);
181
- return true;
182
- }
183
- });
184
- });
185
-
186
- Object.values(APIKEY_PROVIDERS).forEach(provider => {
187
- providerItems.push({
188
- provider,
189
- authType: "apikey",
190
- label: (data) => {
191
- const count = data.counts[provider.id] || 0;
192
- return `${provider.name} (API) - ${count} Connected`;
193
- },
194
- action: async (data) => {
195
- await showProviderDetail(provider.id, "apikey", data.connections, [...breadcrumb, provider.name]);
196
- return true;
197
- }
198
- });
199
- });
200
-
201
- // Custom provider nodes section
202
- providerItems.push({
203
- label: () => `${COLORS.dim}── Custom Providers ──${COLORS.reset}`,
204
- action: async () => true, // separator, no-op
205
- isSeparator: true,
206
- });
207
- providerItems.push({
208
- label: (data) => {
209
- const count = data.nodeCount || 0;
210
- return `Custom Providers - ${count} Configured`;
211
- },
212
- action: async () => {
213
- await showCustomProvidersMenu([...breadcrumb, "Custom Providers"]);
214
- return true;
215
- }
216
- });
217
-
218
- await showMenuWithBack({
219
- title: "šŸ”Œ Providers Management",
220
- breadcrumb,
221
- refresh: async () => {
222
- const [provRes, nodeRes] = await Promise.all([api.getProviders(), api.getProviderNodes()]);
223
- if (!provRes.success) {
224
- showStatus(`Failed to fetch providers: ${provRes.error}`, "error");
225
- await pause();
226
- return null;
227
- }
228
- const connections = provRes.data.connections || [];
229
- const nodes = nodeRes.success ? (nodeRes.data.nodes || nodeRes.data || []) : [];
230
- return {
231
- connections,
232
- counts: countConnectionsByProvider(connections),
233
- nodeCount: nodes.length,
234
- };
235
- },
236
- items: providerItems
237
- });
238
- }
239
-
240
- /**
241
- * Build provider header with alias and models
242
- * @param {string} providerId - Provider ID
243
- * @returns {string}
244
- */
245
- function buildProviderHeader(providerId) {
246
- const provider = ALL_PROVIDERS[providerId];
247
- const alias = provider.alias || providerId;
248
-
249
- const lines = [];
250
- lines.push(`Alias: ${COLORS.cyan}${alias}${COLORS.reset}`);
251
-
252
- // Get models from static config
253
- const models = PROVIDER_MODELS[alias] || [];
254
- if (models.length > 0) {
255
- const modelList = models
256
- .slice(0, 5)
257
- .map(m => `${alias}/${m.id}`)
258
- .join(", ");
259
- const more = models.length > 5 ? ` (+${models.length - 5} more)` : "";
260
- lines.push(`Models: ${COLORS.dim}${modelList}${more}${COLORS.reset}`);
261
- } else {
262
- lines.push(`Models: ${COLORS.dim}No models configured${COLORS.reset}`);
263
- }
264
-
265
- return lines.join("\n");
266
- }
267
-
268
- /**
269
- * Show provider detail with connections and actions
270
- * @param {string} providerId - Provider ID
271
- * @param {string} authType - "oauth" or "apikey"
272
- * @param {Array} allConnections - All connections
273
- * @param {Array<string>} breadcrumb - Breadcrumb path
274
- */
275
- async function showProviderDetail(providerId, authType, allConnections, breadcrumb = []) {
276
- const provider = ALL_PROVIDERS[providerId];
277
- const { showListMenu } = require("../utils/menuHelper");
278
-
279
- await showListMenu({
280
- title: `šŸ”Œ ${provider.name} (${authType.toUpperCase()})`,
281
- breadcrumb,
282
- backLabel: "← Back to Providers",
283
- headerContent: buildProviderHeader(providerId),
284
- fetchItems: async () => {
285
- const response = await api.getProviders();
286
- if (response.success) {
287
- allConnections.length = 0;
288
- allConnections.push(...(response.data.connections || []));
289
- }
290
- const providerConns = allConnections.filter(conn =>
291
- (conn.provider || conn.providerId) === providerId
292
- );
293
- return { items: providerConns };
294
- },
295
- formatItem: (conn) => {
296
- const status = conn.testStatus === "active" ? "āœ“" : conn.testStatus === "error" ? "āœ—" : "?";
297
- const name = conn.name || conn.email || conn.displayName || "Unnamed";
298
- return `${name} (${status})`;
299
- },
300
- onSelect: async (conn) => {
301
- await showConnectionActions(conn, providerId, breadcrumb);
302
- },
303
- createAction: {
304
- label: "Add New Connection",
305
- action: async () => {
306
- await handleAddConnection(providerId, authType);
307
- }
308
- }
309
- });
310
- }
311
-
312
- /**
313
- * Show actions for a specific connection
314
- * @param {Object} connection - Connection object
315
- * @param {string} providerId - Provider ID
316
- * @param {Array<string>} breadcrumb - Breadcrumb path
317
- */
318
- async function showConnectionActions(connection, providerId, breadcrumb = []) {
319
- const name = connection.name || connection.email || connection.displayName || "Unnamed";
320
- const status = connection.testStatus === "active" ? "āœ“ Active" :
321
- connection.testStatus === "error" ? "āœ— Error" : "? Unknown";
322
-
323
- await showMenuWithBack({
324
- title: `šŸ”Œ ${name}`,
325
- breadcrumb: [...breadcrumb, name],
326
- headerContent: `Connection: ${name}\nStatus: ${status}`,
327
- items: [
328
- {
329
- label: "Rename Connection",
330
- action: async () => {
331
- const newName = await prompt(`New name (current: ${name}): `);
332
- if (newName && newName.trim()) {
333
- showStatus("Renaming connection...", "info");
334
- const result = await api.updateConnection(connection.id, { name: newName.trim() });
335
- if (result.success) {
336
- showStatus("Connection renamed!", "success");
337
- connection.name = newName.trim();
338
- } else {
339
- showStatus(`Rename failed: ${result.error}`, "error");
340
- }
341
- await pause();
342
- }
343
- return true;
344
- }
345
- },
346
- {
347
- label: "Test Connection",
348
- action: async () => {
349
- showStatus("Testing connection...", "info");
350
- const result = await api.testConnection(connection.id);
351
- if (result.success) {
352
- showStatus("Connection is working!", "success");
353
- } else {
354
- showStatus(`Test failed: ${result.error}`, "error");
355
- }
356
- await pause();
357
- return true;
358
- }
359
- },
360
- {
361
- label: "Delete Connection",
362
- action: async () => {
363
- const confirmed = await confirm(`Delete connection "${name}"?`);
364
- if (confirmed) {
365
- const result = await api.deleteConnection(connection.id);
366
- if (result.success) {
367
- showStatus("Connection deleted!", "success");
368
- } else {
369
- showStatus(`Delete failed: ${result.error}`, "error");
370
- }
371
- await pause();
372
- return false; // Exit menu after delete
373
- }
374
- return true;
375
- }
376
- }
377
- ]
378
- });
379
- }
380
-
381
- /**
382
- * Handle adding new connection
383
- * @param {string} providerId - Provider ID
384
- * @param {string} authType - "oauth" or "apikey"
385
- */
386
- // Providers that use Device Code Flow (terminal-based polling)
387
- const DEVICE_CODE_PROVIDERS = ["github", "qwen", "kiro"];
388
-
389
- /**
390
- * Handle adding new connection - auto-detect flow type
391
- * @param {string} providerId - Provider ID
392
- * @param {string} authType - "oauth" or "apikey"
393
- */
394
- async function handleAddConnection(providerId, authType) {
395
- if (authType === "apikey") {
396
- await handleAddApiKeyConnection(providerId);
397
- } else {
398
- // OAuth: auto-detect flow type based on provider
399
- if (DEVICE_CODE_PROVIDERS.includes(providerId)) {
400
- // Device Code Flow for GitHub, Qwen, Kiro
401
- await handleAddDeviceCodeConnection(providerId);
402
- } else {
403
- // Authorization Code Flow for Claude, Codex, Gemini, etc.
404
- await handleAddOAuthConnection(providerId);
405
- }
406
- }
407
- }
408
-
409
- /**
410
- * Handle adding API Key connection
411
- * @param {string} providerId - Provider ID
412
- */
413
- async function handleAddApiKeyConnection(providerId) {
414
- clearScreen();
415
- const provider = ALL_PROVIDERS[providerId];
416
- console.log(`\nāž• Add ${provider.name} API Key Connection\n`);
417
-
418
- const name = await prompt("Connection Name: ");
419
- if (!name) {
420
- showStatus("Cancelled", "warning");
421
- await pause();
422
- return;
423
- }
424
-
425
- const apiKey = await prompt("API Key: ");
426
- if (!apiKey) {
427
- showStatus("Cancelled", "warning");
428
- await pause();
429
- return;
430
- }
431
-
432
- showStatus("Creating connection...", "info");
433
-
434
- const result = await api.createApiKeyProvider({
435
- provider: providerId,
436
- name,
437
- apiKey
438
- });
439
-
440
- if (result.success) {
441
- showStatus("āœ“ Connection created successfully!", "success");
442
- } else {
443
- showStatus(`āœ— Failed: ${result.error}`, "error");
444
- }
445
-
446
- await pause();
447
- }
448
-
449
- /**
450
- * Handle adding OAuth Authorization Code connection
451
- * User opens URL manually and pastes callback URL
452
- * @param {string} providerId - Provider ID
453
- */
454
- async function handleAddOAuthConnection(providerId) {
455
- clearScreen();
456
- const provider = ALL_PROVIDERS[providerId];
457
-
458
- // Step 1: Get auth URL
459
- showStatus("Requesting authorization URL...", "info");
460
- const authResult = await api.getOAuthAuthUrl(providerId);
461
-
462
- if (!authResult.success) {
463
- showStatus(`Failed: ${authResult.error}`, "error");
464
- await pause();
465
- return;
466
- }
467
-
468
- const authData = authResult.data || authResult;
469
- const authUrl = authData.authUrl;
470
- const codeVerifier = authData.codeVerifier;
471
- const state = authData.state;
472
- const redirectUri = authData.redirectUri;
473
-
474
- if (!authUrl) {
475
- showStatus("Failed: No auth URL received", "error");
476
- await pause();
477
- return;
478
- }
479
-
480
- // Step 2: Show URL and instructions
481
- clearScreen();
482
- showHeader("šŸ” OAuth Login", `Providers > ${provider.name} > Add Connection`);
483
-
484
- console.log(` ${COLORS.bold}${COLORS.cyan}1.${COLORS.reset} Open this URL in your browser:`);
485
- console.log(` ${COLORS.dim}${authUrl}${COLORS.reset}`);
486
- if (copyToClipboard(authUrl)) {
487
- console.log(` \x1b[32māœ“ Link copied to clipboard!\x1b[0m`);
488
- }
489
- console.log();
490
- console.log(` ${COLORS.bold}${COLORS.cyan}2.${COLORS.reset} Complete authorization in browser`);
491
- console.log();
492
- console.log(` ${COLORS.bold}${COLORS.cyan}3.${COLORS.reset} Copy the callback URL from address bar`);
493
- console.log(` ${COLORS.dim}(looks like: http://localhost:20128/callback?code=...)${COLORS.reset}`);
494
- console.log();
495
-
496
- const callbackUrl = await prompt(" Paste callback URL: ");
497
- if (!callbackUrl) {
498
- showStatus("Cancelled", "warning");
499
- await pause();
500
- return;
501
- }
502
-
503
- // Step 3: Parse callback URL and extract code
504
- let code, urlState, error;
505
- try {
506
- const url = new URL(callbackUrl.trim());
507
- code = url.searchParams.get("code");
508
- urlState = url.searchParams.get("state");
509
- error = url.searchParams.get("error");
510
-
511
- if (error) {
512
- const errorDesc = url.searchParams.get("error_description") || error;
513
- showStatus(`Authorization failed: ${errorDesc}`, "error");
514
- await pause();
515
- return;
516
- }
517
-
518
- if (!code) {
519
- showStatus("No authorization code found in URL", "error");
520
- await pause();
521
- return;
522
- }
523
- } catch (err) {
524
- showStatus("Invalid URL format", "error");
525
- await pause();
526
- return;
527
- }
528
-
529
- // Step 4: Exchange code for tokens
530
- console.log();
531
- showStatus("Exchanging code for tokens...", "info");
532
- const exchangeResult = await api.exchangeOAuthCode(providerId, {
533
- code,
534
- redirectUri,
535
- codeVerifier,
536
- state: urlState || state
537
- });
538
-
539
- if (exchangeResult.success) {
540
- showStatus("Connection created successfully!", "success");
541
- } else {
542
- showStatus(`Failed: ${exchangeResult.error}`, "error");
543
- }
544
-
545
- await pause();
546
- }
547
-
548
- /**
549
- * Handle adding OAuth Device Code connection
550
- * @param {string} providerId - Provider ID
551
- */
552
- async function handleAddDeviceCodeConnection(providerId) {
553
- clearScreen();
554
- const provider = ALL_PROVIDERS[providerId];
555
-
556
- // Step 1: Request device code
557
- showStatus("Requesting device code...", "info");
558
- const deviceResult = await api.getOAuthDeviceCode(providerId);
559
-
560
- if (!deviceResult.success) {
561
- showStatus(`Failed: ${deviceResult.error}`, "error");
562
- await pause();
563
- return;
564
- }
565
-
566
- const deviceData = deviceResult.data || deviceResult;
567
- const device_code = deviceData.device_code;
568
- const user_code = deviceData.user_code;
569
- const verification_uri = deviceData.verification_uri;
570
- const verification_uri_complete = deviceData.verification_uri_complete;
571
- const codeVerifier = deviceData.codeVerifier;
572
- const extraData = deviceData.extraData || deviceData;
573
-
574
- if (!device_code) {
575
- showStatus("Failed: No device code received", "error");
576
- await pause();
577
- return;
578
- }
579
-
580
- // Step 2: Show instructions
581
- clearScreen();
582
- const deviceUrl = verification_uri_complete || verification_uri;
583
- showHeader("šŸ“± Device Login", `Providers > ${provider.name} > Add Connection`);
584
-
585
- console.log(` ${COLORS.bold}${COLORS.cyan}1.${COLORS.reset} Open: ${COLORS.dim}${deviceUrl}${COLORS.reset}`);
586
- if (copyToClipboard(deviceUrl)) {
587
- console.log(` \x1b[32māœ“ Link copied to clipboard!\x1b[0m`);
588
- }
589
- console.log();
590
- if (!verification_uri_complete && user_code) {
591
- console.log(` ${COLORS.bold}${COLORS.cyan}2.${COLORS.reset} Enter code: ${COLORS.bold}${user_code}${COLORS.reset}`);
592
- console.log();
593
- }
594
- console.log(` ${COLORS.dim}Waiting for authorization...${COLORS.reset}`);
595
- console.log();
596
-
597
- // Step 3: Poll for token
598
- const maxAttempts = 60; // 5 minutes (5s interval)
599
- for (let i = 0; i < maxAttempts; i++) {
600
- await new Promise(resolve => setTimeout(resolve, 5000));
601
-
602
- const pollResult = await api.pollOAuthToken(providerId, {
603
- deviceCode: device_code,
604
- codeVerifier,
605
- extraData
606
- });
607
-
608
- if (pollResult.success) {
609
- showStatus("\nConnection created successfully!", "success");
610
- await pause();
611
- return;
612
- }
613
-
614
- // Check if still pending (pending flag is at root level, not in data)
615
- const isPending = pollResult.pending || pollResult.error === "authorization_pending" || pollResult.error === "slow_down";
616
- if (!isPending) {
617
- showStatus(`\nFailed: ${pollResult.error || "Unknown error"}`, "error");
618
- await pause();
619
- return;
620
- }
621
-
622
- process.stdout.write(".");
623
- }
624
-
625
- showStatus("\nTimeout waiting for authorization", "error");
626
- await pause();
627
- }
628
-
629
- // ============================================================================
630
- // CUSTOM PROVIDERS (provider nodes)
631
- // ============================================================================
632
-
633
- const CUSTOM_NODE_TYPES = ["openai-compatible", "anthropic-compatible"];
634
- const OPENAI_API_TYPES = ["chat", "responses"];
635
-
636
- /**
637
- * Show custom providers section in main providers menu
638
- * @param {Array} nodes - List of provider nodes
639
- * @param {Array} connections - All connections
640
- * @param {Array<string>} breadcrumb
641
- */
642
- async function showCustomProvidersMenu(breadcrumb = []) {
643
- const { showListMenu } = require("../utils/menuHelper");
644
-
645
- await showListMenu({
646
- title: "šŸ”§ Custom Providers",
647
- breadcrumb,
648
- backLabel: "← Back to Providers",
649
- fetchItems: async () => {
650
- const res = await api.getProviderNodes();
651
- if (!res.success) return { items: [] };
652
- return { items: res.data.nodes || res.data || [] };
653
- },
654
- formatItem: (node) => `[${node.prefix}] ${node.name} (${node.type})`,
655
- onSelect: async (node) => {
656
- await showCustomNodeDetail(node, [...breadcrumb, node.name]);
657
- },
658
- createAction: {
659
- label: "āž• Add Custom Provider",
660
- action: async () => {
661
- await handleAddCustomNode();
662
- }
663
- }
664
- });
665
- }
666
-
667
- /**
668
- * Show detail menu for a custom provider node
669
- */
670
- async function showCustomNodeDetail(node, breadcrumb = []) {
671
- await showMenuWithBack({
672
- title: `šŸ”§ ${node.name}`,
673
- breadcrumb,
674
- headerContent: [
675
- `Type: ${node.type}`,
676
- `Prefix: ${COLORS.cyan}${node.prefix}${COLORS.reset}`,
677
- `Base URL: ${COLORS.dim}${node.baseUrl}${COLORS.reset}`,
678
- ].join("\n"),
679
- items: [
680
- {
681
- label: "Connections",
682
- action: async () => {
683
- await showCustomNodeConnections(node, breadcrumb);
684
- return true;
685
- }
686
- },
687
- {
688
- label: "Edit Node",
689
- action: async () => {
690
- await handleEditCustomNode(node);
691
- return true;
692
- }
693
- },
694
- {
695
- label: "Delete Node",
696
- action: async () => {
697
- const confirmed = await confirm(`Delete "${node.name}" and all its connections?`);
698
- if (confirmed) {
699
- const res = await api.deleteProviderNode(node.id);
700
- if (res.success) {
701
- showStatus("Node deleted!", "success");
702
- } else {
703
- showStatus(`Delete failed: ${res.error}`, "error");
704
- }
705
- await pause();
706
- return false;
707
- }
708
- return true;
709
- }
710
- }
711
- ]
712
- });
713
- }
714
-
715
- /**
716
- * Show connections for a custom provider node
717
- */
718
- async function showCustomNodeConnections(node, breadcrumb = []) {
719
- const { showListMenu } = require("../utils/menuHelper");
720
-
721
- await showListMenu({
722
- title: `šŸ”Œ ${node.name} – Connections`,
723
- breadcrumb,
724
- backLabel: "← Back",
725
- fetchItems: async () => {
726
- const res = await api.getProviders();
727
- if (!res.success) return { items: [] };
728
- const all = res.data.connections || [];
729
- const items = all.filter(c => c.provider === node.id);
730
- return { items };
731
- },
732
- formatItem: (conn) => {
733
- const status = conn.testStatus === "active" ? "āœ“" : conn.testStatus === "error" ? "āœ—" : "?";
734
- return `${conn.name || "Unnamed"} (${status})`;
735
- },
736
- onSelect: async (conn) => {
737
- await showConnectionActions(conn, node.id, breadcrumb);
738
- },
739
- createAction: {
740
- label: "Add API Key Connection",
741
- action: async () => {
742
- await handleAddCustomNodeConnection(node);
743
- }
744
- }
745
- });
746
- }
747
-
748
- /**
749
- * Add API key connection to a custom provider node
750
- */
751
- async function handleAddCustomNodeConnection(node) {
752
- clearScreen();
753
- console.log(`\nāž• Add Connection to ${node.name}\n`);
754
-
755
- const name = await prompt("Connection Name: ");
756
- if (!name) { showStatus("Cancelled", "warning"); await pause(); return; }
757
-
758
- const apiKey = await prompt("API Key: ");
759
- if (!apiKey) { showStatus("Cancelled", "warning"); await pause(); return; }
760
-
761
- showStatus("Creating connection...", "info");
762
- const res = await api.createApiKeyProvider({ provider: node.id, name, apiKey });
763
-
764
- showStatus(res.success ? "āœ“ Connection created!" : `āœ— Failed: ${res.error}`, res.success ? "success" : "error");
765
- await pause();
766
- }
767
-
768
- /**
769
- * Handle adding a new custom provider node
770
- */
771
- async function handleAddCustomNode() {
772
- clearScreen();
773
- console.log("\nāž• Add Custom Provider\n");
774
-
775
- // Step 1: Select type
776
- const typeChoices = CUSTOM_NODE_TYPES.map((t, i) => ` ${i + 1}. ${t}`).join("\n");
777
- console.log(`Select type:\n${typeChoices}\n`);
778
- const typeInput = await prompt("Type (1/2): ");
779
- const typeIdx = parseInt(typeInput) - 1;
780
- if (isNaN(typeIdx) || !CUSTOM_NODE_TYPES[typeIdx]) {
781
- showStatus("Cancelled", "warning"); await pause(); return;
782
- }
783
- const type = CUSTOM_NODE_TYPES[typeIdx];
784
-
785
- // Step 2: Inputs
786
- const name = await prompt("Name: ");
787
- if (!name) { showStatus("Cancelled", "warning"); await pause(); return; }
788
-
789
- const prefix = await prompt("Prefix (used in model IDs, e.g. myapi): ");
790
- if (!prefix) { showStatus("Cancelled", "warning"); await pause(); return; }
791
-
792
- const baseUrl = await prompt("Base URL (e.g. https://api.example.com/v1): ");
793
- if (!baseUrl) { showStatus("Cancelled", "warning"); await pause(); return; }
794
-
795
- // Step 3: API type (OpenAI only)
796
- let apiType;
797
- if (type === "openai-compatible") {
798
- const apiTypeChoices = OPENAI_API_TYPES.map((t, i) => ` ${i + 1}. ${t}`).join("\n");
799
- console.log(`\nAPI Type:\n${apiTypeChoices}\n`);
800
- const apiTypeInput = await prompt("API Type (1/2, default 1): ");
801
- const apiTypeIdx = parseInt(apiTypeInput) - 1;
802
- apiType = OPENAI_API_TYPES[apiTypeIdx] || "chat";
803
- }
804
-
805
- showStatus("Creating provider node...", "info");
806
- const body = { name, prefix, baseUrl, type, ...(apiType && { apiType }) };
807
- const res = await api.createProviderNode(body);
808
-
809
- showStatus(res.success ? "āœ“ Provider created!" : `āœ— Failed: ${res.error}`, res.success ? "success" : "error");
810
- await pause();
811
- }
812
-
813
- /**
814
- * Handle editing a custom provider node
815
- */
816
- async function handleEditCustomNode(node) {
817
- clearScreen();
818
- console.log(`\nāœļø Edit ${node.name}\n`);
819
- console.log(`${COLORS.dim}Leave blank to keep current value${COLORS.reset}\n`);
820
-
821
- const name = await prompt(`Name (${node.name}): `);
822
- const baseUrl = await prompt(`Base URL (${node.baseUrl}): `);
823
- const prefix = await prompt(`Prefix (${node.prefix}): `);
824
-
825
- const updates = {};
826
- if (name && name.trim()) updates.name = name.trim();
827
- if (baseUrl && baseUrl.trim()) updates.baseUrl = baseUrl.trim();
828
- if (prefix && prefix.trim()) updates.prefix = prefix.trim();
829
-
830
- if (!Object.keys(updates).length) {
831
- showStatus("No changes", "warning"); await pause(); return;
832
- }
833
-
834
- showStatus("Updating...", "info");
835
- const res = await api.updateProviderNode(node.id, updates);
836
- if (res.success) {
837
- Object.assign(node, updates);
838
- showStatus("āœ“ Updated!", "success");
839
- } else {
840
- showStatus(`āœ— Failed: ${res.error}`, "error");
841
- }
842
- await pause();
843
- }
844
-
845
- module.exports = { showProvidersMenu };
1
+ const api = require("../api/client");
2
+ const { prompt, confirm, pause } = require("../utils/input");
3
+ const { clearScreen, showStatus, showHeader } = require("../utils/display");
4
+ const { formatDate, getRelativeTime } = require("../utils/format");
5
+ const { showMenuWithBack } = require("../utils/menuHelper");
6
+ const { copyToClipboard } = require("../utils/clipboard");
7
+
8
+ // ANSI colors for styling
9
+ const COLORS = {
10
+ reset: "\x1b[0m",
11
+ bold: "\x1b[1m",
12
+ cyan: "\x1b[36m",
13
+ dim: "\x1b[2m"
14
+ };
15
+
16
+ // Provider models - static config (synced from open-sse/config/providerModels.js)
17
+ const PROVIDER_MODELS = {
18
+ cc: [
19
+ { id: "claude-opus-4-5-20251101" },
20
+ { id: "claude-sonnet-4-5-20250929" },
21
+ { id: "claude-haiku-4-5-20251001" },
22
+ ],
23
+ cx: [
24
+ { id: "gpt-5.2-codex" },
25
+ { id: "gpt-5.2" },
26
+ { id: "gpt-5.1-codex-max" },
27
+ { id: "gpt-5.1-codex" },
28
+ { id: "gpt-5.1-codex-mini" },
29
+ { id: "gpt-5.1" },
30
+ { id: "gpt-5-codex" },
31
+ { id: "gpt-5-codex-mini" },
32
+ ],
33
+ gc: [
34
+ { id: "gemini-3-flash-preview" },
35
+ { id: "gemini-3-pro-preview" },
36
+ { id: "gemini-2.5-pro" },
37
+ { id: "gemini-2.5-flash" },
38
+ { id: "gemini-2.5-flash-lite" },
39
+ ],
40
+ qw: [
41
+ { id: "qwen3-coder-plus" },
42
+ { id: "qwen3-coder-flash" },
43
+ { id: "vision-model" },
44
+ ],
45
+ if: [
46
+ { id: "qwen3-coder-plus" },
47
+ { id: "kimi-k2" },
48
+ { id: "kimi-k2-thinking" },
49
+ { id: "deepseek-r1" },
50
+ { id: "deepseek-v3.2-chat" },
51
+ { id: "deepseek-v3.2-reasoner" },
52
+ { id: "minimax-m2" },
53
+ { id: "glm-4.7" },
54
+ ],
55
+ ag: [
56
+ { id: "gemini-3-flash-agent" },
57
+ { id: "gemini-3.5-flash-low" },
58
+ { id: "gemini-pro-agent" },
59
+ { id: "gemini-3.1-pro-low" },
60
+ { id: "claude-sonnet-4-6" },
61
+ { id: "claude-opus-4-6-thinking" },
62
+ { id: "gpt-oss-120b-medium" },
63
+ { id: "gemini-3-flash" },
64
+ ],
65
+ gh: [
66
+ { id: "gpt-5" },
67
+ { id: "gpt-5-mini" },
68
+ { id: "gpt-5.1-codex" },
69
+ { id: "gpt-5.1-codex-max" },
70
+ { id: "gpt-4.1" },
71
+ { id: "claude-4.5-sonnet" },
72
+ { id: "claude-4.5-opus" },
73
+ { id: "claude-4.5-haiku" },
74
+ { id: "gemini-3-pro" },
75
+ { id: "gemini-3-flash" },
76
+ { id: "gemini-2.5-pro" },
77
+ { id: "grok-code-fast-1" },
78
+ ],
79
+ kr: [
80
+ { id: "claude-sonnet-4.5" },
81
+ { id: "claude-haiku-4.5" },
82
+ ],
83
+ openai: [
84
+ { id: "gpt-4o" },
85
+ { id: "gpt-4o-mini" },
86
+ { id: "gpt-4-turbo" },
87
+ { id: "o1" },
88
+ { id: "o1-mini" },
89
+ ],
90
+ anthropic: [
91
+ { id: "claude-sonnet-4-20250514" },
92
+ { id: "claude-opus-4-20250514" },
93
+ { id: "claude-3-5-sonnet-20241022" },
94
+ ],
95
+ gemini: [
96
+ { id: "gemini-3-pro-preview" },
97
+ { id: "gemini-2.5-pro" },
98
+ { id: "gemini-2.5-flash" },
99
+ { id: "gemini-2.5-flash-lite" },
100
+ ],
101
+ openrouter: [
102
+ { id: "auto" },
103
+ ],
104
+ glm: [
105
+ { id: "glm-4.7" },
106
+ { id: "glm-4.6v" },
107
+ ],
108
+ kimi: [
109
+ { id: "kimi-latest" },
110
+ ],
111
+ minimax: [
112
+ { id: "MiniMax-M2.1" },
113
+ ],
114
+ };
115
+
116
+ // Provider definitions
117
+ const OAUTH_PROVIDERS = {
118
+ claude: { id: "claude", alias: "cc", name: "Claude Code" },
119
+ codex: { id: "codex", alias: "cx", name: "OpenAI Codex" },
120
+ "gemini-cli": { id: "gemini-cli", alias: "gc", name: "Gemini CLI" },
121
+ github: { id: "github", alias: "gh", name: "GitHub Copilot" },
122
+ antigravity: { id: "antigravity", alias: "ag", name: "Antigravity" },
123
+ iflow: { id: "iflow", alias: "if", name: "iFlow AI" },
124
+ qwen: { id: "qwen", alias: "qw", name: "Qwen Code" },
125
+ kiro: { id: "kiro", alias: "kr", name: "Kiro AI" },
126
+ };
127
+
128
+ const APIKEY_PROVIDERS = {
129
+ openrouter: { id: "openrouter", name: "OpenRouter" },
130
+ glm: { id: "glm", name: "GLM Coding" },
131
+ minimax: { id: "minimax", name: "Minimax Coding" },
132
+ kimi: { id: "kimi", name: "Kimi Coding" },
133
+ openai: { id: "openai", name: "OpenAI" },
134
+ anthropic: { id: "anthropic", name: "Anthropic" },
135
+ gemini: { id: "gemini", name: "Gemini" },
136
+ };
137
+
138
+ const ALL_PROVIDERS = { ...OAUTH_PROVIDERS, ...APIKEY_PROVIDERS };
139
+
140
+ /**
141
+ * Get auth type for provider
142
+ * @param {string} providerId - Provider ID
143
+ * @returns {string} "oauth" or "apikey"
144
+ */
145
+ function getAuthType(providerId) {
146
+ return OAUTH_PROVIDERS[providerId] ? "oauth" : "apikey";
147
+ }
148
+
149
+ /**
150
+ * Count connections by provider
151
+ * @param {Array} connections - Array of connection objects
152
+ * @returns {Object} Map of providerId -> count
153
+ */
154
+ function countConnectionsByProvider(connections) {
155
+ const counts = {};
156
+ connections.forEach(conn => {
157
+ const providerId = conn.provider || conn.providerId;
158
+ counts[providerId] = (counts[providerId] || 0) + 1;
159
+ });
160
+ return counts;
161
+ }
162
+
163
+ /**
164
+ * Show main providers menu
165
+ * @param {Array<string>} breadcrumb - Breadcrumb path
166
+ */
167
+ async function showProvidersMenu(breadcrumb = []) {
168
+ // Build provider items list
169
+ const providerItems = [];
170
+
171
+ Object.values(OAUTH_PROVIDERS).forEach(provider => {
172
+ providerItems.push({
173
+ provider,
174
+ authType: "oauth",
175
+ label: (data) => {
176
+ const count = data.counts[provider.id] || 0;
177
+ return `${provider.name} (OAuth) - ${count} Connected`;
178
+ },
179
+ action: async (data) => {
180
+ await showProviderDetail(provider.id, "oauth", data.connections, [...breadcrumb, provider.name]);
181
+ return true;
182
+ }
183
+ });
184
+ });
185
+
186
+ Object.values(APIKEY_PROVIDERS).forEach(provider => {
187
+ providerItems.push({
188
+ provider,
189
+ authType: "apikey",
190
+ label: (data) => {
191
+ const count = data.counts[provider.id] || 0;
192
+ return `${provider.name} (API) - ${count} Connected`;
193
+ },
194
+ action: async (data) => {
195
+ await showProviderDetail(provider.id, "apikey", data.connections, [...breadcrumb, provider.name]);
196
+ return true;
197
+ }
198
+ });
199
+ });
200
+
201
+ // Custom provider nodes section
202
+ providerItems.push({
203
+ label: () => `${COLORS.dim}── Custom Providers ──${COLORS.reset}`,
204
+ action: async () => true, // separator, no-op
205
+ isSeparator: true,
206
+ });
207
+ providerItems.push({
208
+ label: (data) => {
209
+ const count = data.nodeCount || 0;
210
+ return `Custom Providers - ${count} Configured`;
211
+ },
212
+ action: async () => {
213
+ await showCustomProvidersMenu([...breadcrumb, "Custom Providers"]);
214
+ return true;
215
+ }
216
+ });
217
+
218
+ await showMenuWithBack({
219
+ title: "šŸ”Œ Providers Management",
220
+ breadcrumb,
221
+ refresh: async () => {
222
+ const [provRes, nodeRes] = await Promise.all([api.getProviders(), api.getProviderNodes()]);
223
+ if (!provRes.success) {
224
+ showStatus(`Failed to fetch providers: ${provRes.error}`, "error");
225
+ await pause();
226
+ return null;
227
+ }
228
+ const connections = provRes.data.connections || [];
229
+ const nodes = nodeRes.success ? (nodeRes.data.nodes || nodeRes.data || []) : [];
230
+ return {
231
+ connections,
232
+ counts: countConnectionsByProvider(connections),
233
+ nodeCount: nodes.length,
234
+ };
235
+ },
236
+ items: providerItems
237
+ });
238
+ }
239
+
240
+ /**
241
+ * Build provider header with alias and models
242
+ * @param {string} providerId - Provider ID
243
+ * @returns {string}
244
+ */
245
+ function buildProviderHeader(providerId) {
246
+ const provider = ALL_PROVIDERS[providerId];
247
+ const alias = provider.alias || providerId;
248
+
249
+ const lines = [];
250
+ lines.push(`Alias: ${COLORS.cyan}${alias}${COLORS.reset}`);
251
+
252
+ // Get models from static config
253
+ const models = PROVIDER_MODELS[alias] || [];
254
+ if (models.length > 0) {
255
+ const modelList = models
256
+ .slice(0, 5)
257
+ .map(m => `${alias}/${m.id}`)
258
+ .join(", ");
259
+ const more = models.length > 5 ? ` (+${models.length - 5} more)` : "";
260
+ lines.push(`Models: ${COLORS.dim}${modelList}${more}${COLORS.reset}`);
261
+ } else {
262
+ lines.push(`Models: ${COLORS.dim}No models configured${COLORS.reset}`);
263
+ }
264
+
265
+ return lines.join("\n");
266
+ }
267
+
268
+ /**
269
+ * Show provider detail with connections and actions
270
+ * @param {string} providerId - Provider ID
271
+ * @param {string} authType - "oauth" or "apikey"
272
+ * @param {Array} allConnections - All connections
273
+ * @param {Array<string>} breadcrumb - Breadcrumb path
274
+ */
275
+ async function showProviderDetail(providerId, authType, allConnections, breadcrumb = []) {
276
+ const provider = ALL_PROVIDERS[providerId];
277
+ const { showListMenu } = require("../utils/menuHelper");
278
+
279
+ await showListMenu({
280
+ title: `šŸ”Œ ${provider.name} (${authType.toUpperCase()})`,
281
+ breadcrumb,
282
+ backLabel: "← Back to Providers",
283
+ headerContent: buildProviderHeader(providerId),
284
+ fetchItems: async () => {
285
+ const response = await api.getProviders();
286
+ if (response.success) {
287
+ allConnections.length = 0;
288
+ allConnections.push(...(response.data.connections || []));
289
+ }
290
+ const providerConns = allConnections.filter(conn =>
291
+ (conn.provider || conn.providerId) === providerId
292
+ );
293
+ return { items: providerConns };
294
+ },
295
+ formatItem: (conn) => {
296
+ const status = conn.testStatus === "active" ? "āœ“" : conn.testStatus === "error" ? "āœ—" : "?";
297
+ const name = conn.name || conn.email || conn.displayName || "Unnamed";
298
+ return `${name} (${status})`;
299
+ },
300
+ onSelect: async (conn) => {
301
+ await showConnectionActions(conn, providerId, breadcrumb);
302
+ },
303
+ createAction: {
304
+ label: "Add New Connection",
305
+ action: async () => {
306
+ await handleAddConnection(providerId, authType);
307
+ }
308
+ }
309
+ });
310
+ }
311
+
312
+ /**
313
+ * Show actions for a specific connection
314
+ * @param {Object} connection - Connection object
315
+ * @param {string} providerId - Provider ID
316
+ * @param {Array<string>} breadcrumb - Breadcrumb path
317
+ */
318
+ async function showConnectionActions(connection, providerId, breadcrumb = []) {
319
+ const name = connection.name || connection.email || connection.displayName || "Unnamed";
320
+ const status = connection.testStatus === "active" ? "āœ“ Active" :
321
+ connection.testStatus === "error" ? "āœ— Error" : "? Unknown";
322
+
323
+ await showMenuWithBack({
324
+ title: `šŸ”Œ ${name}`,
325
+ breadcrumb: [...breadcrumb, name],
326
+ headerContent: `Connection: ${name}\nStatus: ${status}`,
327
+ items: [
328
+ {
329
+ label: "Rename Connection",
330
+ action: async () => {
331
+ const newName = await prompt(`New name (current: ${name}): `);
332
+ if (newName && newName.trim()) {
333
+ showStatus("Renaming connection...", "info");
334
+ const result = await api.updateConnection(connection.id, { name: newName.trim() });
335
+ if (result.success) {
336
+ showStatus("Connection renamed!", "success");
337
+ connection.name = newName.trim();
338
+ } else {
339
+ showStatus(`Rename failed: ${result.error}`, "error");
340
+ }
341
+ await pause();
342
+ }
343
+ return true;
344
+ }
345
+ },
346
+ {
347
+ label: "Test Connection",
348
+ action: async () => {
349
+ showStatus("Testing connection...", "info");
350
+ const result = await api.testConnection(connection.id);
351
+ if (result.success) {
352
+ showStatus("Connection is working!", "success");
353
+ } else {
354
+ showStatus(`Test failed: ${result.error}`, "error");
355
+ }
356
+ await pause();
357
+ return true;
358
+ }
359
+ },
360
+ {
361
+ label: "Delete Connection",
362
+ action: async () => {
363
+ const confirmed = await confirm(`Delete connection "${name}"?`);
364
+ if (confirmed) {
365
+ const result = await api.deleteConnection(connection.id);
366
+ if (result.success) {
367
+ showStatus("Connection deleted!", "success");
368
+ } else {
369
+ showStatus(`Delete failed: ${result.error}`, "error");
370
+ }
371
+ await pause();
372
+ return false; // Exit menu after delete
373
+ }
374
+ return true;
375
+ }
376
+ }
377
+ ]
378
+ });
379
+ }
380
+
381
+ /**
382
+ * Handle adding new connection
383
+ * @param {string} providerId - Provider ID
384
+ * @param {string} authType - "oauth" or "apikey"
385
+ */
386
+ // Providers that use Device Code Flow (terminal-based polling)
387
+ const DEVICE_CODE_PROVIDERS = ["github", "qwen", "kiro"];
388
+
389
+ /**
390
+ * Handle adding new connection - auto-detect flow type
391
+ * @param {string} providerId - Provider ID
392
+ * @param {string} authType - "oauth" or "apikey"
393
+ */
394
+ async function handleAddConnection(providerId, authType) {
395
+ if (authType === "apikey") {
396
+ await handleAddApiKeyConnection(providerId);
397
+ } else {
398
+ // OAuth: auto-detect flow type based on provider
399
+ if (DEVICE_CODE_PROVIDERS.includes(providerId)) {
400
+ // Device Code Flow for GitHub, Qwen, Kiro
401
+ await handleAddDeviceCodeConnection(providerId);
402
+ } else {
403
+ // Authorization Code Flow for Claude, Codex, Gemini, etc.
404
+ await handleAddOAuthConnection(providerId);
405
+ }
406
+ }
407
+ }
408
+
409
+ /**
410
+ * Handle adding API Key connection
411
+ * @param {string} providerId - Provider ID
412
+ */
413
+ async function handleAddApiKeyConnection(providerId) {
414
+ clearScreen();
415
+ const provider = ALL_PROVIDERS[providerId];
416
+ console.log(`\nāž• Add ${provider.name} API Key Connection\n`);
417
+
418
+ const name = await prompt("Connection Name: ");
419
+ if (!name) {
420
+ showStatus("Cancelled", "warning");
421
+ await pause();
422
+ return;
423
+ }
424
+
425
+ const apiKey = await prompt("API Key: ");
426
+ if (!apiKey) {
427
+ showStatus("Cancelled", "warning");
428
+ await pause();
429
+ return;
430
+ }
431
+
432
+ showStatus("Creating connection...", "info");
433
+
434
+ const result = await api.createApiKeyProvider({
435
+ provider: providerId,
436
+ name,
437
+ apiKey
438
+ });
439
+
440
+ if (result.success) {
441
+ showStatus("āœ“ Connection created successfully!", "success");
442
+ } else {
443
+ showStatus(`āœ— Failed: ${result.error}`, "error");
444
+ }
445
+
446
+ await pause();
447
+ }
448
+
449
+ /**
450
+ * Handle adding OAuth Authorization Code connection
451
+ * User opens URL manually and pastes callback URL
452
+ * @param {string} providerId - Provider ID
453
+ */
454
+ async function handleAddOAuthConnection(providerId) {
455
+ clearScreen();
456
+ const provider = ALL_PROVIDERS[providerId];
457
+
458
+ // Step 1: Get auth URL
459
+ showStatus("Requesting authorization URL...", "info");
460
+ const authResult = await api.getOAuthAuthUrl(providerId);
461
+
462
+ if (!authResult.success) {
463
+ showStatus(`Failed: ${authResult.error}`, "error");
464
+ await pause();
465
+ return;
466
+ }
467
+
468
+ const authData = authResult.data || authResult;
469
+ const authUrl = authData.authUrl;
470
+ const codeVerifier = authData.codeVerifier;
471
+ const state = authData.state;
472
+ const redirectUri = authData.redirectUri;
473
+
474
+ if (!authUrl) {
475
+ showStatus("Failed: No auth URL received", "error");
476
+ await pause();
477
+ return;
478
+ }
479
+
480
+ // Step 2: Show URL and instructions
481
+ clearScreen();
482
+ showHeader("šŸ” OAuth Login", `Providers > ${provider.name} > Add Connection`);
483
+
484
+ console.log(` ${COLORS.bold}${COLORS.cyan}1.${COLORS.reset} Open this URL in your browser:`);
485
+ console.log(` ${COLORS.dim}${authUrl}${COLORS.reset}`);
486
+ if (copyToClipboard(authUrl)) {
487
+ console.log(` \x1b[32māœ“ Link copied to clipboard!\x1b[0m`);
488
+ }
489
+ console.log();
490
+ console.log(` ${COLORS.bold}${COLORS.cyan}2.${COLORS.reset} Complete authorization in browser`);
491
+ console.log();
492
+ console.log(` ${COLORS.bold}${COLORS.cyan}3.${COLORS.reset} Copy the callback URL from address bar`);
493
+ console.log(` ${COLORS.dim}(looks like: http://localhost:20128/callback?code=...)${COLORS.reset}`);
494
+ console.log();
495
+
496
+ const callbackUrl = await prompt(" Paste callback URL: ");
497
+ if (!callbackUrl) {
498
+ showStatus("Cancelled", "warning");
499
+ await pause();
500
+ return;
501
+ }
502
+
503
+ // Step 3: Parse callback URL and extract code
504
+ let code, urlState, error;
505
+ try {
506
+ const url = new URL(callbackUrl.trim());
507
+ code = url.searchParams.get("code");
508
+ urlState = url.searchParams.get("state");
509
+ error = url.searchParams.get("error");
510
+
511
+ if (error) {
512
+ const errorDesc = url.searchParams.get("error_description") || error;
513
+ showStatus(`Authorization failed: ${errorDesc}`, "error");
514
+ await pause();
515
+ return;
516
+ }
517
+
518
+ if (!code) {
519
+ showStatus("No authorization code found in URL", "error");
520
+ await pause();
521
+ return;
522
+ }
523
+ } catch (err) {
524
+ showStatus("Invalid URL format", "error");
525
+ await pause();
526
+ return;
527
+ }
528
+
529
+ // Step 4: Exchange code for tokens
530
+ console.log();
531
+ showStatus("Exchanging code for tokens...", "info");
532
+ const exchangeResult = await api.exchangeOAuthCode(providerId, {
533
+ code,
534
+ redirectUri,
535
+ codeVerifier,
536
+ state: urlState || state
537
+ });
538
+
539
+ if (exchangeResult.success) {
540
+ showStatus("Connection created successfully!", "success");
541
+ } else {
542
+ showStatus(`Failed: ${exchangeResult.error}`, "error");
543
+ }
544
+
545
+ await pause();
546
+ }
547
+
548
+ /**
549
+ * Handle adding OAuth Device Code connection
550
+ * @param {string} providerId - Provider ID
551
+ */
552
+ async function handleAddDeviceCodeConnection(providerId) {
553
+ clearScreen();
554
+ const provider = ALL_PROVIDERS[providerId];
555
+
556
+ // Step 1: Request device code
557
+ showStatus("Requesting device code...", "info");
558
+ const deviceResult = await api.getOAuthDeviceCode(providerId);
559
+
560
+ if (!deviceResult.success) {
561
+ showStatus(`Failed: ${deviceResult.error}`, "error");
562
+ await pause();
563
+ return;
564
+ }
565
+
566
+ const deviceData = deviceResult.data || deviceResult;
567
+ const device_code = deviceData.device_code;
568
+ const user_code = deviceData.user_code;
569
+ const verification_uri = deviceData.verification_uri;
570
+ const verification_uri_complete = deviceData.verification_uri_complete;
571
+ const codeVerifier = deviceData.codeVerifier;
572
+ const extraData = deviceData.extraData || deviceData;
573
+
574
+ if (!device_code) {
575
+ showStatus("Failed: No device code received", "error");
576
+ await pause();
577
+ return;
578
+ }
579
+
580
+ // Step 2: Show instructions
581
+ clearScreen();
582
+ const deviceUrl = verification_uri_complete || verification_uri;
583
+ showHeader("šŸ“± Device Login", `Providers > ${provider.name} > Add Connection`);
584
+
585
+ console.log(` ${COLORS.bold}${COLORS.cyan}1.${COLORS.reset} Open: ${COLORS.dim}${deviceUrl}${COLORS.reset}`);
586
+ if (copyToClipboard(deviceUrl)) {
587
+ console.log(` \x1b[32māœ“ Link copied to clipboard!\x1b[0m`);
588
+ }
589
+ console.log();
590
+ if (!verification_uri_complete && user_code) {
591
+ console.log(` ${COLORS.bold}${COLORS.cyan}2.${COLORS.reset} Enter code: ${COLORS.bold}${user_code}${COLORS.reset}`);
592
+ console.log();
593
+ }
594
+ console.log(` ${COLORS.dim}Waiting for authorization...${COLORS.reset}`);
595
+ console.log();
596
+
597
+ // Step 3: Poll for token
598
+ const maxAttempts = 60; // 5 minutes (5s interval)
599
+ for (let i = 0; i < maxAttempts; i++) {
600
+ await new Promise(resolve => setTimeout(resolve, 5000));
601
+
602
+ const pollResult = await api.pollOAuthToken(providerId, {
603
+ deviceCode: device_code,
604
+ codeVerifier,
605
+ extraData
606
+ });
607
+
608
+ if (pollResult.success) {
609
+ showStatus("\nConnection created successfully!", "success");
610
+ await pause();
611
+ return;
612
+ }
613
+
614
+ // Check if still pending (pending flag is at root level, not in data)
615
+ const isPending = pollResult.pending || pollResult.error === "authorization_pending" || pollResult.error === "slow_down";
616
+ if (!isPending) {
617
+ showStatus(`\nFailed: ${pollResult.error || "Unknown error"}`, "error");
618
+ await pause();
619
+ return;
620
+ }
621
+
622
+ process.stdout.write(".");
623
+ }
624
+
625
+ showStatus("\nTimeout waiting for authorization", "error");
626
+ await pause();
627
+ }
628
+
629
+ // ============================================================================
630
+ // CUSTOM PROVIDERS (provider nodes)
631
+ // ============================================================================
632
+
633
+ const CUSTOM_NODE_TYPES = ["openai-compatible", "anthropic-compatible"];
634
+ const OPENAI_API_TYPES = ["chat", "responses"];
635
+
636
+ /**
637
+ * Show custom providers section in main providers menu
638
+ * @param {Array} nodes - List of provider nodes
639
+ * @param {Array} connections - All connections
640
+ * @param {Array<string>} breadcrumb
641
+ */
642
+ async function showCustomProvidersMenu(breadcrumb = []) {
643
+ const { showListMenu } = require("../utils/menuHelper");
644
+
645
+ await showListMenu({
646
+ title: "šŸ”§ Custom Providers",
647
+ breadcrumb,
648
+ backLabel: "← Back to Providers",
649
+ fetchItems: async () => {
650
+ const res = await api.getProviderNodes();
651
+ if (!res.success) return { items: [] };
652
+ return { items: res.data.nodes || res.data || [] };
653
+ },
654
+ formatItem: (node) => `[${node.prefix}] ${node.name} (${node.type})`,
655
+ onSelect: async (node) => {
656
+ await showCustomNodeDetail(node, [...breadcrumb, node.name]);
657
+ },
658
+ createAction: {
659
+ label: "āž• Add Custom Provider",
660
+ action: async () => {
661
+ await handleAddCustomNode();
662
+ }
663
+ }
664
+ });
665
+ }
666
+
667
+ /**
668
+ * Show detail menu for a custom provider node
669
+ */
670
+ async function showCustomNodeDetail(node, breadcrumb = []) {
671
+ await showMenuWithBack({
672
+ title: `šŸ”§ ${node.name}`,
673
+ breadcrumb,
674
+ headerContent: [
675
+ `Type: ${node.type}`,
676
+ `Prefix: ${COLORS.cyan}${node.prefix}${COLORS.reset}`,
677
+ `Base URL: ${COLORS.dim}${node.baseUrl}${COLORS.reset}`,
678
+ ].join("\n"),
679
+ items: [
680
+ {
681
+ label: "Connections",
682
+ action: async () => {
683
+ await showCustomNodeConnections(node, breadcrumb);
684
+ return true;
685
+ }
686
+ },
687
+ {
688
+ label: "Edit Node",
689
+ action: async () => {
690
+ await handleEditCustomNode(node);
691
+ return true;
692
+ }
693
+ },
694
+ {
695
+ label: "Delete Node",
696
+ action: async () => {
697
+ const confirmed = await confirm(`Delete "${node.name}" and all its connections?`);
698
+ if (confirmed) {
699
+ const res = await api.deleteProviderNode(node.id);
700
+ if (res.success) {
701
+ showStatus("Node deleted!", "success");
702
+ } else {
703
+ showStatus(`Delete failed: ${res.error}`, "error");
704
+ }
705
+ await pause();
706
+ return false;
707
+ }
708
+ return true;
709
+ }
710
+ }
711
+ ]
712
+ });
713
+ }
714
+
715
+ /**
716
+ * Show connections for a custom provider node
717
+ */
718
+ async function showCustomNodeConnections(node, breadcrumb = []) {
719
+ const { showListMenu } = require("../utils/menuHelper");
720
+
721
+ await showListMenu({
722
+ title: `šŸ”Œ ${node.name} – Connections`,
723
+ breadcrumb,
724
+ backLabel: "← Back",
725
+ fetchItems: async () => {
726
+ const res = await api.getProviders();
727
+ if (!res.success) return { items: [] };
728
+ const all = res.data.connections || [];
729
+ const items = all.filter(c => c.provider === node.id);
730
+ return { items };
731
+ },
732
+ formatItem: (conn) => {
733
+ const status = conn.testStatus === "active" ? "āœ“" : conn.testStatus === "error" ? "āœ—" : "?";
734
+ return `${conn.name || "Unnamed"} (${status})`;
735
+ },
736
+ onSelect: async (conn) => {
737
+ await showConnectionActions(conn, node.id, breadcrumb);
738
+ },
739
+ createAction: {
740
+ label: "Add API Key Connection",
741
+ action: async () => {
742
+ await handleAddCustomNodeConnection(node);
743
+ }
744
+ }
745
+ });
746
+ }
747
+
748
+ /**
749
+ * Add API key connection to a custom provider node
750
+ */
751
+ async function handleAddCustomNodeConnection(node) {
752
+ clearScreen();
753
+ console.log(`\nāž• Add Connection to ${node.name}\n`);
754
+
755
+ const name = await prompt("Connection Name: ");
756
+ if (!name) { showStatus("Cancelled", "warning"); await pause(); return; }
757
+
758
+ const apiKey = await prompt("API Key: ");
759
+ if (!apiKey) { showStatus("Cancelled", "warning"); await pause(); return; }
760
+
761
+ showStatus("Creating connection...", "info");
762
+ const res = await api.createApiKeyProvider({ provider: node.id, name, apiKey });
763
+
764
+ showStatus(res.success ? "āœ“ Connection created!" : `āœ— Failed: ${res.error}`, res.success ? "success" : "error");
765
+ await pause();
766
+ }
767
+
768
+ /**
769
+ * Handle adding a new custom provider node
770
+ */
771
+ async function handleAddCustomNode() {
772
+ clearScreen();
773
+ console.log("\nāž• Add Custom Provider\n");
774
+
775
+ // Step 1: Select type
776
+ const typeChoices = CUSTOM_NODE_TYPES.map((t, i) => ` ${i + 1}. ${t}`).join("\n");
777
+ console.log(`Select type:\n${typeChoices}\n`);
778
+ const typeInput = await prompt("Type (1/2): ");
779
+ const typeIdx = parseInt(typeInput) - 1;
780
+ if (isNaN(typeIdx) || !CUSTOM_NODE_TYPES[typeIdx]) {
781
+ showStatus("Cancelled", "warning"); await pause(); return;
782
+ }
783
+ const type = CUSTOM_NODE_TYPES[typeIdx];
784
+
785
+ // Step 2: Inputs
786
+ const name = await prompt("Name: ");
787
+ if (!name) { showStatus("Cancelled", "warning"); await pause(); return; }
788
+
789
+ const prefix = await prompt("Prefix (used in model IDs, e.g. myapi): ");
790
+ if (!prefix) { showStatus("Cancelled", "warning"); await pause(); return; }
791
+
792
+ const baseUrl = await prompt("Base URL (e.g. https://api.example.com/v1): ");
793
+ if (!baseUrl) { showStatus("Cancelled", "warning"); await pause(); return; }
794
+
795
+ // Step 3: API type (OpenAI only)
796
+ let apiType;
797
+ if (type === "openai-compatible") {
798
+ const apiTypeChoices = OPENAI_API_TYPES.map((t, i) => ` ${i + 1}. ${t}`).join("\n");
799
+ console.log(`\nAPI Type:\n${apiTypeChoices}\n`);
800
+ const apiTypeInput = await prompt("API Type (1/2, default 1): ");
801
+ const apiTypeIdx = parseInt(apiTypeInput) - 1;
802
+ apiType = OPENAI_API_TYPES[apiTypeIdx] || "chat";
803
+ }
804
+
805
+ showStatus("Creating provider node...", "info");
806
+ const body = { name, prefix, baseUrl, type, ...(apiType && { apiType }) };
807
+ const res = await api.createProviderNode(body);
808
+
809
+ showStatus(res.success ? "āœ“ Provider created!" : `āœ— Failed: ${res.error}`, res.success ? "success" : "error");
810
+ await pause();
811
+ }
812
+
813
+ /**
814
+ * Handle editing a custom provider node
815
+ */
816
+ async function handleEditCustomNode(node) {
817
+ clearScreen();
818
+ console.log(`\nāœļø Edit ${node.name}\n`);
819
+ console.log(`${COLORS.dim}Leave blank to keep current value${COLORS.reset}\n`);
820
+
821
+ const name = await prompt(`Name (${node.name}): `);
822
+ const baseUrl = await prompt(`Base URL (${node.baseUrl}): `);
823
+ const prefix = await prompt(`Prefix (${node.prefix}): `);
824
+
825
+ const updates = {};
826
+ if (name && name.trim()) updates.name = name.trim();
827
+ if (baseUrl && baseUrl.trim()) updates.baseUrl = baseUrl.trim();
828
+ if (prefix && prefix.trim()) updates.prefix = prefix.trim();
829
+
830
+ if (!Object.keys(updates).length) {
831
+ showStatus("No changes", "warning"); await pause(); return;
832
+ }
833
+
834
+ showStatus("Updating...", "info");
835
+ const res = await api.updateProviderNode(node.id, updates);
836
+ if (res.success) {
837
+ Object.assign(node, updates);
838
+ showStatus("āœ“ Updated!", "success");
839
+ } else {
840
+ showStatus(`āœ— Failed: ${res.error}`, "error");
841
+ }
842
+ await pause();
843
+ }
844
+
845
+ module.exports = { showProvidersMenu };