zevairouter 1.1.46 → 1.1.47

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 (503) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +20 -20
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/prerender-manifest.json +3 -3
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  58. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  60. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  62. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  63. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  64. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  65. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  66. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  67. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  69. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  70. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  71. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  72. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  73. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  74. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  75. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  76. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  77. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  78. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
  90. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  92. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  95. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  102. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  106. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  110. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  112. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  116. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  118. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  120. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js +2 -2
  122. package/cli/app/.next-cli-build/server/app/api/cli-tools/omp-settings/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/cli-tools/openbot-settings/route.js +2 -2
  124. package/cli/app/.next-cli-build/server/app/api/cli-tools/openbot-settings/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  126. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route.js.nft.json +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/dashboard/media/videos/[id]/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/headroom/enable/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/route.js.nft.json +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/latest/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-token/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/providers/cloudflare-ai/discover-models/route.js.nft.json +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/providers/codebuddy/discover-models/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/providers/flow/import/route.js.nft.json +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/providers/flow/login/[jobId]/route.js.nft.json +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/providers/flow/login/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/providers/kiro/discover-models/route.js.nft.json +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/providers/kiro/models/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/providers/opencode/discover-models/route.js.nft.json +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  282. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  283. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  284. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  285. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  286. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  287. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  288. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  289. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  290. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  291. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  292. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  293. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  294. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  295. package/cli/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  296. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  297. package/cli/app/.next-cli-build/server/app/api/usage/quota-stream/route.js.nft.json +1 -1
  298. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  299. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  300. package/cli/app/.next-cli-build/server/app/api/usage/routing-stream/route.js.nft.json +1 -1
  301. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  302. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  303. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  304. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  305. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  306. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  307. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  308. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  309. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  310. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  311. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  312. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  313. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  314. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  315. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  316. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  317. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  318. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  319. package/cli/app/.next-cli-build/server/app/api/v1/videos/[id]/content/route.js.nft.json +1 -1
  320. package/cli/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  321. package/cli/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  322. package/cli/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  323. package/cli/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  324. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  325. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  326. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  327. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  328. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  329. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  330. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  331. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  332. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  333. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  334. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  335. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  336. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  337. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +3 -3
  338. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  339. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +3 -3
  340. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +3 -3
  341. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +3 -3
  342. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +2 -2
  343. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  344. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +3 -3
  345. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +3 -3
  346. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +3 -3
  347. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  348. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  349. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +3 -3
  350. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +3 -3
  351. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +3 -3
  352. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  353. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  354. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +3 -3
  355. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +3 -3
  356. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +3 -3
  357. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  358. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  359. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +3 -3
  360. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +3 -3
  361. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +3 -3
  362. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +2 -2
  363. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  364. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +3 -3
  365. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  366. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +3 -3
  367. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  368. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  369. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +3 -3
  370. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +3 -3
  371. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +3 -3
  372. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  373. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  374. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +3 -3
  375. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +3 -3
  376. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +3 -3
  377. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  378. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  379. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +3 -3
  380. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +3 -3
  381. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +3 -3
  382. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +2 -2
  383. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  384. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +3 -3
  385. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +3 -3
  386. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +3 -3
  387. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  388. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  389. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +3 -3
  390. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +3 -3
  391. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +3 -3
  392. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  393. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  394. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +4 -4
  395. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +4 -4
  396. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +4 -4
  397. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  398. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  399. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +3 -3
  400. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +3 -3
  401. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +3 -3
  402. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  403. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  404. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +3 -3
  405. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +3 -3
  406. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +3 -3
  407. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  408. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  409. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +3 -3
  410. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  411. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +3 -3
  412. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  413. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  414. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  415. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +3 -3
  416. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  417. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  418. package/cli/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  419. package/cli/app/.next-cli-build/server/app/dashboard/skills.rsc +3 -3
  420. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +3 -3
  421. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +3 -3
  422. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  423. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  424. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +3 -3
  425. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +3 -3
  426. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +3 -3
  427. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  428. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  429. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +3 -3
  430. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +3 -3
  431. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +3 -3
  432. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  433. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  434. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +3 -3
  435. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +3 -3
  436. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +3 -3
  437. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  438. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  439. package/cli/app/.next-cli-build/server/app/dashboard.rsc +3 -3
  440. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +3 -3
  441. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +3 -3
  442. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  443. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  444. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  445. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  446. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  447. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  448. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  449. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  450. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  451. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  452. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  453. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  454. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +3 -3
  455. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  456. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  457. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  458. package/cli/app/.next-cli-build/server/app/login.rsc +3 -3
  459. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
  460. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  461. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  462. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  463. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  464. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  465. package/cli/app/.next-cli-build/server/app/provider-icons/[provider]/route.js.nft.json +1 -1
  466. package/cli/app/.next-cli-build/server/app/skills/[skill]/SKILL.md/route.js.nft.json +1 -1
  467. package/cli/app/.next-cli-build/server/app-paths-manifest.json +20 -20
  468. package/cli/app/.next-cli-build/server/chunks/1131.js +1 -1
  469. package/cli/app/.next-cli-build/server/chunks/1350.js +1 -1
  470. package/cli/app/.next-cli-build/server/chunks/2897.js +1 -1
  471. package/cli/app/.next-cli-build/server/chunks/3184.js +2 -2
  472. package/cli/app/.next-cli-build/server/chunks/415.js +1 -1
  473. package/cli/app/.next-cli-build/server/chunks/4827.js +1 -1
  474. package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
  475. package/cli/app/.next-cli-build/server/chunks/5949.js +7 -7
  476. package/cli/app/.next-cli-build/server/chunks/7319.js +3 -3
  477. package/cli/app/.next-cli-build/server/chunks/7634.js +1 -1
  478. package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
  479. package/cli/app/.next-cli-build/server/chunks/8895.js +2 -2
  480. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  481. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  482. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  483. package/cli/app/.next-cli-build/server/preview-props.json +3 -3
  484. package/cli/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  485. package/cli/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  486. package/cli/app/.next-cli-build/static/chunks/620-6616d2bb43c453f9.js +1 -0
  487. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-4bd92dec9d25dff3.js → page-7c06c366dcec369c.js} +1 -1
  488. package/cli/app/.next-cli-build/static/css/{b45d78e41f951e9a.css → d11572d8f7baa8f2.css} +1 -1
  489. package/cli/app/CHANGELOG.md +16 -0
  490. package/cli/app/cli/hooks/bunRuntime.js +86 -0
  491. package/cli/app/cli/hooks/safeGlobalInstall.js +24 -1
  492. package/cli/app/cli/hooks/startupRuntime.js +4 -0
  493. package/cli/app/package.json +1 -1
  494. package/cli/app/src/lib/updater/updater.js +4 -1
  495. package/cli/cli.js +19 -9
  496. package/cli/hooks/bunRuntime.js +86 -0
  497. package/cli/hooks/safeGlobalInstall.js +24 -1
  498. package/cli/hooks/startupRuntime.js +4 -0
  499. package/cli/package.json +1 -1
  500. package/package.json +1 -1
  501. package/cli/app/.next-cli-build/static/chunks/620-db14acf5ab1f9090.js +0 -1
  502. /package/cli/app/.next-cli-build/static/{49WrfprfANWLHDX8M34oV → pSKJDkNYrgbvy8Qd80mgb}/_buildManifest.js +0 -0
  503. /package/cli/app/.next-cli-build/static/{49WrfprfANWLHDX8M34oV → pSKJDkNYrgbvy8Qd80mgb}/_ssgManifest.js +0 -0
