@jheavenknows/bluerouter 1.0.50 → 1.0.52

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 (629) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +2 -2
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/required-server-files.json +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ollama-nodes/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/virtual-combos/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  61. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  62. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  63. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  64. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  65. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  66. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  67. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  68. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  69. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  70. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  72. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  73. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  74. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  75. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
  76. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  77. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  78. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  79. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
  80. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
  82. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  84. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  87. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  89. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  91. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  93. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  95. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  97. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
  99. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +1 -1
  101. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  104. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  106. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  107. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  108. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  109. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  111. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  112. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  113. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  115. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  116. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  117. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  118. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  120. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  121. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  122. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  124. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +1 -1
  126. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +1 -1
  128. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  130. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  132. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  136. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  138. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  140. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  142. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  144. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  146. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  148. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  150. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  152. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  154. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  156. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  158. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  161. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  163. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  165. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  167. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/ollama-model-memory/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/install/route.js +170 -46
  172. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/ollama-nodes/[id]/status/route.js +1 -1
  174. package/app/.next-cli-build/server/app/api/ollama-nodes/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/ollama-routing-targets/route.js +1 -1
  176. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  177. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  179. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  183. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  185. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  187. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  189. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  191. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  207. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
  209. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  211. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  213. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  216. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  218. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  224. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  226. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  235. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  238. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  240. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  242. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  244. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  246. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  248. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  250. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  252. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
  254. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  258. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  260. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  262. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  264. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  266. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  268. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  270. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  274. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  276. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  280. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  282. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  284. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  286. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route.js +1 -1
  291. package/app/.next-cli-build/server/app/api/virtual-combos/[id]/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/virtual-combos/route.js +1 -1
  293. package/app/.next-cli-build/server/app/api/virtual-combos/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  295. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  296. package/app/.next-cli-build/server/app/callback.html +1 -1
  297. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  298. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  299. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  300. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
  301. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  302. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  303. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  304. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  306. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  307. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  308. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  309. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  310. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  311. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  312. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  313. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  314. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  315. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  316. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  317. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  318. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  319. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  320. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  321. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  322. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  323. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  324. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  325. package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  326. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  327. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  328. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  330. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  331. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  332. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  333. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  334. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  335. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
  336. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  337. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  338. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  340. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  341. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  342. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  343. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  344. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  345. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  346. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  347. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  348. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  349. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  351. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  352. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  353. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  354. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  355. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  356. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  357. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  358. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  359. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  360. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  361. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  362. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  363. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  364. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  365. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.html +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.rsc +6 -6
  367. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes/__PAGE__.segment.rsc +2 -2
  368. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard/ollama-nodes.segment.rsc +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  370. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  371. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_full.segment.rsc +6 -6
  372. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_head.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_index.segment.rsc +4 -4
  374. package/app/.next-cli-build/server/app/dashboard/ollama-nodes.segments/_tree.segment.rsc +2 -2
  375. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  377. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  378. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  379. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  381. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  382. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  383. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  384. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  385. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +5 -5
  387. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  388. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  389. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  390. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  391. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +5 -5
  392. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  393. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +4 -4
  394. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
  395. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  396. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +5 -5
  397. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  398. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  399. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  400. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  401. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +5 -5
  402. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  403. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +4 -4
  404. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
  405. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  406. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  407. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  408. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  409. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  410. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  411. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  412. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  413. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  415. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  416. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  417. package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  418. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  419. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  420. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  422. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  423. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  424. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  425. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  426. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  427. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  428. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  429. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  431. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  432. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  433. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  434. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  435. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  436. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  437. package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  438. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  439. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  441. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  442. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  443. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  444. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  445. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  446. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  448. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  449. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  450. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  451. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  452. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  453. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  454. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  455. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  456. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  457. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  458. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  459. package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
  460. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  461. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  462. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  463. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  464. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  465. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  466. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
  467. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  468. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  469. package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  470. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  471. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  472. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  473. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  474. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  475. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  476. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  477. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  478. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  479. package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  480. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  481. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  482. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  483. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  484. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  485. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  486. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  487. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  488. package/app/.next-cli-build/server/app/dashboard/virtual-combos.html +2 -2
  489. package/app/.next-cli-build/server/app/dashboard/virtual-combos.rsc +5 -5
  490. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos/__PAGE__.segment.rsc +1 -1
  491. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard/virtual-combos.segment.rsc +1 -1
  492. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  493. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  494. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_full.segment.rsc +5 -5
  495. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_head.segment.rsc +1 -1
  496. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_index.segment.rsc +4 -4
  497. package/app/.next-cli-build/server/app/dashboard/virtual-combos.segments/_tree.segment.rsc +2 -2
  498. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  499. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  500. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  501. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  502. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  503. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  504. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  505. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
  506. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  507. package/app/.next-cli-build/server/app/index.html +1 -1
  508. package/app/.next-cli-build/server/app/index.rsc +4 -4
  509. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  510. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  511. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  512. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
  513. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  514. package/app/.next-cli-build/server/app/landing/page.js +2 -2
  515. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  516. package/app/.next-cli-build/server/app/landing.html +1 -1
  517. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  518. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  519. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  520. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
  521. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  522. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  523. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  524. package/app/.next-cli-build/server/app/login/page.js +1 -1
  525. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  526. package/app/.next-cli-build/server/app/login.html +1 -1
  527. package/app/.next-cli-build/server/app/login.rsc +4 -4
  528. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  529. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  530. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
  531. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  532. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  533. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  534. package/app/.next-cli-build/server/app/page.js +1 -1
  535. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  536. package/app/.next-cli-build/server/app-paths-manifest.json +2 -2
  537. package/app/.next-cli-build/server/chunks/2769.js +1 -1
  538. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  539. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  540. package/app/.next-cli-build/server/chunks/7153.js +1 -1
  541. package/app/.next-cli-build/server/chunks/7197.js +1 -1
  542. package/app/.next-cli-build/server/chunks/7774.js +8 -8
  543. package/app/.next-cli-build/server/chunks/7965.js +1 -1
  544. package/app/.next-cli-build/server/chunks/8491.js +1 -1
  545. package/app/.next-cli-build/server/chunks/8520.js +1 -1
  546. package/app/.next-cli-build/server/chunks/8895.js +1 -1
  547. package/app/.next-cli-build/server/chunks/9526.js +1 -1
  548. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  549. package/app/.next-cli-build/server/middleware.js +1 -1
  550. package/app/.next-cli-build/server/pages/404.html +1 -1
  551. package/app/.next-cli-build/server/pages/500.html +1 -1
  552. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  553. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  554. package/app/.next-cli-build/static/chunks/{1321-09507c0582fc3eea.js → 1321-41bea908534b9f0d.js} +1 -1
  555. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ollama-nodes/page-bac475308728333b.js +1 -0
  556. package/app/.next-cli-build/static/chunks/app/landing/{page-70884f02f4f66d0e.js → page-7d550a4fdc74c753.js} +1 -1
  557. package/app/.next-cli-build/static/css/{b301b62b8274cce1.css → 0f03023a765dc337.css} +1 -1
  558. package/app/.next-cli-build/static/media/material-symbols-outlined.50fdf095.woff2 +0 -0
  559. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  560. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  561. package/app/cli/.build-home/AppData/Roaming/bluerouter/jwt-secret +1 -1
  562. package/app/cli/.build-home/AppData/Roaming/bluerouter/machine-id +1 -1
  563. package/app/cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json +3 -3
  564. package/app/package.json +4 -4
  565. package/app/public/favicon.svg +58 -58
  566. package/app/public/i18n/literals/ar.json +194 -194
  567. package/app/public/i18n/literals/bn.json +194 -194
  568. package/app/public/i18n/literals/cs.json +194 -194
  569. package/app/public/i18n/literals/da.json +194 -194
  570. package/app/public/i18n/literals/de.json +194 -194
  571. package/app/public/i18n/literals/el.json +194 -194
  572. package/app/public/i18n/literals/es.json +194 -194
  573. package/app/public/i18n/literals/fi.json +194 -194
  574. package/app/public/i18n/literals/fr.json +194 -194
  575. package/app/public/i18n/literals/he.json +194 -194
  576. package/app/public/i18n/literals/hi.json +194 -194
  577. package/app/public/i18n/literals/hu.json +194 -194
  578. package/app/public/i18n/literals/id.json +194 -194
  579. package/app/public/i18n/literals/it.json +194 -194
  580. package/app/public/i18n/literals/ja.json +194 -194
  581. package/app/public/i18n/literals/ko.json +194 -194
  582. package/app/public/i18n/literals/nl.json +194 -194
  583. package/app/public/i18n/literals/no.json +194 -194
  584. package/app/public/i18n/literals/pl.json +194 -194
  585. package/app/public/i18n/literals/pt-BR.json +194 -194
  586. package/app/public/i18n/literals/pt-PT.json +194 -194
  587. package/app/public/i18n/literals/ro.json +194 -194
  588. package/app/public/i18n/literals/ru.json +194 -194
  589. package/app/public/i18n/literals/sv.json +194 -194
  590. package/app/public/i18n/literals/th.json +194 -194
  591. package/app/public/i18n/literals/tl.json +194 -194
  592. package/app/public/i18n/literals/tr.json +194 -194
  593. package/app/public/i18n/literals/uk.json +194 -194
  594. package/app/public/i18n/literals/ur.json +194 -194
  595. package/app/public/i18n/literals/vi.json +194 -194
  596. package/app/public/i18n/literals/zh-CN.json +768 -768
  597. package/app/public/i18n/literals/zh-TW.json +194 -194
  598. package/app/server.js +1 -1
  599. package/app/src/lib/updater/updater.js +235 -235
  600. package/hooks/postinstall.js +22 -22
  601. package/hooks/sqliteRuntime.js +139 -139
  602. package/hooks/trayRuntime.js +107 -107
  603. package/package.json +3 -1
  604. package/src/cli/api/client.js +547 -547
  605. package/src/cli/menus/cliTools.js +618 -618
  606. package/src/cli/menus/providers.js +10 -10
  607. package/src/cli/menus/settings.js +207 -207
  608. package/src/cli/terminalUI.js +121 -121
  609. package/src/cli/tray/autostart.js +306 -306
  610. package/src/cli/tray/tray.js +322 -322
  611. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ollama-nodes/page-e8196c3a0d081fe2.js +0 -1
  612. package/app/.next-cli-build/static/media/material-symbols-outlined.acf6198a.woff2 +0 -0
  613. package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.17-to-1.0.18-1.0.18-20260526-095022/data.sqlite +0 -0
  614. package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.18-to-1.0.19-1.0.19-20260526-095516/data.sqlite +0 -0
  615. package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.19-to-1.0.20-1.0.20-20260526-095953/data.sqlite +0 -0
  616. package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.20-to-1.0.21-1.0.21-20260526-100915/data.sqlite +0 -0
  617. package/app/cli/.build-home/AppData/Roaming/9router/db/backups/upgrade-1.0.21-to-1.0.22-1.0.22-20260526-102212/data.sqlite +0 -0
  618. package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite +0 -0
  619. package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite-shm +0 -0
  620. package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite-wal +0 -0
  621. package/app/cli/.build-home/AppData/Roaming/9router/jwt-secret +0 -1
  622. package/app/cli/.build-home/AppData/Roaming/9router/machine-id +0 -1
  623. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.45-to-1.0.46-1.0.46-20260526-222129/data.sqlite +0 -0
  624. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.46-to-1.0.47-1.0.47-20260526-224538/data.sqlite +0 -0
  625. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.47-to-1.0.48-1.0.48-20260526-232153/data.sqlite +0 -0
  626. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.48-to-1.0.49-1.0.49-20260526-233719/data.sqlite +0 -0
  627. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.49-to-1.0.50-1.0.50-20260526-234400/data.sqlite +0 -0
  628. /package/app/.next-cli-build/static/{paC9DUfj776NJyfY2fHFW → ix6oDrn0H_uhZtmiZ0hBl}/_buildManifest.js +0 -0
  629. /package/app/.next-cli-build/static/{paC9DUfj776NJyfY2fHFW → ix6oDrn0H_uhZtmiZ0hBl}/_ssgManifest.js +0 -0
