[Update] bulk update
This commit is contained in:
+72
-10
@@ -56,15 +56,70 @@ have a slash command to disable them for the current session without deleting.
|
||||
| Extension | What it adds | Origin | Remove |
|
||||
|---|---|---|---|
|
||||
| `statusbar.ts` | Replaces the footer with a Claude-Code-style status line (cwd, git branch, model, context %, decode t/s, token counts) in Nerd Font glyphs; adds a streaming pulse + a ≥80%-context warning widget | **custom** | delete file → default footer returns; or `/statusbar` to toggle off for the session |
|
||||
| `vim-editor.ts` | Modal (vim-like) input editor with `[I]/[N]/[V]` indicator, hjkl/word/line motions, counts, yank/paste via the kill-ring | **local fork** of pi's bundled `examples/extensions/modal-editor.ts` | delete file → default editor; or `/vim` to toggle |
|
||||
| `plan-mode/` | Read-only "plan" mode (disables edit/write, restricts bash) bound to **Shift+Tab**; `/plan` toggles, `--plan` starts in it | **vendored** copy of pi's bundled `examples/extensions/plan-mode/`, rebound from upstream `Ctrl+Alt+P` | delete the folder **and** revert the `keybindings.json` `app.thinking.cycle` remap (see below) |
|
||||
| `vim-toggle.ts` | `/vim` — drops the modal editor for the rest of the session, and brings it back via `ctx.reload()`. Pairs with the **`pi-vim` package** (below), which registers no command of its own | **custom** | delete file → you lose the toggle, not the editor; remove the package to drop modal editing itself |
|
||||
| `plan-mode/` | Read-only "plan" mode (disables edit/write, restricts bash) bound to **Shift+Tab**; `/plan` toggles, `--plan` starts in it, `/plan-done` clears a stuck progress checklist | **vendored** copy of pi's bundled `examples/extensions/plan-mode/`, rebound from upstream `Ctrl+Alt+P` | delete the folder **and** revert the `keybindings.json` `app.thinking.cycle` remap (see below) |
|
||||
| `notify.ts` | Native terminal notification (OSC 777/99, Windows toast) when the agent goes idle | **verbatim** from pi's `examples/extensions/notify.ts` | delete file |
|
||||
| `questionnaire.ts` | Interactive multi-question overlay the model can call as a tool | **near-verbatim** from pi's `examples/extensions/questionnaire.ts` (one-line fix) | delete file |
|
||||
| `permission-gate.ts` | Prompts before dangerous `bash` commands (blocks outright with no UI). Local list covers git history rewrites, package managers, `systemctl` and irreversible disk ops on top of upstream's `rm -rf`/`sudo`/`chmod 777` | **adapted** from pi's `examples/extensions/permission-gate.ts` | delete file |
|
||||
| `protected-paths.ts` | Blocks `write`/`edit` to secrets and repo plumbing (`secrets.fish`, `auth.json`, `.env`, `.ssh/`, `.git/`, …) | **adapted** from pi's `examples/extensions/protected-paths.ts` | delete file |
|
||||
| `compaction-watch.ts` | Surfaces every compaction and its `reason`; loudly flags `overflow` (recovery rather than prevention), which means `reserveTokens` is below the model's `maxTokens` | **custom** | delete file |
|
||||
| `confirm-destructive.ts` | Confirms before session clear / switch / fork | **verbatim** from pi's `examples/extensions/confirm-destructive.ts` | delete file |
|
||||
| `session-name.ts` | `/session-name [name]` — friendly names in the session picker instead of the first message | **verbatim** from pi's `examples/extensions/session-name.ts` | delete file |
|
||||
| `todo.ts` | A `todo` tool the model calls (add/toggle/list/clear) plus `/todos` to view it; state lives in tool results, so forking rewinds it correctly. Distinct from plan-mode's checklist | **verbatim** from pi's `examples/extensions/todo.ts` | delete file (it also adds a tool schema to every request) |
|
||||
|
||||
> The bundled examples live at `/opt/pi-coding-agent/examples/extensions/` — that's
|
||||
> where `notify`/`questionnaire`/`modal-editor`/`plan-mode` came from, and where to
|
||||
> re-pull the two forks after a pi upgrade before re-applying the local edits (the
|
||||
> forks' own headers document those edits).
|
||||
> where `notify`/`questionnaire`/`plan-mode` came from. `plan-mode/` is now the only
|
||||
> **fork** left, so it's the only one to re-pull after a pi upgrade before re-applying
|
||||
> the local edits (its header documents them). `notify`/`questionnaire` carry no edits
|
||||
> worth keeping — just re-copy them. The modal editor used to be a fork of
|
||||
> `modal-editor.ts` too; it was replaced by the `pi-vim` package on 2026-08-05 and the
|
||||
> fork deleted on 2026-08-09 — `git show c6566af^:common/.pi/agent/extensions/vim-editor.ts`
|
||||
> brings it back if ever wanted.
|
||||
|
||||
### Modal (vim) input — the `pi-vim` package
|
||||
|
||||
Modal editing is **not** an extension in this tree any more; it's the npm package
|
||||
[`pi-vim`](https://github.com/lajarre/pi-vim), pinned by `settings.json > packages`
|
||||
and installed into the gitignored `agent/npm/`. That swap is the point: `pi update
|
||||
npm:pi-vim` instead of re-pulling and re-patching a fork on every pi upgrade.
|
||||
|
||||
Five modes (INSERT/NORMAL/VISUAL/V-LINE/EX) with the usual motions, operators, text
|
||||
objects, undo and `.` repeat; the mode renders as a word label at the editor's
|
||||
bottom-right, doubling as a pending-command display (` NORMAL 3d2w_ `). `:` dispatches
|
||||
real pi commands and shells out with `:!`. No search (`/`, `?`, `n`), macros or
|
||||
visual-block — upstream implements none of those.
|
||||
|
||||
```fish
|
||||
pi install npm:pi-vim
|
||||
```
|
||||
|
||||
> ⚠️ **This pi build needs pi-vim's peer dep installed by hand.** pi ships as a
|
||||
> Bun-compiled ELF with the `@earendil-works/*` packages *embedded*, not on disk.
|
||||
> pi-vim's `clipboard-mirror.ts` calls `import.meta.resolve("@earendil-works/pi-coding-agent")`
|
||||
> at **module top level**, so after a bare `pi install` the resolve throws and the whole
|
||||
> extension fails to load with `Cannot find module '@earendil-works/pi-coding-agent'`.
|
||||
> No setting avoids it — the call runs at import time. Once per host, matching
|
||||
> `pi --version` exactly:
|
||||
>
|
||||
> ```fish
|
||||
> cd ~/.pi/agent/npm
|
||||
> fnm exec --using=22 -- npm install --save-exact @earendil-works/pi-coding-agent@0.83.0
|
||||
> ```
|
||||
>
|
||||
> `pi install` deliberately doesn't pull peers (it would duplicate the runtime). Costs
|
||||
> ~170 MB, and wants re-pinning after every pi upgrade — hence `--save-exact`, since a
|
||||
> caret range would quietly drift off `pi --version`.
|
||||
|
||||
Configured under `settings.json > piVim`: `modeColors` (theme tokens, not raw ANSI),
|
||||
`borderSync`/`labelSync` pinned so only the label is tinted, and
|
||||
`clipboardMirror: "yank"` — upstream's default `"all"` mirrors deletes too, so every
|
||||
`dd`/`x` would clobber the OS clipboard. `exCommand.copyInputToClipboard` is left
|
||||
**off**: it copies the composed prompt out, so upstream only honours it from the
|
||||
user-global settings file.
|
||||
|
||||
**Remove:** `pi remove npm:pi-vim`, and delete `agent/extensions/vim-toggle.ts` plus the
|
||||
`piVim` block. `@burneikis/pi-vim` and `pi-vimmode` are alternatives that need no peer
|
||||
install.
|
||||
|
||||
### Theme
|
||||
|
||||
@@ -110,11 +165,14 @@ Beyond pointing at local models, these values deviate from pi's defaults:
|
||||
|
||||
| Key | Value here | Stock default | Why |
|
||||
|---|---|---|---|
|
||||
| `compaction.reserveTokens` | `6144` | 16384 | small local windows (24k–128k) — don't let the response reserve dominate a short window |
|
||||
| `compaction.keepRecentTokens` | `6000` | 20000 | keep less verbatim so short windows don't thrash into repeated compaction |
|
||||
| `compaction.reserveTokens` | `8192` | 16384 | small local windows (24k–128k), but **≥ every model's `maxTokens`** — otherwise a turn can overflow the window before compaction even fires |
|
||||
| `compaction.keepRecentTokens` | `4000` | 20000 | keep less verbatim, to pay for the larger reserve and leave room after a compaction for the next one |
|
||||
| `npmCommand` | `fnm exec --using=22 -- npm` | `npm` | pin extension npm installs to Node 22 via fnm |
|
||||
| `retry` / `httpIdleTimeoutMs` | long (1h provider timeout, 10m idle) | shorter | local models can be slow to first token |
|
||||
| `defaultThinkingLevel` | `off` | — | most local models here are non-reasoning |
|
||||
| `packages` | `["npm:pi-vim"]` | `[]` | the modal editor — see the pi-vim section above |
|
||||
| `piVim` | mode colors, `clipboardMirror: "yank"`, `:` → pi bridge | — | package config, not a pi setting; ignored if the package is removed |
|
||||
| `collapseChangelog` | `true` | `false` | condensed changelog after an upgrade instead of the full screen |
|
||||
|
||||
**Remove:** delete each key to fall back to pi's default (or drop the whole
|
||||
`compaction`/`retry` block).
|
||||
@@ -140,8 +198,9 @@ model.
|
||||
> config. `auth.json` is **not tracked** (gitignored as of 2026-08-08): pi's interactive
|
||||
> `/login` rewrites it with the **literal** key, and a tracked copy would be one stray
|
||||
> `/login` away from committing a real token. Bootstrap a new host with
|
||||
> `cp auth.json.example auth.json`. For bash its `.bash_profile` since it's not tracked by
|
||||
> git, stow not applied.
|
||||
> `cp auth.json.example auth.json`. The key itself lives in a shell file that is *not*
|
||||
> tracked and *not* stowed, so it never reaches this repo — `conf.d/secrets.fish` for
|
||||
> fish, `~/.bash_profile` for bash.
|
||||
|
||||
---
|
||||
|
||||
@@ -150,7 +209,10 @@ model.
|
||||
- **Just the status bar:** copy `agent/extensions/statusbar.ts` into your
|
||||
`~/.pi/agent/extensions/`, re-stow/restart, `/reload`. Colors follow your active
|
||||
theme automatically. Needs a Nerd Font terminal for the glyphs.
|
||||
- **Just vim input:** copy `agent/extensions/vim-editor.ts`, `/reload`, `/vim`.
|
||||
- **Just vim input:** `pi install npm:pi-vim`, then the peer-dep install above (this
|
||||
build needs it), then `/reload`. Copy the `piVim` block from `settings.json` for the
|
||||
same colors and clipboard behaviour, and `agent/extensions/vim-toggle.ts` if you want
|
||||
`/vim` to toggle it.
|
||||
- **Just plan mode:** copy `agent/extensions/plan-mode/` **and** add the
|
||||
`app.thinking.cycle` remap to your `keybindings.json` (else Shift+Tab collides).
|
||||
- **Just the theme:** copy `agent/themes/catppuccin-mocha.json`, set
|
||||
|
||||
Reference in New Issue
Block a user