zevairouter 1.0.93 → 1.0.95

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 (320) hide show
  1. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  2. package/cli/app/.next-cli-build/app-path-routes-manifest.json +7 -7
  3. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  4. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  32. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  33. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  39. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  41. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  42. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  43. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  44. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  45. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  47. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  48. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  58. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  62. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  63. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  64. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  65. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  66. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  67. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  69. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  70. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  71. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  72. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  73. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  74. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  75. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  76. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  78. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  79. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  80. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  81. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  82. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  83. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  84. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  85. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  86. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  87. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  88. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  89. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  90. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  91. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  92. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  93. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  94. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  95. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  96. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  97. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  98. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  99. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  100. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  101. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  102. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  103. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  104. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  105. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  106. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  107. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  108. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  109. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  110. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  111. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  112. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  113. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  114. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  115. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  116. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  117. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  118. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  119. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  120. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  121. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  122. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  123. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  124. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  125. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  126. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  127. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  128. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  129. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  130. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  131. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  132. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  133. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  134. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  135. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  136. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  137. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  138. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  139. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  140. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  141. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  142. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  143. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  144. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  145. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  146. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  147. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  148. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  149. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  150. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  151. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  152. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  153. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  154. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  155. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  156. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  157. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  158. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  159. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  160. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  161. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  162. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  163. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  164. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  165. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  166. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  167. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  168. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  169. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  170. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  171. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  172. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  173. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  174. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  175. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  176. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  177. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  178. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  179. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  180. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  181. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  182. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  183. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  184. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  185. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  186. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  187. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  188. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  189. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  190. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  191. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  192. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  193. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  194. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  195. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  196. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  197. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  198. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  199. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  200. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  201. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  202. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  203. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  204. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  205. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  206. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  207. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  208. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  209. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  210. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  211. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  212. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  213. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  214. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  215. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  216. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  217. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  218. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  220. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  221. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  222. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  223. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  224. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  225. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  226. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  227. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  228. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  229. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  230. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  231. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  232. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  233. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  234. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  235. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  236. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  237. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  238. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  239. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  240. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  241. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  242. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  243. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  244. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  245. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  246. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  247. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  248. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  249. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  251. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  252. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  253. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  254. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  255. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  256. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  257. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  258. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  259. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  260. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  261. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  262. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  263. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  264. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  265. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  266. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  267. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  268. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  269. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  270. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  271. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  272. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  273. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  274. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  275. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  276. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  277. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  278. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  279. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  280. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  281. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  282. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  283. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  284. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  285. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  286. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  287. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  288. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  289. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  290. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  291. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  292. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  293. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  294. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  295. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  296. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  297. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  298. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  299. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  300. package/cli/app/.next-cli-build/server/app-paths-manifest.json +7 -7
  301. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  302. package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
  303. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  304. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  305. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  306. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  307. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  308. package/cli/app/.next-cli-build/static/chunks/{3702-a9d48ed3afa2d5fd.js → 3702-2d50219fb7c4dcfd.js} +1 -1
  309. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  310. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  311. package/cli/app/package.json +1 -1
  312. package/cli/app/src/lib/updater/updater.js +100 -8
  313. package/cli/cli.js +131 -11
  314. package/cli/package.json +1 -1
  315. package/package.json +1 -1
  316. package/src/app/api/version/route.js +14 -2
  317. package/src/lib/appUpdater.js +8 -4
  318. package/src/lib/updater/updater.js +100 -8
  319. /package/cli/app/.next-cli-build/static/{cHK1E1W2f05Bp9LKjAKXv → pJ5rFHQG90391nAOFCHiM}/_buildManifest.js +0 -0
  320. /package/cli/app/.next-cli-build/static/{cHK1E1W2f05Bp9LKjAKXv → pJ5rFHQG90391nAOFCHiM}/_ssgManifest.js +0 -0
package/cli/cli.js CHANGED
@@ -123,12 +123,16 @@ Options:
123
123
  --force-restart Kill existing instance and start a new one (default: attach if healthy)
