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

@gajae-code/bridge-client

v0.13.3

Published

Transport-only v3 SDK WebSocket client

Downloads

15,556

Readme

@gajae-code/bridge-client

@gajae-code/bridge-client is the standalone SDK v3 WebSocket transport client for Gajae Code. It exports SdkClient, SdkClientError, and the associated frame, request, reconnect, and options types.

import { SdkClient } from "@gajae-code/bridge-client";

const client = await SdkClient.connect(endpoint.url, endpoint.token);
try {
	const metadata = await client.query("session.metadata");
	console.log(metadata);
} finally {
	await client.close();
}

Transport contract

The client adds the endpoint token as a WebSocket query parameter, waits for a server hello frame before requests are sent, and correlates responses by request ID. A server error response rejects with SdkClientError, whose code, message, and details preserve the wire error. It bounds open, hello, retry, and request work with the configured timeout and optional absolute deadline.

A request that has been sent is never replayed after reconnect. Callers that need retry semantics must decide whether retrying their operation is safe and provide their own idempotency protocol where appropriate.

For a request timeout, SdkClientError.details is an SdkRequestTimeoutDetails object. requestSent: true means WebSocket.send() returned, not that the server accepted or completed the request. Treat it as execution uncertainty: do not resend an ordered turn.prompt or skill.invoke; retain a fresh clientRef before sending and query turn.prompt_status or skill.invoke_status with that reference.

Scope and compatibility

This package is transport-only. It does not import, instantiate, dispatch to, or otherwise own AgentSession, broker lifecycle, backend process management, or application operation handlers.

It is SDK v3 only. The historical BridgeClient/backend-bridge protocol, RPC ingress, and compatibility behavior are intentionally unsupported and must not be restored. Use the documented SDK v3 WebSocket endpoint and frames instead.

@gajae-code/coding-agent/sdk re-exports this package for compatibility; both entrypoints expose the same SdkClient class identity.

Durable create, attach, and submit orchestration

SdkClient.createConnectSubscribeSubmit() is a durable client-side orchestration convenience operation over broker create and endpoint controls. It requires a fresh createIdempotencyKey and a fresh, kind-scoped 1–128 character clientRef. Its safe canonical recovery identity (SdkDurableLookupIdentity) carries no create replay material — no MCP server definitions, URLs, args, env, or headers — so no potentially secret-bearing field can leak into the public identity. The identity excludes credentials, secrets, submission payloads, and endpoint credentials.

The create key and submission reference are durably recorded by their existing respective authorities. There is no single-authority transactional atomicity guarantee across process failure: restart recovery uses reconcileCreateConnectSubmit() to resolve the composite outcome. The operation opens an operation-owned endpoint socket, completes same-incarnation replay on that socket, then writes at most one turn.prompt or skill.invoke. Ordered work is never retried. A transport failure after the write returns submission_uncertain, not a successful or non-executed result.

Use reconcileCreateConnectSubmit(identity, options) for recovery. When the identity has no sessionId, supply the original create via options.create so the broker's idempotency key can resolve the prior create; the create is never stored on or serialized through the identity. The method queries the matching prompt or skill status, but never sends an ordered control. unknown means the reconciliation authority or retention cannot establish the outcome; it is not proof that the work did not execute.