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

@arnilo/prism-channels

v0.12.1

Published

Messaging channels family for Prism: transport-neutral channel contracts, Prism execution adapter, durable bindings/journal/pairing, and (as subpaths) Telegram/Signal adapters.

Readme

@arnilo/prism-channels

Messaging channels for Prism: run selected Prism agents over chat transports without building another agent runtime, conversation store or queue.

  • Transport-neutral runtime — authorize an observed sender, bind them to an owned Prism session, run turns through the existing AgentSession, project only the current run's final text back to the bound destination.
  • Durable journal — bindings, /new generations, admission dedup, claims and staged replies live in the host's CheckpointStore/LeaseStore; recovery is explicit (reconcile), never an automatic replay.
  • Deny by default — transport fields are never authority; a host grant, verified identity, ownership scope and a re-check before provider work and before every send.
  • Durable approvals — opaque one-use controls bind a pending core decision to exact sender, binding, agent revision and expiry; Telegram renders them as callback buttons, the experimental Signal subpath as /approve / /deny command text.
  • Streaming previews — opt-in MessagingRuntimeOptions.onAssistantDelta forwards the cumulative redacted answer while a turn runs; the Telegram subpath renders it as ephemeral sendMessageDraft previews (coalesced, private-chat only). Previews are never journaled and never replace the final reply.
  • Opt-in host notices — MessagingRuntime.notify({ identity, connectionId, externalConversationId, notifyId, text }) sends one notice to one already-bound pair with no agent run and no queue slot: the grant is re-checked with action: "notify" and must carry notifications: true, notifyId is the idempotency key, the text is redacted and bounded, and the reply goes through the same staged journal as an answer. There is no fan-out, no broadcast and no binding creation — unbound, foreign, ambiguous, revoked or ungranted targets fail closed.
  • Bounded attachments — events carry refs (id, mime, size, kind), never bytes. The Telegram subpath fetches one capped body per admitted media event: voice goes through a host transcribe, documents through a host extractDocumentText, and an image reaches the model only when it declares image input (via fetchAttachment). Oversize and unprocessable media fail closed with a bounded notice, synthesize adds an optional voice note next to a final reply, and nothing media-shaped is ever journaled.
import { createMessagingRuntime } from "@arnilo/prism-channels";

const runtime = createMessagingRuntime({
  authorize,      // observed sender + action -> verified identity/aliases/grant revision, or false
  resolveAgent,   // authorized alias + identity/ownership -> host-configured Agent (re-resolved per turn)
  deliver,        // host delivery seam, normally the adapter's send
  checkpoints,    // durable bindings, admission dedup, claims and staged replies
  leases,         // per-binding fencing
});

const admission = await runtime.admit(event); // accepts/denies before any transport acknowledgment
await runtime.drain();
  • Peer @arnilo/prism (peer) and no third-party peers. Subpaths: . (runtime/journal), ./telegram (Bot API; private DMs by default, opt-in allowGroups for granted group/topic text, sendDrafts for streaming previews, and maxAttachmentBytes/transcribe/synthesize/extractDocumentText for bounded media), ./signal (experimental signal-cli). Importing . or ./telegram never loads ./signal. The package adds no I/O at import or factory construction: no listener, poller, subprocess, credential lookup or environment discovery starts on its own.

  • Runtime and authorization semantics: docs/messaging-channels.md

  • Telegram polling/webhook transport: docs/telegram-channel.md

  • Signal private-socket transport (experimental): docs/signal-channel.md

  • Durable records, recovery and the operator runbook: docs/messaging-channel-operations.md

  • Fault injection and soak: scripts/fixtures/messaging-restart-worker.mjs (SIGTERM → stop() cancels claimed work; SIGKILL → reconcile) and scripts/fixtures/messaging-soak.mjs --durationMs 3000 (bounded admit/drain/reconcile/prune loop on temp sqlite with a mock provider; the 72h operator recipe is the same script with --durationMs 259200000).

  • Network-free host demo: examples/messaging-agent.ts