Rename @mariozechner/pi-* to @earendil-works/pi-*

Pi moved to its new home at earendil-works on 2026-05-07
(https://pi.dev/news/2026/5/7/pi-has-a-new-home). Affected packages:

  @mariozechner/pi-coding-agent  -> @earendil-works/pi-coding-agent
  @mariozechner/pi-tui           -> @earendil-works/pi-tui
  @mariozechner/pi-ai            -> @earendil-works/pi-ai
  @mariozechner/pi-agent-core    -> @earendil-works/pi-agent-core

The old @mariozechner/* packages are deprecated on npm with the
explicit message 'please use @earendil-works/pi-coding-agent instead
going forward', and the version stream has moved on (old top-out
0.73.1; new currently 0.74.0). Anyone npm-installing the old names
gets a deprecation warning + a stale binary.

Sweep:
- All 7 extension TypeScript files: import statements updated.
- README, AGENTS, install.sh: textual references and the github.com/
  mariozechner/pi-coding-agent URL pointed at github.com/earendil-works/
  pi (the new monorepo root; coding-agent now lives at
  packages/coding-agent inside it).
- Bun build of mcp-loader, ext-toggle, ssh-controlmaster verified clean.

Brew install references (`brew install pi-coding-agent`) left as-is:
the homebrew formula still works at 0.73.1 and a tap update is
tracked upstream at earendil-works/pi#2755. Historical CHANGELOG
entries are untouched.
This commit is contained in:
2026-05-09 17:56:15 +02:00
parent feb7add717
commit 1381a37115
10 changed files with 18 additions and 18 deletions
+3 -3
View File
@@ -73,8 +73,8 @@ untouched.
1. **Drop a `.ts` file into `extensions/`.** No other config needed —
`install.sh` discovers all `.ts` files automatically.
2. **Export a default factory function** `(pi: ExtensionAPI) => void`.
See the [pi extensions docs](https://github.com/mariozechner/pi-coding-agent/blob/main/docs/extensions.md)
and [built-in examples](https://github.com/mariozechner/pi-coding-agent/tree/main/examples/extensions).
See the [pi extensions docs](https://github.com/earendil-works/pi/blob/main/docs/extensions.md)
and [built-in examples](https://github.com/earendil-works/pi/tree/main/examples/extensions).
3. **Register any CLI flags** via `pi.registerFlag()` so they appear in
`pi --help`.
4. **Keep the extension inert without its flag** (or equivalent trigger). Don't
@@ -242,7 +242,7 @@ upstream updates but gain reproducibility.
**Refresh from upstream when needed:**
```bash
cp /opt/homebrew/Cellar/pi-coding-agent/*/libexec/lib/node_modules/@mariozechner/pi-coding-agent/examples/extensions/todo.ts \
cp /opt/homebrew/Cellar/pi-coding-agent/*/libexec/lib/node_modules/@earendil-works/pi-coding-agent/examples/extensions/todo.ts \
~/src/src_local/pi-extensions/extensions/todo.ts
# review diff, then commit
```
+2 -2
View File
@@ -1,6 +1,6 @@
# pi-extensions
Custom and modified extensions for the [pi coding-agent](https://github.com/mariozechner/pi-coding-agent).
Custom and modified extensions for the [pi coding-agent](https://github.com/earendil-works/pi).
This repo is the single source of truth for extensions that aren't suitable for general publishing — personal workflow tweaks, modified versions of built-in examples, and extensions written for specific infrastructure. Symlinked into `~/.pi/agent/extensions/` so pi loads them automatically.
@@ -266,7 +266,7 @@ Generic MCP server loader. Reads an `mcp` block from `~/.pi/agent/settings.json`
UX matches `/ext`: **space** stages a toggle, **enter** writes back to `settings.json` and reloads pi, **esc** cancels. Toggling re-enables a previously-disabled server by removing the explicit `enabled` key (the default is `true`).
Each extension is a TypeScript module loaded by [jiti](https://github.com/unjs/jiti) — no compilation step. See the [pi extensions docs](https://github.com/mariozechner/pi-coding-agent/blob/main/docs/extensions.md) and the [built-in examples](https://github.com/mariozechner/pi-coding-agent/tree/main/examples/extensions) for the API surface.
Each extension is a TypeScript module loaded by [jiti](https://github.com/unjs/jiti) — no compilation step. See the [pi extensions docs](https://github.com/earendil-works/pi/blob/main/docs/extensions.md) and the [built-in examples](https://github.com/earendil-works/pi/tree/main/examples/extensions) for the API surface.
---
+1 -1
View File
@@ -10,7 +10,7 @@
* /fork so you don't accidentally throw away work.
*/
import type { ExtensionAPI, SessionBeforeSwitchEvent, SessionMessageEntry } from "@mariozechner/pi-coding-agent";
import type { ExtensionAPI, SessionBeforeSwitchEvent, SessionMessageEntry } from "@earendil-works/pi-coding-agent";
// ── Dangerous bash patterns ───────────────────────────────────────────────────
+2 -2
View File
@@ -30,14 +30,14 @@ import * as os from "node:os";
import {
type ExtensionAPI,
getSettingsListTheme,
} from "@mariozechner/pi-coding-agent";
} from "@earendil-works/pi-coding-agent";
import {
Container,
Key,
matchesKey,
type SettingItem,
SettingsList,
} from "@mariozechner/pi-tui";
} from "@earendil-works/pi-tui";
const EXT_DIR = path.join(os.homedir(), ".pi", "agent", "extensions");
+1 -1
View File
@@ -11,7 +11,7 @@
* Status bar shows the number of checkpoints saved in the current session.
*/
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
export default function (pi: ExtensionAPI) {
// entryId → stash ref (e.g. "refs/stash" or a full sha)
+2 -2
View File
@@ -104,14 +104,14 @@ import * as path from "node:path";
import {
type ExtensionAPI,
getSettingsListTheme,
} from "@mariozechner/pi-coding-agent";
} from "@earendil-works/pi-coding-agent";
import {
Container,
Key,
matchesKey,
type SettingItem,
SettingsList,
} from "@mariozechner/pi-tui";
} from "@earendil-works/pi-tui";
import { Type } from "typebox";
// ── MCP types ────────────────────────────────────────────────────────────────
+1 -1
View File
@@ -13,7 +13,7 @@
* otherwise → OSC 777 (iTerm2, WezTerm, Ghostty, rxvt-unicode)
*/
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
// ── Notification backends ─────────────────────────────────────────────────────
+2 -2
View File
@@ -31,7 +31,7 @@ import { spawn } from "node:child_process";
import { writeFile, unlink } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import {
type BashOperations,
createBashTool,
@@ -41,7 +41,7 @@ import {
type EditOperations,
type ReadOperations,
type WriteOperations,
} from "@mariozechner/pi-coding-agent";
} from "@earendil-works/pi-coding-agent";
// ── Types ────────────────────────────────────────────────────────────────────
+3 -3
View File
@@ -10,9 +10,9 @@
* correct for that point in history.
*/
import { StringEnum } from "@mariozechner/pi-ai";
import type { ExtensionAPI, ExtensionContext, Theme } from "@mariozechner/pi-coding-agent";
import { matchesKey, Text, truncateToWidth } from "@mariozechner/pi-tui";
import { StringEnum } from "@earendil-works/pi-ai";
import type { ExtensionAPI, ExtensionContext, Theme } from "@earendil-works/pi-coding-agent";
import { matchesKey, Text, truncateToWidth } from "@earendil-works/pi-tui";
import { Type } from "typebox";
interface Todo {
+1 -1
View File
@@ -41,7 +41,7 @@ link_into_repo() {
require_pi_installed() {
if [[ ! -d "$PI_AGENT_DIR" ]]; then
err "pi not detected at $PI_AGENT_DIR"
printf ' Install pi first: https://github.com/mariozechner/pi-coding-agent\n'
printf ' Install pi first: https://github.com/earendil-works/pi\n'
printf ' Re-run after `pi --help` (first run creates ~/.pi/agent/).\n'
exit 4
fi