124
124
  --doctor Show install paths (Node/npm/global) + dual-install hints
125
125
  --fix-install Repair/reinstall global package for THIS Node (ENOTEMPTY-safe)
126
+ update [--to X.Y.Z] Force update + restart (VPS: systemctl, desktop: relaunch)
126
127
  -h, --help Show this help message
127
128
  -v, --version Show version
128
129
 
129
- One-shot install (any device):
130
- macOS/Linux: curl -fsSL https://raw.githubusercontent.com/Verifiedlabs/zevairouter/main/install.sh | bash
131
- Windows: irm https://raw.githubusercontent.com/Verifiedlabs/zevairouter/main/install.ps1 | iex
130
+ Update (simple — same Node as this zevai, restarts service):
131
+ zevai update
132
+ zevai update --to 1.0.93
133
+
134
+ One-shot install / reinstall (any device):
135
+ curl -fsSL https://gist.githubusercontent.com/Verifiedlabs/7fe0ab16692acbacd1b471d2c1bbd09b/raw/install.sh | bash
132
136
  `);
133
137
  process.exit(0);
134
138
  } else if (args[i] === "--version" || args[i] === "-v") {
@@ -142,30 +146,128 @@ One-shot install (any device):
142
146
  process.exit(1);
143
147
  }
144
148
  process.exit(0);
145
- } else if (args[i] === "--fix-install") {
149
+ } else if (args[i] === "--fix-install" || args[i] === "update" || args[i] === "--update") {
150
+ // `zevai update` — one command, same as 9router simplicity.
151
+ // Force-clean global install + restart systemd (VPS) or relaunch process.
146
152
  try {
147
153
  const { safeInstallGlobal } = require("./hooks/safeGlobalInstall");
148
- const { spawn } = require("child_process");
154
+ const { spawn, execFileSync } = require("child_process");
149
155
  const fs = require("fs");
150
156
  const path = require("path");
151
157
  const verIdx = args.indexOf("--to");
152
158
  const version = verIdx >= 0 && args[verIdx + 1] ? args[verIdx + 1] : "latest";
153
159
  const wasTray = process.argv.includes("--tray") || process.env.TRAY_MODE === "1";
160
+ console.log(`\nUpdating zevairouter@${version}…`);
154
161
  const result = safeInstallGlobal({ version, forceClean: true });
155
162
  if (!result.ok) {
156
163
  console.error(result.error || "install failed");
157
164
  process.exit(1);
158
165
  }
159
- console.log(`\nInstalled zevairouter@${result.version || version}`);
166
+ console.log(`\n✓ Installed zevairouter@${result.version || version}`);
167
+ console.log(` binary: ${result.zevaiPath || "zevai"}`);
160
168
 
161
169
  // Relaunch new binary detached, then exit this process so the new build loads.
162
170
  if (process.env.ZEVAI_SKIP_RESTART === "1") {
163
171
  console.log(`Restart skipped (ZEVAI_SKIP_RESTART=1). Run: zevai`);
164
172
  process.exit(0);
165
173
  }
174
+
175
+ // VPS: rewrite systemd unit to THIS Node + zevai, hard-stop old processes, restart.
176
+ // Without rewrite, unit can keep pointing at /usr/bin while nvm got the new package
177
+ // → currentVersion jumps but buildVersion stays on the old Next bundle.
178
+ if (process.platform === "linux" && process.getuid && process.getuid() === 0) {
179
+ const { execSync } = require("child_process");
180
+ const unitName = "zevairouter.service";
181
+ const unitPath = `/etc/systemd/system/${unitName}`;
182
+ const nodeBin = result.nodePath || process.execPath;
183
+ const nodeDir = path.dirname(nodeBin);
184
+ const zevaiBin = result.zevaiPath
185
+ || path.join(result.globalBin || path.dirname(nodeBin), "zevai");
186
+ const cliJs = result.globalRoot
187
+ ? path.join(result.globalRoot, "zevairouter", "cli", "cli.js")
188
+ : null;
189
+ const port = process.env.PORT || "1997";
190
+ // Prefer `node cli.js` over shim so the unit always runs the package we just installed.
191
+ const execStart = cliJs && fs.existsSync(cliJs)
192
+ ? `${nodeBin} ${cliJs} --port ${port} --no-browser --skip-update --log`
193
+ : `${nodeBin} ${zevaiBin} --port ${port} --no-browser --skip-update --log`;
194
+
195
+ try {
196
+ const unitBody = `[Unit]
197
+ Description=ZevaiRouter
198
+ After=network-online.target
199
+ Wants=network-online.target
200
+
201
+ [Service]
202
+ Type=simple
203
+ User=root
204
+ WorkingDirectory=/root
205
+ Environment="PATH=${nodeDir}:/usr/local/bin:/usr/bin:/bin"
206
+ Environment="PORT=${port}"
207
+ Environment="HOSTNAME=0.0.0.0"
208
+ Environment="DISPLAY=:99"
209
+ Environment="ZEVAI_MINIMAL_POSTINSTALL=1"
210
+ Environment="ZEVAI_SERVER_MODE=1"
211
+ Environment="ZEVAI_MAX_OLD_SPACE_SIZE=1536"
212
+ MemoryMax=2G
213
+ MemorySwapMax=0
214
+ ExecStartPre=/bin/bash -c "pgrep -x Xvfb >/dev/null || (Xvfb :99 -screen 0 1280x900x24 -ac -nolisten tcp >/var/log/xvfb-zevai.log 2>&1 & sleep 0.8)"
215
+ ExecStart=${execStart}
216
+ Restart=always
217
+ RestartSec=3
218
+ StandardOutput=append:/var/log/zevairouter.log
219
+ StandardError=append:/var/log/zevairouter.log
220
+
221
+ [Install]
222
+ WantedBy=multi-user.target
223
+ `;
224
+ fs.writeFileSync(unitPath, unitBody);
225
+ console.log(`Wrote ${unitPath}`);
226
+ console.log(` ExecStart=${execStart}`);
227
+ try { execFileSync("systemctl", ["stop", unitName], { stdio: "ignore", timeout: 15000 }); } catch { /* ignore */ }
228
+ // Kill any leftover (old nvm / tray / orphan) so port is free.
229
+ try {
230
+ execSync("pkill -f 'zevairouter/cli/cli.js' 2>/dev/null || true; pkill -f '/bin/zevai' 2>/dev/null || true", {
231
+ stdio: "ignore",
232
+ timeout: 5000,
233
+ });
234
+ } catch { /* ignore */ }
235
+ execFileSync("systemctl", ["daemon-reload"], { stdio: "ignore", timeout: 10000 });
236
+ execFileSync("systemctl", ["enable", unitName], { stdio: "ignore", timeout: 10000 });
237
+ console.log(`Starting ${unitName}…`);
238
+ execFileSync("systemctl", ["restart", unitName], { stdio: "inherit", timeout: 30000 });
239
+
240
+ let live = null;
241
+ for (let i = 0; i < 20; i++) {
242
+ execSync("sleep 1");
243
+ try {
244
+ const out = execSync(`curl -sS -m 2 http://127.0.0.1:${port}/api/version`, { encoding: "utf8" });
245
+ live = JSON.parse(out);
246
+ break;
247
+ } catch { /* wait */ }
248
+ }
249
+ if (live) {
250
+ console.log(`✓ Live: ${JSON.stringify(live)}`);
251
+ if (live.buildVersion && live.installedVersion && live.buildVersion !== live.installedVersion) {
252
+ console.warn(`! buildVersion (${live.buildVersion}) != installed (${live.installedVersion})`);
253
+ console.warn(" Still mixed install — check: systemctl cat zevairouter | grep ExecStart");
254
+ console.warn(" and: ls -la $(npm root -g)/zevairouter/package.json");
255
+ } else {
256
+ console.log(`✓ Version consistent: ${live.currentVersion}`);
257
+ }
258
+ process.exit(0);
259
+ }
260
+ console.warn("Service started but /api/version not responding yet.");
261
+ console.log(`Check: journalctl -u ${unitName} -n 40 --no-pager`);
262
+ process.exit(0);
263
+ } catch (e) {
264
+ console.warn(`systemd path failed (${e.message}) — falling back to direct relaunch`);
265
+ }
266
+ }
267
+
166
268
  const relaunchArgs = wasTray
