You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reduce visual chrome around an active session. Today the same session title appears in three places at once — sidebar entry, top desktop titlebar (breadcrumb pawwork / <session title>), and the inline sticky header inside the chat column. Goal: a calmer two-layer UI (sidebar + chat) without losing the affordances that the inline header carries (parent → child breadcrumb, double-click rename, ... menu, working spinner).
What do you do today?
The session title renders three times for a single active session. The titlebar breadcrumb segment duplicates information that is already implied by the sidebar selection and explicitly shown by the inline header. The inline header is the only one that owns interactive affordances, but it gets visually crowded by the duplicate text immediately above it.
Reference screenshot in the originating discussion (PawWork desktop, current dev): three repeated PR #274 审查:P-level 分级行内评论 strings stacked in sidebar / titlebar breadcrumb / inline header.
What would a good result look like?
Pick Option A from the discussion: drop the session segment from the top titlebar, keep the inline sticky header as the single source of truth for session-level chrome. Concretely:
Top desktop titlebar shows only workspace identity (pawwork), no session title segment.
Inline sticky header in packages/app/src/pages/session/message-timeline.tsx keeps current responsibilities: parent → child breadcrumb, dblclick rename, ... menu, working spinner.
document.title (and BrowserWindow.title on desktop) continues to include the session name, so OS-level cmd-tab / Alt-Tab / dock identification still works.
Sidebar entry unchanged.
Net result: visually two layers (sidebar + chat content), with the chat content's first row acting as the session title bar.
Why not Option B (merge inline header into the top titlebar)?
Considered and rejected on cross-platform grounds:
macOS uses titleBarStyle: "hidden" (packages/desktop-electron/src/main/windows.ts:82), so the entire 40px titlebar is HTML and can absorb session affordances. B is feasible there, modulo traffic-light reserved zone and -webkit-app-region: no-drag scoping for rename input / dblclick / dropdown.
Windows and Linux do not set titleBarStyle: "hidden" (only macOS branch in windows.ts:80-85). The OS draws its own native titlebar above the in-app strip. Even after merging, Windows users would still see OS titlebar + in-app strip + chat content — three layers, with the top one unremovable short of frame: false and reimplementing Windows native chrome (min/max/close + Snap Layouts + Aero Snap). That is a separate, much larger workstream.
The in-app strip is already non-draggable on Windows (data-shell-drag-region={!windows() || undefined}, titlebar.tsx:94). Putting session title there means the same UI element is draggable on macOS but not on Windows, which is exactly the cross-platform inconsistency we want to avoid.
PawWork's audience includes non-technical users on both platforms. Platform-divergent header behaviour costs more in support burden than the elegance gain on macOS.
Which audience does this matter to most?
Both
Extra context
Follow-up to perf(app): remove session progress whip bar #275 (whip progress bar removal). That PR removed one of the redundant running indicators on the same surface; this issue handles the remaining title duplication.
Files in scope for Option A:
packages/app/src/components/titlebar.tsx — center portal currently mounts <workspace> / <session title> breadcrumb; trim to workspace-only.
packages/app/src/pages/layout/pawwork-titlebar.tsx — the small portaled title component; either drop usage or limit to workspace label.
packages/desktop-electron/src/main/windows.ts — verify BrowserWindow.title updates with session for OS-level identification, since the visual breadcrumb no longer carries it.
Tests likely affected: packages/app/src/shell-frame-contract.test.ts, packages/app/src/components/titlebar-tauri-compat.test.ts, packages/app/src/components/titlebar-history.test.ts. Need to update assertions about titlebar center content.
What task are you trying to do?
Reduce visual chrome around an active session. Today the same session title appears in three places at once — sidebar entry, top desktop titlebar (breadcrumb
pawwork / <session title>), and the inline sticky header inside the chat column. Goal: a calmer two-layer UI (sidebar + chat) without losing the affordances that the inline header carries (parent → child breadcrumb, double-click rename,...menu, working spinner).What do you do today?
The session title renders three times for a single active session. The titlebar breadcrumb segment duplicates information that is already implied by the sidebar selection and explicitly shown by the inline header. The inline header is the only one that owns interactive affordances, but it gets visually crowded by the duplicate text immediately above it.
Reference screenshot in the originating discussion (PawWork desktop, current
dev): three repeatedPR #274 审查:P-level 分级行内评论strings stacked in sidebar / titlebar breadcrumb / inline header.What would a good result look like?
Pick Option A from the discussion: drop the session segment from the top titlebar, keep the inline sticky header as the single source of truth for session-level chrome. Concretely:
pawwork), no session title segment.packages/app/src/pages/session/message-timeline.tsxkeeps current responsibilities: parent → child breadcrumb, dblclick rename,...menu, working spinner.document.title(andBrowserWindow.titleon desktop) continues to include the session name, so OS-level cmd-tab / Alt-Tab / dock identification still works.Net result: visually two layers (sidebar + chat content), with the chat content's first row acting as the session title bar.
Why not Option B (merge inline header into the top titlebar)?
Considered and rejected on cross-platform grounds:
titleBarStyle: "hidden"(packages/desktop-electron/src/main/windows.ts:82), so the entire 40px titlebar is HTML and can absorb session affordances. B is feasible there, modulo traffic-light reserved zone and-webkit-app-region: no-dragscoping for rename input / dblclick / dropdown.titleBarStyle: "hidden"(only macOS branch inwindows.ts:80-85). The OS draws its own native titlebar above the in-app strip. Even after merging, Windows users would still see OS titlebar + in-app strip + chat content — three layers, with the top one unremovable short offrame: falseand reimplementing Windows native chrome (min/max/close + Snap Layouts + Aero Snap). That is a separate, much larger workstream.data-shell-drag-region={!windows() || undefined},titlebar.tsx:94). Putting session title there means the same UI element is draggable on macOS but not on Windows, which is exactly the cross-platform inconsistency we want to avoid.PawWork's audience includes non-technical users on both platforms. Platform-divergent header behaviour costs more in support burden than the elegance gain on macOS.
Which audience does this matter to most?
Both
Extra context
packages/app/src/components/titlebar.tsx— center portal currently mounts<workspace> / <session title>breadcrumb; trim to workspace-only.packages/app/src/pages/layout/pawwork-titlebar.tsx— the small portaled title component; either drop usage or limit to workspace label.packages/app/src/pages/session/message-timeline.tsx— inline sticky header stays unchanged.packages/desktop-electron/src/main/windows.ts— verifyBrowserWindow.titleupdates with session for OS-level identification, since the visual breadcrumb no longer carries it.packages/app/src/shell-frame-contract.test.ts,packages/app/src/components/titlebar-tauri-compat.test.ts,packages/app/src/components/titlebar-history.test.ts. Need to update assertions about titlebar center content.