@pi-unipi/unipi 3.0.0-alpha.3 → 3.0.0-alpha.30

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 (415) hide show
  1. package/CHANGELOG.md +400 -0
  2. package/LICENSE +0 -0
  3. package/README.md +268 -158
  4. package/docs/prefix-cache-architecture.md +14 -0
  5. package/package.json +23 -25
  6. package/packages/ask-user/README.md +90 -99
  7. package/packages/ask-user/ask-ui.ts +306 -732
  8. package/packages/ask-user/clipboard.ts +50 -0
  9. package/packages/ask-user/config.ts +74 -78
  10. package/packages/ask-user/handoff.ts +2 -1
  11. package/packages/ask-user/index.ts +17 -2
  12. package/packages/ask-user/package.json +2 -2
  13. package/packages/ask-user/questions.ts +151 -0
  14. package/packages/ask-user/skills/ask-user/SKILL.md +59 -133
  15. package/packages/ask-user/tools.ts +230 -430
  16. package/packages/ask-user/types.ts +0 -0
  17. package/packages/autocomplete/README.md +46 -21
  18. package/packages/autocomplete/package.json +1 -1
  19. package/packages/autocomplete/src/constants.ts +35 -29
  20. package/packages/autocomplete/src/index.ts +0 -0
  21. package/packages/autocomplete/src/provider.ts +0 -0
  22. package/packages/autocomplete/src/settings.ts +1 -1
  23. package/packages/autocomplete/src/sorting.ts +8 -0
  24. package/packages/background-tasks/README.md +69 -67
  25. package/packages/background-tasks/package.json +2 -2
  26. package/packages/background-tasks/src/cards.ts +77 -50
  27. package/packages/background-tasks/src/child-process.ts +1 -1
  28. package/packages/background-tasks/src/config.ts +5 -18
  29. package/packages/background-tasks/src/index.ts +59 -1
  30. package/packages/background-tasks/src/registry.ts +158 -50
  31. package/packages/background-tasks/src/tools.ts +4 -4
  32. package/packages/background-tasks/src/types.ts +28 -0
  33. package/packages/btw/README.md +59 -13
  34. package/packages/btw/package.json +2 -2
  35. package/packages/btw/skills/btw/SKILL.md +0 -0
  36. package/packages/compactor/README.md +88 -295
  37. package/packages/compactor/index.ts +0 -0
  38. package/packages/compactor/package.json +5 -9
  39. package/packages/compactor/skills/compactor/SKILL.md +13 -20
  40. package/packages/compactor/src/card.ts +90 -0
  41. package/packages/compactor/src/commands/index.ts +73 -130
  42. package/packages/compactor/src/compaction/brief.ts +0 -0
  43. package/packages/compactor/src/compaction/compact-args.ts +5 -3
  44. package/packages/compactor/src/compaction/content.ts +0 -0
  45. package/packages/compactor/src/compaction/extract/commits.ts +0 -0
  46. package/packages/compactor/src/compaction/extract/files.ts +0 -0
  47. package/packages/compactor/src/compaction/filter-noise.ts +1 -1
  48. package/packages/compactor/src/compaction/hooks.ts +636 -308
  49. package/packages/compactor/src/compaction/normalize.ts +0 -0
  50. package/packages/compactor/src/compaction/sanitize.ts +0 -0
  51. package/packages/compactor/src/compaction/search-entries.ts +0 -0
  52. package/packages/compactor/src/compaction/source.ts +178 -0
  53. package/packages/compactor/src/compaction/summarize.ts +586 -52
  54. package/packages/compactor/src/config/manager.ts +184 -126
  55. package/packages/compactor/src/config/schema.ts +47 -48
  56. package/packages/compactor/src/display/diff-width-safety.ts +0 -0
  57. package/packages/compactor/src/index.ts +77 -427
  58. package/packages/compactor/src/info-screen.ts +74 -190
  59. package/packages/compactor/src/session/recall-blocks.ts +1 -1
  60. package/packages/compactor/src/stats.ts +76 -0
  61. package/packages/compactor/src/tools/context-budget.ts +17 -34
  62. package/packages/compactor/src/tools/ctx-doctor.ts +45 -36
  63. package/packages/compactor/src/tools/register.ts +29 -269
  64. package/packages/compactor/src/tools/vcc-recall.ts +0 -0
  65. package/packages/compactor/src/types.ts +43 -186
  66. package/packages/core/README.md +104 -69
  67. package/packages/core/compaction-context.ts +41 -0
  68. package/packages/core/constants.ts +10 -34
  69. package/packages/core/detachable-bash.ts +139 -0
  70. package/packages/core/events.ts +0 -53
  71. package/packages/core/global-types.ts +0 -0
  72. package/packages/core/global.d.ts +10 -0
  73. package/packages/core/harness-messages.ts +416 -0
  74. package/packages/core/index.ts +16 -0
  75. package/packages/core/kanboard-status.ts +49 -0
  76. package/packages/core/long-horizon-owner-status.ts +46 -0
  77. package/packages/core/model-cache.ts +81 -7
  78. package/packages/core/move.ts +39 -0
  79. package/packages/core/package.json +6 -3
  80. package/packages/core/src/attach/detect.ts +163 -0
  81. package/packages/core/src/child-agent/readers.ts +2 -1
  82. package/packages/core/src/child-agent/runtime.ts +14 -1
  83. package/packages/core/src/compaction-savings.ts +122 -0
  84. package/packages/core/src/evidence.ts +78 -0
  85. package/packages/core/src/hints/browser.ts +278 -0
  86. package/packages/core/src/hints/crab-data.ts +19 -0
  87. package/packages/core/src/hints/index.ts +907 -0
  88. package/packages/core/src/hints/lines.ts +897 -0
  89. package/packages/core/src/hints/store.ts +120 -0
  90. package/packages/core/src/jev/chatter.ts +24 -0
  91. package/packages/core/src/jev/settings.ts +178 -14
  92. package/packages/core/src/package-colors.ts +2 -0
  93. package/packages/core/src/settings/catalog.ts +39 -15
  94. package/packages/core/src/settings/hub.ts +177 -11
  95. package/packages/core/src/settings/open.ts +49 -0
  96. package/packages/core/src/settings/schema.ts +32 -9
  97. package/packages/core/src/tui/hub-kit.ts +16 -6
  98. package/packages/core/src/tui/viz.ts +511 -0
  99. package/packages/core/src/turn/arbiter.ts +290 -0
  100. package/packages/core/utils.ts +0 -0
  101. package/packages/footer/README.md +66 -125
  102. package/packages/footer/index.ts +0 -0
  103. package/packages/footer/package.json +3 -3
  104. package/packages/footer/src/commands.ts +12 -41
  105. package/packages/footer/src/config.ts +164 -207
  106. package/packages/footer/src/events.ts +40 -247
  107. package/packages/footer/src/glance-editor.ts +133 -40
  108. package/packages/footer/src/index.ts +195 -346
  109. package/packages/footer/src/registry/index.ts +4 -53
  110. package/packages/footer/src/rendering/icons.ts +18 -21
  111. package/packages/footer/src/segments/compactor.ts +27 -168
  112. package/packages/footer/src/segments/long-horizon.ts +2 -35
  113. package/packages/footer/src/session-scan.ts +271 -0
  114. package/packages/footer/src/strip.ts +238 -0
  115. package/packages/footer/src/types.ts +48 -135
  116. package/packages/footer/types.ts +0 -0
  117. package/packages/fusion/README.md +83 -140
  118. package/packages/fusion/package.json +4 -3
  119. package/packages/fusion/src/index.ts +56 -7
  120. package/packages/fusion/src/nudge.ts +59 -2
  121. package/packages/fusion/src/picker.ts +78 -22
  122. package/packages/fusion/src/preset.ts +5 -5
  123. package/packages/fusion/src/prompts.ts +2 -2
  124. package/packages/fusion/src/tools.ts +41 -0
  125. package/packages/fusion/src/transcript.ts +23 -36
  126. package/packages/info-screen/README.md +157 -66
  127. package/packages/info-screen/config.ts +20 -13
  128. package/packages/info-screen/core-groups.ts +281 -483
  129. package/packages/info-screen/index.ts +197 -165
  130. package/packages/info-screen/package.json +7 -3
  131. package/packages/info-screen/pages/context.ts +211 -0
  132. package/packages/info-screen/pages/inventory.ts +156 -0
  133. package/packages/info-screen/pages/modules.ts +358 -0
  134. package/packages/info-screen/pages/session.ts +356 -0
  135. package/packages/info-screen/pages/usage.ts +170 -0
  136. package/packages/info-screen/palette.ts +80 -0
  137. package/packages/info-screen/registry.ts +183 -105
  138. package/packages/info-screen/tui/info-overlay.ts +287 -499
  139. package/packages/info-screen/tui/page-kit.ts +222 -0
  140. package/packages/info-screen/tui/self-dismiss.ts +55 -0
  141. package/packages/info-screen/tui/splash.ts +204 -0
  142. package/packages/info-screen/types.ts +39 -10
  143. package/packages/info-screen/usage-parser.ts +147 -11
  144. package/packages/input-shortcuts/README.md +47 -59
  145. package/packages/input-shortcuts/package.json +2 -2
  146. package/packages/input-shortcuts/src/burst.ts +88 -0
  147. package/packages/input-shortcuts/src/chord-overlay.ts +20 -70
  148. package/packages/input-shortcuts/src/index.ts +96 -193
  149. package/packages/input-shortcuts/src/last-response.ts +40 -0
  150. package/packages/input-shortcuts/src/registers.ts +8 -23
  151. package/packages/input-shortcuts/src/settings.ts +4 -0
  152. package/packages/input-shortcuts/src/types.ts +4 -16
  153. package/packages/input-shortcuts/src/undo-redo.ts +59 -47
  154. package/packages/kanboard/README.md +98 -186
  155. package/packages/kanboard/index.ts +293 -56
  156. package/packages/kanboard/package.json +8 -8
  157. package/packages/kanboard/skills/kanboard/SKILL.md +67 -31
  158. package/packages/kanboard/src/badges.ts +93 -0
  159. package/packages/kanboard/src/commands.ts +240 -99
  160. package/packages/kanboard/src/debug.ts +20 -0
  161. package/packages/kanboard/src/guard.ts +267 -109
  162. package/packages/kanboard/src/monitor.ts +330 -0
  163. package/packages/kanboard/src/move.ts +63 -0
  164. package/packages/kanboard/src/notice-buffer.ts +74 -0
  165. package/packages/kanboard/src/reminders.ts +234 -0
  166. package/packages/kanboard/src/settings.ts +90 -89
  167. package/packages/kanboard/src/shapes.ts +5 -0
  168. package/packages/long-horizon/README.md +98 -16
  169. package/packages/long-horizon/index.ts +160 -18
  170. package/packages/long-horizon/package.json +3 -3
  171. package/packages/long-horizon/src/commands.ts +93 -8
  172. package/packages/long-horizon/src/compaction-brief.ts +35 -0
  173. package/packages/long-horizon/src/engine/continuation.ts +80 -12
  174. package/packages/long-horizon/src/engine/goal-state.ts +62 -12
  175. package/packages/long-horizon/src/engine/nudge-stash.ts +71 -0
  176. package/packages/long-horizon/src/engine/ralph.ts +3 -2
  177. package/packages/long-horizon/src/engine/runaway.ts +67 -10
  178. package/packages/long-horizon/src/engine/verifier.ts +19 -0
  179. package/packages/long-horizon/src/gate.ts +103 -5
  180. package/packages/long-horizon/src/judge/resolve.ts +1 -0
  181. package/packages/long-horizon/src/owner.ts +35 -2
  182. package/packages/long-horizon/src/prompts/goal.ts +1 -1
  183. package/packages/long-horizon/src/runtime.ts +117 -13
  184. package/packages/long-horizon/src/settings.ts +39 -48
  185. package/packages/long-horizon/src/tools/goal.ts +6 -0
  186. package/packages/mcp/README.md +74 -62
  187. package/packages/mcp/package.json +2 -2
  188. package/packages/mcp/skills/mcp/SKILL.md +0 -0
  189. package/packages/mcp/src/bridge/registry.ts +0 -0
  190. package/packages/mcp/src/bridge/translator.ts +0 -0
  191. package/packages/mcp/src/index.ts +14 -42
  192. package/packages/mcp/src/settings.ts +52 -0
  193. package/packages/mcp/src/tui/add-overlay.ts +0 -0
  194. package/packages/mcp/src/tui/settings-overlay.ts +0 -0
  195. package/packages/memory/README.md +93 -118
  196. package/packages/memory/commands.ts +7 -2
  197. package/packages/memory/index.ts +194 -20
  198. package/packages/memory/move.ts +194 -0
  199. package/packages/memory/package.json +4 -3
  200. package/packages/memory/save-session.ts +264 -0
  201. package/packages/memory/settings.ts +112 -18
  202. package/packages/memory/skills/memory/SKILL.md +0 -0
  203. package/packages/memory/tools.ts +155 -99
  204. package/packages/notify/README.md +88 -119
  205. package/packages/notify/activity.ts +4 -2
  206. package/packages/notify/ask-user-prompt-message.ts +0 -0
  207. package/packages/notify/commands.ts +0 -0
  208. package/packages/notify/events.ts +116 -11
  209. package/packages/notify/input-needed-message.ts +27 -0
  210. package/packages/notify/ntfy-config.ts +0 -0
  211. package/packages/notify/package.json +2 -2
  212. package/packages/notify/platforms/focus-win.ts +0 -0
  213. package/packages/notify/platforms/focus.ts +0 -0
  214. package/packages/notify/platforms/gotify.ts +0 -0
  215. package/packages/notify/platforms/native.ts +0 -0
  216. package/packages/notify/platforms/node-notifier.d.ts +0 -0
  217. package/packages/notify/platforms/ntfy.ts +0 -0
  218. package/packages/notify/platforms/telegram.ts +0 -0
  219. package/packages/notify/settings.ts +60 -26
  220. package/packages/notify/skills/configure-notify/SKILL.md +4 -2
  221. package/packages/notify/skills/notify/SKILL.md +0 -0
  222. package/packages/notify/summarize.ts +0 -0
  223. package/packages/notify/tools.ts +0 -0
  224. package/packages/skill-registry/README.md +89 -18
  225. package/packages/skill-registry/index.ts +234 -0
  226. package/packages/skill-registry/package.json +19 -8
  227. package/packages/skill-registry/src/editor.ts +206 -0
  228. package/packages/skill-registry/src/judge.ts +289 -0
  229. package/packages/skill-registry/src/registry.ts +99 -0
  230. package/packages/skill-registry/src/settings.ts +259 -0
  231. package/packages/skill-registry/src/vault.ts +80 -0
  232. package/packages/subagents/README.md +77 -32
  233. package/packages/subagents/package.json +3 -2
  234. package/packages/subagents/src/cards.ts +15 -5
  235. package/packages/subagents/src/index.ts +76 -23
  236. package/packages/subagents/src/manager.ts +31 -1
  237. package/packages/subagents/src/model-resolver.ts +0 -0
  238. package/packages/subagents/src/ui.ts +67 -6
  239. package/packages/unipi/bundled.js +45245 -39309
  240. package/packages/unipi/index.ts +80 -10
  241. package/packages/updater/README.md +53 -55
  242. package/packages/updater/index.ts +0 -0
  243. package/packages/updater/package.json +2 -2
  244. package/packages/updater/skills/configure-updater/SKILL.md +0 -0
  245. package/packages/updater/src/cache.ts +0 -0
  246. package/packages/updater/src/changelog.ts +0 -0
  247. package/packages/updater/src/checker.ts +0 -0
  248. package/packages/updater/src/index.ts +22 -9
  249. package/packages/updater/src/installer.ts +0 -0
  250. package/packages/updater/src/markdown.ts +0 -0
  251. package/packages/updater/src/settings.ts +8 -2
  252. package/packages/updater/src/tui/changelog-overlay.ts +0 -0
  253. package/packages/updater/src/tui/readme-overlay.ts +0 -0
  254. package/packages/updater/src/tui/update-overlay.ts +0 -0
  255. package/packages/updater/src/version.ts +0 -0
  256. package/packages/updater/types.ts +0 -0
  257. package/packages/utility/README.md +111 -74
  258. package/packages/utility/package.json +2 -2
  259. package/packages/utility/skills/image/SKILL.md +37 -0
  260. package/packages/utility/skills/summarize/SKILL.md +311 -0
  261. package/packages/utility/skills/utility/SKILL.md +18 -60
  262. package/packages/utility/src/answer/extract.ts +128 -0
  263. package/packages/utility/src/answer/index.ts +218 -0
  264. package/packages/utility/src/answer/reply.ts +133 -0
  265. package/packages/utility/src/answer/web.ts +167 -0
  266. package/packages/utility/src/attach/index.ts +205 -0
  267. package/packages/utility/src/commands.ts +38 -142
  268. package/packages/utility/src/diagnostics/engine.ts +50 -5
  269. package/packages/utility/src/image/index.ts +33 -0
  270. package/packages/utility/src/image/models.ts +221 -0
  271. package/packages/{image/src → utility/src/image}/recognize.ts +2 -2
  272. package/packages/utility/src/image/settings.ts +230 -0
  273. package/packages/{image/src/image-source.ts → utility/src/image/source.ts} +1 -1
  274. package/packages/utility/src/image/tools.ts +168 -0
  275. package/packages/utility/src/image/transports.ts +186 -0
  276. package/packages/utility/src/index.ts +81 -389
  277. package/packages/utility/src/lifecycle/cleanup.ts +116 -311
  278. package/packages/utility/src/move/git.ts +37 -0
  279. package/packages/utility/src/move/index.ts +144 -0
  280. package/packages/utility/src/move/pi-state.ts +158 -0
  281. package/packages/utility/src/rename/gate.ts +102 -0
  282. package/packages/utility/src/rename/index.ts +191 -0
  283. package/packages/utility/src/rename/session.ts +170 -0
  284. package/packages/utility/src/render/delegated.ts +288 -0
  285. package/packages/utility/src/render/harness.ts +756 -0
  286. package/packages/utility/src/render/images.ts +51 -0
  287. package/packages/utility/src/render/parse.ts +156 -0
  288. package/packages/utility/src/render/pi-settings.ts +38 -0
  289. package/packages/utility/src/render/reply-bg.ts +335 -0
  290. package/packages/utility/src/render/simple.ts +729 -0
  291. package/packages/utility/src/render/spacing.ts +247 -0
  292. package/packages/utility/src/render/styled.ts +251 -0
  293. package/packages/utility/src/render/tools.ts +378 -0
  294. package/packages/utility/src/settings.ts +166 -233
  295. package/packages/utility/src/summarize/index.ts +55 -0
  296. package/packages/utility/src/types.ts +1 -222
  297. package/packages/watchdog/README.md +80 -41
  298. package/packages/watchdog/index.ts +136 -35
  299. package/packages/watchdog/package.json +3 -3
  300. package/packages/watchdog/src/bash-prompt.ts +65 -0
  301. package/packages/watchdog/src/config.ts +37 -30
  302. package/packages/watchdog/src/decide.ts +36 -0
  303. package/packages/watchdog/src/proc-sample.ts +62 -0
  304. package/packages/web-api/README.md +78 -126
  305. package/packages/web-api/package.json +2 -2
  306. package/packages/web-api/skills/web/SKILL.md +0 -0
  307. package/packages/web-api/src/cache.ts +0 -0
  308. package/packages/web-api/src/commands.ts +0 -0
  309. package/packages/web-api/src/engine/constants.ts +0 -0
  310. package/packages/web-api/src/engine/dependencies.ts +0 -0
  311. package/packages/web-api/src/engine/dom.ts +0 -0
  312. package/packages/web-api/src/engine/extract.ts +0 -0
  313. package/packages/web-api/src/engine/format.ts +0 -0
  314. package/packages/web-api/src/engine/profiles.ts +0 -0
  315. package/packages/web-api/src/engine/types.ts +0 -0
  316. package/packages/web-api/src/index.ts +38 -1
  317. package/packages/web-api/src/providers/base.ts +0 -0
  318. package/packages/web-api/src/providers/duckduckgo.ts +0 -0
  319. package/packages/web-api/src/providers/firecrawl.ts +0 -0
  320. package/packages/web-api/src/providers/jina-reader.ts +0 -0
  321. package/packages/web-api/src/providers/jina-search.ts +0 -0
  322. package/packages/web-api/src/providers/perplexity.ts +0 -0
  323. package/packages/web-api/src/providers/registry.ts +0 -0
  324. package/packages/web-api/src/providers/serpapi.ts +0 -0
  325. package/packages/web-api/src/providers/tavily.ts +0 -0
  326. package/packages/web-api/src/settings.ts +27 -14
  327. package/packages/web-api/src/tools.ts +50 -40
  328. package/packages/web-api/src/tui/provider-selector.ts +0 -0
  329. package/packages/workflow/README.md +79 -99
  330. package/packages/workflow/index.ts +24 -6
  331. package/packages/workflow/package.json +2 -2
  332. package/packages/workflow/src/permission/decide.ts +7 -5
  333. package/packages/workflow/src/permission/index.ts +7 -6
  334. package/packages/workflow/src/permission/settings.ts +14 -20
  335. package/packages/workflow/src/plan/enforce.ts +32 -32
  336. package/packages/workflow/src/plan/index.ts +97 -22
  337. package/packages/workflow/src/plan/review.ts +167 -43
  338. package/packages/workflow/src/plan/state.ts +4 -2
  339. package/packages/compactor/skills/compactor-detail/SKILL.md +0 -116
  340. package/packages/compactor/skills/compactor-doctor/SKILL.md +0 -71
  341. package/packages/compactor/skills/compactor-stats/SKILL.md +0 -51
  342. package/packages/compactor/src/compaction/build-sections.ts +0 -76
  343. package/packages/compactor/src/compaction/extract/goals.ts +0 -36
  344. package/packages/compactor/src/compaction/extract/preferences.ts +0 -40
  345. package/packages/compactor/src/compaction/format.ts +0 -53
  346. package/packages/compactor/src/compaction/merge.ts +0 -143
  347. package/packages/compactor/src/config/presets.ts +0 -160
  348. package/packages/compactor/src/executor/executor.ts +0 -233
  349. package/packages/compactor/src/executor/runtime.ts +0 -115
  350. package/packages/compactor/src/security/evaluator.ts +0 -89
  351. package/packages/compactor/src/security/policy.ts +0 -96
  352. package/packages/compactor/src/security/scanner.ts +0 -65
  353. package/packages/compactor/src/session/auto-inject.ts +0 -60
  354. package/packages/compactor/src/session/db.ts +0 -325
  355. package/packages/compactor/src/session/extract.ts +0 -144
  356. package/packages/compactor/src/session/resume-inject.ts +0 -64
  357. package/packages/compactor/src/session/snapshot.ts +0 -327
  358. package/packages/compactor/src/tools/ctx-batch-execute.ts +0 -41
  359. package/packages/compactor/src/tools/ctx-execute-file.ts +0 -23
  360. package/packages/compactor/src/tools/ctx-execute.ts +0 -23
  361. package/packages/compactor/src/tools/ctx-stats.ts +0 -96
  362. package/packages/footer/src/help.ts +0 -160
  363. package/packages/footer/src/presets.ts +0 -129
  364. package/packages/footer/src/rendering/renderer.ts +0 -454
  365. package/packages/footer/src/rendering/separators.ts +0 -102
  366. package/packages/footer/src/segments/core.ts +0 -412
  367. package/packages/footer/src/segments/kanboard.ts +0 -91
  368. package/packages/footer/src/segments/mcp.ts +0 -109
  369. package/packages/footer/src/segments/memory.ts +0 -168
  370. package/packages/footer/src/segments/notify.ts +0 -61
  371. package/packages/footer/src/segments/ralph.ts +0 -123
  372. package/packages/footer/src/segments/status-ext.ts +0 -124
  373. package/packages/footer/src/segments/workflow.ts +0 -124
  374. package/packages/image/README.md +0 -99
  375. package/packages/image/package.json +0 -61
  376. package/packages/image/skills/image/SKILL.md +0 -76
  377. package/packages/image/src/generate.ts +0 -256
  378. package/packages/image/src/index.ts +0 -135
  379. package/packages/image/src/models.ts +0 -519
  380. package/packages/image/src/openai-images-api.ts +0 -282
  381. package/packages/image/src/register-providers.ts +0 -209
  382. package/packages/image/src/settings.ts +0 -173
  383. package/packages/image/src/tools.ts +0 -326
  384. package/packages/input-shortcuts/src/clipboard.ts +0 -119
  385. package/packages/kanboard/src/runner.ts +0 -952
  386. package/packages/skill-registry/skills/auto/SKILL.md +0 -465
  387. package/packages/skill-registry/skills/brainstorm/SKILL.md +0 -219
  388. package/packages/skill-registry/skills/chore-create/SKILL.md +0 -315
  389. package/packages/skill-registry/skills/chore-execute/SKILL.md +0 -314
  390. package/packages/skill-registry/skills/consolidate/SKILL.md +0 -142
  391. package/packages/skill-registry/skills/consultant/SKILL.md +0 -97
  392. package/packages/skill-registry/skills/debug/SKILL.md +0 -228
  393. package/packages/skill-registry/skills/document/SKILL.md +0 -120
  394. package/packages/skill-registry/skills/fix/SKILL.md +0 -212
  395. package/packages/skill-registry/skills/gather-context/SKILL.md +0 -145
  396. package/packages/skill-registry/skills/plan/SKILL.md +0 -231
  397. package/packages/skill-registry/skills/quick-fix/SKILL.md +0 -135
  398. package/packages/skill-registry/skills/quick-work/SKILL.md +0 -110
  399. package/packages/skill-registry/skills/research/SKILL.md +0 -251
  400. package/packages/skill-registry/skills/review-work/SKILL.md +0 -187
  401. package/packages/skill-registry/skills/scan-issues/SKILL.md +0 -195
  402. package/packages/skill-registry/skills/work/SKILL.md +0 -218
  403. package/packages/skill-registry/skills/worktree-create/SKILL.md +0 -69
  404. package/packages/skill-registry/skills/worktree-list/SKILL.md +0 -78
  405. package/packages/skill-registry/skills/worktree-merge/SKILL.md +0 -89
  406. package/packages/subagents/src/badge-session.ts +0 -46
  407. package/packages/subagents/src/badge.ts +0 -43
  408. package/packages/utility/src/analytics/collector.ts +0 -293
  409. package/packages/utility/src/info-screen.ts +0 -80
  410. package/packages/utility/src/lifecycle/process.ts +0 -162
  411. package/packages/utility/src/prefix-cache.ts +0 -263
  412. package/packages/utility/src/skill-discovery.ts +0 -542
  413. package/packages/utility/src/tools/env.ts +0 -113
  414. package/packages/utility/src/tui/name-badge-state.ts +0 -315
  415. package/packages/utility/src/tui/name-badge.ts +0 -109
