Skip to content

feat(ui): mount the WC shell on WorkUnitClient — transcript, queue, composer, model, one mount path #2382

Description

@trieloff

Follow-up to #2274 (part of #1666). The client protocol landed with both adapters, one conformance suite, and the tab strip rendering from toTabDescriptors on leader and follower. The rest of the shell still has two wirings.

What is left

Surface Leader today Follower today After
transcript requestScoopMessagesonScoopMessagesReplacedcontroller.loadMessages onSnapshotcontroller.loadMessages client.snapshot(id) / subscribe(id)
selection setSelectedScoopJid + replay sync.selectScoop + onSnapshot client.snapshot(id) (selection IS the call)
queued pile queuedIds on the replay envelope (#2362) not sent snapshot.queuedIds, absent ≠ empty
composer send AgentHandle.sendMessage (implicit selection) sync.sendMessage (implicit selection) client.send(id, input)
stop stopScoop(jid) sync.stop() client.signal(id, 'stop')
model pill modelFor(record) + set-scoop-model wc-follower-model-surface + model.select summary.model as the single read
mount mountWcUiLive / mountWcUiExtension mountWcUiFollower one mount path taking a WorkUnitClient

Why it was not in #2274

attachWcClient binds OffscreenClient to the VFS, the terminal, the monitor, sprinkles and the permissions surface as well as the chat — none of which the protocol covers or should. Collapsing the mounts means deciding what those get instead, which is a design question of its own (and overlaps #2276's CapabilityBroker). Shipping the protocol with the strip cut over keeps the risk of each step legible.

Done when

  • The transcript, the queued pile, the composer and the model pill read from WorkUnitClient on both sides.
  • A tab click goes through client.snapshot(id) rather than two transport-specific selection calls.
  • mountWcUiLive / mountWcUiFollower / mountWcUiExtension share one mount that takes a client.
  • The conformance suite grows the cases the new surfaces need (queue reconcile parity, send/steer, stop mid-turn).
  • No follower feature needs a parallel UI state machine (review-patterns category 8).

Legacy path deletion stays with #2365.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ai-generatedEvery contribution on this thread is bot/AIarea/webappBrowser app core (packages/webapp)backlog-skippedBacklog Dispatcher: decided against dispatching; remove this label to re-queuecosmos-skippedSet by Backlog DispatcherenhancementNew feature or requestskill issueFor issues that arrive with undeniable skill issue energy.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions