Skip to content

[Feature] Reduce session header redundancy: keep two layers (sidebar + chat) #276

@Astro-Han

Description

@Astro-Han

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 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/app/src/pages/session/message-timeline.tsx — inline sticky header stays unchanged.
    • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low priorityenhancementNew feature or requestuiDesign system and user interface

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions