feat(desktop): inline agent presence with state dots in the channel header - #94
Merged
Conversation
…eader The channel header now shows the channel's agents as an avatar row with state dots — priority needs-you > working > done-recent > idle — using the same visual language as ThreadAgentStatusChip (amber pulse, blue working, green done). Overflow collapses into a +N popover; clicking an agent jumps to its active conversation through the existing timeline thread seam. Presence derives from existing stores only (activeAgentTurnsStore, needsYouStore, conversationOutcomeLedger) with content-equality reference caching and community-reset wiring. needsYouStore gains a SEPARATE user-input family (kind 46040): its own pending map, LRU-bounded tombstone set, expiry scheduling, and resolve on both answer (46041) and terminal resolution (46042) — correlated to the real conversation root so header, digest, and chip agree. The 46010 approval lifecycle is untouched: reconcileNeedsYouFromFeed still only reasons about approvals (the native needs_action feed never carries 46040), locked in by a regression test. Two grok-4.5 review rounds: r1 found the 46040 extension regressed the shared seam (no ANSWER/RESOLVED resolution, no tombstones, no expiry, synthetic conversation ids, undefined breathe animation, e2e unable to click-to-thread); r2 verified every item and approved. Orchestrator added the tombstone LRU cap and the reconcile-isolation test from the review nits. Fixes #80 Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
This was referenced Aug 7, 2026
e2e shard 4 is a dead lane: cancelled at the 30m timeout on 6/6 consecutive main runs since #95
#109
Closed
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
Mission-control series (#80, spike decision: state inline + presence header): the channel header shows its agents as an avatar row with priority state dots — needs-you > working > done-recent > idle — matching
ThreadAgentStatusChip's visual language. Overflow →+Npopover; click → jump to the agent's conversation via the existing thread seam.Design
channelAgentPresence.ts: pure derivation over existing stores (activeAgentTurnsStore,needsYouStore,conversationOutcomeLedger) — no rival store; content-equality reference cache; community-reset wired.needsYouStoregains a separate 46040 user-input family: own pending map, LRU-bounded tombstones, expiry scheduling, resolution on both 46041 ANSWER and 46042 RESOLVED, correlated to the real conversation root (header/digest/chip agree). The 46010 approval lifecycle is untouched —reconcileNeedsYouFromFeedstill reasons only about approvals (the nativeneeds_actionfeed is 46010-only), locked by a regression test.useChannelUserInputfeeds the store from its existing 46040 subscription — one ingest path, no duplicate lifecycle.Tests & verify
21 unit tests on the store+presence pair (46040 lifecycle: answer-resolve, terminal-resolve, tombstone, expiry, reconcile-isolation; presence priority/expiry/stability/roster) + digest & chip suites (41 total in verification run) · Playwright smoke ×2 green (working→done hash-distinct, 46040 needs-you dot → click opens
message-thread-panel) ·pnpm run check+tscclean.Built by gpt-5.6-luna max (build + fix round); reviewed by grok-4.5 twice — r1 REQUEST_CHANGES (the 46040 extension was 'a net regression on the shared needs-you seam': no ANSWER/RESOLVED resolution, no tombstones/expiry, synthetic conversation ids, undefined breathe animation, e2e couldn't click-to-thread), r2 APPROVE with nits (tombstone LRU cap + reconcile-isolation test — both applied by the orchestrator).
Note for #81: this PR's 46040 store extension is the canonical one — #81 rebases onto it and drops its own variant.
Fixes #80