@@ -1,322 +1,322 @@
1
- const { exec } = require("child_process");
2
- const fs = require("fs");
3
- const path = require("path");
4
-
5
- let trayInstance = null;
6
- let isWinTray = false;
7
-
8
- /**
9
- * Get icon base64 from file — used for systray (mac/linux)
10
- */
11
- function getIconBase64() {
12
- const isWin = process.platform === "win32";
13
- const iconFile = isWin ? "icon.ico" : "icon.png";
14
- try {
15
- const iconPath = path.join(__dirname, iconFile);
16
- if (fs.existsSync(iconPath)) {
17
- return fs.readFileSync(iconPath).toString("base64");
18
- }
19
- } catch (e) {}
20
- // Fallback: minimal green dot icon (PNG)
21
- return "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHpJREFUOE9jYBgFgwEwMjIy/Gdg+P8fyP4PxP8ZGBgEcBnGyMjIsICBgSEAhyH/gfgBUNN8XJoZsdkCVL8Ah+b/QPwbqvkBMvk/AwMDAzYX/GdgYAhAN+A/SICRWAMYGfFEJSMjzriEiwDR/xmIa2RkZCSqnZERb3QCAAo3KxzxbKe1AAAAAElFTkSuQmCC";
22
- }
23
-
24
- /**
25
- * Check if system tray is supported on current OS
26
- * Supported: macOS, Windows, Linux (with GUI)
27
- */
28
- function isTraySupported() {
29
- const platform = process.platform;
30
- if (!["darwin", "win32", "linux"].includes(platform)) {
31
- return false;
32
- }
33
- if (platform === "linux" && !process.env.DISPLAY) {
34
- return false;
35
- }
36
- return true;
37
- }
38
-
39
- /**
40
- * Initialize system tray with menu
41
- * @param {Object} options - { port, onQuit, onOpenDashboard }
42
- * @returns {Object|null} tray instance or null if not supported/failed
43
- */
44
- function initTray(options) {
45
- if (!isTraySupported()) {
46
- return null;
47
- }
48
-
49
- // Windows uses PowerShell NotifyIcon (AV-safe), others use systray
50
- if (process.platform === "win32") {
51
- return initWindowsTray(options);
52
- }
53
- return initUnixTray(options);
54
- }
55
-
56
- /**
57
- * Build menu items array shared between platforms
58
- */
59
- function buildMenuItems(port, autostartEnabled) {
60
- return [
61
- { title: `Bluerouter (Port ${port})`, tooltip: "Server is running", enabled: false },
62
- { title: "Open Dashboard", tooltip: "Open in browser", enabled: true },
63
- {
64
- title: autostartEnabled ? "✓ Auto-start Enabled" : "Enable Auto-start",
65
- tooltip: "Run on OS startup",
66
- enabled: true
67
- },
68
- { title: "Quit", tooltip: "Stop server and exit", enabled: true }
69
- ];
70
- }
71
-
72
- // Menu item indexes
73
- const MENU_INDEX = { STATUS: 0, DASHBOARD: 1, AUTOSTART: 2, QUIT: 3 };
74
-
75
- /**
76
- * Get current autostart state
77
- */
78
- function getAutostartEnabled() {
79
- try {
80
- const { isAutoStartEnabled } = require("./autostart");
81
- return isAutoStartEnabled();
82
- } catch (e) {
83
- return false;
84
- }
85
- }
86
-
87
- /**
88
- * Handle menu item click (shared logic)
89
- */
90
- function handleClick(index, options, onAutostartToggle) {
91
- const { onQuit, onOpenDashboard, port } = options;
92
- if (index === MENU_INDEX.DASHBOARD) {
93
- if (onOpenDashboard) onOpenDashboard();
94
- else openBrowser(`http://localhost:${port}/dashboard`);
95
- } else if (index === MENU_INDEX.AUTOSTART) {
96
- const enabled = getAutostartEnabled();
97
- try {
98
- const { enableAutoStart, disableAutoStart } = require("./autostart");
99
- if (enabled) disableAutoStart();
100
- else enableAutoStart();
101
- onAutostartToggle(!enabled);
102
- } catch (e) {}
103
- } else if (index === MENU_INDEX.QUIT) {
104
- console.log("\n👋 Shutting down...");
105
- if (onQuit) onQuit();
106
- killTray();
107
- setTimeout(() => process.exit(0), 500);
108
- }
109
- }
110
-
111
- /**
112
- * Windows tray via PowerShell NotifyIcon
113
- */
114
- function initWindowsTray(options) {
115
- const { port } = options;
116
- try {
117
- const { initWinTray } = require("./trayWin");
118
- const iconPath = path.join(__dirname, "icon.ico");
119
- const autostartEnabled = getAutostartEnabled();
120
- const items = buildMenuItems(port, autostartEnabled);
121
-
122
- trayInstance = initWinTray({
123
- iconPath,
124
- tooltip: `Bluerouter - Port ${port}`,
125
- items,
126
- onClick: (index) => {
127
- handleClick(index, options, (newEnabled) => {
128
- const newTitle = newEnabled ? "✓ Auto-start Enabled" : "Enable Auto-start";
129
- trayInstance.updateItem(MENU_INDEX.AUTOSTART, newTitle, true);
130
- });
131
- }
132
- });
133
-
134
- isWinTray = true;
135
- return trayInstance;
136
- } catch (err) {
137
- return null;
138
- }
139
- }
140
-
141
- /**
142
- * macOS/Linux tray via systray binary
143
- *
144
- * Prefers `systray2` (active fork of `systray`, ships newer
145
- * getlantern/systray-portable binaries that work on macOS 14+ and Apple
146
- * Silicon under Rosetta). Falls back to legacy `systray@1.0.5` if systray2
147
- * is not available, though that binary's Mach-O headers are rejected by
148
- * modern dyld and the icon will not appear.
149
- */
150
- function resolveSystray() {
151
- let runtimeDir = null;
152
- try {
153
- const { getRuntimeNodeModules } = require("../../../hooks/sqliteRuntime");
154
- runtimeDir = getRuntimeNodeModules();
155
- } catch (e) {}
156
-
157
- // 1) systray2 in runtime dir (where ensureTrayRuntime installs it)
158
- if (runtimeDir) {
159
- try { return { mod: require(path.join(runtimeDir, "systray2")).default, isV2: true }; } catch (e) {}
160
- }
161
- // 2) systray2 resolvable from the package's own node_modules / NODE_PATH
162
- try { return { mod: require("systray2").default, isV2: true }; } catch (e) {}
163
- // 3) Legacy systray fallback (unlikely to render on modern macOS)
164
- try { return { mod: require("systray").default, isV2: false }; } catch (e) {}
165
- if (runtimeDir) {
166
- try { return { mod: require(path.join(runtimeDir, "systray")).default, isV2: false }; } catch (e) {}
167
- }
168
- return null;
169
- }
170
-
171
- function chmodTrayBin(pkgName) {
172
- // systray2's npm tarball occasionally lands without +x on the bundled Go
173
- // binary (observed on macOS). spawn() then fails with EACCES. Best-effort
174
- // chmod on every init avoids a hard-to-diagnose silent tray failure.
175
- try {
176
- const { getRuntimeNodeModules } = require("../../../hooks/sqliteRuntime");
177
- const binName = process.platform === "darwin" ? "tray_darwin_release" : "tray_linux_release";
178
- const candidates = [
179
- path.join(getRuntimeNodeModules(), pkgName, "traybin", binName),
180
- path.join(__dirname, "..", "..", "..", "node_modules", pkgName, "traybin", binName)
181
- ];
182
- for (const p of candidates) {
183
- if (fs.existsSync(p)) fs.chmodSync(p, 0o755);
184
- }
185
- } catch (e) {}
186
- }
187
-
188
- function initUnixTray(options) {
189
- const { port } = options;
190
- try {
191
- const resolved = resolveSystray();
192
- if (!resolved) return null;
193
- const { mod: SysTray, isV2 } = resolved;
194
-
195
- chmodTrayBin(isV2 ? "systray2" : "systray");
196
-
197
- const autostartEnabled = getAutostartEnabled();
198
- const items = buildMenuItems(port, autostartEnabled);
199
-
200
- const menu = {
201
- icon: getIconBase64(),
202
- // The bundled icon.png is a full-color RGBA logo. Don't mark it as a
203
- // template icon: macOS would then render it as a solid white square
204
- // because template mode only uses the alpha channel.
205
- isTemplateIcon: false,
206
- title: "",
207
- tooltip: `Bluerouter - Port ${port}`,
208
- items
209
- };
210
-
211
- trayInstance = new SysTray({ menu, debug: false, copyDir: true });
212
- isWinTray = false;
213
-
214
- trayInstance.onClick((action) => {
215
- handleClick(action.seq_id, options, (newEnabled) => {
216
- trayInstance.sendAction({
217
- type: "update-item",
218
- item: {
219
- title: newEnabled ? "✓ Auto-start Enabled" : "Enable Auto-start",
220
- tooltip: "Run on OS startup",
221
- enabled: true
222
- },
223
- seq_id: MENU_INDEX.AUTOSTART
224
- });
225
- });
226
- });
227
-
228
- if (isV2) {
229
- // systray2 exposes a ready() promise instead of onReady/onError. Surface
230
- // failures (binary crash, EACCES, etc.) so users can see why the icon
231
- // didn't appear instead of getting a misleading "running in tray" log.
232
- trayInstance.ready().catch((err) => {
233
- process.stderr.write(`[bluerouter] tray failed to start: ${err && err.message ? err.message : err}\n`);
234
- });
235
- } else {
236
- trayInstance.onReady(() => {});
237
- trayInstance.onError(() => {});
238
- }
239
-
240
- return trayInstance;
241
- } catch (err) {
242
- process.stderr.write(`[bluerouter] tray init error: ${err.message}\n`);
243
- return null;
244
- }
245
- }
246
-
247
- /**
248
- * Kill tray, wait Go binary fully exit (returns Promise).
249
- * Critical for hide-to-tray: macOS must release NSStatusItem before bgProcess
250
- * spawns a new tray, otherwise the new icon silently fails to register.
251
- */
252
- function killTray() {
253
- const instance = trayInstance;
254
- const wasWin = isWinTray;
255
- trayInstance = null;
256
- if (!instance) return Promise.resolve();
257
-
258
- if (wasWin) {
259
- try { instance.kill(); } catch (e) {}
260
- return Promise.resolve();
261
- }
262
-
263
- // Unix: get the Go tray child process handle.
264
- let proc = null;
265
- try {
266
- proc = instance._process || (typeof instance.process === "function" ? instance.process() : null);
267
- } catch (e) {}
268
-
269
- // Graceful shutdown: send {type:"exit"} via IPC so the Go binary can call
270
- // systray.Quit() and release NSStatusItem. SIGKILL leaves a ghost icon on
271
- // the macOS menubar until logout, causing duplicate icons after re-spawn.
272
- const gracefulQuit = () => { try { instance.kill(true); } catch (e) {} };
273
- const closeIpc = () => { try { instance.kill(false); } catch (e) {} };
274
-
275
- if (!proc || !proc.pid) {
276
- gracefulQuit();
277
- closeIpc();
278
- return Promise.resolve();
279
- }
280
-
281
- return new Promise((resolve) => {
282
- let done = false;
283
- const finish = () => { if (done) return; done = true; closeIpc(); resolve(); };
284
-
285
- proc.once("exit", finish);
286
- gracefulQuit();
287
-
288
- // Escalate: SIGTERM after 800ms, SIGKILL after 1600ms if still alive.
289
- setTimeout(() => { try { process.kill(proc.pid, 0); proc.kill("SIGTERM"); } catch (e) {} }, 800);
290
- setTimeout(() => { try { process.kill(proc.pid, 0); proc.kill("SIGKILL"); } catch (e) {} }, 1600);
291
-
292
- // Fallback poll in case "exit" never fires (detached child, pipe closed)
293
- const deadline = Date.now() + 3000;
294
- const poll = setInterval(() => {
295
- try { process.kill(proc.pid, 0); } catch { clearInterval(poll); finish(); return; }
296
- if (Date.now() > deadline) { clearInterval(poll); finish(); }
297
- }, 50);
298
- });
299
- }
300
-
301
- /**
302
- * Open browser
303
- */
304
- function openBrowser(url) {
305
- const platform = process.platform;
306
- let cmd;
307
-
308
- if (platform === "darwin") {
309
- cmd = `open "${url}"`;
310
- } else if (platform === "win32") {
311
- cmd = `start "" "${url}"`;
312
- } else {
313
- cmd = `xdg-open "${url}"`;
314
- }
315
-
316
- exec(cmd);
317
- }
318
-
319
- module.exports = {
320
- initTray,
321
- killTray
322
- };
1
+ const { exec } = require("child_process");
2
+ const fs = require("fs");
3
+ const path = require("path");
4
+
5
+ let trayInstance = null;
6
+ let isWinTray = false;
7
+
8
+ /**
9
+ * Get icon base64 from file — used for systray (mac/linux)
10
+ */
11
+ function getIconBase64() {
12
+ const isWin = process.platform === "win32";
13
+ const iconFile = isWin ? "icon.ico" : "icon.png";
14
+ try {
15
+ const iconPath = path.join(__dirname, iconFile);
16
+ if (fs.existsSync(iconPath)) {
17
+ return fs.readFileSync(iconPath).toString("base64");
18
+ }
19
+ } catch (e) {}
20
+ // Fallback: minimal green dot icon (PNG)
21
+ return "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHpJREFUOE9jYBgFgwEwMjIy/Gdg+P8fyP4PxP8ZGBgEcBnGyMjIsICBgSEAhyH/gfgBUNN8XJoZsdkCVL8Ah+b/QPwbqvkBMvk/AwMDAzYX/GdgYAhAN+A/SICRWAMYGfFEJSMjzriEiwDR/xmIa2RkZCSqnZERb3QCAAo3KxzxbKe1AAAAAElFTkSuQmCC";
22
+ }
23
+
24
+ /**
25
+ * Check if system tray is supported on current OS
26
+ * Supported: macOS, Windows, Linux (with GUI)
27
+ */
28
+ function isTraySupported() {
29
+ const platform = process.platform;
30
+ if (!["darwin", "win32", "linux"].includes(platform)) {
31
+ return false;
32
+ }
33
+ if (platform === "linux" && !process.env.DISPLAY) {
34
+ return false;
35
+ }
36
+ return true;
37
+ }
38
+
39
+ /**
40
+ * Initialize system tray with menu
41
+ * @param {Object} options - { port, onQuit, onOpenDashboard }
42
+ * @returns {Object|null} tray instance or null if not supported/failed
43
+ */
44
+ function initTray(options) {
45
+ if (!isTraySupported()) {
46
+ return null;
47
+ }
48
+
49
+ // Windows uses PowerShell NotifyIcon (AV-safe), others use systray
50
+ if (process.platform === "win32") {
51
+ return initWindowsTray(options);
52
+ }
53
+ return initUnixTray(options);
54
+ }
55
+
56
+ /**
57
+ * Build menu items array shared between platforms
58
+ */
59
+ function buildMenuItems(port, autostartEnabled) {
60
+ return [
61
+ { title: `Bluerouter (Port ${port})`, tooltip: "Server is running", enabled: false },
62
+ { title: "Open Dashboard", tooltip: "Open in browser", enabled: true },
63
+ {
64
+ title: autostartEnabled ? "✓ Auto-start Enabled" : "Enable Auto-start",
65
+ tooltip: "Run on OS startup",
66
+ enabled: true
67
+ },
68
+ { title: "Quit", tooltip: "Stop server and exit", enabled: true }
69
+ ];
70
+ }
71
+
72
+ // Menu item indexes
73
+ const MENU_INDEX = { STATUS: 0, DASHBOARD: 1, AUTOSTART: 2, QUIT: 3 };
74
+
75
+ /**
76
+ * Get current autostart state
77
+ */
78
+ function getAutostartEnabled() {
79
+ try {
80
+ const { isAutoStartEnabled } = require("./autostart");
81
+ return isAutoStartEnabled();
82
+ } catch (e) {
83
+ return false;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Handle menu item click (shared logic)
89
+ */
90
+ function handleClick(index, options, onAutostartToggle) {
91
+ const { onQuit, onOpenDashboard, port } = options;
92
+ if (index === MENU_INDEX.DASHBOARD) {
93
+ if (onOpenDashboard) onOpenDashboard();
94
+ else openBrowser(`http://localhost:${port}/dashboard`);
95
+ } else if (index === MENU_INDEX.AUTOSTART) {
96
+ const enabled = getAutostartEnabled();
97
+ try {
98
+ const { enableAutoStart, disableAutoStart } = require("./autostart");
99
+ if (enabled) disableAutoStart();
100
+ else enableAutoStart();
101
+ onAutostartToggle(!enabled);
102
+ } catch (e) {}
103
+ } else if (index === MENU_INDEX.QUIT) {
104
+ console.log("\n👋 Shutting down...");
105
+ if (onQuit) onQuit();
106
+ killTray();
107
+ setTimeout(() => process.exit(0), 500);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Windows tray via PowerShell NotifyIcon
113
+ */
114
+ function initWindowsTray(options) {
115
+ const { port } = options;
116
+ try {
117
+ const { initWinTray } = require("./trayWin");
118
+ const iconPath = path.join(__dirname, "icon.ico");
119
+ const autostartEnabled = getAutostartEnabled();
120
+ const items = buildMenuItems(port, autostartEnabled);
121
+
122
+ trayInstance = initWinTray({
123
+ iconPath,
124
+ tooltip: `Bluerouter - Port ${port}`,
125
+ items,
126
+ onClick: (index) => {
127
+ handleClick(index, options, (newEnabled) => {
128
+ const newTitle = newEnabled ? "✓ Auto-start Enabled" : "Enable Auto-start";
129
+ trayInstance.updateItem(MENU_INDEX.AUTOSTART, newTitle, true);
130
+ });
131
+ }
132
+ });
133
+
134
+ isWinTray = true;
135
+ return trayInstance;
136
+ } catch (err) {
137
+ return null;
138
+ }
139
+ }
140
+
141
+ /**
142
+ * macOS/Linux tray via systray binary
143
+ *
144
+ * Prefers `systray2` (active fork of `systray`, ships newer
145
+ * getlantern/systray-portable binaries that work on macOS 14+ and Apple
146
+ * Silicon under Rosetta). Falls back to legacy `systray@1.0.5` if systray2
147
+ * is not available, though that binary's Mach-O headers are rejected by
148
+ * modern dyld and the icon will not appear.
149
+ */
150
+ function resolveSystray() {
151
+ let runtimeDir = null;
152
+ try {
153
+ const { getRuntimeNodeModules } = require("../../../hooks/sqliteRuntime");
154
+ runtimeDir = getRuntimeNodeModules();
155
+ } catch (e) {}
156
+
157
+ // 1) systray2 in runtime dir (where ensureTrayRuntime installs it)
158
+ if (runtimeDir) {
159
+ try { return { mod: require(path.join(runtimeDir, "systray2")).default, isV2: true }; } catch (e) {}
160
+ }
161
+ // 2) systray2 resolvable from the package's own node_modules / NODE_PATH
162
+ try { return { mod: require("systray2").default, isV2: true }; } catch (e) {}
163
+ // 3) Legacy systray fallback (unlikely to render on modern macOS)
164
+ try { return { mod: require("systray").default, isV2: false }; } catch (e) {}
165
+ if (runtimeDir) {
166
+ try { return { mod: require(path.join(runtimeDir, "systray")).default, isV2: false }; } catch (e) {}
167
+ }
168
+ return null;
169
+ }
170
+
171
+ function chmodTrayBin(pkgName) {
172
+ // systray2's npm tarball occasionally lands without +x on the bundled Go
173
+ // binary (observed on macOS). spawn() then fails with EACCES. Best-effort
174
+ // chmod on every init avoids a hard-to-diagnose silent tray failure.
175
+ try {
176
+ const { getRuntimeNodeModules } = require("../../../hooks/sqliteRuntime");
177
+ const binName = process.platform === "darwin" ? "tray_darwin_release" : "tray_linux_release";
178
+ const candidates = [
179
+ path.join(getRuntimeNodeModules(), pkgName, "traybin", binName),
180
+ path.join(__dirname, "..", "..", "..", "node_modules", pkgName, "traybin", binName)
181
+ ];
182
+ for (const p of candidates) {
183
+ if (fs.existsSync(p)) fs.chmodSync(p, 0o755);
184
+ }
185
+ } catch (e) {}
186
+ }
187
+
188
+ function initUnixTray(options) {
189
+ const { port } = options;
190
+ try {
191
+ const resolved = resolveSystray();
192
+ if (!resolved) return null;
193
+ const { mod: SysTray, isV2 } = resolved;
194
+
195
+ chmodTrayBin(isV2 ? "systray2" : "systray");
196
+
197
+ const autostartEnabled = getAutostartEnabled();
198
+ const items = buildMenuItems(port, autostartEnabled);
199
+
200
+ const menu = {
201
+ icon: getIconBase64(),
202
+ // The bundled icon.png is a full-color RGBA logo. Don't mark it as a
203
+ // template icon: macOS would then render it as a solid white square
204
+ // because template mode only uses the alpha channel.
205
+ isTemplateIcon: false,
206
+ title: "",
207
+ tooltip: `Bluerouter - Port ${port}`,
208
+ items
209
+ };
210
+
211
+ trayInstance = new SysTray({ menu, debug: false, copyDir: true });
212
+ isWinTray = false;
213
+
214
+ trayInstance.onClick((action) => {
215
+ handleClick(action.seq_id, options, (newEnabled) => {
216
+ trayInstance.sendAction({
217
+ type: "update-item",
218
+ item: {
219
+ title: newEnabled ? "✓ Auto-start Enabled" : "Enable Auto-start",
220
+ tooltip: "Run on OS startup",
221
+ enabled: true
222
+ },
223
+ seq_id: MENU_INDEX.AUTOSTART
224
+ });
225
+ });
226
+ });
227
+
228
+ if (isV2) {
229
+ // systray2 exposes a ready() promise instead of onReady/onError. Surface
230
+ // failures (binary crash, EACCES, etc.) so users can see why the icon
231
+ // didn't appear instead of getting a misleading "running in tray" log.
232
+ trayInstance.ready().catch((err) => {
233
+ process.stderr.write(`[bluerouter] tray failed to start: ${err && err.message ? err.message : err}\n`);
234
+ });
235
+ } else {
236
+ trayInstance.onReady(() => {});
237
+ trayInstance.onError(() => {});
238
+ }
239
+
240
+ return trayInstance;
241
+ } catch (err) {
242
+ process.stderr.write(`[bluerouter] tray init error: ${err.message}\n`);
243
+ return null;
244
+ }
245
+ }
246
+
247
+ /**
248
+ * Kill tray, wait Go binary fully exit (returns Promise).
249
+ * Critical for hide-to-tray: macOS must release NSStatusItem before bgProcess
250
+ * spawns a new tray, otherwise the new icon silently fails to register.
251
+ */
252
+ function killTray() {
253
+ const instance = trayInstance;
254
+ const wasWin = isWinTray;
255
+ trayInstance = null;
256
+ if (!instance) return Promise.resolve();
257
+
258
+ if (wasWin) {
259
+ try { instance.kill(); } catch (e) {}
260
+ return Promise.resolve();
261
+ }
262
+
263
+ // Unix: get the Go tray child process handle.
264
+ let proc = null;
265
+ try {
266
+ proc = instance._process || (typeof instance.process === "function" ? instance.process() : null);
267
+ } catch (e) {}
268
+
269
+ // Graceful shutdown: send {type:"exit"} via IPC so the Go binary can call
270
+ // systray.Quit() and release NSStatusItem. SIGKILL leaves a ghost icon on
271
+ // the macOS menubar until logout, causing duplicate icons after re-spawn.
272
+ const gracefulQuit = () => { try { instance.kill(true); } catch (e) {} };
273
+ const closeIpc = () => { try { instance.kill(false); } catch (e) {} };
274
+
275
+ if (!proc || !proc.pid) {
276
+ gracefulQuit();
277
+ closeIpc();
278
+ return Promise.resolve();
279
+ }
280
+
281
+ return new Promise((resolve) => {
282
+ let done = false;
283
+ const finish = () => { if (done) return; done = true; closeIpc(); resolve(); };
284
+
285
+ proc.once("exit", finish);
286
+ gracefulQuit();
287
+
288
+ // Escalate: SIGTERM after 800ms, SIGKILL after 1600ms if still alive.
289
+ setTimeout(() => { try { process.kill(proc.pid, 0); proc.kill("SIGTERM"); } catch (e) {} }, 800);
290
+ setTimeout(() => { try { process.kill(proc.pid, 0); proc.kill("SIGKILL"); } catch (e) {} }, 1600);
291
+
292
+ // Fallback poll in case "exit" never fires (detached child, pipe closed)
293
+ const deadline = Date.now() + 3000;
294
+ const poll = setInterval(() => {
295
+ try { process.kill(proc.pid, 0); } catch { clearInterval(poll); finish(); return; }
296
+ if (Date.now() > deadline) { clearInterval(poll); finish(); }
297
+ }, 50);
298
+ });
299
+ }
300
+
301
+ /**
302
+ * Open browser
303
+ */
304
+ function openBrowser(url) {
305
+ const platform = process.platform;
306
+ let cmd;
307
+
308
+ if (platform === "darwin") {
309
+ cmd = `open "${url}"`;
310
+ } else if (platform === "win32") {
311
+ cmd = `start "" "${url}"`;
312
+ } else {
313
+ cmd = `xdg-open "${url}"`;
314
+ }
315
+
316
+ exec(cmd);
317
+ }
318
+
319
+ module.exports = {
320
+ initTray,
321
+ killTray
322
+ };