@groeponline/pi-wishcraft 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +16 -7
  3. package/ROADMAP.md +41 -260
  4. package/docs/commands.md +6 -2
  5. package/docs/configuration.md +21 -0
  6. package/docs/design/accessibility.md +71 -0
  7. package/docs/design/deck-layout.md +69 -0
  8. package/docs/design/motion-gallery.md +80 -0
  9. package/docs/design/motion-system.md +119 -0
  10. package/docs/design/presets.md +196 -0
  11. package/docs/design/regression-testing.md +54 -0
  12. package/docs/design/responsive.md +53 -0
  13. package/docs/design/signal.md +68 -0
  14. package/docs/design/theme-contract.md +132 -0
  15. package/docs/design/vnext-overview.md +55 -0
  16. package/docs/design/vnext-release-plan.md +212 -0
  17. package/docs/index.md +19 -1
  18. package/docs/segments.md +1 -1
  19. package/package.json +2 -1
  20. package/src/config/appearance.ts +230 -0
  21. package/src/config/parse.ts +41 -0
  22. package/src/config/presets.ts +184 -0
  23. package/src/config/structural-presets.ts +555 -0
  24. package/src/config/tokens.ts +154 -0
  25. package/src/config/types.ts +210 -2
  26. package/src/extension/commands/commands.ts +36 -12
  27. package/src/extension/commands/powerline-completions.ts +4 -0
  28. package/src/extension/commands/queue-commands.ts +6 -0
  29. package/src/extension/core/segment-context.ts +7 -1
  30. package/src/extension/core/state.ts +14 -0
  31. package/src/extension/core/types.ts +7 -0
  32. package/src/extension/session/session-lifecycle.ts +20 -0
  33. package/src/extension/settings/appearance-write.ts +135 -0
  34. package/src/extension/settings/wishcraft-config-items.ts +119 -0
  35. package/src/extension/settings/wishcraft-config.ts +28 -114
  36. package/src/extension/skills/skill-manager.ts +5 -0
  37. package/src/extension/ui/deck/component.ts +358 -0
  38. package/src/extension/ui/deck/index.ts +34 -0
  39. package/src/extension/ui/deck/render.ts +260 -0
  40. package/src/extension/ui/deck/route-bodies.ts +209 -0
  41. package/src/extension/ui/deck/routes.ts +37 -0
  42. package/src/extension/ui/deck/session-snapshot.ts +104 -0
  43. package/src/extension/ui/deck/types.ts +92 -0
  44. package/src/extension/ui/powerline-menu-view.ts +19 -15
  45. package/src/extension/ui/signal-layout.ts +77 -0
  46. package/src/extension/ui/status-line-renderers.ts +20 -2
  47. package/src/motion/accessibility.ts +59 -0
  48. package/src/motion/catalog-extra.ts +429 -0
  49. package/src/motion/catalog.ts +336 -0
  50. package/src/motion/composer.ts +147 -0
  51. package/src/motion/frames.ts +84 -0
  52. package/src/motion/gallery.ts +77 -0
  53. package/src/motion/index.ts +78 -0
  54. package/src/motion/policy.ts +128 -0
  55. package/src/motion/scheduler.ts +159 -0
  56. package/src/motion/types.ts +132 -0
  57. package/src/render/timer.ts +1 -0
  58. package/src/signal/controller.ts +123 -0
  59. package/src/signal/integration.ts +42 -0
  60. package/src/signal/render.ts +178 -0
  61. package/src/theme/detect.ts +48 -0
  62. package/src/theme/tokens/index.ts +9 -0
  63. package/src/theme/tokens/mapping.ts +62 -0
  64. package/src/theme/tokens/types.ts +39 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [1.2.0] - 2026-08-24
6
+
7
+ ### Changed
8
+ - Deck polish: structural display names (Lanternwake, Hexforge, …), injectable gallery tick, route-specific footers, and Signal three-lane copy. Clock frames stay ASCII-safe. Flat `/wishcraft settings` reloads Signal through `reloadPowerlineFromSettings`.
9
+
10
+ ### Added
11
+ - Wishcraft Deck (`alt+p` / `/wishcraft`) is the operator overlay: eleven routes, `g`-prefix jumps, and a live session snapshot. `/wishcraft settings` (or `config`) opens the flat settings list.
12
+ - `/signal` is the primary status command (`/powerline` remains an alias). No-args still toggles. `/signal menu` opens Navigate / Configure / Status.
13
+ - Ten structural appearance bases (`lanternwake`…`crucible`) apply live Signal colors via `powerline.appearance.base`. Deck Appearance + Enter writes the base. `/signal hexforge` syncs appearance when the layout name is structural.
14
+ - Motion Gallery and Composer on the Deck Motion route. Catalog is 50+ definitions. Enter assigns a motion to a semantic event (`powerline.appearance.motion`).
15
+ - Skill Workbench, idea list, and guardrail rules render inside the Deck Craft routes.
16
+ - First-class motion levels (`full|reduced|functional|off`) via `powerline.motionLevel`, `NO_COLOR`, and screen-reader / reduced-motion host flags.
17
+
5
18
  ## [1.1.0] - 2026-08-23
6
19
 
7
20
  ### Security