package/CHANGELOG.md CHANGED
@@ -6,6 +6,406 @@ 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.30] — 2026-10-05
10
+
11
+ ### Changed
12
+ - `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)
13
+ - `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)
14
+ - `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)
15
+ - `kanboard`: agents can unblock tasks to Todo or resume a blocked task through `start`, with the usual claim and session limits. (UNI-105)
16
+ - `kanboard`: unblocking and review rework no longer require a description; empty notes produce clean activity text. (UNI-106)
17
+ - `kanboard`: agent-created labels must reuse existing project labels unless `--new-label` explicitly allows a new one; matching preserves stored spelling. (UNI-100)
18
+ - `kanboard`: removed the board's Task defaults tab and legacy Blocking setting, preserving the other board settings. (UNI-101)
19
+ - `kanboard`: `/unipi:kanboard show <lane>` filters the chat board, with lane and `--all` argument autocomplete. (UNI-102)
20
+ - `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)
21
+ - `compactor`: `/unipi:compact-then <prompt>` compacts before continuing, preserving next-turn versus after-run queue behavior while streaming. (UNI-104)
22
+ - `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.
23
+
24
+ ### Fixed
25
+ - `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)
26
+
27
+ ## [3.0.0-alpha.29] — 2026-10-04
28
+
29
+ ### Fixed
30
+ - `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)
31
+
32
+ ## [3.0.0-alpha.28] — 2026-10-04
33
+
34
+ ### Changed
35
+ - `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.
36
+
37
+ ## [3.0.0-alpha.27] — 2026-10-04
38
+
39
+ ### Added
40
+ - `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`.
41
+ - `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`).
42
+ - `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.
43
+ - `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.
44
+
45
+ - `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.
46
+
47
+ ### Changed
48
+ - `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`).
49
+ - `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.
50
+ - `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.
51
+
52
+ ### Removed
53
+ - `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.
54
+
55
+ ### Changed (footer)
56
+ - `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`).
57
+ - `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.
58
+ - `core` / `autocomplete`: `/unipi:footer-help` command entries removed.
59
+
60
+ ### Fixed
61
+ - `footer`: the MODULE_READY announcement now reports the package version instead of a hard-coded `0.1.0`.
62
+
63
+ ### Docs
64
+ - README: the glance-footer caption names tokens, cost and the responsive fit; a new What's new row for alpha.27 (classic footer removed).
65
+
66
+ ## [3.0.0-alpha.26] — 2026-10-04
67
+
68
+ ### Fixed
69
+ - `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)
70
+ - `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)
71
+ - `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.
72
+ - `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).
73
+ - `info-screen`: Usage page leaves one blank line between the model share bar and the ranked model rows.
74
+
75
+ ## [3.0.0-alpha.25] — 2026-10-04
76
+
77
+ ### Added
78
+ - `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)
79
+ - `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)
80
+ - **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)
81
+ - **Usage**: today / week / month spend, 30-day column chart with Monday ticks, model share bar + ranked models. (UNI-81)
82
+ - **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)
83
+ - **MCP, Compactor, Updates, Web, Memory, Keys**: status dots, compaction before→after bars, version track, provider × capability matrix, memory types, keycaps. (UNI-83)
84
+ - `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)
85
+ - `scripts/info-preview`: print the splash and every page at any width without Pi.
86
+ - `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)
87
+ - `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)
88
+ - `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.
89
+ - `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.
90
+ - `long-horizon`: the owner-changed event now carries `reason` when an owner finishes.
91
+ - `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)
92
+
93
+ ### Changed
94
+ - `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)
95
+ - `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)
96
+ - 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)
97
+ - `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.
98
+
99
+ ### Docs
100
+ - 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.
101
+ - `scripts/info-preview/demo.ts`: demo session and history for screenshots — no real paths or spend.
102
+
103
+ ### Performance
104
+ - `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)
105
+
106
+ ## [3.0.0-alpha.24] — 2026-10-04
107
+
108
+ ### Added
109
+ - `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.
110
+ - `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).
111
+ - `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`.
112
+
113
+ ## [3.0.0-alpha.23] — 2026-10-04
114
+
115
+ ### Added
116
+ - `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)
117
+ - 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.
118
+
119
+ ### Changed
120
+ - `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)
121
+ - settings: shorter labels (explanations moved into descriptions), and pruned knobs —
122
+ - `background-tasks`: removed `defaultTimeoutSeconds` (nothing read it).
123
+ - `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`.
124
+ - `memory`: `recallAtStart` + `wakeUp` merged into one **Recall at start** enum (`off`/`reminder`/`wake-up`); stored booleans migrate per scope.
125
+ - `permission`: removed `jevJudge` — auto mode always consults jev.
126
+ - `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`).
127
+ - `image`: custom endpoint fields moved into per-tool **Custom endpoint…** pages (summary shows `off` or the host).
128
+ - `web-api`: Smart fetch section is advanced; `os`/`batchConcurrency` removed from the schema (engine defaults remain).
129
+ - `kanboard`: reorganized into Agent / Housekeeping / **Board server** (advanced, plus open/stop/rotate-token actions); dead `blocking` setting deleted.
130
+
131
+ ### Docs
132
+ - README: dropped the "Why we have it" column from the Proof table.
133
+
134
+ ## [3.0.0-alpha.22] — 2026-10-03
135
+
136
+ ### Changed
137
+ - `utility`: harness annotations (e.g. the Fusion "delegate shell work" nudge) render once in simple mode instead of three rows.
138
+ - `utility`: simple mode hides tool-result images until Ctrl+O; images no longer overlap the text below them in any render style. (UNI-71)
139
+ - `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)
140
+ - `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`.
141
+ - `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)
142
+ - `long-horizon`: `/unipi:regular` and goal stop update the footer mode immediately. (UNI-66)
143
+
144
+ ### Docs
145
+ - v3 docs rewritten in plain controlled English (README, package READMEs, guide, reference, architecture, Unicrab story), with screenshots.
146
+
147
+ ## [3.0.0-alpha.21] — 2026-10-03
148
+
149
+ ### Added
150
+ - `core`: **Hints** system with pixel-crab mascot **Unicrab** (UNI-27).
151
+ - 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.
152
+ - Single-row hint widget above the editor with a 7-column half-block mascot in truecolor/256-color (or opt-in Kitty image mode).
153
+ - 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.
154
+ - `/unipi:hint`: hub-kit overlay browser grouped by category with seen/unseen/learned tags and live filter; `/unipi:hint next` and `/unipi:hint reset`.
155
+ - 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`.
156
+ - Usage-aware learning (`teaches`), whatsnew version checks, startup maxShows (3), event maxShows (2), per-session event cap (4), and single-turn no-replace rules.
157
+
158
+ ### Changed
159
+ - `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.
160
+
161
+ ## [3.0.0-alpha.20] — 2026-10-02
162
+
163
+ ### Added
164
+ - `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)
165
+ - `kanboard`: archive projects from the sidebar's right-click menu into an **Archived** section. (UNI-51)
166
+ - `kanboard`: labels — create or pick labels in the task form; each label gets a stable hash colour. (UNI-60)
167
+ - `kanboard`: task owner — tasks record "Created by agent / user" automatically; read-only. (UNI-59)
168
+ - `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)
169
+
170
+ ### Changed
171
+ - `kanboard` CLI: bare `list` shows only the active lanes (todo, in progress, blocked, in review, done); `--all` adds backlog, cancelled and archived. (UNI-62)
172
+ - `kanboard`: a user can move a Blocked task straight to Done. (UNI-63)
173
+ - `kanboard` (board UI): clicking outside the create/edit task form no longer closes it and discards input. (UNI-61)
174
+ - 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)
175
+ - `memory`: the save-pass card shows humanized token counts with explicit cache read/write labels. (UNI-56)
176
+
177
+ ### Fixed
178
+ - `kanboard`: titles containing `"` no longer gain an extra backslash on every save. (UNI-58)
179
+
180
+ ## [3.0.0-alpha.19] — 2026-10-01
181
+
182
+ ### Added
183
+ - `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.
184
+
185
+ ### Changed
186
+ - 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.
187
+
188
+ ### Fixed
189
+ - 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.
190
+ - 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.
191
+
192
+ ## [3.0.0-alpha.18] — 2026-10-01
193
+
194
+ ### Added
195
+ - `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)
196
+ - `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)
197
+ - `subagents`: a live stat line per subagent — profile, model, duration, tool calls, tokens, cost — in all render styles. (UNI-26)
198
+ - `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)
199
+
200
+ ### Changed
201
+ - `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.
202
+ - `kanboard`: a task needs a title **or** a description — `displayTitle` is derived from the body everywhere; `captureToBacklog` API for other extensions. (UNI-42)
203
+ - `permission`: full mode no longer prompts on writes outside the workspace — everything short of deny rules runs. (UNI-40)
204
+ - 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)
205
+ - `workflow`: `/unipi:plan` opens with a plain-language Summary for the approver. (UNI-28)
206
+ - `fusion`: sidekick effort is set in the `/unipi:model` fusion row — Space toggles the lead/sidekick target, applied live. (UNI-15)
207
+
208
+ ### Removed
209
+ - `compactor`: removed `/unipi:compact-jev` and the jev compaction method — vcc and LLM compaction remain; a saved `method: jev` falls back to vcc.
210
+ - `compactor`: removed the deprecated `/unipi:compact`, `/unipi:lossless-compact` and `/unipi:compact-recall`. (UNI-23)
211
+
212
+ ### Fixed
213
+ - `kanboard show`: width-safe board rows — CJK-aware budgets and truncation on every line; a huge blockedReason no longer crashes pi.
214
+
215
+ ## [3.0.0-alpha.17] — 2026-09-30
216
+
217
+ ### Added
218
+ - `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)
219
+ - `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)
220
+ - `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)
221
+
222
+ ### Changed
223
+ - `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)
224
+ - `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:**).
225
+ - `kanboard` (board UI): the Runner settings section is now Sessions; lane tooltips and the in-progress chip describe `start` / `finish` instead of the runner.
226
+
227
+ ### Removed
228
+ - `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)
229
+ - `kanboard`: the unused `defaultStrategy`, `jevThreshold` and `defaultPlan` settings.
230
+
231
+ ### Fixed
232
+ - `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)
233
+ - `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.
234
+
235
+ ## [3.0.0-alpha.16] — 2026-09-30
236
+
237
+ ### Added
238
+ - `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.
239
+ - `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.
240
+ - `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.
241
+ - `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.
242
+ - `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).
243
+ - `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.
244
+
245
+ ### Changed
246
+ - `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.
247
+ - `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.
248
+ - `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.
249
+ - `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.
250
+ - `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.
251
+
252
+ ### Removed
253
+ - `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.
254
+
255
+ ### Fixed
256
+ - `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.
257
+
258
+ ## [3.0.0-alpha.15] — 2026-09-30
259
+
260
+ ### Fixed
261
+ - `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.
262
+ - `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.
263
+ - `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.
264
+
265
+ ## [3.0.0-alpha.14] — 2026-09-30
266
+
267
+ ### Added
268
+ - `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.
269
+
270
+ ### Fixed
271
+ - `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.
272
+ - `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).
273
+ - `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.
274
+ - `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.
275
+ - `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.
276
+ - `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`).
277
+
278
+ ## [3.0.0-alpha.13] — 2026-09-29
279
+
280
+ ### Fixed
281
+ - 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.
282
+
283
+ ## [3.0.0-alpha.12] — 2026-09-29
284
+
285
+ ### Added
286
+ - `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.
287
+ - `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.
288
+
289
+ ### Changed
290
+ - `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".
291
+ - `kanboard` web UI: claimed cards distinguish an agent claim (`start`ed by a session) from a runner claim.
292
+ - `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).
293
+
294
+ ### Fixed
295
+ - `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).
296
+
297
+ ## [3.0.0-alpha.11] — 2026-09-29
298
+
299
+ ### Removed
300
+ - `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).
301
+
302
+ ### Changed
303
+ - `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.
304
+ - `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).
305
+ - `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.
306
+
307
+ ## [3.0.0-alpha.10] — 2026-09-29
308
+
309
+ ### Changed
310
+ - `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.
311
+ - `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`.
312
+ - `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`.
313
+
314
+ ## [3.0.0-alpha.9] — 2026-09-29
315
+
316
+ ### Added
317
+ - `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.
318
+ - `long-horizon`: `/unipi:regular` — stops any active owner (incl. ralph loops) and pins the session to plain mode; an explicit mode command unlatches it.
319
+ - `long-horizon`: command runners `unipi:goal-pause` / `unipi:goal-resume` / `unipi:goal-stop` for cross-module callers.
320
+ - `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.
321
+
322
+ ### Changed
323
+ - `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.
324
+ - `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.
325
+ - `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.
326
+ - `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.
327
+ - `kanboard`: `-do` suggestions only for task-id-like tokens (no more task rows under free prose).
328
+ ## [3.0.0-alpha.7] — 2026-09-28
329
+
330
+ ### Changed
331
+
332
+ - `ask-user`: `ask_user` is **off by default** (Settings → Ask User). When off, the agent is told to ask in its reply instead.
333
+
334
+ ## [3.0.0-alpha.6] — 2026-09-28
335
+
336
+ ### Changed
337
+
338
+ - `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.
339
+
340
+ ### Fixed
341
+
342
+ - `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.
343
+ - `compactor`: answers from multi-question `ask_user` results are kept as "question → answer" decisions.
344
+
345
+ ## [3.0.0-alpha.5] — 2026-09-28
346
+
347
+ ### Breaking Changes
348
+
349
+ - **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`.
350
+ - **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.*`.
351
+ - **BREAKING: skill exposure moved** from `utility.skills` to the new `skills` namespace (`@pi-unipi/skill-registry`). Migrated automatically on first read.
352
+
353
+ ### Added
354
+
355
+ - `utility`: `/unipi:retry`, an alias of `/unipi:continue`.
356
+ - `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.
357
+ - `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.
358
+ - `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.
359
+ - `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.
360
+ - `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).
361
+ - `utility`: `/unipi:settings <search>` opens the hub filtered; typing `/settings` lists `/unipi:settings` first.
362
+ - `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).
363
+ - `core`: the shared model cache (`~/.unipi/config/models-cache.json`) records input/output modalities; the settings hub pickers and kanboard read it.
364
+
365
+ ### Changed
366
+
367
+ - `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.
368
+ - `fusion`: `/unipi:model` lists only your preset lead/sidekick models; typing searches the whole catalogue (also inside the lead/sidekick dropdowns).
369
+ - `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.
370
+
371
+ ### Fixed
372
+
373
+ - `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.
374
+ - `core`: capability-filtered model pickers hide entries with no declared input again.
375
+
376
+ ## [3.0.0-alpha.4] — 2026-09-28
377
+
378
+ ### Breaking Changes
379
+
380
+ - **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.
381
+
382
+ ### Added
383
+
384
+ - `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.
385
+ - 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.
386
+ - `ask_user` answers are kept as "question → answer" decisions.
387
+ - Typed credentials are redacted.
388
+ - `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.
389
+ - `compactor`: the settings screen shows 5 main settings (Method, Pi's /compact, When, Percentage, Notifications); everything else is under **Advanced compaction**.
390
+ - `core`: `registerCompactionContext()`. long-horizon (goal, ralph) and kanboard register their live state, and every compaction summary leads with it.
391
+ - `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`.
392
+ - **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.
393
+ - `compactor`: user corrections ("restore the background… I did not request this change") are kept as decisions.
394
+ - `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.
395
+ - `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.
396
+ - `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.
397
+ - `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.
398
+ - `compactor`: the info-screen Compactor tab shows the method and trigger settings, compactions by method, tokens before → after, and the last compaction.
399
+
400
+ ### Fixed
401
+
402
+ - `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.
403
+ - `compactor`: stats come from the session's own compaction entries instead of a fixed "12% kept" guess (also in the footer segments).
404
+ - `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.
405
+ - `compactor`: secrets are redacted before summary items are clipped (a clipped quote could leak a password).
406
+ - `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.
407
+ - `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.
408
+
9
409
  ## [3.0.0-alpha.3] — 2026-09-27
10
410
 
11
411
  ### Breaking Changes
package/LICENSE CHANGED
File without changes