Home

mweinbach / agent-coworker

publicmweinbach/agent-coworker
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

Refactor desktop UI chrome and streamline chat, skills, and sidebar flows (#59)

7 months ago

e7dad94
Authored
Max Weinbach3/25/2026, 4:34:45 AM
* feat: adopt heroui desktop primitives

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* fix: stabilize heroui desktop compatibility

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* refactor: clean button compatibility wrapper

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* fix: align tooltip compatibility usage

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* refactor: polish desktop hero surfaces

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* test: stabilize desktop suites for heroui migration

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* fix: restore settings dropdown interactions

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* refactor(desktop): migrate shared controls to heroui primitives

* test(desktop): stabilize heroui desktop ui suites

* refactor(desktop): replace legacy collapsible with heroui disclosure

* refactor(desktop): migrate provider cards to heroui disclosures

* refactor(desktop): migrate sidebar controls to heroui

* refactor(desktop): replace raw desktop action buttons

* refactor(desktop): migrate explorer and settings controls to heroui

* refactor(desktop): migrate message and source controls to heroui

* HeroUI

* test(desktop): wrap protocol event updates in act

* refactor(desktop): tighten shared shell chrome

* refactor(desktop): compact chat and skills surfaces

* fix(desktop): correct skills dialog layering

* refactor(desktop): clarify workspace and skills navigation

* refactor(desktop): simplify new chat rail action

* fix(desktop): expose new chat in collapsed topbar

* fix(desktop): polish macos topbar controls

* refactor(desktop): compact context sidebar stack

* feat(desktop): move thread details into topbar

* fix(desktop): align titlebar with chat surface

* fix(desktop): deepen right sidebar cards

* fix(desktop): remove right rail divider

* fix(desktop): restore drag and hide composer rail

* refactor(desktop): soften topbar thread metadata

* Update harness.raw-loop-validation.test.ts

* fix(desktop): unify sidebar topbar seam

* refactor(desktop): rename agents to subagents

* fix(desktop): preserve button click and ref behavior

* fix(desktop): restore dialog focus and dismissal behavior

* fix(desktop): type dialog trigger child refs

* test(desktop): isolate dialog coverage from module mocks

* fix(desktop): prevent macos topbar title overlap

* fix(desktop): animate topbar title with sidebar

* fix(desktop): align skills view surfaces with topbar

* refactor(desktop): consolidate renderer token surfaces

* test(desktop): enforce token contract coverage

* test(desktop): align reasoning budget tone assertions

* feat(desktop): polish citations, topbar, activity card, and file explorer

Made-with: Cursor

* fix(desktop): address resolved PR regressions

Consume Escape in dialogs, restore focus for controlled opens, hydrate workspace thread selection through the normal path, add variant styling for asChild button usage, and recognize SVG control targets in the file explorer. Includes focused regression tests and workspace startup coverage.

* fix(desktop): harden dialog and topbar escape handling

Preserve dialog focus restoration through deferred retries, add a topmost dialog stack with body scroll lock refcounting, and stop the thread-details popover from leaking Escape into app-level shortcuts. Add focused regression coverage for stacked dialogs and the top bar Escape path.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

Parentb8856c5

79 files changed
  • .gitignore+2−0
  • apps/desktop/AGENTS.md+4−0
  • apps/desktop/bun.lock+243−68
  • apps/desktop/package.json+2−7
  • apps/desktop/src/App.tsx+42−5
  • apps/desktop/src/app/store.actions/thread.ts+390−179
  • apps/desktop/src/app/store.actions/workspace.ts+32−2
  • apps/desktop/src/app/store.helpers.ts+1
−1
  • apps/desktop/src/components/ai-elements/conversation.tsx+3−3
  • apps/desktop/src/components/ai-elements/message.tsx+117−39
  • apps/desktop/src/components/ai-elements/prompt-input.tsx+7−7
  • apps/desktop/src/components/ai-elements/reasoning.tsx+1−1
  • apps/desktop/src/components/ai-elements/sources-carousel.tsx+19−12
  • apps/desktop/src/components/ai-elements/tool.tsx+4−4
  • apps/desktop/src/components/ui/badge.tsx+49−22
  • apps/desktop/src/components/ui/button.tsx+159−41
  • apps/desktop/src/components/ui/card.tsx+75−13
  • apps/desktop/src/components/ui/checkbox.tsx+29−9
  • apps/desktop/src/components/ui/collapsible.tsx+141−4
  • apps/desktop/src/components/ui/dialog.tsx+440−33
  • apps/desktop/src/components/ui/input.tsx+21−13
  • apps/desktop/src/components/ui/scroll-shadow.tsx+10−0
  • apps/desktop/src/components/ui/select.tsx+180−72
  • apps/desktop/src/components/ui/textarea.tsx+5−3
  • apps/desktop/src/components/ui/tooltip.tsx+67−19
  • apps/desktop/src/lib/designTokens.ts+6−6
  • apps/desktop/src/styles.css+155−78
  • apps/desktop/src/styles/platform/darwin.css+2−2
  • apps/desktop/src/styles/theme-bridge.css+144−20
  • apps/desktop/src/styles/token-utilities.css+92−0
  • apps/desktop/src/styles/tokens/base.css+59−35
  • apps/desktop/src/styles/tokens/platform.css+7−6
  • apps/desktop/src/ui/ChatView.tsx+16−37
  • apps/desktop/src/ui/ContextSidebar.tsx+89−78
  • apps/desktop/src/ui/Sidebar.tsx+170−125
  • apps/desktop/src/ui/SkillsView.tsx+1−1
  • apps/desktop/src/ui/chat/ActivityGroupCard.tsx+28−28
  • apps/desktop/src/ui/chat/activityGroups.ts+2−32
  • apps/desktop/src/ui/chat/markdownPreview.ts+31−0
  • apps/desktop/src/ui/file-explorer/WorkspaceFileExplorer.tsx+393−74
  • apps/desktop/src/ui/layout/AppTopBar.tsx+267−27
  • apps/desktop/src/ui/layout/ContextSidebarResizer.tsx+1−1
  • apps/desktop/src/ui/layout/MessageBarResizer.tsx+1−1
  • apps/desktop/src/ui/layout/SidebarCollapseControl.tsx+24−3
  • apps/desktop/src/ui/onboarding/DesktopOnboarding.tsx+38−32
  • apps/desktop/src/ui/settings/SettingsShell.tsx+6−6
  • apps/desktop/src/ui/settings/pages/BackupPage.tsx+17−11
  • apps/desktop/src/ui/settings/pages/McpServersPage.tsx+6−5
  • apps/desktop/src/ui/settings/pages/MemoryPage.tsx+5−4
  • apps/desktop/src/ui/settings/pages/ProvidersPage.tsx+94−86
  • apps/desktop/src/ui/settings/pages/UpdatesPage.tsx+9−5
  • apps/desktop/src/ui/settings/pages/WorkspacesPage.tsx+31−19
  • apps/desktop/src/ui/skills/HeaderAndFilters.tsx+59−10
  • apps/desktop/src/ui/skills/InstallationCardGrid.tsx+5−5
  • apps/desktop/src/ui/skills/SkillDetailDialog.tsx+1−3
  • apps/desktop/src/ui/skills/SkillsCatalogPage.tsx+13−13
  • apps/desktop/test/app-topbar.test.tsx+227−5
  • apps/desktop/test/button-component.test.tsx+112−0
  • apps/desktop/test/chat-reasoning-ui.test.ts+9−1
  • apps/desktop/test/chat-view.stability.test.tsx+131−20
  • apps/desktop/test/context-sidebar.test.tsx+115−24
  • apps/desktop/test/developer-page.test.tsx+2−2
  • apps/desktop/test/dialog-component.test.tsx+389−0
  • apps/desktop/test/header-and-filters.test.tsx+85−0
  • apps/desktop/test/jsdomHarness.ts+21−0
  • apps/desktop/test/message-links.test.ts+3−3
  • apps/desktop/test/protocol-v2-events.test.ts+196−129
  • apps/desktop/test/providers-page.test.ts+2−2
  • apps/desktop/test/sidebar-ui.test.tsx+343−0
  • apps/desktop/test/skill-detail-dialog.test.ts+1−8
  • apps/desktop/test/skills-catalog-page.test.ts+2−0
  • apps/desktop/test/sources-carousel.test.tsx+69−0
  • apps/desktop/test/token-compliance.test.ts+126−0
  • apps/desktop/test/token-consumers.test.tsx+133−0
  • apps/desktop/test/workspace-file-explorer.test.ts+61−7
  • apps/desktop/test/workspace-startup.test.ts+158−0
  • apps/desktop/test/workspaces-page.test.ts+2−2
  • tasks/lessons.md+24−0
  • test/harness.raw-loop-validation.test.ts+12−3