You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Desktop shell: remote workspace — chat and read-only terminal #806
With visibility (#708 → #799) and control (#805) in place, a remote session still has no workspace in the desktop app: its transcript and terminal are only reachable in the web UI. This issue is delivery slice 3 (§9.3) of the spec at docs/superpowers/specs/2026-09-06-ai2371-desktop-remote-daemons-design.md (also posted on AI-2371). Blocked by #805, which ships the card host, the session authorization lifecycle, and the chat-pane decoupling this slice builds on.
Scope
Chat read path: seed from GET /api/sessions/{id}/detail, live-tail via hub SubscribeToStream (the Eventuous SignalR protocol — reference Eventuous.SignalR.Client rather than re-deriving it), rebuild turns client-side through an adapter feeding the existing chat item view models, resolve attribution via hub ResolveAttribution. The adapter is the natural first consumer of the canonical-transcript converters (Make Core the single home of transcript normalization #679) — build it as its own unit so those slot in. Queued input from SubscribeToChat + PendingInputChanged. Optional polish: SubscribeToAcpEphemeral live deltas (no client consumes them yet).
Chat write path: the composer sends hub SendUserInput(agentId, text, attachmentIds?) instead of PTY stdin.
Read-only terminal: SubscribeToTerminal (server replays its ring buffer), dimensions locked to the source, viewport reported via RequestResizeTerminal and released on close (never send the (0,0) sentinel), scrollback cleared before a re-subscribe replay, input limited to the fixed special-key set plus the composer.
Authorization signals for the transcript/terminal surfaces: the throwing surfaces are the oracle; the silently-denying terminal subscribe is attempted only after session access is established, so empty renders as "no output yet", distinct from loading and denied; watches and subscriptions re-establish per reconnect.
Origin-transition rebinding: an open workspace binds to the logical row, tears down and rebuilds origin-bound adapters on a Local↔Remote transition, never falsely ends a live session, and routes in-flight actions visibly.
Activity
linear-code commentedon Sep 7, 2026
AI-2554
Say why the chat pane has no transcript when a read is refused (#806)
Give a terminal viewport back before the next attach can report one (#…
Read the queue snapshot through the shared JSON shape helper (#806)
Give the special-key choice its own file (#806)
Run one tail per stream and unsubscribe on the server when it ends (#806
Keep a transcript refusal on screen until a read delivers (#806)
Let the terminal follow a session that returns after reading as ended (…
Follow a dropped local row once its server twin learns the session id (…
Let the remote feed say how long its refusal stands (#806)
Judge a local row's move on the directory as it stands and keep watch…