switchboard-router 0.6.4 → 0.6.6

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 (131) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +7 -7
  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/server/app/(dashboard)/dashboard/agent-library/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/routing/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/[id]/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  32. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  33. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  34. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  35. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  36. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  37. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  38. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  39. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  41. package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  42. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  43. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  44. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  45. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  46. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  47. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  48. package/app/.next-cli-build/server/app/api/cli-tools/aider-settings/route.js +2 -2
  49. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  50. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  51. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  52. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  53. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +2 -2
  54. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  55. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  56. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  57. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +1 -1
  58. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  59. package/app/.next-cli-build/server/app/api/cli-tools/gemini-cli-settings/route.js +2 -2
  60. package/app/.next-cli-build/server/app/api/cli-tools/grok-settings/route.js +2 -2
  61. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  62. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  63. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  64. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  65. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  66. package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js +1 -1
  67. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  68. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/callback.html +1 -1
  70. package/app/.next-cli-build/server/app/callback.rsc +3 -3
  71. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  72. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  73. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  74. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  75. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  76. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  77. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  78. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  79. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  80. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  81. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  82. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  83. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  84. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  85. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  86. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  87. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  88. package/app/.next-cli-build/server/app/index.html +1 -1
  89. package/app/.next-cli-build/server/app/index.rsc +3 -3
  90. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  91. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  92. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  93. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  94. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  96. package/app/.next-cli-build/server/app/landing.html +1 -1
  97. package/app/.next-cli-build/server/app/landing.rsc +3 -3
  98. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  99. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  100. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  101. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  102. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  103. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  104. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  105. package/app/.next-cli-build/server/app/login.html +1 -1
  106. package/app/.next-cli-build/server/app/login.rsc +3 -3
  107. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
  108. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  109. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  110. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  111. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  112. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  113. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  114. package/app/.next-cli-build/server/app-paths-manifest.json +7 -7
  115. package/app/.next-cli-build/server/chunks/194.js +1 -1
  116. package/app/.next-cli-build/server/chunks/4126.js +1 -1
  117. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  118. package/app/.next-cli-build/server/chunks/869.js +1 -1
  119. package/app/.next-cli-build/server/chunks/8998.js +1 -1
  120. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  121. package/app/.next-cli-build/server/pages/404.html +1 -1
  122. package/app/.next-cli-build/server/pages/500.html +1 -1
  123. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  124. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  125. package/app/.next-cli-build/static/chunks/{1321-5429c7d81eb38c6f.js → 1321-982f4ec7b7629680.js} +1 -1
  126. package/app/package.json +1 -1
  127. package/app/src/lib/updater/updater.js +26 -15
  128. package/package.json +1 -1
  129. package/src/shared/openBrowser.js +12 -7
  130. /package/app/.next-cli-build/static/{88rQB4DdrBDjq9aWvSEH4 → Owv67oi32RakhAm7WAfwF}/_buildManifest.js +0 -0
  131. /package/app/.next-cli-build/static/{88rQB4DdrBDjq9aWvSEH4 → Owv67oi32RakhAm7WAfwF}/_ssgManifest.js +0 -0
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "switchboard-app",
3
- "version": "0.6.4",
3
+ "version": "0.6.6",
4
4
  "description": "Switchboard — intelligent model routing dashboard",
5
5
  "private": true,
