viepilot 2.12.0 → 2.22.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 +203 -0
- package/README.md +11 -9
- package/docs/dev/agents.md +131 -0
- package/docs/skills-reference.md +12 -0
- package/docs/user/features/adapters.md +51 -0
- package/docs/user/features/interactive-prompts.md +83 -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 +12 -0
- package/skills/vp-brainstorm/SKILL.md +34 -0
- package/skills/vp-crystallize/SKILL.md +51 -1
- package/skills/vp-debug/SKILL.md +12 -0
- package/skills/vp-docs/SKILL.md +28 -6
- package/skills/vp-evolve/SKILL.md +32 -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 +36 -0
- 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/templates/proposal/docx/project-detail.docx +0 -0
- package/templates/proposal/pptx/general.pptx +0 -0
- package/templates/proposal/pptx/product-pitch.pptx +0 -0
- package/templates/proposal/pptx/tech-architecture.pptx +0 -0
- package/workflows/audit.md +72 -37
- package/workflows/autonomous.md +138 -9
- package/workflows/brainstorm.md +61 -0
- package/workflows/crystallize.md +219 -8
- package/workflows/documentation.md +26 -11
- package/workflows/evolve.md +76 -7
- package/workflows/request.md +99 -7
- package/workflows/rollback.md +39 -7
package/workflows/crystallize.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
Convert brainstorm sessions into structured artifacts for autonomous AI execution.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
|
+
## Adapter Compatibility
|
|
6
|
+
|
|
7
|
+
| Feature | Claude Code (terminal) | Cursor (Agent/Skills) | Codex CLI | Antigravity (native) |
|
|
8
|
+
|---------|----------------------|-----------------------|-----------|----------------------|
|
|
9
|
+
| Interactive prompts | ✅ `AskUserQuestion` tool — **REQUIRED** | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
|
+
|
|
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.
|
|
13
|
+
|
|
5
14
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
6
15
|
|
|
7
16
|
- Default behavior: only use and suggest skills under `vp-*`.
|
|
@@ -80,7 +89,7 @@ Ask the user for project information:
|
|
|
80
89
|
|
|
81
90
|
9. Lead developer email?
|
|
82
91
|
|
|
83
|
-
10.
|
|
92
|
+
10. Git remote host / username? (optional — e.g. github.com/johndoe, gitlab.com/org, bitbucket.org/team)
|
|
84
93
|
```
|
|
85
94
|
|
|
86
95
|
### Repository Info
|
|
@@ -92,6 +101,15 @@ Ask the user for project information:
|
|
|
92
101
|
```
|
|
93
102
|
|
|
94
103
|
### License & Year
|
|
104
|
+
|
|
105
|
+
> **Adapter-aware prompt (question 13):**
|
|
106
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
107
|
+
> - question: "Which license for this project?"
|
|
108
|
+
> - header: "License"
|
|
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" }]
|
|
110
|
+
> - multiSelect: false
|
|
111
|
+
> **Cursor / Codex / Antigravity / other:** use text list below
|
|
112
|
+
|
|
95
113
|
```
|
|
96
114
|
13. License?
|
|
97
115
|
Options: MIT, Apache-2.0, GPL-3.0, BSD-3-Clause, Proprietary
|
|
@@ -115,7 +133,16 @@ Store all metadata for template generation.
|
|
|
115
133
|
|
|
116
134
|
**If brownfield triggered AND `.viepilot/` already exists:**
|
|
117
135
|
- Warn: "`.viepilot/` already exists. Re-running brownfield mode will overwrite artifacts."
|
|
118
|
-
|
|
136
|
+
|
|
137
|
+
> **Adapter-aware prompt:**
|
|
138
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
139
|
+
> - question: "`.viepilot/` already exists. Re-running brownfield mode will overwrite artifacts. Continue?"
|
|
140
|
+
> - header: "Overwrite?"
|
|
141
|
+
> - options: [{ label: "Yes, continue", description: "Overwrite existing .viepilot/ artifacts with new scan results" }, { label: "No, abort", description: "Stop here — keep existing artifacts unchanged" }]
|
|
142
|
+
> - multiSelect: false
|
|
143
|
+
> **Cursor / Codex / Antigravity / other:** use text prompt below
|
|
144
|
+
>
|
|
145
|
+
> Ask: "Continue? (y/n)" — abort if n.
|
|
119
146
|
|
|
120
147
|
**When brownfield mode is active:**
|
|
121
148
|
1. Run the full 12-category codebase scanner (Signal Categories 1–12 below).
|
|
@@ -165,6 +192,64 @@ Probe the following files in order of priority (first match per language wins):
|
|
|
165
192
|
|
|
166
193
|
If monorepo detected → scan each module separately; aggregate into `modules[]` in Scan Report.
|
|
167
194
|
|
|
195
|
+
**Git Submodule Detection** (run after monorepo check):
|
|
196
|
+
- Check for `.gitmodules` file at repo root
|
|
197
|
+
- If present: parse all `[submodule "name"]` blocks → extract `name`, `path`, `url`
|
|
198
|
+
- For each submodule path:
|
|
199
|
+
- If path exists on disk (initialized):
|
|
200
|
+
- Run Signal Cat 1 (manifest scan) on `{path}/`
|
|
201
|
+
- Run Signal Cat 2 (framework) on `{path}/`
|
|
202
|
+
- Run Signal Cat 4 (DB signals) on `{path}/`
|
|
203
|
+
- Record `initialized: true`
|
|
204
|
+
- If path absent (not initialized):
|
|
205
|
+
- Record `initialized: false`, `primary_language: MISSING`
|
|
206
|
+
- Add open question: "Submodule '{name}' not initialized — run `git submodule update --init {path}` to scan it"
|
|
207
|
+
- Add each submodule to `modules[]` with `type: submodule`
|
|
208
|
+
|
|
209
|
+
> **SAFETY RULE**: Never run `git submodule update`, `git submodule init`, or any git network command during scan. Read the local filesystem only.
|
|
210
|
+
|
|
211
|
+
**Polyrepo / Multi-Repo Detection** (run after submodule check):
|
|
212
|
+
|
|
213
|
+
Scan the following signals to determine if this repo is part of a larger multi-repo system:
|
|
214
|
+
|
|
215
|
+
| Signal Source | Pattern | Interpretation |
|
|
216
|
+
|--------------|---------|----------------|
|
|
217
|
+
| `docker-compose.yml` / `docker-compose*.yml` | `build: ../path` or `context: ../path` (value starts with `../`) | Sibling repo used as build context |
|
|
218
|
+
| `docker-compose.yml` | Multiple services with external `image:` and no local `build:` | External microservices — possible sibling repos |
|
|
219
|
+
| `package.json` | `"dependencies"` or `"devDependencies"` value matching `"file:../..."` | Local `file:` sibling repo dependency |
|
|
220
|
+
| `.github/workflows/*.yml` / `.gitlab-ci.yml` / `ci/*.yml` | `git clone` steps, or `uses: org/other-repo/.github/workflows/` referencing a different repo | CI clones or calls a sibling repo |
|
|
221
|
+
| `README.md` / `CONTRIBUTING.md` | Lines containing a repo URL whose path differs from the current repo's remote | Related repo link in docs |
|
|
222
|
+
| `Makefile` / `justfile` | Targets containing `cd ../` followed by build/test commands | Cross-repo build orchestration |
|
|
223
|
+
|
|
224
|
+
For each match: record `{ source, hint, inferred_repo }` in `polyrepo_hints[]`.
|
|
225
|
+
Deduplicate by `inferred_repo` name.
|
|
226
|
+
If `polyrepo_hints` is empty → skip this section entirely (no empty array in clean single-repo Scan Reports).
|
|
227
|
+
|
|
228
|
+
**Interactive prompt** (fire when `polyrepo_hints` non-empty):
|
|
229
|
+
|
|
230
|
+
> **Adapter-aware prompt:**
|
|
231
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
232
|
+
> - question: "Polyrepo signals detected — this repo may be part of a multi-repo system. Would you like to provide related repo URLs?"
|
|
233
|
+
> - header: "Polyrepo?"
|
|
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" }]
|
|
235
|
+
> - multiSelect: false
|
|
236
|
+
> **Cursor / Codex / Antigravity / other:** use text prompt below
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
⚠️ Polyrepo signals detected:
|
|
240
|
+
{list polyrepo_hints}
|
|
241
|
+
|
|
242
|
+
This repo appears to be part of a multi-repo system.
|
|
243
|
+
Would you like to list related repos? (optional — press Enter to skip)
|
|
244
|
+
Format: one URL per line, e.g. https://github.com/org/api-service [backend]
|
|
245
|
+
```
|
|
246
|
+
- User-supplied repos → stored in `related_repos[]` as `{ url, role }`
|
|
247
|
+
- If user skips → `related_repos: []`; system-level context fields set to **ASSUMED** tier
|
|
248
|
+
|
|
249
|
+
**Gap-fill rule for polyrepo:**
|
|
250
|
+
- `polyrepo_hints` non-empty AND `related_repos` empty → system-level fields (e.g. `deployment_topology`) = ASSUMED (not MISSING; single-repo scan is still valid)
|
|
251
|
+
- `related_repos` populated → system-level fields = DETECTED for user-supplied context
|
|
252
|
+
|
|
168
253
|
If no manifest found → `primary_language` = MISSING; user must provide.
|
|
169
254
|
|
|
170
255
|
---
|
|
@@ -487,8 +572,34 @@ frameworks:
|
|
|
487
572
|
build_tool: string
|
|
488
573
|
package_manager: string
|
|
489
574
|
monorepo: bool
|
|
490
|
-
|
|
575
|
+
gap_tier: DETECTED | ASSUMED | MISSING # root rollup = worst tier across all modules
|
|
576
|
+
modules: # if monorepo or submodules detected
|
|
577
|
+
- name: string # workspace package name or submodule name
|
|
578
|
+
type: workspace | submodule | root # workspace = monorepo member; submodule = git submodule
|
|
579
|
+
path: string # repo-relative path
|
|
580
|
+
submodule_url: string | null # remote URL from .gitmodules (null if not submodule)
|
|
581
|
+
initialized: bool # true if path exists on disk (submodules only)
|
|
582
|
+
primary_language: string
|
|
583
|
+
framework: string | null
|
|
584
|
+
module_purpose: string # inferred from dir name + manifest description
|
|
585
|
+
entry_point: string | null # main entry file path
|
|
586
|
+
gap_tier: DETECTED | ASSUMED | MISSING
|
|
587
|
+
must_detect_status: # evidence record per MUST-DETECT field
|
|
588
|
+
primary_language: { value: string, source: string, tier: string }
|
|
589
|
+
framework: { value: string, source: string, tier: string }
|
|
590
|
+
module_purpose: { value: string, source: string, tier: string }
|
|
591
|
+
entry_point: { value: string, source: string, tier: string }
|
|
592
|
+
open_questions: [] # per-module open questions
|
|
593
|
+
polyrepo_hints: # present only when polyrepo signals detected
|
|
594
|
+
- source: string # e.g. docker-compose.yml
|
|
595
|
+
hint: string # raw signal text
|
|
596
|
+
inferred_repo: string # guessed sibling repo name
|
|
597
|
+
related_repos: # present only when user supplied input after prompt
|
|
598
|
+
- url: string
|
|
599
|
+
role: string # backend | frontend | shared-library | infra | etc.
|
|
491
600
|
architecture_layers: [] # { layer, evidence_path }
|
|
601
|
+
module_dependencies: [] # { from, to, type, evidence_path } — Gap D (Phase 78)
|
|
602
|
+
dependency_cycles: [] # cycle paths detected — Gap D (Phase 78)
|
|
492
603
|
database_signals: [] # { type, evidence_path, migration_tool }
|
|
493
604
|
api_contracts: [] # { style, file_path }
|
|
494
605
|
api_style: string # REST | GraphQL | gRPC | mixed | unknown
|
|
@@ -505,7 +616,7 @@ repo_url: string
|
|
|
505
616
|
top_contributors: []
|
|
506
617
|
docs_extracted: [] # { file, summary, key_facts[] }
|
|
507
618
|
language_distribution: {} # { ts: 142, java: 38, ... }
|
|
508
|
-
open_questions: [] #
|
|
619
|
+
open_questions: [] # root-level open questions (includes rollup from modules)
|
|
509
620
|
```
|
|
510
621
|
|
|
511
622
|
---
|
|
@@ -540,15 +651,73 @@ Every field in Scan Report is classified as:
|
|
|
540
651
|
|
|
541
652
|
---
|
|
542
653
|
|
|
654
|
+
### Per-Module Gap Detection
|
|
655
|
+
|
|
656
|
+
Applies to every entry in `modules[]` (monorepo workspace members, git submodules, and root if single-repo). Each module is assessed independently.
|
|
657
|
+
|
|
658
|
+
**Per-module MUST-DETECT fields:**
|
|
659
|
+
|
|
660
|
+
| Field | Source signals | Tier if absent |
|
|
661
|
+
|-------|---------------|----------------|
|
|
662
|
+
| `primary_language` | Manifest extension, file survey (Signal Cat 12), `tsconfig.json`, `pyproject.toml` | MISSING — must ask user |
|
|
663
|
+
| `framework` | Signal Cat 2 dep patterns scanned on module path | ASSUMED if no dep match; MISSING if no manifest found |
|
|
664
|
+
| `module_purpose` | Manifest `description` field, directory name convention, README first line | ASSUMED (infer from dir name); MISSING if none of the above |
|
|
665
|
+
| `entry_point` | `main` in `package.json`; `src/index.*`; `cmd/main.go`; `*Application.java` | ASSUMED if standard path exists; MISSING otherwise |
|
|
666
|
+
|
|
667
|
+
**Gap tier assignment per module:**
|
|
668
|
+
```
|
|
669
|
+
DETECTED — all MUST-DETECT fields sourced directly from file evidence (no inference)
|
|
670
|
+
ASSUMED — ≥1 MUST-DETECT field inferred by convention (no direct file evidence, but plausible)
|
|
671
|
+
MISSING — ≥1 MUST-DETECT field has no evidence and cannot be inferred
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
**`must_detect_status` evidence conventions:**
|
|
675
|
+
- `source: "tsconfig.json"` — read from a specific file
|
|
676
|
+
- `source: "inferred"` — derived by directory name / naming convention (tier = ASSUMED)
|
|
677
|
+
- `source: "absent"` — no evidence found (tier = MISSING)
|
|
678
|
+
- `source: "user"` — provided by user during gap-filling (tier = DETECTED)
|
|
679
|
+
|
|
680
|
+
**Root gap tier rollup:**
|
|
681
|
+
```
|
|
682
|
+
root gap_tier = worst tier across all modules
|
|
683
|
+
Priority order: MISSING > ASSUMED > DETECTED
|
|
684
|
+
```
|
|
685
|
+
If any module is MISSING → root `gap_tier` = MISSING → artifact generation blocked until resolved.
|
|
686
|
+
If all modules are DETECTED or ASSUMED → root `gap_tier` matches the worst module tier.
|
|
687
|
+
|
|
688
|
+
**Scan summary printout** (show after all modules scanned):
|
|
689
|
+
```
|
|
690
|
+
Module scan summary:
|
|
691
|
+
┌─────────────────┬──────────────────┬────────────┬──────────────┬───────────┐
|
|
692
|
+
│ Module │ Path │ Language │ Framework │ Gap Tier │
|
|
693
|
+
├─────────────────┼──────────────────┼────────────┼──────────────┼───────────┤
|
|
694
|
+
│ api-service │ apps/api │ TypeScript │ NestJS │ DETECTED │
|
|
695
|
+
│ web-client │ apps/web │ TypeScript │ React │ DETECTED │
|
|
696
|
+
│ shared-lib │ libs/shared │ TypeScript │ — │ ASSUMED │
|
|
697
|
+
│ legacy-worker │ services/worker │ MISSING │ MISSING │ MISSING │
|
|
698
|
+
└─────────────────┴──────────────────┴────────────┴──────────────┴───────────┘
|
|
699
|
+
Root gap tier: MISSING (worst across modules)
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
---
|
|
703
|
+
|
|
543
704
|
### Interactive Gap-Filling (Step 0-B-ii)
|
|
544
705
|
|
|
545
706
|
After scanner completes:
|
|
546
707
|
|
|
547
708
|
1. Display Scan Report summary table to user (field | value | status).
|
|
548
|
-
2.
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
709
|
+
2. **Per-module MISSING fields** — for each module with `gap_tier: MISSING`, pause and ask per field:
|
|
710
|
+
```
|
|
711
|
+
⛔ Module '{name}' (path: {path}) has MISSING required fields:
|
|
712
|
+
- {field}: no evidence found
|
|
713
|
+
Please provide {field}:
|
|
714
|
+
```
|
|
715
|
+
Record answer as `{ value: user_input, source: "user", tier: DETECTED }`.
|
|
716
|
+
Do NOT proceed to artifact generation until all MISSING module fields are filled.
|
|
717
|
+
3. For each root-level MUST-DETECT field that is MISSING → **pause and ask user to provide value**.
|
|
718
|
+
4. Present ASSUMED fields (root + per-module) in a confirmation table → user may accept all with "y" or override individually.
|
|
719
|
+
5. Capture all user responses; update Scan Report fields accordingly.
|
|
720
|
+
6. All remaining unresolved items → `open_questions[]` (roll up per-module `open_questions[]` into root).
|
|
552
721
|
|
|
553
722
|
---
|
|
554
723
|
|
|
@@ -618,6 +787,31 @@ When generating TRACKER.md in Step 9 (brownfield mode only), append:
|
|
|
618
787
|
|
|
619
788
|
</step>
|
|
620
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
|
+
|
|
621
815
|
<step name="analyze_brainstorm">
|
|
622
816
|
## Step 1: Analyze Brainstorm
|
|
623
817
|
|
|
@@ -673,6 +867,14 @@ Check if `.viepilot/ui-direction/` exists and contains any session artifacts.
|
|
|
673
867
|
|
|
674
868
|
If `ui_scope_detected = true` **AND** artifacts are missing → **STOP** and present:
|
|
675
869
|
|
|
870
|
+
> **Adapter-aware prompt:**
|
|
871
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
872
|
+
> - question: "UI Direction artifacts missing. The brainstorm indicates UI scope but `.viepilot/ui-direction/` has no artifacts. How to proceed?"
|
|
873
|
+
> - header: "UI Direction"
|
|
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" }]
|
|
875
|
+
> - multiSelect: false
|
|
876
|
+
> **Cursor / Codex / Antigravity / other:** use text menu below
|
|
877
|
+
|
|
676
878
|
```
|
|
677
879
|
⚠️ UI Direction artifacts missing
|
|
678
880
|
|
|
@@ -838,6 +1040,15 @@ If `.viepilot/architect/` exists with at least one session directory:
|
|
|
838
1040
|
|
|
839
1041
|
If `.viepilot/architect/` does **not** exist but brainstorm shows complex architecture (≥5 services/components detected):
|
|
840
1042
|
- Suggest (soft prompt — not a hard block):
|
|
1043
|
+
|
|
1044
|
+
> **Adapter-aware prompt:**
|
|
1045
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
1046
|
+
> - question: "Complex architecture detected (≥5 services/components). Would you like to create architecture visualizations first with /vp-brainstorm --architect?"
|
|
1047
|
+
> - header: "Architect?"
|
|
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" }]
|
|
1049
|
+
> - multiSelect: false
|
|
1050
|
+
> **Cursor / Codex / Antigravity / other:** use text menu below
|
|
1051
|
+
|
|
841
1052
|
```
|
|
842
1053
|
💡 Would you like to return to /vp-brainstorm --architect to create visualizations first?
|
|
843
1054
|
1. Yes — return to architect mode
|
|
@@ -17,20 +17,35 @@ Generate comprehensive documentation from code and artifacts.
|
|
|
17
17
|
Before generating any file, collect actual project context from the environment:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
# Get
|
|
20
|
+
# Get Git remote URL (supports any forge: GitHub, GitLab, Bitbucket, Azure DevOps, Gitea, self-hosted)
|
|
21
21
|
REMOTE_URL=$(git remote get-url origin 2>/dev/null || echo "")
|
|
22
22
|
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
# Forge-agnostic remote URL parser
|
|
24
|
+
# Handles SSH : git@<host>:owner/repo.git
|
|
25
|
+
# Handles HTTPS: https://<host>/owner/repo.git
|
|
26
|
+
# Handles Azure DevOps: https://dev.azure.com/org/project/_git/repo
|
|
27
|
+
if echo "$REMOTE_URL" | grep -q 'dev\.azure\.com'; then
|
|
28
|
+
# Azure DevOps: https://dev.azure.com/ORG/PROJECT/_git/REPO
|
|
29
|
+
GIT_HOST="dev.azure.com"
|
|
30
|
+
GIT_OWNER=$(echo "$REMOTE_URL" | sed 's|.*dev\.azure\.com/||; s|/.*||')
|
|
31
|
+
GIT_REPO=$(echo "$REMOTE_URL" | sed 's|.*/_git/||; s|\.git$||; s|/$||')
|
|
32
|
+
elif echo "$REMOTE_URL" | grep -q '^git@'; then
|
|
33
|
+
# SSH format: git@host:owner/repo.git
|
|
34
|
+
GIT_HOST=$(echo "$REMOTE_URL" | sed 's|^git@||; s|:.*||')
|
|
35
|
+
GIT_OWNER=$(echo "$REMOTE_URL" | sed 's|^git@[^:]*:||; s|/.*||')
|
|
36
|
+
GIT_REPO=$(echo "$REMOTE_URL" | sed 's|^git@[^:]*:[^/]*/||; s|\.git$||')
|
|
37
|
+
else
|
|
38
|
+
# HTTPS format: https://host/owner/repo.git
|
|
39
|
+
GIT_HOST=$(echo "$REMOTE_URL" | sed 's|^https\?://||; s|/.*||')
|
|
40
|
+
GIT_OWNER=$(echo "$REMOTE_URL" | sed 's|^https\?://[^/]*/||; s|/.*||')
|
|
41
|
+
GIT_REPO=$(echo "$REMOTE_URL" | sed 's|^https\?://[^/]*/[^/]*/||; s|\.git$||; s|/$||')
|
|
42
|
+
fi
|
|
29
43
|
|
|
30
44
|
# Fallback if no remote
|
|
31
|
-
if [ -z "$
|
|
32
|
-
|
|
33
|
-
|
|
45
|
+
if [ -z "$GIT_OWNER" ]; then
|
|
46
|
+
GIT_HOST="{GIT_HOST}"
|
|
47
|
+
GIT_OWNER="{GIT_OWNER}"
|
|
48
|
+
GIT_REPO="{GIT_REPO}"
|
|
34
49
|
fi
|
|
35
50
|
|
|
36
51
|
# Get project name from package.json or directory name
|
|
@@ -54,7 +69,7 @@ if [ -d "skills" ] && ls skills/vp-*/SKILL.md 2>/dev/null | head -1 > /dev/null;
|
|
|
54
69
|
fi
|
|
55
70
|
```
|
|
56
71
|
|
|
57
|
-
Use `$
|
|
72
|
+
Use `$GIT_HOST`, `$GIT_OWNER`, `$GIT_REPO` throughout all generated files.
|
|
58
73
|
For viepilot framework repos, also use `$ACTUAL_SKILLS`, `$ACTUAL_WORKFLOWS`.
|
|
59
74
|
**Never hardcode** `your-org`, `YOUR_USERNAME`, `YOUR_ORG`, or static skill/workflow counts.
|
|
60
75
|
|
package/workflows/evolve.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
Upgrade or expand the project: add features, start a new milestone, or refactor.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
|
+
## Adapter Compatibility
|
|
6
|
+
|
|
7
|
+
| Feature | Claude Code (terminal) | Cursor (Agent/Skills) | Codex CLI | Antigravity (native) |
|
|
8
|
+
|---------|----------------------|-----------------------|-----------|----------------------|
|
|
9
|
+
| Interactive prompts | ✅ `AskUserQuestion` tool — **REQUIRED** | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
|
+
|
|
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.
|
|
13
|
+
|
|
5
14
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
6
15
|
|
|
7
16
|
- Default behavior: only use and suggest skills under `vp-*`.
|
|
@@ -44,7 +53,18 @@ Determine:
|
|
|
44
53
|
Version: {version}
|
|
45
54
|
|
|
46
55
|
How would you like to evolve the project?
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable.
|
|
59
|
+
> **Cursor / Codex / Antigravity:** use text menu below.
|
|
60
|
+
> AUQ spec:
|
|
61
|
+
> - question: "How would you like to evolve the project?"
|
|
62
|
+
> - header: "Evolve mode"
|
|
63
|
+
> - 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" }]
|
|
64
|
+
> - multiSelect: false
|
|
65
|
+
> - **Cursor / Codex / Antigravity / other:** use text menu below
|
|
47
66
|
|
|
67
|
+
```
|
|
48
68
|
1. Add Feature - Add new feature to current milestone
|
|
49
69
|
2. New Milestone - Start a new milestone (archive current)
|
|
50
70
|
3. Refactor - Improve existing code without new features
|
|
@@ -62,7 +82,27 @@ Describe the new feature:
|
|
|
62
82
|
2. What does it do? (1-2 sentences)
|
|
63
83
|
3. Which services/modules affected?
|
|
64
84
|
4. Dependencies on existing code?
|
|
85
|
+
|
|
86
|
+
> **Claude Code (terminal) — REQUIRED (question 5 — complexity):** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable.
|
|
87
|
+
> **Cursor / Codex / Antigravity:** use text menu below.
|
|
88
|
+
> AUQ spec:
|
|
89
|
+
> - question: "Estimated implementation complexity?"
|
|
90
|
+
> - header: "Complexity"
|
|
91
|
+
> - 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" }]
|
|
92
|
+
> - multiSelect: false
|
|
93
|
+
> **Cursor / Codex / Antigravity / other:** use text below
|
|
94
|
+
|
|
65
95
|
5. Estimated complexity? (S/M/L/XL)
|
|
96
|
+
|
|
97
|
+
> **Claude Code (terminal) — REQUIRED (question 6 — brainstorm routing):** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable.
|
|
98
|
+
> **Cursor / Codex / Antigravity:** use text menu below.
|
|
99
|
+
> AUQ spec:
|
|
100
|
+
> - question: "Does this feature need a brainstorm session first?"
|
|
101
|
+
> - header: "Brainstorm?"
|
|
102
|
+
> - 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" }]
|
|
103
|
+
> - multiSelect: false
|
|
104
|
+
> **Cursor / Codex / Antigravity / other:** use text below
|
|
105
|
+
|
|
66
106
|
6. Need deep brainstorm? (landing page / UX / growth ideas / research-heavy)
|
|
67
107
|
```
|
|
68
108
|
|
|
@@ -252,13 +292,15 @@ Add to ROADMAP.md as phase {N+0.5} or insert between phases.
|
|
|
252
292
|
<step name="update_version">
|
|
253
293
|
## 4. Update Version
|
|
254
294
|
|
|
255
|
-
|
|
295
|
+
Apply the canonical bump rules from `.viepilot/SYSTEM-RULES.md → Version Bump Rules`.
|
|
296
|
+
Precedence: MAJOR > MINOR > PATCH. Mixed phase → highest applicable bump wins.
|
|
256
297
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
298
|
+
Quick reference:
|
|
299
|
+
- Add Feature → **MINOR**
|
|
300
|
+
- Bug fix only → **PATCH**
|
|
301
|
+
- Refactor (no behavior change) → **PATCH**
|
|
302
|
+
- Mixed feature + fix → **MINOR**
|
|
303
|
+
- Breaking change → **MAJOR**
|
|
262
304
|
|
|
263
305
|
Update in:
|
|
264
306
|
- TRACKER.md
|
|
@@ -269,6 +311,8 @@ Update in:
|
|
|
269
311
|
<step name="confirm">
|
|
270
312
|
## 5. Confirm & Suggest Next
|
|
271
313
|
|
|
314
|
+
Output the evolution summary banner:
|
|
315
|
+
|
|
272
316
|
```
|
|
273
317
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
274
318
|
VIEPILOT ► EVOLVE COMPLETE ✓
|
|
@@ -286,7 +330,32 @@ Update in:
|
|
|
286
330
|
- Phase {N}: {name}
|
|
287
331
|
|
|
288
332
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
289
|
-
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Then — **Claude Code adapter (terminal): use AskUserQuestion**:
|
|
336
|
+
|
|
337
|
+
```
|
|
338
|
+
question: "Phase {N} planned. What would you like to do next?"
|
|
339
|
+
options:
|
|
340
|
+
- label: "Execute now → /vp-auto"
|
|
341
|
+
description: "Start implementing Phase {N} immediately (Recommended)"
|
|
342
|
+
- label: "Create another request → /vp-request"
|
|
343
|
+
description: "Log more requests before implementing"
|
|
344
|
+
- label: "Done for now"
|
|
345
|
+
description: "Exit — run /vp-auto later to start implementation"
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
**On selection:**
|
|
349
|
+
- "Execute now → /vp-auto": invoke `/vp-auto --from {new_phase}` skill
|
|
350
|
+
- "Create another request → /vp-request": invoke `/vp-request` skill
|
|
351
|
+
- "Done for now": print brief confirmation and exit
|
|
352
|
+
|
|
353
|
+
**Text fallback (Cursor, Codex, Copilot, Antigravity — AUQ not available):**
|
|
354
|
+
```
|
|
355
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
356
|
+
Next:
|
|
357
|
+
- /vp-auto --from {new_phase} Execute Phase {N}
|
|
358
|
+
- /vp-request Create another request
|
|
290
359
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
291
360
|
```
|
|
292
361
|
</step>
|
package/workflows/request.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
Create and manage project requests: bugs, features, enhancements, tech debt, and brainstorm continuation.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
|
+
## Adapter Compatibility
|
|
6
|
+
|
|
7
|
+
| Feature | Claude Code (terminal) | Cursor (Agent/Skills) | Codex CLI | Antigravity (native) |
|
|
8
|
+
|---------|----------------------|-----------------------|-----------|----------------------|
|
|
9
|
+
| Interactive prompts | ✅ `AskUserQuestion` tool — **REQUIRED** | ❌ text fallback | ❌ text fallback | ❌ text fallback |
|
|
10
|
+
|
|
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.
|
|
13
|
+
|
|
5
14
|
## ViePilot Skill Scope Policy (BUG-004)
|
|
6
15
|
|
|
7
16
|
- Default behavior: only use and suggest skills under `vp-*`.
|
|
@@ -53,6 +62,15 @@ Parse `{{VP_ARGS}}` for type flag:
|
|
|
53
62
|
- `--list` → List Requests
|
|
54
63
|
|
|
55
64
|
If no flag, ask user:
|
|
65
|
+
|
|
66
|
+
> **Adapter-aware prompt:**
|
|
67
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
68
|
+
> - question: "What type of request would you like to create?"
|
|
69
|
+
> - header: "Request type"
|
|
70
|
+
> - options: [{ label: "🐛 Bug Report", description: "Something is broken — file a defect report" }, { label: "✨ Feature Request", description: "New functionality — add a capability that doesn't exist yet" }, { label: "🔧 Enhancement", description: "Improve existing feature — make something better" }, { label: "🧹 Technical Debt", description: "Code cleanup / refactor — no new behavior" }]
|
|
71
|
+
> - multiSelect: false
|
|
72
|
+
> **Cursor / Codex / Antigravity / other:** use text menu below (Brainstorm and List options remain text-only)
|
|
73
|
+
|
|
56
74
|
```
|
|
57
75
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
58
76
|
VIEPILOT ► REQUEST
|
|
@@ -69,6 +87,39 @@ What type of request?
|
|
|
69
87
|
```
|
|
70
88
|
</step>
|
|
71
89
|
|
|
90
|
+
<step name="feasibility_gate">
|
|
91
|
+
## 2B. Feasibility Gate — research-agent (ENH-057)
|
|
92
|
+
|
|
93
|
+
**Trigger**: auto-activate for **Feature** and **Enhancement** requests when any of:
|
|
94
|
+
- User description mentions a new platform, IDE, API, protocol, or SDK
|
|
95
|
+
- User asks "is this possible?", "how does X work?", "feasibility of X"
|
|
96
|
+
- Request type = Feature AND subject is an external integration
|
|
97
|
+
|
|
98
|
+
**Skip for**: Bug reports, internal refactors, Enhancement requests on known code.
|
|
99
|
+
|
|
100
|
+
If triggered:
|
|
101
|
+
|
|
102
|
+
**Claude Code (terminal) — invoke research-agent:**
|
|
103
|
+
```
|
|
104
|
+
Agent({
|
|
105
|
+
subagent_type: "general-purpose",
|
|
106
|
+
description: "research-agent: feasibility study for {topic}",
|
|
107
|
+
prompt: `
|
|
108
|
+
Load agents/research-agent.md for full spec.
|
|
109
|
+
Topic: {extracted from user description}
|
|
110
|
+
Questions: ["What SDK/API exists?", "What are integration points?", "What config dir/convention?", "Feasibility rating?"]
|
|
111
|
+
Return a ## Research Findings section + ## Sources.
|
|
112
|
+
`
|
|
113
|
+
})
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Non-Claude Code**: if web search available, perform inline research. Otherwise note "manual research needed" and continue gathering details.
|
|
117
|
+
|
|
118
|
+
**Output**: embed research-agent findings in the `## Research Findings` section of the request file.
|
|
119
|
+
|
|
120
|
+
> This gate made FEAT-019 (Copilot adapter) research systematic — apply it to all future platform/API feature requests.
|
|
121
|
+
</step>
|
|
122
|
+
|
|
72
123
|
<step name="list_requests">
|
|
73
124
|
## 3. List Requests (if --list)
|
|
74
125
|
|
|
@@ -117,6 +168,15 @@ Options:
|
|
|
117
168
|
>
|
|
118
169
|
|
|
119
170
|
6. Severity?
|
|
171
|
+
|
|
172
|
+
> **Adapter-aware prompt:**
|
|
173
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
174
|
+
> - question: "What is the bug severity?"
|
|
175
|
+
> - header: "Severity"
|
|
176
|
+
> - options: [{ label: "Critical", description: "System down, data loss — needs immediate attention" }, { label: "High", description: "Major feature broken — significantly impacts users" }, { label: "Medium", description: "Feature impaired — workaround exists" }, { label: "Low", description: "Minor / cosmetic issue — no functional impact" }]
|
|
177
|
+
> - multiSelect: false
|
|
178
|
+
> **Cursor / Codex / Antigravity / other:** use text list below
|
|
179
|
+
|
|
120
180
|
1. Critical - System down, data loss
|
|
121
181
|
2. High - Major feature broken
|
|
122
182
|
3. Medium - Feature impaired
|
|
@@ -191,6 +251,15 @@ Create `BUG-{N}.md`:
|
|
|
191
251
|
>
|
|
192
252
|
|
|
193
253
|
5. Priority?
|
|
254
|
+
|
|
255
|
+
> **Adapter-aware prompt:**
|
|
256
|
+
> **Claude Code (terminal) — REQUIRED:** Call `AskUserQuestion` tool. Only fall back to text menu if the tool errors or is unavailable. AUQ spec:
|
|
257
|
+
> - question: "What is the feature priority?"
|
|
258
|
+
> - header: "Priority"
|
|
259
|
+
> - options: [{ label: "Must-have", description: "Critical for release — cannot ship without it" }, { label: "Should-have", description: "Important but not blocking — include if capacity allows" }, { label: "Nice-to-have", description: "Quality-of-life improvement — can defer to next milestone" }]
|
|
260
|
+
> - multiSelect: false
|
|
261
|
+
> **Cursor / Codex / Antigravity / other:** use text list below
|
|
262
|
+
|
|
194
263
|
1. Must-have - Critical for release
|
|
195
264
|
2. Should-have - Important but not blocking
|
|
196
265
|
3. Nice-to-have - Can defer
|
|
@@ -221,6 +290,9 @@ Create `FEAT-{N}.md`:
|
|
|
221
290
|
## Summary
|
|
222
291
|
{TITLE}
|
|
223
292
|
|
|
293
|
+
## Research Findings
|
|
294
|
+
{Populated by research-agent if feasibility gate triggered (Step 2B); omit section if not applicable}
|
|
295
|
+
|
|
224
296
|
## Problem Statement
|
|
225
297
|
{PROBLEM}
|
|
226
298
|
|
|
@@ -509,6 +581,8 @@ git push
|
|
|
509
581
|
<step name="confirm">
|
|
510
582
|
## 7. Confirm
|
|
511
583
|
|
|
584
|
+
Output the request summary banner:
|
|
585
|
+
|
|
512
586
|
```
|
|
513
587
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
514
588
|
VIEPILOT ► REQUEST CREATED ✓
|
|
@@ -523,15 +597,33 @@ git push
|
|
|
523
597
|
File: .viepilot/requests/{TYPE}-{N}.md
|
|
524
598
|
|
|
525
599
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
526
|
-
|
|
527
|
-
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
Then — **Claude Code adapter (terminal): use AskUserQuestion**:
|
|
528
603
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
/vp-
|
|
533
|
-
|
|
604
|
+
```
|
|
605
|
+
question: "Request {TYPE}-{N} logged. What would you like to do next?"
|
|
606
|
+
options:
|
|
607
|
+
- label: "Plan phase + tasks → /vp-evolve"
|
|
608
|
+
description: "Create ROADMAP entry, phase dir, and task files now (Recommended)"
|
|
609
|
+
- label: "Create another request → /vp-request"
|
|
610
|
+
description: "Log more requests before planning"
|
|
611
|
+
- label: "Done for now"
|
|
612
|
+
description: "Exit — request is saved in backlog"
|
|
613
|
+
```
|
|
534
614
|
|
|
615
|
+
**On selection:**
|
|
616
|
+
- "Plan phase + tasks → /vp-evolve": invoke `/vp-evolve` skill
|
|
617
|
+
- "Create another request → /vp-request": invoke `/vp-request` skill
|
|
618
|
+
- "Done for now": print brief confirmation and exit
|
|
619
|
+
|
|
620
|
+
**Text fallback (Cursor, Codex, Copilot, Antigravity — AUQ not available):**
|
|
621
|
+
```
|
|
622
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
623
|
+
Next:
|
|
624
|
+
- /vp-evolve Plan phase/tasks + ROADMAP
|
|
625
|
+
- /vp-request Create another request
|
|
626
|
+
- /vp-request --list View all requests
|
|
535
627
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
536
628
|
```
|
|
537
629
|
</step>
|