Part of the Infinite Canvas epic: #61
Phase 3 — Universal connections + conversation→terminal routing
Let any panel connect to any other, form chains, and give connections real behavior.
Scope
- Connection model —
canvas_connections table (id, workspace_id, from_panel_id, to_panel_id, kind, meta JSON) + CRUD commands + UiMutationEvent sync. (If created in Phase 1, wire it up here.)
- Connect UX — drag from a panel connector to another panel to create an edge; edges render on the canvas; chains allowed (A→B→C). Each panel exposes which panels it is connected to.
- Endpoint semantics:
- Conversation → Terminal: agent shell commands run in / stream to that terminal.
- Conversation → Conversation: orchestration link (dispatch/manage via Helmor CLI); visible on canvas.
- Other pairs: scoped context binding (documented; deeper behavior can be incremental).
- "Run with a specific terminal" control — when a conversation is connected to ≥1 terminal, the user picks which terminal receives execution.
Out of scope
Browser/app endpoints (Phase 7), CLI-driven connect (Phase 6 — though the backend command should be reusable by the CLI).
Acceptance
- User can connect/disconnect panels and build chains; connections persist across restart.
- A conversation routes command execution to its connected terminal; "run with a specific terminal" selects the target.
- Each panel reports its connections in the UI.
- Connection persistence covered by tests; lint/typecheck/test pass.
Part of the Infinite Canvas epic: #61
Phase 3 — Universal connections + conversation→terminal routing
Let any panel connect to any other, form chains, and give connections real behavior.
Scope
canvas_connectionstable (id, workspace_id, from_panel_id, to_panel_id, kind, meta JSON) + CRUD commands +UiMutationEventsync. (If created in Phase 1, wire it up here.)Out of scope
Browser/app endpoints (Phase 7), CLI-driven connect (Phase 6 — though the backend command should be reusable by the CLI).
Acceptance