Skip to content

Web: pair a second Computer and switch the channel list between All and each Computer #2500

Closed
0 of 1 issue completed

Description

@DoodleBears

Parent

#2180 (spec #2178). First runnable Web slice, split out as #2180 asks before coding.

Why

The phone's Chats list already has an All → Computer → Organization strip (#2194), and the computer-icon work puts each Computer's chosen icon after the chat name in All. The browser Web Client still serves exactly one Host: its channel list has no source tabs, and a Computer cannot add another Computer. The Human wants the two surfaces unified: a tab strip that defaults to All and switches to one Computer, on mobile and on the Web/Desktop client, with other Computers added over the tailnet.

Current facts (main @ 4227b25)

  • The Web Client talks only to its serving Host through the DSH client connection (packages/client/src/client/bridge.ts); every list, conversation and composer assumes that one Host.
  • A Host exposes a device gateway for paired devices (ADR-0199): Authorization: Device <id>.<secret>, unary /api/<method> and the Remote stream mux, reached over Tailscale HTTPS. It has no CORS, and only phones pair with it today.
  • The Computer look (name, icon, colour) is stored on the phone, not on the Host, so the Web Client cannot show the same icon yet.
  • The spec keeps automatic Tailscale discovery out of scope: a second Computer is added by explicit pairing, never by reachability alone.

What to build

  1. Pair a second Computer from the browser. In the Web Client, the Human enters another Computer's tailnet address and a pairing code from that Computer. The browser holds the device credential in its own profile and origin (not in Host settings). The other Host admits the browser through its existing device gateway (add the origin checks / CORS the browser needs; no new port, proxy or credential form).
  2. Channel list source tabs. Above the channel list: All (default, remembered locally), then one tab per connected Computer with its icon and name. All mixes both Computers' DMs and groups; rows carry the trailing Computer icon from the computer-icon work. Same visual rules as the mobile strip: one line, tail ellipsis, icon leads and never shrinks, selected Computer colour on the underline.
  3. Open and send to the right Computer. Opening a row from the second Computer reads and sends through that Computer's credential; the serving Host's management context does not change. Drafts, routes and caches are keyed by source, so the same Bot slug or Channel ID on two Computers never collide.
  4. Shared Computer look (if needed for 2). Decide whether the icon and colour move to the Host so phone and Web agree, or stay per client.
  5. CLI parity for any new Host route, tests, changes/ fragment, light and dark screenshots.

Acceptance

  • Two isolated local Hosts (valid logical-device coverage, labelled as such): Web on Host A pairs Host B; All shows both, each tab filters to one Computer.
  • Opening and sending in a Host B conversation lands on Host B with Host B's Human identity; nothing is written to Host A.
  • Same slug / Channel name on both Hosts never leaks drafts, history or sends.
  • Host B offline: its cached rows stay with an offline state; no autosend on reconnect.
  • Revoking the browser on Host B removes its rows and refuses its next request.
  • Real browser Web evidence (light and dark). DSH Desktop qualification stays with Web and Desktop: unified conversations across paired Computers and Cloud #2180.

Out of scope

Cloud Organizations on Web, DSH Desktop storage, read/pin sync, automatic Tailscale discovery.

Activity

  1. added 3 commits that reference this issue on Oct 21, 2026
  2. DoodleBears commented on Oct 21, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim

    • Agent: Codex
    • Task: codex/local/01a15ebb-a278-7f21-8363-dd343bbf7c0f (not a DSH Session)
    • Issue scope: Track 0 only — Remote Host terminology, shared Inbox lifecycle and authenticated avatar cache scaffold. Requested by Vain. Tracks 1–4 start after this slice merges.
    • Branch: codex/2500-host-feed-scaffold
    • Started: 2026-10-21 14:00 UTC
    • State: active
  3. added
    agent:activeOne or more coding-agent tasks currently claim this issue; see claim comments for task IDs
    on Oct 21, 2026
  4. added 3 commits that reference this issue on Oct 21, 2026
  5. DoodleBears commented on Oct 21, 2026

    @DoodleBears
    ContributorAuthor

    Agent work outcome

    • Agent: Codex
    • Task: codex/local/01a15ebb-a278-7f21-8363-dd343bbf7c0f
    • Issue scope: Track 0 rename and Host Feed scaffold
    • State: completed
    • Result: feat(client): rename Remote Hosts and scaffold the shared Host Feed #2511 merged as b3728ab; all 12 CI checks passed.
    • Remaining: Tracks 1–4 now begin in isolated parallel worktrees from latest main. Parent coordinates merge order; Track 2 follows Track 1. The issue remains active.
    • Known gaps: remote chat images/cards absent; Host icon/colour remains per phone; DSH Desktop unqualified; no real tailnet test between two physical machines.
  6. DoodleBears commented on Oct 21, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim

    • Agent: Codex
    • Task: codex/local/01a15ee9-772a-7060-893b-027cecd4242d (not a DSH Session)
    • Issue scope: Track 1 only — Remote Host bot/group avatars in roster and conversation header/authors, plus authenticated avatar GET/CORS verification. Requested by Vain. No activity/unread changes; independent of Tracks 2–4.
    • Branch: t3/remote-host-avatars
    • Started: 2026-10-21 14:51 UTC
    • State: active
  7. DoodleBears commented on Oct 21, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim

    • Agent: Codex
    • Task: codex/local/01a15ee9-f10e-7e21-90ba-727ffccb2183 (not a DSH Session)
    • Issue scope: Track 4 only — ADR-0243 phone-owned persisted per-kind Device Notification Preference, copies to every paired Host on changes/re-pairing, and browser-owned page-open Remote Host notifications with permission/baseline/deduplication lifecycle. Requested by Vain. Independent of Tracks 1–3; remote-hosts changes remain additive.
    • Branch: t3/device-notification-preferences
    • Started: 2026-10-21 14:40 UTC
    • State: active
  8. DoodleBears commented on Oct 21, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim

    • Agent: Codex
    • Task: codex/local/01a15ee9-f4f0-73c3-9ac3-8ad11e6637bb (not a DSH Session)
    • Issue scope: Track 3 only — Remote Host action/replies/unread groups in Activity Center, Host-scoped identity and read/open routing. Inline decisions only if safely supported in this slice. Requested by Vain; independent of Tracks 1, 2 and 4.
    • Branch: t3/remote-host-activity-center
    • Started: 2026-10-21 14:50 UTC
    • State: active
  9. DoodleBears commented on Oct 21, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim

    • Agent: Codex
    • Task: codex/local/01a15ee9-7784-7292-9194-6a6b18b23098 (not a DSH Session)
    • Issue scope: Track 2 only — remote channel-list activity rings and unread counts, owning-Host read acknowledgement, Host tab unread totals and offline state. Requested by Vain. Additive shared-feed changes; merge after Track 1, coordinated by parent.
    • Branch: t3/remote-activity-unread
    • Started: 2026-10-21 14:40 UTC
    • State: active
  10. 255 remaining items

  11. Human commented on Oct 22, 2026

    @Human

    @Human attention

    Please stop mentioning me in PRs and issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:activeOne or more coding-agent tasks currently claim this issue; see claim comments for task IDsready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions