zevairouter 1.0.105 → 1.0.107

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 (326) 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 +6 -6
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  33. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  39. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  40. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  41. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  42. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  43. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  44. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  45. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  47. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  48. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  49. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  62. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  63. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  64. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  65. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  66. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  67. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  69. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  70. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  71. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  72. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  73. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  74. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  75. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  76. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  77. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  78. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  79. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  80. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  81. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  82. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  83. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  84. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  85. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  86. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  87. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  88. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  89. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  90. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  91. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  92. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  93. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  94. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  95. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  96. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  97. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  98. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  99. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  100. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  101. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  102. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  103. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  104. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  105. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  106. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  107. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  108. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  109. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  110. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  111. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  112. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  113. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  114. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  115. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  116. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  117. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  118. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  119. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  120. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  121. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  122. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  123. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  124. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  125. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  126. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  127. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  128. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  129. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  130. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  131. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  132. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  133. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  134. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  135. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  136. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  137. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  138. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  139. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  140. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  141. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  142. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  143. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  144. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  145. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  146. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  147. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  148. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  149. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  150. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  151. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  152. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  153. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  154. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  155. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  156. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  157. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  158. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  159. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  160. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  161. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  162. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  163. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  164. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  165. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  166. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  167. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  168. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  169. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  170. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  171. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  172. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  173. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  174. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  175. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  176. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  177. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  178. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  179. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  180. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  181. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  182. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  183. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  184. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  185. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  186. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  187. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  188. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  189. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  190. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  191. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  192. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  193. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  194. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  195. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  196. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  197. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  198. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  199. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  200. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  201. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  202. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  203. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  204. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  205. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  206. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  207. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  208. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  209. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  210. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  211. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  212. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  213. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  214. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  215. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  216. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  217. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  218. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  219. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  220. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  221. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  222. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  223. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  224. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  225. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  226. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  227. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  228. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  229. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  230. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  231. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  232. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  233. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  234. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  235. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  236. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  237. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  238. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  239. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  240. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  241. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  242. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  243. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  244. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  245. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  246. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  247. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  248. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  249. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  250. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  251. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  252. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  253. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  254. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  255. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  256. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  257. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  258. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  259. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  260. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  261. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  262. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  263. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  264. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  265. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  266. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  267. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  268. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  269. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  270. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  271. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  272. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  273. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  274. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  275. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  276. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  277. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  278. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  279. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  280. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  281. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  282. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  283. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  284. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  285. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  286. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  287. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  288. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  289. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  290. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  291. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  292. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  293. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  294. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  295. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  296. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  297. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  298. package/cli/app/.next-cli-build/server/app-paths-manifest.json +6 -6
  299. package/cli/app/.next-cli-build/server/chunks/1939.js +1 -1
  300. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  301. package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
  302. package/cli/app/.next-cli-build/server/chunks/412.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/6457.js +1 -1
  305. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  306. package/cli/app/.next-cli-build/server/chunks/915.js +1 -1
  307. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  308. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  309. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  310. package/cli/app/.next-cli-build/static/chunks/{3702-962a084bda90238f.js → 3702-dca59cfcf6b6a6f0.js} +1 -1
  311. package/cli/app/.next-cli-build/static/chunks/5497-cd29d71de5a0d443.js +7 -0
  312. package/cli/app/CHANGELOG.md +16 -0
  313. package/cli/app/package.json +1 -1
  314. package/cli/app/src/mitm/server.js +3 -1
  315. package/cli/package.json +1 -1
  316. package/package.json +1 -1
  317. package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.js +1 -1
  318. package/src/app/api/cli-tools/opencode-settings/route.js +1 -1
  319. package/src/app/api/models/route.js +9 -5
  320. package/src/lib/db/repos/usageRepo.js +1 -1
  321. package/src/lib/tunnel/cloudflare/cloudflared.js +12 -1
  322. package/src/mitm/handlers/kiro.js +8 -1
  323. package/src/mitm/manager.js +7 -1
  324. package/cli/app/.next-cli-build/static/chunks/5497-eb7497d94439c4c1.js +0 -7
  325. /package/cli/app/.next-cli-build/static/{vT4VEIlvTRBiBLb9aTism → hGbEcU9gp0vik5yxr3nd8}/_buildManifest.js +0 -0
  326. /package/cli/app/.next-cli-build/static/{vT4VEIlvTRBiBLb9aTism → hGbEcU9gp0vik5yxr3nd8}/_ssgManifest.js +0 -0
