What happened?
When I click an attention event in the bell dropdown for a session that's in a "waiting" state (waitingForApproval or waitingForInput), the app correctly navigates me to the matching terminal tab — but the event stays in the bell list and keeps counting toward the unread badge. Only events of kind finished are cleared on click.
Expected: clicking a row should both navigate to the tab and mark the event as seen (remove it from the badge / list, like Slack/Discord/Gmail behavior). The session is still in its waiting state, but the notification purpose ("get the user's eyes on this tab") has been fulfilled.
Observed: click navigates correctly, badge count stays at the same number, the event is still listed in the dropdown.
Note: during the same investigation session I initially saw clicks not navigating at all, but in later attempts the redirect did work consistently. So this report is specifically about the "doesn't clear" behavior — happy to file the no-redirect case separately if it resurfaces.
A small bit of uncertainty I want to flag
I'm not 100% sure whether this is purely a UX gap in AttentionBellButton or whether something on the Claude Code side is contributing. While debugging this I noticed Claude Code can spawn subagents / parent–child sessions, and I briefly wondered if subagent sessionIds were being surfaced as separate attention events while the visible tab belongs to the parent. I couldn't reproduce that mismatch in the most recent test (the click did land on the correct tab), but I wanted to mention it in case you've seen it from another angle — could be worth keeping an eye on whether Claude subsessions ever create duplicate or orphaned bell entries.
Steps to reproduce
- Start a Claude Code session in DPlex that reaches a
waitingForApproval or waitingForInput state (e.g. a permission prompt).
- Switch focus to a different tab so the session needs attention.
- Open the bell dropdown — confirm the event is listed with a red badge count.
- Click the row for the waiting session.
- Result: the correct tab is focused, but the bell still shows the event and the badge count is unchanged.
Suggested fix (one line)
In src/renderer/src/components/attention/AttentionBellButton.tsx, the handleRowClick handler only acknowledges finished events:
const handleRowClick = (event: AttentionEvent): void => {
focusSessionTab(event.sessionId, event.providerId)
if (event.kind === 'finished') acknowledge(event.compositeId)
setOpen(false)
}
Calling dismiss(event.compositeId) for the waiting kinds would resolve this:
const handleRowClick = (event: AttentionEvent): void => {
focusSessionTab(event.sessionId, event.providerId)
if (event.kind === 'finished') {
acknowledge(event.compositeId)
} else {
dismiss(event.compositeId)
}
setOpen(false)
}
The existing dismiss flow in attentionService.ts already handles re-surfacing nicely: suppressedUntilTransition clears on the next status transition, and sweepIdle() provides the idle-too-long escalation safety net. So the event will come back on its own if the session genuinely needs attention again.
AI provider involved
Claude Code
DPlex version
0.13.0
Before submitting
What happened?
When I click an attention event in the bell dropdown for a session that's in a "waiting" state (
waitingForApprovalorwaitingForInput), the app correctly navigates me to the matching terminal tab — but the event stays in the bell list and keeps counting toward the unread badge. Only events of kindfinishedare cleared on click.Expected: clicking a row should both navigate to the tab and mark the event as seen (remove it from the badge / list, like Slack/Discord/Gmail behavior). The session is still in its waiting state, but the notification purpose ("get the user's eyes on this tab") has been fulfilled.
Observed: click navigates correctly, badge count stays at the same number, the event is still listed in the dropdown.
A small bit of uncertainty I want to flag
I'm not 100% sure whether this is purely a UX gap in
AttentionBellButtonor whether something on the Claude Code side is contributing. While debugging this I noticed Claude Code can spawn subagents / parent–child sessions, and I briefly wondered if subagent sessionIds were being surfaced as separate attention events while the visible tab belongs to the parent. I couldn't reproduce that mismatch in the most recent test (the click did land on the correct tab), but I wanted to mention it in case you've seen it from another angle — could be worth keeping an eye on whether Claude subsessions ever create duplicate or orphaned bell entries.Steps to reproduce
waitingForApprovalorwaitingForInputstate (e.g. a permission prompt).Suggested fix (one line)
In
src/renderer/src/components/attention/AttentionBellButton.tsx, thehandleRowClickhandler only acknowledgesfinishedevents:Calling
dismiss(event.compositeId)for the waiting kinds would resolve this:The existing
dismissflow inattentionService.tsalready handles re-surfacing nicely:suppressedUntilTransitionclears on the next status transition, andsweepIdle()provides the idle-too-long escalation safety net. So the event will come back on its own if the session genuinely needs attention again.AI provider involved
Claude Code
DPlex version
0.13.0Before submitting