@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.
Files changed (59) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +193 -158
  3. package/package.json +21 -21
  4. package/packages/ask-user/README.md +82 -39
  5. package/packages/ask-user/index.ts +17 -2
  6. package/packages/ask-user/package.json +2 -2
  7. package/packages/ask-user/tools.ts +40 -6
  8. package/packages/autocomplete/README.md +46 -21
  9. package/packages/autocomplete/package.json +1 -1
  10. package/packages/background-tasks/README.md +69 -67
  11. package/packages/background-tasks/package.json +2 -2
  12. package/packages/btw/README.md +59 -13
  13. package/packages/btw/package.json +2 -2
  14. package/packages/compactor/README.md +78 -61
  15. package/packages/compactor/package.json +3 -3
  16. package/packages/core/README.md +98 -94
  17. package/packages/core/package.json +1 -1
  18. package/packages/footer/README.md +73 -116
  19. package/packages/footer/package.json +3 -3
  20. package/packages/fusion/README.md +83 -150
  21. package/packages/fusion/package.json +4 -4
  22. package/packages/info-screen/README.md +81 -69
  23. package/packages/info-screen/package.json +2 -2
  24. package/packages/input-shortcuts/README.md +47 -47
  25. package/packages/input-shortcuts/package.json +2 -2
  26. package/packages/kanboard/README.md +98 -182
  27. package/packages/kanboard/package.json +7 -7
  28. package/packages/long-horizon/README.md +98 -16
  29. package/packages/long-horizon/package.json +2 -2
  30. package/packages/long-horizon/src/gate.ts +9 -0
  31. package/packages/mcp/README.md +74 -62
  32. package/packages/mcp/package.json +2 -2
  33. package/packages/memory/README.md +93 -118
  34. package/packages/memory/package.json +3 -3
  35. package/packages/notify/README.md +85 -120
  36. package/packages/notify/package.json +2 -2
  37. package/packages/skill-registry/README.md +78 -44
  38. package/packages/skill-registry/package.json +2 -2
  39. package/packages/subagents/README.md +77 -31
  40. package/packages/subagents/package.json +3 -3
  41. package/packages/unipi/bundled.js +1210 -1099
  42. package/packages/updater/README.md +53 -55
  43. package/packages/updater/package.json +2 -2
  44. package/packages/utility/README.md +87 -78
  45. package/packages/utility/package.json +2 -2
  46. package/packages/utility/src/index.ts +12 -4
  47. package/packages/utility/src/render/delegated.ts +3 -0
  48. package/packages/utility/src/render/harness.ts +11 -2
  49. package/packages/utility/src/render/images.ts +51 -0
  50. package/packages/utility/src/render/reply-bg.ts +30 -2
  51. package/packages/utility/src/render/simple.ts +3 -0
  52. package/packages/utility/src/render/spacing.ts +13 -1
  53. package/packages/utility/src/settings.ts +2 -2
  54. package/packages/watchdog/README.md +66 -41
  55. package/packages/watchdog/package.json +3 -3
  56. package/packages/web-api/README.md +78 -126
  57. package/packages/web-api/package.json +2 -2
  58. package/packages/workflow/README.md +80 -103
  59. 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"><img src="docs/assets/unipi-logo.png" width="200" alt="UniPi"></p>
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
- ## Requirements
13
-
14
- - **Pi (`@earendil-works/pi-coding-agent`) `^0.87.1`** — Unipi 3.0.0-alpha tracks the Pi 0.87 SDK (extension boundary events, `SessionManager`-canonical context, `TranscriptContext` custom-provider inputs, native prompt-cache warming). Older Pi releases still load most extensions, but npm will flag the peer dependency mismatch; pin `@pi-unipi/*@<3.0.0` if you must stay on an older Pi.
15
-
16
- ## What You Get
17
-
18
- **[Workflow](./packages/workflow/README.md)** — **plan mode** (`/unipi:plan`, `Alt+P`) and **permission modes** (`ask` · `auto` · `full`). Plan mode makes a session read-only except for its plan file; auto mode lets jev judge ambiguous bash before it runs.
19
-
20
- **[Long-Horizon](./packages/long-horizon/)** — Mode-gated long-horizon execution: `/goal` (one objective until verifiably true, propose+verify), `/ralph` (task-file iteration loops), `/swarm` (independent fan-out + synthesis), `/graph` (dependent multi-step work). A TypeSafe jev prompt judge routes each turn; one automation owner per session with park/resume; runaway-guard steering; token/turn/stall budgets.
21
-
22
- **[Memory](./packages/memory/README.md)** — Markdown files + [MemPalace](https://github.com/mempalace/mempalace) semantic search share a memory palace across pi, Devin, and zcode. Facts, preferences, and decisions persist across sessions; v2 data converts via `/unipi:memory migrate`.
23
-
24
- **[Compactor](./packages/compactor/README.md)** — Compaction that keeps work going. Lossless zero-LLM summaries (or Pi's model summary), rebuilt from the full session history, led by the live goal/ralph/kanboard state; the full history stays searchable with session recall.
25
-
26
- **[Prefix-cache architecture](./docs/prefix-cache-architecture.md)** — Append-only request discipline, explicit cache epochs, deterministic tools, privacy-safe diagnostics, provider limitations, and bounded cold-epoch output.
27
-
28
- **[Subagents](./packages/subagents/README.md)** — Parallel execution with file locking. Spawn background agents to research, fix, or build while the main agent keeps going.
29
-
30
- **[Fusion](./packages/fusion/README.md)** — Run two models as one: a frontier lead delegates to a cheaper persistent sidekick that keeps its own context and shells, and stays in the loop while the sidekick works. Pair them from `/unipi:model`; `/unipi:fusion-stats` shows what the sidekick saved you.
31
-
32
- **[Background Tasks](./packages/background-tasks/README.md)** — Long-running commands and delegate agents that survive the turn that started them, with a live dock, output capture, and a wake line while the agent waits on them.
33
-
34
- **[Web API](./packages/web-api/README.md)** — Web search, page reading, content summarization. Defaults to [wigolo](https://github.com/KnockOutEZ/wigolo), a local-first engine with multi-engine search and on-device reranking — $0/query, no API key. Plus a smart-fetch engine with browser-grade TLS fingerprinting. Paid providers as fallbacks, and auto-selection falls through when a provider is unavailable.
35
-
36
-
37
- **[MCP](./packages/mcp/README.md)** — Browse 7,800+ MCP servers, add them interactively. Tools from servers register automatically as Pi tools.
38
-
39
- **[Notify](./packages/notify/README.md)** — Push notifications to native OS, Gotify, Telegram, or ntfy. Per-event platform routing plus native focus suppression so alerts can stay quiet while Pi is already focused.
40
-
41
- **[Footer](./packages/footer/README.md)** — Persistent status bar showing live stats from every package. Now with the Glance footer: a framed input box with an animated rainbow brand, git branch title, and a live session strip (turns, wall/tool time, TTFT, tok/s, cache hit). Responsive layout, presets, per-segment toggling.
42
-
43
- **[BTW](./packages/btw/README.md)** — Inline side questions (`/unipi:btw`) answered by a fresh read-only session seeded from the current context — the main agent never sees them.
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
- **[Ask User](./packages/ask-user/README.md)** — Structured input for decision gates. Single-select, multi-select, freeform. The agent asks instead of guessing.
150
+ ## Packages
46
151
 
47
- **[Kanboard](./packages/kanboard/README.md)** — Web UI and TUI overlay for kanban boards. Parses all workflow documents into cards with progress indicators.
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
- **[Info Screen](./packages/info-screen/README.md)** — Dashboard overlay showing module status, tools, and custom data groups.
162
+ The [docs index](docs/README.md#packages) gives one line and the npm name for
163
+ each package.
50
164
 
51
- **[Utility](./packages/utility/README.md)** — Environment info, diagnostics, cleanup, name badge, and Shiki-powered diff rendering.
165
+ ## Meet Unicrab
52
166
 
53
- **[Updater](./packages/updater/README.md)** — Checks npm for new versions on session start. Changelog browser and readme browser in TUI overlays.
167
+ <img align="right" src="docs/assets/unicrab-pixel.png" width="120" alt="Unicrab pixel art">
54
168
 
55
- **[Input Shortcuts](./packages/input-shortcuts/README.md)** — Keyboard shortcuts via vim-style chord overlay. Stash/restore, undo/redo, clipboard, thinking toggle.
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
- **[Command Enchantment](./packages/autocomplete/README.md)** — Enhanced `/unipi:*` autocomplete with full command names, package tags, descriptions, colors, and registry audits that catch stale command docs before release.
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
- ## Architecture
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
- Packages discover each other through events, not direct imports. Core defines the event types and constants. Every package emits `MODULE_READY` on load and subscribes to events it cares about.
180
+ ## Docs
62
181
 
63
- ```
64
- ┌─────────────────────────────────────────────────────────┐
65
- │ Core │
66
- │ Events, Constants, Utilities │
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
- Coexists triggers enhance behavior when packages are installed together. Workflow skills detect subagents and inject parallel strategies. All skills get MCP tools when MCP is installed. Web-api adds web research to investigation skills. Each package works standalone.
85
-
86
- ## Commands (Brief)
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
- ### Project Structure
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
- ### Running Tests
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
- ```bash
178
- npm test
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 repo
184
- 2. Create a feature branch
185
- 3. Make your changes
186
- 4. Run `npm run typecheck` and `npm test`
187
- 5. Submit a pull request
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 packages focused. One package, one responsibility. Use events for cross-package communication — no direct imports between packages.
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.21",
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.21",
86
- "@pi-unipi/background-tasks": "3.0.0-alpha.21",
87
- "@pi-unipi/btw": "3.0.0-alpha.21",
88
- "@pi-unipi/command-enchantment": "3.0.0-alpha.21",
89
- "@pi-unipi/compactor": "3.0.0-alpha.21",
90
- "@pi-unipi/core": "3.0.0-alpha.21",
91
- "@pi-unipi/footer": "3.0.0-alpha.21",
92
- "@pi-unipi/fusion": "3.0.0-alpha.21",
93
- "@pi-unipi/info-screen": "3.0.0-alpha.21",
94
- "@pi-unipi/input-shortcuts": "3.0.0-alpha.21",
95
- "@pi-unipi/kanboard": "3.0.0-alpha.21",
96
- "@pi-unipi/mcp": "3.0.0-alpha.21",
97
- "@pi-unipi/memory": "3.0.0-alpha.21",
98
- "@pi-unipi/notify": "3.0.0-alpha.21",
99
- "@pi-unipi/skill-registry": "3.0.0-alpha.21",
100
- "@pi-unipi/subagents": "3.0.0-alpha.21",
101
- "@pi-unipi/updater": "3.0.0-alpha.21",
102
- "@pi-unipi/utility": "3.0.0-alpha.21",
103
- "@pi-unipi/web-api": "3.0.0-alpha.21",
104
- "@pi-unipi/workflow": "3.0.0-alpha.21"
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",