9router-imagefix 0.5.113 → 0.5.114

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 (181) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +3 -3
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  29. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  30. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  31. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  32. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  33. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  35. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  36. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  37. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
  38. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  39. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  40. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  41. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  42. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  43. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  44. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  45. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  46. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  47. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  48. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  49. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/callback.html +1 -1
  51. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  52. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  53. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  54. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
  55. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  56. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  57. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +6 -6
  58. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  59. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  60. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  61. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
  62. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +6 -6
  63. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  64. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  65. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  66. package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  67. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +6 -6
  68. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  69. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  70. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  71. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
  72. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +6 -6
  73. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
  74. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  75. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  76. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  77. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +6 -6
  78. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  79. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  80. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  81. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  82. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +6 -6
  83. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  84. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  85. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  86. package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  87. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +6 -6
  88. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  89. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  90. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  91. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  92. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +6 -6
  93. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  94. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  96. package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  97. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +6 -6
  98. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  99. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  100. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  101. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  102. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +6 -6
  103. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  104. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  105. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  106. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +6 -6
  107. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +6 -6
  108. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
  109. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  110. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  111. package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  112. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +7 -7
  113. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  114. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  115. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  116. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  117. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  118. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  119. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  120. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
  121. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  122. package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
  123. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +6 -6
  124. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  125. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  126. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  127. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
  128. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
  129. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  130. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  131. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  132. package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  133. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +6 -6
  134. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  135. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  136. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  137. package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  138. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +6 -6
  139. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  140. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  141. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  142. package/app/.next-cli-build/server/app/dashboard.rsc +6 -6
  143. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +6 -6
  144. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
  145. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  146. package/app/.next-cli-build/server/app/index.html +1 -1
  147. package/app/.next-cli-build/server/app/index.rsc +4 -4
  148. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  149. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  150. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  151. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  152. package/app/.next-cli-build/server/app/landing.html +1 -1
  153. package/app/.next-cli-build/server/app/landing.rsc +4 -4
  154. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  155. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  156. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
  157. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  158. package/app/.next-cli-build/server/app/login.html +1 -1
  159. package/app/.next-cli-build/server/app/login.rsc +5 -5
  160. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  161. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  162. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
  163. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  164. package/app/.next-cli-build/server/app-paths-manifest.json +3 -3
  165. package/app/.next-cli-build/server/chunks/4037.js +1 -1
  166. package/app/.next-cli-build/server/chunks/827.js +1 -1
  167. package/app/.next-cli-build/server/chunks/869.js +1 -1
  168. package/app/.next-cli-build/server/chunks/8847.js +1 -1
  169. package/app/.next-cli-build/server/chunks/8908.js +1 -1
  170. package/app/.next-cli-build/server/chunks/929.js +1 -1
  171. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  172. package/app/.next-cli-build/server/pages/404.html +1 -1
  173. package/app/.next-cli-build/server/pages/500.html +1 -1
  174. package/app/.next-cli-build/static/chunks/{1321-001c6b0c5547503f.js → 1321-dde8cc015701c424.js} +1 -1
  175. package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite-shm +0 -0
  176. package/app/cli/.build-home/AppData/Roaming/9router/db/data.sqlite-wal +0 -0
  177. package/app/package.json +1 -1
  178. package/cli.js +64 -0
  179. package/package.json +1 -1
  180. /package/app/.next-cli-build/static/{fMIuttQ13oA2DWAGzd9Gy → 7jhX5JgVR0iLdPGPXKGND}/_buildManifest.js +0 -0
  181. /package/app/.next-cli-build/static/{fMIuttQ13oA2DWAGzd9Gy → 7jhX5JgVR0iLdPGPXKGND}/_ssgManifest.js +0 -0
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router-app",
3
- "version": "0.5.113",
3
+ "version": "0.5.114",
4
4
  "description": "9Router web dashboard",
5
5
  "private": true,
