npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@schlessera/brain-ui-sdk

v0.6.3

Published

brain-kit chat-UI SDK: the wire protocol, AgentBackend/SpeechProvider server seams, and client renderer/ASR registries

Downloads

2,160

Readme

@schlessera/brain-ui-sdk

The contract layer between an brain-kit chat UI and the agent that powers it. Everything a host, a backend, or a client needs to agree on lives here — and nothing else does: no HTTP framework, no UI, no model vendor.

@schlessera/brain-ui-sdk            → the wire protocol types (root re-export)
@schlessera/brain-ui-sdk/protocol   → same, explicit
@schlessera/brain-ui-sdk/schemas    → zod runtime schemas + parseClientMessage
@schlessera/brain-ui-sdk/server     → AgentBackend / SpeechProvider seams, transcript store
@schlessera/brain-ui-sdk/client     → tool-renderer + AsrClient registries (React peer)

Import the submodules explicitly — the root export carries the protocol only, so server bundles never touch client code (and the react peer dependency is only exercised by ./client).

The wire protocol (./protocol)

Protocol rev 2: sessions run in parallel, every turn-scoped frame carries a host-minted turnId, servers greet with server_hello, and every turn ends in exactly one terminal result frame with a unified outcome. The TypeScript interfaces are the compatibility contract consumed by both sides; additive evolution only.

Runtime validation (./schemas)

parseClientMessage is the single boundary for inbound client frames: payload size cap, byte cap, then a zod discriminated union bound to the protocol types via satisfies — so the schemas cannot drift from the interfaces without a type error. Hosts should never cast a client frame; binary frames are rejected.

Backend seam (./server)

AgentBackend is the interface a model integration implements (@schlessera/brain-backend-pi, @schlessera/brain-backend-claude): startTurn streams protocol frames, the host owns the per-turn AbortController, and mutating tools gate through bridge.requestPermission. BackendCapabilities is honest by contract — permissions: true means a deny actually blocks a mutation, and the shared contract test suite enforces it for every in-tree backend. The transcript store persists session metadata without prescribing storage for the transcripts themselves (backends own those).

Client registries (./client)

Registries mapping tool names to renderers and ASR providers to AsrClient implementations, so a chat UI can render unknown tools with a generic fallback and add specialized views without touching its timeline component. React is a peer dependency of this submodule only.

Versioning

The protocol is a compatibility contract: additive changes only, unknown fields must be preserved, and server_hello.protocolRev announces the revision.