feat(site): move PR icon to diff line, add subagent status icons, persist kebab on active chat - #28317
Closed
tracyjohnsonux wants to merge 3 commits into
Closed
feat(site): move PR icon to diff line, add subagent status icons, persist kebab on active chat#28317tracyjohnsonux wants to merge 3 commits into
tracyjohnsonux wants to merge 3 commits into
Conversation
…sist kebab on active chat
tracyjohnsonux
added a commit
that referenced
this pull request
Aug 19, 2026
… to diff line, center unread dot, persist kebab (#28326) Three chat-sidebar row updates cherry-picked from #28317 (that PR stays open as the full riff), plus one removal: - **PR icon moves to the diff line.** The linked pull request icon (open / draft / merged / closed) no longer replaces the status icon when the chat is idle. It renders on the second line next to the `+additions -deletions` stats, in both the sidebar tree and the chat search results, regardless of chat status. - **Unread dot alignment.** The unread dot is centered in a box matching the kebab's width, so it sits on the same axis as the actions trigger instead of shifting when the hover swap happens. - **Persistent kebab on the selected chat.** The row actions trigger stays visible on the active chat (no hover required, reachable on touch devices); the timestamp is hidden there. Other rows keep the hover swap. - **Subagent count badge removed.** The `N` + bot icon added to the metadata line in #28234 no longer renders, making room for the PR icon and diff stats. The "Show subagents" menu toggle and expand behavior are unchanged. Status and PR icons carry `role="img"` with accessible labels ("Idle", "Pull request merged", ...). <details> <summary>Implementation notes</summary> - `statusConfig.ts`: `getChatDisplayConfig(chat)` now returns the status icon plus a separate `prIcon` config (icon, className, accessible label) instead of letting the PR icon take precedence over the status. Labels added for all status and PR states. - `ChatTreeNode.tsx` / `ChatSearchResults.tsx`: render `prIcon` on the second line before the line stats. - Kebab persistence reuses the existing `isActiveChat` value: `opacity-100` on the trigger, `hidden` on the timestamp for the active row. - `ChatTreeNode.tsx`: the on-row subagent count badge (`childIDs.length` + `BotIcon`) is removed; the `SubagentsMenuToggle` story only asserts the menu toggle, so it still passes. - Not included from #28317: the subagent status icon variants (`CheckCheckIcon` / `SubagentsLoaderIcon`, the `hasSubagents` param, and the `WithSubagentStatusIcons` story). Validation: - `pnpm run lint` (biome, tsc, knip, circular deps, compiler): pass - Story tests: 96 passed (4 files) including the updated `WithPRStateIcons` label assertions and the new `ActiveChatKebabPersistent` story - Unit suite for the sidebar area: 65 passed - `make pre-commit` (via git hook): pass </details> _Generated by Coder Agents on behalf of @tracyjohnsonux._
tracyjohnsonux
marked this pull request as ready for review
August 20, 2026 19:10
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.
Updates the agents chat sidebar rows in three ways, per design mocks:
+additions -deletionsstats, in both the sidebar tree and the chat search results. It also shows regardless of chat status instead of only when idle.CheckCheck) and the working spinner becomes a new double-arcSubagentsLoaderIcondrawn on the lucide 24x24 grid, whose inner arc counter-rotates at a slower speed so the motion reads as concurrent work. The unread blue dot is unchanged. Status and PR icons now carryrole="img"with accessible labels ("Idle", "Working, has subagents", "Pull request merged", ...).Storybook: updated
WithPRStateIconsto assert the PR icon labels, and addedWithSubagentStatusIconsandActiveChatKebabPersistentstories with play assertions.Implementation notes and decisions
Approach
statusConfig.ts:getChatDisplayConfig(chat, hasSubagents)now returns the pure status icon plus a separateprIconconfig (icon, className, accessible label) instead of letting the PR icon take precedence over the waiting state. Subagent icon variants live in asubagentsStatusConfigoverlay for thewaitingandrunningstates.SubagentsLoaderIcon.tsx: feature-local SVG (lucideLoaderCirclearc plus a scaled inner arc; each arc animates independently viaorigin-center [transform-box:view-box]) rather than a sharedsite/src/componentsprimitive, per the guideline to keep feature-specific variants local until a shared design lands.ChatTreeNode.tsx/ChatSearchResults.tsx: renderprIconon the second line before the line stats; passhasChildren(same condition as the subagent count badge) for the icon variants. Search results always use the single-agent variants since subagent relationships are not available there.isActiveChatvalue:opacity-100on the trigger andhiddenon the timestamp for the active row.Decisions
ActiveChatKebabPersistentassertsgetComputedStyle(...).opacitybecause the reveal is opacity-based;toBeVisible()ignores opacity and there is no semantic query for it.Validation
pnpm lint(biome, tsc, circular deps, knip, compiler): passmake pre-commit: pass🤖 Generated by Coder Agents on behalf of @tracyjohnsonux