@rsalmn/extremerouter 0.8.2 → 0.8.3

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 (855) hide show
  1. package/README.md +89 -89
  2. package/app/.next-cli-build/BUILD_ID +1 -1
  3. package/app/.next-cli-build/app-path-routes-manifest.json +9 -9
  4. package/app/.next-cli-build/build-manifest.json +4 -4
  5. package/app/.next-cli-build/prerender-manifest.json +3 -3
  6. package/app/.next-cli-build/react-loadable-manifest.json +1 -13
  7. package/app/.next-cli-build/required-server-files.json +23 -23
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page.js +2 -2
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +3 -3
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page.js +2 -2
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/page.js +2 -2
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js +2 -2
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/page.js +2 -2
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/page.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/page_client-reference-manifest.js +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +2 -2
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  87. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/_global-error/page.js +3 -3
  90. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  96. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  97. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  98. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  99. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  100. package/app/.next-cli-build/server/app/_not-found/page.js +2 -2
  101. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  103. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  104. package/app/.next-cli-build/server/app/_not-found.rsc +7 -6
  105. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +7 -6
  106. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  107. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +6 -6
  108. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  109. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  110. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +3 -2
  111. package/app/.next-cli-build/server/app/api/alerts/test/route.js +2 -2
  112. package/app/.next-cli-build/server/app/api/alerts/test/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/alerts/test/route_client-reference-manifest.js +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  115. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  117. package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  118. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  120. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  121. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route_client-reference-manifest.js +1 -1
  123. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  124. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/auth/oidc/start/route_client-reference-manifest.js +1 -1
  126. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  127. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/auth/oidc/test/route_client-reference-manifest.js +1 -1
  129. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js +1 -1
  130. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/auth/reset-password/route_client-reference-manifest.js +1 -1
  132. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  133. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  135. package/app/.next-cli-build/server/app/api/breaker/route.js +1 -1
  136. package/app/.next-cli-build/server/app/api/breaker/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/breaker/route_client-reference-manifest.js +1 -1
  138. package/app/.next-cli-build/server/app/api/cache/route.js +1 -1
  139. package/app/.next-cli-build/server/app/api/cache/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cache/route_client-reference-manifest.js +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  142. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route_client-reference-manifest.js +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  145. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  148. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  151. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  153. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  154. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  156. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  159. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  160. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
  162. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  163. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route_client-reference-manifest.js +1 -1
  165. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  166. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route_client-reference-manifest.js +1 -1
  168. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  169. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route_client-reference-manifest.js +1 -1
  171. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  172. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route_client-reference-manifest.js +1 -1
  174. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  177. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  178. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route_client-reference-manifest.js +1 -1
  180. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  181. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route_client-reference-manifest.js +1 -1
  183. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  184. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  186. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  187. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  189. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
  192. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  195. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  196. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/combos/route_client-reference-manifest.js +1 -1
  198. package/app/.next-cli-build/server/app/api/combos/validate-roles/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/combos/validate-roles/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/combos/validate-roles/route_client-reference-manifest.js +1 -1
  201. package/app/.next-cli-build/server/app/api/dashboard/stream/route.js +2 -2
  202. package/app/.next-cli-build/server/app/api/dashboard/stream/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/dashboard/stream/route_client-reference-manifest.js +1 -1
  204. package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/headroom/start/route_client-reference-manifest.js +1 -1
  207. package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
  208. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/headroom/status/route_client-reference-manifest.js +1 -1
  210. package/app/.next-cli-build/server/app/api/headroom/stop/route.js +2 -2
  211. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/headroom/stop/route_client-reference-manifest.js +1 -1
  213. package/app/.next-cli-build/server/app/api/health/providers/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/health/providers/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/health/providers/route_client-reference-manifest.js +1 -1
  216. package/app/.next-cli-build/server/app/api/health/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/health/route_client-reference-manifest.js +1 -1
  219. package/app/.next-cli-build/server/app/api/health/stream/route.js +2 -2
  220. package/app/.next-cli-build/server/app/api/health/stream/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/health/stream/route_client-reference-manifest.js +1 -1
  222. package/app/.next-cli-build/server/app/api/init/route.js +1 -1
  223. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/init/route_client-reference-manifest.js +1 -1
  225. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  226. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  228. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/keys/route_client-reference-manifest.js +1 -1
  231. package/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  232. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/locale/route_client-reference-manifest.js +1 -1
  234. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
  235. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route_client-reference-manifest.js +1 -1
  237. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  238. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route_client-reference-manifest.js +1 -1
  240. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  241. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route_client-reference-manifest.js +1 -1
  243. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  244. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route_client-reference-manifest.js +1 -1
  246. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  247. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route_client-reference-manifest.js +1 -1
  249. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  250. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +1 -1
  252. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  253. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route_client-reference-manifest.js +1 -1
  255. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  258. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  259. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  261. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  262. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/models/custom/route_client-reference-manifest.js +1 -1
  264. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/models/disabled/route_client-reference-manifest.js +1 -1
  267. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  268. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/models/route_client-reference-manifest.js +1 -1
  270. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  271. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/models/test/route_client-reference-manifest.js +1 -1
  273. package/app/.next-cli-build/server/app/api/oauth/1min/import/route.js +1 -1
  274. package/app/.next-cli-build/server/app/api/oauth/1min/import/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/oauth/1min/import/route_client-reference-manifest.js +1 -1
  276. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  277. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  279. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  280. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route_client-reference-manifest.js +1 -1
  282. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  283. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -1
  285. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  286. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  288. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  291. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  292. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route_client-reference-manifest.js +1 -1
  294. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -1
  297. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
  298. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route_client-reference-manifest.js +1 -1
  300. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  301. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  302. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  303. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  304. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  306. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -1
  307. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route_client-reference-manifest.js +1 -1
  309. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  310. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  311. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  312. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  315. package/app/.next-cli-build/server/app/api/oauth/qwen/import/route.js +1 -1
  316. package/app/.next-cli-build/server/app/api/oauth/qwen/import/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/api/oauth/qwen/import/route_client-reference-manifest.js +1 -1
  318. package/app/.next-cli-build/server/app/api/oauth/wp-studio/import/route.js +1 -1
  319. package/app/.next-cli-build/server/app/api/oauth/wp-studio/import/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/oauth/wp-studio/import/route_client-reference-manifest.js +1 -1
  321. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js +38 -2
  322. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route_client-reference-manifest.js +1 -1
  324. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js +1 -1
  325. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js.nft.json +1 -1
  326. package/app/.next-cli-build/server/app/api/oauth/zed/import/route_client-reference-manifest.js +1 -1
  327. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  328. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  329. package/app/.next-cli-build/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  330. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  333. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  334. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  335. package/app/.next-cli-build/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  336. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  337. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  339. package/app/.next-cli-build/server/app/api/providers/[id]/agnes-profile/route.js +1 -1
  340. package/app/.next-cli-build/server/app/api/providers/[id]/agnes-profile/route.js.nft.json +1 -1
  341. package/app/.next-cli-build/server/app/api/providers/[id]/agnes-profile/route_client-reference-manifest.js +1 -1
  342. package/app/.next-cli-build/server/app/api/providers/[id]/freebuff-profile/route.js +1 -1
  343. package/app/.next-cli-build/server/app/api/providers/[id]/freebuff-profile/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/providers/[id]/freebuff-profile/route_client-reference-manifest.js +1 -1
  345. package/app/.next-cli-build/server/app/api/providers/[id]/health-timeline/route.js +1 -1
  346. package/app/.next-cli-build/server/app/api/providers/[id]/health-timeline/route.js.nft.json +1 -1
  347. package/app/.next-cli-build/server/app/api/providers/[id]/health-timeline/route_client-reference-manifest.js +1 -1
  348. package/app/.next-cli-build/server/app/api/providers/[id]/inxora-profile/route.js +1 -1
  349. package/app/.next-cli-build/server/app/api/providers/[id]/inxora-profile/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/providers/[id]/inxora-profile/route_client-reference-manifest.js +1 -1
  351. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  352. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  353. package/app/.next-cli-build/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  354. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-api-profile/route.js +1 -1
  355. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-api-profile/route.js.nft.json +1 -1
  356. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-api-profile/route_client-reference-manifest.js +1 -1
  357. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-profile/route.js +1 -1
  358. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-profile/route.js.nft.json +1 -1
  359. package/app/.next-cli-build/server/app/api/providers/[id]/onemin-profile/route_client-reference-manifest.js +1 -1
  360. package/app/.next-cli-build/server/app/api/providers/[id]/qwencloud-profile/route.js +1 -1
  361. package/app/.next-cli-build/server/app/api/providers/[id]/qwencloud-profile/route.js.nft.json +1 -1
  362. package/app/.next-cli-build/server/app/api/providers/[id]/qwencloud-profile/route_client-reference-manifest.js +1 -1
  363. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  364. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  365. package/app/.next-cli-build/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  366. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  367. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  368. package/app/.next-cli-build/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  369. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  370. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  371. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  372. package/app/.next-cli-build/server/app/api/providers/[id]/v0-profile/route.js +1 -1
  373. package/app/.next-cli-build/server/app/api/providers/[id]/v0-profile/route.js.nft.json +1 -1
  374. package/app/.next-cli-build/server/app/api/providers/[id]/v0-profile/route_client-reference-manifest.js +1 -1
  375. package/app/.next-cli-build/server/app/api/providers/[id]/vault-pool/route.js +1 -1
  376. package/app/.next-cli-build/server/app/api/providers/[id]/vault-pool/route.js.nft.json +1 -1
  377. package/app/.next-cli-build/server/app/api/providers/[id]/vault-pool/route_client-reference-manifest.js +1 -1
  378. package/app/.next-cli-build/server/app/api/providers/[id]/zenmux-plans/route.js +1 -1
  379. package/app/.next-cli-build/server/app/api/providers/[id]/zenmux-plans/route.js.nft.json +1 -1
  380. package/app/.next-cli-build/server/app/api/providers/[id]/zenmux-plans/route_client-reference-manifest.js +1 -1
  381. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  382. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  383. package/app/.next-cli-build/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  384. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  385. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  386. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route_client-reference-manifest.js +1 -1
  387. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  388. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  389. package/app/.next-cli-build/server/app/api/providers/route_client-reference-manifest.js +1 -1
  390. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  391. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  392. package/app/.next-cli-build/server/app/api/providers/suggested-models/route_client-reference-manifest.js +1 -1
  393. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  394. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  395. package/app/.next-cli-build/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  396. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  397. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  398. package/app/.next-cli-build/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  399. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  400. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  401. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -1
  402. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  403. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  404. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -1
  405. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  406. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  407. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -1
  408. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  409. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  410. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -1
  411. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  412. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  413. package/app/.next-cli-build/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -1
  414. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  415. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  416. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route_client-reference-manifest.js +1 -1
  417. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js +2 -2
  418. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  419. package/app/.next-cli-build/server/app/api/pxpipe/install/route_client-reference-manifest.js +1 -1
  420. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +2 -2
  421. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  422. package/app/.next-cli-build/server/app/api/pxpipe/status/route_client-reference-manifest.js +1 -1
  423. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  424. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  425. package/app/.next-cli-build/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  426. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  427. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  428. package/app/.next-cli-build/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
  429. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  430. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  431. package/app/.next-cli-build/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  432. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  433. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  434. package/app/.next-cli-build/server/app/api/settings/route_client-reference-manifest.js +1 -1
  435. package/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  436. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  437. package/app/.next-cli-build/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  438. package/app/.next-cli-build/server/app/api/swarm/active/route.js +1 -1
  439. package/app/.next-cli-build/server/app/api/swarm/active/route.js.nft.json +1 -1
  440. package/app/.next-cli-build/server/app/api/swarm/active/route_client-reference-manifest.js +1 -1
  441. package/app/.next-cli-build/server/app/api/swarm/stream/route.js +2 -2
  442. package/app/.next-cli-build/server/app/api/swarm/stream/route.js.nft.json +1 -1
  443. package/app/.next-cli-build/server/app/api/swarm/stream/route_client-reference-manifest.js +1 -1
  444. package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  445. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  446. package/app/.next-cli-build/server/app/api/tags/route_client-reference-manifest.js +1 -1
  447. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  448. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  449. package/app/.next-cli-build/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -1
  450. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  451. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  452. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
  453. package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  454. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  455. package/app/.next-cli-build/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  456. package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  457. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  458. package/app/.next-cli-build/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  459. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  460. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  461. package/app/.next-cli-build/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  462. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  463. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  464. package/app/.next-cli-build/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  465. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  466. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  467. package/app/.next-cli-build/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  468. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  469. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  470. package/app/.next-cli-build/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  471. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  472. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  473. package/app/.next-cli-build/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  474. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  475. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  476. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route_client-reference-manifest.js +1 -1
  477. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  478. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  479. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route_client-reference-manifest.js +1 -1
  480. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  481. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  482. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route_client-reference-manifest.js +1 -1
  483. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  484. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  485. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route_client-reference-manifest.js +1 -1
  486. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  487. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  488. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route_client-reference-manifest.js +1 -1
  489. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  490. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  491. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  492. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  493. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  494. package/app/.next-cli-build/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  495. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  496. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  497. package/app/.next-cli-build/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  498. package/app/.next-cli-build/server/app/api/usage/leaderboard/route.js +1 -1
  499. package/app/.next-cli-build/server/app/api/usage/leaderboard/route.js.nft.json +1 -1
  500. package/app/.next-cli-build/server/app/api/usage/leaderboard/route_client-reference-manifest.js +1 -1
  501. package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
  502. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  503. package/app/.next-cli-build/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  504. package/app/.next-cli-build/server/app/api/usage/meta/route.js +1 -1
  505. package/app/.next-cli-build/server/app/api/usage/meta/route.js.nft.json +1 -1
  506. package/app/.next-cli-build/server/app/api/usage/meta/route_client-reference-manifest.js +1 -1
  507. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  508. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  509. package/app/.next-cli-build/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  510. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  511. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  512. package/app/.next-cli-build/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  513. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  514. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  515. package/app/.next-cli-build/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  516. package/app/.next-cli-build/server/app/api/usage/retry-stats/route.js +1 -1
  517. package/app/.next-cli-build/server/app/api/usage/retry-stats/route.js.nft.json +1 -1
  518. package/app/.next-cli-build/server/app/api/usage/retry-stats/route_client-reference-manifest.js +1 -1
  519. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  520. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  521. package/app/.next-cli-build/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
  522. package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  523. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  524. package/app/.next-cli-build/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  525. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  526. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  527. package/app/.next-cli-build/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  528. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  529. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  530. package/app/.next-cli-build/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  531. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  532. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  533. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  534. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  535. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  536. package/app/.next-cli-build/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -1
  537. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  538. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  539. package/app/.next-cli-build/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  540. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  541. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  542. package/app/.next-cli-build/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  543. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  544. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  545. package/app/.next-cli-build/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  546. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  547. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  548. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  549. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  550. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  551. package/app/.next-cli-build/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  552. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  553. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  554. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route_client-reference-manifest.js +1 -1
  555. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  556. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  557. package/app/.next-cli-build/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -1
  558. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  559. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  560. package/app/.next-cli-build/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  561. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  562. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  563. package/app/.next-cli-build/server/app/api/v1/responses/compact/route_client-reference-manifest.js +1 -1
  564. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  565. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  566. package/app/.next-cli-build/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  567. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  568. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  569. package/app/.next-cli-build/server/app/api/v1/route_client-reference-manifest.js +1 -1
  570. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  571. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  572. package/app/.next-cli-build/server/app/api/v1/search/route_client-reference-manifest.js +1 -1
  573. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  574. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  575. package/app/.next-cli-build/server/app/api/v1/web/fetch/route_client-reference-manifest.js +1 -1
  576. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  577. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  578. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  579. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  580. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  581. package/app/.next-cli-build/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  582. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  583. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  584. package/app/.next-cli-build/server/app/api/version/route_client-reference-manifest.js +1 -1
  585. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  586. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  587. package/app/.next-cli-build/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -1
  588. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  589. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  590. package/app/.next-cli-build/server/app/api/version/update/route_client-reference-manifest.js +1 -1
  591. package/app/.next-cli-build/server/app/callback/page.js +2 -2
  592. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  593. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  594. package/app/.next-cli-build/server/app/callback.html +1 -1
  595. package/app/.next-cli-build/server/app/callback.rsc +8 -7
  596. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +8 -7
  597. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  598. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +6 -6
  599. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +3 -2
  600. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +2 -2
  601. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  602. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  603. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  604. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  605. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  606. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +8 -7
  607. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +8 -7
  608. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  609. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +6 -6
  610. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +3 -2
  611. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +2 -2
  612. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  613. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  614. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  615. package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
  616. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  617. package/app/.next-cli-build/server/app/index.html +1 -1
  618. package/app/.next-cli-build/server/app/index.rsc +7 -6
  619. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  620. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +7 -6
  621. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  622. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +6 -6
  623. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +3 -2
  624. package/app/.next-cli-build/server/app/landing/page.js +2 -2
  625. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  626. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  627. package/app/.next-cli-build/server/app/landing.html +1 -1
  628. package/app/.next-cli-build/server/app/landing.rsc +8 -7
  629. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +8 -7
  630. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  631. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +6 -6
  632. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +3 -2
  633. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  634. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  635. package/app/.next-cli-build/server/app/login/page.js +2 -2
  636. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  637. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  638. package/app/.next-cli-build/server/app/login.html +1 -1
  639. package/app/.next-cli-build/server/app/login.rsc +8 -7
  640. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +8 -7
  641. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  642. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +6 -6
  643. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +3 -2
  644. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  645. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  646. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
  647. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  648. package/app/.next-cli-build/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  649. package/app/.next-cli-build/server/app/page.js +2 -2
  650. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  651. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  652. package/app/.next-cli-build/server/app-paths-manifest.json +9 -9
  653. package/app/.next-cli-build/server/chunks/1212.js +1 -0
  654. package/app/.next-cli-build/server/chunks/1241.js +1 -1
  655. package/app/.next-cli-build/server/chunks/1350.js +1 -1
  656. package/app/.next-cli-build/server/chunks/1719.js +1 -1
  657. package/app/.next-cli-build/server/chunks/212.js +1 -1
  658. package/app/.next-cli-build/server/chunks/2231.js +1 -1
  659. package/app/.next-cli-build/server/chunks/319.js +3 -3
  660. package/app/.next-cli-build/server/chunks/{2926.js → 3437.js} +9 -9
  661. package/app/.next-cli-build/server/chunks/3735.js +1 -1
  662. package/app/.next-cli-build/server/chunks/4046.js +1 -0
  663. package/app/.next-cli-build/server/chunks/5330.js +66 -66
  664. package/app/.next-cli-build/server/chunks/5612.js +1 -1
  665. package/app/.next-cli-build/server/chunks/5615.js +1 -1
  666. package/app/.next-cli-build/server/chunks/5852.js +1 -1
  667. package/app/.next-cli-build/server/chunks/5961.js +1 -1
  668. package/app/.next-cli-build/server/chunks/6070.js +1 -1
  669. package/app/.next-cli-build/server/chunks/{7152.js → 6482.js} +2 -2
  670. package/app/.next-cli-build/server/chunks/6686.js +1 -1
  671. package/app/.next-cli-build/server/chunks/6777.js +1 -1
  672. package/app/.next-cli-build/server/chunks/7187.js +1 -1
  673. package/app/.next-cli-build/server/chunks/7218.js +1 -0
  674. package/app/.next-cli-build/server/chunks/7410.js +1 -0
  675. package/app/.next-cli-build/server/chunks/7566.js +3 -0
  676. package/app/.next-cli-build/server/chunks/7774.js +18 -18
  677. package/app/.next-cli-build/server/chunks/7872.js +1 -1
  678. package/app/.next-cli-build/server/chunks/7965.js +1 -1
  679. package/app/.next-cli-build/server/chunks/8238.js +1 -1
  680. package/app/.next-cli-build/server/chunks/8271.js +1 -1
  681. package/app/.next-cli-build/server/chunks/8520.js +1 -1
  682. package/app/.next-cli-build/server/chunks/8802.js +2 -0
  683. package/app/.next-cli-build/server/chunks/8895.js +6 -6
  684. package/app/.next-cli-build/server/chunks/{4502.js → 8955.js} +2 -2
  685. package/app/.next-cli-build/server/chunks/9422.js +1 -1
  686. package/app/.next-cli-build/server/chunks/9609.js +1 -1
  687. package/app/.next-cli-build/server/chunks/9703.js +1 -1
  688. package/app/.next-cli-build/server/chunks/9903.js +1 -1
  689. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  690. package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
  691. package/app/.next-cli-build/server/middleware.js +5 -5
  692. package/app/.next-cli-build/server/next-font-manifest.js +1 -1
  693. package/app/.next-cli-build/server/next-font-manifest.json +1 -1
  694. package/app/.next-cli-build/server/pages/404.html +1 -1
  695. package/app/.next-cli-build/server/pages/500.html +1 -1
  696. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  697. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  698. package/app/.next-cli-build/static/chunks/{1321-aa0d45362a7ebc08.js → 1321-5792bb21361dcd65.js} +1 -1
  699. package/app/.next-cli-build/static/chunks/705-cfe5cd65ea2dc6f1.js +1 -0
  700. package/app/.next-cli-build/static/chunks/8105-37d0f6450b27ac6b.js +1 -0
  701. package/app/.next-cli-build/static/chunks/{8720-bbafc2ad7d186ebd.js → 8982-6d1803817450bcd4.js} +2 -2
  702. package/app/.next-cli-build/static/chunks/981-777b2911f938c030.js +3 -0
  703. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/alerts/{page-920869c698a8b3cf.js → page-c263cd784e69e6f1.js} +1 -1
  704. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-75247ad22e97f7cc.js → page-ecd3a85a40e51c66.js} +1 -1
  705. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-3c3074cf3f61df46.js +1 -0
  706. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-8b043b8296199edb.js → page-f7cdc992cb310077.js} +1 -1
  707. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-648e105b4f37fef0.js +3 -0
  708. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/page-959b3ee3c662de33.js +1 -0
  709. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/page-5689c88f2746c37a.js +1 -0
  710. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/health/{page-ec1dc4e44702257d.js → page-133cf1aa2ce53c87.js} +1 -1
  711. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-b635b8b051acb5a5.js → page-3828106aa4f490c1.js} +2 -2
  712. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-d9958dfec1d2e28e.js → page-e086fed7677d4852.js} +1 -1
  713. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-a36b3b632d16f4cb.js → page-f36e5ac11783fd1e.js} +2 -2
  714. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/page-e794909abbc7a09a.js +1 -0
  715. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-1d972fd3baee7474.js +1 -0
  716. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/overview/page-2dae733c8e1582bf.js +1 -0
  717. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/page-7325c65533e4cf60.js +1 -0
  718. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/playground/{page-dc8e49b1fe778d9c.js → page-e7ba910803086460.js} +1 -1
  719. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-0f877a8a2550a1ea.js +1 -0
  720. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-2e82495d63f499e9.js → page-201ce34cf7a0a9ed.js} +1 -1
  721. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-8965749fb7d0fac3.js → page-bcf9d97ab4dc20d9.js} +1 -1
  722. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-5b11b61863963cad.js +1 -0
  723. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-843c810c0818ce1b.js → page-58d8d0fa5523ff95.js} +1 -1
  724. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/{page-9a44fa1600f3ff42.js → page-0be4cac4f06ef3e2.js} +1 -1
  725. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/{page-97c920b552343488.js → page-a8b151d5ae9004ea.js} +1 -1
  726. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/swarm/page-594a59006196a03a.js +1 -0
  727. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/page-d57c129c03c9cb36.js +1 -0
  728. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-a8af04fbd6293d2f.js → page-61d162d7a7f88a11.js} +1 -1
  729. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/{page-bd421513fd2dc28a.js → page-483f01fd35d212f5.js} +1 -1
  730. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-9144cc5f6a208199.js → layout-d62e22634bbd6c94.js} +1 -1
  731. package/app/.next-cli-build/static/chunks/app/_not-found/{page-732ac0fa56005849.js → page-0161671512f52984.js} +1 -1
  732. package/app/.next-cli-build/static/chunks/app/callback/{page-4e8ab9d9128acffb.js → page-20e990994d8da6d3.js} +1 -1
  733. package/app/.next-cli-build/static/chunks/app/dashboard/settings/pricing/{page-d4eb2ba84eef2143.js → page-bb9f307074c5c23a.js} +1 -1
  734. package/app/.next-cli-build/static/chunks/app/landing/{page-ade86a48ca5749f4.js → page-468c5cb1d127c02a.js} +1 -1
  735. package/app/.next-cli-build/static/chunks/app/layout-10bff7b57a2a3c2c.js +1 -0
  736. package/app/.next-cli-build/static/chunks/app/login/page-32ab5d7c75651107.js +1 -0
  737. package/app/.next-cli-build/static/chunks/main-ab3c4d38db15f747.js +5 -0
  738. package/app/.next-cli-build/static/chunks/main-app-f661afc91c813cfe.js +1 -0
  739. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/global-error-8fecb2690f5e9ae2.js +1 -0
  740. package/app/.next-cli-build/static/chunks/webpack-c2bac8d80aa27536.js +1 -0
  741. package/app/.next-cli-build/static/css/27a3eadf22014a5b.css +1 -0
  742. package/app/custom-server.js +9 -0
  743. package/app/package.json +5 -4
  744. package/app/public/i18n/literals/ar.json +195 -195
  745. package/app/public/i18n/literals/bn.json +195 -195
  746. package/app/public/i18n/literals/cs.json +195 -195
  747. package/app/public/i18n/literals/da.json +195 -195
  748. package/app/public/i18n/literals/de.json +195 -195
  749. package/app/public/i18n/literals/el.json +195 -195
  750. package/app/public/i18n/literals/es.json +195 -195
  751. package/app/public/i18n/literals/fi.json +195 -195
  752. package/app/public/i18n/literals/fr.json +195 -195
  753. package/app/public/i18n/literals/he.json +195 -195
  754. package/app/public/i18n/literals/hi.json +195 -195
  755. package/app/public/i18n/literals/hu.json +195 -195
  756. package/app/public/i18n/literals/id.json +195 -195
  757. package/app/public/i18n/literals/it.json +195 -195
  758. package/app/public/i18n/literals/ja.json +195 -195
  759. package/app/public/i18n/literals/ko.json +195 -195
  760. package/app/public/i18n/literals/nl.json +195 -195
  761. package/app/public/i18n/literals/no.json +195 -195
  762. package/app/public/i18n/literals/pl.json +195 -195
  763. package/app/public/i18n/literals/pt-BR.json +195 -195
  764. package/app/public/i18n/literals/pt-PT.json +195 -195
  765. package/app/public/i18n/literals/ro.json +195 -195
  766. package/app/public/i18n/literals/ru.json +195 -195
  767. package/app/public/i18n/literals/sv.json +195 -195
  768. package/app/public/i18n/literals/th.json +195 -195
  769. package/app/public/i18n/literals/tl.json +195 -195
  770. package/app/public/i18n/literals/tr.json +195 -195
  771. package/app/public/i18n/literals/uk.json +195 -195
  772. package/app/public/i18n/literals/ur.json +195 -195
  773. package/app/public/i18n/literals/vi.json +195 -195
  774. package/app/public/i18n/literals/zh-CN.json +773 -773
  775. package/app/public/i18n/literals/zh-TW.json +195 -195
  776. package/app/public/providers/agnes-api.svg +6 -6
  777. package/app/public/providers/agnes-web.svg +6 -6
  778. package/app/public/providers/alibaba-cn.svg +11 -11
  779. package/app/public/providers/alibaba.svg +11 -11
  780. package/app/public/providers/bynara.svg +22 -22
  781. package/app/public/providers/devin.svg +5 -5
  782. package/app/public/providers/featherless.svg +8 -8
  783. package/app/public/providers/forge.svg +9 -9
  784. package/app/public/providers/freebuff-web.svg +6 -6
  785. package/app/public/providers/hcnsec.svg +10 -10
  786. package/app/public/providers/inxorastudio-web.svg +4 -4
  787. package/app/public/providers/inxorastudio.svg +4 -4
  788. package/app/public/providers/moonshot.svg +8 -8
  789. package/app/public/providers/openvecta.svg +7 -7
  790. package/app/public/providers/perplexity-agent.svg +13 -13
  791. package/app/public/providers/qwen-cloud.svg +1 -1
  792. package/app/public/providers/qwencloud.svg +6 -6
  793. package/app/public/providers/stepfun.svg +53 -53
  794. package/app/public/providers/tokenrouter.svg +15 -15
  795. package/app/public/providers/wp-studio.svg +11 -11
  796. package/app/public/providers/zed.svg +11 -11
  797. package/app/public/providers/zenmux-free.svg +9 -9
  798. package/app/server.js +1 -1
  799. package/app/src/lib/db/adapters/sqljsAdapter.js +115 -115
  800. package/app/src/lib/db/migrate.js +286 -286
  801. package/app/src/lib/network/pickProxyPoolId.js +38 -38
  802. package/app/src/lib/updater/updater.js +235 -235
  803. package/app/src/mitm/server.js +2 -2
  804. package/cli.js +830 -830
  805. package/package.json +66 -66
  806. package/src/cli/api/client.js +556 -556
  807. package/src/cli/menus/cliTools.js +618 -618
  808. package/src/cli/terminalUI.js +121 -121
  809. package/src/cli/tray/autostart.js +306 -306
  810. package/src/cli/tray/tray.js +322 -322
  811. package/src/cli/tray/tray.ps1 +130 -130
  812. package/app/.next-cli-build/server/chunks/1051.js +0 -1
  813. package/app/.next-cli-build/server/chunks/1216.js +0 -3
  814. package/app/.next-cli-build/server/chunks/541.js +0 -1
  815. package/app/.next-cli-build/server/chunks/6316.js +0 -2
  816. package/app/.next-cli-build/server/chunks/9140.js +0 -1
  817. package/app/.next-cli-build/server/chunks/9630.js +0 -1
  818. package/app/.next-cli-build/static/chunks/1696-bafe4b44a7a0439e.js +0 -3
  819. package/app/.next-cli-build/static/chunks/1966.b8f83f7ba376c962.js +0 -1
  820. package/app/.next-cli-build/static/chunks/3899.3f761f7e3a944e8c.js +0 -1
  821. package/app/.next-cli-build/static/chunks/705-b7d7b61f41806f0d.js +0 -1
  822. package/app/.next-cli-build/static/chunks/8105-204edc780a329497.js +0 -1
  823. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-cd77e53dbcd46b6c.js +0 -1
  824. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-dbf52954681b093c.js +0 -3
  825. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/page-a8c4d8c681e19868.js +0 -1
  826. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/page-408845bd809806a6.js +0 -1
  827. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/page-92a0799a23d869b3.js +0 -1
  828. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-a67cd1c5f77da355.js +0 -1
  829. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/overview/page-262fa6911888d4f1.js +0 -1
  830. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/page-f644da989b8878c3.js +0 -1
  831. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-aa26b25a26b5dac8.js +0 -1
  832. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-96d3eb0dfde0711b.js +0 -1
  833. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/swarm/page-9739651f4f19cec6.js +0 -1
  834. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/page-2f3b8761d7b32ec0.js +0 -1
  835. package/app/.next-cli-build/static/chunks/app/layout-16b611f4f5717ccd.js +0 -1
  836. package/app/.next-cli-build/static/chunks/app/login/page-0831b035aa4c0f17.js +0 -1
  837. package/app/.next-cli-build/static/chunks/main-28015457a328b97c.js +0 -5
  838. package/app/.next-cli-build/static/chunks/main-app-705d8c306f358a5f.js +0 -1
  839. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/global-error-22e44aa316880902.js +0 -1
  840. package/app/.next-cli-build/static/chunks/webpack-a990cabb6976f421.js +0 -1
  841. package/app/.next-cli-build/static/css/68d66160ca549ddc.css +0 -1
  842. package/app/cli/.build-home/AppData/Local/npm-cache/_update-notifier-last-checked +0 -0
  843. package/app/cli/.build-home/AppData/Roaming/extremerouter/.migrated-from +0 -1
  844. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/schema-3-to-4-0.8.0-20260802-152036/data.sqlite +0 -0
  845. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/upgrade-0.7.8-to-0.7.9-0.7.9-20260729-181011/data.sqlite +0 -0
  846. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/upgrade-0.7.9-to-0.8.0-0.8.0-20260729-213634/data.sqlite +0 -0
  847. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/upgrade-0.8.0-to-0.8.1-0.8.1-20260802-152517/data.sqlite +0 -0
  848. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/data.sqlite +0 -0
  849. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/data.sqlite-shm +0 -0
  850. package/app/cli/.build-home/AppData/Roaming/extremerouter/db/data.sqlite-wal +0 -0
  851. package/app/cli/.build-home/AppData/Roaming/extremerouter/jwt-secret +0 -1
  852. package/app/cli/.build-home/AppData/Roaming/extremerouter/machine-id +0 -1
  853. package/app/cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json +0 -7
  854. /package/app/.next-cli-build/static/{S-pbWChrUiCkwFyfx4Su3 → j7bBgtavtSkTBPfbmetr9}/_buildManifest.js +0 -0
  855. /package/app/.next-cli-build/static/{S-pbWChrUiCkwFyfx4Su3 → j7bBgtavtSkTBPfbmetr9}/_ssgManifest.js +0 -0
