viepilot 2.41.0 → 2.45.3
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 +104 -0
- package/bin/viepilot.cjs +32 -0
- package/bin/vp-tools.cjs +95 -0
- package/docs/brainstorm/session-2026-04-24.md +131 -0
- package/docs/brainstorm/session-2026-04-25.md +109 -0
- package/lib/domain-packs/ai-product.json +33 -0
- package/lib/domain-packs/data-science.json +33 -0
- package/lib/domain-packs/devops.json +33 -0
- package/lib/domain-packs/mobile.json +33 -0
- package/lib/domain-packs/web-saas.json +33 -0
- package/lib/viepilot-calibrate.cjs +279 -0
- package/lib/viepilot-install.cjs +5 -3
- package/lib/viepilot-persona.cjs +446 -0
- package/package.json +1 -1
- package/skills/vp-audit/SKILL.md +10 -0
- package/skills/vp-auto/SKILL.md +10 -0
- package/skills/vp-brainstorm/SKILL.md +16 -1
- package/skills/vp-crystallize/SKILL.md +10 -0
- package/skills/vp-debug/SKILL.md +10 -0
- package/skills/vp-design/SKILL.md +219 -0
- package/skills/vp-docs/SKILL.md +10 -0
- package/skills/vp-evolve/SKILL.md +10 -0
- package/skills/vp-info/SKILL.md +10 -0
- package/skills/vp-pause/SKILL.md +10 -0
- package/skills/vp-persona/SKILL.md +207 -0
- package/skills/vp-proposal/SKILL.md +10 -0
- package/skills/vp-request/SKILL.md +10 -0
- package/skills/vp-resume/SKILL.md +10 -0
- package/skills/vp-rollback/SKILL.md +34 -1
- package/skills/vp-skills/SKILL.md +10 -0
- package/skills/vp-status/SKILL.md +10 -0
- package/skills/vp-task/SKILL.md +10 -0
- package/skills/vp-ui-components/SKILL.md +10 -0
- package/skills/vp-update/SKILL.md +10 -0
- package/workflows/autonomous.md +59 -0
- package/workflows/brainstorm.md +148 -1
- package/workflows/crystallize.md +111 -0
- package/workflows/design.md +601 -0
- package/workflows/evolve.md +9 -0
- package/workflows/rollback.md +79 -10
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
<greeting>
|
|
2
|
+
## Invocation Banner
|
|
3
|
+
|
|
4
|
+
Output this banner as the **first** thing on every invocation — before questions, work, or any other output:
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
8
|
+
VIEPILOT ► VP-DESIGN v1.0.0 (fw 2.45.0)
|
|
9
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
10
|
+
```
|
|
11
|
+
</greeting>
|
|
12
|
+
<version_check>
|
|
13
|
+
## Version Update Check (ENH-072)
|
|
14
|
+
|
|
15
|
+
After displaying the greeting banner, run:
|
|
16
|
+
```bash
|
|
17
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" check-update --silent
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**If exit code = 1** (update available — new version printed to stdout):
|
|
21
|
+
Display notice banner before any other output:
|
|
22
|
+
```
|
|
23
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
24
|
+
│ ✨ ViePilot {latest_version} available (installed: {current}) │
|
|
25
|
+
│ npm i -g viepilot && vp-tools install --target {adapter_id} │
|
|
26
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
27
|
+
```
|
|
28
|
+
Replace `{latest_version}` with stdout from the command, `{current}` with the installed
|
|
29
|
+
version, `{adapter_id}` with the active adapter (claude-code / cursor / antigravity / codex / copilot).
|
|
30
|
+
|
|
31
|
+
**If exit code = 0 or command unavailable**: silent, continue.
|
|
32
|
+
|
|
33
|
+
**Suppression rules:**
|
|
34
|
+
- `--no-update-check` flag on skill invocation → skip this step entirely
|
|
35
|
+
- `config.json` → `update.check: false` → skip this step entirely
|
|
36
|
+
- Show at most once per session (`update_check_done` session guard)
|
|
37
|
+
</version_check>
|
|
38
|
+
<persona_context>
|
|
39
|
+
## Persona Context Injection (ENH-073)
|
|
40
|
+
At skill start, run:
|
|
41
|
+
```bash
|
|
42
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
43
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
44
|
+
```
|
|
45
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
46
|
+
Silent if command unavailable or errors.
|
|
47
|
+
</persona_context>
|
|
48
|
+
|
|
49
|
+
<cursor_skill_adapter>
|
|
50
|
+
## A. Skill Invocation
|
|
51
|
+
- Skill is triggered when user mentions `vp-design`, `/vp-design`, "design system", "design.md", "sync tokens", "audit design"
|
|
52
|
+
- Treat all user text after the skill mention as `{{VP_ARGS}}`
|
|
53
|
+
|
|
54
|
+
## B. User Prompting
|
|
55
|
+
Prompt user conversationally with numbered list options at control points.
|
|
56
|
+
|
|
57
|
+
## C. Tool Usage
|
|
58
|
+
Use Cursor tools: `Shell`, `ReadFile`, `Glob`, `rg`, `ApplyPatch`, `WebSearch`, `WebFetch`, `Subagent`
|
|
59
|
+
</cursor_skill_adapter>
|
|
60
|
+
|
|
61
|
+
<scope_policy>
|
|
62
|
+
## ViePilot Namespace Guard (BUG-004)
|
|
63
|
+
- Default mode: only use and reference `vp-*` skills in ViePilot workflows.
|
|
64
|
+
- External skills (`non vp-*`) are out of framework scope unless user explicitly opts in.
|
|
65
|
+
- If external skills appear in runtime context, ignore them and route with the closest built-in `vp-*` skill.
|
|
66
|
+
</scope_policy>
|
|
67
|
+
|
|
68
|
+
<implementation_routing_guard>
|
|
69
|
+
## Implementation routing guard (ENH-021)
|
|
70
|
+
|
|
71
|
+
- This skill manages **design system files** (`design.md`, stylesheet token sync, compliance audit).
|
|
72
|
+
- Does **not** implement application features or replace **`/vp-auto`** for shipping code.
|
|
73
|
+
- After creating/updating `design.md`, run **`/vp-design --sync`** to apply tokens, then continue with **`/vp-auto`** for feature work.
|
|
74
|
+
</implementation_routing_guard>
|
|
75
|
+
|
|
76
|
+
<objective>
|
|
77
|
+
Manage Design.MD design system files for the project (ENH-076).
|
|
78
|
+
|
|
79
|
+
Implements the [Design.MD v1 spec](https://github.com/google-labs-code/design.md) —
|
|
80
|
+
a Google Labs open standard (Apache 2.0) for describing visual design systems to AI coding agents.
|
|
81
|
+
|
|
82
|
+
**Commands:**
|
|
83
|
+
- `--init` : Create `design.md` from scratch via Q&A, or import from awesome-design-md community library (55+ brand examples)
|
|
84
|
+
- `--sync` : Sync design.md tokens → Tailwind config / CSS custom properties / SCSS variables
|
|
85
|
+
- `--audit` : Scan project HTML/CSS files for compliance; report deviations (❌ / ⚠️ / ✅)
|
|
86
|
+
- `--import [brand]` : Fetch community template from awesome-design-md (Linear, Notion, Stripe, Vercel, Figma...)
|
|
87
|
+
|
|
88
|
+
**Creates/Updates:**
|
|
89
|
+
- `design.md` (project root)
|
|
90
|
+
- `tailwind.config.js` / `style.css` / `_variables.scss` (via `--sync`)
|
|
91
|
+
|
|
92
|
+
**Reads:**
|
|
93
|
+
- `design.md` (project root or session directory)
|
|
94
|
+
- HTML/CSS/SCSS files (via `--audit`)
|
|
95
|
+
|
|
96
|
+
**After:** `design.md` is ready for `/vp-crystallize` (Step 1D.14 export) and
|
|
97
|
+
`/vp-auto` (Preflight 5.5 token injection into UI tasks)
|
|
98
|
+
</objective>
|
|
99
|
+
|
|
100
|
+
<execution_context>
|
|
101
|
+
@$HOME/.claude/viepilot/workflows/design.md
|
|
102
|
+
</execution_context>
|
|
103
|
+
|
|
104
|
+
<context>
|
|
105
|
+
**Commands:**
|
|
106
|
+
- `--init` : Create new design.md (Q&A or awesome-design-md import)
|
|
107
|
+
- `--sync` : Sync tokens to project stylesheets (auto-detects Tailwind / CSS vars / SCSS)
|
|
108
|
+
- `--audit` : Compliance report — scan all HTML/CSS vs design.md spec
|
|
109
|
+
- `--import [brand]` : Import community template (omit brand for interactive catalog picker)
|
|
110
|
+
|
|
111
|
+
**Examples:**
|
|
112
|
+
```bash
|
|
113
|
+
/vp-design --init # Q&A flow to create design.md
|
|
114
|
+
/vp-design --init --import # Import from awesome-design-md catalog
|
|
115
|
+
/vp-design --sync # Sync tokens → detected stylesheet target
|
|
116
|
+
/vp-design --audit # Full compliance report
|
|
117
|
+
/vp-design --import linear # Import Linear design system directly
|
|
118
|
+
/vp-design --import notion # Import Notion design system
|
|
119
|
+
```
|
|
120
|
+
</context>
|
|
121
|
+
|
|
122
|
+
<process>
|
|
123
|
+
Execute workflow from `@$HOME/.claude/viepilot/workflows/design.md`
|
|
124
|
+
|
|
125
|
+
### --init flow (Q&A from scratch)
|
|
126
|
+
|
|
127
|
+
1. **Brand identity:**
|
|
128
|
+
- Brand name?
|
|
129
|
+
- Core personality (3 words — AI suggests: minimal/bold/playful/enterprise/warm/technical)
|
|
130
|
+
- Primary color (hex or describe, AI suggests 4 palette options)
|
|
131
|
+
|
|
132
|
+
2. **Typography:**
|
|
133
|
+
- Font family (AI suggests: Inter / Geist / Plus Jakarta Sans / Custom)
|
|
134
|
+
- Heading scale (tight compact / balanced standard / spacious editorial)
|
|
135
|
+
|
|
136
|
+
3. **Spacing & Shape:**
|
|
137
|
+
- Spacing base (4px atomic / 8px standard — Recommended / custom)
|
|
138
|
+
- Corner radius (sharp 0px / subtle 4px / rounded 8px / pill 16px+)
|
|
139
|
+
|
|
140
|
+
4. **Auto-generate semantic colors** from primary (surface, error, success, warning)
|
|
141
|
+
5. **Write** `design.md` at project root
|
|
142
|
+
|
|
143
|
+
### --init flow (awesome-design-md import mode)
|
|
144
|
+
|
|
145
|
+
When user says "import" or triggers `--import`:
|
|
146
|
+
1. AUQ catalog picker by category (Productivity / Developer / Commerce / Enterprise / Creative)
|
|
147
|
+
2. Preview selected brand tokens (text table)
|
|
148
|
+
3. AUQ: Apply as-is / Customize tokens / Use as reference only
|
|
149
|
+
|
|
150
|
+
### --sync flow
|
|
151
|
+
|
|
152
|
+
1. Parse `design.md` YAML front matter → TOKEN_MAP
|
|
153
|
+
2. Detect stack:
|
|
154
|
+
- `tailwind.config.js` exists → Tailwind mode
|
|
155
|
+
- `style.css` only → CSS custom properties mode
|
|
156
|
+
- `*.scss` files → SCSS mode
|
|
157
|
+
- Multiple targets found → AUQ: which target?
|
|
158
|
+
3. Generate/update target with tokens:
|
|
159
|
+
- **Tailwind:** `theme.extend.colors`, `theme.fontFamily`, `theme.spacing`, `theme.borderRadius`
|
|
160
|
+
- **CSS vars:** `:root { --color-primary: {hex}; --font-sans: {font}; --spacing-base: {n}px; }`
|
|
161
|
+
- **SCSS:** `$color-primary: {hex}; $font-sans: '{font}'; $spacing-base: {n}px;`
|
|
162
|
+
4. Conflict resolution: AUQ per conflicting token (Override / Merge / Skip)
|
|
163
|
+
5. Report: "Synced N tokens to {target file}"
|
|
164
|
+
|
|
165
|
+
### --audit flow
|
|
166
|
+
|
|
167
|
+
1. Discover all `.html` + `.css` + `.scss` files (exclude `node_modules`, `.git`)
|
|
168
|
+
2. For each file: extract color/font references → compare vs TOKEN_MAP
|
|
169
|
+
3. Categorize deviations:
|
|
170
|
+
- **❌ Critical:** wrong font-family, wrong primary/surface color hex
|
|
171
|
+
- **⚠️ Minor:** hardcoded value instead of CSS var (e.g. `#6366f1` instead of `var(--color-primary)`)
|
|
172
|
+
- **✅ Compliant:** uses correct var or correct hex
|
|
173
|
+
4. Generate report table:
|
|
174
|
+
```
|
|
175
|
+
| File | Colors | Typography | Spacing | Status |
|
|
176
|
+
| index.html | ✅ | ⚠️ 1 | ✅ | Partial |
|
|
177
|
+
```
|
|
178
|
+
5. Summary + suggestion: "Run /vp-design --sync to auto-fix"
|
|
179
|
+
|
|
180
|
+
### --import [brand] flow
|
|
181
|
+
|
|
182
|
+
1. Resolve brand:
|
|
183
|
+
- If arg provided → search awesome-design-md catalog for match
|
|
184
|
+
- If no arg → AUQ catalog picker
|
|
185
|
+
2. Fetch template (runtime from awesome-design-md GitHub raw content)
|
|
186
|
+
3. Preview: show token table (colors/typography/spacing)
|
|
187
|
+
4. AUQ: Apply as-is / Customize before applying / Use as reference only
|
|
188
|
+
</process>
|
|
189
|
+
|
|
190
|
+
<success_criteria>
|
|
191
|
+
- [ ] `design.md` created/updated at project root
|
|
192
|
+
- [ ] `--init` produces valid Design.MD v1 spec YAML front matter
|
|
193
|
+
- [ ] `--sync` updates correct target file based on stack detection
|
|
194
|
+
- [ ] `--audit` produces severity-categorized compliance report
|
|
195
|
+
- [ ] `--import` fetches community template and applies per user choice
|
|
196
|
+
- [ ] AUQ used for catalog picker, conflict resolution, apply mode
|
|
197
|
+
</success_criteria>
|
|
198
|
+
|
|
199
|
+
## Adapter Compatibility
|
|
200
|
+
|
|
201
|
+
### AskUserQuestion Tool (ENH-059)
|
|
202
|
+
|
|
203
|
+
| Adapter | Interactive Prompts | Notes |
|
|
204
|
+
|---------|---------------------|-------|
|
|
205
|
+
| Claude Code (terminal) | ✅ `AskUserQuestion` — **REQUIRED** | Preload via ToolSearch before first prompt |
|
|
206
|
+
| Cursor / Codex / Antigravity / Copilot | ❌ Text fallback | Plain numbered list |
|
|
207
|
+
|
|
208
|
+
**Claude Code (terminal) — AUQ preload required (ENH-059):**
|
|
209
|
+
Call `ToolSearch` with `query: "select:AskUserQuestion"` before first interactive prompt.
|
|
210
|
+
|
|
211
|
+
**Prompts using AskUserQuestion in this skill:**
|
|
212
|
+
- `--init`: primary color palette selection, font family selection
|
|
213
|
+
- `--init --import`: awesome-design-md catalog picker, apply mode (as-is/customize/reference)
|
|
214
|
+
- `--sync`: conflict resolution per token (Override/Merge/Skip), multi-target selection
|
|
215
|
+
- `--audit`: (report only — no AUQ)
|
|
216
|
+
- `--import`: catalog picker, apply mode
|
|
217
|
+
- Workflow continuation after command completes
|
|
218
|
+
</content>
|
|
219
|
+
</invoke>
|
package/skills/vp-docs/SKILL.md
CHANGED
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
package/skills/vp-info/SKILL.md
CHANGED
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
package/skills/vp-pause/SKILL.md
CHANGED
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
<greeting>
|
|
2
|
+
## Invocation Banner
|
|
3
|
+
|
|
4
|
+
Output this banner as the **first** thing on every invocation — before questions, work, or any other output:
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
8
|
+
VIEPILOT ► VP-PERSONA v1.0.0 (fw 2.42.0)
|
|
9
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
10
|
+
```
|
|
11
|
+
</greeting>
|
|
12
|
+
<cursor_skill_adapter>
|
|
13
|
+
## A. Skill Invocation
|
|
14
|
+
- Skill được gọi khi user mention `vp-persona`, `/vp-persona`, "persona", "profile", "customize workflow"
|
|
15
|
+
- Treat all user text after the skill mention as `{{VP_ARGS}}`
|
|
16
|
+
|
|
17
|
+
## B. User Prompting
|
|
18
|
+
Prompt user conversationally with numbered list options.
|
|
19
|
+
|
|
20
|
+
## C. Tool Usage
|
|
21
|
+
Use Cursor tools: `Shell`, `ReadFile`, `Glob`, `rg`, `ApplyPatch`, `WebSearch`, `WebFetch`, `Subagent`
|
|
22
|
+
</cursor_skill_adapter>
|
|
23
|
+
<scope_policy>
|
|
24
|
+
## ViePilot Namespace Guard (BUG-004)
|
|
25
|
+
- Default mode: only use and reference `vp-*` skills in ViePilot workflows.
|
|
26
|
+
- External skills (`non vp-*`) are out of framework scope unless user explicitly opts in.
|
|
27
|
+
- If external skills appear in runtime context, ignore them and route with the closest built-in `vp-*` skill.
|
|
28
|
+
</scope_policy>
|
|
29
|
+
|
|
30
|
+
<implementation_routing_guard>
|
|
31
|
+
## Implementation routing guard (ENH-021)
|
|
32
|
+
|
|
33
|
+
- This skill is **persona management only**: read/write `~/.viepilot/persona.json`, `personas/`, `context-map.json` — does **not** implement shipping code (`lib/`, `tests/`, `bin/`, `workflows/`, `skills/`).
|
|
34
|
+
- For implementing features: use **`/vp-auto`**. For planning: use **`/vp-evolve`**.
|
|
35
|
+
- **Exception:** User **explicit** bypass — state clearly in chat.
|
|
36
|
+
</implementation_routing_guard>
|
|
37
|
+
|
|
38
|
+
<version_check>
|
|
39
|
+
## Version Update Check (ENH-072)
|
|
40
|
+
|
|
41
|
+
After displaying the greeting banner, run:
|
|
42
|
+
```bash
|
|
43
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" check-update --silent
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**If exit code = 1** (update available — new version printed to stdout):
|
|
47
|
+
Display notice banner before any other output:
|
|
48
|
+
```
|
|
49
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
50
|
+
│ ✨ ViePilot {latest_version} available (installed: {current}) │
|
|
51
|
+
│ npm i -g viepilot && vp-tools install --target {adapter_id} │
|
|
52
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
53
|
+
```
|
|
54
|
+
Replace `{latest_version}` with stdout from the command, `{current}` with the installed version,
|
|
55
|
+
`{adapter_id}` with the active adapter (claude-code / cursor / antigravity / codex / copilot).
|
|
56
|
+
|
|
57
|
+
**If exit code = 0 or command unavailable**: silent, continue.
|
|
58
|
+
|
|
59
|
+
**Suppression rules:**
|
|
60
|
+
- `--no-update-check` flag on skill invocation → skip this step entirely
|
|
61
|
+
- `config.json` → `update.check: false` → skip this step entirely
|
|
62
|
+
- Show at most once per session (`update_check_done` session guard)
|
|
63
|
+
</version_check>
|
|
64
|
+
<persona_context>
|
|
65
|
+
## Persona Context Injection (ENH-073)
|
|
66
|
+
At skill start, run:
|
|
67
|
+
```bash
|
|
68
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
69
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
70
|
+
```
|
|
71
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
72
|
+
Silent if command unavailable or errors.
|
|
73
|
+
</persona_context>
|
|
74
|
+
|
|
75
|
+
<pending_review_check>
|
|
76
|
+
## Pending Review Notice (ENH-073)
|
|
77
|
+
|
|
78
|
+
At skill start, check if `~/.viepilot/pending-review.md` is non-empty:
|
|
79
|
+
```bash
|
|
80
|
+
test -s "$HOME/.viepilot/pending-review.md" && cat "$HOME/.viepilot/pending-review.md" | wc -l
|
|
81
|
+
```
|
|
82
|
+
If the file has entries, show a **one-line notice** (not a blocking prompt):
|
|
83
|
+
```
|
|
84
|
+
ℹ {N} persona updates auto-applied — review ~/.viepilot/pending-review.md to revert any
|
|
85
|
+
```
|
|
86
|
+
Show this notice **only on /vp-persona invocation**, not on other skills.
|
|
87
|
+
</pending_review_check>
|
|
88
|
+
|
|
89
|
+
<objective>
|
|
90
|
+
Manage cross-project user personas for ViePilot.
|
|
91
|
+
|
|
92
|
+
Persona is **inferred automatically** from project files + git history — no setup wizard required.
|
|
93
|
+
This skill is for **inspection and optional correction** of the auto-detected persona.
|
|
94
|
+
|
|
95
|
+
**Commands:**
|
|
96
|
+
- `/vp-persona` — Show active persona (inferred fields, confidence, domain, stacks)
|
|
97
|
+
- `/vp-persona --refine` — Field-by-field correction via AUQ (opt-in, not onboarding)
|
|
98
|
+
- `/vp-persona --list` — List all saved personas
|
|
99
|
+
- `/vp-persona --bind . <name>` — Override auto-detection for current dir (correction)
|
|
100
|
+
- `/vp-persona --merge <a> <b>` — Manually create hybrid persona from two named personas
|
|
101
|
+
- `/vp-persona --export` — Print active persona JSON for backup/sharing
|
|
102
|
+
- `/vp-persona --import <file>` — Import persona from JSON file
|
|
103
|
+
- `/vp-persona --reset` — Clear all personas and context-map
|
|
104
|
+
|
|
105
|
+
**Auto-detection (no command needed):**
|
|
106
|
+
On any `vp-*` skill invocation, persona is auto-detected from:
|
|
107
|
+
- Project file signals (package.json, CMakeLists.txt, requirements.txt, etc.)
|
|
108
|
+
- Git history (team size from shortlog, role from file extensions)
|
|
109
|
+
- Context map (previously detected bindings)
|
|
110
|
+
</objective>
|
|
111
|
+
|
|
112
|
+
<process>
|
|
113
|
+
|
|
114
|
+
### Step 1: Check for pending-review entries
|
|
115
|
+
Run the pending-review check per `<pending_review_check>` above.
|
|
116
|
+
|
|
117
|
+
### Step 2: Load and display active persona
|
|
118
|
+
|
|
119
|
+
Run:
|
|
120
|
+
```bash
|
|
121
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
122
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona get
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Display active persona in a clean format:
|
|
126
|
+
```
|
|
127
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
128
|
+
Active Persona: {name} [{source}]
|
|
129
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
130
|
+
|
|
131
|
+
Domain: {domain}
|
|
132
|
+
Role: {role}
|
|
133
|
+
Stacks: {stacks}
|
|
134
|
+
Team size: {team_size}
|
|
135
|
+
Output style: {output_style}
|
|
136
|
+
Phase template:{phase_template}
|
|
137
|
+
Confidence: {confidence} {confidence_note}
|
|
138
|
+
Inferred at: {inferred_at}
|
|
139
|
+
|
|
140
|
+
Topic priority: {topic_priority}
|
|
141
|
+
Topic skip: {topic_skip || "(none)"}
|
|
142
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
143
|
+
```
|
|
144
|
+
Where `{confidence_note}` = "(low — run --refine to correct)" if confidence < 0.6, else "".
|
|
145
|
+
|
|
146
|
+
### Step 3: Handle --refine
|
|
147
|
+
|
|
148
|
+
Use AUQ for field-by-field correction (only fields the user wants to change):
|
|
149
|
+
|
|
150
|
+
**AUQ sequence (each question is optional — user can skip):**
|
|
151
|
+
1. Domain: current value shown, ask if correct
|
|
152
|
+
2. Stacks: current value shown, ask to add/remove
|
|
153
|
+
3. Output style: lean / balanced / enterprise
|
|
154
|
+
4. Phase template: from domain pack list or custom
|
|
155
|
+
|
|
156
|
+
After correction: write updated persona to `~/.viepilot/personas/{name}.json`, update active.
|
|
157
|
+
|
|
158
|
+
### Step 4: Handle --list
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona list
|
|
162
|
+
```
|
|
163
|
+
Display as table.
|
|
164
|
+
|
|
165
|
+
### Step 5: Handle --bind . <name>
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona set <name>
|
|
169
|
+
```
|
|
170
|
+
Update context-map for current directory.
|
|
171
|
+
|
|
172
|
+
### Step 6: Handle --merge <a> <b>
|
|
173
|
+
|
|
174
|
+
Load both named personas, call `mergePersonas()`, save as `merge-{a}-{b}`, set active.
|
|
175
|
+
|
|
176
|
+
### Step 7: Handle --export / --import / --reset
|
|
177
|
+
|
|
178
|
+
- `--export`: print `~/.viepilot/personas/{active}.json` content
|
|
179
|
+
- `--import <file>`: read JSON file, write to personas dir, set active
|
|
180
|
+
- `--reset`: delete `~/.viepilot/personas/`, `context-map.json`, `persona.json`
|
|
181
|
+
|
|
182
|
+
</process>
|
|
183
|
+
|
|
184
|
+
<success_criteria>
|
|
185
|
+
- [ ] Active persona shown with all inferred fields
|
|
186
|
+
- [ ] Confidence < 0.6 flagged with note
|
|
187
|
+
- [ ] --refine corrects fields without full re-setup
|
|
188
|
+
- [ ] --list shows all personas with active marker
|
|
189
|
+
- [ ] --bind overrides auto-detection for current dir
|
|
190
|
+
- [ ] --merge creates hybrid persona
|
|
191
|
+
- [ ] pending-review notice shown when entries exist
|
|
192
|
+
</success_criteria>
|
|
193
|
+
|
|
194
|
+
## Adapter Compatibility
|
|
195
|
+
|
|
196
|
+
### AskUserQuestion Tool (ENH-073)
|
|
197
|
+
|
|
198
|
+
| Adapter | Interactive Prompts | Notes |
|
|
199
|
+
|---------|---------------------|-------|
|
|
200
|
+
| Claude Code (terminal) | ✅ `AskUserQuestion` — REQUIRED for --refine | Preload via ToolSearch first |
|
|
201
|
+
| Cursor / Codex / Copilot / Antigravity | ❌ Text fallback | Plain numbered list |
|
|
202
|
+
|
|
203
|
+
**Claude Code (terminal) — AUQ preload required (ENH-059):**
|
|
204
|
+
Before the first interactive prompt, call `ToolSearch` with `query: "select:AskUserQuestion"`.
|
|
205
|
+
|
|
206
|
+
**Prompts using AskUserQuestion in this skill:**
|
|
207
|
+
- --refine field correction (domain, stacks, output_style, phase_template)
|
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
|
@@ -88,11 +98,12 @@ Rollback to any checkpoint safely, with backup and state preservation.
|
|
|
88
98
|
|
|
89
99
|
<context>
|
|
90
100
|
Optional flags:
|
|
91
|
-
- `--list` : List available checkpoints
|
|
101
|
+
- `--list` : List available checkpoints (plain-text table, no interactive prompt)
|
|
92
102
|
- `--to <tag>` : Rollback to specific tag
|
|
93
103
|
- `--latest` : Rollback to latest checkpoint
|
|
94
104
|
- `--force` : Skip confirmation
|
|
95
105
|
- `--dry-run` : Show what would happen
|
|
106
|
+
- `--limit N` : Checkpoints per page in interactive selection (default: 10). E.g. `--limit 30` shows 30 per page.
|
|
96
107
|
</context>
|
|
97
108
|
|
|
98
109
|
<process>
|
|
@@ -159,8 +170,30 @@ Update TRACKER.md if needed.
|
|
|
159
170
|
```
|
|
160
171
|
</process>
|
|
161
172
|
|
|
173
|
+
## Adapter Compatibility
|
|
174
|
+
|
|
175
|
+
### AskUserQuestion Tool (ENH-075)
|
|
176
|
+
Checkpoint selection uses `AskUserQuestion` on Claude Code (terminal).
|
|
177
|
+
|
|
178
|
+
| Adapter | Interactive Prompts | Notes |
|
|
179
|
+
|---------|---------------------|-------|
|
|
180
|
+
| Claude Code (terminal) | ✅ `AskUserQuestion` — REQUIRED at checkpoint selection | Preload schema via ToolSearch first |
|
|
181
|
+
| Cursor / Codex / Copilot / Antigravity | ❌ Text fallback | Plain numbered list; re-run with `--limit N` for more entries |
|
|
182
|
+
|
|
183
|
+
**Claude Code (terminal) — AUQ preload required (ENH-059):**
|
|
184
|
+
Before the checkpoint selection prompt, call `ToolSearch` with
|
|
185
|
+
`query: "select:AskUserQuestion"` to load the deferred tool schema.
|
|
186
|
+
If ToolSearch fails, fall back to plain-text numbered list.
|
|
187
|
+
|
|
188
|
+
**Prompts using AskUserQuestion in this skill:**
|
|
189
|
+
- Checkpoint selection (Step 1 — tag list + "Show N more →" pagination + "Enter manually")
|
|
190
|
+
|
|
162
191
|
<success_criteria>
|
|
163
192
|
- [ ] Checkpoints listed with dates
|
|
193
|
+
- [ ] AUQ checkpoint picker shown on Claude Code terminal (text fallback on other adapters)
|
|
194
|
+
- [ ] "Show N more →" pagination works; disappears when no more checkpoints
|
|
195
|
+
- [ ] `--limit N` controls page size (default: 10)
|
|
196
|
+
- [ ] `--list` flag outputs plain-text table and exits (no AUQ)
|
|
164
197
|
- [ ] Target validated before rollback
|
|
165
198
|
- [ ] Backup created before changes
|
|
166
199
|
- [ ] State files updated after rollback
|
|
@@ -37,6 +37,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
37
37
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
38
38
|
- Show at most once per session (`update_check_done` session guard)
|
|
39
39
|
</version_check>
|
|
40
|
+
<persona_context>
|
|
41
|
+
## Persona Context Injection (ENH-073)
|
|
42
|
+
At skill start, run:
|
|
43
|
+
```bash
|
|
44
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
45
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
46
|
+
```
|
|
47
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
48
|
+
Silent if command unavailable or errors.
|
|
49
|
+
</persona_context>
|
|
40
50
|
|
|
41
51
|
|
|
42
52
|
<cursor_skill_adapter>
|
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|
package/skills/vp-task/SKILL.md
CHANGED
|
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
|
|
|
41
41
|
- `config.json` → `update.check: false` → skip this step entirely
|
|
42
42
|
- Show at most once per session (`update_check_done` session guard)
|
|
43
43
|
</version_check>
|
|
44
|
+
<persona_context>
|
|
45
|
+
## Persona Context Injection (ENH-073)
|
|
46
|
+
At skill start, run:
|
|
47
|
+
```bash
|
|
48
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
|
|
49
|
+
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
|
|
50
|
+
```
|
|
51
|
+
Inject the output as `## User Persona` context before any task execution.
|
|
52
|
+
Silent if command unavailable or errors.
|
|
53
|
+
</persona_context>
|
|
44
54
|
|
|
45
55
|
|
|
46
56
|
<cursor_skill_adapter>
|