Repository navigation
cmux-next: bounce the Dock icon when an alert arrives in the background - #21735
Conversation
…nactive New Settings > Notifications row, "Bounce Dock Icon": Off, Once (default) or Until You Switch to cmux (notifications.dockBounce). A notification that alerts on this Mac (the same rule as the banner and the phone push) while cmux is not the active app bounces the Dock icon. Muted workspaces, quiet hours and banners turned off do not bounce; showcase captures post nothing. - NotificationPolicy decides the bounce with the rest of an arrival, so it is a table test; NotificationCenterService only calls requestUserAttention. - Agents may not set the key (userOnly). - Strings in all 21 locales of the settings catalog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….dockBounce Exports from the fleet export step at fede4fa; defaults snapshot from defaults_guard.py snapshot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Receipt for
|
|
red: web / Web status; do not merge until green; see lane-rules |
|
Unclear: CI failed on
Not re-run automatically: Written by |
|
Agents: |
|
Bead |
|
Found 4 test failures on Blacksmith runners: Failures
|
Review of #21735: CmuxNextApp only shrinks (check-app-size.sh). The pure notification rules (NotificationPolicy, NotificationTrigger) move beside the preferences they read in CmuxNextSettings, as a struct over the preferences (decide, clears). The App's source is 62 lines under the base. No behavior change; a quiet-hours case joins the Dock bounce tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Exports from the fleet export step at fd6bfda. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ock-bounce # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings # Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift # schemas/settings-export/settings-schema.sources.sha256 # schemas/settings/settings-schema.json
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
Exports from the fleet export step at 63903ee. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
cmux-next tour of The tour job failed before the tour ran (build or setup); the run log has the output. The tour produced no media. Tours are data in |
…ef pet test feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* cmux-next: a Dock bounce stops once its alert is read elsewhere; no bounce without a banner Follow-ups from the #21735 review: - Until You Switch to cmux bounced on after the notification was read on the phone, from the CLI or by Mark All Read, since nothing cancelled the request. DockAttention (CmuxNextSettings) keeps the running request and cancels it when the unread count reaches zero. - `notify --desktop false` asks for no banner, so it gets no bounce either: the bounce follows the banner decision, not the alert decision. CmuxNextApp source shrinks by 2 lines (the bounce helper moved out). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux-next: settings export stamp for the dock bounce follow-ups Generated only: fleet export step at 644b20c. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux-next: DockAttention lives in CmuxNextDesign; the App maps the setting Review of #21883: a settings module should not call app-wide AppKit. DockAttention moves to CmuxNextDesign with a bounce(untilActive:) API; NotificationCenterService maps notifications.dockBounce to it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux-next: settings export stamp after moving DockAttention Generated only: fleet export step at 05a097d. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
…s (whole stack) (#21738) * feat(next): float the Chief pet over every app A small Chief character in a non-activating panel that joins every Space, never takes focus, drags anywhere (its spot is kept per display and pulled back on screen), and opens the Chief on a click. Behind the chiefPet.enabled Debug Settings toggle, off by default, until it has a user setting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * refactor(next): move the Chief pet into CmuxNextFloating CmuxNextApp may not grow (code-quality SW14), so the pet lives in a new CmuxNextFloating target with the floating chat's per-display frames, which it already shares; the App keeps only the wiring and shrinks by 23 source lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 1810bb6 - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39137151099 * fix(next): resolve the Chief pet's switch inside its module A public default argument may only use what the file imports publicly; the controller now takes an optional switch and reads the tunable itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): float the full-body Chief, not Home's round avatar The App's ChiefAvatar.png is the round cat Home draws in a disc; Leo's references float the full-body Chief the Chief Dock uses. CmuxNextFloating now bundles that character (ChiefPet.png, the dock's ChiefAvatar.png) as the pet's default image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert "fix(next): float the full-body Chief, not Home's round avatar" This reverts commit 2eed332. * feat(next): the Chief pet is a pixel mascot over a glass rail Match chief-water-reference: the Chief Dock's pixel mascot (Orb by default, all nine bundled, scaled up with whole pixels) over a glass rail with a compose tool, 8 pt apart. A drag anywhere but a tool moves the pet; a click on the character or compose opens the Chief. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): give the Chief pet's rail the dock's expand chevron The rail matches chief-water-reference's capsule: compose and the chevron (the dock's disclosure mark pointing up). The character's box is 88 x 80 pt so the pixel mascot carries the reference pet's weight. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): show agent notices over the Chief pet as a glass deck What alerts on this Mac (a banner's rules) also shows over the pet, matching chief-chat-source-captures d154d558: glass capsules of the references' size (330 x 56 pt) with a bold title and one muted line and no status glyph, the older ones peeking out below as a deck; the rail's chevron unfolds them into a column and each capsule opens its tab. One notice per tab; identical content never re-animates; a finished turn leaves after 8 s while a question or failure stays, counted on the character's badge, until its tab is read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): reply to a session or the Chief from the Chief pet A click on the pet or the rail's compose opens a reply capsule just over the pet, the notices' size and glass, that takes the keys without activating cmux. It starts on the newest notice: Return types the reply into that terminal (as a notify --reply banner does) or, for an agent chat, opens the chat in the floating chat or its tab; with no notice it messages the Chief. Cmd-Return opens the target. The Quick Agent Chat's panel moves into CmuxNextFloating with the rest of the floating surfaces, so the App keeps shrinking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): turn the Chief pet on and off and pick its character in Settings home.chiefPetEnabled (off by default) and home.chiefPetMascot (the Chief Dock's nine pixel mascots, Orb by default) in Settings > Home > Chief Pet, the palette's settings rows and cmux settings set replace the Debug Settings toggle; agents may set both (looks only). The pet follows them live. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet review fixes - Replies type into a terminal only while the notice is still its tab's unread notification, as a notify --reply banner's do. - A notice read anywhere else (another client, a closed tab) leaves the pet. - The reply menu keeps two notices with one title apart, keeps the chosen session across refreshes and falls back to the Chief, never to another session; Cmd-Return opens, other command keys stop at the box. - Notice capsules take their press, so a click opens the tab; an agent chat opens its tab rather than a second copy in the floating chat. - A finished turn dropped behind three waiting notices shows nothing. - CmuxNextFloating no longer imports CmuxNextDaemon (the App maps the notification); the pet is made by the notification service, so AppServices and AppDelegate stay unchanged; the mascot constant is initial (lint); the Chief Pet settings get a card under Agents. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet labels truncate without reaching into the cell Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet safety: user-only switch, agent-still-running replies, no screen sharing - home.chiefPetEnabled is user-only: the pet puts agent output over every app and a reply box that types into terminals. The character stays agent-settable. - A pet reply types only while a program still runs in the terminal's foreground: process-info and the paste go over one connection, back to back, and a bare shell refuses the reply. - The pet, its notices and the reply box stay out of screen shares. - The notice deck takes its size with no screen, and the deck height test compares CGFloats. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports and Settings page strings for the Chief pet Generated only. Settings exports from the fleet export-settings step at 2f2f1e6 (cmux-ci step 20d9ccba77afe7b51e35de31, decoded from its BEGIN_ARTIFACT blocks), defaults snapshot from defaults_guard.py snapshot, Settings page strings from webviews/scripts/pages/gen-strings.mjs settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): import NotificationPolicy from CmuxNextSettings in the Chief pet test feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at 492302f (cmux-ci step on key chiefpet-export-settings-492302f); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at b6e4dd2 (key chiefpet-export-settings-b6e4dd2); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 5a7210a - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39189337102 * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at 5bedbf4 (key chiefpet-export-settings-5bedbf4); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at c1475df (key chiefpet-export-settings-c1475df); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate the settings export stamp for the Chief pet after the base merge Generated only, from the fleet export-settings step at bb6706c (key chiefpet-export-settings-bb6706c); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session Off, the pet builds no notice. A typed reply goes into a terminal only for an agent's notice or one posted with notify --reply, as a banner does; any other terminal notice opens its tab. When the chosen session's notice leaves, the box drops its text instead of sending it to the Chief. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Home opens Keyboard Shortcuts settings off the main thread The crash-class concurrency gate counts every finding in this PR because it touches Package.swift; HomeHostView called NSWorkspace.shared.open on the main thread (cx-050n). Use openInBackground like the other call sites. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports after the base merge Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 53ddc28 - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39313213321 * chore(next): drop the case-insensitive app/ read from the target graph (Linux autofix's output) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet bubble and reply field use the type scale Same 15pt title size and semibold weight, now from TypeScale, so the Type scale check no longer flags the pet's files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 489afb2 - regenerated schemas/settings-export/settings-schema.sources.sha256 - regenerated schemas/settings/settings-schema.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39341154309 * chore(next): PR autofix at ea05044 - regenerated docs/mdm/com.manaflow.cmux.json - regenerated docs/mdm/com.manaflow.cmux.plist - regenerated docs/mdm/managed-preferences.md - regenerated schemas/settings-export/settings-schema.sources.sha256 - regenerated schemas/settings/settings-schema.json - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39346363063 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
… the foreground (#22044) * feat(next): float the Chief pet over every app A small Chief character in a non-activating panel that joins every Space, never takes focus, drags anywhere (its spot is kept per display and pulled back on screen), and opens the Chief on a click. Behind the chiefPet.enabled Debug Settings toggle, off by default, until it has a user setting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * refactor(next): move the Chief pet into CmuxNextFloating CmuxNextApp may not grow (code-quality SW14), so the pet lives in a new CmuxNextFloating target with the floating chat's per-display frames, which it already shares; the App keeps only the wiring and shrinks by 23 source lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 1810bb6 - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39137151099 * fix(next): resolve the Chief pet's switch inside its module A public default argument may only use what the file imports publicly; the controller now takes an optional switch and reads the tunable itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): float the full-body Chief, not Home's round avatar The App's ChiefAvatar.png is the round cat Home draws in a disc; Leo's references float the full-body Chief the Chief Dock uses. CmuxNextFloating now bundles that character (ChiefPet.png, the dock's ChiefAvatar.png) as the pet's default image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert "fix(next): float the full-body Chief, not Home's round avatar" This reverts commit 2eed332. * feat(next): the Chief pet is a pixel mascot over a glass rail Match chief-water-reference: the Chief Dock's pixel mascot (Orb by default, all nine bundled, scaled up with whole pixels) over a glass rail with a compose tool, 8 pt apart. A drag anywhere but a tool moves the pet; a click on the character or compose opens the Chief. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): give the Chief pet's rail the dock's expand chevron The rail matches chief-water-reference's capsule: compose and the chevron (the dock's disclosure mark pointing up). The character's box is 88 x 80 pt so the pixel mascot carries the reference pet's weight. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): show agent notices over the Chief pet as a glass deck What alerts on this Mac (a banner's rules) also shows over the pet, matching chief-chat-source-captures d154d558: glass capsules of the references' size (330 x 56 pt) with a bold title and one muted line and no status glyph, the older ones peeking out below as a deck; the rail's chevron unfolds them into a column and each capsule opens its tab. One notice per tab; identical content never re-animates; a finished turn leaves after 8 s while a question or failure stays, counted on the character's badge, until its tab is read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): reply to a session or the Chief from the Chief pet A click on the pet or the rail's compose opens a reply capsule just over the pet, the notices' size and glass, that takes the keys without activating cmux. It starts on the newest notice: Return types the reply into that terminal (as a notify --reply banner does) or, for an agent chat, opens the chat in the floating chat or its tab; with no notice it messages the Chief. Cmd-Return opens the target. The Quick Agent Chat's panel moves into CmuxNextFloating with the rest of the floating surfaces, so the App keeps shrinking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): turn the Chief pet on and off and pick its character in Settings home.chiefPetEnabled (off by default) and home.chiefPetMascot (the Chief Dock's nine pixel mascots, Orb by default) in Settings > Home > Chief Pet, the palette's settings rows and cmux settings set replace the Debug Settings toggle; agents may set both (looks only). The pet follows them live. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet review fixes - Replies type into a terminal only while the notice is still its tab's unread notification, as a notify --reply banner's do. - A notice read anywhere else (another client, a closed tab) leaves the pet. - The reply menu keeps two notices with one title apart, keeps the chosen session across refreshes and falls back to the Chief, never to another session; Cmd-Return opens, other command keys stop at the box. - Notice capsules take their press, so a click opens the tab; an agent chat opens its tab rather than a second copy in the floating chat. - A finished turn dropped behind three waiting notices shows nothing. - CmuxNextFloating no longer imports CmuxNextDaemon (the App maps the notification); the pet is made by the notification service, so AppServices and AppDelegate stay unchanged; the mascot constant is initial (lint); the Chief Pet settings get a card under Agents. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet labels truncate without reaching into the cell Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet safety: user-only switch, agent-still-running replies, no screen sharing - home.chiefPetEnabled is user-only: the pet puts agent output over every app and a reply box that types into terminals. The character stays agent-settable. - A pet reply types only while a program still runs in the terminal's foreground: process-info and the paste go over one connection, back to back, and a bare shell refuses the reply. - The pet, its notices and the reply box stay out of screen shares. - The notice deck takes its size with no screen, and the deck height test compares CGFloats. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports and Settings page strings for the Chief pet Generated only. Settings exports from the fleet export-settings step at 2f2f1e6 (cmux-ci step 20d9ccba77afe7b51e35de31, decoded from its BEGIN_ARTIFACT blocks), defaults snapshot from defaults_guard.py snapshot, Settings page strings from webviews/scripts/pages/gen-strings.mjs settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): import NotificationPolicy from CmuxNextSettings in the Chief pet test feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at 492302f (cmux-ci step on key chiefpet-export-settings-492302f); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(cmux-tui): a reply for an exited program must not reach the shell send with expect_foreground is ignored today, so a Chief pet reply typed after its agent exited runs as a shell command. This test is red until the daemon checks the foreground in the send. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(cmux-tui): keep the send guard test out of cli.rs, rustfmt it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at b6e4dd2 (key chiefpet-export-settings-b6e4dd2); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 5a7210a - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39189337102 * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at 5bedbf4 (key chiefpet-export-settings-5bedbf4); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at c1475df (key chiefpet-export-settings-c1475df); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux-tui, cmux NEXT: the daemon refuses a pet reply once its program left the foreground send takes expect_foreground (send-expect-foreground-v1): the daemon reads the terminal's foreground executable right before the write and fails the request, writing nothing, when it is no longer the one named. The Chief pet's quick reply names the executable its process-info check saw on both the paste and the Return, so an agent that exits between the check and the paste no longer gets its reply run as a shell command. An older daemon ignores the field and the App-side check still applies. The terminal_id guard test now uses the host terminal id, so it fails on the guard and not on an unknown id. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux-tui: send params move into their own struct; the SDK sets expect_foreground server.rs is at its god-file baseline, so send's params live in cmd_terminal_io::SendParams. The Rust SDK's send helpers leave the new field missing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate the settings export stamp for the Chief pet after the base merge Generated only, from the fleet export-settings step at bb6706c (key chiefpet-export-settings-bb6706c); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux-tui: drop the redundant SendParams path in the scheduler test Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session Off, the pet builds no notice. A typed reply goes into a terminal only for an agent's notice or one posted with notify --reply, as a banner does; any other terminal notice opens its tab. When the chosen session's notice leaves, the box drops its text instead of sending it to the Chief. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Home opens Keyboard Shortcuts settings off the main thread The crash-class concurrency gate counts every finding in this PR because it touches Package.swift; HomeHostView called NSWorkspace.shared.open on the main thread (cx-050n). Use openInBackground like the other call sites. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports after the base merge Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(tui): drop a stray clippy allow left above the send capability const Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 53ddc28 - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39313213321 * chore(next): drop the case-insensitive app/ read from the target graph (Linux autofix's output) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet bubble and reply field use the type scale Same 15pt title size and semibold weight, now from TypeScale, so the Type scale check no longer flags the pet's files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(cmux-tui): a guarded send with no readable foreground writes nothing Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next, cmux-tui): review nits on the pet reply guard - The app lists send-expect-foreground-v1 as an optional capability and notes an unguarded reply when an older daemon lacks it. - expect_foreground with terminal_id is refused as not delivered, like the other send refusals. - The spec says the check is best effort, with a residual window. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux NEXT: the guarded pet reply lives on DaemonConnection; the phone lane knows expect_foreground typeToForegroundProgram does the foreground check and the two guarded writes in CmuxNextDaemon, so the App target shrinks. The regenerated phone-lane field list allows expect_foreground on send: the phone lane already has send and process-info, and the field can only refuse a write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
…cx-ghagp) CmuxNextApp may not grow (check-app-size.sh, code-quality.md SW14). BackgroundActivation (accessory policy and the menu bar item) moves to CmuxNextSettings, as #21735 did for NotificationPolicy. The App keeps only the wiring: AppServices builds it with the menu bar icon and the "may enter" rule (the process's own services, no window open, not quitting, the setting on), and WindowManager calls it before a window is ordered in and whenever its controllers change (didSet, so every removal path counts, not only the close path). The old `!isTerminating` check is dropped: prepareForTermination runs only inside a quit, while isQuitting is already true. To pay for the wiring, two four-line registry.apply blocks in WindowManager use the one-line form the file already uses elsewhere (no behavior change). CmuxNextApp source lines: no growth against base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ghagp) (#20479) * test(cmux-next): background mode is a menu bar app, a window opening comes back regular (cx-ghagp, red) Closing the last window must drop to the accessory activation policy (no Dock icon, not in Cmd-Tab); Show cmux and Settings must make the app regular before the window is ordered in. Fails on base: the policy stays regular. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(cmux-next): background mode is a menu bar app with no Dock icon until a window opens (cx-ghagp) With no cmux window open the app keeps running (terminals and agents live in their daemons). It now drops to the accessory activation policy: no Dock icon, not in Cmd-Tab, and a menu bar item (Show cmux, New Window, Settings, Quit) takes the Dock icon's place. Any shell window opening makes the app regular again before the window is ordered in, then activates it (unless it opens behind, or under no-activate). Panels (About, Start Agent, sign-in) show without leaving the mode. app.hideDockIconWithoutWindows (Settings > General, on by default) set to false keeps the old behavior. Only the process's adopted services drive the policy, so services a test builds leave the test process alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(cmux-next): background mode review fixes (cx-ghagp) - A Finder or Spotlight reopen in background mode always brings a window back, even when a panel or the menu bar item counts as visible. - No activation for windows that are never ordered in (tests). - BackgroundActivation holds its manager weakly (crash ratchet: no unowned). - The test loads a real cmux.json, so Settings opens, and checks that app.hideDockIconWithoutWindows false keeps the app regular. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(cmux-next): regenerate settings exports for app.hideDockIconWithoutWindows (cx-ghagp) Settings schema export, MDM manifests (fleet export-settings step), the defaults snapshot and the settings page strings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at ffe8040 - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38527949005 * chore(cmux-next): settings exports = base's plus app.hideDockIconWithoutWindows (cx-ghagp) The base merge dropped base's ui.paneAnimations rows from the exports. Rebuilt each export as a three-way merge of base's file and this branch's export commit, with the schema hash recomputed over the merged rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(cmux-next): defaults snapshot from the merged settings schema (cx-ghagp) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(cmux-next): settings exports on the merged base plus app.hideDockIconWithoutWindows (cx-ghagp) The textual base merge dropped base's new settings rows from the exports; rebuilt as a three-way merge with the schema hash recomputed, then the defaults snapshot and page strings regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 84f9be2 - regenerated cmux-tui/crates/cmux-app-host/generated/cmux-app.d.ts - vp fmt webviews/src/pages/home-channels/ConversationList.tsx - vp fmt webviews/src/pages/home-channels/HomeChannelsPage.tsx - vp fmt webviews/src/pages/home-channels/ThreadSheet.tsx - vp fmt webviews/src/pages/home-channels/daemonHome.ts - vp fmt webviews/src/pages/home-channels/model.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38533832455 * chore(next): PR autofix at b621efd - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38552143920 * chore(cmux-next): settings exports regenerated on the merged head (cx-ghagp) The textual base merge dropped base's freeModel.enabled row from the exports. Re-exported on the fleet at b621efd (schema hash from the export), then the defaults snapshot and page strings regenerated. Against base every file now only adds app.hideDockIconWithoutWindows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 022e73f - regenerated webviews/src/pages/settings/generated/strings.json - regenerated schemas/defaults/cmux-next.json - vp fmt webviews/src/pages/home-channels/cloudHome.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38649068647 * chore(cmux-next): settings exports regenerated on the merged head (cx-ghagp) The base merge kept this branch's older exports, which dropped base's sidebar density, free model group and notification default rows. These come from the fleet export-settings step on 022e73f and gen-strings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(cmux-next): settings strings = base's plus the two hideDockIconWithoutWindows entries (cx-ghagp) The second base merge kept base's moved keys in a different order; respliced onto base's file so the diff is only this PR's two strings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * refactor(cmux-next): background mode logic moves out of CmuxNextApp (cx-ghagp) CmuxNextApp may not grow (check-app-size.sh, code-quality.md SW14). BackgroundActivation (accessory policy and the menu bar item) moves to CmuxNextSettings, as #21735 did for NotificationPolicy. The App keeps only the wiring: AppServices builds it with the menu bar icon and the "may enter" rule (the process's own services, no window open, not quitting, the setting on), and WindowManager calls it before a window is ordered in and whenever its controllers change (didSet, so every removal path counts, not only the close path). The old `!isTerminating` check is dropped: prepareForTermination runs only inside a quit, while isQuitting is already true. To pay for the wiring, two four-line registry.apply blocks in WindowManager use the one-line form the file already uses elsewhere (no behavior change). CmuxNextApp source lines: no growth against base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): background mode's entry check holds AppServices weakly unowned is on the crash ratchet's banned list; a weak capture that answers false once AppServices is gone. AppServices imports CmuxNextIcons for the menu bar icon it names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
…& Pets (#21822) * feat(next): float the Chief pet over every app A small Chief character in a non-activating panel that joins every Space, never takes focus, drags anywhere (its spot is kept per display and pulled back on screen), and opens the Chief on a click. Behind the chiefPet.enabled Debug Settings toggle, off by default, until it has a user setting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * refactor(next): move the Chief pet into CmuxNextFloating CmuxNextApp may not grow (code-quality SW14), so the pet lives in a new CmuxNextFloating target with the floating chat's per-display frames, which it already shares; the App keeps only the wiring and shrinks by 23 source lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 1810bb6 - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39137151099 * fix(next): resolve the Chief pet's switch inside its module A public default argument may only use what the file imports publicly; the controller now takes an optional switch and reads the tunable itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): float the full-body Chief, not Home's round avatar The App's ChiefAvatar.png is the round cat Home draws in a disc; Leo's references float the full-body Chief the Chief Dock uses. CmuxNextFloating now bundles that character (ChiefPet.png, the dock's ChiefAvatar.png) as the pet's default image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert "fix(next): float the full-body Chief, not Home's round avatar" This reverts commit 2eed332. * feat(next): the Chief pet is a pixel mascot over a glass rail Match chief-water-reference: the Chief Dock's pixel mascot (Orb by default, all nine bundled, scaled up with whole pixels) over a glass rail with a compose tool, 8 pt apart. A drag anywhere but a tool moves the pet; a click on the character or compose opens the Chief. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): give the Chief pet's rail the dock's expand chevron The rail matches chief-water-reference's capsule: compose and the chevron (the dock's disclosure mark pointing up). The character's box is 88 x 80 pt so the pixel mascot carries the reference pet's weight. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): show agent notices over the Chief pet as a glass deck What alerts on this Mac (a banner's rules) also shows over the pet, matching chief-chat-source-captures d154d558: glass capsules of the references' size (330 x 56 pt) with a bold title and one muted line and no status glyph, the older ones peeking out below as a deck; the rail's chevron unfolds them into a column and each capsule opens its tab. One notice per tab; identical content never re-animates; a finished turn leaves after 8 s while a question or failure stays, counted on the character's badge, until its tab is read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): reply to a session or the Chief from the Chief pet A click on the pet or the rail's compose opens a reply capsule just over the pet, the notices' size and glass, that takes the keys without activating cmux. It starts on the newest notice: Return types the reply into that terminal (as a notify --reply banner does) or, for an agent chat, opens the chat in the floating chat or its tab; with no notice it messages the Chief. Cmd-Return opens the target. The Quick Agent Chat's panel moves into CmuxNextFloating with the rest of the floating surfaces, so the App keeps shrinking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): turn the Chief pet on and off and pick its character in Settings home.chiefPetEnabled (off by default) and home.chiefPetMascot (the Chief Dock's nine pixel mascots, Orb by default) in Settings > Home > Chief Pet, the palette's settings rows and cmux settings set replace the Debug Settings toggle; agents may set both (looks only). The pet follows them live. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet review fixes - Replies type into a terminal only while the notice is still its tab's unread notification, as a notify --reply banner's do. - A notice read anywhere else (another client, a closed tab) leaves the pet. - The reply menu keeps two notices with one title apart, keeps the chosen session across refreshes and falls back to the Chief, never to another session; Cmd-Return opens, other command keys stop at the box. - Notice capsules take their press, so a click opens the tab; an agent chat opens its tab rather than a second copy in the floating chat. - A finished turn dropped behind three waiting notices shows nothing. - CmuxNextFloating no longer imports CmuxNextDaemon (the App maps the notification); the pet is made by the notification service, so AppServices and AppDelegate stay unchanged; the mascot constant is initial (lint); the Chief Pet settings get a card under Agents. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet labels truncate without reaching into the cell Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief pet safety: user-only switch, agent-still-running replies, no screen sharing - home.chiefPetEnabled is user-only: the pet puts agent output over every app and a reply box that types into terminals. The character stays agent-settable. - A pet reply types only while a program still runs in the terminal's foreground: process-info and the paste go over one connection, back to back, and a bare shell refuses the reply. - The pet, its notices and the reply box stay out of screen shares. - The notice deck takes its size with no screen, and the deck height test compares CGFloats. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports and Settings page strings for the Chief pet Generated only. Settings exports from the fleet export-settings step at 2f2f1e6 (cmux-ci step 20d9ccba77afe7b51e35de31, decoded from its BEGIN_ARTIFACT blocks), defaults snapshot from defaults_guard.py snapshot, Settings page strings from webviews/scripts/pages/gen-strings.mjs settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): import NotificationPolicy from CmuxNextSettings in the Chief pet test feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief pet after the base merge Generated only, from the fleet export-settings step at 492302f (cmux-ci step on key chiefpet-export-settings-492302f); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(next): a Chief Pet settings page, after ChatGPT's Mini & Pets Settings gets a Chief Pet category whose card previews the pet over its rail with Show Pet / Hide Pet, then lists every character (the Chief Dock's pixel mascots) as a card with its name and a line about it, plus None, which hides the pet. The card draws home.chiefPetEnabled and home.chiefPetMascot in place of their rows; search, the palette and cmux settings still reach them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(next): Chief Pet settings page: kebab-case category id, row keys, tighter preview The category is chief-pet (gallery variants and routes are lower kebab case). The card's header and grid carry their rows' keys, so search and the gallery's control probe land on them. The preview is 160 pt tall, nearer ChatGPT's Mini & Pets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): regenerate settings exports for the Chief Pet page Generated only, from the fleet export-settings step at ff4bf11 (key chiefpet-export-settings-ff4bf11); defaults snapshot and Settings page strings checked fresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Chief Pet: list its card in the settings gallery and export its category The settings gallery covers ChiefPetCard (gallery-coverage), and the settings schema export carries the Chief Pet category the layout adds (pawprint, the pet's group moved out of Agents). The export stamp is left for the base autofix: feat-cmux-next's stamp is already stale against its own sources. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Chief Pet card: respect managed and disconnected keys, keep the pet on a refused pick The card replaces the two plain rows, so it now does what SettingRow does: its buttons are disabled while disconnected or when a key is managed, and it shows the managed reason and any refused write under the header and the grid. Picking a character turns the pet on only when the character write succeeded. The "no plain rows" test checked a data-key attribute nothing emits; it now looks for a .row with the key, and fails if SectionView stops filtering them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at c27187b - docs/mdm/com.manaflow.cmux.json - docs/mdm/com.manaflow.cmux.plist - docs/mdm/managed-preferences.md - schemas/defaults/cmux-next.json - schemas/settings-export/settings-schema.sources.sha256 - schemas/settings/settings-schema.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39380724189 * chore(next): PR autofix at b896c85 - schemas/settings-export/settings-schema.sources.sha256 Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39391206920 * Settings: the Chief Pet mascots ship inlined in the page The shipped Settings page is one self-contained index.html whose CSP allows img-src data: only, so new URL(..., import.meta.url) art never loaded. Import the PNGs and let the pages bundler inline them as data URLs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray * Settings Chief Pet: search lands on the card; a managed toggle leaves the characters pickable - The card takes the route's focus: a search result for the toggle or the character focuses Show/Hide or the selected choice. - With home.chiefPetEnabled managed on, the characters stay pickable when the mascot is editable; only a pick that must also show the pet needs the toggle. - Catalogs and the schema export go back to base plus this PR's keys: the stale export dropped base rows (screenshots.*). The PR autofix regenerates the export with the Chief Pet category. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray * Settings Chief Pet: a search result focuses its control once, after the values arrive Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray * chore(next): PR autofix (settings exports with the Chief Pet category) Applied from run 39517779622's pr-autofix-patch with pr-autofix-apply.sh --changed. Autofix-Run: 39517779622 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray * cmux NEXT Settings > Chief Pet: hovering a character previews it; the chosen one is checked As ChatGPT's picker: the preview over the rail shows the character under the pointer or keyboard focus until it leaves, without writing anything, and the chosen card carries a check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux NEXT Settings > Chief Pet: test that hovering a character previews it without picking it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux NEXT Settings > Chief Pet: a later click wins over a pick's late write; no stuck preview Review of #21822: - Picking a character while the pet is hidden turns it on only if no later click (None, Hide Pet, another pick) came while the character write was out. - A locked grid previews nothing: a disabled card may never get its mouseleave or blur. - The hover test builds its events with window.MouseEvent (Bun has no MouseEvent global). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): settings exports for the Chief Pet page (fleet export step a6c252508e25157dd685f2ee) Regenerated by run-swift-testing-suites.sh export-settings on the fleet at 98b5e74 plus #22821's one-line base compile fix (palette code; it does not reach the settings exports). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
Summary
When an agent needs you while you're in another app, cmux only posts a banner, which is easy to miss. Settings > Notifications now has Bounce Dock Icon (
notifications.dockBounce), with three choices: Off, Once (default) and Until You Switch to cmux.The bounce follows the same rule as the banner and the phone push: a notification that would alert on this Mac, arriving while cmux isn't the active app, bounces the Dock icon. Muted workspaces, quiet hours and banners set to Never don't bounce, and showcase captures post nothing.
NotificationPolicy.decidesetsDecision.bouncealongside the rest of the arrival decision, so it's covered by a table test.NotificationCenterServiceonly callsrequestUserAttention:.informationalRequestfor Once,.criticalRequestfor Until You Switch to cmux.NotificationPolicy(andNotificationTrigger) move beside the preferences they read, in CmuxNextSettings, as a struct over the preferences (decide,clears). No behavior change; CmuxNextApp source is 62 lines under the base.userOnly).This is the second of the session-settings PRs, after #21730. The two are independent.
Testing
After review: merged feat-cmux-next, moved NotificationPolicy out of the App, added a quiet-hours case (fd6bfda, exports at c99d0c8). At c99d0c8 these passed on the fleet:
DockBouncePolicyTests(8),SettingsSchemaExportTests,ManagedPreferencesManifestTests,FinishedBannerBurstTests,ApprovalBannerTests,ProgramAlertTitleTests,NotificationPreviewTests.The fleet export step at fede4fa built the package and its tests and regenerated the settings schema, MDM docs and stamp; the regenerated files are committed here.
package-test-lane.sh suiteat 8ff936b passed:DockBouncePolicyTests(7),SettingsSchemaExportTests,ManagedPreferencesManifestTests,FinishedBannerBurstTestsandApprovalBannerTests.Local checks:
check-no-godfiles.sh --base,localization_catalog.py check(no findings in this catalog), anddefaults_guard.py snapshot/check-fresh.check-concurrency.shand the namespace lint report only base files (TextWeightProbe, existing singletons).Not run: the webviews
bun test, and no tagged build, so I haven't watched the bounce itself live.Default:
notifications.dockBounce = once, approved by the coordinator under Leo's rule for settings defaults ("you pick, we toggle"); it stays a user toggle.Changelog
Added: The Dock icon bounces when an alert arrives while cmux is in the background (once by default, or until you switch back, or off).
Proof
Settings row and a Dock bounce. No recording yet: there's no tagged build from this Linux box.
🤖 Generated with Claude Code