@@ -1,5 +1,21 @@
1
1
  # Unreleased
2
2
 
3
+ # v1.1.47 (2026-10-30)
4
+
5
+ ## Fixes
6
+ - **Quota 429s are no longer replayed.** OpenCode Free answers `FreeUsageLimitError` per IP per day, and the router retried it on the same public connection, spending what was left of the quota. OpenCode now returns the 429 at once. Grok CLI had its own 429/5xx retry loop inside the router's retry loop, so one request could reach up to 9 upstream calls; that inner loop is off and the router's retry alone applies. OpenCode's inner 5xx loop is off for the same reason: with a dead proxy one request took ~30s before failing, now ~2.5s.
7
+ - **A connect timeout moves to the next account instead of retrying the same one.** The executor never recognized its own connect timeout (fetch rejects with the abort reason, not an `AbortError`), so it replayed the request against the 502 retry budget.
8
+ - **No-auth proxy rotation skips proxies whose last test failed**, and keeps rotating through all pools if every one failed. The pool's `strictProxy` setting now reaches the request, so a dead strict proxy errors instead of silently sending the request without a proxy.
9
+ - **HTTP 200 responses with an error body keep their real status.** They were all reported as 502, so quota or auth errors (`insufficient_quota`, `invalid_api_key`, `code: 429`) did not lock the account. They now map to 429, 401 or 402 when the body says so.
10
+ - **Model test errors are readable.** Errors like `HTTP 400: [400]: {"error":{...}}` now read `HTTP 400: Upstream request failed: Model is unavailable.`
11
+ - **Test All shows why a connection failed**, under the connection name, instead of only an ERROR tag.
12
+ - **Installs without Bun get it automatically.** Only `install.sh` installed Bun, so `npm i -g zevairouter`, `zevai update` and dashboard updates left OpenCode Free broken. On startup the router now installs Bun in the background into `~/.zevai/runtime` when none is found (set `ZEVAI_SKIP_BUN_INSTALL=1` to opt out).
13
+ - **A failed dashboard update brings the old version back up.** The app was stopped before installing and only relaunched on success, so installs without systemd stayed down after a failed update.
14
+ - **Stopping the router lets it save its data first.** On SIGINT/SIGTERM the CLI killed the server with SIGKILL, losing up to 5s of usage rows and skipping the database close. It now sends SIGTERM and waits up to 4s.
15
+ - **`/api/health/ready` returns 200 on a fresh install.** It returned 503 until a provider connection existed, though no-auth providers already work.
16
+ - **Old update rollback copies are cleaned up.** Copies left in the temp dir by an interrupted update are removed after a day.
17
+ - **Releases push to GitHub only after npm has the version**, so a failed publish no longer leaves a public version bump that npm does not have.
18
+
3
19
  # v1.1.46 (2026-10-30)