@@ -1,618 +1,618 @@
1
- const api = require("../api/client");
2
- const { pause, confirm } = require("../utils/input");
3
- const { showStatus } = require("../utils/display");
4
- const { selectModelFromList } = require("../utils/modelSelector");
5
- const { showMenuWithBack } = require("../utils/menuHelper");
6
- const { getEndpoint } = require("../utils/endpoint");
7
-
8
- const COLORS = {
9
- reset: "\x1b[0m",
10
- green: "\x1b[32m",
11
- red: "\x1b[31m",
12
- dim: "\x1b[2m",
13
- cyan: "\x1b[36m"
14
- };
15
-
16
- // Claude model types with defaults (matching Web UI)
17
- const CLAUDE_MODEL_TYPES = [
18
- { id: "sonnet", name: "Sonnet", envKey: "ANTHROPIC_DEFAULT_SONNET_MODEL", defaultValue: "cc/claude-sonnet-4-5-20250929" },
19
- { id: "opus", name: "Opus", envKey: "ANTHROPIC_DEFAULT_OPUS_MODEL", defaultValue: "cc/claude-opus-4-5-20251101" },
20
- { id: "haiku", name: "Haiku", envKey: "ANTHROPIC_DEFAULT_HAIKU_MODEL", defaultValue: "cc/claude-haiku-4-5-20251001" },
21
- ];
22
-
23
- // ─── Shared helpers ───────────────────────────────────────────────────────────
24
-
25
- /**
26
- * Get first available API key from server
27
- * @returns {Promise<string|null>}
28
- */
29
- async function getFirstApiKey() {
30
- const result = await api.getApiKeys();
31
- const keys = result.success ? (result.data.keys || []) : [];
32
- return keys.length > 0 ? keys[0].key : null;
33
- }
34
-
35
- // ─── Claude Code ──────────────────────────────────────────────────────────────
36
-
37
- /**
38
- * Build header showing current Claude config status
39
- * @returns {Promise<string>}
40
- */
41
- async function buildClaudeHeader() {
42
- const result = await api.getCliToolSettings("claude");
43
- if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
44
-
45
- const settings = result.data.settings;
46
- const currentUrl = settings?.env?.ANTHROPIC_BASE_URL;
47
- const currentKey = settings?.env?.ANTHROPIC_AUTH_TOKEN;
48
- const lines = [];
49
-
50
- if (currentUrl) {
51
- lines.push(`Status: ${COLORS.green}✓ Configured${COLORS.reset}`);
52
- lines.push(`Endpoint: ${COLORS.cyan}${currentUrl}${COLORS.reset}`);
53
- if (currentKey) {
54
- lines.push(`API Key: ${COLORS.dim}${currentKey.substring(0, 10)}...${COLORS.reset}`);
55
- }
56
- } else {
57
- lines.push(`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`);
58
- lines.push(`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`);
59
- }
60
-
61
- return lines.join("\n");
62
- }
63
-
64
- /**
65
- * Get current Claude model from settings
66
- * @param {string} envKey
67
- * @returns {Promise<string>}
68
- */
69
- async function getClaudeModel(envKey) {
70
- const result = await api.getCliToolSettings("claude");
71
- return result.success ? (result.data.settings?.env?.[envKey] || "Not set") : "Not set";
72
- }
73
-
74
- /**
75
- * Quick setup for Claude Code — sets endpoint, key, and all default models
76
- * @param {number} port
77
- */
78
- async function claudeQuickSetup(port) {
79
- const { endpoint } = await getEndpoint(port);
80
- const apiKey = await getFirstApiKey();
81
-
82
- if (!apiKey) {
83
- showStatus("No API keys found. Create one in API Keys menu first.", "error");
84
- await pause();
85
- return;
86
- }
87
-
88
- const env = { ANTHROPIC_BASE_URL: endpoint, ANTHROPIC_AUTH_TOKEN: apiKey, API_TIMEOUT_MS: "600000" };
89
- CLAUDE_MODEL_TYPES.forEach(t => { env[t.envKey] = t.defaultValue; });
90
-
91
- const result = await api.applyCliToolSettings("claude", { env });
92
- showStatus(result.success ? "Quick Setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
93
- await pause();
94
- }
95
-
96
- /**
97
- * Select and save a specific Claude model type
98
- * @param {Object} modelType
99
- * @param {number} port
100
- */
101
- async function claudeSelectModel(modelType, port) {
102
- const current = await getClaudeModel(modelType.envKey);
103
- const selected = await selectModelFromList(`Select ${modelType.name} Model`, current, { excludeCombos: true });
104
- if (!selected) return;
105
-
106
- const env = { [modelType.envKey]: selected };
107
-
108
- // Also set base URL if not configured yet
109
- const settingsResult = await api.getCliToolSettings("claude");
110
- if (!settingsResult.data?.settings?.env?.ANTHROPIC_BASE_URL) {
111
- const { endpoint } = await getEndpoint(port);
112
- const apiKey = await getFirstApiKey();
113
- env.ANTHROPIC_BASE_URL = endpoint;
114
- env.API_TIMEOUT_MS = "600000";
115
- if (apiKey) env.ANTHROPIC_AUTH_TOKEN = apiKey;
116
- }
117
-
118
- const result = await api.applyCliToolSettings("claude", { env });
119
- showStatus(result.success ? `${modelType.name} → ${selected} saved!` : `Failed: ${result.error}`, result.success ? "success" : "error");
120
- await pause();
121
- }
122
-
123
- /**
124
- * Reset Claude Code settings
125
- */
126
- async function claudeReset() {
127
- const result = await api.resetCliToolSettings("claude");
128
- showStatus(result.success ? "Settings reset successfully!" : `Failed: ${result.error}`, result.success ? "success" : "error");
129
- await pause();
130
- }
131
-
132
- /**
133
- * Claude Code submenu
134
- * @param {number} port
135
- * @param {Array<string>} breadcrumb
136
- */
137
- async function showClaudeCodeMenu(port, breadcrumb = []) {
138
- await showMenuWithBack({
139
- title: "🔧 Claude Code Settings",
140
- breadcrumb,
141
- headerContent: buildClaudeHeader,
142
- refresh: async () => ({
143
- sonnet: await getClaudeModel("ANTHROPIC_DEFAULT_SONNET_MODEL"),
144
- opus: await getClaudeModel("ANTHROPIC_DEFAULT_OPUS_MODEL"),
145
- haiku: await getClaudeModel("ANTHROPIC_DEFAULT_HAIKU_MODEL"),
146
- }),
147
- items: [
148
- {
149
- label: "⚡ Quick Setup (recommended)",
150
- action: async () => { await claudeQuickSetup(port); return true; }
151
- },
152
- {
153
- label: (d) => `Sonnet → ${d.sonnet}`,
154
- action: async () => { await claudeSelectModel(CLAUDE_MODEL_TYPES[0], port); return true; }
155
- },
156
- {
157
- label: (d) => `Opus → ${d.opus}`,
158
- action: async () => { await claudeSelectModel(CLAUDE_MODEL_TYPES[1], port); return true; }
159
- },
160
- {
161
- label: (d) => `Haiku → ${d.haiku}`,
162
- action: async () => { await claudeSelectModel(CLAUDE_MODEL_TYPES[2], port); return true; }
163
- },
164
- {
165
- label: "Reset to Default",
166
- action: async () => { await claudeReset(); return true; }
167
- }
168
- ]
169
- });
170
- }
171
-
172
- // ─── Codex CLI ────────────────────────────────────────────────────────────────
173
-
174
- /**
175
- * Build header showing current Codex config status
176
- * @returns {Promise<string>}
177
- */
178
- async function buildCodexHeader() {
179
- const result = await api.getCliToolSettings("codex");
180
- if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
181
-
182
- const { installed, hasExtremeRouter, config } = result.data;
183
- if (!installed) return `Status: ${COLORS.red}✗ Codex CLI not installed${COLORS.reset}`;
184
-
185
- if (!hasExtremeRouter) {
186
- return [
187
- `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
188
- `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
189
- ].join("\n");
190
- }
191
-
192
- // Parse base_url and model from raw TOML string
193
- const baseUrlMatch = config && config.match(/base_url\s*=\s*"([^"]+)"/);
194
- const modelMatch = config && config.match(/^model\s*=\s*"([^"]+)"/m);
195
- const baseUrl = baseUrlMatch ? baseUrlMatch[1] : "";
196
- const model = modelMatch ? modelMatch[1] : "";
197
-
198
- const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
199
- if (baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${baseUrl}${COLORS.reset}`);
200
- if (model) lines.push(`Model: ${COLORS.dim}${model}${COLORS.reset}`);
201
- return lines.join("\n");
202
- }
203
-
204
- /**
205
- * Quick setup for Codex CLI
206
- * @param {number} port
207
- */
208
- async function codexQuickSetup(port) {
209
- const { endpoint } = await getEndpoint(port);
210
- const apiKey = await getFirstApiKey();
211
-
212
- if (!apiKey) {
213
- showStatus("No API keys found. Create one in API Keys menu first.", "error");
214
- await pause();
215
- return;
216
- }
217
-
218
- // Get model selection
219
- const model = await selectModelFromList("Select Codex Model", "cx/claude-sonnet-4-5-20250929", { excludeCombos: true });
220
- if (!model) return;
221
-
222
- const result = await api.applyCliToolSettings("codex", { baseUrl: endpoint, apiKey, model });
223
- showStatus(result.success ? "Codex setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
224
- await pause();
225
- }
226
-
227
- /**
228
- * Reset Codex CLI settings
229
- */
230
- async function codexReset() {
231
- const result = await api.resetCliToolSettings("codex");
232
- showStatus(result.success ? "Codex settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
233
- await pause();
234
- }
235
-
236
- /**
237
- * Codex CLI submenu
238
- * @param {number} port
239
- * @param {Array<string>} breadcrumb
240
- */
241
- async function showCodexMenu(port, breadcrumb = []) {
242
- await showMenuWithBack({
243
- title: "🤖 Codex CLI Settings",
244
- breadcrumb,
245
- headerContent: buildCodexHeader,
246
- refresh: async () => ({}),
247
- items: [
248
- {
249
- label: "⚡ Quick Setup",
250
- action: async () => { await codexQuickSetup(port); return true; }
251
- },
252
- {
253
- label: "Reset to Default",
254
- action: async () => { await codexReset(); return true; }
255
- }
256
- ]
257
- });
258
- }
259
-
260
- // ─── Factory Droid ────────────────────────────────────────────────────────────
261
-
262
- /**
263
- * Build header showing current Droid config status
264
- * @returns {Promise<string>}
265
- */
266
- async function buildDroidHeader() {
267
- const result = await api.getCliToolSettings("droid");
268
- if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
269
-
270
- const { installed, hasExtremeRouter, settings } = result.data;
271
- if (!installed) return `Status: ${COLORS.red}✗ Factory Droid not installed${COLORS.reset}`;
272
-
273
- if (!hasExtremeRouter) {
274
- return [
275
- `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
276
- `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
277
- ].join("\n");
278
- }
279
-
280
- // Extract ExtremeRouter custom model config
281
- const custom = settings?.customModels?.find(m => m.id === "custom:ExtremeRouter-0");
282
- const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
283
- if (custom?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${custom.baseUrl}${COLORS.reset}`);
284
- if (custom?.model) lines.push(`Model: ${COLORS.dim}${custom.model}${COLORS.reset}`);
285
- return lines.join("\n");
286
- }
287
-
288
- /**
289
- * Quick setup for Factory Droid
290
- * @param {number} port
291
- */
292
- async function droidQuickSetup(port) {
293
- const { endpoint } = await getEndpoint(port);
294
- const apiKey = await getFirstApiKey();
295
-
296
- if (!apiKey) {
297
- showStatus("No API keys found. Create one in API Keys menu first.", "error");
298
- await pause();
299
- return;
300
- }
301
-
302
- const model = await selectModelFromList("Select Droid Model", "cc/claude-sonnet-4-5-20250929", { excludeCombos: true });
303
- if (!model) return;
304
-
305
- const result = await api.applyCliToolSettings("droid", { baseUrl: endpoint, apiKey, model });
306
- showStatus(result.success ? "Factory Droid setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
307
- await pause();
308
- }
309
-
310
- /**
311
- * Reset Factory Droid settings
312
- */
313
- async function droidReset() {
314
- const result = await api.resetCliToolSettings("droid");
315
- showStatus(result.success ? "Factory Droid settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
316
- await pause();
317
- }
318
-
319
- /**
320
- * Factory Droid submenu
321
- * @param {number} port
322
- * @param {Array<string>} breadcrumb
323
- */
324
- async function showDroidMenu(port, breadcrumb = []) {
325
- await showMenuWithBack({
326
- title: "🤖 Factory Droid Settings",
327
- breadcrumb,
328
- headerContent: buildDroidHeader,
329
- refresh: async () => ({}),
330
- items: [
331
- {
332
- label: "⚡ Quick Setup",
333
- action: async () => { await droidQuickSetup(port); return true; }
334
- },
335
- {
336
- label: "Reset to Default",
337
- action: async () => { await droidReset(); return true; }
338
- }
339
- ]
340
- });
341
- }
342
-
343
- // ─── Open Claw ────────────────────────────────────────────────────────────────
344
-
345
- /**
346
- * Build header showing current OpenClaw config status
347
- * @returns {Promise<string>}
348
- */
349
- async function buildOpenClawHeader() {
350
- const result = await api.getCliToolSettings("openclaw");
351
- if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
352
-
353
- const { installed, hasExtremeRouter, settings } = result.data;
354
- if (!installed) return `Status: ${COLORS.red}✗ Open Claw not installed${COLORS.reset}`;
355
-
356
- if (!hasExtremeRouter) {
357
- return [
358
- `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
359
- `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
360
- ].join("\n");
361
- }
362
-
363
- // Extract ExtremeRouter provider config
364
- const provider = settings?.models?.providers?.["extremerouter"];
365
- const primary = settings?.agents?.defaults?.model?.primary || "";
366
- const model = primary.startsWith("extremerouter/") ? primary.replace("extremerouter/", "") : (provider?.models?.[0]?.id || "");
367
- const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
368
- if (provider?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${provider.baseUrl}${COLORS.reset}`);
369
- if (model) lines.push(`Model: ${COLORS.dim}${model}${COLORS.reset}`);
370
- return lines.join("\n");
371
- }
372
-
373
- /**
374
- * Quick setup for Open Claw
375
- * @param {number} port
376
- */
377
- async function openClawQuickSetup(port) {
378
- const { endpoint } = await getEndpoint(port);
379
- const apiKey = await getFirstApiKey();
380
-
381
- if (!apiKey) {
382
- showStatus("No API keys found. Create one in API Keys menu first.", "error");
383
- await pause();
384
- return;
385
- }
386
-
387
- const model = await selectModelFromList("Select OpenClaw Model", "cc/claude-sonnet-4-5-20250929", { excludeCombos: true });
388
- if (!model) return;
389
-
390
- const result = await api.applyCliToolSettings("openclaw", { baseUrl: endpoint, apiKey, model });
391
- showStatus(result.success ? "Open Claw setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
392
- await pause();
393
- }
394
-
395
- /**
396
- * Reset Open Claw settings
397
- */
398
- async function openClawReset() {
399
- const result = await api.resetCliToolSettings("openclaw");
400
- showStatus(result.success ? "Open Claw settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
401
- await pause();
402
- }
403
-
404
- /**
405
- * Open Claw submenu
406
- * @param {number} port
407
- * @param {Array<string>} breadcrumb
408
- */
409
- async function showOpenClawMenu(port, breadcrumb = []) {
410
- await showMenuWithBack({
411
- title: "🦞 Open Claw Settings",
412
- breadcrumb,
413
- headerContent: buildOpenClawHeader,
414
- refresh: async () => ({}),
415
- items: [
416
- {
417
- label: "⚡ Quick Setup",
418
- action: async () => { await openClawQuickSetup(port); return true; }
419
- },
420
- {
421
- label: "Reset to Default",
422
- action: async () => { await openClawReset(); return true; }
423
- }
424
- ]
425
- });
426
- }
427
-
428
- // ─── OpenCode CLI ─────────────────────────────────────────────────────────────
429
-
430
- async function buildOpenCodeHeader() {
431
- const result = await api.getCliToolSettings("opencode");
432
- if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
433
-
434
- const { installed, hasExtremeRouter, opencode } = result.data;
435
- if (!installed) return `Status: ${COLORS.red}✗ OpenCode CLI not installed${COLORS.reset}`;
436
-
437
- if (!hasExtremeRouter) {
438
- return [
439
- `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
440
- `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
441
- ].join("\n");
442
- }
443
-
444
- const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
445
- if (opencode?.baseURL) lines.push(`Endpoint: ${COLORS.cyan}${opencode.baseURL}${COLORS.reset}`);
446
- if (opencode?.activeModel) lines.push(`Active: ${COLORS.dim}${opencode.activeModel}${COLORS.reset}`);
447
- if (Array.isArray(opencode?.models) && opencode.models.length > 0) {
448
- lines.push(`Models: ${COLORS.dim}${opencode.models.join(", ")}${COLORS.reset}`);
449
- }
450
- return lines.join("\n");
451
- }
452
-
453
- async function openCodeQuickSetup(port) {
454
- const { endpoint } = await getEndpoint(port);
455
- const apiKey = await getFirstApiKey();
456
-
457
- if (!apiKey) {
458
- showStatus("No API keys found. Create one in API Keys menu first.", "error");
459
- await pause();
460
- return;
461
- }
462
-
463
- // Pick first model (also becomes active model by default)
464
- const firstModel = await selectModelFromList("Select Active Model (OpenCode)", "", { excludeCombos: true });
465
- if (!firstModel) return;
466
-
467
- const models = [firstModel];
468
-
469
- // Optionally add more models
470
- while (true) {
471
- const more = await confirm(`Add another model? (current: ${models.length})`);
472
- if (!more) break;
473
- const next = await selectModelFromList(`Add Model #${models.length + 1}`, models.join(", "), { excludeCombos: true });
474
- if (!next) break;
475
- if (!models.includes(next)) models.push(next);
476
- }
477
-
478
- // Optional subagent model
479
- let subagentModel = firstModel;
480
- const wantSubagent = await confirm(`Set a different subagent model? (default: ${firstModel})`);
481
- if (wantSubagent) {
482
- const picked = await selectModelFromList("Select Subagent Model", firstModel, { excludeCombos: true });
483
- if (picked) subagentModel = picked;
484
- }
485
-
486
- const result = await api.applyCliToolSettings("opencode", {
487
- baseUrl: endpoint,
488
- apiKey,
489
- models,
490
- activeModel: firstModel,
491
- subagentModel,
492
- });
493
- showStatus(result.success ? "OpenCode setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
494
- await pause();
495
- }
496
-
497
- async function openCodeReset() {
498
- const result = await api.resetCliToolSettings("opencode");
499
- showStatus(result.success ? "OpenCode settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
500
- await pause();
501
- }
502
-
503
- async function showOpenCodeMenu(port, breadcrumb = []) {
504
- await showMenuWithBack({
505
- title: "💻 OpenCode CLI Settings",
506
- breadcrumb,
507
- headerContent: buildOpenCodeHeader,
508
- refresh: async () => ({}),
509
- items: [
510
- { label: "⚡ Quick Setup", action: async () => { await openCodeQuickSetup(port); return true; } },
511
- { label: "Reset to Default", action: async () => { await openCodeReset(); return true; } }
512
- ]
513
- });
514
- }
515
-
516
- // ─── Hermes Agent ─────────────────────────────────────────────────────────────
517
-
518
- async function buildHermesHeader() {
519
- const result = await api.getCliToolSettings("hermes");
520
- if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
521
-
522
- const { installed, hasExtremeRouter, settings } = result.data;
523
- if (!installed) return `Status: ${COLORS.red}✗ Hermes Agent not installed${COLORS.reset}`;
524
-
525
- if (!hasExtremeRouter) {
526
- return [
527
- `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
528
- `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
529
- ].join("\n");
530
- }
531
-
532
- const model = settings?.model || {};
533
- const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
534
- if (model.base_url) lines.push(`Endpoint: ${COLORS.cyan}${model.base_url}${COLORS.reset}`);
535
- if (model.default) lines.push(`Model: ${COLORS.dim}${model.default}${COLORS.reset}`);
536
- return lines.join("\n");
537
- }
538
-
539
- async function hermesQuickSetup(port) {
540
- const { endpoint } = await getEndpoint(port);
541
- const apiKey = await getFirstApiKey();
542
-
543
- if (!apiKey) {
544
- showStatus("No API keys found. Create one in API Keys menu first.", "error");
545
- await pause();
546
- return;
547
- }
548
-
549
- const model = await selectModelFromList("Select Hermes Model", "", { excludeCombos: true });
550
- if (!model) return;
551
-
552
- const result = await api.applyCliToolSettings("hermes", { baseUrl: endpoint, apiKey, model });
553
- showStatus(result.success ? "Hermes setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
554
- await pause();
555
- }
556
-
557
- async function hermesReset() {
558
- const result = await api.resetCliToolSettings("hermes");
559
- showStatus(result.success ? "Hermes settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
560
- await pause();
561
- }
562
-
563
- async function showHermesMenu(port, breadcrumb = []) {
564
- await showMenuWithBack({
565
- title: "⚡ Hermes Agent Settings",
566
- breadcrumb,
567
- headerContent: buildHermesHeader,
568
- refresh: async () => ({}),
569
- items: [
570
- { label: "⚡ Quick Setup", action: async () => { await hermesQuickSetup(port); return true; } },
571
- { label: "Reset to Default", action: async () => { await hermesReset(); return true; } }
572
- ]
573
- });
574
- }
575
-
576
- // ─── Main CLI Tools Menu ──────────────────────────────────────────────────────
577
-
578
- /**
579
- * Main CLI Tools menu
580
- * @param {number} port
581
- * @param {Array<string>} breadcrumb
582
- */
583
- async function showCliToolsMenu(port, breadcrumb = []) {
584
- const { endpoint } = await getEndpoint(port);
585
- await showMenuWithBack({
586
- title: "🔧 CLI Tools",
587
- breadcrumb,
588
- headerContent: `Configure CLI tools to use ExtremeRouter\nEndpoint: ${endpoint}`,
589
- items: [
590
- {
591
- label: "Claude Code",
592
- action: async () => { await showClaudeCodeMenu(port, [...breadcrumb, "Claude Code"]); return true; }
593
- },
594
- {
595
- label: "Codex CLI",
596
- action: async () => { await showCodexMenu(port, [...breadcrumb, "Codex CLI"]); return true; }
597
- },
598
- {
599
- label: "Factory Droid",
600
- action: async () => { await showDroidMenu(port, [...breadcrumb, "Factory Droid"]); return true; }
601
- },
602
- {
603
- label: "Open Claw",
604
- action: async () => { await showOpenClawMenu(port, [...breadcrumb, "Open Claw"]); return true; }
605
- },
606
- {
607
- label: "OpenCode",
608
- action: async () => { await showOpenCodeMenu(port, [...breadcrumb, "OpenCode"]); return true; }
609
- },
610
- {
611
- label: "Hermes",
612
- action: async () => { await showHermesMenu(port, [...breadcrumb, "Hermes"]); return true; }
613
- }
614
- ]
615
- });
616
- }
617
-
618
- module.exports = { showCliToolsMenu };
1
+ const api = require("../api/client");
2
+ const { pause, confirm } = require("../utils/input");
3
+ const { showStatus } = require("../utils/display");
4
+ const { selectModelFromList } = require("../utils/modelSelector");
5
+ const { showMenuWithBack } = require("../utils/menuHelper");
6
+ const { getEndpoint } = require("../utils/endpoint");
7
+
8
+ const COLORS = {
9
+ reset: "\x1b[0m",
10
+ green: "\x1b[32m",
11
+ red: "\x1b[31m",
12
+ dim: "\x1b[2m",
13
+ cyan: "\x1b[36m"
14
+ };
15
+
16
+ // Claude model types with defaults (matching Web UI)
17
+ const CLAUDE_MODEL_TYPES = [
18
+ { id: "sonnet", name: "Sonnet", envKey: "ANTHROPIC_DEFAULT_SONNET_MODEL", defaultValue: "cc/claude-sonnet-4-5-20250929" },
19
+ { id: "opus", name: "Opus", envKey: "ANTHROPIC_DEFAULT_OPUS_MODEL", defaultValue: "cc/claude-opus-4-5-20251101" },
20
+ { id: "haiku", name: "Haiku", envKey: "ANTHROPIC_DEFAULT_HAIKU_MODEL", defaultValue: "cc/claude-haiku-4-5-20251001" },
21
+ ];
22
+
23
+ // ─── Shared helpers ───────────────────────────────────────────────────────────
24
+
25
+ /**
26
+ * Get first available API key from server
27
+ * @returns {Promise<string|null>}
28
+ */
29
+ async function getFirstApiKey() {
30
+ const result = await api.getApiKeys();
31
+ const keys = result.success ? (result.data.keys || []) : [];
32
+ return keys.length > 0 ? keys[0].key : null;
33
+ }
34
+
35
+ // ─── Claude Code ──────────────────────────────────────────────────────────────
36
+
37
+ /**
38
+ * Build header showing current Claude config status
39
+ * @returns {Promise<string>}
40
+ */
41
+ async function buildClaudeHeader() {
42
+ const result = await api.getCliToolSettings("claude");
43
+ if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
44
+
45
+ const settings = result.data.settings;
46
+ const currentUrl = settings?.env?.ANTHROPIC_BASE_URL;
47
+ const currentKey = settings?.env?.ANTHROPIC_AUTH_TOKEN;
48
+ const lines = [];
49
+
50
+ if (currentUrl) {
51
+ lines.push(`Status: ${COLORS.green}✓ Configured${COLORS.reset}`);
52
+ lines.push(`Endpoint: ${COLORS.cyan}${currentUrl}${COLORS.reset}`);
53
+ if (currentKey) {
54
+ lines.push(`API Key: ${COLORS.dim}${currentKey.substring(0, 10)}...${COLORS.reset}`);
55
+ }
56
+ } else {
57
+ lines.push(`Status: ${COLORS.red}✗ Not configured${COLORS.reset}`);
58
+ lines.push(`${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`);
59
+ }
60
+
61
+ return lines.join("\n");
62
+ }
63
+
64
+ /**
65
+ * Get current Claude model from settings
66
+ * @param {string} envKey
67
+ * @returns {Promise<string>}
68
+ */
69
+ async function getClaudeModel(envKey) {
70
+ const result = await api.getCliToolSettings("claude");
71
+ return result.success ? (result.data.settings?.env?.[envKey] || "Not set") : "Not set";
72
+ }
73
+
74
+ /**
75
+ * Quick setup for Claude Code — sets endpoint, key, and all default models
76
+ * @param {number} port
77
+ */
78
+ async function claudeQuickSetup(port) {
79
+ const { endpoint } = await getEndpoint(port);
80
+ const apiKey = await getFirstApiKey();
81
+
82
+ if (!apiKey) {
83
+ showStatus("No API keys found. Create one in API Keys menu first.", "error");
84
+ await pause();
85
+ return;
86
+ }
87
+
88
+ const env = { ANTHROPIC_BASE_URL: endpoint, ANTHROPIC_AUTH_TOKEN: apiKey, API_TIMEOUT_MS: "600000" };
89
+ CLAUDE_MODEL_TYPES.forEach(t => { env[t.envKey] = t.defaultValue; });
90
+
91
+ const result = await api.applyCliToolSettings("claude", { env });
92
+ showStatus(result.success ? "Quick Setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
93
+ await pause();
94
+ }
95
+
96
+ /**
97
+ * Select and save a specific Claude model type
98
+ * @param {Object} modelType
99
+ * @param {number} port
100
+ */
101
+ async function claudeSelectModel(modelType, port) {
102
+ const current = await getClaudeModel(modelType.envKey);
103
+ const selected = await selectModelFromList(`Select ${modelType.name} Model`, current, { excludeCombos: true });
104
+ if (!selected) return;
105
+
106
+ const env = { [modelType.envKey]: selected };
107
+
108
+ // Also set base URL if not configured yet
109
+ const settingsResult = await api.getCliToolSettings("claude");
110
+ if (!settingsResult.data?.settings?.env?.ANTHROPIC_BASE_URL) {
111
+ const { endpoint } = await getEndpoint(port);
112
+ const apiKey = await getFirstApiKey();
113
+ env.ANTHROPIC_BASE_URL = endpoint;
114
+ env.API_TIMEOUT_MS = "600000";
115
+ if (apiKey) env.ANTHROPIC_AUTH_TOKEN = apiKey;
116
+ }
117
+
118
+ const result = await api.applyCliToolSettings("claude", { env });
119
+ showStatus(result.success ? `${modelType.name} → ${selected} saved!` : `Failed: ${result.error}`, result.success ? "success" : "error");
120
+ await pause();
121
+ }
122
+
123
+ /**
124
+ * Reset Claude Code settings
125
+ */
126
+ async function claudeReset() {
127
+ const result = await api.resetCliToolSettings("claude");
128
+ showStatus(result.success ? "Settings reset successfully!" : `Failed: ${result.error}`, result.success ? "success" : "error");
129
+ await pause();
130
+ }
131
+
132
+ /**
133
+ * Claude Code submenu
134
+ * @param {number} port
135
+ * @param {Array<string>} breadcrumb
136
+ */
137
+ async function showClaudeCodeMenu(port, breadcrumb = []) {
138
+ await showMenuWithBack({
139
+ title: "🔧 Claude Code Settings",
140
+ breadcrumb,
141
+ headerContent: buildClaudeHeader,
142
+ refresh: async () => ({
143
+ sonnet: await getClaudeModel("ANTHROPIC_DEFAULT_SONNET_MODEL"),
144
+ opus: await getClaudeModel("ANTHROPIC_DEFAULT_OPUS_MODEL"),
145
+ haiku: await getClaudeModel("ANTHROPIC_DEFAULT_HAIKU_MODEL"),
146
+ }),
147
+ items: [
148
+ {
149
+ label: "⚡ Quick Setup (recommended)",
150
+ action: async () => { await claudeQuickSetup(port); return true; }
151
+ },
152
+ {
153
+ label: (d) => `Sonnet → ${d.sonnet}`,
154
+ action: async () => { await claudeSelectModel(CLAUDE_MODEL_TYPES[0], port); return true; }
155
+ },
156
+ {
157
+ label: (d) => `Opus → ${d.opus}`,
158
+ action: async () => { await claudeSelectModel(CLAUDE_MODEL_TYPES[1], port); return true; }
159
+ },
160
+ {
161
+ label: (d) => `Haiku → ${d.haiku}`,
162
+ action: async () => { await claudeSelectModel(CLAUDE_MODEL_TYPES[2], port); return true; }
163
+ },
164
+ {
165
+ label: "Reset to Default",
166
+ action: async () => { await claudeReset(); return true; }
167
+ }
168
+ ]
169
+ });
170
+ }
171
+
172
+ // ─── Codex CLI ────────────────────────────────────────────────────────────────
173
+
174
+ /**
175
+ * Build header showing current Codex config status
176
+ * @returns {Promise<string>}
177
+ */
178
+ async function buildCodexHeader() {
179
+ const result = await api.getCliToolSettings("codex");
180
+ if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
181
+
182
+ const { installed, hasExtremeRouter, config } = result.data;
183
+ if (!installed) return `Status: ${COLORS.red}✗ Codex CLI not installed${COLORS.reset}`;
184
+
185
+ if (!hasExtremeRouter) {
186
+ return [
187
+ `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
188
+ `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
189
+ ].join("\n");
190
+ }
191
+
192
+ // Parse base_url and model from raw TOML string
193
+ const baseUrlMatch = config && config.match(/base_url\s*=\s*"([^"]+)"/);
194
+ const modelMatch = config && config.match(/^model\s*=\s*"([^"]+)"/m);
195
+ const baseUrl = baseUrlMatch ? baseUrlMatch[1] : "";
196
+ const model = modelMatch ? modelMatch[1] : "";
197
+
198
+ const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
199
+ if (baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${baseUrl}${COLORS.reset}`);
200
+ if (model) lines.push(`Model: ${COLORS.dim}${model}${COLORS.reset}`);
201
+ return lines.join("\n");
202
+ }
203
+
204
+ /**
205
+ * Quick setup for Codex CLI
206
+ * @param {number} port
207
+ */
208
+ async function codexQuickSetup(port) {
209
+ const { endpoint } = await getEndpoint(port);
210
+ const apiKey = await getFirstApiKey();
211
+
212
+ if (!apiKey) {
213
+ showStatus("No API keys found. Create one in API Keys menu first.", "error");
214
+ await pause();
215
+ return;
216
+ }
217
+
218
+ // Get model selection
219
+ const model = await selectModelFromList("Select Codex Model", "cx/claude-sonnet-4-5-20250929", { excludeCombos: true });
220
+ if (!model) return;
221
+
222
+ const result = await api.applyCliToolSettings("codex", { baseUrl: endpoint, apiKey, model });
223
+ showStatus(result.success ? "Codex setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
224
+ await pause();
225
+ }
226
+
227
+ /**
228
+ * Reset Codex CLI settings
229
+ */
230
+ async function codexReset() {
231
+ const result = await api.resetCliToolSettings("codex");
232
+ showStatus(result.success ? "Codex settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
233
+ await pause();
234
+ }
235
+
236
+ /**
237
+ * Codex CLI submenu
238
+ * @param {number} port
239
+ * @param {Array<string>} breadcrumb
240
+ */
241
+ async function showCodexMenu(port, breadcrumb = []) {
242
+ await showMenuWithBack({
243
+ title: "🤖 Codex CLI Settings",
244
+ breadcrumb,
245
+ headerContent: buildCodexHeader,
246
+ refresh: async () => ({}),
247
+ items: [
248
+ {
249
+ label: "⚡ Quick Setup",
250
+ action: async () => { await codexQuickSetup(port); return true; }
251
+ },
252
+ {
253
+ label: "Reset to Default",
254
+ action: async () => { await codexReset(); return true; }
255
+ }
256
+ ]
257
+ });
258
+ }
259
+
260
+ // ─── Factory Droid ────────────────────────────────────────────────────────────
261
+
262
+ /**
263
+ * Build header showing current Droid config status
264
+ * @returns {Promise<string>}
265
+ */
266
+ async function buildDroidHeader() {
267
+ const result = await api.getCliToolSettings("droid");
268
+ if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
269
+
270
+ const { installed, hasExtremeRouter, settings } = result.data;
271
+ if (!installed) return `Status: ${COLORS.red}✗ Factory Droid not installed${COLORS.reset}`;
272
+
273
+ if (!hasExtremeRouter) {
274
+ return [
275
+ `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
276
+ `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
277
+ ].join("\n");
278
+ }
279
+
280
+ // Extract ExtremeRouter custom model config
281
+ const custom = settings?.customModels?.find(m => m.id === "custom:ExtremeRouter-0");
282
+ const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
283
+ if (custom?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${custom.baseUrl}${COLORS.reset}`);
284
+ if (custom?.model) lines.push(`Model: ${COLORS.dim}${custom.model}${COLORS.reset}`);
285
+ return lines.join("\n");
286
+ }
287
+
288
+ /**
289
+ * Quick setup for Factory Droid
290
+ * @param {number} port
291
+ */
292
+ async function droidQuickSetup(port) {
293
+ const { endpoint } = await getEndpoint(port);
294
+ const apiKey = await getFirstApiKey();
295
+
296
+ if (!apiKey) {
297
+ showStatus("No API keys found. Create one in API Keys menu first.", "error");
298
+ await pause();
299
+ return;
300
+ }
301
+
302
+ const model = await selectModelFromList("Select Droid Model", "cc/claude-sonnet-4-5-20250929", { excludeCombos: true });
303
+ if (!model) return;
304
+
305
+ const result = await api.applyCliToolSettings("droid", { baseUrl: endpoint, apiKey, model });
306
+ showStatus(result.success ? "Factory Droid setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
307
+ await pause();
308
+ }
309
+
310
+ /**
311
+ * Reset Factory Droid settings
312
+ */
313
+ async function droidReset() {
314
+ const result = await api.resetCliToolSettings("droid");
315
+ showStatus(result.success ? "Factory Droid settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
316
+ await pause();
317
+ }
318
+
319
+ /**
320
+ * Factory Droid submenu
321
+ * @param {number} port
322
+ * @param {Array<string>} breadcrumb
323
+ */
324
+ async function showDroidMenu(port, breadcrumb = []) {
325
+ await showMenuWithBack({
326
+ title: "🤖 Factory Droid Settings",
327
+ breadcrumb,
328
+ headerContent: buildDroidHeader,
329
+ refresh: async () => ({}),
330
+ items: [
331
+ {
332
+ label: "⚡ Quick Setup",
333
+ action: async () => { await droidQuickSetup(port); return true; }
334
+ },
335
+ {
336
+ label: "Reset to Default",
337
+ action: async () => { await droidReset(); return true; }
338
+ }
339
+ ]
340
+ });
341
+ }
342
+
343
+ // ─── Open Claw ────────────────────────────────────────────────────────────────
344
+
345
+ /**
346
+ * Build header showing current OpenClaw config status
347
+ * @returns {Promise<string>}
348
+ */
349
+ async function buildOpenClawHeader() {
350
+ const result = await api.getCliToolSettings("openclaw");
351
+ if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
352
+
353
+ const { installed, hasExtremeRouter, settings } = result.data;
354
+ if (!installed) return `Status: ${COLORS.red}✗ Open Claw not installed${COLORS.reset}`;
355
+
356
+ if (!hasExtremeRouter) {
357
+ return [
358
+ `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
359
+ `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
360
+ ].join("\n");
361
+ }
362
+
363
+ // Extract ExtremeRouter provider config
364
+ const provider = settings?.models?.providers?.["extremerouter"];
365
+ const primary = settings?.agents?.defaults?.model?.primary || "";
366
+ const model = primary.startsWith("extremerouter/") ? primary.replace("extremerouter/", "") : (provider?.models?.[0]?.id || "");
367
+ const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
368
+ if (provider?.baseUrl) lines.push(`Endpoint: ${COLORS.cyan}${provider.baseUrl}${COLORS.reset}`);
369
+ if (model) lines.push(`Model: ${COLORS.dim}${model}${COLORS.reset}`);
370
+ return lines.join("\n");
371
+ }
372
+
373
+ /**
374
+ * Quick setup for Open Claw
375
+ * @param {number} port
376
+ */
377
+ async function openClawQuickSetup(port) {
378
+ const { endpoint } = await getEndpoint(port);
379
+ const apiKey = await getFirstApiKey();
380
+
381
+ if (!apiKey) {
382
+ showStatus("No API keys found. Create one in API Keys menu first.", "error");
383
+ await pause();
384
+ return;
385
+ }
386
+
387
+ const model = await selectModelFromList("Select OpenClaw Model", "cc/claude-sonnet-4-5-20250929", { excludeCombos: true });
388
+ if (!model) return;
389
+
390
+ const result = await api.applyCliToolSettings("openclaw", { baseUrl: endpoint, apiKey, model });
391
+ showStatus(result.success ? "Open Claw setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
392
+ await pause();
393
+ }
394
+
395
+ /**
396
+ * Reset Open Claw settings
397
+ */
398
+ async function openClawReset() {
399
+ const result = await api.resetCliToolSettings("openclaw");
400
+ showStatus(result.success ? "Open Claw settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
401
+ await pause();
402
+ }
403
+
404
+ /**
405
+ * Open Claw submenu
406
+ * @param {number} port
407
+ * @param {Array<string>} breadcrumb
408
+ */
409
+ async function showOpenClawMenu(port, breadcrumb = []) {
410
+ await showMenuWithBack({
411
+ title: "🦞 Open Claw Settings",
412
+ breadcrumb,
413
+ headerContent: buildOpenClawHeader,
414
+ refresh: async () => ({}),
415
+ items: [
416
+ {
417
+ label: "⚡ Quick Setup",
418
+ action: async () => { await openClawQuickSetup(port); return true; }
419
+ },
420
+ {
421
+ label: "Reset to Default",
422
+ action: async () => { await openClawReset(); return true; }
423
+ }
424
+ ]
425
+ });
426
+ }
427
+
428
+ // ─── OpenCode CLI ─────────────────────────────────────────────────────────────
429
+
430
+ async function buildOpenCodeHeader() {
431
+ const result = await api.getCliToolSettings("opencode");
432
+ if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
433
+
434
+ const { installed, hasExtremeRouter, opencode } = result.data;
435
+ if (!installed) return `Status: ${COLORS.red}✗ OpenCode CLI not installed${COLORS.reset}`;
436
+
437
+ if (!hasExtremeRouter) {
438
+ return [
439
+ `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
440
+ `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
441
+ ].join("\n");
442
+ }
443
+
444
+ const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
445
+ if (opencode?.baseURL) lines.push(`Endpoint: ${COLORS.cyan}${opencode.baseURL}${COLORS.reset}`);
446
+ if (opencode?.activeModel) lines.push(`Active: ${COLORS.dim}${opencode.activeModel}${COLORS.reset}`);
447
+ if (Array.isArray(opencode?.models) && opencode.models.length > 0) {
448
+ lines.push(`Models: ${COLORS.dim}${opencode.models.join(", ")}${COLORS.reset}`);
449
+ }
450
+ return lines.join("\n");
451
+ }
452
+
453
+ async function openCodeQuickSetup(port) {
454
+ const { endpoint } = await getEndpoint(port);
455
+ const apiKey = await getFirstApiKey();
456
+
457
+ if (!apiKey) {
458
+ showStatus("No API keys found. Create one in API Keys menu first.", "error");
459
+ await pause();
460
+ return;
461
+ }
462
+
463
+ // Pick first model (also becomes active model by default)
464
+ const firstModel = await selectModelFromList("Select Active Model (OpenCode)", "", { excludeCombos: true });
465
+ if (!firstModel) return;
466
+
467
+ const models = [firstModel];
468
+
469
+ // Optionally add more models
470
+ while (true) {
471
+ const more = await confirm(`Add another model? (current: ${models.length})`);
472
+ if (!more) break;
473
+ const next = await selectModelFromList(`Add Model #${models.length + 1}`, models.join(", "), { excludeCombos: true });
474
+ if (!next) break;
475
+ if (!models.includes(next)) models.push(next);
476
+ }
477
+
478
+ // Optional subagent model
479
+ let subagentModel = firstModel;
480
+ const wantSubagent = await confirm(`Set a different subagent model? (default: ${firstModel})`);
481
+ if (wantSubagent) {
482
+ const picked = await selectModelFromList("Select Subagent Model", firstModel, { excludeCombos: true });
483
+ if (picked) subagentModel = picked;
484
+ }
485
+
486
+ const result = await api.applyCliToolSettings("opencode", {
487
+ baseUrl: endpoint,
488
+ apiKey,
489
+ models,
490
+ activeModel: firstModel,
491
+ subagentModel,
492
+ });
493
+ showStatus(result.success ? "OpenCode setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
494
+ await pause();
495
+ }
496
+
497
+ async function openCodeReset() {
498
+ const result = await api.resetCliToolSettings("opencode");
499
+ showStatus(result.success ? "OpenCode settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
500
+ await pause();
501
+ }
502
+
503
+ async function showOpenCodeMenu(port, breadcrumb = []) {
504
+ await showMenuWithBack({
505
+ title: "💻 OpenCode CLI Settings",
506
+ breadcrumb,
507
+ headerContent: buildOpenCodeHeader,
508
+ refresh: async () => ({}),
509
+ items: [
510
+ { label: "⚡ Quick Setup", action: async () => { await openCodeQuickSetup(port); return true; } },
511
+ { label: "Reset to Default", action: async () => { await openCodeReset(); return true; } }
512
+ ]
513
+ });
514
+ }
515
+
516
+ // ─── Hermes Agent ─────────────────────────────────────────────────────────────
517
+
518
+ async function buildHermesHeader() {
519
+ const result = await api.getCliToolSettings("hermes");
520
+ if (!result.success) return ` ${COLORS.red}Failed to load settings${COLORS.reset}`;
521
+
522
+ const { installed, hasExtremeRouter, settings } = result.data;
523
+ if (!installed) return `Status: ${COLORS.red}✗ Hermes Agent not installed${COLORS.reset}`;
524
+
525
+ if (!hasExtremeRouter) {
526
+ return [
527
+ `Status: ${COLORS.red}✗ Not configured${COLORS.reset}`,
528
+ `${COLORS.dim}Run "Quick Setup" to configure${COLORS.reset}`
529
+ ].join("\n");
530
+ }
531
+
532
+ const model = settings?.model || {};
533
+ const lines = [`Status: ${COLORS.green}✓ Configured${COLORS.reset}`];
534
+ if (model.base_url) lines.push(`Endpoint: ${COLORS.cyan}${model.base_url}${COLORS.reset}`);
535
+ if (model.default) lines.push(`Model: ${COLORS.dim}${model.default}${COLORS.reset}`);
536
+ return lines.join("\n");
537
+ }
538
+
539
+ async function hermesQuickSetup(port) {
540
+ const { endpoint } = await getEndpoint(port);
541
+ const apiKey = await getFirstApiKey();
542
+
543
+ if (!apiKey) {
544
+ showStatus("No API keys found. Create one in API Keys menu first.", "error");
545
+ await pause();
546
+ return;
547
+ }
548
+
549
+ const model = await selectModelFromList("Select Hermes Model", "", { excludeCombos: true });
550
+ if (!model) return;
551
+
552
+ const result = await api.applyCliToolSettings("hermes", { baseUrl: endpoint, apiKey, model });
553
+ showStatus(result.success ? "Hermes setup completed!" : `Failed: ${result.error}`, result.success ? "success" : "error");
554
+ await pause();
555
+ }
556
+
557
+ async function hermesReset() {
558
+ const result = await api.resetCliToolSettings("hermes");
559
+ showStatus(result.success ? "Hermes settings reset!" : `Failed: ${result.error}`, result.success ? "success" : "error");
560
+ await pause();
561
+ }
562
+
563
+ async function showHermesMenu(port, breadcrumb = []) {
564
+ await showMenuWithBack({
565
+ title: "⚡ Hermes Agent Settings",
566
+ breadcrumb,
567
+ headerContent: buildHermesHeader,
568
+ refresh: async () => ({}),
569
+ items: [
570
+ { label: "⚡ Quick Setup", action: async () => { await hermesQuickSetup(port); return true; } },
571
+ { label: "Reset to Default", action: async () => { await hermesReset(); return true; } }
572
+ ]
573
+ });
574
+ }
575
+
576
+ // ─── Main CLI Tools Menu ──────────────────────────────────────────────────────
577
+
578
+ /**
579
+ * Main CLI Tools menu
580
+ * @param {number} port
581
+ * @param {Array<string>} breadcrumb
582
+ */
583
+ async function showCliToolsMenu(port, breadcrumb = []) {
584
+ const { endpoint } = await getEndpoint(port);
585
+ await showMenuWithBack({
586
+ title: "🔧 CLI Tools",
587
+ breadcrumb,
588
+ headerContent: `Configure CLI tools to use ExtremeRouter\nEndpoint: ${endpoint}`,
589
+ items: [
590
+ {
591
+ label: "Claude Code",
592
+ action: async () => { await showClaudeCodeMenu(port, [...breadcrumb, "Claude Code"]); return true; }
593
+ },
594
+ {
595
+ label: "Codex CLI",
596
+ action: async () => { await showCodexMenu(port, [...breadcrumb, "Codex CLI"]); return true; }
597
+ },
598
+ {
599
+ label: "Factory Droid",
600
+ action: async () => { await showDroidMenu(port, [...breadcrumb, "Factory Droid"]); return true; }
601
+ },
602
+ {
603
+ label: "Open Claw",
604
+ action: async () => { await showOpenClawMenu(port, [...breadcrumb, "Open Claw"]); return true; }
605
+ },
606
+ {
607
+ label: "OpenCode",
608
+ action: async () => { await showOpenCodeMenu(port, [...breadcrumb, "OpenCode"]); return true; }
609
+ },
610
+ {
611
+ label: "Hermes",
612
+ action: async () => { await showHermesMenu(port, [...breadcrumb, "Hermes"]); return true; }
613
+ }
614
+ ]
615
+ });
616
+ }
617
+
618
+ module.exports = { showCliToolsMenu };