@pi-unipi/unipi 3.0.0-alpha.8 → 3.0.0
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 +599 -0
- package/README.md +271 -154
- package/docs/prefix-cache-architecture.md +14 -0
- package/package.json +30 -27
- package/packages/app-bridge/README.md +17 -0
- package/packages/app-bridge/index.ts +14 -0
- package/packages/app-bridge/package.json +52 -0
- package/packages/app-bridge/src/bridge.ts +2476 -0
- package/packages/app-bridge/src/dialogs.ts +176 -0
- package/packages/app-bridge/src/files.ts +93 -0
- package/packages/app-bridge/src/media.ts +82 -0
- package/packages/app-bridge/src/paths.ts +299 -0
- package/packages/app-bridge/src/remote.ts +7 -0
- package/packages/app-bridge/src/search.ts +269 -0
- package/packages/app-bridge/src/snapshot.ts +301 -0
- package/packages/app-bridge/src/wire.ts +733 -0
- package/packages/app-bridge/src/work.ts +17 -0
- package/packages/ask-user/README.md +82 -39
- package/packages/ask-user/config.ts +12 -12
- package/packages/ask-user/handoff.ts +2 -1
- package/packages/ask-user/index.ts +19 -4
- package/packages/ask-user/package.json +4 -2
- package/packages/ask-user/tools.ts +100 -9
- package/packages/autocomplete/README.md +46 -21
- package/packages/autocomplete/package.json +1 -1
- package/packages/autocomplete/src/constants.ts +20 -16
- package/packages/autocomplete/src/provider.ts +10 -1
- package/packages/autocomplete/src/settings.ts +1 -1
- package/packages/background-tasks/README.md +84 -64
- package/packages/background-tasks/package.json +2 -2
- package/packages/background-tasks/src/cards.ts +77 -50
- package/packages/background-tasks/src/child-process.ts +1 -1
- package/packages/background-tasks/src/config.ts +5 -18
- package/packages/background-tasks/src/index.ts +127 -165
- package/packages/background-tasks/src/registry-shared.ts +30 -0
- package/packages/background-tasks/src/registry.ts +188 -50
- package/packages/background-tasks/src/tools.ts +6 -6
- package/packages/background-tasks/src/tray-pane.ts +410 -0
- package/packages/background-tasks/src/types.ts +28 -0
- package/packages/btw/README.md +59 -13
- package/packages/btw/extensions/btw.ts +134 -4
- package/packages/btw/package.json +2 -2
- package/packages/compactor/README.md +85 -65
- package/packages/compactor/package.json +3 -3
- package/packages/compactor/src/card.ts +3 -8
- package/packages/compactor/src/commands/index.ts +9 -27
- package/packages/compactor/src/compaction/hooks.ts +215 -108
- package/packages/compactor/src/compaction/summarize.ts +19 -137
- package/packages/compactor/src/config/manager.ts +92 -34
- package/packages/compactor/src/config/schema.ts +20 -5
- package/packages/compactor/src/index.ts +43 -2
- package/packages/compactor/src/info-screen.ts +33 -3
- package/packages/compactor/src/stats.ts +3 -3
- package/packages/compactor/src/tools/ctx-doctor.ts +1 -1
- package/packages/compactor/src/types.ts +4 -9
- package/packages/core/README.md +112 -69
- package/packages/core/bus.ts +330 -0
- package/packages/core/command-echo.ts +151 -3
- package/packages/core/constants.ts +3 -7
- package/packages/core/detachable-bash.ts +139 -0
- package/packages/core/events.ts +71 -108
- package/packages/core/global.d.ts +10 -0
- package/packages/core/harness-messages.ts +416 -0
- package/packages/core/index.ts +20 -3
- package/packages/core/kanboard-label.ts +31 -0
- package/packages/core/move.ts +39 -0
- package/packages/core/package.json +5 -2
- package/packages/core/remote-dialogs.ts +51 -0
- package/packages/core/src/child-agent/runtime.ts +35 -5
- package/packages/core/src/child-usage.ts +131 -0
- package/packages/core/src/compaction-savings.ts +122 -0
- package/packages/core/src/evidence.ts +78 -0
- package/packages/core/src/hints/browser.ts +278 -0
- package/packages/core/src/hints/crab-data.ts +19 -0
- package/packages/core/src/hints/index.ts +912 -0
- package/packages/core/src/hints/lines.ts +909 -0
- package/packages/core/src/hints/store.ts +120 -0
- 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/skill-conditions.ts +68 -0
- package/packages/core/src/tui/hub-kit.ts +10 -1
- package/packages/core/src/tui/kit.ts +62 -0
- package/packages/core/src/tui/shared-ticker.ts +82 -0
- package/packages/core/src/tui/viz.ts +511 -0
- package/packages/core/src/turn/arbiter.ts +312 -0
- package/packages/core/src/turn/pending-work.ts +168 -0
- package/packages/core/src/work/index.ts +377 -0
- package/packages/core/src/work/pane-kit.ts +224 -0
- package/packages/core/src/work/tray.ts +430 -0
- package/packages/core/utils.ts +14 -10
- package/packages/dream/README.md +94 -0
- package/packages/dream/extensions/dream.ts +290 -0
- package/packages/dream/package.json +55 -0
- package/packages/dream/skills/craft-skill/SKILL.md +10 -0
- package/packages/dream/skills/craft-skill/scripts/check +17 -0
- package/packages/dream/skills/craft-skill/scripts/scaffold +10 -0
- package/packages/dream/src/controller.ts +337 -0
- package/packages/dream/src/digest.ts +195 -0
- package/packages/dream/src/report.ts +130 -0
- package/packages/dream/src/runner.ts +162 -0
- package/packages/dream/src/runs.ts +356 -0
- package/packages/dream/src/schedule.ts +93 -0
- package/packages/dream/src/settings.ts +90 -0
- package/packages/dream/src/tray-pane.ts +358 -0
- package/packages/footer/README.md +66 -123
- package/packages/footer/package.json +3 -3
- package/packages/footer/src/commands.ts +12 -41
- package/packages/footer/src/config.ts +167 -207
- package/packages/footer/src/glance-editor.ts +133 -40
- package/packages/footer/src/index.ts +284 -407
- package/packages/footer/src/process-line.ts +59 -0
- package/packages/footer/src/registry/index.ts +3 -53
- package/packages/footer/src/rendering/icons.ts +18 -1
- package/packages/footer/src/segments/compactor.ts +4 -55
- package/packages/footer/src/segments/long-horizon.ts +11 -33
- package/packages/footer/src/session-scan.ts +284 -0
- package/packages/footer/src/strip.ts +238 -0
- package/packages/footer/src/tps-shared.ts +19 -0
- package/packages/footer/src/types.ts +48 -135
- package/packages/fusion/README.md +83 -140
- package/packages/fusion/package.json +4 -3
- package/packages/fusion/src/api.ts +54 -0
- package/packages/fusion/src/index.ts +128 -36
- package/packages/fusion/src/nudge.ts +98 -2
- package/packages/fusion/src/picker.ts +70 -12
- package/packages/fusion/src/preset-editor.ts +2 -2
- package/packages/fusion/src/preset.ts +5 -5
- package/packages/fusion/src/prompts.ts +2 -2
- package/packages/fusion/src/tools.ts +41 -0
- package/packages/fusion/src/transcript.ts +23 -36
- package/packages/info-screen/README.md +157 -66
- package/packages/info-screen/config.ts +20 -13
- package/packages/info-screen/core-groups.ts +281 -483
- package/packages/info-screen/index.ts +199 -168
- package/packages/info-screen/package.json +7 -3
- package/packages/info-screen/pages/context.ts +211 -0
- package/packages/info-screen/pages/inventory.ts +156 -0
- package/packages/info-screen/pages/modules.ts +358 -0
- package/packages/info-screen/pages/session.ts +356 -0
- package/packages/info-screen/pages/usage.ts +170 -0
- package/packages/info-screen/palette.ts +80 -0
- package/packages/info-screen/registry.ts +183 -105
- package/packages/info-screen/tui/info-overlay.ts +287 -499
- package/packages/info-screen/tui/page-kit.ts +222 -0
- package/packages/info-screen/tui/self-dismiss.ts +55 -0
- package/packages/info-screen/tui/splash.ts +204 -0
- package/packages/info-screen/types.ts +39 -10
- package/packages/info-screen/usage-parser.ts +175 -11
- package/packages/input-shortcuts/README.md +47 -59
- package/packages/input-shortcuts/package.json +2 -2
- package/packages/input-shortcuts/src/burst.ts +88 -0
- package/packages/input-shortcuts/src/chord-overlay.ts +20 -70
- package/packages/input-shortcuts/src/index.ts +98 -195
- package/packages/input-shortcuts/src/last-response.ts +40 -0
- package/packages/input-shortcuts/src/registers.ts +8 -23
- package/packages/input-shortcuts/src/settings.ts +4 -0
- package/packages/input-shortcuts/src/types.ts +4 -16
- package/packages/input-shortcuts/src/undo-redo.ts +59 -47
- package/packages/kanboard/README.md +98 -186
- package/packages/kanboard/index.ts +331 -60
- package/packages/kanboard/package.json +8 -8
- package/packages/kanboard/skills/kanboard/SKILL.md +67 -31
- package/packages/kanboard/src/badges.ts +93 -0
- package/packages/kanboard/src/bus-hooks.ts +28 -0
- package/packages/kanboard/src/commands.ts +257 -102
- package/packages/kanboard/src/debug.ts +20 -0
- package/packages/kanboard/src/guard.ts +267 -109
- package/packages/kanboard/src/monitor.ts +330 -0
- package/packages/kanboard/src/move.ts +63 -0
- package/packages/kanboard/src/notice-buffer.ts +74 -0
- package/packages/kanboard/src/reminders.ts +234 -0
- package/packages/kanboard/src/settings.ts +90 -90
- package/packages/kanboard/src/shapes.ts +5 -0
- package/packages/long-horizon/README.md +126 -16
- package/packages/long-horizon/index.ts +442 -47
- package/packages/long-horizon/package.json +5 -3
- package/packages/long-horizon/src/commands.ts +208 -21
- package/packages/long-horizon/src/engine/continuation.ts +257 -18
- package/packages/long-horizon/src/engine/goal-state.ts +131 -15
- package/packages/long-horizon/src/engine/nudge-stash.ts +71 -0
- package/packages/long-horizon/src/engine/ralph.ts +84 -6
- package/packages/long-horizon/src/engine/runaway.ts +67 -10
- package/packages/long-horizon/src/engine/task-gate.ts +109 -0
- package/packages/long-horizon/src/engine/verifier.ts +19 -0
- package/packages/long-horizon/src/gate.ts +180 -13
- package/packages/long-horizon/src/graph/engine.ts +929 -0
- package/packages/long-horizon/src/graph/runner.ts +49 -0
- package/packages/long-horizon/src/judge/credentials.ts +78 -0
- package/packages/long-horizon/src/judge/resolve.ts +9 -9
- package/packages/long-horizon/src/judge/typesafe.ts +2 -2
- package/packages/long-horizon/src/lh-state.ts +38 -0
- package/packages/long-horizon/src/modes.ts +2 -2
- package/packages/long-horizon/src/owner.ts +32 -2
- package/packages/long-horizon/src/progress-chart.ts +348 -0
- package/packages/long-horizon/src/progress-mermaid.ts +105 -0
- package/packages/long-horizon/src/progress-snapshot.ts +305 -0
- package/packages/long-horizon/src/progress-view.ts +590 -0
- package/packages/long-horizon/src/prompts/goal.ts +1 -1
- package/packages/long-horizon/src/runtime.ts +133 -14
- package/packages/long-horizon/src/settings.ts +17 -11
- package/packages/long-horizon/src/tools/goal.ts +6 -0
- package/packages/long-horizon/src/tools/graph.ts +285 -304
- package/packages/long-horizon/src/tools/ralph.ts +1 -1
- package/packages/long-horizon/src/tools/todo.ts +0 -5
- package/packages/long-horizon/src/visualize.ts +148 -0
- package/packages/mcp/README.md +74 -62
- package/packages/mcp/package.json +2 -2
- package/packages/mcp/src/bridge/registry.ts +12 -20
- package/packages/mcp/src/index.ts +17 -49
- package/packages/mcp/src/settings.ts +52 -0
- package/packages/memory/README.md +103 -118
- package/packages/memory/commands.ts +22 -6
- package/packages/memory/daemon.ts +1 -1
- package/packages/memory/index.ts +218 -25
- package/packages/memory/mempalace.ts +18 -3
- package/packages/memory/move.ts +194 -0
- package/packages/memory/package.json +5 -3
- package/packages/memory/reader.ts +80 -12
- package/packages/memory/save-session.ts +264 -0
- package/packages/memory/session.ts +2 -1
- package/packages/memory/settings.ts +112 -18
- package/packages/memory/tools.ts +157 -101
- package/packages/notify/README.md +129 -133
- package/packages/notify/activity.ts +4 -2
- package/packages/notify/app-endpoints.ts +63 -0
- package/packages/notify/events.ts +326 -40
- package/packages/notify/index.ts +2 -2
- package/packages/notify/input-needed-message.ts +27 -0
- package/packages/notify/notify-key.ts +36 -0
- package/packages/notify/ntfy-crypto.ts +64 -0
- package/packages/notify/package.json +2 -2
- package/packages/notify/platforms/ntfy.ts +128 -7
- package/packages/notify/settings.ts +74 -30
- package/packages/notify/skills/configure-notify/SKILL.md +4 -2
- package/packages/notify/types.ts +5 -0
- package/packages/skill-registry/README.md +78 -46
- package/packages/skill-registry/index.ts +40 -20
- package/packages/skill-registry/package.json +2 -7
- package/packages/skill-registry/src/editor.ts +13 -15
- package/packages/skill-registry/src/judge.ts +11 -15
- package/packages/skill-registry/src/registry.ts +18 -17
- package/packages/skill-registry/src/settings.ts +21 -20
- package/packages/subagents/README.md +77 -31
- package/packages/subagents/package.json +3 -2
- package/packages/subagents/src/agents.ts +2 -2
- package/packages/subagents/src/cards.ts +23 -12
- package/packages/subagents/src/index.ts +168 -71
- package/packages/subagents/src/manager-shared.ts +68 -0
- package/packages/subagents/src/manager.ts +46 -1
- package/packages/subagents/src/ui.ts +88 -117
- package/packages/unipi/bundled.js +31929 -16358
- package/packages/unipi/index.ts +58 -4
- package/packages/updater/README.md +53 -55
- package/packages/updater/package.json +2 -2
- package/packages/updater/src/channel.ts +100 -0
- package/packages/updater/src/checker.ts +60 -31
- package/packages/updater/src/index.ts +31 -31
- package/packages/updater/src/installer.ts +10 -5
- package/packages/updater/src/remote-changelog.ts +19 -6
- package/packages/updater/src/settings.ts +8 -2
- package/packages/updater/src/tui/changelog-overlay.ts +4 -8
- package/packages/updater/src/tui/update-overlay.ts +2 -1
- package/packages/updater/types.ts +9 -0
- package/packages/utility/README.md +108 -69
- package/packages/utility/package.json +2 -2
- package/packages/utility/skills/browser/SKILL.md +73 -0
- package/packages/utility/skills/cron/SKILL.md +137 -0
- package/packages/utility/skills/summarize/SKILL.md +311 -0
- package/packages/utility/skills/utility/SKILL.md +2 -1
- package/packages/utility/src/answer/index.ts +7 -2
- package/packages/utility/src/browser/state.ts +218 -0
- package/packages/utility/src/commands.ts +7 -2
- package/packages/utility/src/cron/index.ts +323 -0
- package/packages/utility/src/cron/settings.ts +185 -0
- package/packages/utility/src/diagnostics/engine.ts +56 -0
- package/packages/utility/src/image/recognize.ts +1 -1
- package/packages/utility/src/image/settings.ts +74 -22
- package/packages/utility/src/image/transports.ts +1 -1
- package/packages/utility/src/index.ts +76 -4
- package/packages/utility/src/move/git.ts +37 -0
- package/packages/utility/src/move/index.ts +144 -0
- package/packages/utility/src/move/pi-state.ts +158 -0
- package/packages/utility/src/render/delegated.ts +288 -0
- package/packages/utility/src/render/harness.ts +756 -0
- package/packages/utility/src/render/images.ts +51 -0
- package/packages/utility/src/render/reply-bg.ts +335 -0
- package/packages/utility/src/render/simple.ts +239 -18
- package/packages/utility/src/render/spacing.ts +247 -0
- package/packages/utility/src/render/styled.ts +251 -0
- package/packages/utility/src/render/tools.ts +51 -9
- package/packages/utility/src/settings.ts +19 -19
- package/packages/utility/src/summarize/index.ts +56 -0
- package/packages/watchdog/README.md +80 -41
- package/packages/watchdog/index.ts +135 -33
- package/packages/watchdog/package.json +3 -3
- package/packages/watchdog/src/bash-prompt.ts +65 -0
- package/packages/watchdog/src/config.ts +34 -28
- package/packages/watchdog/src/decide.ts +36 -0
- package/packages/watchdog/src/proc-sample.ts +62 -0
- package/packages/web-api/README.md +78 -126
- package/packages/web-api/package.json +2 -2
- package/packages/web-api/src/engine/dependencies.ts +116 -9
- package/packages/web-api/src/engine/extract.ts +4 -4
- package/packages/web-api/src/index.ts +42 -5
- package/packages/web-api/src/settings.ts +27 -14
- package/packages/web-api/src/tools.ts +50 -40
- package/packages/workflow/README.md +79 -99
- package/packages/workflow/index.ts +26 -8
- package/packages/workflow/package.json +2 -2
- package/packages/workflow/src/permission/decide.ts +10 -6
- package/packages/workflow/src/permission/index.ts +12 -12
- package/packages/workflow/src/permission/settings.ts +10 -19
- package/packages/workflow/src/plan/enforce.ts +32 -32
- package/packages/workflow/src/plan/index.ts +104 -28
- package/packages/workflow/src/plan/review.ts +167 -43
- package/packages/workflow/src/plan/state.ts +4 -2
- package/packages/workflow/src/status.ts +14 -0
- package/packages/background-tasks/src/task-manager.ts +0 -785
- package/packages/compactor/src/compaction/jev-prune.ts +0 -114
- package/packages/core/fusion-status.ts +0 -49
- package/packages/core/long-horizon-status.ts +0 -33
- package/packages/core/plan-permission-status.ts +0 -34
- package/packages/footer/src/events.ts +0 -290
- package/packages/footer/src/help.ts +0 -160
- package/packages/footer/src/presets.ts +0 -128
- package/packages/footer/src/rendering/renderer.ts +0 -454
- package/packages/footer/src/rendering/separators.ts +0 -102
- package/packages/footer/src/segments/core.ts +0 -412
- package/packages/footer/src/segments/kanboard.ts +0 -91
- package/packages/footer/src/segments/mcp.ts +0 -109
- package/packages/footer/src/segments/memory.ts +0 -168
- package/packages/footer/src/segments/notify.ts +0 -61
- package/packages/footer/src/segments/ralph.ts +0 -123
- package/packages/footer/src/segments/status-ext.ts +0 -123
- package/packages/footer/src/segments/workflow.ts +0 -124
- package/packages/input-shortcuts/src/clipboard.ts +0 -119
- package/packages/kanboard/src/runner.ts +0 -981
- package/packages/long-horizon/src/judge/omniroute-key.ts +0 -56
- package/packages/long-horizon/src/tools/swarm.ts +0 -212
- package/packages/skill-registry/skills/auto/SKILL.md +0 -465
- package/packages/skill-registry/skills/brainstorm/SKILL.md +0 -222
- package/packages/skill-registry/skills/chore-create/SKILL.md +0 -315
- package/packages/skill-registry/skills/chore-execute/SKILL.md +0 -314
- package/packages/skill-registry/skills/consolidate/SKILL.md +0 -142
- package/packages/skill-registry/skills/consultant/SKILL.md +0 -97
- package/packages/skill-registry/skills/debug/SKILL.md +0 -228
- package/packages/skill-registry/skills/document/SKILL.md +0 -120
- package/packages/skill-registry/skills/fix/SKILL.md +0 -212
- package/packages/skill-registry/skills/gather-context/SKILL.md +0 -147
- package/packages/skill-registry/skills/plan/SKILL.md +0 -234
- package/packages/skill-registry/skills/quick-fix/SKILL.md +0 -135
- package/packages/skill-registry/skills/quick-work/SKILL.md +0 -110
- package/packages/skill-registry/skills/research/SKILL.md +0 -251
- package/packages/skill-registry/skills/review-work/SKILL.md +0 -190
- package/packages/skill-registry/skills/scan-issues/SKILL.md +0 -195
- package/packages/skill-registry/skills/work/SKILL.md +0 -221
- package/packages/skill-registry/skills/worktree-create/SKILL.md +0 -69
- package/packages/skill-registry/skills/worktree-list/SKILL.md +0 -78
- package/packages/skill-registry/skills/worktree-merge/SKILL.md +0 -89
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,605 @@ 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] — 2026-10-25
|
|
10
|
+
|
|
11
|
+
UniPi 3.0 is the first stable release of the 3.x line. It replaces 2.20.5 as npm `latest`. Upgrade guide: [docs/guide/upgrade-3.0.md](docs/guide/upgrade-3.0.md).
|
|
12
|
+
|
|
13
|
+
### Highlights
|
|
14
|
+
|
|
15
|
+
- **Long work modes.** `goal`, `ralph`, `swarm` and `graph` (`@pi-unipi/long-horizon`) keep the agent on one task over many turns. Goal mode ends only when an independent verifier accepts the goal, or when the goal is blocked, stalled or over budget.
|
|
16
|
+
- **Memory on MemPalace 3.10.** Memories are Markdown files under `~/.unipi/memory/<project>/<type>/` plus a MemPalace index that other tools can read. 2.x memories are converted once with `/unipi:memory migrate`, with backups.
|
|
17
|
+
- **New Kanboard.** A Rust board server with a web board, a dashboard and a "Needs you" inbox. The agent moves its own tasks with `start` and `finish`; `/unipi:kanboard-do` and `/unipi:kanboard-autowork` control how much it may do.
|
|
18
|
+
- **Plan mode and permission modes** (`@pi-unipi/workflow`) replace the twenty workflow commands. Permission modes are `ask`, `auto` (default) and `full`.
|
|
19
|
+
- **Rebuilt subagents and Fusion.** `run_subagent` runs agents in the foreground or background; one work tray shows background tasks, subagents and Dream. The Fusion sidekick's steps stream into the chat.
|
|
20
|
+
- **Rebuilt compactor.** The lossless summary is rebuilt from the full session on each compaction and can no longer grow from one compaction to the next.
|
|
21
|
+
- **New screens.** The glance footer, the Unicrab start splash, the `/unipi:info` dashboard, Unicrab hints and a `simple` render style (one line per tool call, now the default).
|
|
22
|
+
- **UniPi app.** `@pi-unipi/app-bridge` lets the UniPi app (Android, Linux, macOS, Windows) chat with a Pi session live, answer dialogs and `ask_user`, switch sessions, models and modes, suggest every command, search a session by meaning, and show graph progress.
|
|
23
|
+
- **Cron.** `skill:cron` and `/unipi:cron`: scheduled, unattended pi runs on your PC, run by the UniPi host, with per-job notifications.
|
|
24
|
+
- **The PC's browser for the agent.** `skill:browser` points `agent-browser` at the browser shown in the UniPi app while it is on.
|
|
25
|
+
- **Honest session cost.** Graph and swarm steps, subagents, the Fusion sidekick and `bg_run` agents add what they spend to the lead session's cost.
|
|
26
|
+
|
|
27
|
+
### Breaking changes
|
|
28
|
+
|
|
29
|
+
- **Pi `^0.87.1` is required.** All `@earendil-works/pi-*` peer dependencies moved from `^0.84.0` to `^0.87.1`.
|
|
30
|
+
Do this: update Pi to 0.87.1 or later before you upgrade.
|
|
31
|
+
- **Memory rebuilt on MemPalace 3.10.** The Python bridge, the SQLite and embedding backends and the direct `upsert` write path are gone. 2.x data is never converted automatically.
|
|
32
|
+
Do this: run `/unipi:memory migrate` once. Backups go to `~/.mempalace/palace.bak-unipi-<ts>` and `~/.unipi/memory-v2-backup-<ts>`.
|
|
33
|
+
- **Memory embedding settings removed.** `provider`, `model`, `baseUrl`, `dimensions`, `apiKey`, `suppressMigrationWarning`, the re-embed action and `/unipi:memory-reembed` are gone; MemPalace embeds by itself.
|
|
34
|
+
Do this: nothing. Stale settings are ignored.
|
|
35
|
+
- **`memory.autoStartDaemon` defaults to off.** Pi writes directly (`mempalace mine`) unless a daemon already runs.
|
|
36
|
+
Do this: turn it on in `/unipi:settings` → Memory if parallel Pi sessions must never collide.
|
|
37
|
+
- **`@pi-unipi/image` removed.** Image generation, editing and recognition are in `@pi-unipi/utility`, with the same `image` settings.
|
|
38
|
+
Do this: nothing with the umbrella package; if you installed `@pi-unipi/image` alone, remove it and install `@pi-unipi/utility`.
|
|
39
|
+
- **`@pi-unipi/ralph` removed.** Ralph is a mode of `@pi-unipi/long-horizon` (`/unipi:ralph start|status|stop|resume|clear`).
|
|
40
|
+
Do this: if you installed `@pi-unipi/ralph` alone, remove it and install `@pi-unipi/long-horizon`.
|
|
41
|
+
- **`@pi-unipi/milestone` and `@pi-unipi/trajectory` removed**, with `/unipi:milestone-onboard`, `/unipi:milestone-update` and `/unipi:trajectory`. There is no replacement.
|
|
42
|
+
Do this: if you installed either alone, remove it with `pi remove`.
|
|
43
|
+
- **Workflow commands removed.** `/unipi:brainstorm`, `work`, `review-work`, `consolidate`, `worktree-create`/`-list`/`-merge`, `consultant`, `quick-work`, `gather-context`, `document`, `scan-issues`, `auto`, `debug`, `fix`, `quick-fix`, `research`, `chore-create`/`-execute` and the old `/unipi:plan` pipeline are gone. The bundled workflow skills are deleted too.
|
|
44
|
+
Do this: use plan mode (`/unipi:plan`, `Alt+P`), permission modes (`/unipi:permission`, `Alt+M`) and the long work modes.
|
|
45
|
+
- **Project docs live in `docs/`.** Skills and plan mode write to `docs/` in the project; the `.unipi/docs/` convention is gone. Existing `.unipi/docs/` folders are not moved.
|
|
46
|
+
Do this: move old `.unipi/docs/` content by hand if you want it in `docs/`.
|
|
47
|
+
- **Kanboard replaced.** The htmx/Alpine board, the TUI overlay and `/unipi:kanboard-doctor` are gone. The new board is the `unipi-kanboard` binary with a web board.
|
|
48
|
+
Do this: run `/unipi:kanboard onboard` in each project, then `/unipi:kanboard open`.
|
|
49
|
+
- **Per-module settings commands removed.** `/unipi:*-settings`, `/unipi:compact-preset`, `/unipi:fusion-preset`, `/unipi:web-cache-clear`, the `mcp-*` setup commands, the `notify-set-*`/`notify-test`/`notify-recap-model` commands and the `badge-*` commands are absorbed into the settings hub.
|
|
50
|
+
Do this: use `/unipi:settings` (or `/unipi:settings <search>`).
|
|
51
|
+
- **Utility slimmed.** `/unipi:reload`, `/unipi:status`, `/unipi:env`, `/unipi:prefix-cache`, the `ctx_env` and `set_session_name` tools and the name badge bar are gone. Sessions are named automatically; old `badge.*` settings carry over to `rename.*`.
|
|
52
|
+
Do this: use Pi's `/reload`, `/unipi:doctor` and Pi's `/name`.
|
|
53
|
+
- **Subagents rebuilt.** `spawn_helper`/`get_helper_result`, `bg_delegate`/`bg_result`, workflow scripts, missions, schedules, budgets, acceptance gates, agent memory, worktrees, prompt templates and the bundled agents are gone. Saved `backgroundTasks.delegate.*` settings are ignored.
|
|
54
|
+
Do this: use `run_subagent` with `subagent_explore`, `subagent_general` or a custom agent (`/unipi:agents`), and `read_subagent` for results.
|
|
55
|
+
- **BTW is an inline panel.** `/unipi:btw-new`, `-tangent`, `-clear`, `-inject`, `-summarize` and `--save` are gone.
|
|
56
|
+
Do this: use `/unipi:btw [question]`; each question runs in a fresh read-only session.
|
|
57
|
+
- **`/unipi:model` saves the default with `Alt+Enter`**, not `Ctrl+S`.
|
|
58
|
+
Do this: press `Alt+Enter`, or set the startup model in `/unipi:settings` → Fusion → Startup.
|
|
59
|
+
- **Compactor reworked.** Session continuity (the SQLite event log and restored snapshot), the sandbox tools, the `compact`, `compactor_stats` and `compactor_doctor` tools, presets and the strategy modes are gone. `/unipi:lossless-compact`, `/unipi:compact` and `/unipi:compact-recall` are removed. Old configs are translated.
|
|
60
|
+
Do this: use `/unipi:compact-vcc`, `/unipi:compact-by-llm` and `/unipi:session-recall`; delete `~/.unipi/db/compactor` if you like.
|
|
61
|
+
- **Compactor settings pruned.** The `sections.*` booleans became one **Summary sections** setting (stored values still work); `cooldownMs` and `repeatMinGrowthTokens` are fixed; `debug` moved to `UNIPI_COMPACTOR_DEBUG=1`.
|
|
62
|
+
Do this: nothing.
|
|
63
|
+
- **Classic footer removed.** Presets, separators, segments, `/unipi:footer-help` and the `preset`, `separator`, `zoneSeparator`, `showFullLabels`, `groups` and `glanceMode` settings are gone; the glance frame is the only footer. `colorMode: mono` loads as `none`.
|
|
64
|
+
Do this: configure the footer in `/unipi:settings` → Footer; set `enabled: false` for the plain Pi editor.
|
|
65
|
+
- **`ask_user` is off by default and rebuilt.** One call carries 1–4 questions; the single-question form is still accepted (`timeout` is ignored); the "allowed formats" switches are gone.
|
|
66
|
+
Do this: turn it on in `/unipi:settings` → Ask User if you want it.
|
|
67
|
+
- **`simple` is the default render style.**
|
|
68
|
+
Do this: set `utility.render.style` to `regular` for Pi's own view.
|
|
69
|
+
- **Skill exposure settings moved** from `utility.skills` to the `skills` namespace (`@pi-unipi/skill-registry`), migrated on first read.
|
|
70
|
+
Do this: nothing; use `/unipi:skills`.
|
|
71
|
+
- **`Alt+S` chords reworked.** The registers (0–9), cut and toggle-thinking keys are gone; `A` appends the stash, `Y` copies the last reply, `K` adds the input to the Kanboard backlog.
|
|
72
|
+
Do this: nothing.
|
|
73
|
+
- **Settings removed:** `background-tasks.defaultTimeoutSeconds` (nothing read it); web-api `os` and `batchConcurrency`; the `llm-summarize` provider and the `source` parameter of `web_llm_summarize`.
|
|
74
|
+
Do this: nothing.
|
|
75
|
+
- **2.x state archived.** `~/.unipi/state/fusion` and `~/.unipi/trajectory` move to `~/.unipi/v2-archive/<name>-<ts>/` on first start; they are never purged.
|
|
76
|
+
Do this: delete the archive by hand when you no longer need 2.x.
|
|
77
|
+
|
|
78
|
+
### Added
|
|
79
|
+
|
|
80
|
+
- `long-horizon` (new package): `goal`, `ralph`, `swarm` and `graph` modes with one active owner and one park slot; `/unipi:<mode> status|stop|resume|clear`; `/unipi:regular`; a goal verifier; a goal progress estimate shown only to you; an optional judge that picks a mode per prompt (off by default).
|
|
81
|
+
- `long-horizon`: graph and swarm follow an agent graph — pi runs each step as a background subagent and wakes the model at checkpoints; graphs survive restarts (`/unipi:graph history`, `/unipi:swarm history`). Tools: `update_agent_graph`, `view_agent_graph`, `yield_agent_graph`, `agent_output`, `agent_swarm_status`.
|
|
82
|
+
- `long-horizon`: `/unipi:visualize-progress` — a live view of a run (steps, progress bars, log), drawn as a chart in terminals with Kitty graphics.
|
|
83
|
+
- `workflow`: plan mode (`/unipi:plan`, `Alt+P`) with a two-part plan (Summary and Implementation) and an approval overlay; permission modes `ask`, `auto`, `full` (`/unipi:permission`, `Alt+M`) with saved allow/deny rules and jev checks for unknown `bash` commands.
|
|
84
|
+
- `memory`: Markdown files plus MemPalace index; `/unipi:memory status|recall|write|migrate`; a background side session that saves what the agent learned (`saveMode`); markdown-only mode when MemPalace is missing; `uv tool install mempalace` when `uv` is available.
|
|
85
|
+
- `dream` (new package, off by default): reviews past sessions in the background, turns repeated false paths into memory lessons, and proposes skills and checks to approve or reject (`/unipi:dream`).
|
|
86
|
+
- `kanboard`: the `unipi-kanboard` binary for Linux, macOS and Windows; a local daemon with a web board, dashboard, labels, task owner, undo, archived projects, `@` task mentions, status reports and attachments; remote access with a token (`/unipi:kanboard open --host`); `/unipi:kanboard show` in the chat; `/unipi:kanboard-add`, `/unipi:kanboard-do` (task budget) and `/unipi:kanboard-autowork`.
|
|
87
|
+
- `subagents`: `run_subagent` (foreground, background, resume) with live cards, `Ctrl+B` to background, `Esc` to cancel, custom Markdown agents and `/unipi:agents`.
|
|
88
|
+
- One work tray for background tasks, subagents and Dream (`↓` on an empty input, `/unipi:bg-tasks`, `/unipi:subagents`).
|
|
89
|
+
- `watchdog` (new package): on by default for bash calls; a bash call that looks stuck returns to the agent and keeps running as a background task. `/unipi:bg-detach` does this by hand.
|
|
90
|
+
- `compactor`: lossless summary with current state first (Active Work, Your Requests, Latest State, Decisions & Constraints, Lessons, Project Knowledge, Files, Commits, Open Errors, Recent Transcript); credential redaction; a compaction card in the transcript; `/unipi:compact-then <prompt>`; compaction savings on the info screen.
|
|
91
|
+
- `skill-registry` (new package): per-skill **Enabled** and **Must show** per scope (`/unipi:skills`), a skill vault and judged skill exposure.
|
|
92
|
+
- Decision Model settings: one shared `decision-model` group for jev, used by long-horizon, permissions, skills, watchdog and the compactor.
|
|
93
|
+
- `footer`: the glance frame with session tokens and cost, configurable strip and badges, rainbow modes, and a responsive layout for narrow terminals.
|
|
94
|
+
- `info-screen`: the Unicrab start splash and a redesigned `/unipi:info` dashboard (This session, Usage, Tools, Skills, Modules, MCP, Compactor, Updates, Web, Memory, Keys) with session/project/global scope tags and a context breakdown.
|
|
95
|
+
- `core`: Unicrab hints (`Alt+H`, `Alt+Shift+H`, `/unipi:hint`); the settings hub explains each setting in an info panel; `/unipi:settings <search>`.
|
|
96
|
+
- `utility`: `simple`, `regular` and `advanced` render styles; automatic session naming; `/unipi:answer`; `/unipi:summarize` and the bundled `summarize` skill; `/unipi:retry`; pasted images and files as attachments; `image_edit`; `/unipi:move` to re-link sessions, boards and memories after a project move.
|
|
97
|
+
- `ask-user`: 1–4 questions per call with an automatic "Other" choice and image/file paste.
|
|
98
|
+
- `input-shortcuts`: `Ctrl+C` keeps the cleared input in the transcript; `↑` restores it.
|
|
99
|
+
- `app-bridge` (new package): the UniPi phone app can chat with a Pi session live, page through history, navigate sessions, use send modes, share media, answer dialogs and `ask_user`, see running work, and switch the working mode.
|
|
100
|
+
- `notify`: an **Input Needed** event for prompts that send no event of their own; end-to-end encrypted phone push; app deep links.
|
|
101
|
+
- `utility`: cron (`skill:cron`, `/unipi:cron`) — scheduled pi runs through the UniPi host, with ntfy/Gotify/Telegram notifications and an optional wake-up message to the session that set the job.
|
|
102
|
+
- `skill:browser`, shown only while the PC's browser is on; `registerSkillCondition` lets any skill be shown only when a condition holds.
|
|
103
|
+
- Child-agent usage is recorded in the lead session (`unipi-child-usage` entries), so the footer, the app and `/unipi:info` count it.
|
|
104
|
+
- `/unipi:doctor` reports a missing Microsoft Visual C++ runtime on Windows.
|
|
105
|
+
|
|
106
|
+
### Changed
|
|
107
|
+
|
|
108
|
+
- `fusion`: the sidekick's steps stream into the chat; blocking handoffs forward approvals to you; sidekick thinking level is set in the `/unipi:model` Fusion row; `/unipi:model` lists your preset models and searches the whole catalogue as you type.
|
|
109
|
+
- `web-api`: web tools that cannot work are hidden from the agent; tool failures are reported as errors.
|
|
110
|
+
- `background-tasks`: launch and completion notices are one-line chips.
|
|
111
|
+
- `utility`: `/unipi:cleanup` previews and asks before it removes files; v2 memory backups are never removed. `/unipi:doctor` also checks the model cache, the Decision Model key and skill exposure.
|
|
112
|
+
- One "Working…" state while background tasks or subagents that can wake the agent still run; notify sends one "All done".
|
|
113
|
+
- The updater stays on the channel you installed from and never offers an older version.
|
|
114
|
+
- Autocomplete offers every registered `/unipi:*` command.
|
|
115
|
+
- The judge picks models from Pi's own model registry; provider-specific code is gone.
|
|
116
|
+
|
|
117
|
+
### Fixed
|
|
118
|
+
|
|
119
|
+
- `image` (now in `utility`): generation failed for most users, and failures were reported to the agent as successes.
|
|
120
|
+
- `compactor`: the percentage trigger no longer aborts the run; stats come from the session's own compaction entries instead of a fixed guess; the kept tail and summary are sized to the model's context window, so compaction no longer overflows small-context models; secrets are redacted before summary items are clipped.
|
|
121
|
+
- `ask-user`: several `ask_user` calls in one message no longer open at the same time and hang the turn.
|
|
122
|
+
- `fusion`: the Fusion row can always be applied (model cache refresh on a miss, stale saved keys dropped); the shell-delegation nudge fires at most once per handoff gap and ignores read-only commands.
|
|
123
|
+
- `notify`: one "finished" notification per run, not one per chat change; closing any prompt stops its reminders.
|
|
124
|
+
- `core`, `updater`: version comparison orders prerelease versions correctly.
|
|
125
|
+
- Windows: a missing Visual C++ runtime no longer stops UniPi from loading; web reads fall back to plain fetch. The app bridge listens on a named pipe, so the app reaches pi chats on a Windows PC.
|
|
126
|
+
- `app-bridge`: deleting or editing a queued message from the app no longer stops the run.
|
|
127
|
+
- `long-horizon`: ralph starts its first iteration from an empty prompt, `ralph_done` works after a restart, and mode prompts sent mid-turn are no longer dropped.
|
|
128
|
+
|
|
129
|
+
Full history of the 3.0 alphas: see the 3.0.0-alpha.* entries below.
|
|
130
|
+
|
|
131
|
+
## [3.0.0-alpha.45] — 2026-10-24
|
|
132
|
+
|
|
133
|
+
Includes the never-published 3.0.0-alpha.44 changes below.
|
|
134
|
+
|
|
135
|
+
### Changed
|
|
136
|
+
- Graph and swarm progress bars count what's settled. The number is done + failed over the total (1 done, 1 failed, 1 running, 1 not started reads `2/4`). The bar shows done in green, failed in red and running in the accent colour, with a highlight sweeping across the running part while the run is live. Items not started yet stay grey. The same change applies to `/unipi:visualize-progress`, the app's Progress sheet and mode popover, the chart title and the end-of-run log line.
|
|
137
|
+
|
|
138
|
+
### Fixed
|
|
139
|
+
- Session cost now includes what child agents spend. Graph and swarm work, subagents, the Fusion sidekick and `bg_run` agent tasks each run as a separate pi process, and the footer, the app's session cost and `/unipi:info` usage used to count only the lead's own messages. So any multi-agent run was under-priced. Each child model reply is now written into the lead session as a `unipi-child-usage` entry. The entry is saved with the session, follows the branch you're on and is never sent to the model. The footer and app add these entries to the cost, and info-screen stats count the subagent and sidekick ones too. `bg_run` agents are already counted from their own session files, so they aren't counted twice. Token counts are still the lead's own. Not covered yet: grandchildren (subagents started by subagents) and runs from before this fix.
|
|
140
|
+
|
|
141
|
+
## [3.0.0-alpha.44] — 2026-10-19
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
- Windows: the app can reach pi chats on a Windows PC. On Windows the bridge now listens on a named pipe (`\\.\pipe\unipi-bridge-<pid>`) instead of a Unix socket file, which Node can't create there (EACCES); Linux and macOS are unchanged. Needs UniPi host 0.5.2 on the Windows PC.
|
|
145
|
+
- Deleting a queued message from the app no longer stops the run. Editing, removing or steer-promoting one of pi's own queued messages used to abort the whole run and re-send what was left (UNI-305) — which meant deleting the queue's only entry killed the chat outright. The bridge now reaches pi's `AgentSession.clearQueue()` (captured with a one-time prototype patch, used only when it provably belongs to the session being edited) to drain and re-queue around the change while pi keeps streaming; the abort-and-resend path remains only as a fallback for older pi builds, and "Send now" still stops the run on purpose. (UNI-320)
|
|
146
|
+
|
|
147
|
+
## [3.0.0-alpha.43] — 2026-10-16
|
|
148
|
+
|
|
149
|
+
### Added
|
|
150
|
+
- Cron: scheduled, unattended pi runs on your PC, run by the UniPi host (needs UniPi host 0.5.1). `skill:cron` sets jobs up from a plain request ("every weekday at 18:30 summarize my inbox"), with plain-language schedules, per-job notifications (ntfy, Gotify, Telegram) and an optional wake-up message to the session that set it. `/unipi:cron` lists jobs, their runs and results, and runs, stops, enables or pauses them. Cron settings are in `/unipi:settings`. (UNI-288, UNI-314–318)
|
|
151
|
+
- `/skill:craft-skill` and `/skill:web` are listed as normal skills. (UNI-307)
|
|
152
|
+
|
|
153
|
+
### Fixed
|
|
154
|
+
- The UniPi app now gets argument suggestions for every extension's commands (e.g. `/usage `), not only UniPi's own. (UNI-304)
|
|
155
|
+
- The app's model list stayed partial (only openrouter) when a provider such as OmniRoute registered after the app connected; the list is now pushed again when it changes.
|
|
156
|
+
- Removing a steered message from the app no longer stops the run. (UNI-305)
|
|
157
|
+
- `/reload` from the app reloads pi instead of being sent as a message. (UNI-308)
|
|
158
|
+
|
|
159
|
+
## [3.0.0-alpha.42] — 2026-10-16
|
|
160
|
+
|
|
161
|
+
### Added
|
|
162
|
+
- `skill:browser`: the agent uses the PC's browser, the one you see in the UniPi app, with `agent-browser`. While the browser is on, UniPi points agent-browser at it (`AGENT_BROWSER_CDP`), so `agent-browser open <url>` just works, with no start or connect step. The browser is CloakBrowser, a stealthy Chromium shown only in the app; the agent's clicks and typing look human, and you can take over. Needs UniPi host 0.5.0. (UNI-295, UNI-303)
|
|
163
|
+
- The agent sees `skill:browser` and a one-line note only while the PC's browser is on. Turning it off hides both from the next prompt, and `/skill:browser` explains how to turn it on. Any skill can now be shown only when a condition holds (`registerSkillCondition`). (UNI-300)
|
|
164
|
+
- The work tray has a hint again: while it has items, one dim line under the input reads, for example, "Background tasks 1 running · Subagents 2 · ↓ open". (UNI-291)
|
|
165
|
+
- App: "Start from here" on one of your messages puts that message, with its images, back in the app's input, like `/tree` in the terminal. (UNI-290)
|
|
166
|
+
|
|
167
|
+
## [3.0.0-alpha.41] — 2026-10-13
|
|
168
|
+
|
|
169
|
+
### Changed
|
|
170
|
+
- Graph and swarm now follow Maka's agent graph. The model adds work with dependencies, and pi runs each step as a background subagent. Before, the model had to start every subagent and report back by hand, and weaker models skipped it. The model yields while steps run, and pi wakes it once at each checkpoint (a failure, nothing left to run, or everything settled). A graph closes only when the model finishes it with the results it chose. Swarm is the same graph with Maka's swarm instructions. New tools: `update_agent_graph` (`add_work` / `stop` / `finish`), `view_agent_graph`, `yield_agent_graph`, `agent_output`, `agent_swarm_status`. Removed: `swarm_report`, `swarm_status`, `swarm_yield`, `graph_output`, and the declare-once `update_agent_graph`. (UNI-279, UNI-280, UNI-281)
|
|
171
|
+
|
|
172
|
+
### Added
|
|
173
|
+
- The agent graph is saved in the project's state folder. It survives restarts: steps that were running when pi closed resume once in their own subagent session. `/unipi:graph history` and `/unipi:swarm history` list past graphs, and a new graph can reuse results a finished one selected. (UNI-279, UNI-280)
|
|
174
|
+
- The UniPi app's Progress sheet shows finished and past graphs with their chart. It adds each step's details, its full result and its subagent session, plus Stop graph and a picker for earlier runs. The app can also open any subagent's transcript. (UNI-282)
|
|
175
|
+
- Goal: the next continuation is saved before it is sent. If pi crashes, the next start sends it again, up to 2 times, then pauses the goal. A completion claim while the todo list still has open items gets a task reminder first, up to 2 times. (UNI-283)
|
|
176
|
+
|
|
177
|
+
### Fixed
|
|
178
|
+
- `/unipi:ralph start` from an empty prompt started the loop but never ran the first iteration. (UNI-283)
|
|
179
|
+
- After a restart, `ralph_done` failed with "no active loop". Prompts and tools also pointed the model at the wrong task-file path. (UNI-283)
|
|
180
|
+
- Stopping a ralph loop with `/unipi:regular` left its goal active, so the next `/unipi:goal` resumed the old checklist. (UNI-283)
|
|
181
|
+
|
|
182
|
+
## [3.0.0-alpha.40] — 2026-10-12
|
|
183
|
+
|
|
184
|
+
### Added
|
|
185
|
+
- Typing `/` in the UniPi app suggests every command pi has, and `/command ` suggests that command's arguments, the same as in the terminal. A command's replies now show in the chat under the command. (UNI-276)
|
|
186
|
+
- `/unipi:dream` suggests its subcommands (status, tray, report, run, stop, approve, reject).
|
|
187
|
+
- App search: the UniPi app can search the whole session by meaning (word forms, typos, phrases) and jump to a match. (UNI-275)
|
|
188
|
+
- Memory: the first session that finds 2.x memories asks once whether to convert them. (UNI-272)
|
|
189
|
+
- Upgrade guide from 2.20 to 3.0: `docs/guide/upgrade-3.0.md`. (UNI-272)
|
|
190
|
+
|
|
191
|
+
### Changed
|
|
192
|
+
- `/unipi:visualize-progress` is calmer: one title, one bar, smaller boxes and the three newest log lines. When Goal mode is on but no goal has started yet, it says so instead of "No long-horizon mode active". (UNI-274)
|
|
193
|
+
|
|
194
|
+
### Fixed
|
|
195
|
+
- `/unipi:ralph <text>` + Enter no longer clears the text. (UNI-277)
|
|
196
|
+
- `/unipi:goal`, `/unipi:swarm`, `/unipi:graph` and `/unipi:ralph` prompts (and `resume`) sent while the agent was working were silently dropped. They now run when the current turn ends. (UNI-276)
|
|
197
|
+
- `/unipi:summarize` no longer freezes the input for the whole summary, and queues itself instead of refusing while the agent works. `/unipi:goal status` (the progress estimate), `/unipi:kanboard open|status|doctor` and `/unipi:memory-forget` run in the background, and `/unipi:session-recall` sent mid-run waits for the turn to end. (UNI-276)
|
|
198
|
+
- Updater: an alpha install that is offered 3.0.0 stable now installs it, instead of reinstalling the alpha. (UNI-272)
|
|
199
|
+
|
|
200
|
+
## [3.0.0-alpha.39] — 2026-10-11
|
|
201
|
+
|
|
202
|
+
### Added
|
|
203
|
+
- UniPi app: switch a session's working mode from the app. The app sees the current mode and changes it live (`none` returns to regular mode; another work mode is entered without a prompt). A mode switch is refused while another paused task already holds the park slot.
|
|
204
|
+
- Long-horizon: new `unipi:lh-mode` runner used for that switch.
|
|
205
|
+
|
|
206
|
+
## [3.0.0-alpha.38] — 2026-10-11
|
|
207
|
+
|
|
208
|
+
### Fixed
|
|
209
|
+
- Dream: "Run now" (`/unipi:dream run`) failed instantly. The published `memory` and `ask-user` packages were missing files, so Dream's background run could not load. Both packages now ship complete, and a failed Dream run shows the actual error.
|
|
210
|
+
- Release check added: a package is not released if one of its files imports a file the package does not ship.
|
|
211
|
+
|
|
212
|
+
## [3.0.0-alpha.37] — 2026-10-11
|
|
213
|
+
|
|
214
|
+
### Added
|
|
215
|
+
- `/unipi:visualize-progress`: **chart mode.** In terminals that show images (Kitty graphics), the run's steps or swarm are drawn as the same chart the UniPi app shows, above the log, and redrawn live as the run moves. Press `m` to switch between chart and text. Other terminals keep the text view, and the footer says why the chart is off. (UNI-258)
|
|
216
|
+
- `/unipi:doctor` reports whether the Microsoft Visual C++ runtime that web reads need on Windows is installed. (UNI-261)
|
|
217
|
+
|
|
218
|
+
### Fixed
|
|
219
|
+
- Windows: a missing Visual C++ runtime no longer stops UniPi from loading. Web reads fall back to plain fetch; the README says how to install the runtime. (UNI-261)
|
|
220
|
+
- The updater stays on the release channel you installed from. An alpha install checks for newer alphas, never offers an older version (such as the stable 2.x), installs from the same channel, and shows that channel's changelog. (UNI-262)
|
|
221
|
+
|
|
222
|
+
## [3.0.0-alpha.36] — 2026-10-11
|
|
223
|
+
|
|
224
|
+
### Added
|
|
225
|
+
- `dream` (new package, **off by default**): Dream reviews your past sessions in the background, turns repeated false paths into memory lessons and proposes skills and checks for you to approve or reject. `/unipi:dream` shows its state (`/unipi:dream run` starts one now), and `/unipi:settings` → Dream turns it on; the work tray gets a Dream tab (runs, live detail, report, approve/reject, stop, run now) that stays hidden while Dream is off and has no history. The UniPi app gets a Dream sheet. (UNI-118)
|
|
226
|
+
- **One work tray** for background tasks and subagents: press ↓ on an empty input (or Shift+↓, `/unipi:bg-tasks`, `/unipi:subagents`) and switch tabs with ←/→. The Background tasks tab now looks like the Subagents tab, and nothing is drawn under the editor while the tray is closed. (UNI-126)
|
|
227
|
+
- `/unipi:visualize-progress`: a live view of a long-horizon run — steps, spinners, progress bars and the log in one fixed layout. The UniPi app can show the same view. (UNI-222)
|
|
228
|
+
- `kanboard`: the kanboard daemon serves the UniPi app's web build, so the board and the app share one frontend. (UNI-117)
|
|
229
|
+
- `app-bridge`: features for UniPi app 0.4.x — pi's own queue can be edited from the phone (Stop puts it back in the composer), file links in chat are checked against the PC (session folder, home, and safe roots such as `/tmp`, `/var/tmp`, `/mnt`, `/media`, `/srv`, `/opt`), Dream and progress views, and the Fusion preset follows model changes. (UNI-202, UNI-204, UNI-211, UNI-220, UNI-176)
|
|
230
|
+
|
|
231
|
+
### Changed
|
|
232
|
+
- One "Working…" state while background tasks or subagents that can wake the agent are still running: the footer and the app show waiting instead of idle, and notify sends a single "All done" when everything has finished. (UNI-162, UNI-221)
|
|
233
|
+
- Long-horizon modes (`/unipi:<mode>`) stay on until you switch or the run that owns them settles. (UNI-165)
|
|
234
|
+
- Autocomplete offers every registered `/unipi:*` command, including `/unipi:visualize-progress` and `/unipi:dream`; commands missing from the curated list are no longer dropped.
|
|
235
|
+
- Omniroute-specific code is gone; the judge picks models from pi's own model registry. (UNI-249)
|
|
236
|
+
- All spinners share one animation tick instead of one timer per card. (UNI-133)
|
|
237
|
+
|
|
238
|
+
### Fixed
|
|
239
|
+
- `notify`: one "finished" notification per run, not one per chat change. (UNI-223)
|
|
240
|
+
- `app-bridge`: "after it ends" items are always delivered once pi is really idle — exactly once and in order; an item pi doesn't take is restored, and a phone Stop doesn't send it early. (UNI-212, UNI-223)
|
|
241
|
+
- `app-bridge`: editing a queued message from the phone no longer loses messages. (UNI-202)
|
|
242
|
+
- Side questions (`btw`) keep streaming after the phone reconnects. (UNI-219)
|
|
243
|
+
- Typed `/commands` show as normal messages, and the hidden `/unipi-app-session` command never appears in the terminal, the session or the app. (UNI-251)
|
|
244
|
+
- `app-bridge`: the session tree works on very long sessions (no stack overflow, reply fits one socket line). (UNI-194)
|
|
245
|
+
- `memory`: MemPalace RAM use is bounded per session and over time. (UNI-179)
|
|
246
|
+
- `fusion`: the shell-delegation nudge no longer counts read-only commands it used to misread — kanboard CLI calls, quoted `|`/`;`/`>` in grep/echo patterns, and `$VAR` command heads assigned earlier in the same line. (UNI-108)
|
|
247
|
+
- The root package no longer lists a removed `packages/subagents/prompts` mount.
|
|
248
|
+
|
|
249
|
+
## [3.0.0-alpha.35] — 2026-10-08
|
|
250
|
+
|
|
251
|
+
### Added
|
|
252
|
+
- `notify`: **end-to-end encrypted phone push.** With the per-pairing key the UniPi host creates (`~/.unipi/app-host/notify-key`), app pushes are sealed with AES-256-GCM (`unipi1:` envelope): the ntfy server — now self-hosted — only sees a neutral "UniPi" title and ciphertext; the deep link carries no content. Without a key nothing changes. Pushes also go to the phone's registered UnifiedPush endpoints. (UNI-161)
|
|
253
|
+
|
|
254
|
+
## [3.0.0-alpha.34] — 2026-10-08
|
|
255
|
+
|
|
256
|
+
Everything the UniPi phone app (unipi-app 0.3.0) needs from pi.
|
|
257
|
+
|
|
258
|
+
### Added
|
|
259
|
+
- `app-bridge`: **session navigation from the phone** — list sessions (this project / all), the session tree, new / resume / fork / jump to any message (with an optional summary of the branch you leave), rename. Busy pi answers `busy` so the phone can offer "stop the current run first". (UNI-158)
|
|
260
|
+
- `app-bridge`: **send modes** — steer, send now (stops the run, then sends) and "after it ends" in the bridge's own queue: editable, re-orderable, removable, promotable. (UNI-159)
|
|
261
|
+
- `btw`: a UI-free API so side questions can be asked and streamed from the phone; pages are shared with the terminal panel. (UNI-159)
|
|
262
|
+
- `app-bridge`: **media** — phone photos (inline or uploaded through the host), agent images as thumbnails / fetched on tap, `details.attachments[]`, tappable file paths (`file_share`, session cwd only). (UNI-157)
|
|
263
|
+
- `app-bridge`: **session control centre** — Fusion picker read/apply, running work (background tasks, subagents, sidekick) with logs and stop, live context/cost/tps stats and `/unipi:info` cards. `fusion`, `subagents` and `footer` expose small shared accessors for it. (UNI-160)
|
|
264
|
+
- `app-bridge`: "needs you" — the discovery record says when a session waits on you (open question, or finished and not seen); every dialog kind and ask_user action works from the phone. `notify`: ntfy messages carry an app deep link and kind tag (`appDetail` minimal/full) and also post to registered app endpoints. (UNI-161)
|
|
265
|
+
- `app-bridge`: `@` file suggestions answered by pi's own finder.
|
|
266
|
+
|
|
267
|
+
### Fixed
|
|
268
|
+
- `app-bridge`: the phone's "Sending…" bubble never sticks — extension commands ack as commands, `input` events carry the phone's ref, every `ui.notify` reaches the phone. (UNI-143)
|
|
269
|
+
- `app-bridge`: new / resume / fork no longer leave the phone on the old session (the outgoing bridge sends `reconnect` and frees the socket).
|
|
270
|
+
- `app-bridge`: the phone's model list follows the terminal picker (scoped, Fusion curated, current, your providers) instead of the first 400 of a huge env-key catalogue.
|
|
271
|
+
|
|
272
|
+
## [3.0.0-alpha.33] — 2026-10-07
|
|
273
|
+
|
|
274
|
+
### Added
|
|
275
|
+
- `app-bridge`: **history paging.** The phone gets the newest part of a session when it opens a chat (about 256 KB) and loads older history page by page as you scroll up (`history{before}`), down to the start of the conversation, past compactions. (UNI-113)
|
|
276
|
+
|
|
277
|
+
## [3.0.0-alpha.32] — 2026-10-07
|
|
278
|
+
|
|
279
|
+
### Fixed
|
|
280
|
+
- `app-bridge`: long sessions no longer fail to open on the phone with "hello message too large". Run logs inside tool and custom-message details (sidekick event lists, diffs) are dropped from what the phone gets, and the history is sized in UTF-8 bytes with room left for the command and model lists. (UNI-113)
|
|
281
|
+
|
|
282
|
+
## [3.0.0-alpha.31] — 2026-10-07
|
|
283
|
+
|
|
284
|
+
### Added
|
|
285
|
+
- `app-bridge` (new module): **the UniPi phone app can chat with a pi running in herdr, live in both directions.** Each pi listens on `~/.unipi/bridge/<pid>.sock` (owner-only) and keeps `~/.unipi/bridge/<pid>.json` current (session file, cwd, herdr pane), so `unipi-host` can find the pi behind a herdr pane. The phone sees text, thinking, tool calls and unipi events as they stream, and what you send from the phone shows in the TUI as a normal message (it steers while pi works, or waits until it finishes). `/model`, `/thinking` and `/compact` work from the phone. TUI mode only; off in subagent children and with `UNIPI_APP_BRIDGE=0`. (UNI-113)
|
|
286
|
+
- Dialogs (`select`, `confirm`, `input`, `editor`) can be answered from the phone: the TUI dialog and the phone race, the first answer wins and the other side closes. (UNI-113)
|
|
287
|
+
- `ask_user`: answerable from the phone, including options that end the turn or start a new session; a phone answer closes the TUI panel. (UNI-113)
|
|
288
|
+
|
|
289
|
+
## [3.0.0-alpha.30] — 2026-10-05
|
|
290
|
+
|
|
291
|
+
### Changed
|
|
292
|
+
- `watchdog`: **on by default, for bash calls only.** A bash call that still looks stuck after the first check (2 min) is handed to a background task, never killed by default; background tasks and other tools stay unwatched unless you turn them on. (UNI-107)
|
|
293
|
+
- `watchdog`: bash calls are judged by process activity (no CPU, disk or output on two checks), a jev "will it finish on its own?" score on two checks in a row, or jev expecting the command to take seconds; a time limit written in the command (`timeout N`, `sleep N &&`, a bounded `seq … sleep` loop) holds every trigger off until it passes. Checks every 3 min after the first at 2 min. On a 20-case holdout: 9/10 stuck caught, 0/10 false (majority of 3 jev runs). Detached bash cards show `→ background task <id>` instead of an exit footer. (UNI-107)
|
|
294
|
+
- `watchdog`: a bash call that looks stuck is no longer killed by default: the call returns to the agent at once with the output so far, and the command keeps running as a background task the agent can check (`bg_logs`) or stop (`bg_kill`); its completion wakes the agent as usual. New watchdog action `background` (the default; `kill` and `warn` stay available) and `/unipi:bg-detach [reason]` to send the running bash call to the background by hand. (UNI-107)
|
|
295
|
+
- `kanboard`: agents can unblock tasks to Todo or resume a blocked task through `start`, with the usual claim and session limits. (UNI-105)
|
|
296
|
+
- `kanboard`: unblocking and review rework no longer require a description; empty notes produce clean activity text. (UNI-106)
|
|
297
|
+
- `kanboard`: agent-created labels must reuse existing project labels unless `--new-label` explicitly allows a new one; matching preserves stored spelling. (UNI-100)
|
|
298
|
+
- `kanboard`: removed the board's Task defaults tab and legacy Blocking setting, preserving the other board settings. (UNI-101)
|
|
299
|
+
- `kanboard`: `/unipi:kanboard show <lane>` filters the chat board, with lane and `--all` argument autocomplete. (UNI-102)
|
|
300
|
+
- `background-tasks`: launch and completion notices use width-fitted one-line chips in every render style; expanded views retain command, output and task details. (UNI-103)
|
|
301
|
+
- `compactor`: `/unipi:compact-then <prompt>` compacts before continuing, preserving next-turn versus after-run queue behavior while streaming. (UNI-104)
|
|
302
|
+
- `utility`: **warnings share one collapsed shape.** Harness warning panels (Progress guard, watchdog, Kanboard unfinished-task, …) render label + synopsis + `Ctrl+O: full message (N rendered rows)` in regular/advanced; simple mode compresses them to the single label line (`▏ ⚠ UniPi · Source · Title`). Expanded views add the body; the advanced origin footer is dropped for warnings. Tool-result annotations with `severity: "warning"` (Fusion edit/shell nudges, Kanboard R1 reminder) trade the old plain two-line header for the same rail+fill panel — in simple mode just one rail line under the tool row.
|
|
303
|
+
|
|
304
|
+
### Fixed
|
|
305
|
+
- `fusion`: the shell-delegation nudge no longer re-arms on every new prompt (the reason it kept reappearing after each prompt). It now fires at most once per handoff gap: after a nudge, only a completed `sidekick`/`read_subagent` handoff re-arms it. The per-prompt streak reset stays, so a carried-over count still cannot fire early. Synopsis reads "Non-trivial shell work since last handoff" again — which is now literally true. (follow-up to UNI-87)
|
|
306
|
+
|
|
307
|
+
## [3.0.0-alpha.29] — 2026-10-04
|
|
308
|
+
|
|
309
|
+
### Fixed
|
|
310
|
+
- `notify`: prompts that send no event of their own (third-party `ask_user` tools, the permission prompt, the plan review) can notify through the new **Input Needed** event (`input_needed`, off by default); closing any prompt now stops its reminders. (GitHub #38)
|
|
311
|
+
|
|
312
|
+
## [3.0.0-alpha.28] — 2026-10-04
|
|
313
|
+
|
|
314
|
+
### Changed
|
|
315
|
+
- `utility`: **`/unipi:summarize` re-summarizes the last reply**, with the session as context. The command sends only `/skill:summarize`, plus any text you add, which reaches the skill as your question ("what would it change?" now asks about the last reply). It no longer wraps your text in a "summarize this session" prompt.
|
|
316
|
+
|
|
317
|
+
## [3.0.0-alpha.27] — 2026-10-04
|
|
318
|
+
|
|
319
|
+
### Added
|
|
320
|
+
- `core`: 4 new Unicrab hints for the footer changes — three what's-new tips (tokens and cost under the input, the Footer settings, the responsive drop) and a setting hint for `footer.rainbow`.
|
|
321
|
+
- `footer`: **Glance settings** — the stats strip under the input, the frame badges and the rainbow are configurable in `/unipi:settings` → **Footer**: per-part strip toggles (`strip.turns`, `strip.time`, `strip.speed`, `strip.tokens`, `strip.cost`, `strip.compactions`, `strip.cache`), a **Rainbow** mode (`always` / `brand-only` / `off`), the background-task line (`processLine`), and badge toggles (`badges.mode`, `badges.planPermission`, `badges.fusion`, `badges.kanboard`).
|
|
322
|
+
- `footer`: **session tokens and cost in the stats line** — `↑12.3k in · ↓4.1k out` and `$1.23` (`sub` on subscription models); sums skip failed/aborted replies.
|
|
323
|
+
- `footer`: **responsive to the terminal** — narrow widths drop stats parts by priority (compactions → cache → time → turns → speed → cost → tokens) whole instead of truncating mid-part, and the frame degrades its badges (kanboard → fusion → plan/permission → mode) before the branch or model truncate; below 20 terminal rows the stats and task lines hide while the frame stays.
|
|
324
|
+
|
|
325
|
+
- `workflow`: **plan reviews in two parts** — plans have a `## Summary` for the approver and an `## Implementation` for whoever builds it; the review overlay shows them side by side at 120+ columns (Tab switches pane) and stacked on narrower terminals.
|
|
326
|
+
|
|
327
|
+
### Changed
|
|
328
|
+
- `workflow`: **plan mode is no longer read-only by allowlist** — research, memory, subagents and read-only shell run as normal; only writes outside the plan file, `docs/plans/` and temp dirs are blocked (in every permission mode), and state-changing shell asks first (skipped in `full`).
|
|
329
|
+
- `workflow`: **plan with the user before submitting** — the plan-mode prompt asks the model to settle shaping decisions with `ask_user`; `plan_submit` refuses while `### Open questions` lists items or when the plan is unchanged since "Keep planning", and Approve/Discard end the turn.
|
|
330
|
+
- `fusion`: the lead's shell-delegation nudge counts per request (it no longer fires at the start of a new prompt) and treats piped read-only commands (`grep … | head`, `2>&1`) as trivial.
|
|
331
|
+
|
|
332
|
+
### Removed
|
|
333
|
+
- `footer`: the **classic segment renderer** — presets, separators, segments, `/unipi:footer-help` and their settings (`preset`, `separator`, `zoneSeparator`, `showFullLabels`, `groups`, `glanceMode`) are gone; the glance frame is the only footer. Old keys in existing config files are ignored. `enabled: false` gives the plain pi editor.
|
|
334
|
+
|
|
335
|
+
### Changed (footer)
|
|
336
|
+
- `footer`: the **Color mode** setting now offers `auto` / `truecolor` / `256` / `none` (the hub previously offered `mono`, which the footer silently treated as `auto`; stored `mono` values load as `none`).
|
|
337
|
+
- `footer`: the 1-second refresh no longer replays the whole session branch — the scan is incremental (full rescan on branch change or compaction), the stats read a cached snapshot instead of walking the branch per paint, settings loads are memoized, and the redraw fires only when something displayed changed.
|
|
338
|
+
- `core` / `autocomplete`: `/unipi:footer-help` command entries removed.
|
|
339
|
+
|
|
340
|
+
### Fixed
|
|
341
|
+
- `footer`: the MODULE_READY announcement now reports the package version instead of a hard-coded `0.1.0`.
|
|
342
|
+
|
|
343
|
+
### Docs
|
|
344
|
+
- README: the glance-footer caption names tokens, cost and the responsive fit; a new What's new row for alpha.27 (classic footer removed).
|
|
345
|
+
|
|
346
|
+
## [3.0.0-alpha.26] — 2026-10-04
|
|
347
|
+
|
|
348
|
+
### Fixed
|
|
349
|
+
- `fusion`: the "Non-trivial shell work since last handoff" nudge fires at most once per agent run instead of repeating on every 4th non-trivial shell command; a sidekick handoff still resets the streak but no longer re-arms the nudge, and a new prompt arms it again. (UNI-87)
|
|
350
|
+
- `long-horizon`: mode-control tools are now truly OFF in pi's active tool set outside their mode (previously registered/active and only hidden from the provider payload), so pi's tool snippets and other modules no longer see them. Fresh and resumed sessions start with them off; resolving into a mode (command, judge, or active owner) turns that mode's tools on. (UNI-90)
|
|
351
|
+
- `info-screen`: scope order now reads biggest first — footer legend `g global p project s session`, Compactor savings tiles global → project → session, Memory tiles global → project → share.
|
|
352
|
+
- `info-screen`: Skills page tags each source with its real scope (`g` for user/agents/unipi/package skills, `p` for project skills) instead of implying session scope; the Tools page's tool list is tagged `s` (the active set is per session).
|
|
353
|
+
- `info-screen`: Usage page leaves one blank line between the model share bar and the ranked model rows.
|
|
354
|
+
|
|
355
|
+
## [3.0.0-alpha.25] — 2026-10-04
|
|
356
|
+
|
|
357
|
+
### Added
|
|
358
|
+
- `info-screen`: **Unicrab splash** at startup — the existing Unicrab half-block art, a shimmering block wordmark with version chip, greeting, how fast Pi got ready, and live facts (resumed session totals or cwd/branch, today's spend from the cached snapshot, update available), with a draining countdown edge. Non-capturing and stack-safe in `auto-close` mode. Replaces the boot-time dashboard; the hints start-screen header is unchanged. (UNI-78)
|
|
359
|
+
- `info-screen`: redesigned **`/unipi:info`** dashboard — opaque panel coloured per page, pill tab strip, fixed body height, page dots, `1`–`9` jump, `/unipi:info <page>`. Pages draw themselves with a new Unicode toolkit, no emoji. (UNI-79)
|
|
360
|
+
- **This session** (first page): cost / tokens / replies / time in 3-row gradient digits, context meter, token mix + cache hit, tokens-per-reply braille chart, ranked tools with failures, directory/branch/files/compactions. (UNI-80)
|
|
361
|
+
- **Usage**: today / week / month spend, 30-day column chart with Monday ticks, model share bar + ranked models. (UNI-81)
|
|
362
|
+
- **Tools / Skills / Modules**: live from pi (`getAllTools`, `getCommands`), source share bars, column grids, active vs. off; modules with versions and measured load time. (UNI-82)
|
|
363
|
+
- **MCP, Compactor, Updates, Web, Memory, Keys**: status dots, compaction before→after bars, version track, provider × capability matrix, memory types, keycaps. (UNI-83)
|
|
364
|
+
- `core`: `viz` kit (`Paint`, `bigText`, `gradient`, `spark`, `columns`, `brailleArea`, `gauge`, `shareBar`, `chip`, `grid`, …) — every piece returns exact-width lines in truecolor or 256-colour. (UNI-77)
|
|
365
|
+
- `scripts/info-preview`: print the splash and every page at any width without Pi.
|
|
366
|
+
- `info-screen`: **scope tags** `s` session / `p` project / `g` global on every scoped number (legend in the footer); project pages (memory, mcp, compactor) are cached per workspace, so one project's numbers never show in another. MCP servers show whether they come from global or project config. (UNI-91)
|
|
367
|
+
- `info-screen` / `core`: **compaction savings** — tokens not re-sent (saved × replies after each compaction) and ≈ money not spent at the context rate actually paid, for the session, the project and all projects (`core/src/compaction-savings.ts`; the usage parser collects it per session file). Compactor page: savings tiles, without-vs-with bars, per-compaction timeline. (UNI-92)
|
|
368
|
+
- `core`: 37 new Unicrab hints (127 in total). Catch-up tips for what shipped since the hints release — `/unipi:summarize`, `/unipi:info`, `/unipi:regular`, `Ctrl+O` in simple mode, **E**/**M** in `/unipi:skills`, the splash setting, the `s`/`p`/`g` tags — and 8 "what's new" tips tied to alpha.22–alpha.25 (shown once after you update). Eight new lore lines.
|
|
369
|
+
- `core`: **moment hints** — Unicrab reacts once a session to a late-night turn, 50 clean tool calls in a row, an `rm -rf`, a force push, a 40k+ character write, a ≥95% cache-hit reply, a finished goal, a deleted memory, new MCP tools and a ralph lap. The hint-count test is gone; only the "every named command exists" check stays.
|
|
370
|
+
- `long-horizon`: the owner-changed event now carries `reason` when an owner finishes.
|
|
371
|
+
- `info-screen`: **context breakdown** on This session — a bucket split into system prompt, tool schemas, your prompts, replies, tool results and summaries (from what pi will send next), window gauge on its edge, heaviest tool outputs. (UNI-93)
|
|
372
|
+
|
|
373
|
+
### Changed
|
|
374
|
+
- `info-screen`: Usage chart labels its peak and today over the bars with a real date axis; one model → one line; model bars are true shares. (UNI-94)
|
|
375
|
+
- `info-screen`: Modules page shows what each module adds (tools, commands, settings, keys — recorded exactly by `packages/unipi` during load) instead of millisecond bars; load time is flagged only past 20 ms. (UNI-95)
|
|
376
|
+
- harness: prompts that UniPi sends for you (`/unipi:goal`/`ralph`/`swarm`/`graph` kickoffs, `/unipi:summarize`, `/unipi:answer`, the compactor follow-up, the ask-user handoff) render as a UniPi harness panel instead of a plain user message. The skills reveal names the skills in simple mode and lists them in advanced mode. (UNI-88, UNI-89)
|
|
377
|
+
- `info-screen`: `bootMode` / `bootTimeoutMs` now control the splash (default 2.5 s). `groupOrder` and per-page show/hide are honoured and re-read when the dashboard opens. Duplicate tab priorities fixed by one page-style table.
|
|
378
|
+
|
|
379
|
+
### Docs
|
|
380
|
+
- README: new **See your session** section with screenshots of the splash and the dashboard (demo data), a **What's new** table for the recent releases, and two new rows in "Why UniPi". The Info Screen README explains the context bucket and how compaction savings are counted.
|
|
381
|
+
- `scripts/info-preview/demo.ts`: demo session and history for screenshots — no real paths or spend.
|
|
382
|
+
|
|
383
|
+
### Performance
|
|
384
|
+
- `info-screen`: page data is saved to `~/.unipi/cache/info-screen.json`, so the dashboard opens filled; page bodies are memoised; the session page walks the transcript once per new entry. Usage refresh on a 1,500-session history went from ~190 ms to ~35 ms warm (in-memory parser cache, debounced cache writes, no per-record string keys). (UNI-84)
|
|
385
|
+
|
|
386
|
+
## [3.0.0-alpha.24] — 2026-10-04
|
|
387
|
+
|
|
388
|
+
### Added
|
|
389
|
+
- `utility`: bundled **`summarize` skill** — the default shape for the agent's final reply after work: a one-sentence answer, numbered sections that open with a bold takeaway, optional mermaid diagram for 3+ step flows, "Problems and fixes", "Not verified", "Still open", and typed questions (`Q1 (pick one)` / `(pick any)` / `(your answer)`, a recommendation only when the work gives a reason). A level gate matches the user's technical depth. Skipped when the user asks for full detail or raw output. Tuned against `ds/deepseek-flash` in a blind A/B arena over 12 real long-session turns.
|
|
390
|
+
- `utility`: **`/unipi:summarize [focus]`** — asks the agent for that summary of the session now (expands `/skill:summarize`, so the skill is always applied; waits for the turn in print mode).
|
|
391
|
+
- `skill-registry`: bundled skills can be **must show by default** (`DEFAULT_MUST_SHOW`, currently `summarize`), with the proxy on or off. A scope can still clear **M** or **E** in `/unipi:skills`.
|
|
392
|
+
|
|
393
|
+
## [3.0.0-alpha.23] — 2026-10-04
|
|
394
|
+
|
|
395
|
+
### Added
|
|
396
|
+
- `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)
|
|
397
|
+
- 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.
|
|
398
|
+
|
|
399
|
+
### Changed
|
|
400
|
+
- `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)
|
|
401
|
+
- settings: shorter labels (explanations moved into descriptions), and pruned knobs —
|
|
402
|
+
- `background-tasks`: removed `defaultTimeoutSeconds` (nothing read it).
|
|
403
|
+
- `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`.
|
|
404
|
+
- `memory`: `recallAtStart` + `wakeUp` merged into one **Recall at start** enum (`off`/`reminder`/`wake-up`); stored booleans migrate per scope.
|
|
405
|
+
- `permission`: removed `jevJudge` — auto mode always consults jev.
|
|
406
|
+
- `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`).
|
|
407
|
+
- `image`: custom endpoint fields moved into per-tool **Custom endpoint…** pages (summary shows `off` or the host).
|
|
408
|
+
- `web-api`: Smart fetch section is advanced; `os`/`batchConcurrency` removed from the schema (engine defaults remain).
|
|
409
|
+
- `kanboard`: reorganized into Agent / Housekeeping / **Board server** (advanced, plus open/stop/rotate-token actions); dead `blocking` setting deleted.
|
|
410
|
+
|
|
411
|
+
### Docs
|
|
412
|
+
- README: dropped the "Why we have it" column from the Proof table.
|
|
413
|
+
|
|
414
|
+
## [3.0.0-alpha.22] — 2026-10-03
|
|
415
|
+
|
|
416
|
+
### Changed
|
|
417
|
+
- `utility`: harness annotations (e.g. the Fusion "delegate shell work" nudge) render once in simple mode instead of three rows.
|
|
418
|
+
- `utility`: simple mode hides tool-result images until Ctrl+O; images no longer overlap the text below them in any render style. (UNI-71)
|
|
419
|
+
- `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)
|
|
420
|
+
- `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`.
|
|
421
|
+
- `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)
|
|
422
|
+
- `long-horizon`: `/unipi:regular` and goal stop update the footer mode immediately. (UNI-66)
|
|
423
|
+
|
|
424
|
+
### Docs
|
|
425
|
+
- v3 docs rewritten in plain controlled English (README, package READMEs, guide, reference, architecture, Unicrab story), with screenshots.
|
|
426
|
+
|
|
427
|
+
## [3.0.0-alpha.21] — 2026-10-03
|
|
428
|
+
|
|
429
|
+
### Added
|
|
430
|
+
- `core`: **Hints** system with pixel-crab mascot **Unicrab** (UNI-27).
|
|
431
|
+
- Startup header banner featuring 22×10 (≥72 cols) and 14×6 (40–71 cols) truecolor half-block Unicrab pixel art, letter-colored wordmark, and random lore.
|
|
432
|
+
- Single-row hint widget above the editor with a 7-column half-block mascot in truecolor/256-color (or opt-in Kitty image mode).
|
|
433
|
+
- Keyboard shortcuts: `Alt+H` for next startup hint (cycle pool: non-learned startup hints least-shown first), `Alt+Shift+H` for session hint history navigation.
|
|
434
|
+
- `/unipi:hint`: hub-kit overlay browser grouped by category with seen/unseen/learned tags and live filter; `/unipi:hint next` and `/unipi:hint reset`.
|
|
435
|
+
- Derived event triggers: `hints:context-high` (≥70% usage on turn_end), `hints:long-bash` (≥30s bash tool execution), `hints:tool-errors` (3 consecutive errors), `hints:long-prompt` (≥800 chars or 3+ paragraphs), `hints:remember`, and `hints:image-input`.
|
|
436
|
+
- Usage-aware learning (`teaches`), whatsnew version checks, startup maxShows (3), event maxShows (2), per-session event cap (4), and single-turn no-replace rules.
|
|
437
|
+
|
|
438
|
+
### Changed
|
|
439
|
+
- `core`: onboarding tips renamed to hints; `/unipi:tips-reset` → `/unipi:hint reset`; settings moved to the `hints` namespace; old tip counts are not carried over. Default `auto` mascot mode uses half-blocks; Kitty image mode is opt-in.
|
|
440
|
+
|
|
441
|
+
## [3.0.0-alpha.20] — 2026-10-02
|
|
442
|
+
|
|
443
|
+
### Added
|
|
444
|
+
- `kanboard` (board UI): **Dashboard** command center — greeting header with waiting/agents/ready/done-7d stats and a 14-day throughput spark; a per-project "Needs you" inbox (Approve / Rework / Answer inline, j/k/Enter, 3 rows per project + 10 overall, `+N more` / `Show fewer`, Expand all / Collapse all, oldest-wait on collapsed groups); project cards; live agents; up next; and an activity timeline that folds a task's quick steps into one trail. Expand/collapse animate. Backed by `GET /api/dashboard`. (UNI-67)
|
|
445
|
+
- `kanboard`: archive projects from the sidebar's right-click menu into an **Archived** section. (UNI-51)
|
|
446
|
+
- `kanboard`: labels — create or pick labels in the task form; each label gets a stable hash colour. (UNI-60)
|
|
447
|
+
- `kanboard`: task owner — tasks record "Created by agent / user" automatically; read-only. (UNI-59)
|
|
448
|
+
- `kanboard`: undo toast for moves that are hard to reverse (e.g. dragging to Cancelled, or In Review → Done); cancelled tasks stay final and offer **Recreate task** (right-click), which opens Add Task prefilled with the add-task fields only. (UNI-57)
|
|
449
|
+
|
|
450
|
+
### Changed
|
|
451
|
+
- `kanboard` CLI: bare `list` shows only the active lanes (todo, in progress, blocked, in review, done); `--all` adds backlog, cancelled and archived. (UNI-62)
|
|
452
|
+
- `kanboard`: a user can move a Blocked task straight to Done. (UNI-63)
|
|
453
|
+
- `kanboard` (board UI): clicking outside the create/edit task form no longer closes it and discards input. (UNI-61)
|
|
454
|
+
- render: harness-origin messages (reminders, nudges, kickoffs) are styled as source-labelled violet/slate panels in every render style, while the model-facing text is unchanged. (UNI-53)
|
|
455
|
+
- `memory`: the save-pass card shows humanized token counts with explicit cache read/write labels. (UNI-56)
|
|
456
|
+
|
|
457
|
+
### Fixed
|
|
458
|
+
- `kanboard`: titles containing `"` no longer gain an extra backslash on every save. (UNI-58)
|
|
459
|
+
|
|
460
|
+
## [3.0.0-alpha.19] — 2026-10-01
|
|
461
|
+
|
|
462
|
+
### Added
|
|
463
|
+
- `subagents`: completed subagent steps stream into the lead transcript as delegated panels — a live `subagent-step` entry per step (foreground and background runs) renders in the shared UNI-2 rail style alongside the existing status card, grouped per subagent.
|
|
464
|
+
|
|
465
|
+
### Changed
|
|
466
|
+
- render: the delegated-work panel (bright cyan `▏` rail on a single dark-cyan fill) moved into a shared `utility` helper used by both fusion sidekick steps and subagent steps; sidekick panels are grouped per handoff so a resumed handoff renders as its own panel instead of merging into the previous run.
|
|
467
|
+
|
|
468
|
+
### Fixed
|
|
469
|
+
- render: panel continuity survives pi's `CustomEntryComponent` host wrapper — group metadata is resolved through the wrapper and re-resolved every render, and nested card backgrounds are stripped instead of stacking inside the cyan fill.
|
|
470
|
+
- render: fixed the alpha.18 OOM in the simple style — the final result baked the `· Ns` runtime suffix into the tool meta, re-arming the invalidate loop on every re-render (unbounded heap growth and eventual SIGABRT); the duration is pinned once and appended at paint.
|
|
471
|
+
|
|
472
|
+
## [3.0.0-alpha.18] — 2026-10-01
|
|
473
|
+
|
|
474
|
+
### Added
|
|
475
|
+
- `kanboard` (board UI): **Summarize** in the header runs a board-wide summary with an optional prompt; a task's **Resummarize** takes an extra note. (UNI-38)
|
|
476
|
+
- `memory`: save runs in a prefix-cache-matched side session (`saveMode`: side · reminder · off); the recall reminder is injected once per session/compaction, not re-added on /reload. (UNI-32)
|
|
477
|
+
- `subagents`: a live stat line per subagent — profile, model, duration, tool calls, tokens, cost — in all render styles. (UNI-26)
|
|
478
|
+
- `core`: onboarding tips — a least-shown tip at startup plus event tips after compaction and other moments; `/unipi:tips-reset` resets show counts. (UNI-27)
|
|
479
|
+
|
|
480
|
+
### Changed
|
|
481
|
+
- `input-shortcuts`: ALT+S chord rework — burst-based O(1) undo/redo; A appends to the stash, Y copies the last response, K adds the input to the kanboard backlog; the registers (0-9), cut and toggle-thinking keys are gone.
|
|
482
|
+
- `kanboard`: a task needs a title **or** a description — `displayTitle` is derived from the body everywhere; `captureToBacklog` API for other extensions. (UNI-42)
|
|
483
|
+
- `permission`: full mode no longer prompts on writes outside the workspace — everything short of deny rules runs. (UNI-40)
|
|
484
|
+
- render: sidekick steps use the active style's tool/prose format in a tinted rail, grouped like the lead's tree; one blank row between transcript blocks; simple mode gains a live tool timer and keeps ask_user answers. (UNI-2, UNI-43, UNI-24, UNI-39)
|
|
485
|
+
- `workflow`: `/unipi:plan` opens with a plain-language Summary for the approver. (UNI-28)
|
|
486
|
+
- `fusion`: sidekick effort is set in the `/unipi:model` fusion row — Space toggles the lead/sidekick target, applied live. (UNI-15)
|
|
487
|
+
|
|
488
|
+
### Removed
|
|
489
|
+
- `compactor`: removed `/unipi:compact-jev` and the jev compaction method — vcc and LLM compaction remain; a saved `method: jev` falls back to vcc.
|
|
490
|
+
- `compactor`: removed the deprecated `/unipi:compact`, `/unipi:lossless-compact` and `/unipi:compact-recall`. (UNI-23)
|
|
491
|
+
|
|
492
|
+
### Fixed
|
|
493
|
+
- `kanboard show`: width-safe board rows — CJK-aware budgets and truncation on every line; a huge blockedReason no longer crashes pi.
|
|
494
|
+
|
|
495
|
+
## [3.0.0-alpha.17] — 2026-09-30
|
|
496
|
+
|
|
497
|
+
### Added
|
|
498
|
+
- `kanboard`: **status reports** — task JSON carries `statusReport` (the full finish summary for In Review, the block reason for Blocked). The board panel shows it as a banner ("Ready for review" / "Blocked") with a markdown preview and an eye button that opens the whole report in a reader; timeline entries get Finished / Blocked / Rework tags and a Read button. (UNI-25, UNI-8)
|
|
499
|
+
- `kanboard`: **`--attach <file>`** on `finish`, `move` and `note` (repeatable): the file is stored beside the board and embedded in the comment; a path written in the comment is replaced by the embed. `attach` on a task this session started is free. (UNI-35)
|
|
500
|
+
- `kanboard` (board UI): **`@` task mentions** in the new-task description, the description editor and the comment box — recent tasks newest first, filter as you type, Enter/Tab inserts the id. (UNI-36)
|
|
501
|
+
|
|
502
|
+
### Changed
|
|
503
|
+
- `kanboard` (board UI): every activity entry renders as markdown; the "Runs after" picker lists the newest tasks first; the whole New task dialog accepts dropped files, with a drop overlay, and a stray drop no longer navigates the browser away. (UNI-5, UNI-36)
|
|
504
|
+
- `kanboard` skill: the finish / block comment is written as the report the user reads (lead sentence, short paragraphs or bullets, questions under **Need from you:**).
|
|
505
|
+
- `kanboard` (board UI): the Runner settings section is now Sessions; lane tooltips and the in-progress chip describe `start` / `finish` instead of the runner.
|
|
506
|
+
|
|
507
|
+
### Removed
|
|
508
|
+
- `kanboard` binary (phase 2 of the runner removal): the `claim-next`, `queue`, `unqueue` and `set-run` subcommands, the per-session queue and `UNIPI_KANBOARD_QUEUE_MAX`, `--strategy` / `--plan` on `add` and `edit`, strategy/plan in the API, task JSON and board settings (`defaultStrategy`, `defaultPlan`, `queueMax`), and the Strategy / Plan controls in the board UI. Old task files with `strategy:`, `plan:` or runner `run:` blocks still load and validate. Error and help text now describe `start` / `finish` / `move … blocked`. (UNI-37)
|
|
509
|
+
- `kanboard`: the unused `defaultStrategy`, `jevThreshold` and `defaultPlan` settings.
|
|
510
|
+
|
|
511
|
+
### Fixed
|
|
512
|
+
- `kanboard`: blank lines inside activity entries were dropped when the task file was written, gluing an agent's paragraphs and lists into one block; paragraph breaks now survive. (UNI-8)
|
|
513
|
+
- `kanboard`: a subagent or fusion sidekick shutting down released the lead's open claims back to Todo ("session ended mid-task"), because children inherit the lead's session id; shutdown release now runs in the lead only.
|
|
514
|
+
|
|
515
|
+
## [3.0.0-alpha.16] — 2026-09-30
|
|
516
|
+
|
|
517
|
+
### Added
|
|
518
|
+
- `core`: **turn arbiter** — one `agent_before_settle` decision point for the whole suite: nudge providers propose at most one continuation per settle (long-horizon owner 100 > kanboard claims 50 > autowork-next 40), wait sources (running bg wake, busy sidekick, background subagent) veto, outcome/pending/already-continuing short-circuit, providers are time-boxed and failure-proof, and everything lives behind a `Symbol.for` holder that is a no-op in child processes. Ships with `decideSettle`/`registerNudgeProvider`/`registerWaitSource`/`onSettleDecision` exports and tests.
|
|
519
|
+
- `core`: **evidence contributors** — `registerEvidenceContributor(name, fn)` + `gatherEvidence()` (each contributor time-boxed, a throw contributes nothing); `core` also gains `long-horizon-owner-status` and `kanboard-status` shared holders (same `Symbol.for` pattern as fusion status) for the footer and cross-module reads.
|
|
520
|
+
- `kanboard`: **monitor nudges** — a priority-50/40 provider that continues this session's own In Progress claims (`↻ UNI-30 still In Progress — continue, or finish/block it (n/5)`) and, in autowork, offers the next ready task; question heuristic (the agent asked something → notice only), stall guard after 2 idle nudged runs, hard caps (5 nudges/task, 3 offers/task), deference to an active long-horizon owner, notices when a goal stops paused/budget with claims open, and disarm on Esc. Notices are user-only custom entries plus a toast — never model context.
|
|
521
|
+
- `kanboard`: **transcript badges + footer `▣`** — successful lead `start`/`finish`/`move … blocked` append user-only entries (`▣ UNI-30 started`, `✓ UNI-30 → In Review`, `⊘ UNI-30 blocked: <comment≤80>`), and the glance title shows `▣ UNI-30`, `▣ UNI-30 +1`, `▣ autowork` or `▣ UNI-30 · autowork` from the shared status holder.
|
|
522
|
+
- `kanboard`: **session identity + resume notice + shutdown release** — the session id is now `pi-<pi session id>` (stable across `-c`/`-r`, children keep the inherited value); startup reaps claims whose pid died and notifies once (`UNI-30 was released when the last run ended — ask me to re-start it`); `session_shutdown` releases this session's open claims to Todo with `released: session ended mid-task (<session>)` (system actor — agents cannot release).
|
|
523
|
+
- `long-horizon`: **goal evidence contributors** — a goal completion claim is gathered against cross-module evidence first; any blocking item (e.g. an open kanboard claim) forces `not_met` with `missing` set, without paying for an evaluator call; non-blocking notes ride the evidence brief.
|
|
524
|
+
|
|
525
|
+
### Changed
|
|
526
|
+
- `kanboard`: **the session works board tasks itself — the runner is gone.** `/unipi:kanboard-do` now grants a budget: `doTasks` task slots (each `start` uses one) and `doWrites` board writes (add, edit, link, order, move backlog↔todo, note on tasks you don't hold); reads, `finish`, `move <ID> blocked --comment` and `note` on tasks this session started are always free; budgets persist across turns, `-do` tops up without stacking, and the doText states the pre-flight rule (need more tasks than slots → start nothing and ask). Settings `doTasks` (5) / `doWrites` (10) replace `doCredits` (a stored value migrates); `queueMax` is gone.
|
|
527
|
+
- `kanboard`: **autowork is a session mode** — `/unipi:kanboard-autowork start` lifts the budgets and the monitor keeps offering the next ready task in this session (any mode the agent chooses); `stop` turns the offers off without aborting the current turn; the same stall rule and a 3-offers-per-task cap end it with an `autowork done · N in review · M blocked` notice.
|
|
528
|
+
- `kanboard`: **children are read-only** — fusion sidekicks and subagents may read the board but every write is refused with "board writes are the lead's job — report this to the lead"; reminders are silent there too. R2 (turn-end follow-up) is removed — continuation is the monitor's job; R1 (start-before-edit steer) stays.
|
|
529
|
+
- `long-horizon`: **no owners inside children** — the gate resolves mode `none` (source `child`) without consulting the judge, and owner activation is refused with "do the work and report back to the lead"; escape hatch `UNIPI_LH_ALLOW_CHILD=1`. Continuation and ralph messages ride a one-slot nudge stash delivered by the arbiter (kickoff append-only; timer wakes stay direct sends); owner transitions publish to the shared status holder kanboard reads.
|
|
530
|
+
- `background-tasks` / `fusion` / `subagents`: register arbiter wait sources, so a pending wake, a non-blocking sidekick handoff or a running background subagent defers nudges until the event lands.
|
|
531
|
+
|
|
532
|
+
### Removed
|
|
533
|
+
- `kanboard`: the task **runner** and everything that served it — `queue`/`unqueue`/`claim-next`/`set-run` subcommands, per-task `--strategy`/`--plan` labels (jev routing included), the session queue and its drain, the runner compaction brief, and the `queueMax` setting. The refused subcommands answer "removed: the session works tasks itself (no runner/queue/strategy)"; the Rust binary still accepts them until the phase-2 binary release.
|
|
534
|
+
|
|
535
|
+
### Fixed
|
|
536
|
+
- `utility` (simple render style): the reply panel has exactly one blank pad row between the `─ summary ─` rule and the reply text (and before the closing rule) — the edge-blank trim had left the `●` text flush under the rule.
|
|
537
|
+
|
|
538
|
+
## [3.0.0-alpha.15] — 2026-09-30
|
|
539
|
+
|
|
540
|
+
### Fixed
|
|
541
|
+
- `utility` (simple render style): a hidden-thinking run inside a thinking+text step no longer leaves blank rows — pi wraps the (empty) label in escapes that survive its own blank check, so a step showed up to three stray blank rows above its text; whitespace-only children and the spacer after each are now dropped before painting.
|
|
542
|
+
- `utility` (simple render style): resumed and re-rendered sessions (resume, boundary-compaction re-render) rebuild tool groups from the rendered transcript order — replayed calls never fired group-break events, so every row landed in one flat group and only the last component painted.
|
|
543
|
+
- `utility` (simple render style): compact spacing — pi's leading spacer row on every content-bearing assistant message is trimmed: no stray blank below custom badges (`▌ Memory recall …`), above mid-turn text, and no painted pad row under the `─ summary ─` rule inside the reply panel. Dropped edge rows keep their OSC-133 prompt-zone markers.
|
|
544
|
+
|
|
545
|
+
## [3.0.0-alpha.14] — 2026-09-30
|
|
546
|
+
|
|
547
|
+
### Added
|
|
548
|
+
- `utility` (simple render style): the turn's final reply is painted on its own panel — the darkest possible background (true black) framed by an orange heavy rule reading `summary` above and a matching unlabelled rule below, opening with one blank row of breathing space. Light themes lift the reply text to bright white so it stays readable on black. The panel is cached per component by width + message + colour, so a keystroke re-render is a lookup, not a repaint.
|
|
549
|
+
|
|
550
|
+
### Fixed
|
|
551
|
+
- `utility` (simple render style): a step with no visible text (thinking and/or tool calls only) no longer renders rows — pi still adds a leading spacer for such a step, so each one left a blank row and the gap above a tool group grew with every thinking-only step.
|
|
552
|
+
- `kanboard` guard: read-only commands that merely mention the binary (`which unipi-kanboard`, `find -name "unipi-kanboard"`, `ls …/bin/unipi-kanboard`, `pip show pi-unipi-kanboard`) are no longer blocked as "credits used up" — a token counts as an invocation only in command position (first word of its segment after `&&`/`||`/`;`/`|`/newline splits with quotes masked, past leading `VAR=value` assignments and `exec`/`command`/`env` wrappers).
|
|
553
|
+
- `kanboard` guard: an invalid subcommand no longer poisons a whole compound call — `start KB-2; done KB-1` passes the guard and the binary itself reports the typo (`done` is not a subcommand). Subcommands the guard does not recognize are never charged or blocked.
|
|
554
|
+
- `kanboard` guard: the refusal text now ends with "(board reads, `start` and `finish` are always free)" so a blocked agent does not conclude the CLI is unusable.
|
|
555
|
+
- `kanboard` reminders (R1): now per-task instead of once-per-turn — starting one task no longer silences the reminder for the other, and when the agent moves to a second task's files (in a later turn) it is nudged again; each task is reminded at most once per turn and twice in total.
|
|
556
|
+
- `kanboard` reminders: shell detection masks quoted spans before splitting segments (`grep -c "a;b" f` is no longer "file-changing"), and harmless node-project arms count as reads (`node`/`npm`/`npx`/`python3` version checks, `sort` without `-o`).
|
|
557
|
+
|
|
558
|
+
## [3.0.0-alpha.13] — 2026-09-29
|
|
559
|
+
|
|
560
|
+
### Fixed
|
|
561
|
+
- utility: typing in the input box lagged badly in long sessions with the simple render style — every keystroke re-planned and re-truncated each tool group once per row (O(n²)). Non-last rows now return early and the group paint is memoized by width + call state.
|
|
562
|
+
|
|
563
|
+
## [3.0.0-alpha.12] — 2026-09-29
|
|
564
|
+
|
|
565
|
+
### Added
|
|
566
|
+
- `kanboard`: **agent `start` / `finish`** — an agent working board tasks by hand ("do UNI-5 and UNI-8") now moves them itself: `start <ID>` (todo → in_progress, self-claimed for the session; deps satisfied, not already claimed, per-project session cap) and `finish <ID> --comment "<summary>"` (in_progress → in_review; only a task this session `start`ed — another session's or a runner claim is refused; summary required). Both are free (no write credit) and need no `/unipi:kanboard-do`. A session may have several tasks started. Agent claims carry `run.owner: agent` (runner claims are unchanged on disk) and belong to the pi process (`UNIPI_KANBOARD_PID`), so the stale-claim reaper releases them to Todo when the session dies. `move` as an agent points at `start`/`finish` for those two transitions.
|
|
567
|
+
- `kanboard`: **progress reminders** (setting `kanboard.reminders`, default on; no LLM, never blocking) — R1: on the first file-changing tool call of a turn, while a task named in the prompt (or `show`n) is still Todo and nothing is started, a steer is appended to that tool result; R2: at the end of a turn with a started task still In Progress, a follow-up asks to `finish` it or say what remains / block it (at most 2 per task each). Silent in runner-owned runs.
|
|
568
|
+
|
|
569
|
+
### Changed
|
|
570
|
+
- `kanboard`: transition table — `todo → in_progress` and `in_progress → in_review` allow the agent actor (via `start`/`finish`) besides the runner; in_review → done/todo stays user-only. The kanboard skill and the `/unipi:kanboard-do` prompt now say "`start` a task before working on it, `finish` it with a summary when done".
|
|
571
|
+
- `kanboard` web UI: claimed cards distinguish an agent claim (`start`ed by a session) from a runner claim.
|
|
572
|
+
- `footer`: the glance input frame is open-sided — `GlanceEditor` body rows drop the `│` rails; only the rounded corners on the top/bottom borders frame the prompt (content keeps its column via a one-space indent, rows are truncated to the inner width).
|
|
573
|
+
|
|
574
|
+
### Fixed
|
|
575
|
+
- `utility`: the Response formatting → Style description no longer claims the change applies "in a new session" — tool renderers are registered once at extension load, so only a restart or `/reload` applies it. The setting now reads "applies after /reload" (utility README updated to match).
|
|
576
|
+
|
|
577
|
+
## [3.0.0-alpha.11] — 2026-09-29
|
|
578
|
+
|
|
579
|
+
### Removed
|
|
580
|
+
- `skill-registry`: the ~20 bundled workflow skills (`brainstorm`, `plan`, `work`, `debug`, `quick-fix`, `worktree-*`, …) are deleted and no longer ship — the package is now registry/exposure only (`isWorkflowSkill` and the generic-skill cap are gone with them).
|
|
581
|
+
|
|
582
|
+
### Changed
|
|
583
|
+
- `skill-registry`: skill exposure `threshold` default 0.3 → 0.8, and the later-prompt reveal now uses the same threshold (was hard-floored at 0.6) — one number governs the first-prompt keep and later reveals.
|
|
584
|
+
- `skill-registry`: skill-name pinning ignores pi's `[Image #N]` placeholders, so attached images no longer pin a skill named `image` (a plain "generate an image" still does).
|
|
585
|
+
- `skill-registry`: skill states reduced to **Enabled + Must show** — the "discoverable" (unlisted) middle state is gone. Off still removes a skill from the session entirely (not listed, never revealed, `/skill:name` blocked); must show implies enabled and is always listed. Stored `discoverable: false` states and the legacy `"unlisted"` value migrate to off on read (a `mustShow: true` wins). The Skill settings… grid now has two columns, E and M.
|
|
586
|
+
|
|
587
|
+
## [3.0.0-alpha.10] — 2026-09-29
|
|
588
|
+
|
|
589
|
+
### Changed
|
|
590
|
+
- `kanboard`: **jev routing off for new boards** — `defaultStrategy` now defaults to `none` (one-pass) instead of `auto`; set it back to Auto (Settings → Kanboard → Task defaults) to let jev decide again. Existing stored settings keep their value.
|
|
591
|
+
- `kanboard`: Auto strategy answers are now confidence-gated — jev's choice only applies at or above the new `jevThreshold` setting (default 0.8); a missing or low-confidence answer runs the task `none` instead. The strategy debug log shows `confidence=X/threshold`.
|
|
592
|
+
- `long-horizon`: judge confidence threshold default 0.6 → 0.8 for new installs (below it the judge abstains to the default mode); existing stored settings keep their value. `judge.enabled` still defaults to off and `defaultMode` to `none`.
|
|
593
|
+
|
|
594
|
+
## [3.0.0-alpha.9] — 2026-09-29
|
|
595
|
+
|
|
596
|
+
### Added
|
|
597
|
+
- `long-horizon`: `/unipi:goal|swarm|graph stop` — terminally ends the active owner (goal → `complete(user_requested)`; pending proposal discarded; no further continuation follow-up). `/unipi:clear` on an active owner now points at stop instead of silently doing nothing.
|
|
598
|
+
- `long-horizon`: `/unipi:regular` — stops any active owner (incl. ralph loops) and pins the session to plain mode; an explicit mode command unlatches it.
|
|
599
|
+
- `long-horizon`: command runners `unipi:goal-pause` / `unipi:goal-resume` / `unipi:goal-stop` for cross-module callers.
|
|
600
|
+
- `kanboard`: `/unipi:kanboard-do` grants session **write credits** (setting `kanboard.doCredits`, default 10) instead of a turn-scoped window — credits persist across turns, each board write costs 1, reads stay free, runner tasks keep unlimited access, `off` revokes.
|
|
601
|
+
|
|
602
|
+
### Changed
|
|
603
|
+
- `long-horizon`: verifier resilience — evaluator failures retry once, then pause `paused(verifier_unavailable)`; two consecutive inconclusive verdicts pause `paused(verifier_inconclusive)`; five consecutive `not_met` claims pause unconditionally (stall-cap coupling removed). Paused goals park the owner so `/unipi:goal resume` works.
|
|
604
|
+
- `long-horizon`: tokens — provider usage now read in both pi shapes (`{input, output, …}` and `{inputTokens, outputTokens}`); usage-less turns estimate tokens (chars/4) and flag `tokens_estimated` in `get_goal` and the continuation hint.
|
|
605
|
+
- `long-horizon`: no-progress guard keys "identical arguments" on real tool arguments (captured per `toolCallId`), exempts search no-matches, `get_goal`/`update_goal`, and kanboard reads — no more false "ran 3 times with identical arguments" after three different commands.
|
|
606
|
+
- `kanboard`: an interrupted/released task parks its goal (id recorded in the release note) and resumes it on re-claim; a user-stopped goal releases the task to Todo ("goal stopped by user") instead of In Review; a task cancelled outside the runner stops its goal.
|
|
607
|
+
- `kanboard`: `-do` suggestions only for task-id-like tokens (no more task rows under free prose).
|
|
9
608
|
## [3.0.0-alpha.7] — 2026-09-28
|
|
10
609
|
|
|
11
610
|
### Changed
|