diff --git a/packages/cli/__tests__/lib/startup-notifier-defaults.test.ts b/packages/cli/__tests__/lib/startup-notifier-defaults.test.ts index 09a6399ce..4aa51b959 100644 --- a/packages/cli/__tests__/lib/startup-notifier-defaults.test.ts +++ b/packages/cli/__tests__/lib/startup-notifier-defaults.test.ts @@ -124,6 +124,41 @@ describe("startup notifier defaults", () => { }); }); + it("preserves custom desktop routing when startup AO Notifier.app setup cannot complete", () => { + writeFileSync( + configPath, + [ + "port: 3000", + "defaults:", + " notifiers: []", + "notifiers:", + " desktop:", + " plugin: desktop", + " backend: terminal-notifier", + " dashboardUrl: http://localhost:3000", + "notificationRouting:", + " urgent: [desktop]", + "projects: {}", + "", + ].join("\n"), + ); + + expect( + ensureStartupNotifierDefaults({ + configPath, + dashboardUrl: "http://localhost:3000", + desktopMode: "disable-default", + }), + ).toBe(true); + + const parsed = readConfig(); + expect(parsed.notifiers?.["desktop"]).toMatchObject({ + plugin: "desktop", + backend: "terminal-notifier", + }); + expect(parsed.notificationRouting?.urgent).toEqual(["desktop", "dashboard"]); + }); + it("preserves configured manual opt-in notifiers while removing only implicit manual defaults", () => { writeFileSync( configPath, diff --git a/packages/cli/src/lib/startup-notifier-defaults.ts b/packages/cli/src/lib/startup-notifier-defaults.ts index a5384e551..cdc299f27 100644 --- a/packages/cli/src/lib/startup-notifier-defaults.ts +++ b/packages/cli/src/lib/startup-notifier-defaults.ts @@ -224,12 +224,13 @@ export function ensureStartupNotifierDefaults(options: StartupNotifierDefaultsOp const dashboardConfigured = configuredPlugin(notifiers, "dashboard") === "dashboard"; const desktopConfigured = configuredPlugin(notifiers, "desktop") === "desktop"; + const shouldRemoveDefaultDesktopRouting = desktopMode === "disable-default" && !desktopConfigured; for (const priority of NOTIFICATION_PRIORITIES) { const existingRoute = sanitizeNotifierReferences(notifiers, routing[priority]); let nextRoute = existingRoute; - if (desktopMode === "disable-default") { + if (shouldRemoveDefaultDesktopRouting) { nextRoute = nextRoute.filter((notifierName) => notifierName !== "desktop"); } else if (shouldManageDesktopRouting && desktopConfigured) { nextRoute = nextRoute.filter((notifierName) => notifierName !== "desktop");