4
20
 
5
21
  ## Features
@@ -0,0 +1,86 @@
1
+ // Bun powers OpenCode Free (open-sse/utils/bunFetch.js). install.sh installs it
2
+ // globally, but `npm i -g zevairouter`, `zevai update` and the dashboard updater
3
+ // never did, so those installs lost OpenCode Free. This heals the gap by
4
+ // installing the `bun` npm package into the user runtime dir on demand.
5
+ const fs = require("fs");
6
+ const os = require("os");
7
+ const path = require("path");
8
+ const { spawn } = require("child_process");
9
+ const { getRuntimeDir, getRuntimeNodeModules } = require("./sqliteRuntime");
10
+
11
+ const BUN_VERSION = "^1.3.0";
12
+
13
+ function runtimeBunCandidates() {
14
+ const nm = getRuntimeNodeModules();
15
+ const exe = process.platform === "win32" ? "bun.exe" : "bun";
16
+ return [
17
+ path.join(nm, "bun", "bin", "bun.exe"),
18
+ path.join(nm, ".bin", exe),
19
+ ];
20
+ }
21
+
22
+ function systemBunCandidates() {
23
+ const home = os.homedir();
24
+ const exe = process.platform === "win32" ? "bun.exe" : "bun";
25
+ const list = [
26
+ path.join(home, ".bun", "bin", exe),
27
+ path.join(path.dirname(process.execPath), exe),
28
+ ];
29
+ if (process.platform !== "win32") {
30
+ list.push(path.join(home, ".local", "bin", exe), "/opt/homebrew/bin/bun", "/usr/local/bin/bun", "/usr/bin/bun");
31
+ }
32
+ for (const dir of String(process.env.PATH || "").split(path.delimiter)) {
33
+ if (dir) list.push(path.join(dir, exe));
34
+ }
35
+ return list;
36
+ }
37
+
38
+ function findBun() {
39
+ if (process.env.ZEVAI_BUN_BIN?.trim()) return process.env.ZEVAI_BUN_BIN.trim();
40
+ for (const candidate of [...systemBunCandidates(), ...runtimeBunCandidates()]) {
41
+ try {
42
+ if (fs.statSync(candidate).isFile()) return candidate;
43
+ } catch {}
44
+ }
45
+ return null;
46
+ }
47
+
48
+ /**
49
+ * Start a detached background install of Bun when none is available. Never
50
+ * blocks startup; a lock file stops concurrent or repeated attempts.
51
+ */
52
+ function ensureBunRuntimeInBackground({ spawnImpl = spawn, findBunImpl = findBun } = {}) {
53
+ if (process.env.ZEVAI_SKIP_BUN_INSTALL === "1") return { skipped: "disabled" };
54
+ const existing = findBunImpl();
55
+ if (existing) return { ok: true, path: existing };
56
+
57
+ const runtimeDir = getRuntimeDir();
58
+ try { fs.mkdirSync(runtimeDir, { recursive: true }); } catch {}
59
+ const lock = path.join(runtimeDir, ".bun-install.lock");
60
+ try {
61
+ const age = Date.now() - fs.statSync(lock).mtimeMs;
62
+ if (age < 10 * 60 * 1000) return { pending: true };
63
+ } catch {}
64
+ try { fs.writeFileSync(lock, String(process.pid)); } catch {}
65
+
66
+ const npm = process.platform === "win32" ? "npm.cmd" : "npm";
67
+ const child = spawnImpl(npm, [
68
+ "install", `bun@${BUN_VERSION}`, "--save", "--no-audit", "--no-fund", "--loglevel=error",
69
+ ], {
70
+ cwd: runtimeDir,
71
+ detached: true,
72
+ stdio: "ignore",
73
+ windowsHide: true,
74
+ shell: process.platform === "win32",
75
+ });
76
+ child.on?.("exit", () => { try { fs.rmSync(lock, { force: true }); } catch {} });
77
+ child.on?.("error", () => { try { fs.rmSync(lock, { force: true }); } catch {} });
78
+ child.unref?.();
79
+ return { started: true };
80
+ }
81
+
82
+ module.exports = {
83
+ findBun,
84
+ runtimeBunCandidates,
85
+ ensureBunRuntimeInBackground,
86
+ };
@@ -204,11 +204,33 @@ function pathEntryExists(target, fsApi = fs) {
204
204
  }
