refactor(workspace): chat UX polish sweep — paper cuts #572

Closed
opened 2026-04-30 16:54:04 +00:00 by claude-desktop · 1 comment
Collaborator

User story

As an operator, I want the small visual + ergonomic rough edges in the workspace chat fixed in a single sweep, so the surface stops feeling half-built.

Acceptance criteria

Iconography + design system

  • Replace ▾ ▸ Unicode glyphs in apps/web/src/components/planner/transcript.tsx:128 with lucide ChevronDown / ChevronRight.
  • Migrate the slash / file palette buttons in apps/web/src/components/planner/composer.tsx:383 to the design-system <Button>.
  • Streaming bubble's blinking cursor unmounts cleanly on phase=done (no lingering frame).

Composer

  • Persist composer draft in localStorage keyed by session id; restore on reload.
  • Send button shows ⌘+Enter shortcut hint visibly (not only in placeholder).
  • After "Discuss with foreman" pre-fills the draft, focus the composer textarea.
  • ?task=<id> cleanup — handled in PR #573 (c1413e6: 2 s fallback timer strips the param when appendMessage is skipped server-side).

Transcript

  • Code blocks gain a copy-to-clipboard button + language label tag.
  • Date-group separators between days (e.g. "Today", "Yesterday", dddd).
  • Each message bubble exposes a copy-message icon on hover.
  • Markdown rendering: collapse messages > 2000 chars with "Show full message" toggle.

Sidebar

  • Sessions list groups by date heading (Today / Yesterday / This week / Older).
  • turn_count field renders as 0 turns (currently empty), 1 turn, N turns.
  • Repo select label promoted to text-meta; show recent repos first.

Empty state

  • Empty workspace surfaces three example prompts (configurable from agents.json::types.foreman.example_prompts).

Errors

  • Foreman stream phase=error surfaces an inline retry button on the streaming bubble (not just a toast).

Out of scope

  • The big-ticket items above; this is paper cuts only.

References

  • Audit § Bugs + § Bad UX + § Small polish.
  • Spec: specs/workspace-chat-overhaul.md § Polish sweep.
## User story As an operator, I want the small visual + ergonomic rough edges in the workspace chat fixed in a single sweep, so the surface stops feeling half-built. ## Acceptance criteria ### Iconography + design system - [ ] Replace `▾ ▸` Unicode glyphs in `apps/web/src/components/planner/transcript.tsx:128` with lucide `ChevronDown` / `ChevronRight`. - [ ] Migrate the slash / file palette buttons in `apps/web/src/components/planner/composer.tsx:383` to the design-system `<Button>`. - [ ] Streaming bubble's blinking cursor unmounts cleanly on `phase=done` (no lingering frame). ### Composer - [ ] Persist composer draft in `localStorage` keyed by session id; restore on reload. - [ ] Send button shows `⌘+Enter` shortcut hint visibly (not only in placeholder). - [ ] After "Discuss with foreman" pre-fills the draft, focus the composer textarea. - [ ] ~~`?task=<id>` cleanup~~ — handled in PR #573 (c1413e6: 2 s fallback timer strips the param when `appendMessage` is skipped server-side). ### Transcript - [ ] Code blocks gain a copy-to-clipboard button + language label tag. - [ ] Date-group separators between days (e.g. "Today", "Yesterday", `dddd`). - [ ] Each message bubble exposes a copy-message icon on hover. - [ ] Markdown rendering: collapse messages > 2000 chars with "Show full message" toggle. ### Sidebar - [ ] Sessions list groups by date heading (Today / Yesterday / This week / Older). - [ ] `turn_count` field renders as `0 turns` (currently empty), `1 turn`, `N turns`. - [ ] Repo select label promoted to `text-meta`; show recent repos first. ### Empty state - [ ] Empty workspace surfaces three example prompts (configurable from `agents.json::types.foreman.example_prompts`). ### Errors - [ ] Foreman stream `phase=error` surfaces an inline retry button on the streaming bubble (not just a toast). ## Out of scope - The big-ticket items above; this is paper cuts only. ## References - Audit § Bugs + § Bad UX + § Small polish. - Spec: `specs/workspace-chat-overhaul.md` § Polish sweep.
Author
Collaborator

Shipped via PR #612 (merged 2026-04-30 21:43 UTC). Closes #572 keyword in PR body didn't auto-close — closing manually to clear stuck IDLE-ASSIGNED card from board.

Shipped via PR #612 (merged 2026-04-30 21:43 UTC). `Closes #572` keyword in PR body didn't auto-close — closing manually to clear stuck IDLE-ASSIGNED card from board.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
charles/claude-hooks#572
No description provided.