@pi-unipi/unipi 3.0.0-alpha.4 → 3.0.0-alpha.41
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 +489 -0
- package/README.md +277 -158
- package/docs/prefix-cache-architecture.md +14 -0
- package/package.json +27 -28
- 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 +2210 -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 +275 -0
- package/packages/app-bridge/src/wire.ts +721 -0
- package/packages/app-bridge/src/work.ts +17 -0
- package/packages/ask-user/README.md +90 -99
- package/packages/ask-user/ask-ui.ts +306 -732
- package/packages/ask-user/clipboard.ts +50 -0
- package/packages/ask-user/config.ts +74 -78
- 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/questions.ts +151 -0
- package/packages/ask-user/skills/ask-user/SKILL.md +59 -133
- package/packages/ask-user/tools.ts +266 -428
- package/packages/autocomplete/README.md +46 -21
- package/packages/autocomplete/package.json +1 -1
- package/packages/autocomplete/src/constants.ts +33 -29
- package/packages/autocomplete/src/provider.ts +10 -1
- package/packages/autocomplete/src/settings.ts +1 -1
- package/packages/autocomplete/src/sorting.ts +8 -0
- 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 +115 -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/source.ts +27 -8
- 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 +104 -2
- package/packages/core/constants.ts +6 -30
- package/packages/core/detachable-bash.ts +139 -0
- package/packages/core/events.ts +71 -161
- package/packages/core/global.d.ts +10 -0
- package/packages/core/harness-messages.ts +416 -0
- package/packages/core/index.ts +21 -3
- package/packages/core/kanboard-label.ts +31 -0
- package/packages/core/model-cache.ts +81 -7
- package/packages/core/move.ts +39 -0
- package/packages/core/package.json +6 -3
- package/packages/core/remote-dialogs.ts +51 -0
- package/packages/core/src/attach/detect.ts +163 -0
- package/packages/core/src/child-agent/readers.ts +2 -1
- package/packages/core/src/child-agent/runtime.ts +14 -1
- 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/chatter.ts +24 -0
- package/packages/core/src/jev/settings.ts +11 -10
- package/packages/core/src/package-colors.ts +2 -0
- package/packages/core/src/settings/catalog.ts +39 -15
- package/packages/core/src/settings/hub.ts +177 -11
- package/packages/core/src/settings/open.ts +49 -0
- package/packages/core/src/settings/schema.ts +32 -9
- package/packages/core/src/tui/hub-kit.ts +16 -6
- 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 +369 -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/{image → dream}/package.json +19 -25
- 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 +271 -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 +126 -36
- package/packages/fusion/src/nudge.ts +98 -2
- package/packages/fusion/src/picker.ts +106 -24
- 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 +147 -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 +588 -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 +89 -18
- package/packages/skill-registry/index.ts +231 -0
- package/packages/skill-registry/package.json +19 -8
- package/packages/skill-registry/src/editor.ts +206 -0
- package/packages/skill-registry/src/judge.ts +289 -0
- package/packages/skill-registry/src/registry.ts +99 -0
- package/packages/skill-registry/src/settings.ts +259 -0
- package/packages/skill-registry/src/vault.ts +80 -0
- package/packages/subagents/README.md +77 -32
- 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 +166 -77
- package/packages/subagents/src/manager-shared.ts +68 -0
- package/packages/subagents/src/manager.ts +33 -1
- package/packages/subagents/src/ui.ts +88 -117
- package/packages/unipi/bundled.js +40487 -25363
- package/packages/unipi/index.ts +91 -10
- 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 +111 -74
- package/packages/utility/package.json +2 -2
- package/packages/utility/skills/image/SKILL.md +37 -0
- package/packages/utility/skills/summarize/SKILL.md +311 -0
- package/packages/utility/skills/utility/SKILL.md +18 -60
- package/packages/utility/src/answer/extract.ts +128 -0
- package/packages/utility/src/answer/index.ts +218 -0
- package/packages/utility/src/answer/reply.ts +133 -0
- package/packages/utility/src/answer/web.ts +167 -0
- package/packages/utility/src/attach/index.ts +205 -0
- package/packages/utility/src/commands.ts +38 -142
- package/packages/utility/src/diagnostics/engine.ts +106 -5
- package/packages/utility/src/image/index.ts +33 -0
- package/packages/utility/src/image/models.ts +221 -0
- package/packages/{image/src → utility/src/image}/recognize.ts +3 -3
- package/packages/utility/src/image/settings.ts +230 -0
- package/packages/{image/src/image-source.ts → utility/src/image/source.ts} +1 -1
- package/packages/utility/src/image/tools.ts +168 -0
- package/packages/utility/src/image/transports.ts +186 -0
- package/packages/utility/src/index.ts +82 -390
- package/packages/utility/src/lifecycle/cleanup.ts +116 -311
- 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/rename/gate.ts +102 -0
- package/packages/utility/src/rename/index.ts +191 -0
- package/packages/utility/src/rename/session.ts +170 -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/parse.ts +156 -0
- package/packages/utility/src/render/pi-settings.ts +38 -0
- package/packages/utility/src/render/reply-bg.ts +335 -0
- package/packages/utility/src/render/simple.ts +729 -0
- 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 +378 -0
- package/packages/utility/src/settings.ts +163 -231
- package/packages/utility/src/summarize/index.ts +56 -0
- package/packages/utility/src/types.ts +1 -222
- package/packages/watchdog/README.md +80 -41
- package/packages/watchdog/index.ts +135 -34
- 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 +11 -7
- 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/image/README.md +0 -99
- package/packages/image/skills/image/SKILL.md +0 -76
- package/packages/image/src/generate.ts +0 -256
- package/packages/image/src/index.ts +0 -135
- package/packages/image/src/models.ts +0 -519
- package/packages/image/src/openai-images-api.ts +0 -282
- package/packages/image/src/register-providers.ts +0 -209
- package/packages/image/src/settings.ts +0 -173
- package/packages/image/src/tools.ts +0 -326
- 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 -219
- 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 -145
- package/packages/skill-registry/skills/plan/SKILL.md +0 -231
- 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 -187
- package/packages/skill-registry/skills/scan-issues/SKILL.md +0 -195
- package/packages/skill-registry/skills/work/SKILL.md +0 -218
- 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/packages/subagents/src/badge-session.ts +0 -46
- package/packages/subagents/src/badge.ts +0 -43
- package/packages/utility/src/analytics/collector.ts +0 -293
- package/packages/utility/src/info-screen.ts +0 -80
- package/packages/utility/src/lifecycle/process.ts +0 -162
- package/packages/utility/src/prefix-cache.ts +0 -263
- package/packages/utility/src/skill-discovery.ts +0 -542
- package/packages/utility/src/tools/env.ts +0 -113
- package/packages/utility/src/tui/name-badge-state.ts +0 -315
- package/packages/utility/src/tui/name-badge.ts +0 -109
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,495 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [3.0.0-alpha.41] — 2026-10-13
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- 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)
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- 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)
|
|
16
|
+
- 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)
|
|
17
|
+
- 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)
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- `/unipi:ralph start` from an empty prompt started the loop but never ran the first iteration. (UNI-283)
|
|
21
|
+
- 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)
|
|
22
|
+
- Stopping a ralph loop with `/unipi:regular` left its goal active, so the next `/unipi:goal` resumed the old checklist. (UNI-283)
|
|
23
|
+
|
|
24
|
+
## [3.0.0-alpha.40] — 2026-10-12
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- 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)
|
|
28
|
+
- `/unipi:dream` suggests its subcommands (status, tray, report, run, stop, approve, reject).
|
|
29
|
+
- App search: the UniPi app can search the whole session by meaning (word forms, typos, phrases) and jump to a match. (UNI-275)
|
|
30
|
+
- Memory: the first session that finds 2.x memories asks once whether to convert them. (UNI-272)
|
|
31
|
+
- Upgrade guide from 2.20 to 3.0: `docs/guide/upgrade-3.0.md`. (UNI-272)
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- `/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)
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- `/unipi:ralph <text>` + Enter no longer clears the text. (UNI-277)
|
|
38
|
+
- `/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)
|
|
39
|
+
- `/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)
|
|
40
|
+
- Updater: an alpha install that is offered 3.0.0 stable now installs it, instead of reinstalling the alpha. (UNI-272)
|
|
41
|
+
|
|
42
|
+
## [3.0.0-alpha.39] — 2026-10-11
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
- 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.
|
|
46
|
+
- Long-horizon: new `unipi:lh-mode` runner used for that switch.
|
|
47
|
+
|
|
48
|
+
## [3.0.0-alpha.38] — 2026-10-11
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
- 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.
|
|
52
|
+
- Release check added: a package is not released if one of its files imports a file the package does not ship.
|
|
53
|
+
|
|
54
|
+
## [3.0.0-alpha.37] — 2026-10-11
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
- `/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)
|
|
58
|
+
- `/unipi:doctor` reports whether the Microsoft Visual C++ runtime that web reads need on Windows is installed. (UNI-261)
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
- 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)
|
|
62
|
+
- 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)
|
|
63
|
+
|
|
64
|
+
## [3.0.0-alpha.36] — 2026-10-11
|
|
65
|
+
|
|
66
|
+
### Added
|
|
67
|
+
- `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)
|
|
68
|
+
- **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)
|
|
69
|
+
- `/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)
|
|
70
|
+
- `kanboard`: the kanboard daemon serves the UniPi app's web build, so the board and the app share one frontend. (UNI-117)
|
|
71
|
+
- `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)
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
- 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)
|
|
75
|
+
- Long-horizon modes (`/unipi:<mode>`) stay on until you switch or the run that owns them settles. (UNI-165)
|
|
76
|
+
- Autocomplete offers every registered `/unipi:*` command, including `/unipi:visualize-progress` and `/unipi:dream`; commands missing from the curated list are no longer dropped.
|
|
77
|
+
- Omniroute-specific code is gone; the judge picks models from pi's own model registry. (UNI-249)
|
|
78
|
+
- All spinners share one animation tick instead of one timer per card. (UNI-133)
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
- `notify`: one "finished" notification per run, not one per chat change. (UNI-223)
|
|
82
|
+
- `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)
|
|
83
|
+
- `app-bridge`: editing a queued message from the phone no longer loses messages. (UNI-202)
|
|
84
|
+
- Side questions (`btw`) keep streaming after the phone reconnects. (UNI-219)
|
|
85
|
+
- 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)
|
|
86
|
+
- `app-bridge`: the session tree works on very long sessions (no stack overflow, reply fits one socket line). (UNI-194)
|
|
87
|
+
- `memory`: MemPalace RAM use is bounded per session and over time. (UNI-179)
|
|
88
|
+
- `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)
|
|
89
|
+
- The root package no longer lists a removed `packages/subagents/prompts` mount.
|
|
90
|
+
|
|
91
|
+
## [3.0.0-alpha.35] — 2026-10-08
|
|
92
|
+
|
|
93
|
+
### Added
|
|
94
|
+
- `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)
|
|
95
|
+
|
|
96
|
+
## [3.0.0-alpha.34] — 2026-10-08
|
|
97
|
+
|
|
98
|
+
Everything the UniPi phone app (unipi-app 0.3.0) needs from pi.
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
- `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)
|
|
102
|
+
- `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)
|
|
103
|
+
- `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)
|
|
104
|
+
- `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)
|
|
105
|
+
- `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)
|
|
106
|
+
- `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)
|
|
107
|
+
- `app-bridge`: `@` file suggestions answered by pi's own finder.
|
|
108
|
+
|
|
109
|
+
### Fixed
|
|
110
|
+
- `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)
|
|
111
|
+
- `app-bridge`: new / resume / fork no longer leave the phone on the old session (the outgoing bridge sends `reconnect` and frees the socket).
|
|
112
|
+
- `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.
|
|
113
|
+
|
|
114
|
+
## [3.0.0-alpha.33] — 2026-10-07
|
|
115
|
+
|
|
116
|
+
### Added
|
|
117
|
+
- `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)
|
|
118
|
+
|
|
119
|
+
## [3.0.0-alpha.32] — 2026-10-07
|
|
120
|
+
|
|
121
|
+
### Fixed
|
|
122
|
+
- `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)
|
|
123
|
+
|
|
124
|
+
## [3.0.0-alpha.31] — 2026-10-07
|
|
125
|
+
|
|
126
|
+
### Added
|
|
127
|
+
- `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)
|
|
128
|
+
- 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)
|
|
129
|
+
- `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)
|
|
130
|
+
|
|
131
|
+
## [3.0.0-alpha.30] — 2026-10-05
|
|
132
|
+
|
|
133
|
+
### Changed
|
|
134
|
+
- `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)
|
|
135
|
+
- `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)
|
|
136
|
+
- `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)
|
|
137
|
+
- `kanboard`: agents can unblock tasks to Todo or resume a blocked task through `start`, with the usual claim and session limits. (UNI-105)
|
|
138
|
+
- `kanboard`: unblocking and review rework no longer require a description; empty notes produce clean activity text. (UNI-106)
|
|
139
|
+
- `kanboard`: agent-created labels must reuse existing project labels unless `--new-label` explicitly allows a new one; matching preserves stored spelling. (UNI-100)
|
|
140
|
+
- `kanboard`: removed the board's Task defaults tab and legacy Blocking setting, preserving the other board settings. (UNI-101)
|
|
141
|
+
- `kanboard`: `/unipi:kanboard show <lane>` filters the chat board, with lane and `--all` argument autocomplete. (UNI-102)
|
|
142
|
+
- `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)
|
|
143
|
+
- `compactor`: `/unipi:compact-then <prompt>` compacts before continuing, preserving next-turn versus after-run queue behavior while streaming. (UNI-104)
|
|
144
|
+
- `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.
|
|
145
|
+
|
|
146
|
+
### Fixed
|
|
147
|
+
- `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)
|
|
148
|
+
|
|
149
|
+
## [3.0.0-alpha.29] — 2026-10-04
|
|
150
|
+
|
|
151
|
+
### Fixed
|
|
152
|
+
- `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)
|
|
153
|
+
|
|
154
|
+
## [3.0.0-alpha.28] — 2026-10-04
|
|
155
|
+
|
|
156
|
+
### Changed
|
|
157
|
+
- `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.
|
|
158
|
+
|
|
159
|
+
## [3.0.0-alpha.27] — 2026-10-04
|
|
160
|
+
|
|
161
|
+
### Added
|
|
162
|
+
- `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`.
|
|
163
|
+
- `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`).
|
|
164
|
+
- `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.
|
|
165
|
+
- `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.
|
|
166
|
+
|
|
167
|
+
- `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.
|
|
168
|
+
|
|
169
|
+
### Changed
|
|
170
|
+
- `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`).
|
|
171
|
+
- `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.
|
|
172
|
+
- `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.
|
|
173
|
+
|
|
174
|
+
### Removed
|
|
175
|
+
- `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.
|
|
176
|
+
|
|
177
|
+
### Changed (footer)
|
|
178
|
+
- `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`).
|
|
179
|
+
- `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.
|
|
180
|
+
- `core` / `autocomplete`: `/unipi:footer-help` command entries removed.
|
|
181
|
+
|
|
182
|
+
### Fixed
|
|
183
|
+
- `footer`: the MODULE_READY announcement now reports the package version instead of a hard-coded `0.1.0`.
|
|
184
|
+
|
|
185
|
+
### Docs
|
|
186
|
+
- README: the glance-footer caption names tokens, cost and the responsive fit; a new What's new row for alpha.27 (classic footer removed).
|
|
187
|
+
|
|
188
|
+
## [3.0.0-alpha.26] — 2026-10-04
|
|
189
|
+
|
|
190
|
+
### Fixed
|
|
191
|
+
- `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)
|
|
192
|
+
- `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)
|
|
193
|
+
- `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.
|
|
194
|
+
- `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).
|
|
195
|
+
- `info-screen`: Usage page leaves one blank line between the model share bar and the ranked model rows.
|
|
196
|
+
|
|
197
|
+
## [3.0.0-alpha.25] — 2026-10-04
|
|
198
|
+
|
|
199
|
+
### Added
|
|
200
|
+
- `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)
|
|
201
|
+
- `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)
|
|
202
|
+
- **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)
|
|
203
|
+
- **Usage**: today / week / month spend, 30-day column chart with Monday ticks, model share bar + ranked models. (UNI-81)
|
|
204
|
+
- **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)
|
|
205
|
+
- **MCP, Compactor, Updates, Web, Memory, Keys**: status dots, compaction before→after bars, version track, provider × capability matrix, memory types, keycaps. (UNI-83)
|
|
206
|
+
- `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)
|
|
207
|
+
- `scripts/info-preview`: print the splash and every page at any width without Pi.
|
|
208
|
+
- `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)
|
|
209
|
+
- `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)
|
|
210
|
+
- `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.
|
|
211
|
+
- `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.
|
|
212
|
+
- `long-horizon`: the owner-changed event now carries `reason` when an owner finishes.
|
|
213
|
+
- `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)
|
|
214
|
+
|
|
215
|
+
### Changed
|
|
216
|
+
- `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)
|
|
217
|
+
- `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)
|
|
218
|
+
- 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)
|
|
219
|
+
- `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.
|
|
220
|
+
|
|
221
|
+
### Docs
|
|
222
|
+
- 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.
|
|
223
|
+
- `scripts/info-preview/demo.ts`: demo session and history for screenshots — no real paths or spend.
|
|
224
|
+
|
|
225
|
+
### Performance
|
|
226
|
+
- `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)
|
|
227
|
+
|
|
228
|
+
## [3.0.0-alpha.24] — 2026-10-04
|
|
229
|
+
|
|
230
|
+
### Added
|
|
231
|
+
- `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.
|
|
232
|
+
- `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).
|
|
233
|
+
- `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`.
|
|
234
|
+
|
|
235
|
+
## [3.0.0-alpha.23] — 2026-10-04
|
|
236
|
+
|
|
237
|
+
### Added
|
|
238
|
+
- `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)
|
|
239
|
+
- 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.
|
|
240
|
+
|
|
241
|
+
### Changed
|
|
242
|
+
- `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)
|
|
243
|
+
- settings: shorter labels (explanations moved into descriptions), and pruned knobs —
|
|
244
|
+
- `background-tasks`: removed `defaultTimeoutSeconds` (nothing read it).
|
|
245
|
+
- `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`.
|
|
246
|
+
- `memory`: `recallAtStart` + `wakeUp` merged into one **Recall at start** enum (`off`/`reminder`/`wake-up`); stored booleans migrate per scope.
|
|
247
|
+
- `permission`: removed `jevJudge` — auto mode always consults jev.
|
|
248
|
+
- `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`).
|
|
249
|
+
- `image`: custom endpoint fields moved into per-tool **Custom endpoint…** pages (summary shows `off` or the host).
|
|
250
|
+
- `web-api`: Smart fetch section is advanced; `os`/`batchConcurrency` removed from the schema (engine defaults remain).
|
|
251
|
+
- `kanboard`: reorganized into Agent / Housekeeping / **Board server** (advanced, plus open/stop/rotate-token actions); dead `blocking` setting deleted.
|
|
252
|
+
|
|
253
|
+
### Docs
|
|
254
|
+
- README: dropped the "Why we have it" column from the Proof table.
|
|
255
|
+
|
|
256
|
+
## [3.0.0-alpha.22] — 2026-10-03
|
|
257
|
+
|
|
258
|
+
### Changed
|
|
259
|
+
- `utility`: harness annotations (e.g. the Fusion "delegate shell work" nudge) render once in simple mode instead of three rows.
|
|
260
|
+
- `utility`: simple mode hides tool-result images until Ctrl+O; images no longer overlap the text below them in any render style. (UNI-71)
|
|
261
|
+
- `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)
|
|
262
|
+
- `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`.
|
|
263
|
+
- `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)
|
|
264
|
+
- `long-horizon`: `/unipi:regular` and goal stop update the footer mode immediately. (UNI-66)
|
|
265
|
+
|
|
266
|
+
### Docs
|
|
267
|
+
- v3 docs rewritten in plain controlled English (README, package READMEs, guide, reference, architecture, Unicrab story), with screenshots.
|
|
268
|
+
|
|
269
|
+
## [3.0.0-alpha.21] — 2026-10-03
|
|
270
|
+
|
|
271
|
+
### Added
|
|
272
|
+
- `core`: **Hints** system with pixel-crab mascot **Unicrab** (UNI-27).
|
|
273
|
+
- 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.
|
|
274
|
+
- Single-row hint widget above the editor with a 7-column half-block mascot in truecolor/256-color (or opt-in Kitty image mode).
|
|
275
|
+
- 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.
|
|
276
|
+
- `/unipi:hint`: hub-kit overlay browser grouped by category with seen/unseen/learned tags and live filter; `/unipi:hint next` and `/unipi:hint reset`.
|
|
277
|
+
- 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`.
|
|
278
|
+
- Usage-aware learning (`teaches`), whatsnew version checks, startup maxShows (3), event maxShows (2), per-session event cap (4), and single-turn no-replace rules.
|
|
279
|
+
|
|
280
|
+
### Changed
|
|
281
|
+
- `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.
|
|
282
|
+
|
|
283
|
+
## [3.0.0-alpha.20] — 2026-10-02
|
|
284
|
+
|
|
285
|
+
### Added
|
|
286
|
+
- `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)
|
|
287
|
+
- `kanboard`: archive projects from the sidebar's right-click menu into an **Archived** section. (UNI-51)
|
|
288
|
+
- `kanboard`: labels — create or pick labels in the task form; each label gets a stable hash colour. (UNI-60)
|
|
289
|
+
- `kanboard`: task owner — tasks record "Created by agent / user" automatically; read-only. (UNI-59)
|
|
290
|
+
- `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)
|
|
291
|
+
|
|
292
|
+
### Changed
|
|
293
|
+
- `kanboard` CLI: bare `list` shows only the active lanes (todo, in progress, blocked, in review, done); `--all` adds backlog, cancelled and archived. (UNI-62)
|
|
294
|
+
- `kanboard`: a user can move a Blocked task straight to Done. (UNI-63)
|
|
295
|
+
- `kanboard` (board UI): clicking outside the create/edit task form no longer closes it and discards input. (UNI-61)
|
|
296
|
+
- 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)
|
|
297
|
+
- `memory`: the save-pass card shows humanized token counts with explicit cache read/write labels. (UNI-56)
|
|
298
|
+
|
|
299
|
+
### Fixed
|
|
300
|
+
- `kanboard`: titles containing `"` no longer gain an extra backslash on every save. (UNI-58)
|
|
301
|
+
|
|
302
|
+
## [3.0.0-alpha.19] — 2026-10-01
|
|
303
|
+
|
|
304
|
+
### Added
|
|
305
|
+
- `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.
|
|
306
|
+
|
|
307
|
+
### Changed
|
|
308
|
+
- 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.
|
|
309
|
+
|
|
310
|
+
### Fixed
|
|
311
|
+
- 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.
|
|
312
|
+
- 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.
|
|
313
|
+
|
|
314
|
+
## [3.0.0-alpha.18] — 2026-10-01
|
|
315
|
+
|
|
316
|
+
### Added
|
|
317
|
+
- `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)
|
|
318
|
+
- `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)
|
|
319
|
+
- `subagents`: a live stat line per subagent — profile, model, duration, tool calls, tokens, cost — in all render styles. (UNI-26)
|
|
320
|
+
- `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)
|
|
321
|
+
|
|
322
|
+
### Changed
|
|
323
|
+
- `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.
|
|
324
|
+
- `kanboard`: a task needs a title **or** a description — `displayTitle` is derived from the body everywhere; `captureToBacklog` API for other extensions. (UNI-42)
|
|
325
|
+
- `permission`: full mode no longer prompts on writes outside the workspace — everything short of deny rules runs. (UNI-40)
|
|
326
|
+
- 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)
|
|
327
|
+
- `workflow`: `/unipi:plan` opens with a plain-language Summary for the approver. (UNI-28)
|
|
328
|
+
- `fusion`: sidekick effort is set in the `/unipi:model` fusion row — Space toggles the lead/sidekick target, applied live. (UNI-15)
|
|
329
|
+
|
|
330
|
+
### Removed
|
|
331
|
+
- `compactor`: removed `/unipi:compact-jev` and the jev compaction method — vcc and LLM compaction remain; a saved `method: jev` falls back to vcc.
|
|
332
|
+
- `compactor`: removed the deprecated `/unipi:compact`, `/unipi:lossless-compact` and `/unipi:compact-recall`. (UNI-23)
|
|
333
|
+
|
|
334
|
+
### Fixed
|
|
335
|
+
- `kanboard show`: width-safe board rows — CJK-aware budgets and truncation on every line; a huge blockedReason no longer crashes pi.
|
|
336
|
+
|
|
337
|
+
## [3.0.0-alpha.17] — 2026-09-30
|
|
338
|
+
|
|
339
|
+
### Added
|
|
340
|
+
- `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)
|
|
341
|
+
- `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)
|
|
342
|
+
- `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)
|
|
343
|
+
|
|
344
|
+
### Changed
|
|
345
|
+
- `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)
|
|
346
|
+
- `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:**).
|
|
347
|
+
- `kanboard` (board UI): the Runner settings section is now Sessions; lane tooltips and the in-progress chip describe `start` / `finish` instead of the runner.
|
|
348
|
+
|
|
349
|
+
### Removed
|
|
350
|
+
- `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)
|
|
351
|
+
- `kanboard`: the unused `defaultStrategy`, `jevThreshold` and `defaultPlan` settings.
|
|
352
|
+
|
|
353
|
+
### Fixed
|
|
354
|
+
- `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)
|
|
355
|
+
- `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.
|
|
356
|
+
|
|
357
|
+
## [3.0.0-alpha.16] — 2026-09-30
|
|
358
|
+
|
|
359
|
+
### Added
|
|
360
|
+
- `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.
|
|
361
|
+
- `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.
|
|
362
|
+
- `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.
|
|
363
|
+
- `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.
|
|
364
|
+
- `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).
|
|
365
|
+
- `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.
|
|
366
|
+
|
|
367
|
+
### Changed
|
|
368
|
+
- `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.
|
|
369
|
+
- `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.
|
|
370
|
+
- `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.
|
|
371
|
+
- `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.
|
|
372
|
+
- `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.
|
|
373
|
+
|
|
374
|
+
### Removed
|
|
375
|
+
- `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.
|
|
376
|
+
|
|
377
|
+
### Fixed
|
|
378
|
+
- `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.
|
|
379
|
+
|
|
380
|
+
## [3.0.0-alpha.15] — 2026-09-30
|
|
381
|
+
|
|
382
|
+
### Fixed
|
|
383
|
+
- `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.
|
|
384
|
+
- `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.
|
|
385
|
+
- `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.
|
|
386
|
+
|
|
387
|
+
## [3.0.0-alpha.14] — 2026-09-30
|
|
388
|
+
|
|
389
|
+
### Added
|
|
390
|
+
- `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.
|
|
391
|
+
|
|
392
|
+
### Fixed
|
|
393
|
+
- `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.
|
|
394
|
+
- `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).
|
|
395
|
+
- `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.
|
|
396
|
+
- `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.
|
|
397
|
+
- `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.
|
|
398
|
+
- `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`).
|
|
399
|
+
|
|
400
|
+
## [3.0.0-alpha.13] — 2026-09-29
|
|
401
|
+
|
|
402
|
+
### Fixed
|
|
403
|
+
- 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.
|
|
404
|
+
|
|
405
|
+
## [3.0.0-alpha.12] — 2026-09-29
|
|
406
|
+
|
|
407
|
+
### Added
|
|
408
|
+
- `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.
|
|
409
|
+
- `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.
|
|
410
|
+
|
|
411
|
+
### Changed
|
|
412
|
+
- `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".
|
|
413
|
+
- `kanboard` web UI: claimed cards distinguish an agent claim (`start`ed by a session) from a runner claim.
|
|
414
|
+
- `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).
|
|
415
|
+
|
|
416
|
+
### Fixed
|
|
417
|
+
- `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).
|
|
418
|
+
|
|
419
|
+
## [3.0.0-alpha.11] — 2026-09-29
|
|
420
|
+
|
|
421
|
+
### Removed
|
|
422
|
+
- `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).
|
|
423
|
+
|
|
424
|
+
### Changed
|
|
425
|
+
- `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.
|
|
426
|
+
- `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).
|
|
427
|
+
- `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.
|
|
428
|
+
|
|
429
|
+
## [3.0.0-alpha.10] — 2026-09-29
|
|
430
|
+
|
|
431
|
+
### Changed
|
|
432
|
+
- `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.
|
|
433
|
+
- `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`.
|
|
434
|
+
- `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`.
|
|
435
|
+
|
|
436
|
+
## [3.0.0-alpha.9] — 2026-09-29
|
|
437
|
+
|
|
438
|
+
### Added
|
|
439
|
+
- `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.
|
|
440
|
+
- `long-horizon`: `/unipi:regular` — stops any active owner (incl. ralph loops) and pins the session to plain mode; an explicit mode command unlatches it.
|
|
441
|
+
- `long-horizon`: command runners `unipi:goal-pause` / `unipi:goal-resume` / `unipi:goal-stop` for cross-module callers.
|
|
442
|
+
- `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.
|
|
443
|
+
|
|
444
|
+
### Changed
|
|
445
|
+
- `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.
|
|
446
|
+
- `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.
|
|
447
|
+
- `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.
|
|
448
|
+
- `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.
|
|
449
|
+
- `kanboard`: `-do` suggestions only for task-id-like tokens (no more task rows under free prose).
|
|
450
|
+
## [3.0.0-alpha.7] — 2026-09-28
|
|
451
|
+
|
|
452
|
+
### Changed
|
|
453
|
+
|
|
454
|
+
- `ask-user`: `ask_user` is **off by default** (Settings → Ask User). When off, the agent is told to ask in its reply instead.
|
|
455
|
+
|
|
456
|
+
## [3.0.0-alpha.6] — 2026-09-28
|
|
457
|
+
|
|
458
|
+
### Changed
|
|
459
|
+
|
|
460
|
+
- `ask-user`: **rebuilt after Devin's question UI**. One `ask_user` call carries 1–4 questions (`questions: [{ header, question, options, multi_select }]`) with an automatic "Other" choice. Header chips show progress; digits pick; typing on "Other" needs no Enter and the text stays editable; ←→ switch questions; Enter moves on and submits on the last; unanswered questions are sent as skipped; `?` tells the agent you want to clarify first; Esc stops the turn. Pasted/dropped paths and Ctrl+V images in "Other" become `[Image #N]` / `[File #N]` and images reach the model. The transcript shows a short answer tree. The older single-question form is still accepted (`timeout` is ignored). Settings (/unipi:settings → Ask User): questions per call, what Esc does (stop the turn or send what's answered), whether number keys move on, "Other" agent-decided / always / never, and the "not ready" line — the old "allowed formats" switches are gone. Esc and `end_turn` options stop the turn cleanly instead of aborting it.
|
|
461
|
+
|
|
462
|
+
### Fixed
|
|
463
|
+
|
|
464
|
+
- `ask-user`: several `ask_user` calls in one message opened their dialogs at the same time, so only the last was answerable and the turn hung forever; the tool now runs one call at a time.
|
|
465
|
+
- `compactor`: answers from multi-question `ask_user` results are kept as "question → answer" decisions.
|
|
466
|
+
|
|
467
|
+
## [3.0.0-alpha.5] — 2026-09-28
|
|
468
|
+
|
|
469
|
+
### Breaking Changes
|
|
470
|
+
|
|
471
|
+
- **BREAKING: `@pi-unipi/image` removed.** Image generation, editing and recognition now live in `@pi-unipi/utility` (same `image` settings namespace, so existing configs keep working). **Migration path:** nothing to do with the umbrella package; if you installed `@pi-unipi/image` on its own, remove it and use `@pi-unipi/utility`.
|
|
472
|
+
- **BREAKING: utility slimmed.** Removed `/unipi:reload` (use pi's `/reload`), `/unipi:status`, `/unipi:env`, `/unipi:prefix-cache`, the agent tools `ctx_env` and `set_session_name`, the top name-badge bar, the analytics collector and the process-lifecycle signal handlers. **Migration path:** `/unipi:doctor` covers the health checks; sessions are named automatically (below) or with pi's `/name`. Old `badge.*` settings carry over to `rename.*`.
|
|
473
|
+
- **BREAKING: skill exposure moved** from `utility.skills` to the new `skills` namespace (`@pi-unipi/skill-registry`). Migrated automatically on first read.
|
|
474
|
+
|
|
475
|
+
### Added
|
|
476
|
+
|
|
477
|
+
- `utility`: `/unipi:retry`, an alias of `/unipi:continue`.
|
|
478
|
+
- `utility`: **automatic session naming.** After each round, jev checks whether the round (your message plus what the agent did) established a subject and, for a named session, whether it moved to a different task; a throwaway session with a single `rename_session` tool writes the name. Greetings never rename; names set with `/name` are never overwritten; Herdr pane/tab sync kept.
|
|
479
|
+
- `utility`: **`/unipi:answer`** — answer the last reply without scrolling: `reply` (default: the reply scrolls above a fixed input box, like `/unipi:btw`), `questions` (one answer per question, Q/A template) or `web` (local form; over SSH it prints the `ssh -L` forward). A hint above the editor says when a reply asks questions.
|
|
480
|
+
- `utility`: **pasted images and files** become `[Image #N]` / `[File #N]` attachments with a chip row above the editor and inline previews in Kitty, Ghostty, iTerm2 and WezTerm; images are sent to the model as images.
|
|
481
|
+
- `utility`: **image tools** `image_generate`, `image_edit` (new) and `image_recognize`, with OpenRouter, fal and custom-endpoint routes, a key per provider, and model pickers filtered by input/output modality. Default model FLUX.2 [klein] 4B.
|
|
482
|
+
- `utility`: **response formatting** — Settings → Utility → Response formatting: `simple` (one line per tool), `regular` (pi's own) or `advanced` (highlighted commands incl. embedded heredoc/`-c` code, tinted syntax-highlighted diffs, test summaries, exit lines).
|
|
483
|
+
- `utility`: `/unipi:settings <search>` opens the hub filtered; typing `/settings` lists `/unipi:settings` first.
|
|
484
|
+
- `skill-registry`: now a real extension. **Skill settings…** grid (`/unipi:skills` → Skill settings…): per skill Enabled / Discoverable / Must show, per global or project scope, plus a skill vault at `~/.unipi/skill-vault` whose skills stay off until a scope turns them on (skill proxy, off by default).
|
|
485
|
+
- `core`: the shared model cache (`~/.unipi/config/models-cache.json`) records input/output modalities; the settings hub pickers and kanboard read it.
|
|
486
|
+
|
|
487
|
+
### Changed
|
|
488
|
+
|
|
489
|
+
- `skill-registry`: skill judging keeps skills named in the request, lists hidden skills by name in the system prompt, waits for the first real request instead of freezing on a greeting, and caps generic workflow skills.
|
|
490
|
+
- `fusion`: `/unipi:model` lists only your preset lead/sidekick models; typing searches the whole catalogue (also inside the lead/sidekick dropdowns).
|
|
491
|
+
- `utility`: `/unipi:cleanup` only removes files on an explicit list, previews them and asks first; v2 memory backups can never be removed. `/unipi:doctor` checks the model cache, the Decision Model key and skill exposure.
|
|
492
|
+
|
|
493
|
+
### Fixed
|
|
494
|
+
|
|
495
|
+
- `image`: generation failed for most users (only a pi-ai OpenRouter route with a key pi often couldn't see) and failures were reported to the agent as successes.
|
|
496
|
+
- `core`: capability-filtered model pickers hide entries with no declared input again.
|
|
497
|
+
|
|
9
498
|
## [3.0.0-alpha.4] — 2026-09-28
|
|
10
499
|
|
|
11
500
|
### Breaking Changes
|