Skip to content

artifact-canvas: remote command channel for review navigation (Tower relay + sdk route) #1401

Description

@amrmelsayed

Context

Split out of #1400 per sequencing agreement between main and the streamdeck architect: the bridge has no deck dependency, lands first, and is coordinated by main (it touches packages/artifact-canvas, Tower, and the sdk). #1400 remains the deck-actions issue and depends on this one.

The canvas's keyboard-first review work (#1237/PR #1344) and horizontal reading mode (#1380/PR #1398) defined a semantic action vocabulary: focus next/previous block, next/previous commented block, next/previous heading, document start/end, page column forward/back, open composer on focused block, toggle reading mode.

Requirements

  1. Canvas command channel. A way for Tower to deliver navigation/review commands to an open canvas page, most plausibly over the live-update channel the page already holds. The command set mirrors the existing keyboard vocabulary exactly; no parallel vocabulary. Composer open/submit/cancel are in scope; text entry is not (comment bodies are typed on the keyboard).
  2. Tower surface. An endpoint or message route that accepts one command for a given file/workspace and relays it to the target canvas view.
  3. sdk route. A client call for that surface. The streamdeck architect is a stakeholder on the call's surface shape as controller-subpath owner (same review arrangement as Introduce packages/codev-sdk: client SDK for Tower (server/client dependency isolation) #1189) and reviews it at design time, before implementation.
  4. Target rule decided at spec time. The no-canvas-open and multiple-canvases-open cases get an explicit, specified answer (defined target rule or explicit error; never a silent ambiguous no-op). This is a spec-phase decision, not an implementation-time one.

Non-goals

Notes

The bridge is deliberately generic: any remote driver of the viewer (not only the deck) gets it for free.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/cross-cuttingTouches multiple areas — needs coordinated handling

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions