@pi-unipi/utility

Utility commands and tools for Pi coding agent — lifecycle, diagnostics, cache, analytics, display, batch execution

Package details

extension

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

$ pi install npm:@pi-unipi/utility
Package
@pi-unipi/utility
Version
0.2.9
Published
May 1, 2026
Downloads
820/mo · 820/wk
Author
neuron-mr-white
License
MIT
Types
extension
Size
197.9 KB
Dependencies
3 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "src/index.ts"
  ]
}

Security note

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

README

@pi-unipi/utility

Environment info, diagnostics, cleanup, name badge, and diff rendering. The grab-bag package for maintaining your development environment and making tool output readable.

The diff rendering is the standout feature — Shiki-powered syntax-highlighted diffs for write and edit tool output. Side-by-side view for edits, unified view for writes, with color presets and auto-fallback on narrow terminals.

Commands

Command Description
/unipi:env Show environment info (Node, Pi, OS, paths)
/unipi:doctor Run diagnostics across all modules
/unipi:status Show status of all unipi modules
/unipi:cleanup Clean stale DBs, temp files, old sessions
/unipi:reload Explain how to reload extensions
/unipi:name-badge Toggle name badge overlay
/unipi:badge-gen Generate session name via LLM and enable badge
/unipi:util-settings Unified settings for badge and diff rendering

Examples

/unipi:env                 # Show environment
/unipi:doctor              # Run diagnostics
/unipi:cleanup             # Clean stale files
/unipi:cleanup --dry-run   # Preview what would be cleaned
/unipi:name-badge          # Toggle the session name badge
/unipi:badge-gen           # Generate a session name via LLM

Special Triggers

Utility registers with the info-screen dashboard, showing module status and diagnostic results. The footer subscribes to utility events for its extension status segment.

The diff rendering feature wraps Pi's built-in write and edit tools. When enabled, these tools show syntax-highlighted diffs instead of plain output. This is a transparent replacement — the agent doesn't need to know about it.

Agent Tools

Tool Description
ctx_batch Atomic batch execution with rollback support
ctx_env Environment inspection for debugging
write Write file with syntax-highlighted diff (when diff enabled)
edit Edit file with split/unified diff view (when diff enabled)

Batch Execution

import { BatchBuilder } from "@pi-unipi/utility/tools/batch";

const report = await new BatchBuilder()
  .addCommand("search", { query: "refactor" })
  .addTool("memory_search", { query: "patterns" })
  .withOptions({ failFast: true, commandTimeoutMs: 30000 })
  .execute(myExecutor);

if (!report.success) {
  console.log("Failed:", report.results.find(r => !r.success)?.error);
}

Configurables

Diff Rendering

/unipi:util-settings        # Open unified settings TUI

Or edit .unipi/config/util-settings.json directly:

{
  "diff": {
    "enabled": true,
    "theme": "default",
    "shikiTheme": "github-dark",
    "splitMinWidth": 150
  }
}
Setting Default Options
enabled true true/false
theme "default" default, midnight, subtle, neon
shikiTheme "github-dark" github-dark, dracula, one-dark-pro, catppuccin-mocha, nord, tokyo-night
splitMinWidth 150 Minimum terminal width for split view

Environment variable overrides: DIFF_ADD_BG, DIFF_REM_BG, etc.

Features:

  • Split view (side-by-side) for edit, auto-falls back to unified on narrow terminals
  • Unified view (stacked) for write overwrites
  • LRU cache (192 entries) for Shiki highlights
  • Large diff fallback (skip highlighting above 80k chars)

Name Badge

The badge is a persistent HUD overlay in the top-right corner showing the current session name. It auto-restores visibility on session restart.

Programmatic API

Module Path Description
ProcessLifecycle lifecycle/process Parent PID polling, orphan detection, signal handlers
cleanupStale lifecycle/cleanup Stale DB/temp/session/cache cleanup with dry-run
TTLCache cache/ttl-cache Memory or SQLite-backed TTL cache
AnalyticsCollector analytics/collector Privacy-respecting event collection with daily rollup
runDiagnostics diagnostics/engine Cross-module health checks with plugin architecture
detectCapabilities display/capabilities Terminal feature detection (color, Nerd Font, unicode)
Width Utilities display/width ANSI-aware clamp, wrap, collapse, pad, center

TTL Cache

import { TTLCache } from "@pi-unipi/utility/cache/ttl-cache";

const cache = new TTLCache({ defaultTtlMs: 60000 });
await cache.set("key", { data: "value" });
const value = await cache.get("key");

Terminal Capabilities

import { detectCapabilities, getIcon } from "@pi-unipi/utility/display/capabilities";

const caps = detectCapabilities();
console.log("Nerd Font:", caps.nerdFont);
console.log(getIcon("󰘳", "[OK]")); // Uses Nerd Font if available

Privacy

The analytics collector is privacy-respecting:

  • No file contents recorded
  • No sensitive data (API keys, tokens, passwords) — redacted automatically
  • Strings truncated to 500 characters
  • All data stays local

License

MIT