@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
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Extra gallery motions. Kept beside the signature catalog so the core
3
+ * file stays the event matrix, not a 50-entry wall of frames.
4
+ */
5
+
6
+ import type { MotionDef } from "./types.ts";
7
+
8
+ export const EXTRA_MOTIONS: readonly MotionDef[] = [
9
+ {
10
+ id: "ember-drift",
11
+ name: "Ember Drift",
12
+ category: "wishcraft",
13
+ kind: "frames",
14
+ channels: ["workingGlyph", "ambient"],
15
+ colorRole: "motionHot",
16
+ fallbackGlyph: "*",
17
+ loop: "ambient",
18
+ frames: ["·", "✦", "·", " "],
19
+ description: "Soft lantern sparks while the session waits.",
20
+ },
21
+ {
22
+ id: "sigil-spark",
23
+ name: "Sigil Spark",
24
+ category: "wishcraft",
25
+ kind: "frames",
26
+ channels: ["deckTransient", "borderEmphasis"],
27
+ colorRole: "accent",
28
+ fallbackGlyph: "+",
29
+ loop: "finite",
30
+ frames: ["·", "+", "✦", "+"],
31
+ description: "A brief sigil flash on capture or insert.",
32
+ },
33
+ {
34
+ id: "lantern-pulse",
35
+ name: "Lantern Pulse",
36
+ category: "wishcraft",
37
+ kind: "generator",
38
+ channels: ["workingGlyph", "signal"],
39
+ colorRole: "motionHot",
40
+ fallbackGlyph: "o",
41
+ loop: "while-active",
42
+ generator: { geometry: "ember", trail: 2, intervalMs: 110, ease: "breathe" },
43
+ description: "Breathing ember for long thinks.",
44
+ },
45
+ {
46
+ id: "knot-bind",
47
+ name: "Knot Bind",
48
+ category: "wishcraft",
49
+ kind: "generator",
50
+ channels: ["signal"],
51
+ colorRole: "primary",
52
+ fallbackGlyph: "x",
53
+ loop: "while-active",
54
+ generator: { geometry: "stitch", trail: 3, direction: "reverse", intervalMs: 95, ease: "linear" },
55
+ description: "A knot tightens toward the active tool.",
56
+ },
57
+ {
58
+ id: "vellum-stroke",
59
+ name: "Vellum Stroke",
60
+ category: "wishcraft",
61
+ kind: "generator",
62
+ channels: ["signal"],
63
+ colorRole: "text",
64
+ fallbackGlyph: "-",
65
+ loop: "while-active",
66
+ generator: { geometry: "write", intervalMs: 80, ease: "linear" },
67
+ description: "Ink line grows as the model writes.",
68
+ },
69
+ {
70
+ id: "crucible-seethe",
71
+ name: "Crucible Seethe",
72
+ category: "wishcraft",
73
+ kind: "generator",
74
+ channels: ["signal", "panelIndicator"],
75
+ colorRole: "warning",
76
+ fallbackGlyph: "=",
77
+ loop: "while-active",
78
+ generator: { geometry: "liquid", intervalMs: 130, ease: "pulse" },
79
+ description: "Melt level rises with tool heat.",
80
+ },
81
+ {
82
+ id: "star-pulse",
83
+ name: "Star Pulse",
84
+ category: "wishcraft",
85
+ kind: "frames",
86
+ channels: ["workingGlyph", "deckTransient"],
87
+ colorRole: "motionHot",
88
+ fallbackGlyph: "*",
89
+ loop: "finite",
90
+ frames: ["·", "✦", "✧", "✦"],
91
+ description: "Constellation node flash.",
92
+ },
93
+ {
94
+ id: "wisp-veil",
95
+ name: "Wisp Veil",
96
+ category: "wishcraft",
97
+ kind: "frames",
98
+ channels: ["ambient"],
99
+ colorRole: "motionDim",
100
+ fallbackGlyph: ".",
101
+ loop: "ambient",
102
+ frames: [".", "·", "˙", "·"],
103
+ description: "Barely-there idle veil.",
104
+ },
105
+ {
106
+ id: "rune-trace",
107
+ name: "Rune Trace",
108
+ category: "wishcraft",
109
+ kind: "generator",
110
+ channels: ["signal", "deckTransient"],
111
+ colorRole: "accent",
112
+ fallbackGlyph: "+",
113
+ loop: "finite",
114
+ generator: { geometry: "bloom", radius: 1, intervalMs: 60, ease: "pulse" },
115
+ description: "Geometry traces and settles.",
116
+ },
117
+ {
118
+ id: "forge-spark",
119
+ name: "Forge Spark",
120
+ category: "wishcraft",
121
+ kind: "generator",
122
+ channels: ["workingGlyph", "signal"],
123
+ colorRole: "motionHot",
124
+ fallbackGlyph: "#",
125
+ loop: "while-active",
126
+ generator: { geometry: "heat", trail: 2, intervalMs: 70, ease: "linear" },
127
+ description: "Short heat sparks on the rail.",
128
+ },
129
+ {
130
+ id: "thread-pull",
131
+ name: "Thread Pull",
132
+ category: "wishcraft",
133
+ kind: "generator",
134
+ channels: ["signal"],
135
+ colorRole: "secondary",
136
+ fallbackGlyph: "-",
137
+ loop: "while-active",
138
+ generator: { geometry: "stitch", trail: 1, intervalMs: 120, ease: "linear" },
139
+ description: "A single thread is drawn across the lane.",
140
+ },
141
+ {
142
+ id: "glass-glint",
143
+ name: "Glass Glint",
144
+ category: "wishcraft",
145
+ kind: "generator",
146
+ channels: ["signal"],
147
+ colorRole: "motionHot",
148
+ fallbackGlyph: ">",
149
+ loop: "while-active",
150
+ generator: { geometry: "refract", trail: 1, intervalMs: 100, ease: "linear" },
151
+ description: "A glint walks the capsule edge.",
152
+ },
153
+ {
154
+ id: "infinity-walk",
155
+ name: "Infinity Walk",
156
+ category: "matrix",
157
+ kind: "frames",
158
+ channels: ["workingGlyph"],
159
+ colorRole: "accent",
160
+ fallbackGlyph: "8",
161
+ loop: "while-active",
162
+ frames: ["∞", "8", "∞", "o"],
163
+ description: "Figure-eight walk for thinking.",
164
+ },
165
+ {
166
+ id: "lunar-phase",
167
+ name: "Lunar Phase",
168
+ category: "matrix",
169
+ kind: "frames",
170
+ channels: ["workingGlyph", "ambient"],
171
+ colorRole: "secondary",
172
+ fallbackGlyph: "O",
173
+ loop: "ambient",
174
+ frames: ["●", "◕", "◑", "◔", "○", "◔", "◑", "◕"],
175
+ description: "Slow moon phases for night work.",
176
+ },
177
+ {
178
+ id: "wing-beat",
179
+ name: "Wing Beat",
180
+ category: "matrix",
181
+ kind: "frames",
182
+ channels: ["workingGlyph"],
183
+ colorRole: "secondary",
184
+ fallbackGlyph: "^",
185
+ loop: "while-active",
186
+ frames: ["⟨ ⟩", "‹ ›", "· ·", "‹ ›"],
187
+ description: "Paired wings keep time.",
188
+ },
189
+ {
190
+ id: "petal-open",
191
+ name: "Petal Open",
192
+ category: "matrix",
193
+ kind: "frames",
194
+ channels: ["deckTransient"],
195
+ colorRole: "accent",
196
+ fallbackGlyph: "*",
197
+ loop: "finite",
198
+ frames: [".", "*", "✦", "*"],
199
+ description: "Petals open once and rest.",
200
+ },
201
+ {
202
+ id: "constellation",
203
+ name: "Constellation",
204
+ category: "matrix",
205
+ kind: "generator",
206
+ channels: ["signal", "deckTransient"],
207
+ colorRole: "motionHot",
208
+ fallbackGlyph: "*",
209
+ loop: "while-active",
210
+ generator: { geometry: "path", intervalMs: 140, ease: "linear" },
211
+ description: "Stars light in path order.",
212
+ },
213
+ {
214
+ id: "meridian",
215
+ name: "Meridian",
216
+ category: "matrix",
217
+ kind: "generator",
218
+ channels: ["signal"],
219
+ colorRole: "secondary",
220
+ fallbackGlyph: "|",
221
+ loop: "while-active",
222
+ generator: { geometry: "orbit", radius: 1, intervalMs: 160, ease: "breathe" },
223
+ description: "A meridian arc crosses the lane.",
224
+ },
225
+ {
226
+ id: "eclipse",
227
+ name: "Eclipse",
228
+ category: "matrix",
229
+ kind: "frames",
230
+ channels: ["workingGlyph", "panelIndicator"],
231
+ colorRole: "textMuted",
232
+ fallbackGlyph: "O",
233
+ loop: "while-active",
234
+ frames: ["○", "◐", "●", "◑"],
235
+ description: "Cover and uncover the working glyph.",
236
+ },
237
+ {
238
+ id: "gyre",
239
+ name: "Gyre",
240
+ category: "matrix",
241
+ kind: "generator",
242
+ channels: ["workingGlyph", "signal"],
243
+ colorRole: "accent",
244
+ fallbackGlyph: "@",
245
+ loop: "while-active",
246
+ generator: { geometry: "orbit", radius: 3, trail: 2, clockwise: true, intervalMs: 90, ease: "linear" },
247
+ description: "Tight orbital gyre.",
248
+ },
249
+ {
250
+ id: "helix-phase",
251
+ name: "Helix Phase",
252
+ category: "procedural",
253
+ kind: "frames",
254
+ channels: ["workingGlyph", "signal"],
255
+ colorRole: "motionTrail",
256
+ fallbackGlyph: "%",
257
+ loop: "while-active",
258
+ frames: ["⠁", "⠉", "⠋", "⠛", "⠟", "⠿", "⠟", "⠛"],
259
+ description: "Intertwined helix cycle.",
260
+ },
261
+ {
262
+ id: "wave-stream",
263
+ name: "Wave Stream",
264
+ category: "procedural",
265
+ kind: "generator",
266
+ channels: ["signal"],
267
+ colorRole: "primary",
268
+ fallbackGlyph: "~",
269
+ loop: "while-active",
270
+ generator: { geometry: "wave", trail: 6, intervalMs: 75, ease: "linear" },
271
+ description: "Progressive sine along the rail.",
272
+ },
273
+ {
274
+ id: "ripple-ring",
275
+ name: "Ripple Ring",
276
+ category: "procedural",
277
+ kind: "generator",
278
+ channels: ["signal", "panelIndicator"],
279
+ colorRole: "motionTrail",
280
+ fallbackGlyph: "~",
281
+ loop: "finite",
282
+ generator: { geometry: "wave", trail: 3, intervalMs: 55, ease: "pulse" },
283
+ description: "One ripple, then rest.",
284
+ },
285
+ {
286
+ id: "orbit-spin",
287
+ name: "Orbit Spin",
288
+ category: "procedural",
289
+ kind: "generator",
290
+ channels: ["workingGlyph"],
291
+ colorRole: "secondary",
292
+ fallbackGlyph: "o",
293
+ loop: "while-active",
294
+ generator: { geometry: "orbit", radius: 1, intervalMs: 80, ease: "linear" },
295
+ description: "Fast orbital spin for tools.",
296
+ },
297
+ {
298
+ id: "cascade",
299
+ name: "Cascade",
300
+ category: "procedural",
301
+ kind: "frames",
302
+ channels: ["signal"],
303
+ colorRole: "motionTrail",
304
+ fallbackGlyph: "=",
305
+ loop: "while-active",
306
+ frames: ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█", "▇", "▅"],
307
+ description: "Falling levels down the lane.",
308
+ },
309
+ {
310
+ id: "braid",
311
+ name: "Braid",
312
+ category: "procedural",
313
+ kind: "frames",
314
+ channels: ["workingGlyph", "signal"],
315
+ colorRole: "primary",
316
+ fallbackGlyph: "x",
317
+ loop: "while-active",
318
+ frames: ["╱", "╳", "╲", "╳"],
319
+ description: "Two strands braid while work runs.",
320
+ },
321
+ {
322
+ id: "pulse-train",
323
+ name: "Pulse Train",
324
+ category: "procedural",
325
+ kind: "frames",
326
+ channels: ["panelIndicator", "workingGlyph"],
327
+ colorRole: "motionHot",
328
+ fallbackGlyph: "|",
329
+ loop: "while-active",
330
+ frames: ["▏", "▎", "▌", "▎"],
331
+ description: "Regular pulses for long jobs.",
332
+ },
333
+ {
334
+ id: "sawtooth",
335
+ name: "Sawtooth",
336
+ category: "procedural",
337
+ kind: "generator",
338
+ channels: ["signal"],
339
+ colorRole: "warning",
340
+ fallbackGlyph: "/",
341
+ loop: "while-active",
342
+ generator: { geometry: "linear", trail: 4, intervalMs: 70, ease: "linear" },
343
+ description: "Hard ramp across the rail.",
344
+ },
345
+ {
346
+ id: "dots",
347
+ name: "Dots",
348
+ category: "classic",
349
+ kind: "frames",
350
+ channels: ["workingGlyph"],
351
+ colorRole: "textMuted",
352
+ fallbackGlyph: ".",
353
+ loop: "while-active",
354
+ frames: [". ", ".. ", "...", " ..", " .", " "],
355
+ description: "Classic waiting dots.",
356
+ },
357
+ {
358
+ id: "pipe-spin",
359
+ name: "Pipe Spin",
360
+ category: "classic",
361
+ kind: "frames",
362
+ channels: ["workingGlyph"],
363
+ colorRole: "textMuted",
364
+ fallbackGlyph: "|",
365
+ loop: "while-active",
366
+ frames: ["|", "/", "-", "\\"],
367
+ description: "ASCII pipe spinner.",
368
+ },
369
+ {
370
+ id: "arrows",
371
+ name: "Arrows",
372
+ category: "classic",
373
+ kind: "frames",
374
+ channels: ["workingGlyph", "signal"],
375
+ colorRole: "primary",
376
+ fallbackGlyph: ">",
377
+ loop: "while-active",
378
+ frames: ["> ", ">> ", ">>>", " >>", " >"],
379
+ description: "Chevrons travel forward.",
380
+ },
381
+ {
382
+ id: "clock",
383
+ name: "Clock",
384
+ category: "classic",
385
+ kind: "frames",
386
+ channels: ["workingGlyph"],
387
+ colorRole: "textMuted",
388
+ fallbackGlyph: "o",
389
+ loop: "while-active",
390
+ frames: ["o", "O", "0", "O"],
391
+ description: "Phase clock in ASCII-safe glyphs.",
392
+ },
393
+ {
394
+ id: "triangle",
395
+ name: "Triangle",
396
+ category: "classic",
397
+ kind: "frames",
398
+ channels: ["workingGlyph"],
399
+ colorRole: "accent",
400
+ fallbackGlyph: "^",
401
+ loop: "while-active",
402
+ frames: ["▲", "▶", "▼", "◀"],
403
+ description: "Rotating triangle.",
404
+ },
405
+ {
406
+ id: "hash-fill",
407
+ name: "Hash Fill",
408
+ category: "classic",
409
+ kind: "frames",
410
+ channels: ["panelIndicator"],
411
+ colorRole: "primary",
412
+ fallbackGlyph: "#",
413
+ loop: "while-active",
414
+ frames: ["# ", "## ", "### ", "####"],
415
+ description: "ASCII fill bar.",
416
+ },
417
+ {
418
+ id: "box-spin",
419
+ name: "Box Spin",
420
+ category: "classic",
421
+ kind: "frames",
422
+ channels: ["workingGlyph"],
423
+ colorRole: "textMuted",
424
+ fallbackGlyph: "+",
425
+ loop: "while-active",
426
+ frames: ["┌", "┐", "┘", "└"],
427
+ description: "Corner-box spinner.",
428
+ },
429
+ ];