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

@pipedog/runner

v0.11.0

Published

Pipecat's development runner for pipedog: createTransport() from runner arguments, and a dev server (main()) with the prebuilt WebRTC client, SmallWebRTC signalling, telephony webhooks and WebSockets for Twilio, Telnyx, Plivo and Exotel. A fetch handler y

Readme

@pipedog/runner

Pipecat's runner (pipecat.runner) for pipedog: a bot written against Pipecat's development runner keeps its shape. Export bot(runnerArgs), call main(), and pick the transport with createTransport().

  • main() (@pipedog/runner/run): the development server, with upstream's CLI (-t webrtc, -t twilio|telnyx|plivo|exotel, --proxy, --host, --port, --esp32, --ice-servers, --ws-auth, --allowed-origins, -u, -f, --runner-body, -v). It serves the prebuilt Pipecat client at /client (/ redirects there), /start, /status, SmallWebRTC's /api/offer (and /sessions/{id}/api/offer), the telephony WebSocket at /ws, the TwiML or TeXML webhook at POST /, /ws-client, and file uploads and downloads.
  • createRunnerApp() builds the same server as a fetch handler to mount in Hono, SvelteKit and others; serve() (@pipedog/runner/serve) listens on Bun, Node (with ws) or Deno.
  • createTransport(runnerArgs, transportParams) (@pipedog/runner/utils) builds the transport the runner arguments call for. For a phone call it reads the provider's handshake (Telnyx's connected then start, ...), builds the provider's serializer with the stream and call IDs, and exposes them as runnerArgs.callData. A caller who hangs up before the handshake completes is a TelephonyCallEndedError, with runnerArgs.handshake set to { status: "closed", messagesReceived }.
  • The runner arguments: RunnerArguments, SmallWebRTCRunnerArguments, WebSocketRunnerArguments, LiveKitRunnerArguments, and, for API parity, DailyRunnerArguments, VonageRunnerArguments and MOQRunnerArguments.
  • @pipedog/runner/livekit: LiveKit access tokens (generateToken, generateTokenWithAgent, generateSessionTokens, configure), signed with livekit-server-sdk. With -t livekit, POST /start mints a bot and a user token and starts the bot with LiveKitRunnerArguments; createTransport() then needs @pipedog/transport-livekit (an optional peer) and @livekit/rtc-node.
  • --whatsapp: mounts GET/POST /whatsapp (Meta's webhook verification and call events) on @pipedog/transport-whatsapp (an optional peer). It needs WHATSAPP_APP_SECRET, WHATSAPP_PHONE_NUMBER_ID, WHATSAPP_TOKEN and WHATSAPP_WEBHOOK_VERIFICATION_TOKEN. Each call starts the bot with SmallWebRTCRunnerArguments, and runnerArgs.body is the call.
  • parseTelephonyWebsocket(), telephonyHandshake() and the CallData types.
bun add @pipedog/runner

Example

// bot.ts: run with `bun bot.ts -t webrtc`, or `bun bot.ts -t telnyx --proxy mybot.ngrok.io`
import { TransportParams } from "@pipedog/core/transports/base_transport";
import type { RunnerArguments } from "@pipedog/runner/types";
import { createTransport } from "@pipedog/runner/utils";
import { FastAPIWebsocketParams } from "@pipedog/transport-websocket/fastapi";

const transportParams = {
  webrtc: () => new TransportParams({ audioInEnabled: true, audioOutEnabled: true }),
  telnyx: () => new FastAPIWebsocketParams({ audioInEnabled: true, audioOutEnabled: true }),
};

export async function bot(runnerArgs: RunnerArguments) {
  const transport = await createTransport(runnerArgs, transportParams);
  // build and run the pipeline with transport.input() and transport.output()
}

if (import.meta.main) {
  const { main } = await import("@pipedog/runner/run");
  await main();
}

See the Development runner docs page for the routes, mounting the app in a framework, and a Python-to-TypeScript mapping.

Runtimes

| export | Bun | Node | Deno | Cloudflare Workers | |---|:-:|:-:|:-:|:-:| | createTransport, parseTelephonyWebsocket, telephonyHandshake, the runner arguments | ✅ | ✅ | ✅ | ✅ (WebSocket and telephony; WebRTC isn't available there) | | main, serve | ✅ | ✅ with ws | ✅ | ❌ can't listen | | createRunnerApp (fetch handler) | ✅ | ✅ | ✅ | not tested |

The prebuilt client

Upstream serves PipecatPrebuiltUI from the pipecat-ai-prebuilt Python package (pipecat-ai/pipecat-prebuilt). Its build is only published in that wheel; there is no npm or CDN build. This package ships the wheel's built client unmodified in prebuilt/ (release 1.3.0, BSD-2-Clause, Copyright (c) 2025–2026 Daily, with its THIRD_PARTY_NOTICES.txt), refreshed with bun tools/runner/sync-prebuilt.ts.

Differences from upstream

  • Daily (-t daily, --direct, the dial-in webhook), MOQ, the Vonage Video Connector (-t vonage) aren't ported: selecting them fails with a clear message. Their argument classes exist for type parity. The MOQ flags and the deprecated --folder and -t eval aren't ported.
  • A hang-up mid-handshake is TelephonyCallEndedError (a TelephonyHandshakeError, upstream's ValueError) whether zero or one message arrived; upstream fails with "Missing transport params for 'unknown'" after one. The runner logs it at info level.
  • The server is a fetch handler instead of a FastAPI app; startup hooks are lifespan functions that may return a cleanup. Bots add routes to the module-level app as upstream bots do.
  • The CLI parser is a small ArgumentParser with argparse's semantics; runnerArgs.cliArgs keeps argparse's dest names (ice_servers, ws_auth).
  • The WebSocket token helpers and _resolveDownloadPath are async (WebCrypto, lazy node:fs).
  • The parse is cached per socket in a WeakMap; call_data["call_id"] is callData.getItem("call_id").

License

BSD 2-Clause, a port of Pipecat (Copyright (c) 2024–2026 Daily). The prebuilt client in prebuilt/ is BSD 2-Clause, Copyright (c) 2025–2026 Daily; see prebuilt/LICENSE.