# @ddv12138/pi-setup

One-click bundle of my [pi](https://pi.dev) coding agent plugins. Install all 9 extensions with a single command:

```bash
pi install npm:@ddv12138/pi-setup
```

## What's included

| Package | Purpose |
|---|---|
| `pi-render-cache` | Message render caching |
| `rpiv-todo` | Todo list tool + overlay |
| `@ddv12138/pi-enter-no-send` | Enter key no longer sends message |
| `@ddv12138/pi-thinking-tail` | Thinking block tail display |
| `pi-dsh-minimal` | Minimal status header |
| `@ff-labs/pi-fff` | Fast file finder (`fffind`) & grep (`ffgrep`) tools |
| `pi-cometix-footer` | Composable TUI status footer |
| `pi-context-view` | Context usage viewer |
| `@zhushanwen/pi-ask-user` | Structured `ask_user` tool |

## How it works (v2.0.0+, always-latest)

The published tarball contains **only this manifest** (~2 KB). All 9 plugins are declared as npm `dependencies` with `*` ranges, so:

- when pi runs `npm install` on the target machine, each plugin is resolved **from its own npm registry address** at the **latest published version** at that moment,
- native binaries are resolved for the **current platform** (e.g. `@yuuang/ffi-rs-linux-x64-gnu` on Linux x64),
- the `pi` manifest references the hoisted sibling packages via `../../` paths.

### Updating

```bash
pi update npm:@ddv12138/pi-setup
```

`pi update` re-runs dependency resolution, so all plugins follow to their newest versions (including majors).

> **Note:** pi only reinstalls the bundle when the bundle itself has a newer version on npm. To push plugin updates to clients, publish a new bundle version manually (`npm version patch && npm publish`).

## Caveats

- Requires network access during install (npm resolves dependencies on the target machine).
- `*` ranges mean upstream breaking changes reach clients as soon as a new bundle version is published (and immediately on fresh installs). Pin a specific published version (e.g. `pi install npm:@ddv12138/pi-setup@1.2.0`) if you need stability.
- If npm ever nests one of the dependency packages inside `pi-setup/node_modules` instead of hoisting it (version conflict), the relative manifest paths would break. Delete and reinstall to recover.

## History

- v1.0.0 bundled all dependencies into the tarball (42 MB). It worked on macOS ARM but broke on other platforms because platform-specific binaries couldn't be re-resolved inside a pre-extracted `node_modules`. It remains available on npm as a fallback: `pi install npm:@ddv12138/pi-setup@1.0.0`.
- v1.1.0–v1.2.0 used caret (`^`) ranges: plugins auto-followed minor/patch updates, but major bumps required publishing a new manifest.
