@pi-unipi/unipi 3.0.0-alpha.21 → 3.0.0-alpha.23
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 +34 -0
- package/README.md +192 -158
- package/package.json +22 -22
- package/packages/ask-user/README.md +82 -39
- package/packages/ask-user/config.ts +12 -12
- 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/autocomplete/src/settings.ts +1 -1
- package/packages/background-tasks/README.md +69 -67
- package/packages/background-tasks/package.json +2 -2
- package/packages/background-tasks/src/config.ts +5 -18
- 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/compactor/src/compaction/hooks.ts +3 -3
- package/packages/compactor/src/config/manager.ts +85 -30
- package/packages/compactor/src/config/schema.ts +20 -5
- package/packages/compactor/src/types.ts +2 -6
- package/packages/core/README.md +98 -94
- package/packages/core/package.json +1 -1
- package/packages/core/src/hints/index.ts +3 -3
- package/packages/core/src/jev/settings.ts +11 -10
- package/packages/core/src/settings/hub.ts +133 -1
- package/packages/core/src/settings/schema.ts +24 -5
- package/packages/core/src/tui/hub-kit.ts +10 -1
- package/packages/footer/README.md +73 -116
- package/packages/footer/package.json +3 -3
- package/packages/footer/src/config.ts +39 -19
- package/packages/fusion/README.md +83 -150
- package/packages/fusion/package.json +4 -4
- package/packages/fusion/src/preset.ts +5 -5
- package/packages/info-screen/README.md +81 -69
- package/packages/info-screen/config.ts +11 -6
- 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/input-shortcuts/src/settings.ts +4 -0
- package/packages/kanboard/README.md +98 -182
- package/packages/kanboard/package.json +7 -7
- package/packages/kanboard/src/settings.ts +36 -30
- 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/long-horizon/src/settings.ts +16 -10
- package/packages/mcp/README.md +74 -62
- package/packages/mcp/package.json +2 -2
- package/packages/mcp/src/index.ts +1 -42
- package/packages/mcp/src/settings.ts +52 -0
- package/packages/memory/README.md +93 -118
- package/packages/memory/index.ts +2 -1
- package/packages/memory/package.json +3 -3
- package/packages/memory/settings.ts +103 -26
- package/packages/notify/README.md +85 -120
- package/packages/notify/package.json +2 -2
- package/packages/notify/settings.ts +58 -26
- package/packages/skill-registry/README.md +78 -44
- package/packages/skill-registry/package.json +2 -2
- package/packages/skill-registry/src/settings.ts +9 -9
- package/packages/subagents/README.md +77 -31
- package/packages/subagents/package.json +3 -3
- package/packages/subagents/src/index.ts +2 -1
- package/packages/unipi/bundled.js +1384 -943
- package/packages/updater/README.md +53 -55
- package/packages/updater/package.json +2 -2
- package/packages/updater/src/settings.ts +8 -2
- package/packages/utility/README.md +87 -78
- package/packages/utility/package.json +2 -2
- package/packages/utility/src/image/settings.ts +74 -22
- 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 +18 -18
- package/packages/watchdog/README.md +66 -41
- package/packages/watchdog/package.json +3 -3
- package/packages/watchdog/src/config.ts +14 -13
- package/packages/web-api/README.md +78 -126
- package/packages/web-api/package.json +2 -2
- package/packages/web-api/src/index.ts +17 -1
- package/packages/web-api/src/settings.ts +27 -14
- package/packages/web-api/src/tools.ts +50 -40
- package/packages/workflow/README.md +80 -103
- package/packages/workflow/package.json +2 -2
- package/packages/workflow/src/permission/decide.ts +2 -3
- package/packages/workflow/src/permission/index.ts +0 -1
- package/packages/workflow/src/permission/settings.ts +10 -19
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,40 @@ 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.23] — 2026-10-04
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `core`: the `/unipi:settings` hub explains the selected setting in a fixed 4-row info panel — wrapped description, the highlighted (or stored) enum option's meaning, and a meta line (`default … · range … · scope`). Enum and multiselect options carry their own descriptions, shown while the option list is open; number fields take `unit` (`6000 ms`, `80%`); option descriptions join the search haystack. (UNI-50)
|
|
13
|
+
- guard test (`tests/settings-metadata.test.ts`): every settings field and option must be described (labels ≤ 24 chars, sentences end with a period, units live in `unit`, option fragments don't) across all 23 namespaces.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- `web-api`: web tools that cannot work are no longer exposed to the agent — `web_search`/`web_llm_summarize` drop out of the active tools when no enabled provider can serve them (re-checked every prompt), `multi_web_content_read` always stays (smart-fetch is local). The phantom `llm-summarize` provider is gone and `web_llm_summarize` lost its useless `source` parameter. Tool failures now throw instead of returning ignored `isError` results. (UNI-72)
|
|
17
|
+
- settings: shorter labels (explanations moved into descriptions), and pruned knobs —
|
|
18
|
+
- `background-tasks`: removed `defaultTimeoutSeconds` (nothing read it).
|
|
19
|
+
- `compactor`: the nine `sections.*` booleans became one **Summary sections** multiselect (stored booleans still work); `cooldownMs`/`repeatMinGrowthTokens` fixed at their defaults; `debug` moved to `UNIPI_COMPACTOR_DEBUG=1`.
|
|
20
|
+
- `memory`: `recallAtStart` + `wakeUp` merged into one **Recall at start** enum (`off`/`reminder`/`wake-up`); stored booleans migrate per scope.
|
|
21
|
+
- `permission`: removed `jevJudge` — auto mode always consults jev.
|
|
22
|
+
- `footer`: classic-only options (`preset`, `separator`, `zoneSeparator`, `full labels`, `color mode`) moved under an advanced **Classic footer** section; preset list now offers the real presets (`compact`, `full`, `ascii` instead of the dead `dense`/`devops`/`zen`).
|
|
23
|
+
- `image`: custom endpoint fields moved into per-tool **Custom endpoint…** pages (summary shows `off` or the host).
|
|
24
|
+
- `web-api`: Smart fetch section is advanced; `os`/`batchConcurrency` removed from the schema (engine defaults remain).
|
|
25
|
+
- `kanboard`: reorganized into Agent / Housekeeping / **Board server** (advanced, plus open/stop/rotate-token actions); dead `blocking` setting deleted.
|
|
26
|
+
|
|
27
|
+
### Docs
|
|
28
|
+
- README: dropped the "Why we have it" column from the Proof table.
|
|
29
|
+
|
|
30
|
+
## [3.0.0-alpha.22] — 2026-10-03
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- `utility`: harness annotations (e.g. the Fusion "delegate shell work" nudge) render once in simple mode instead of three rows.
|
|
34
|
+
- `utility`: simple mode hides tool-result images until Ctrl+O; images no longer overlap the text below them in any render style. (UNI-71)
|
|
35
|
+
- `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)
|
|
36
|
+
- `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`.
|
|
37
|
+
- `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)
|
|
38
|
+
- `long-horizon`: `/unipi:regular` and goal stop update the footer mode immediately. (UNI-66)
|
|
39
|
+
|
|
40
|
+
### Docs
|
|
41
|
+
- v3 docs rewritten in plain controlled English (README, package READMEs, guide, reference, architecture, Unicrab story), with screenshots.
|
|
42
|
+
|
|
9
43
|
## [3.0.0-alpha.21] — 2026-10-03
|
|
10
44
|
|
|
11
45
|
### Added
|
package/README.md
CHANGED
|
@@ -1,126 +1,192 @@
|
|
|
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.
|
|
72
|
+
|
|
73
|
+
| Feature | Benchmark | Source |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| **Memory** | 96.6% recall@5 on LongMemEval, with raw semantic search and 0 API calls. | [MemPalace](https://github.com/MemPalace/mempalace) · [LongMemEval](https://arxiv.org/abs/2410.10813) |
|
|
76
|
+
| **Fusion** | Frontier-level FrontierCode score at up to 60% lower cost. | [Devin Fusion](https://cognition.com/blog/devin-fusion) |
|
|
77
|
+
| **Fusion with two frontier models** | 69.0% on DRACO for two frontier models together. The best single model scored 65.3%. | [OpenRouter Fusion](https://openrouter.ai/blog/announcements/fusion-beats-frontier/) · [Mixture-of-Agents](https://arxiv.org/abs/2406.04692) |
|
|
78
|
+
| **Goal** | HumanEval pass@1 went from 80% to 91% with a loop on test feedback. | [Reflexion](https://arxiv.org/abs/2303.11366) · [Self-authored verification](https://arxiv.org/abs/2607.24300) |
|
|
79
|
+
| **Ralph** | Six repositories overnight for $297 in API cost (a reported hackathon result). | [Ralph loop](https://ghuntley.com/ralph/) · [YC hackathon report](https://paddo.dev/blog/ralph-wiggum-autonomous-loops/) |
|
|
80
|
+
| **Swarm** | 90.2% higher than a single agent on Anthropic's research eval. | [Anthropic multi-agent research](https://www.anthropic.com/engineering/multi-agent-research-system) |
|
|
81
|
+
| **Graph** | Up to 3.7× lower latency, 6.7× lower cost and about 9% higher accuracy than ReAct. | [LLMCompiler (ICML 2024)](https://arxiv.org/abs/2312.04511) |
|
|
82
|
+
| **Prefix cache** | Up to 90% lower cost and 85% lower latency for long prompts. | [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) |
|
|
83
|
+
|
|
84
|
+
Long work matters more each year. METR measured that the length of software
|
|
85
|
+
tasks that agents can finish doubles about every 7 months
|
|
86
|
+
([METR](https://metr.org/blog/2025-03-19-measuring-ai-ability-to-complete-long-tasks/)).
|
|
87
|
+
UniPi gives these longer runs memory, budgets and a verifier.
|
|
88
|
+
|
|
89
|
+
Two notes on the sources. OpenRouter's Fusion uses a panel of models and a
|
|
90
|
+
judge. UniPi Fusion uses a lead and a sidekick. The Ralph numbers are a
|
|
91
|
+
reported result, not a controlled benchmark.
|
|
92
|
+
|
|
93
|
+
The [architecture pages](docs/architecture/README.md) show how each mechanism
|
|
94
|
+
works in UniPi, with the limits from the source.
|
|
95
|
+
|
|
96
|
+
## Kanboard
|
|
97
|
+
|
|
98
|
+
Kanboard is a task board for each project. You and the agent use the same
|
|
99
|
+
board. The agent claims a task, works it, and sends it to review with a
|
|
100
|
+
summary. You approve it or send it back with a note.
|
|
101
|
+
|
|
102
|
+
<p align="center">
|
|
103
|
+
<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">
|
|
104
|
+
</p>
|
|
105
|
+
|
|
106
|
+
The dashboard shows what needs you across all projects. You can approve a
|
|
107
|
+
review or answer a blocked question in one click.
|
|
108
|
+
|
|
109
|
+
<p align="center">
|
|
110
|
+
<img src="docs/assets/screenshots/kanboard-board.png" alt="Kanboard board view with Backlog, Todo, In Progress, Blocked, In Review and Done lanes">
|
|
111
|
+
</p>
|
|
112
|
+
|
|
113
|
+
- Run `/unipi:kanboard open` to open the board in your browser.
|
|
114
|
+
- Run `/unipi:kanboard-add <title>` to add a task without an agent turn.
|
|
115
|
+
- Run `/unipi:kanboard-do <request>` to give the agent a budget of tasks and
|
|
116
|
+
board writes.
|
|
117
|
+
- Run `/unipi:kanboard-autowork start` to let the agent work every ready task.
|
|
118
|
+
|
|
119
|
+
The screenshots use demo data. Read the [Kanboard README](packages/kanboard/README.md).
|
|
120
|
+
|
|
121
|
+
## Harness architecture
|
|
122
|
+
|
|
123
|
+
UniPi adds these mechanisms to the Pi harness. Each page gives the problem, a
|
|
124
|
+
diagram, the limits from the source, and the files to read.
|
|
125
|
+
|
|
126
|
+
| Mechanism | Problem it solves |
|
|
127
|
+
|---|---|
|
|
128
|
+
| [Event bus](docs/architecture/event-bus.md) | 21 packages must work together without import-time coupling. |
|
|
129
|
+
| [Turn arbiter](docs/architecture/turn-arbiter.md) | Several packages want to continue the run when the agent stops. Only one may act. |
|
|
130
|
+
| [Prefix cache](docs/architecture/prefix-cache.md) | One changed byte in the request prefix makes the provider bill the full context again. |
|
|
131
|
+
| [Compaction](docs/architecture/compaction.md) | A summary must keep the live task, and it must not grow at each compaction. |
|
|
132
|
+
| [Long-horizon](docs/architecture/long-horizon.md) | Multi-turn work needs one driver, a separate judge and hard budgets. |
|
|
133
|
+
| [Delegation](docs/architecture/delegation.md) | Work goes to other models and processes. Each one needs a known context boundary. |
|
|
134
|
+
| [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. |
|
|
135
|
+
| [Watchdog](docs/architecture/watchdog.md) | A timer cannot tell a hung command from a slow build. |
|
|
136
|
+
|
|
137
|
+
```mermaid
|
|
138
|
+
flowchart LR
|
|
139
|
+
stop(["agent stops"]) --> arb{"turn arbiter<br/>1 nudge maximum"}
|
|
140
|
+
arb -- "priority 100" --> lh["long-horizon<br/>goal · ralph · swarm · graph"]
|
|
141
|
+
arb -- "priority 50" --> claims["kanboard<br/>claimed task"]
|
|
142
|
+
arb -- "priority 40" --> auto["kanboard<br/>autowork"]
|
|
143
|
+
lh --> tail["new tail message<br/>(prefix stays cached)"]
|
|
144
|
+
claims --> tail
|
|
145
|
+
auto --> tail
|
|
146
|
+
tail --> next(["next turn"])
|
|
147
|
+
```
|
|
44
148
|
|
|
45
|
-
|
|
149
|
+
## Packages
|
|
46
150
|
|
|
47
|
-
|
|
151
|
+
| Area | Packages |
|
|
152
|
+
|---|---|
|
|
153
|
+
| Finish long work | [Long-Horizon](packages/long-horizon/README.md) · [Workflow](packages/workflow/README.md) · [Kanboard](packages/kanboard/README.md) |
|
|
154
|
+
| Keep context | [Compactor](packages/compactor/README.md) · [Memory](packages/memory/README.md) |
|
|
155
|
+
| 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) |
|
|
156
|
+
| Reach outside | [Web API](packages/web-api/README.md) · [MCP](packages/mcp/README.md) · [Notify](packages/notify/README.md) |
|
|
157
|
+
| Stay safe | [Watchdog](packages/watchdog/README.md) · [Skill Registry](packages/skill-registry/README.md) · [Ask User](packages/ask-user/README.md) |
|
|
158
|
+
| 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) |
|
|
159
|
+
| Maintain | [Utility](packages/utility/README.md) · [Updater](packages/updater/README.md) · [Core](packages/core/README.md) |
|
|
48
160
|
|
|
49
|
-
|
|
161
|
+
The [docs index](docs/README.md#packages) gives one line and the npm name for
|
|
162
|
+
each package.
|
|
50
163
|
|
|
51
|
-
|
|
164
|
+
## Meet Unicrab
|
|
52
165
|
|
|
53
|
-
|
|
166
|
+
<img align="right" src="docs/assets/unicrab-pixel.png" width="120" alt="Unicrab pixel art">
|
|
54
167
|
|
|
55
|
-
|
|
168
|
+
Unicrab is the UniPi mascot. It started as the author's pet crab. Now it says
|
|
169
|
+
hello when Pi starts and leaves hints above the input box. Press `Alt+H` for the
|
|
170
|
+
next hint.
|
|
56
171
|
|
|
57
|
-
|
|
172
|
+
Read [The making of Unicrab](docs/story/unicrab.md): from a real crab, to pixel
|
|
173
|
+
art, to a terminal character that is 7 columns wide.
|
|
58
174
|
|
|
59
|
-
|
|
175
|
+
<p align="center">
|
|
176
|
+
<img src="docs/assets/screenshots/unicrab-start.png" alt="The UniPi start screen with Unicrab in half-block pixel art">
|
|
177
|
+
</p>
|
|
60
178
|
|
|
61
|
-
|
|
179
|
+
## Docs
|
|
62
180
|
|
|
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
|
-
```
|
|
181
|
+
- [Getting started](docs/guide/getting-started.md)
|
|
182
|
+
- [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)
|
|
183
|
+
- [Architecture](docs/architecture/README.md)
|
|
184
|
+
- [All docs](docs/README.md)
|
|
83
185
|
|
|
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 |
|
|
186
|
+
The docs use STE-flavored English
|
|
187
|
+
([ASD-STE100](https://www.asd-ste100.org/)): short sentences, active voice and
|
|
188
|
+
one meaning for each word. The [style guide](docs/contributing/docs-style.md)
|
|
189
|
+
gives the rules.
|
|
124
190
|
|
|
125
191
|
## Development
|
|
126
192
|
|
|
@@ -129,65 +195,33 @@ git clone https://github.com/Neuron-Mr-White/unipi.git
|
|
|
129
195
|
cd unipi
|
|
130
196
|
npm install
|
|
131
197
|
npm run typecheck
|
|
198
|
+
npm test
|
|
132
199
|
```
|
|
133
200
|
|
|
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`
|
|
201
|
+
To add a package:
|
|
174
202
|
|
|
175
|
-
|
|
203
|
+
1. Create `packages/<name>/` with a `package.json` and an `index.ts`.
|
|
204
|
+
2. Import events and constants from `@pi-unipi/core`.
|
|
205
|
+
3. Emit `MODULE_READY` when the package loads.
|
|
206
|
+
4. Add the package to `packages/unipi/index.ts` and to the root
|
|
207
|
+
`package.json`.
|
|
208
|
+
5. Run `npm run typecheck` and `npm test`.
|
|
176
209
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
210
|
+
Packages talk over events and shared state holders. Import from
|
|
211
|
+
`@pi-unipi/core`, not from a peer package. The
|
|
212
|
+
[event bus page](docs/architecture/event-bus.md) explains the rules.
|
|
180
213
|
|
|
181
214
|
## Contributing
|
|
182
215
|
|
|
183
|
-
1. Fork the
|
|
184
|
-
2. Create a
|
|
185
|
-
3. Make your
|
|
186
|
-
4. Run `npm run typecheck` and `npm test
|
|
187
|
-
5.
|
|
216
|
+
1. Fork the repository.
|
|
217
|
+
2. Create a branch.
|
|
218
|
+
3. Make your change.
|
|
219
|
+
4. Run `npm run typecheck` and `npm test`.
|
|
220
|
+
5. Open a pull request.
|
|
188
221
|
|
|
189
|
-
Keep
|
|
222
|
+
Keep one job in each package. For docs, follow the
|
|
223
|
+
[style guide](docs/contributing/docs-style.md).
|
|
190
224
|
|
|
191
225
|
## License
|
|
192
226
|
|
|
193
|
-
MIT
|
|
227
|
+
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.23",
|
|
4
4
|
"description": "All-in-one extension suite for Pi coding agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"prepare": "node scripts/build-bundle.mjs --if-missing",
|
|
28
28
|
"prepublishOnly": "npm run build",
|
|
29
29
|
"publish:all": "npm publish --workspaces --access public",
|
|
30
|
-
"test": "npx tsx --test tests/*.test.js packages/memory/tests/*.test.ts && npm test --workspaces --if-present",
|
|
30
|
+
"test": "npx tsx --test tests/*.test.js tests/*.test.ts packages/memory/tests/*.test.ts && npm test --workspaces --if-present",
|
|
31
31
|
"typecheck": "npx tsc --noEmit --skipLibCheck",
|
|
32
32
|
"tui:gallery": "npx tsx scripts/tui-gallery/index.ts",
|
|
33
33
|
"publish:kanboard": "node scripts/publish-kanboard-platforms.mjs"
|
|
@@ -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.23",
|
|
86
|
+
"@pi-unipi/background-tasks": "3.0.0-alpha.23",
|
|
87
|
+
"@pi-unipi/btw": "3.0.0-alpha.23",
|
|
88
|
+
"@pi-unipi/command-enchantment": "3.0.0-alpha.23",
|
|
89
|
+
"@pi-unipi/compactor": "3.0.0-alpha.23",
|
|
90
|
+
"@pi-unipi/core": "3.0.0-alpha.23",
|
|
91
|
+
"@pi-unipi/footer": "3.0.0-alpha.23",
|
|
92
|
+
"@pi-unipi/fusion": "3.0.0-alpha.23",
|
|
93
|
+
"@pi-unipi/info-screen": "3.0.0-alpha.23",
|
|
94
|
+
"@pi-unipi/input-shortcuts": "3.0.0-alpha.23",
|
|
95
|
+
"@pi-unipi/kanboard": "3.0.0-alpha.23",
|
|
96
|
+
"@pi-unipi/mcp": "3.0.0-alpha.23",
|
|
97
|
+
"@pi-unipi/memory": "3.0.0-alpha.23",
|
|
98
|
+
"@pi-unipi/notify": "3.0.0-alpha.23",
|
|
99
|
+
"@pi-unipi/skill-registry": "3.0.0-alpha.23",
|
|
100
|
+
"@pi-unipi/subagents": "3.0.0-alpha.23",
|
|
101
|
+
"@pi-unipi/updater": "3.0.0-alpha.23",
|
|
102
|
+
"@pi-unipi/utility": "3.0.0-alpha.23",
|
|
103
|
+
"@pi-unipi/web-api": "3.0.0-alpha.23",
|
|
104
|
+
"@pi-unipi/workflow": "3.0.0-alpha.23"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
107
|
"@earendil-works/pi-agent-core": "^0.87.1",
|