Reworks /workspace/:projectId around tasks + notes as the main surface with chat demoted to a bottom-anchored floating widget modeled on the Knowledge view's mini-chat.
Layout
Grid collapses from 3 columns (tasks | chat | notes) to 2 columns (tasks 0.85fr | notes 2.15fr).
Chat lives in a new WorkspaceChatWidget — bottom-anchored dock, centered within --page-max-width, rounded top corners, --color-bg-secondary, upward shadow. Collapsed = input-only dock. Expanded = full ChatPanel above the input.
Pinned per-project conversation (resume/create on mount, delete-if-empty-and-new on unmount — existing workspace behavior, moved into the widget).
Restart button: creates a new conversation; old one remains discoverable.
History dropdown: lists conversations where rag_project_id === projectId, newest first; click to switch.
Auto-expand on send from the collapsed input.
Widget owns the SSE streamingToolCalls watcher and emits note-changed / task-changed events; the view listens and reloads the affected panel refs.
Notes panel polish
Notes-picker rail widens from 155px → 200px and gets --color-bg-card so it no longer visually merges with the tasks panel.
Active-note indicator moved from the left edge to the right edge (pointing toward the editor).
Dropped the cascade of horizontal dividers (panel-header, note-title-row, tag-row, tag-suggestions, toolbar-row, link-suggest-strip) so title / tags / toolbar read as a unified field above the body.
Note title input: bumped to 1.4rem Fraunces serif with 0.9/1.1rem row padding.
Notes rail visually reads as part of the notes panel (tinted), active-note indicator sits on the right edge
Note title reads large and serif; no dividers between title/tags/toolbar/body
## Summary
Reworks `/workspace/:projectId` around **tasks + notes as the main surface** with chat demoted to a **bottom-anchored floating widget** modeled on the Knowledge view's mini-chat.
## Layout
- Grid collapses from 3 columns (`tasks | chat | notes`) to **2 columns (`tasks 0.85fr | notes 2.15fr`)**.
- Chat lives in a new `WorkspaceChatWidget` — bottom-anchored dock, centered within `--page-max-width`, rounded top corners, `--color-bg-secondary`, upward shadow. Collapsed = input-only dock. Expanded = full `ChatPanel` above the input.
- Header toggles simplified from `Tasks | Chat | Notes` → `Tasks | Notes`.
## Chat widget features
- Pinned per-project conversation (resume/create on mount, delete-if-empty-and-new on unmount — existing workspace behavior, moved into the widget).
- **Restart** button: creates a new conversation; old one remains discoverable.
- **History dropdown**: lists conversations where `rag_project_id === projectId`, newest first; click to switch.
- Auto-expand on send from the collapsed input.
- Widget owns the SSE `streamingToolCalls` watcher and emits `note-changed` / `task-changed` events; the view listens and reloads the affected panel refs.
## Notes panel polish
- Notes-picker rail widens from 155px → 200px and gets `--color-bg-card` so it no longer visually merges with the tasks panel.
- Active-note indicator moved from the left edge to the right edge (pointing toward the editor).
- Dropped the cascade of horizontal dividers (`panel-header`, `note-title-row`, `tag-row`, `tag-suggestions`, `toolbar-row`, `link-suggest-strip`) so title / tags / toolbar read as a unified field above the body.
- Note title input: bumped to 1.4rem Fraunces serif with 0.9/1.1rem row padding.
## Files
- **New:** `frontend/src/components/WorkspaceChatWidget.vue`
- **Modified:** `frontend/src/views/WorkspaceView.vue`, `frontend/src/components/WorkspaceNoteEditor.vue`
No backend, chat store, or API changes.
## Test plan
- [x] `make typecheck` passes
- [x] `make lint` passes
- [ ] Open a project workspace → widget appears collapsed at bottom, grid is tasks/notes at 0.85:2.15
- [ ] Expand widget → ChatPanel renders pinned conversation
- [ ] Send a message that creates a note / task → notes panel or tasks panel reloads accordingly
- [ ] Restart ↻ → new conversation; old one appears in ▾ history dropdown and in `/chat`
- [ ] Collapse, reload page → widget restores collapsed, pinned conversation intact
- [ ] Notes rail visually reads as part of the notes panel (tinted), active-note indicator sits on the right edge
- [ ] Note title reads large and serif; no dividers between title/tags/toolbar/body
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Reworks
/workspace/:projectIdaround tasks + notes as the main surface with chat demoted to a bottom-anchored floating widget modeled on the Knowledge view's mini-chat.Layout
tasks | chat | notes) to 2 columns (tasks 0.85fr | notes 2.15fr).WorkspaceChatWidget— bottom-anchored dock, centered within--page-max-width, rounded top corners,--color-bg-secondary, upward shadow. Collapsed = input-only dock. Expanded = fullChatPanelabove the input.Tasks | Chat | Notes→Tasks | Notes.Chat widget features
rag_project_id === projectId, newest first; click to switch.streamingToolCallswatcher and emitsnote-changed/task-changedevents; the view listens and reloads the affected panel refs.Notes panel polish
--color-bg-cardso it no longer visually merges with the tasks panel.panel-header,note-title-row,tag-row,tag-suggestions,toolbar-row,link-suggest-strip) so title / tags / toolbar read as a unified field above the body.Files
frontend/src/components/WorkspaceChatWidget.vuefrontend/src/views/WorkspaceView.vue,frontend/src/components/WorkspaceNoteEditor.vueNo backend, chat store, or API changes.
Test plan
make typecheckpassesmake lintpasses/chat