6
6
  "scripts": {
package/cli.js CHANGED
@@ -675,6 +675,10 @@ function startServer(updatePromise) {
675
675
 
676
676
  // Suppress all errors during shutdown (systray lib throws JSON parse errors)
677
677
  let isShuttingDown = false;
678
+ // Serah terima ke tray sedang berjalan: server memang dimatikan, tapi proses
679
+ // CLI ini HARUS tetap hidup untuk men-spawn tray. Berbeda dari isShuttingDown,
680
+ // yang berarti "keluar sekarang".
681
+ let isHandingOff = false;
678
682
  process.on("uncaughtException", (err) => {
679
683
  if (isShuttingDown) return;
680
684
  console.error("Error:", err.message);
@@ -810,6 +814,10 @@ function startServer(updatePromise) {
810
814
  // dengan --skip-kill supaya ia tidak memindai/membunuh apa pun.
811
815
  console.log(`\n⏳ Switching to background...`);
812
816
 
817
+ // `isHandingOff` HARUS diset sebelum cleanup(): SIGKILL memicu event
818
+ // "close" secara asinkron, dan tanpa penjagaan itu handler-nya
819
+ // memanggil process.exit() sebelum tray sempat di-spawn.
820
+ isHandingOff = true;
813
821
  isShuttingDown = true;
814
822
  cleanup();
815
823
  // Tunggu port benar-benar bebas; spawn sebelum ini membuat tray
@@ -825,6 +833,43 @@ function startServer(updatePromise) {
825
833
  });
826
834
  bgProcess.unref();
827
835
 
836
+ // VERIFIKASI — jangan langsung menganggap tray berhasil.
837
+ //
838
+ // Server lama sudah dibunuh di atas; satu-satunya yang menyalakannya
839
+ // kembali adalah proses tray. Kalau tray gagal (PowerShell NotifyIcon
840
+ // tidak tersedia, crash saat start, port belum benar-benar bebas),
841
+ // pengguna ditinggal dengan gateway MATI dan tidak ada yang tahu.
842
+ // Inilah keluhan "Hide to Tray malah jadi mati".
843
+ //
844
+ // Jadi: tunggu sampai server benar-benar hidup. Kalau tidak, pulihkan
845
+ // di proses ini dan kembali ke menu — jangan keluar.
846
+ const trayBerhasil = await waitServerReady(port, { timeoutMs: 25000, intervalMs: 400 });
847
+
848
+ if (!trayBerhasil) {
849
+ console.log(`\n⚠️ Tray gagal menyalakan server — memulihkan di terminal ini.`);
850
+ // cleanup() sudah menandai keduanya; reset supaya server bisa
851
+ // dijalankan lagi dan cleanup berikutnya tetap bekerja.
852
+ isHandingOff = false;
853
+ isCleaningUp = false;
854
+ isShuttingDown = false;
855
+ try {
856
+ server = spawnServer();
857
+ attachServerEvents();
858
+ } catch (e) {
859
+ console.error("Gagal memulihkan server:", e.message);
860
+ }
861
+ const pulih = await waitServerReady(port, { timeoutMs: 20000, intervalMs: 400 });
862
+ if (pulih) {
863
+ console.log(`✅ Server kembali jalan: http://${displayHost}:${port}`);
864
+ console.log(` Tray tidak aktif — pilih "Hide to Tray" lagi untuk mencoba ulang.\n`);
865
+ } else {
866
+ console.log(`❌ Server juga gagal dijalankan ulang. Cek log:`);
867
+ console.log(` ${path.join(process.env.APPDATA || "", "9router", "logs", "server-restarts.log")}\n`);
868
+ }
869
+ // Jangan process.exit — biarkan loop menu hidup.
870
+ continue;
871
+ }
872
+
828
873
  console.log(`🔔 9Router is now running in background (PID: ${bgProcess.pid})`);
829
874
  console.log(` Server: http://${displayHost}:${port}`);
830
875
  console.log(`\n💡 You can close this terminal. Right-click tray icon to quit.\n`);
@@ -866,11 +911,30 @@ function startServer(updatePromise) {
866
911
  function attachServerEvents() {
867
912
  server.on("error", (err) => {
868
913
  console.error("Failed to start server:", err.message);
914
+ // Serah terima ke tray: server memang sedang dimatikan, dan proses CLI
915
+ // ini TIDAK boleh keluar — ia masih harus men-spawn tray di bawah.
916
+ if (isHandingOff) return;
869
917
  if (!isShuttingDown) tryRestart();
870
918
  else { cleanup(); process.exit(1); }
871
919
  });
872
920
 
873
921
  server.on("close", (code) => {
922
+ // SERAH TERIMA KE TRAY — jangan keluar.
923
+ //
924
+ // Ini akar bug "Hide to Tray malah jadi mati". Urutannya:
925
+ // isShuttingDown = true; cleanup(); ← SIGKILL server
926
+ // await killProcessOnPort(port); ← melepas kontrol ke event loop
927
+ // ... ← event "close" menyala DI SINI
928
+ // spawn(... tray ...); ← tidak pernah tercapai
929
+ //
930
+ // Handler ini dulu melihat isShuttingDown === true lalu memanggil
931
+ // process.exit(), sehingga CLI mati sebelum sempat men-spawn tray:
932
+ // server sudah dibunuh, tray tidak pernah lahir → gateway mati total.
933
+ //
934
+ // Penjagaan ini harus TERPISAH dari isShuttingDown, karena pada jalur
935
+ // hide kita memang mematikan server tapi TIDAK ingin CLI ikut berhenti.
936
+ if (isHandingOff) return;
937
+
874
938
  if (isShuttingDown) {
875
939
  // Benar-benar diminta berhenti (SIGINT/SIGTERM/tray quit/menu Exit).
876
940
  process.exit(code || 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router-imagefix",
3
- "version": "0.5.113",
3
+ "version": "0.5.114",
4
4
  "description": "9Router CLI - Start and manage 9Router server (with image fix)",
5
5
  "bin": {
6
6
  "9router-imagefix": "./cli.js"