@pi-unipi/unipi 3.0.0-alpha.2 → 3.0.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/CHANGELOG.md +278 -0
  2. package/README.md +8 -11
  3. package/docs/prefix-cache-architecture.md +14 -0
  4. package/package.json +22 -24
  5. package/packages/ask-user/README.md +55 -107
  6. package/packages/ask-user/ask-ui.ts +306 -732
  7. package/packages/ask-user/clipboard.ts +50 -0
  8. package/packages/ask-user/config.ts +74 -78
  9. package/packages/ask-user/package.json +2 -2
  10. package/packages/ask-user/questions.ts +151 -0
  11. package/packages/ask-user/skills/ask-user/SKILL.md +59 -133
  12. package/packages/ask-user/tools.ts +198 -432
  13. package/packages/autocomplete/package.json +1 -1
  14. package/packages/autocomplete/src/constants.ts +38 -43
  15. package/packages/autocomplete/src/sorting.ts +8 -0
  16. package/packages/background-tasks/package.json +2 -2
  17. package/packages/background-tasks/src/config.ts +0 -73
  18. package/packages/background-tasks/src/index.ts +20 -16
  19. package/packages/background-tasks/src/registry.ts +1 -171
  20. package/packages/background-tasks/src/types.ts +0 -32
  21. package/packages/btw/README.md +13 -56
  22. package/packages/btw/extensions/btw.ts +403 -1796
  23. package/packages/btw/package.json +5 -2
  24. package/packages/btw/skills/btw/SKILL.md +7 -143
  25. package/packages/compactor/README.md +56 -287
  26. package/packages/compactor/package.json +5 -9
  27. package/packages/compactor/skills/compactor/SKILL.md +13 -20
  28. package/packages/compactor/src/card.ts +90 -0
  29. package/packages/compactor/src/commands/index.ts +73 -130
  30. package/packages/compactor/src/compaction/compact-args.ts +5 -3
  31. package/packages/compactor/src/compaction/filter-noise.ts +1 -1
  32. package/packages/compactor/src/compaction/hooks.ts +487 -311
  33. package/packages/compactor/src/compaction/source.ts +178 -0
  34. package/packages/compactor/src/compaction/summarize.ts +586 -52
  35. package/packages/compactor/src/config/manager.ts +130 -127
  36. package/packages/compactor/src/config/schema.ts +32 -48
  37. package/packages/compactor/src/index.ts +40 -431
  38. package/packages/compactor/src/info-screen.ts +44 -190
  39. package/packages/compactor/src/session/recall-blocks.ts +1 -1
  40. package/packages/compactor/src/stats.ts +76 -0
  41. package/packages/compactor/src/tools/context-budget.ts +17 -34
  42. package/packages/compactor/src/tools/ctx-doctor.ts +45 -36
  43. package/packages/compactor/src/tools/register.ts +29 -269
  44. package/packages/compactor/src/types.ts +47 -186
  45. package/packages/core/child-agent.ts +1 -0
  46. package/packages/core/command-echo.ts +63 -0
  47. package/packages/core/compaction-context.ts +41 -0
  48. package/packages/core/constants.ts +8 -38
  49. package/packages/core/events.ts +0 -53
  50. package/packages/core/fusion-status.ts +4 -0
  51. package/packages/core/global.d.ts +10 -0
  52. package/packages/core/harness-messages.ts +392 -0
  53. package/packages/core/index.ts +14 -0
  54. package/packages/core/kanboard-status.ts +49 -0
  55. package/packages/core/long-horizon-owner-status.ts +46 -0
  56. package/packages/core/model-cache.ts +81 -7
  57. package/packages/core/package.json +2 -2
  58. package/packages/core/src/attach/detect.ts +163 -0
  59. package/packages/core/src/child-agent/child-args.ts +31 -0
  60. package/packages/core/src/child-agent/delivery.ts +41 -0
  61. package/packages/core/src/child-agent/index.ts +5 -0
  62. package/packages/core/src/child-agent/readers.ts +203 -0
  63. package/packages/core/src/child-agent/runtime.ts +584 -0
  64. package/packages/core/src/evidence.ts +78 -0
  65. package/packages/core/src/jev/chatter.ts +24 -0
  66. package/packages/core/src/jev/settings.ts +177 -14
  67. package/packages/core/src/package-colors.ts +2 -0
  68. package/packages/core/src/settings/catalog.ts +39 -15
  69. package/packages/core/src/settings/engine.ts +48 -2
  70. package/packages/core/src/settings/hub.ts +83 -20
  71. package/packages/core/src/settings/open.ts +49 -0
  72. package/packages/core/src/settings/schema.ts +27 -7
  73. package/packages/core/src/tips/index.ts +257 -0
  74. package/packages/core/src/tips/lines.ts +233 -0
  75. package/packages/core/src/tips/store.ts +53 -0
  76. package/packages/core/src/tui/hub-kit.ts +18 -5
  77. package/packages/core/src/tui/kit.ts +198 -0
  78. package/packages/core/src/tui/progress.ts +73 -0
  79. package/packages/core/src/turn/arbiter.ts +290 -0
  80. package/packages/footer/README.md +4 -6
  81. package/packages/footer/package.json +3 -3
  82. package/packages/footer/src/glance-editor.ts +19 -11
  83. package/packages/footer/src/help.ts +1 -1
  84. package/packages/footer/src/index.ts +36 -3
  85. package/packages/footer/src/presets.ts +3 -4
  86. package/packages/footer/src/rendering/icons.ts +0 -20
  87. package/packages/footer/src/segments/compactor.ts +52 -142
  88. package/packages/footer/src/segments/status-ext.ts +0 -1
  89. package/packages/fusion/README.md +14 -4
  90. package/packages/fusion/package.json +4 -3
  91. package/packages/fusion/src/child-args.ts +1 -0
  92. package/packages/fusion/src/index.ts +161 -8
  93. package/packages/fusion/src/pi-settings.ts +57 -0
  94. package/packages/fusion/src/picker.ts +186 -51
  95. package/packages/fusion/src/preset.ts +56 -2
  96. package/packages/fusion/src/prompts.ts +1 -1
  97. package/packages/fusion/src/sidekick-runtime.ts +1 -420
  98. package/packages/fusion/src/tools.ts +107 -128
  99. package/packages/fusion/src/transcript.ts +27 -85
  100. package/packages/info-screen/package.json +2 -2
  101. package/packages/input-shortcuts/README.md +18 -30
  102. package/packages/input-shortcuts/package.json +2 -2
  103. package/packages/input-shortcuts/src/burst.ts +88 -0
  104. package/packages/input-shortcuts/src/chord-overlay.ts +20 -70
  105. package/packages/input-shortcuts/src/cleared-input.ts +97 -0
  106. package/packages/input-shortcuts/src/index.ts +99 -193
  107. package/packages/input-shortcuts/src/last-response.ts +40 -0
  108. package/packages/input-shortcuts/src/registers.ts +8 -23
  109. package/packages/input-shortcuts/src/types.ts +4 -16
  110. package/packages/input-shortcuts/src/undo-redo.ts +59 -47
  111. package/packages/kanboard/README.md +51 -47
  112. package/packages/kanboard/index.ts +293 -55
  113. package/packages/kanboard/package.json +8 -8
  114. package/packages/kanboard/skills/kanboard/SKILL.md +61 -27
  115. package/packages/kanboard/src/badges.ts +93 -0
  116. package/packages/kanboard/src/bin.ts +4 -2
  117. package/packages/kanboard/src/commands.ts +218 -84
  118. package/packages/kanboard/src/debug.ts +20 -0
  119. package/packages/kanboard/src/guard.ts +267 -109
  120. package/packages/kanboard/src/monitor.ts +330 -0
  121. package/packages/kanboard/src/notice-buffer.ts +74 -0
  122. package/packages/kanboard/src/progress.ts +27 -0
  123. package/packages/kanboard/src/reminders.ts +234 -0
  124. package/packages/kanboard/src/settings.ts +69 -15
  125. package/packages/kanboard/src/shapes.ts +5 -0
  126. package/packages/long-horizon/index.ts +190 -13
  127. package/packages/long-horizon/package.json +3 -3
  128. package/packages/long-horizon/src/commands.ts +103 -7
  129. package/packages/long-horizon/src/compaction-brief.ts +35 -0
  130. package/packages/long-horizon/src/engine/continuation.ts +84 -15
  131. package/packages/long-horizon/src/engine/goal-state.ts +64 -13
  132. package/packages/long-horizon/src/engine/nudge-stash.ts +71 -0
  133. package/packages/long-horizon/src/engine/ralph.ts +3 -2
  134. package/packages/long-horizon/src/engine/runaway.ts +68 -11
  135. package/packages/long-horizon/src/engine/verifier.ts +19 -0
  136. package/packages/long-horizon/src/gate.ts +37 -12
  137. package/packages/long-horizon/src/judge/resolve.ts +1 -0
  138. package/packages/long-horizon/src/owner.ts +35 -2
  139. package/packages/long-horizon/src/progress.ts +87 -0
  140. package/packages/long-horizon/src/prompts/goal.ts +1 -1
  141. package/packages/long-horizon/src/runtime.ts +172 -18
  142. package/packages/long-horizon/src/settings.ts +54 -39
  143. package/packages/long-horizon/src/tools/goal.ts +6 -0
  144. package/packages/long-horizon/src/tools/graph.ts +1 -1
  145. package/packages/long-horizon/src/tools/swarm.ts +3 -3
  146. package/packages/mcp/package.json +2 -2
  147. package/packages/memory/commands.ts +7 -2
  148. package/packages/memory/index.ts +210 -32
  149. package/packages/memory/package.json +3 -3
  150. package/packages/memory/save-session.ts +264 -0
  151. package/packages/memory/settings.ts +17 -0
  152. package/packages/memory/tools.ts +253 -203
  153. package/packages/notify/package.json +2 -2
  154. package/packages/skill-registry/README.md +53 -16
  155. package/packages/skill-registry/index.ts +230 -0
  156. package/packages/skill-registry/package.json +19 -8
  157. package/packages/skill-registry/src/editor.ts +206 -0
  158. package/packages/skill-registry/src/judge.ts +289 -0
  159. package/packages/skill-registry/src/registry.ts +87 -0
  160. package/packages/skill-registry/src/settings.ts +259 -0
  161. package/packages/skill-registry/src/vault.ts +80 -0
  162. package/packages/subagents/README.md +39 -119
  163. package/packages/subagents/package.json +6 -13
  164. package/packages/subagents/skills/subagents/SKILL.md +18 -42
  165. package/packages/subagents/src/agents.ts +213 -0
  166. package/packages/subagents/src/cards.ts +182 -0
  167. package/packages/subagents/src/index.ts +609 -1084
  168. package/packages/subagents/src/manager.ts +429 -0
  169. package/packages/subagents/src/profiles.ts +130 -0
  170. package/packages/subagents/src/transcript.ts +154 -0
  171. package/packages/subagents/src/ui.ts +389 -0
  172. package/packages/unipi/bundled.js +30904 -37854
  173. package/packages/unipi/index.ts +55 -10
  174. package/packages/updater/package.json +2 -2
  175. package/packages/utility/README.md +76 -69
  176. package/packages/utility/package.json +2 -2
  177. package/packages/utility/skills/image/SKILL.md +37 -0
  178. package/packages/utility/skills/utility/SKILL.md +17 -60
  179. package/packages/utility/src/answer/extract.ts +128 -0
  180. package/packages/utility/src/answer/index.ts +213 -0
  181. package/packages/utility/src/answer/reply.ts +133 -0
  182. package/packages/utility/src/answer/web.ts +167 -0
  183. package/packages/utility/src/attach/index.ts +205 -0
  184. package/packages/utility/src/commands.ts +38 -142
  185. package/packages/utility/src/diagnostics/engine.ts +50 -5
  186. package/packages/utility/src/image/index.ts +33 -0
  187. package/packages/utility/src/image/models.ts +221 -0
  188. package/packages/{image/src → utility/src/image}/recognize.ts +2 -2
  189. package/packages/utility/src/image/settings.ts +178 -0
  190. package/packages/{image/src/image-source.ts → utility/src/image/source.ts} +1 -1
  191. package/packages/utility/src/image/tools.ts +168 -0
  192. package/packages/utility/src/image/transports.ts +186 -0
  193. package/packages/utility/src/index.ts +68 -389
  194. package/packages/utility/src/lifecycle/cleanup.ts +116 -311
  195. package/packages/utility/src/rename/gate.ts +102 -0
  196. package/packages/utility/src/rename/index.ts +191 -0
  197. package/packages/utility/src/rename/session.ts +170 -0
  198. package/packages/utility/src/render/delegated.ts +285 -0
  199. package/packages/utility/src/render/harness.ts +683 -0
  200. package/packages/utility/src/render/parse.ts +156 -0
  201. package/packages/utility/src/render/pi-settings.ts +38 -0
  202. package/packages/utility/src/render/reply-bg.ts +307 -0
  203. package/packages/utility/src/render/simple.ts +724 -0
  204. package/packages/utility/src/render/spacing.ts +235 -0
  205. package/packages/utility/src/render/styled.ts +251 -0
  206. package/packages/utility/src/render/tools.ts +353 -0
  207. package/packages/utility/src/settings.ts +166 -233
  208. package/packages/utility/src/types.ts +1 -222
  209. package/packages/watchdog/index.ts +17 -6
  210. package/packages/watchdog/package.json +3 -3
  211. package/packages/watchdog/src/config.ts +3 -2
  212. package/packages/web-api/package.json +2 -2
  213. package/packages/workflow/README.md +3 -0
  214. package/packages/workflow/index.ts +0 -2
  215. package/packages/workflow/package.json +2 -2
  216. package/packages/workflow/src/permission/decide.ts +6 -4
  217. package/packages/workflow/src/permission/index.ts +17 -7
  218. package/packages/workflow/src/permission/settings.ts +39 -4
  219. package/packages/workflow/src/plan/index.ts +19 -4
  220. package/packages/background-tasks/extensions/delegate-child.ts +0 -1
  221. package/packages/background-tasks/src/context-parent-snapshot.ts +0 -142
  222. package/packages/background-tasks/src/context-token-budget.ts +0 -903
  223. package/packages/background-tasks/src/context-visible-conversation-v2.ts +0 -551
  224. package/packages/background-tasks/src/delegate/artifacts.ts +0 -487
  225. package/packages/background-tasks/src/delegate/budget.ts +0 -415
  226. package/packages/background-tasks/src/delegate/hook-contract-evidence.json +0 -18
  227. package/packages/background-tasks/src/delegate/hook-contract.ts +0 -154
  228. package/packages/background-tasks/src/delegate/launch.ts +0 -484
  229. package/packages/background-tasks/src/delegate/result-package.ts +0 -459
  230. package/packages/background-tasks/src/delegate/runner.ts +0 -430
  231. package/packages/background-tasks/src/delegate/seed.ts +0 -423
  232. package/packages/background-tasks/src/delegate/types.ts +0 -323
  233. package/packages/background-tasks/src/delegate-child-extension.ts +0 -978
  234. package/packages/background-tasks/src/delegate-extension.ts +0 -654
  235. package/packages/background-tasks/src/fixtures/delegate-context-incident.json +0 -17
  236. package/packages/compactor/skills/compactor-detail/SKILL.md +0 -116
  237. package/packages/compactor/skills/compactor-doctor/SKILL.md +0 -71
  238. package/packages/compactor/skills/compactor-stats/SKILL.md +0 -51
  239. package/packages/compactor/src/compaction/build-sections.ts +0 -76
  240. package/packages/compactor/src/compaction/extract/goals.ts +0 -36
  241. package/packages/compactor/src/compaction/extract/preferences.ts +0 -40
  242. package/packages/compactor/src/compaction/format.ts +0 -53
  243. package/packages/compactor/src/compaction/merge.ts +0 -143
  244. package/packages/compactor/src/config/presets.ts +0 -160
  245. package/packages/compactor/src/executor/executor.ts +0 -233
  246. package/packages/compactor/src/executor/runtime.ts +0 -115
  247. package/packages/compactor/src/security/evaluator.ts +0 -89
  248. package/packages/compactor/src/security/policy.ts +0 -96
  249. package/packages/compactor/src/security/scanner.ts +0 -65
  250. package/packages/compactor/src/session/auto-inject.ts +0 -60
  251. package/packages/compactor/src/session/db.ts +0 -325
  252. package/packages/compactor/src/session/extract.ts +0 -144
  253. package/packages/compactor/src/session/resume-inject.ts +0 -64
  254. package/packages/compactor/src/session/snapshot.ts +0 -327
  255. package/packages/compactor/src/tools/ctx-batch-execute.ts +0 -41
  256. package/packages/compactor/src/tools/ctx-execute-file.ts +0 -23
  257. package/packages/compactor/src/tools/ctx-execute.ts +0 -23
  258. package/packages/compactor/src/tools/ctx-stats.ts +0 -96
  259. package/packages/image/README.md +0 -99
  260. package/packages/image/package.json +0 -61
  261. package/packages/image/skills/image/SKILL.md +0 -76
  262. package/packages/image/src/generate.ts +0 -256
  263. package/packages/image/src/index.ts +0 -135
  264. package/packages/image/src/models.ts +0 -519
  265. package/packages/image/src/openai-images-api.ts +0 -282
  266. package/packages/image/src/register-providers.ts +0 -209
  267. package/packages/image/src/settings.ts +0 -173
  268. package/packages/image/src/tools.ts +0 -326
  269. package/packages/input-shortcuts/src/clipboard.ts +0 -119
  270. package/packages/kanboard/src/runner.ts +0 -817
  271. package/packages/skill-registry/skills/auto/SKILL.md +0 -465
  272. package/packages/skill-registry/skills/brainstorm/SKILL.md +0 -219
  273. package/packages/skill-registry/skills/chore-create/SKILL.md +0 -315
  274. package/packages/skill-registry/skills/chore-execute/SKILL.md +0 -314
  275. package/packages/skill-registry/skills/consolidate/SKILL.md +0 -142
  276. package/packages/skill-registry/skills/consultant/SKILL.md +0 -97
  277. package/packages/skill-registry/skills/debug/SKILL.md +0 -228
  278. package/packages/skill-registry/skills/document/SKILL.md +0 -120
  279. package/packages/skill-registry/skills/fix/SKILL.md +0 -212
  280. package/packages/skill-registry/skills/gather-context/SKILL.md +0 -145
  281. package/packages/skill-registry/skills/plan/SKILL.md +0 -231
  282. package/packages/skill-registry/skills/quick-fix/SKILL.md +0 -135
  283. package/packages/skill-registry/skills/quick-work/SKILL.md +0 -110
  284. package/packages/skill-registry/skills/research/SKILL.md +0 -251
  285. package/packages/skill-registry/skills/review-work/SKILL.md +0 -187
  286. package/packages/skill-registry/skills/scan-issues/SKILL.md +0 -195
  287. package/packages/skill-registry/skills/work/SKILL.md +0 -218
  288. package/packages/skill-registry/skills/worktree-create/SKILL.md +0 -69
  289. package/packages/skill-registry/skills/worktree-list/SKILL.md +0 -78
  290. package/packages/skill-registry/skills/worktree-merge/SKILL.md +0 -89
  291. package/packages/subagents/agents/delegate.md +0 -14
  292. package/packages/subagents/agents/oracle.md +0 -78
  293. package/packages/subagents/agents/researcher.md +0 -52
  294. package/packages/subagents/agents/reviewer.md +0 -80
  295. package/packages/subagents/agents/scout.md +0 -50
  296. package/packages/subagents/agents/worker.md +0 -59
  297. package/packages/subagents/prompts/council.md +0 -48
  298. package/packages/subagents/prompts/gather-context-and-clarify.md +0 -13
  299. package/packages/subagents/prompts/parallel-cleanup.md +0 -59
  300. package/packages/subagents/prompts/parallel-research.md +0 -50
  301. package/packages/subagents/prompts/parallel-review.md +0 -54
  302. package/packages/subagents/prompts/review-loop.md +0 -43
  303. package/packages/subagents/skills/council-mode/SKILL.md +0 -230
  304. package/packages/subagents/skills/subagents/references/constraints-and-recipes.md +0 -259
  305. package/packages/subagents/skills/subagents/references/execution-controls.md +0 -454
  306. package/packages/subagents/skills/subagents/references/management-authoring-rpc.md +0 -161
  307. package/packages/subagents/skills/subagents/references/multi-lane-orchestration.md +0 -39
  308. package/packages/subagents/skills/subagents/references/prompting-and-roles.md +0 -267
  309. package/packages/subagents/src/acceptance.ts +0 -331
  310. package/packages/subagents/src/agent-manager.ts +0 -405
  311. package/packages/subagents/src/agent-memory.ts +0 -300
  312. package/packages/subagents/src/agent-overrides.ts +0 -183
  313. package/packages/subagents/src/agent-runner.ts +0 -271
  314. package/packages/subagents/src/async-runner.ts +0 -422
  315. package/packages/subagents/src/authority-policy.ts +0 -47
  316. package/packages/subagents/src/budgets.ts +0 -285
  317. package/packages/subagents/src/child-safety.ts +0 -140
  318. package/packages/subagents/src/config.ts +0 -249
  319. package/packages/subagents/src/conversation-viewer.ts +0 -281
  320. package/packages/subagents/src/core-compat.ts +0 -94
  321. package/packages/subagents/src/custom-agents.ts +0 -343
  322. package/packages/subagents/src/file-system-retry.ts +0 -50
  323. package/packages/subagents/src/fleet-data.ts +0 -105
  324. package/packages/subagents/src/fleet-view.ts +0 -322
  325. package/packages/subagents/src/foreground-detach.ts +0 -59
  326. package/packages/subagents/src/fork-context.ts +0 -285
  327. package/packages/subagents/src/global.d.ts +0 -7
  328. package/packages/subagents/src/guide.ts +0 -129
  329. package/packages/subagents/src/mission-state.ts +0 -133
  330. package/packages/subagents/src/mission-store.ts +0 -436
  331. package/packages/subagents/src/output-limits.ts +0 -142
  332. package/packages/subagents/src/parity-types.ts +0 -315
  333. package/packages/subagents/src/pi-args.ts +0 -167
  334. package/packages/subagents/src/result-files.ts +0 -232
  335. package/packages/subagents/src/result-watcher.ts +0 -221
  336. package/packages/subagents/src/retained-children.ts +0 -176
  337. package/packages/subagents/src/run-fanout-budget.ts +0 -356
  338. package/packages/subagents/src/scheduled-runs.ts +0 -349
  339. package/packages/subagents/src/schemas.ts +0 -263
  340. package/packages/subagents/src/slash-commands.ts +0 -80
  341. package/packages/subagents/src/supervisor-channel.ts +0 -249
  342. package/packages/subagents/src/tool-handler.ts +0 -1144
  343. package/packages/subagents/src/types.ts +0 -238
  344. package/packages/subagents/src/widget.ts +0 -457
  345. package/packages/subagents/src/workflow-script.ts +0 -737
  346. package/packages/subagents/src/workflow-worker.ts +0 -384
  347. package/packages/subagents/src/worktree.ts +0 -614
  348. package/packages/utility/src/analytics/collector.ts +0 -293
  349. package/packages/utility/src/info-screen.ts +0 -80
  350. package/packages/utility/src/lifecycle/process.ts +0 -162
  351. package/packages/utility/src/prefix-cache.ts +0 -263
  352. package/packages/utility/src/skill-discovery.ts +0 -542
  353. package/packages/utility/src/tools/env.ts +0 -113
  354. package/packages/utility/src/tui/name-badge-state.ts +0 -315
  355. package/packages/utility/src/tui/name-badge.ts +0 -109
  356. /package/packages/{subagents/src → core/src/child-agent}/pi-spawn.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,284 @@ 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.20] — 2026-10-02
