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

pi-tokenrouter

v1.4.0

Published

TokenRouter provider extension for pi — dynamic model discovery with OpenRouter-compatible pricing

Readme

pi-tokenrouter

A pi provider extension for TokenRouter.

Models are derived from TokenRouter's /v1/models list and enriched with metadata from models.dev first, then OpenRouter.

Install

pi install npm:pi-tokenrouter

Or run directly:

pi -e /path/to/pi-tokenrouter

Authentication

Resolve via /login, environment variable, or auth.json:

# Option 1: Interactive login
/login tokenrouter

# Option 2: Environment variable
export TOKENROUTER_API_KEY=sk-...

# Option 3: auth.json (~/.pi/agent/auth.json)
# "tokenrouter": { "type": "api_key", "key": "sk-..." }

How it works

  1. Registers TokenRouter as an API-key provider, so /login tokenrouter is handled under Use an API key.
  2. Discovers the model catalog at startup: it fetches TokenRouter's authenticated /v1/models response in the background and enriches each model with metadata from models.dev when available, then falls back to OpenRouter for pricing, context window, max output tokens, reasoning support, and image support. The two metadata services are fetched independently: if one is down, the other still enriches; if both are down, TokenRouter's list stays live and the last cached metadata is reused for models it already knows (defaults cover the rest) with a warning naming the unreachable services.
  3. Caches the discovered catalog at ~/.pi/agent/tokenrouter-models.json. When TokenRouter itself is unreachable or the API key is missing, the cache is used; when there is no valid cache either, a bundled snapshot (models.generated.ts) is used.
  4. /tokenrouter-refresh re-runs discovery on demand and reports what changed.

Reasoning

Reasoning models routed through TokenRouter's OpenAI-completions API get reasoning_split: true on every request. Some upstreams (reported for MiniMax and z.ai GLM) otherwise inline their chain-of-thought into the answer text; with the split, TokenRouter returns it as reasoning_content, which pi shows as a separate thinking block. Routes that already split by default (verified on z-ai/glm-5.3-free) ignore the parameter. Anthropic and OpenAI Responses models are unaffected — those APIs have native reasoning channels.

Displayed prices are estimates borrowed from models.dev and OpenRouter; TokenRouter's actual billing for a route can differ.

Context overflow

pi detects context-length errors from most upstreams TokenRouter proxies (including MiniMax's context window exceeds limit) and recovers by compacting and retrying. Probing in 2026-09 found no TokenRouter-specific overflow phrasing that pi misses, so this extension adds no error rewriting. Oversized prefills can instead surface as 429 rate_limit_error admission rejections (verified on z-ai/glm-5.3-free); those stay on pi's normal retry path.

License

MIT