viepilot 2.15.0 → 2.23.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 +137 -0
- package/README.md +3 -3
- package/bin/viepilot.cjs +3 -2
- package/docs/dev/agents.md +131 -0
- package/docs/user/features/adapters.md +51 -0
- package/lib/adapters/antigravity.cjs +2 -1
- package/lib/adapters/claude-code.cjs +2 -1
- package/lib/adapters/codex.cjs +2 -1
- package/lib/adapters/copilot.cjs +44 -0
- package/lib/adapters/cursor.cjs +2 -1
- package/lib/adapters/index.cjs +1 -0
- package/lib/viepilot-install.cjs +9 -0
- package/package.json +1 -1
- package/skills/vp-audit/SKILL.md +15 -0
- package/skills/vp-auto/SKILL.md +28 -0
- package/skills/vp-brainstorm/SKILL.md +18 -2
- package/skills/vp-crystallize/SKILL.md +18 -2
- package/skills/vp-debug/SKILL.md +12 -0
- package/skills/vp-docs/SKILL.md +12 -0
- package/skills/vp-evolve/SKILL.md +33 -0
- package/skills/vp-info/SKILL.md +12 -0
- package/skills/vp-pause/SKILL.md +12 -0
- package/skills/vp-proposal/SKILL.md +12 -0
- package/skills/vp-request/SKILL.md +19 -2
- package/skills/vp-resume/SKILL.md +12 -0
- package/skills/vp-rollback/SKILL.md +12 -0
- package/skills/vp-status/SKILL.md +12 -0
- package/skills/vp-task/SKILL.md +12 -0
- package/skills/vp-ui-components/SKILL.md +12 -0
- package/skills/vp-update/SKILL.md +12 -0
- package/workflows/audit.md +72 -37
- package/workflows/autonomous.md +140 -9
- package/workflows/brainstorm.md +41 -6
- package/workflows/crystallize.md +38 -12
- package/workflows/evolve.md +52 -17
- package/workflows/request.md +74 -15
- package/workflows/rollback.md +39 -7
package/workflows/autonomous.md
CHANGED
|
@@ -13,9 +13,34 @@ Pauses at control points for user decisions.
|
|
|
13
13
|
|
|
14
14
|
- **`/vp-auto`** + this workflow is the **default lane** for **implementing** work that already has a **phase/task plan** (and doc-first **BUG-001**). **`/vp-request`** and **`/vp-evolve`** do **not** replace this step unless the user explicitly overrides — see **Implementation routing guard** in `workflows/request.md` and `workflows/evolve.md`.
|
|
15
15
|
|
|
16
|
+
## Agent Delegation (ENH-057)
|
|
17
|
+
|
|
18
|
+
This workflow delegates heavy/repetitive operations to sub-agents defined in `agents/`.
|
|
19
|
+
Each agent is invoked via the pattern below rather than implemented inline.
|
|
20
|
+
|
|
21
|
+
| Agent | When invoked | Operation |
|
|
22
|
+
|-------|-------------|-----------|
|
|
23
|
+
| tracker-agent | Task start, task complete, phase complete | TRACKER.md status updates |
|
|
24
|
+
| changelog-agent | Post-phase last task (version bump) | CHANGELOG + package.json bump |
|
|
25
|
+
| test-generator-agent | Last task of each phase (contract tests) | Test file generation + run |
|
|
26
|
+
| doc-sync-agent | Bulk edits: ≥5 identical file types in Paths block | Multi-file .md updates |
|
|
27
|
+
|
|
28
|
+
**Invoke-agent pattern** (Claude Code adapter):
|
|
29
|
+
```
|
|
30
|
+
Agent({
|
|
31
|
+
subagent_type: "general-purpose",
|
|
32
|
+
description: "{agent-name}: {operation}",
|
|
33
|
+
prompt: "Load agents/{agent-name}.md for full spec. Execute: {operation} with inputs: {inputs}"
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
**Non-Claude Code adapters**: execute the equivalent operation inline in the same session.
|
|
37
|
+
|
|
38
|
+
See `agents/` directory for full agent specifications.
|
|
16
39
|
|
|
17
40
|
<process>
|
|
18
41
|
|
|
42
|
+
> **AUQ preload — Claude Code adapter (ENH-059):** At session start, before any interactive prompt, call `ToolSearch` with `query: "select:AskUserQuestion"` to load the deferred schema. Required on Claude Code (terminal). Skip only if `ToolSearch` returns an error → use text fallback for that session.
|
|
43
|
+
|
|
19
44
|
<step name="initialize">
|
|
20
45
|
## 1. Initialize
|
|
21
46
|
|
|
@@ -36,6 +61,26 @@ cat .viepilot/ROADMAP.md
|
|
|
36
61
|
Read `~/.viepilot/config.json` → `COMMUNICATION_LANG` (default: `en`).
|
|
37
62
|
Use `COMMUNICATION_LANG` for all banners, control-point messages, and user-facing output in this session.
|
|
38
63
|
|
|
64
|
+
### Tag Prefix Resolution (ENH-050)
|
|
65
|
+
Resolve the enriched git tag prefix once at session start. All task/phase tags use `${TAG_PREFIX}`.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
PROJECT_PREFIX=$(node bin/vp-tools.cjs info --prefix 2>/dev/null \
|
|
69
|
+
|| grep -i "^prefix:" .viepilot/PROJECT-META.md 2>/dev/null | awk '{print $2}' \
|
|
70
|
+
|| basename "$(pwd)")
|
|
71
|
+
BRANCH_SAFE=$(git rev-parse --abbrev-ref HEAD 2>/dev/null \
|
|
72
|
+
| sed 's/[^a-zA-Z0-9._-]/-/g' || echo "main")
|
|
73
|
+
VERSION=$(node -e "try{console.log(require('./package.json').version)}catch(e){console.log('0.0.0')}" 2>/dev/null \
|
|
74
|
+
|| grep '"version"' package.json 2>/dev/null | head -1 | sed 's/.*"\([0-9.]*\)".*/\1/' || echo "0.0.0")
|
|
75
|
+
TAG_PREFIX="${PROJECT_PREFIX}-${BRANCH_SAFE}-${VERSION}"
|
|
76
|
+
# Example: viepilot-main-2.17.0
|
|
77
|
+
# Tags: ${TAG_PREFIX}-vp-p{phase}-t{task}
|
|
78
|
+
# ${TAG_PREFIX}-vp-p{phase}-t{task}-done
|
|
79
|
+
# ${TAG_PREFIX}-vp-p{phase}-complete
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
> Note: dots in version are valid in git tag names. Branch `/` → `-` via sed.
|
|
83
|
+
|
|
39
84
|
Display startup banner:
|
|
40
85
|
```
|
|
41
86
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
@@ -195,7 +240,7 @@ Canonical order for every task: **Validate contract → Doc-first gate → Stack
|
|
|
195
240
|
|
|
196
241
|
If any check fails:
|
|
197
242
|
- Mark task `blocked` in `PHASE-STATE.md` and list what is missing under **Notes**
|
|
198
|
-
- **Do not** create `{
|
|
243
|
+
- **Do not** create `{TAG_PREFIX}-vp-p{phase}-t{task}` (where `TAG_PREFIX=${PROJECT_PREFIX}-${BRANCH_SAFE}-${VERSION}`)
|
|
199
244
|
- **Do not** proceed to **Execute Task**
|
|
200
245
|
|
|
201
246
|
#### Stack Preflight (token-efficient lookup)
|
|
@@ -213,9 +258,34 @@ If stack cache is missing:
|
|
|
213
258
|
|
|
214
259
|
Only after **Validate Task Contract**, **Pre-execution documentation gate**, and **Stack Preflight** (or explicit waiver logged in the task file with reason):
|
|
215
260
|
|
|
216
|
-
Create git tag: `{
|
|
261
|
+
Create git tag: `{TAG_PREFIX}-vp-p{phase}-t{task}` (enriched format: `${PROJECT_PREFIX}-${BRANCH_SAFE}-${VERSION}-vp-p{phase}-t{task}`)
|
|
262
|
+
```bash
|
|
263
|
+
git tag "${TAG_PREFIX}-vp-p${PHASE}-t${TASK}"
|
|
264
|
+
```
|
|
217
265
|
Ensure `PHASE-STATE.md` already shows current task `in_progress` (set during the gate if not already).
|
|
218
266
|
|
|
267
|
+
#### Bulk-Edit Task Detection — doc-sync-agent (ENH-057)
|
|
268
|
+
|
|
269
|
+
**Before executing**, scan the `## Paths` block of the task:
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
IF (Paths block contains ≥5 files of the same type, e.g., skills/*/SKILL.md)
|
|
273
|
+
OR (task description matches: "update all N files", "add row to all skills", "sync across N files")
|
|
274
|
+
→ Invoke doc-sync-agent instead of N sequential edits:
|
|
275
|
+
|
|
276
|
+
Agent({ subagent_type: "general-purpose",
|
|
277
|
+
description: "doc-sync-agent: {change_mode} across {file_pattern}",
|
|
278
|
+
prompt: "Load agents/doc-sync-agent.md. Pattern: {glob}. Mode: {change_mode}. Anchor: {anchor}. Content: {content}."
|
|
279
|
+
})
|
|
280
|
+
Non-Claude Code: apply changes sequentially inline.
|
|
281
|
+
|
|
282
|
+
Example: Task 84.3 "Update all 17 SKILL.md — add Copilot adapter row"
|
|
283
|
+
→ Pattern: skills/*/SKILL.md | Mode: insert-row | Anchor: "| Codex CLI |" | Content: "| GitHub Copilot | ✅ ..."
|
|
284
|
+
→ 1 agent call replaces 17 sequential Edit calls.
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
If Paths block has < 5 files: proceed with sequential edits as normal.
|
|
288
|
+
|
|
219
289
|
#### Execute Task
|
|
220
290
|
1. Read task objective and acceptance criteria
|
|
221
291
|
2. Read SYSTEM-RULES.md for coding standards
|
|
@@ -289,7 +359,7 @@ If any check fails:
|
|
|
289
359
|
#### Handle Result
|
|
290
360
|
|
|
291
361
|
**PASS:**
|
|
292
|
-
- Create git tag: `{
|
|
362
|
+
- Create git tag: `{TAG_PREFIX}-vp-p{phase}-t{task}-done` (e.g. `git tag "${TAG_PREFIX}-vp-p${PHASE}-t${TASK}-done"`)
|
|
293
363
|
- Update PHASE-STATE.md immediately: task → done, append files changed by this task to Files Changed table (individual files, no glob patterns)
|
|
294
364
|
- Update TRACKER.md immediately
|
|
295
365
|
- Update HANDOFF.json immediately
|
|
@@ -312,12 +382,21 @@ After each PASS task and PASS sub-task (state-first, then continue):
|
|
|
312
382
|
```yaml
|
|
313
383
|
update:
|
|
314
384
|
- PHASE-STATE.md: task status, timestamp
|
|
315
|
-
- TRACKER.md: current state, progress
|
|
385
|
+
- TRACKER.md: current state, progress ← via tracker-agent (ENH-057)
|
|
316
386
|
- HANDOFF.json: latest position
|
|
317
387
|
- ROADMAP.md: sync when phase status/progress changed
|
|
318
|
-
- CHANGELOG.md: if feature/fix completed
|
|
388
|
+
- CHANGELOG.md: if feature/fix completed ← via changelog-agent at end of phase (ENH-057)
|
|
319
389
|
```
|
|
320
390
|
|
|
391
|
+
**Tracker updates — invoke tracker-agent:**
|
|
392
|
+
```
|
|
393
|
+
Agent({ subagent_type: "general-purpose",
|
|
394
|
+
description: "tracker-agent: update task {phase}.{task} → {status}",
|
|
395
|
+
prompt: "Load agents/tracker-agent.md. Operation: update-task-status. Phase: {phase}. Task: {task}. Status: {status}."
|
|
396
|
+
})
|
|
397
|
+
```
|
|
398
|
+
Non-Claude Code: update TRACKER.md inline as before.
|
|
399
|
+
|
|
321
400
|
Rule:
|
|
322
401
|
- Never defer state updates to end-of-phase only.
|
|
323
402
|
- If interrupted, HANDOFF.json must still point to exact in-progress task/sub-task.
|
|
@@ -355,10 +434,22 @@ When all tasks in phase are done/skipped:
|
|
|
355
434
|
| smarttrack-*/pom.xml (8 files) | 1.1 | ← WRONG: glob pattern
|
|
356
435
|
| smarttrack-*/src/** (7 files) | 1.1 | ← WRONG: summarized
|
|
357
436
|
```
|
|
358
|
-
4. Create git tag: `{
|
|
359
|
-
5. Check version bump needed
|
|
360
|
-
- Features added → MINOR
|
|
361
|
-
|
|
437
|
+
4. Create git tag: `{TAG_PREFIX}-vp-p{phase}-complete` (e.g. `git tag "${TAG_PREFIX}-vp-p${PHASE}-complete"`)
|
|
438
|
+
5. Check version bump needed — apply `.viepilot/SYSTEM-RULES.md → Version Bump Rules`:
|
|
439
|
+
- Features added → MINOR; Fixes only → PATCH; Mixed → MINOR; Breaking → MAJOR
|
|
440
|
+
|
|
441
|
+
**Version bump — invoke changelog-agent (ENH-057, ENH-053 fix):**
|
|
442
|
+
```
|
|
443
|
+
Agent({ subagent_type: "general-purpose",
|
|
444
|
+
description: "changelog-agent: bump to {version} + CHANGELOG [{version}]",
|
|
445
|
+
prompt: "Load agents/changelog-agent.md. Version: {version}. Date: {today}. Entries: {phase_summary_bullets}. Files: package.json + CHANGELOG.md."
|
|
446
|
+
})
|
|
447
|
+
```
|
|
448
|
+
Non-Claude Code: update CHANGELOG.md + package.json inline as before.
|
|
449
|
+
|
|
450
|
+
> changelog-agent is the **single authority** for version bumps. Both autonomous.md and
|
|
451
|
+
> evolve.md invoke it — never do inline version bumps (resolves ENH-053).
|
|
452
|
+
|
|
362
453
|
6. Update TRACKER.md
|
|
363
454
|
7. Push all changes:
|
|
364
455
|
```bash
|
|
@@ -406,6 +497,46 @@ fi
|
|
|
406
497
|
```
|
|
407
498
|
</step>
|
|
408
499
|
|
|
500
|
+
<step name="post_phase_audit">
|
|
501
|
+
## 5c. Post-Phase Documentation Audit (Tier 1 + 2 only)
|
|
502
|
+
|
|
503
|
+
After the phase-complete git tag is created, run a fast silent audit:
|
|
504
|
+
|
|
505
|
+
```bash
|
|
506
|
+
AUDIT_ISSUES=0
|
|
507
|
+
|
|
508
|
+
# Tier 1: ROADMAP.md phase marked ✅?
|
|
509
|
+
PHASE_IN_ROADMAP=$(grep -c "Phase ${PHASE_NUM}.*✅" .viepilot/ROADMAP.md 2>/dev/null || echo "0")
|
|
510
|
+
[ "$PHASE_IN_ROADMAP" -eq 0 ] && AUDIT_ISSUES=$((AUDIT_ISSUES+1)) && \
|
|
511
|
+
echo "⚠️ Tier 1: Phase ${PHASE_NUM} not marked ✅ in ROADMAP.md"
|
|
512
|
+
|
|
513
|
+
# Tier 1: HANDOFF.json current phase matches?
|
|
514
|
+
HANDOFF_PHASE=$(node -e "try{const h=require('./.viepilot/HANDOFF.json');console.log(h.phase||'')}catch(e){}" 2>/dev/null)
|
|
515
|
+
[ "$HANDOFF_PHASE" != "$PHASE_NUM" ] && AUDIT_ISSUES=$((AUDIT_ISSUES+1)) && \
|
|
516
|
+
echo "⚠️ Tier 1: HANDOFF.json phase=$HANDOFF_PHASE, expected $PHASE_NUM"
|
|
517
|
+
|
|
518
|
+
# Tier 2: README.md version badge matches package.json?
|
|
519
|
+
PKG_VERSION=$(node -p "require('./package.json').version" 2>/dev/null)
|
|
520
|
+
README_VERSION=$(grep -o 'version-[0-9]*\.[0-9]*\.[0-9]*' README.md 2>/dev/null | head -1 | sed 's/version-//')
|
|
521
|
+
[ "$PKG_VERSION" != "$README_VERSION" ] && AUDIT_ISSUES=$((AUDIT_ISSUES+1)) && \
|
|
522
|
+
echo "⚠️ Tier 2: README.md badge=$README_VERSION, package.json=$PKG_VERSION"
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
If `AUDIT_ISSUES > 0`:
|
|
526
|
+
```
|
|
527
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
528
|
+
POST-PHASE AUDIT: {AUDIT_ISSUES} issue(s) found
|
|
529
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
530
|
+
{list issues}
|
|
531
|
+
|
|
532
|
+
Fix now before starting next phase? (y/n)
|
|
533
|
+
→ y: run /vp-audit --fix then continue
|
|
534
|
+
→ n: continue (issues noted, non-blocking)
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
If `AUDIT_ISSUES == 0`: silent — no output.
|
|
538
|
+
</step>
|
|
539
|
+
|
|
409
540
|
<step name="iterate">
|
|
410
541
|
## 6. Iterate
|
|
411
542
|
|
package/workflows/brainstorm.md
CHANGED
|
@@ -7,9 +7,10 @@ Allows research inline within the same brainstorm session when needed.
|
|
|
7
7
|
|
|
8
8
|
| Feature | Claude Code (terminal) | Cursor (Agent/Skills) | Codex CLI | Antigravity (native) |
|
|
9
9
|
|---------|----------------------|-----------------------|-----------|----------------------|
|
|
10
|
-
| Interactive prompts | ✅ `AskUserQuestion` tool | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
|
+
| Interactive prompts | ✅ `AskUserQuestion` tool — **REQUIRED** | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
**Claude Code (terminal):** Always call `AskUserQuestion` first. Only fall back to the plain-text menu below if the tool returns an error or is unavailable.
|
|
13
|
+
**Cursor / Codex CLI / Antigravity / other adapters:** `AskUserQuestion` not available — use text menus below.
|
|
13
14
|
|
|
14
15
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
15
16
|
|
|
@@ -47,12 +48,12 @@ Parse results to get list of existing sessions.
|
|
|
47
48
|
**If previous sessions exist:**
|
|
48
49
|
|
|
49
50
|
> **Adapter-aware prompt:**
|
|
50
|
-
>
|
|
51
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
51
52
|
> - question: "Previous brainstorm sessions found. What would you like to do?"
|
|
52
53
|
> - header: "Session"
|
|
53
54
|
> - options: [{ label: "Continue recent session", description: "Resume the most recent session from where it stopped" }, { label: "Review specific session", description: "Choose a particular session to review or continue" }, { label: "New brainstorm session", description: "Start fresh — previous sessions are preserved" }]
|
|
54
55
|
> - multiSelect: false
|
|
55
|
-
>
|
|
56
|
+
> **Cursor / Codex / Antigravity / other:** use text menu below
|
|
56
57
|
|
|
57
58
|
```
|
|
58
59
|
I found previous brainstorm sessions:
|
|
@@ -137,12 +138,12 @@ If the user is brainstorming a landing page / homepage / marketing page:
|
|
|
137
138
|
2. Present a layout menu for the user to choose from:
|
|
138
139
|
|
|
139
140
|
> **Adapter-aware prompt:**
|
|
140
|
-
>
|
|
141
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
141
142
|
> - question: "Which landing page layout fits your goals and audience?"
|
|
142
143
|
> - header: "Layout"
|
|
143
144
|
> - options: [{ label: "Layout A — Hero centric", description: "Hero + trust logos + features + CTA — best for brand awareness and conversions" }, { label: "Layout B — Problem/Solution", description: "Problem/Solution + social proof + pricing + FAQ — best for SaaS sign-ups" }, { label: "Layout C — Product storytelling", description: "Screenshots + testimonials + final CTA — best for product demos" }, { label: "Layout D — SaaS conversion", description: "Integrations + comparison + onboarding steps — best for tool adoption" }]
|
|
144
145
|
> - multiSelect: false
|
|
145
|
-
>
|
|
146
|
+
> **Cursor / Codex / Antigravity / other:** use list below
|
|
146
147
|
|
|
147
148
|
- Layout A: Hero centric + trust logos + features + CTA
|
|
148
149
|
- Layout B: Problem/Solution + social proof + pricing + FAQ
|
|
@@ -593,6 +594,40 @@ After intake is **completed** or a **valid skip** (META already has profile) →
|
|
|
593
594
|
<step name="save_session">
|
|
594
595
|
## 6. Save Session
|
|
595
596
|
|
|
597
|
+
### Pre-Save Phase Assignment Validation (ENH-052)
|
|
598
|
+
|
|
599
|
+
Before writing the session file, validate phase assignment completeness:
|
|
600
|
+
|
|
601
|
+
**Scope-locked session** — `## Phases` section exists with real content OR user confirmed scope finalized (ref: Step 5.1 condition 1):
|
|
602
|
+
|
|
603
|
+
```
|
|
604
|
+
CHECK 1: Does session draft contain a non-empty ## Phases section?
|
|
605
|
+
CHECK 2: Does Phase 1 have at least one feature/capability assigned?
|
|
606
|
+
CHECK 3: Are there any features listed outside a phase (unassigned)?
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
**Gate condition:**
|
|
610
|
+
- If scope is locked AND (CHECK 1 fails OR CHECK 2 fails):
|
|
611
|
+
→ **Block save.** Show:
|
|
612
|
+
```
|
|
613
|
+
⚠️ Phase assignment incomplete — cannot save as Completed.
|
|
614
|
+
|
|
615
|
+
Features were discussed but no phase assignments exist.
|
|
616
|
+
Before saving:
|
|
617
|
+
1. Assign all features to phases (## Phases section)
|
|
618
|
+
2. Ensure Phase 1 has at least one feature
|
|
619
|
+
|
|
620
|
+
Return to the conversation to assign phases, then /save again.
|
|
621
|
+
```
|
|
622
|
+
- If scope is **not** locked (exploratory session — no feature assignments):
|
|
623
|
+
→ **Allow save** with `Status: In Progress` and add advisory note to session file:
|
|
624
|
+
```markdown
|
|
625
|
+
> ⚠️ Exploratory session — no phase assignments yet.
|
|
626
|
+
> Run /vp-brainstorm to continue and assign features to phases before /vp-crystallize.
|
|
627
|
+
```
|
|
628
|
+
- If brownfield stub session (`IS_BROWNFIELD=true`): **skip this gate** — brownfield stubs intentionally have no phases.
|
|
629
|
+
- If all checks pass → proceed to file write below.
|
|
630
|
+
|
|
596
631
|
Create/update file: `docs/brainstorm/session-{YYYY-MM-DD}.md`
|
|
597
632
|
|
|
598
633
|
```markdown
|
package/workflows/crystallize.md
CHANGED
|
@@ -6,9 +6,10 @@ Convert brainstorm sessions into structured artifacts for autonomous AI executio
|
|
|
6
6
|
|
|
7
7
|
| Feature | Claude Code (terminal) | Cursor (Agent/Skills) | Codex CLI | Antigravity (native) |
|
|
8
8
|
|---------|----------------------|-----------------------|-----------|----------------------|
|
|
9
|
-
| Interactive prompts | ✅ `AskUserQuestion` tool | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
9
|
+
| Interactive prompts | ✅ `AskUserQuestion` tool — **REQUIRED** | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
**Claude Code (terminal):** Always call `AskUserQuestion` first. Only fall back to the plain-text menu below if the tool returns an error or is unavailable.
|
|
12
|
+
**Cursor / Codex CLI / Antigravity / other adapters:** `AskUserQuestion` not available — use text menus below.
|
|
12
13
|
|
|
13
14
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
14
15
|
|
|
@@ -102,12 +103,12 @@ Ask the user for project information:
|
|
|
102
103
|
### License & Year
|
|
103
104
|
|
|
104
105
|
> **Adapter-aware prompt (question 13):**
|
|
105
|
-
>
|
|
106
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
106
107
|
> - question: "Which license for this project?"
|
|
107
108
|
> - header: "License"
|
|
108
109
|
> - options: [{ label: "MIT", description: "Permissive — most common open-source choice" }, { label: "Apache-2.0", description: "Permissive with patent grant — preferred for enterprise OSS" }, { label: "GPL-3.0", description: "Copyleft — derivative works must stay open-source" }, { label: "Proprietary", description: "All rights reserved — no public redistribution" }]
|
|
109
110
|
> - multiSelect: false
|
|
110
|
-
>
|
|
111
|
+
> **Cursor / Codex / Antigravity / other:** use text list below
|
|
111
112
|
|
|
112
113
|
```
|
|
113
114
|
13. License?
|
|
@@ -134,12 +135,12 @@ Store all metadata for template generation.
|
|
|
134
135
|
- Warn: "`.viepilot/` already exists. Re-running brownfield mode will overwrite artifacts."
|
|
135
136
|
|
|
136
137
|
> **Adapter-aware prompt:**
|
|
137
|
-
>
|
|
138
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
138
139
|
> - question: "`.viepilot/` already exists. Re-running brownfield mode will overwrite artifacts. Continue?"
|
|
139
140
|
> - header: "Overwrite?"
|
|
140
141
|
> - options: [{ label: "Yes, continue", description: "Overwrite existing .viepilot/ artifacts with new scan results" }, { label: "No, abort", description: "Stop here — keep existing artifacts unchanged" }]
|
|
141
142
|
> - multiSelect: false
|
|
142
|
-
>
|
|
143
|
+
> **Cursor / Codex / Antigravity / other:** use text prompt below
|
|
143
144
|
>
|
|
144
145
|
> Ask: "Continue? (y/n)" — abort if n.
|
|
145
146
|
|
|
@@ -227,12 +228,12 @@ If `polyrepo_hints` is empty → skip this section entirely (no empty array in c
|
|
|
227
228
|
**Interactive prompt** (fire when `polyrepo_hints` non-empty):
|
|
228
229
|
|
|
229
230
|
> **Adapter-aware prompt:**
|
|
230
|
-
>
|
|
231
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
231
232
|
> - question: "Polyrepo signals detected — this repo may be part of a multi-repo system. Would you like to provide related repo URLs?"
|
|
232
233
|
> - header: "Polyrepo?"
|
|
233
234
|
> - options: [{ label: "Yes, I'll list them", description: "Provide sibling repo URLs — improves system-level context accuracy" }, { label: "Skip for now", description: "Continue without related repos — affected fields will be marked ASSUMED" }]
|
|
234
235
|
> - multiSelect: false
|
|
235
|
-
>
|
|
236
|
+
> **Cursor / Codex / Antigravity / other:** use text prompt below
|
|
236
237
|
|
|
237
238
|
```
|
|
238
239
|
⚠️ Polyrepo signals detected:
|
|
@@ -786,6 +787,31 @@ When generating TRACKER.md in Step 9 (brownfield mode only), append:
|
|
|
786
787
|
|
|
787
788
|
</step>
|
|
788
789
|
|
|
790
|
+
<step name="brownfield_execution_path">
|
|
791
|
+
## Brownfield Execution Path
|
|
792
|
+
|
|
793
|
+
When `IS_BROWNFIELD=true`, the following table governs which steps execute:
|
|
794
|
+
|
|
795
|
+
| Step | Name | Brownfield behavior | Rationale |
|
|
796
|
+
|------|------|---------------------|-----------|
|
|
797
|
+
| 0 | Collect metadata | **RUN** | Always needed |
|
|
798
|
+
| 0-B | Brownfield scanner | **RUN** | Core brownfield step |
|
|
799
|
+
| 0-C | Generate brainstorm stub | **RUN** | Creates `session-brownfield-import.md` |
|
|
800
|
+
| 1 | Analyze brainstorm | **RUN (stub only)** | Reads brownfield stub; skips greenfield-only checks |
|
|
801
|
+
| 1A | UI direction gate | **CONDITIONAL** — run if `.viepilot/ui-direction/` already exists in the project |
|
|
802
|
+
| 1B | Stack research cache | **CONDITIONAL** — skip if brownfield scanner already populated stack cache |
|
|
803
|
+
| 1C | Architect artifact consumption | **SKIP** — no architect HTML workspace in a brownfield import |
|
|
804
|
+
| 1D | Architect auto-activate suggestion | **SKIP** — no scope brainstorm; architect mode not applicable |
|
|
805
|
+
| 2+ | All subsequent steps | **RUN** — same as greenfield from Step 2 onward |
|
|
806
|
+
|
|
807
|
+
> **Implementation note for AI agents:** When `IS_BROWNFIELD=true`, check each CONDITIONAL
|
|
808
|
+
> step against the stated condition before executing. Do **not** skip Step 1 entirely —
|
|
809
|
+
> read the brownfield stub to extract stack + gap data for Step 2 (AI-GUIDE.md generation).
|
|
810
|
+
> For Step 1B: check `~/.viepilot/stacks/` for entries created during the Step 0-B scan;
|
|
811
|
+
> if present and non-empty, skip the full research pass in 1B.
|
|
812
|
+
|
|
813
|
+
</step>
|
|
814
|
+
|
|
789
815
|
<step name="analyze_brainstorm">
|
|
790
816
|
## Step 1: Analyze Brainstorm
|
|
791
817
|
|
|
@@ -842,12 +868,12 @@ Check if `.viepilot/ui-direction/` exists and contains any session artifacts.
|
|
|
842
868
|
If `ui_scope_detected = true` **AND** artifacts are missing → **STOP** and present:
|
|
843
869
|
|
|
844
870
|
> **Adapter-aware prompt:**
|
|
845
|
-
>
|
|
871
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
846
872
|
> - question: "UI Direction artifacts missing. The brainstorm indicates UI scope but `.viepilot/ui-direction/` has no artifacts. How to proceed?"
|
|
847
873
|
> - header: "UI Direction"
|
|
848
874
|
> - options: [{ label: "Return to /vp-brainstorm --ui (Recommended)", description: "Create UI direction artifacts first for best results" }, { label: "Continue with assumptions", description: "Record assumptions in ARCHITECTURE.md and proceed without visual direction" }]
|
|
849
875
|
> - multiSelect: false
|
|
850
|
-
>
|
|
876
|
+
> **Cursor / Codex / Antigravity / other:** use text menu below
|
|
851
877
|
|
|
852
878
|
```
|
|
853
879
|
⚠️ UI Direction artifacts missing
|
|
@@ -1016,12 +1042,12 @@ If `.viepilot/architect/` does **not** exist but brainstorm shows complex archit
|
|
|
1016
1042
|
- Suggest (soft prompt — not a hard block):
|
|
1017
1043
|
|
|
1018
1044
|
> **Adapter-aware prompt:**
|
|
1019
|
-
>
|
|
1045
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
1020
1046
|
> - question: "Complex architecture detected (≥5 services/components). Would you like to create architecture visualizations first with /vp-brainstorm --architect?"
|
|
1021
1047
|
> - header: "Architect?"
|
|
1022
1048
|
> - options: [{ label: "Yes, go to architect mode", description: "Create visual architecture diagrams before crystallizing (recommended for complex systems)" }, { label: "No, continue now", description: "Continue crystallize with text-only brainstorm — no visual diagrams" }]
|
|
1023
1049
|
> - multiSelect: false
|
|
1024
|
-
>
|
|
1050
|
+
> **Cursor / Codex / Antigravity / other:** use text menu below
|
|
1025
1051
|
|
|
1026
1052
|
```
|
|
1027
1053
|
💡 Would you like to return to /vp-brainstorm --architect to create visualizations first?
|
package/workflows/evolve.md
CHANGED
|
@@ -6,9 +6,10 @@ Upgrade or expand the project: add features, start a new milestone, or refactor.
|
|
|
6
6
|
|
|
7
7
|
| Feature | Claude Code (terminal) | Cursor (Agent/Skills) | Codex CLI | Antigravity (native) |
|
|
8
8
|
|---------|----------------------|-----------------------|-----------|----------------------|
|
|
9
|
-
| Interactive prompts | ✅ `AskUserQuestion` tool | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
9
|
+
| Interactive prompts | ✅ `AskUserQuestion` tool — **REQUIRED** | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
**Claude Code (terminal):** Always call `AskUserQuestion` first. Only fall back to the plain-text menu below if the tool returns an error or is unavailable.
|
|
12
|
+
**Cursor / Codex CLI / Antigravity / other adapters:** `AskUserQuestion` not available — use text menus below.
|
|
12
13
|
|
|
13
14
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
14
15
|
|
|
@@ -25,6 +26,8 @@ When `AskUserQuestion` is not available, each prompt block falls back to the pla
|
|
|
25
26
|
|
|
26
27
|
<process>
|
|
27
28
|
|
|
29
|
+
> **AUQ preload — Claude Code adapter (ENH-059):** At session start, before any interactive prompt, call `ToolSearch` with `query: "select:AskUserQuestion"` to load the deferred schema. Required on Claude Code (terminal). Skip only if `ToolSearch` returns an error → use text fallback for that session.
|
|
30
|
+
|
|
28
31
|
<step name="detect_state">
|
|
29
32
|
## 1. Detect Current State
|
|
30
33
|
|
|
@@ -54,8 +57,9 @@ Determine:
|
|
|
54
57
|
How would you like to evolve the project?
|
|
55
58
|
```
|
|
56
59
|
|
|
57
|
-
> **
|
|
58
|
-
>
|
|
60
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable.
|
|
61
|
+
> **Cursor / Codex / Antigravity:** use text menu below.
|
|
62
|
+
> AUQ spec:
|
|
59
63
|
> - question: "How would you like to evolve the project?"
|
|
60
64
|
> - header: "Evolve mode"
|
|
61
65
|
> - options: [{ label: "Add Feature", description: "Add a new capability to the current milestone" }, { label: "New Milestone", description: "Archive current milestone and start a new scope" }, { label: "Refactor", description: "Improve existing code without adding new features" }]
|
|
@@ -81,23 +85,25 @@ Describe the new feature:
|
|
|
81
85
|
3. Which services/modules affected?
|
|
82
86
|
4. Dependencies on existing code?
|
|
83
87
|
|
|
84
|
-
> **
|
|
85
|
-
>
|
|
88
|
+
> **Claude Code (terminal) — REQUIRED (question 5 — complexity):** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable.
|
|
89
|
+
> **Cursor / Codex / Antigravity:** use text menu below.
|
|
90
|
+
> AUQ spec:
|
|
86
91
|
> - question: "Estimated implementation complexity?"
|
|
87
92
|
> - header: "Complexity"
|
|
88
93
|
> - options: [{ label: "S — Small", description: "Few hours — isolated change, 1 file" }, { label: "M — Medium", description: "1–2 days — 1–2 files, some integration" }, { label: "L — Large", description: "3–5 days — multiple modules affected" }, { label: "XL — Extra Large", description: "1+ week — architectural change or major feature" }]
|
|
89
94
|
> - multiSelect: false
|
|
90
|
-
>
|
|
95
|
+
> **Cursor / Codex / Antigravity / other:** use text below
|
|
91
96
|
|
|
92
97
|
5. Estimated complexity? (S/M/L/XL)
|
|
93
98
|
|
|
94
|
-
> **
|
|
95
|
-
>
|
|
99
|
+
> **Claude Code (terminal) — REQUIRED (question 6 — brainstorm routing):** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable.
|
|
100
|
+
> **Cursor / Codex / Antigravity:** use text menu below.
|
|
101
|
+
> AUQ spec:
|
|
96
102
|
> - question: "Does this feature need a brainstorm session first?"
|
|
97
103
|
> - header: "Brainstorm?"
|
|
98
104
|
> - options: [{ label: "Yes — go to /vp-brainstorm", description: "Research-heavy, UX-driven, or landing page feature — brainstorm first" }, { label: "No — plan directly", description: "Scope is clear — proceed to phase/task planning now" }]
|
|
99
105
|
> - multiSelect: false
|
|
100
|
-
>
|
|
106
|
+
> **Cursor / Codex / Antigravity / other:** use text below
|
|
101
107
|
|
|
102
108
|
6. Need deep brainstorm? (landing page / UX / growth ideas / research-heavy)
|
|
103
109
|
```
|
|
@@ -288,13 +294,15 @@ Add to ROADMAP.md as phase {N+0.5} or insert between phases.
|
|
|
288
294
|
<step name="update_version">
|
|
289
295
|
## 4. Update Version
|
|
290
296
|
|
|
291
|
-
|
|
297
|
+
Apply the canonical bump rules from `.viepilot/SYSTEM-RULES.md → Version Bump Rules`.
|
|
298
|
+
Precedence: MAJOR > MINOR > PATCH. Mixed phase → highest applicable bump wins.
|
|
292
299
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
300
|
+
Quick reference:
|
|
301
|
+
- Add Feature → **MINOR**
|
|
302
|
+
- Bug fix only → **PATCH**
|
|
303
|
+
- Refactor (no behavior change) → **PATCH**
|
|
304
|
+
- Mixed feature + fix → **MINOR**
|
|
305
|
+
- Breaking change → **MAJOR**
|
|
298
306
|
|
|
299
307
|
Update in:
|
|
300
308
|
- TRACKER.md
|
|
@@ -305,6 +313,8 @@ Update in:
|
|
|
305
313
|
<step name="confirm">
|
|
306
314
|
## 5. Confirm & Suggest Next
|
|
307
315
|
|
|
316
|
+
Output the evolution summary banner:
|
|
317
|
+
|
|
308
318
|
```
|
|
309
319
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
310
320
|
VIEPILOT ► EVOLVE COMPLETE ✓
|
|
@@ -322,7 +332,32 @@ Update in:
|
|
|
322
332
|
- Phase {N}: {name}
|
|
323
333
|
|
|
324
334
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
325
|
-
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Then — **Claude Code adapter (terminal): use AskUserQuestion**:
|
|
338
|
+
|
|
339
|
+
```
|
|
340
|
+
question: "Phase {N} planned. What would you like to do next?"
|
|
341
|
+
options:
|
|
342
|
+
- label: "Execute now → /vp-auto"
|
|
343
|
+
description: "Start implementing Phase {N} immediately (Recommended)"
|
|
344
|
+
- label: "Create another request → /vp-request"
|
|
345
|
+
description: "Log more requests before implementing"
|
|
346
|
+
- label: "Done for now"
|
|
347
|
+
description: "Exit — run /vp-auto later to start implementation"
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
**On selection:**
|
|
351
|
+
- "Execute now → /vp-auto": invoke `/vp-auto --from {new_phase}` skill
|
|
352
|
+
- "Create another request → /vp-request": invoke `/vp-request` skill
|
|
353
|
+
- "Done for now": print brief confirmation and exit
|
|
354
|
+
|
|
355
|
+
**Text fallback (Cursor, Codex, Copilot, Antigravity — AUQ not available):**
|
|
356
|
+
```
|
|
357
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
358
|
+
Next:
|
|
359
|
+
- /vp-auto --from {new_phase} Execute Phase {N}
|
|
360
|
+
- /vp-request Create another request
|
|
326
361
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
327
362
|
```
|
|
328
363
|
</step>
|