@vamsitalupula/pi-run

Run Typescript within the Node.js context of the Pi coding agent

Package details

extension

Install @vamsitalupula/pi-run from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@vamsitalupula/pi-run
Package
@vamsitalupula/pi-run
Version
1.9.3
Published
Apr 26, 2026
Downloads
493/mo · 411/wk
Author
tanavamsikrishna
License
ISC
Types
extension
Size
6.6 KB
Dependencies
1 dependency · 0 peers
Pi manifest JSON
{
  "extensions": [
    "extensions/"
  ],
  "image": "https://raw.githubusercontent.com/tanavamsikrishna/pi-run/refs/heads/main/screenshot.png"
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-run

This is a Pi extension for Pi extension developers. It enables running Typescript within the Node.js context of the Pi coding agent

Installation

pi install npm:@vamsitalupula/pi-run

How to use?

  1. Create a new file by running /pi-run ./debug.ts in Pi user prompt
  2. You should see a new file called debug.ts created in the current folder
import type {
    ExtensionAPI,
    ExtensionContext,
} from "@mariozechner/pi-coding-agent";

export default function (pi: ExtensionAPI, getCtx: () => ExtensionContext) {
    // Your code here
    // return getCtx().getSystemPrompt();
    return pi.getActiveTools();
}
  1. Now run the file with /pi-run ./debug.ts
  2. The data/object returned by the default export function is shown as a pi notification
  3. The package @mariozechner/pi-coding-agent is available in the node environment running pi. But if you need LSP/linting support in your editor, you need to point your editor tools to the install location of the package one way or an other. The easiest is to just run pnpm i --save-dev @mariozechner/pi-coding-agent in the project or local directory

Examples

To see the runtime system prompt

export default function (pi: ExtensionAPI, getCtx: () => ExtensionContext) {
    return getCtx().getSystemPrompt();
}

To get assistant message details with decreasing cache reads

    const ctx = getCtx();
    const branch = ctx.sessionManager.getBranch();

    const messages = branch
        .filter((entry) => entry.type === "message")
        .map((entry) => entry.message);

    return messages
        .slice(1)
        .filter((msg, index) => {
            if (msg.role !== "assistant" || !msg.usage) return false;

            const prevMsg = messages[index];
            const prevCache =
                prevMsg?.role === "assistant"
                    ? (prevMsg.usage?.cacheRead ?? 0)
                    : 0;
            const currCache = msg.usage.cacheRead ?? 0;

            return currCache > prevCache;
        })
        .map((msg) => {
            return {
                timestamp: msg.timestamp,
                responseId: msg.responseId,
                usage: msg.usage,
            };
        });