167
269
  ? ["--tray", "--skip-update"]
168
- : ["--port", process.env.PORT || "1997", "--no-browser", "--skip-update"];
270
+ : ["--port", process.env.PORT || "1997", "--no-browser", "--skip-update", "--log"];
169
271
  try {
170
272
  const logDir = path.join(process.env.HOME || process.env.USERPROFILE || ".", ".zevai", "logs");
171
273
  fs.mkdirSync(logDir, { recursive: true });
@@ -179,13 +281,21 @@ One-shot install (any device):
179
281
  ? spawn(process.execPath, [cliEntry, ...relaunchArgs], {
180
282
  detached: true,
181
283
  stdio: ["ignore", out, out],
182
- env: { ...process.env, TRAY_MODE: wasTray ? "1" : process.env.TRAY_MODE },
284
+ env: {
285
+ ...process.env,
286
+ TRAY_MODE: wasTray ? "1" : "",
287
+ ZEVAI_SERVER_MODE: wasTray ? "" : "1",
288
+ },
183
289
  })
184
290
  : spawn(result.zevaiPath || "zevai", relaunchArgs, {
185
291
  detached: true,
186
292
  stdio: ["ignore", out, out],
187
293
  shell: process.platform === "win32",
188
- env: { ...process.env, TRAY_MODE: wasTray ? "1" : process.env.TRAY_MODE },
294
+ env: {
295
+ ...process.env,
296
+ TRAY_MODE: wasTray ? "1" : "",
297
+ ZEVAI_SERVER_MODE: wasTray ? "" : "1",
298
+ },
189
299
  });
190
300
  child.unref();
191
301
  console.log(`Restarting ${wasTray ? "tray" : "server"}… (log ${logFile})`);
@@ -197,14 +307,24 @@ One-shot install (any device):
197
307
  // Exit soon so :1997 is free for the new process.
198
308
  setTimeout(() => process.exit(0), 500);
199
309
  } catch (e) {
200
- console.error("fix-install failed:", e.message);
310
+ console.error("update failed:", e.message);
201
311
  process.exit(1);
202
312
  }