@@ -1,3 +1,19 @@
1
+ # v1.0.107 (2026-07-20)
2
+
3
+ ## Fixes
4
+ - **Full-code audit — 6 verified bugs fixed** (multi-zone static scan + adversarial verification; every finding traced to a concrete failure path, guesses discarded):
5
+ - **Usage recent-logs always empty**: `getRecentLogs` called the async `getAdapter()` without `await`, so `db.all()` threw on a Promise and the try/catch silently returned `[]`. Both `/api/usage/logs` and `/api/usage/request-logs` now return rows (verified E2E).
6
+ - **Cloudflare Tunnel dies silently with no auto-recovery**: `killCloudflared` set `intentionalKill = true` even when no live child existed (fresh start / dead stale PID). The flag leaked across the respawn, so the next child's unexpected exit was swallowed and the watchdog respawn never fired. Flag is now armed only when a child/PID was actually killed (reproduced deterministically).
7
+ - **MITM sudo password corruption (non-ASCII)**: `decryptPassword` concatenated a `decipher.update()` Buffer with a `final("utf8")` string, mangling multi-byte UTF-8 at the chunk boundary. Now decodes once via `Buffer.concat`.
8
+ - **Model alias direction inverted in `/api/models`**: both the GET reader and PUT writer treated the KV map as `{model: alias}` when it's actually `{alias: "provider/model"}` (confirmed against the live DB). Fixed both directions.
9
+ - **Kiro MITM dropped reasoning**: `extractThinking` returned only the first `<think>` block per chunk, silently losing every block after the first. Now merges all blocks.
10
+ - **OpenCode settings showed `zevai/x` instead of `x`**: `activeModel` stripped a `^zevairouter/` prefix that is never written (the actual prefix is `zevai/`), so the replace was a no-op.
11
+
12
+ # v1.0.106 (2026-07-20)
13
+
14
+ ## Fixes
15
+ - **Usage page crash ("This page couldn't load")**: the v1.0.105 lint refactor renamed the `fitOpts` object to a module-level `FIT_OPTS` constant in `ProviderTopology.js` but missed the `fitViewOptions={fitOpts}` JSX prop, throwing `ReferenceError: fitOpts is not defined` on the usage dashboard. Fixed the remaining reference. Verified with a headless-browser repro of the crash.
16
+
1
17
  # v1.0.105 (2026-07-20)
2
18
 
3
19
  ## Security
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.105",
3
+ "version": "1.0.107",
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"
@@ -29,7 +29,9 @@ Private-MAC: `+B.digest().toHex()+`\r
29
29
  `),n.end()),s?(t.headersSent||t.writeHead(200,{"Content-Type":"text/event-stream"}),t.end(`data: ${JSON.stringify({error:{message:i.message}})}\r
30
30
  \r
31
31
  `)):(t.headersSent||t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:{message:i.message,type:"mitm_error"}})))}}_o.exports={intercept:Yc}});var Ro=F((np,wo)=>{var{err:$c}=Gt(),{fetchRouter:jc,pipeSSE:Wc}=xa(),Xc={"/chat/completions":"/v1/chat/completions","/v1/messages":"/v1/messages","/responses":"/v1/responses"};function Jc(e){for(let[t,a]of Object.entries(Xc))if(e.includes(t))return a;return"/v1/chat/completions"}async function Zc(e,t,a,r){try{let n=JSON.parse(a.toString());n.model=r;let s=Jc(e.url),i=await jc(n,s,e.headers);await Wc(i,t)}catch(n){$c(`[copilot] ${n.message}`),t.headersSent||t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:{message:n.message,type:"mitm_error"}}))}}wo.exports={intercept:Zc}});var Oo=F((ip,Po)=>{var{err:ed}=Gt(),{IS_DEV:td}=Er(),{fetchRouter:rd,pipeTransformedEventStream:ad}=xa(),nd=require("fs"),id=require("path"),sd=id.join(__dirname,"../../../data/logs/mitm/kiro-debug.log");function Lo(e){if(td)try{nd.appendFileSync(sd,`${new Date().toISOString()} ${e}
