Skip to content

Infinite Canvas — Phase 2: Core panels (Conversation + Terminal) #63

Description

@Legacynnn

Part of the Infinite Canvas epic: #61

Phase 2 — Core panels: Conversation + Terminal on the canvas

Make the two most important panel types fully live inside canvas PanelShape hosts.

Scope

  • Conversation panel — host src/features/conversation/ (renderer + use-streaming hook) inside a canvas panel. Streaming, sending prompts, scroll-to-bottom must work within a panel that can be moved/resized/zoomed.
  • Terminal panel — host the existing PTY terminal (src/features/terminal/ + terminal_commands.rs) inside a canvas panel. Spawn/stream/stdin/interrupt all functional; each terminal keyed by instance UUID.
  • Panel chrome — per-panel header with title + controls (close, panel-type label); content stays interactive while panning/zooming.
  • Lifecycle — opening a panel binds it to a session/PTY; closing tears down cleanly. Panel ↔ session/PTY mapping persisted in canvas_panels.config.
  • Performance baseline — gate/virtualize rendering or input for off-screen panels so multiple live panels don't jank.

Out of scope

Connections between panels (Phase 3), notes/drawing/editor (Phase 4), global controls (Phase 5).

Acceptance

  • Multiple conversation and terminal panels run live on one canvas; survive mode toggle + restart (re-attaching to existing sessions/PTYs where applicable).
  • Interactions stay smooth with several live panels open.
  • Persistence/mapping changes covered by tests; lint/typecheck/test pass.

Metadata

Metadata

Assignees

No one assigned

    Labels

    canvasInfinite Canvas modefeatureFeature work or product improvement

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions