Repository navigation
Conversation
Treat Live Activity as always-updating status and reserve banners for done/needs-reply, quieting them while you are actively on web/desktop.
Restore post-send Live Activity arming, clear rolled-up parent attention on side-chat delete, retry banner registration, keep content-only APNs at priority 5, and only companion-push on real alert transitions.
Keep main widget publishing and Android permission gating, drop the overlapping subagent-approval rollup Julius flagged, and leave side-chat rollup plus inbox notification behavior on top.
Seed childParentByThreadRef from thread.deleted payloads so catch-up or reset gaps still clear rolled-up Needs your reply state.
The shell helper is not an AppThread payload; cast the test event so server typecheck passes.
Avoid family-wide projection scans for side-chat rollups, suppress mobile banners only for the linked CloudLink user, and advance parent alert timestamps from child side-chat waits so Android does not drop repeats. Co-authored-by: Cursor <cursoragent@cursor.com>
…fications Co-authored-by: Cursor <cursoragent@cursor.com>
…ledger Co-authored-by: Cursor <cursoragent@cursor.com>
|
This PR changes the test suite by +21 test cases (browser 0, unit +13, server +8). Keep tests that would fail for a real reason, and test logic below the UI where it can be. See Testing. |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Mobile agent notifications were laggy, chatty mid-run, and easy to miss when a completion was held for five seconds waiting to see if more work would start. This reframes them as an inbox, not a live tool transcript.
Mental model
Think email, not a streaming console:
Copy stays short and status-shaped: Working, Ready to review, Needs your reply, All caught up. Mid-run tool chatter no longer drives banners.
How delivery works (host → relay → phone)
AgentAwarenessRelay) projects each listed thread into awareness state (phase + status). Subagent/side-chat approvals roll up onto the parent. Completions and failures publish immediately (the old ~5s completion hold dropped most banners when a follow-up queued inside the window). Tombstones still wait ~1.5s so a clear cannot race a live update.BackgroundPolicy.shouldSuppressMobileNotificationAlerts): if a web or desktop client is visible + focused + recently interacted, and the host is not idle / locked / suspended, the publish setssuppressAlerts: true. Live Activity content still refreshes; audible banners and companion pushes do not.interruption-level: activeso Focus / notification summary still apply without treating these as time-sensitive.Deploy note
Device feel needs both a host with this build and a relay deploy. Host-only or relay-only will leave half the path on the old behavior.
Test plan
BackgroundPolicy,AgentAwarenessRelay,ApnsClient,ApnsDeliveries, relayApipublish pathsuppressAlertsCreated with Composer in Cursor.
🤖 Generated with Claude Code