package/README.md CHANGED
@@ -39,8 +39,8 @@ Then restart pi or `/reload`. Pi host packages are declared as `peerDependencies
39
39
 
40
40
  | Surface | What it does |
41
41
  | --- | --- |
42
- | Status bar | Git, TPS (1s window over a 5s ring), context, cost, ports, queue. Default placement is the editor top border; `/powerline placement below` moves it. |
43
- | `alt+p` | Three overlays: Navigate, Configure, Status. In Navigate, `→` / `tab` opens per-segment detail (ports, git, cost, context). `alt+i` is the ports list. |
42
+ | Signal | Motion-aware three-lane operator status: model/Git, live activity/tool state, and context/queue. Default placement is the editor top border; `/signal placement below` moves it. |
43
+ | `alt+p` | Wishcraft Deck: session, Signal, skills, ideas, guardrails, appearance. `g` + jump. `/wishcraft settings` is the flat list. `/signal menu` is Navigate / Configure / Status. |
44
44
  | `# <idea>` | File-backed inbox. Does not send the prompt. `/ideas` reviews status, tags, and skill insert. `/ideas next` feeds the oldest active idea into the session. |
45
45
  | `alt+s` | Stash the draft, ask something else, get it back when the run finishes. |
46
46
  | `/skills` | Overlay search on name, description, and path. Enter inserts. `/skills doctor` is the health table. `/skills new` writes a SKILL.md from a template. |
@@ -53,11 +53,11 @@ Pi owns the footer chrome, feed scrolling, and input. Wishcraft supplies widgets
53
53
 
54
54
  ## Daily commands
55
55
 
56
- Activates on load. `/powerline` toggles it. `/powerline <preset>` switches look. Tab completes presets and `placement above|below|toggle`.
56
+ Activates on load. `/signal` toggles it. `/signal <preset>` switches the information layout. `/signal menu` opens Navigate / Configure / Status. `/wishcraft` opens the Deck. Tab completes presets and `placement above|below|toggle`. `/powerline` remains a compatibility alias.
57
57
 
58
58
  ```text
59
- /powerline doctor settings, queue, git, bash, fonts
60
- /powerline export current preset + layout as JSON
59
+ /signal doctor settings, queue, git, bash, fonts
60
+ /signal export current preset + layout as JSON
61
61
  /tps live in/out overlay (same ring as the segment)
62
62
  /tps 40 override POWERLINE_TPS
63
63
  /usage session / today / week from ~/.pi/agent/wishcraft-usage.json
@@ -66,7 +66,8 @@ Activates on load. `/powerline` toggles it. `/powerline <preset>` switches look.
66
66
  /skills doctor health table (broken frontmatter, dupes, unused, budget)
67
67
  /skills new [name] write a SKILL.md from a template
68
68
  /ideas idea review overlay (status, tags, skill insert)
69
- /wishcraft settings TUI
69
+ /wishcraft Deck overlay (operator surface)
70
+ /wishcraft settings flat settings TUI
70
71
  /open-ports listening sockets
71
72
  /cd <path> continue this conversation in another directory
72
73
  /bash-mode sticky shell (also ctrl+shift+b)
@@ -99,7 +100,8 @@ Keybinds (`powerlineShortcuts`, applied after `/reload`; `null` disables):
99
100
  "powerline": {
100
101
  "preset": "chef",
101
102
  "placement": "above",
102
- "welcome": true
103
+ "welcome": true,
104
+ "appearance": { "base": "lanternwake" }
103
105
  }
104
106
  }
105
107
  ```
@@ -221,6 +223,13 @@ Declarative deny/inject rules in the **global** agent settings file. No shell co
221
223
  - The legacy `@groeponline/pi-powerline-footer` package is deprecated on npm in favor of `@groeponline/pi-wishcraft`; the GitHub fork relationship is retained for upstream history and attribution.
222
224
  - Tags are not rewritten. 0.19.x through current stay on the timeline.
223
225
 
