@groeponline/pi-wishcraft 1.0.5 → 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.
- package/CHANGELOG.md +20 -0
- package/README.md +25 -9
- package/ROADMAP.md +41 -260
- package/docs/commands.md +6 -2
- package/docs/configuration.md +21 -0
- package/docs/design/accessibility.md +71 -0
- package/docs/design/deck-layout.md +69 -0
- package/docs/design/motion-gallery.md +80 -0
- package/docs/design/motion-system.md +119 -0
- package/docs/design/presets.md +196 -0
- package/docs/design/regression-testing.md +54 -0
- package/docs/design/responsive.md +53 -0
- package/docs/design/signal.md +68 -0
- package/docs/design/theme-contract.md +132 -0
- package/docs/design/vnext-overview.md +55 -0
- package/docs/design/vnext-release-plan.md +212 -0
- package/docs/index.md +19 -1
- package/docs/segments.md +1 -1
- package/package.json +16 -9
- package/src/config/appearance.ts +230 -0
- package/src/config/parse.ts +41 -0
- package/src/config/presets.ts +184 -0
- package/src/config/structural-presets.ts +555 -0
- package/src/config/tokens.ts +154 -0
- package/src/config/types.ts +210 -2
- package/src/extension/commands/commands.ts +36 -12
- package/src/extension/commands/powerline-completions.ts +4 -0
- package/src/extension/commands/queue-commands.ts +6 -0
- package/src/extension/core/segment-context.ts +7 -1
- package/src/extension/core/state.ts +14 -0
- package/src/extension/core/types.ts +7 -0
- package/src/extension/session/session-lifecycle.ts +20 -0
- package/src/extension/settings/appearance-write.ts +135 -0
- package/src/extension/settings/wishcraft-config-items.ts +119 -0
- package/src/extension/settings/wishcraft-config.ts +28 -114
- package/src/extension/skills/skill-manager.ts +57 -3
- package/src/extension/ui/custom-editor.ts +7 -4
- package/src/extension/ui/deck/component.ts +358 -0
- package/src/extension/ui/deck/index.ts +34 -0
- package/src/extension/ui/deck/render.ts +260 -0
- package/src/extension/ui/deck/route-bodies.ts +209 -0
- package/src/extension/ui/deck/routes.ts +37 -0
- package/src/extension/ui/deck/session-snapshot.ts +104 -0
- package/src/extension/ui/deck/types.ts +92 -0
- package/src/extension/ui/layout.ts +3 -2
- package/src/extension/ui/menu-views.ts +6 -1
- package/src/extension/ui/powerline-menu-view.ts +19 -15
- package/src/extension/ui/signal-layout.ts +77 -0
- package/src/extension/ui/status-line-renderers.ts +24 -5
- package/src/motion/accessibility.ts +59 -0
- package/src/motion/catalog-extra.ts +429 -0
- package/src/motion/catalog.ts +336 -0
- package/src/motion/composer.ts +147 -0
- package/src/motion/frames.ts +84 -0
- package/src/motion/gallery.ts +77 -0
- package/src/motion/index.ts +78 -0
- package/src/motion/policy.ts +128 -0
- package/src/motion/scheduler.ts +159 -0
- package/src/motion/types.ts +132 -0
- package/src/render/timer.ts +1 -0
- package/src/segments/registry.ts +18 -6
- package/src/segments/system.ts +1 -1
- package/src/signal/controller.ts +123 -0
- package/src/signal/integration.ts +42 -0
- package/src/signal/render.ts +178 -0
- package/src/theme/colors.ts +14 -0
- package/src/theme/detect.ts +48 -0
- package/src/theme/tokens/index.ts +9 -0
- package/src/theme/tokens/mapping.ts +62 -0
- package/src/theme/tokens/types.ts +39 -0
- package/src/welcome/renderer.ts +2 -2
- package/src/welcome/whats-new.ts +46 -10
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Semantic Design Tokens & Theme Contract
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Wishcraft follows a token-driven design system inspired by Charm Crush. Rather than hardcoding ad-hoc color values or tying colors strictly to concrete segment names, themes are expressed through an abstract layer of **Semantic Design Tokens** (`WishcraftTokens`).
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
┌────────────────────────────────────────────────────────┐
|
|
9
|
+
│ Wishcraft Presets │
|
|
10
|
+
│ (Lanternwake · Threadbound · Scryglass · ...) │
|
|
11
|
+
└───────────────────────────┬────────────────────────────┘
|
|
12
|
+
│ populates
|
|
13
|
+
▼
|
|
14
|
+
┌────────────────────────────────────────────────────────┐
|
|
15
|
+
│ WishcraftTokens │
|
|
16
|
+
│ (surface, text, primary, accent, motionHot, ...) │
|
|
17
|
+
└───────────────────────────┬────────────────────────────┘
|
|
18
|
+
│ maps & derives
|
|
19
|
+
▼
|
|
20
|
+
┌────────────────────────────────────────────────────────┐
|
|
21
|
+
│ Legacy SemanticColor │
|
|
22
|
+
│ (model, gitClean, context, cost, border) │
|
|
23
|
+
└────────────────────────────────────────────────────────┘
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Token Specifications
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
export interface WishcraftTokens {
|
|
32
|
+
// Surfaces & Backgrounds
|
|
33
|
+
surface: ColorValue; // Base frame and background tint
|
|
34
|
+
surfaceRaised: ColorValue; // Modals, popovers, and elevated cards
|
|
35
|
+
|
|
36
|
+
// Typography
|
|
37
|
+
text: ColorValue; // Primary text and active values
|
|
38
|
+
textMuted: ColorValue; // Secondary labels, timestamps, and dim chrome
|
|
39
|
+
|
|
40
|
+
// Brand & Accents
|
|
41
|
+
primary: ColorValue; // Primary identity, active model badge
|
|
42
|
+
secondary: ColorValue; // Path indicators, structural dividers
|
|
43
|
+
accent: ColorValue; // Highlights, tags, key metric accents
|
|
44
|
+
|
|
45
|
+
// Feedback & State
|
|
46
|
+
success: ColorValue; // Clean git status, healthy skills, completed tasks
|
|
47
|
+
warning: ColorValue; // Uncommitted git diffs, warning limits, compact alerts
|
|
48
|
+
error: ColorValue; // Tool execution failures, policy blocks, error states
|
|
49
|
+
|
|
50
|
+
// Interaction
|
|
51
|
+
focus: ColorValue; // Focused input field, active navigation item
|
|
52
|
+
selection: ColorValue; // Highlighted table row or search match
|
|
53
|
+
|
|
54
|
+
// Motion & Animation Channels
|
|
55
|
+
motionDim: ColorValue; // Low-intensity background sweep or trailing tail
|
|
56
|
+
motionHot: ColorValue; // High-intensity active pulse or spark
|
|
57
|
+
motionTrail: ColorValue; // Intermediate gradient or propagation step
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type ColorValue = ThemeColor | `#${string}`;
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Backward-Compatible Semantic Mapping
|
|
66
|
+
|
|
67
|
+
To ensure 100% backward compatibility with pre-existing color configurations and third-party presets, legacy `SemanticColor` values are derived from `WishcraftTokens` according to this default mapping:
|
|
68
|
+
|
|
69
|
+
| Legacy `SemanticColor` Key | Source `WishcraftToken` | Description |
|
|
70
|
+
| :--- | :--- | :--- |
|
|
71
|
+
| `model` | `tokens.primary` | Active LLM badge indicator |
|
|
72
|
+
| `path` | `tokens.secondary` | Working directory and file paths |
|
|
73
|
+
| `gitClean` | `tokens.success` | Clean git repository status |
|
|
74
|
+
| `gitDirty` | `tokens.warning` | Dirty/uncommitted git changes |
|
|
75
|
+
| `context` | `tokens.text` | Normal context token usage (< 70%) |
|
|
76
|
+
| `contextWarn` | `tokens.warning` | Context warning threshold (70% - 90%) |
|
|
77
|
+
| `contextError` | `tokens.error` | Critical context limit (> 90%) |
|
|
78
|
+
| `cost` | `tokens.accent` | Session usage / cost metrics |
|
|
79
|
+
| `queue` | `tokens.textMuted` | Queued command count badge |
|
|
80
|
+
| `separator` | `tokens.textMuted` | Powerline segment divider symbols |
|
|
81
|
+
| `border` | `tokens.surfaceRaised` | Deck outer frame and partition lines |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Extended Preset Contract (`PresetDef`)
|
|
86
|
+
|
|
87
|
+
The `PresetDef` schema extends legacy configurations with modular personality definitions:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
export interface PresetDef {
|
|
91
|
+
// Legacy Layout Properties (Retained for 100% compatibility)
|
|
92
|
+
leftSegments: SegmentType[];
|
|
93
|
+
rightSegments: SegmentType[];
|
|
94
|
+
secondarySegments?: SegmentType[];
|
|
95
|
+
separator: SeparatorStyle;
|
|
96
|
+
segmentOptions?: Record<string, SegmentOptions>;
|
|
97
|
+
colors?: Partial<Record<SemanticColor, ColorValue>>;
|
|
98
|
+
|
|
99
|
+
// vNext Structural Personality Definitions
|
|
100
|
+
tokens?: WishcraftTokens;
|
|
101
|
+
chrome?: ChromeSpec;
|
|
102
|
+
signal?: SignalSpec;
|
|
103
|
+
motion?: Partial<Record<MotionEvent, MotionRef>>;
|
|
104
|
+
deck?: DeckSpec;
|
|
105
|
+
welcome?: WelcomeSpec;
|
|
106
|
+
glyphs?: GlyphSet;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface ChromeSpec {
|
|
110
|
+
frame: "rounded" | "square" | "double" | "minimal" | "borderless";
|
|
111
|
+
corners: { tl: string; tr: string; bl: string; br: string };
|
|
112
|
+
dividers: { horizontal: string; vertical: string; cross: string };
|
|
113
|
+
density: "compact" | "medium" | "spacious";
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface SignalSpec {
|
|
117
|
+
layout: "standard" | "capsule" | "woven" | "sparse" | "block";
|
|
118
|
+
separators: {
|
|
119
|
+
left: string;
|
|
120
|
+
right: string;
|
|
121
|
+
subLeft?: string;
|
|
122
|
+
subRight?: string;
|
|
123
|
+
};
|
|
124
|
+
caps: {
|
|
125
|
+
leftOpen?: string;
|
|
126
|
+
leftClose?: string;
|
|
127
|
+
rightOpen?: string;
|
|
128
|
+
rightClose?: string;
|
|
129
|
+
};
|
|
130
|
+
animation: string; // MotionRef ID
|
|
131
|
+
}
|
|
132
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Wishcraft vNext — Architecture & Product Overview
|
|
2
|
+
|
|
3
|
+
## Vision
|
|
4
|
+
|
|
5
|
+
> **Wishcraft is Pi’s animated operator layer — intent, skills, ideas, guardrails, and session state made visible and controllable without turning Pi into an IDE.**
|
|
6
|
+
|
|
7
|
+
In August 2026, terminal interfaces have moved far beyond static tables and rudimentary ASCII menus. Modern developer tools (PiTTy, Crush, OpenTUI, Drift, Termflix, Copilot CLI) demonstrate that terminal software can combine rich aesthetics with responsive, ergonomic workflows.
|
|
8
|
+
|
|
9
|
+
Wishcraft vNext does not seek to replace Pi or turn it into a bloated, monolithic IDE. Instead, it acts as a **continuous operator layer**—a polished companion that weaves status, motion, craft, and control directly into terminal workflows.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌────────────────────────── WISHCRAFT CONTINUOUS SURFACE ──────────────────────────┐
|
|
13
|
+
│ ◈ AMBIENT HEADER: Model / Git Branch / Session Context / Active State │
|
|
14
|
+
├──────────────────────────────────────────────────────────────────────────────────┤
|
|
15
|
+
│ │
|
|
16
|
+
│ ACTIVE DECK ROUTE │
|
|
17
|
+
│ (Home · Signal · Skills · Ideas · Appearance) │
|
|
18
|
+
│ │
|
|
19
|
+
├──────────────────────────────────────────────────────────────────────────────────┤
|
|
20
|
+
│ ❖ ANIMATED SIGNAL: ╾━━━━ main ━━━━╾✦╼━━━━ read_file ━━━━━━━ ctx █████░ 47% │
|
|
21
|
+
└──────────────────────────────────────────────────────────────────────────────────┘
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## The Five Pillars
|
|
27
|
+
|
|
28
|
+
### 1. Deck (`Alt+P` / `/wishcraft`)
|
|
29
|
+
The Deck is the primary control surface for the agent operator. It provides a focused modal interface hosting structured routes for session management, tool inspections, skill workflows, and deep customization. Built using `ctx.ui.custom`, the Deck renders inside a single unified continuous outer frame, avoiding cluttered nested cards.
|
|
30
|
+
|
|
31
|
+
### 2. Signal (`/signal`)
|
|
32
|
+
Signal is Wishcraft's signature animated powerline. Configured with three independent lanes (*Left: Identity/Git*, *Center: Live Activity*, *Right: Metrics/Queue*), Signal provides continuous at-a-glance awareness. During active tasks (such as token streaming or tool execution), Signal dynamically pulses or sweeps along its connective track.
|
|
33
|
+
|
|
34
|
+
### 3. Motion
|
|
35
|
+
A centralized, event-driven terminal animation engine. Rather than scattering uncoordinated timers across components, a single unified scheduler drives visual channels with dedicated cadences. When the system is idle, the scheduler rests at **0 FPS**, eliminating CPU overhead.
|
|
36
|
+
|
|
37
|
+
### 4. Craft
|
|
38
|
+
Workflows for managing agent capabilities:
|
|
39
|
+
- **Skills**: Discover, inspect health, execute, and author skills using an inline wizard.
|
|
40
|
+
- **Ideas**: Quick capture and organization of thoughts and intents.
|
|
41
|
+
- **Guardrails**: Policy inspection and execution safety gates.
|
|
42
|
+
|
|
43
|
+
### 5. Appearance
|
|
44
|
+
Ten structural presets that define distinct layout personalities, semantic design tokens, glyph grammars, and signature motion languages. Presets serve as cohesive starting points, but users remain free to decouple and customize every layer individually.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Architectural Boundaries
|
|
49
|
+
|
|
50
|
+
To ensure maximum stability, performance, and compatibility with the Pi ecosystem, Wishcraft enforces strict architectural boundaries:
|
|
51
|
+
|
|
52
|
+
1. **Pi-Native Extensibility**: Wishcraft executes inside the standard Pi extension runtime. It does not attempt to hijack or replace Pi's root TUI transcript or editor.
|
|
53
|
+
2. **Overlay Control Surface**: The Deck operates as an overlay via `ctx.ui.custom`. Closing the Deck immediately returns full focus to the standard Pi transcript.
|
|
54
|
+
3. **No Mouse on Live Footer**: Pi renders the terminal footer as static text. Signal avoids fragile terminal mouse interceptors on the live footer, reserving rich pointer and keyboard interactions for the Deck.
|
|
55
|
+
4. **Performance & CPU Budget**: Animations are strictly tied to real session events. When the agent is idle and no ambient animations are configured, all timers are cleared to achieve 0% CPU consumption.
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Wishcraft vNext — Stacked PR Release Plan
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Wishcraft is Pi's animated operator layer — intent, skills, ideas, guardrails, and session state made visible and controllable without turning Pi into an IDE.
|
|
6
|
+
|
|
7
|
+
The vNext release establishes five foundational pillars:
|
|
8
|
+
|
|
9
|
+
1. **Deck** — The unified interactive control surface (`Alt+P` / `/wishcraft` and deep-link routes).
|
|
10
|
+
2. **Signal** — The motion-aware animated powerline and status surface (`/signal`, with `/powerline` as compatibility alias).
|
|
11
|
+
3. **Motion** — A unified, zero-overhead event-driven terminal animation engine.
|
|
12
|
+
4. **Craft** — First-class workflows for Skills, Ideas, Guardrails, and session tools.
|
|
13
|
+
5. **Appearance** — Ten structural presets, live semantic design tokens, and a full motion gallery with fuzzy search customizer.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Working Method: Stacked PRs
|
|
18
|
+
|
|
19
|
+
Each pull request branches off the immediately preceding PR branch (`vnext/00-design` $\rightarrow$ `vnext/01-motion-engine` $\rightarrow$ ... $\rightarrow$ `vnext/08-craft-docs`) and must be reviewed, tested, and merged in strict linear order.
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
graph LR
|
|
23
|
+
PR0["PR0: Design Corpus"] --> PR1["PR1: Motion Engine"]
|
|
24
|
+
PR1 --> PR2["PR2: Semantic Tokens"]
|
|
25
|
+
PR2 --> PR3["PR3: Preset Contract"]
|
|
26
|
+
PR3 --> PR4["PR4: Animated Signal"]
|
|
27
|
+
PR4 --> PR5["PR5: Wishcraft Deck"]
|
|
28
|
+
PR5 --> PR6["PR6: Appearance & Gallery"]
|
|
29
|
+
PR6 --> PR7["PR7: First-Class A11y"]
|
|
30
|
+
PR7 --> PR8["PR8: Craft, Skills & Docs"]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Quality & Execution Invariants
|
|
34
|
+
|
|
35
|
+
- **Zero Breakage**: Every single PR must keep `npm run typecheck && npm test && npx madge --circular` passing 100%.
|
|
36
|
+
- **English UI Only**: All UI strings, labels, hints, and log outputs must be in clean, idiomatic English.
|
|
37
|
+
- **Pure Function Testability**: All motion mathematics, preset resolution, token derivations, and event routing must be pure functions testable in Vitest/Node without headless `ctx.ui` dependencies.
|
|
38
|
+
- **Backward Compatibility**: Existing `PresetDef` fields remain intact; all new fields (`tokens`, `chrome`, `signal`, `motion`, `deck`, `welcome`, `glyphs`) are optional so pre-existing presets continue to render seamlessly.
|
|
39
|
+
- **Architecture Boundaries**: The Deck is implemented as a `ctx.ui.custom` overlay within the Pi extension sandbox. No root-TUI hijacking and no mouse handlers on the live terminal footer.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## PR Specifications Breakdown
|
|
44
|
+
|
|
45
|
+
### PR 0 — Design Corpus (Docs Only)
|
|
46
|
+
|
|
47
|
+
- **Branch**: `vnext/00-design`
|
|
48
|
+
- **Impacted Paths**: `docs/design/*`, `docs/index.md`, `ROADMAP.md`
|
|
49
|
+
- **Scope & Deliverables**:
|
|
50
|
+
1. Land the complete vNext design specifications (`vnext-overview.md`, `theme-contract.md`, `presets.md`, `motion-system.md`, `signal.md`, `accessibility.md`, `motion-gallery.md`, `deck-layout.md`, `responsive.md`, `regression-testing.md`).
|
|
51
|
+
2. Document explicit ROADMAP directional reconciliations:
|
|
52
|
+
- *Repeating Motion Scheduler vs Perf Budget*: Introducing a multi-cadence scheduler that drops to strict 0 FPS when idle, perfectly aligning with performance and low CPU usage requirements.
|
|
53
|
+
- *Deck Scope*: Formalizing the Deck as a multi-route `ctx.ui.custom` modal overlay, upholding the "no third control surface" and "no live footer mouse" principles.
|
|
54
|
+
- **Done When**: All design documents are committed, cross-referenced in `docs/index.md` and `ROADMAP.md`, with zero runtime code changes in `src/`.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### PR 1 — Motion Engine (Core Foundation) — landed
|
|
59
|
+
|
|
60
|
+
- **Branch**: `vnext/01-motion-engine`
|
|
61
|
+
- **Shipped as**: `src/motion/{types,catalog,policy,frames,scheduler,index}.ts`, `tests/motion-engine.test.ts` (25 tests)
|
|
62
|
+
- **Note**: `MotionScheduler` takes an injectable timer factory (defaulting to `createCoalescingTimer`) and an injectable clock, which is how the 0 FPS lifecycle is asserted without real timers. The router is `channelsForEvent` / `allowedChannels` rather than a separate class.
|
|
63
|
+
- **Scope & Deliverables**:
|
|
64
|
+
1. Create `src/motion/` subsystem.
|
|
65
|
+
2. Implement `MotionScheduler`: generalises single-shot coalescing timers into a unified repeating loop supporting per-consumer cadences:
|
|
66
|
+
- Micro-spinner / Glyphs: `80–120ms`
|
|
67
|
+
- Signal Sweep: `80–120ms`
|
|
68
|
+
- Ambient Idle: `250–750ms`
|
|
69
|
+
- Finite Success / Burst: `250–500ms` total duration
|
|
70
|
+
3. Strict **0 FPS Idle Guarantee**: When no active animations or consumer subscriptions exist, timers are cleared and CPU usage is 0%.
|
|
71
|
+
4. Type Definitions:
|
|
72
|
+
- `MotionEvent`: `"idle" | "thinking" | "streaming" | "tool.start" | "tool.end" | "idea.capture" | "skill.insert" | "policy.deny" | "repair" | "compact" | "success" | "warning" | "error"`
|
|
73
|
+
- `MotionChannel`: `"workingGlyph" | "signal" | "deckTransient" | "panelIndicator" | "borderEmphasis" | "ambient"`
|
|
74
|
+
5. `MotionRouter`: Routes semantic events to active visual channels.
|
|
75
|
+
6. Data-driven `MotionDef` schema supporting both frame arrays and procedural generators (orbit, breathe, wave, bloom, relay).
|
|
76
|
+
- **Done When**: Unit tests verify frame calculations, cadence throttling, event dispatch, and 0 FPS idle lifecycle without relying on `ctx.ui`.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### PR 2 — Semantic Design Tokens (Crush Pattern) — landed
|
|
81
|
+
|
|
82
|
+
- **Branch**: `vnext/02-tokens`
|
|
83
|
+
- **Shipped as**: `WishcraftTokens` in `src/config/types.ts`, mapping and resolution in `src/config/tokens.ts`, wired through `src/extension/core/segment-context.ts`, `tests/tokens.test.ts` (10 tests)
|
|
84
|
+
- **Notes**: the token file lives under `src/config/` rather than `src/theme/` so it sits beside `PresetDef` and keeps `madge --circular` clean. Pi's four `thinking*` colors pass through untokenised; they belong to Pi's thinking levels, not the Wishcraft palette. `DEFAULT_TOKENS` reproduce `getDefaultColors()` exactly, which is asserted by test.
|
|
85
|
+
- **Scope & Deliverables**:
|
|
86
|
+
1. Introduce `WishcraftTokens` structure:
|
|
87
|
+
- Surfaces: `surface`, `surfaceRaised`
|
|
88
|
+
- Typography: `text`, `textMuted`
|
|
89
|
+
- Brand / Accent: `primary`, `secondary`, `accent`
|
|
90
|
+
- Feedback / State: `success`, `warning`, `error`
|
|
91
|
+
- Interaction: `focus`, `selection`
|
|
92
|
+
- Motion: `motionDim`, `motionHot`, `motionTrail`
|
|
93
|
+
2. Map legacy `SemanticColor` keys (`model`, `gitClean`, `gitDirty`, `context`, `cost`, `queue`, `border`) to `WishcraftTokens` with 100% backward compatibility.
|
|
94
|
+
3. Ensure `ColorValue` continues supporting both Pi native `ThemeColor` tokens and custom `#hex` codes.
|
|
95
|
+
- **Done When**: All color resolution routes through the token layer with zero visual regressions across all legacy preset color configurations.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### PR 3 — Structural Preset Contract & 10 Signature Presets — landed
|
|
100
|
+
|
|
101
|
+
- **Branch**: `vnext/03-preset-contract`
|
|
102
|
+
- **Impacted Paths**: `src/config/types.ts`, `src/config/structural-presets.ts`, `src/config/appearance.ts`, `tests/structural-presets.test.ts`
|
|
103
|
+
- **Scope & Deliverables**:
|
|
104
|
+
1. Extend `PresetDef` with optional structural specifications: `tokens`, `chrome`, `signal`, `motion`, `deck`, `welcome`, `glyphs`.
|
|
105
|
+
2. Implement the **10 Structural Presets**:
|
|
106
|
+
- **Lanternwake** (Default Wishcraft Identity): Warm amber/ember tones, rounded frames, powerline separators, ember breathe motion.
|
|
107
|
+
- **Threadbound**: Woven craft aesthetic, indigo palette, knot separators (`╼·╾`), stitch travel motion.
|
|
108
|
+
- **Scryglass**: Glass/lens instruments, cyan/violet capsule segments (`╭ ╮`), refraction sweep motion.
|
|
109
|
+
- **Runebloom**: Organic alchemical sigils, gold/moss tones, sparse anchors, finite event bloom motion.
|
|
110
|
+
- **Moonwell**: Lunar night arcs (`◜◝◞◟`), silver/navy palette, lunar orbit breathe motion.
|
|
111
|
+
- **Hexforge**: Industrial heavy block geometry (`█`, `⬡`), heat orange palette, heat propagation motion.
|
|
112
|
+
- **Vellum**: Editorial grimoire, parchment/ink tones, borderless line reveal motion.
|
|
113
|
+
- **Wisp**: Minimal ethereal whitespace, mist grey/ice blue, phase drift ambient motion.
|
|
114
|
+
- **Starweave**: Celestial constellation nodes (`✦╲╱`), star separators, path traversal motion.
|
|
115
|
+
- **Crucible**: Liquid alchemical cells (`░▒▓█`), obsidian/magma palette, liquid level rise motion.
|
|
116
|
+
3. Ensure complete decoupling: Users can mix base preset + signal layout + palette + motion language + glyph sets.
|
|
117
|
+
- **Done When**: All 10 presets are registered, tested for correct fallback handling (Nerd vs ASCII), and verified alongside the 7 legacy presets.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### PR 4 — Animated Signal (Powerline vNext) — landed
|
|
122
|
+
|
|
123
|
+
- **Branch**: `vnext/04-signal`
|
|
124
|
+
- **Impacted Paths**: `src/signal/*`, `src/extension/ui/status-line-renderers.ts`, `src/extension/session/session-lifecycle.ts`, `src/extension/commands/commands.ts`, `tests/signal.test.ts`
|
|
125
|
+
- **Scope & Deliverables**:
|
|
126
|
+
1. Re-architect the powerline renderer into **Signal**: a motion-aware, 3-lane powerline:
|
|
127
|
+
- **Left Lane**: Model & Git status
|
|
128
|
+
- **Center Lane**: Live activity & tool state
|
|
129
|
+
- **Right Lane**: Context window usage & command queue
|
|
130
|
+
2. Connect Signal rendering to `MotionScheduler`: animated sweeps (e.g. traveling pulse or heat relay) only trigger during active streaming or tool execution.
|
|
131
|
+
3. Register `/signal` as the primary preferred command while maintaining `/powerline` as a transparent compatibility alias.
|
|
132
|
+
4. Preserve strict per-segment error boundary and fault isolation.
|
|
133
|
+
- **Done When**: The live powerline animates smoothly during active agent work, immediately rests at 0 FPS when idle, and preserves all segment fallback safeguards.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### PR 5 — The Wishcraft Deck (Unified Control Surface) — landed
|
|
138
|
+
|
|
139
|
+
- **Branch**: `vnext/05-deck`
|
|
140
|
+
- **Impacted Paths**: `src/extension/ui/deck/*`, `src/extension/commands/commands.ts`, `src/extension/settings/wishcraft-config.ts`, `tests/deck.test.ts`
|
|
141
|
+
- **Scope & Deliverables**:
|
|
142
|
+
1. Build the unified Deck overlay engine (`src/extension/ui/deck/`) using `ctx.ui.custom`.
|
|
143
|
+
2. Bind `Alt+P` and `/wishcraft` to `openWishcraftDeck("home")`.
|
|
144
|
+
3. Implement deep links: `/signal`, `/skills`, `/skills doctor`, `/ideas`, `/usage` routes.
|
|
145
|
+
4. Build Deck Routes:
|
|
146
|
+
- **Home**: Live session state, animated pulse, context percentage bar, next intent card, activity feed, skills health overview (no raw cost counters or static percentage grids).
|
|
147
|
+
- **Signal**: Powerline lane and module configuration.
|
|
148
|
+
- **Skills**: Skill catalog and diagnostics.
|
|
149
|
+
- **Ideas**: Captured thoughts and intent notes.
|
|
150
|
+
- **Guardrails**: Safety policy toggles and log history.
|
|
151
|
+
- **Shell**: Terminal environment & tooling diagnostics.
|
|
152
|
+
- **Usage**: Context and session metrics.
|
|
153
|
+
- **Appearance**: Preset, palette, and chrome controls.
|
|
154
|
+
- **Motion**: Animation settings and gallery trigger.
|
|
155
|
+
- **Shortcuts**: Fast keyboard navigation reference.
|
|
156
|
+
- **Diagnostics**: Health check and terminal capability inspector.
|
|
157
|
+
5. Employ a single continuous outer border frame with shared navigation headers, search inputs, modal pickers, preview cards, and key hints (no cheap nested cards).
|
|
158
|
+
- **Done When**: `Alt+P` opens the full Deck with responsive route switching, keyboard shortcuts (`g s`, `g i`, `/`, `Esc`), and smooth rendering.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
### PR 6 — Appearance Route, Motion Gallery & Composer — landed
|
|
163
|
+
|
|
164
|
+
- **Branch**: `vnext/06-appearance`
|
|
165
|
+
- **Impacted Paths**: `src/extension/ui/deck/routes/appearance.ts`, `src/extension/settings/wishcraft-config.ts`, `src/motion/gallery/*`, `tests/appearance/*`
|
|
166
|
+
- **Scope & Deliverables**:
|
|
167
|
+
1. Appearance sub-routes: `Presets`, `Palette`, `Signal`, `Motion`, `Glyphs`, `Layout`, `Accessibility`.
|
|
168
|
+
2. **Motion Gallery**: Interactive catalog covering 50+ definitions grouped into:
|
|
169
|
+
- `Wishcraft` (Ember, Wisp, Bloom, Relay)
|
|
170
|
+
- `Matrix` (Lemniscate, Lunar, Wing, Petal)
|
|
171
|
+
- `Procedural` (Helix, Orbit, Ripple, Wave)
|
|
172
|
+
- `Classic` (Braille, Quarter, Bar, Bounce)
|
|
173
|
+
- `Favorites` & `Custom`
|
|
174
|
+
3. **Motion Composer**: Interactive tool to preview and tweak frame arrays, generator parameters (radius, trail, interval, easing), and assign motions to semantic channels.
|
|
175
|
+
4. Replace flat settings lists with **Fuzzy Search Configurator** (`/ appearance search`).
|
|
176
|
+
5. Live-reload on all configuration mutations.
|
|
177
|
+
- **Done When**: Users can search any setting, preview motions in real time, customize animations, and save settings instantly.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### PR 7 — First-Class Accessibility & Fallbacks — landed
|
|
182
|
+
|
|
183
|
+
- **Branch**: `vnext/07-accessibility`
|
|
184
|
+
- **Impacted Paths**: `src/motion/accessibility.ts`, `src/theme/detect.ts`, `src/theme/icons.ts`, `tests/accessibility/*`
|
|
185
|
+
- **Scope & Deliverables**:
|
|
186
|
+
1. Comprehensive Motion Levels:
|
|
187
|
+
- `Full`: Continuous sweeps, ambient glows, micro-spinners, and transitions.
|
|
188
|
+
- `Reduced`: Continuous motion disabled; replaced with instantaneous discrete state updates.
|
|
189
|
+
- `Functional Only`: State-critical indicators enabled; decorative ambient effects disabled.
|
|
190
|
+
- `Off`: Completely disables all repeating animations (0 FPS permanent).
|
|
191
|
+
2. Environment Degradation Modes:
|
|
192
|
+
- `NO_COLOR`: Disables ANSI color codes while retaining glyph animations and spacing.
|
|
193
|
+
- `Screen Reader Mode`: Motion disabled; delivers stable, high-contrast text strings.
|
|
194
|
+
- `Non-Truecolor / 8-Color Terminals`: Automatic palette quantization with ASCII glyph fallback.
|
|
195
|
+
3. Closes ROADMAP P1 Gap #4.
|
|
196
|
+
- **Done When**: Automated test suites verify compliant rendering under `NO_COLOR=1`, `TERM=dumb`, reduced-motion flags, and ASCII-only terminals.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
### PR 8 — Skill Workbench, wishcraft-tui Skill & Complete Docs — landed
|
|
201
|
+
|
|
202
|
+
- **Branch**: `vnext/08-craft-docs`
|
|
203
|
+
- **Impacted Paths**: `src/extension/skills/*`, `skills/wishcraft-tui/*`, `README.md`, `docs/*`, `ROADMAP.md`
|
|
204
|
+
- **Scope & Deliverables**:
|
|
205
|
+
1. Upgrade Skill Manager into a full **Skill Workbench**:
|
|
206
|
+
- Detailed split-pane layout: List + Metadata + Health checks + Usage sparklines + Content preview.
|
|
207
|
+
- Inline Creation Wizard on `N` (guided metadata, triggers, and boilerplate).
|
|
208
|
+
2. Create `skills/wishcraft-tui/` project skill:
|
|
209
|
+
- `SKILL.md`
|
|
210
|
+
- Comprehensive reference catalog (`references/product-language.md`, `deck-layout.md`, `signal.md`, `motion-system.md`, `motion-gallery.md`, `theme-contract.md`, `accessibility.md`, `responsive.md`, `regression-testing.md`).
|
|
211
|
+
3. Update `README.md`, `docs/commands.md`, `docs/configuration.md`, and `ROADMAP.md` reflecting the new architecture and milestone completion.
|
|
212
|
+
- **Done When**: The skill workbench is fully interactive, the AI skill is bundled and functional, and all documentation is complete and consistent.
|
package/docs/index.md
CHANGED
|
@@ -12,6 +12,24 @@ The README is the public landing page (`banner.png` only). Everything below live
|
|
|
12
12
|
- [Working vibes](./working-vibes.md) — themed loading messages, modes, and configuration.
|
|
13
13
|
- [Segments & theming](./segments.md) — segment reference, separators, thinking/path/git options, and theme overrides.
|
|
14
14
|
|
|
15
|
+
## Design System & vNext Specifications
|
|
16
|
+
|
|
17
|
+
- [vNext Stacked PR Release Plan](./design/vnext-release-plan.md) — The comprehensive implementation roadmap covering PR0 through PR8.
|
|
18
|
+
- [vNext Architecture & Overview](./design/vnext-overview.md) — Product vision, five pillars, and architectural boundaries.
|
|
19
|
+
- [Semantic Tokens & Theme Contract](./design/theme-contract.md) — `WishcraftTokens` schema and backward compatibility mappings.
|
|
20
|
+
- [Ten Structural Presets](./design/presets.md) — Full catalog of signature structural presets (*Lanternwake*, *Threadbound*, *Scryglass*, etc.).
|
|
21
|
+
- [Semantic Motion Engine](./design/motion-system.md) — Event-driven motion specifications, 0 FPS idle guarantee, channel matrix, and cadences.
|
|
22
|
+
- [Signal — Animated Powerline](./design/signal.md) — 3-lane powerline architecture, live sweeps, and fault-isolated segments.
|
|
23
|
+
- [Wishcraft Deck Layout](./design/deck-layout.md) — Continuous outer surface design, route catalog, deep links, and navigation ergonomics.
|
|
24
|
+
- [Motion Gallery & Composer](./design/motion-gallery.md) — Animation catalog categories and real-time motion authoring specifications.
|
|
25
|
+
- [Accessibility & Fallbacks](./design/accessibility.md) — Motion sensitivity levels, `NO_COLOR` compliance, and universal ASCII degradation.
|
|
26
|
+
- [Responsive Layouts](./design/responsive.md) — Viewport width breakpoints and dynamic height constraints.
|
|
27
|
+
- [Regression Testing](./design/regression-testing.md) — Pure-function unit test strategies, golden ANSI snapshots, and quality gates.
|
|
28
|
+
|
|
29
|
+
## Core Skills
|
|
30
|
+
|
|
31
|
+
- [Wishcraft TUI Skill](../skills/wishcraft-tui/SKILL.md) — Engineering guide and design rules for building Wishcraft components.
|
|
32
|
+
|
|
15
33
|
## Planning
|
|
16
34
|
|
|
17
|
-
- [ROADMAP.md](../ROADMAP.md) —
|
|
35
|
+
- [ROADMAP.md](../ROADMAP.md) — Release campaigns, remaining maturity gaps, and vNext stacked PR roadmap.
|
package/docs/segments.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
### Open-port process owners
|
|
11
11
|
|
|
12
|
-
Open the segment detail view (`
|
|
12
|
+
`alt+p` opens the Wishcraft Deck. The classic Navigate / Configure / Status menu is `/signal menu`. Open the segment detail view (`/signal menu` → Navigate → `open_ports` → `→`) to see **which process owns each listening port**. It best-effort parses `ss -tulnp` (falling back to `netstat -tulnp`), so the row list shows `tcp:3000 → node (12345)` per port; a port without a visible owner is marked `(unknown)`. The result is cached for 2 seconds so opening detail stays cheap. The full `alt+i` ports list shows the raw `ss -p` process column as well.
|
|
13
13
|
|
|
14
14
|
### Fleet open-ports (SSH probe)
|
|
15
15
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@groeponline/pi-wishcraft",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Operator cockpit for Pi: live powerline status, searchable skills, idea queue, sticky Bash, hooks, policy controls, and session UX.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"*.ts",
|
|
@@ -25,7 +25,12 @@
|
|
|
25
25
|
"powerline",
|
|
26
26
|
"status-bar",
|
|
27
27
|
"extension",
|
|
28
|
-
"groeponline"
|
|
28
|
+
"groeponline",
|
|
29
|
+
"terminal-ui",
|
|
30
|
+
"developer-tools",
|
|
31
|
+
"agent-ui",
|
|
32
|
+
"productivity",
|
|
33
|
+
"hooks"
|
|
29
34
|
],
|
|
30
35
|
"publishConfig": {
|
|
31
36
|
"access": "public",
|
|
@@ -45,14 +50,16 @@
|
|
|
45
50
|
"typecheck": "tsc --noEmit",
|
|
46
51
|
"test": "node --experimental-strip-types --test tests/**/*.test.ts",
|
|
47
52
|
"release": "node scripts/release.mjs",
|
|
48
|
-
"prepublishOnly": "tsc --noEmit && node scripts/verify-package.mjs",
|
|
49
|
-
"verify:package": "node scripts/verify-package.mjs",
|
|
50
|
-
"circular": "madge --circular src index.ts bash-mode queue"
|
|
53
|
+
"prepublishOnly": "tsc --noEmit && node scripts/verify-package.mjs && npm run verify:pi-package",
|
|
54
|
+
"verify:package": "node scripts/verify-package.mjs && node scripts/verify-pi-package-contract.mjs",
|
|
55
|
+
"circular": "madge --circular src index.ts bash-mode queue",
|
|
56
|
+
"preview": "node --experimental-strip-types scripts/preview.mjs",
|
|
57
|
+
"verify:pi-package": "node scripts/verify-pi-package-contract.mjs"
|
|
51
58
|
},
|
|
52
59
|
"peerDependencies": {
|
|
53
|
-
"@earendil-works/pi-ai": "
|
|
54
|
-
"@earendil-works/pi-coding-agent": "
|
|
55
|
-
"@earendil-works/pi-tui": "
|
|
60
|
+
"@earendil-works/pi-ai": "*",
|
|
61
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
62
|
+
"@earendil-works/pi-tui": "*"
|
|
56
63
|
},
|
|
57
64
|
"devDependencies": {
|
|
58
65
|
"@earendil-works/pi-ai": "^0.84.0",
|