10
+
11
+ ### Added
12
+ - `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)
13
+ - `kanboard`: archive projects from the sidebar's right-click menu into an **Archived** section. (UNI-51)
14
+ - `kanboard`: labels — create or pick labels in the task form; each label gets a stable hash colour. (UNI-60)
15
+ - `kanboard`: task owner — tasks record "Created by agent / user" automatically; read-only. (UNI-59)
16
+ - `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)
17
+
18
+ ### Changed
19
+ - `kanboard` CLI: bare `list` shows only the active lanes (todo, in progress, blocked, in review, done); `--all` adds backlog, cancelled and archived. (UNI-62)
20
+ - `kanboard`: a user can move a Blocked task straight to Done. (UNI-63)
21
+ - `kanboard` (board UI): clicking outside the create/edit task form no longer closes it and discards input. (UNI-61)
22
+ - 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)
23
+ - `memory`: the save-pass card shows humanized token counts with explicit cache read/write labels. (UNI-56)
24
+
25
+ ### Fixed
26
+ - `kanboard`: titles containing `"` no longer gain an extra backslash on every save. (UNI-58)
27
+
28
+ ## [3.0.0-alpha.19] — 2026-10-01
29
+
30
+ ### Added
31
+ - `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.
32
+
33
+ ### Changed
34
+ - 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.
35
+
36
+ ### Fixed
37
+ - 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.
38
+ - 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.
39
+
40
+ ## [3.0.0-alpha.18] — 2026-10-01
41
+
42
+ ### Added
43
+ - `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)
44
+ - `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)
45
+ - `subagents`: a live stat line per subagent — profile, model, duration, tool calls, tokens, cost — in all render styles. (UNI-26)
46
+ - `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)
47
+
48
+ ### Changed
49
+ - `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.
50
+ - `kanboard`: a task needs a title **or** a description — `displayTitle` is derived from the body everywhere; `captureToBacklog` API for other extensions. (UNI-42)
51
+ - `permission`: full mode no longer prompts on writes outside the workspace — everything short of deny rules runs. (UNI-40)
52
+ - 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)
53
+ - `workflow`: `/unipi:plan` opens with a plain-language Summary for the approver. (UNI-28)
54
+ - `fusion`: sidekick effort is set in the `/unipi:model` fusion row — Space toggles the lead/sidekick target, applied live. (UNI-15)
55
+
56
+ ### Removed
57
+ - `compactor`: removed `/unipi:compact-jev` and the jev compaction method — vcc and LLM compaction remain; a saved `method: jev` falls back to vcc.
58
+ - `compactor`: removed the deprecated `/unipi:compact`, `/unipi:lossless-compact` and `/unipi:compact-recall`. (UNI-23)
59
+
60
+ ### Fixed
61
+ - `kanboard show`: width-safe board rows — CJK-aware budgets and truncation on every line; a huge blockedReason no longer crashes pi.
62
+
63
+ ## [3.0.0-alpha.17] — 2026-09-30
64
+
65
+ ### Added
66
+ - `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)
67
+ - `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)
68
+ - `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)
69
+
70
+ ### Changed
71
+ - `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)
72
+ - `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:**).
73
+ - `kanboard` (board UI): the Runner settings section is now Sessions; lane tooltips and the in-progress chip describe `start` / `finish` instead of the runner.
74
+
75
+ ### Removed
76
+ - `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)
77
+ - `kanboard`: the unused `defaultStrategy`, `jevThreshold` and `defaultPlan` settings.
78
+
79
+ ### Fixed
80
+ - `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)
81
+ - `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.
82
+
83
+ ## [3.0.0-alpha.16] — 2026-09-30
84
+
85
+ ### Added
86
+ - `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.
87
+ - `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.
88
+ - `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.
89
+ - `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.
90
+ - `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).
91
+ - `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.
92
+
93
+ ### Changed
94
+ - `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.
95
+ - `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.
96
+ - `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.
97
+ - `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.
98
+ - `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.
99
+
100
+ ### Removed
101
+ - `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.
102
+
103
+ ### Fixed
104
+ - `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.
105
+
106
+ ## [3.0.0-alpha.15] — 2026-09-30
107
+
108
+ ### Fixed
109
+ - `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.
110
+ - `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.
111
+ - `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.
112
+
113
+ ## [3.0.0-alpha.14] — 2026-09-30
114
+
115
+ ### Added
116
+ - `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.
117
+
118
+ ### Fixed
119
+ - `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.
120
+ - `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).
121
+ - `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.
122
+ - `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.
123
+ - `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.
124
+ - `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`).
125
+
126
+ ## [3.0.0-alpha.13] — 2026-09-29
127
+
128
+ ### Fixed
129
+ - 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.
130
+
131
+ ## [3.0.0-alpha.12] — 2026-09-29
132
+
133
+ ### Added
134
+ - `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.
135
+ - `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.
136
+
137
+ ### Changed
138
+ - `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".
139
+ - `kanboard` web UI: claimed cards distinguish an agent claim (`start`ed by a session) from a runner claim.
140
+ - `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).
141
+
142
+ ### Fixed
143
+ - `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).
144
+
145
+ ## [3.0.0-alpha.11] — 2026-09-29
146
+
147
+ ### Removed
148
+ - `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).
149
+
150
+ ### Changed
151
+ - `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.
152
+ - `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).
153
+ - `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.
154
+
155
+ ## [3.0.0-alpha.10] — 2026-09-29
156
+
157
+ ### Changed
158
+ - `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.
159
+ - `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`.
160
+ - `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`.
161
+
162
+ ## [3.0.0-alpha.9] — 2026-09-29
163
+
164
+ ### Added
165
+ - `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.
166
+ - `long-horizon`: `/unipi:regular` — stops any active owner (incl. ralph loops) and pins the session to plain mode; an explicit mode command unlatches it.
167
+ - `long-horizon`: command runners `unipi:goal-pause` / `unipi:goal-resume` / `unipi:goal-stop` for cross-module callers.
168
+ - `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.
169
+
170
+ ### Changed
171
+ - `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.
172
+ - `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.
173
+ - `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.
174
+ - `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.
175
+ - `kanboard`: `-do` suggestions only for task-id-like tokens (no more task rows under free prose).
176
+ ## [3.0.0-alpha.7] — 2026-09-28
177
+
178
+ ### Changed
179
+
180
+ - `ask-user`: `ask_user` is **off by default** (Settings → Ask User). When off, the agent is told to ask in its reply instead.
181
+
182
+ ## [3.0.0-alpha.6] — 2026-09-28
183
+
184
+ ### Changed
185
+
186
+ - `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.
187
+
188
+ ### Fixed
189
+
190
+ - `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.
191
+ - `compactor`: answers from multi-question `ask_user` results are kept as "question → answer" decisions.
192
+
193
+ ## [3.0.0-alpha.5] — 2026-09-28
194
+
195
+ ### Breaking Changes
196
+
197
+ - **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`.
198
+ - **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.*`.
199
+ - **BREAKING: skill exposure moved** from `utility.skills` to the new `skills` namespace (`@pi-unipi/skill-registry`). Migrated automatically on first read.
200
+
201
+ ### Added
202
+
203
+ - `utility`: `/unipi:retry`, an alias of `/unipi:continue`.
204
+ - `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.
205
+ - `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.
206
+ - `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.
207
+ - `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.
208
+ - `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).
209
+ - `utility`: `/unipi:settings <search>` opens the hub filtered; typing `/settings` lists `/unipi:settings` first.
210
+ - `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).
211
+ - `core`: the shared model cache (`~/.unipi/config/models-cache.json`) records input/output modalities; the settings hub pickers and kanboard read it.
212
+
213
+ ### Changed
214
+
215
+ - `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.
216
+ - `fusion`: `/unipi:model` lists only your preset lead/sidekick models; typing searches the whole catalogue (also inside the lead/sidekick dropdowns).
217
+ - `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.
218
+
219
+ ### Fixed
220
+
221
+ - `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.
222
+ - `core`: capability-filtered model pickers hide entries with no declared input again.
223
+
224
+ ## [3.0.0-alpha.4] — 2026-09-28
225
+
226
+ ### Breaking Changes
227
+
228
+ - **BREAKING: compactor reworked.** Session continuity (the SQLite event log and the snapshot restored after compaction) is removed: it logged every session under one shared ID, so restored snapshots mixed projects and reached ~60k tokens. Also removed: the sandbox tools (`sandbox`, `sandbox_file`, `sandbox_batch`), the `compact` tool (it never compacted), the `compactor_stats`/`compactor_doctor` tools, presets, and the strategy modes that had no effect. **Migration path:** `/unipi:compact` and `/unipi:lossless-compact` still work but are deprecated. Use `/unipi:compact-vcc`, `/unipi:compact-jev` or `/unipi:compact-by-llm`. Old configs are translated: `overrideDefaultCompaction: false` becomes Method = model summary, and `autoCompaction.enabled` becomes When = at a percentage. `~/.unipi/db/compactor` is no longer used and can be deleted.
229
+
230
+ ### Added
231
+
232
+ - `compactor`: the lossless summary is rebuilt from the full session history on every compaction, so it can no longer grow from one compaction to the next (a real session went 15k → 236k → 248k characters). It puts the current state first: Active Work, Your Requests, Latest State, Decisions & Constraints, Files, Commits, Open Errors, Recent Transcript. Each section has a hard budget.
233
+ - Text that extensions inject with the user role (loop prompts, nudges, notifications) is recognised and left out of Your Requests; extension-sent messages are also marked when they are sent.
234
+ - `ask_user` answers are kept as "question → answer" decisions.
235
+ - Typed credentials are redacted.
236
+ - `compactor`: **lossless + jev** method (`/unipi:compact-jev`). jev, the Decision model, drops items that are no longer in force, such as finished one-off requests, reversed decisions and fixed errors, at per-kind confidence thresholds. If jev is unavailable, the plain lossless summary is used.
237
+ - `compactor`: the settings screen shows 5 main settings (Method, Pi's /compact, When, Percentage, Notifications); everything else is under **Advanced compaction**.
238
+ - `core`: `registerCompactionContext()`. long-horizon (goal, ralph) and kanboard register their live state, and every compaction summary leads with it.
239
+ - `scripts/compactor-eval.mts` replays the compactor at real compaction points of recorded sessions and shows what happened next, for review. `scripts/compactor-continue.mts` writes resumable A/B session files (old vs new compaction) for a blind "continue from here" test with `pi --fork … -nt -p`.
240
+ - **Decision Model settings** (`/unipi:settings → Decision Model`): the jev provider, model, base URL, key and timeout now live in one shared `decision-model` namespace instead of long-horizon's judge. Every module that uses it (long-horizon routing, permission auto mode, skill exposure, watchdog, kanboard strategy, compactor pruning) has a **Decision model** block that inherits the shared model by default or switches to a custom one; empty custom fields fall back to the shared value. Existing `long-horizon.judge.*` transport settings are migrated once.
241
+ - `compactor`: user corrections ("restore the background… I did not request this change") are kept as decisions.
242
+ - `compactor`: **Lessons** section: lessons the agent wrote down itself (memory notes, `# Confirmed: …` comments in its commands, diagnosis sentences), kept verbatim. **Project Knowledge** section: notes it wrote or read, repeated build/test/deploy commands, hosts. Decisions keep early standing rules ("always…", "never…") instead of only the most recent ones.
243
+ - `compactor`: jev asks short, local questions it can answer precisely: "durable lesson or one-off note?" and "does this later item replace that earlier one?" on items about the same subject. A reversal in the recent messages removes the stale lesson it replaces.
244
+ - `compactor`: **compaction card** in the transcript under Pi's `[compaction]` block: one line (`Compacted 7.9k → 2.2k tokens · lossless + jev · 1 stale dropped · at 3%`), ctrl+o for method, trigger, kept tail, sections and jev drops. Never sent to the model; replaces the compaction toasts.
245
+ - `footer`: the stats strip under the input shows `5 compactions · 47k→15k · just now` once the session has compacted. The five compactor segments are now one icon-free `compactions` segment.
246
+ - `compactor`: the info-screen Compactor tab shows the method and trigger settings, compactions by method, tokens before → after, and the last compaction.
247
+
248
+ ### Fixed
249
+
250
+ - `compactor`: the percentage trigger compacts at the `turn_end` boundary instead of calling `ctx.compact()`, which aborted the run and left goal, ralph and kanboard loops waiting. The "auto-continue" message is removed; Pi 0.87 continues after automatic compaction on its own, so it only added empty extra turns.
251
+ - `compactor`: stats come from the session's own compaction entries instead of a fixed "12% kept" guess (also in the footer segments).
252
+ - `compactor`: the kept tail is sized to the model's context window (recut above 40%, `keep:N` included) and the summary is capped at 8% of it, so compaction can no longer overflow small-context models.
253
+ - `compactor`: secrets are redacted before summary items are clipped (a clipped quote could leak a password).
254
+ - `compactor`: `/unipi:compact-doctor` no longer calls the jev method "model summary"; `/unipi:compact-stats` counts jev separately; a manual compaction with nothing to compact no longer repeats Pi's error.
255
+ - `kanboard` tests wrote a fake judge key (`"k"`) into the real `~/.unipi/config/long-horizon/config.json`, which silently disabled the jev judge. They now use project scope.
256
+
257
+ ## [3.0.0-alpha.3] — 2026-09-27
258
+
259
+ ### Breaking Changes
260
+
261
+ - **BREAKING: `subagents` rebuilt on Devin's model.** `spawn_helper`/`get_helper_result` and `bg_delegate`/`bg_result` are gone, along with workflow scripts, missions, schedules, budgets, acceptance gates, agent memory, worktrees, prompt templates and the bundled agents. **Migration path:** use `run_subagent` (foreground / background / resume) with `subagent_explore` or `subagent_general`, or a custom markdown agent in `~/.unipi/config/agents` / `<project>/.unipi/config/agents` (`/unipi:agents` creates them). `read_subagent` replaces the old result tools. Saved `backgroundTasks.delegate.*` settings are ignored, not deleted.
262
+ - **BREAKING: `btw` is an inline panel.** `/unipi:btw-new`, `-tangent`, `-clear`, `-inject`, `-summarize` and `--save` are removed; each `/unipi:btw` question runs in a fresh read-only session seeded from the main branch. Old btw notes still render.
263
+ - **BREAKING: `/unipi:model` saves the default with Alt+Enter**, not Ctrl+S (which clashed with terminals, VS Code, Zellij and XOFF). The startup model and thinking level are also in `/unipi:settings → Fusion → Startup`.
264
+ - `long-horizon`: default mode is now `none` (the judge still routes); set `longHorizon.defaultMode` to keep the old behaviour.
265
+ - `workflow`: the all-projects permission mode moved to its own `permission.defaultMode` key (migrated once from a legacy global `mode`).
266
+
267
+ ### Added
268
+
269
+ - **subagents: Devin-parity screens.** Live foreground card, `N subagents (k running) · ↓ select` strip, ↓ opens a dock (view transcript, `f` foreground, `x` cancel), Ctrl+B backgrounds and Esc cancels a foreground run, state survives resume. Settings hub: default model, thinking, max running, "Manage agents…".
270
+ - **fusion: Devin-parity sidekick.** Steps stream into the chat, blocking handoffs forward approvals to you, background handoffs deny them; the sidekick runs the lead's extensions. Fusion's lead policy and long-horizon's mode block are named system-prompt sections (long-horizon used to drop the lead policy).
271
+ - **kanboard:** task strategies (none/goal/ralph/swarm/graph) and plan-first labels, board default strategy `auto` (jev picks), blocking policy `avoid` (agents note assumptions instead of blocking), grouped board settings dialog written through to the extension settings, Review lane "Done all".
272
+ - **TUI:** one visual language from a shared kit in `@pi-unipi/core` — crafted spinner, badges, rails, progress bars. Subagent cards settle to ✓/✗ in place; background notices, `read_subagent` and the dock are badges; memory cards are rails.
273
+ - **Progress bars** for ralph (checklist), kanboard (board) and goal (a user-only side estimate + summary per loop and on `/unipi:goal status`, configurable in Long-Horizon → Progress).
274
+ - **input-shortcuts:** Ctrl+C keeps the cleared input struck through in the transcript (never sent to the model); ↑ restores it.
275
+ - `core`: every unipi command echoes `❭ /cmd args` in the transcript; the settings engine has an optional `onSet` hook.
276
+ - `npm run tui:gallery` — standalone preview of UniPi's TUI designs, spinners and terminal capabilities.
277
+
278
+ ### Fixed
279
+
280
+ - **long-horizon: goal and ralph loops no longer stop after the first turn.** The next-turn message was sent while pi still counted the turn as running and was rejected (`Agent is already processing`); it is now queued as a follow-up.
281
+ - **long-horizon: batched goals no longer stall.** A turn that changed files and then claimed completion counted as no progress when the verifier said not met, so goals that claim after every batch got a generic nudge instead of the verifier's feedback and paused after eight claims.
282
+ - **fusion:** the Fusion row can always be applied — the model cache refreshes on a miss (bridge-registered models were "not available"), stale saved lead/sidekick keys are dropped, and Enter/Tab opens the dropdown for a missing half. Sidekick tools only appear while Fusion is active; the picker is wide again.
283
+ - **settings:** the permission project and default rows no longer open two pickers at once.
284
+ - **kanboard:** the binary lookup prefers a source checkout's dev build over a stale platform package.
285
+ - **memory:** at most one queued save reminder.
286
+
9
287
  ## [3.0.0-alpha.2] — 2026-09-26
10
288
 
11
289
  ### Fixed
package/README.md CHANGED
@@ -15,13 +15,13 @@ pi install npm:@pi-unipi/unipi
15
15
 
16
16
  ## What You Get
17
17
 
18
- **[Workflow](./packages/workflow/README.md)** — **plan mode** (`/unipi:plan`, `Alt+P`) and **permission modes** (`ask` · `auto` · `full`). Plan mode makes a session read-only except for its plan file; auto mode lets jev judge ambiguous bash before it runs. The twenty workflow skills moved to [@pi-unipi/skill-registry](./packages/skill-registry/README.md).
18
+ **[Workflow](./packages/workflow/README.md)** — **plan mode** (`/unipi:plan`, `Alt+P`) and **permission modes** (`ask` · `auto` · `full`). Plan mode makes a session read-only except for its plan file; auto mode lets jev judge ambiguous bash before it runs.
19
19
 
20
20
  **[Long-Horizon](./packages/long-horizon/)** — Mode-gated long-horizon execution: `/goal` (one objective until verifiably true, propose+verify), `/ralph` (task-file iteration loops), `/swarm` (independent fan-out + synthesis), `/graph` (dependent multi-step work). A TypeSafe jev prompt judge routes each turn; one automation owner per session with park/resume; runaway-guard steering; token/turn/stall budgets.
21
21
 
22
22
  **[Memory](./packages/memory/README.md)** — Markdown files + [MemPalace](https://github.com/mempalace/mempalace) semantic search share a memory palace across pi, Devin, and zcode. Facts, preferences, and decisions persist across sessions; v2 data converts via `/unipi:memory migrate`.
23
23
 
24
- **[Compactor](./packages/compactor/README.md)** — Zero-LLM context engine. 6-stage pipeline hits 95%+ token reduction at zero API cost. Session continuity, percentage auto-compaction, session recall, and sandbox execution.
24
+ **[Compactor](./packages/compactor/README.md)** — Compaction that keeps work going. Lossless zero-LLM summaries (or Pi's model summary), rebuilt from the full session history, led by the live goal/ralph/kanboard state; the full history stays searchable with session recall.
25
25
 
26
26
  **[Prefix-cache architecture](./docs/prefix-cache-architecture.md)** — Append-only request discipline, explicit cache epochs, deterministic tools, privacy-safe diagnostics, provider limitations, and bounded cold-epoch output.
27
27
 
@@ -33,7 +33,6 @@ pi install npm:@pi-unipi/unipi
33
33
 
34
34
  **[Web API](./packages/web-api/README.md)** — Web search, page reading, content summarization. Defaults to [wigolo](https://github.com/KnockOutEZ/wigolo), a local-first engine with multi-engine search and on-device reranking — $0/query, no API key. Plus a smart-fetch engine with browser-grade TLS fingerprinting. Paid providers as fallbacks, and auto-selection falls through when a provider is unavailable.
35
35
 
36
- **[Image](./packages/image/README.md)** — Generate images from a text prompt and analyze existing ones. 34 image models, plus vision analysis on any model that accepts image input, with a customizable system prompt.
37
36
 
38
37
  **[MCP](./packages/mcp/README.md)** — Browse 7,800+ MCP servers, add them interactively. Tools from servers register automatically as Pi tools.
39
38
 
@@ -41,7 +40,7 @@ pi install npm:@pi-unipi/unipi
41
40
 
42
41
  **[Footer](./packages/footer/README.md)** — Persistent status bar showing live stats from every package. Now with the Glance footer: a framed input box with an animated rainbow brand, git branch title, and a live session strip (turns, wall/tool time, TTFT, tok/s, cache hit). Responsive layout, presets, per-segment toggling.
43
42
 
44
- **[BTW](./packages/btw/README.md)** — Side conversations that run in parallel. Ask questions without interrupting the main agent.
43
+ **[BTW](./packages/btw/README.md)** — Inline side questions (`/unipi:btw`) answered by a fresh read-only session seeded from the current context — the main agent never sees them.
45
44
 
46
45
  **[Ask User](./packages/ask-user/README.md)** — Structured input for decision gates. Single-select, multi-select, freeform. The agent asks instead of guessing.
47
46
 
@@ -92,11 +91,11 @@ Coexists triggers enhance behavior when packages are installed together. Workflo
92
91
  | Kanboard | `/unipi:` | kanboard (board: capture, work runner, web UI) |
93
92
  | Long-Horizon | `/unipi:goal`, `/unipi:ralph`, `/unipi:swarm`, `/unipi:graph` | <prompt>, start, stop, status, resume, clear |
94
93
  | Memory | `/unipi:memory-` | process, search, consolidate, forget |
95
- | Compactor | `/unipi:` | lossless-compact, session-recall, compact-stats, compact-preset, compact-help |
94
+ | Compactor | `/unipi:` | compact-vcc, compact-by-llm, session-recall, compact-stats, compact-doctor, compact-help |
96
95
  | Notify | `/unipi:notify-` | settings, test, set-tg, set-ntfy |
97
96
  | MCP | `/unipi:mcp-` | add, settings, sync, status |
98
97
  | Web | `/unipi:web-` | settings, cache-clear |
99
- | BTW | `/unipi:btw` | question, btw-new, btw-tangent, btw-inject, btw-summarize |
98
+ | BTW | `/unipi:btw` | question |
100
99
  | Utility | `/unipi:` | env, doctor, status, cleanup, badge-name |
101
100
  | Kanboard | `/unipi:kanboard` | toggle, doctor |
102
101
  | Footer | `/unipi:footer` | toggle, settings |
@@ -116,14 +115,12 @@ Coexists triggers enhance behavior when packages are installed together. Workflo
116
115
  | `spawn_helper` / `get_helper_result` | subagents | Parallel agents |
117
116
  | `memory_store` / `memory_search` / `memory_delete` | memory | Memory CRUD |
118
117
  | `web_search` / `multi_web_content_read` / `web_llm_summarize` | web-api | Web research |
119
- | `image_generate` / `image_recognize` | image | Image generation and vision (recognize auto-hides while the session model has vision) |
118
+ | `image_generate` / `image_edit` / `image_recognize` | utility | Image generation, editing and vision (recognize hides while the session model has vision) |
120
119
  | `notify_user` | notify | Push notifications |
121
120
  | `sidekick` / `read_subagent` | fusion | Delegate to the persistent sidekick and collect its report |
122
121
  | `bg_run` / `bg_status` / `bg_logs` / `bg_kill` / `bg_delegate` / `bg_result` | background-tasks | Long-running commands and background delegate agents |
123
122
  | `ask_user` | ask-user | User input |
124
- | `compact` / `session_recall` / `sandbox` | compactor | Context management |
125
- | `ctx_env` | utility | Environment info |
126
- | `set_session_name` | utility | Session name for badge |
123
+ | `session_recall` / `context_budget` | compactor | Context management |
127
124
 
128
125
  ## Development
129
126
 
@@ -141,7 +138,7 @@ unipi/
141
138
  ├── packages/
142
139
  │ ├── core/ # Shared constants, events, utilities
143
140
  │ ├── workflow/ # plan mode + permission modes
144
- │ ├── skill-registry/ # bundled workflow skills (no code yet)
141
+ │ ├── skill-registry/ # per-project skill on/off + jev-judged exposure
145
142
  │ ├── long-horizon/ # /goal /ralph /swarm /graph mode-gated execution
146
143
  │ ├── memory/ # SQLite + vector search
147
144
  │ ├── compactor/ # Context engine
@@ -86,3 +86,17 @@ UniPi's `/unipi:prefix-cache` diagnostic observes this provider-native boundary
86
86
  ## Compaction
87
87
 
88
88
  UniPi currently performs deterministic, zero-LLM compaction. Therefore it does not issue a second summarizer request whose prefix needs warming. UniPi's additional percentage trigger is disabled by default; Pi core's reserve-token safety trigger remains active unless the user changes Pi settings. With Pi 0.84.1 defaults, core compaction triggers above `contextWindow - 16,384` estimated tokens and retains approximately 20,000 recent tokens. Enabling UniPi's optional 80% trigger intentionally trades earlier epoch resets for more headroom, with cooldown and minimum-growth guards against repeat compaction. If LLM summarization is introduced, the summarization call must replay the current conversation's exact system prompt, ordered tools, and leading messages, then append the compaction instruction as the final user message. Replacing the system prompt with a special summarizer prompt would throw away the warm prefix at the most expensive point in the session.
89
+
90
+ ## Continuation nudges (turn arbiter)
91
+
92
+ Long-horizon and kanboard continuations ride **tail `custom_message` entries**
93
+ delivered by core's turn arbiter at `agent_before_settle`
94
+ (`packages/core/src/turn/arbiter.ts`): the previous request's prefix — system
95
+ prompt, tool definitions, prior messages — is untouched, and the nudge is
96
+ appended as one new tail entry before the continuation request. The nudge text
97
+ is **deterministic** for a given state (claim id, nudge counters, mode), so a
98
+ re-offer of the same nudge reproduces the same tail. Nudges never change the
99
+ system prompt and never reorder tools; providers that were mid-flight when the
100
+ nudge was proposed keep their exact surface. The long-horizon kickoff/continuation
101
+ messages live in a one-slot stash (overwritten, kickoff append-only) so at most
102
+ one deterministic tail message is added per settle.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/unipi",
3
- "version": "3.0.0-alpha.2",
3
+ "version": "3.0.0-alpha.20",
4
4
  "description": "All-in-one extension suite for Pi coding agent",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,6 +29,7 @@
29
29
  "publish:all": "npm publish --workspaces --access public",
30
30
  "test": "npx tsx --test tests/*.test.js packages/memory/tests/*.test.ts && npm test --workspaces --if-present",
31
31
  "typecheck": "npx tsc --noEmit --skipLibCheck",
32
+ "tui:gallery": "npx tsx scripts/tui-gallery/index.ts",
32
33
  "publish:kanboard": "node scripts/publish-kanboard-platforms.mjs"
33
34
  },
34
35
  "files": [
@@ -59,7 +60,6 @@
59
60
  "packages/unipi/bundled.js"
60
61
  ],
61
62
  "skills": [
62
- "packages/skill-registry/skills",
63
63
  "packages/memory/skills",
64
64
  "packages/btw/skills",
65
65
  "packages/ask-user/skills",
@@ -69,7 +69,6 @@
69
69
  "packages/notify/skills",
70
70
  "packages/kanboard/skills",
71
71
  "packages/updater/skills",
72
- "packages/image/skills",
73
72
  "packages/subagents/skills"
74
73
  ],
75
74
  "prompts": [
@@ -83,27 +82,26 @@
83
82
  "typebox": "^1.1.38"
84
83
  },
85
84
  "dependencies": {
86
- "@pi-unipi/ask-user": "3.0.0-alpha.2",
87
- "@pi-unipi/background-tasks": "3.0.0-alpha.2",
88
- "@pi-unipi/btw": "3.0.0-alpha.2",
89
- "@pi-unipi/command-enchantment": "3.0.0-alpha.2",
90
- "@pi-unipi/compactor": "3.0.0-alpha.2",
91
- "@pi-unipi/core": "3.0.0-alpha.2",
92
- "@pi-unipi/footer": "3.0.0-alpha.2",
93
- "@pi-unipi/image": "3.0.0-alpha.2",
94
- "@pi-unipi/fusion": "3.0.0-alpha.2",
95
- "@pi-unipi/info-screen": "3.0.0-alpha.2",
96
- "@pi-unipi/input-shortcuts": "3.0.0-alpha.2",
97
- "@pi-unipi/kanboard": "3.0.0-alpha.2",
98
- "@pi-unipi/mcp": "3.0.0-alpha.2",
99
- "@pi-unipi/memory": "3.0.0-alpha.2",
100
- "@pi-unipi/notify": "3.0.0-alpha.2",
101
- "@pi-unipi/skill-registry": "3.0.0-alpha.2",
102
- "@pi-unipi/subagents": "3.0.0-alpha.2",
103
- "@pi-unipi/updater": "3.0.0-alpha.2",
104
- "@pi-unipi/utility": "3.0.0-alpha.2",
105
- "@pi-unipi/web-api": "3.0.0-alpha.2",
106
- "@pi-unipi/workflow": "3.0.0-alpha.2"
85
+ "@pi-unipi/ask-user": "3.0.0-alpha.20",
86
+ "@pi-unipi/background-tasks": "3.0.0-alpha.20",
87
+ "@pi-unipi/btw": "3.0.0-alpha.20",
88
+ "@pi-unipi/command-enchantment": "3.0.0-alpha.20",
89
+ "@pi-unipi/compactor": "3.0.0-alpha.20",
90
+ "@pi-unipi/core": "3.0.0-alpha.20",
91
+ "@pi-unipi/footer": "3.0.0-alpha.20",
92
+ "@pi-unipi/fusion": "3.0.0-alpha.20",
93
+ "@pi-unipi/info-screen": "3.0.0-alpha.20",
94
+ "@pi-unipi/input-shortcuts": "3.0.0-alpha.20",
95
+ "@pi-unipi/kanboard": "3.0.0-alpha.20",
96
+ "@pi-unipi/mcp": "3.0.0-alpha.20",
97
+ "@pi-unipi/memory": "3.0.0-alpha.20",
98
+ "@pi-unipi/notify": "3.0.0-alpha.20",
99
+ "@pi-unipi/skill-registry": "3.0.0-alpha.20",
100
+ "@pi-unipi/subagents": "3.0.0-alpha.20",
101
+ "@pi-unipi/updater": "3.0.0-alpha.20",
102
+ "@pi-unipi/utility": "3.0.0-alpha.20",
103
+ "@pi-unipi/web-api": "3.0.0-alpha.20",
104
+ "@pi-unipi/workflow": "3.0.0-alpha.20"
107
105
  },
108
106
  "devDependencies": {
109
107
  "@earendil-works/pi-agent-core": "^0.87.1",