226
+ ## vNext Direction
227
+
228
+ Wishcraft is evolving into Pi's animated operator layer — intent, skills, ideas, guardrails, and session state made visible and controllable without turning Pi into an IDE.
229
+
230
+ - **[vNext Stacked PR Release Plan](docs/design/vnext-release-plan.md)**: Specifications for PR0 through PR8.
231
+ - **[Design Corpus](docs/index.md#design-system--vnext-specifications)**: Deck, Signal, Motion Gallery, tokens, and the 10 structural presets. `npm run preview` renders the Deck frames.
232
+
224
233
  ## Docs
225
234
 
226
235
  - [Commands](docs/commands.md)
package/ROADMAP.md CHANGED
@@ -97,6 +97,29 @@ Niet de fork. Niet de SaaS-agent.
97
97
  preset-editor, idee-review, stabiele ChefGroep-statuskeys,
98
98
  documentatie die waar is. Done = README dekt alles wat we shipten,
99
99
  geen kapotte footer-belofte.
100
+ - **vNext — "Operator Layer"** (in uitvoering). Stacked PRs PR0–PR8:
101
+ Deck control surface (`ctx.ui.custom`), animated Signal powerline,
102
+ zero-overhead Motion Engine (0 FPS idle), 10 signature structural presets,
103
+ semantische tokens, en first-class accessibility (`NO_COLOR`, reduced motion).
104
+ Zie [docs/design/vnext-release-plan.md](docs/design/vnext-release-plan.md).
105
+ - PR0 design corpus — geland (`docs/design/`).
106
+ - PR1 motion engine — geland (`src/motion/`): één scheduler op de bestaande
107
+ coalescing timer, semantische events, 6 channels, 0 FPS zonder consumers.
108
+ - PR2 semantic tokens — geland (`src/config/tokens.ts`): `PresetDef.tokens`
109
+ is optioneel en `DEFAULT_TOKENS` reproduceert `getDefaultColors()`.
110
+ - PR3 structural presets — geland (`src/config/structural-presets.ts`,
111
+ `src/config/appearance.ts`): 10 signature presets, mixable layers, Nerd/ASCII
112
+ glyph fallbacks; legacy layout presets ongewijzigd.
113
+ - PR4 animated Signal — geland (`src/signal/`): drie lanes, lifecycle-driven
114
+ motion op één gedeelde scheduler, `/signal` primair en 0 FPS in rust.
115
+ - PR5 Deck — geland (`src/extension/ui/deck/`): unified overlay via
116
+ `ctx.ui.custom`, Alt+P en `/wishcraft`, elf routes, jump/search navigatie.
117
+ - PR6 Appearance / Gallery — geland: Deck Motion gallery + composer,
118
+ 50+ catalog defs, Enter assigns `powerline.appearance.motion`.
119
+ - PR7 accessibility — geland: `src/theme/detect.ts`,
120
+ `src/motion/accessibility.ts`, `powerline.motionLevel`.
121
+ - PR8 Craft + docs — geland: Deck Skill Workbench, idea/guardrail panes,
122
+ `skills/wishcraft-tui/references/*`, project subagents.
100
123
 
101
124
  ## Top-15 track: remaining maturity gaps
102
125
 
@@ -136,227 +159,37 @@ P1 — differentiation and quality:
136
159
  useful features. *Fix: sensible defaults + first-run setup overlay.*
137
160
  3. **Perf budget / low-power mode.** Status renders every ~33ms; heavy
138
161
  segments (bash-history, git) can hit the hot path. *Fix: configurable
139
- refresh + lite mode.*
162
+ refresh + lite mode / repeating scheduler with 0 FPS idle. Scheduler landed
163
+ in PR1 (`src/motion/scheduler.ts`); the segment hot path is still open.*
140
164
  4. **Accessibility (no-color / reduced-motion).** Truecolor + animations
141
165
  (vibes, rainbow think) break on terminals without truecolor. *Fix:
142
- `NO_COLOR`/8-color + reduced-motion respect.*
166
+ `NO_COLOR`/8-color + reduced-motion respect (PR7).*
143
167
 
144
168
  P2 — full product, post-1.0:
145
- 5. **Preset editor in-menu** — custom JSON-only today.
169
+ 5. **Preset editor in-menu** — custom JSON-only today (addressed in PR3 & PR6).
146
170
  6. **Skill install from repo/npm** — discovery + doctor exist; install and
147
- curate missing.
171
+ curate missing (addressed in PR8).
148
172
  7. **Host-status integration** — `ctx.ui.setStatus` beside the footer so
149
173
  status also shows in host UI (`skills.count` is a start; full coverage
150
174
  remains).
151
175
 
152
- Linear tickets for open gaps are still to be filed (not invented in this
153
- ROADMAP).
154
-
155
- ---
156
-
157
- ## 0.19.0 — Correctheid
158
-
159
- Eén campagne, drie stacked PRs. Volgorde vast. Elke PR: `npm run
160
- typecheck && npm test && npx madge --circular src index.ts bash-mode
161
- queue` groen vóór review. Overlay-submenus (CHE-42) zitten in 0.20.
162
-
163
- ### PR A — runtime-bugs — ✅ geland in `feat/wishcraft-0.19` (samen met skills v2, hooks, lantern-welcome, `/wishcraft` config-TUI; supersedeert #10)
164
-
165
- Alle zes punten uit het oorspronkelijke plan zitten in de ene 0.19-branch:
166
- debris weg, filter werkend (v2: substring i.p.v. prefix), cache-invalide op
167
- `session_start` + TTL, woordgrens op inline-triggers, unclosed-fence EOF,
168
- bash-session tempdir + sentinel-colon, `permissions: contents: read`.
169
- `npm pack --dry-run` bevat geen debris (113 files, geen `ook.md`/`test.md`).
170
-
171
- ### PR B — config-afmakers — ✅ geland in `feat/wishcraft-0.19` / #12
172
-
173
- Bestanden: `src/config/`, `src/segments/`, `src/extension/ui/`.
174
-
175
- 1. `segmentLabels` toepassen in `renderSegment` voor **alle** segments
176
- (nu alleen tps/open_ports/subagents).
177
- 2. `segmentOptions.<seg>.template` wint van label
178
- (`"{value} tok/s"`).
179
- 3. `segmentOptions.tps.windowMs` (default 1000), `.mode`
180
- (`both | out | in | total`), `.hideIdle` (default true).
181
- 4. Visibility-toggle in het `alt+p`-menu schrijft live
182
- `powerline.disabledSegments`.
183
-
184
- Done: unit tests op label/template/windowMs-resolutie; handmatige
185
- check: label op `git` + `cost` zichtbaar, TPS hidden bij 0 wanneer
186
- `hideIdle`.
187
-
188
- ### PR C — release 0.19.0
189
-
190
- 1. Merge naar `main` triggert `release.yml`: `node scripts/release.mjs auto --push`.
191
- Commits sinds `v0.18.0` bevatten `feat:` → **0.19.0**. Handmatig blijft
192
- `npm run release minor` + tag-push mogelijk.
193
- 2. Tag-job publiceert met org-secret `NPM_TOKEN` (geen repo-override).
194
- 3. Verify: tag op origin, publish-job groen, `npm view @groeponline/pi-wishcraft version` = 0.19.0.
195
- Catalogus (hard): `npm run verify:package` groen in de release-job;
196
- `npm view @groeponline/pi-wishcraft keywords` bevat `pi-package`,
197
- `pi-extension`, `wishcraft`; `pi.image` is de banner-URL.
198
- Daarna:
199
- - https://pi.dev/packages/@groeponline/pi-wishcraft toont 0.19.0
200
- - https://pi.dev/packages?name=wishcraft toont de card
201
- - https://pi.dev/packages?name=groeponline toont wishcraft naast
202
- fff en orchestrator
203
- Detailpagina bestaat al voor 0.18.0; de zoekindex niet. Nieuwe
204
- publish + discovery-keywords is de refresh. Catalogus-lag tot
205
- een paar uur is oké; ontbreken na 24u = 0.19.1 met dezelfde
206
- metadata, geen stille "later wel".
207
- 4. README: skills-sectie zegt dat filter werkt; geen `ook`/`test`
208
- debris. ROADMAP sync (deze file).
209
- 5. `npm deprecate @groeponline/pi-powerline-footer` blijft een
210
- scope-owner actie buiten deze PR (`deprecate-old-name.yml`,
211
- workflow_dispatch). Blokkeert 0.19 niet.
212
-
213
- Hygiëne die al klaar is en niet opnieuw gepland wordt:
214
-
215
- - Fork-tags weg (51 upstream-tags, 2026-08-18). Eigen reeks vanaf
216
- `v0.10.0`.
217
- - `banner.png` blijft (README). `wishcraft-concept.png` gaat weg in
218
- PR A of een docs-PR, niet in de balk-runtime.
219
- - CHANGELOG inkorten (GRO-1060) doen we **niet** in 0.19. Erfgoed
220
- is history, geen cruft.
221
- - Versie blijft 0.19, geen reset naar 1.0.0.
222
-
223
- GRO-1061 (runner-queue) is ops, geen product-slice.
224
-
225
176
  ---
226
177
 
227
- ## 0.20.0 — Harness
228
-
229
- Vier stacked PRs. 0.20.0 (#19) en 0.21.0 (#13) staan op npm. CHE-42
230
- Configure-overlay, doctor/export, queue-archive en `docs/` zijn geland.
231
- GRO-1414 sluit README-hooks, rest-repairs, `/tps`+`/usage`, substring-filter.
232
-
233
- Overlay-chrome kit, één keer, daarna hergebruiken: box + ronde hoeken,
234
- accent-kop, dim metadata, rechts uitgelijnde counts, `→` detail /
235
- `←` terug / `esc` weg, consistente footer-hints. Eerste consument =
236
- skills v2; tweede = `/usage`; derde = queue/idea. Pure render-
237
- functies, geen `ctx.ui`-mock.
238
-
239
- ### PR E — hooks — ✅ geland in `feat/wishcraft-0.19`; README-voorbeelden in GRO-1414
240
-
241
- Settings: `wishcraft.hooks` met events
242
- `preToolUse | postToolUse | sessionStart | turnEnd`. Per hook
243
- `matcher` (toolName-regex) en `command` (JSON stdin/stdout, timeout
244
- 30s, max 600s). PreToolUse: `allow | deny` + reason die het model
245
- ziet. Exit 2 = deny, stderr-eerste-regel = reason. PostToolUse /
246
- SessionStart: `additionalContext`. Kill-switch
247
- `wishcraft.hooksEnabled: false`. PreToolUse sequentieel (eerste deny
248
- stopt); PostToolUse/turnEnd parallel.
249
-
250
- Done: `parseHookOutput` unit-testen. README met drie werkende
251
- voorbeelden: bash-guard (`rm -rf /` blokkeren), write-audit
252
- (append-only log), SessionStart git-status injectie.
253
-
254
- ### PR F — tool-input repairs — ✅ schema-loze subset in 0.19; rest (JSON-array, `{}`, bare-wrap, path aliases) in GRO-1414. Core tools blijven met rust.
255
-
256
- `tool_call`-handler repareert bekende malformaties vóór executie
257
- (mutable input). Volgorde vast: json-parse vóór bare-wrap.
258
-
259
- 1. `null` voor optioneel weglaten.
260
- 2. JSON-string-array → array.
261
- 3. `{}`-placeholder → array.
262
- 4. bare-string → array-wrap.
263
- 5. markdown-auto-link pads (`[x.md](http://x.md)` → `x.md`).
264
- 6. pad-alias `filePath` / `absolutePath` / `target_file` → `path`.
265
-
266
- Repair-teller per `(tool, repair)` als extension status.
267
- `wishcraft.repairsEnabled` default true. Scope: custom tools +
268
- extensie-tools. Pi core-tools laten we met rust — core valideert
269
- zijn eigen schema's.
270
-
271
- Done: pure `repairToolInput(tool, input)` + table-driven tests voor
272
- de zes gevallen + de parse-vóór-wrap invariant.
273
-
274
- ### PR G — overlay-submenus (CHE-42) — ✅ #19 + expansion (#13 reopen)
275
-
276
- The `alt+p` menu gets stacked `SelectList` overlays (arrows +
277
- descriptions) instead of flat `ctx.ui.select`. Maximum three top-level
278
- entries. #19 lands the top-level tree (Navigate / Configure /
279
- Status). Configure now uses `showSelectOverlay` (CHE-42 remainder). CHE-40
280
- is Done (#18). CHE-41 is Done: `→` in Navigate, snapshot on open, no second `alt+i` path.
281
-
282
- ### PR H — skills manager v2 UI + token-overlays
283
-
284
- Replaces `skill-manager.ts` (242 lines). The data layer builds on Pi
285
- core `loadSkills` / `loadSkillsFromDir` / `Skill` /
286
- `SkillFrontmatter` (publicly exported in
287
- `@earendil-works/pi-coding-agent`).
288
-
289
- UI, non-negotiable:
290
-
291
- - Working search: substring on name + description + path,
292
- case-insensitive; `ctrl+u` clears; empty match = row
293
- `no skills for '<q>'`.
294
- - Categories with headings (bundled / global / project / prompts);
295
- `tab` switches the filter; `s` sorts name ↔ usage.
296
- - `→` detail (frontmatter table, usage, path, body + scroll);
297
- `enter` inserts; `e` opens `$EDITOR` (default nvim) via external
298
- spawn like pi's `!`; `n` creates a new skill in
299
- `~/.pi/agent/skills/<name>/SKILL.md`; `d` delete + confirm.
300
- - Usage-ledger `~/.pi/agent/skill-usage.json` (name, timestamp,
301
- trigger type). Best-effort, never blocking on the input hot path.
302
- - Skill health: core-diagnostics as a warning icon; `?` explains it.
303
-
304
- Same chrome as the segment navigator. English, direct.
305
-
306
- At the same time, small additions:
307
-
308
- - `/tps` overlay: in/out, peak + average over the existing ring.
309
- No new sampler.
310
- - `/usage` overlay: today / this week / this session; per model;
311
- cache-hit %; ASCII sparkline. File
312
- `~/.pi/agent/wishcraft-usage.json` (append-only, compaction at
313
- threshold).
314
- - `wishcraft.tokenBudget.daily` colors the segment red and warns
315
- in the welcome at 80% / 100%. Never blocking.
316
-
317
- Done: substring filter tests; usage-ledger tests; `/tps` reads
318
- the same ring as the segment (no second source of truth).
319
-
320
- ---
178
+ ## vNext Milestone: The Stacked PR Plan
321
179
 
322
- ## 1.0 — Cockpit
323
-
324
- Shipped. The 0.x train ends at this cut. Preset editor and skill
325
- install-from-repo stay post-1.0 (top-15 P2).
326
-
327
- - [x] `/skills doctor` — broken frontmatter, long descriptions, global/project
328
- duplicates, unused skills. Table, not an essay. (GRO-1416, #28)
329
- - [x] `/skills new` templates — standard, browser-workflow, CLI-workflow,
330
- review-checklist. No marketplace. (GRO-1417, #32)
331
- - [x] Policy engine — in-process deny/inject, no spawn. Command hooks remain
332
- for anything that needs a process. (GRO-1418, #29)
333
- - [x] Per-segment detail (CHE-41) — `→` in Navigate, snapshot on open.
334
- - [x] Idea review — `/ideas` overlay: idea / in-progress / done, tags,
335
- Run with skill X. Welcome widget shows next idea + `/ideas next`.
336
- (GRO-1419, #31)
337
- - [x] Status keys — `powerline.tps`, `powerline.ports`, `powerline.preset`,
338
- `powerline.skills.count` via `ctx.ui.setStatus`. Not the public pitch.
339
- (GRO-1420)
340
- - [x] Read-tool hints — continuation hint when core omits a range/offset
341
- summary. (GRO-1420)
342
- - [x] English operator UI. (GRO-1422, #24)
343
- - [x] README lists doctor, new, policy, and idea-review. `banner.png` only.
344
-
345
- ---
346
-
347
- ## Linear
348
-
349
- | Ticket | Actie |
350
- |---|---|
351
- | GRO-1060 fork cleanup | Done. Release-pad bewezen. CHANGELOG niet inkorten. Versie niet resetten. `banner.png` blijft. |
352
- | GRO-1061 CI queue | Ops, niet deze roadmap. |
353
- | CHE-40 `/powerline` tab | Done (#18 / 0.19.2). |
354
- | CHE-41 per-segment detail | Done. `→` in Navigate; snapshot on open; `alt+i` stays ports. |
355
- | CHE-42 drill-down | Done (#19 + Configure in #13). |
356
- | GRO-1414 0.20 leftovers | Done (#20 / 0.22.0). |
180
+ The complete vNext architecture is detailed in **[`docs/design/vnext-release-plan.md`](docs/design/vnext-release-plan.md)** and executed across 9 stacked pull requests:
357
181
 
358
- Oude `pi-powerline-footer`-projecttickets niet laten staan alsof
359
- die package nog leeft.
182
+ ```mermaid
183
+ graph LR
184
+ PR0["PR0: Design Corpus"] --> PR1["PR1: Motion Engine"]
185
+ PR1 --> PR2["PR2: Semantic Tokens"]
186
+ PR2 --> PR3["PR3: Preset Contract"]
187
+ PR3 --> PR4["PR4: Animated Signal"]
188
+ PR4 --> PR5["PR5: Wishcraft Deck"]
189
+ PR5 --> PR6["PR6: Appearance & Gallery"]
190
+ PR6 --> PR7["PR7: First-Class A11y"]
191
+ PR7 --> PR8["PR8: Craft, Skills & Docs"]
192
+ ```
360
193
 
361
194
  ---
362
195
 
@@ -373,55 +206,3 @@ die package nog leeft.
373
206
  - TPS-core blijft 1s sliding window over 5s-ring. Geen regressie
374
207
  naar session-average of per-render EMA (beide spikten:
375
208
  `tps:12775`).
376
-
377
- ---
378
-
379
- ## Residual risks
380
-
381
- - `SelectList.setFilter` matcht alleen prefix op `value`. Overlay-chrome
382
- filtert zelf op substring (GRO-1414). Skills-manager had dat al.
383
- - `npm deprecate` van de oude naam faalt tot de scope-owner het
384
- token verruimt. Gebruikers die `pi-powerline-footer` installeren
385
- blijven op 0.17.2.
386
- - Hooks spawnen processen. Default timeout 30s; kill-switch
387
- `wishcraft.hooksEnabled` bestaat al op `main`.
388
- - Repairs op core-tools raken we niet aan. Als DeepSeek-achtige
389
- modellen daar alsnog op stuklopen, is dat een gesprek met pi
390
- core, geen stille override.
391
- - `loadSkills` API-drift: we pinnen `@earendil-works/pi-coding-agent`
392
- `>=0.81.0 <0.85.0`. 0.20 neemt de publieke export over; bij
393
- breaking change blijven we op eigen scan tot de pin omhoog kan.
394
- - Usage-ledger corruptie: best-effort write, kapot JSON → leeg
395
- object, nooit throw op de input-path.
396
- - ChefGroep-keys in 1.0 mogen de publieke README niet gijzelen.
397
-
398
- ---
399
-
400
- ## Rollback
401
-
402
- - PR A–H: revert-commit op `main`. Geen force-push.
403
- - 0.19-tag te vroeg: laat de tag staan, ship `0.19.1` met de fix.
404
- Tags niet herschrijven.
405
- - Fork-tags (51 stuks) zijn weg. Recovery = upstream remote
406
- `nicobailon/pi-powerline-footer` opnieuw fetchen, niet onze
407
- `v0.10.0+` overschrijven.
408
- - DevDep-bumps (pi-* 0.84.2, TS 7) horen in een eigen PR met
409
- `npm ci` + de verify-trio. Revert = die PR revert + `npm ci`.
410
-
411
- ---
412
-
413
- ## Checklist (1:1 met 0.19)
414
-
415
- - [x] PR A gemerged: filter, debris, cache, triggers, bash-leaks,
416
- CodeQL. Verify-trio groen. (#12)
417
- - [x] `npm pack --dry-run` bevat geen `ook.md` / `test.md`.
418
- - [x] PR B gemerged: labels, template, TPS-opties, visibility.
419
- Verify-trio groen. (#12)
420
- - [x] Gallery-contract gemerged (`chore/pi-dev-gallery`): keywords,
421
- `publishConfig.access`, `pi.image`, `npm run verify:package`. (#11)
422
- - [x] PR C: merge to `main` tagged `v0.19.0` then `v0.19.1` then
423
- `v0.19.2` and published (`npm view` = `0.19.2`). Same-job bump
424
- publish via #16. CHE-40 tab-complete via #18.
425
- - [x] README skills-sectie waar; deze ROADMAP in sync met 0.19.2.
426
- - [x] CHE-40: `/powerline` subcommand-tab geland (#18). CHE-41/42
427
- hernoemd naar wishcraft.
package/docs/commands.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Usage
4
4
 
5
- Activates automatically. Toggle with `/powerline`, switch presets with `/powerline <name>`, and move the primary row with `/powerline placement above|below|toggle`.
5
+ Activates automatically. Toggle with `/signal` (alias `/powerline`). Switch layouts with `/signal <name>`. `/signal menu` opens Navigate / Configure / Status. `/wishcraft` opens the Deck; `/wishcraft settings` is the flat list. Move the primary row with `/signal placement above|below|toggle`.
6
6
 
7
7
  Use `/cd <path>` to continue the current conversation from another working directory. It supports relative paths, absolute paths, `~`, `~/...`, and directory completions. With no argument, `/cd` prints the current Pi session directory. The command switches into a cwd-updated session file so Pi tools and the footer path segment agree after the change.
8
8
 
@@ -101,8 +101,12 @@ Pi core renders the footer as static text, so live click is not possible; action
101
101
  - `/open-ports`: list listening ports and pick one
102
102
  - `/powerline doctor`: diagnostics overlay — settings file validity, unknown presets, Nerd Font detection, git polling, bash-mode status, and queue file health
103
103
  - `/powerline export`: export the current preset + effective layout + labels as a JSON snippet (Enter copies it to the clipboard)
104
- - `alt+p`: **powerline menu**: navigate the live segments (`↑`/`↓` + `enter`, `→`/`tab` opens a per-segment detail panel captured at open), configure (preset / TPS / UDP / segment visibility / labels / build custom preset), or open the full ports list
104
+ - `alt+p`: **Wishcraft Deck** — operator overlay (Home, Signal, Skills, Ideas, Guardrails, Appearance, …). `g` then a jump key (`h` home, `s` signal, `a` appearance). Escape closes. `/signal menu` still opens Navigate / Configure / Status.
105
105
  - `alt+i`: **powerline info**: full open-ports list
106
+ - `/wishcraft [route]`: open the Deck at a named route (`appearance`, `skills`, …)
107
+ - `/wishcraft settings`: flat settings TUI, including `powerline.appearance.base` and `powerline.motionLevel`
108
+ - Deck **Motion**: gallery + composer. `t` picks the event, Enter applies, `e` opens the composer
109
+ - Deck **Skills**: workbench list with health; Enter inserts the skill body
106
110
 
107
111
  Both `alt+p` and `alt+i` are rebindable (see Keybinds below); changes apply after `/reload`.
108
112
 
@@ -190,6 +190,27 @@ Make `open_ports` probe a named SSH host instead of the laptop:
190
190
 
191
191
  See [Segments & theming](./segments.md) for the probe's best-effort behavior and requirements.
192
192
 
193
+ ## Appearance
194
+
195
+ `powerline.appearance` is independent of the information layout (`powerline.preset`). The structural base paints Signal colors and motion. Layout presets (`default`, `minimal`, `compact`, `full`, `nerd`, `ascii`, `chef`) keep their segment lists until you change `preset`.
196
+
197
+ ```json
198
+ {
199
+ "powerline": {
200
+ "preset": "chef",
201
+ "appearance": {
202
+ "base": "lanternwake"
203
+ }
204
+ }
205
+ }
206
+ ```
207
+
208
+ Bases: `lanternwake`, `threadbound`, `scryglass`, `runebloom`, `moonwell`, `hexforge`, `vellum`, `wisp`, `starweave`, `crucible`. Apply from Deck → Appearance → Enter, `/wishcraft settings`, or `/signal hexforge` (a structural layout name also writes `appearance.base`). Optional mix keys: `palette`, `signalLayout`, `chrome`, `glyphs`, `deck`, `welcome`, `motion`.
209
+
210
+ Until `appearance` is set, Signal keeps the layout preset colors. If `preset` itself is a structural name and `appearance` is empty, that name is treated as the base.
211
+
212
+ `powerline.motionLevel` is `full`, `reduced`, `functional`, or `off`. Host flags still win: `NO_COLOR`, `WISHCRAFT_MOTION`, `WISHCRAFT_SCREEN_READER`, and `PREFER_REDUCED_MOTION`. Deck Motion → Enter writes `powerline.appearance.motion.<event>`.
213
+
193
214
  ## Status bridge for other extensions
194
215
 
195
216
  Powerline publishes its own state under a stable key set so ChefBar and other extensions can read it without depending on powerline internals:
@@ -0,0 +1,71 @@
1
+ # First-Class Accessibility & Graceful Degradation
2
+
3
+ ## Overview
4
+
5
+ Terminal environments vary drastically—from modern GPU-accelerated terminals with full truecolor and Nerd Font glyphs to low-bandwidth SSH sessions, restricted 8-color virtual consoles, and screen readers.
6
+
7
+ Wishcraft treats accessibility and environmental adaptability as first-class architectural constraints, directly resolving ROADMAP P1 Gap #4.
8
+
9
+ ---
10
+
11
+ ## Motion Levels
12
+
13
+ Users can configure global motion sensitivity via settings or keyboard shortcuts:
14
+
15
+ ```
16
+ Motion Sensitivity:
17
+ (●) Full - Continuous sweeps, micro-spinners, and transitions
18
+ ( ) Reduced - Instant state changes; continuous loops replaced by static glyphs
19
+ ( ) Functional Only - Task indicators active; decorative ambient motion disabled
20
+ ( ) Off - 100% static display; zero animated frames
21
+ ```
22
+
23
+ ---
24
+
25
+ ## Environment Degradation Matrix
26
+
27
+ ```
28
+ ┌───────────────────┬───────────────────┬───────────────────┬────────────────────┐
29
+ │ ENVIRONMENT │ MOTION BEHAVIOR │ COLOR PALETTE │ GLYPH RENDERING │
30
+ ├───────────────────┼───────────────────┼───────────────────┼────────────────────┤
31
+ │ Modern Truecolor │ Full FPS & Sweeps │ True 24-bit RGB │ Full Nerd Fonts │
32
+ │ Standard 256 Color│ Full FPS & Sweeps │ ANSI-256 Mapped │ Unicode / Nerd │
33
+ │ Basic 8/16 Color │ Simplified Pulse │ Basic ANSI │ Clean ASCII │
34
+ │ NO_COLOR Set │ Glyphs Active │ No ANSI Escapes │ Unicode / ASCII │
35
+ │ prefers-reduced │ Discrete States │ Full Color │ Standard Glyphs │
36
+ │ Screen Reader │ Disabled (0 FPS) │ High Contrast │ Descriptive Text │
37
+ └───────────────────┴───────────────────┴───────────────────┴────────────────────┘
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Concrete Degradation Policies
43
+
44
+ ### 1. `NO_COLOR` Compliance
45
+ When the `NO_COLOR` environment variable is detected:
46
+ - All ANSI color codes and RGB background styling are stripped.
47
+ - Spatial layout, separators, and glyph animations remain active to convey status through structure.
48
+
49
+ ### 2. `prefers-reduced-motion`
50
+ When reduced motion is requested by the OS or user configuration:
51
+ - Continuous sweeps along the Signal track are disabled.
52
+ - Spinners transition immediately to static state markers (`[..]`, `[ok]`, `[!]`).
53
+ - Transient notifications appear statically without fade-in or slide-in transitions.
54
+
55
+ ### 3. Screen Reader Mode
56
+ - Motion engine is completely stopped (0 FPS).
57
+ - Powerline separators and visual spacers are suppressed.
58
+ - Status is formatted as clean, semantic plain text (e.g. `Model: GPT-5.6 | Git: main (clean) | State: Streaming | Context: 47%`).
59
+
60
+ ### 4. ASCII Fallback Strategy
61
+ Every custom Unicode icon and Nerd Font symbol provides a guaranteed 1-to-1 ASCII equivalent:
62
+
63
+ | Semantic Icon | Nerd Font Glyph | Unicode Default | ASCII Fallback |
64
+ | :--- | :--- | :--- | :--- |
65
+ | Model | `󰚩` | `◈` | `[*]` |
66
+ | Git Branch | `` | `⎇` | `branch:` |
67
+ | Git Clean | `✔` | `✓` | `ok` |
68
+ | Git Dirty | `✎` | `⚡` | `*` |
69
+ | Streaming | `󱐋` | `✦` | `~` |
70
+ | Tool Call | `󰒓` | `◆` | `>` |
71
+ | Error | `󰅚` | `✗` | `ERR` |
@@ -0,0 +1,69 @@
1
+ # Deck Layout & Interactive Route Architecture
2
+
3
+ ## Overview
4
+
5
+ The **Wishcraft Deck** (`Alt+P` / `/wishcraft`) is the central control surface for the agent operator. It replaces fragmented menus with a cohesive, keyboard-first modal overlay built inside `ctx.ui.custom`.
6
+
7
+ ---
8
+
9
+ ## The Continuous Surface Design
10
+
11
+ Unlike cheap TUIs that stack boxes inside boxes with conflicting borders, the Deck utilizes a **single continuous outer frame** partitioned into an ambient header, the active route viewport, and a contextual footer.
12
+
13
+ ```
14
+ ╭────────────────────────────── WISHCRAFT DECK ──────────────────────────────╮
15
+ │ ◈ GPT-5.6 HIGH  main +12 context 47% ◆ STREAMING │
16
+ ├──────────────┬──────────────────────────────────────┬───────────────────────┤
17
+ │ NAVIGATION │ ACTIVE ROUTE: HOME │ ACTIVITY FEED │
18
+ │ │ │ │
19
+ │ ◉ Home │ CURRENT SESSION │ 21:16 read_file │
20
+ │ ◆ Signal │ ◆ Streaming response │ 21:16 grep_pattern │
21
+ │ ◇ Skills 27 │ ━━━━╾✦╼━━━━━━━━━━━━ │ 21:15 skill.load │
22
+ │ ◇ Ideas 4 │ │ │
23
+ │ ◇ Guardrails │ Context Capacity │ SKILLS HEALTH │
24
+ │ ◇ Shell │ ████████░░░░░ 47% (94k / 200k) │ ✓ 25 healthy │
25
+ │ ◇ Usage │ │ ! 2 warnings │
26
+ │ ◇ Appearance │ NEXT INTENT │ │
27
+ │ ◇ Motion │ Improve Signal motion engine │ GUARDRAILS │
28
+ │ ◇ Shortcuts │ [Run] [Open Skill] [Review] │ Policy: STRICT (Enf) │
29
+ ├──────────────┴──────────────────────────────────────┴───────────────────────┤
30
+ │ / Search g s Skills g i Ideas ? Help Esc Close Deck │
31
+ ╰─────────────────────────────────────────────────────────────────────────────╯
32
+ ```
33
+
34
+ ---
35
+
36
+ ## Route Catalog & Deep Links
37
+
38
+ | Route | Deep Link Command | Purpose & Main Components |
39
+ | :--- | :--- | :--- |
40
+ | **`Home`** | `/wishcraft` / `Alt+P` | Live session overview, intent card, context bar, recent activity stream. |
41
+ | **`Signal`** | `/signal` | Visual powerline editor, lane assignments, separator picker. |
42
+ | **`Skills`** | `/skills` | Skill catalog, inline creation wizard, health diagnostics. |
43
+ | **`Skills Doctor`**| `/skills doctor` | Deep validation of skill frontmatter, descriptions, and triggers. |
44
+ | **`Ideas`** | `/ideas` | Rapid capture and organization of intent notes and future tasks. |
45
+ | **`Guardrails`** | `/guardrails` | Safety policies, denial logs, execution boundaries. |
46
+ | **`Shell`** | `/shell` | Execution environment inspect, tool binary availability. |
47
+ | **`Usage`** | `/usage` | Detailed token statistics and context window metrics. |
48
+ | **`Appearance`**| `/appearance` | Preset picker, semantic token overrides, layout density. |
49
+ | **`Motion`** | `/motion` | Motion Gallery, Composer, accessibility sensitivity sliders. |
50
+ | **`Shortcuts`** | `/shortcuts` | Keyboard navigation and jump-mode cheat sheet. |
51
+ | **`Diagnostics`**| `/diagnostics` | Terminal capabilities, color support, and encoding checks. |
52
+
53
+ ---
54
+
55
+ ## Navigation Ergonomics
56
+
57
+ Wishcraft combines **Posting-style jump shortcuts** with a fast **fuzzy command palette**:
58
+
59
+ 1. **Global Jump Keys**:
60
+ - `g h` $\rightarrow$ Jump to Home
61
+ - `g s` $\rightarrow$ Jump to Skills
62
+ - `g i` $\rightarrow$ Jump to Ideas
63
+ - `g a` $\rightarrow$ Jump to Appearance
64
+ - `g m` $\rightarrow$ Jump to Motion
65
+ 2. **Fuzzy Search Palette (`/`)**:
66
+ - Typing `/` anywhere in the Deck opens the instant search bar.
67
+ - Matches routes, config keys, actions, and skills with real-time highlighted filtering.
68
+ 3. **Key Hints**:
69
+ - The footer always renders context-relevant shortcuts, eliminating the need to memorize keybindings.