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

@nicknisi/pi-turn-timer

v0.1.3

Published

Per-turn elapsed timer row below each response

Readme

@nicknisi/pi-turn-timer

Shows how long a complete run took — from the moment you send a message until the agent settles and is awaiting your next message — as a dim one-line row rendered below the response, similar to Claude Code's per-turn elapsed timer. It exists because pi has no built-in per-run timing display. A run that spans multiple LLM responses and tool-call rounds still produces a single timer row.

What it adds

  • UI: a custom transcript entry renderer that draws a dim text row of the form · 12.3s (or · 1m 23s for ≥ 60s) after each completed turn.
  • Events hooked: agent_start (records the start timestamp), agent_settled (computes elapsed time and appends the entry). agent_settled fires only once the agent is idle and won't continue automatically (no retry/compaction/follow-up remaining), so the timer covers the whole run.
  • Custom entry type: turn-duration, with data shape { seconds: number }.

No slash commands, tools, keybindings, or overlays. No configuration.

Behavior details

  • The entry is a custom transcript entry that does not participate in LLM context, so it never pollutes the conversation.
  • /copy reads only assistant message text, so it never picks up the timer rows.
  • Timing starts from Date.now() on agent_start. Elapsed time is computed with Date.now() at agent_settled.
  • If agent_settled fires without a prior agent_start (e.g. extension loaded mid-run), the event is ignored.
  • Duration formatting: < 60sNs.s (one decimal, e.g. 0.8s); ≥ 60sMm Ss (e.g. 1m 23s).

Configuration

None. No config files, no options, no environment variables.

Dependencies

  • @earendil-works/pi-coding-agent (peer) — ExtensionAPI: registerEntryRenderer, on, appendEntry.
  • @earendil-works/pi-tui (peer) — Text component used to render the row.

No npm runtime dependencies, no workspace deps.

Caveats

  • Depends on pi extension internals: registerEntryRenderer, appendEntry, and the agent_start / agent_settled event names. A pi release that renames these APIs or events breaks the extension.
  • Relies on the theme's "dim" foreground color existing; unusual themes could render the row differently.
  • Uses wall-clock time (Date.now()), so the measurement includes any time the session sat idle mid-turn (e.g. waiting on an interactive tool prompt or permission prompt).
  • No platform-specific behavior; works anywhere pi runs.

Install

pi install /Users/nicknisi/Developer/pi-extensions/packages/turn-timer