32
- `)}catch{}}var od=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let a=t;for(let r=0;r<8;r++)a=a&1?3988292384^a>>>1:a>>>1;e[t]=a}return e})();function ko(e){let t=4294967295;for(let a=0;a<e.length;a++)t=t>>>8^od[(t^e[a])&255];return(t^4294967295)>>>0}function ud(e){return{modelId:e||null,toolCallInit:{},hasToolCalls:!1,finishSent:!1,usage:null,inThink:!1,thinkBuf:""}}function Uo(e,t){if(!e)return{thinking:null,text:null};let a=e;t.inThink&&t.thinkBuf&&(a=t.thinkBuf+a,t.thinkBuf="",t.inThink=!1);let r=/<thinking>|<think>/i,n=a.match(r);if(!n)return{thinking:null,text:a};let s=n[0].toLowerCase(),i=s==="<think>"?"</think>":"</thinking>",o=n.index,u=a.indexOf(i,o+s.length);if(u===-1)return t.inThink=!0,t.thinkBuf=a.slice(o),{thinking:null,text:a.slice(0,o).trim()||null};let l=a.slice(o+s.length,u),f=a.slice(0,o).trim(),c=a.slice(u+i.length).trim(),g=[f,c].filter(Boolean).join(""),v=g?Uo(g,{inThink:!1,thinkBuf:""}):{thinking:null,text:null};return{thinking:l||null,text:v.text||null}}function Nn(e,t){let a=Buffer.from(e,"utf8"),r=Buffer.from(t,"utf8"),n=Buffer.alloc(1+a.length+1+2+r.length),s=0;return n[s++]=a.length,a.copy(n,s),s+=a.length,n[s++]=7,n.writeUInt16BE(r.length,s),s+=2,r.copy(n,s),n}function xt(e,t){let a=Buffer.from(typeof t=="string"?t:JSON.stringify(t),"utf8"),r=Buffer.concat([Nn(":message-type","event"),Nn(":event-type",e),Nn(":content-type","application/json")]),n=r.length,s=12+n+a.length+4,i=Buffer.alloc(s);return i.writeUInt32BE(s,0),i.writeUInt32BE(n,4),i.writeUInt32BE(ko(i.slice(0,8)),8),r.copy(i,12),a.copy(i,12+n),i.writeUInt32BE(ko(i.slice(0,s-4)),s-4),i}function ld(e){if(typeof e=="string")return e;if(e==null)return"{}";try{return JSON.stringify(e)}catch{return"{}"}}function Do(e){let t=[],a=e.userInputMessageContext?.toolResults||[];for(let n of a){let s=(n.content||[]).map(i=>i.text||"").join(`
32
+ `)}catch{}}var od=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let a=t;for(let r=0;r<8;r++)a=a&1?3988292384^a>>>1:a>>>1;e[t]=a}return e})();function ko(e){let t=4294967295;for(let a=0;a<e.length;a++)t=t>>>8^od[(t^e[a])&255];return(t^4294967295)>>>0}function ud(e){return{modelId:e||null,toolCallInit:{},hasToolCalls:!1,finishSent:!1,usage:null,inThink:!1,thinkBuf:""}}function Uo(e,t){if(!e)return{thinking:null,text:null};let a=e;t.inThink&&t.thinkBuf&&(a=t.thinkBuf+a,t.thinkBuf="",t.inThink=!1);let r=/<thinking>|<think>/i,n=a.match(r);if(!n)return{thinking:null,text:a};let s=n[0].toLowerCase(),i=s==="<think>"?"</think>":"</thinking>",o=n.index,u=a.indexOf(i,o+s.length);if(u===-1)return t.inThink=!0,t.thinkBuf=a.slice(o),{thinking:null,text:a.slice(0,o).trim()||null};let l=a.slice(o+s.length,u),f=a.slice(0,o).trim(),c=a.slice(u+i.length).trim(),g=[f,c].filter(Boolean).join(""),v=g?Uo(g,{inThink:!1,thinkBuf:""}):{thinking:null,text:null};return{thinking:[l,v.thinking].filter(x=>x).join(`
33
+
34
+ `)||null,text:v.text||null}}function Nn(e,t){let a=Buffer.from(e,"utf8"),r=Buffer.from(t,"utf8"),n=Buffer.alloc(1+a.length+1+2+r.length),s=0;return n[s++]=a.length,a.copy(n,s),s+=a.length,n[s++]=7,n.writeUInt16BE(r.length,s),s+=2,r.copy(n,s),n}function xt(e,t){let a=Buffer.from(typeof t=="string"?t:JSON.stringify(t),"utf8"),r=Buffer.concat([Nn(":message-type","event"),Nn(":event-type",e),Nn(":content-type","application/json")]),n=r.length,s=12+n+a.length+4,i=Buffer.alloc(s);return i.writeUInt32BE(s,0),i.writeUInt32BE(n,4),i.writeUInt32BE(ko(i.slice(0,8)),8),r.copy(i,12),a.copy(i,12+n),i.writeUInt32BE(ko(i.slice(0,s-4)),s-4),i}function ld(e){if(typeof e=="string")return e;if(e==null)return"{}";try{return JSON.stringify(e)}catch{return"{}"}}function Do(e){let t=[],a=e.userInputMessageContext?.toolResults||[];for(let n of a){let s=(n.content||[]).map(i=>i.text||"").join(`
33
35
  `);t.push({role:"tool",tool_call_id:n.toolUseId||"",content:s})}let r=(e.content||"").trim();return(r||a.length===0)&&t.push({role:"user",content:r}),t}function fd(e){let t=e.toolUses||[];return t.length>0?{role:"assistant",content:e.content||null,tool_calls:t.map(a=>({id:a.toolUseId||`call_${Date.now()}`,type:"function",function:{name:a.name||"",arguments:ld(a.input)}}))}:{role:"assistant",content:e.content||""}}function cd(e){let t=e.conversationState||{},a=t.history||[],r=t.currentMessage,n=[];for(let s of a)s.userInputMessage?n.push(...Do(s.userInputMessage)):s.assistantResponseMessage&&n.push(fd(s.assistantResponseMessage));return r?.userInputMessage&&n.push(...Do(r.userInputMessage)),n}function dd(e){let t=e.conversationState||{},a=t.currentMessage?.userInputMessage?.userInputMessageContext?.tools||[],r=t.history?.find(s=>s.userInputMessage?.userInputMessageContext?.tools)?.userInputMessage?.userInputMessageContext?.tools||[],n=a.length>0?a:r;return n.length?n.map(s=>{let i=s.toolSpecification||s;return{type:"function",function:{name:i.name||"",description:i.description||`Tool: ${i.name||"unknown"}`,parameters:i.inputSchema?.json||{type:"object",properties:{},required:[]}}}}):[]}function hd(e,t){if(!e){if(t.finishSent)return null;if(t.inThink&&t.thinkBuf){t.inThink=!1;let i=t.thinkBuf;return t.thinkBuf="",xt("reasoningContentEvent",{content:i,modelId:t.modelId||"kiro-unknown"})}return xt("messageStopEvent",{})}let a=[],r=e.choices?.[0],n=r?.delta||{};!t.modelId&&e.model&&(t.modelId=e.model);let s=t.modelId||"unknown";if(e.usage&&(t.usage=e.usage),n.tool_calls){t.hasToolCalls=!0;for(let i of n.tool_calls){let o=i.index??0;if(i.id&&i.function?.name&&!t.toolCallInit[o]&&(t.toolCallInit[o]={id:i.id,name:i.function.name},Lo(`toolUseEvent init: ${i.function.name} (${i.id})`),a.push(xt("toolUseEvent",{name:i.function.name,toolUseId:i.id}))),i.function?.arguments){let u=t.toolCallInit[o];Lo(`toolUseEvent fragment: ${i.function.arguments.slice(0,100)}`),a.push(xt("toolUseEvent",{input:i.function.arguments,name:u?.name||i.function?.name||"",toolUseId:u?.id||i.id||""}))}}}if(n.reasoning_content&&a.push(xt("reasoningContentEvent",{content:n.reasoning_content,modelId:s})),n.content){let{thinking:i,text:o}=Uo(n.content,t);i&&a.push(xt("reasoningContentEvent",{content:i,modelId:s})),o&&a.push(xt("assistantResponseEvent",{content:o,modelId:s}))}if(r?.finish_reason){let i=pd(t);i&&a.push(...Array.isArray(i)?i:[i])}return a.length===0?null:a.length===1?a[0]:a}function pd(e){let t=[];if(e.hasToolCalls)for(let a of Object.keys(e.toolCallInit).sort()){let r=e.toolCallInit[a];t.push(xt("toolUseEvent",{name:r.name,stop:!0,toolUseId:r.id}))}else t.push(xt("messageStopEvent",{}));return e.finishSent=!0,e.usage&&t.push(xt("usageEvent",{inputTokens:e.usage.prompt_tokens||0,outputTokens:e.usage.completion_tokens||0})),e.toolCallInit={},t.length>0?t:null}async function gd(e,t,a,r){try{if(yd(a))throw new Error(`Binary EventStream format detected (${a.length}B) - request should use passthrough instead of intercept`);let n=JSON.parse(a.toString()),s=cd(n);if(s.length===0)throw new Error("codeWhispererToMessages produced 0 messages \u2014 check request body");let i=dd(n),o={model:r,messages:s,stream:!0,...i.length>0&&{tools:i,tool_choice:"auto"}},u=await rd(o,"/v1/chat/completions",e.headers),l=ud(r);await ad(u,t,hd,l)}catch(n){ed(`[Kiro MITM] Request processing failed: ${n.message}`),t.headersSent||t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:{message:n.message,type:"mitm_error",handler:"kiro"}}))}}function yd(e){if(!e||e.length<12)return!1;let t=e.readUInt32BE(0),a=e.readUInt32BE(4);return t>12&&t<1e6&&a<t-12}Po.exports={intercept:gd}});var Fo=F((sp,Vo)=>{async function vd(e,t){t.writeHead(501,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:{message:"Cursor MITM support is coming soon.",type:"not_implemented"}}))}Vo.exports={intercept:vd}});var Mo=F((op,Ko)=>{var md={antigravity:["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com"],copilot:["api.individual.githubcopilot.com"],kiro:["q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com"],cursor:["api2.cursor.sh"]};Ko.exports={TOOL_HOSTS:md}});var Yo=F((up,Qo)=>{var{exec:qo,execSync:Cd}=require("child_process"),Ho=process.platform==="win32";function Go(){if(Ho)try{return Cd("net session >nul 2>&1",{windowsHide:!0,stdio:"ignore"}),!0}catch{return!1}return typeof process.getuid=="function"&&process.getuid()===0}function zo(e){return`'${String(e).replace(/'/g,"''")}'`}function Ed(e){if(!Ho)return Promise.reject(new Error("Windows-only"));let t=Buffer.from(e,"utf16le").toString("base64");if(Go())return new Promise((r,n)=>{qo(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand ${t}`,{windowsHide:!0},(s,i,o)=>{s?n(new Error(o||s.message)):r(i)})});let a=`
