- Added @oh-my-pi/pi-wire and reworked collab protocol types into shared contracts. - Added wire-compatibility guards in coding-agent host to block unsupported events. - Added standalone collab-web package with guest UI, mock-host tooling, and local relay. - Added secure room-link validation, WebCrypto framing, and safer socket routing.
2.2 KiB
@oh-my-pi/collab-web
Web client for omp collab sessions. Paste a /collab link into the browser and you get the same live session guests see in the TUI: streaming transcript, tool-call cards, subagent panel with live transcripts, and a composer that prompts (or interrupts) the host agent.
Quick start
# dev server (Bun HTML dev server with HMR) — http://localhost:3000
bun run dev
# offline demo: local relay + scripted mock host; prints a ws://localhost link
bun run mock-host
Host a session from any omp instance (/collab, or /collab ws://localhost:7466 to use the mock relay), then paste the printed link into the connect screen. Deep links work too: http://localhost:3000/#<roomId>#<key> auto-connects on load.
Build & deploy
bun run build # static site in dist/
dist/ is a fully static SPA — host it anywhere. Two runtime requirements:
- Secure context: room keys are unwrapped with WebCrypto (
crypto.subtle), which browsers expose only onhttps://orlocalhost. - Relay reachability: the client connects straight to the relay over WebSocket (
wss://for anything that isn't localhost). The default relay iswss://relay.omp.sh; bare<roomId>#<key>links resolve against it.
The room key never leaves the URL fragment — it is not sent to the relay or any server.
Architecture
src/lib/— vendored wire codec (codec.tsAES-256-GCM,link.tsenvelope + link grammar),socket.tsreconnecting relay socket,client.tsguest session store (GuestClient+ immutable snapshots foruseSyncExternalStore). Shared protocol shapes come from@oh-my-pi/pi-wire.src/components/—transcript/(entries, markdown, tool cards),agents/(panel + transcript drawer),shell/(connect screen, header, composer, banners, toasts).scripts/—local-relay.ts(content-blind relay onBun.serve),mock-host.ts+fixture.ts(scripted host for offline dev).
The package is intentionally standalone — no dependency on @oh-my-pi/pi-coding-agent at runtime or type level. Wire-shape drift is prevented by consuming the same @oh-my-pi/pi-wire contracts as the host, with sealed-frame interop still covered by test/codec.test.ts.