@pi-unipi/unipi 3.0.0-alpha.21 → 3.0.0-alpha.22
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.
- package/CHANGELOG.md +13 -0
- package/README.md +193 -158
- package/package.json +21 -21
- package/packages/ask-user/README.md +82 -39
- package/packages/ask-user/index.ts +17 -2
- package/packages/ask-user/package.json +2 -2
- package/packages/ask-user/tools.ts +40 -6
- package/packages/autocomplete/README.md +46 -21
- package/packages/autocomplete/package.json +1 -1
- package/packages/background-tasks/README.md +69 -67
- package/packages/background-tasks/package.json +2 -2
- package/packages/btw/README.md +59 -13
- package/packages/btw/package.json +2 -2
- package/packages/compactor/README.md +78 -61
- package/packages/compactor/package.json +3 -3
- package/packages/core/README.md +98 -94
- package/packages/core/package.json +1 -1
- package/packages/footer/README.md +73 -116
- package/packages/footer/package.json +3 -3
- package/packages/fusion/README.md +83 -150
- package/packages/fusion/package.json +4 -4
- package/packages/info-screen/README.md +81 -69
- package/packages/info-screen/package.json +2 -2
- package/packages/input-shortcuts/README.md +47 -47
- package/packages/input-shortcuts/package.json +2 -2
- package/packages/kanboard/README.md +98 -182
- package/packages/kanboard/package.json +7 -7
- package/packages/long-horizon/README.md +98 -16
- package/packages/long-horizon/package.json +2 -2
- package/packages/long-horizon/src/gate.ts +9 -0
- package/packages/mcp/README.md +74 -62
- package/packages/mcp/package.json +2 -2
- package/packages/memory/README.md +93 -118
- package/packages/memory/package.json +3 -3
- package/packages/notify/README.md +85 -120
- package/packages/notify/package.json +2 -2
- package/packages/skill-registry/README.md +78 -44
- package/packages/skill-registry/package.json +2 -2
- package/packages/subagents/README.md +77 -31
- package/packages/subagents/package.json +3 -3
- package/packages/unipi/bundled.js +1210 -1099
- package/packages/updater/README.md +53 -55
- package/packages/updater/package.json +2 -2
- package/packages/utility/README.md +87 -78
- package/packages/utility/package.json +2 -2
- package/packages/utility/src/index.ts +12 -4
- package/packages/utility/src/render/delegated.ts +3 -0
- package/packages/utility/src/render/harness.ts +11 -2
- package/packages/utility/src/render/images.ts +51 -0
- package/packages/utility/src/render/reply-bg.ts +30 -2
- package/packages/utility/src/render/simple.ts +3 -0
- package/packages/utility/src/render/spacing.ts +13 -1
- package/packages/utility/src/settings.ts +2 -2
- package/packages/watchdog/README.md +66 -41
- package/packages/watchdog/package.json +3 -3
- package/packages/web-api/README.md +78 -126
- package/packages/web-api/package.json +2 -2
- package/packages/workflow/README.md +80 -103
- package/packages/workflow/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [3.0.0-alpha.22] — 2026-10-03
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- `utility`: harness annotations (e.g. the Fusion "delegate shell work" nudge) render once in simple mode instead of three rows.
|
|
13
|
+
- `utility`: simple mode hides tool-result images until Ctrl+O; images no longer overlap the text below them in any render style. (UNI-71)
|
|
14
|
+
- `utility`: simple mode spacing — text sits directly above its tool group, one blank row before the next text; same in sidekick/subagent panels. (UNI-45)
|
|
15
|
+
- `utility`: the transcript render style now defaults to `simple` (one collapsed line per tool call). Set `utility.render.style` to `regular` in `/unipi:settings` for Pi's own view. An unknown stored value now falls back to the default instead of `regular`.
|
|
16
|
+
- `ask-user`: `ask_user` is removed from the agent's tools while disabled in settings; the unavailable row says why (turned off vs no interactive UI). (UNI-69)
|
|
17
|
+
- `long-horizon`: `/unipi:regular` and goal stop update the footer mode immediately. (UNI-66)
|
|
18
|
+
|
|
19
|
+
### Docs
|
|
20
|
+
- v3 docs rewritten in plain controlled English (README, package READMEs, guide, reference, architecture, Unicrab story), with screenshots.
|
|
21
|
+
|
|
9
22
|
## [3.0.0-alpha.21] — 2026-10-03
|
|
10
23
|
|
|
11
24
|
### Added
|
package/README.md
CHANGED
|
@@ -1,126 +1,193 @@
|
|
|
1
|
-
<p align="center"
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/unipi-logo.png" width="220" alt="UniPi logo: Unicrab behind three terminal screens">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">UniPi</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<b>Extensions that make the Pi coding agent finish long work, remember it and show it.</b>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/@pi-unipi/unipi"><img src="https://img.shields.io/npm/v/%40pi-unipi%2Funipi?label=npm&color=e8452c" alt="npm version"></a>
|
|
13
|
+
<a href="https://github.com/Neuron-Mr-White/unipi/actions/workflows/ci.yml"><img src="https://github.com/Neuron-Mr-White/unipi/actions/workflows/ci.yml/badge.svg" alt="CI status"></a>
|
|
14
|
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license"></a>
|
|
15
|
+
<img src="https://img.shields.io/badge/pi-%5E0.87.1-555" alt="Pi 0.87.1 or later">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="docs/guide/getting-started.md">Getting started</a> ·
|
|
20
|
+
<a href="docs/README.md">Docs</a> ·
|
|
21
|
+
<a href="docs/architecture/README.md">Architecture</a> ·
|
|
22
|
+
<a href="docs/reference/commands.md">Commands</a> ·
|
|
23
|
+
<a href="docs/story/unicrab.md">Meet Unicrab</a> ·
|
|
24
|
+
<a href="CHANGELOG.md">Changelog</a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
## Install
|
|
2
28
|
|
|
3
|
-
# Unipi
|
|
4
|
-
|
|
5
|
-
23 workspace packages that turn Pi into a full development workstation. Structured workflows, persistent memory, parallel agents, web research, notifications, context management, command autocomplete, and a live status bar — all wired together through a shared event system.
|
|
6
|
-
|
|
7
|
-
One command installs everything:
|
|
8
29
|
```bash
|
|
9
30
|
pi install npm:@pi-unipi/unipi
|
|
10
31
|
```
|
|
11
32
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
**
|
|
38
|
-
|
|
39
|
-
**
|
|
40
|
-
|
|
41
|
-
**
|
|
42
|
-
|
|
43
|
-
**
|
|
33
|
+
UniPi needs [Pi](https://www.npmjs.com/package/@earendil-works/pi-coding-agent)
|
|
34
|
+
`0.87.1` or later. This command installs 21 extension packages. Each package
|
|
35
|
+
also works alone.
|
|
36
|
+
|
|
37
|
+
<p align="center">
|
|
38
|
+
<img src="docs/assets/screenshots/simple-memory-glance.png" alt="A UniPi session in simple mode with memory recall, memory save and the glance footer">
|
|
39
|
+
</p>
|
|
40
|
+
|
|
41
|
+
This screenshot shows one turn in a demo session:
|
|
42
|
+
|
|
43
|
+
- **Simple mode** (the default) shows each tool call as one line.
|
|
44
|
+
- **Memory** finds the test setup from an earlier session and saves a new fact
|
|
45
|
+
for later sessions.
|
|
46
|
+
- **The glance footer** frames the input box. It shows the git branch, the
|
|
47
|
+
mode, the context use and the model. The strip below it shows turns, steps,
|
|
48
|
+
wall time, tool time, time to first token, tokens per second and cache hits.
|
|
49
|
+
|
|
50
|
+
## Why UniPi
|
|
51
|
+
|
|
52
|
+
Pi is a small coding agent for the terminal. It reads files, edits files and
|
|
53
|
+
runs commands. UniPi adds the parts that a long session needs.
|
|
54
|
+
|
|
55
|
+
| UniPi gives you | How |
|
|
56
|
+
|---|---|
|
|
57
|
+
| **Memory between sessions** | Facts and decisions go to Markdown files and to a MemPalace index. |
|
|
58
|
+
| **Two models as one** | Fusion pairs a lead model with a sidekick model. |
|
|
59
|
+
| **Work that finishes** | `goal`, `ralph`, `swarm` and `graph` modes keep the agent on a long task. |
|
|
60
|
+
| **A warm prompt cache** | Changing state goes into new tail messages. The prefix stays the same. |
|
|
61
|
+
| **One driver for each turn** | A turn arbiter selects one continuation when the agent stops. |
|
|
62
|
+
| **Compaction with no model call** | The default `vcc` method rebuilds the summary from the full session history. |
|
|
63
|
+
| **Parallel hands** | Subagents and background tasks work while the lead continues. |
|
|
64
|
+
| **A board for deferred work** | Kanboard keeps tasks in Markdown files, with a web UI and a terminal UI. |
|
|
65
|
+
| **Hang detection** | Watchdog asks a small judge model about long tool calls. |
|
|
66
|
+
| **A short transcript** | Simple mode shows one line for each tool call. Ctrl+O expands it. |
|
|
67
|
+
|
|
68
|
+
## Proof
|
|
69
|
+
|
|
70
|
+
Each feature below exists because published results support it. The numbers
|
|
71
|
+
come from the linked sources. They are not UniPi benchmarks. The "why" column
|
|
72
|
+
is our opinion.
|
|
73
|
+
|
|
74
|
+
| Feature | Benchmark | Why we have it | Source |
|
|
75
|
+
|---|---|---|---|
|
|
76
|
+
| **Memory** | 96.6% recall@5 on LongMemEval, with raw semantic search and 0 API calls. | Chat assistants lose about 30% accuracy when facts span many sessions. We want the agent to find last week's decision without a model call. MemPalace does this on your machine. | [MemPalace](https://github.com/MemPalace/mempalace) · [LongMemEval](https://arxiv.org/abs/2410.10813) |
|
|
77
|
+
| **Fusion** | Frontier-level FrontierCode score at up to 60% lower cost. | Most turns in a coding session are routine edits and commands. We think a frontier model should plan and review, and a lower-cost model should do the typing. | [Devin Fusion](https://cognition.com/blog/devin-fusion) |
|
|
78
|
+
| **Fusion with two frontier models** | 69.0% on DRACO for two frontier models together. The best single model scored 65.3%. | Different models make different mistakes. A second strong model finds errors that one model misses. Use two frontier models when quality matters more than cost. | [OpenRouter Fusion](https://openrouter.ai/blog/announcements/fusion-beats-frontier/) · [Mixture-of-Agents](https://arxiv.org/abs/2406.04692) |
|
|
79
|
+
| **Goal** | HumanEval pass@1 went from 80% to 91% with a loop on test feedback. | An agent that grades its own work stops too early or claims success. Self-written checks can hide real failures. Our goal loop continues until a separate verifier agrees, inside turn and stall budgets. | [Reflexion](https://arxiv.org/abs/2303.11366) · [Self-authored verification](https://arxiv.org/abs/2607.24300) |
|
|
80
|
+
| **Ralph** | Six repositories overnight for $297 in API cost (a reported hackathon result). | Long tasks do not fit in one context window. A checklist file keeps the progress on disk. Each iteration works the next items and checks them off. A verifier reads the file before the loop ends. We think a simple loop is the right tool for checklist work. | [Ralph loop](https://ghuntley.com/ralph/) · [YC hackathon report](https://paddo.dev/blog/ralph-wiggum-autonomous-loops/) |
|
|
81
|
+
| **Swarm** | 90.2% higher than a single agent on Anthropic's research eval. | Independent items do not need to wait for each other. Each worker gets a clean context, and the lead reads only the summaries. A swarm uses more tokens, so we keep it for wide work. | [Anthropic multi-agent research](https://www.anthropic.com/engineering/multi-agent-research-system) |
|
|
82
|
+
| **Graph** | Up to 3.7× lower latency, 6.7× lower cost and about 9% higher accuracy than ReAct. | Many tasks have steps that need earlier results. A graph runs the independent steps at the same time. Each step gets only the inputs it needs. | [LLMCompiler (ICML 2024)](https://arxiv.org/abs/2312.04511) |
|
|
83
|
+
| **Prefix cache** | Up to 90% lower cost and 85% lower latency for long prompts. | Each agent turn sends the full conversation again. In our UniPi 2.4 logs, each cache miss sent about 62,700 tokens again at the full price. UniPi keeps the prefix byte-identical, so a turn pays full price only for the new tail. | [Anthropic prompt caching](https://claude.com/blog/prompt-caching) · [Modular handbook](https://handbook.modular.com/inference-optimization/prefix-caching/) · [our cache study](docs/deepseek-cache-rate-research.md) |
|
|
84
|
+
|
|
85
|
+
Long work matters more each year. METR measured that the length of software
|
|
86
|
+
tasks that agents can finish doubles about every 7 months
|
|
87
|
+
([METR](https://metr.org/blog/2025-03-19-measuring-ai-ability-to-complete-long-tasks/)).
|
|
88
|
+
UniPi gives these longer runs memory, budgets and a verifier.
|
|
89
|
+
|
|
90
|
+
Two notes on the sources. OpenRouter's Fusion uses a panel of models and a
|
|
91
|
+
judge. UniPi Fusion uses a lead and a sidekick. The Ralph numbers are a
|
|
92
|
+
reported result, not a controlled benchmark.
|
|
93
|
+
|
|
94
|
+
The [architecture pages](docs/architecture/README.md) show how each mechanism
|
|
95
|
+
works in UniPi, with the limits from the source.
|
|
96
|
+
|
|
97
|
+
## Kanboard
|
|
98
|
+
|
|
99
|
+
Kanboard is a task board for each project. You and the agent use the same
|
|
100
|
+
board. The agent claims a task, works it, and sends it to review with a
|
|
101
|
+
summary. You approve it or send it back with a note.
|
|
102
|
+
|
|
103
|
+
<p align="center">
|
|
104
|
+
<img src="docs/assets/screenshots/kanboard-dashboard.png" alt="Kanboard dashboard: tasks waiting on you, running agents, ready tasks and a 14-day throughput chart">
|
|
105
|
+
</p>
|
|
106
|
+
|
|
107
|
+
The dashboard shows what needs you across all projects. You can approve a
|
|
108
|
+
review or answer a blocked question in one click.
|
|
109
|
+
|
|
110
|
+
<p align="center">
|
|
111
|
+
<img src="docs/assets/screenshots/kanboard-board.png" alt="Kanboard board view with Backlog, Todo, In Progress, Blocked, In Review and Done lanes">
|
|
112
|
+
</p>
|
|
113
|
+
|
|
114
|
+
- Run `/unipi:kanboard open` to open the board in your browser.
|
|
115
|
+
- Run `/unipi:kanboard-add <title>` to add a task without an agent turn.
|
|
116
|
+
- Run `/unipi:kanboard-do <request>` to give the agent a budget of tasks and
|
|
117
|
+
board writes.
|
|
118
|
+
- Run `/unipi:kanboard-autowork start` to let the agent work every ready task.
|
|
119
|
+
|
|
120
|
+
The screenshots use demo data. Read the [Kanboard README](packages/kanboard/README.md).
|
|
121
|
+
|
|
122
|
+
## Harness architecture
|
|
123
|
+
|
|
124
|
+
UniPi adds these mechanisms to the Pi harness. Each page gives the problem, a
|
|
125
|
+
diagram, the limits from the source, and the files to read.
|
|
126
|
+
|
|
127
|
+
| Mechanism | Problem it solves |
|
|
128
|
+
|---|---|
|
|
129
|
+
| [Event bus](docs/architecture/event-bus.md) | 21 packages must work together without import-time coupling. |
|
|
130
|
+
| [Turn arbiter](docs/architecture/turn-arbiter.md) | Several packages want to continue the run when the agent stops. Only one may act. |
|
|
131
|
+
| [Prefix cache](docs/architecture/prefix-cache.md) | One changed byte in the request prefix makes the provider bill the full context again. |
|
|
132
|
+
| [Compaction](docs/architecture/compaction.md) | A summary must keep the live task, and it must not grow at each compaction. |
|
|
133
|
+
| [Long-horizon](docs/architecture/long-horizon.md) | Multi-turn work needs one driver, a separate judge and hard budgets. |
|
|
134
|
+
| [Delegation](docs/architecture/delegation.md) | Work goes to other models and processes. Each one needs a known context boundary. |
|
|
135
|
+
| [Harness messages](docs/architecture/harness-messages.md) | Text from the harness reaches the model as user text. The user must see where it came from. |
|
|
136
|
+
| [Watchdog](docs/architecture/watchdog.md) | A timer cannot tell a hung command from a slow build. |
|
|
137
|
+
|
|
138
|
+
```mermaid
|
|
139
|
+
flowchart LR
|
|
140
|
+
stop(["agent stops"]) --> arb{"turn arbiter<br/>1 nudge maximum"}
|
|
141
|
+
arb -- "priority 100" --> lh["long-horizon<br/>goal · ralph · swarm · graph"]
|
|
142
|
+
arb -- "priority 50" --> claims["kanboard<br/>claimed task"]
|
|
143
|
+
arb -- "priority 40" --> auto["kanboard<br/>autowork"]
|
|
144
|
+
lh --> tail["new tail message<br/>(prefix stays cached)"]
|
|
145
|
+
claims --> tail
|
|
146
|
+
auto --> tail
|
|
147
|
+
tail --> next(["next turn"])
|
|
148
|
+
```
|
|
44
149
|
|
|
45
|
-
|
|
150
|
+
## Packages
|
|
46
151
|
|
|
47
|
-
|
|
152
|
+
| Area | Packages |
|
|
153
|
+
|---|---|
|
|
154
|
+
| Finish long work | [Long-Horizon](packages/long-horizon/README.md) · [Workflow](packages/workflow/README.md) · [Kanboard](packages/kanboard/README.md) |
|
|
155
|
+
| Keep context | [Compactor](packages/compactor/README.md) · [Memory](packages/memory/README.md) |
|
|
156
|
+
| Work in parallel | [Fusion](packages/fusion/README.md) · [Subagents](packages/subagents/README.md) · [Background Tasks](packages/background-tasks/README.md) · [BTW](packages/btw/README.md) |
|
|
157
|
+
| Reach outside | [Web API](packages/web-api/README.md) · [MCP](packages/mcp/README.md) · [Notify](packages/notify/README.md) |
|
|
158
|
+
| Stay safe | [Watchdog](packages/watchdog/README.md) · [Skill Registry](packages/skill-registry/README.md) · [Ask User](packages/ask-user/README.md) |
|
|
159
|
+
| See and control | [Footer](packages/footer/README.md) · [Info Screen](packages/info-screen/README.md) · [Input Shortcuts](packages/input-shortcuts/README.md) · [Command Enchantment](packages/autocomplete/README.md) |
|
|
160
|
+
| Maintain | [Utility](packages/utility/README.md) · [Updater](packages/updater/README.md) · [Core](packages/core/README.md) |
|
|
48
161
|
|
|
49
|
-
|
|
162
|
+
The [docs index](docs/README.md#packages) gives one line and the npm name for
|
|
163
|
+
each package.
|
|
50
164
|
|
|
51
|
-
|
|
165
|
+
## Meet Unicrab
|
|
52
166
|
|
|
53
|
-
|
|
167
|
+
<img align="right" src="docs/assets/unicrab-pixel.png" width="120" alt="Unicrab pixel art">
|
|
54
168
|
|
|
55
|
-
|
|
169
|
+
Unicrab is the UniPi mascot. It started as the author's pet crab. Now it says
|
|
170
|
+
hello when Pi starts and leaves hints above the input box. Press `Alt+H` for the
|
|
171
|
+
next hint.
|
|
56
172
|
|
|
57
|
-
|
|
173
|
+
Read [The making of Unicrab](docs/story/unicrab.md): from a real crab, to pixel
|
|
174
|
+
art, to a terminal character that is 7 columns wide.
|
|
58
175
|
|
|
59
|
-
|
|
176
|
+
<p align="center">
|
|
177
|
+
<img src="docs/assets/screenshots/unicrab-start.png" alt="The UniPi start screen with Unicrab in half-block pixel art">
|
|
178
|
+
</p>
|
|
60
179
|
|
|
61
|
-
|
|
180
|
+
## Docs
|
|
62
181
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
└───────────────────────┬─────────────────────────────────┘
|
|
68
|
-
│
|
|
69
|
-
┌───────────────────┼───────────────────┐
|
|
70
|
-
│ │ │
|
|
71
|
-
▼ ▼ ▼
|
|
72
|
-
┌─────────┐ ┌──────────┐ ┌──────────┐
|
|
73
|
-
│ Workflow │ │ Compactor│ │ Memory │
|
|
74
|
-
│ Skills │ │ Engine │ │ Store │
|
|
75
|
-
└────┬─────┘ └────┬─────┘ └────┬─────┘
|
|
76
|
-
│ │ │
|
|
77
|
-
└──────────────────┼──────────────────┘
|
|
78
|
-
▼
|
|
79
|
-
┌──────────┐
|
|
80
|
-
│ Footer │ ← Subscribes to all events
|
|
81
|
-
└──────────┘
|
|
82
|
-
```
|
|
182
|
+
- [Getting started](docs/guide/getting-started.md)
|
|
183
|
+
- [Commands](docs/reference/commands.md) · [Agent tools](docs/reference/tools.md) · [Shortcuts](docs/reference/shortcuts.md) · [Settings](docs/reference/settings.md) · [Glossary](docs/reference/glossary.md)
|
|
184
|
+
- [Architecture](docs/architecture/README.md)
|
|
185
|
+
- [All docs](docs/README.md)
|
|
83
186
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
| Category | Prefix | Examples |
|
|
89
|
-
|----------|--------|----------|
|
|
90
|
-
| Workflow | `/unipi:` | plan (plan mode), permission (permission modes) |
|
|
91
|
-
| Kanboard | `/unipi:` | kanboard (board: capture, work runner, web UI) |
|
|
92
|
-
| Long-Horizon | `/unipi:goal`, `/unipi:ralph`, `/unipi:swarm`, `/unipi:graph` | <prompt>, start, stop, status, resume, clear |
|
|
93
|
-
| Memory | `/unipi:memory-` | process, search, consolidate, forget |
|
|
94
|
-
| Compactor | `/unipi:` | compact-vcc, compact-by-llm, session-recall, compact-stats, compact-doctor, compact-help |
|
|
95
|
-
| Notify | `/unipi:notify-` | settings, test, set-tg, set-ntfy |
|
|
96
|
-
| MCP | `/unipi:mcp-` | add, settings, sync, status |
|
|
97
|
-
| Web | `/unipi:web-` | settings, cache-clear |
|
|
98
|
-
| BTW | `/unipi:btw` | question |
|
|
99
|
-
| Utility | `/unipi:` | env, doctor, status, cleanup, badge-name |
|
|
100
|
-
| Kanboard | `/unipi:kanboard` | toggle, doctor |
|
|
101
|
-
| Footer | `/unipi:footer` | toggle, settings |
|
|
102
|
-
| Watchdog | `/unipi:settings` | jev judges long-running tools; kills or warns when stuck |
|
|
103
|
-
| Updater | `/unipi:` | readme, changelog |
|
|
104
|
-
| Info | `/unipi:info` | dashboard, settings |
|
|
105
|
-
|
|
106
|
-
## Agent Tools (Brief)
|
|
107
|
-
|
|
108
|
-
| Tool | Package | What It Does |
|
|
109
|
-
|------|---------|--------------|
|
|
110
|
-
| `create_goal` / `get_goal` / `update_goal` | long-horizon | Goal propose+verify lifecycle |
|
|
111
|
-
| `todowrite` | long-horizon | Visible session plan |
|
|
112
|
-
| `ralph_done` / `loop_status` | long-horizon | Loop iteration + progress |
|
|
113
|
-
| `swarm_report` / `swarm_status` / `swarm_yield` | long-horizon | Fan-out supervision |
|
|
114
|
-
| `update_agent_graph` / `graph_output` / `view_agent_graph` | long-horizon | Dependent work graph |
|
|
115
|
-
| `spawn_helper` / `get_helper_result` | subagents | Parallel agents |
|
|
116
|
-
| `memory_store` / `memory_search` / `memory_delete` | memory | Memory CRUD |
|
|
117
|
-
| `web_search` / `multi_web_content_read` / `web_llm_summarize` | web-api | Web research |
|
|
118
|
-
| `image_generate` / `image_edit` / `image_recognize` | utility | Image generation, editing and vision (recognize hides while the session model has vision) |
|
|
119
|
-
| `notify_user` | notify | Push notifications |
|
|
120
|
-
| `sidekick` / `read_subagent` | fusion | Delegate to the persistent sidekick and collect its report |
|
|
121
|
-
| `bg_run` / `bg_status` / `bg_logs` / `bg_kill` / `bg_delegate` / `bg_result` | background-tasks | Long-running commands and background delegate agents |
|
|
122
|
-
| `ask_user` | ask-user | User input |
|
|
123
|
-
| `session_recall` / `context_budget` | compactor | Context management |
|
|
187
|
+
The docs use STE-flavored English
|
|
188
|
+
([ASD-STE100](https://www.asd-ste100.org/)): short sentences, active voice and
|
|
189
|
+
one meaning for each word. The [style guide](docs/contributing/docs-style.md)
|
|
190
|
+
gives the rules.
|
|
124
191
|
|
|
125
192
|
## Development
|
|
126
193
|
|
|
@@ -129,65 +196,33 @@ git clone https://github.com/Neuron-Mr-White/unipi.git
|
|
|
129
196
|
cd unipi
|
|
130
197
|
npm install
|
|
131
198
|
npm run typecheck
|
|
199
|
+
npm test
|
|
132
200
|
```
|
|
133
201
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
```
|
|
137
|
-
unipi/
|
|
138
|
-
├── packages/
|
|
139
|
-
│ ├── core/ # Shared constants, events, utilities
|
|
140
|
-
│ ├── workflow/ # plan mode + permission modes
|
|
141
|
-
│ ├── skill-registry/ # per-project skill on/off + jev-judged exposure
|
|
142
|
-
│ ├── long-horizon/ # /goal /ralph /swarm /graph mode-gated execution
|
|
143
|
-
│ ├── memory/ # SQLite + vector search
|
|
144
|
-
│ ├── compactor/ # Context engine
|
|
145
|
-
│ ├── subagents/ # Parallel execution
|
|
146
|
-
│ ├── fusion/ # Lead + sidekick pairing
|
|
147
|
-
│ ├── background-tasks/ # Long-running tasks and delegates
|
|
148
|
-
│ ├── web-api/ # Web research
|
|
149
|
-
│ ├── image/ # Image generation and vision
|
|
150
|
-
│ ├── mcp/ # MCP server integration
|
|
151
|
-
│ ├── notify/ # Push notifications
|
|
152
|
-
│ ├── footer/ # Status bar
|
|
153
|
-
│ ├── btw/ # Side conversations
|
|
154
|
-
│ ├── ask-user/ # Structured input
|
|
155
|
-
│ ├── kanboard/ # Kanban visualization
|
|
156
|
-
│ ├── info-screen/ # Dashboard overlay
|
|
157
|
-
│ ├── utility/ # Diagnostics, diff rendering
|
|
158
|
-
│ ├── updater/ # Auto-update, browsers
|
|
159
|
-
│ ├── input-shortcuts/ # Keyboard shortcuts
|
|
160
|
-
│ ├── autocomplete/ # Enhanced command autocomplete
|
|
161
|
-
│ └── unipi/ # Umbrella package
|
|
162
|
-
├── docs/ # Project documentation (specs, plans, fixes, …)
|
|
163
|
-
├── .unipi/ # Runtime data (config, sessions, ralph)
|
|
164
|
-
└── CHANGELOG.md
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Adding a Package
|
|
168
|
-
|
|
169
|
-
1. Create `packages/your-package/` with `package.json` and `index.ts`
|
|
170
|
-
2. Depend on `@pi-unipi/core` for constants and events
|
|
171
|
-
3. Emit `MODULE_READY` on load
|
|
172
|
-
4. Add to umbrella package dependencies and imports
|
|
173
|
-
5. Run `npm run typecheck`
|
|
202
|
+
To add a package:
|
|
174
203
|
|
|
175
|
-
|
|
204
|
+
1. Create `packages/<name>/` with a `package.json` and an `index.ts`.
|
|
205
|
+
2. Import events and constants from `@pi-unipi/core`.
|
|
206
|
+
3. Emit `MODULE_READY` when the package loads.
|
|
207
|
+
4. Add the package to `packages/unipi/index.ts` and to the root
|
|
208
|
+
`package.json`.
|
|
209
|
+
5. Run `npm run typecheck` and `npm test`.
|
|
176
210
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
211
|
+
Packages talk over events and shared state holders. Import from
|
|
212
|
+
`@pi-unipi/core`, not from a peer package. The
|
|
213
|
+
[event bus page](docs/architecture/event-bus.md) explains the rules.
|
|
180
214
|
|
|
181
215
|
## Contributing
|
|
182
216
|
|
|
183
|
-
1. Fork the
|
|
184
|
-
2. Create a
|
|
185
|
-
3. Make your
|
|
186
|
-
4. Run `npm run typecheck` and `npm test
|
|
187
|
-
5.
|
|
217
|
+
1. Fork the repository.
|
|
218
|
+
2. Create a branch.
|
|
219
|
+
3. Make your change.
|
|
220
|
+
4. Run `npm run typecheck` and `npm test`.
|
|
221
|
+
5. Open a pull request.
|
|
188
222
|
|
|
189
|
-
Keep
|
|
223
|
+
Keep one job in each package. For docs, follow the
|
|
224
|
+
[style guide](docs/contributing/docs-style.md).
|
|
190
225
|
|
|
191
226
|
## License
|
|
192
227
|
|
|
193
|
-
MIT
|
|
228
|
+
MIT © Neuron Mr White
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/unipi",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.22",
|
|
4
4
|
"description": "All-in-one extension suite for Pi coding agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -82,26 +82,26 @@
|
|
|
82
82
|
"typebox": "^1.1.38"
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
85
|
-
"@pi-unipi/ask-user": "3.0.0-alpha.
|
|
86
|
-
"@pi-unipi/background-tasks": "3.0.0-alpha.
|
|
87
|
-
"@pi-unipi/btw": "3.0.0-alpha.
|
|
88
|
-
"@pi-unipi/command-enchantment": "3.0.0-alpha.
|
|
89
|
-
"@pi-unipi/compactor": "3.0.0-alpha.
|
|
90
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
91
|
-
"@pi-unipi/footer": "3.0.0-alpha.
|
|
92
|
-
"@pi-unipi/fusion": "3.0.0-alpha.
|
|
93
|
-
"@pi-unipi/info-screen": "3.0.0-alpha.
|
|
94
|
-
"@pi-unipi/input-shortcuts": "3.0.0-alpha.
|
|
95
|
-
"@pi-unipi/kanboard": "3.0.0-alpha.
|
|
96
|
-
"@pi-unipi/mcp": "3.0.0-alpha.
|
|
97
|
-
"@pi-unipi/memory": "3.0.0-alpha.
|
|
98
|
-
"@pi-unipi/notify": "3.0.0-alpha.
|
|
99
|
-
"@pi-unipi/skill-registry": "3.0.0-alpha.
|
|
100
|
-
"@pi-unipi/subagents": "3.0.0-alpha.
|
|
101
|
-
"@pi-unipi/updater": "3.0.0-alpha.
|
|
102
|
-
"@pi-unipi/utility": "3.0.0-alpha.
|
|
103
|
-
"@pi-unipi/web-api": "3.0.0-alpha.
|
|
104
|
-
"@pi-unipi/workflow": "3.0.0-alpha.
|
|
85
|
+
"@pi-unipi/ask-user": "3.0.0-alpha.22",
|
|
86
|
+
"@pi-unipi/background-tasks": "3.0.0-alpha.22",
|
|
87
|
+
"@pi-unipi/btw": "3.0.0-alpha.22",
|
|
88
|
+
"@pi-unipi/command-enchantment": "3.0.0-alpha.22",
|
|
89
|
+
"@pi-unipi/compactor": "3.0.0-alpha.22",
|
|
90
|
+
"@pi-unipi/core": "3.0.0-alpha.22",
|
|
91
|
+
"@pi-unipi/footer": "3.0.0-alpha.22",
|
|
92
|
+
"@pi-unipi/fusion": "3.0.0-alpha.22",
|
|
93
|
+
"@pi-unipi/info-screen": "3.0.0-alpha.22",
|
|
94
|
+
"@pi-unipi/input-shortcuts": "3.0.0-alpha.22",
|
|
95
|
+
"@pi-unipi/kanboard": "3.0.0-alpha.22",
|
|
96
|
+
"@pi-unipi/mcp": "3.0.0-alpha.22",
|
|
97
|
+
"@pi-unipi/memory": "3.0.0-alpha.22",
|
|
98
|
+
"@pi-unipi/notify": "3.0.0-alpha.22",
|
|
99
|
+
"@pi-unipi/skill-registry": "3.0.0-alpha.22",
|
|
100
|
+
"@pi-unipi/subagents": "3.0.0-alpha.22",
|
|
101
|
+
"@pi-unipi/updater": "3.0.0-alpha.22",
|
|
102
|
+
"@pi-unipi/utility": "3.0.0-alpha.22",
|
|
103
|
+
"@pi-unipi/web-api": "3.0.0-alpha.22",
|
|
104
|
+
"@pi-unipi/workflow": "3.0.0-alpha.22"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
107
|
"@earendil-works/pi-agent-core": "^0.87.1",
|