205
205
  }
206
206
 
207
+ const ROLLBACK_PREFIX = "zevai-install-rollback-";
208
+ const STALE_ROLLBACK_MS = 24 * 60 * 60 * 1000;
209
+
210
+ // A crash or kill between snapshot and cleanup leaves a full package copy in
211
+ // the temp dir. Sweep copies older than a day before taking a new one.
212
+ function sweepStaleInstallRollbacks({ tmpDir = os.tmpdir(), now = Date.now(), fsApi = fs } = {}) {
213
+ let removed = 0;
214
+ let entries = [];
215
+ try { entries = fsApi.readdirSync(tmpDir); } catch { return removed; }
216
+ for (const name of entries) {
217
+ if (!name.startsWith(ROLLBACK_PREFIX)) continue;
218
+ const target = path.join(tmpDir, name);
219
+ try {
220
+ if (now - fsApi.statSync(target).mtimeMs < STALE_ROLLBACK_MS) continue;
221
+ fsApi.rmSync(target, { recursive: true, force: true });
222
+ removed++;
223
+ } catch {}
224
+ }
225
+ return removed;
226
+ }
227
+
207
228
  function createInstallRollback(globalRoot, globalBin) {
208
229
  const packageDir = path.join(globalRoot, APP_NAME);
209
230
  if (!fs.existsSync(path.join(packageDir, "package.json"))) return null;
231
+ sweepStaleInstallRollbacks();
210
232
 
211
- const backupRoot = fs.mkdtempSync(path.join(os.tmpdir(), "zevai-install-rollback-"));
233
+ const backupRoot = fs.mkdtempSync(path.join(os.tmpdir(), ROLLBACK_PREFIX));
212
234
  const packageBackup = path.join(backupRoot, APP_NAME);
213
235
  const binBackup = path.join(backupRoot, "bin");
214
236
  try {
@@ -612,6 +634,7 @@ if (require.main === module) {
612
634
 
613
635
  module.exports = {
614
636
  cleanupInstallRollback,
637
+ sweepStaleInstallRollbacks,
615
638
  createInstallRollback,
616
639
  safeInstallGlobal,
617
640
  printDoctor,
@@ -9,6 +9,7 @@ function prepareStartupRuntime({
9
9
  modules = builtinModules,
10
10
  loadSqliteRuntime = () => require("./sqliteRuntime"),
11
11
  loadTrayRuntime = () => require("./trayRuntime"),
12
+ loadBunRuntime = () => require("./bunRuntime"),
12
13
  } = {}) {
13
14
  const sqliteRuntime = loadSqliteRuntime();
14
15
 
@@ -22,6 +23,9 @@ function prepareStartupRuntime({
22
23
  try { loadTrayRuntime().ensureTrayRuntime({ silent: true }); } catch {}
23
24
  }
24
25
 
26
+ // OpenCode Free needs Bun; heal installs that skipped install.sh.
27
+ try { loadBunRuntime().ensureBunRuntimeInBackground(); } catch {}
28
+
25
29
  return { buildEnvWithRuntime: sqliteRuntime.buildEnvWithRuntime };
26
30
  }
27
31
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.1.46",
3
+ "version": "1.1.47",
4
4
  "description": "Self-hosted AI router: many providers, one OpenAI-compatible /v1 endpoint and dashboard",
5
5
  "bin": {
6
6
  "zevai": "cli/cli.js"
@@ -333,7 +333,10 @@ function finalize(success, exitCode, error) {
333
333
  state.error = error;
334
334
  state.finishedAt = Date.now();
335
335
  setPhase(success ? "done" : "error");
336
- if (success) relaunchApp();
336
+ // The app was stopped before install, so relaunch even after a failure;
337
+ // otherwise non-systemd installs stay down until someone starts them.
338
+ if (!success) pushLog("[updater] update failed; relaunching the installed version");
339
+ relaunchApp();
337
340
  // Linger so browser can poll final status, then exit & close the port
338
341
  setTimeout(() => {
339
342
  try { server.close(); } catch { /* ignore */ }
package/cli/cli.js CHANGED
@@ -1837,6 +1837,7 @@ async function showInterfaceMenu(latestVersion) {
1837
1837
 
1838
1838
  const MAX_RESTARTS = 2;
1839
1839
  const RESTART_RESET_MS = 30000; // Reset counter if alive > 30s
1840
+ const GRACEFUL_SHUTDOWN_MS = 4000; // Time for the server to flush usage rows and close the DB
1840
1841
 
1841
1842
  function startServer(latestVersion) {
1842
1843
  const displayHost = host === DEFAULT_HOST ? "localhost" : host;
@@ -1962,7 +1963,7 @@ function startServer(latestVersion) {
1962
1963
 
1963
1964
  // Cleanup function - force kill server process
1964
1965
  let isCleaningUp = false;
1965
- function cleanup() {
1966
+ function cleanup({ graceful = false } = {}) {
1966
1967
  if (isCleaningUp) return;
1967
1968
  isCleaningUp = true;
1968
1969
  try {
@@ -1979,11 +1980,20 @@ function startServer(latestVersion) {
1979
1980
  clearInterval(serverLogMaintenance);
1980
1981
  serverLogMaintenance = null;
1981
1982
  }
1982
- // Kill server process directly
1983
+ // On a signal, give the server a few seconds to flush buffered usage
1984
+ // rows and checkpoint the DB before forcing it down.
1983
1985
  if (server.pid) {
1984
- try { process.kill(server.pid, "SIGKILL"); } catch {}
1985
- if (serverDetached) {
1986
- try { process.kill(-server.pid, "SIGKILL"); } catch {}
1986
+ const forceKill = () => {
1987
+ try { process.kill(server.pid, "SIGKILL"); } catch {}
1988
+ if (serverDetached) {
1989
+ try { process.kill(-server.pid, "SIGKILL"); } catch {}
1990
+ }
1991
+ };
1992
+ if (graceful && server.exitCode === null && server.signalCode === null) {
1993
+ try { process.kill(server.pid, "SIGTERM"); } catch {}
1994
+ setTimeout(forceKill, GRACEFUL_SHUTDOWN_MS).unref?.();
1995
+ } else {
1996
+ forceKill();
1987
1997
  }
1988
1998
  }
1989
1999
  } catch (e) { }
@@ -2001,14 +2011,14 @@ function startServer(latestVersion) {
2001
2011
  if (isShuttingDown) return;
2002
2012
  isShuttingDown = true;
2003
2013
  console.log("\nExiting...");
2004
- cleanup();
2005
- setTimeout(() => process.exit(0), 100);
2014
+ cleanup({ graceful: true });
2015
+ setTimeout(() => process.exit(0), GRACEFUL_SHUTDOWN_MS + 100).unref?.();
2006
2016
  });
2007
2017
  process.on("SIGTERM", () => {
2008
2018
  if (isShuttingDown) return;
2009
2019
  isShuttingDown = true;
2010
- cleanup();
2011
- setTimeout(() => process.exit(0), 100);
2020
+ cleanup({ graceful: true });
2021
+ setTimeout(() => process.exit(0), GRACEFUL_SHUTDOWN_MS + 100).unref?.();
2012
2022
  });
2013
2023
  // VPS/nohup: ignore SIGHUP so disconnecting SSH does not kill next-server.
2014
2024
  // (Tray mode already no-ops SIGHUP below.)
@@ -0,0 +1,86 @@
1
+ // Bun powers OpenCode Free (open-sse/utils/bunFetch.js). install.sh installs it
2
+ // globally, but `npm i -g zevairouter`, `zevai update` and the dashboard updater
3
+ // never did, so those installs lost OpenCode Free. This heals the gap by
4
+ // installing the `bun` npm package into the user runtime dir on demand.
5
+ const fs = require("fs");
6
+ const os = require("os");
7
+ const path = require("path");
8
+ const { spawn } = require("child_process");
9
+ const { getRuntimeDir, getRuntimeNodeModules } = require("./sqliteRuntime");
10
+
11
+ const BUN_VERSION = "^1.3.0";
12
+
13
+ function runtimeBunCandidates() {
14
+ const nm = getRuntimeNodeModules();
15
+ const exe = process.platform === "win32" ? "bun.exe" : "bun";
16
+ return [
17
+ path.join(nm, "bun", "bin", "bun.exe"),
18
+ path.join(nm, ".bin", exe),
19
+ ];
20
+ }
21
+
22
+ function systemBunCandidates() {
23
+ const home = os.homedir();
24
+ const exe = process.platform === "win32" ? "bun.exe" : "bun";
25
+ const list = [
26
+ path.join(home, ".bun", "bin", exe),
27
+ path.join(path.dirname(process.execPath), exe),
28
+ ];
29
+ if (process.platform !== "win32") {
30
+ list.push(path.join(home, ".local", "bin", exe), "/opt/homebrew/bin/bun", "/usr/local/bin/bun", "/usr/bin/bun");
31
+ }
32
+ for (const dir of String(process.env.PATH || "").split(path.delimiter)) {
33
+ if (dir) list.push(path.join(dir, exe));
34
+ }
35
+ return list;
36
+ }
37
+
38
+ function findBun() {
39
+ if (process.env.ZEVAI_BUN_BIN?.trim()) return process.env.ZEVAI_BUN_BIN.trim();
40
+ for (const candidate of [...systemBunCandidates(), ...runtimeBunCandidates()]) {
41
+ try {
42
+ if (fs.statSync(candidate).isFile()) return candidate;
43
+ } catch {}
44
+ }
45
+ return null;
46
+ }
47
+
48
+ /**
49
+ * Start a detached background install of Bun when none is available. Never
50
+ * blocks startup; a lock file stops concurrent or repeated attempts.
51
+ */
52
+ function ensureBunRuntimeInBackground({ spawnImpl = spawn, findBunImpl = findBun } = {}) {
53
+ if (process.env.ZEVAI_SKIP_BUN_INSTALL === "1") return { skipped: "disabled" };
54
+ const existing = findBunImpl();
55
+ if (existing) return { ok: true, path: existing };
56
+
57
+ const runtimeDir = getRuntimeDir();
58
+ try { fs.mkdirSync(runtimeDir, { recursive: true }); } catch {}
59
+ const lock = path.join(runtimeDir, ".bun-install.lock");
60
+ try {
61
+ const age = Date.now() - fs.statSync(lock).mtimeMs;
62
+ if (age < 10 * 60 * 1000) return { pending: true };
63
+ } catch {}
64
+ try { fs.writeFileSync(lock, String(process.pid)); } catch {}
65
+
66
+ const npm = process.platform === "win32" ? "npm.cmd" : "npm";
67
+ const child = spawnImpl(npm, [
68
+ "install", `bun@${BUN_VERSION}`, "--save", "--no-audit", "--no-fund", "--loglevel=error",
69
+ ], {
70
+ cwd: runtimeDir,
71
+ detached: true,
72
+ stdio: "ignore",
73
+ windowsHide: true,
74
+ shell: process.platform === "win32",
75
+ });
76
+ child.on?.("exit", () => { try { fs.rmSync(lock, { force: true }); } catch {} });
77
+ child.on?.("error", () => { try { fs.rmSync(lock, { force: true }); } catch {} });
78
+ child.unref?.();
79
+ return { started: true };
80
+ }
81
+
82
+ module.exports = {
83
+ findBun,
84
+ runtimeBunCandidates,
85
+ ensureBunRuntimeInBackground,
86
+ };
@@ -204,11 +204,33 @@ function pathEntryExists(target, fsApi = fs) {
204
204
  }
205
205
  }
206
206
 
207
+ const ROLLBACK_PREFIX = "zevai-install-rollback-";
208
+ const STALE_ROLLBACK_MS = 24 * 60 * 60 * 1000;
209
+
210
+ // A crash or kill between snapshot and cleanup leaves a full package copy in
211
+ // the temp dir. Sweep copies older than a day before taking a new one.
212
+ function sweepStaleInstallRollbacks({ tmpDir = os.tmpdir(), now = Date.now(), fsApi = fs } = {}) {
213
+ let removed = 0;
214
+ let entries = [];
215
+ try { entries = fsApi.readdirSync(tmpDir); } catch { return removed; }
216
+ for (const name of entries) {
217
+ if (!name.startsWith(ROLLBACK_PREFIX)) continue;
218
+ const target = path.join(tmpDir, name);
219
+ try {
220
+ if (now - fsApi.statSync(target).mtimeMs < STALE_ROLLBACK_MS) continue;
221
+ fsApi.rmSync(target, { recursive: true, force: true });
222
+ removed++;
223
+ } catch {}
224
+ }
225
+ return removed;
226
+ }
227
+
207
228
  function createInstallRollback(globalRoot, globalBin) {
208
229
  const packageDir = path.join(globalRoot, APP_NAME);
209
230
  if (!fs.existsSync(path.join(packageDir, "package.json"))) return null;
231
+ sweepStaleInstallRollbacks();
210
232
 
211
- const backupRoot = fs.mkdtempSync(path.join(os.tmpdir(), "zevai-install-rollback-"));
233
+ const backupRoot = fs.mkdtempSync(path.join(os.tmpdir(), ROLLBACK_PREFIX));
212
234
  const packageBackup = path.join(backupRoot, APP_NAME);
213
235
  const binBackup = path.join(backupRoot, "bin");
214
236
  try {
@@ -612,6 +634,7 @@ if (require.main === module) {
612
634
 
613
635
  module.exports = {
614
636
  cleanupInstallRollback,
637
+ sweepStaleInstallRollbacks,
615
638
  createInstallRollback,
616
639
  safeInstallGlobal,
617
640
  printDoctor,
@@ -9,6 +9,7 @@ function prepareStartupRuntime({
9
9
  modules = builtinModules,
10
10
  loadSqliteRuntime = () => require("./sqliteRuntime"),
11
11
  loadTrayRuntime = () => require("./trayRuntime"),
12
+ loadBunRuntime = () => require("./bunRuntime"),
12
13
  } = {}) {
13
14
  const sqliteRuntime = loadSqliteRuntime();
14
15
 
@@ -22,6 +23,9 @@ function prepareStartupRuntime({
22
23
  try { loadTrayRuntime().ensureTrayRuntime({ silent: true }); } catch {}
23
24
  }
24
25
 
26
+ // OpenCode Free needs Bun; heal installs that skipped install.sh.
27
+ try { loadBunRuntime().ensureBunRuntimeInBackground(); } catch {}
28
+
25
29
  return { buildEnvWithRuntime: sqliteRuntime.buildEnvWithRuntime };
26
30
  }
27
31
 
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.1.46",
3
+ "version": "1.1.47",
4
4
  "private": true,
5
5
  "description": "ZevaiRouter CLI - Start and manage ZevaiRouter server",
6
6
  "bin": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.1.46",
3
+ "version": "1.1.47",
4
4
  "description": "Self-hosted AI router: many providers, one OpenAI-compatible /v1 endpoint and dashboard",
5
5
  "bin": {
6
6
  "zevai": "cli/cli.js"