@cool-ai/beach-channel-sse
v0.1.2
Published
Beach SSE channel — browser HTTP inbound, Server-Sent-Events streaming outbound. Implements core's ChannelAdaptor.
Readme
@cool-ai/beach-channel-sse
The SSE channel adaptor: a browser sends messages in over HTTP, and the agent's reply streams back over Server-Sent Events. It implements core's ChannelAdaptor, so the channel-router routes its inbound messages and delivers its replies like any other channel.
SSE is a streaming channel, so it follows the per-chunk model: the router calls send once for each routed reply event, and the adaptor writes that chunk to the open stream. The adaptor keeps the one piece of state a streaming channel needs — a map from each browser's stable clientId to its open connection — keyed on the client id (which the reply destination carries), not the session id, so the stream can open before a session is bound.
Inbound parts are handed through channel-blind; the browser renders the streamed parts itself (for instance with @cool-ai/beach-a2ui-renderer-lit), so the adaptor wires no server-side renderer.
Use
import { SSEChannelAdaptor } from '@cool-ai/beach-channel-sse';
const sse = new SSEChannelAdaptor({
inbound: (req) => channelRouter.inbound(req),
});
// Mount on your HTTP layer:
app.get('/stream', (req, res) => sse.openStream(req.query.clientId, res));
app.post('/message', sse.inboundHandler());
// Register `sse` as a channel-router adaptor so replies stream back out.The browser opens GET /stream?clientId=… to receive the stream, then POSTs { clientId, parts } for each message it sends. Replies addressed to that client are written as data: events; a reply for a disconnected client is dropped silently.
