Skip to content

feat(web): frame menu, sidebar current and color, project settings in the session frame - #151

Draft
sanchitrk wants to merge 4 commits into
canaryfrom
claude/desktop-dev-5d0aea
Draft

sanchitrk wants to merge 4 commits into
canaryfrom
claude/desktop-dev-5d0aea

Conversation

@sanchitrk

@sanchitrk sanchitrk commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Frame menu

  • Every frame's Move button becomes a ⋯ menu: Move (workspaces with ⌘N, then New Tab).
  • Session frames add Status, Priority, Group and Color, each showing its current value, then Settings below a divider.
  • The menu sizes to its content, and its row labels line up whatever the mark. The session frame keeps the thread list mounted, so the menu opens complete instead of growing by its rows.

Project settings in the session frame

  • ⋯ › Settings swaps the thread for its project's settings, titled "‹project› › Settings". Back to Thread, Esc (this frame only) or the menu row returns; the thread stays mounted underneath.
  • A banner with the project's folder tile, its folder, and its name as the page title. The name is a field: type, then Enter or leave it to save; Esc puts it back.
  • A Repositories section: the remote URL the project was cloned from (read-only, with copy) and its main checkout. Headings and rows follow Linear's settings type and spacing, a step quieter.
  • Switching threads keeps the page whole: it waits for the next project's directories and remote, then swaps in one render.

Core and app server

  • project.remote in CodeWork reads origin of the project's main checkout on the host, with credentials taken out of http(s) URLs; null for a plain folder, a sandbox checkout or no origin. Covered by the server e2e test.
  • The app server forwards projects.rename and projects.remote, and reads a project's directories (projects.spaces) from the synced space table.
  • The frame header takes the project name from the list, so it follows a rename.

Sidebar

  • The focused session's row gets a background, and other sessions shown on the workspace get full-strength text. Both keep one font weight.
  • A thread's color washes in from the row's right edge, so it shows through a run and takes no room.
  • The sidebar now takes the main thread's color over the session's, as All Threads does (apps/server read), and refreshes on a thread color change.
  • Display menus (sidebar and Threads toolbar) show their current grouping and ordering.

Menu motion

  • Menus slide 4px out of their trigger and fade in, with no scaling, then leave by fading.
  • Submenus slide out of their row toward the side they open on, and close at once.
  • Both respect reduced motion.

Testing

  • vp check passes for apps/web, apps/server and apps/contract; vp run typecheck passes.
  • Checked in the Electron app against a live provider with 9 colored sessions, 2-way and 3-way splits, and the sidebar grouped by status (Working, Review, Settled, Cancelled).
  • Checked project settings open, close and title in the app; renamed a project there and back, and switched threads of two projects with settings open while recording every frame.
  • packages/codework server tests pass except the two model.list tests, which need a generated model catalog.

🤖 Generated with Claude Code


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

sanchitrk and others added 4 commits November 10, 2026 22:40
…nu motion

- Frames get a ⋯ menu: Move (workspaces, New Tab) and, for sessions,
  Status, Priority, Group and Color with their current values. The
  session frame keeps the thread list mounted so the menu opens whole.
- Sidebar marks the focused session with a background and other
  sessions on screen with full text, at one font weight; a thread's
  color washes in from the row's right edge.
- The sidebar takes the main thread's color over the session's, as All
  Threads does, and refreshes on a thread color change.
- Display menus show their current grouping and ordering.
- Menus slide out of their trigger without scaling; submenus slide out
  of their row toward the side they open on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The session frame menu gets Settings below a divider. It swaps the
thread for its project's settings, every section stacked on one page,
titled "<project> › Settings". Back to Thread, Esc or the menu row
returns; the thread stays mounted underneath, so it comes back as left.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Project settings open on a banner: the project's folder tile, its name
  as the page title, and its folder and machine. The name is a field:
  type, then Enter or leave it to save; Esc puts it back. The new name
  shows until the rename syncs back.
- The placeholder sections leave the page; features return one by one.
- projects.rename forwards to CodeWork's project.rename through the app
  server; the widget contract mirrors the call.
- The frame header takes the project name from the list, so it follows
  a rename instead of keeping the name the thread opened with.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Project settings gain a Repositories section: the remote URL the
  project was cloned from, with a copy button, and its main checkout.
  Headings and rows follow Linear's settings type and spacing, a step
  quieter; the banner shows the project's folder only.
- Switching threads keeps the page whole: it waits for the next
  project's directories and remote before swapping in one render.
- project.remote in CodeWork reads origin of the project's main checkout
  on the host, with credentials taken out of http(s) URLs; null for a
  folder, a sandbox or no origin. The e2e test covers it.
- projects.remote and projects.spaces (directories from the synced space
  table) through the app server.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant