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

@narumitw/pi-retry

v0.13.1

Published

Public pi extension that retries empty-detail, Codex websocket-limit, and stalled provider errors.

Downloads

4,749

Readme

🔁 pi-retry — Retry Hints for Pi Provider Errors

npm Pi extension License: MIT

@narumitw/pi-retry is a native Pi coding agent extension that treats provider responses containing Unknown error (no error details in response), Codex backend errors that explicitly say the request can be retried, Codex websocket_connection_limit_reached, and stalled provider streams as retryable.

Use it to make Pi sessions more resilient when an upstream AI provider returns a transient unknown error without useful details, Codex reports an explicitly retryable backend failure or asks for a fresh websocket, or a provider stops streaming after Pi has sent a request.

✨ Features

  • Detects assistant messages that end with stopReason: "error".
  • Matches the known provider error text Unknown error (no error details in response).
  • Matches Codex websocket_connection_limit_reached after a websocket hits its 60-minute limit.
  • Matches Codex backend failures that explicitly include You can retry your request.
  • Appends Pi's retryable-provider-error hint.
  • Lets Pi's built-in retry path continue the turn.
  • Watches provider requests and assistant stream events for stalls.
  • Aborts and rewrites watchdog-triggered aborts as retryable provider errors.
  • Shows receiving in the statusline while provider/stream events are arriving.
  • Shows retrying when a matching error or stall triggers retry; @narumitw/pi-statusline adds the default 🔁 icon unless configured otherwise.
  • Supports --retry-stall-timeout-ms <ms> and PI_RETRY_STALL_TIMEOUT_MS=<ms>.
  • Works as a small, focused npm Pi extension package.

📦 Install

pi install npm:@narumitw/pi-retry

Try without installing permanently:

pi -e npm:@narumitw/pi-retry

Try this package locally from the repository root:

pi -e ./extensions/pi-retry

🚀 What it does

When an assistant message ends with stopReason: "error" and the error message matches Unknown error (no error details in response), Codex websocket_connection_limit_reached, or a Codex processing error that explicitly says You can retry your request, the extension appends Pi's retryable-provider-error hint so Pi's built-in retry path can continue the turn.

After Pi sends a provider request, the extension also starts a stall watchdog. Provider responses and assistant stream events briefly refresh a receiving statusline item, so you can tell that data is still arriving while Pi shows its normal working indicator. If no provider response or assistant stream event is observed for 90s, it briefly shows retrying, calls ctx.abort(), and rewrites the resulting assistant abort/error as a retryable provider error.

Configure the watchdog with:

pi -e npm:@narumitw/pi-retry --retry-stall-timeout-ms 10000
PI_RETRY_STALL_TIMEOUT_MS=10000 pi -e npm:@narumitw/pi-retry

Use 0, off, or false to disable the watchdog. Retry attempts and backoff remain controlled by Pi's built-in auto-retry settings.

🧠 Use cases

  • Reduce manual restarts after transient provider failures.
  • Recover from explicitly retryable Codex backend failures or websocket connection limits.
  • Improve reliability during long Pi coding agent sessions.
  • Keep tool-heavy implementation tasks moving when a provider returns an unknown error or stream stalls.
  • Pair with @narumitw/pi-goal for more robust autonomous task loops.

🗂️ Package layout

extensions/pi-retry/
├── src/
│   └── retry.ts
├── README.md
├── LICENSE
├── tsconfig.json
└── package.json

The package exposes its Pi extension through package.json:

{
  "pi": {
    "extensions": ["./src/retry.ts"]
  }
}

🔎 Keywords

Pi extension, Pi coding agent, retry, provider error, unknown error, stream stall, watchdog, AI provider reliability, agent resilience, TypeScript Pi package, npm Pi extension.

📄 License

MIT. See LICENSE.