6
6
  "scripts": {
@@ -2,7 +2,7 @@
2
2
  // Spawns `npm i -g <pkg>@latest`, exposes progress via tiny HTTP server.
3
3
  // Survives after parent Next server exits (detached + unref by spawner).
4
4
 
5
- const { spawn } = require("child_process");
5
+ const { execFile, spawn } = require("child_process");
6
6
  const http = require("http");
7
7
  const net = require("net");
8
8
  const path = require("path");
@@ -249,18 +249,21 @@ function runInstall() {
249
249
  function openBrowser(url) {
250
250
  const platform = process.platform;
251
251
  const launcher = platform === "darwin"
252
- ? { command: "open", args: [url] }
252
+ ? { command: "/usr/bin/open", args: [url] }
253
253
  : platform === "win32"
254
254
  ? { command: "rundll32.exe", args: ["url.dll,FileProtocolHandler", url] }
255
255
  : { command: "xdg-open", args: [url] };
256
- try {
257
- spawn(launcher.command, launcher.args, {
258
- shell: false,
259
- detached: true,
260
- stdio: "ignore",
261
- windowsHide: true,
262
- }).unref();
263
- } catch { /* ignore */ }
256
+ return new Promise((resolve) => {
257
+ try {
258
+ execFile(launcher.command, launcher.args, { windowsHide: true, timeout: 3000 }, (error) => {
259
+ if (error) pushLog(`[updater] browser launch failed: ${error.message}`);
260
+ resolve(!error);
261
+ });
262
+ } catch (error) {
263
+ pushLog(`[updater] browser launch failed: ${error.message}`);
264
+ resolve(false);
265
+ }
266
+ });
264
267
  }
265
268
 
266
269
  // Wait until app port is listening (server alive again), then open dashboard
@@ -269,8 +272,11 @@ async function waitForAppAndOpenBrowser() {
269
272
  while (Date.now() < deadline) {
270
273
  const busy = await isAppPortBusy();
271
274
  if (busy) {
272
- openBrowser(`http://localhost:${appPort}/dashboard`);
273
- pushLog(`[updater] app ready, opened dashboard`);
275
+ const dashboardUrl = `http://localhost:${appPort}/dashboard`;
276
+ const opened = await openBrowser(dashboardUrl);
277
+ pushLog(opened
278
+ ? `[updater] app ready, opened dashboard`
279
+ : `[updater] app ready; open dashboard manually: ${dashboardUrl}`);
274
280
  return;
275
281
  }
276
282
  await sleep(1000);
@@ -293,10 +299,15 @@ function relaunchApp() {
293
299
  shell: isWin,
294
300
  env: { ...process.env, UPDATER_RELAUNCH: "", UPDATER_RELAUNCH_CMD: "", UPDATER_RELAUNCH_ARGS: "" },
295
301
  });
302
+ child.once("error", (error) => {
303
+ pushLog(`[updater] relaunch failed: ${error.message}`);
304
+ });
305
+ child.once("spawn", () => {
306
+ pushLog(`[updater] relaunched: ${cmd} ${args.join(" ")} (pid=${child.pid})`);
307
+ // Wait for new app to come up, then auto-open browser so user sees the result
308
+ waitForAppAndOpenBrowser();
309
+ });
296
310
  child.unref();
297
- pushLog(`[updater] relaunched: ${cmd} ${args.join(" ")} (pid=${child.pid})`);
298
- // Wait for new app to come up, then auto-open browser so user sees the result
299
- waitForAppAndOpenBrowser();
300
311
  } catch (e) {
301
312
  pushLog(`[updater] relaunch failed: ${e.message}`);
302
313
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "switchboard-router",
3
- "version": "0.6.4",
3
+ "version": "0.6.6",
4
4
  "description": "Switchboard CLI — local AI routing gateway (install: npm i -g switchboard-router; run: switchboard)",
5
5
  "bin": {
6
6
  "switchboard": "./cli.js"
@@ -14,7 +14,7 @@ function getBrowserCommand(url, platform = process.platform) {
14
14
  }
15
15
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return null;
16
16
 
17
- if (platform === "darwin") return { command: "open", args: [url] };
17
+ if (platform === "darwin") return { command: "/usr/bin/open", args: [url] };
18
18
  if (platform === "win32") {
19
19
  return {
20
20
  command: "rundll32.exe",
@@ -31,12 +31,17 @@ function openBrowser(url, { platform = process.platform, execFileImpl = execFile
31
31
  if (onError) onError(new Error("Unsupported browser URL or platform"));
32
32
  return false;
33
33
  }
34
- execFileImpl(
35
- launcher.command,
36
- launcher.args,
37
- { windowsHide: true },
38
- (error) => { if (error && onError) onError(error); },
39
- );
34
+ try {
35
+ execFileImpl(
36
+ launcher.command,
37
+ launcher.args,
38
+ { windowsHide: true, timeout: 3000 },
39
+ (error) => { if (error && onError) onError(error); },
40
+ );
41
+ } catch (error) {
42
+ if (onError) onError(error);
43
+ return false;
44
+ }
40
45
  return true;
41
46
  }
42
47