feat(sidebar): cross-device remote status rings - #636
Merged
Conversation
…vice gate, store tolerance, query single-flight)
…onical local suppression, query trigger precedence, e2e ack discipline, Node round-trip pin)
…y, export session locators, local-busy suppression union, ack contract, no-reload and suppression e2e coverage)
…to pushed snapshots
… trigger precedence
…pression keys from registry
…ide is set (cloud compatibility)
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.
What
In the left panel ("Coding Agents" sidebar), a session that is open or busy on a different device now shows a ring around its provider icon on this device:
resolvePaneActivitylogic that drives the local blue icon).sameDeviceOpenrecords). Blue wins over green, mirroring local precedence.Non-color carriers included:
data-remote-statusattribute, tooltip line, and sr-only text (a11y / automation).How
tabs.sync.pushsnapshot now stamps each pane payload withsessionKeys: string[](complete identity contract: explicitsessionRef, ClauderesumeSessionId, Codex durability, live fresh-agent identity,terminal:fallback) andbusySessionKeys: string[](the effective busy identity only — alias identities stay green, matching the producing device).tabs.sync.query(previously only on WS ready/reconnect) with trigger precedence — event triggers (ready/reconnect/retention) always supersede immediately; the interval skips while a query is outstanding with bounded 90s stale replacement.selectRemoteSessionActivity/selectSameDeviceSessionKeysselectors + Sidebar gate (collectSessionRefsFromTabs ∪ collectPaneIdentityActivity ∪ collectBusySessionKeys, plus same-device keys). Comparator discipline maintained (areSidebarItemPropsEqual).Tests
npm run checkgreen at the reviewed HEAD (client/server/electron + typecheck).sidebar-remote-status-rings-rust.spec.ts, real Rust server): baseline→busy→open→absent across reloads; no-reload liveness through the 30s periodic query; suppression for locally-open and crafted same-device records; revision-bumped, ack-awaited raw-WS pushes from a second device.ws-tabs-registry.test.tsasserts byte-identicalsessionKeys/busySessionKeysround-trip.Notes
d484f4275) and the delta passed independent review at8043ce20e.