pi-archimedes 2.5.1 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +215 -0
  2. package/package.json +17 -16
  3. package/src/settings.ts +5 -0
package/README.md ADDED
@@ -0,0 +1,215 @@
1
+ # Archimedes
2
+ ### Pi, with the good stuff.
3
+
4
+ An extra pair of eyes on your code. Agents working in parallel. A terminal that keeps you in the loop—and looks good doing it.
5
+
6
+ **Archimedes brings subagents, shared task lists, MCP tools, and a polished interface to [Pi](https://github.com/earendil-works/pi). Install them together, use what you like, and make the setup yours.**
7
+
8
+ [![npm version](https://img.shields.io/npm/v/pi-archimedes?style=flat-square)](https://www.npmjs.com/package/pi-archimedes)
9
+ [![Node.js Version](https://img.shields.io/badge/node-%3E%3D22.19.0-brightgreen?style=flat-square)](https://nodejs.org)
10
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green?style=flat-square)](https://github.com/danielcherubini/pi-archimedes/blob/main/LICENSE)
11
+
12
+ [Setup](#setup) • [Commands](#commands) • [Settings](#settings) • [Components](#components)
13
+
14
+ ---
15
+
16
+ ## Setup
17
+
18
+ ### You already use Pi
19
+
20
+ One command:
21
+
22
+ ```bash
23
+ pi install npm:pi-archimedes
24
+ ```
25
+
26
+ Your `~/.pi/agent/` stays as it is — Archimedes only adds its namespaces under `settings.json`. Pi's own `auth.json`, `keybindings.json`, agents, and sessions are untouched (and `/mcp setup` only writes the project's `.mcp.json`, when you run it).
27
+
28
+ Then run `/reload` in your session (or start a new one) to pick it up — that reloads the extensions *and* your keybindings, so any shortcuts you've customized in `~/.pi/agent/keybindings.json` keep working.
29
+
30
+ ### New to Pi
31
+
32
+ 1. **Node.js ≥ 22.19.0** — the requirement [Pi](https://github.com/earendil-works/pi) itself declares.
33
+ 2. **Install Pi** (shell):
34
+
35
+ ```bash
36
+ npm install -g --ignore-scripts @earendil-works/pi-coding-agent
37
+ ```
38
+
39
+ 3. **Install Archimedes** (shell):
40
+
41
+ ```bash
42
+ pi install npm:pi-archimedes
43
+ ```
44
+
45
+ 4. **Launch** the terminal in the project you want to work on (shell):
46
+
47
+ ```bash
48
+ cd /path/to/your/project
49
+ pi
50
+ ```
51
+
52
+ 5. **Authenticate and pick a model** (inside the Pi session):
53
+
54
+ ```text
55
+ /login
56
+ /model
57
+ ```
58
+
59
+ 6. **Make image-paste own the paste keys** — Pi's built-in `app.clipboard.pasteImage` owns `Ctrl+V` (Linux/macOS) / `Alt+V` (Windows), and image-paste (on by default in the suite) binds the same keys — clear the built-in in `~/.pi/agent/keybindings.json` so image-paste takes them cleanly (otherwise both handlers fire on the shared key and the built-in throws warning banners; format in Pi's [keybindings docs](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/keybindings.md)). If the file doesn't exist yet, create it with:
60
+
61
+ ```json
62
+ {
63
+ "app.clipboard.pasteImage": []
64
+ }
65
+ ```
66
+
67
+ If it already exists, just add/set `"app.clipboard.pasteImage": []` in there and run `/reload`.
68
+
69
+ `/login` signs you into a supported provider (subscription or API key) and `/model` selects a model from it. Model access comes through the providers you configure in Pi — Pi's [provider docs](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/providers.md) list the supported ones, and Archimedes doesn't ship a model of its own. For the broader first run, Pi's [quickstart](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/quickstart.md) is worth a read.
70
+
71
+ <p align="center">
72
+ <img src="https://raw.githubusercontent.com/danielcherubini/pi-archimedes/main/docs/images/splash-screen.png" width="600" alt="pi-archimedes splash screen">
73
+ </p>
74
+
75
+ ---
76
+
77
+ ## Give your agent some backup.
78
+
79
+ Have one subagent explore the codebase while another reviews your changes. [Subagents](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/subagent/README.md) run with your choice of models and tools, stream their progress live into your terminal, and their tasks show up side by side on the [shared todo board](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/todo/README.md).
80
+
81
+ Their token usage and costs feed into the same status bar. More work happening at once, without losing sight of it.
82
+
83
+ See the [subagent guide](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/subagent/README.md) for dispatching, agent definitions, and the `/agents` editor.
84
+
85
+ <p align="center">
86
+ <img src="https://raw.githubusercontent.com/danielcherubini/pi-archimedes/main/docs/images/subagents-main-view.png" width="750" alt="Subagents parallel streaming view">
87
+ </p>
88
+
89
+ <p align="center">
90
+ <img src="https://raw.githubusercontent.com/danielcherubini/pi-archimedes/main/docs/images/todos-and-subagent.png" width="750" alt="Todos and subagent side-by-side">
91
+ </p>
92
+
93
+ ---
94
+
95
+ ## Keep the decisions. Delegate the work.
96
+
97
+ When a subagent needs your input, it can ask directly in your session — [ask](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/ask/README.md) presents the question right in your terminal. Pick an option, add a note, or write your own answer. It gets your decision and carries on.
98
+
99
+ You don't have to copy messages between terminals to stay involved.
100
+
101
+ <p align="center">
102
+ <img src="https://raw.githubusercontent.com/danielcherubini/pi-archimedes/main/docs/images/ask-subagent.png" width="750" alt="Interactive ask prompt from a subagent">
103
+ </p>
104
+
105
+ ---
106
+
107
+ ## Bring the tools you already use.
108
+
109
+ [Connect MCP servers](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/mcp/README.md), browse their tools, and handle authentication inside Pi. Import server definitions from Cursor, Claude Code, Claude Desktop, or VS Code rather than rebuilding your setup.
110
+
111
+ Start with `/mcp setup`. Manage it with `/mcp`.
112
+
113
+ ---
114
+
115
+ ## See what changed. Not just that something changed.
116
+
117
+ [Syntax-highlighted diffs](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/diff/README.md), side by side when there's room and unified when there isn't. Word-level highlights draw your eye to the changes inside each line.
118
+
119
+ The details are easier to catch when they're easier to read.
120
+
121
+ <p align="center">
122
+ <img src="https://raw.githubusercontent.com/danielcherubini/pi-archimedes/main/docs/images/diff-edit.png" width="750" alt="Shiki syntax-highlighted split diff">
123
+ </p>
124
+
125
+ ---
126
+
127
+ ## A terminal worth spending your day in.
128
+
129
+ [Paste screenshots](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/image-paste/README.md) with inline previews. Keep your [branch, model, context usage, and costs](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/footer/README.md) in view. Give sessions [useful names automatically](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/session-name/README.md) so they're easier to find later.
130
+
131
+ A [framed editor](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/core/README.md), animated working indicators, and configurable colours finish the picture. Small touches that make the whole setup feel considered.
132
+
133
+ **Practical notes:** the paste markers appear as you paste; image previews appear when you submit the message. Image rendering and desktop alerts both depend on your terminal's support — the [image-paste](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/image-paste/README.md) and [notify](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/notify/README.md) docs cover what each needs. Naming is a separate (potentially billed) model call, not included in the footer's totals.
134
+
135
+ ---
136
+
137
+ ## A little more care with root access.
138
+
139
+ For tasks that need sudo, [sudo](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/sudo/README.md) shows you the exact command and its reason before you enter your password in a masked prompt—not the chat. Credentials are cached in memory with an expiry, and `/sudo forget` clears them.
140
+
141
+ ## Step away without losing track.
142
+
143
+ [Notify](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/notify/README.md) alerts you when the agent finishes or a prompt needs your attention. Alerts wait before firing, and typing cancels anything pending.
144
+
145
+ You can leave the terminal to do its thing.
146
+
147
+ ---
148
+
149
+ ## The whole suite. Or just your favourite parts.
150
+
151
+ One install brings everything together. Switch optional extensions on or off with `/plugins`, then `/reload` to apply. Use `/archimedes` to adjust the available settings.
152
+
153
+ Only want the diffs, footer, or MCP tools? Each component is available separately — see [Components](#components).
154
+
155
+ ---
156
+
157
+ ## Commands
158
+
159
+ | Command | Scope | Notes |
160
+ |---------|-------|-------|
161
+ | `/plugins` | Suite | Toggle the ten optional extensions (core is always on and not toggleable). Toggles persist immediately; `/reload` (or a fresh session) applies them. |
162
+ | `/archimedes` | Suite | Interactive settings panel — up/down moves, left/right changes values, Enter edits supported fields, `s` saves, Esc discards the current edits. Settings captured at startup need `/reload`. Not every setting has a panel control. |
163
+ | `/agents` | Suite, subagent enabled | Browse, create, and edit custom subagent definitions in `.pi/agents/*.md`. |
164
+ | `/todos` | Todo component | Refreshes the todo widget and reports its status. `/todos clear` clears the list. (The board's visibility is not a `/todos` toggle — see the [todo docs](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/todo/README.md).) |
165
+ | `/mcp`, `/mcp setup` | MCP component | Manage servers and run logins; the setup wizard scaffolds `.mcp.json` or imports configs from Cursor, Claude Code, Claude Desktop, or VS Code. |
166
+ | `/sudo`, `/sudo forget` | Sudo component | Inspect cached credential state; `forget` clears it. |
167
+ | `/reload` | Pi | Applies plugin changes and settings read at startup. |
168
+
169
+ ---
170
+
171
+ ## Settings
172
+
173
+ Every component keeps its own namespace under `~/.pi/agent/settings.json`, which Pi parses as **strict JSON** (no comments — unlike MCP server configs, which accept JSONC). Each component's README documents its namespace, fields, and defaults — including [core](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/core/README.md) (chrome, spinner, thinking), [footer](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/footer/README.md), [diff](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/diff/README.md), [notify](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/notify/README.md), [mcp](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/mcp/README.md), and [sudo](https://github.com/danielcherubini/pi-archimedes/blob/main/packages/sudo/README.md) (also strict JSON). The `/archimedes` panel covers the settings that have a control; not everything does.
174
+
175
+ ---
176
+
177
+ ## Components
178
+
179
+ | Component | npm package | What it adds |
180
+ |-----------|-------------|--------------|
181
+ | **Core** | [`@pi-archimedes/core`](https://www.npmjs.com/package/@pi-archimedes/core) | Shared event bus, splash screen, framed editor, working spinner, thinking blocks |
182
+ | **Subagent** | [`@pi-archimedes/subagent`](https://www.npmjs.com/package/@pi-archimedes/subagent) | Live subagent dispatch, custom agent definitions; `/agents` editor with the suite |
183
+ | **Todo** | [`@pi-archimedes/todo`](https://www.npmjs.com/package/@pi-archimedes/todo) | Multi-column todo board with subagent columns and auto-clear |
184
+ | **Ask** | [`@pi-archimedes/ask`](https://www.npmjs.com/package/@pi-archimedes/ask) | Structured questions — including subagent questions relayed into your terminal |
185
+ | **MCP** | [`@pi-archimedes/mcp`](https://www.npmjs.com/package/@pi-archimedes/mcp) | `/mcp` management, setup wizard, OAuth, config imports |
186
+ | **Sudo** | [`@pi-archimedes/sudo`](https://www.npmjs.com/package/@pi-archimedes/sudo) | `sudo_exec` with masked password prompt and interactive-sudo guard |
187
+ | **Diff** | [`@pi-archimedes/diff`](https://www.npmjs.com/package/@pi-archimedes/diff) | Syntax-highlighted side-by-side and unified diffs with word-level highlights |
188
+ | **Footer** | [`@pi-archimedes/footer`](https://www.npmjs.com/package/@pi-archimedes/footer) | Branch, model, context usage, and token/cost status bar |
189
+ | **Image Paste** | [`@pi-archimedes/image-paste`](https://www.npmjs.com/package/@pi-archimedes/image-paste) | Clipboard image paste with inline previews |
190
+ | **Notify** | [`@pi-archimedes/notify`](https://www.npmjs.com/package/@pi-archimedes/notify) | Delayed desktop notifications with input cancellation |
191
+ | **Session Name** | [`@pi-archimedes/session-name`](https://www.npmjs.com/package/@pi-archimedes/session-name) | Automatic session titles |
192
+
193
+ The full suite is the supported connected setup — the integrations above (subagent costs in the footer, subagent columns on the todo board, subagent questions in the terminal) light up when the relevant components are loaded together.
194
+
195
+ To install just the components you want:
196
+
197
+ ```bash
198
+ pi install npm:@pi-archimedes/core
199
+ pi install npm:@pi-archimedes/subagent
200
+ pi install npm:@pi-archimedes/todo
201
+ pi install npm:@pi-archimedes/ask
202
+ pi install npm:@pi-archimedes/mcp
203
+ pi install npm:@pi-archimedes/sudo
204
+ pi install npm:@pi-archimedes/diff
205
+ pi install npm:@pi-archimedes/footer
206
+ pi install npm:@pi-archimedes/image-paste
207
+ pi install npm:@pi-archimedes/notify
208
+ pi install npm:@pi-archimedes/session-name
209
+ ```
210
+
211
+ ---
212
+
213
+ ## Development
214
+
215
+ `pi-archimedes` is the meta package of a pnpm monorepo — clone it, run `pnpm install`, and test the full suite from source. For the component layout, no-build-step workflow, and local testing with Pi (including a warning about not loading the local copy and an npm copy at the same time), see the [root README's development instructions](https://github.com/danielcherubini/pi-archimedes/blob/main/README.md#development) and [AGENTS.md](https://github.com/danielcherubini/pi-archimedes/blob/main/AGENTS.md).
package/package.json CHANGED
@@ -1,35 +1,36 @@
1
1
  {
2
2
  "name": "pi-archimedes",
3
- "version": "2.5.1",
3
+ "version": "2.6.2",
4
4
  "type": "module",
5
5
  "keywords": [
6
6
  "pi-package"
7
7
  ],
8
- "description": "Visual polish and useful context for the Pi coding agent TUI",
8
+ "description": "Parallel agents, shared task lists, MCP tools, and a polished terminal for the Pi coding agent.",
9
9
  "files": [
10
- "src"
10
+ "src",
11
+ "README.md"
11
12
  ],
12
13
  "main": "./src/index.ts",
13
14
  "dependencies": {
14
- "@pi-archimedes/footer": "2.5.1",
15
- "@pi-archimedes/diff": "2.5.1",
16
- "@pi-archimedes/ask": "2.5.1",
17
- "@pi-archimedes/image-paste": "2.5.1",
18
- "@pi-archimedes/core": "2.5.1",
19
- "@pi-archimedes/subagent": "2.5.1",
20
- "@pi-archimedes/session-name": "2.5.1",
21
- "@pi-archimedes/mcp": "2.5.1",
22
- "@pi-archimedes/notify": "2.5.1",
23
- "@pi-archimedes/sudo": "2.5.1",
24
- "@pi-archimedes/todo": "2.5.1"
15
+ "@pi-archimedes/core": "2.6.2",
16
+ "@pi-archimedes/image-paste": "2.6.2",
17
+ "@pi-archimedes/diff": "2.6.2",
18
+ "@pi-archimedes/subagent": "2.6.2",
19
+ "@pi-archimedes/footer": "2.6.2",
20
+ "@pi-archimedes/ask": "2.6.2",
21
+ "@pi-archimedes/notify": "2.6.2",
22
+ "@pi-archimedes/session-name": "2.6.2",
23
+ "@pi-archimedes/todo": "2.6.2",
24
+ "@pi-archimedes/mcp": "2.6.2",
25
+ "@pi-archimedes/sudo": "2.6.2"
25
26
  },
26
27
  "peerDependencies": {
27
28
  "@earendil-works/pi-coding-agent": ">=0.1.0",
28
29
  "@earendil-works/pi-tui": ">=0.1.0"
29
30
  },
30
31
  "devDependencies": {
31
- "@earendil-works/pi-coding-agent": "^0.84.4",
32
- "@earendil-works/pi-tui": "^0.84.4",
32
+ "@earendil-works/pi-coding-agent": "^0.85.1",
33
+ "@earendil-works/pi-tui": "^0.85.1",
33
34
  "typescript": "^6.0.0"
34
35
  },
35
36
  "pi": {
package/src/settings.ts CHANGED
@@ -26,6 +26,7 @@ import { createSettingsManager, type PromptDescriptor } from "./settings-manager
26
26
 
27
27
  const PROMPTS: Record<string, PromptDescriptor> = {
28
28
  labelText: { kind: "text", label: "Label text" },
29
+ editorSpinLabel: { kind: "text", label: "Spinner label" },
29
30
  labelColor: { kind: "text", label: "RGB color (e.g. 255,215,0)" },
30
31
  diffTheme: { kind: "text", label: "Shiki theme" },
31
32
  diffSplitMinWidth: { kind: "number", label: "Diff split min width", min: 100 },
@@ -93,6 +94,10 @@ export async function openSettings(pi: ExtensionAPI, ctx: ExtensionContext): Pro
93
94
  // ── Core settings ──
94
95
  case "mutedTheme": coreConfig.mutedTheme = newValue === "On"; break;
95
96
  case "codeUnindent": coreConfig.codeUnindent = newValue === "On"; break;
97
+ case "editorSpinBorder": coreConfig.editorSpinBorder = newValue === "On"; break;
98
+ case "editorSpinSpeed": coreConfig.editorSpinSpeed = newValue.toLowerCase() as CoreConfig["editorSpinSpeed"]; break;
99
+ case "editorSpinStyle": coreConfig.editorSpinStyle = newValue.toLowerCase().replace(/ /g, "-") as CoreConfig["editorSpinStyle"]; break;
100
+ case "editorSpinLabel": coreConfig.editorSpinLabel = newValue; break;
96
101
  case "labelText": coreConfig.labelText = newValue; break;
97
102
  case "labelColor": coreConfig.labelColor = newValue; break;
98
103
  case "animationStyle": coreConfig.animationStyle = newValue as CoreConfig["animationStyle"]; break;