34
36
  $proc = Start-Process powershell -ArgumentList @(
35
37
  '-NoProfile','-NonInteractive','-ExecutionPolicy','Bypass',
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.0.105",
3
+ "version": "1.0.107",
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.105",
3
+ "version": "1.0.107",
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"
@@ -295,7 +295,7 @@ export default function ProviderTopology({ providers = [], activeRequests = [],
295
295
  edges={edges}
296
296
  nodeTypes={nodeTypes}
297
297
  fitView
298
- fitViewOptions={fitOpts}
298
+ fitViewOptions={FIT_OPTS}
299
299
  minZoom={0.1}
300
300
  maxZoom={2}
301
301
  onInit={onInit}
@@ -71,7 +71,7 @@ export async function GET() {
71
71
  configPath: getConfigPath(),
72
72
  opencode: {
73
73
  models: Object.keys(modelMap),
74
- activeModel: config?.model?.startsWith("zevai/") ? config.model.replace(/^zevairouter\//, "") : null,
74
+ activeModel: config?.model?.startsWith("zevai/") ? config.model.replace(/^zevai\//, "") : null,
75
75
  baseURL: providerConfig?.options?.baseURL || null,
76
76
  },
77
77
  });
@@ -18,10 +18,13 @@ export async function GET() {
18
18
  })
19
19
  .map((m) => {
20
20
  const fullModel = `${m.provider}/${m.model}`;
21
+ // alias map shape is { aliasName: "provider/model" } — reverse-lookup the
22
+ // alias whose VALUE points at this model (model.js:197 resolves aliases[alias]).
23
+ const alias = Object.keys(modelAliases).find((a) => modelAliases[a] === fullModel) || m.model;
21
24
  return {
22
25
  ...m,
23
26
  fullModel,
24
- alias: modelAliases[fullModel] || m.model,
27
+ alias,
25
28
  };
26
29
  });
27
30
 
@@ -44,17 +47,18 @@ export async function PUT(request) {
44
47
 
45
48
  const modelAliases = await getModelAliases();
46
49
 
47
- // Check if alias already exists for different model
50
+ // alias map shape is { aliasName: "provider/model" }; the alias name is the KEY.
51
+ // Reject if this alias name is already bound to a *different* model.
48
52
  const existingModel = Object.entries(modelAliases).find(
49
- ([key, val]) => val === alias && key !== model
53
+ ([key, val]) => key === alias && val !== model
50
54
  );
51
55
 
52
56
  if (existingModel) {
53
57
  return NextResponse.json({ error: "Alias already in use" }, { status: 400 });
54
58
  }
55
59
 
56
- // Update alias
57
- await setModelAlias(model, alias);
60
+ // Update alias — setModelAlias(alias, model)
61
+ await setModelAlias(alias, model);
58
62
 
59
63
  return NextResponse.json({ success: true, model, alias });
60
64
  } catch (error) {
@@ -768,7 +768,7 @@ export async function appendRequestLog() {}
768
768
 
769
769
  export async function getRecentLogs(limit = 200) {
770
770
  try {
771
- const db = getAdapter();
771
+ const db = await getAdapter();
772
772
  const rows = db.all(
773
773
  `SELECT timestamp, provider, model, connectionId, promptTokens, completionTokens, status, tokens FROM usageHistory ORDER BY id DESC LIMIT ?`,
774
774
  [limit],
@@ -418,7 +418,13 @@ function killCloudflaredByPort(port) {
418
418
  }
419
419
 
420
420
  export function killCloudflared(localPort) {
421
- intentionalKill = true;
421
+ // Only suppress the unexpected-exit watchdog when we actually killed a live
422
+ // child. Setting intentionalKill unconditionally leaks the flag across a fresh
423
+ // respawn (no in-memory child / dead stale PID -> no 'exit' event consumes it),
424
+ // so the NEXT child's unexpected exit takes the intentionalKill branch and the
425
+ // watchdog respawn never fires — the tunnel dies silently.
426
+ const hadChild = !!cloudflaredProcess;
427
+ let killedPid = false;
422
428
  if (cloudflaredProcess) {
423
429
  try {
424
430
  cloudflaredProcess.kill();
@@ -430,11 +436,16 @@ export function killCloudflared(localPort) {
430
436
  if (pid) {
431
437
  try {
432
438
  process.kill(pid);
439
+ killedPid = true;
433
440
  } catch (e) { /* ignore */ }
434
441
  clearPid();
435
442
  }
436
443
 
437
444
  killCloudflaredByPort(localPort);
445
+
446
+ // Arm the flag only when something was actually killed this call; if nothing
447
+ // was alive, leave it as-is so a future unexpected exit still triggers recovery.
448
+ intentionalKill = hadChild || killedPid;
438
449
  }
439
450
 
440
451
  export function isCloudflaredRunning() {
@@ -96,8 +96,15 @@ function extractThinking(text, state) {
96
96
  ? extractThinking(rest, { inThink: false, thinkBuf: "" })
97
97
  : { thinking: null, text: null };
98
98
 
99
+ // Merge thinking from ALL blocks in this chunk — previously only the first block
100
+ // was returned and recurse.thinking was dropped, silently losing every <think>
101
+ // block after the first. Join with a blank line so no reasoning content is lost.
102
+ const allThinking = [thinking, recurse.thinking]
103
+ .filter((t) => t)
104
+ .join("\n\n") || null;
105
+
99
106
  return {
100
- thinking: thinking || null,
107
+ thinking: allThinking,
101
108
  text: recurse.text || null
102
109
  };
103
110
  }
@@ -179,7 +179,13 @@ function decryptPassword(stored) {
179
179
  const key = deriveKey(salt);
180
180
  const decipher = crypto.createDecipheriv(ENCRYPT_ALGO, key, Buffer.from(ivHex, "hex"));
181
181
  decipher.setAuthTag(Buffer.from(tagHex, "hex"));
182
- return decipher.update(Buffer.from(dataHex, "hex")) + decipher.final("utf8");
182
+ // Concatenate raw Buffers first, then decode once — decipher.update() returns a
183
+ // Buffer; `Buffer + string` would decode each chunk separately and corrupt any
184
+ // multi-byte UTF-8 sequence split across the update/final boundary (non-ASCII passwords).
185
+ return Buffer.concat([
186
+ decipher.update(Buffer.from(dataHex, "hex")),
187
+ decipher.final(),
188
+ ]).toString("utf8");
183
189
  } catch {
184
190
  return null;
185
191
  }