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.
Files changed (43) hide show
  1. package/CHANGELOG.md +203 -0
  2. package/README.md +11 -9
  3. package/docs/dev/agents.md +131 -0
  4. package/docs/skills-reference.md +12 -0
  5. package/docs/user/features/adapters.md +51 -0
  6. package/docs/user/features/interactive-prompts.md +83 -0
  7. package/lib/adapters/antigravity.cjs +2 -1
  8. package/lib/adapters/claude-code.cjs +2 -1
  9. package/lib/adapters/codex.cjs +2 -1
  10. package/lib/adapters/copilot.cjs +44 -0
  11. package/lib/adapters/cursor.cjs +2 -1
  12. package/lib/adapters/index.cjs +1 -0
  13. package/lib/viepilot-install.cjs +9 -0
  14. package/package.json +1 -1
  15. package/skills/vp-audit/SKILL.md +15 -0
  16. package/skills/vp-auto/SKILL.md +12 -0
  17. package/skills/vp-brainstorm/SKILL.md +34 -0
  18. package/skills/vp-crystallize/SKILL.md +51 -1
  19. package/skills/vp-debug/SKILL.md +12 -0
  20. package/skills/vp-docs/SKILL.md +28 -6
  21. package/skills/vp-evolve/SKILL.md +32 -0
  22. package/skills/vp-info/SKILL.md +12 -0
  23. package/skills/vp-pause/SKILL.md +12 -0
  24. package/skills/vp-proposal/SKILL.md +12 -0
  25. package/skills/vp-request/SKILL.md +36 -0
  26. package/skills/vp-resume/SKILL.md +12 -0
  27. package/skills/vp-rollback/SKILL.md +12 -0
  28. package/skills/vp-status/SKILL.md +12 -0
  29. package/skills/vp-task/SKILL.md +12 -0
  30. package/skills/vp-ui-components/SKILL.md +12 -0
  31. package/skills/vp-update/SKILL.md +12 -0
  32. package/templates/proposal/docx/project-detail.docx +0 -0
  33. package/templates/proposal/pptx/general.pptx +0 -0
  34. package/templates/proposal/pptx/product-pitch.pptx +0 -0
  35. package/templates/proposal/pptx/tech-architecture.pptx +0 -0
  36. package/workflows/audit.md +72 -37
  37. package/workflows/autonomous.md +138 -9
  38. package/workflows/brainstorm.md +61 -0
  39. package/workflows/crystallize.md +219 -8
  40. package/workflows/documentation.md +26 -11
  41. package/workflows/evolve.md +76 -7
  42. package/workflows/request.md +99 -7
  43. package/workflows/rollback.md +39 -7
@@ -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. GitHub username? (optional)
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
- - Ask: "Continue? (y/n)" — abort if n.
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
- modules: [] # if monorepo
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: [] # fields not resolved by user input
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. For each MUST-DETECT field that is MISSING **pause and ask user to provide value**. Do not proceed until all MUST-DETECT fields are filled.
549
- 3. Present ASSUMED fields in a confirmation table → user may accept all with "y" or override individually.
550
- 4. Capture all user responses; update Scan Report fields accordingly.
551
- 5. All remaining unresolved items → `open_questions[]`.
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 GitHub remote URL (supports both HTTPS and SSH formats)
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
- # Extract owner/repo slug
24
- # https://github.com/0-CODE/viepilot.git → 0-CODE/viepilot
25
- # git@github.com:0-CODE/viepilot.git → 0-CODE/viepilot
26
- GITHUB_SLUG=$(echo "$REMOTE_URL" | sed 's|.*github\.com[:/]||; s|\.git$||')
27
- GITHUB_OWNER=$(echo "$GITHUB_SLUG" | cut -d'/' -f1)
28
- GITHUB_REPO=$(echo "$GITHUB_SLUG" | cut -d'/' -f2)
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 "$GITHUB_OWNER" ]; then
32
- GITHUB_OWNER="{GITHUB_OWNER}"
33
- GITHUB_REPO="{GITHUB_REPO}"
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 `$GITHUB_OWNER`, `$GITHUB_REPO` throughout all generated files.
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
 
@@ -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
- Based on changes:
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
- | Mode | Version Bump |
258
- |------|--------------|
259
- | Add Feature | MINOR (x.Y.z) |
260
- | New Milestone | MAJOR or MINOR |
261
- | Refactor | PATCH (x.y.Z) |
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
- Next: /vp-auto --from {new_phase}
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>
@@ -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
- Next Steps
527
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
600
+ ```
601
+
602
+ Then — **Claude Code adapter (terminal): use AskUserQuestion**:
528
603
 
529
- /vp-request --list View all requests
530
- /vp-evolve ROADMAP + phase/tasks (before code)
531
- /vp-auto Implement theo task plan (sau evolve)
532
- /vp-request Create another request
533
- /vp-status See overall progress
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>