203
313
  }
204
314
  }
205
315
 
206
316
  // Auto-relaunch after update: detached process has no TTY → fallback to tray
207
- if (skipUpdate && !trayMode && !process.stdin.isTTY) {
317
+ // ONLY for desktop/tray flows. VPS server mode must stay server.
318
+ if (
319
+ skipUpdate
320
+ && !trayMode
321
+ && !process.stdin.isTTY
322
+ && process.env.ZEVAI_SERVER_MODE !== "1"
323
+ && !process.env.PORT
324
+ && process.env.TRAY_MODE !== "0"
325
+ ) {
326
+ // Heuristic: systemd / nohup restarts often set PORT or ZEVAI_SERVER_MODE.
327
+ // If neither is set and no TTY, assume desktop tray (legacy 9router behaviour).
208
328
  trayMode = true;
209
329
  process.env.TRAY_MODE = "1";
210
330
  }
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.0.93",
3
+ "version": "1.0.95",
4
4
  "description": "ZevaiRouter CLI - Start and manage ZevaiRouter server",
5
5
  "bin": {
6
6
  "zevai": "./cli.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.93",
3
+ "version": "1.0.95",
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"
@@ -156,16 +156,25 @@ function resolveInstalledVersion() {
156
156
  }
157
157
 
158
158
  export async function GET() {
159
- const buildVersion = typeof pkg?.version === "string" ? pkg.version : null;
159
+ // Webpack-inlined at `next build` time (can lag if an old process is still up).
160
+ const webpackBuildVersion = typeof pkg?.version === "string" ? pkg.version : null;
160
161
  const installedVersion = resolveInstalledVersion();
161
162
  // What the dashboard should treat as "this server": prefer disk install, then build
162
- const currentVersion = installedVersion || buildVersion || "0.0.0";
163
+ const currentVersion = installedVersion || webpackBuildVersion || "0.0.0";
164
+ // Expose webpack embed as buildVersion for diagnostics; UI should use currentVersion.
165
+ const buildVersion = webpackBuildVersion;
163
166
 
164
167
  const latestVersion = await fetchLatestVersion();
165
168
  const hasUpdate = latestVersion
166
169
  ? compareVersions(latestVersion, currentVersion) > 0
167
170
  : false;
168
171
 
172
+ const buildMismatch = Boolean(
173
+ installedVersion
174
+ && webpackBuildVersion
175
+ && installedVersion !== webpackBuildVersion,
176
+ );
177
+
169
178
  return Response.json(
170
179
  {
171
180
  currentVersion,
@@ -173,6 +182,9 @@ export async function GET() {
173
182
  buildVersion,
174
183
  latestVersion,
175
184
  hasUpdate,
185
+ // true when package.json is new but the running Next bundle is old
186
+ // (usually: systemd still on a different Node path, or process not fully restarted)
187
+ buildMismatch,
176
188
  },
177
189
  {
178
190
  headers: {
@@ -169,10 +169,12 @@ export function spawnUpdaterAndExit(packageName = UPDATER_CONFIG.npmPackageName)
169
169
  const updaterPath = ensureRuntimeUpdater(resolveBundledUpdaterPath());
170
170
  const isTray = process.env.TRAY_MODE === "1";
171
171
  const relaunch = resolveRelaunchCommand();
172
- // Relaunch matching original env: tray stays tray, foreground stays foreground
172
+ // Relaunch matching original env: tray stays tray; server stays server
173
+ // (must pass --port/--no-browser so VPS doesn't flip into tray via no-TTY).
174
+ const appPort = String(process.env.PORT || UPDATER_CONFIG.appPort || 1997);
173
175
  const relaunchArgs = isTray
174
176
  ? [...relaunch.args, "--tray", "--skip-update"]
175
- : [...relaunch.args, "--skip-update"];
177
+ : [...relaunch.args, "--port", appPort, "--no-browser", "--skip-update", "--log"];
176
178
 
177
179
  spawn(process.execPath, [updaterPath], {
178
180
  detached: true,
@@ -180,7 +182,8 @@ export function spawnUpdaterAndExit(packageName = UPDATER_CONFIG.npmPackageName)
180
182
  windowsHide: true,
181
183
  env: {
182
184
  ...process.env,
183
- UPDATER_PKG_NAME: packageName,
185
+ // Always npm package name — never the CLI bin name "zevai".
186
+ UPDATER_PKG_NAME: packageName || "zevairouter",
184
187
  UPDATER_PORT: String(UPDATER_CONFIG.statusPort),
185
188
  UPDATER_TAIL_LINES: String(UPDATER_CONFIG.statusLogTailLines),
186
189
  UPDATER_RETRIES: String(UPDATER_CONFIG.installRetries),
@@ -189,10 +192,11 @@ export function spawnUpdaterAndExit(packageName = UPDATER_CONFIG.npmPackageName)
189
192
  UPDATER_WAIT_MIN_MS: String(UPDATER_CONFIG.waitForExitMinMs),
190
193
  UPDATER_WAIT_MAX_MS: String(UPDATER_CONFIG.waitForExitMaxMs),
191
194
  UPDATER_WAIT_CHECK_MS: String(UPDATER_CONFIG.waitForExitCheckMs),
192
- UPDATER_APP_PORT: String(UPDATER_CONFIG.appPort),
195
+ UPDATER_APP_PORT: appPort,
193
196
  UPDATER_RELAUNCH: "1",
194
197
  UPDATER_RELAUNCH_CMD: relaunch.cmd,
195
198
  UPDATER_RELAUNCH_ARGS: JSON.stringify(relaunchArgs),
199
+ ZEVAI_SERVER_MODE: isTray ? "" : "1",
196
200
  },
197
201
  }).unref();
198
202
 
@@ -9,7 +9,8 @@ const path = require("path");
9
9
  const fs = require("fs");
10
10
  const os = require("os");
11
11
 
12
- const packageName = process.env.UPDATER_PKG_NAME || "zevai";
12
+ // Must be npm package name (zevairouter), NOT the CLI bin (zevai).
13
+ const packageName = process.env.UPDATER_PKG_NAME || "zevairouter";
13
14
  const port = parseInt(process.env.UPDATER_PORT || "20129", 10);
14
15
  const tailLines = parseInt(process.env.UPDATER_TAIL_LINES || "8", 10);
15
16
  const maxRetries = parseInt(process.env.UPDATER_RETRIES || "3", 10);
@@ -128,19 +129,72 @@ function sleep(ms) {
128
129
  return new Promise((r) => setTimeout(r, ms));
129
130
  }
130
131
 
132
+ function resolveSafeInstallHook() {
133
+ const candidates = [
134
+ path.join(path.dirname(process.execPath), "..", "lib", "node_modules", "zevairouter", "cli", "hooks", "safeGlobalInstall.js"),
135
+ path.join("/usr/lib/node_modules/zevairouter/cli/hooks/safeGlobalInstall.js"),
136
+ path.join("/usr/local/lib/node_modules/zevairouter/cli/hooks/safeGlobalInstall.js"),
137
+ path.join("/opt/homebrew/lib/node_modules/zevairouter/cli/hooks/safeGlobalInstall.js"),
138
+ ...String(process.env.NODE_PATH || "")
139
+ .split(path.delimiter)
140
+ .filter(Boolean)
141
+ .map((p) => path.join(p, "zevairouter", "cli", "hooks", "safeGlobalInstall.js")),
142
+ ];
143
+ try {
144
+ const { createRequire } = require("module");
145
+ const req = createRequire(path.join(process.cwd(), "package.json"));
146
+ candidates.unshift(req.resolve("zevairouter/cli/hooks/safeGlobalInstall.js"));
147
+ } catch { /* ignore */ }
148
+ // Updater itself may live next to a package tree under ~/.zevai
149
+ try {
150
+ const dataDir = getDataDir();
151
+ candidates.push(
152
+ path.join(dataDir, "runtime", "node_modules", "zevairouter", "cli", "hooks", "safeGlobalInstall.js"),
153
+ );
154
+ } catch { /* ignore */ }
155
+
156
+ for (const p of candidates) {
157
+ try {
158
+ if (p && fs.existsSync(p)) return p;
159
+ } catch { /* next */ }
160
+ }
161
+ return null;
162
+ }
163
+
131
164
  function runInstall() {
132
165
  state.attempt += 1;
133
166
  setPhase("installing");
134
- pushLog(`[updater] attempt ${state.attempt}/${maxRetries} npm i -g ${packageName} --prefer-online`);
167
+ // Force-clean path (ENOTEMPTY-safe) like `zevai update` / install.sh.
168
+ // Plain `npm i -g` often leaves the old build running or fails half-way on VPS.
169
+ const pkgSpec = packageName.includes("@") ? packageName : `${packageName}@latest`;
170
+ pushLog(`[updater] attempt ${state.attempt}/${maxRetries} — safe install ${pkgSpec}`);
135
171
 
136
172
  const isWin = process.platform === "win32";
137
- const cmd = isWin ? "npm.cmd" : "npm";
138
- const args = ["i", "-g", packageName, "--prefer-online"];
173
+ const hook = resolveSafeInstallHook();
174
+
175
+ let cmd;
176
+ let args;
177
+ if (hook) {
178
+ cmd = process.execPath;
179
+ args = [hook, "--latest"];
180
+ pushLog(`[updater] using safeGlobalInstall: ${hook}`);
181
+ } else {
182
+ cmd = isWin ? "npm.cmd" : "npm";
183
+ // Explicit @latest — never install a phantom "zevai" package.
184
+ args = ["i", "-g", pkgSpec, "--prefer-online"];
185
+ pushLog(`[updater] safe hook missing — fallback npm ${args.join(" ")}`);
186
+ }
139
187
 
140
188
  const child = spawn(cmd, args, {
141
189
  stdio: ["ignore", "pipe", "pipe"],
142
190
  windowsHide: true,
143
- shell: isWin,
191
+ shell: isWin && !hook,
192
+ env: {
193
+ ...process.env,
194
+ npm_config_fund: "false",
195
+ npm_config_audit: "false",
196
+ npm_config_update_notifier: "false",
197
+ },
144
198
  });
145
199
 
146
200
  child.stdout.on("data", (buf) => {
@@ -158,7 +212,7 @@ function runInstall() {
158
212
  });
159
213
 
160
214
  child.on("close", (code) => {
161
- pushLog(`[updater] npm exited with code ${code}`);
215
+ pushLog(`[updater] install exited with code ${code}`);
162
216
  if (code === 0) {
163
217
  finalize(true, code, null);
164
218
  return;
@@ -195,8 +249,40 @@ async function waitForAppAndOpenBrowser() {
195
249
  pushLog(`[updater] app not responding within 30s, skip browser open`);
196
250
  }
197
251
 
252
+ function trySystemdRestart() {
253
+ if (process.platform === "win32" || process.platform === "darwin") return false;
254
+ try {
255
+ const { execFileSync } = require("child_process");
256
+ // Prefer our unit name; fall back to common aliases.
257
+ const units = ["zevairouter.service", "zevai.service"];
258
+ for (const unit of units) {
259
+ try {
260
+ execFileSync("systemctl", ["cat", unit], { stdio: "ignore", timeout: 3000 });
261
+ } catch {
262
+ continue;
263
+ }
264
+ pushLog(`[updater] restarting systemd unit ${unit}`);
265
+ execFileSync("systemctl", ["daemon-reload"], { stdio: "ignore", timeout: 10000 });
266
+ execFileSync("systemctl", ["restart", unit], { stdio: "ignore", timeout: 30000 });
267
+ pushLog(`[updater] systemctl restart ${unit} OK`);
268
+ return true;
269
+ }
270
+ } catch (e) {
271
+ pushLog(`[updater] systemd restart skipped: ${e.message}`);
272
+ }
273
+ return false;
274
+ }
275
+
198
276
  function relaunchApp() {
199
277
  if (process.env.UPDATER_RELAUNCH !== "1") return;
278
+
279
+ // VPS path: if systemd owns the service, restart that — don't spawn a second
280
+ // tray process that leaves the unit on the old binary forever.
281
+ if (trySystemdRestart()) {
282
+ waitForAppAndOpenBrowser();
283
+ return;
284
+ }
285
+
200
286
  const cmd = process.env.UPDATER_RELAUNCH_CMD;
201
287
  if (!cmd) return;
202
288
  let args = [];
@@ -208,11 +294,17 @@ function relaunchApp() {
208
294
  stdio: "ignore",
209
295
  windowsHide: true,
210
296
  shell: isWin,
211
- env: { ...process.env, UPDATER_RELAUNCH: "", UPDATER_RELAUNCH_CMD: "", UPDATER_RELAUNCH_ARGS: "" },
297
+ env: {
298
+ ...process.env,
299
+ UPDATER_RELAUNCH: "",
300
+ UPDATER_RELAUNCH_CMD: "",
301
+ UPDATER_RELAUNCH_ARGS: "",
302
+ // Prevent cli.js from flipping headless server restarts into tray mode.
303
+ ZEVAI_SERVER_MODE: args.includes("--tray") ? "" : "1",
304
+ },
212
305
  });
213
306
  child.unref();
214
307
  pushLog(`[updater] relaunched: ${cmd} ${args.join(" ")} (pid=${child.pid})`);
215
- // Wait for new app to come up, then auto-open browser so user sees the result
216
308
  waitForAppAndOpenBrowser();
217
309
  } catch (e) {
218
310
  pushLog(`[updater] relaunch failed: ${e.message}`);