Skip to content

feat(canvas): split-panel conversation canvas with cross-chat sibling awareness#69

Open
Legacynnn wants to merge 1 commit into
mainfrom
Legacynnn/split-panel-conversation-tabs
Open

feat(canvas): split-panel conversation canvas with cross-chat sibling awareness#69
Legacynnn wants to merge 1 commit into
mainfrom
Legacynnn/split-panel-conversation-tabs

Conversation

@Legacynnn

Copy link
Copy Markdown
Owner

Summary

Splits the workspace center column into a recursive split-canvas of conversation panes, and makes agents aware of the other panes they share a canvas with.

  • Split panes — Drag a conversation onto another's edge to split the center column into side-by-side (row) or stacked (col) panes, up to 4. Resize the splits, rearrange panes by drag, and close them. The pane tree is a pure, fully unit-tested model (src/shell/canvas/tree-model.ts); useCanvasState layers persistence + reducers on top.
  • Persistent layout — The split is persisted per workspace to localStorage and survives navigating to other (non-split) sessions and back. It only dissolves when closed down to a single pane. Single sessions still render through the normal conversation path.
  • ⌘W closes the focused pane — wired through the shell event bus (canvas-pane-closeable-changed / close-focused-canvas-pane) and global shortcut handlers.
  • Cross-chat sibling awareness — When a send originates from a split, the frontend passes the sibling session IDs to the backend. The Helmor system prompt gains a "sibling panes" addendum listing each open sibling (title + session id) and the concrete helmor CLI commands to inspect, read, or hand them work (session list, session get-messages, send). The send command's blocking contract is made explicit so the agent doesn't poll. Single-pane sends are byte-for-byte unchanged (empty siblings ⇒ no addendum).

Test Plan

  • New unit tests for the pane-tree model, persistence round-trip, DnD, and the useCanvasState hook (src/shell/canvas/*.test.*) — pass.
  • Panel tests (src/features/panel/index.test.tsx) — pass.
  • Rust system-prompt tests cover both the single-pane (no addendum) and multi-pane (titles + CLI commands + blocking contract) cases — pass.
  • Manual: drag-split a conversation, resize/rearrange/close panes, ⌘W, reload to confirm persistence; send from a split and confirm the agent can list/read/message siblings.

Note: pre-existing, unrelated test failures on main in features/editor/index.test.tsx (Monaco focus/timing) and features/terminal/terminal-presets.test.ts, and one env-sensitive rust test (workspace::scripts ... helmor_port_vars), are not affected by this branch — verified they fail identically on a clean base.

🤖 Generated with Claude Code

… awareness

Split the workspace center column into a recursive pane tree: drag a
conversation onto another's edge to split into side-by-side or stacked
panes (up to 4), resize, rearrange, and close panes. Layout persists per
workspace and survives navigating away and back; ⌘W closes the focused
pane.

Agents sent from a split now receive a 'sibling panes' addendum in the
Helmor system prompt listing the other open sessions plus the helmor CLI
commands to inspect, read, or hand them work. Single-pane sends are
byte-for-byte unchanged.
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