feat(desktop): worktree-aware sidebar grouping + composer/sidebar UX fixes

Group recents as parent-repo → worktree → sessions using local git
metadata (probed over IPC, with a path-name heuristic fallback for
remote backends). Single-worktree repos collapse to one level. Sessions
order by creation time and never reshuffle on new messages.

Also: fuse the status stack to the composer border, restore icon actions
in the queue panel, fix sidebar label truncation and drag styling, hide
sticky-message attachments while pinned, and bump the terminal font.
This commit is contained in:
Brooklyn Nicholson
2026-06-12 18:18:39 -05:00
parent a118b94a85
commit e90672696e
21 changed files with 1298 additions and 140 deletions
+22 -1
View File
@@ -26,6 +26,13 @@
font-display: swap;
src: url('./fonts/JetBrainsMono-Regular.woff2') format('woff2');
}
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url('./fonts/JetBrainsMono-Medium.woff2') format('woff2');
}
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
@@ -419,6 +426,10 @@
body,
#root {
height: 100%;
/* App shell, not a document: the window itself never scrolls on either axis
(panes own their own scroll). Belt to the auto-scroll axis-lock in the
sidebar reorder DnD — nothing can drag the whole shell sideways. */
overflow: hidden;
}
html {
@@ -433,7 +444,6 @@
font-size: 0.8125rem;
line-height: var(--dt-line-height, 1.55);
letter-spacing: var(--dt-letter-spacing, 0);
overflow: hidden;
-webkit-user-select: none;
user-select: none;
-webkit-font-smoothing: antialiased;
@@ -915,6 +925,17 @@ canvas {
mask-image: none;
}
/* Attachment chips sit above the clamped text. They render normally in flow,
but collapse to nothing while the bubble is stuck to the top of the viewport
(data-stuck, set by an IntersectionObserver sentinel) so a prompt with
attachments can't eat the screen as you scroll past it during a stream. */
[data-stuck='true'] .sticky-human-attachments {
max-height: 0;
overflow: hidden;
border-bottom-width: 0;
padding-bottom: 0;
}
/* The thread renders items in natural document flow (padding spacers, not
transforms) and @tanstack/react-virtual already adjusts scrollTop itself
when an off-screen turn is measured and its real height differs from the